输入/输出重定向(I/O重定向):
重定向:
默认:
程序的默认输入设备:
标准输入(stdin)。通常是键盘。设备描述符为0。
程序的的默认输出设备:
标准输出(stdout)。只输出成功信息。通常是显示器(mintor)。设备描述符为1。
程序的默认错误信息输出设备:
标准错误输出(stderr)。通常是显示器(mintor)。设备描述符为2。
输出重定向:
#COMMAND > FILE 默认是覆盖输出。
使用#set -C 可以关闭覆盖重定向,使用#set +C来关闭此功能。但是只对当前shell有效。
或者使用>|来强行覆盖。
例如:
#ls /etc > /tmp/etc/out
#ls /var > tmp/etc/out
#ls /var >| /tmp/etc/out
#date > /dev/null
#COMMAND >> FILE 追加输入。
例如:
#ls /home >> /tmp/etc/out
#COMMAND >| FLIE 将命令的执行结果送至指定的文件中,若文件已经存在,则覆盖。
例如:
#ls -lg >| lee.dat 将执行"ls -lg"命令的结果覆盖写入文件 lee.dat 中。
#COMMAND >& FILE 将命令执行时屏幕上所产生的任何信息写入指定的文件中。
例如:
#cc lee.c >& lee.dat 将编译 lee.c 文件时所产生的任何信息写入文件 lee.dat 中。
#COMMAND >> FILE 将命令执行的结果附加到指定的文件中。
例如:
#ls -lag >> lee.dat 将执行 "ls -lag" 命令的结果附加到文件 lee.dat 中。
输入重定向:
#COMMAND < FILE
例如:
#tr 'a-z' 'A-Z' < /etc/passwd 将/etc/passwd中小写改成大写。
#COMMAND << EOF
EOF(End Of FILE) ,添加文件结尾标识,输入完成后输入EOF字符串表示文件结束。EOF内容可以自定义。Here document。
例如:
#cat >>/tmp/test3.out << TTCC 将输入的内容保存为test3.out。
EOF字符串此时自定义为TTCC,输入完成后输入TTCC表示文件结束。
the first.
the second.
the third.
TTCC
#cat /tmp/test3/out
the first.
the second.
the third.
例如:
#nano sec.sh
cat << EOF
what do you want to eat
1.shaoji
2.longxia
3.dazhaxie
4.gun
EOF
#bash sec.sh
1.shaoji
2.longxia
3.dazhaxie
4.gun
错误重定向:
只输出错误的信息。
#COMMAND 2 > FILE
#COMMAND 2 >> FILE
#COMMAND > FILE 2 >& 1 正常和错误输出都重定向。
#COMMAND > FILE1 2 > FILE2 错误的输出到FILE2,正确的输出到FILE1。
#COMMAND >& FILE 正常和错误输出都重定向
例如:
#lls /etc 2> /tmp/hell.out
#cat /tmp/hell.out
管道:
只传递正确的信息。
#COMMAND1|COMMAND2|COMMAND3 ...
例如:
#echo "the first line." | tr 'a-z' 'A-Z'
THE FIRST LINE.
#echo 'redhat' |paaswd -stdin test 将test的密码设定为redhat,通过标准输入方式定义。
#file `ls /var/log` |cut -d: -f2|tr -d ' ' 清除输出的空格
#file `ls /var/log` |cut -d: -f2|tr -d ' '|uniq 去重
#file `ls /var/log` |cut -d: -f2|tr -d ' '|sort -u 去重。
#file `ls /var/log` |cut -d: -f2|tr -d ' '|sort -u
#ll /tmp| wc -l 列出/tmp下的文件个数。
#wc -l /etc/paaswd |cut -d ' ' f1 只显示/etc/passwd文件的行数。
常见的伪文件:
/dev/null 数据黑洞,是软件模拟的设备。
/dev/zero 泡泡机,生成大量的0。
/dev/random 随机数生成器,是基于中断的IRQS产生随机数的。IRQS跟一些特殊的硬件绑定,基于这些硬件的interrupts将会提供给random设备。
/dev/urandom 随机数生成器,不受interrupts的限制。
#tee [OPTION] 1个输入,2个输出.
#COMMAND1 |tee FILE |COMMAND2
例如:
#ls /etc |tee /tmp/tee.out |tr 'a-z' 'A-Z' 转换字符并且将修改前的内容保存至/tmp/tee.out。
#uniq [OPTION] 忽略或者是移除连续的重复内容。
#tr [OPTION] "STRING1" "STRING2" < FILE 把FILE中查找到符合STRING1的内容操作为STRING2。
-c或--complerment 取代所有不属于STRING1的字符。
-d或--delete 删除所有属于STRING1的字符。
-s或--squeeze-repeats 把连续重复的字符以单独一个字符表示。
-t或--truncate-set1 将STRING1的字符依次替换成STRING2中的字符,如果STRING1中的字符数目超过STRING2,那么STRING1多出的字符忽略。
#cut [OPTION] FILENAME 剪切
-d SEP(separator) 指定分隔符为SEP。默认是空格。
-f NUM 指定要显示第NUM个字段。
-f NUM 显示第NUM个字段。
-f NUM1,NUM3 显示第NUM1和NUM3个字段。
-f NUM1-NUM3 显示第NUM1到NUM3个字段。
例如:
#cut -d :-f1 /etc/passwd
以:作为分隔符,显示第1个字段。
#cut -f1,7 /etc/passwd
显示第一个1字段和第7个字段,分隔符为空格。
#sort [OPTION] FILENAME 按照每个字符自左向右ASCII表中的值升序排列文件。
-n --numeric-sort 按照数值大小排序。
-r --reverse 降序排列。
-t 字段分隔符。
-k SEP 以某个字段为关键字或以某个字段开始进行排序。
-u 排序后相同内容只显示1次。仅限于相邻2行内容相同。
-f 忽略字符大小写。
例如:
#sort -t: -k3 /etc/passwd 以冒号为分隔符,从第3个字段开始排序。
#wc [OPTION] FILENAME (word conut) 统计文件行数、单词数、字节数(包括空格字符)。
-l 显示行数
-w 显示单词数
-c 显示字节数(byte)
-m 显示字符数(char)
-L 最长行包含的字符个数。
例如:
#wc /etc/passwd