linux基础学习第十天(文件查找与压缩)

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