Ссылки на/tmp файлы удалены?

Вы не используете ; с '& ', '&' самостоятельно достаточно для окончания команды. Я полагаю, что в настоящее время нет никакого упоминания об этом поведении в руководстве. Ваш цикл просто был бы:

for dir in $(ls); do command $dir & done

Кроме того, необходимо рассмотреть использование шарика вместо $(ls) который перестанет работать, если имя файла будет содержать пробел. Можно установить nullglob предотвратить dir быть a * при отсутствии файлов:

shopt -s nullglob
for dir in *; do command $dir & done
2
26.06.2014, 21:46
2 ответа

Это зависит от того, где находится ваш временный каталог. То есть создали ли вы свой собственный временный каталог или используете системный ( / tmp )?

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

Если он находится в системном каталоге / tmp , то он вполне может быть очищен системой (это зависит от дистрибутива, но у большинства из них есть задание cron или подобное).

Кроме того, некоторые дистрибутивы создают свой каталог / tmp , используя tmpfs , что означает, что содержимое хранится в RAM / Swap и не выдерживает перезагрузки.

Файлы останутся доступными только в том случае, если вы создадите жесткую ссылку . Однако жесткие ссылки могут быть созданы только в пределах одной смонтированной файловой системы. Невозможно создать жесткую связь между tmpfs / tmp и (например) файловой системой ext4 , смонтированной на / mystuff .

Вы можете создать мягкую ссылку из / mystuff куда-нибудь на tmpfs , установленную в / tmp , но когда временные файлы удаляются, ссылка будет указывать на «никуда»; который слегка поражает объект!

Если в вашем дистрибутиве есть файлы / tmp на физическом диске, который находится на том же монтировании, что и место, где вы планируете хранить файлы ( / mystuff ), то жесткий диск ссылка будет работать, пока ссылка создается до того, как система очистит / tmp .

3
27.01.2020, 22:00

Я привел пример для того, чтобы сделать вещи намного понятнее.

Внутри определенного каталога я создал 2 файла.

cat sourcefile
This is the sourcefile. 
##This is to create a hard link. 

ln sourcefile destfile

##List the files available. 
ls
destfile  sourcefile

cat destfile
This is the sourcefile. 

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

rm sourcefile
rm: remove regular file `sourcefile'? y
ls
destfile
cat destfile
This is the sourcefile

В вышеприведенном сценарии destfile все еще доступен.

Теперь посмотрим, что произойдет, если мы используем софт-ссылки.

cat sourcefile
This is the sourcefile for softlink example. 
ln -s sourcefile destfile
ls -l
total 4
lrwxrwxrwx 1 root root 10 Jun 26 13:40 destfile -> sourcefile
-rw-r--r-- 1 root root 46 Jun 26 13:40 sourcefile

Теперь, в соответствии с вашим сценарием, давайте удалим исходный файл и посмотрим, что произойдет.

rm sourcefile
rm: remove regular file `sourcefile'? y
ls
destfile
cat destfile
cat: destfile: No such file or directory

Итак, если вы используете мягкую ссылку, данных может не быть.

EDIT

Я использовал mktemp для создания временного файла и создал жесткую ссылку из каталога /tmp в одну из своих рабочих директорий.

Я перезагрузил машину, чтобы проверить, доступно ли содержимое после перезагрузки. Если я использую жесткие ссылки /tmp, то их содержимое будет доступно и после перезагрузки. Причина проверки заключается в том, что во время перезагрузки каталог /tmp обычно удаляется.

1
27.01.2020, 22:00

Теги

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