一.文件系统结构
/: 根目录,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] <filename>...
-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] <expression> <replacement> <file> ...
例:
#为所有的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. 文件类型
硬链接:和源文件相同
软链接:链接文件,和源文件无关