文件管理
1、文件系统目录结构
1.1 文件系统的目录结构
- 文件和目录被组织成一个单根倒置树结构
- 文件系统从根目录下开始,用“/”表示
- 根文件系统(rootfs):root filesystem
- 标准Linux文件系统(如:ext4),文件名称大小写敏感,例如:MAIL, Mail, mail, mAiL
- 以 . 开头的文件为隐藏文件
- 路径分隔的 /
- 文件名最长255个字节
- 包括路径在内文件名称最长4095个字节
蓝色—>目录 绿色—>可执行文件 红色—>压缩文件
浅蓝色-->链接文件 灰色-->其他文件
除了斜杠和NUL,所有字符都有效.但使用特殊字符的目录名和文件不推荐使用,有些字符需要用引 号来引用
每个文件都有两类相关数据:
元数据:metadata,即属性, <br /> 数据:data,即文件内容1.2 常见的文件系统目录功能
1.3Linux下的文件类型及目录
1.31文件类型
- -:普通文件
- d: 目录文件
- b: 块设备
- c: 字符设备
- l: 符号链接文件
- p: 管道文件pipe
-
2.文件操作命令
2.1 显示当前工作目录
2.2 绝对和相对路径
绝对路径
以正斜杠/ 即根目录开始 <br /> 完整的文件的位置路径 <br /> 可用于任何想指定一个文件名的时候相对路径名
不以斜线开始 <br /> 指相对于当前工作目录的路径或某目录的位置 <br /> 可以作为一个简短的形式指定一个文件名基名:basename 只取文件名而不要路径
-
2.3更改目录
cd命令
改变目录
- 使用绝对或相对路径:
cd /home/fang
cd home/fang - 切换至父目录: cd ..
- 切换至当前用户主目录: cd
- 切换至以前的工作目录: cd -
- 选项:-P
相关的环境变量:
PWD:当前目录路径
OLDPWD:上一次目录路径2.4列出目录内容
ls 命令
可以列出当前目录的内容或指定目录
常见选项
- ls -a 包含隐藏文件
ls -d /etc/.
ls -d /etc/.[^.] 目录下所有隐藏文件
ls -I “[^.]*” -a
l .
- ls -l 显示额外的信息
- ls -R 目录递归
ls -lR /etc/ | grep “^-“ | wc -l 统计目录所有的文件
- ls -ld 目录和符号链接信息
ls -ld /etc 查看目录信息
- ls -1 文件分行显示
- ls –S 按从大到小排序
ls -Sr 按从小到大排序
- ls –t 按mtime排序
- ls –u 配合-t选项,显示并按atime从新到旧排序
- ls –U 按目录存放顺序显示
-
2.5 查看文件状态 stat
文件相关信息:metadata(元数据) data(数据)
一个是存放文件的元数据<br /> 一个是真正存放文件数据的本身每个文件有三个时间戳
access time 访问时间,atime,读取文件内容
modify time 修改时间,mtime,改变文件内容(数据) change time 改变时间,
ctime,元数据发生改变(文件的内容没有修改、修改的是属性,类似于 修改权限)
mtime属于元数据ctime的属性。
但是修改ctime不一定会修改mtime时间。
2.6确认文件内容
文件可以包含多种类型的数据,使用file命令检查文件的类型
常用选项:
- -b 列出文件辨识结果时,不显示文件名称
- -f filelist 列出文件filelist中文件名的文件类型
- -F 使用指定分隔符号替换输出文件名后默认的”:”分隔符
- -L 查看对应软链接对应文件的文件类型
2.7文件通配符
```
- 匹配零个或多个字符 但不匹配”.”开头的文件,即隐藏文件 ? 匹配任何单个字符 ~ 当前用户家目录 ~han 当前han家目录 ~+和 . 当前工作目录 ~- 前一个工作目录 [0-9] 匹配数字范围,表示为0到9的任意一个 [a-z] 字母 [A-Z] 字母 [han] 匹配列表中的任何一个字符 [^han] 匹配列表中的所以字符以外的字符 [:digit:]:任意数字,相当于0-9 [:lower:]:任意小写字母,表示 a-z [:upper:]: 任意大写字母,表示 A-Z
[:alnum:]:任意数字或字母 [:blank:]:水平空白字符 [:space:]:水平或垂直空白字符 [:punct:]:标点符号 [:print:]:可打印字符 [:cntrl:]:控制(非打印)字符 [:graph:]:图形字符 [:xdigit:]:十六进制字符
<a name="XSAk8"></a>
### 2.8创建空文件和刷新时间
touch 命令可以用来创建空文件或刷新文件的时间<br />选项说明:
- -a 仅改变 atime和ctime
- -m 仅改变 mtime和ctime
- -t [[CC]YY]MMDDhhmm[.ss] 指定atime和mtime的时间戳
- -c 如果文件不存在,则不予创建
<a name="mz8F3"></a>
### 2.9复制文件或目录
利用 cp(copy)命令可以实现文件或目录的复制<br />常用选项
- -i 如果目标已存在,覆盖前提示是否覆盖
- -n 不覆盖,注意两者顺序
- -r, -R 递归复制目录及内部的所有内容
- -a 归档,相当于-dR --preserv=all,常用于备份功能
- -d --no-dereference --preserv=links 不复制原文件,只复制链接名
- -p 等同--preserv=mode,ownership,timestamp
- -v --verbose -u --update 只复制源比目标更新文件或目标不存在的文件
- -b 目标存在,覆盖前先备份,默认形式为 filename~ ,只保留最近的一个备份
- --backup=numbered 目标存在,覆盖前先备份加数字后缀,形式为 filename.~#~ ,可以保留多个版本
<a name="FbRDk"></a>
### 2.10移动和重命名文件
mv 命令可以实现文件或目录的移动和改名 <br />同一分区移动数据,速度很快:数据位置没有变化 <br />不同分区移动数据,速度相对慢:数据位置发生了变化<br />常用选项:
- -i 交互式
- -f 强制 -
- -b 目标存在,覆盖前先备份
**利用rename 可以批量修改文件名**
为所有的conf文件加上.bak后缀:
rename ‘conf’ ‘conf.bak’ f*
去掉所有的bak后缀:
rename ‘.bak’ ‘’ *.bak 复制代码
<a name="jy5I0"></a>
### 2.11 删除文件
使用 rm 命令可以删除文件,挂载点目录是不能够被删除的<br />常用选项: <br />-i 交互式 <br />-f 强制删除 -<br />r 递归 --no-preserve-root 删除/<br />删除特殊文件:
将名为 “/data/-f” 的文件删除
[root@centos8 data]#rm -f -f #此方式错误 [root@centos8 data]#rm — -f [root@centos8 data]#rm ./-f [root@centos8 data]#rm /data/-f
[root@centos8 data]#touch ‘~’ [root@centos8 data]#ls ‘~’ [root@centos8 data]#rm -f ~ rm: cannot remove ‘/root’: Is a directory [root@centos8 data]#rm — ~ rm: cannot remove ‘/root’: Is a directory [root@centos8 data]#rm -f ./~ 复制代码 ```
3、目录操作
3.1显示目录树tree
常见选项:
- -d: 只显示目录
- -L level:指定显示的层级数目
-P pattern: 只显示由指定wild-card pattern匹配到的路径
3.2创建目录 mkdir
常见选项:
-p: 存在于不报错,且可自动创建所需的各目录
- -v: 显示详细信息
-
3.3 删除空目录rmdir
常见选项:
-p 递归删除父空目录
- -v 显示详细信息
注意:
rmdir只能删除空目录,如果想删除非空目录,可以使用rm -r 命令,递归删除目录树
4、文件元数据和节点表结构
4.1inode表结构
每个文件的属性信息,比如:文件的大小,时间,类型等,称为文件的元数据(meta data)。
这此元数 据是存放在node(index node)表中。
node 表中有很多条记录组成,第一条记录对应的存放了一个文 件的元数据信息
第一个node表记录对应的保存了以下信息:
- inode number 节点号
- 文件类型
- 权限
- UID
- GID
- 链接数(指向这个文件名路径名称个数)
- 该文件的大小和不同的时间戳
- 指向磁盘上文件的数据块指针
- 有关文件的其他数据
目录与inode关系:
- 文件引用的是 inode号
- 人是通过文件名来引用一个文件
-
5、软、硬链接
5.1硬链接
创建硬链接会增加额外的记录项以引用文件
- 对应于同一文件系统上一个物理文件
- 每个目录引用相同的inode号
创建时链接数递增- 删除文件时:
♦ rm命令递减计数的链接
♦ 文件要存在,至少有一个链接数
♦ 当链接数为零时,该文件被删除 - 不能跨越驱动器或分区
语法:
ln filename [linkname ]ln file1 file2 本质上给file1 起了一个新的名字 同一个文件、不同的名字5.2软(或符号)链接
一个符号链接指向另一个文件
软链接本质上不是同一个文件,链接文件依赖原文件- ls - l的 显示链接的名称和引用的文件
- 一个符号链接的内容是它引用文件的名称
- 可以对目录进行
- 可以跨分区
指向的是另一个文件的路径;其大小为指向的路径字符串的长度;不增加或减目标文件inode的引用计数;
5.3软、硬链接本质区别
软链接本质上是一个新的文件、只是一个快捷方式,硬链接本质上是同一个文件,重新命名了一个新名称
- 创建软链接不会增加链接数,创建硬链接、会增加文件链接数
- 软链接支持跨分区、跨设备、目录,硬链接不支持跨分区、跨设备、目录
- 创建软链接节点编号与原始文件节点编号不相同。创建硬链接,节点编号与原始文件节点编号相同
- 软链接文件与原始文件有主次之分,软链接文件依赖原始文件。硬链接文件与原始文件关系平等
