该表达式.*
由 bash 扩展以包括当前和父目录:
$ ls -la
total 2600
drwxrwxrwx 2 terdon terdon 2162688 Sep 10 16:22 .
drwxr-xr-x 142 terdon terdon 491520 Sep 10 15:34 ..
-rw-r--r-- 1 terdon terdon 0 Sep 10 16:22 foo
$ echo .*
. ..
Run Code Online (Sandbox Code Playgroud)
如果我rm -rf .*
使用 GNU bash 在我的 Debian 上运行,version 4.2.36(1)-release
并且rm
从rm (GNU coreutils) 8.13
,我会收到以下消息:
$ rm -rf .*
rm: cannot remove directory: `.'
rm: cannot remove directory: `..'
Run Code Online (Sandbox Code Playgroud)
这是 GNU 的东西还是 POSIX?是否有任何 …
我尝试删除“。” 目录。我以为我可以删除我的工作目录而不必进入父目录。
我的问题的重点是寻找有关 linux 系统如何工作以删除文件的一些见解。
假设我登录到 unix 系统上的 shell 并开始窃听命令。我最初从用户的主目录开始~
。我可能会从那里cd
到目录Documents
。
这里更改工作目录的命令非常简单直观地理解:父节点有一个它可以访问的子节点列表,并且大概它使用搜索的(优化的)变体来定位子节点的存在输入用户的名称,然后“更改”工作目录以匹配此名称 - 如果我错了,请纠正我。更简单的是,shell 只是“天真地”尝试完全按照用户的意愿尝试访问目录,并且当文件系统返回某种类型的错误时,shell 会相应地显示响应。
然而,我感兴趣的是,当我向上导航一个目录时,相同的过程是如何工作的,即导航到父级或父级的父级。
鉴于我未知的,大概是“盲”位置Documents
,整个文件系统树中可能有许多目录之一具有该名称,Unix 如何确定我接下来应该放置的位置?它是否参考pwd
并检查了它?如果是,如何pwd
跟踪当前导航状态?
我们可以使用临时文件夹之类的临时文件吗
TMP=$(mktemp ... )
exec 3<>$TMP
rm $TMP
cat <&3
Run Code Online (Sandbox Code Playgroud)
这个shell退出后哪个会自动销毁?