
У меня есть скрипт, который создает временный каталог с помощью mktemp -d
.
Папка, созданная во временном каталоге, представляет собой результат работы скрипта, который будет скопирован в другую часть машины.
Я думал использовать ln
ту же папку вместо копирования содержимого куда-то еще. Мне было интересно, останется ли она, если версия папки в каталоге /tmp
будет очищена ОС?
решение1
Это зависит от того, где находится ваш временный каталог. То есть, создали ли вы свой собственный временный каталог или используете системный ( /tmp
)?
В вашем сценарии вы ожидаете, что файлы/папки останутся после очистки временного каталога.
Если он находится в системном /tmp
каталоге, то он вполне может быть очищен системой (это зависит от дистрибутива, но у большинства есть своя cron
задача или что-то подобное).
Кроме того, некоторые дистрибутивы создают свои /tmp
каталоги, используя tmpfs
, что означает, что их содержимое хранится в оперативной памяти/разделе подкачки и не сохраняется после перезагрузки.
Файлы останутся доступными только в том случае, если вы создадитежесткийссылка. Однако жесткие ссылки могут быть созданы только в пределах одной смонтированной файловой системы. Вы не можете создать жесткую ссылку между a tmpfs
/tmp
и (например) ext4
файловой системой, смонтированной на /mystuff
.
Вы можете создатьмягкийссылка откуда /mystuff
-то на tmpfs
смонтированный объект, /tmp
но когда временные файлы будут удалены, ссылка будет указывать на «никуда»; что немного нарушает объект!
Если файлы вашего дистрибутива находятся /tmp
на физическом диске, который смонтирован в том же месте, где вы планируете хранить файлы ( /mystuff
), то жесткая ссылка будет работать, если она будет создана до очистки системы /tmp
.
решение2
Я привел пример, чтобы все стало гораздо понятнее.
Внутри определенного каталога я создал 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
Поэтому, если вы используете мягкую ссылку, данных может не быть.
РЕДАКТИРОВАТЬ
Я использовал mktemp
для создания временного файла и создалжесткая ссылкаиз /tmp
каталога в один из моих рабочих каталогов.
Я перезагрузил машину, чтобы проверить, доступно ли содержимое после перезагрузки. Если я используюжесткие ссылки, содержимое доступно и после перезагрузки. Причина проверки в том, что при перезагрузке каталог /tmp
обычно очищается.