tmp2>&1等价于 ./a.out&>tmp./a.out2>&11>tmp等价于 ./a.out>" />
文档库 最新最全的文档下载
当前位置:文档库 › Unix实用命令

Unix实用命令

Unix实用命令.txt第一次笑是因为遇见你,第一次哭是因为你不在,第一次笑着流泪是因为不能拥有你。重定向
> 重定向stdout

&>重定向stdout和stderr



重定向顺序

int main(void){

printf("stdout\n");

perror("stderr\n");

return 0;

}

./a.out 1>tmp 2>&1 等价于 ./a.out &> tmp

./a.out 2>&1 1>tmp 等价于 ./a.out > tmp

stdout重定向到某个文件,stderr依然输出到屏幕



注意:

只有重定向符号<或>右边的文件描述符才加&而且&和描述符之间不能有空格。

管道
管道符"|"只是把stdout重定向,不包括stderr。"|&"也包括stderr。



T型管道 tee

tee 从stdin接收数据,输出到stdout,并将输出复制到文件。

参数 -a (append, 否则覆盖已有文件)

例子:snoop -ta -x54 port 33333 | tee -a tmp



转义,引用,元字符
shell中,转义和引用是一对相反的概念。

元字符:本身就具有特殊意义,如<>*?|&

对于普通字符,前面加上 \ 则转义,表示其它含义,如\n

对于元字符,前面加上 \ 则引用,表示该字符本身,如\*

大批量引用元字符时,\ 显得很麻烦,可以将元字符放在一对单引号里,任何在单引号中的字符都将保留原样。

例如echo a'****'b

输出 a****b

技巧:利用单引号删除文件名中存在空格的文件

touch ‘test file'

rm ‘test file'




history
列出最近10条命令 history 10 列出最近10条命令

列出最近10条man命令 history 100 | grep man

alias
为命令定义临时的别名

alias ll='ls -l'

察看所有别名: alias

察看别名ll: alias ll

取消所有别名: unalias -a

取消别名ll: unalias ll

alias和unalias的效果只是暂时的,不会修改.bashrc文件,重新运行shell就无效了。



注意:

只能定义shell命令的别名,而不作其他替换。比如

alias blackhole /dev/null

command &> blackhole

并不能把command的输出舍弃,而是会建一个blackhole文件,并把输出写进去。因为blackhole在这里不是命令,没被替换成/dev/null.





jobs
选项-l 显示后台进程的pid

jobs 列出当前所有的作业,例如:

[1]- Running tail -f ability &

[2]+ Stopped tail -f apology

ctrl-z可以发一个STOP信号,将正在前台运行的进程在后台挂起。

如果要将正在前台运行的进程在后台运行,用命令bg %作业号

将后台进程切到前台的命令是fg %作业号。

关于前台,后台和stopped的概念,man手册上描述如下:

1. A job in the foreground has read and write access to the controlling terminal.

2. A job in the background is denied read access and has conditional write access to the controlling terminal

3. A stopped job is a job that has

been placed in a suspended state, usually as a result of a SIGTSTP signal



当退出shell时,系统会向该shell的所有子进程发一个SIGHUP信号。如果不想在退出时被SIGHUP信号杀死,可以用nohup屏蔽该信号,例如:

nohup tail -f ability > tmp &

当退出后,原本应该输出到终端的数据会写入当前目录下一个叫nohup.out的文件中。



od查看二进制文件
od -选项 文件名

选项:

-v 输出时不省略重复的数据。否则会用 * 表示重复的数据。

d, o, u, x 每段两个字节

Signed decimal, octal, unsigned decimal, and hexade-

cimal, respectively.

-f 浮点数,每段四个字节

-c ASCII字符, 每段一个字节

可以同时查看一个文件的十六,十,八进制,浮点数,和ascii字符格式。

例如:

od -xdofc /etc/motd

0000000 5375 6e20 4d69 6372 6f73 7973 7465 6d73

21365 28192 19817 25458 28531 31091 29797 28019

051565 067040 046551 061562 067563 074563 072145 066563

1.0541146e+12 2.4472554e+08 7.5351680e+28 7.2708488e+31

S u n M i c r o s y s t e m s

0000020 2049 6e63 2e09 5375 6e4f 5320 352e 3909

08265 28259 11785 21365 28239 21280 13614 14601

020111 067143 027011 051565 067117 051440 032456 034411

1.7061886e-19 3.1224318e-11 1.6040972e+28 6.4903048e-07

I n c . \t S u n O S 5 . 9 \t

............

0000061

注意,前面的偏移量是八进制显示的。




/dev/null UNIX中的黑洞
/dev/null 是一个特殊的字符文件,任何写入这个文件的数据都会消失。从这个文件里读的任何数据都是0.

如果要舍弃stdout或stderr的输出,可将其重定向到/dev/null

舍弃stdout: command > /dev/null

舍弃stderr: command 2>/dev/null

舍弃stdout和stderr: command &> /dev/null



ls
选项

-i 显示inode编号。

-r reverse 反向排序。
-R recursive 递归处理,将指定目录下的所有文件及子目录一并处理。
-t 用文件和目录的更改时间排序,最近的在前,如果想让最早的在前,用-tr逆置。




-l中drwxr-xr-x第一个字符表示文件类型,含义如下:

