«/etc/ssh/sshd _config» всегда изменяется другим процессом

Кажется, что следующие программы делают примерно то же самое, и на самом деле они не отличаются. Но это неправда.

#!/bin/bash 
s=-1000
for (( i=0; i<1000000; i++ )), do
    s=$((s+1))
echo $s

Это правильный способ реализации. Выражение s+1 оценивается оболочкой и может быть присвоено переменной.

#!/bin/bash
s=-1000
for (( i=0; i<1000000; i++ )), do
    s=`expr $s+1`
echo $s

Здесь выражение будет вычислено программой expr, которая является не встроенной в оболочку, а внешней программой Unix. Таким образом, вместо простого добавления 1 и s программа должна быть запущена, и ее вывод должен быть прочитан и записан в переменную. Запуск программы требует много ресурсов и много времени. И эта программа запускается 1000000 раз. Так программа будет намного медленнее предыдущей. Тем не менее код работает корректно.

#!/bin/bash -e
s=-1000
for (( i=0; i<1000000; i++ )), do
    ((s=s+1))
echo $s

Если флаг -e не установлен, программа также будет работать корректно. Но если -e установлено, когда s= -1 и ((s=s+1 вычисляется )). Выражение s=s+1 оценивается как 0, а код выхода ((0 ))>0, что интерпретируется оболочкой как ошибка, и оболочка завершает работу программы.

Причина установки флага -e состоит в том, что это самый простой способ :остановки обработки ошибок в случае возникновения ошибки.

1
17.09.2021, 07:40
1 ответ
  • Вы можете использовать инструменты, реализующие fanotify()API ядра. Например, fanotify -cmd работает отлично. Нет необходимости редактировать какие-либо системные файлы или анализировать журналы.

    ./fm -a /etc/passwd
    checking for events FAN_ACCESS
    mask: FAN_ACCESS, fd: 4, pid: 203188, file: /etc/passwd, command: bash 
    mask: FAN_ACCESS, fd: 4, pid: 203190, file: /etc/passwd, command: 
    mask: FAN_ACCESS, fd: 4, pid: 203321, file: /etc/passwd, command: ls --color=auto -l /etc/passwd
    
  • Или вы можете использовать auditd. Поскольку это системный демон, вам необходимо отредактировать системный файл конфигурации auditd в /etc. В сети есть много руководств по их использованию, например. на самом stackexchange .

    inotifywaitк сожалению, не работает для этого варианта использования, поскольку он просто показывает файлы, к которым обращаются или изменяют, но не показывает, какой процесс это делает.

2
17.09.2021, 09:07

Теги

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