小红帽第7集

  |  

小红帽第7集:
find命令、if语句、磁盘管理、文件系统管理

文件查找

  在文件系统上查找符合条件的文件:

  linux下的文件查找工具常用的有两个:locate和find

    非实时查找(基于数据库进行的查找):locate

    实时查找:find

  locate:

    依赖于事先构建的索引,索引的构建是在系统较为空闲时自动进行的(基于周期性任务)。

    如果要手动更新数据库可以使用命令:updatedb

    索引构建过程需要遍历整个文件系统,所以该过程会很耗资源

    工作特点:

      查找速度快:

      模糊查找:

      非实时查找:

    用法:locate [OPTION]… PATTERN…

      常用方法:locate KEYWORD

  find:

    实时查找工具,通过遍历指定路径下的文件系统完成文件查找

    工作特点:

      查找速度比较慢

      但是查找比较精确:

      基于实时查找:

    用法:

      find [OPTION] … [查找路径][查找条件] [处理动作]

        查找路径:指定具体目标路径,默认为当前目录

        查找条件:指定的查找标准,可以以文件名,大小,类型,权限等标准进行,默认为找出路径下的所有文件

        处理动作:对符合条件的文件做什么操作,默认为输出至屏幕

        查找条件:

          (1)、根据文件名查找:

              -name “文件名” 对于文件名支持使用glob

                例如:find /etc -name “passwd” :在/etc目录下查找以passwd为文件名的文件

                find /etc -name “*passwd” :在/etc目录下查找以passwd结尾的文件名的文件

                find /etc -name “passwd *”:在/etc目录下查找以passwd开头的文件名的文件

              -iname “文件名”:不区分字母大小写

              -regex “PATTERN” :以PATTERN匹配整个文件路径字符串,而不仅仅是文件名称

          (2)、根据属主,属组查找

              -user USERNAME :查找属主为指定用户的文件

                find /home -user zhangshuo -ls

                find /tmp -user root -ls

              -group USERNAME :查找属组为指定组的文件

                find /home -group zhangshuo -ls

              -uid USERID:查找属主为指定的UID号的文件

              -gid GROUPID:查找属组为指定的GID号的文件

              -nouser:查找没有属主的文件

              -nogroup:查找没有属组的文件

          (3)、根据文件类型查找

              -type TYPE

                TYPE:f,d,l,p,s,b,c等

          (4)、组合条件:

            与:-a

            或:-o

            非:-not,!

            find / -nouser -o -nogroup -ls

            find / \( -nouser -o -nogroup \) -ls

            注意:组合条件时后面的ls只会和组合条件测试后面的一起匹配如果要使用,则需要加括号

            find / \( -not -name “fstab” -a -not -user root \) -ls

            find / -not \( -name “fstab” -o -user root \) -ls

          (5)、根据文件大小来查找:

            -size [+|-]#UNIT

              常用单位:K,M,G

              #UNIT:表示的范围为(#-1,#]

              -#UNIT:表示的范围为[0,#-1]

              +#UNIT:表示的范围为(#,oo)

          (6)、根据时间戳来查找:

            以天为单位:

              -atime:

              -mtime:

              -ctime:

                [+|-]#

                  #:表示的范围为[#,#+1)

                  -#:表示的范围为[0,#)

                  +#:表示的范围为[#+1,oo)

            以分钟为单位:

              -amin:

              -mmin:

              -cmin:

                用法同以天为单位的类似

          (7)、根据权限查找:

            -perm [/|-]MODE

              MODE:精确权限匹配 find /etc -perm 600 -ls

              /MODE:任何一类(u,g,o)对象的权限中只要能有一位匹配即可

                find /etc -perm /222 -ls :查找/etc目录下任何用户都有写权限的文件

                find /etc -perm /600 -ls :查找/etc目录下属主有度或写权限的文件

              -MODE:每一类对象都必须同时拥有为其指定的权限标准

        处理动作:

          -print:默认的处理动作,显示至屏幕

          -ls:类似于对查找到的文件执行ls -l命令

          -delete:删除查找到的文件,操作有风险,确认许谨慎

          -fls /path/to/somefile:查找到的所有文件的长格式信息保存至指定文件中

          -ok COMMAND {} \;:对查找到的每个文件执行由COMMAND指定的命令,对于每个文件执行命令之前,都需要交互式要求用户确认。

          -exec COMMAND {} \;:对查找到的每个文件执行由COMMAND指定的命令,不需要确认。

          注意:find查找到的文件传递至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令,但是有些命令不能接受过多的参数,此时命令执行可能会失败,另一种方式可规避此问题:find | xargs COMMAND

          比如:find /tmp -amin -5 | xargs cat

  对于find的应用举例如下:

