title: 602.高级Unix命令 outline: deep

在Unix操作中有太多太多的命令,这些命令的强大之处就是一个命令只干一件事,并把这件事干好。Do one thing, do it well。这是unix的哲学。而且Unix首创的管道可以把这些命令任意地组合,以完成一个更为强大功能。这些哲学到今天都在深深地影响着整个计算机产业。比如今天最流行的“云计算”——把一个软件以碎片方式部署,然后这些功能可以任意组合。

这篇文章罗列了很多Unix下比较高级的命令,当然,Unix/Linux下还有更多更多的命令,我们相信你可能见过其中的某些命令,也有可能有一些命令没有见过。不管怎么说,我们希望这些命令一方面可以让你知道怎么使用Unix/Linux操作系统,另一方面,我们也希望你能从中感到Unix的那种软件开发的哲学思想。

ACCTCOM

::

查看所有用户执行过的进程(命令)

acctcom | tail -20

查看指定用户执行过的进程(命令)

acctcom -u ‹username› | tail -20

使用一个正则表达式查找相关进程

acctcom -n ‹pattern› | tail -20

查找所有以l开头的被用户执行过的命令

acctcom -n ‘^l’ | tail -30

以反向顺序显示

acctom -b | more

AGREP

::

在文件中查找一个可能拼写错的单词

agrep -2 ‘macropperswan’ ‹file›

AT

::

在未来某个时间执行某个命令

at now + 5 days ‹ scriptfile

AWK

::

显示文件的第一列

awk ‘{print $1}’ ‹file›

反序显示文件的前两列

awk ‘{print $2,”\t”,$1}’ ‹file›

输出前两列的总和

awk ‘{print $1 + $2}’ ‹file›

查找所有包括”money” 行并输出最后一列

awk ‘/money/ {print $NF}’ ‹file›

查找第二列中包含 “money”

awk ‘$2 ~ /money/ {print $0}’ ‹file›

查找第三列中不包括”A”

awk ‘$3 !~ /A$/ {print $0}’ ‹file›

BC

::

计算sin(5)的值

echo ‘s(5)’ | bc -l

CANCEL

::

取消一个刚开始启动的打印的作业

cancel ‹jobid› ( jobid可以由lpstat -o输出)

CASE in ESAC

::

sh/bash/ksh中的case语句

 

CC

::

编译一个C文件file.c

cc -o ‹outfile› ‹infile›

CHGRP

::

修改文件的组所属

chgrp ‹newgroupname› ‹file›

CHOWN

::

修改文件的所属人

chown ‹newowner› ‹file›

CMP

::

比较两个文件

cmp ‹file1› ‹file2› || ‹command›

COL

::

打印man pages,去除其中 “^H”

man ‹command› | col -b | ‹printcommand›

CRONTAB

::

查看你的crontab 文件

crontab -l

编译 crontab 文件

crontab -e

第周一的05:10 执行/home/fred/foo.ksh

10 5 * * 1 /home/fred/foo.ksh

CRYPT

::

使用一个口令加密一个文件

crypt password ‹ infile › cryptfile

解密一个被上面命令加密了的文件

crypt password ‹ cryptfile › cleanfile

CSH

::

最好的Berkley shell

 

CUT

::

从last 命令的输出中得到hostname字段

last | cut -c11-40

DATE

::

设置时间(只能由root 执行)

date ‹mmddhhmm›

输出指定日期格式 (如:月份)

date +%m

DF

::

以kB单位查看磁盘空间

df -k

DIRCMP

::

比较两个目录

dircmp ‹dir1› ‹dir2›

DTKSH

::

dtksh 是一个 X11 图形的ksh93

dtksh

DU

::

磁盘使用情况

du -ks

ED

::

命令行编译器。

ed ‹file›

EGREP

::

使用“或”条件Grep 文件

egrep ‘(A|B)’ ‹file›

grep文件中即不包括A也不包括B

egrep -v ‘(A|B)’ ‹file›

EX

::

使用一个shell脚来来编辑一个文件

ex -s file ‹‹EOF
g/money/s//cash/
EOF

以一个脚本文件来编辑一个文件

ex -s file ‹ scriptfile

EXPR

::

求模

expr 10 % 7

查看字串是否在变量$var中

expr $var : ‘string’

显示第一个数字组成的字串

expr $var : ‘[^0-9]*\([a-z]*\)’

FGREP

::

查找不匹配于某正规表达式的文件行

fgrep ‘*,/.()’ ‹file›

FILE

::

查看文件类型(如: ascii)

file ‹file›

FIND

::

在整个文件系统中查的一个文件

find / -type f -name ‹file› -print

查找所有匹配于模式的文件

find . -type f -name “*‹foo›*” -print

