初识Linux文件系统

一.文件系统结构


Linux系统层次结构图

/: 根目录,Linux文件系统顶层目录。

/boot: 引导文件存放目录,内核文件、引导加载器都存放于此目录

/bin: 所有用户使用的基本命令;不能关联至独立分区,OS启动即会用到的程序,存放重要命令

/sbin: 管理类的基本命令;不能关联至独立分区,OS启动即会用到的程序,存放重要性次一级的命令

/lib: 启动时程序依赖的基本共享库文件以及内核模块文件(/lib64用于64位系统)

/etc: 配置文件目录(初始化系统经常访问的配置文件都在这)

/home:普通用户家目录

/root: 管理员的家目录

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

/mnt:临时文件系统挂载点

/dev: 设备文件及特殊文件存储位置

/opt: 第三方应用程序的安装位置

/srv:系统上运行的服务用到的数据

/tmp: 临时文件存储位置

/usr: 

/var: 

/sys:用于输出当前系统上硬件设备相关信息虚拟文件系统

/selinux: security enhanced Linux,selinux相关的安全策略等信息的存储位置

注:以“.”开头的为隐藏文件


二.文件类型

以“ls -l”查看文件属性时,最左边第一个首字符用于表示文件类型

- :普通文件

d :目录文件

l:链接文件

c:字符设备

p:管道文件pipe

s: 套接字文件socke



三.绝对路径和相对路径

绝对路径:

以正斜杠开始

完整的文件的位置路径

可用于任何想指定一个文件名的时候

相对路径:

不以斜线开始

指定相对于当前工作目录或某目录的位置

可以作为一个简短的形式指定一个文件名


基名:basename,只取文件名而不要路径

目录名:dirname,只取路径,不要文件名



四.文件系统基本指令

1.显示当前工作目录(printing working directory):

pwd

-P 显示真实物理路径

-L 显示链接路径(默认)

补充:OLDPWD:上一次目录路径


2.更改目录( change directory)

cd

-P 切换至物理路径,而非软链接目录

切换至父目录: cd ..

切换至当前用户主目录: cd

切换至以前的工作目录: cd -


3.列出目录内容

ls [options] [files_or_dirs]

-a 包含隐藏文件

-l 显示额外的信息

-R 目录递归

-ld 目录和符号链接信息

-1 文件分行显示

-S 按从大到小排序

-t 按mtime排序

-u 配合-t选项,显示并按atime从新到旧排序

-U 按目录存放顺序显示

-X 按文件后缀排序


4. 查看文件状态

 stat

**文件相关信息:metadata(元数据), data(数据)

每个文件有三个时间戳:

access time 访问时间,atime,读取文件内容

modify time 修改时间,mtime,改变文件内容(数据)

change time 改变时间,ctime,元数据发生改变(文件的内容没有修改、修改的是属性,类似于

修改权限)

mtime属于元数据ctime的属性。

但是修改ctime不一定会修改mtime时间。

备注:元数据可理解为Windows系统中文件-右键-属性里的各项信息,数据为文件本身


5.确定文件内容

file [options] ...

-b 列出文件辨识结果时,不显示文件名称

-f filelist 列出文件filelist中文件名的文件类型

-F 使用指定分隔符号替换输出文件名后默认的”:”分隔符

-L 查看对应软链接对应文件的文件类型

--help 显示命令在线帮助


6.创建空文件和刷新时间

touch [OPTION]... FILE...

-a 仅改变 atime和ctime

-m 仅改变 mtime和ctime

-t [[CC]YY]MMDDhhmm[.ss] 指定atime和mtime的时间戳

-c 如果文件不存在,则不予创建

注:touch 命令用来刷新文件的时间只需要把文件再touch一遍,内容不会消失但时间会刷新


7.复制文件和目录

cp [OPTION]... [-T] SOURCE DEST

cp [OPTION]... SOURCE... DIRECTORY

cp [OPTION]... -t DIRECTORY SOURCE...

-i 如果目标已存在,覆盖前提示是否覆盖

-n 不覆盖,注意两者顺序

-r, -R 递归复制目录及内部的所有内容

-a 归档,常用于备份功能

-b 目标存在,覆盖前先备份,默认形式为 filename~ ,只保留最近的一个备份

-d  不复制原文件,只复制链接名

-u --update 只复制源比目标更新文件或目标不存在的文件


8.移动和重命名文件

mv [OPTION]... [-T] SOURCE DEST

mv [OPTION]... SOURCE... DIRECTORY

mv [OPTION]... -t DIRECTORY SOURCE...

-i 交互式

-f 强制

-b 目标存在,覆盖前先备份

备注:

mv 命令可以实现文件或目录的移动和改名

同一分区移动数据,速度很快:数据位置没有变化

不同分区移动数据,速度相对慢:数据位置发生了变化

mv原理:其实是限制性了cp 拷贝到了目标路径、然后再执行 rm 删除源文件

利用rename 可以批量修改文件名

rename [options] ...

例:

#为所有的conf文件加上.bak后缀:

rename 'conf' 'conf.bak' f*

#去掉所有的bak后缀:

rename '.bak' '' *.bak

9.删除文件

rm [OPTION] ... FILE...

-i 交互式

-f 强制删除

-r 递归

