假设我能够abc
在命令行中输入并且它就会运行(因此 shell 不会说“abc:未找到命令”)。
我如何才能知道它abc
是什么或做什么?它是脚本吗?程序?别名?
答案1
您可以使用type
命令,例如type abc
。例如,在 bash shell 中:
$ type while cd ls gcc apt
while is a shell keyword
cd is a shell builtin
ls is aliased to `ls --color=auto'
gcc is /usr/bin/gcc
apt is hashed (/usr/bin/apt)
普通type
命令仅显示第一个结果。如果abc
的不同位置有 的多个版本PATH
,或者abc
既是 shell 关键字又是外部可执行文件,或者要查看命令的别名版本和非别名版本,则可以使用type -a
列出所有这些版本,例如:
$ type -a time
time is a shell keyword
time is /usr/bin/time
$ type -a ls
ls is aliased to `ls --color=auto'
ls is /bin/ls
$ type -a datamash
datamash is /usr/local/bin/datamash
datamash is /usr/bin/datamash
在 bash 中,type
它本身就是一个 shell 内置命令。其他 shell(如zsh
和ksh
以及dash
(在 Ubuntu 中提供/bin/sh
))提供类似的功能(尽管dash
目前不提供type -a
)。在 中tcsh
,最接近的等价命令是内置which
命令 - 不要与外部命令混淆which
- 请参阅为什么不使用“which”?那么用什么呢?
对于被标识为外部程序的命令(即具有路径,如/usr/bin/gcc
),您可以使用该file
命令来找出程序的类型:
$ file /bin/ls /usr/bin/gcc /usr/sbin/adduser
/bin/ls: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=2f15ad836be3339dec0e2e6a3c637e08e48aacbd, for GNU/Linux 3.2.0, stripped
/usr/bin/gcc: symbolic link to gcc-9
/usr/sbin/adduser: Perl script text executable
答案2
对于已安装的命令,请使用steeldriver的答案。
对于未安装的命令,请参阅下文。
有一个特殊的包名为command-not-found
. 其目的是
在交互式 bash 会话中建议安装软件包
一旦安装,该包将完成其工作并建议您安装具有已知可执行文件名称的 deb 包。
如果您知道可执行文件名称和/或其部分文件路径,那么您可以使用以下两个选项之一找到它的包:
本地
apt-file
sudo apt-get install apt-file sudo apt-file update apt-file search bin/htop
得到类似的东西
htop: /usr/bin/htop
在线使用包裹内容搜索https://packages.ubuntu.com- 查看结果此链接。
答案3
还有其他几种可能性:
which abc
将返回系统中程序 abc 的位置。
例如,
which cat
/bin/cat
如果你的程序 abc 附带了一些文档,则可以通过运行以下命令找到有关它的更多信息
man abc
这将向您显示此程序的手册页(如果有)。您可以了解有关其用法、命令行选项和参数的更多信息。您甚至可能会找到如何使用 abc 的示例或维护人员维护程序的网页。
一个可以替代 man 或手册页的实用程序是名为 info 的实用程序。一些程序维护者希望使用 info 为您提供与 man 页面相同或类似的内容。
info abc
例如将向您展示可以提供什么帮助。
由于您提到了别名,您可以使用 alias 命令显示别名及其定义
alias
以下是我的 Ubuntu 20.04 机器上的示例输出
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echoterminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
答案4
假设我能够
abc
在命令行中输入任何事物但返回abc:未找到命令
我如何才能知道它
abc
是什么或做什么?它是脚本吗?程序?别名?
以上都不是。如果找不到,则什么都不是。您可以创建或安装(或添加到搜索路径)名为 的脚本、程序或别名abc
,那么它将是脚本、程序或别名。但目前,它什么都不是。