我不确定以下问题是否特定于 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
)这样的目录?我很困惑。
可以想象,如果有人说,就会产生这样的畸变
\n\nmkdir /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\nmkdir
被中断(终止)\n在\n中创建strange_dir
目录条目和在 .\xc2\xa0\n 中创建 和 条目之间\n我希望捕获中断信号\n(即+ )并自行清理,\n但请参阅上面关于软件和我对它的期望。\xc2\xa0\n当然,它无法捕获终止信号或系统崩溃。\xc2\xa0/tmp
.
..
strange_dir
mkdir
CtrlCrmdir
在取消链接和中的条目.
与取消链接 中的目录项之间\n被中断(终止) 。..
strange_dir
strange_dir
/tmp
人们可能期望fsck
崩溃后运行的\n会检测到strange_dir
并采取一些措施,但是......
是的,当然,如果一个目录的大小为 0,\n这意味着它没有分配给它的块,\n因此它不能有任何内容\n(甚至不能有像 和 之类的小内容.
)..
。
我不完全理解为什么cd ..
在没有时会起作用,\n但请参阅使用命令行界面从内部删除目录\n中..
的讨论。\xc2\xa0\xc2\xa0事实证明
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 ..
,但它表明这是特殊的,有时在没有明显机制的情况下可以工作它可以。
pwd 和 /bin/pwd 之间的奇怪差异暗示了其工作方式的可能性。\xc2\xa0 shell 会跟踪您当前的目录。\xc2\xa0\n也就是说,它会跟踪对以下内容的最佳猜测:你当前的目录是什么。\xc2\xa0\n它可能会被符号链接和类似的技巧所欺骗
\n\nmkdir /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怀疑还有更多的东西。)
归档时间: |
|
查看次数: |
236 次 |
最近记录: |