注:使用 rm 命令可以删除文件,挂载点目录是不能够被删除的

        使用了特殊符号作为文件名的文件需要输入绝对路径或转义符 进行删除

        通过 lsof 命令可以查看文件是否被打开。而没有被打开的话就不会有任何提示信息。(删除            文件时发现无法删除,用lsof查看,再找到相关进程kill-9 关闭进程后删除)


安全要求较高的场景下,可以使用shred 安全删除文件

shred [OPTION]... FILE...

-z 最后一次覆盖添加0,以隐藏覆盖操作

-v 能够显示操作进度

-u 覆盖后截断并删除文件

-n # 指定覆盖文件内容的次数(默认值是3次)

10.目录操作

创建目录 

mkdir

-p: 存在于不报错,且可自动创建所需的各目录

-v: 显示详细信息

-m MODE: 创建目录时直接指定权限

删除空目录

rmdir

-p 递归删除父空目录

-v 显示详细信息

注意:rmdir只能删除空目录,如果想删除非空目录,可以使用rm -r 命令,递归删除目录树

显示目录树

tree

-d: 只显示目录

-L level:指定显示的层级数目

-P pattern: 只显示由指定wild-card pattern匹配到的路径

注:centos最小化安装不带tree命令工具,需额外安装

五.文件元数据和节点表结构


1.inode表结构

每个文件的属性信息,比如:文件的大小,时间,类型等,称为文件的元数据(meta data)。这此元数

据是存放在node(index node)表中。node 表中有很多条记录组成,第一条记录对应的存放了一个文

件的元数据信息

第一个node表记录对应的保存了以下信息:

inode number 节点号

文件类型

权限

UID

GID

链接数(指向这个文件名路径名称个数)

该文件的大小和不同的时间戳

指向磁盘上文件的数据块指针

有关文件的其他数据

2.目录与inode的关系

目录是个特殊文件,目录文件的内容保存了此目录中文件的列表及inode number对应关系

文件引用一个是 inode号

人是通过文件名来引用一个文件

一个目录是目录下的文件名和文件inode号之间的映射

节点编号是由各自的分区进行管理的。

所谓的文件夹里面存的数据,是该文件夹中的文件列表和文件的编号。

删除文件其实只是删除的文件节点编号

3.cp与inode的关系

cp 命令:

分配一个空闲的inode号,在inode表中生成新条目

在目录中创建一个目录项,将名称与inode编号关联

拷贝数据生成新的文件

4.rm与inode的关系

rm 命令:

链接数递减,从而释放的inode号可以被重用

把数据块放在空闲列表中

删除目录项

数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖

5.mv与inode的关系

如果mv命令的目标和源在相同的文件系统,作为mv 命令

用新的文件名创建对应新的目录项

删除旧目录条目对应的旧的文件名

不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动!

如果目标和源在一个不同的文件系统, mv相当于先将旧文件拷贝CP过到新文件路径、再将旧文件删除rm

重要:当inode编号用光时,文件将无法创建,即使硬盘内仍有空间,如下面例子


删除大文件:  cat /dev/null > /var/log/huge.log         

注释:假如后者是个大文且服务正在使用此日志文件,那么把空值覆盖写入后者,直接释放掉空间,不用重启服务



六.硬链接

硬链接本质上就给一个文件起一个新的名称,实质是同一个文件

硬链接特性

创建硬链接会在对应的目录中增加额外的记录项以引用文件

对应于同一文件系统上一个物理文件

每个目录引用相同的inode号

创建时链接数递增

删除文件时:rm命令递减计数的链接,文件要存在,至少有一个链接数,当链接数为零时,该文

件被删除

不能跨越驱动器或分区

不支持对目录创建硬链接

硬链接的本质是只能够在同一个分区上创建,不能够跨分区。

用法:ln filename [linkname ]



七.符号 symbolic (或软 soft)链接

一个符号链接指向另一个文件,就像 windows 中快捷方式,软链接文件和原文件本质上不是同一个文件

软链接特点

一个符号链接的内容是它引用文件的名称

可以对目录创建软链接

可以跨分区的文件实现

指向的是另一个文件的路径;其大小为指向的路径字符串的长度;不增加或减少目标文件inode的

引用计数

软链接如果使用相对路径,是相对于原文件的路径,而非相对于当前目录

创建一个软连接和源文件的节点编号不一样,所以它们并不是同一个文件。

软连接的大小是由连接路径来的,和源文件大小并没关系。

用法:ln -s filename [linkname]


八.硬链接和软链接区别总结

1. 本质:

硬链接:本质是同一个文件

软链接:本质不是同一个文件

2. 跨设备

硬链接:不支持

软链接:支持

3. inode

硬链接:相同

软链接:不同

4. 链接数

硬链接:创建新的硬链接,链接数会增加,删除硬链接,链接数减少

软链接:创建或删除,链接数不会变化

5. 文件夹

硬链接:不支持

软链接:支持

6. 相对路径

硬链接:原始文件相对路径是相对于当前工作目录

软链接:原始文件的相对路径是相对于链接文件的相对路径

7. 删除源文件

硬链接:只是链接数减一,但链接文件的访问不受影响

软链接:链接文件将无法访问

8. 文件类型

硬链接:和源文件相同

软链接:链接文件,和源文件无关

你可能感兴趣的:(初识Linux文件系统)