Есть ли способ удалить все файлы/директории, созданные программой?

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.
1
07.04.2019, 20:28
5 ответов

Нет, файловая система не хранит, какая программа создала файл. Вам нужно выбрать их вручную. Если первый запуск программы был совсем недавно, вы можете использовать findдля предварительного -выбора файлов, которые могли быть созданы ею.

0
27.01.2020, 23:23

Как сказал Ханс -Мартин Моснер в своем ответе , не хранится никакой информации, которая идентифицирует, какая программа создала или изменила конкретный файл или каталог.

Тем не менее, вы можете использовать findдля поиска вещей, которые программа возможно создала или модифицировала. Вы можете сделать это, сначала создав «файл отметки времени», а затем запустив программу. После запуска findможет быть запрошено найти все измененные файлы на основе их меток времени относительно файла меток времени.

  1. Создать файл временной метки:

    touch stamp
    
  2. Запустить программу.

  3. Запустите find, чтобы найти элементы, время модификации которых новее, чем файл метки времени:

    find / -newer stamp
    

    или, если вы знаете, какому пользователю предположительно принадлежат файлы,

    find / -user someuser -newer stamp
    

Обратите внимание, что выполнение команды findможет занять значительное время, если только вы не сузите путь поиска /верхнего -уровня до определенного подкаталога, в котором могли иметь место изменения. Также обратите внимание, что любое имя пути, созданное приведенной выше командой find, возможно, не было затронуто конкретной программой, которую вы запустили . С момента создания файла stampмогло быть запущено любое количество других программ, которые также могли создавать или изменять файлы.

3
27.01.2020, 23:23

Если вы знаете перед запуском программы, то можете пометить программный набор -gid в специальную группу.

Может быть, вы можете сделать это и запустить его снова, чтобы увидеть, в какое место он их поместит.

1
27.01.2020, 23:23

Если вы заранее знаете, что хотите следить за тем, что делает программа, интерфейс ядра, такой как sysdigили SystemTap, может записывать контрольный журнал (или, возможно, strace, но это будет медленный и потребует идеальной оболочки вокруг программы для трассировки, и, надеюсь, sudoникогда не будет запущен... ). Вам также необходимо учитывать, что происходит, когда какая-либо другая программа создает выходные данные в рамках рассматриваемой программы :Должен ли также отслеживаться любой дочерний процесс?

perl -e 'qx(echo subshell-io > foo)'

Контрольный журнал каждого файла, затронутого каждой программой (, плюс другие метаданные, такие как пользователь и группа (s ), родительский pid и т. д. ), безусловно, возможен. Однако это может быть дорого в настройке, дорого в создании и дорого в обслуживании. Вероятно, потребуются некоторые средства фильтрации записей, чтобы исключить (некоторые, но, возможно, не все)/tmpзаписи в каталог, чтобы, возможно, объединить несколько вызовов записи passwd.tmp/ rename("passwd.tmp","passwd")в одну логическую операцию, а также как вы обрабатываете случай, когда интересующая вас программа изменяет, скажем,/etc/passwd(среди многих других возможных общих файлов ОС ), которые вы, вероятно, затем не хотите удалять вслепую при очистке после программы... или как вы справляетесь с делегированным Ввод-вывод, где ваша программа использует dbus, а затем какой-то другой процесс из-за какого-то случайного не -сообщения ввода-вывода по dbus генерирует ввод-вывод в другом месте из-за вашей программы...

0
27.01.2020, 23:23

Если вы можете заставить программу снова записать файлы, tracefileможет помочь вам:

tracefile -ue bash -c 'seq 10 | xargs -n1 touch'

https://gitlab.com/ole.tange/tangetools/-/tree/master/tracefile

1
12.04.2020, 08:06

Теги

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