файл журнала для сканирования fsck
Технически "файл журнала" для
fsck
- это стандартный выход / стандартный ошибка . Это может быть перенаправлено и захвачено, но это не обязательно так.Помните, что при запуске
fsck
файловая система недоступна для записи, поэтому дело не только в&> /var/log/mountall.log
. Его вывод должен быть захвачен, а затем в какой-то момент зарегистрирован.Используя
/ forcefsck
или эквивалентный параметр ядра (например,fsck.mode = force
), фактический fsck запускается init (в случае параметра ядра, через который он передается, поэтому он не может быть универсальным по форме). Как init обрабатывает это, зависит от init; очевидно, выскочка на Ubuntu сохраняет вывод и регистрирует его (возможно, продолжайте читать). Systemd, похоже, сообщает некоторые подробности через системный журнал (если он включен, и, предположительно, в свой собственный журнал).Я не уверен, что системы, основанные на Debian до 8 (systemd), регистрируют это вообще или даже то, как это было обработано. Сценарий SysV
/etc/init.d/mountall.sh
не относится к fsck, но, конечно,mount
вызовет его автоматически, если файловая система не была проверена достаточно недавно (это может быть то, что вы на самом деле привыкли видеть в файле mountall.log выскочки, поэтому раньше я написал «возможно»).Таким образом, обработка "forcefsck", вероятно, встроена прямо в исполняемый файл SysV init. Он действительно выводит на консоль, но я никогда не замечал, чтобы это было записано где-нибудь в Debian.
Если вы хотите проверить последний раз, когда файловая система была fsck'd, используйте:
dumpe2fs -h /dev/[node]| grep "Mount count"
Где [узел] - настоящий раздел. Это количество раз, когда fs монтировался с момента последней проверки (минимум 1, если он в настоящее время смонтирован).
ВBash
:
#!/usr/bin/env bash
if [ "$#" -eq 0 ]
then
printf "Missing argument\n" >&2
exit 1
fi
num_of_delimiters="$(grep -o '|' <<< "$1" | wc -l)"
sting="$(sed -E 's,\s+\|,|,g' <<< "$1")"
sting="$(sed -E 's,\|\s+,|,g' <<< "$sting")"
case "$num_of_delimiters" in
1)
echo "$(cut -d '|' -f1 <<< "$sting")"=ID and "$(cut -d '|' -f2 <<< "$sting")"=Name
;;
2)
echo "$(cut -d '|' -f1 <<< "$sting")" = ID and "$(cut -d '|' -f2 <<< "$sting")" = Name and \
"$(sed 's/./\U&/' <<< "$(cut -d '|' -f3 <<< "$sting")")" = OS
;;
*)
printf "More than 2 delimiters or no delimiters\n" >&2
exit 2
esac
Он также будет печатать пробелы, как вы показали в своем примере, и будет преобразовать первую букву третьего слова в верхний регистр. Примеры:
$./sting.sh "2 | Ram"
2=ID and Ram=Name
$./sting.sh "1 |Chris|ubuntu"
1 = ID and Chris = Name and Ubuntu = OS
https://www.shellcheck.net/
не сообщает об ошибках.
awk -F '|' '
{ printf("%d = ID and %s = Name", $1, $2) }
NF == 3 { printf(" and %s = OS", $3) }
{ printf("\n") }' file
Это будет генерировать
1 = ID and Chris = Name and ubuntu = OS
2 = ID and Ram = Name
для приведенных данных. Код awk
просто вставляет два первых поля в шаблон формата printf
. Если доступно третье поле, часть ОС выводится в той же строке. Затем строка завершается символом новой строки.
Привет с Миллером http://johnkerl.org/miller/doc, начиная с этого входного файла
1|Chris|ubuntu
2|Ram
и работает
mlr --ifs "|" label ID,Name,OS input.csv
У вас будет
ID=1,Name=Chris,OS=ubuntu
ID=2,Name=Ram