Linux 基础操作与核心概念详解

一、Linux 系统架构:用户空间与内核的交互桥梁

Linux 系统采用分层架构,核心逻辑围绕“用户空间”与“内核空间”的协作展开。用户程序无法直接操作硬件,必须通过内核提供的接口——这一接口正是我们今天要深入理解的系统调用库函数Shell 命令


1.1 层次结构概览

Linux 系统的运行逻辑可简化为三层模型(从用户到内核):

层级 角色描述 典型代表/技术
应用层 用户直接使用的软件(如浏览器、文本编辑器) Vim、GCC、Python
库函数层 对系统调用的封装,提供更易用的编程接口 C 标准库(如 fopen)、GNU C 库
系统调用层 内核暴露给用户空间的“唯一入口”,直接控制硬件资源 openreadwrite
内核层 管理硬件资源(CPU、内存、磁盘),实现进程调度、文件系统等核心功能 Linux 内核(进程管理、内存管理)

关键结论:所有用户程序的操作(如读写文件、启动进程),最终都必须通过系统调用请求内核完成。


1.2 系统调用:用户与内核的“翻译官”

系统调用(System Call)是内核向用户空间提供的有限接口,相当于用户程序与内核之间的“翻译官”。它规定了用户程序“能做什么”和“不能做什么”,确保了系统的安全性和稳定性。

核心特点:

  • 唯一性:用户程序无法直接访问硬件,必须通过系统调用;
  • 原子性:系统调用一旦启动,内核会全程接管直至完成;
  • 特权隔离:用户空间运行在“用户态”,内核运行在“内核态”,系统调用是状态切换的触发点。

常见系统调用示例:

功能 系统调用 说明
文件操作 openreadwriteclose 打开/读取/写入/关闭文件
进程控制 forkexecwait 创建进程、执行程序、等待子进程结束
网络通信 socketconnectsendrecv 创建套接字、连接网络、发送/接收数据

1.3 库函数层:系统调用的“包装纸”

库函数(如 C 标准库 libc)是对系统调用的高级封装,目的是简化开发。开发者无需直接编写系统调用(需处理参数、错误码等细节),只需调用库函数即可。

典型示例:fopenopen 的关系

  • fopen("file.txt", "r")(C 库函数)最终会调用 open("/path/to/file.txt", O_RDONLY)(系统调用);
  • 库函数可能添加缓冲机制(如 fread 会一次性读取更多数据减少系统调用次数),提升效率。

注意:并非所有库函数都依赖系统调用(如数学库 math.h 中的 sqrt 仅在用户空间计算),但涉及资源操作(文件、网络、进程)的库函数必然依赖系统调用。


1.4 应用层与 Shell:用户操作的“指挥中心”

Shell 是用户与 Linux 交互的命令行解释器,既是“命令输入窗口”,也是“脚本编程环境”。它的核心功能是:

  • 解析用户输入的命令(如 ls -lcd ~);
  • 调用库函数或直接发起系统调用完成任务;
  • 支持命令组合(如管道 |、重定向 >)和脚本自动化。

类比:Shell 就像“翻译+调度员”——将用户的自然语言命令翻译成系统能理解的指令,并协调各程序协作执行。


二、Shell 命令行:Linux 的“瑞士军刀”

掌握 Shell 命令是 Linux 运维、开发的基础。以下是最常用的几类命令,覆盖目录、文件、权限等核心操作。


2.1 基础操作:目录与文件管理

