У меня есть сценарий оболочки, который может быть запущен только из сеанса в реальном времени (LiveCD или Live USB), потому что он сжимает корневую файловую систему фактической установки, что может быть сделано только тогда, когда файловая система не смонтирована.
Если скрипт запускается из живого сеанса, он должен продолжить его выполнение. Если нет, он должен потерпеть неудачу.
Я не могу найти способ разграничить живой сеанс и «обычный» пользовательский сеанс, так как живой сеанс имеет внешний вид очень похожий на установленные системные сеансы. Пока что я могу сказать только то, что живые сеансы всегда имеют ubuntu
в качестве имени хоста, но я не могу на это полагаться, так как пользователь может выбрать это при установке Ubuntu.
Есть ли способ идентифицировать это в скрипте / командной строке оболочки?
(я колебался между публикацией на Ask Ubuntu или Stack Overflow , я могу удалите сообщение и повторите публикацию на Переполнение стека , если это более уместно)
Существует много отличительных признаков между живой сессией и нормальной сессией. В первом выстреле это прибывает в мой ум, что нет никакого реального пользователя на живой сессии. Можно использовать это.
Так, не было бы никакого gid
больше, чем 999 в /etc/passwd
, соответствует любому реальному пользователю кроме nobody
пользователь.
$ awk -F: '($3>=1000){print $1}' /etc/passwd
nobody
следующий сценарий должен работать,
#!/bin/bash
var=$(awk -F: '($3>=1000){print $1}' /etc/passwd | wc -l)
if [[ $var -gt 1 ]]; then
echo "normal session"
else
echo "live session"
fi
Нет, имя произвольно, Вы ничего не можете принять на основе этого. Однако Живая сессия действительно имеет несколько причуд, таких как:
$df -h | grep -w /
/cow 2.0G 42M 1.9G 3% /
, Как Вы видите, специальное устройство /cow
смонтировано на /
. Я не уверен, насколько портативный это, я сомневаюсь, что это будет то же для не Ubuntu Linux, и это может также измениться в будущих выпусках, но, пока это не существующее устройство в /dev
, можно протестировать на это очень легко:
df | grep -w / | grep -q 'cow' && echo "Live session" || echo "Normal install"
df
: распечатайте смонтированные файловые системы grep -w /
: распечатайте только строку, которая показывает то, что смонтировано на /
. -w
опция распознает целые слова только так, чтобы [только 1 110] и не, например /home
были распечатаны. grep -q cow
:-q подавляет вывод, grep
выйдет с состоянием> 0 (ошибка), если cow
не был найден и 0
(корректным), если это было. && echo "Live session" : Print
Живая сессия if the
grep' был успешен || echo "Normal install"
: Еще, распечатайте Normal install
. РЕДАКТИРОВАНИЕ OP
В конце, вот решение, которое я реализовал в своем сценарии, если это несколько полезно:
#!/bin/bash
if [ ! $(df | grep -w / | grep -q '/cow') ]; then
printf "This script must be run from a live session.\n"
exit 1
fi