[root@localhost tmp]# #1、查找/var目录下属主为root,且属组为mail的所有文件或目录
[root@localhost tmp]# find /var -user root -a -group mail -ls
201327649 0 drwxrwxr-x 2 root mail 43 Jul 25 17:30 /var/spool/mail
207496332 232 -rw------- 1 root mail 235791 Jul 25 17:30 /var/spool/mail/root
[root@localhost tmp]# #2、查找/usr目录下不属于root,bin或zhangshuo的所有文件或目录
[root@localhost tmp]# find /usr/ -not -user root -a -not -user bin -a -not -user zhangshuo -ls | less
[root@localhost tmp]# #3、查找/etc目录下最近一周内其内容修改过,同时属主不为root,也不是zhangshuo的文件或目录
[root@localhost tmp]# find /etc/ -mtime -7 -not \( -user root -o -user zhangshuo \) -ls
[zhangshuo@localhost ~]$ #4、查找当前系统上没有属主或属组,且最近一周内曾被访问过的文件
[root@localhost ~]# find / -nouser -a -nogroup -a -atime -7 -ls
[zhangshuo@localhost ~]$ #5、查找/etc目录下大于1M且类型为普通文件的所有文件
[zhangshuo@localhost ~]$ sudo find /etc/ -size +1M -a -type f -ls
[zhangshuo@localhost ~]$ #6、查找/etc目录下所有用户都没有写权限的文件
[zhangshuo@localhost ~]$ sudo find /etc/ -not -perm /222 -ls
#备注:首先可以反过来想就是所有用户都有写权限则为-perm -222 此时再加not然后与的关系要转为或的关系
[zhangshuo@localhost ~]$ #7、查找/etc目录下至少有一类用户没有执行权限的文件
[zhangshuo@localhost ~]$ sudo find /etc/ -not -perm -111 -ls
#备注:首先找对立事件则为至少有一类用户用执行权限则为-perm /111 此时再求对立事件即可则为-not -perm -111
[zhangshuo@localhost ~]$ #8、查找/etc/init.d 目录下所有用户都有执行权限,且其它用户都有写权限的文件
[zhangshuo@localhost ~]$ sudo find /etc/init.d/ -perm -113 -ls

  

文件特殊权限及if条件语句

