различное дерево мерзавца-r - резюме 1.0 2.0
должно сделать это.
Вы также можете просто разделить список деревьев:
diff <(git ls-tree -r --name-only 1.0) <(git ls-tree -r --name-only 2.0)
-121--128425- Хотя это решение может выглядеть длиннее, оно на самом деле намного меньше кода и легко тестируется. Часть проблемы заключается в том, что вы начали с некачественного сценария. Обычно конвейеры с несколькими командами awk
могут использовать усовершенствование. Я не знаю, лучше ли следующее для вашей ситуации, но я надеюсь, что это даст больше понимания одного способа решения этой проблемы.
Чтобы получить целое значение из потока xml, можно использовать awk
так:
awk '
/<key>bootHow<\/key>/ {
getline
gsub("[^0-9]*integer[^0-9]*", "");
print;
}
'
/< key > bootHow <\/key >/
обращается к строке, которая будет изменена действиями внутри фигурных скобок {...}
. getline
считывает следующую строку ввода в $0. Следующая строка должна содержать целочисленный код. gsub
удаляет все нецифровые данные из строки. напечатайте
строку. awk
не печатает строки по умолчанию. Включив это в функцию и записав другую функцию для преобразования целого значения в последовательность описание, мы можем придумать что-то вроде протестированного кода ниже.
Функция boothow
инкапсулирует сценарий awk
, описанный выше.
Функция dfstatus
считывает коды bootHow из стандартных входных данных и распечатывает соответствующие последовательности состояния df на стандартных выходных данных.
Сценарий в настоящее время настроен для тестирования. Выполнение этого теста позволит выполнить некоторые тестовые данные. Строка, вызывающая deepfreeze
, комментируется:
#!/bin/sh
deepfreeze_status() {
deepfreeze=/Library/Application\ Support/Faronics/Deep\ Freeze/deepfreeze
if [ ! -x "$deepfreeze" ]
then
status="DeepFreeze not installed"
else
status=$(
DFXPSWD=password "$deepfreeze" -u user -p status -x |
boothow |
dfstatus
)
fi
echo "<result>$status</result>"
}
test_boothow() {
# test boothow and dfstatus functions:
dfdata='
<integer>a</integer>
<key>other1</key>
<integer>b</integer>
<key>bootHow</key>
<integer>1</integer>
<key>other2</key>
<integer>c</integer>
'
echo "$dfdata" | boothow | dfstatus
}
boothow() {
awk '
/<key>bootHow<\/key>/ {
getline
gsub("[^0-9]*", "");
print;
}
'
}
dfstatus() {
while read bhow
do
case $bhow in
0) echo "frozen" ;;
1) echo "boot thawed for next x reboots" ;;
2) echo "boot thawed" ;;
*) echo "unknown status '$bhow'"; return 1 ;;
esac
done
}
test_boothow
#deepfreeze_status
В следующей расшифровке сценарий был сохранен как ./myscript.sh
.
При запуске ./myscript.sh
(обратите внимание на одиночный .
), интерактивная оболочка считывает и выполняет сценарий в текущем процессе оболочки . Функции будут существовать и доступны как команды в текущей оболочке.
$ . ./myscript.sh
boot thawed for next x reboots
Теперь в текущей оболочке доступны команды boothow
и dfstatus
и test _ boothow
и deepfreeze _ status
. Протестируйте команду boothow
:
$ boothow
<key>bootHow</key>
<integer>2</integer>
2
$ printf '<key>bootHow</key>\n<integer>2</integer>\n' | boothow
2
Проверьте команду dfstatus
, включая код состояния выхода ( $?
):
$ dfstatus
0
frozen
1
boot thawed for next x reboots
2
boot thawed
3
unknown status '3'
$ echo $?
1
$
$ echo 1 | dfstatus
boot thawed for next x reboots
$ echo $?
0
$ echo 1 1 | dfstatus
unknown status '1 1'
$ echo $?
1
$
-121--195013- du
, что не совпадает с суммой всех размеров файла.
Например, du -b файл
будет давать другой результат, чем создание каталога «dir», размещать тот же файл в «dir» и du -b dir
. В моей системе это 30 дополнительных байтов для «служебных данных» каталога. В зависимости от содержимого каталога, я полагаю, что размер каталога изменится (но я был бы удивлен, если бы он был совершенно линейным).
Также относительный размер разницы подразумевает, что вы могли пропустить скрытый каталог с довольно большим количеством файлов в нем,или что вы могли пропустить много скрытых файлов (даже если вы действительно использовали флаг -a).
Кроме того, могут существовать символьные ссылки, которые вызывают различия, если один инструмент следует за ними, а другой нет.
Наконец, в некоторых файловых системах, если содержимое файла достаточно мало, оно может быть встроено в файловую систему INode, а во многих файловых системах один блок зарезервирован для хранения содержимого файла, даже если этот блок используется не полностью. Эти вариации добавляют дополнительный шум при попытке сравнить эти два.
Вы, безусловно, можете просмотреть импортированный atop
файл журнала на другой машине, на которой работает atop
, так как atop
работает в собственном двоичном формате, и каждый файл представляет собой самостоятельный -репозиторий/БД статистики.
Вы также можете увидеть это непосредственно с удаленной машины, выполняющей:
ssh remote_machine "sudo atop -r /var/log/atop/atop_20180904"
В конечном счете, если вы хотите отслеживать в журнале несколько серверов Unix, может быть более практичным на данный момент отслеживать их через SNMP с чем-то вроде Cacti .