Linux专题三:目录结构即相关操作指令,gdb调试,进程基础,以及makefile工具

一、Linux 目录结构(类比示例,核心规则)

1. 目录结构类比理解

目录 / 标识 功能说明 类比对象
根目录/ 所有文件和目录的起点,是整个文件系统的根节点 学校
/bin 存放基础常用命令(如lscpmkdir),所有用户均可使用 学校公共教室(所有学生可用)
/etc 存放系统全局配置文件,通常仅管理员有权限修改 学校行政办公室(仅老师可用)
/sbin 存放管理员专用命令(如shutdownifconfig),普通用户无法直接使用 学校设备控制室(仅管理员可用)
/boot 存放系统启动所需的核心文件(如内核、启动引导程序) 学校大门门禁系统
/dev 存放设备文件,将硬件设备(硬盘、键盘、串口等)抽象为文件进行管理 学校各类教学设备(电脑、投影仪等)
/home 普通用户家目录的根目录,为多用户系统提供独立存储空间 学校宿舍楼
/home/用户名(如/home/zhangsan 单个用户的专属目录,用户可在此创建、修改、保存个人文件 / 代码 学生个人宿舍

2. 核心操作规则

  • 所有代码只能在用户自家目录(/home/用户名)下创建、修改、保存,不可在其他目录随意存放个人文件
  • 类比逻辑:Linux 是多用户共用系统,如同多个学生共用一所学校,个人物品(文件 / 代码)只能放在自己的宿舍(家目录),不可乱放在教学楼(/bin/etc等系统目录)等公共区域

二、文件与目录基础操作指令(复习)

1. 核心基础指令(含功能、格式、示例)

指令 功能说明 格式 / 示例
cd 切换路径;支持特殊路径标识 格式:cd 目标路径;示例:- cd ~(切换到家目录)- cd -(在最近两个位置间切换)- cd .(当前目录,无实际切换效果)- cd ..(返回上一层目录)
ls 显示当前 / 指定目录下的文件 / 目录列表 格式:ls [选项] [目录];示例:ls -l(详细列出当前目录文件)
pwd 显示当前所在的绝对路径 格式:pwd;示例:pwd(输出:/home/stu)
touch 创建普通空文件;不进入文件编辑界面 格式:touch 文件名;示例:touch a.txttouch main.c
mkdir 创建目录(文件夹) 格式:mkdir [选项] 目录名;示例:mkdir testdirmkdir -p a/b/c(多级目录)
cp 拷贝文件 / 目录;拷贝目录需加-r(递归)选项 格式:- 拷贝文件:cp 源文件 目标路径/新文件名- 拷贝目录:cp -r 源目录 目标路径示例:cp a.txt /home/stu/cp -r testdir /home/stu/backup/
mv 兼具移动文件 / 目录、重命名两种功能 格式 / 示例:- 重命名:mv test.txt new.txt- 移动文件:mv new.txt /home/stu/- 移动目录:mv testdir /home/stu/- 移动并改名:mv a.txt /home/stu/b.txt选项:-i(覆盖前询问)、-f(强制覆盖)、-v(显示详细操作)
rm 删除文件 / 目录;删除目录需加-r,强制删除加-f 格式 / 示例:- 删除文件:rm a.txt- 删除目录:rm -r testdir- 强制删除目录:rm -rf testdir选项:-i(询问操作)、-v(显示详细操作)

2. 文件内容操作指令(查看、合并、统计、搜索)

(1)文件内容查看指令
指令 功能说明 格式 / 示例
cat 1. 打印文件内容;2. 合并多个文件;3. 配合重定向写入 / 追加文件 格式 / 示例:1. 打印文件:cat a.txtcat a.txt b.txt2. 合并覆盖写入:cat a.txt b.txt > c.txt(c.txt 不存在则自动创建)3. 合并追加写入:cat a.txt b.txt >> c.txt4. 屏幕内容覆盖写入:cat > file1(输入内容后按Ctrl+d结束)5. 屏幕内容追加写入:cat >> file1(输入内容后按Ctrl+d结束)
more 分屏显示文本内容,按窗口分页,空格翻页,查看完毕自动退出;无需滑动鼠标 格式:more 文件名;示例:more test.txt(按空格翻页,按q退出)
less 单页显示文本内容,支持上下键滚动查看,不自动退出,可反复浏览 格式:less 文件名;示例:less test.txt(上下键翻行,按q退出)
tail 查看文件尾部内容,默认 10 行;-n指定行数 格式:tail -n 行数 文件名;示例:tail -n 5 test.txt(最后 5 行)、tail -n 20 test.txt(最后 20 行)
head 查看文件头部内容,默认 10 行;-n指定行数,-c指定字符数 格式 / 示例:- head -n 3 test.txt(前 3 行)- head -n 20 test.txt(前 20 行)- head -c 5 test.txt(前 5 个字符)
(2)文件内容 / 文件搜索指令
指令 功能说明 格式 / 示例
find 按路径、名称、大小等条件搜索文件;默认从当前目录查找 格式 / 示例:1. 按名称搜索:find 起始路径 -name "文件名"(示例:find /home/stu -name main.c)2. 按大小搜索:`find 起始路径 -size + -nkMG+大于/-小于,k=KB、M=MB、G=GB;示例:find /home -size +10M`)
grep 在文件内搜索匹配的文本信息;匹配内容需用双引号包裹 格式:grep [选项] "匹配信息" 文件名;示例:1. 精准匹配:grep "hello" test.c2. 忽略大小写:grep -i "HELLO" test.c3. 反向匹配(排除目标信息):grep -v "hello" test.c
管道 ` ` 在两个进程间传递数据,将左侧命令结果传递给右侧命令处理,实现复杂功能 格式:` 命令 1 命令 2;示例:ls -l grep "a.txt"`(先列出详细文件,再过滤出含 a.txt 的信息)
(3)文件统计与对比指令
指令 功能说明 格式 / 示例
wc 统计文件行数、单词数、字符数;-l行数、-w单词数、-c字符数 格式:wc [选项] 文件名;示例:wc -l test.txt(统计行数)、wc -w test.txt(统计单词数)、wc -c test.txt(统计字符数)
cmp 逐字节比较两个文件内容,效率高,适合二进制文件;无差异则无输出,有差异显示首个不同位置 格式 / 示例:1. 基础比较:cmp 文件1 文件22. 跳过 n 个字节后比较:cmp -s n 文件1 文件23. 仅比较前 n 个字节:cmp -n n 文件1 文件24. 查看退出状态:echo $?(0 = 相同、1 = 不同、2 = 错误)

3. 文件压缩与解压指令(tar)

  • 核心功能:打包 / 解包、压缩 / 解压文件 / 目录
  • 核心选项:
    • c:创建压缩包(打包)
    • x:释放包中内容(解包)
    • z:使用 gzip 格式压缩 / 解压
    • f:指定压缩包文件名
  • 常用命令 / 示例:
    • 压缩打包:tar czf my.tar.gz test.c testdir(将 test.c 和 testdir 压缩为 my.tar.gz)
    • 解压解包(一次完成):tar zxf my.tar.gz(将 my.tar.gz 解压到当前目录)

4. 其他实用指令

指令 功能说明 格式 / 示例
echo 在屏幕上输出指定内容 格式:echo 内容;示例:echo pwd(输出字符串 "pwd")、echo $?(输出上一个命令的退出状态)
which 查找外部命令对应的程序文件路径;无法查找内部命令 格式:which 命令;示例:which sleepwhich gcc
type 查看命令的执行属性(内部命令 / 外部命令) 格式:type 命令;示例:type cd(输出:cd is a shell builtin,内部命令)、type gcc(外部命令)
history 列出之前使用过的所有命令;按上下键可调用历史命令 格式:history
shutdown 关机 / 重启系统,需管理员权限 格式 / 示例:- 立刻关机:shutdown -h now- 立刻重启:shutdown -r now
chmod 修改文件 / 目录的权限(change mode);权限分为所有者(u)、组员(g)、其他人(o) 格式 / 示例:1. 字符修改法:chmod u+r/g-w/o=x 文件名+增加、-减少、=赋予)2. 数字修改法:chmod 777 文件名(7=rwx、6=rw-、5=r-x 等)

