Antworten:
TL; DR ... löschen Sie einfach den Dateinamen, den Sie nicht möchten (mit rm
).
Wenn Sie einen festen Link erstellen (wie in Ihrem obigen Befehl beschrieben), haben Sie zwei Namen, die auf denselben Speicherbereich verweisen. Sie können jeden Namen löschen, ohne den anderen Namen oder den Speicher zu beeinflussen. Erst wenn der Nachname entfernt wird, wird der Speicherbereich freigegeben.
Vergleichen Sie dies mit Softlinks ... erstellt mit ln -s
- dort ist der Link anders, es ist eher ein Zeiger auf den ursprünglichen Namen als ein Zeiger auf den Speicher. Wenn Sie die ursprünglich benannte Datei löschen, verweisen die Softlinks auf etwas, das gelöscht wurde. Der Link bleibt also bestehen, ist jedoch fehlerhaft.
Der Befehl zum Entfernen einer festen Verbindung lautet rm
.
Aus der Manpage für rm
:
Remove (unlink) the FILE(s).
Ich bin mir Ihrer Bedeutung ein wenig unsicher, aber ich denke, Ihr Skript wird /myfile
als Hardlink zu /dev/…/myfile
letzterem erstellt , und dann möchten Sie letzteres entfernen.
Wenn dies korrekt ist, können Sie anstelle der Verknüpfung und dann der Entfernung der Verknüpfung einfach die Datei verschieben und das gleiche Ergebnis in einem einzigen Befehl (mv) anstelle von zwei Befehlen (ln und rm) erzielen:
mv /dev/…/myfile /
Die meisten vorhandenen Antworten befürworten die Verwendung rm
. Dies ist völlig korrekt, da Sie keine Dateien entfernen: Sie entfernen Links (und die Datei wird entfernt, wenn der letzte darauf verweisende Link entfernt und der letzte geöffnete Dateideskriptor geschlossen wird).
Sie sollten sich jedoch auch eines anderen Dienstprogramms bewusst sein unlink
. Es fehlen die Optionen von rm
und es gibt immer eine implizite -f
Option (irgendwie - es wird jedoch bei einer fehlenden Datei fehlschlagen). Der Vorteil ist, dass Sie eine Datei, die mit einem Bindestrich beginnt, zumindest theoretisch entfernen können ...
... außer Sie können nicht, wenn Sie ein Linux-System verwenden, weil die GNU das unlink
Dienstprogramm durch Hinzufügen von Unterstützung für Befehlszeilenoptionen lahmgelegt hat! Entfernt unlink -t
also keine Datei, die -t
auf einem Linux-System oder einem anderen System mit den GNU-Coreutils benannt ist.
(Ja, das weiß ich rm -- -t
oder unlink -- -t
funktioniert, dazu muss ich nichts sagen .)
unlink -f foobar
gibt usage: rm [-f | -i] [-dPRrvW] file ...
es also nicht nur GNU. Auch wenn es so war, na und? Wenn Sie Dateinamen haben, die mit Bindestrichen beginnen, müssen Sie wissen, ob sie verwendet werden sollen, --
oder ./
irgendwann hilft es nicht viel, wenn es nur eine Anwendung gibt, die keine Befehlszeilenoptionen verwendet.
unlink
Dienstprogramm, obwohl es Standard ist, so dunkel, dass OpenBSD es nicht einmal in seinem Basissystem hat.
/dev/${uniquename}
Verzeichnis ist bereits vorhanden/myfile
und/dev/{uniquename}/.
befindet sich im selben Dateisystem.