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 test1
bb: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
quit
3.'|'将前面命令或者程序的输出作为后面命令或者程序的输入
[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 localhost
4.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
100
5.xargs构造参数列表
[root@localhost ~]# seq -w 98 100|xargs
098 099 100
6.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/nologin
7.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 test
bb 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:bb
8.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 localhost
2 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
bb
2.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/bash
2.利用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