Linux (二): 文件系统介绍、文件处理与权限操作

目录

四、文件系统

分区与文件系统

组成

文件读取

磁盘碎片

block

inode

目录

日志

挂载

目录配置

五、文件

文件属性

文件与目录的基本操作

1. ls

2. cd

3. mkdir

4. rmdir

5. touch

6. cp

7. rm

8. mv

修改权限

默认权限

目录权限

链接

1. 实体链接(硬连接)

2. 符号链接(软连接)

获取文件内容

1. cat

2. tac

3. more

4. less

5. head

6. tail

7. od


四、文件系统

分区与文件系统

对分区进行格式化是为了在分区上建立文件系统。一个分区通常只能格式化为一个文件系统,但是磁盘阵列等技术可以将一个分区格式化为多个文件系统。

组成

最主要的几个组成部分如下:

  • inode : 一个文件占用一个 inode,记录文件的属性,同时记录此文件的内容所在的 block 编号;

  • block : 记录文件的内容,文件太大会占用多个 block 。

  • superblock : 记录文件系统的整体信息,包括 inode 和 block 的总量、剩余量、使用量、以及文件系统的格式与相关信息等;

  • block bitmap : 记录 block 是否被使用的位域。

  

文件读取

对于 Ext2 文件系统,当要读取一个文件的内容时,先在 inode 中查找文件内容所在的所有 block ,然后把所有 block 的内容读出来。

 

 而对于 FAT 文件系统,它没有 inode ,每个 block 中存储着下一个 block 的编号。

  

磁盘碎片

指一个文件内容所在的 block 过于分散。

block

在 Ext2 文件系统中所支持的 block 大小有 1K、2K 及 4K 三种,不同的大小限制了单个文件系统的最大大小。

大小1KB2KB4KB
最大单一文件16GB256GB2TB
最大文件系统2TB8TB16TB

一个 block 只能被一个文件所使用的,未使用的部分直接浪费了。因此如果需要存储大量的小文件,最好选用较小的 block。

inode

inode 具体包含以下信息:

  • 权限( read / write / excute );

  • 拥有者与群主( owner / group );

  • 容量;

  • 建立或状态改变的时间( ctime );

  • 最近一次的读取时间( atime );

  • 最近修改的时间( mtime );

  • 定义文件特性的旗标( flag ),如 SetUID... ;

  • 该文件真正内容的指向( pointer )。

inode 具有以下特点:

  • 每个 inode 大小均固定位 128 bytes(新的 ext4 与 xfs 可设定到 256 bytes);

  • 每个文件都仅会占用一个 inode。

inode 中记录了文件内容所在的 block 编号,但是每个 block 非常小,一个大文件随便都要几十万的 block。而一个 inode 大小有限,无法直接引用这么多 block 编号,因此引入了间接、双间接、三间接引用。间接引用是指,让inode 记录的引用 block 块记录引用信息。

  

目录

建立一个目录时,会分配一个 inode 与至少一个 block。block 记录的内容是目录下所有文件的 inode 编号以及文件名。

文件的 inode 本身不记录文件名,记录在目录中,因此新增、删除、更改文件名操作与目录的 x 权限有关。

日志

如果突然断电,那么文件系统会发生错误,如断电前只修改了 block bitmap,而还没有将数据真正写入 block 中。

ext3/ext4 文件系统引入了日志功能,可以利用日志来修复文件系统。

挂载

挂载利用目录作为文件系统的进入点,即进入目录之后就可以读取文件系统的数据。

目录配置

为了使不同 linux 发行版本的目录结构保持一致性,Filesystem Hierarchy Standard(FHS)规定了 Linux 的目录结构。基础目录如下:

  • / (root, 根目录)

  • /usr (unix software resource): 所有系统默认软件都会安装到这个目录

  • /var (variable): 存放系统或程序运行过程中的数据文件

  

五、文件

文件属性

用户分为三种:文件拥有者、群组以及其他人,不同的用户有不同的文件权限。

