linux第十一天

文件查找以及文本处理

linux 第十一

文件查找(二)

avatar

根据权限查找:find -perm 644 -type f,这是精确匹配了

但是如果我们这样:find -perm /644 -type f,表示所有者是6权限或者所有组是4权限或者其他是4权限的文件

只要这三种人任意一个有读权限的文件:find -perm /444 -type f

并且的关系:find -perm -444 -type f,表示这三种人必须都有读权限

特别注意0,这表示不关注:find -perm /000 -type f(这个/和-都没差,都是000的话,或者/002和-002也是一样的),

avatar

delete有点危险,问都不问

当然我们的动作也可以这样写:find -perm /202 -type f > list.txt

可以用ok做备份 ,{}这个代表找到的文件的名称:find -name "*.conf" -ok cp {} /root/{}.back \;。记住带ok就必须\;.但是ok有个问题,它会找到一个文件问你一次。

find -name "*.conf" -exec cp {} /root/{}.bak \; 这也可以,还不用询问你

参数xargs

avatar

很多命令是对参数长度有要求的,比如rm *,如果你的文件很多,可还能会超出长度,那可以这样做(逐个删除):ls f* *|xargs rm .这个就是前面的标准输出传递给xargs,然后生成一个个参数传递给rm

avatar

压缩,解压工具

第一个conpress,压缩的没有其他的号,现在一般不用了,后缀为.Z

avatar

当然我们可以把-c的输出重定向到一个文件中也行。zcat会把解压缩的显示出来,也是一样可以重定向

gzip更好,默认压缩比-6,这也是一个比较古老的压缩方式:

avatar

zcat也可以支持gzip

bzip压缩比更高

avatar

记住解压缩是看后缀的,后缀不对是有可能会解压失败的

avatar

这种压缩是最高的,但由于比较新可能支持方面不是特别好

zip格式,window也支持

avatar

还支持压缩目录

压缩有可能丢失信息,比如acl权限等

打包工具tar

上面我们说只有zip才能压缩文件夹,当然我们也可以用tar打包并压缩

avatar

-c表示创建,-f创建文件并且需要指定tar后缀。一般我们还会展示打包过程-v,因此cvf会一起用

tar -cvf /app/sysconfig.tar /etc/sysconfig,打包,但是没压缩,可以用du -sh /etc/sysconfig/查看原来的目录大小

压缩打包:tar -zcvf /app/sysconfig.tar.gz /etc/sysconfig (后缀需要自己指定)

如果你需要追加到文件,必须只能是追加到没有压缩过的文件

查看压缩的文件(也可以看没压缩的):tar tvf /app/sysconfig.tar.gz 。 (参数不加-也行

解压缩到指定文件夹(默认是解压缩到当前目录):tar xvf /app/sysconfig.tar -C /app/etc

avatar

可以使用-T读取这个文件,然后进行打包:tar -T tarfile -Jcvf a.tar.xz.当然它会提示tar: Removing leading /‘ from member names`。意思就是把你的根/给删了,这样的目的是为了你解压还原的时候是相对路径

排除 -X,可以用这样来排除需要打包的文件

切割的话每个文件头是一样的(切割一个32m的,前缀名叫etc):split -b5M etc.tar etc

把切割出来的文件再次合并:cat etca* > etc2.tar

avatar

avatar

备份整个app目录(在app目录下运行):find | cpio -ov > /app/app.cpio

甚至可以选择一部分进行解包:cpio -idv yesno.sh < /app/app.cpio

文本处理sed

avatar

avatar

avatar

这个地址指的就是行,最简单的就是不给地址

avatar

sed ‘p’ /etc/issue。p就是打印的意思,那就是把这个文件每行都打印出来,但是这样回打印两边,因为你默认进来就打印了一边,加上p又给你打印了一遍,因此我们可以sed -n 'p' /etc/issue 使用-n关闭自动打印

可以指定第几行:sed -n '2p' /etc/issue

可以显示最后一行:sed -n '$p' /etc/issue

也可以写正则(写在//里面):sed -n '/^U/p' /etc/fstab

从第几行到第几行:sed -n '8,12p' /etc/fstab

也可以表示这行之后到第几行:sed -n '8,+3p'/etc/fstab ,减号则反之

还可以支持两个模式之间的行(b大头到 l 之间的行):sed -n '/^b/,/^l/p' /etc/passwd

当然你也可以:sed -n '3,/^l/p' /etc/passwd

也可以步进,每次递增多少:sed -n '3~2p' /etc/passed,一开始3,然后5,7

avatar

我们可以删除20到30的行:cat /etc/passwd -n |sed '20,30d'

当然也可以打印奇数行:cat /etc/passwd -n |sed '2~2d'

遇到需要转义的必须转义:df |sed -n '/^\/dev\/sd/p'

还可以追加,比如再3~6行间追加:cat /etc/passwd -n |sed '3,6a=============='

也可以这样:cat /etc/passwd -n | sed '3,6a/ ==========='//杠后面的都是你要追加的。这挺有用,比如我们想在.bashrc加一行,这就可以用sed的,可以在任意追加

-i.bak,如果你直接-i在源文件编辑,可能会遇到错误之类,可以使用-i.bak先备份再在原来文件修改:

sed -i.bak '8a alias cdnet="cd /etc/sysconfig/network-scripts" ' ~/.bashrc,备份后是个隐藏文件

在某个行前面追加:sed '/^# Sourc/ixxxx'

更加方便的替换(如果需要直接替换要加-i):sed '/^SELIUNX=/c SETLIUNX=disabled' /etc/selinux/config

保存能匹配到的行到指定文件:sed "/^alias/w alias.sed" /root/.bashrc

也可以把找到的文件放到指定行的后面:sed "/^alias/r /etc/centos-release" /root/.bashrc

空格获取行号:sed "/^alias/=" /root/.bashrc

取反打印:sed "/^alias/!p" /root/.bashrc

avatar

我们一般不写///,最好用其他字符替代,比如@@@,###这样

除了第二行删了:ifconfig ens33|swed -r '2!d'

我们可以在命令地址里面用分号来执行多条命令

avatar

&符号代表前面找到的内容,:sed 's/^UUID/#&' /etc/fstab

去空格:sed '/^$/d' /etc/issue

-e多编辑

avatar

我们sed读进来,是在模式空间,但是我们还可以使用另一个空间,保持空间(hold)

两个空间可以互相传字符行

一个小例子:统计这个文件中出现的单词个数并排序:sed 's/[^[:alpha:]]/\n/g' /etc/init.d/functions |sed '/^$/d'|sort |uniq -c|wc -l


linux第十一天
http://www.kju147.com/2018/12/27/linux第十一天/
作者
个人学习
发布于
2018年12月27日
许可协议