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 + -n[kMG]+大于/-小于,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
相关推荐
lbb 小魔仙2 小时前
Steam Deck OLED 拆解与评测:Valve 对 Linux 掌机的又一次精进
linux·运维·服务器
一枚正在学习的小白2 小时前
prometheus监控redis
linux·运维·服务器·redis·prometheus
白帽子凯哥哥2 小时前
Misc题目中图片隐写和流量分析的详细工具使用技巧
linux·运维·web安全·网络安全·docker·渗透测试
lzjava20242 小时前
Python中的模块和包
linux·开发语言·python
大山同学2 小时前
薄膜透光度原理
linux·运维·人工智能
lifewange2 小时前
Linux 日志查看核心命令(动态跟踪 + 文件查阅,全覆盖工作常用)
linux·运维·服务器
JiMoKuangXiangQu2 小时前
Linux 网络:RPS 简介
linux·网络·rps 和 rfs
Awkwardx2 小时前
Linux网络编程—五种IO模型与非阻塞IO
linux·服务器·网络
小鹏linux3 小时前
【linux】进程与服务管理命令 - pkill
linux·运维·服务器