Datei unter Linux entfernen?

#7373736
Lesenswert?

Du schaust, welche inode die datei hat:

1
  ls -i

Wenn Du die inode herrausgefunden hast, dann löscht Du sie über den find Befehl:

1
  find . -inum 16011003 -exec rm -i {} \;

Bei mir war die inode 16011003, Deine wird logischerweise anders sein. Aus Sicherheitsgründen wird rm mit der Option -i verwendet, d.h. Du musst jede gelöschte Datei bestätigen.

Und nicht in Panik geraten: Der find Befehl kann etwas länger dauern.

#7373789
Lesenswert?

Weshalb wird hier soviel Wind um eine vollkommen triviale Aufgabe gemacht?

1
~/tmp/x$ ls -l 
2
insgesamt 0
3
~/tmp/x$ > '-L-.-..log'
4
~/tmp/x$ ls -l 
5
insgesamt 0
6
-rw------- 1 norbert norbert 0 18. Mär 10:32 -L-.-..log
7
~/tmp/x$ rm -i -- '-L-.-..log'
8
rm: reguläre leere Datei '-L-.-..log' entfernen? y
9
~/tmp/x$ ls -l 
10
insgesamt 0
11
~/tmp/x$
Moderator #7373799
Lesenswert?

(prx) A. K. schrieb:

Die gehobene Fragestellung ist, wie man ein File weg bekommt, dessen Name die Länge 0 hat. Das hatte ich vor langer Zeit in AIX und beschloss, damit zu leben.

Eine vorangehende Frage wäre, wie man so eine Datei überhaupt erstellt. Evtl. liefert die Antwort auf diese Frage auch einen Hinweis darauf, wie die Datei wieder gelöscht werden kann.

#7373803
Lesenswert?

(prx) A. K. schrieb:

Ein T. schrieb:

Und das ging nicht über den Inode? 8-O

Weiss ich nicht mehr, ist zig Jahre her. Vielleicht hatte ich es nicht versucht. Jedenfalls ging es nicht über den Namen, weil das Prinzip, mit dem Pfade im Kernel abgearbeitet werden, das nicht ermöglichte.

Ja, natürlich... Ach, ich wußte schon, warum AIX und ich in diesem Leben sicherlich keine innigen Freunde mehr werden. ;-)

(Firma: Arge f. t. abgeh. Technologie) #7373874
Lesenswert?

Die korrekte Antwort rm -- filename wurde schon gegeben.

Ich möchte noch etwas Unix-Basics hinzufügen, das ist nämlich kein Zufall, daß das so funktioniert.

Normalerweise werden Optionen mit getopt(3) oder einer verwandten Library geparsed. Und dort gilt: Sobald "--" gefunden wird, werden die folgenden Argumente nicht mehr als Optionen gelesen.

Literatur: man getopt

GUI oder Inode-Magie wird nicht benötigt.

Dazu, wie man einen directory entry mit leerem Filenamen zusammenbringt (egal ob Linux, BSD oder AIX, das zu seiner Zeit durchaus attraktiv war und dem wir beispielsweise den heutigen lvm verdanken), fällt mir allerdings zumindest mit Shell-Mitteln auch nichts ein.

Moderator #7373928
Lesenswert?

Alexander T. schrieb:

Dazu, wie man einen directory entry mit leerem Filenamen zusammenbringt (egal ob Linux, BSD oder AIX, das zu seiner Zeit durchaus attraktiv war und dem wir beispielsweise den heutigen lvm verdanken), fällt mir allerdings zumindest mit Shell-Mitteln auch nichts ein.

Ich habe gerade mal versucht, eine bestehende Datei in '' umzubenennen, indem ich im vorher abgemounteten Ext4-Filesystem mit dem Hexeditor einfach die Länge des Dateinamens auf 0 gesetzt habe. Versuche ich das Verzeichnis mit ls aufzulisten, erscheint zunächst die Fehlermeldung "bad message", was aber wohl daher kommt, dass wegen der Änderung im entsprechenden Directory-Block die Prüfsumme nicht mehr stimmt. Eine Prüfung mit e2fsck gibt die folgenden Fehler aus:

1
Entry '' in ??? (2) has a zero-length name.
2
Clear<y>? no
3
Entry '' in ??? (2) has a zero-length name.
4
Clear<y>? no
5
Directory inode 2, block #0: directory passes checks but fails checksum.
6
Fix<y>? yes

Lasse ich nur die Prüfsumme korrigieren, führt ein erneutes ls zu einem I/O-Error. Lasse ich auch die Zero-Length-Fehler korrigieren, werden die entsprechenden Directory-Einträge einfach gelöscht.

#7373947
Lesenswert?

Mit ext2 getestet. Geht auch nichts verloren. Hatte mich schon erschreckt! ;-)

1
~$ cd tmp
2

3
~/tmp$ truncate --size 1M IMAGE
4

5
~/tmp$ ls -l
6
    -rw------- 1 norbert norbert 1048576 18. Mär 13:45 IMAGE
7
    
8
~/tmp$ /sbin/mkfs.ext2 IMAGE 
9
    mke2fs 1.46.2 (28-Feb-2021)
10
    Geräteblöcke werden verworfen: erledigt                        
11
    Ein Dateisystem mit 1024 (1k) Blöcken und 128 Inodes wird erzeugt.
12

13
    beim Anfordern von Speicher für die Gruppentabellen: erledigt                        
14
    Inode-Tabellen werden geschrieben: erledigt                        
15
    Die Superblöcke und die Informationen über die Dateisystemnutzung werden
16
    geschrieben: erledigt
17

18
~/tmp$ su -
19
Passwort: 
20

21
root@Entwicklung:~# losetup -f '/tmp/norbert/IMAGE' 
22

23
root@Entwicklung:~# losetup -a
24
    /dev/loop1: [0038]:907 (/tmp/norbert/IMAGE)
25
    
26
root@Entwicklung:~# mount /dev/loop1 /mnt/
27

28
root@Entwicklung:~# vi /mnt/testfile
29
    Zeile 1
30
    ...
31
    ...
32
    ...
33
    Zeile n
34

35
root@Entwicklung:~# umount /mnt 
36
Abgemeldet
37

38
##### Directory Eintrag auf Länge 0 patchen #####
39
~/tmp$ ghex IMAGE 
40

41
~/tmp$ su -
42
Passwort: 
43

44
root@Entwicklung:~# mount /dev/loop1 /mnt/
45

46
root@Entwicklung:~# ls -l /mnt/
47
    ls: das Verzeichnis '/mnt/' wird gelesen: Eingabe-/Ausgabefehler
48
    insgesamt 12
49
    drwx------ 2 root root 12288 18. Mär 13:45 lost+found
50

51
root@Entwicklung:~# umount /mnt 
52

53
root@Entwicklung:~# e2fsck -f /tmp/norbert/IMAGE 
54
    e2fsck 1.46.2 (28-Feb-2021)
55
    Durchgang 1: Inodes, Blöcke und Größen werden geprüft
56
    Durchgang 2: Verzeichnisstruktur wird geprüft
57
    Eintrag „“ in / (2) hat einen Namen der Länge Null.
58
    Bereinigen<jy>? ja
59
    Durchgang 3: Verzeichnisverknüpfungen werden geprüft
60
    Durchgang 4: Referenzzähler werden überprüft
61
    Nicht verbundener Inode 14
62
    Nach /lost+found verbinden<jy>? ja
63
    Der Referenzzähler von Inode 14 ist 2, sollte aber 1 sein.  Reparieren<jy>? ja
64
    Durchgang 5: Zusammengefasste Gruppeninformation wird geprüft
65

66
    /tmp/norbert/IMAGE: ***** DATEISYSTEM WURDE VERÄNDERT *****
67
    /tmp/norbert/IMAGE: 12/128 Dateien (0.0% nicht zusammenhängend), 39/1024 Blöcke
68

69
root@Entwicklung:~# mount /dev/loop1 /mnt/
70

71
root@Entwicklung:~# ls -l /mnt/.
72
    ./  ../ 
73

74
root@Entwicklung:~# ls -l /mnt/lost+found/
75
    insgesamt 1
76
    -rw-r----- 1 root root 28 18. Mär 13:47 '#14'
77

78
root@Entwicklung:~# cat /mnt/lost+found/#14 
79
Zeile 1
80
...
81
...
82
...
83
Zeile n
Moderator #7373977
Lesenswert?

