[关闭]
@mrz1 2017-12-19T02:03:02.000000Z 字数 9264 阅读 965

2017-11-27课程笔记(压缩、打包、sed)

笔记


课程回顾:
1. source 和bash与. 的区别?
2. locate
3. find
搜索/app下大于20小于30并且以conf结尾文件
fing /app -size +20 -size -31 -name "*.conf"

根据权限查找:

  1. -perm [/|-]MODE
  2. MODE: 精确权限匹配`实例:find -perm 644 -type f`
  3. /MODE:任何一类(u,g,o)对象的权限中只要能一位匹配即可,或关系,+ centos7开始淘汰`实例:find -perm /444 -type f`
  4. -MODE:每一类对象都必须同时拥有指定权限,与关系
  5. 0 表示不关注
  6. find -perm 755 会匹配权限模式恰好是755的文件
  7. 只要当任意人有写权限时,find -perm +222就会匹配
  8. 只有当每个人都有写权限时,find -perm -222才会匹配
  9. 只有当其它人(other)有写权限时,find -perm -002才会匹配

处理动作

  1. -print:默认的处理动作,显示至屏幕
  2. -ls:类似于对查找到的文件执行“ls -l”命令
  3. -delete:删除查找到的文件
  4. -fls file:查找到的所有文件的长格式信息保存至指定文件中
  5. -ok COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令,对于每个文件执行命令之前,都会交互式要求用户确认
  6. -exec COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令
  7. {}: 用于引用查找到的文件名称自身;
  8. find传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令

注意:-ok COMMAND {} \;-exec COMMAND {} \;

参数替换xargs

1.由于很多命令不支持管道|来传递参数,而日常工作中有这个必要,所以就有了xargs命令
2.xargs用于产生某个命令的参数,xargs 可以读入stdin的数据,并且以空格符或回车符将stdin 的数据分隔成为arguments

注意:文件名或者是其他意义的名词内含有空格符的情况

3.有些命令不能接受过多参数,命令执行可能会失败,xargs可以解决
示例:

  1. ls f* |xargs rm
  2. find /sbin -perm +700 |ls -l 这个命令是错误的
  3. find /sbin -perm +7000 | xargs ls l
  4. findxargs格式:find | xargs COMMAND

find示例

  1. find -name "*.conf" -exec cp {} {}.orig \;
  2. 备份配置文件,添加.orig这个扩展名
  3. find /tmp -ctime +3 -user joe -ok rm {} \;
  4. 提示删除存在时间超过3天以上的joe的临时文件
  5. find ~ -perm -002 -exec chmod o-w {} \;
  6. 在你的主目录中寻找可被其它用户写入的文件
  7. find /data type f -perm 644 -name "*.sh" exec
  8. chmod 755 {} \;
  9. find /home type d -ls

练习1

1、查找/var目录下属主为root,且属组为mail的所有文件
find /var -user root -group mail
2、查找/var目录下不属于root、lp、gdm的所有文件
find /var/ ! -user root |find /var ! -user gdm | find ! -user lp
3、查找/var目录下最近一周内其内容修改过,同时属主不为root,也不是postfix的文件
4、查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件
5、查找/etc目录下大于1M且类型为普通文件的所有文件
6、查找/etc目录下所有用户都没有写权限的文件
7、查找/etc目录下至少有一类用户没有执行权限的文件
8、查找/etc/init.d目录下,所有用户都有执行权限,且其它用户有写权限的文件

Gnome搜索工具

  1. 位置->搜索文件......
  2. 图形化搜索工具,可搜索
  3. 命令
  4. 内容
  5. 用户/组群
  6. 大小
  7. 修改时间

压缩、解压缩及归档工具

  1. file-roller
  2. compress/uncompress: .Z
  3. gzip/gunzip: .gz
  4. bzip2/bunzip2: .bz2
  5. xz/unxz: .xz
  6. zip/unzip
  7. tar
  8. cpio

compress/uncompress

  1. compress [-dfvcVr] [-b maxbits] [file ...]
  2. -d: 解压缩,相当于uncompress
  3. -c: 结果输出至标准输出,不删除原文件
  4. -v: 显示详情
  5. uncompress 解压缩
  6. zcatfile.Z > file

