> RedHat >

RHCE7认证学习笔记15——访问文件系统

RHCE7认证学习笔记15——访问文件系统

1、查看分区和设备文件

    /dev路径下面保存了系统的设备文件

    查看系统已经挂载分区:

(1)
[root@linuxidc ~]# cat /proc/partitions  
major minor  #blocks  name 
  2        0          4 fd0 
  8        0  20971520 sda 
  8        1    512000 sda1 
  8        2  20458496 sda2 
  11        0    3655680 sr0 
 253        0  18358272 dm-0 
 253        1    2097152 dm-1

    (2)
[root@linuxidc ~]# df  -hTP 
Filesystem            Type      Size  Used Avail Use% Mounted on 
/dev/mapper/rhel-root xfs        18G  3.1G  15G  18% / 
devtmpfs              devtmpfs  485M    0  485M  0% /dev
tmpfs                tmpfs    494M  80K  494M  1% /dev/shm
tmpfs                tmpfs    494M  7.1M  487M  2% /run
tmpfs                tmpfs    494M    0  494M  0% /sys/fs/cgroup
/dev/sda1            xfs      497M  119M  379M  24% /boot

    查看文件系统的UUID,UUID标记的是文件系统,而非分区,使用UUID标记的好处是在分区发生错位的情况下,比如sda5,sda6,sda7:如果sda5被删除了,则sda6变成sda6,sda7变成sda6,那么在文件/etc/fstab挂载中,如果还是写sda6,sda7,则挂载会出现问题;所以最好再fstab里面挂载时写UUID
[root@linuxidc ~]# blkid 
/dev/sda1: UUID="64d32c15-8708-44a2-893a-a437c0f43156" TYPE="xfs" 
/dev/sda2: UUID="4Ice1U-52dB-jxhY-80pW-vWus-rv1n-MVBJQ5" TYPE="LVM2_member" 
/dev/sr0: UUID="2014-05-07-03-58-46-00" LABEL="RHEL-7.0 Server.x86_64" TYPE="iso9660" PTTYPE="dos" 
/dev/mapper/rhel-root: UUID="6e18526c-e4fa-4854-adcd-d2e463a53bf9" TYPE="xfs" 
/dev/mapper/rhel-swap: UUID="b4476c9f-7681-48d8-8cba-3904f4ebce61" TYPE="swap"

2、挂载文件系统
    查看文件夹大小,而不是内容:
[root@linuxidc ~]# ls -ld /boot/ 
dr-xr-xr-x. 3 root root 4096 Dec 26 15:33 /boot/

    查看文件夹内容的大小使用du命令:
[root@linuxidc ~]# du -h /boot/ 
0/boot/grub2/themes/system
0/boot/grub2/themes
2.4M/boot/grub2/i386-pc
3.3M/boot/grub2/locale
2.5M/boot/grub2/fonts
8.1M/boot/grub2
94M/boot/
  
[root@linuxidc ~]# du -hs /boot/ 
94M/boot/

    使用mount命令挂载文件系统:

        常用选项:

    -o: 选项1,选项2...  文件系统  挂载点

          ro:只读选项;
            remount:重新挂载

 

[root@linuxidc ~]# mount /dev/cdrom /iso/ 
mount: /dev/sr0 is write-protected, mounting read-only

[root@linuxidc ~]# mount UUID="2014-05-07-03-58-46-00" /iso/

    当挂载点挂载一个文件系统的时候,那么挂载点里面原有的东西都会被隐藏;

    卸载文件系统:umount ;

    卸载文件系统的时候,如果文件系统被某个进程占用,则卸载会提示系统繁忙,无法卸载:

 [root@linuxidc iso]# umount /iso/ 
umount: /iso: target is busy. 
        (In some cases useful info about processes that use 
        the device is found by lsof(8) or fuser(1))

    这时候使用fuser命令,查看占用的进程,然后kill命令杀死,再卸载即可:

[root@linuxidc iso]# fuser -mv /iso/ 
                    USER        PID ACCESS COMMAND 
/iso:                root    kernel mount /iso
                    root      6256 ..c.. bash

 [root@linuxidc ~]# kill -9 6256

    输入mount命令可以查看所有的挂载选项:

3、开机自动挂载文件系统
    编辑/etc/fstab文件,编辑开机自动挂载文件系统:

    
  9 /dev/mapper/rhel-root  /                      xfs    defaults        1 1 
 10 UUID=64d32c15-8708-44a2-893a-a437c0f43156 /boot                  xfs    defaults        1 2 
 11 /dev/mapper/rhel-swap  swap                    swap    defaults        0 0

        文件系统                          挂载点        文件系统        挂载选项    dump    fsck检查(一般写0)


    配置完成fstab后,使用mount -a 命令挂载文件系统;

4、文件的软硬链接

    分区的每个block默认大小是4K,一个block只能存储一个文件;inode相当于分区的索引,记录了文件的属性信息;

    硬链接,文件的inode相同,实质上指的是相同的文件,相当于一个文件两个名称,修改其中的一个文件,另一个也会改变,删除其中一个文件,不会影响另一个文件:
1234 [root@linuxidc tmp]# touch aa  
[root@linuxidc tmp]# ln aa bb 
[root@linuxidc tmp]# ls -i aa bb 
102819918 aa  102819918 bb

 inode只能记录本分区的block信息,硬链接不能跨分区

创建一个文件夹,默认就会有2个硬链接,一个是文件夹本身,另一个是文件夹的".":, “..” 返回上一层目录也是一个硬链接:
 ”[root@linuxidc tmp]# mkdir aa 
[root@linuxidc tmp]# ls -ld aa/ 
drwxr-xr-x. 2 root root 6 Jan 14 16:32 aa/