5. 重定向指令(> / >>)

  • 功能:将命令输出写入文件,而非显示在终端
  • 分类 / 示例:
    • 覆盖重定向>:将左侧内容覆盖写入右侧文件,文件不存在则创建;示例:cat a.txt > b.txt(将 a.txt 内容覆盖到 b.txt)、cat > file1(屏幕内容覆盖写入 file1)
    • 追加重定向>>:将左侧内容追加到右侧文件末尾,文件不存在则创建;示例:cat a.txt >> b.txt(将 a.txt 内容追加到 b.txt)、cat >> file1(屏幕内容追加写入 file1)

三、vim 编辑器操作

1. 基础模式与切换

  • 核心模式:命令模式(默认打开模式)、插入模式、末行模式
  • 模式切换:
    • 命令模式 → 插入模式:按i(光标前插入)、a(光标后插入)、o(新建行插入)、I(行首插入)、A(行尾插入)、O(上一行新建插入)
    • 插入模式 / 末行模式 → 命令模式:按Esc
    • 命令模式 → 末行模式:输入:?/

2. 命令模式操作(无需加:,直接执行)

操作功能 指令 补充说明
显示行号 set nu -
隐藏行号 set nonu -
复制内容 yy(复制当前行)、nyy(复制 n 行) -
粘贴内容 p(粘贴到光标后) -
删除 / 剪切 dd(删除当前行)、ndd(删除 n 行) 删除即剪切,可通过p粘贴
撤销操作 u 撤销上一次操作
恢复撤销 ctrl r 恢复被u撤销的操作
跳转行 G(最后一行)、gg(第一行)、nG/:n(第 n 行) -
清空内容 cc(清空当前行)、C(从光标清空到行末) -
查找内容 /str(搜索字符串 str) n向下查找下一个,N向上查找
搜索高亮 set hlsearch 高亮显示匹配的搜索结果
取消搜索高亮 set nohlsearch 取消高亮显示

3. 末行模式操作(需先输入:进入)

操作功能 指令 补充说明
保存文件 :w 仅保存,不退出 vim
退出 vim :q 文件未修改时可用
保存并退出 :wq/:x -
不保存强制退出 :q! 放弃所有修改
显示断点信息 :info break 调试时使用
删除断点 :delete 断点编号 调试时使用

