break
- это то, что вы ищете.
exit
завершает процесс оболочки при вызове. Когда вы получаете свои сценарии оболочки, они запускаются в вашей текущей оболочке. Это означает, что когда исходный сценарий оболочки достигает выхода
, он завершает работу вашей оболочки.
break
, с другой стороны, просто оставляет текущую структуру цикла, а в вашем случае - цикл while.
Из руководства bash:
break
break [n]
Exit from a for, while, until, or select loop. If n is supplied, the
nth enclosing loop is exited. n must be greater than or equal to 1.
The return status is zero unless n is not greater than or equal to 1.
Нет, файловая система не хранит, какая программа создала файл. Вам нужно выбрать их вручную. Если первый запуск программы был совсем недавно, вы можете использовать find
для предварительного -выбора файлов, которые могли быть созданы ею.
Как сказал Ханс -Мартин Моснер в своем ответе , не хранится никакой информации, которая идентифицирует, какая программа создала или изменила конкретный файл или каталог.
Тем не менее, вы можете использовать find
для поиска вещей, которые программа возможно создала или модифицировала. Вы можете сделать это, сначала создав «файл отметки времени», а затем запустив программу. После запуска find
может быть запрошено найти все измененные файлы на основе их меток времени относительно файла меток времени.
Создать файл временной метки:
touch stamp
Запустить программу.
Запустите find
, чтобы найти элементы, время модификации которых новее, чем файл метки времени:
find / -newer stamp
или, если вы знаете, какому пользователю предположительно принадлежат файлы,
find / -user someuser -newer stamp
Обратите внимание, что выполнение команды find
может занять значительное время, если только вы не сузите путь поиска /
верхнего -уровня до определенного подкаталога, в котором могли иметь место изменения. Также обратите внимание, что любое имя пути, созданное приведенной выше командой find
, возможно, не было затронуто конкретной программой, которую вы запустили . С момента создания файла stamp
могло быть запущено любое количество других программ, которые также могли создавать или изменять файлы.
Если вы знаете перед запуском программы, то можете пометить программный набор -gid в специальную группу.
Может быть, вы можете сделать это и запустить его снова, чтобы увидеть, в какое место он их поместит.
Если вы заранее знаете, что хотите следить за тем, что делает программа, интерфейс ядра, такой как sysdig
или SystemTap
, может записывать контрольный журнал (или, возможно, strace
, но это будет медленный и потребует идеальной оболочки вокруг программы для трассировки, и, надеюсь, sudo
никогда не будет запущен... ). Вам также необходимо учитывать, что происходит, когда какая-либо другая программа создает выходные данные в рамках рассматриваемой программы :Должен ли также отслеживаться любой дочерний процесс?
perl -e 'qx(echo subshell-io > foo)'
Контрольный журнал каждого файла, затронутого каждой программой (, плюс другие метаданные, такие как пользователь и группа (s ), родительский pid и т. д. ), безусловно, возможен. Однако это может быть дорого в настройке, дорого в создании и дорого в обслуживании. Вероятно, потребуются некоторые средства фильтрации записей, чтобы исключить (некоторые, но, возможно, не все)/tmp
записи в каталог, чтобы, возможно, объединить несколько вызовов записи passwd.tmp
/ rename("passwd.tmp","passwd")
в одну логическую операцию, а также как вы обрабатываете случай, когда интересующая вас программа изменяет, скажем,/etc/passwd
(среди многих других возможных общих файлов ОС ), которые вы, вероятно, затем не хотите удалять вслепую при очистке после программы... или как вы справляетесь с делегированным Ввод-вывод, где ваша программа использует dbus, а затем какой-то другой процесс из-за какого-то случайного не -сообщения ввода-вывода по dbus генерирует ввод-вывод в другом месте из-за вашей программы...
Если вы можете заставить программу снова записать файлы, tracefile
может помочь вам:
tracefile -ue bash -c 'seq 10 | xargs -n1 touch'
https://gitlab.com/ole.tange/tangetools/-/tree/master/tracefile