Проверьте, работает ли он из живого сеанса или нет внутри сценария оболочки

У меня есть сценарий оболочки, который может быть запущен только из сеанса в реальном времени (LiveCD или Live USB), потому что он сжимает корневую файловую систему фактической установки, что может быть сделано только тогда, когда файловая система не смонтирована.

Если скрипт запускается из живого сеанса, он должен продолжить его выполнение. Если нет, он должен потерпеть неудачу.

Я не могу найти способ разграничить живой сеанс и «обычный» пользовательский сеанс, так как живой сеанс имеет внешний вид очень похожий на установленные системные сеансы. Пока что я могу сказать только то, что живые сеансы всегда имеют ubuntu в качестве имени хоста, но я не могу на это полагаться, так как пользователь может выбрать это при установке Ubuntu.

Есть ли способ идентифицировать это в скрипте / командной строке оболочки?

(я колебался между публикацией на Ask Ubuntu или Stack Overflow , я могу удалите сообщение и повторите публикацию на Переполнение стека , если это более уместно)

2
задан 2 April 2014 в 22:21

2 ответа

Нет, имя произвольно, Вы ничего не можете принять на основе этого. Однако Живая сессия действительно имеет несколько причуд, таких как:

$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
0
ответ дан 2 April 2014 в 22:21

Существует много отличительных признаков между живой сессией и нормальной сессией. В первом выстреле это прибывает в мой ум, что нет никакого реального пользователя на живой сессии. Можно использовать это.

Так, не было бы никакого 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
0
ответ дан 2 April 2014 в 22:21

Другие вопросы по тегам:

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