Norbert schrieb:

Yalu X. schrieb:

Lasse ich auch die Zero-Length-Fehler korrigieren, werden die entsprechenden Directory-Einträge einfach gelöscht.

Und nichts im lost+found?

Doch, natürlich. Dort findet sich die Datei als #<inode-nummer> wieder (wie auch in deinem eigenen Versuch in deinem nächsten Beitrag). Aber der Directory-Eintrag mit dem leeren Dateinamen ist weg, und der leere Dateiname wurde auch nicht ins lost+found übernommen.

Das (nicht erreichte) Ziel meiner Versuche war es ja, das Filesystem so zu manipulieren, dass am Ende folgendes möglich ist:

1
# ls -l /mnt/test/
2
total 179
3
-rw-r--r-- 1 root root 181894 18. Mär 14:48 ''
4
drwx------ 2 root root   1024 18. Mär 14:38  lost+found

Als nächstes hätte man sich dann dann dieser Frage zuwenden können:

(prx) A. K. schrieb:

Die gehobene Fragestellung ist, wie man ein File weg bekommt, dessen Name die Länge 0 hat. Das hatte ich vor langer Zeit in AIX und beschloss, damit zu leben.

Am besten natürlich mit regulären Shell-Mitteln und ohne direkte Manipulation des Filesystems.

Aber das Ansinnen, eine Datei mit leerem Dateinamen zu erzeugen, scheint – zumindest unter Linux mit Ext4-Filesystem – bereits nachhaltig im Keim erstickt zu werden.

#7373982
Lesenswert?

Yalu X. schrieb:

Aber das Ansinnen, eine Datei mit leerem Dateinamen zu erzeugen, scheint – zumindest unter Linux mit Ext4-Filesystem – bereits nachhaltig im Keim erstickt zu werden.

Ja das stimmt, zumal ja sämtliche Zeichen außer Path-Separator und 0x00 erlaubt sind. Damit käme (absolut betrachtet) der <NULL>-String dem Verzeichnispfad gleich und das mag das System so gar nicht. Dieser Colt schießt nicht in den eigenen Fuß!

#7373988
Lesenswert?

Auch nett, diesmal hauptsächlich in Windows, sind Files mit Leerzeichen hinten dran. Man kann die problemlos erzeugen und wieder löschen - aber nicht so, wie man es gewohnt ist. Auf den üblichen Wegen genutzt, kann man damit Leute zur Verzweiflung bringen, denn darin werden solche Leerzeichen im Aufruf automatisch entfernt, bevor das Filesystem den Namen sieht.

#7374008
Lesenswert?

Windows … Ich muss immer schmunzeln wenn jemand im Explodierer - oder wie das Ding heißt - bei einer Datei nur Groß- und Kleinschreibung ändern will.

Umbenennen - Case ändern. Enter. Verdammt.

Umbenennen - Case ändern und zB. ein X dran hängen. Enter.

Umbenennen - X wieder wegnehmen. Enter.

Wer denkt sich so etwas aus?

#7374020
Lesenswert?

Norbert schrieb:

Wer denkt sich so etwas aus?

Kudos letztlich an Tim Paterson und Gary Kildall. Will man mit Filesystemen kompatibel sein, die nicht zwischen Klein- und Grossschreibung unterscheiden, ist das nur konsequent.

Als Administrator auszuführen:

1
fsutil.exe file SetCaseSensitiveInfo C:\windows\system32 enable

Mach aber vorher ein Backup.

Moderator #7374060
Lesenswert?

Norbert schrieb:

Explodierer

Als ich mal testen wollte, welche Dateinamen in Windows erlaubt sind, habe ich von einem Linux-Client aus auf einem Server mit NTFS erfolgreich eine Datei namens "..." angelegt, was ja unter Linux nichts Besonderes und auch in Windows nicht explizit verboten ist. Leider habe ich vergessen, das Verzeichnis mit den Testdateien direkt wieder zu löschen.

Etwa ein Jahr später erhielt ich von einem für den Server zuständigen IT-Kollegen einen aufgeregten Anruf: Anlässlich der Installation einer neuen Serverhardware wollte er die Daten umkopieren, was aber trotz mehrerer Versuche immer an einer ganz bestimmten meiner Dateien scheiterte. Erst war ich etwas verwundert, dann erinnerte ich mich wieder an den Test und habe die Datei natürlich sofort gelöscht ;-)

