Linux下命令路径搜索

which

概述

用于查找并显示给定命令的绝对路径,环境变量PATH中保存了查找命令时需要遍历的目录。which指令会在环境变量$PATH设置的目录里查找符合条件的文件。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。

语法

1
Usage: which [options] [--] programname [...]

选项

1
2
3
4
-n <文件名长度>:制定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名
-p <文件名长度>:与-n参数相同,但此处的<文件名长度>包含了文件的路径
-w:指定输出时栏位的宽度
-V:显示版本信息

示例

1
2
3
4
5
6
7
8
9
10
11
[user1@practice ~]$ which ls
alias ls='ls --color=tty'
/bin/ls
[user1@practice ~]$ which awk
/bin/awk
[user1@practice ~]$ which grep
alias grep='grep --color'
/usr/bin/grep
[user1@practice ~]$ which test
/usr/bin/test
[user1@practice ~]$

dirname

概述

去除文件名中的非目录部分,仅显示与目录有关的内容。dirname命令读取指定路径名保留最后一个/及其前面的字符,删除其他部分,并写结果到标准输出。如果最后一个/后无字符,dirname 命令使用倒数第二个/,并忽略其后的所有字符。

语法

1
2
Usage: dirname NAME
or: dirname OPTION

选项

1
2
--help:显示帮助
--version:显示版本号

示例

1
2
3
4
5
6
7
8
9
10
11
[user1@practice ~]$ dirname //
/
[user1@practice ~]$ dirname /usr/local/bin/
/usr/local
[user1@practice ~]$ dirname /usr/local/bin
/usr/local
[user1@practice ~]$ dirname /usr/bin/sort
/usr/bin
[user1@practice ~]$ dirname test
.
[user1@practice ~]$

basename

概述

用于打印目录或者文件的基本名称。

语法

1
2
Usage: basename NAME [SUFFIX]
or: basename OPTION

选项

1
2
--help:显示帮助
--version:显示版本号

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
[user1@practice ~]$ basename //
/
[user1@practice ~]$ basename /usr/local/bin/
bin
[user1@practice ~]$ basename /usr/local/bin
bin
[user1@practice ~]$ basename /usr/bin/sort
sort
[user1@practice ~]$ basename test
test
[user1@practice ~]$ basename /usr/bin/sort rt
so
[user1@practice ~]$

readlink

概述

输出符号链接值或者权威文件名,主要用来 找出符号链接所指向的位置

语法

1
readlink [OPTION]... FILE

选项

1
2
3
-f, --canonicalize:递归跟随给出文件名的所有符号链接以标准化,除最后一个外所有组件必须存在。简单地说,就是一直跟随符号链接,直到非符号链接的文件位置,限制是最后必须存在一个非符号链接的文件
--help:显示帮助
--version:显示版本号

示例

1
2
3
4
5
6
7
8
9
[user1@practice ~]$ readlink awk 
[user1@practice ~]$ readlink -f awk
/home/user1/awk
[user1@practice ~]$ readlink -f /usr/bin/awk
/bin/gawk
# awk其实是一个符号链接文件,指向的是/bin/gawk
[user1@practice ~]$ readlink -f /bin/gawk
/bin/gawk
[user1@practice ~]$

type

概述

用来显示指定命令的类型,判断给出的指令是内部指令还是外部指令

命令类型

  • alias:别名。
  • keyword:关键字,Shell保留字
  • function:函数,Shell函数
  • builtin:内建命令,Shell内建命令
  • file:文件,磁盘文件,外部命令
  • unfound:没有找到

语法

1
type: usage: type [-afptP] name [name ...]

选项

  • -a:打印name的所有可能情况,例如
1
2
3
4
[user1@practice ~]$ type -a ls
ls is aliased to `ls --color=tty'
ls is /bin/ls
[user1@practice ~]$
  • -f:不会去查找function

  • -t:打印aliaskeywordfunctionbuilt-infile这5种类型

  • -p:如果type -t name输出file,那么会打印name所在路径

  • -P:不管type -t name是不是输出file,都会去搜索name所在路径,比如type -P ls,尽管type -t ls打印的是alias(因为alias的优先级高于file),但是仍然会搜索出ls所在的路径/bin/ls

如果type不加任何选项,直接加1个或者多个name,那么会依次打印这些name的类型。只有所有name的类型都能成功打印,type才返回成功,否则,只要任何一个name类型无法打印,那么就返回失败

示例

1
2
3
4
5
6
7
8
9
10
11
12
[user1@practice ~]$ type -t echo
builtin
[user1@practice ~]$ type -p echo
[user1@practice ~]$ type -P echo
/bin/echo
[user1@practice ~]$ type -t awk
file
[user1@practice ~]$ type -p awk
/bin/awk
[user1@practice ~]$ type -P awk
/bin/awk
[user1@practice ~]$
有钱任性,请我吃包辣条
0%