我在设置时遇到了这个命令ssh
:
$ w
20:01:30 up 6 days, 2:20, 3 users, load average: 0.06, 0.11, 0.10
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
rick tty7 :0 16Jun20 6days 16:51 2.37s /sbin/upstart --user
rick pts/21 192.168.0.12 18:44 1:14m 0.19s 0.00s sleep 60
rick pts/22 192.168.0.12 18:45 0.00s 0.44s 0.01s w
这让我想知道 Ubuntu 中所有的单字母命令是什么。我没有找到确切的参考,但我找到了这个网站:
此处w
列出了该命令以及:
.
获取我使用过的文件的命令v
是 Ubuntu 中未安装的命令。据说相当于ls -l -b
。这又类似于 Ubuntu 的别名设置,除了不包括以(包括臭名昭著的和)ll
开头的文件。.
.
..
Ubuntu中是否默认安装了其他单字母命令?
TL;DR:这会告诉您名称为单个字符的每个命令,尽管您可能希望简化或以其他方式调整它:
列出单字符命令
compgen
Bash 具有制表符完成功能并提供了一个
compgen
内置功能,可以深入了解文本是如何完成的。通过运行compgen -c
,您可以列出系统上的所有命令。因此,列出所有只有一个字符长的命令的一种方法是过滤以下输出compgen -c
:正如steeldriver所指出的,
compgen
接受一个-X
选项来进行自己的过滤。有点不直观的是,操作数-X
是一个匹配被删除的模式。它支持像文件名扩展一样工作的通配语法,但也支持首字母!
否定它,在这里达到预期的效果。(有关语法的更多信息,请参阅Programmable Completion Builtins。)?
匹配任何单个字符,因此!?
匹配任何不是单个字符的内容,因此-X '!?'
删除所有不是单个字符的内容,只留下单字符命令:这以与管道相同的顺序显示了相同的结果
grep
。您可以将-c
and-X
在一个参数中作为-cX
or (如steeldriver 所示)在两个参数中作为-c -X
.在我的系统上,我得到:
s
在我的t
系统上是我编写的脚本;您很可能没有具有这些名称的命令。你可能确实有其他人。这些是否都是真正的命令取决于人们对命令的看法。
{
,}
, 和!
是shell 关键字,例如if
,case
,while
, andfor
. 其他(包括 shell 内置命令)是通常意义上的明确命令。重复结果的含义
某些命令(例如
[
上述输出中的命令)可能会重复。当存在多个同名命令时会发生这种情况。Bash[
作为 shell 内置提供,但它也是位于/usr/bin
. 运行显示命令的类型,如果是外部命令,则显示它的位置。当有多个同名命令时,它会显示实际使用的命令。正如Kulfy指出的那样,您可以看到它们都在使用.type cmd
cmd
type -a cmd
还有另一个可能的重复来源:在某些系统上,
/bin
并且/usr/bin
实际上是同一个目录(更准确地说:/bin
是 的符号链接/usr/bin
)并且您会在/bin
和中看到条目/usr/bin
。例如,您可能同时拥有/bin/[
and/usr/bin/[
以及[
内置函数,以及 both/bin/w
and/usr/bin/w
和 both/bin/X
and/usr/bin/X
。这些在技术上是独立的命令,但它们实际上指的是同一个可执行文件。传统上,
/bin
它们/usr/bin
是单独的目录(因此/bin
即使/usr
是尚未安装的 NFS 卷,其中的命令也可以使用)。但是现在这通常不会带来好处。因此,较新的系统倾向于统一它们。如果您使用的是较新版本,则可能有这个,除非您从没有.如果您愿意,可以对输出进行排序
compgen
并删除重复项:显示所有命令的详细信息
有关更多详细信息,您可能希望知道每个命令的类型以及:
如上所述,Bash 的
type
内置函数会告诉你这一切。您可以编写一个命令来提供compgen
to的过滤输出type
。如果你有一个
*
or?
命令,那将表现得很糟糕。这不太可能,但并非不可能。为了防止这种情况,您可能需要禁用通配符:但这(与这四个选项中的任何一个)是不完美的,因为所有同名命令都有相同的解释,这仅对第一个是正确的。例如,在我的系统上,我得到:
您可能只想查看有关每个同名命令的第一次出现的信息(例如,shell 内置命令
[
)。毕竟,当您编写一个命令的第一个单词是这些单字符名称中的任何一个(例如,[ -f /bin/nano ]
运行 shell builtin[
, not/usr/bin/[
)时,这些才是实际运行的。如果是这样,您可以compgen
在将结果传递给之前对输出进行排序并删除重复项type
:或者,为了防止通配符:
但是,如果您想要有关所有命令的信息(例如,
/usr/bin/[
以及[
),那么您可以传递-a
给type
. 我建议您仍然先对结果进行排序并删除重复项,否则您会在输出中得到大量重复。或者,为了防止通配符:
您拥有的命令因 shell 环境而异
请注意,您拥有的单字符命令,就像您通常拥有的命令一样,是您的 shell 环境的属性。不同的用户,或同一用户运行的不同 shell,可能有不同的可用命令。
l
例如,在 Ubuntu 中的命令是在 中定义的/etc/skel/.bashrc
,它被复制到~/.bashrc
以通常方式创建用户帐户时。因此,您可以更改或删除
l
per-user中的定义~/.bashrc
。或者只是运行unalias l
以影响您当前的外壳。