Linux知识点

软件常见的5种安装方式

* 1.源码安装软件:最复杂,也是最灵活的安装方式,适合定制软件,二次开发;

* 2.二进制安装:将编译好的软件包,解压、配置后直接使用;适合大型软件例如MySQL数据库、Java运行环境jdk、Tomcat;jar包与war包的部署;

* 3.rpm安装:一键安装、依赖问题;

* 4.yum安装:一键自动安装软件与依赖,但是受yum源的限制;

* 5.docker镜像:一次构建到处运行,容器化技术;

查看系统配置文件位置

 #查看用户组:/etc/group
 #查看账户信息文件:/etc/passwd
 #查看用户账号信息加密文件/etc/shadow
 #查看组信息文件/etc/group
 #查看组信息加密文件/etc/gshadow
 ​
 which 命令    #查找命令的绝对路径

Linux 文件系统核心

核心前置认知

Linux系统中,文件名≠文件本身。文件的存储分为两个核心部分:

  1. 文件的真实数据内容:存放在block中

  2. 文件的元数据(属性信息):存放在inode中 内核通过inode号唯一识别文件,而非文件名,这是理解链接的核心前提。

block(数据块)– 存放文件真实内容

  • 大小固定(常见 4KB),大文件会占用多个 block

  • 只存数据,不存文件名、权限等信息

核心定义

block是Linux文件系统层面最小的数据存储单元,由磁盘的多个物理扇区(默认512字节)组成,格式化文件系统时固定大小,常见默认值4KB。

核心特性

  • 一个block只能被一个文件占用,哪怕文件仅1字节,剩余空间也无法被其他文件复用;

  • 大文件会占用多个block,block的位置指针存放在对应inode中;

  • 磁盘的绝大多数空间,都会划分给block区,用于存放所有文件的真实数据。

常用查看命令

 # 查看磁盘block使用情况(空间占用)
 df -h
 # 查看文件系统block大小
 stat / | grep "IO Block"

inode(索引节点)文件的“唯一身份证”

  • 存放文件元信息:权限、属主、时间、block 位置指针

  • 每个文件有唯一 inode 号

  • 不存储文件名,文件名在目录里

核心定义

inode(index node,索引节点),是存储文件元数据的专用结构,每个文件/目录有且仅有一个inode,对应全局唯一的inode号。

inode存储的元数据清单

元数据项

说明

文件类型

普通文件、目录、链接、设备文件等

权限属性

rwx读写执行权限、SUID/SGID/粘滞位

归属信息

文件属主UID、属组GID

时间戳

atime(访问时间)、mtime(内容修改时间)、ctime(元数据修改时间)

大小与指针

文件大小、指向数据block的位置指针

硬链接计数

指向该inode的文件名数量

关键误区纠正:inode中绝对不存储文件名,文件名仅存放在目录文件中。

### 核心特性

  • 内核通过inode号识别文件,文件名只是给用户使用的“别名”;

  • inode本身也占用磁盘空间,格式化时会划分独立的inode区,inode总量固定;

  • 磁盘写满有两种场景:block区占满(空间不足)、inode区占满(大量小文件耗尽inode,哪怕block有剩余也无法新建文件)。

常用查看命令

 # 查看文件inode号
 ls -li 文件名
 ​
 # 查看inode完整元数据
 stat 文件名
 ​
 # 查看磁盘inode使用情况
 df -i

补充信息

目录是什么?

目录本质也是文件,里面存的是:文件名 → inode 号 的对应关系

Linux中,目录也是一种特殊的文件。它的block中不存放用户数据,而是存放一张目录项表(dentry),表中每一条记录都是:文件名 → 对应inode号的映射关系。

系统打开文件的完整流程

  1. 用户输入文件名,系统从所在目录的dentry表中,匹配到文件名对应的inode号;

  2. 通过inode号找到inode结构体,校验访问权限;

  3. 权限校验通过,根据inode中的block指针,读取对应block中的文件数据。

. 和 .. 的核心本质

ls -a 可以看到每个目录都有 . .. # 这两个特殊目录

  • . :当前目录,inode = 当前目录 inode

  • ..:上一级目录,inode = 父目录 inode

  • 每个目录默认自带这两个硬链接

