当前位置: 首页 > news >正文

Linux的相关学习

linux

1.文件权限怎么修改

chmod [权限模式] [文件或目录]1、**数字模式(八进制)**:
chmod 755 myfile.sh  
# 所有者:rwx (7),组:r-x (5),其他用户:r-x (5)
7 = rwx(读+写+执行)
5 = r-x(读+执行)
4 = r--(仅读)
0 = ---(无权限)
2、符号模式:
chmod u+x myfile.sh  # 给所有者(user)添加执行权限
chmod go-w myfile.sh # 移除组(group)和其他用户(others)的写权限
u(user/所有者)、g(group/组)、o(others/其他用户)
+(添加权限)、-(移除权限)、=(设置权限)
r(读)、w(写)、x(执行)

递归修改(目录及其子文件):加上 -R(Recursive)选项:

chmod -R 755 /var/www  # 递归设置 /var/www 及其子文件的权限为 755

2.软连接和硬链接

1.文件的 inode(索引节点)

inode(Index Node,索引节点)是文件系统中用于描述和管理文件的核心数据结构。每个文件(或目录)在创建时都会被分配一个唯一的 inode,其中存储了文件的元数据(metadata)和数据块指针,但不包含文件名。文件名与 inode 的关联通过目录项(directory entry)实现。inode 是文件系统的“身份证”,记录了文件的关键信息,包括:文件类型(普通文件、目录、符号链接、设备文件等)
文件权限(读、写、执行权限)
文件所有者(UID)和所属组(GID)
文件大小(字节数)
时间戳(创建时间 `ctime`、修改时间 `mtime`、访问时间 `atime`)
硬链接计数(有多少文件名指向该 inode)
数据块指针(指向文件实际存储位置的磁盘块)

2.inode 与文件名的关系:

文件名不直接存储在 inode 中,而是由目录项(directory entry) 维护。

目录本质上是一个映射表,存储 文件名 → inode 的对应关系。多个文件名可以指向同一个 inode(即硬链接),此时 inode 的硬链接计数会递增。

在 Linux/Unix 系统中,可以使用 ls -i 或 stat 命令查看文件的 inode:ls -i file.txt   # 显示文件名及 inode 号
stat file.txt    # 显示 inode 详细信息

inode 的分配与限制

文件系统在格式化时会预先分配固定数量的 inode(可通过 df -i 查看)。如果 inode 耗尽,即使磁盘空间充足,也无法创建新文件。

3.inode 与文件操作的关系

(1)创建文件

  1. 分配一个空闲 inode。
  2. 在目录中创建 文件名 → inode 的映射。
  3. 写入文件数据,并更新 inode 的元信息(大小、时间戳等)。

(2)删除文件

  1. 减少 inode 的硬链接计数。
  2. 当硬链接计数降为 0 时,释放 inode 和数据块。
  3. 从目录中删除 文件名 → inode 的条目。

(3)硬链接 vs 软链接

操作 硬链接的影响 软链接的影响
创建链接 inode 的硬链接计数 +1 新建一个独立的 inode(存储目标路径)
删除原文件 文件仍可通过其他硬链接访问 软链接失效(悬空链接)

Q1:为什么硬链接不能跨文件系统?
因为 inode 是文件系统内部唯一的,不同文件系统的 inode 可能冲突。Q2:如何修复“No space left on device”但磁盘空间充足?
可能是 inode 耗尽,使用 df -i 检查,并清理无用的小文件。Q3:目录的 inode 有什么不同?
目录的 inode 指向的数据块存储的是 文件名 → inode 的映射表,而非文件内容。

4.软链接和硬链接的区别

在文件系统中,软链接(Symbolic Link,又称符号链接)和硬链接(Hard Link)是两种不同的文件链接方式,它们的核心区别如下:

硬链接:

硬链接是原始文件的另一个文件名(直接指向文件的 inode),与原始文件共享相同的 inode 和数据块。本质上是同一个文件的多个名称(别名);硬链接不能跨文件系统,因为 inode 是文件系统内部分配的,不同文件系统的 inode 可能冲突;硬链接通常不能对目录创建硬链接;硬链接删除原始文件或其他硬链接时,只要还存在至少一个硬链接,文件数据就不会被释放;硬链接文件大小与原始文件大小相同(本质是同一文件);[ inode 1234 ]
├─ 数据块: [文件内容]
├─ 链接计数: 2
└─ 文件名: ├─ /dir/file1.txt  (硬链接1)└─ /dir/file2.txt  (硬链接2)+-------------------+       +-------------------+
| 文件名: file1.txt |       | 文件名: file2.txt |
| inode: 1234       |------>| inode: 1234       |
+-------------------+       +-------------------+↓[ 数据块: 文件内容 ]