删除系统中所有的core文件

find / -type f -name core -exec /bin/rm -f {} \;

查找所有包含某单词的文件

find . -type f -exec grep -l ‹word› {} \;

查找所有修改日期在30天以前的文件

find . -type f -ctime +30 -print

使用xargs来备份所有的.c文件(加上.bak后缀)

find . -name “*.c” -print | xargs -i cp {} {}.bak

只搜索本地文件系统(不搜索nfs文件系统)

find . -local …

在搜索的过程中,跟随link文件的实际位置

find . -follow …

查找大于1M的文件

find /path -size 1000000c -print

运行find命令但忽略”permission denied”

find … 2›/dev/null ( 只能在sh/bash/ksh )

查找所有的man目录

find / -type d -print | egrep ‘.*/(catman|man)$’

查找所有有写权限的目录

find / -type d -perm -002 -print

GAWK

::

GNU版本的nawk

 

GREP

::

以某个正规表达式查找包含其的文件行

grep ‘[a-z][0-9]’ ‹file›

查找不包含指定正则表达式的文件行

grep -v ‘^From’ ‹file›

查找一组文件

grep -l ‘^[cC]’ *.f

计算包括某正则表达式文件行的数目

grep -c ‘[Ss]uccess’ ‹file›

不区分大小写的查找

grep -i ‘lAbEgF’ ‹file›

在匹配到的文件内容前输出文件的行号

grep -n ‘mo.*y’ ‹file›

HINV

::

命令显示系统硬件的详细列表,包括:CPU类型、内存大小、所有的磁盘设备。

hinv -v

IF then else ENDIF

::

csh/tcsh中的if 语句

 

IF then else FI

::

sh/bash/ksh 中的if 语句

if [[ condition ]];then commands;fi

KSH

::

Korn shell. (ksh88)

 

LN

::

创建一个硬链接文件a链接到文件A

ln a B

创建一个符号链接文件a链接到文件A

ln -s a B

删除链接文件B

rm B

LP

::

在默认打印机上打印文件

lp ‹file›

在指定打印机上打印文件

lp -d ‹destination› ‹file›

LPSTAT

::

显示所有的打印机

lpstat -a

查看打印机任务队列

lpstat -o

查看默认打印机

lpstat -d

查看打印机状态

lpstat -p

查看计划任何状态

lpstat -r

MAKE

::

执行一个 makefile中的第一个目标

make

执行一个 makefile中的指点目标

make ‹target›

指定一个特定的makefile文件名

make -f ‹mymakefile›

显示要做什么,但其实什么也没做

make -n ‹target›

MKDIR

::

一次创键目录和子目录

mkdir -p ‹path›/‹path›/‹path›

MOUNT

::

查看挂载的文件卷

mount

查看挂载的文件卷(有格式的)

mount -p

挂载一个光驱到目录/cdrom

mount /dev/cdrom /cdrom

挂载一个磁盘分区到目录 /usr

mount /dev/dsk/c0t3d0s5 /usr

NAWK

::

增强版的 awk

 

NL

::

以带行号的方式输出文件

nl -bt -nln ‹file›

NOHUP

::

启动一个命令马上退出

nohup ‹command› &

PACK

::

一个很老的文件打包程序,现在被gzip代替了。

pack ‹file›

PASSWD

::

修改你的帐号口令

passwd

删除一个用户的口令(root使用)

passwd -d ‹username›

改变一个用户的口令 (root使用)

passwd ‹username›

PASTE

::

以列的方式把多个文件组合起来

paste ‹file1› ‹file2› › ‹newfile›

PERL

::

Perl脚本语言的解释器

PR

::

把一个文件做成可打印的格式(76行一页)

pr -l76 -h”title” ‹filename›

 

 

REGCMP

::

从一个文件中编译正则表达式

regcmp ‹file›

文件内容示例

