Unix philosophy:do one thing and do it well
Unix 3准则:
(1)一次只做一件事,并做到最好
(2)能够与其他程序协同工作
(3)能够处理文本流
如何与其他程序协同:重定向redirection和pipes管道
输入输出文本流I/O Stream
Linux中使用>和>>符来重定向标准输入
1.1输出重定向:将某个命令默认指向stdout或stderr的输出文本转而指向一个文件,即使命令输出到某个指定文件中,而不是输出到终端屏幕或者终端窗口中了
如何进行输出重定向:
ls -l /tmp/example/ 1>./stdout.txt【1:文件描述符,表示被重定向的是标准输出】如果stdout.txt文件原本不存在,文件将被创建;文件原本存在,内容将被覆盖
ls -l /tmp/example/ 1>> ./stdout.txt【双右尖括号,命令的输出将添加到文件原来内容后面】
ls -l /tmp/example/ 2> ./stderr.txt【2:重定向错误输出】
ls -l /tmp/example/file01 /tmp/example/file04
1>stdout.txt 2>stderr.txt 【同时重定向标准输出与错误输出】
ls -l /tmp/example/file01 /tmp/example/file04
&>std.txt 【同时重定向标准输出与错误输出并输出到同一个文件当中】
例一:利用文件输出重定向结合echo命令创建文本文件
-e输出转义字符
例二:用文件输出重定向来忽略命令错误输出,即执行某个命令但不希望在屏幕上显示命令的错误输出,错误输出被重定向到了一个名为/dev/null文件中
ls -l /tmp/example/file01 /tmp/example/file04
/dev/null文件是一个非常特殊的块设备文件,可视为系统的黑洞
1.2输入重定向:让命令从指定的文件中获取输入,而非从stdin中,这常常指从键盘获取输入
<和<<符来重定向标准输入
例一:
tr命令往往用于从标准输入中替换特定字符,并将结果写到标准输出
tr [准备要替换的字符][要替换成的字符]
例二:
sort展示了输入重定向的一种特殊形式:here document
sort -k[关键字字段序号][要排序的文本文件]
界定符EOF不一定是EOF但结尾的界定符要顶格写,前后无空格s
2管道:一种特殊的输入输出重定向
将一个命令的标准输出重定向为另一个命令的标准输入。
管道操作符|
构造命令管道:使用管道操作符将命令连起来
命令1的输出作为命令2的输入,命令2的输出作为命令3的输入,命令n的输出作为最终输出方直接显示在屏幕上
例子1:对命令的输出进行分页查看
ls -l /etc |less
例子2:
grep正则表达式【文本查找命令后可跟2个参数】
grep[关键字][目标文件]
ls -l /etc |grep ‘ssh’ 【查找ls命令输出中带有ssh字样的行】
例子3:文本提取和统计
cut文本切割命令,cut用于切割文本文件或者标准输出中的指定列,并输出
cut -c【用字符列切割文本,-c选项后面紧跟的数字表示切割的字符列序号,可以切割多列,数字之间用逗号隔开】
cat ~/install.log| cut -c 1,2【切割输出当前用户家目录下的install.log的前两列字符】
cat /etc/passwd |cut -f1 -d”:”【cut 连用-d -f 两个选项,按指定分隔符分隔开的文本来切割文本,其中-d选项后面紧跟的符号表示分隔符,-f选项后面紧跟的数字表示切割的字段序列号】【这里切割输入/etc/passwd文件的第一个字段,字段用“:”隔开】
wc 文本统计命令,wc可以统计文本文件或者标准输出中的文本行数单词数和字节数
wc -l /etc/passwd【仅表示统计文本行数】
ls -l ~|cut -c1|grep “d”|wc -l【统计当前用户家目录下所有目录文件的数目】