您的位置:首页 > 运维架构 > Linux

小鸟chacha初学linux 高级文件操作

2012-01-23 17:35 393 查看
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

本文出自 “初学linux” 博客,请务必保留此出处http://zhxchacha.blog.51cto.com/4277964/767227
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: