
Ich habe ein Skript, das mit ein temporäres Verzeichnis erstellt mktemp -d
.
Ein im temporären Verzeichnis generierter Ordner ist die Ausgabe des Skripts, die in einen anderen Teil des Computers kopiert wird.
Ich habe überlegt, ln
denselben Ordner zu verwenden, anstatt den Inhalt woanders hin zu kopieren. Ich habe mich gefragt, ob er noch vorhanden wäre, wenn die Version des Ordners im /tmp
Verzeichnis vom Betriebssystem bereinigt würde?
Antwort1
Dies hängt davon ab, wo sich Ihr temporäres Verzeichnis befindet. Das heißt, haben Sie Ihr eigenes temporäres Verzeichnis erstellt oder verwenden Sie das ( /tmp
) des Systems?
In Ihrem Szenario erwarten Sie, dass die Dateien/Ordner nach der Bereinigung des temporären Verzeichnisses erhalten bleiben.
Wenn es sich im /tmp
Verzeichnis des Systems befindet, wird es möglicherweise vom System bereinigt (es ist distributionsspezifisch, aber die meisten haben einen cron
Job oder ähnliches).
Darüber hinaus erstellen einige Distributionen ihr /tmp
Verzeichnis mit , tmpfs
was bedeutet, dass der Inhalt im RAM/Swap gespeichert wird und einen Neustart nicht übersteht.
Die Dateien bleiben nur dann zugänglich, wenn Sie einehartLink. Allerdings können Hardlinks nur innerhalb eines einzelnen gemounteten Dateisystems erstellt werden. Sie können keinen Hardlink zwischen einem tmpfs
/tmp
zu einem (z. B.) ext4
auf gemounteten Dateisystem erstellen /mystuff
.
Sie können einweichLink von /mystuff
zu einem Ort auf einem tmpfs
gemounteten Server, /tmp
aber wenn die temporären Dateien gelöscht werden, zeigt der Link auf „nirgendwohin“, was den Zweck ein wenig verfehlt!
Wenn die Dateien Ihrer Distribution auf einer physischen Festplatte gespeichert sind /tmp
, die sich auf demselben Mount befindet wie der Speicherort, an dem Sie Ihre Dateien speichern möchten ( /mystuff
), funktioniert ein Hardlink, solange der Link vor der Bereinigung des Systems erstellt wird /tmp
.
Antwort2
Ich habe ein Beispiel gemacht, um die Dinge klarer zu machen.
In einem bestimmten Verzeichnis habe ich zwei Dateien erstellt.
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.
Angenommen, Sie verwendenHardlinkswie oben, um auf Ihre Dateien im /tmp
Verzeichnis zu verweisen. Mal sehen, was passiert, wenn ich die Quelldatei lösche.
rm sourcefile
rm: remove regular file `sourcefile'? y
ls
destfile
cat destfile
This is the sourcefile
Im obigen Szenario destfile
ist weiterhin zugänglich.
Sehen wir uns nun an, was passiert, wenn wir Softlinks verwenden.
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
Lassen Sie uns nun gemäß Ihrem Szenario die Quelldatei löschen und sehen, was passiert.
rm sourcefile
rm: remove regular file `sourcefile'? y
ls
destfile
cat destfile
cat: destfile: No such file or directory
Wenn Sie also einen Softlink verwenden, sind die Daten möglicherweise nicht vorhanden.
BEARBEITEN
Ich habe die mktemp
zum Erstellen einer temporären Datei verwendet und eineFester Linkvom /tmp
Verzeichnis zu einem meiner Arbeitsverzeichnisse.
Ich habe den Rechner neu gestartet, um zu prüfen, ob die Inhalte auch nach dem Neustart verfügbar sind. Wenn ichHardlinks, der Inhalt ist auch nach dem Neustart verfügbar. Der Grund für diese Überprüfung ist, dass das /tmp
Verzeichnis beim Neustart normalerweise gelöscht wird.