могут мы Представление содержание на файлах журнала, которые отправили от удаленной машины на локальной машине

различное дерево мерзавца-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, а во многих файловых системах один блок зарезервирован для хранения содержимого файла, даже если этот блок используется не полностью. Эти вариации добавляют дополнительный шум при попытке сравнить эти два.

0
04.09.2018, 20:43
1 ответ

Вы, безусловно, можете просмотреть импортированный atopфайл журнала на другой машине, на которой работает atop, так как atopработает в собственном двоичном формате, и каждый файл представляет собой самостоятельный -репозиторий/БД статистики.

Вы также можете увидеть это непосредственно с удаленной машины, выполняющей:

ssh remote_machine "sudo atop -r /var/log/atop/atop_20180904"

В конечном счете, если вы хотите отслеживать в журнале несколько серверов Unix, может быть более практичным на данный момент отслеживать их через SNMP с чем-то вроде Cacti .

1
28.01.2020, 02:42

Теги

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