Перенаправляет ли overlayfs открытые файлы автоматически на лету?

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

1
05.09.2017, 18:23
2 ответа

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

Если вы откроете файл /somewhere/somefile, затем смонтируете файловую систему в /somewhere, то после этой точки /somewhere/somefileназначит файл в новой файловой системе. Но это имеет значение только тогда, когда вы открываете /somewhere/somefile. Если процесс уже открыл /somewhere/somefileв исходной файловой системе, это не изменится.

Перенаправление открывает файл, когда оболочка обрабатывает оператор перенаправления. После этого он остается одним и тем же открытым файлом, даже если задействовано несколько процессов. Например, в приведенном ниже фрагменте программа2записывает в файл по адресу /mnt/log.txtв корневом разделе, тогда как программа3записывает в /log.txtна /dev/something.

do_stuff () {
  program1
  mount /dev/something /mnt
  program2
  program3 >/mnt/log.txt
}
do_stuff >/mnt/log.txt

Если вы уже запустили программу и хотите изменить направление ее вывода, вам нужно попросить программу сделать это. Теоретически вы можете заставить программу сделать это с помощью отладчика — в этой веткеперечислены некоторые программы, которые могут это сделать. Но использование такой программы может привести к ее краху.

Если вам действительно нужно изменить то, где вывод программы находится на полпути, вам нужно передать вывод через помощника, который может изменить свой собственный вывод. Вот небольшое доказательство концепции в сценарии оболочки:

my_background_process | {
  while IFS= read -r line; do
    printf '%s\n' "$line" >>/mnt/log.txt
  done
} &

Этот сценарий открывает выходной файл для каждой строки, поэтому, если файл, обозначенный как /mnt/log.txt, изменяется (поскольку файл имеет был перемещен, так как новая файловая система была смонтирована в /mntи т. д.), то последующие строки будут записаны в новый файл.Обратите внимание, что вам нужно указать имя каталога: просто >log.txtэто всегда будет открывать файл в текущем каталоге, поэтому на него не повлияет операция монтирования (текущий каталог работает как открытый файл: монтирование чего-либо в /mntне влияет на то, что процессы видят в качестве своего текущего каталога, даже если их текущий каталог — /mnt).

1
27.01.2020, 23:44

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

0
27.01.2020, 23:44

Теги

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