gzip/gunzip

  1. gzip[OPTION]... FILE ...
  2. -d: 解压缩,相当于gunzip
  3. -c: 将压缩或解压缩的结果输出至标准输出
  4. -#:1-9,指定压缩比,值越大压缩比越大
  5. zcat:不显式解压缩的前提下查看文本文件内容
  6. 实例:
  7. gzip-c messages > messages.gz
  8. gzip-c -d messages.gz > messages
  9. zcat messages.gz > messages

zip2/bunzip2/bzcat

  1. bzip2 [OPTION]... FILE ...
  2. -k: keep, 保留原文件
  3. -d:解压缩
  4. -#:1-9,压缩比,默认为9
  5. bzcat:不显式解压缩的前提下查看文本文件内容

xz/unxz/xzcat

  1. xz[OPTION]... FILE ...
  2. -k: keep, 保留原文件
  3. -d:解压缩
  4. -#:1-9,压缩比,默认为6
  5. xzcat: 不显式解压缩的前提下查看文本文件内容

zip/unzip

  1. 打包压缩
  2. zip r /testdir/sysconfig/ etc/sysconfig/
  3. 解包解压缩unzip sysconfig.zipcat /var/log/messages | zip messages -unzip -p message > message

tar工具

  1. tar[必要参数][选择参数][文件]
  2. -c 建立新的压缩文件
  3. -d 记录文件的差别
  4. -r 添加文件到已经压缩的文件
  5. -u 添加改变了和现有的文件到已经存在的压缩文件
  6. -x 从压缩的文件中提取文件
  7. -t 显示压缩文件的内容
  8. -z 支持gzip解压文件
  9. -j 支持bzip2解压文件
  10. -Z 支持compress解压文件
  11. -v 显示操作过程
  12. -k 保留原有文件不覆盖
  13. -m 保留文件不被覆盖
  14. -W 确认压缩文件的正确性
  15. 可选参数如下:
  16. -b 设置区块数目
  17. -C 切换到指定目录
  18. -f 指定压缩文件
  19. --help 显示帮助信息
  20. --version 显示版本信息
  1. (1) 创建归档
  2. tar -c -f /PATH/TO/SOMEFILE.tar FILE...
  3. (2) 追加文件至归档:注:不支持对压缩文件追加
  4. tar -r -f /PATH/TO/SOMEFILE.tar FILE...
  5. (3) 查看归档文件中的文件列表
  6. tar -t -f /PATH/TO/SOMEFILE.tar
  7. (4) 展开归档
  8. tar -x -f /PATH/TO/SOMEFILE.tartar -x -f /PATH/TO/SOMEFILE.tar -C /PATH/
  9. (5) 结合压缩工具实现:
  10. 归档并压缩-j: bzip2, -z: gzip, -J: xz
  1. -T选项指定输入文件,-X选项指定包含要排除的文件列表tar zcvf mybackup.tgz -T /root/includefilelist -X /root/excludefilelist
  2. 分割大的tar 文件为多份小文件:
  3. split b Size d tar-file-name prefix-name
  4. split -b 1M dmybackup.tgz mybackup-parts
  5. split -b 1M mybackup.tgz mybackup-parts
  6. 合并:cat mybackup-parts* > mybackup.tar.gz
  7. 把前天/etc/sysconfig/打包并压缩
  8. tar -zcvf /app/syscongfig`date +%F -d "-1 day"`.tar.gz /etc/sysconfig/

cpio

  1. 功能:复制文件从或到归档
  2. cpio命令是通过重定向的方式将文件进行打包备份,还原恢复的工具,它可以解压以".cpio"或者".tar"结尾的文件
  3. cpio[选项] > 文件名或者设备名
  4. cpio[选项] < 文件名或者设备名
  5. 选项:
  6. -o 将文件拷贝打包成文件或者将文件输出到设备上
  7. -i解包,将打包文件解压或将设备上的备份还原到系统
  8. -t 预览,查看文件内容或者输出到设备上的文件内容
  9. -v 显示打包过程中的文件名称。
  10. -d 解包生成目录,在cpio还原时,自动的建立目录
  11. -c 一种较新的存储方式
  12. 示例:
  13. etc目录备份:find ./etc-print |cpio -ov > etc.cpio
  14. 内容预览cpio tv < etc.cpio
  15. 解包文件cpio idv < etc.cpio