linux文件系统上的特殊权限

  SUID,SGID,Sticky

  1、安全上下文

    前提:进程有属主和属组,文件有属主和属组

    (1)、任何一个可执行程序文件能不能启动为进程,取决于发起者对程序文件是否拥有执行权限

    (2)、启动为进程之后,其进程的属主为发起者,进程的属主为发起者所属的组

    (3)、进程访问文件时的权限,取决于进程的发起者

      (a)、进程的发起者,同文件的属主,则应用文件属主权限

      (b)、进程的发起者,同文件的属组,则应用文件属组权限

      (c)、如果都不属于则应用文件的其它权限

  2、SUID

    (1)、任何一个可执行程序文件能不能启动为进程取决于发起者对程序文件是否拥有执行权限

    (2)、启动为进程之后,其进程的属主为原程序文件的属主

      比如/usr/bin/passwd文件就具有SUID权限,所以普通用户才可以使用该命令进行密码的修改,并将修改后的文件写入到/etc/shadow文件中

    权限设定:

      chmod u+s :设置该权限

      chmod u-s :取消该权限

  3、SGID

    默认情况下,用户创建文件时其属组为此用户所属的基本组,一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组

    权限设定:

      chmod g+s DIR…

      chmod g-s DIR…

  4、sticky

    对于一个多人可写的目录,如果设置了sticky,则每个用户仅能删除自己的文件

    权限设定:

      chmod o+t DIR…

      chmod o-t DIR…

    注意,以上三个权限也可以使用一个八进制数进行表示,chmod 1777 /tmp/a.txt表示该文件具有sticky同时读写执行都为777

  5、几个权限位映射

    SUID:user占据属主的执行权限位

      S:属主没有x权限

      s:属主具有x权限

    SGID:group占据属组的执行权限位

      S:属主没有x权限

      s:属主具有 x权限

    sticky:other占据 other的执行权限位

      T:属主没有x权限

      t:属主具有x权限

bash脚本编程

  过程式编程语言:

    顺序执行:

    选择执行:

    循环执行:

  选择执行:

    条件判断,控制结构

    单分支的if语句
      if 判断条件; then
        statement1
        statement2
         …
      fi

    双分支的if语句:
      if 判断条件; then
        statement1
        statement1

      else
        statement3

      fi

  ## linux磁盘管理

  设备文件:关联至一个设备驱动程序,进而能够跟与之对应硬件设备进行通信

    设备号:

      主设备号:major number 标识设备类型

      次设备号:minor number 标识同一类型下的不同设备,这样系统可以只调用一个驱动程序即可

    对于设备文件来说,只有元数据而没有数据

    

brw-rw----. 1 root    disk      8,   0 Aug  7 08:52 sda #该文件为块设备文件,主设备号为8次设备号为0而没有大小
brw-rw----. 1 root disk 8, 1 Aug 7 08:52 sda1

  硬盘接口类型:

    IDE:并口通信  接口最大速度133MB/s

    SCSI:并口通信  接口最大速度640MB/s

    SATA:串口通信  接口最大速度6Gb/s

    SAS:串口通信  接口最大速度6Gb/s

    USB:串口通信  接口最大速度5Gb/s

    注意:上面的速度只是该接口的理论最大速度,而实际速度还要取决于硬件的读写性能

  硬盘设备的设备文件命名:

    centos5:IDE硬盘的命名为/dev/hd

        SCSI,SATA,SAS,USB都会以/dev/sd来表示

    对于centos6,7硬盘都表示为为/dev/sd

    对于不同的硬盘用a-z来表示

      比如/dev/sda,/dev/sdb

    对于同一硬盘的不同分区用1,2,3来表示

      比如/dev/sda1,/dev/sda2等

  机械硬盘的分区方式:

    对于机械硬盘来说,在磁盘的0磁道,0扇区用来保存磁盘的分区信息,每个扇区有512字节这512个字节用处如下:

    前446字节用于MBR:Master Boot Record叫做主引导记录

    下面64字节用于存放分区表,每个分区用16个字节来表示,所以64个字节只能表示4个分区

    最后2个字节用于表示该分区表的有效性。

    对于这种方式的分区方式,每个硬盘只能用于4个分区,显然不能满足需求,此时可以使用扩展分区,就是其中的16字节并不表示分区情况,而表示了一个映射,映射到一个更大的地方来表示更多的分区。

    所以通常会分为3个主分区和一个扩展分区,扩展分区只能有一个,在扩展分区中其它分区则为逻辑分区,对于逻辑分区来说可以有无限个。

  分区管理工具:fdisk ,parted,sfdisk

    fdisk:对于单个硬盘来说,最多只能管理15个分区

    fdisk -l [-u][device…] :查看分区情况

    fdisk Device

      子命令:管理功能

        p:print,显示以有分区

        n:new,创建新的分区

        d:delete,删除分区

        w:write,写入磁盘并退出

        q:quit,放弃更新并推出

        m:获取帮助

        l:列表所有分区id

        t:调整分区id

    查看内核是否已经识别新的分区

      cat /proc/partations

    通知内核重新读取硬盘分区表

      partx -a /dev/sda

      partx -a -n 4:6 /dev/sdb :使用-n选项来指定读取分区

        -f:force

