2016-08-12
授课内容:
shell的流程控制
文件查找和压缩
shell的流程控制:
过程式编程语言:
顺序执行
选择执行
循环执行(未讲)
顺序执行:
if语句:
单分支
if 判断条件; then
条件为真的分支代码
fi
双分支
if 判断条件; then
条件为真的分支代码
else
条件为假的分支代码
fi
多分支
if CONDITION1; then
if-true
elifCONDITION2; then
if-ture
elifCONDITION3; then
if-ture
…
else
all-false
fi
逐条件进行判断,第一次遇为“真”条件时,执行其分支,而后结束整个if语句
注意,当then与if一行时,需要用;隔开,另起一行,则不需要添加;
例子:
[root@Centos7 shells]# cat createuser.sh #!/bin/bash #Version:1.0 #Create time:2016-08-12 11:09:20 #Description:使用一个用户名做为参数,如果指定参数的用户存在,就显示其存在,否则添加之;显示添加的用户的id号等信息 read -p "please input a username: " USERNAME #`id $USERNAM` &> /dev/null if id $USERNAME &> /dev/null ; then echo "the user exist" exit 100 else useradd $USERNAME &> /dev/null echo "the user add sucessfully and its info is:`id $USERNAME`" exit 99 fi unset USERNAME
选择执行:
case语句
case 变量引用 in
PART1)
COMMAND
;;
PART2)
COMMAND
;;
*) #其他情况
COMMAND
;;
esac
case支持glob风格的通配符:
*: 任意长度任意字符
?: 任意单个字符
[]:指定范围内的任意单个字符
a|b: a或b
例子:
[root@Centos7 shells]# cat yesorno.sh #!/bin/bash #Version:1.0 #Create time:2016-08-12 11:24:09 #Description:写一个脚本/root/bin/yesorno.sh,提示用户输入yes或no,并判断用户输入的是yes还是no,或是其它信息 read -p "please input yes or no: " STRING case $STRING in 'yes'|'y'|'Y'|'YES') echo "your answer is yes" exit 100 ;; 'no'|'n'|'N'|'no'|'n0') echo "your answer is no" exit 99 ;; *) echo "your answer is other" exit 98 esac unset STRING
文件查找:
两者的区别:locate是非实时查找(依赖于事先构建的数据库索引),find是实时的遍历查找
locate:
locate [OPTION]… PATTERN…
查询系统上预建的文件索引数据库
/var/lib/mlocate/mlocate.db
依赖于事先构建的索引;
索引的构建是在系统较为空闲时自动进行(周期性任务);管理员手动更新数据库(updatedb);
索引构建过程需要遍历整个根文件系统,极消耗资源;
工作特点:
查找速度快;
模糊查找;
非实时查找
搜索的是文件的全路径,不仅仅是文件名
可能只搜索用户具备读取和执行权限的目录
find:实时的遍历查找
find [OPTION]… [查找路径] [查找条件] [处理动作]
[查找路径]:指定具体目标路径;默认为当前目录
[查找条件]:指定的查找标准,可以文件名、大小、类型、权限等标准进行;默认为找出指定路径下的所有文件
[处理动作]:对符合条件的文件做操作,默认输出至屏幕
查找条件:
1、文件名和inode号
-name “filename” 支持使用glob *, ?, [], [^]
-iname “filename” 忽略文件名大小写
-inum 按照inode号来查找
-samefile “filenam” 相同inode号的文件
-links n :查找链接数为n的文件
-regex “PATTERN”:以PATTERN匹配整个文件路径字符串,而不仅仅是文件名称
2、根据属主、属组查找:
-user “username”
-group “groupname”
-uid “uid”
-gid “gid”
-nouser:查找没有属主的文件,指的是用户已删除,但其文件还没有删除
-nogroup:
3、根据文件类型查找:
-type
f:普通文件
d:目录文件
b:
c:
p:
s:
l:
4、根据文件大小来查找:【理解数值的范围】
-size [+|-]#size
常用单位:k, M, G
#UNIT: (#-1, #],如:6k
-#UNIT:[0,#-1], 如:-6k
+#UNIT:(#,∞), 如:+6k
5、按照文件的时间戳查找:【理解数值的范围】
以“天”为单位;
-atime[+|-]#,
#: [#,#+1)
+#: [#+1,∞]
-#: [0,#)
-mtime
-ctime
以“分钟”为单位:
-amin
-mmin
-cmin
6、根据权限查找:
-perm [/|-]mode
-perm 664:精确查找文件权限为664的文件
-perm /664:任何一类(u,g,o)对象的权限中只要能一位匹配即可,或关系,【即属主6,属组6,其他4,只要满足任意一个即可】
-perm -664:每一类对象都必须同时拥有指定权限,与关系,0 表示不关注,【即属主拥有6,属组拥有6,其他拥有4,必须满足三个】
动作处理:
-print:默认的处理动作,显示至屏幕;
-ls:类似于对查找到的文件执行“ls -l”命令
-delete:删除查找到的文件;
-flsfile:查找到的所有文件的长格式信息保存至指定文件中
-ok COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令;对于每个文件执行命令之前,都会交互式要求用户确认
-exec COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令
{}: 用于引用查找到的文件名称自身
有些命令不能接受过多参数,此时命令执行可能会失败,下面方式可规避此问题
find | xargs COMMAND
组合条件:
与:-a
或:-o
非:-not, !
德·摩根定律:
非(P 且Q) = (非P) 或(非Q)
非(P 或Q) = (非P) 且(非Q)
!A -a !B = !(A -o B)
!A -o !B = !(A -a B)
文件压缩:
目的:压缩后的文件大小会减少,减少磁盘空间支出
大致原理:如文本love,会标记为一个单词记号,这样就可以大大缩减了文件大小,所以压缩对纯文本会特别明显
压缩格式:
.Z .gz .bz2 .xz
以上的压缩工具只对单个文件进行压缩,不能对整个目录进行压缩
压缩工具:
1、compress(其压缩文件后缀是.Z,默认压缩后删除原文件)
compress [-dfvcVr] [-b maxbits] [file …]
-d:解压缩,相当于uncompress
-c:结果输出至标准输出,不删除原文件
uncompress:解压缩
由于此压缩工具压缩效果不理想,已被淘汰
2、gzip(其压缩文件后缀是.gz,默认压缩后删除原文件)
gzip [OPTION]… FILE …
-d:解压,相当于gunzip
-c:结果输出至标准输出,不删除原文件
gunzip:解压缩
zcat file..:再不解压原文件的情况下临时查看压缩文件的内容
3、bzip2(其压缩文件后缀是.bz2,默认压缩后删除原文件)
bzip2 [OPTION]… FILE …
-d:解压,相当于bunzip2
-c:结果输出至标准输出,不删除原文件
-k:保留原文件
bunzip2:解压缩
bzcat:不显式解压缩的前提下查看文本文件内容
4、xz(其压缩文件后缀是.xz,默认压缩后删除原文件)
-d:解压,相当于unxz
-c:结果输出至标准输出,不删除原文件
-k:保留原文件
xzcat:不显式解压缩的前提下查看文本文件内容
归档(打包)工具tar:
tar [options] [新的打包文件名] [需要打包的文件…]
-c:创建归档文件
-f “filename”:打包的文件名前必须要加-f参数
-z:以gzip方式压缩归档文件
-x:展开归档文件
-t:不解归档的情况下查看归档的文件列表
-zcf: 归档并调用gzip压缩
-zxf: 调用gzip解压缩并展开归档,-z选项可省略
-jcf: 归档并调用bzip2压缩
-jxf:调用bzip2解压缩并展开归档,-j选项可省略
-Jcf: 归档并调用xz压缩
-Jxf:调用xz解压缩并展开归档,-J选项可省略
课后作业
一、
1、查找/var目录下属主为root,且属组为mail的所有文件
[root@Centos7 shells]# find /var -user root -group mail -ls 201327962 4 drwxrwxr-x 2 root mail 4096 Aug 12 12:47 /var/spool/mail 206290473 0 -rw-rw---- 1 root mail 0 Jul 21 11:36 /var/spool/mail/hill
2、查找/var目录下不属于root、lp、gdm的所有文件
[root@Centos7 shells]# find /var -not \( -user root -o -user lp -o -user gdm \) -ls 203220108 0 drwxr-xr-x 2 unbound unbound 21 Jul 21 11:25 /var/lib/unbound 203220104 4 -rw-r--r-- 1 unbound unbound 758 Jul 21 11:25 /var/lib/unbound/root.key 68434676 0 drwx------ 2 tss tss 6 Nov 21 2015 /var/lib/tpm 952626 0 drwxr-xr-x 3 colord colord 50 Jul 21 11:39 /var/lib/colord 68460309 0 drwxr-xr-x 2 colord colord 6 Nov 20 2015 /var/lib/colord/icc 942229 4 -rw-r--r-- 1 colord colord 4096 Jul 21 11:39 /var/lib/colord/mapping.db 942230 8 -rw-r--r-- 1 colord colord 7168 Jul 21 11:39 /var/lib/colord/storage.db 991128 0 drwxr-xr-x 2 geoclue geoclue 6 Nov 20 2015 /var/lib/geoclue 1008615 0 drwx------ 2 rpc rpc 6 Nov 20 2015 /var/lib/rpcbind 68499359 0 drwxr-xr-x 2 chrony chrony 6 Nov 24 2015 /var/lib/chrony 1009006 0 drwx------ 2 setroubleshoot setroubleshoot 69 Jul 21 11:40 /var/lib/setroubleshoot 942213 8 -rw------- 1 setroubleshoot setroubleshoot 6192 Aug 9 15:56 /var/lib/setroubleshoot/setroubleshoot_database.xml 942216 0 -rw------- 1 setroubleshoot setroubleshoot 0 Jul 21 11:40 /var/lib/setroubleshoot/email_alert_recipients 135338699 0 drwx------ 4 rpcuser rpcuser 28 Jul 21 11:26 /var/lib/nfs/statd 203627550 0 drwx------ 2 rpcuser rpcuser 6 Nov 20 2015 /var/lib/nfs/statd/sm 1051683 0 drwx------ 2 rpcuser rpcuser 6 Nov 20 2015 /var/lib/nfs/statd/sm.bak 1051684 0 -rw-r--r-- 1 rpcuser rpcuser 0 Nov 20 2015 /var/lib/nfs/state 203764897 0 drwxr-x--x 7 qemu qemu 69 Jul 21 11:39 /var/lib/libvirt/qemu 2290015 0 drwxr-xr-x 2 qemu qemu 6 Jul 21 11:39 /var/lib/libvirt/qemu/save 70292549 0 drwxr-xr-x 2 qemu qemu 6 Jul 21 11:39 /var/lib/libvirt/qemu/snapshot 136778577 0 drwxr-xr-x 2 qemu qemu 6 Jul 21 11:39 /var/lib/libvirt/qemu/dump 206290506 0 drwxr-xr-x 3 qemu qemu 19 Jul 21 11:39 /var/lib/libvirt/qemu/channel 2301664 0 drwxr-xr-x 2 qemu qemu 6 Jul 21 11:39 /var/lib/libvirt/qemu/channel/target 70292550 0 drwxr-xr-x 2 qemu qemu 6 Jul 21 11:39 /var/lib/libvirt/qemu/nvram 68582074 0 drwx------ 2 pulse pulse 6 Nov 21 2015 /var/lib/pulse 205938566 0 drwx------ 2 postfix root 6 Jun 10 2014 /var/lib/postfix 135286592 0 drwxr-xr-x 2 chrony chrony 6 Nov 24 2015 /var/log/chrony 68478491 0 drwxrwxr-x 2 abrt abrt 6 Dec 1 2015 /var/cache/abrt-di 135464204 0 drwxr-x--- 3 qemu qemu 25 Jul 21 11:39 /var/cache/libvirt/qemu 203424845 0 -rw-rw---- 1 rpc mail 0 Jul 21 11:25 /var/spool/mail/rpc 206354276 0 -rw-rw---- 1 mandriva mail 0 Jul 28 15:46 /var/spool/mail/mandriva 206354278 0 -rw-rw---- 1 fedora mail 0 Jul 28 15:48 /var/spool/mail/fedora 206354310 0 -rw-rw---- 1 gentoo mail 0 Jul 30 14:20 /var/spool/mail/gentoo 206354320 0 -rw-rw---- 1 harry mail 0 Jul 30 14:21 /var/spool/mail/harry 206354325 0 -rw-rw---- 1 sarah mail 0 Jul 30 14:22 /var/spool/mail/sarah 205661267 0 -rw-rw---- 1 user2 mail 0 Aug 1 17:41 /var/spool/mail/user2 205661307 0 -rw-rw---- 1 user3 mail 0 Aug 1 17:41 /var/spool/mail/user3 205668959 0 -rw-rw---- 1 user111 mail 0 Aug 2 19:43 /var/spool/mail/user111 205668942 0 -rw-rw---- 1 openstack mail 0 Aug 3 09:27 /var/spool/mail/openstack 205668971 0 -rw-rw---- 1 alice mail 0 Aug 3 13:52 /var/spool/mail/alice 205668973 0 -rw-rw---- 1 tom mail 0 Aug 3 13:53 /var/spool/mail/tom 205668981 0 -rw-rw---- 1 user1 mail 0 Aug 3 14:50 /var/spool/mail/user1 205668974 0 -rw-rw---- 1 bash mail 0 Aug 7 08:59 /var/spool/mail/bash 206386952 0 -rw-rw---- 1 nihaoma mail 0 Aug 12 11:20 /var/spool/mail/nihaoma 135065135 0 drwx------ 2 abrt abrt 6 Dec 1 2015 /var/spool/abrt-upload 69970443 0 drwx------ 2 postfix root 6 Jun 10 2014 /var/spool/postfix/active 136261128 0 drwx------ 2 postfix root 6 Jun 10 2014 /var/spool/postfix/bounce 205938567 0 drwx------ 2 postfix root 6 Jun 10 2014 /var/spool/postfix/corrupt 2013438 0 drwx------ 2 postfix root 6 Jun 10 2014 /var/spool/postfix/defer 69970444 0 drwx------ 2 postfix root 6 Jun 10 2014 /var/spool/postfix/deferred 136261129 0 drwx------ 2 postfix root 6 Jun 10 2014 /var/spool/postfix/flush 205938568 0 drwx------ 2 postfix root 6 Jun 10 2014 /var/spool/postfix/hold 2013439 0 drwx------ 2 postfix root 6 Jun 10 2014 /var/spool/postfix/incoming 69970445 0 drwx-wx--- 2 postfix postdrop 6 Jun 10 2014 /var/spool/postfix/maildrop 205938569 0 drwx------ 2 postfix root 6 Jun 10 2014 /var/spool/postfix/private 2013440 0 drwx--x--- 2 postfix postdrop 6 Jun 10 2014 /var/spool/postfix/public 69970446 0 drwx------ 2 postfix root 6 Jun 10 2014 /var/spool/postfix/saved 136261131 0 drwx------ 2 postfix root 6 Jun 10 2014 /var/spool/postfix/trace 2013448 0 drwx------ 3 daemon daemon 29 Jul 21 11:31 /var/spool/at 70013921 0 drwx------ 2 daemon daemon 6 Nov 20 2015 /var/spool/at/spool 2013450 0 -rw------- 1 daemon daemon 0 Jul 21 11:31 /var/spool/at/.SEQ 821666 0 drwxr-xr-x 2 abrt abrt 6 Jul 21 11:37 /var/tmp/abrt 2304665 4 -rw-rw---- 1 3000 hill 595 Aug 2 14:50 /var/tmp/fstab
3、查找/var目录下最近一周内其内容修改过,同时属主不为root,也不是postfix的文件
[root@Centos7 shells]# find /var/ -mtime -7 -not \( -user root -o -user postfix \) -ls 942213 8 -rw------- 1 setroubleshoot setroubleshoot 6192 Aug 9 15:56 /var/lib/setroubleshoot/setroubleshoot_database.xml 69210322 0 drwxrwx--T 6 gdm gdm 79 Aug 12 08:30 /var/lib/gdm 205653757 4 -rw-r--r-- 1 gdm gdm 43 Aug 12 08:30 /var/lib/gdm/.pulse/d84e4562ec594069be53afee569c711e-default-sink 205653758 4 -rw-r--r-- 1 gdm gdm 42 Aug 12 08:30 /var/lib/gdm/.pulse/d84e4562ec594069be53afee569c711e-default-source 69338350 8 -rw------- 1 gdm gdm 6514 Aug 12 08:30 /var/lib/gdm/.ICEauthority 69338355 0 drwxr-xr-x 2 gdm gdm 17 Aug 12 08:30 /var/lib/gdm/.config/dconf 70297035 4 -rw-r--r-- 1 gdm gdm 451 Aug 12 08:30 /var/lib/gdm/.config/dconf/user 205653754 0 drwx------ 2 gdm gdm 52 Aug 12 08:30 /var/lib/gdm/.config/ibus/bus 205653736 4 -rw-r--r-- 1 gdm gdm 168 Aug 12 08:30 /var/lib/gdm/.config/ibus/bus/d84e4562ec594069be53afee569c711e-unix-0 69338356 0 drwx------ 2 gdm gdm 48 Aug 12 08:30 /var/lib/gdm/.local/share/telepathy/mission-control 70297036 4 -rw------- 1 gdm gdm 38 Aug 12 08:30 /var/lib/gdm/.local/share/telepathy/mission-control/accounts-goa.cfg 203877581 4 drwxr-xr-x 2 lp sys 4096 Aug 8 09:37 /var/log/cups 205668974 0 -rw-rw---- 1 bash mail 0 Aug 7 08:59 /var/spool/mail/bash 206386952 0 -rw-rw---- 1 nihaoma mail 0 Aug 12 11:20 /var/spool/mail/nihaoma
4、查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件
[root@Centos7 shells]# find / -nouser -o -nogroup -atime -7 find: ‘/proc/11789/task/11789/fd/6’: No such file or directory find: ‘/proc/11789/task/11789/fdinfo/6’: No such file or directory find: ‘/proc/11789/fd/6’: No such file or directory find: ‘/proc/11789/fdinfo/6’: No such file or directory /var/tmp/fstab
5、查找/etc目录下大于1M且类型为普通文件的所有文件
[root@Centos7 shells]# find /etc/ -size +1M -type f -ls 136448114 3772 -rw-r--r-- 1 root root 3858924 Nov 21 2015 /etc/selinux/targeted/policy/policy.29 206290485 6852 -r--r--r-- 1 root root 7014922 Jul 21 11:37 /etc/udev/hwdb.bin 135580237 1336 -rw-r--r-- 1 root root 1367395 Mar 6 2015 /etc/brltty/zh-tw.ctb
6、查找/etc目录下所有用户都没有写权限的文件
[root@Centos7 shells]# find /etc/ -not -perm /222 -ls 67378566 196 -r--r--r-- 1 root root 198453 Jul 21 11:23 /etc/pki/ca-trust/extracted/java/cacerts 134606432 352 -r--r--r-- 1 root root 359773 Jul 21 11:23 /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt 201787858 264 -r--r--r-- 1 root root 266702 Jul 21 11:23 /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem 201787859 216 -r--r--r-- 1 root root 217510 Jul 21 11:23 /etc/pki/ca-trust/extracted/pem/email-ca-bundle.pem 201787860 208 -r--r--r-- 1 root root 211626 Jul 21 11:23 /etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem 631373 4 -r-------- 1 root root 45 Jul 21 11:24 /etc/openldap/certs/password 68464198 4 -r--r--r-- 1 root root 531 Sep 6 2015 /etc/lvm/profile/cache-mq.profile 68464199 4 -r--r--r-- 1 root root 338 Sep 6 2015 /etc/lvm/profile/cache-smq.profile 68464200 4 -r--r--r-- 1 root root 2249 Nov 21 2015 /etc/lvm/profile/command_profile_template.profile 68464201 4 -r--r--r-- 1 root root 828 Nov 21 2015 /etc/lvm/profile/metadata_profile_template.profile 68464202 4 -r--r--r-- 1 root root 76 Sep 6 2015 /etc/lvm/profile/thin-generic.profile 68464203 4 -r--r--r-- 1 root root 80 Sep 6 2015 /etc/lvm/profile/thin-performance.profile 203877169 4 -r--r--r-- 1 root root 460 Nov 20 2015 /etc/dbus-1/system.d/cups.conf 136828869 4 ---------- 1 root root 1183 Aug 12 12:47 /etc/gshadow 134996892 4 ---------- 1 root root 1197 Aug 12 12:47 /etc/gshadow- 136828764 4 ---------- 1 root root 2087 Aug 12 12:47 /etc/shadow 68500289 4 -r--r--r-- 1 root root 63 Nov 20 2015 /etc/ld.so.conf.d/kernel-3.10.0-327.el7.x86_64.conf 134997273 4 ---------- 1 root root 2119 Aug 12 12:47 /etc/shadow- 206290485 6852 -r--r--r-- 1 root root 7014922 Jul 21 11:37 /etc/udev/hwdb.bin 134997540 4 -r--r--r-- 1 root root 33 Jul 21 11:25 /etc/machine-id 68582624 4 -r--r--r-- 1 root root 146 Nov 20 2015 /etc/pam.d/cups 136634061 8 -r--r----- 1 root root 4188 Jul 7 2015 /etc/sudoers
7、查找/etc目录下至少有一类用户没有执行权限的文件
[root@Centos7 test]# find /etc -not -perm -111 -ls | wc -l 1891
8、查找/etc/init.d目录下,所有用户都有执行权限,且其它用户有写权限的文件
[root@Centos7 shells]# find /etc/init.d -perm -111 -a -perm -002 -ls 134514558 0 lrwxrwxrwx 1 root root 11 Jul 21 11:23 /etc/init.d -> rc.d/init.d
二、博客:
德·摩根定律
非(P 且Q) = (非P) 或(非Q)
非(P 或Q) = (非P) 且(非Q)
三、预习
原创文章,作者:麦德良,如若转载,请注明出处:http://www.178linux.com/34861