处理文本的工具sed

  1. 用法:
  2. sed[option]... 'script' inputfile...
  3. 常用选项:
  4. -n:不输出模式空间内容到屏幕,即不自动打印
  5. -e: 多点编辑
  6. -f:/PATH/SCRIPT_FILE: 从指定文件中读取编辑脚本
  7. -r: 支持使用扩展正则表达式
  8. -i.bak: 备份文件并原处编辑
  9. script: '地址命令'
  10. 地址定界:
  11. (1) 不给地址:对全文进行处理
  12. (2) 单地址
  13. #: 指定的行,$:最后一行
  14. /pattern/:被此处模式所能够匹配到的每一行
  15. (3) 地址范围:
  16. #,#
  17. #,+#
  18. /pat1/,/pat2/
  19. #,/pat1/
  20. (4) ~:步进
  21. 1~2 奇数行 //sed '2~2d'
  22. 2~2 偶数行 //sed '1~2d'
  1. 编辑命令:
  2. d: 删除模式空间匹配的行,并立即启用下一轮循环
  3. p:打印当前模式空间内容,追加到默认输出之后
  4. a [\]text:在指定行后面追加文本
  5. 支持使用\n实现多行追加
  6. i[\]text:在行前面插入文本
  7. c [\]text:替换行为单行或多行文本
  8. w /path/somefile: 保存模式匹配的行至指定文件
  9. r /path/somefile:读取指定文件的文本至模式空间中匹配到的行后
  10. =: 为模式空间中的行打印行号
  11. !:模式空间中匹配行取反处理
  12. s///:查找替换,支持使用其它分隔符,s@@@,s###
  13. 替换标记:
  14. g: 行内全局替换
  15. p: 显示替换成功的行
  16. w /PATH/TO/SOMEFILE:将替换成功的行保存至文件中

网络连接 ss -ntl |sed '1d'
df 磁盘利用率
[root@centos7 app]# cat /etc/selinux/config
[root@centos7 app]#sed '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config

练习1:

  1. [root@centos7 ~]# cat /etc/default/grub
  2. GRUB_TIMEOUT=5
  3. GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
  4. GRUB_DEFAULT=saved
  5. GRUB_DISABLE_SUBMENU=true
  6. GRUB_TERMINAL_OUTPUT="console"
  7. GRUB_CMDLINE_LINUX="rhgb quiet" //把这个文件后面加上 xxxx
  8. GRUB_DISABLE_RECOVERY="true"
  9. [root@centos7 ~]#sed -nr 's@(.*LINUX=".*)"@\1 xxxx"@p' /etc/default/grub //参考一
  10. GRUB_CMDLINE_LINUX="rhgb quiet xxxx"
  11. [root@centos7 ~]#sed -r 's/(quiet)/\1 xxx/' /etc/default/grub //参考二
  12. [root@centos7 ~]#sed -r '/LINUX/s/(")$/ xxx\1/' /etc/default/grub //参考三
  13. [root@centos7 ~]#sed -r 's/quiet/& xxx/' /etc/default/grub //参考四

sed示例

  1. sed '2p' /etc/passwd //第二行打印两遍
  2. sed n '2p' /etc/passwd //只显示第二行
  3. sed n '1,4p' /etc/passwd //只显示第一到四行
  4. sed n '/root/p' /etc/passwd //显示带有root的行
  5. sed n '2,/root/p' /etc/passwd //从2行开始搜索包含root就打印
  6. sed -n '/^$/=' file //显示空行行号
  7. sed n e '/^$/p' e '/^$/=' file //多点编辑
  8. sed '/root/a\superman' /etc/passwd //行后
  9. sed '/root/i\superman' /etc/passwd //行前
  10. sed '/root/c\superman' /etc/passwd //代替行
  11. sed '/^$/d' file //删除空行
  12. sed '1,10d' file //删除1-10
  13. nl /etc/passwd | sed '2,5d'//删除2-5
  14. nl /etc/passwd | sed '2a tea' //在2行t后面添加
  15. sed 's/test/mytest/g' example
  16. sed n 's/root/&superman/p' /etc/passwd单词后
  17. sed n 's/root/superman&/p' /etc/passwd单词前
  18. sed -e 's/dog/cat/' -e 's/hi/lo/' pets
  19. sed i.bak 's/dog/cat/g' pets