5、文件查找
    
    whereis + 文件   

    which  +  命令

    locate:利用数据库来根据名字查询文件,查询速度很快,但是数据库一周更新一次;可以使用updatedb命令手工更新数据库: 

    find: find + 目录+属性+值

    属性值:

            1、name;

            2、size;

            3、user group;

            4、uid,gid;

            5、perm;查找权限    222完全匹配,-222至ugo分别少要含有相对应的权限222,+222,/222或关系,ugo分别只要满足其中一个权限即可

            6、type;

            7、ctime/cminu;

            8、newer;

 

    find查找出来的内容要执行命令,则按照以下两种方式操作:

    [root@linuxidc tmp]# find -name "*" | xargs ls -l 
    [root@linuxidc tmp]# find -ctime +1 -exec ls -l {} \;

   

6、find命令参数详解
    
SYNOPSIS语法格式
      find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]
    选项:

        -P:不查找链接文件内容,这是默认选项;

        -L:查找链接文件内容,如果文件时链接文件,那么加入这个选项,命令将会查看链接所指的文件的内容:

            例如,2个链接文件,一个指向文件,一个指向目录:
[root@linuxidc tmp]# ll bb cc 
lrwxrwxrwx. 1 root root 12 Jan 15 14:59 bb -> /root/passwd
lrwxrwxrwx. 1 root root  5 Jan 15 15:11 cc -> /root

      不加-L选项时,查找bb和cc文件:
    [root@linuxidc tmp]# find bb cc -type f  没有结果
        加入-L选项,将会查找链接文件指向的真正内容:
[root@linuxidc tmp]# find -L  bb cc -type f

        -H:这个选项和-L选项类似,不同的区别是,假如查找的链接文件是坏链接,则将会显示链接文件的信息;

        -follow:这个选项后面的链接文件也会被指向其链接的真正文件;

        -D: 诊断信息

            诊断选项:
help  Explain the debugging options 
tree  Show the expression tree in its original and optimised form. 
stat  Print  messages  as  files are examined with the stat and lstat system calls.  The find program tries to min?imise such calls. 
opt    Prints diagnostic information relating to the optimisation of the expression tree; see the -O option. 
rates  Prints a summary indicating how often each predicate succeeded or failed.

    -Olevel;优化层级
        0:

        1:默认层级

        2:

        3:

    表达式expression由三个部分组成,由运算符分隔开:

        选项option,所有选项返回true值:   

                常用选项

                    -d,-depth:处理目录的内容的层级

                    -maxdepth:处理目录的最大层级;

                    -noleaf:针对于CD-ROM,MS-DOS,AFS等不符合unix文件系统规范的文件;

        测试tests:

                -ctime;

                -atime:

                -perm:

                -iname:

                -path

                -mmin:

                -mtime:

                -newer:

                -name

                -size:文件大小

                -type:文件类型:b,c,d,f,l,p,s,d

                -uid:

                -gid:
                   

        操作actions:

 

                -delete:

               

                -exec command: 执行多个命令,直到遇到带;的命令

                -exec comand {}  \; :

                -execdir command:

                -execdir comand {} \; :只执行查找的文件的当前目录

                -fprint:

                -prune:修剪,只显示文件所所指向的目录:

    find的运算符:
        (expr):               

            !:非

            not:

            expr1 expr2:并且

            expr1 -a expr:并且

            expr1 -and expr2:并且
            expr1 -o expr2:或者

            expr1 -or expr2:或者

    三种标准格式:POSIX,GNU,BSD

    环境变量:

        LANG:
        LC_ALL:
        PATH:
        POSIXLY_CORRECT: 设置了这个环境变量,那么 -perm +zzz这样的模式会出错
Determines  the  block size used by -ls and -fls.  If POSIXLY_CORRECT is set, blocks are units of 512 bytes.  Other‐ 
              wise they are units of 1024 bytes.

When POSIXLY_CORRECT is not set, -perm +zzz is treated just like -perm /zzz if +zzz is not a  valid  symbolic  mode. 
              When POSIXLY_CORRECT is set, such constructs are treated as an error.

    常见使用例子:

        找到文件名为core的文件,并删除:
find /tmp -name core -type f -print | xargs /bin/rm -f

 

    如果文件或目录含有单引号、双引号、换行符,以下的find也能找到:
find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f

    找到当前目录下面的文件,并执行file命令:

    find . -type f -exec file '{}' \;
    或:find . -type f -exec file {} \;

    遍历跟目录,查找setuid的文件和目录并保存到/root/suid.txt,查找大于100M的文件并保存到/root/big.txt,%#m=文件权限前面加特殊标记位,%u =UID,%p=文件名称,%s=文件大小:
    find / \( -perm -4000 -fprintf /root/suid.txt '%#m %u %p\n' \)  \ 
      \( -size +100M -fprintf /root/big.txt '%-10s %p\n' \)

    查找家目录下面在最近24小时内修改的文件:

find $HOME -mtime 0

    寻找sbin目录下面可执行但是不可读的文件,!是非的意思,使用转义字符\进行转义:
find /sbin /usr/sbin -executable \! -readable -print

    精确匹配:

find . -perm 664

find . -perm -664    至少包含644权限

find . -perm /222    ugo的权限位只要满足一个条件即可

find . -perm /220
find . -perm /u+w,g+w 
find . -perm /u=w,g=w

        find . -perm -444 -perm /222 ! -perm /111
        find . -perm -a+r -perm /a+w ! -perm /a+x

        find repo/ -exec test -d {}/.svn \; -or \ 
      -exec test -d {}/.git \; -or -exec test -d {}/CVS \; \ 
      -print -prune




(责任编辑:IT)