Итак, получается, я неправильно понял auditctl. Я смог использовать его, чтобы выследить преступника.
Оказывается это был индикатор -sysmonitor . Он периодически умирает в Ubuntu, поэтому я завернул его в скрипт, который перезапускает его каждую минуту. Я предполагаю, что он создает этот файл только при запуске, и, возможно, то, как я его убиваю, не дает ему возможности очиститься. (Я предполагаю, что ошибка произошла с моей стороны, а не из-за того, что она не смогла очиститься после себя.)
Для потомков, вот как я это выследил.
Сначала я начал auditd
смотреть/tmp
:
$ sudo auditctl -w /tmp
Затем, после просмотра достаточно долго, чтобы зарегистрировать создание одного из файлов, я выбрал самый последний и искал его в журналах:
$ ls -lt /tmp/tmp*.svg | head -n 1
-rw------- 1 me me 262 Jul 5 13:42 /tmp/tmp4i0zh3mj.svg
$ ausearch -i -f /tmp/tmp4i0zh3mj.svg
Выходные данные содержат несколько записей нескольких процессов, но только один, чей nametype
равен CREATE
. Команда(proctitle
)этого была /usr/bin/python3 /usr/bin/indicator-sysmonitor
.
$ awk -F, '{ count=0; for(i=1; i<=NF; i++) count+=$i==""
print NR, count? "ERROR" :"CORRECT";
}' infile
1 ERROR
2 ERROR
3 ERROR
4 CORRECT
5 ERROR
6 ERROR
если вы хотите напечатать количество пустых столбцов вместо номера строки:
$ awk -F, '{ count=0; for(i=1; i<=NF; i++) count+=$i==""
print count? count " ERROR":"All CORRECT"
}' infile
1 ERROR
4 ERROR
3 ERROR
All CORRECT
1 ERROR
3 ERROR
$ awk '{print NR, (/^,|,,|,$/ ? "ERROR" : "CORRECT")}' file
1 ERROR
2 ERROR
3 ERROR
4 CORRECT
5 ERROR
6 ERROR
Я бы использовал awk
для этой цели.
awk -F',' '{for(i=1;i<=NF;i++) { if($i=="") error[NR]++} print (error[NR])? NR " ERROR":NR " CORRECT"}' file.csv
for(i=1;i<=NF;i++) { if($i=="") error[NR]++}
. Это выражение ищет пустые столбцы ($1==""
), и всякий раз, когда оно находит пустой столбец, значение error[NR]
увеличивается на 1. Если это не находит пустого столбца, тогда error[NR]
ложно. Например, нет значения error[4]
. Посмотрим:
awk -F',' '{for(i=1;i<=NF;i++) { if($i=="") error[NR]++ } print "error[" NR"] =", error[NR]}' file.csv
error[1] = 1
error[2] = 4
error[3] = 3
error[4] =
error[5] = 1
error[6] = 3
Поскольку error[4]
ложно, печатается утверждение после :NR " CORRECT"}'
. Если error[NR]
истинно, утверждение после ? печатается.