В:
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
Возможно, вы могли бы посоветовать своему администратору использовать хорошие методы ведения журнала. Gnu Screen делает это очень хорошо. Он добавляет немного больше функциональности, чем вы ищете, а также имеет возможность переключать ведение журнала, чтобы он мог выключить его сам, если пожелает. В нем отсутствует функция воспроизведения, но он может быть частью решения, поскольку отслеживает большую часть ввода и вывода при включенной регистрации.
В вашем случае вам нужно добавить deflog на
в файл screenrc, чтобы новые окна по умолчанию при входе в систему.
Однако это имеет тот недостаток, что пользователь может его переключать.
Вы можете выполнять мониторинг файлов с помощью Monit , который следит за контрольными суммами файлов на предмет изменений, а также может проверять условия различных служб. Объедините это с чем-то вроде rsync в cronjob (так как у вас должно быть что-то подобное в любом случае), и вы получите довольно твердое представление о том, что именно происходит на сервере, особенно если вы включите действительно жесткие временные метки на экране и доверяете своему пользователю не возиться с настройками логирования.
Комбинируя эти инструменты, вы должны получить довольно надежную и легкую систему, которая позволит вам пристально следить за своим пользователем, обеспечивая при этом базовый уровень восстановления.