Donc oui, comme cela est dit à plusieurs reprises ailleurs, un nom de fichier peut contenir presque n'importe quel caractère. Mais il faut dire qu'un nom de fichier n'est pas un fichier. Il a un certain poids en tant qu'attribut de fichier dans la mesure où vous avez généralement besoin d'un nom de fichier pour ouvrir un fichier, mais le nom d' un fichier ne pointe que vers le fichier réel. Il s'agit d'un lien, stocké dans le répertoire qui l'a enregistré, à côté du numéro d'inode - qui est une approximation beaucoup plus proche d'un fichier réel .
Alors, vous savez, appelez ça comme vous voulez. Le noyau s'en fiche - toutes les références de fichiers qu'il gérera traiteront de toute façon les vrais numéros d'inode. Le nom de fichier est une chose pour la consommation humaine - si vous voulez en faire une chose folle, eh bien, c'est votre système de fichiers. Ici, je vais faire des trucs fous:
Je vais d'abord créer 20 fichiers et les nommer avec uniquement des espaces, chaque nom de fichier contenant un espace de plus que le dernier:
until [ $((i=$i+1)) -gt 20 ]
do v=$v' ' && touch ./"$v"
done
C'est un peu drôle. Regardez mon ls
:
ls -d ./*
./ ./ ./ ./ ./
./ ./ ./ ./ ./
./ ./ ./ ./ ./
./ ./ ./ ./ ./
Maintenant, je vais refléter ce répertoire:
set -- * ; mkdir ../mirror
ls -i1qdU -- "$@" |
sh -c 'while read inum na
do ln -T "$1" ../mirror/$inum
shift ; done' -- "$@"
ls -d ../mirror/*
Voici ../mirror/
le contenu de:
../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
D'accord, mais vous demandez peut-être - mais à quoi ça sert? Comment savoir lequel est lequel? Comment pouvez-vous être sûr d'avoir lié le bon numéro d'inode au bon nom de fichier?
Bien...
echo "heyhey" >>./' '
tgt=$(ls -id ./' ')
cat ../mirror/${tgt%% .*} \
$(ls -1td ../mirror/* | head -n1)
SORTIE
heyhey
heyhey
Voir, le numéro d'inode contenu dans ../mirror/"${tgt%% .*}"
et celui référencé par se ./' '
réfèrent au même fichier. Ils décrivent le même fichier. Ils le nomment, mais rien de plus. Il n'y a pas de mystère, vraiment, juste quelques inconvénients que vous pourriez vous faire, mais qui auront finalement peu ou pas d'effet sur le fonctionnement de votre système de fichiers Unix à la fin.