Sicheres Löschen eines Ordners mit dem Namen "~" [duplizieren]

1

Diese Frage hat hier bereits eine Antwort:

Ich programmiere, mit dem ich einige Dateien ausgegeben habe, habe die Abkürzung "~" (Verzeichnis) anscheinend nicht sehr gut verstanden und einige Tricks gemacht, die mich verwirrt haben.

Anstatt die Dateien dort abzulegen, wo ich sie erwarten würde (/ home / me), hat es einen Ordner mit dem Namen "~" in seinem Unterverzeichnis erstellt. (irgendein Programm / ~)

drwxr-xr-x 3 me users 4096 Jan 30 09:34 ~

Wenn ich eine CD einlege, komme ich zurück zu / home / me

Ist das nur ein Hardlink? Ich stelle mir vor, wenn ich versuche, es zu löschen, wird mein privater Ordner gelöscht. Wie kann ich es sicher entfernen und nicht alles löschen?

Doug Miller
quelle
Haben Sie versucht, den festen Link zu löschen? Sie müssen feststellen, ob Sie mit einem Hardlink zu tun haben oder nicht.
Ramhound
@ Ramhound Es ist kein Hardlink. Nun, sollte nicht sein (Hyposaurus, stellen Sie sicher, dass Sie die Inode von diesem und dem tatsächlichen Home-Verzeichnis vergleichen, um sicherzustellen, dass es sich um eine Tilde-Erweiterung in Bash handelt).
Bob
@ Bob schien nicht wie einer nach 30 Sekunden Recherche über harte Links / -)
Ramhound
1
@Ramhound Ein Hardlink besteht im Wesentlichen aus zwei Dateien, die auf dieselben Daten auf der Festplatte (Inode) verweisen. Wenn Sie eine 'Datei' eines Hardlinks löschen, wird nur der Zeiger entfernt, während Sie die Daten ändern (oder abschneiden), werden die tatsächlichen Daten überschrieben und 'beide Dateien ändern'. Wenn es sich nicht um einen Hardlink handelt und es sich (wie in diesem Fall) um eine Shell-Erweiterung handelt, kann das Löschen leider zu unerwünschtem Datenverlust führen. Verwenden Sie immer, rm -iwenn Sie unsicher sind, und fragen Sie nach, ob Sie dies können (in diesem Sinne - danke, dass Sie zuvor gefragt haben, anstatt zu löschen und nach einer Wiederherstellung zu fragen!).
Bob
Es ist kein Hardlink: inode from / home / me 20185089, from other dir 28579771
Doug Miller

Antworten:

2

Es sollte kein fester Link sein, da Ordner meines Wissens nur durch root fest verbunden werden können und dies aufgrund von Systemeinschränkungen möglicherweise auch dann nicht möglich ist. Um sicherzugehen, versuchen Sie Folgendes (verwechseln Sie \ nicht mit /):

unlink \~

(Sie müssen das ~ maskieren, sonst interpretiert die Shell es als "Unlink $ HOME").

Beachten Sie, dass durch das Aufheben der Verknüpfung der Link entfernt wird, auch wenn es sich um eine reguläre Datei handelt (jedoch nicht, wenn es sich um ein Verzeichnis handelt).

Wenn es sich um ein Verzeichnis handelt, gehen Sie wie folgt vor:

rm -Ri \~

Entkomme wieder der Tilde. Sie möchten rm -Ri ausführen, damit Sie vor jedem Entfernen dazu aufgefordert werden, falls Sie vergessen, der Tilde zu entkommen, und versehentlich Ihr Heimatverzeichnis entfernen.

ecube
quelle
Ein zusätzliches Maß an Sicherheit kann erreicht werden, indem der vollständige Pfad verwendet wird, z. B.rm -Ri /path/to/the/tilde/\~
ernie
Es ist kein fester Link und es ist ein Verzeichnis und 'rm -Ri / home / me / Code / junk / \ ~' möchte in mein Home-Verzeichnis absteigen. Nichts wird gelöscht, aber es sieht so aus, als würde keiner dieser Befehle mir helfen.
Doug Miller
@ Hyposaurus das macht keinen Sinn. Es gibt absolut keine Verbindung zwischen /whatever/path/~und ~als $HOME. Die Shell wird nur so interpretiert, ~als $HOMEwäre sie das erste Zeichen eines Pfades und sollte niemals erweitert werden \~. Der Befehl sollte Sie nur fragen rm: remove directory ‘/home/me/Code/junk/~’?und Sie sollten mit Ja antworten und das ist alles. Wenn es sich in Ihre absteigend $HOME, es ist etwas anderes passiert. Wenn ja, ls -id $HOME /home/me/Code/junk/~'
poste
1

Die Tilde-Erweiterung wird nur von der Shell ausgeführt, wenn ein Wort mit beginnt ~. Innerhalb oder am Ende eines Wortes gibt es keine spezielle Behandlung von ~. Dies gilt auch für viele Shells (bash, zsh, pdksh, tcsh, dash, jsh, sash). Es gibt auch einige Shells, die die Tilde-Expansion nicht kennen (sh (Bourne-Shell), ash)

Wenn Sie es also schließen oder stattdessen einen Pfad verwenden ~, wird nichts erweitert. Es spielt keine Rolle, ob es sich um einen relativen oder einen absoluten Pfad handelt, es muss nur etwas vorher sein ~.

rm -Ri \~
rm -Ri '~'
rm -Ri "~"
rm -Ri ./~
rm -Ri /full/path/~
Adaephon
quelle