4. gdb 调试操作(针对 debug 版本可执行文件)

  • 前提:编译时需添加-g选项生成 debug 版本,Linux 默认是 release 版本
  • 核心步骤 / 指令:
    1. 生成 debug 版本:gcc -o main main.c -g
    2. 进入 gdb 调试:gdb main
    3. 调试指令:
      • b 行号/函数名:设置断点(示例:b 5b main
      • r:启动程序
      • n:单步执行(不进入函数内部)
      • s:单步执行(进入函数内部;s 函数名直接调用函数,不进入内部)
      • c:继续运行,直到下一个断点(无断点则执行完毕)
      • finish:跳出当前函数
      • p 变量名:打印变量值
      • bt:显示栈堆信息及当前调试位置
      • q:退出 gdb 调试

四、进程管理

1. 进程基础概念

  • 进程定义:计算机正在运行中的程序实例,是操作系统资源分配和调度的基本单位
  • 进程控制块(PCB):本质是结构体,操作系统通过双向链表管理所有 PCB(创建进程 = 添加链表节点,关闭进程 = 删除节点)
  • 进程 ID(PID):进程的唯一标识;进程关闭后 PID 会被回收,新进程创建时系统会从小到大分配空闲 PID
  • 父子进程:相对概念,进程创建时会生成对应的父子关系
  • 命令解释器:bash、shell 均为命令解释器,一个终端对应一个命令解释器
  • 前台 / 后台进程(类比示例):
    • 前台进程:像在餐厅门口打饭并原地就餐,需等自己吃完,后面的人才能打饭;占用终端,需等待进程完成后才能执行后续命令
    • 后台进程:像打饭后去别处就餐,不影响后面的人打饭;不占用终端,进程是否完成不影响后续命令执行

2. 进程操作指令

指令 功能说明 格式 / 示例
ps 显示当前运行的进程 格式 / 示例:- ps(显示当前终端进程)- ps -e/ps -el(列出系统所有进程)
kill 结束指定进程;-9强制结束(部分进程无法正常结束时使用) 格式 / 示例:- 正常结束:kill 1234(1234 为 PID)- 强制结束:kill -9 1234
ctrl c 快速结束当前前台运行的进程 直接在终端按下Ctrl+c组合键
ctrl z 暂停当前前台运行的进程 直接在终端按下Ctrl+z组合键,可通过fg恢复前台运行
后台运行 将进程放到后台运行,不占用终端 格式:命令 &;示例:sleep 300 &(后台运行 300 秒睡眠进程)
jobs 查看后台进程的运行状态及相关指令 格式:jobs
top 实时监控系统进程和资源使用情况,按q退出 格式:top

3. 进程权限说明

  • kill指令仅能杀死当前用户创建的进程,无法杀死同级别的其他用户进程
  • 管理员(root)有权限杀死所有用户的进程

五、用户管理

1. 用户操作指令(需管理员权限)

指令 功能说明 格式 / 示例
useradd/adduser 添加新用户 格式:useradd 用户名(示例:useradd zhangsan
userdel/deluser 删除已有用户 格式:userdel 用户名(示例:userdel zhangsan
passwd 修改用户密码 格式:passwd 用户名;示例:- 普通用户改自己密码:passwd- 管理员改其他用户密码:passwd zhangsan

六、编译链接与工程管理

1. 编译基础认知

  • 文件名后缀:Linux 不以文件后缀名区分文件类型,但 C 语言编译器要求源代码必须以.c结尾
  • 可执行文件格式:
    • Linux 系统:ELF 格式
    • Windows 系统:PE 格式
  • 编译目的:将高级语言转换为计算机可理解的机器指令(机器语言)
  • 工程要求:一个工程中有且仅有一个main()函数
  • 编译版本:
    • debug(开发调试版本):包含调试信息,需通过-g选项生成(示例:gcc -o main main.c -g),支持 gdb 调试
    • release(发行版本):无调试信息,运行速度更快;Linux 默认是 release 版本,Windows 默认是 debug 版本

2. C 语言编译链接四阶段(类比 "造车" 流程)

阶段 功能说明(类比造车) 指令示例 生成文件格式
预编译 将头文件内容拷贝到源文件中(类比:准备所有造车材料,如矿石) gcc -E main.c -o main.i .i
编译 将高级语言转换为汇编语言(类比:将矿石加工为钢铁、塑料) gcc -S main.c -o main.s .s
汇编 将汇编语言转换为机器语言(二进制目标文件)(类比:将钢铁加工为车架、玻璃) gcc -c main.c -o main.o .o/.obj
链接 将多个目标文件和库文件组合为可执行文件(类比:将车架、玻璃组装为完整汽车) gcc main.o add.o max.o -o main 可执行文件(ELF 格式)

3. 简化编译与多文件编译

  • 简化编译(一次完成四阶段):
    • 格式:gcc -o 可执行文件名 源文件名
    • 示例:gcc -o main main.cgcc -o hello hello.c
  • 多文件编译:
    • 格式:gcc -o 可执行文件名 源文件1.c 源文件2.c ...
    • 示例:gcc -o main main.c add.c max.c(将 main.c、add.c、max.c 编译并链接为 main)

4. 头文件引用

  • 尖括号<>:引用系统库头文件,库文件存放于/usr/include目录(示例:#include <stdio.h>
  • 双引号"":引用用户自定义头文件(示例:#include "add.h"
  • 注意:调用其他文件中的自定义函数时,主函数或 makefile 中需声明该函数,否则会报错 "函数无声明或定义"

5. makefile 工具

  • 作用**:管理工程,实现自动化编译,无需手动逐个编译多个文件**

  • 文件名:makefileMAKEFILE(首字母大写也可)

  • 核心操作:

    • 执行编译:make(按 makefile 中的规则编译工程)
    • 清理编译产物:make clean(删除编译生成的.o文件和可执行文件)
  • 格式要求:

    • 核心规则:目标: 依赖文件\n\t命令(注意:命令前必须加tab键,不可用空格替代)

      all: main # 最终生成的可执行文件是main
      main: main.o add.o max.o # main依赖main.o、add.o、max.o
      gcc main.o add.o max.o -o main # 链接命令
      main.o: main.c # main.o依赖main.c
      gcc -c main.c -o main.o # 汇编命令
      add.o: add.c # add.o依赖add.c
      gcc -c add.c -o add.o
      max.o: max.c # max.o依赖max.c
      gcc -c max.c -o max.o
      clean: # 清理规则
      rm -rf *.o main # 删除所有.o文件和main可执行文件

  • 额外功能:可一次生成多个可执行文件,按需定义多个目标即可

七、系统基础与硬件交互

1. 硬件组成与交互

  • 核心硬件:CPU、硬盘(持久存储)、内存(临时存储)、输入 / 输出设备
  • 总线类型:
    • 地址总线:用于硬件寻址
    • 数据总线:用于传输数据
    • 控制总线:用于传输控制信号
  • 程序运行流程:
    1. 编译后的文件存储在硬盘中(持久存储,断电数据不丢失)
    2. 运行程序时,系统通过数据总线将文件拷贝到内存中
    3. CPU 从内存中读取机器指令并执行
  • 内存特性:断电后数据消失,仅运行中的程序会存于内存,编译 / 未编译的文件默认存于硬盘

2. 基础概念

  • 裸机:未安装操作系统的电脑
  • 指令:让计算机完成特定操作的命令
  • 命令解释器:负责解析用户输入的命令,bash、shell 均为命令解释器,一个终端对应一个命令解释器
  • 内部命令与外部命令区别:
    • 内部命令(如cd):shell 内置,无需创建子进程,效率高;可修改当前 shell 进程环境(如切换目录)
    • 外部命令(如gcc):独立程序文件,执行时需创建子进程,无法影响父进程环境

八、帮助手册(man)

  • 功能:查看命令、库函数、系统调用的帮助文档
  • 分类使用:
    • man 1 命令:查看普通命令的帮助(示例:man 1 ls
    • man 2 库函数:查看库函数的帮助(示例:man 2 printf
    • man 3 系统调用:查看系统调用的帮助(示例:man 3 open
相关推荐
HLC++9 小时前
Linux的进程间通信
android·linux·服务器
华清远见IT开放实验室10 小时前
实验室建设案例 | 石家庄科技信息职业学院嵌入式实验室——从底层硬件到系统应用,一所应用型高校的嵌入式人才培养这样落地
linux·arm开发·stm32·嵌入式硬件·高校·实验室建设
groundhappy13 小时前
idalib安装和codex ida-mcp配置
linux·开发语言·python
通信小小昕13 小时前
Ubuntu 26.04 中文输入法安装
linux·运维·ubuntu
张小姐的猫14 小时前
【Linux】网络编程 —— HTTP协议(上)
linux·运维·服务器·网络·http·单例模式·策略模式
栩栩云生15 小时前
AI 写代码犯的错,早被写进了错题集
linux·安全·ai编程
imc.1116 小时前
linux基础IO
linux·运维·服务器
BelongPanda18 小时前
Linux Nginx 纯手动 Let‘s Encrypt 泛域名证书配置教程
linux·nginx
酷可达拉斯18 小时前
Linux操作系统-shell编程(0)
linux·运维·服务器·python·云计算
2301_7779983418 小时前
Linux中断机制:操作系统如何高效运行
linux·运维·服务器