高级编辑命令

  1. P:打印模式空间开端至\n内容,并追加到默认输出之前
  2. h: 把模式空间中的内容覆盖至保持空间中
  3. H:把模式空间中的内容追加至保持空间中
  4. g: 从保持空间取出数据覆盖至模式空间
  5. G:从保持空间取出内容追加至模式空间
  6. x: 把模式空间中的内容与保持空间中的内容进行互换
  7. n: 读取匹配到的行的下一行覆盖至模式空间
  8. N:读取匹配到的行的下一行追加至模式空间
  9. d: 删除模式空间中的行
  10. D:如果模式空间包含换行符,则删除直到第一个换行符的模式空间中的文本,并不会读取新的输入行,而使用合成的模式空间重新启动循环。如果模式空间不包含换行符,则会像发出d命令那样启动正常的新循环

sed示例

  1. sed -n 'n;p' //打印偶数行
  2. sed 'n;d' FILE //打印奇数行
  3. sed -n 'n;p' FILE //先读取第一行,之后看到n。把第一行覆盖;并把打印关掉了第一行不显示;循环
  4. sed '1!G;h;$!d' FILE //倒序 tac
  5. sed 'N;D' FILE //只去最后一行
  6. sed '$!N;$!D' FILE //只去最后两行
  7. sed '$!d' FILE //只去最后一行
  8. sed 'G' FILE //每一行后面加一个空行;空行也算行号
  9. sed 'g' FILE //把每行东西删除但保留行
  10. sed '/^$/d;G' FILE //每一行后面加一个空行;空行也算行号
  11. sed 'n;d' FILE //取奇数行
  12. sed -n '1!G;h;$p' FILE // 下面演示
  13. [root@centos7 app]#seq 1 3 |sed '1!G;h;$p'
  14. 1 // 1
  15. 2 //12
  16. 1
  17. 3 //123
  18. 2
  19. 1
  20. 3 //123
  21. 2
  22. 1

练习题:
1、删除centos7系统/etc/grub2.cfg文件中所有以空白开头的行行首的空白字符
[root@centos7 app]#sed '/^$/d' /etc/grub2.cfg
2、删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符
[root@centos7 app]#sed -e 's/^#//' -e '/^$/d' /etc/fstab
3、在centos6系统/root/install.log每一行行首增加#号
[root@centos6 ~]#sed 's/^In/#IN/' /root/install.log
4、在/etc/fstab文件中不以#开头的行的行首增加#号
5、处理/etc/fstab路径,使用sed命令取出其目录名和基名

  1. [root@centos7 ~]#echo "/etc/sysconfig/network-scripts/" | sed -rn 's/(.*\/)(.+)\/?/\1/p'
  2. /etc/sysconfig/ //取目录名 两个分组第一个是目录第二个基名
  3. [root@centos7 ~]#echo "/etc/sysconfig/network-scripts/" | sed -rn 's/(.*\/)(.+)\/?/\2/p'
  4. network-scripts/ //取基名

6、利用sed 取出ifconfig命令中本机的IPv4地址

  1. [root@centos7 ~]#ifconfig ens33 | sed -n '2p'| sed -r 's@.*inet(.*)netmask.*@\1@'
  2. 192.168.109.142 //取ip
  3. [root@centos7 ~]#ifconfig ens33 | sed -rn '2s@.*inet (.*) netmask.*@\1@p'
  4. 192.168.109.142 //取ip
  5. [root@centos7 ~]#ifconfig ens33 | sed -r '2!d;s/.*inet //;s/ netmask.*//'
  6. 192.168.109.142 //取ip
  7. [root@centos7 ~]#sed -rn 's@.*release ([^.]+).*@\1@p' /etc/centos-release
  8. 7 //取centos版本 centos5 是在/etc/redhat-release里面

7、统计centos安装光盘中Package目录下的所有rpm文件的以.分隔倒数第二个字段的重复次数

  1. [root@centos7 app]#ls /misc/cd/Packages/*.rpm |sed -r 's/.*\.(.+)\.rpm$/\1/'|sort |uniq -c
  2. 2141 i686
  3. 3076 noarch
  4. 4374 x86_64
  5. [root@centos7 app]#ls /misc/cd/Packages/*.rpm | rev |cut -d. -f2| rev |sort| uniq -c
  6. 2141 i686
  7. 3076 noarch
  8. 4374 x86_64

8、统计/etc/init.d/functions文件中每个单词的出现次数,并排序(用grep和sed两种方法分别实现)

  1. [root@centos7 ~]#grep -Eo "[[:alpha:]]+" /etc/init.d/functions |sort|uniq -c|sort -n|wc -l
  2. 406
  3. [root@centos7 ~]#sed 's/[^[:alpha:]]/\n/g' /etc/init.d/functions | sed '/^$/d'|sort|uniq -c|wc -l
  4. 406

9、将文本文件的n和n+1行合并为一行,n为奇数行

  1. [root@centos7 ~]#seq 1 10 |sed 'N;s/\n//'
  2. 12
  3. 34
  4. 56
  5. 78
  6. 910
  7. [root@centos7 ~]#seq 1 10|xargs -n2
  8. 1 2
  9. 3 4
  10. 5 6
  11. 7 8
  12. 9 10

软件包管理

  1. ABIApplication Binary Interface
  2. WindowsLinux不兼容
  3. ELF(Executable and Linkable Format)
  4. PEPortable Executable
  5. 库级别的虚拟化:Linux:WINE
  6. Windows: Cywin
  7. APIApplication Programming Interface
  8. POSIXPortable OS
  9. 程序源代码--> 预处理--> 编译--> 汇编--> 链接
  10. 静态编译:.a
  11. 动态编译:.so
  12. 链接主要作用是把各个模块之间相互引用的部分处理好,使得各个模块之间能够正确地衔接,分为
  13. 静态链接和动态链接
  14. 静态链接
  15. 把程序对应的依赖库复制一份到包libxxx.a
  16. 嵌入程序包
  17. 升级难,需重新编译占用较多空间,迁移容易
  18. 动态链接
  19. 只把依赖加做一个动态链接libxxx.so
  20. “连接指向”
  21. 占用较少空间,升级方便
  1. [root@centos7 app]#ldd /bin/cat //查看cat命令动态调用的库
  2. linux-vdso.so.1 => (0x00007ffebb2c3000)
  3. libc.so.6 => /lib64/libc.so.6 (0x00007fc9269a9000)
  4. /lib64/ld-linux-x86-64.so.2 (0x000055bbd71c8000)

如果把库删除或者移动到别的地方需要以下操作
救援模式 /lib64/libc.so.6
1.ESC
2.选择CD-ROM Drive
3. Troubleshoot ing
4. Rescue a CentOS system
5. 选1
6. 回车
7. pwd 这是光盘的跟
8. df
9. 回到自己的根/app下cd /mut/sysimage/app/
8. mv libc.so.6 /mnt/sysimage/lib64/
9. 它是个软连接 重新创建个软连接即可
如果删除取软盘中找所需要的库文件
go语言高并发
python 适合开发运维工具

  1. 二进制应用程序的组成部分:
  2. 二进制文件、库文件、配置文件、帮助文件
  3. 程序包管理器:
  4. debiandeb文件, dpkg包管理器
  5. redhat: rpm文件, rpm包管理器
  6. rpm: RedhatPackage Manager
  7. RPM Package Manager
  1. [root@centos7 app]#du -sh alias1.txt //查看文件大小
  2. 4.0K alias1.txt
  3. [root@centos7 app]#find -name "ali*"|xargs cat|wc -l //查看ali后缀文件,统计所有行数
  4. 4

安装:rpm -i

包命名

  1. 源代码:name-VERSION.tar.gz|bz2|xz
  2. VERSION: major.minor.release
  3. rpm包命名方式:
  4. name-VERSION-release.arch.rpm
  5. 例:bash-4.2.46-19.el7.x86_64.rpm
  6. VERSION: major.minor.release
  7. releaserelease.OS
  8. 常见的arch
  9. x86: i386, i486, i586, i686
  10. x86_64: x64, x86_64, amd64
  11. powerpc: ppc
  12. 跟平台无关:noarch
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注