二者是系统为每个目录默认创建的硬链接,没有任何特殊之处:

  • . :代表当前目录,inode号与当前目录的inode号完全一致,是当前目录的一个硬链接;

  • .. :代表上一级父目录,inode号与父目录的inode号完全一致,是父目录的一个硬链接。

补充细节

  • 新建空目录的默认硬链接计数为2:目录本身的名称是1个硬链接,加上目录内的.,合计2个;

  • 目录内新建子目录,父目录的硬链接计数会+1:因为子目录内的..会指向父目录,新增一个硬链接;

  • 这也是系统禁止普通用户给目录创建硬链接的核心原因:避免出现目录硬链接循环,破坏文件系统的树状结构。

硬链接(hard link):同一个文件的多个“入口”

1. 特点

  • 与原文件共用同一个 inode

  • 本质是同一个文件,只是多一个入口

  • 删除一个,另一个依然可用

  • 不能跨分区、不能链接目录

2. 命令

  ln 原文件 硬链接名

本质原理

硬链接的本质,是同一个inode号,对应多个不同的文件名(目录项)。创建硬链接,不会生成新的inode,也不会复制block中的数据,仅在目录的dentry表中,新增一条新文件名 → 原文件inode号的映射记录。

核心特性

  • 与原文件共享同一个inode,inode号完全一致,文件之间完全平等,无“主从”之分;

  • 删除任意一个硬链接,仅删除一条目录项映射,硬链接计数-1;只有当硬链接计数降至0时,系统才会回收inode和对应的block,文件才会被真正删除;

  • 不支持跨分区/跨文件系统:不同分区的inode号独立,A分区的inode号在B分区无意义;

  • 系统禁止给目录创建硬链接,避免目录循环;

  • 几乎不占用额外磁盘空间,仅新增目录项的极小开销。

命令演示

# 语法:ln 原文件路径 硬链接文件路径 ln test.txt test_hard.link # 验证:inode号完全一致 ls -i test.txt test_hard.link # 验证:硬链接计数变为2 ls -l test.txt

典型使用场景

  • 重要文件防误删:多路径创建硬链接,删除原文件不影响数据访问;

  • 多路径共享大文件:无需复制数据,不占用额外磁盘空间。


1. 特点

  • 有独立 inode,是一个新文件

  • 内容只存原文件路径

  • 类似 Windows 快捷方式

  • 原文件删除后,软链接失效(变红)

  • 可跨分区、可链接目录

2. 命令

  ln -s 原文件 软链接名

本质原理

软链接是一个完全独立的普通文件,拥有自己独立的inode和block。它的block中不存放用户数据,仅存放目标文件/目录的绝对/相对路径。系统访问软链接时,会读取其存储的路径,自动跳转访问目标文件。

2. 核心特性

  • 拥有独立的inode号,与原文件inode完全不同;

  • 原文件删除、移动、重命名后,软链接会直接失效(断链,ls命令中标红);

  • 支持跨分区/跨文件系统,甚至支持跨网络挂载目录创建;

  • 支持给目录创建软链接,是日常运维中最常用的形式;

  • 软链接自身的权限仅为标识,最终访问权限由目标文件决定。

命令演示

  # 语法:ln -s 目标文件/目录路径 软链接文件路径
  # 最佳实践:优先使用绝对路径创建,避免软链接移动后断链
  ln -s /root/test.txt /root/test_soft.link
  •
  # 给目录创建软链接
  ln -s /root/test_dir /root/test_dir_link
  •
  # 验证:inode号与原文件完全不同
  ls -i test.txt test_soft.link

4. 典型使用场景

  • 软件版本管理:多版本切换时,仅修改软链接指向,无需修改业务配置;

  • 路径简化:将深层路径的文件/目录软链接到常用目录,比如把nginx二进制文件软链接到/usr/bin,实现全局调用;

  • 系统库文件兼容:解决Linux动态库的版本依赖问题。


硬链接 vs 软链接 核心对比表

对比维度

硬链接(Hard Link)

软链接(符号链接 Symbolic Link)

核心本质

同一个inode,多个目录项映射

独立文件,存储目标路径的快捷方式