d directory.

D door.

l symbolic link.

b block special file.

c character special file.

p FIFO (or "named pipe") special file.

s The entry is an AF_UNIX address family socket.

- The entry is an ordinary file.

注意:

ls * 列出当前目录及其直接子目录两个目录层次中的所有文件。

ls -R 则递归到底。



ln
硬链接

用ln命令或link系统调用

实现硬链接,硬链接的局限是文件必须位于同一个物理文件系统中。

硬链接与目标文件是同一个inode。即硬链接不是一个独立的文件,只是在创建硬连接的目录中增加一个文件名,如果用ls -l查看硬连接,它所有的属性都和目标文件相同。



符号链接

用ln -s命令或symlink系统调用实现符号链接。

符号链接是真正独立的数据文件,它所存放的数据就是目标文件的文件名。符号链接经常用来解决当前文件系统空间不足的问题,例如把实际文件放在另一个文件系统,而当前文件系统里只存放一个符号链接。



技巧:当程序用到的文件名必须一致,但又没有此文件,则可以用硬链接或者符号链接解决。

FIFO
管道文件(FIFO,也叫有名管道named pipe),FIFO拥有文件名和信息节点,但不拥有任何数据。可以用mknod p命令或mknod系统调用创建FIFO。



touch
touch

将filename的访问时间和修改时间变为当前时间。

当filename不存在时,创建一个新的空文件。



cat
例子:

cat > tmp

把从键盘输入得到的内容写进一个文件。回车换行,ctrl-d退出。ctrl-d是unix中的文件结束符。

cat file1 file2 >file3

把file1和file2的内容连到一起,写进file3

例:cat chap1 chap2 chap3 chap4 > user_guide

cat chap5 chap6 >> user_guide



cp
选项 -i :Interactive. prompt for confirmation when cp would overwrite an existing target.

选项 -f : 强制执行,不输出任何提示,常用于脚本中。

-i和-f选项在mv和 rm命令中也适用。



file
列出文件类型。

例如列出当前目录下所有文件类型:file *

Makefile: ascii text

clean: commands text

main: directory

slms_test: ELF 64-bit MSB executable SPARCV9 Version 1, dynamically linked, not stripped



ps
-e 显示所有进程

-f 显示重要信息

-u username 某个用户的进程

find
指定的条件可以是文件名(包含通配符),文件大小,文件类型,以及修改/访问日期等。

格式:find path-list predicate-list

选项:

-name 如果文件名含有通配符,必须给文件名加引号。

-size [+|-]n[c] 数字n 表示512字节的数据块,如果以字节,需要在数字后面加c。+n表示大于n,-n表示小于n。+-都没有表示恰巧等于n.



-type t t可以是:

f普通文件 d 目录 l 链接

b 块特殊文件 c 字符特殊 p 管道文件



-mtime n天 修改过的

-atime [+|-]n 访问过的

-ctime [+|-]n 文件状态信息变动过的

+n 距离今天n天之外

-n 距离今天n天之内

n 距离今天恰巧n天

-newer  查找其更改时间较filename更接近现在的。



-links

[+|-]n 链接数为(大于,等于,小于)n的



! -a -o not, and , or 组合条件必须加\( con1 -a con2 \)

其实-a完全没用,因为默认的列举多个条件就是找出满足所有条件的。-o可以用多次执行的方法实现。唯独!有点用处。



-exec command {} \+ 用command处理find所找到的文件,command可以是任何操作文件的命令,如rm, mv, cp, chmod等。因为参数个个数由上限,因此当处理的文件个数非常多时,建议用find ... | xargs command。



例子:

从当前目录开始找以map作为文件名结尾的文件

find . -name ‘*map'



从当前目录开始找大小恰等于32字节的文件:find . -size 32c

从用户home目录下开始查找所有大小超过1000*512字节的文件

find ~ -size +1000



从用户home目录下开始查找所有最近两天内修改的文件

find ~ -mtime -2

从当前目录开始找比main修改时间晚的文件

find . -newer main



从home目录开始找文件类型是目录,且文件名是src的文件

find ~ -type d - name src



删除该用户目录及子目录下所有的core,删除前提示一下,以免删错

find ~ -name core -exec rm -i {} \+

删除该用户目录及子目录下所有大于10M的文件,删除前提示一下,以免删错

find ~ -size +20000 -exec rm -i {} \+



文章汇总

find . -name 'chapter*' | sort | xargs cat > latest_version

找所有包含biz_com的.c和.h文件的行

find . -name '*.[ch]' | xargs grep biz_com

注意:

目录也是文件,因此以下所说的文件也包含目录。

find 从指定目录向下递归查找。




grep
找到包含匹配模式字符串的那一行,此命令常与管道搭配用来过滤。

选项:

-i 忽略大小写

-n 显示行号

-v 过滤掉所包含的pattern

例子:查找当前目录及其子目录下所有十月份修改的.c文件

find . -name '*.c' | xargs ls -l | grep Oct

查找段口号为33333并且状态值是ESTABLISHED的连接

netstat -an | grep 33333 | grep ESTA

查找段口号为33333并且状态值不是TIMED WAIT的连接

netstat -an | grep 33333 | grep -v ‘TIMED WAIT'

相关文档