7.1 输入输出重定向
“>”输出重定向 覆盖原来的内容 [root@localhost cc]# cat son 1244558878 1223446 我爱你 我要在信息安全上取得成就 我要进大型企业 我要好好学习linux 我爱linux [root@localhost cc]# cat son >daughter [root@localhost cc]# ls daughter home husband son xiaoyu [root@localhost cc]# cat daughter 1244558878 1223446 我爱你 我要在信息安全上取得成就 我要进大型企业 我要好好学习linux 我爱linux “>>”输出追加命令 不覆盖原内容 [root@localhost cc]# cat husband 我爱你 1223446 1244558878 [root@localhost cc]# cat husband >son [root@localhost cc]# cat son//查看文件内容 内容已经被覆盖 我爱你 1223446 1244558878 [root@localhost cc]# cat daughter 1244558878 1223446 我爱你 我要在信息安全上取得成就 我要进大型企业 我要好好学习linux 我爱linux[root@localhost cc]# sort -t: -k2 test1bb:aa:dd:cc:
aa:bb:cc:dd dd:cc:bb:aa cc:dd:aa:bb[root@localhost cc]# cat daughter >> son
[root@localhost cc]# cat son//在原来内容后面追加 我爱你 1223446 1244558878 1244558878 1223446 我爱你 我要在信息安全上取得成就 我要进大型企业 我要好好学习linux 我爱linux linux常见输入输出有如下几种 标准输入:输入设备为:键盘、文件 标记为:0 标准输出:输出设备为:屏幕、终端 标记为:1 错误输出:输出设备为:屏幕、终端 标记为:2 [root@localhost cc]# cat husband wife 1>right 2>erro输出会覆盖原来内容 [root@localhost cc]# cat right 我爱你 1223446 1244558878 [root@localhost cc]# cat erro cat: wife: 没有那个文件或目录 [root@localhost cc]# cat husband wife 1>>right 2>>erro [root@localhost cc]# cat right 我爱你[root@localhost cc]# cat husband wife &>right_err [root@localhost cc]# cat right_err 我爱你 1223446 1244558878 cat: wife: 没有那个文件或目录1223446
1244558878 我爱你 //追加内容 1223446 1244558878 [root@localhost cc]# cat erro cat: wife: 没有那个文件或目录 cat: wife: 没有那个文件或目录//追加内容 &>错误 正确 合并后重定向 [root@localhost cc]# cat husband wife &>right_err [root@localhost cc]# cat right_err//同时输出到right_err 我爱你 1223446 1244558878 cat: wife: 没有那个文件或目录 &> 另一种写法:1>test1 2>&1<改变标准输入为文件输入
/dev/null 系统黑洞 如果你不想作任何输出 就应该把输出定向到黑洞
/dev/zero 2进制的零流 7.2管道及相关配套命令 1.echo 在屏幕上显示一段文字或者指定的内容 [root@localhost cc]# echo abc abc -n 不换行 [root@localhost cc]# echo -n abc abc[root@localhost cc]# echo $?查看上一条命令是否执行成功 0表示成功 1-255 表示失败 [root@localhost cc]# echo $? 0 echo $变量名 查看变量值 [root@localhost cc]# a=3//定义变量 [root@localhost cc]# echo $a//查看变量 3 echo $[9+9] echo $((9+9))计算 双引号弱引用 引用变量值 单引号强引用 引用变量名 [root@localhost ~]# var=linux [root@localhost ~]# echo $var linux [root@localhost ~]# echo "$var" linux [root@localhost ~]# echo '$var' $var [root@localhost ~]# echo \$var $var -e 处理由‘\’表示的转义 [root@localhost ~]# echo 'a\tb' a\tb [root@localhost ~]# echo "a\tb" a\tb [root@localhost ~]# echo -e "a\tb" a b [root@localhost ~]# echo -e 'a\tb' a b let 使计算表达式计算出结果 [root@localhost ~]# echo var=4+9 var=4+9 [root@localhost ~]# let var=4+9 [root@localhost ~]# echo $var 13 2.bc 算术取整数 [root@localhost ~]# bc bc 1.06 Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. 5/2 2 quit3.'|'将前面命令或者程序的输出作为后面命令或者程序的输入
[root@localhost ~]# echo 8+9 8+9 [root@localhost ~]# echo 8+9|bc 17 [root@localhost ~]# cat /etc/hosts|grep 127 cat的结果给grep进行筛选出127的行 127.0.0.1 localhost.localdomain localhost4.seq打印出一串有序的整数 默认从1开始 必须指明尾数
[root@localhost ~]# seq 5 1 2 3 4 5 [root@localhost ~]# seq 5 8 5 6 7 8 -f 指定数字格式 [root@localhost ~]# seq -f %03g 5 9 005 006 007 008 009 -s 指定分隔符 [root@localhost ~]# seq -s '+' 4 8 4+5+6+7+8 -w指定宽度 按最宽的 [root@localhost ~]# seq -w 98 100 098 099 1005.xargs构造参数列表
[root@localhost ~]# seq -w 98 100|xargs 098 099 1006.tr 对指定字符转换
tr[选项] [参数]文件 -s去除重复字符 [root@localhost cc]# cat home1 aaaaaaaaa bbbbbbbb ccccccc AAAAAAAAAAAAABBB CCCCCCCCCCCC GGGGGGGGGGG 12233 $$$$$$$$$$$$$$$$$ &&&&&&&&&&&&&&&&&&& ^^^^^^^^^^^^^^^^^ 77777777777777777777#$%^)_))(**&^%%%$$$ [root@localhost cc]# tr -s '[a-z][A-Z]' <home1 合并重复字符a-z A-Z a b c AB C G 12233 $$$$$$$$$$$$$$$$$ &&&&&&&&&&&&&&&&&&& ^^^^^^^^^^^^^^^^^ 77777777777777777777#$%^)_))(**&^%%%$$$[root@localhost cc]# tr -s [a-z] <home1只合并小写字符
a b c AAAAAAAAAAAAABBB CCCCCCCCCCCC GGGGGGGGGGG 12233 $$$$$$$$$$$$$$$$$ &&&&&&&&&&&&&&&&&&& ^^^^^^^^^^^^^^^^^ 77777777777777777777#$%^)_))(**&^%%%$$$ [root@localhost cc]# tr -d [a-z] <home1 删除小写字符
AAAAAAAAAAAAABBB
CCCCCCCCCCCC GGGGGGGGGGG 12233 $$$$$$$$$$$$$$$$$ &&&&&&&&&&&&&&&&&&& ^^^^^^^^^^^^^^^^^ 77777777777777777777#$%^)_))(**&^%%%$$$ [root@localhost cc]# tr 'a-z' 'A-Z'<home1 小写转化为大写输出 AAAAAAAAA BBBBBBBB CCCCCCC AAAAAAAAAAAAABBB CCCCCCCCCCCC GGGGGGGGGGG 12233 $$$$$$$$$$$$$$$$$ &&&&&&&&&&&&&&&&&&& ^^^^^^^^^^^^^^^^^ 77777777777777777777#$%^)_))(**&^%%%$$$ [root@localhost cc]# tr -d -c [a-z] <home1删除指定字符的补集 aaaaaaaaabbbbbbbbccccccc [root@localhost cc]# tr ':''/' ' ' <home2|head -2 root x 0 0 root root bin bash bin x 1 1 bin bin sbin nologin [root@localhost cc]# head -2 home2 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin7.sort 排序
sort [选项]文件 sort 命令对文件的行进行排序,并将结果写入到标准输出。如果多个文件,那么sort命令将这些文件连接起来。并作为一个文件进行排序 可以使用-o可以指定输出文件 [root@localhost cc]# sort home1//按字典顺序排序 ^^^^^^^^^^^^^^^^^ $$$$$$$$$$$$$$$$$ &&&&&&&&&&&&&&&&&&&[root@localhost cc]# uniq -c home1 1 aaaaaaaaa 2 bbbbbbbb 2 ccccccc 1 AAAAAAAAAAAAABBB 1 CCCCCCCCCCCC 1 CCCCCCCCCCCCOA 2 GGGGGGGGGGG 1 12233 1 $$$$$$$$$$$$$$$$$ 1 &&&&&&&&&&&&&&&&&&& 1 ^^^^^^^^^^^^^^^^^ 1 77777777777777777777#$%^)_))(**&^%%%$$$12233
77777777777777777777#$%^)_))(**&^%%%$$$ aaaaaaaaa AAAAAAAAAAAAABBB bbbbbbbb bbbbbbbb ccccccc ccccccc CCCCCCCCCCCC CCCCCCCCCCCCOA GGGGGGGGGGG GGGGGGGGGGG [root@localhost cc]# sort -u home1//排序合并相同行 比较常用 ^^^^^^^^^^^^^^^^^ $$$$$$$$$$$$$$$$$ &&&&&&&&&&&&&&&&&&& 12233 77777777777777777777#$%^)_))(**&^%%%$$$ aaaaaaaaa AAAAAAAAAAAAABBB bbbbbbbb ccccccc CCCCCCCCCCCC[root@localhost cc]# uniq -c home1 1 aaaaaaaaa 2 bbbbbbbb 2 ccccccc 1 AAAAAAAAAAAAABBB 1 CCCCCCCCCCCC 1 CCCCCCCCCCCCOA 2 GGGGGGGGGGG 1 12233 1 $$$$$$$$$$$$$$$$$ 1 &&&&&&&&&&&&&&&&&&& 1 ^^^^^^^^^^^^^^^^^ 1 77777777777777777777#$%^)_))(**&^%%%$$$CCCCCCCCCCCCOA
GGGGGGGGGGG [root@localhost cc]# sort -f home1//忽略大小写进行排序 ^^^^^^^^^^^^^^^^^ $$$$$$$$$$$$$$$$$ &&&&&&&&&&&&&&&&&&& 12233 77777777777777777777#$%^)_))(**&^%%%$$$ aaaaaaaaa AAAAAAAAAAAAABBB bbbbbbbb bbbbbbbb ccccccc ccccccc CCCCCCCCCCCC CCCCCCCCCCCCOA GGGGGGGGGGG GGGGGGGGGGG [root@localhost cc]# sort -r home1//逆序排序 GGGGGGGGGGG GGGGGGGGGGG CCCCCCCCCCCCOA CCCCCCCCCCCC ccccccc ccccccc bbbbbbbb bbbbbbbb AAAAAAAAAAAAABBB aaaaaaaaa 77777777777777777777#$%^)_))(**&^%%%$$$ 12233 &&&&&&&&&&&&&&&&&&& $$$$$$$$$$$$$$$$$ ^^^^^^^^^^^^^^^^^ sort +m -n按指定地段进行排序默认是空格 或者tab作为分隔符m以后n以前的字符进行排序 [root@localhost cc]# sort +1 -2 testbb aa dd cc
aa bb cc dd dd cc bb aa cc dd aa bb -k指定字段进行排序 [root@localhost cc]# sort -k3 test 以字段3进行排序cc dd aa bb
dd cc bb aa aa bb cc dd bb aa dd cc -t 指定分隔符进行排序 [root@localhost cc]# sort -t: -k2 test1指定分隔符:按照第二个字段排序输出bb:aa:dd:cc
aa:bb:cc:dd dd:cc:bb:aa cc:dd:aa:bb8.uniq
删除文件的重复行 默认输出到标准输出 uniq [选项]文件 [root@localhost cc]# uniq -d home1只显示重复行 bbbbbbbb ccccccc GGGGGGGGGGG [root@localhost cc]# uniq -u home1显示不重复的行 aaaaaaaaa AAAAAAAAAAAAABBB CCCCCCCCCCCC CCCCCCCCCCCCOA 12233 $$$$$$$$$$$$$$$$$ &&&&&&&&&&&&&&&&&&& ^^^^^^^^^^^^^^^^^ 7777777777777777[**&^%%%$$$ 7777#$%^)_))(**&^%%%$$$ [root@localhost cc]# uniq -c home1//统计显示每一行出现的行次数 并放在行首 1 aaaaaaaaa[root@localhost cc]# cat -n hosts 1 # Do not remove the following line, or various programs 2 # that require network functionality will fail. 3 127.0.0.1 localhost.localdomain localhost 4 ::1 localhost6.localdomain6 localhost6 [root@localhost cc]# cat -n hosts|grep 127 3 127.0.0.1 localhost.localdomain localhost2 bbbbbbbb
2 ccccccc 1 AAAAAAAAAAAAABBB 1 CCCCCCCCCCCC 1 CCCCCCCCCCCCOA 2 GGGGGGGGGGG 1 12233 1 $$$$$$$$$$$$$$$$$ 1 &&&&&&&&&&&&&&&&&&& 1 ^^^^^^^^^^^^^^^^^ 1 77777777777777777777#$%^)_))(**&^%%%$$$7.4数据的提取和过滤
1.cut 按列截取文件的内容 语法:cut [选项]文件 -b 安字节查找 [root@localhost cc]# cat test aa bb cc dd bb aa dd cc cc dd aa bb dd cc bb aa [root@localhost cc]# cut -b4-5 test bb aa dd cc -c按字符截取 character -f 按字段截取文件中的每行的内容 默认为tab [root@localhost cc]# cut -d: -f3 test1 cc dd aa bb [root@localhost cc]# cat test2 aa bb cc dd bb aa dd cc cc dd aa bb dd cc bb aa[root@localhost cc]# cut -f3 test2 //截取第三字段 字段之间分隔符默认为tab
cc dd aa bb -d 指定分隔符 [root@localhost cc]# cat test aa bb cc dd bb aa dd cc cc dd aa bb dd cc bb aa[root@localhost cc]# cut -d" " -f3 test指定分隔符是空格
cc dd aa bb2.grep
按指定字符串过滤文件 显示匹配行[root@localhost cc]# cat -n hosts
1 # Do not remove the following line, or various programs 2 # that require network functionality will fail. 3 127.0.0.1 localhost.localdomain localhost 4 ::1 localhost6.localdomain6 localhost6 [root@localhost cc]# cat -n hosts|grep 127 显示含有127的行 3 127.0.0.1 localhost.localdomain localhost [root@localhost cc]# cat hosts|grep ^#显示以#开头 # Do not remove the following line, or various programs # that require network functionality will fail. [root@localhost cc]# cat -n hosts |grep 6$显示6 4 ::1 localhost6.localdomain6 localhost6 -v 显示不匹配的行 [root@localhost cc]# grep -v 6$ hosts # Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 localhost.localdomain localhost -i 不区分大小写显示所匹配的行7.5文件差异对比和补丁生成以及打补丁
1,diff 找到两个文件的不同 逐行比较文本文件 如果其中一个是目录 另一个是文件 则 比较目录中同名文件 如果两个都是目录 比较两个目录中同名文件 [root@localhost cc]# cat test aa bb cc dd bb aa dd cc cc dd aa bb dd cc bb aa[root@localhost cc]# cat test1
aa:bb:cc:dd bb:aa:dd:cc: cc:dd:aa:bb dd:cc:bb:aa[root@localhost cc]# diff test test1
1,4c1,4 < aa bb cc dd < bb aa dd cc < cc dd aa bb < dd cc bb aa --- > aa:bb:cc:dd > bb:aa:dd:cc: > cc:dd:aa:bb > dd:cc:bb:aa [root@localhost cc]# diff -u test test1//表明文件1如何通过改变变 成文件2 并输出1变成2的过程补丁内容 --- test 2012-01-20 17:06:22.000000000 +0800 +++ test1 2012-01-20 17:14:09.000000000 +0800 @@ -1,5 +1,5 @@ -aa bb cc dd -bb aa dd cc -cc dd aa bb -dd cc bb aa +aa:bb:cc:dd[root@localhost cc]# cat f_spring-summer.exe.patch --- fetion_spring.exe 2012-01-21 12:46:59.000000000 +0800 +++ fetion_summer.exe 2012-01-21 12:47:49.000000000 +0800 @@ -1,3 +1,3 @@ -这个季节是春季 -平均气温在23度以上 -总下雨 +这个季节是夏季 +平均气温在33度以上 +太热了!+bb:aa:dd:cc:
+cc:dd:aa:bb +dd:cc:bb:aa [root@localhost cc]# ls fetion_spring fetion_summer [root@localhost cc]# diff fetion_spring/ fetion_summer/ diff fetion_spring/contect fetion_summer/contect 2c2 < 李四 lisi 00987734123 --- > 李六 liliu 00947734123 [root@localhost cc]# diff -u fetion_spring/ fetion_summer/ diff -u fetion_spring/contect fetion_summer/contect --- fetion_spring/contect 2012-01-21 12:24:16.000000000 +0800 +++ fetion_summer/contect 2012-01-21 12:26:54.000000000 +0800 @@ -1,3 +1,3 @@ 张三 zhangsan 12334567890 -李四 lisi 00987734123 +李六 liliu 00947734123 王五 wangwu 73478327532 [root@localhost cc]# diff -r fetion_spring/ fetion_summer/递归的比较目录中的文件 diff -r fetion_spring/contect fetion_summer/contect 2c2 < 李四 lisi 00987734123 --- > 李六 liliu 00947734123 Only in fetion_spring/message: hosts Only in fetion_summer/message: passwd [root@localhost cc]# diff -Nr fetion_spring/ fetion_summer/ 如果目录中不存在同名文件 则使用空文件进行比较 diff -Nr fetion_spring/contect fetion_summer/contect 2c2 < 李四 lisi 00987734123 --- > 李六 liliu 00947734123 diff -Nr fetion_spring/message/hosts fetion_summer/message/hosts 1,4d0 < # Do not remove the following line, or various programs < # that require network functionality will fail. < 127.0.0.1 localhost.localdomain localhost < ::1 localhost6.localdomain6 localhost6 diff -Nr fetion_spring/message/passwd fetion_summer/message/passwd 0a1,10 > postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash > oprofile:x:16:16:Special user account to be used by OProfile:/home/oprofile:/sbin/nologin > webalizer:x:67:67:Webalizer:/var/www/usage:/sbin/nologin > squid:x:23:23::/var/spool/squid:/sbin/nologin > mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash > xfs:x:43:43:X Font Server:/etc/X11/fs:/sbin/nologin > named:x:25:25:Named:/var/named:/sbin/nologin > gdm:x:42:42::/var/gdm:/sbin/nologin > sabayon:x:86:86:Sabayon user:/home/sabayon:/sbin/nologin > zhaohailong:x:500:500::/home/zhaohailong:/bin/bash2.利用diff 生成补丁文件
对于文件常常使用diff -u
[root@localhost cc]# diff -Nur fetion_spring/ fetion_summer/>f_spring-summer.patch//对于目录常常使用Nur选项组合 [root@localhost cc]# cat f_spring-summer.patch diff -Nur fetion_spring/contect fetion_summer/contect --- fetion_spring/contect 2012-01-21 12:24:16.000000000 +0800 +++ fetion_summer/contect 2012-01-21 12:26:54.000000000 +0800 @@ -1,3 +1,3 @@ 张三 zhangsan 12334567890 -李四 lisi 00987734123 +李六 liliu 00947734123 王五 wangwu 73478327532 diff -Nur fetion_spring/message/hosts fetion_summer/message/hosts --- fetion_spring/message/hosts 2012-01-21 12:29:11.000000000 +0800 +++ fetion_summer/message/hosts 1970-01-01 08:00:00.000000000 +0800 @@ -1,4 +0,0 @@ -# Do not remove the following line, or various programs -# that require network functionality will fail. -127.0.0.1 localhost.localdomain localhost -::1 localhost6.localdomain6 localhost6 diff -Nur fetion_spring/message/passwd fetion_summer/message/passwd --- fetion_spring/message/passwd 1970-01-01 08:00:00.000000000 +0800 +++ fetion_summer/message/passwd 2012-01-21 12:31:07.000000000 +0800 @@ -0,0 +1,10 @@ +postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash +oprofile:x:16:16:Special user account to be used by OProfile:/home/oprofile:/sbin/nologin +webalizer:x:67:67:Webalizer:/var/www/usage:/sbin/nologin +squid:x:23:23::/var/spool/squid:/sbin/nologin +mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash +xfs:x:43:43:X Font Server:/etc/X11/fs:/sbin/nologin +named:x:25:25:Named:/var/named:/sbin/nologin +gdm:x:42:42::/var/gdm:/sbin/nologin +sabayon:x:86:86:Sabayon user:/home/sabayon:/sbin/nologin +zhaohailong:x:500:500::/home/zhaohailong:/bin/bash 3.patch打补丁 修补文件 格式:patch [选项] 原始文件(目录)<补丁文件 (1)对文件打补丁 [root@localhost cc]# diff -u fetion_spring.exe fetion_summer.exe >f_spring-summer.exe.patch [root@localhost cc]# cat f_spring-summer.exe.patch --- fetion_spring.exe 2012-01-21 12:46:59.000000000 +0800 +++ fetion_summer.exe 2012-01-21 12:47:49.000000000 +0800 @@ -1,3 +1,3 @@ -这个季节是春季 -平均气温在23度以上 -总下雨 +这个季节是夏季 +平均气温在33度以上 +太热了! [root@localhost cc]# cat fetion_spring.exe //原来的fetion_spring.exe文件 这个季节是春季 平均气温在23度以上 总下雨 [root@localhost cc]# cat fetion_summer.exe 这个季节是夏季 平均气温在33度以上 太热了! [root@localhost cc]# patch fetion_spring.exe<f_spring-summer.exe.patch //补丁文件和文件应该在同一目录 patching file fetion_spring.exe [root@localhost cc]# cat fetion_spring.exe //打过补丁后的fetion_spring.exe文件 和summer版相同 这个季节是夏季 平均气温在33度以上 太热了!-R 利用补丁文件恢复到原来的状态
[root@localhost cc]# patch -R fetion_spring.exe<f_spring-summer.exe.patch patching file fetion_spring.exe [root@localhost cc]# cat fetion_summer.exe 这个季节是夏季 平均气温在33度以上 太热了! [root@localhost cc]# cat fetion_spring.exe //春天版本已经恢复到初始状态 这个季节是春季 平均气温在23度以上 总下雨(2)
给目录打补丁 最简单的方式是把补丁文件放在需要打补丁的目录 进入目录 利用选项 -p1 [root@localhost cc]# cp f_spring-summer.patch fetion_spring/ //复制到目录 [root@localhost cc]# cd fetion_spring//切换到目录 [root@localhost fetion_spring]# ls contect f_spring-summer.patch message news [root@localhost fetion_spring]# patch -p1<f_spring-summer.patch//打补丁 patching file contect patching file message/hosts patching file message/passwd [root@localhost fetion_spring]# ls contect f_spring-summer.patch message news