@mrz1
2017-12-19T02:03:02.000000Z
字数 9264
阅读 1097
笔记
课程回顾:
1. source 和bash与. 的区别?
2. locate
3. find
搜索/app下大于20小于30并且以conf结尾文件
fing /app -size +20 -size -31 -name "*.conf"
-perm [/|-]MODE
MODE: 精确权限匹配`实例:find -perm 644 -type f`
/MODE:任何一类(u,g,o)对象的权限中只要能一位匹配即可,或关系,+ 从centos7开始淘汰`实例:find -perm /444 -type f`
-MODE:每一类对象都必须同时拥有指定权限,与关系
0 表示不关注
• find -perm 755 会匹配权限模式恰好是755的文件
• 只要当任意人有写权限时,find -perm +222就会匹配
• 只有当每个人都有写权限时,find -perm -222才会匹配
• 只有当其它人(other)有写权限时,find -perm -002才会匹配
-print:默认的处理动作,显示至屏幕
-ls:类似于对查找到的文件执行“ls -l”命令
-delete:删除查找到的文件
-fls file:查找到的所有文件的长格式信息保存至指定文件中
-ok COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令,对于每个文件执行命令之前,都会交互式要求用户确认
-exec COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令
{}: 用于引用查找到的文件名称自身;
find传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令
注意:-ok COMMAND {} \;与 -exec COMMAND {} \;
1.由于很多命令不支持管道|来传递参数,而日常工作中有这个必要,所以就有了xargs命令
2.xargs用于产生某个命令的参数,xargs 可以读入stdin的数据,并且以空格符或回车符将stdin 的数据分隔成为arguments
注意:文件名或者是其他意义的名词内含有空格符的情况
3.有些命令不能接受过多参数,命令执行可能会失败,xargs可以解决
示例:
ls f* |xargs rm
find /sbin -perm +700 |ls -l 这个命令是错误的
find /sbin -perm +7000 | xargs ls –l
find和xargs格式:find | xargs COMMAND
find -name "*.conf" -exec cp {} {}.orig \;
• 备份配置文件,添加.orig这个扩展名
find /tmp -ctime +3 -user joe -ok rm {} \;
• 提示删除存在时间超过3天以上的joe的临时文件
find ~ -perm -002 -exec chmod o-w {} \;
• 在你的主目录中寻找可被其它用户写入的文件
find /data –type f -perm 644 -name "*.sh" –exec
chmod 755 {} \;
find /home –type d -ls
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目录下,所有用户都有执行权限,且其它用户有写权限的文件
file-roller
compress/uncompress: .Z
gzip/gunzip: .gz
bzip2/bunzip2: .bz2
xz/unxz: .xz
zip/unzip
tar
cpio
compress [-dfvcVr] [-b maxbits] [file ...]
-d: 解压缩,相当于uncompress
-c: 结果输出至标准输出,不删除原文件
-v: 显示详情
uncompress 解压缩
zcatfile.Z > file
gzip[OPTION]... FILE ...
-d: 解压缩,相当于gunzip
-c: 将压缩或解压缩的结果输出至标准输出
-#:1-9,指定压缩比,值越大压缩比越大
zcat:不显式解压缩的前提下查看文本文件内容
实例:
gzip-c messages > messages.gz
gzip-c -d messages.gz > messages
zcat messages.gz > messages
bzip2 [OPTION]... FILE ...
-k: keep, 保留原文件
-d:解压缩
-#:1-9,压缩比,默认为9
bzcat:不显式解压缩的前提下查看文本文件内容
xz[OPTION]... FILE ...
-k: keep, 保留原文件
-d:解压缩
-#:1-9,压缩比,默认为6
xzcat: 不显式解压缩的前提下查看文本文件内容
打包压缩
zip –r /testdir/sysconfig/ etc/sysconfig/
解包解压缩unzip sysconfig.zipcat /var/log/messages | zip messages -unzip -p message > message
tar[必要参数][选择参数][文件]
-c 建立新的压缩文件
-d 记录文件的差别
-r 添加文件到已经压缩的文件
-u 添加改变了和现有的文件到已经存在的压缩文件
-x 从压缩的文件中提取文件
-t 显示压缩文件的内容
-z 支持gzip解压文件
-j 支持bzip2解压文件
-Z 支持compress解压文件
-v 显示操作过程
-k 保留原有文件不覆盖
-m 保留文件不被覆盖
-W 确认压缩文件的正确性
可选参数如下:
-b 设置区块数目
-C 切换到指定目录
-f 指定压缩文件
--help 显示帮助信息
--version 显示版本信息
(1) 创建归档
tar -c -f /PATH/TO/SOMEFILE.tar FILE...
(2) 追加文件至归档:注:不支持对压缩文件追加
tar -r -f /PATH/TO/SOMEFILE.tar FILE...
(3) 查看归档文件中的文件列表
tar -t -f /PATH/TO/SOMEFILE.tar
(4) 展开归档
tar -x -f /PATH/TO/SOMEFILE.tartar -x -f /PATH/TO/SOMEFILE.tar -C /PATH/
(5) 结合压缩工具实现:
归档并压缩-j: bzip2, -z: gzip, -J: xz
-T选项指定输入文件,-X选项指定包含要排除的文件列表tar zcvf mybackup.tgz -T /root/includefilelist -X /root/excludefilelist
分割大的tar 文件为多份小文件:
split –b Size –d tar-file-name prefix-name
split -b 1M –dmybackup.tgz mybackup-parts
split -b 1M mybackup.tgz mybackup-parts
合并:cat mybackup-parts* > mybackup.tar.gz
把前天/etc/sysconfig/打包并压缩
tar -zcvf /app/syscongfig`date +%F -d "-1 day"`.tar.gz /etc/sysconfig/
功能:复制文件从或到归档
cpio命令是通过重定向的方式将文件进行打包备份,还原恢复的工具,它可以解压以".cpio"或者".tar"结尾的文件
cpio[选项] > 文件名或者设备名
cpio[选项] < 文件名或者设备名
选项:
-o 将文件拷贝打包成文件或者将文件输出到设备上
-i解包,将打包文件解压或将设备上的备份还原到系统
-t 预览,查看文件内容或者输出到设备上的文件内容
-v 显示打包过程中的文件名称。
-d 解包生成目录,在cpio还原时,自动的建立目录
-c 一种较新的存储方式
示例:
将etc目录备份:find ./etc-print |cpio -ov > etc.cpio
内容预览cpio –tv < etc.cpio
解包文件cpio –idv < etc.cpio
用法:
sed[option]... 'script' inputfile...
常用选项:
-n:不输出模式空间内容到屏幕,即不自动打印
-e: 多点编辑
-f:/PATH/SCRIPT_FILE: 从指定文件中读取编辑脚本
-r: 支持使用扩展正则表达式
-i.bak: 备份文件并原处编辑
script: '地址命令'
地址定界:
(1) 不给地址:对全文进行处理
(2) 单地址
#: 指定的行,$:最后一行
/pattern/:被此处模式所能够匹配到的每一行
(3) 地址范围:
#,#
#,+#
/pat1/,/pat2/
#,/pat1/
(4) ~:步进
1~2 奇数行 //sed '2~2d'
2~2 偶数行 //sed '1~2d'
编辑命令:
d: 删除模式空间匹配的行,并立即启用下一轮循环
p:打印当前模式空间内容,追加到默认输出之后
a [\]text:在指定行后面追加文本
支持使用\n实现多行追加
i[\]text:在行前面插入文本
c [\]text:替换行为单行或多行文本
w /path/somefile: 保存模式匹配的行至指定文件
r /path/somefile:读取指定文件的文本至模式空间中匹配到的行后
=: 为模式空间中的行打印行号
!:模式空间中匹配行取反处理
s///:查找替换,支持使用其它分隔符,s@@@,s###
替换标记:
g: 行内全局替换
p: 显示替换成功的行
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:
[root@centos7 ~]# cat /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="rhgb quiet" //把这个文件后面加上 xxxx
GRUB_DISABLE_RECOVERY="true"
[root@centos7 ~]#sed -nr 's@(.*LINUX=".*)"@\1 xxxx"@p' /etc/default/grub //参考一
GRUB_CMDLINE_LINUX="rhgb quiet xxxx"
[root@centos7 ~]#sed -r 's/(quiet)/\1 xxx/' /etc/default/grub //参考二
[root@centos7 ~]#sed -r '/LINUX/s/(")$/ xxx\1/' /etc/default/grub //参考三
[root@centos7 ~]#sed -r 's/quiet/& xxx/' /etc/default/grub //参考四
sed示例
sed '2p' /etc/passwd //第二行打印两遍
sed –n '2p' /etc/passwd //只显示第二行
sed –n '1,4p' /etc/passwd //只显示第一到四行
sed –n '/root/p' /etc/passwd //显示带有root的行
sed –n '2,/root/p' /etc/passwd //从2行开始搜索包含root就打印
sed -n '/^$/=' file //显示空行行号
sed –n –e '/^$/p' –e '/^$/=' file //多点编辑
sed '/root/a\superman' /etc/passwd //行后
sed '/root/i\superman' /etc/passwd //行前
sed '/root/c\superman' /etc/passwd //代替行
sed '/^$/d' file //删除空行
sed '1,10d' file //删除1-10
nl /etc/passwd | sed '2,5d'//删除2-5
nl /etc/passwd | sed '2a tea' //在2行t后面添加
sed 's/test/mytest/g' example
sed –n 's/root/&superman/p' /etc/passwd单词后
sed –n 's/root/superman&/p' /etc/passwd单词前
sed -e 's/dog/cat/' -e 's/hi/lo/' pets
sed –i.bak 's/dog/cat/g' pets
P:打印模式空间开端至\n内容,并追加到默认输出之前
h: 把模式空间中的内容覆盖至保持空间中
H:把模式空间中的内容追加至保持空间中
g: 从保持空间取出数据覆盖至模式空间
G:从保持空间取出内容追加至模式空间
x: 把模式空间中的内容与保持空间中的内容进行互换
n: 读取匹配到的行的下一行覆盖至模式空间
N:读取匹配到的行的下一行追加至模式空间
d: 删除模式空间中的行
D:如果模式空间包含换行符,则删除直到第一个换行符的模式空间中的文本,并不会读取新的输入行,而使用合成的模式空间重新启动循环。如果模式空间不包含换行符,则会像发出d命令那样启动正常的新循环
sed示例
sed -n 'n;p' //打印偶数行
sed 'n;d' FILE //打印奇数行
sed -n 'n;p' FILE //先读取第一行,之后看到n。把第一行覆盖;并把打印关掉了第一行不显示;循环
sed '1!G;h;$!d' FILE //倒序 tac
sed 'N;D' FILE //只去最后一行
sed '$!N;$!D' FILE //只去最后两行
sed '$!d' FILE //只去最后一行
sed 'G' FILE //每一行后面加一个空行;空行也算行号
sed 'g' FILE //把每行东西删除但保留行
sed '/^$/d;G' FILE //每一行后面加一个空行;空行也算行号
sed 'n;d' FILE //取奇数行
sed -n '1!G;h;$p' FILE // 下面演示
[root@centos7 app]#seq 1 3 |sed '1!G;h;$p'
1 // 1
2 //12
1
3 //123
2
1
3 //123
2
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命令取出其目录名和基名
[root@centos7 ~]#echo "/etc/sysconfig/network-scripts/" | sed -rn 's/(.*\/)(.+)\/?/\1/p'
/etc/sysconfig/ //取目录名 两个分组第一个是目录第二个基名
[root@centos7 ~]#echo "/etc/sysconfig/network-scripts/" | sed -rn 's/(.*\/)(.+)\/?/\2/p'
network-scripts/ //取基名
6、利用sed 取出ifconfig命令中本机的IPv4地址
[root@centos7 ~]#ifconfig ens33 | sed -n '2p'| sed -r 's@.*inet(.*)netmask.*@\1@'
192.168.109.142 //取ip
[root@centos7 ~]#ifconfig ens33 | sed -rn '2s@.*inet (.*) netmask.*@\1@p'
192.168.109.142 //取ip
[root@centos7 ~]#ifconfig ens33 | sed -r '2!d;s/.*inet //;s/ netmask.*//'
192.168.109.142 //取ip
[root@centos7 ~]#sed -rn 's@.*release ([^.]+).*@\1@p' /etc/centos-release
7 //取centos版本 centos5 是在/etc/redhat-release里面
7、统计centos安装光盘中Package目录下的所有rpm文件的以.分隔倒数第二个字段的重复次数
[root@centos7 app]#ls /misc/cd/Packages/*.rpm |sed -r 's/.*\.(.+)\.rpm$/\1/'|sort |uniq -c
2141 i686
3076 noarch
4374 x86_64
[root@centos7 app]#ls /misc/cd/Packages/*.rpm | rev |cut -d. -f2| rev |sort| uniq -c
2141 i686
3076 noarch
4374 x86_64
8、统计/etc/init.d/functions文件中每个单词的出现次数,并排序(用grep和sed两种方法分别实现)
[root@centos7 ~]#grep -Eo "[[:alpha:]]+" /etc/init.d/functions |sort|uniq -c|sort -n|wc -l
406
[root@centos7 ~]#sed 's/[^[:alpha:]]/\n/g' /etc/init.d/functions | sed '/^$/d'|sort|uniq -c|wc -l
406
9、将文本文件的n和n+1行合并为一行,n为奇数行
[root@centos7 ~]#seq 1 10 |sed 'N;s/\n//'
12
34
56
78
910
[root@centos7 ~]#seq 1 10|xargs -n2
1 2
3 4
5 6
7 8
9 10
ABI:Application Binary Interface
Windows与Linux不兼容
ELF(Executable and Linkable Format)
PE(Portable Executable)
库级别的虚拟化:Linux:WINE
Windows: Cywin
API:Application Programming Interface
POSIX:Portable OS
程序源代码--> 预处理--> 编译--> 汇编--> 链接
静态编译:.a
动态编译:.so
链接主要作用是把各个模块之间相互引用的部分处理好,使得各个模块之间能够正确地衔接,分为
静态链接和动态链接
静态链接
把程序对应的依赖库复制一份到包libxxx.a
嵌入程序包
升级难,需重新编译占用较多空间,迁移容易
动态链接
只把依赖加做一个动态链接libxxx.so
“连接指向”
占用较少空间,升级方便
[root@centos7 app]#ldd /bin/cat //查看cat命令动态调用的库
linux-vdso.so.1 => (0x00007ffebb2c3000)
libc.so.6 => /lib64/libc.so.6 (0x00007fc9269a9000)
/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 适合开发运维工具
二进制应用程序的组成部分:
二进制文件、库文件、配置文件、帮助文件
程序包管理器:
debian:deb文件, dpkg包管理器
redhat: rpm文件, rpm包管理器
rpm: RedhatPackage Manager
RPM Package Manager
[root@centos7 app]#du -sh alias1.txt //查看文件大小
4.0K alias1.txt
[root@centos7 app]#find -name "ali*"|xargs cat|wc -l //查看ali后缀文件,统计所有行数
4
安装:rpm -i
源代码:name-VERSION.tar.gz|bz2|xz
VERSION: major.minor.release
rpm包命名方式:
name-VERSION-release.arch.rpm
例:bash-4.2.46-19.el7.x86_64.rpm
VERSION: major.minor.release
release:release.OS
常见的arch:
x86: i386, i486, i586, i686
x86_64: x64, x86_64, amd64
powerpc: ppc
跟平台无关:noarch