Linux文件系统管理

  Linux文件系统:ext2,ext3,ext4,xfs,btrfs,reiserfs,jfs

    swap:交换分区

    光盘:iso9600

  windows文件系统:fat32,ntfs

  unix文件系统:FFS,UFS,JFS2

  网络文件系统:NFS,CIFS(网上邻居文件系统)

  集群文件系统:红帽的GFS2,OCFS2

  根据其是否支持日志功能分为

    日志型文件系统:ext3,ext4,xfs…

    非日志型文件系统:ext2,vfat

  文件系统的组成部分:

    内核中的模块:ext4,xfs,vfat

    查看内核模块命令:lsmod

    用户空间的管理工具:mkfs.ext4,mkfs.xfs,mkfs.vfat

  linux的虚拟文件系统:VFS

    作用将各种文件系统的接口同一起来用于,方便程序员进行程序的开发

  创建文件系统:

    查看当前系统所支持的文件系统:cat /proc/filesystems

    blkid /dev/DEVICE 查看文件系统信息

    创建文件系统的方法:

      (1)、mkfs.FS_TYPE /dev/DEVICE

            ext4;ext2;ext3;xfs;btrfs;vfat

      (2)、mkfs -t FS_TYPE /dev/DEVICE

          mkfs -t xfs /dev/sda5

          -L MYDATA:指明分区的标签

    ext系列文件系统专用管理工具:mke2fs

      -t {ext2|ext3|ext4}

      -b {1024|2048|4096}

      -L “LABEL”

      -j:日志功能,相当于-t ext3

        mkfs.ext3=mkft -t ext3=mke2fs -j =mke2fs -t ext3

      -m #:制定预留给超级用户的块数百分比,默认为5%

      -i #:用于指定为多少个字节空间创建一个inode,默认为8192,这里给出的数值应该为块大小的2^n倍

      -N #:为分区数据空间指定创建多少个inode

      -F:强制创建文件系统

      -E:用户指定额为文件系统属性

  blkid:块设备属性信息查看

     blkid -L label | -U uuid

      -U:UUID根据指定的UUID来查找对应的设备

      -L:LABEL根据指定的LABEL来查找对应的设备

  e2label:管理ext系列文件系统的LABEL

    e2label DEVICE [LABEL]

  tune2fs:重新设定ext文件系统可调参数的值

    -l:查看指定文件系统超级块信息

    -L “LABEL”:修改卷标信息

    -m #:修改预留给管理员的空间百分比

    -j:将ext2升级为ext3

    -r #:指定预留块数

    -o:设定默认挂在格式  

      acl:开启acl功能,acl指访问控制列表,这里指文件系统而言

    -U UUID:修改UUID号,该选项基本很少用,除非UUID号码重复时

  dumpe2fs:显示文件属性信息
    -h:只显示超级块信息

  mkswap:创建交换分区

    mkswap [options] device

      -L “LABEL”:指定卷标

      注意:前提要将其分区ID调整为82

  文件系统检测:

    fsck:检查并修复Linux文件系统
      -t FSTYPE:文件系统类型
      -a :自动修复
  
    e2fsck:专用于修复ext2/ext3文件系统
      -f:强制检查
      -p:自动修复
      -a:自动修复

-EOF

    

文章目录
  1. 1. 文件查找
  2. 2. 文件特殊权限及if条件语句
    1. 2.1. linux文件系统上的特殊权限
    2. 2.2. bash脚本编程
  3. 3. Linux文件系统管理
, , 本站文章总字数: 40.5k