• 文件管理

    文件系统和目录结构

           文件和目录被组成成一个单根倒置树结构。根文件系统rootfs  root filesystem

                     rootfs:/etc/,/usr,/var,/root,/home,/dev

     文件系统分层结构  LSB  Linux Standard Base

     FHS:Filesystem Hierarchy Standard 文件系统层级标准

       /bin:基本命令

       /sbin:管理类命令

       /lib    /lib64:库文件

       /etc:配置文件

       /dev:设备文件及特殊文件

       /root:root用户家目录

       /usr:universal shared, read-only data

       /srv:服务相关文件

       /var:可变数据

       /tmp:临时文件

       /home:家目录

       /opt:第三方程序

       /sys:硬件相关

       /proc:虚拟文件系统

       /media:便携式移动设备挂载点

       /mnt:临时挂载点

       /misc:杂项,自动挂载

image.png

     文件名命令规则

           最长不超过255字符,以.开头的为隐藏文件;标准Linux文件系统,文件名称大小写敏感

           显示颜色

                 灰色       普通文件

                 蓝色       目录

                 绿色       二进制可执行程序

                 红色       打包文件

                 浅蓝色    链接文件

                

     路径    目录:路径映射

          相对路径  从当前位置开始

          绝对路径  以/开头   从根开始

          basename      取基名

          dirname         取目录名

  • 文件类型

    -:普通文件

    d:目录

    b:块设备

    l:符号链接文件

    s:套接字文件socket

    p:管道文件pipe

  • 文件相关命令

    pwd 

     cd 切换目录

     ls

        -a:显示隐藏文件

        -d:显示目录本身

        -l:列表

        -h:显示单位

     mv

     cp

     rm

     touch新建文件和修改时间戳

          Linux时间戳

                 Access     访问时间atime

                 Modify    修改时间mtime

                 Change   改变时间ctime

目录相关

      mkdir

      rmdir

      tree

  • 索引节点Inode(index node)

     Linux文件在磁盘上存放成两部分   

                     元数据metadata

                     数据data

         元数据和数据本身在硬盘上保存时是分离的

     当访问文件时先访问此文件的元数据,元数据中有指针指向数据

     元数据中还有Inode(节点编号)

            节点编号用来标识文件的唯一性(在一个分区中唯一) 系统自动分配,有最大值   

                 查看文件节点编号:df -i

        存放文件元数据空间:节点表        

                结构

                     权限    所有者     大小    时间戳      指针

         指针

             直接指针:指向数据块   12个(12X4k  最大找48k文件)   

                 Linux系统分配文件最小单位:块(大小4k)

             间接指针:指向指针块

  • 链接

   硬链接  一个文件多个名字,没有依赖性

         语法   ln  filename  [filename]

   软件链接   一个文件对应的快捷方式,多个文件

         一般使用相对路径,相对路径是相对于软链接的路径

         语法   ln  -s  filename [filename]

    区别

        1.大小

           软:原始文件路径决定

        2.链接数

           硬:初始为2,创建时链接数递增(为0时文件被删除)

           软:始终为1

        3.跨分区

           硬:不可跨分区创建

           软:可以跨分区创建

        4.目录

           硬:不可创建

           软:可以创建

        5.原始和链接文件关系

           硬:平等关系

           软:依赖原始文件

        6.删除

           硬:不受影响

           软:删除原始文件链接失效

  • 标准I/O  重定向

  标准输入和输出

        程序:指令+数据

        读入数据:Input

        输出数据:Output

  打开的文件都有一个fd filedescriptor(文件描述符)

  Linux给程序提供三种标准I/O设备

     I/O重定向改变默认位置

       语法    

           命令     操作符     文件名

    标准输入(STDIN)                0            默认接受来自键盘输入

          重定向到文件   <    

    标准输出(STDOUT)             1            默认输出到终端窗口

          重定向到文件   >覆盖      >>追加             

    错误输出(STDERR)              2            默认输出到终端窗口

          重定向到文件   2>覆盖     >>追加     

    合并标准输出和错误输出为同一个数据流进行重定向

         &> 覆盖    &>>追加

         command  /path/to/somefile.out  2&>1     (顺序很重要)          覆盖

         command  /path/to/somefile.out  2&>>1                                    追加            

   /dev/null   数据黑洞

       单行重定向     

                   每一个分别重定向一次,按一次回车重定向一次

      多行重定向(heretext就地文本)

                   把多行内容一次发送给标准输出进行重定向

                           <<终止符开始           终止符结束(开始和结束的终止符必须相同且必须是独立一行)

         tr  转换或删除字符

             tr [OPTION]... SET1 [SET2]

                     -c:取字符的补集

                     -d:删除第一字符集字符

                     -s:把连续重复的字符压缩成一个字符

                     -t:把第一字符集对应转化为第二字符集

  • 管道

       command1 |  command2 | command3...

      command1的标准输出作为command2的标准输入

   重定向到多个目标(tee)

             command1 | tee [-a ] filename | command2

     把cmd1的STDOUT保存在文件中,做为cmd2的输入     -a 追加

  • 文件查找及压缩

     文件查找工具

             locate   非实时查找(数据库查找)

                  工作机制:依赖于事先构建的索引数据库来查找,索引构建过程需要遍历整个根文件系统,极消耗资源。此命令一般用于查找变化不频繁的文件。

                  查询系统上预建的文件索引数据库

                      /var/lib/mlocate/mlocate.db

    索引构建是在系统较为空闲时自动进行(周期性任务),一般是开机时进行构建。

    管理员也可手动更新数据库:updatedb

         工作特点:

                  查找速度快

                  模糊查找

                  非实时查找

                  搜索的是文件的全路径,不仅仅是文件名

                  可能只搜索用户具备读取和执行权限的目录

          语法:

                 locate [OPTION]... PATTERN...

                          -i:不区分大小写的搜索

                          -n N:只列举前N个匹配项目

                          -r:支持使用扩展正则表达式

            find   实时查找

          工作机制:实时查找工具,通过遍历指定路径完成文件查找,默认递归搜索

           工作特点:

                   查找速度慢

                   精确查找

                   实时查找

                   可能只搜索用户具备读取和执行权限的目录

        语法:

               find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]

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

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

                    查找条件  指定查找标准,如文件大小,类型,权限等;默认查找指定路径下的所有文件

                         搜索层级

                                 -maxdepth #:最大搜索目录深度,指定目录为#级

                                 -mindepth #:最小搜索目录深度

                         文件名及inode

                                 -name“文件名称”:支持使用glob

                                         *,?,[  ],[ ^]

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

                                -inum n 按inode号查找

                                -samefile name  相同inode号的文件(硬链接文件)

                                -links n  链接数为n的文件

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

                         属主、属组

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

                               -group GROUPNAME:查找属组为指定组(GID)的文件

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

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

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

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

                         文件类型

                              -type TYPE:

                                  f:普通文件

                                 d:目录

                                 b:块设备文件

                                 c:字符设备文件

                                 s:套接字文件

                                 l:链接文件

                                p:管道文件

                            -empty  空文件或目录

                                find /data -type d -empty

                                find /data -type f -empty

                         排除目录

                              -prune

                         文件大小

                               -size [+|-]#UNIT

                                  常用单位:k,M,G,c(byte)

                              #UNIT:(#-1,#]

                                  如:6k  (5k,6k]  大于5k小于等于6k

                              -#UNIT:[0,#-1]  

                                  如:-6k  [0,5k]  大于等于0小于等于5k

                              +#UNIT:(#,∞)

                                  如:+6k  (6k,∞)  大于6k的所有

                         时间戳

                              以“天”为单位

                                    -atime  [+|-]#

                                            #:[#,#+1)

                                                3 [3,4)    3天之外(包括3天)4天之内

                                           +#:(#+1,∞]

                                               +3 (4,∞]   4天之外

                                            -#:[0,#)

                                               -3  [0,3)  3天之内不包括3天

                                    -mtime

                                    -ctime

                              以“分钟”为单位

                         权限

                              -perm[+|-]MODE

                                MODE:精确匹配

                               /MODE:或关系,三类中(u,g,o)有一个满足条件即可   + 从Centos7开始淘汰

                               -MODE:与关系,每一类对象都同时拥有指定权限

                                       1表示关注   0表示不关注

                                  例:

                                          find -perm 755    匹配权限恰好是755的文件

                                          find -perm /644   匹配当u有6权限或g有4权限或o有4权限的文件

                                          find -perm -741   匹配u有7权限并且g有4权限并且o有1权限的文件

                         条件组合

                              与:-a

                              或:-o

                              非:-not,!

                         德摩根定律

                            not a or not b=not(a and b)

                            not a and not b=not(a or b)

                          例  

                               !A or !B=!(A and B)

                                !A and !B=not(A or B)

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

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

                          -ls:显示查找到的文件的详细信息

                          -delete:删除查找到的文件

                          -fls file:查找到的文件的长格式信息保存至指定文件中

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

                          -exec COMMAND {}\;:对查找到的每个文件执行由COMMAND指定的命令

                          {}:用于引用查找到的文件名称自身

                          find:传递查找到的文件至后面指定命令时,查找到所有符合条件的文件一次性传递给后面的命令

                   参数替换xargs

                       把读入的数据分割成多个命令,用来解决参数过多导致无法执行的命令

                         find和xargs格式:find|xargs COMMAND

                           例: echo f{1..1000000}|xargs touch

       压缩、解压缩及归档工具

            Linux中的压缩解及归档工具    常见的压缩格式后缀有:.Z    .gz    .bz2    .xz    

                      compress/uncompress/zcat

                            compress [-dfvcVr] [-b maxbits] [file ...]

                                       -d:解压缩

                                       -c file:结果输出至屏幕,不删除原文件

                                       -v:显示详情

                             uncompress   解压缩

                             zcat  file.Z  > file  解压缩并且保留原文件

                      gzip/gunzip/zcat

                           gzip [OPTION]... [FILE]...

                                  -d:解压缩

                                  -c:将压缩或解压缩的文件输出至标准输出

                                  -#:1-9指定压缩比,值越大压缩比越大

                           gunzip:解压

                           zcat:不解压的前提下查看文本文件

                                   file.gz > file  解压并保存原文件

                      bzip2/bunzip2/bzcat

                           bzip2 [OPTION]... [FILE]...

                                  -k:keep,保留原文件

                                  -d:解压

                                  -#:1-9,压缩比,默认为9

                           bzcat:不显式解压缩的前提下查看文本文件内容

                      xz/unxz/xzcat

                            xz [option...]  [file...]

                                  -d:解压

                                  -k:keep,保留原文件

                                  -#:1-9,压缩比,默认为6

                             unxz:解压

                             xzcat:不显式解压的前提下查看文本文件内容

                      zip/unzip

                                    zip  file.zip  file    压缩文件

                             打包压缩

                                    zip -r /testdir/sysconfig /etc/sysconfig/    压缩目录

                                   把/etc/sysconfig/目录压缩到/testdir/sysconfig这个文件中

                             解包解压

                                    unzip sysconfig.zip

                                    cat /var/log/messages | zip messages -

                                    unzip -p message > message

                   压缩比排序:xz > bz2 > gz > zip > Z   

                   Linux中使用较多的压缩工具:xz,bz2,gz

           归档工具

                  tar工具  tar(Tape ARchive,磁带归档缩写)

                         tar [OPTION...] [FILE]...

                                   -c:打包,创建打包文件

                                   -f FILE:打包的文件名

                                   -v:显示过程

                                   -p:保留原有属性                     

                     (1)创建归档

                          tar -cpvf  /PATH/TO/SOMEFILE.tar  FILE...

                     (2)追加文件至归档

                          tar -rvf  /PATH/TO/SOMEFILE.tar FILE...

                     (3)预览归档文件中的文件列表

                          tar -tvf  /PATH/TO/SOMEFILE.tar 

                     (4)展开归档

                          tar -xvf /PATH/TO/SOMEFILE.tar     解压到当前目录下

                          tar -xvf  /PATH/TO/SOMEFILE.tar    -C  /PATH/     解压到指定路径下

                     (5)结合压缩工具实现:归档并压缩                           

                              -z:gzip,打包成.gz或.tgz后缀的

                               -j:bzip2,打包并压缩成.bz2后缀的

                               -J:xz,打包并压缩成.xz后缀

                    -T指定输入文件,-X指定包含要排除的文件列表

                             tar  zcpvf  mybackup.tgz  -T  /root/includefilelist   -X  /root/excludefilelist

                   分割大的tar大文件为多个小文件

                             split  -b  -size   -d   tar-file-name  prefix-name

                   合并

                             cat  mybackup-parts*  > mybackup.tar.gz

                  cpio   通过重定向方式将文件进行打包备份或还原恢复工具,解压以“.cpio”或者“.tar”结尾的文件

                        cpio [选项名]  >  文件名或设备名

                        cpio [选项名]  <  文件名或设备名

                                  -o:将文件复制打包成文件或者将文件输出到设备上

                                   -i:解包,将打包文件解压或将设备上备份还原到系统

                                   -t:预览,查看文件内容或输出到设备上的文件内容

                                   -v:显示打包过程中的文件名称

                                   -d:解包生成目录,在cpio还原时,自动建立的目录

                                   -c:一种较新的存储方式

                              备份

                                      find  ./etc  -print | cpio -ov > etc.cpio

                              内容预览

                                      cpio  -tv  <  etc.cpio

                              解包文件

                                      cpio  -idv  <  etc.cpio