Mittlerweile wird das Anlegen solcher Dateien serverseitig unterbunden.

Ähnliche Probleme gab es mit stark verschachtelten Verzeichnisstrukturen und der damit verbundenen Gesamtpfadlänge von mehr als 260 Zeichen, die zwar in NTFS angelegt werden konnten, dem Explorer aber große Probleme bereiteten. M.W. ist auch dieses Problem inzwischen zumindest teilweise behoben bzw. durch Workarounds umgehbar.

#7374201
Lesenswert?

(prx) A. K. schrieb:

Die gehobene Fragestellung ist, wie man ein File weg bekommt, dessen Name die Länge 0 hat. Das hatte ich vor langer Zeit in AIX und beschloss, damit zu leben.

rm -Rf .. ;-)

Yalu X. schrieb:

Ähnliche Probleme gab es mit stark verschachtelten Verzeichnisstrukturen und der damit verbundenen Gesamtpfadlänge von mehr als 260 Zeichen, die zwar in NTFS angelegt werden konnten, dem Explorer aber große Probleme bereiteten. M.W. ist auch dieses Problem inzwischen zumindest teilweise behoben bzw. durch Workarounds umgehbar.

Liegt die Grenze in Win nicht schon seit ewigen Zeiten bei 1k direkt adressierbarer Pfad/File-Länge? Klar, viele Tools sind da nicht mitgewachsen, und verstehen immer noch nur 256 lange Pfade. Aber üblicherweise kann man ja solche überlangen Pfade auch step by step entlang hangeln, und dann dort sein Unwesen treiben ...

#7374886
Lesenswert?

Norbert schrieb:

Weshalb wird hier soviel Wind um eine vollkommen triviale Aufgabe gemacht?

Insbesondere, wenn man bedenkt, dass die Fehlermeldung bereits vorschlägt, wie man das lösen kann. Es hätte gereicht, diesen Vorschlag per copy/paste zu übernehmen…

Jens G. schrieb:

Klar, viele Tools sind da nicht mitgewachsen, und verstehen immer noch nur 256 lange Pfade.

Die Längenbeschränkung liegt wohl nicht bei 256, sondern lustigerweise bei 260. Wenn man mehr haben will, muss man das wohl erst explizit aktivieren: https://learn.microsoft.com/de-de/windows/win32/fileio/maximum-file-path-limitation?tabs=registry#enable-long-paths-in-windows-10-version-1607-and-later

#7375186
Lesenswert?

Rolf M. schrieb:

Die Längenbeschränkung liegt wohl nicht bei 256, sondern lustigerweise bei 260.

Vermutlich wegen der Extension. Ich glaube, früher war der Dateityp auch nicht auf allen Systemen teil des Dateinamens (z.B. bei MacOS). Und bei FAT12 auf Disketten ist die Extension ein separates 3 Zeichen Feld. 1 Byte für die Dateinamenlänge sind maximal 256 Bytes, dazu 3 für die Extension und ein Byte für den . sind 260 bytes.

https://www.eit.lth.se/fileadmin/eit/courses/eitn50/Literature/fat12_description.pdf

Moderator #7375210
Lesenswert?

Le X. schrieb:

Wurde hier auf dem Arbeitsrechner (glaub Win 10) gerade erfolgreich getestet.

Ja, kann ich bestätigen. Unter Windows 10 kann man Dateien umbenennen, auch wenn sich der neue Name vom alten nur in der Groß-/Kleinschreibung unterscheiden. Mit älteren Versionen (Windows 7) hatte ich aber auch gegenteilige Erfahrungenb gemacht.

Daniel A. schrieb:

Rolf M. schrieb:

Die Längenbeschränkung liegt wohl nicht bei 256, sondern lustigerweise bei 260.

Vermutlich wegen der Extension.

Nein, es ist das "C:\" am Anfang des Pfads. Danach dürfen noch 256 Zeichen folgen, macht zusammen 260. Siehe

Rolf M. schrieb:

https://learn.microsoft.com/de-de/windows/win32/fileio/maximum-file-path-limitation?tabs=registry#enable-long-paths-in-windows-10-version-1607-and-later

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren