所以是的,就像在其他地方多次提到的,文件名几乎可以包含任何字符。但需要说是一个文件名是不是一个文件。它确实具有文件属性的权重,因为您通常需要一个文件名才能打开文件,但是文件名仅指向实际文件。它是一个链接,存储在记录该链接的目录中,以及 inode编号 -与实际文件更接近。
因此,您可以随意调用它。内核不在乎-它将处理的所有文件引用无论如何都将处理实际的inode编号。文件名是为了人类 -如果您想使其变得疯狂,那它就是您的文件系统。在这里,我将做一些疯狂的事情:
首先,我将创建20个文件,并将它们命名为空格,每个文件名比最后一个文件名多一个空间:
until [ $((i=$i+1)) -gt 20 ]
do v=$v' ' && touch ./"$v"
done
这有点好笑。看我的ls
:
ls -d ./*
./ ./ ./ ./ ./
./ ./ ./ ./ ./
./ ./ ./ ./ ./
./ ./ ./ ./ ./
现在,我将镜像该目录:
set -- * ; mkdir ../mirror
ls -i1qdU -- "$@" |
sh -c 'while read inum na
do ln -T "$1" ../mirror/$inum
shift ; done' -- "$@"
ls -d ../mirror/*
这是 ../mirror/
的内容:
../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
好的,但是也许你在问-那有什么好处?你怎么知道哪个是哪个?您甚至如何确保将正确的inode编号链接到正确的文件名?
好...
echo "heyhey" >>./' '
tgt=$(ls -id ./' ')
cat ../mirror/${tgt%% .*} \
$(ls -1td ../mirror/* | head -n1)
输出值
heyhey
heyhey
请参阅,包含在其中的inode编号../mirror/"${tgt%% .*}"
和所引用的inode编号均引用./' '
同一文件。它们描述相同的文件。他们命名,但仅此而已。实际上,没有什么神秘的地方,您可能会给自己带来一些不便,但最终最终将对unix文件系统的操作几乎没有影响。