Префикс rc -эти две буквы обозначают статус пакетов следующим образом:
Сначала нам нужно получить список пакетов, которые были удалены, оставив конфигурацию:
dpkg --list | grep "^rc linux-image" | cut --delimiter " " --fields 3
Получив список, мы можем вручную очистить эти пакеты ядра, например.:
sudo apt-get purge linux-image-4.10.0-20-generic linux-image-extra-4.10.0-20-generic
Заметьте, на самом деле мы всегда удаляем два пакета:
Одной из проблем, с которой вы, возможно, столкнетесь, является предупреждение о том, что каталог библиотеки ядра не был удален, поскольку он не пуст. Я решил, что оставлю все как есть, потому что мне придется гуглить еще час для объяснения, могу ли я просто:
sudo rm -rf /lib/modules/4.10.0-20-generic/
У вас не может быть трубы внутри [... ]
. Также лучше использовать pgrep
, чем пытаться анализировать выводps
:
count=0
while [ "$count" -lt 10 ] && pgrep relayevent.sh >/dev/null; then
sleep 3
count=$(( count + 1 ))
done
Системы BSD могли бы использовать pgrep -q...
вместо pgrep... >/dev/null
для отбрасывания фактического вывода pgrep
, как и в случае обычногоgrep
(нас интересует только статус выхода ).
Обратите внимание, что мы не помещаем команду pgrep
в [... ]
. Это потому, что нас не интересует его вывод, а только его статус выхода. С помощью [... ]
вы обычно сравниваете строки или числа. [... ]
приведет к статусу выхода, который будет нулевым (истинным )или не -нулевым (ложным ), точно так же, как выполнение pgrep
.
Однако при этом не проверяется наличие каких-либо механизмов блокировки, а проверяется только то, запущен конкретный процесс или нет.
Если вы пытаетесь запустить только один экземпляр скрипта,тогда лучше сделать что-то вроде этого (, предполагая, что ловушка EXIT
выполняется всякий раз, когда сценарий завершается по порядку):
lockdir=dir.lock
if mkdir "$lockdir"; then
trap 'rmdir "$lockdir"' EXIT
else
echo 'Only one instance of this script allowed' >&2
exit 1
fi
С несколькими попытками и сном:
lockdir=dir.lock
count=0
while [ "$count" -lt 10 ]; then
if mkdir "$lockdir"; then
trap 'rmdir "$lockdir"' EXIT
break
else
echo 'Locked. Sleeping...' >&2
sleep 3
fi
count=$(( count + 1 ))
done
if [ "$count" -eq 10 ]; then
echo 'Giving up.' >&2
exit 1
fi
Связанные: