Linux:如何在没有“.”的情况下创建目录 和 ”..”?

jon*_*nzh 6 linux cd ls

我不确定以下问题是否特定于 busybox:我有一个安装了 busybox 的嵌入式设备。据我了解,当创建一个目录时,通常会自动创建2个隐藏文件:.代表当前目录和..代表父目录。例如,通过键入mkdir -p /tmp/normal_dir; cd /tmp/normal_dir; ls -a,输出将为. ..

但是,我见过一个现有目录 ( /tmp/strange_dir) 不显示.... 也就是说,通过键入cd /tmp/strange_dir; ls -a,输出为空,尽管导航到父目录仍然有效。也就是说,通过键入cd ..,内容是正确的。

我的问题是:如何创建没有...(如/tmp/strange_dir)这样的目录?我很困惑。

Sco*_*ott 1

可以想象,如果有人说,就会产生这样的畸变

\n\n
mkdir /tmp/strange_dir\n
Run Code Online (Sandbox Code Playgroud)\n\n

当文件系统已满时(即没有空闲块)。\xc2\xa0\n仍然(可能)可以strange_dir在 中创建目录条目/tmp,因为这只需要几个字节\已分配给 的块之一中的未使用空间/tmp。\xc2\xa0\n但是不可能为strange_dir自己分配块,\n因此不可能\n创建...条目。\xc2\xa0 在这样的情况下在一种情况下,\n我希望mkdir程序删除(取消链接)\nstrange_dir中的目录条目/tmp,\n但软件并不总是按照我的预期执行。

\n\n

其他可能性:

\n\n
    \n
  • mkdir被中断(终止)\n在\n中创建strange_dir目录条目和在 .\xc2\xa0\n 中创建 和 条目之间\n我希望捕获中断信号\n(即+ )并自行清理,\n但请参阅上面关于软件和我对它的期望。\xc2\xa0\n当然,它无法捕获终止信号或系统崩溃。\xc2\xa0/tmp...strange_dirmkdirCtrlC
  • \n
  • rmdir在取消链接和中的条目.与取消链接 中的目录项之间\n被中断(终止) 。..strange_dirstrange_dir/tmp
  • \n
\n\n

人们可能期望fsck崩溃后运行的\n会检测到strange_dir并采取一些措施,但是......

\n\n

是的,当然,如果一个目录的大小为 0,\n这意味着它没有分配给它的块,\n因此它不能有任何内容\n(甚至不能有像 和 之类的小内容...

\n\n

我不完全理解为什么cd ..在没有时会起作用,\n但请参阅使用命令行界面从内部删除目录\n中..的讨论。\xc2\xa0\xc2\xa0事实证明

\n\n
mkdir /tmp/strange_dir\ncd /tmp/strange_dir\nls -lai \xe2\x86\x90显示正常. .. ,带有索引节点号。\nrmdir /tmp/strange_dir\npwd \xe2\x86\x90仍报告/tmp/strange_dir\nls -lai \xe2\x86\x90显示空目录:总计 0\nls -ldi \xe2\x86\x90显示具有与之前相同的 inode 编号,\n 但大小为 0,链接计数为 0。 \ncd .. \xe2\x86\x90将您带回/tmp
\n\n

这种情况与这个问题中的情况并不完全相似,\n因为,在另一种情况下,strange_dir已从/tmp.\xc2\xa0\n中删除cd ..,但它表明这是特殊的,有时在没有明显机制的情况下可以工作它可以。

\n\n

pwd 和 /bin/pwd 之间的奇怪差异暗示了其工作方式的可能性。\xc2\xa0 shell 会跟踪您当前的目录。\xc2\xa0\n也就是说,它会跟踪对以下内容的最佳猜测:你当前的目录是什么。\xc2\xa0\n它可能会被符号链接和类似的技巧所欺骗

\n\n
mkdir /tmp/foo\ncd /tmp/foo\nmv /tmp/foo /tmp/foobar\n
Run Code Online (Sandbox Code Playgroud)\n\n

即,它仍然会认为当前目录是/tmp/foo,\n因此这就是pwd将报告的内容,\n但是pwd\xc2\xa0-P/bin/pwd报告/tmp/foobar.\xc2\xa0\n因此,如果chdir("..")失败,\nshell 可能会计算它的内容认为你的上一级目录应该是\n并且绝对会去那里。\xc2\xa0\n(但是\xc2\xa0I\xc2\xa0怀疑还有更多的东西。)

\n