我很难明白该怎么./
做。
在 Linux Essentials 书籍中,它要求我在练习中删除名为-file
.谷歌搜索后,我发现我需要这样做,rm ./-file
但我不明白为什么!
答案1
该.
目录是当前目录。该目录..
是该目录的上层目录
$ pwd
/home/user
$ cd docs; pwd # change to directory 'docs'
/home/user/docs
$ cd . ; pwd # we change to the '.' directory, therefore we'll stay. No change
/home/user/docs
$ cd .. ; pwd # back to up level
/home/user
在Linux 中,命令选项由符号引入-
,即ls -l
,因此如果您想引用以-
等开头的文件-file
,命令会认为您正在尝试指定一个选项。例如,如果你想删除它:
rm -file
file
会抱怨,因为它正在尝试使用命令的选项rm
。在这种情况下,您需要指示该文件的位置。在当前目录(即目录)中.
,您需要将该文件引用为./-file
,这意味着在目录 中.
,文件-file
。在这种情况下,该命令rm
不会认为这是一个选项。
rm ./-file
也可以使用 来完成--
。
从man rm
:
要删除名称以“-”开头的文件(例如“-foo”),请使用以下命令之一:
rm -- -foo rm ./-foo
答案2
句号字符.
是当前目录。所以例如ls
和ls .
是同义词。如果你在/etc
命令中cat /etc/fstab/
,cat ./fstab
做cat fstab
同样的事情。
rm ./-file
使用是因为rm
解析-
以命令行选项而不是文件名开头的所有内容。例如,ls -l
不会尝试显示名为 的文件-l
,但ls ./-l
会ls /some/directory/-l
执行此操作。
答案3
如果您键入,rm -file
您将传递一个命令行选项而rm
不是名称-file
。
要删除,请在引号中-file
传递rm
名称rm "-file"
或转义-
. rm \\-file
。在 bash 或 zsh 中,如果您不确定命令是否获取正确的文件名,请使用制表符补全。示例:type rm -fi
TAB如果屏幕没有打印输出,rm -file
您知道自己做错了什么,应该在按回车键之前修复它,另一个示例rm "-fi
TAB应该打印输出rm "-file"
。
至于./
,/
只是目录和文件名之间的分隔符。 “。”表示当前目录。 “..”表示目录向上。因此,要删除foo
当前目录中的文件,请键入rm ./foo
(rm foo
也可以)。要删除上一个目录中的文件,请键入要删除上一级目录所包含的目录rm ../foo
中的文件。bar
rm ../bar/foo
在这种情况下,./
将其放在前面-file
,以便该-
角色不是第一个rm
看到的东西,因为这会使其认为您正在使用某些选项。
如果你了解一点DOS,rm -file
就会对应rm /file
于DOS。