inode号

与原文件完全相同

独立inode号,与原文件不同

跨分区支持

不支持

完全支持

目录链接

系统禁止创建

完全支持

原文件删除后

依然可用,仅硬链接计数-1

直接断链失效,无法访问

磁盘占用

几乎无额外开销

占用独立的inode和block

路径敏感性

不敏感,创建路径不影响使用

敏感,相对路径创建的软链接移动后易断链

权限规则

与原文件完全一致,修改任意一个均同步

自身权限不生效,最终权限由目标文件决定

创建命令

ln 原文件 硬链接名

ln -s 目标文件 软链接名


高频实操避坑指南

  1. 软链接断链坑:优先用绝对路径创建软链接,相对路径创建的软链接,移动后大概率断链。

  2. 目录软链接删除坑:删除目录软链接时,末尾不要加/,rm -rf test_dir_link/会删除原目录的所有内容,正确写法是rm -rf test_dir_link。

  3. inode耗尽坑:磁盘空间充足但无法新建文件,优先用df -i检查是否inode被大量小文件耗尽。

  4. 内容修改坑:修改硬链接/软链接的内容,本质都是修改原文件的block数据,所有关联文件都会同步变更。

mdadm 与 LVM 核心区别

  1. mdadm

磁盘阵列工具,组建RAID,做磁盘冗余、读写提速、故障容错。

  1. LVM

逻辑卷管理,灵活分区扩容缩容、合并拆分磁盘。

层级关系

硬盘 → mdadm(RAID) → LVM → 挂载使用

极简差异

  • mdadm:保数据安全、提速

  • LVM:灵活调整分区大小

用户组管理指令介绍

⚙️ 核心区别:操作视角不同

  • usermod -aG**(以用户为中心):usermod 是专门用来修改用户属性**的工具。当你使用它时,你的出发点是:“我要修改某个用户的配置,给他增加一个所属的组”。

  • gpasswd -a**(以组为中心):gpasswd 是专门用来管理用户组属性**的工具。当你使用它时,你的出发点是:“我要管理这个用户组,往里面拉进一个新成员”。

📋 优缺点与适用场景对比

表格

维度

usermod -aG

gpasswd -a

语义清晰度

侧重于改用户,语法稍微绕一点(-a 和 -G 必须连用)

语义非常直观,就是“向组里加人”

安全性

必须带 -a (append),漏掉会变成覆盖原有组

本身就是追加操作,不存在覆盖风险

批量操作

强项。可以一次把用户加到多个组(如 usermod -aG group1,group2 user)

弱项。一次只能把一个用户加到一个组

权限下放

必须由 root 或 sudo 执行

支持设置“组管理员”,普通用户也能管理组员进出

💡 总结与建议

在日常运维中,你可以根据具体的场景灵活选择:

  • 推荐用 gpasswd -a 的场景:当你只需要把单个用户加入到某一个组时(比如把 tom 加到 admin 组),它的语义最清晰,而且完全不用担心手滑漏写参数导致覆盖权限,非常适合新手和常规操作。

  • 推荐用 usermod -aG 的场景:当你需要一次性把用户加入多个组时(比如新建一个开发人员,要同时把他加到 docker, www-data, dev 等多个组),用 usermod 会极其高效,敲一条命令就能搞定。

磁盘管理

磁盘的介绍及管理

* 固态硬盘:读写速度快,理论上达到GB级传输,缺点:寿命低,贵

* 机械硬盘:受机械马达转速影响,MB级传输,缺点:速度慢,优点:容量大,价格低,适合对性能要求低,数据量大的数据存储;

* /dev目录中包含设备映射文件;

* /dev/sda /dev/sdb /dev/sdc

* 分区:为了方便数据备份、数据隔离对物理磁盘进行软件分区操作,将分区范围写入磁盘的分区表;

* 格式化:用于重新建立文件系统,拆分磁盘存储空间,存储单元;

* Inode: 元节点,存储文件的元数据(创建时间、大小、权限、inode编号,对应的block块地址;)

* block:块数据,磁盘上最小的存储单元,默认大小4k,每个文件至少占用一个block,大于4k的文件会占用多个block; 存放的是数据的“内容”;