Как лучше всего отслеживать приключения начинающего администратора

В:

cat */* > bigtextfile.txt

Оболочка расширится */* в отсортированный список (нескрытых) файлов соответствия, и выполнится cat с теми путями к файлам как аргументы.

cat откроет каждый файл в свою очередь и запишет на его stdout, что он читает из файла. cat не будет содержать больше чем один буферизует полный данных (что-то как несколько килобайтов) за один раз в памяти.

Проблема, с которой можно встретиться, хотя то, что список аргументов cat является столь большим, что это достигает предела размера аргументов execve() системный вызов. Так, Вы, возможно, должны разделить тот список файлов и работать cat несколько раз.

Вы могли использовать xargs для этого (здесь с GNU или BSD xargs для нестандартного -r и -0 опции):

printf '%s\0' */* | xargs -r0 cat -- > big-file.txt

(потому что printf создается в оболочке, она не проходит execve системный вызов, таким образом, не через его предел).

Или имейте find составьте список файлов и выполните столько же команд кошки по мере необходимости:

find . -mindepth 2 -maxdepth 2 -type f -exec cat {} + > big-file.txt

Или портативно:

find . -path './*/*' -prune -type f -exec cat {} + > big-file.txt

(остерегайтесь хотя это вопреки */*, это будет включать скрытые файлы (и файлы в скрытых каталогах), не искать файлы в символьных ссылках на каталоги, и список файлов не будет отсортирован).

Если на последней версии Linux, можно снять предел на размер аргументов путем выполнения:

ulimit -s unlimited
cat -- */* > big-file.txt

С zsh, Вы могли также использовать zargs:

autoload zargs
zargs -- */* -- cat > big-file.txt

С ksh93, можно использовать command -x:

command -x cat -- */* > big-file.txt

Все они делают то же самое, разделяют список файлов и работают как многие cat команды по мере необходимости.

С ksh93 снова, можно двигаться execve() предел при помощи встроенного cat команда:

command /opt/ast/bin/cat -- */* > big-file.txt
8
26.08.2015, 11:40
1 ответ

Возможно, вы могли бы посоветовать своему администратору использовать хорошие методы ведения журнала. Gnu Screen делает это очень хорошо. Он добавляет немного больше функциональности, чем вы ищете, а также имеет возможность переключать ведение журнала, чтобы он мог выключить его сам, если пожелает. В нем отсутствует функция воспроизведения, но он может быть частью решения, поскольку отслеживает большую часть ввода и вывода при включенной регистрации.

В вашем случае вам нужно добавить deflog на в файл screenrc, чтобы новые окна по умолчанию при входе в систему.

Однако это имеет тот недостаток, что пользователь может его переключать.

Вы можете выполнять мониторинг файлов с помощью Monit , который следит за контрольными суммами файлов на предмет изменений, а также может проверять условия различных служб. Объедините это с чем-то вроде rsync в cronjob (так как у вас должно быть что-то подобное в любом случае), и вы получите довольно твердое представление о том, что именно происходит на сервере, особенно если вы включите действительно жесткие временные метки на экране и доверяете своему пользователю не возиться с настройками логирования.

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

2
27.01.2020, 20:13

Теги

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