varname “^[a-z].*[0-9.*$”

RESET

::

重置终端设备

reset

RPCINFO

::

取得某主机的TCP端口信息

rpcinfo -p ‹host›

RSH

::

执行一个远程服务器上的命令

rsh ‹host› ‹comand›

SCRIPT

::

用来捕捉当前的终端会话中的所有输入输出结果到一个指定的文件

script ‹logfile›

SED

::

把某文件中的fred替换成john

sed -e ‘s/fred/john/g’ ‹file›

替换文件中匹配正则表达式的字符串

sed -e ‘s/[0-9]+/number/g’ ‹file›

把HTML文件中的 “X” 变成红色

sed -e ‘s!X!‹font color=”#FF0000″›X‹/font›!g;

把所有后缀为.suf1 改名成.suf2

ls -1 | grep ‘\.suf1$’ | sed -e ‘s/\(.*\.\)suf1/mv & \1suf2/’ | sh

把文件中包含c的行中的a 替换成b

sed -e ‘/C/s/A/B/’ ‹infile› ›‹outfile›

删除所有包含 “you owe me”的文件行

sed -e ‘/you owe me/d’ ‹infile› › ‹outfile›

使用commandfile中的命令来编译infile文件,并输出到outfile中。其中的commandfile中包含了一系列的vi命令

sed -f ‹commandfile› ‹infile› › ‹outfile›

SH

::

最老的 AT&T shell程序,也是使用最广泛的标准确shell。

SHUTDOWN

::

关机

shutdown -h now

SLEEP

::

sleep 10秒钟

sleep 10

SORT

::

以字符顺序把文件的每一行排序

sort ‹file›

以数字顺序把文件的每一行排序

sort -n ‹file›

反向排序

sort -r ‹file›

排序时对于重复项只保留一个

sort -u ‹file›

 

 

SPELL

::

检查拼写错误

spell ‹file›

检查拼写错误,但是忽略okfile中包含的单词

spell +‹okfile› ‹file›

SPLIT

::

拆分一个大文件,每个文件1m

split -b1m ‹file›

把拆分后的文件合并起来

cat x* › ‹newfile›

STRINGS

::

从二进制文件中读取ascii 字符串

strings ‹file›

STTY

::

显示终端设置

stty -a

设置 Ctrl+”H”为删除键

stty erase “^H”

对于用户的输入不回显

stty -echo

回显用户的输入

stty echo

SU

::

切换到root用户

su

切换到root用户并使用其环境

su –

切换到另一用户

su ‹username›

TAIL

::

显示某文件中的文件尾中包含pattern的文件行

tail -f ‹file› | grep ‹pattern›

TAR

::

把整个目录打包(没有压缩)

tar cvf ‹outfile›.tar ‹dir›

解包某个tar文件

tar xvf ‹file›.tar

先解压缩再解包

gzip -dc ‹file›.tar.gz | tar xvf –

打包成一个压缩包

tar xzvf ‹file›tar.gz

在.cshrc中设置 tar命令的tape 变量

tape=/dev/rmt/0mbn

把一个目录打包到tape变量所指的目录中

tar cv ‹dir›

从tape中解包

tar xv

从tape中解出一个文件

tar xv ‹file›

从 tape中得到一个内容表

tar t

以合适的权限和链接拷贝一个目录

(cd fromdir && tar -cBf – . ) | ( cd todir && tar -xBf – )

TCSH

::

Berkly的另一个非常不错的shell

TEE

::

把标准输入重定向到标准输出

who | tee -a › ‹file›

TEST

::

检查是否是一个文件

test -a ‹file›

检查是否某文件是否是root属性

test -O /usr/bin/su

检查某变量是否为 null

test -n “$foo”

以数字的方式比较两个数字字符串

test $var1 -gt $var2

在ksh 脚本中间接地使用”test”

if [[ -a ‹file› ]];then …;fi

TIME

::

查看运行一个命令需要多少时间

time ‹command›

TOUCH

::

更新文件的修改时间为当前时间,文件不存在则创建文件

touch ‹file›

TR

::

使用x替换a,y替换b,c替换z

tr ‘[a-c]’ ‘[x-z]’ ‹ infile › outfile

TRAP

::

捕捉”^C” 并执行子程序

trap “mysub;exit” 0 1 2 15

TRUE

::

让个不存在的命令返回0

ln -s /usr/bin/true ranlib

TRUSS

::

查看一个命令运行时的系统调用

truss ‹command› › /dev/null

TYPSET

::

查看被激活的功能

typset

TTY

::

查看终端所在的设备文件

tty

ULIMIT

::

查看系统所支持的最大文件长度

ulimit

UMASK

::

查看目前的umask

umask

设置一个umask

umask 077

UNIQ

::

查看一个文件中有多少行是一样的

sort ‹file› | uniq -c

仅输出唯一的没有重复的行

sort ‹file› | uniq -u

UPTIME

::

查看你的电脑开机多少时间了

uptime

UUENCODE

::

Encode一个文件以便发送电子邮件

uuencode decodedname namenow › codedname

UUDECODE

::

Decode 一个 uuencoded 文件

uudecode ‹file›

WAIT

::

等一个后进和运行结束

wait $jobid

VI

::

最主要的unix编译器

vi ‹file›

WC

::

计算一个文件的行号

wc -l ‹file›

XARGS

::

把标准输出作为参数来执行一条命令

‹command› | xargs -i grep ‘pattern’ {}

XON

::

从另一台电脑上得到一个xterm

xon ‹host›

从另一台电脑上得到所有的东西

xon ‹host› ‹X-client›

(全文完)