Linux / Unix which 命令示例:查找程序文件
我是 Linux 和类 Unix 系统的新用户。如何在 Linux 上找到 gcc 编译器路径?如何在 Linux 或类 Unix 系统上的路径中找到程序文件?
which命令显示其每个给定参数的完整路径。此命令在用户的 PATH 中搜索可执行文件或脚本。我经常使用 which 命令查找与给定命令名称关联的可执行文件。让我们看看 Linux 和 Unix 中 which 命令的示例,以找出程序路径。
目的↑
显示shell命令的完整路径。
Linux 和 Unix 中的 PATH 变量是什么?↑
PATH ( $PATH) 是 Linux 和类 Unix 系统下的环境变量,用于指示在磁盘上搜索可执行文件的位置。它是一个以冒号分隔的路径列表。您可以使用 printf 命令/echo 命令显示或打印 UNIX / Linux 路径,即 $PATH 变量,如下所示:
printf "%s\n" $PATH ## OR ## echo "$PATH"
以下是更多人类可读的输出:
echo "${PATH//:/$'\n'}"
/home/ubuntu/bin /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin /usr/games /usr/local/games /snap/bin
请参阅如何像专业人士一样查找 Linux 命令的路径以获取更多信息。
语法↑
基本语法如下:
which command which [option] command which program
Unix 和 Linux which 命令示例↑
查找与命令名称 date 关联的可执行文件:
$ which date
要查找与命令名 httpd、top 和 ls 关联的可执行文件,请输入:
$ which httpd top ls
如何列出找到的所有可执行文件实例?↑
将-a选项传递给 which 命令如下:
$ which -a {command}
$ which -a ls
Linux 中的 which 命令及其示例脚本
以下脚本演示了如何提前定位特定程序并仅继续操作。否则,如果缺少二进制文件,它将在屏幕上显示错误。例如:
#!/bin/bash # Set a list of binaries needed for our script here bins="htop ls grep date sed awk" # Count total binaries count req_bins_count=$(wc -w <<<"$bins") # Now try to locate all binaries and get count from the output of which command using the wc command found_bind_count=$(which $bins | wc -w) # Compare it if (( req_bins_count != found_bind_count )) then echo "This script needs certain binaries preinstalled, and they are not found: $bins" echo "Please installed those or set correct \$PATH variable." else echo "All criteria were met. Starting the script" echo ".." fi
Linux which 命令用于确定在终端中输入命令时执行的给定可执行文件的位置(点击放大)
which 命令选项↑
从命令手册页:
选项 | 意义 |
---|---|
--skip-dot | 跳过 PATH 中以点开头的目录。 |
--skip-tilde | 跳过 PATH 中以波浪号开头的目录。 |
--show-dot | 不要在输出中将点扩展至当前目录。 |
--show-tilde | 为非 root 用户的 HOME 目录输出波浪符号。 |
--tty-only | 如果不在 tty 上,则停止处理右侧的选项。 |
-a | 打印 PATH 中的所有匹配项,而不仅仅是第一个 |
-i | 从标准输入读取别名列表。 |
--skip-alias | 忽略选项 -i;不读取标准输入。 |
--read-functions | 从 stdin 读取 shell 函数。 |
--skip-functions | 忽略选项 –read-functions;不要读取标准输入。 |
在某些 Linux 发行版中,bash 可能使用 which 作为函数。例如:
which () { (alias; declare -f) | /usr/bin/which --tty-only --read-alias --read-functions --show-tilde --show-dot $@ } export -f which
tcsh / csh 用户可以按如下方式创建别名:
alias which 'alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
在 Korn shell 中,您可以使用 whence 命令来实现相同的目的:
$ whence ls
$ whence date httpd ls
总结↑
您了解了 Linux 和 Unix,哪个命令可以定位命令文件路径。请使用 help 命令或 man 命令阅读哪个命令手册页:
$ man which