我在查找包含 rm、ls、cd 等基本命令的文件时遇到了问题。我需要 Ubuntu 中的文件路径来编辑它们。我在网上查了一下,但只找到了 UNIX 文件位置 (/usr/bin)。
我的意思是,
# cd /usr/bin
# ls -lh rm
-r-xr-xr-x 1 root bin 14K May 1 2007 rm
# chmod 4555 rm
# ls -lh rm
-r-sr-xr-x 1 root bin 14K May 1 2007 rm
# chmod 2555 rm
-r-xr-sr-x 1 root bin 14K May 1 2007 rm
我想更改 的权限rm
。欢迎提供任何建议或文档。
答案1
whereis
命令会告诉您命令的二进制文件和所有文档的位置。但并非所有命令都有一些在执行时调用的二进制文件。有些命令是 shell 内置的。由于 Ubuntu 使用 bash 作为其默认 shell,这些 Bash 内置函数存在。
确定一个命令是别名、调用某个二进制文件还是 shell 提供的命令,最简单的方法是使用带有选项type
的(它本身也是 shell 内置命令)-a
。
例如,如果你使用
whereis cd
你会发现,没有任何输出能让你相信这cd
是一些不存在的神奇的东西/usr/bin。但cd
它是 shell 内置命令。如果你运行
type -a cd
你会得到
cd is a shell builtin
如果你自己尝试一下,你会发现确实rm
有一个二进制文件 /垃圾桶。
但有一些例外。echo
就是例子。
如果你跑
type -a echo
你会得到
echo is a shell builtin
echo is /bin/echo
这意味着 shell 中既有echo
内置命令,也有外部命令/bin/echo。原因描述于Eliah Kagan 的回答和muru 的回答。
ls
是另一个例外。默认情况下ls
是别名ls --color=auto
的输出将如下所示type -a ls
:
ls is aliased to `ls --color=auto'
ls is /bin/ls
此别名定义在~/.bashrc。如果此别名是“无别名的”,ls
则将调用位于/垃圾桶。
答案2
如果我想知道命令ls
在哪里,我会使用以下命令询问系统
whereis ls
guiverc@d960-ubu2:/de2900/buster$ whereis ls
ls: /bin/ls /usr/share/man/man1/ls.1.gz
并告诉二进制文件位于何处(/bin/ls
),以及手册(参考)(/usr/share/man/man1/ls.1.gz)
仅供参考:使用man ls
查看手册页,手册页末尾的 .1.gz 仅告诉您这是第 1 页类型(即可执行程序或者 shell 命令)。