watch 命令会重复运行您给出的任何命令,并显示输出。默认情况下,它每两秒运行一次命令。命令的每次运行都将覆盖上一次运行时显示的内容,因此您始终可以看到最新的数据。
您可能会在等待某人登录时使用它。在这种情况下,您可以使用 watch who 命令或者 watch -n 15 who 命令使每 15 秒运行一次,而不是两秒一次。另外终端窗口的右上角会显示日期和时间。
$watch-n5who Every5.0s:whostinkbug:WedAug2314:52:152017 shspts/02017-08-2314:45(192.168.0.11) zoepts/12017-08-2308:15(192.168.0.19)
您也可以使用它来查看日志文件。如果您显示的数据没有任何变化,则只有窗口角落里的日期和时间会发生变化。
$watchtail/var/log/syslog Every2.0s:tail/var/log/syslogstinkbug:WedAug2315:16:372017 Aug2314:45:01stinkbugCRON[7214]:(root)CMD(command-vdebian-sa1>/dev/nu ll&&debian-sa111) Aug2314:45:17stinkbugsystemd[1]:StartedSession179ofusershs. Aug2314:55:01stinkbugCRON[7577]:(root)CMD(command-vdebian-sa1>/dev/nu ll&&debian-sa111) Aug2315:05:01stinkbugCRON[7582]:(root)CMD(command-vdebian-sa1>/dev/nu ll&&debian-sa111) Aug2315:08:48stinkbugsystemd[1]:StartingCleanupofTemporaryDirectories... Aug2315:08:48stinkbugsystemd-tmpfiles[7584]:[/usr/lib/tmpfiles.d/var.conf:1 4]Duplicatelineforpath"/var/log",ignoring. Aug2315:08:48stinkbugsystemd[1]:StartedCleanupofTemporaryDirectories. Aug2315:13:41stinkbugsystemd[1]:StartedSession182ofusershs. Aug2315:14:29stinkbugsystemd[1]:StartedSession183ofusershs. Aug2315:15:01stinkbugCRON[7828]:(root)CMD(command-vdebian-sa1>/dev/nu ll&&debian-sa111)
这里的输出和使用命令 tail -f /var/log/syslog 的输出相似。
look这个命令的名字 look 可能会让我们以为它和 watch 做类似的事情,但其实是不同的。look 命令用于搜索以某个特定字符串开头的单词。
$lookecl eclectic eclectic's eclectically eclecticism eclecticism's eclectics eclipse eclipse's eclipsed eclipses eclipsing ecliptic ecliptic's
look 命令通常有助于单词的拼写,它使用 /usr/share/dict/words 文件,除非你使用如下的命令指定了文件名:
$lookesac.bashrc esac esac esac
在这种情况下,它的作用就像跟在一个 awk 命令后面的 grep ,只打印匹配行上的第一个单词。
man -kman -k 命令列出包含指定单词的手册页。它的工作基本上和 apropos 命令一样。
$man-klogrotate dh_installlogrotate(1)-installlogrotateconfigfiles logrotate(8)-rotates,compresses,andmailssystemlogs logrotate.conf(5)-rotates,compresses,andmailssystemlogshelp
当你完全绝望的时候,您可能会试图使用此命令,help 命令实际上是显示一个 内置命令的列表。最令人惊讶的是它有相当多的参数变量。你可能会看到这样的东西,然后开始想知道这些内置功能可以为你做些什么:
$help GNUbash,version4.4.7(1)-release(i686-pc-linux-gnu) Theseshellcommandsaredefinedinternally.Type`help'toseethislist. Type`helpname'tofindoutmoreaboutthefunction`name'. Use`infobash'tofindoutmoreabouttheshellingeneral. Use`man-k'or`info'tofindoutmoreaboutcommandsnotinthislist. Astar(*)nexttoanamemeansthatthecommandisdisabled. job_spec[&]history[-c][-doffset][n]orhist> ((expression))ifCOMMANDS;thenCOMMANDS;[elifC> .filename[arguments]jobs[-lnprs][jobspec...]orjobs> :kill[-ssigspec|-nsignum|-sigs> [arg...]letarg[arg...] [[expression]]local[option]name[=value]... alias[-p][name[=value]...]logout[n] bg[job_spec...]mapfile[-ddelim][-ncount][-Oor> bind[-lpsvPSVX][-mkeymap][-ffile>popd[-n][+N|-N] break[n]printf[-vvar]format[arguments] builtin[shell-builtin[arg...]]pushd[-n][+N|-N|dir] caller[expr]pwd[-LP] caseWORDin[PATTERN[|PATTERN]...)>read[-ers][-aarray][-ddelim][-> cd[-L|[-P[-e]][-@]][dir]readarray[-ncount][-Oorigin][-s> command[-pVv]command[arg...]readonly[-aAf][name[=value]...]o> compgen[-abcdefgjksuv][-ooption][>return[n] complete[-abcdefgjksuv][-pr][-DE]>selectNAME[inWORDS...;]doCOMM> compopt[-o|+ooption][-DE][name..>set[-abefhkmnptuvxBCHP][-ooption-> continue[n]shift[n] coproc[NAME]command[redirections]shopt[-pqsu][-o][optname...] declare[-aAfFgilnrtux][-p][name[=v>sourcefilename[arguments] dirs[-clpv][+N][-N]suspend[-f] disown[-h][-ar][jobspec...|pid>test[expr] echo[-neE][arg...]time[-p]pipeline enable[-a][-dnps][-ffilename][na>times eval[arg...]trap[-lp][[arg]signal_spec...] exec[-cl][-aname][command[argume>true exit[n]type[-afptP]name[name...] export[-fn][name[=value]...]orex>typeset[-aAfFgilnrtux][-p]name[=v> falseulimit[-SHabcdefiklmnpqrstuvxPT][l> fc[-eename][-lnr][first][last]o>umask[-p][-S][mode] fg[job_spec]unalias[-a]name[name...] forNAME[inWORDS...];doCOMMAND>unset[-f][-v][-n][name...] for((exp1;exp2;exp3));doCOMMAN>untilCOMMANDS;doCOMMANDS;done functionname{COMMANDS;}orname>variables-Namesandmeaningsofso> getoptsoptstringname[arg]wait[-n][id...] hash[-lr][-ppathname][-dt][name>whileCOMMANDS;doCOMMANDS;done help[-dms][pattern...]{COMMANDS;}stat -c
stat 命令用于显示文件的大小、所有者、用户组、索引节点号、权限、修改和访问时间等重要的统计信息。这是一个非常有用的命令,可以显示比 ls -l 更多的细节。
$stat.bashrc File:.bashrc Size:4048Blocks:8IOBlock:4096regularfile Device:806h/2054dInode:421481Links:1 Access:(0644/-rw-r--r--)Uid:(1000/shs)Gid:(1000/shs) Access:2017-08-2315:13:41.781809933-0400 Modify:2017-06-2117:37:11.875157790-0400 Change:2017-06-2117:37:11.899157791-0400 Birth:-
使用 -c 选项,您可以指定要查看的字段。例如,如果您只想查看一个文件或一系列文件的文件名和访问权限,则可以这样做:
$stat-c'%n%a'.bashrc .bashrc644
在此命令中, %n 表示每个文件的名称,而 %a 表示访问权限。%u 表示数字类型的 UID,而 %U 表示用户名。
$stat-c'%n%a'bin/* bin/loop700 bin/move2nohup700 bin/nohup.out600 bin/show_release700 $stat-c'%n%a%U'bin/* bin/loop700shs bin/move2nohup700shs bin/nohup.out600root bin/show_release700shsTAB
如果你没有使用过 tab 键来补全文件名,你真的错过了一个非常有用的命令行技巧。tab 键提供文件名补全功能(包括使用 cd 时的目录)。它在出现歧义之前尽可能多的填充文件名(多个文件以相同的字母开头。如果您有一个名为 bigplans 的文件,另一个名为 bigplans2017 的文件会发生歧义,你将听到一个声音,然后需要决定是按下回车键还是输入 2 之后再按下 tab 键选择第二个文件。