В большинстве случаев это относительно легко исправить. Вы можете сгенерировать список всех установленных пакетов, используя каталог / lib
с:
dpkg -S /lib | awk -F': ' '{ print $1 }' | tr -d ,
Если вы переустановите эти пакеты, это должно решить проблему:
apt-get --reinstall $(dpkg -S /lib | awk -F': ' '{ print $1 }' | tr -d ,)
Это, конечно, зависит от удаленного каталога, а не критичен для apt-get
.Пакеты, необходимые для работы apt-get
, придется устанавливать вручную, возможно, даже без dpkg
. В этом случае пакет может быть извлечен на другой компьютер, а файлы скопированы на место, позже они будут переустановлены с помощью apt
, так что это не должно вызвать никаких других проблем.
Глядя на мой собственный список пакетов, помещающих файлы в / lib
, я вижу, что основные из них - это ядро (все модули идут в / lib / modules
) и libc
. Это два, которые почти наверняка придется переустановить, чтобы система стала загрузочной. Один из способов сделать это - установить из действующей системы на основе Debian. Если вы загрузите необходимые пакеты и смонтируете корень целевой системы, вы можете добавить параметр - root
в dpkg
для установки, например:
dpkg --root=/path/to/target/root -i package1.deb package2.deb ...
] - параметр root
также может использоваться с первой командой dpkg
, если необходимо. Конечно, если проявить достаточно терпения и навыков, можно будет отремонтировать онлайн. Если команда dpkg
не работает, вы всегда можете попытаться найти зависимости пакетов непосредственно в / var / lib / dpkg / info
и найти пакеты, помещающие файлы в / lib
через файлы .list
в / var / lib / dpkg / info
.
Чтобы дать представление о том, чего можно достичь, вот блог о человеке, которому удалось восстановить работающую систему Gentoo, где все пакеты были удалены.Это делает чтение интересным, плюс некоторые из используемых методов (или предложенных в комментариях) могут быть применены в такой ситуации - http://fakeguido.blogspot.co.uk/2010/08/rescuing -hosed-system-using-only-bash.html
Обратите внимание, что это не процессы , которые вы ставите на передний план, а задания, созданные из команды оболочки, которая может быть составной командой, запускающей несколько процессов параллельно (, как вsleep 10 | sleep 20 &
)или один после другой (как вfor i in {1..10}; do sleep $i; done &
).
И каждый из этих процессов может, в свою очередь, запускать другие процессы (, которые по-прежнему будут частью задания, но неизвестны zsh
как непрямые потомки )или могут изменить список своих аргументов, как сообщает ps
(. ] как в sh -c 'exec env sleep 10'
, который запускает процесс, который выполняет sh
, затем env
, затем sleep
все в одном процессе )или может оставить задание (, став новый лидер группы процессов ).
Похоже, что для каждого задания вы хотите увидеть список аргументов процессов в этом задании.
Может быть, что-то вроде:
for job state ("${(@kv)jobstates}") {
pgid=${${state%%=*}##*:}
echo Job $job:
pgrep -ag $pgid
}
Что на вашем примере дает что-то вроде:
Job 2:
26590 sleep 1
Job 3:
26591 sleep 2
Job 4:
26592 sleep 3
Job 5:
26593 sleep 4
Job 6:
26594 sleep 5
Job 7:
26595 sleep 6
Job 8:
26596 sleep 7
Job 9:
26597 sleep 8
Job 10:
26598 sleep 9
Job 11:
26599 sleep 10