第394集文件管理-Linux系统文件属性
文件管理 - Linux系统文件属性
1. Linux系统文件属性
使用ls -l命令可以查看文件的详细信息,包括文件属性、权限、所有者等信息。
1.1 文件属性详解
1 | -rw-------. 1 root root 4434 May 30 13:58 ks.cfg |
文件属性说明:
| 位置 | 内容 | 说明 |
|---|---|---|
| ① | -rw-------. |
文件类型与权限 |
| ② | 1 |
硬链接次数 |
| ③ | root |
所属用户 |
| ④ | root |
所属组 |
| ⑤ | 4434 |
文件大小(字节) |
| ⑥⑦⑧ | May 30 13:58 |
最新修改的时间与日期 |
| ⑨ | ks.cfg |
文件或目录名称 |
1.2 文件属性详细说明
① 文件类型与权限 (-rw-------.):
第一个字符: 文件类型
-: 普通文件d: 目录l: 链接文件b: 块设备文件c: 字符设备文件s: 套接字文件p: 管道文件
后续9个字符: 文件权限(rwxrwxrwx)
- 前3位: 所有者权限
- 中3位: 所属组权限
- 后3位: 其他用户权限
最后一个字符: SELinux上下文(
.表示有SELinux上下文)
② 硬链接次数: 表示有多少个文件名指向同一个Inode
③ 所属用户: 文件的所有者
④ 所属组: 文件所属的用户组
⑤ 文件大小: 文件占用的字节数
⑥⑦⑧ 修改时间: 文件最后修改的日期和时间
⑨ 文件名: 文件或目录的名称
2. Linux系统文件类型
通过颜色或者后缀判断文件类型不一定准确。最准确的方法是使用ls -l命令查看第一个字符,或使用file命令查看文件类型。
2.1 文件类型识别
1 | # 查看文件类型(看第一个字符) |
2.2 文件类型说明
| 格式 | 说明 | 示例 |
|---|---|---|
- |
普通文件(文本, 二进制, 压缩, 图片, 日志等) | /etc/hosts, /bin/ls |
d |
目录文件 | /tmp, /home |
b |
设备文件(块设备)存储设备硬盘 | /dev/sda1, /dev/sda2 |
c |
设备文件(字符设备)打印机,终端 | /dev/tty1, /dev/zero |
s |
套接字文件, 进程间通信(socket) | /dev/log |
p |
管道文件 | /run/dmeventd-client |
l |
链接文件 | /etc/grub2.cfg |
2.3 文件类型示例
1 | # 查看不同类型文件的属性 |
2.4 查看文件类型命令file
file命令可以更详细地识别文件类型:
1 | # 查看文本文件 |
注意: Linux文件扩展名不代表任何含义, 仅仅是为了运维人员便于识别。例如,
.txt、.sh等扩展名只是约定俗成,Linux系统并不依赖扩展名来识别文件类型。
3. Linux系统链接文件
Linux系统中有两种链接文件:软链接(符号链接)和硬链接。
3.1 软链接(Symbolic Link)
Linux里的软链接文件类似于Windows系统中的”快捷键方式”,里面具体存放的是源文件的路径,并指向源文件实体,因此通过访问这个”快捷方式”可迅速访问到源文件。软链接文件类型是l。
创建软链接
1 | ln -s 源文件 目标软链接文件 |
注意: 软链接和源文件是不同类型的文件,所以inode也不同。
文件软链接示例
1 | # 创建源文件 |
目录软链接示例
1 | # 创建目录 |
生产环境软链接作用
软件升级: 通过软链接指向不同版本,方便切换
1
2
3ln -s /usr/local/nginx-1.18.0 /usr/local/nginx
# 升级时只需修改软链接指向
ln -sf /usr/local/nginx-1.20.0 /usr/local/nginx企业代码发布: 通过软链接实现零停机发布
1
ln -s /var/www/html-v2 /var/www/html
不方便目录移动: 保持原有路径访问,实际文件已移动
1
2
3# 移动大文件到其他分区,但保持原路径可访问
mv /var/log /data/log
ln -s /data/log /var/log
3.2 硬链接(Hard Link)
Linux文件系统中, 多个文件名指向同一个索引节点Inode是正常且允许的(文件的多个有效的入口),这种情况的文件称为硬链接。
通过执行ln 源文件 硬链接文件给文件设置硬链接,来防止重要文件被误删。
注意:
- 目录不能创建硬链接
- 硬链接文件可以用rm命令删除
- 硬链接不可以跨越分区系统
文件硬链接示例
1 | # 创建源文件 |
硬链接特点
1 | # 查看硬链接次数 |
3.3 软硬链接区别
Linux下软链接和硬链接的区别:
| 对比项 | 软链接 | 硬链接 |
|---|---|---|
| 创建命令 | ln -s |
ln |
| 目录支持 | 支持 | 不支持 |
| 跨分区 | 支持 | 不支持 |
| Inode | 与源文件不同 | 与源文件相同 |
| 文件类型 | 链接文件(l) | 普通文件(-) |
| 删除源文件 | 软链接失效 | 硬链接仍然有效 |
| 删除链接文件 | 对源文件无影响 | 对源文件无影响 |
| 文件大小 | 存储路径,很小 | 与源文件相同 |
详细区别说明
创建命令不同
ln命令创建硬链接ln -s命令创建软链接
目录支持
- 目录不能创建硬链接,并且硬链接不可以跨越分区系统
- 目录软链接特别常用,并且软链接支持跨越分区系统
Inode关系
- 硬链接文件与源文件的inode相同
- 软链接文件与源文件inode不同
删除影响
- 删除软链接文件,对源文件及硬链接文件无任何影响
- 删除文件的硬链接文件,对源文件及链接文件无任何影响
- 删除链接文件的源文件,对硬链接无影响,会导致软链接失效
- 删除源文件及其硬链接文件,整个文件会被真正的删除
实际验证示例
1 | # 创建测试文件 |
4. Inode详解
4.1 Inode概念
Inode(Index Node)是Linux文件系统中存储文件元数据的数据结构,每个文件都有一个唯一的Inode号。
4.2 Inode包含的信息
- 文件类型和权限
- 文件所有者信息
- 文件大小
- 时间戳(创建、修改、访问时间)
- 指向数据块的指针
- 硬链接计数
4.3 查看Inode信息
1 | # 查看文件Inode号 |
5. 链接文件应用场景
5.1 软链接应用场景
软件版本管理
1
2
3
4
5# 当前版本
ln -s /usr/local/nginx-1.18.0 /usr/local/nginx
# 升级到新版本
ln -sf /usr/local/nginx-1.20.0 /usr/local/nginx配置文件管理
1
2# 统一管理配置文件
ln -s /etc/nginx/conf.d/site.conf /var/www/site/nginx.conf日志文件管理
1
2# 将日志文件链接到其他分区
ln -s /data/logs/app.log /var/log/app.log
5.2 硬链接应用场景
文件备份保护
1
2# 创建重要文件的硬链接作为备份
ln /etc/passwd /root/passwd.backup防止误删
1
2# 创建硬链接,即使删除源文件,硬链接仍然有效
ln important_file.txt backup_link.txt
6. 常见问题
6.1 软链接失效
问题: 软链接指向的文件被删除或移动
解决: 重新创建软链接或恢复源文件
1 | # 检查软链接是否失效 |
6.2 硬链接无法跨分区
问题: 硬链接不能跨越文件系统
解决: 使用软链接代替
1 | # 错误:硬链接跨分区会失败 |
6.3 目录硬链接
问题: 目录不能创建硬链接
原因: Linux系统限制,防止目录树形成循环
解决: 使用软链接
1 | # 错误:目录硬链接会失败 |
7. 命令总结
7.1 查看文件属性
1 | # 详细列表 |
7.2 创建链接
1 | # 创建硬链接 |
7.3 删除链接
1 | # 删除软链接(注意:不要加斜杠) |
7.4 查找链接文件
1 | # 查找所有软链接 |
8. 实战练习
练习1: 创建和管理软链接
1 | # 1. 创建测试文件 |
练习2: 创建和管理硬链接
1 | # 1. 创建测试文件 |
练习3: 软件版本管理
1 | # 1. 创建不同版本的目录 |


