命令which, whereis, who, w的用法
开始命令搜索的顺序
判断命令类型bash中有一个内置命令叫做type,可用于判断命令的类型(内置命令或者外部命令)。内置命令就是bash内置的、自带的,外部命令一般是由程序包提供。 [[email?protected] ~]# type kill kill is a shell builtin [[email?protected] ~]# type lvcreate lvcreate is /usr/sbin/lvcreate 获取命令帮助内置命令一般使用命令help获取帮助。 [[email?protected] ~]# help kill kill: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec] Send a signal to a job. Send the processes identified by PID or JOBSPEC the signal named by SIGSPEC or SIGNUM. If neither SIGSPEC nor SIGNUM is present,then SIGTERM is assumed. Options: -s sig SIG is a signal name -n sig SIG is a signal number -l list the signal names; if arguments follow `-l‘ they are assumed to be signal numbers for which names should be listed Kill is a shell builtin for two reasons: it allows job IDs to be used instead of process IDs,and allows processes to be killed if the limit on processes that you can create is reached. Exit Status: Returns success unless an invalid option is given or an error occurs. 外部命令一般使用命令man获取帮助。 KILL(1) User Commands KILL(1) NAME kill - terminate a process SYNOPSIS kill [-s signal|-p] [-q sigval] [-a] [--] pid... kill -l [signal] ... 注意:命令kill,应该是bash有内置了,外部命令同时还提供了。 [[email?protected] ~]# which kill /usr/bin/kill [[email?protected] ~]# rpm -qf /usr/bin/kill util-linux-2.23.2-52.el7.x86_64 [[email?protected] ~]# type kill kill is a shell builtin 外部命令还有一种获取帮助的方式是info命令,使用info命令就像在阅读一本书籍一样,有不同的章节,因此info命令提供的帮助信息的内容量较大、较详细。 命令 which简介显示命令(shell)的完整路径。 语法which [options] [--] programname [...] 描述命令可以带上多个参数。which的工作原理是在环境变量PATH路径下使用和bash相关的算法去搜索可执行文件或脚本。 选项--all,-a:打印所有被匹配到的可执行程序,不仅仅是只打印第一个。 [[email?protected] ~]# touch /usr/local/sbin/zwl.sh /usr/local/bin/zwl.sh [[email?protected] ~]# chmod a+x /usr/local/sbin/zwl.sh /usr/local/bin/zwl.sh [[email?protected] ~]# which zwl.sh /usr/local/sbin/zwl.sh [[email?protected] ~]# which -a zwl.sh /usr/local/sbin/zwl.sh /usr/local/bin/zwl.sh --read-alias,-i:从标准输入中读取别名,这样子使得which可以获取到命令的别名。 [[email?protected] ~]# alias | /usr/bin/which --read-alias ls alias ls=‘ls --color=auto‘ /usr/bin/ls [[email?protected] ~]# /usr/bin/which ls /usr/bin/ls 基于此选项的特性,很适合将which自身也做成别名,系统自身已经帮我们做好了。 [[email?protected] ~]# alias | grep ‘which‘ alias which=‘alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde‘ [[email?protected] ~]# which grep alias grep=‘grep --color=auto‘ /usr/bin/grep --skip-dot:跳过PATH中以“.”开头的目录。 --skip-tilde:跳过PATH中以“~”开头的目录和家目录下的可执行程序。 --show-dot:与--skip-dot相反,不跳过,但是不会显示完整的路径,而是显示“./programname”。 --show-tilde:当目录匹配为家目录的时候输出一个波浪号。如果which是以root用户执行的话,则此选项会被忽略。 [[email?protected] bin]$ pwd /home/zwl/bin [[email?protected] bin]$ echo $PATH /usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/zwl/.local/bin:/home/zwl/bin [[email?protected] bin]$ which zwl.sh ~/bin/zwl.sh 命令 whereis简介根据给出的命令名,查找对应的二进制程序,源代码和man手册。 语法whereis [options] [-BMS directory... -f] name... 描述给出的命令名首先会被剥夺掉路径名和任何形式的扩展名。比如/PATH/TO/COMMAND.exe,剥夺后剩下COMMAND。由源代码控制所产生的“s.”前缀也会被处理。然后whereis会尝试在Linux的标准位置和PATH和MANPATH环境变量所指定的位置定位程序。 选项-b:仅查找二进制文件。 -m:仅查找man手册文件。 -s:仅查找源代码文件。 -B:限制whereis查找二进制文件所使用的目录,多个目录使用空格分隔。 -M:限制whereis查找man手册文件所使用的目录,多个目录使用空格分隔。 -S:限制whereis查找源代码文件所使用的目录,多个目录使用空格分隔。 -f:终止目录列表并标志文件的开始。当-B、-M或者-S选项有被使用的时候,此选项必须被使用。 -u:只会显示那些具备不寻常(unusual)条目的命令的名字。当一个命令在每个明确的请求类型下,不是只有一个(即没有或者有多个)条目的时候,该命令会被认为是不寻常的。因此‘whereis -m -u *‘命令会查找当前目录中的那些没有文档的或者文档条目不止一个的文件。这种用法,一般我们都是会进入到某个bin目录底下,这样子就可以使得文件名即命令名了。 -l:输出whereis命令所使用的有效查找路径。当-B、-M或者-S选项均没有被使用的时候,该选项会输出命令可以在系统上找到的whereis程序代码所写死的(==写死,即硬编码,hard coded==)路径。 示例不带选项,输出二进制程序文件、配置文件、man手册。 [[email?protected] bin]# whereis passwd passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man5/passwd.5.gz /usr/share/man/man1/passwd.1.gz 查找/usr/bin中的所有命令,找出那些在/usr/man/man1中没有帮助手册的,或者在/usr/src下没有源码文件的。 $ cd /usr/bin $ whereis -u -ms -M /usr/man/man1 -S /usr/src -f * 文件搜索路径默认情况下,whereis尝试从写死的路径中查找文件,写死的路径是通过glob模式被定义的。 [[email?protected] ~]# whereis -l bin: /usr/bin bin: /usr/sbin bin: /usr/lib bin: /usr/lib64 ... man: /usr/share/man/man7 man: /usr/share/man/man5 man: /usr/share/man/man1 man: /usr/share/man/man8 ... src: /usr/src/debug src: /usr/src/kernels man手册中说“选项-B、-M和-S带来的影响也会被-l显示出来”,但是我测试不出来,不知道是否是自己敲的命令的问题,不深究,pass。 命令 who简介显示已登录的用户。 [[email?protected] ~]# who root pts/0 2018-10-22 09:47 (192.168.17.1) root pts/1 2018-10-22 15:33 (192.168.17.1) 语法who [OPTION]... [ FILE | ARG1 ARG2 ] 选项-b,--boot:显示系统上次引导(开机)的日期和时间。 [[email?protected] ~]# who -b system boot 2018-10-22 09:47 -d,--dead:打印死亡进程。 -l,--login:打印系统登录进程。 -p,--process:打印由init所spawn出来的活跃进程。 -r,--runlevel:打印当前运行级别。 [[email?protected] ~]# who -r run-level 5 2018-10-23 09:23 -t,--time:打印上次系统时钟变化。 -T,-w,--mesg:添加用户的消息状态(+,-,?)。
[[email?protected] ~]# who -T root + pts/0 2018-10-23 09:36 (192.168.17.1) root + pts/1 2018-10-23 09:38 (192.168.17.1) -u,--users:列出已登录的用户,与不带选项的who有些许不同,可以看到登录shell的PID。 [[email?protected] ~]# who root pts/0 2018-10-23 09:36 (192.168.17.1) root pts/1 2018-10-23 09:38 (192.168.17.1) [[email?protected] ~]# who -u root pts/0 2018-10-23 09:36 00:25 1999 (192.168.17.1) root pts/1 2018-10-23 09:38 . 2082 (192.168.17.1) -a,--all:等同于-b -d --login -p -r -t -T -u。 [[email?protected] ~]# who -a system boot 2018-10-23 09:23 run-level 5 2018-10-23 09:23 root + pts/0 2018-10-23 09:36 00:26 1999 (192.168.17.1) root + pts/1 2018-10-23 09:38 . 2082 (192.168.17.1) 如果省略FILE的话,则使用/var/run/utmp。常见的可以将/var/log/wtmp作为FILE来使用,这个文件主要是可以用于查看过去登录的用户信息。 命令 w命令w是命令who的延展,除了有who的作用以外,还会显示额外的头部信息。 [[email?protected] ~]# who root pts/0 2018-10-23 09:36 (192.168.17.1) root pts/1 2018-10-23 09:38 (192.168.17.1) [[email?protected] ~]# w 11:36:06 up 2:12,3 users,load average: 0.00,0.01,0.05 USER TTY FROM [email?protected] IDLE JCPU PCPU WHAT root pts/0 192.168.17.1 09:36 26:06 0.09s 0.02s less -s root pts/1 192.168.17.1 09:38 6.00s 0.09s 0.00s w 在头部信息中,从左往右分别表示:
下面的条目信息中,有几个需要说明:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |