Also ja, wie oft an anderer Stelle angegeben, kann ein Dateiname fast jedes Zeichen enthalten. Aber es muss gesagt werden , dass ein Dateiname ist nicht eine Datei. Es hat einiges Gewicht als Datei trägt Attribut , dass Sie in der Regel einen Dateinamen müssen öffnen eine Datei, sondern eine Name der Datei nur verweist auf die eigentliche Datei. Hierbei handelt es sich um eine Verknüpfung, die in dem Verzeichnis gespeichert ist, in dem sie gespeichert wurde, zusammen mit der Inode-Nummer - eine viel engere Annäherung an eine tatsächliche Datei .
Nennen Sie es also, wie Sie wollen. Der Kernel kümmert sich nicht darum - alle Dateireferenzen, die er verarbeiten wird, werden sowieso mit realen Inode-Nummern umgehen. Der Dateiname ist eine Sache für den menschlichen Verzehr - wenn Sie es zu einer verrückten Sache machen wollen, dann ist es Ihr Dateisystem. Hier mache ich ein paar verrückte Sachen:
Zuerst erstelle ich 20 Dateien und benenne sie mit Leerzeichen. Jeder Dateiname enthält ein Leerzeichen mehr als der letzte:
until [ $((i=$i+1)) -gt 20 ]
do v=$v' ' && touch ./"$v"
done
Das ist irgendwie lustig. Schau dir meine an ls
:
ls -d ./*
./ ./ ./ ./ ./
./ ./ ./ ./ ./
./ ./ ./ ./ ./
./ ./ ./ ./ ./
Jetzt werde ich dieses Verzeichnis spiegeln:
set -- * ; mkdir ../mirror
ls -i1qdU -- "$@" |
sh -c 'while read inum na
do ln -T "$1" ../mirror/$inum
shift ; done' -- "$@"
ls -d ../mirror/*
Hier sind ../mirror/
die Inhalte:
../mirror/423759 ../mirror/423764 ../mirror/423769 ../mirror/423774
../mirror/423760 ../mirror/423765 ../mirror/423770 ../mirror/423775
../mirror/423761 ../mirror/423766 ../mirror/423771 ../mirror/423776
../mirror/423762 ../mirror/423767 ../mirror/423772 ../mirror/423777
../mirror/423763 ../mirror/423768 ../mirror/423773 ../mirror/423778
Ok, aber vielleicht fragst du - aber was nützt das? Woran erkennt man was was ist? Wie können Sie sogar sicher sein, dass Sie die richtige Inode-Nummer mit dem richtigen Dateinamen verknüpft haben?
Gut...
echo "heyhey" >>./' '
tgt=$(ls -id ./' ')
cat ../mirror/${tgt%% .*} \
$(ls -1td ../mirror/* | head -n1)
AUSGABE
heyhey
heyhey
Siehe, sowohl die in enthaltene ../mirror/"${tgt%% .*}"
als auch die mit referenzierte Inode-Nummer ./' '
beziehen sich auf dieselbe Datei. Sie beschreiben die gleiche Datei. Sie nennen es, aber nichts weiter. Eigentlich gibt es kein Rätsel, nur einige Unannehmlichkeiten, die Sie sich möglicherweise selbst machen, die sich aber letztendlich kaum oder gar nicht auf den Betrieb Ihres Unix-Dateisystems auswirken werden.