Linux 文件系统

文件系统

文件目录

文件权限

属性:文件类型 + 文件权限 + 链接数 + 文件所属用户 + 文件所属组 + 文件大小 + 文件修改日期 + 文件名

  • 文件类型:

    • 常规文件:[采用 [-] 表示]{.red}(文本文件、二进制文件、数据文件)
    • 文件目录:[采用 [d] 表示]{.red}
    • 链接文件:[采用 [l] 表示]{.red}(软链接文件)
    • 设备文件:[块设备文件采用 [b] 表示]{.red}(磁盘);[字符设备文件采用 [c] 表示]{.red}(鼠标、键盘)
    • Sockets 文件:[采用 [s] 表示]{.red}(用于网络中客户端与服务器的通信的文件)
    • FIFO 文件(pipe 文件):[采用 [p] 表示]{.red}(主要目的用于解决多个进程同时读写一个文件造成的错误问题)
  • 文件权限:[文件所属用户权限 + 文件所属组权限 + 其他用户组权限]{.red}

    注:系统管理员可以 [无视任何权限]{.red} 使用文件

  • 链接数

    • inode 结点:保存文件存放的实际数据
    • 链接:每个文件名实际相当于指针,链接到 inode 结点
    • 链接数:多个不同的文件名可以同时链接到相同的 inode 结点( [链接分为软链接和硬链接]{.red})
  • 文件所属用户:文件 ++当前++ 归属的用户

    [注:文件当前归属的用户不一定就是文件的创建者]{.red},可以通过修改拥有者方式改变

  • 文件所属组:文件 ++当前++ 归属的用户组

    [注:文件当前归属的用户组不一定就是文件拥有者所在的组]{.red},可以通过修改用户组的方式改变

  • 文件大小:文件当前大小,采用 ++字节(B)++作为单位

  • 文件修改日期:文件最近 ++被修改++ 的日期而不是访问日期

  • 文件名:文件名前存在 [ . ] 代表该文件为隐藏文件

  • 细节:

    • 文件扩展名:[Linux 扩展名没有实际的作用,仅仅起提示该文件内容的功能]{.red};文件如何被执行取决于 [文件的内容和文件是否可被执行]{.red},和扩展名没有关系
    • 目录属性:文件属性和目录属性基本一致,除了权限的含义有所区别之外

权限

  • 文件

    • 基本权限:[① 可读权限:采用 [r] 表示 / 采用数字 4 表示 ② 可修改权限:采用 [w] 表示 / 采用数字 2 表示 ③ 可执行权限:采用 [x] 表示 / 采用数字 1 表示]{.red}

      • 可修改权限:用户可以修改、新增文件的内容,但是 [不可以删除文件]{.red}

      • 文件权限在展示的时候采用字符的形式表示,修改文件权限的时候使用数字进行修改比较方便;每个用户级别都具有这三种权限

        问题:为什么要将三种权限采用 4、2、1 三种数字设计而不是其他的数字?(想想就行)

    • 默认权限:[默认权限 = 系统默认权限 - umask]{.red}

      • 系统默认权限:默认文件权限为 [666(-rw-rw-rw)]{.red},默认目录权限为 [777(drwxrwxrwx)]{.red}

      • 命令:[umask 值是系统默认权限需要减去的值]{.red}

        [umask [-S]]{.green}:查看需要减去权限值

        # 采用数字表示的权限值:0022
        [root@localhost ~]:umask
        # 采用字符表示的权限值:u=rwx, g=rx, o=rx
        [root@localhost ~]:umask -S

        [umask  权限值]{.green}:修改默认减去的权限值

        [root@localhost ~]:umask 002
      • 细节:

        • 命令 umask 得到的权限值为 4 位,第一位是特殊权限用的,仅看后面三位即可
        • [系统管理员默认的 umask 值为 022,普通用户默认的 umask 值为 002]{.red}
    • 特殊权限:① SUID ② SGID ③ SBIT([前两者采用 [s] 表示,后者采用 [t] 表示]{.red})

    • 命令:[修改文件归属的命令仅能够由系统管理员执行]{.red}

      [chown [-R]  用户名 文件名/目录名]{.green}:修改文件所属用户

      # -R 可以递归修改目录中的所有子文件权限
      [root@localhost ~]:chown username filename/directoryname

      [chgrp [-R] 用户名 文件名/目录名]{.green}:修改文件所属用户组

      # -R 可以递归修改目录中的所有子文件权限
      [root@localhost ~]:chgrp groupname filename/directorynam

      [chmod  [-R] 权限值 文件名/目录名]{.green}:修改文件的权限([每个用户仅可以修改属于自己的文件的权限]{.red})

      # -R 可以递归修改目录中的所有子文件权限
      # x:表示用户的权限值,y:表示用户组的权限值,z:表示其他用户组的权限值
      [root@localhost ~]:chmod xyz filename/directoryname
      # 表示文件拥有者具有所有权限、表示文件所属组具有所有权限、表示其他组仅具有读和执行的权限
      [root@localhost ~]:chmod 775 filename/directoryname
  • 目录

    • 前提:目录权限的含义和文件的有部分不同,其余命令相关的内容完全一致

    • 可读权限:

      • 定义:[用户仅可以查看目录中的所有文件名]{.red}

      • 细节:[用户仅具有可读权限 不代表可以进入该目录]{.red}

        # 可以使用 ls 命令查看目录中的文件;不能使用 cd 进入该目录
        # 仅能够查看文件名,不能够查看详细信息
        [root@localhost ~]:ls directoryname
        # 权限不足
        [root@localhost ~]:cd directoryname
    • 可修改权限:

      • 定义:[用户可以在目录中新增文件、删除文件、移动文件等一系列操作]{.red}
      • 细节:仅具有可修改权限也是不可以进入该目录的
    • 可“执行”权限(可进入权限)

      • 定义:[用户可以进入该目录进行工作]{.red}
      • 细节:仅具有可进入的权限是可以进入目录的,但是 [TAB] 键不会自动补全目录名

