一个用户(Bob)意外地在其主目录中创建了一个子目录(bobsdir)并尝试删除它,但是当他们使用“rmdir \bobsfile”命令时,他们得到“没有这样的目录”。
问题的答案是:rmdir ~Bob/\bobsdir
我得到了与 /home 相同的“~”,但我在学习资料中找不到“\”是什么以及为什么它们在这种情况下起作用。我是一个需要知道“为什么”的人,所以任何帮助都将不胜感激。
答案1
http://aiotestking.wordpress.com/category/linux/lpic-1/page/7/
这看起来是一个确切的问题,答案中没有多余的斜线。
但是,经过测试,无论哪种方式它都可以工作...因此,我进一步查看,发现另一个版本将答案选为双反斜杠:
http://studyhat.blogspot.com/2012/08/linux-question-answer.html
我想说这个问题可能已经被各个网站或书籍的编辑或转发者忽略了,但我很想知道是否有其他人对主目录规范后的额外反斜杠的含义或功能有何看法。
似乎有多种方法可以做到这一点,但我不确定为什么......而且一种方法根本不起作用(但在很多地方似乎都表明这是“正确”的方法- rmdir ~user/\\userdir
)。
答案2
我认为你误解了这个问题,因为正如所说,它和答案实际上并不匹配。
反斜杠 - \ - 在大多数 Linux shell 和许多语言中用作“退出”键。这意味着它要么开始一个特殊代码,要么使一个特殊字符无效。
例如,$ 字符在 shell 中具有特殊含义,表示变量扩展。但是,如果你想将文件命名为“$money”,该怎么办?你不能只触摸金钱因为 shell 会认为你想扩展名为“money”的变量。所以,你触摸 \$money,现在 shell 将逃脱$,将其视为文字字符而不是变量符号。
root@banshee:/tmp# touch $money
touch: missing file operand
Try `touch --help' for more information.
root@banshee:/tmp# touch \$money
root@banshee:/tmp# ls -l | grep money
-rw-r--r-- 1 root root 0 May 10 21:31 $money
root@banshee:/tmp# rm $money
rm: missing operand
Try `rm --help' for more information.
root@banshee:/tmp# rm \$money
root@banshee:/tmp# ls -l | grep money
root@banshee:/tmp#
您还可以使用转义字符来“消除”空格。通常,如果参数中有空格,shell 会将其解释为单独的关键字,而不是带有空格的单个关键字。但是如果您转义空格,shell 会将其解释为带有空格的单个关键字。如下所示:
root@banshee:/tmp# touch bobs money
root@banshee:/tmp# ls | egrep '(bob|money)'
bobs
money
root@banshee:/tmp# rm bobs ; rm money
root@banshee:/tmp# touch bobs\ money
root@banshee:/tmp# ls | egrep '(bob|money)'
bobs money
转义符也会转义本身。因此,如果您想创建一个名为“\myfile”的文件,您需要执行以下操作:
root@banshee:/tmp# touch \\myfile
You have new mail in /var/mail/root
root@banshee:/tmp# ls -l | grep myfile
-rw-r--r-- 1 root root 0 May 10 21:25 \myfile
如果你想删除\我的文件,您需要再次使用第二个反斜杠来转义反斜杠,就像您创建它时所做的那样:
root@banshee:/tmp# rm \\myfile
root@banshee:/tmp# ls -l | grep myfile
root@banshee:/tmp#
或者,您可以将文件名括在单引号中。单引号告诉 shell,您不希望它将引号内的空格处理为单独的关键字,并且您不希望在引号内进行变量或通配符扩展:
root@banshee:/tmp# ls -l | grep myfile
-rw-r--r-- 1 root root 0 May 10 21:28 \myfile
root@banshee:/tmp# rm '\myfile'
root@banshee:/tmp# ls -l | grep myfile
请注意这里的含义:如果你真的想创建一个文件名包括单引号括起来,您需要使用转义字符来转义单引号!
root@banshee:/tmp# touch 'myfile'
root@banshee:/tmp# ls -l | grep myfile
-rw-r--r-- 1 root root 0 May 10 21:29 myfile
root@banshee:/tmp# rm myfile
root@banshee:/tmp# touch \'myfile\'
root@banshee:/tmp# ls -l | grep myfile
-rw-r--r-- 1 root root 0 May 10 21:29 'myfile'
希望这有助于使这一点更加清楚。
答案3
解释为什么使用~Bob/
通常在您自己的 Linux 计算机上,您将~/
其用作主目录。这样做的原因是,我们通常假设您以您正在使用的用户身份登录,输入~/
将带您进入您以该用户身份登录的主目录。
因此某些情况下使用~/
或根本~
不起作用。
- 以 root 身份登录
- 以其他用户身份登录
在这种情况下,我们可以~Bob
指定用户“Bob”的主文件夹
这就解释了为什么要使用这种形式的主文件夹