软链接:

软连接是一个独立的文件,拥有自己的 inode,但文件内容中存储的是目标文件的路径(类似于快捷方式);如果目标文件被删除,软链接会失效(成为“悬空链接”);软连接可以跨文件系统,因为它仅存储路径字符串,不依赖 inode;软链接**可以对目录创建软链接;软链接删除原始文件后,软链接指向的路径失效,访问时会报错“No such file or directory”;软链接文件大小由存储的目标路径字符串的长度**决定;[ inode 5678 ] (软链接自身)
├─ 数据块: "/path/to/target.txt" (目标路径)
└─ 文件名: /dir/shortcut.link[ inode 1234 ] (目标文件)
└─ 数据块: [目标文件内容]+-------------------+       +-------------------+
| 文件名: shortcut  |       | 文件名: target.txt|
| inode: 5678       |       | inode: 1234       |
| 数据: "target.txt"|------>| 数据块: 文件内容  |
+-------------------+       +-------------------+

总结对比表

特性 硬链接 软链接
inode 与原始文件相同 独立 inode
跨文件系统 不支持 支持
链接目录 通常不支持 支持
原始文件删除 不影响其他硬链接 链接失效
存储内容 直接指向文件数据 存储目标文件的路径
文件大小 与原始文件相同 等于路径字符串长度

使用场景

硬链接:适合需要多个名称指向同一文件且不希望因删除而丢失数据的场景(如备份)。

软链接:适合需要跨文件系统、链接目录或灵活指向动态路径的场景(如快捷方式)。

3、静态库与动态库

静态库(Static Library)文件扩展名:.a(Linux)、.lib(Windows)特点:编译时直接嵌入到可执行文件中,运行时无需外部依赖。生成的可执行文件较大(包含库代码)。更新库需重新编译程序。动态库(Shared Library)文件扩展名:.so(Linux)、.dll(Windows)特点:程序运行时动态加载,多个程序可共享同一库。可执行文件小,但需确保运行时库路径正确。更新库无需重新编译程序(需接口兼容)。
http://www.xdnf.cn/news/1124065.html

相关文章:

  • JavaScript进阶篇——第一章 作用域与垃圾回收机制
  • 2025 R3CTF
  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段(4):语法+单词+復習+发音
  • JS基础知识(上)
  • 设计模式(行为型)-迭代器模式
  • H2 与高斯数据库兼容性解决方案:虚拟表与类型处理
  • 前端开发中的常见问题及解决方案
  • 群晖Nas - Docker(ContainerManager)上安装SVN Server和库权限设置问题
  • HarmonyOS从入门到精通:动画设计与实现之九 - 实用动画案例详解(下)
  • Redis作缓存时存在的问题及其解决方案
  • mysql 与redis缓存一致性,延时双删 和先更新数据库,再删除缓存,哪个方案好
  • 《Librosa :一个专为音频信号处理和音乐分析设计的Python库》
  • Pythonic:Python 语言习惯和哲学的代码风格
  • Kubernetes 高级调度01
  • STM32F1_Hal库学习UART
  • 破局与重构:文心大模型开源的产业变革密码
  • Java-ThreadLocal
  • java基础(day07)
  • 打开xmind文件出现黑色
  • 【LeetCode 热题 100】94. 二叉树的中序遍历——DFS
  • 13.计算 Python 字符串的字节大小
  • SpringMVC2
  • 鸿蒙开发NDK之---- 如何将ArkTs的类型转化成C++对应的类型(基础类型,包含部分代码解释)
  • 修改主机名颜色脚本
  • 虚拟货币交易:游走在合法与犯罪的生死线
  • 在Adobe Substance 3D Painter中,已经有基础图层,如何新建一个图层A,clone基础图层的纹理和内容到A图层
  • Java:继承和多态(必会知识点整理)
  • 【React Natve】NetworkError 和 TouchableOpacity 组件
  • Python 基础语法2:组合数据类型、异常
  • 【深度学习框架终极PK】TensorFlow/PyTorch/MindSpore深度解析!选对框架效率翻倍