2.1.1 查看与切换目录(pwdcd

1
2
3
pwd:查看当前工作目录的绝对路径。
$ pwd
/home/user/documents
1
2
3
4
5
cd [目录]:切换目录。
常用参数:
- `cd ..`:切换到父目录;
- `cd ~` 或 `cd`:切换到用户主目录(如 `/home/user`);
- `cd -`:切换到上一个工作目录。

2.1.2 创建与删除目录(mkdirrmdir

1
2
3
4
5
mkdir [-p] 目录名:创建目录( -p 参数允许递归创建多级目录)。

$ mkdir dir1 # 创建一级目录 dir1
$ mkdir -p a/b/c # 创建多级目录 a/b/c(即使 a/b 不存在)
`rmdir 目录名`:删除空目录(若目录非空,需用 `rm -r`)。

2.1.3 文件操作(touchcpmvrm

1
2
touch 文件名:创建新文件或更新文件时间戳。
$ touch new_file.txt # 创建空文件 new_file.txt
1
2
3
4
cp [选项] 源文件 目标路径  :复制文件/目录( -r 递归复制目录)。
$ cp 1.txt 2.txt # 复制 1.txt 为 2.txt(同目录)
$ cp 1.txt dir/ # 复制 1.txt 到 dir 目录下
$ cp -r dir1 dir2 # 递归复制整个目录 dir1 到 dir2
1
2
3
mv [源文件/目录] [目标路径]:移动文件/目录,或重命名。
$ mv 1.txt dir/ # 将 1.txt 移动到 dir 目录
$ mv old_name.txt new_name.txt # 重命名文件
1
2
3
4
rm [选项] 文件/目录:删除文件/目录( -r 递归删除目录, -f 强制删除)。
$ rm 1.txt # 删除文件 1.txt
$ rm -r dir/ # 递归删除目录 dir/
$ rm -f important.txt # 强制删除(不提示确认)

2.2 高级操作:搜索、查看与管道

2.2.1 文件内容查看(catlessheadtail

1
2
3
cat 文件名:一次性显示文件全部内容(适合小文件)。
$ cat hello.txt # 输出文件 hello.txt 的内容
`less 文件名`:分屏查看大文件,支持上下翻页(`j` 下翻,`k` 上翻)、搜索(`/关键词`)。
1
2
3
4
5
head -n 行数 文件名:显示文件前 N 行(默认 10 行)。
$ head -n 5 log.txt # 显示 log.txt 前 5 行
tail -n 行数 文件名:显示文件后 N 行;
tail -f 文件名 实时跟踪文件新增内容(监控日志神器)。
$ tail -f /var/log/syslog # 实时查看系统日志

2.2.2 搜索工具(grepfind

1
2
3
grep [选项] 关键词 文件名:在文件中搜索关键词(支持正则表达式)。
$ grep -n "error" app.log # 显示 app.log 中包含 "error" 的行及行号
$ grep -E "http|https" urls.txt # 用正则匹配 "http" 或 "https"
1
2
3
4
find 路径 [条件] [操作]:递归搜索目录下的文件/目录(支持按名称、类型、时间等过滤)。
$ find /usr/include -name "stdio.h" # 在 /usr/include 目录下查找 stdio.h
$ find . -type d -name "test" # 在当前目录下查找名为 test 的目录
$ find . -mtime -7 # 查找最近 7 天内修改过的文件

2.2.3 命令组合:让效率翻倍

1
2
3
4
5
6
7
8
9
;:顺序执行多个命令(前一个失败不影响后一个)。
$ mkdir backup; cp data.txt backup/ # 先创建 backup 目录,再复制文件

|:管道(将前一个命令的输出作为后一个命令的输入)。
$ ps aux | grep "nginx" # 查看所有进程,筛选出包含 "nginx" 的进程
$ cat large.log | grep "ERROR" | wc -l # 统计日志中 "ERROR" 出现的次数

&&:前一个命令成功则执行后一个( || 前一个失败则执行后一个)。
$ make && make install # 编译成功后才执行安装

2.3 权限管理:控制资源的“钥匙”

Linux 是多用户系统,权限管理是核心安全机制。每个文件/目录有三类权限(用户、组、其他用户),通过 rwx(读、写、执行)控制。

2.3.1 权限基础:rwx 的含义

权限类型 对文件的含义 对目录的含义
r(Read) 允许读取文件内容 允许列出目录下的文件/子目录
w(Write) 允许修改文件内容(删除需配合目录写权限) 允许在目录中新建/删除/重命名文件
x(Execute) 允许执行文件(脚本或可执行程序) 允许进入目录(cd)或访问目录元数据

示例-rwxr-xr-- 表示:

  • 所有者(User):读、写、执行(rwx);
  • 所属组(Group):读、执行(r-x);
  • 其他用户(Others):只读(r--)。

2.3.2 修改权限:chmod 命令

1
2
3
4
5
6
7
8
`chmod` 用于修改文件/目录的权限,支持两种模式:

数字模式:将 rwx 转换为八进制数( r=4,w=2 ,x=1,无权限=0),三类权限值相加。
$ chmod 755 script.sh # 所有者 7(4+2+1=rwx),组和其他 5(4+1=r-x)

符号模式:通过 用户类别[+=-]权限灵活调整。
$ chmod u+w,g-r,o=x file.txt # 所有者加写权限,组去读权限,其他设为执行
$ chmod a+x script.sh # 所有用户加执行权限(a=所有)

2.3.3 默认权限:umask 命令

umask 控制新建文件/目录的默认权限(默认值为 022):

  • 目录默认权限 = 777 - umask(如 umask 022,则目录权限 755);
  • 文件默认权限 = 666 - umask(如 umask 022,则文件权限 644)。
1
$ umask 007  # 设置新建文件权限 660(666-007),目录权限 770(777-007)

三、文件系统:数据的“组织蓝图”

Linux 文件系统采用树形结构(根目录 / 为起点),所有文件/目录均挂载在这棵“树”下。要深入理解文件系统,需掌握以下核心概念:


3.1 Inode:文件的“身份证”

Inode(索引节点)是 Linux 文件系统的核心数据结构,存储文件的元数据(非文件内容),包括:

  • 文件类型(普通文件、目录、符号链接等);
  • 权限(rwx)、硬链接数;
  • 所有者(User)、所属组(Group);
  • 文件大小、最后修改时间;
  • 数据块指针(指向文件内容存储的磁盘位置)。

查看 Inode 信息:

  • ls -i 文件名:显示文件的 Inode 编号。
1
$ ls -i hello.txt  # 输出:12345 hello.txt(12345 是 Inode 号)
  • stat 文件名:显示 Inode 的详细信息(包括数据块位置、时间戳等)。
    关键结论:文件内容存储在数据块中,Inode 存储“如何找到数据块”的信息。删除文件时,实际是删除 Inode 与数据块的关联(数据块不会立即被覆盖)。

3.2 软硬链接:文件的“别名”与“克隆”

链接(Link)是 Inode 的“快捷方式”,分为两种:

类型 特点 示例命令
硬链接 与原文件共享同一个 Inode,删除原文件不影响硬链接(需至少一个硬链接存在) ln 原文件 硬链接名
软链接 独立文件,存储原文件的路径(类似 Windows 快捷方式),原文件删除后失效 ln -s 原文件路径 软链接名

示例

1
2
$ ln data.txt hard_link.txt  # 创建 data.txt 的硬链接 hard_link.txt
$ ln -s /home/user/data.txt soft_link.txt # 创建软链接 soft_link.txt

3.3 虚拟文件系统(VFS):统一存储的“魔法桥梁”

Linux 支持多种文件系统(如 ext4、XFS、NTFS),虚拟文件系统(VFS)是它们的“统一接口”。VFS 定义了一套通用操作(如 openread),不同文件系统实现这些操作的具体逻辑。

作用:用户无需关心底层是 ext4 还是 NTFS,只需通过统一的系统调用操作文件。例如,挂载 U 盘(NTFS 格式)后,可直接用 cdls 访问,VFS 会自动调用 NTFS 驱动处理请求。


四、Vim 编辑器:文本处理的“效率神器”

Vim 是 Linux 下经典的文本编辑器,以“模式化操作”和“高效编辑”著称。掌握 Vim 能大幅提升文本处理效率。


4.1 模式与基本操作

Vim 有三种核心模式:

模式 功能 切换方式
普通模式 输入命令(移动光标、删除文本、复制粘贴等) 启动 Vim 默认进入此模式
插入模式 输入文本内容 i(当前位置)、a(光标后)、o(下一行)等进入
命令模式 执行保存、退出、查找替换等全局命令 : 进入(如 :wq 保存退出)

常用操作示例:

  • 打开/创建文件:vim 文件名(如 vim test.txt);
  • 移动光标:h(左)、j(下)、k(上)、l(右);
  • 复制粘贴:yy(复制当前行)、p(粘贴到光标下一行);
  • 删除文本:dd(删除当前行)、dw(删除当前单词);
  • 保存退出::w(保存)、:q(退出)、:wq(保存并退出)、`:q!

未完待续……