Как получить переменные, расширенные в выводе команды jobs

В большинстве случаев это относительно легко исправить. Вы можете сгенерировать список всех установленных пакетов, используя каталог / 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

1
14.02.2019, 11:11
1 ответ

Обратите внимание, что это не процессы , которые вы ставите на передний план, а задания, созданные из команды оболочки, которая может быть составной командой, запускающей несколько процессов параллельно (, как в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
2
27.01.2020, 23:30

Теги

Похожие вопросы