使用 ls 查看一个文件时,会显示一个文件的信息,例如:

drwxr-xr-x. 3 root root 17 May 6 00:14 .config

  • drwxr-xr-x : 文件类型以及权限,第 1 位为文件类型字段,后 9 位为文件权限字段;

  • 3 : 链接数;

  • root : 文件拥有者;

  • root : 所属群组;

  • 17 : 文件大小;

  • May 6 00:14 : 文件最后被修改的时间;

  • .config : 文件名。

常见的文件类型及其含义有:

  • d : 目录;

  • - : 文件;

  • l : 链接文件。

9 位的文字权限字段中,每 3 个为一组,每一组分别代表对文件拥有者、所属群组以及其他人的文件权限。一组权限中的 3 位分别为 r、w、x 权限,表示可读、可写、可执行。

文件时间有以下三种:

  • modification time(mtime): 文件的内容更新就会更新;

  • status time(ctime): 文件的状态(权限、属性)更新就会更新;

  • access time(atime): 读取文件时就会更新。

文件与目录的基本操作

1. ls

[列出当前工作文件或者目录的信息,目录的信息就是其中包含的文件](Linux ls命令:显示指定工作目录下的内容 - Linux命令 - C语言网)

## ls [-aAdfFhilnrRSt] file | dir
-a : 列出全部文件
-d : 仅列出目录本身
-l : 以长数据串行列出,包含文件的属性与权限等数据

2. cd

[更换当前目录](Linux cd命令:切换工作目录 - Linux命令 - C语言网)

cd [相对路径或绝对路径]

3. mkdir

[创建目录](Linux mkdir命令:创建目录 - Linux命令 - C语言网)

## mkdir [-mp] 目录名称
-m : 配置目录权限
-p : 递归创建目录

4. rmdir

删除目录,目录必须为空

## rkdir [-p] 目录名称
-p : 递归删除目录

5. touch

[更新文件时间或者建立新文件](Linux touch命令:修改文件的时间 - Linux命令 - C语言网)

## touch [-acmdt] filename
-a : 更新 actime
-c : 更新 ctime ,若文件不存在则不建立新文件
-m : 更新 mtime 
-d : 后接当前日期或更新日期,可使用 --date="日期或时间"
-t : 后接更新日期而不使用当前日期,格式为 [YYYYMMDDhhmm]

6. cp

[复制文件,若源文件有两个以上,则目的文件一定要是目录才行](Linux cp命令:复制文件或目录 - Linux命令 - C语言网)

## cp [-adfilprsu] source destination
-a : 相当于 -dr --preserve=all
-d : 若来源文件为链接文件,则复制链接文件属性而非文件本身
-i : 若目标文件已存在,则覆盖前会先询问
-p : 连同文件的属性一起复制过去
-r : 递归持续复制
-u : desition 比 source 旧才更新 desition,或 desition 不存在的情况下才复制

--preserve=all : 除了 -p 的权限相关参数外,还加入 SELinux 的属性、links、xattr 等

7. rm

[删除某个目录及其下的所有文件及子目录,而对于链接文件,只是断开了链接,原文件内容保持不变](Linux rm命令:删除文件或目录 - Linux命令 - C语言网)

## rm [-fir] 文件或目录
-r : 递归删除

8. mv

[将文件或目录改名,或移动文件](Linux mv命令:移动或重命名文件或目录 - Linux命令 - C语言网)

## mv [-fiu] source destination
## mv [options] source1 source2 source3 .... directory
-f : force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖

修改权限

[chmod 管理文件或目录的权限](Linux chmod命令:权限管理 - Linux命令 - C语言网)

可以将一组权限用数字表示,此时一组权限的 3 个位当做二进制数字的位,从左到右每个位的1权值为 4、2、1,即每个权限(读、写、执行)对应的数字权值为 r : 4、w : 2、x : 1。

## chmod [-R] xyz dirname/filename

示例:将 .bashrc 文件的权限修改为 -rwxr-xr--。

## chmod 745 .bashrc
## chmod u=rwx,g=rx,o=r .bashrc

也可以使用符号来限定权限

## chmod [ugoa] [+-=] [rwx] dirname/filename
- u : 拥有者
- g : 所属群组
- o : 其他人
- a : 所有人
- - : 移除权限
- + : 添加权限
- = : 设定权限

// 为 .bashrc 文件的所有用户添加写权限
## chmod a+w .bashrc
// 为 .bashrc 文件的所有用户移除可执行权限
## chmod a-x .bashrc

默认权限

  • 文件默认权限:文件默认没有可执行权限,因此为 666,即 -rw-rw-rw;

  • 目录默认权限:目录必须要能够进入,也就是必须有可执行权限,因此为 777,即 drwxrwxrwx。

可以通过 umask 设置或查看文件的默认权限,通常以掩码的形式来表示,例如 002 表示其他用户的权限去除了一个 2 的权限,也就是写权限,因此建立新文件时默认的权限是 -rw-rw-r--

目录权限

文件名不是存储在一个文件的内容中,而是存储在一个文件的所在目录中。因此拥有文件的 w 权限并不能对文件名进行修改。

目录存储文件列表,一个目录的权限也就是对其文件列表的权限。

因此,目录的 r 权限表示可以读取文件列表;w 权限可以修改(添加、删除、改文件名)文件列表;x 权限可以让该目录成为工作目录,x 权限是 r 和 w 权限的基础,如果不能使一个目录成为工作目录,也就没办法读取文件列表以及对文件列表进行修改了。

链接

## ln [-sf] source_filename dist_filename
-s : 默认是 hard link,加 -s 为 symbolic link
-f : 如果目标文件存在时,则先删除文件

  

1. 实体链接(硬连接)

  • 通过索引节点号来进行连接;

  • 允许一个文件拥有多个有效路径名(只有当最后一个连接失效,文件数据块及目录的连接才会被释放)。

    在目录下创建一个条目,记录着文件名与 inode 编号,该编号就是源文件的 inode;

    删除任意一个条目,文件还是存在,只要引用数量不为 0;

    限制:不能跨越文件系统,不能对目录进行链接。

## ln /etc/a .
## li -i /etc/a a 
34474855 -rw-r--r--. 2 root root 451 Jun 10 2014 a
34474855 -rw-r--r--. 2 root root 451 Jun 10 2014 /etc/a

2. 符号链接(软连接)

    符号链接文件保存着源文件所在的绝对路径,在读取时会定位到源文件上(类似 Windows 的快捷方式);当源文件被删除了,链接文件就打不开了。

## ll -i /etc/crontab /root/crontab2
34474855 -rw-r--r--. 2 root root 451 Jun 10 2014 /etc/crontab
53745909 lrwxrwxrwx. 1 root root 12 Jun 23 22:31 /root/crontab2 -> /etc/crontab

获取文件内容

1. cat

[取得文件内容并输出到标准输出,同时还可以用于合并文件](Linux cat命令:连接文件并打印到标准输出设备上 - Linux命令 - C语言网)

## cat [-AbEnTv] filename
-n : 打印出行号,连空白行也会有行号,但 -b 不会

2. tac

是 cat 的反向操作,从最后一行开始打印

3. more

[和 cat 不同的是,它可以一页一页的查看文件内容,适合大文档的查看](Linux more命令:显示文本文件内容 - Linux命令 - C语言网)

4. less

[和 more 类似,但是多了一个向前翻页的功能,用于分页显示文件或其他输出](Linux less命令:分页显示文件内容 - Linux命令 - C语言网)

5. head

[查看文件前几行](Linux head命令:查看文件前几行 - Linux命令 - C语言网)

## head [-n number] filename
-n : 后面接数字,代表显示几行

6. tail

[head 的反向操作,查看文件后几行](Linux tail命令:查看文件后几行 - Linux命令 - C语言网)

7. od

以字符或者十六进制的形式显示二进制文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值