文件管理

文件压缩

  • 前提:[压缩和打包是两种完全不同的技术]{.red}
    • 压缩:不同于 Windows 下的压缩技术可以同时针对多个文件进行压缩,Linux 的压缩技术仅能够 [针对单个文件进行压缩]{.red} 不可以对目录压缩
    • 打包:因为 Linux 压缩技术的局限性,所以发明打包技术,可以将 [多个文件打包在一起形成单个文件]{.red},然后对该文件进行压缩

压缩

  • 原理:

    • 字符转换成字节进行存储的时候可能存在大量无法提供信息的 0
    • 压缩技术则是将这些没有被使用的空间丢弃,从而减小文件大小
  • 扩展名:*.Z( compress 压缩程序)、.zip( zip 压缩程序)、.gz( gzip 压缩程序)、.bz2 ( bzip2 压缩程序)、.xz ( xz 压缩程序)

    注:压缩文件扩展名通常用于提示该文件是采用哪种命令压缩的,方便对应解压

  • 命令

    • compress 程序压缩:已经基本被废弃不会使用

    • zip 程序压缩:[zip  [-r] 压缩文件名 文件]{.green}(不常使用)

      注:[zip 程序可以采用选项 [-r] 递归压缩文件,即压缩目录]{.red}

      [root@localhost ~]:zip filename
      [root@localhost ~]:zip -d directoryname
      # 解压文件
      [root@localhost ~]:unzip zipname
    • gzip 压缩程序:[gzip [-dv] 文件]{.green}

      [gzip 文件]{.green}:没有任何选项就是默认压缩文件

      (1) [gzip 默认建立压缩文件名称不需要手动指定]{.red}

      (2) 压缩不会保留原始文件

      [root@localhost ~]:gzip filename

      [gzip -d 压缩文件名 文件]{.green}:没有任何选项就是默认压缩文件

      (1) gzip 可以解压 compress、zip 程序压缩的文件

      (2) gzip 可以通过添加选项解压文件,也可以直接使用命令 gunzip 解压文件

      # gzip -d 解压文件
      [root@localhost ~]:gzip -d zipname
      # gunzip 解压文件
      [root@localhost ~]:gunzip zipname

      [gzip -v 压缩文件名 文件]{.green}:压缩或者解压时显示详细信息

      [root@localhost ~]:gzip -v/-dv filename/zipname

      其余命令

      # 将压缩文件中的内容输出到终端
      [root@localhost ~]:zcat zipname
      # 其余形式的输出
      [root@localhost ~]:zmore/zless/zgrep zipname
    • bzip2 压缩程序:[bzip2 [-dvkzv] 文件]{.green}

      [bzip2 -z 文件]{.green}:压缩文件,没有任何选项默认也是压缩文件

      # 不添加 -z 选项也是压缩文件
      [root@localhost ~]:bzip2 -z filename

      [bzip2 -k 文件]{.green}:压缩的时候保留原始文件

      [root@localhost ~]:bzip2 -zk filename

      其余选项和命令 gzip 完全一致

    • xz 压缩程序:[xz [-dlvkv] 文件]{.green}

      [xz -l  压缩文件]{.green}:列出压缩文件中的所有文件名称

      [root@localhost ~]:xz -l zipname

      其余命令和选项和 gzip、bzip2 一致

打包

# 进行打包
tar -c filename
# 显示打包过程详细信息
tar -v filename
# 指定打包后的文件名
tar -f filename
# 打包的同时压缩
tar -z filename
# 解压
tar -x zipname
# 对应 gzip unzip
tar -zcvf targzname filename1 filename2
# 打包压缩文件夹
tar -zcvf targzname directory
# 解压
tar -zxvf targzname -C pathname
Author: Fuyusakaiori
Link: http://example.com/2021/09/11/linux/Linux 文件系统/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.