Некоторые команды GNU, такие как tar и rm, являются неэффективен при работе с большим классом файлов на Lustre . Например, для миллионов файлов команда rm -rf * может занять несколько дней и существенно повлиять на Lustre для других пользователей.
Причина кроется во времени, необходимом для раскрытия подстановочного знака.
Лучший способ сделать это - создать список файлов, которые нужно удалить или пометить, и обрабатывать их по одному или небольшими группами.
Хороший способ просмотреть файлы перед их удалением - это следующее:
$ lfs find -t f > rmlist.txt
$ vi rmlist.txt
$ sed -e 's:^:/bin/rm :' rmlist.txt > rmlist.sh
$ sh rmlist.sh
# the directory structure will remain, but unless there are many directories, we can simply delete it:
$ rm -rf
Некоторые из полезных ссылок для Lustre IO:
1. https://www.nics.tennessee.edu/computing-resources/file-systems/io-lustre-tips
2. https://www.rc.colorado.edu/support/examples-and-tutorials/parallel-io-on-janus-lustre.html
Спасибо!
Как сказано в комментариях, Ctrl -C не убивает процесс tail
, что делается путем отправки либо сигнала SIGTERM, либо сигнала SIGKILL (печально известного -9
.., ); он просто отправляет SIGINT, который сообщает tail
о завершении прямого режима и выходе.
К вашему сведению, это лучший инструмент:
less +F filename
В less
вы можете нажать Ctrl -C , чтобы выйти из режима перемотки и прокрутить файл, затем нажать F , чтобы снова вернуться в режим перемотки.
Обратите внимание, чтоless +F
многие пропагандируют как лучшую альтернативуtail -f
. Чтобы узнать о различиях и предостережениях между двумя инструментами, прочитайте этот ответ:Является ли `хвост -f `более эффективным, чем `меньше +F `?
Это сработает и ответит на ваш вопрос, но не является особенно удовлетворительным решением.
timeout 15s tail -f /var/log/messages
Это запустит команду на 15 секунд, а затем уничтожит ее без необходимости нажимать^C
What I want is a normal way to quit, like q in top.
Это КонтрольС:)
I am just curious about the question, because I feel that killing the process is not a good way to quit something.
^C
(ControlC)отправляет SIGINT процессу, который определен как:
The SIGINT signal is sent to a process by its controlling terminal when a user wishes to interrupt the process
Это именно то, что вы хотите здесь сделать, это прерывание tail
. Нет другого способа выполнить то, что вы пытаетесь сделать ("хорошо" бросить хвост ), и хотя другие ответы позволяют остановить tail
другими способами, они ничем не лучше.
Нажатие ^C
попытается прервать задачу в Linux --это совершенно нормально, и это только «нехорошо», если этот процесс находится в середине чего-то, и вы не даете ему завершиться, а затем единственный «нехороший» побочный эффект — это остатки этого процесса. Например, ^C
в середине команды make
оставляет частично -скомпилированное программное обеспечение, но это нормально :дальнейший запуск make
очистит/возобновит это с того места, где оно было остановлено.
Ответы различаются в зависимости от контекста. Чтобы выйти из tail -f элегантно, вам понадобится триггер. Предположим, вы пытаетесь отслеживать выходные данные задачи, которая завершится в какой-то момент времени -, что может стать вашим триггером.
task >& filename.log &
task_pid=$!
tail -f filename.log &
tail_pid=$!
while [ 1 ]
do
# -0 is a special "poke" signal - "are you around?"
kill -0 $task_pid
if [ $? -eq 0 ]
then
# Original task is still alive.
sleep 2
continue
fi
kill -TERM $tail_pid
break
done
Я использовал подобные идеи в прошлом.
Наслаждайтесь.
Выдача
echo tail -n 1 -f <filename>
работает для меня, хотя я не уверен на 100%, что он завершает хвостовой процесс.