开发者学堂课程【Linux企业运维实战 - 入门及常用命令:Linux平台文件压缩打包及文本三剑客sed用法】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/550/detail/7619
Linux平台文件压缩打包及文本三剑客sed用法
内容介绍:
一、压缩、解压缩及归档工具
二、文本处理工具 sed
一、压缩、解压缩及归档工具
(一)tar工具
1、tar(Tape ARchive,磁带归档的缩写,但是比较慢)
2、tar[OPTION]..
(1)创建归档
tar
-cpvf
/PATH/TO/SOMEFILE.tar
FILE...
(2)追加文件至归档:注:不支持对压缩文件追加
tar-r-f/PATH/TO/SOMEFILE.tarFILE...
(3)查看归档文件中的文件列表
tar
-t
-f
/PATH/TO/SOMEFILE.tar
(4)展开归档
tar
-x
-f/PATH/TO/SOMEFILE.tar
tar-x-f/PATH/TO/SOMEFILE.tar-C/PATH/
(5) 结合压缩工具实现:归档并压缩
3、-T选项指定输入文件,-X选项指定包含要排除的文件列表
tar zcvf mybackup.tgz-T
/root/includefilelist
-X /root/excludefilelist
4、分割大的tar文件为多份小文件:
split
-b Size -d tar-file-name prefix-name
split
-b 1M-d mybackup.tgz mybackup-parts
split
-b 1M mybackup.tgz mybackup-parts
5、合并:
cat
mybackup-parts*
>
mybackup.tar.gz
•实例:
1、打包文件
[root@centos7 ~]#tar -cf data.tar /data
可以看到打包过程
[root@centos7 ~]#tar -c
v
f data.tar /data
并且可以看到原有属性
[root@centos7 ~]#tar -c
pv
f data.tar /data
[root@centos7 ~]#
du -sh /data/
2.4M /data/
tar只是打包文件,并不压缩文件
2、压缩时应根据文件类型判断是否适合压缩
[root@centos7 ~]#
ll data.tar -h
不要尝试对已经压缩过的文件进行压缩,如:
[root@centos7 ~]#
mp4 winrar mp3 rmvb
无压缩效果
3、预览data文件列表
[root@centos7 ~]#
tar tvf data.tar
解压缩 (默认解压缩在当前目录下)
[root@centos7 ~]#
tar x^c data.tar
使解压缩在mnt目录下(两种方法)
在解压缩时直接指定文件名称
[root@centos7 ~]#
tar xvf
/root/data.tar
[root@centos7 ~]#
cd mnt
或使用-c指定目标解压缩目录
[root@centos7 ~]#
tar xvf data.tar -c /mnt
4、既打包又压缩
[root@centos7 ~]#
tar -zcpvf data.tar.gz /data
或
[root@centos7 ~]#
tar -zcpvf data.tar.xz /data
或
[root@centos7 ~]#
tar -zcpvf data.tar.bz2 /data
解压缩:
[root@centos7 ~]#
tar xvf data.tar.bz2 -c /mnt
5、个别文件不打包
[root@centos7 ~]#cat list.txt
/etc/
/boot
[root@centos7 ~]#
cat
ex
list
.txt
/etc/shadow
[root@centos7 ~]#tar jcvf list.tar.xz -T list.txt -x enlist.txt
打包压缩虽然节约了磁盘空间,但是要消耗系统资源—性能
预览文件:
[root@centos7 ~]#
tar tvf list
.tar.xz |grep shadow
6、切割小文件
查看文件有多大
[root@centos7 ~]#
ll list
.
tar
.
xz -h
95M
切割命令split
[root@centos7 ~]#
split
-b 10M -d list.tar.xz a.tar
[root@centos7 ~]#ll
or
[root@centos7 ~]#split -b 10M list.tar.xz b.tar
7、 合并文件
[root@centos7 ~]#
cat a
.tar0* > a.tar.xz
[root@centos7 ~]#
ll
a.tar.xz list.tr.xz
即可与原文件合并
(二)cpio
1、功能:复制文件从或到归栏
2、cpio 命令是通过重定向的方式将文件进行打包备份,还原恢复的工具,它可以解压以".cpio”或者".tar”结尾的文件
3、cpio[选项]>文件名或者设备名
4、cpio[选项]文件名或者设备名
5、选项
-0将文件拷贝打包成文件或者将文件输出到设备上
-i解包,将打包文件解压或将设备上的备份还原到系统
-t预览,查着文件内容或者输出到设备上的文件内容
-v显示打包过程中的文件名称。
-d解包生成目录,在cpio还原时,自动的建立目录
-c一种较新的存储方式
•示例:
1、将etc自录备份:
find:/etc
-print
|
cpio
-ov
>
etc.cpio
2、内容预览
cpio-tv
< etc.cpio
3、解包文件
cpio
-idv
<
etc.cpio
[root@centos7 ~]#find /etc/syconfig/ | cpio -ov > sysconfig.cpio
[root@centos7 ~]#file sysconfig.cpio
预览文件内容
[root@centos7 ~]#cpio -tv < sysconfig.cpio
解开文件
[root@centos7 ~]#Cpio -idv <^Csysconfig.cpio
[root@centos7 ~]#cd /data
解压到绝对路径
[root@centos7 ~]#cpio -idv < /boot/sysconfig/cpio
解压到当前目录下
[root@centos7 ~]#cpio -idv < /boot/init ramos-3.10.0-693.e17.x86_64.img
打包时带有绝对路径就解压到绝对路径中,如果只有文件名,没有绝对路径,就解到相对路径
(三)回顾整理命令工具
authconfig
alias Unalaska.Ashcroft
bc |
Cut
Clock
cal 9 1752
cd
Change
Chpasswd
Cp -a -r -v -p
cpio
Chfn finger
Chsh shell
Cho d
Chvt 2
clown
Chirp
Chattr
compress uncompress
dd
Df
Diff
dirname
echo
expr
export
enable
env
file
find
fdisk
free
finger
getent passwd |group|shadow|gshadow
groupadd
groupmod
groups
gpasswd
gedit
getfacl
grpck
hash
history
hostname
hexdump
help
head
info
id
init 0 3 5 6
ifconfig
ll
lsattr
ln -s
ls /dev/sda*
lsblk
split
su -
sosreport
shutdown
strace
sort
tar
tee
tty
type
test
tac
tail
timedatetl centos7
unsec
undatedb
uname -r
uask
useradd
usermod
userdel
uniq
vipw
vigr
wc
w
wall
who who am i
whatis
whereis
which
whoami
xz
xzcat
xrags
zcat
zip
二、文本处理工具sed
sed 命令不仅可以查看过滤文件,还能修改文件
在特定文件中(bashrc)加入别名,可以使用 sed 工具放到脚本中批量执行
[root@centos7 ~]#reset.sh
(一)处理文本的工具sed
1、Stream EDitor,行编辑器
2、sed 是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(patternspace),接着用 sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。
然后读入下行,执行下一个循环。如果没有使诸如"D”的特殊命令,那会在两个循环之间清空模式空间,但不会清空保留空间。这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。
3、功能:主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等
4、参考:http://www.gnu.org/software/sed/manual/sed.html
(二)sed工具
1、用法:
sed[option]...'script' inputfile…
2、常用选项:
-n:不输出模式空间内容到屏幕,即不自动打印
-e:多点编辑
-f:/PATH/SCRIPT_FILE:从指定文件中读取编辑脚本
-r:支持使用扩展正则表达式
-i.bak:备份文件并原处编辑
3、script:
‘地址命令’
4、地址定界:
(1)不给地址:对全文进行处理
(2)单地址:
#:指定的行,$:最后一行
/pattern/:被此处模式所能够匹配到的每一行
支持正则表达式,只有满足pattern定义的行才能处理
若是匹配此模式的行有100行,只有10行符合pattern定义,那就只处理次10行
(3)地址范围:
#,# 比如10,20
#,+# 10,10+10
/pat1/,/pat2/
#./pat1/
(4)~:步进
1~2奇数行
2~2偶数行
5、编辑命令:
d:删除模式空间匹配的行,并立即启用下一轮循环
p:打印当前模式空间内容,追加到默认输出之后
a [\]text:在指定行后面追加文本
支持使用\n实现多行追加
i [\]text:在行前面插入文本
c [\]text:替换行为单行或多行文本
w /path/somefile:保存模式匹配的行至指定文件
r /path/somefile:读取指定文件的文本至模式空间中
匹配到的行后
=: 为模式空间中的行打印行号
! : 模式空间中匹配行取反处理
示例:
使用sed加上脚本,打印第二行,默认自动打印
[root@centos7 ~]#
sed
‘2p’ f1
可以用-n关闭自动打印
简便组合方法:
[root@centos7 ~]#ifconfig ens33 |sed -n ‘2p’
找包含root的行:
单地址打印文件,只显示第二行
[root@centos7 ~]#
sed
-n ‘2p’ /etc/passwd
最后一行打印
[root@centos7 ~]#sed -n ‘$p’ /etc/passwd
模式打印
[root@centos7 ~]#sed -n ‘//p’ /etc/passwd
默认sed命令使用基本正则表达式,也可以扩展正则表达式:加r选项
显示第二行到第五行:
[root@centos7 ~]#sed ‘2,5p’ /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@centos7 ~]#cat /etc/passwd less
使用+方式
[root@centos7 ~]#sed -n ‘2,+3p’ /etc/passwd
还支持正则表达式
[root@centos7 ~]#sed -n ‘/^b/,/^f/p’ /etc/passwd
若没有f结尾,则不存在,就会找到最后
[root@centos7 ~]#
sed
-n ‘/^b/,/^ffff/p’ /etc/passwd
-e多点编辑:操作多次
[root@centos7 ~]#sed -n -e “2p” -e “6p” f1
专门写到一个文件中:
[root@centos7 ~]#sed -n -e “2p” -e “6p” f1^c
[root@centos7 ~]#cat > sedscript.txt
2-2p
[root@centos7 ~]#cat sedscript.txt
2-2p
[root@centos7 ~]#Sed -f sedscript.txt f1
[root@centos7 ~]#Sed -n -f sedscript.txt f1
d命令:
[root@centos7 ~]#sed ‘2d’ f1
1
3
4
5
6
7
8
9
10
!表示取反:
[root@centos7 ~]#sed ‘2!d’ f1
2
显示 root 包括 root 的行表示:不包括 root 的行
=命令—加行号:
[root@centos7 ~]#sed -n ‘/root/=’ /etc/passwd
1
10