Linux系统个人总结

📅 2026/8/1 2:22:04 👁️ 阅读次数 📝 编程学习
Linux系统个人总结

一、Linux目录结构

Linux的目录结构遵循FHS(文件系统层次结构标准),核心特点是一切从根(/)开始,采用树状倒挂结构。如图1所示。、

图 1

  • 系统启动必看(别乱动)

/boot:存放内核(vmlinuz)、引导加载程序(grub)等。如果误删,系统将无法启动。

/etc:系统神经中枢。存放所有系统级配置文件(如网络、软件源、用户密码)。大部分系统设置都在这里修改。

/sys:内核的虚拟映射。存放内核参数和设备信息,用于动态修改内核行为(如电源管理)。

  • 命令与库文件(软件运行依赖)

/bin 与 /sbin:早期存放基础命令(如 ls、cp)和系统管理命令(如 fdisk)。现代发行版(如CentOS 7+)中,它们通常是指向 /usr/bin 的软链接。

/lib 与 /lib64:存放系统基础库文件(类似Windows的DLL文件)。同样,现代系统通常指向 /usr/lib。

  • 用户自己的地盘(你的操作区)

/home:普通用户的家目录。比如用户 alice 的数据在 /home/alice,对应快捷符号 ~。

/root:超级管理员(root)的家目录。出于安全考虑,独立放在根下,不混入普通用户区。

  • 数据挂载点(接入外部存储)

/mnt 与 /media:临时挂载点。/mnt 用于手动挂载(如修复系统),/media 用于自动挂载(如插入U盘)。

/dev:设备文件目录。所有硬件(硬盘、鼠标、终端)都映射为这里的文件(如 /dev/sda 代表第一块硬盘)。

  • 动态与临时数据(关机即消失)

/tmp:临时文件存放地。系统重启后通常清空,任何人都可读写,但不能存放重要数据。

/run:存放系统启动以来的运行时数据(如进程PID)。关机即消失。

  • 庞大的软件生态

/usr:Unix系统软件资源,这是最大的目录。绝大多数的用户应用程序和文件都安装在这里,相当于Windows的 Program Files。

/usr/bin:用户级命令。

/usr/sbin:系统管理命令。

/usr/lib:库文件。

/usr/local:手动编译安装的软件默认路径(独立于包管理器)。

/usr/share:共享数据(文档、图标、字体等)。

/opt:大型第三方软件安装目录(如Oracle、Google Chrome),通常以独立文件夹存在。

  • 虚拟与进程信息

/proc:内存中的虚拟文件系统。存放当前运行进程和内核状态信息(如 /proc/cpuinfo 查看CPU)。不占硬盘空间。

  • 动态数据仓库(系统的“工作日志室”)

/var:存放系统运行过程中会持续变化的数据(variable data),如日志、缓存、队列等。它与 /usr(静态程序)和 /etc(静态配置)形成互补,让 /usr 可以被挂载为“只读”以增强安全性。以下是最常用子目录:

/var/log/:系统日志大本营。记录系统和所有服务(如Nginx、MySQL)的运行状态、错误信息,是运维排查问题的第一站。常见文件有 syslog、auth.log、dmesg 等。

/var/spool/:任务队列池。存放等待被处理的数据,如待发送的邮件(/var/spool/mail/)、打印任务(/var/spool/cups/)等。

/var/cache/:应用程序缓存。存放可被重新生成的临时缓存数据,如 apt 的软件包缓存(/var/cache/apt/),清理后不影响系统运行。

/var/lib/:程序状态数据库。存放应用程序需要永久保存的状态信息,如 MySQL 数据库文件(/var/lib/mysql/)、RPM 包数据库等。

/var/run/:运行时数据。存放系统启动以来的进程PID文件等。现代系统中,该目录通常是指向 /run 的软链接。

/var/lock/:资源锁文件。当某个程序占用硬件或文件资源时,在这里创建锁文件,防止其他程序冲突访问。

二、Linux基础命令

  • 简单命令
  1. pwd:显示当前所在的完整路径。
  2. ls:列出目录内容。
  1. -l:显示详细信息
  2. -a:显示隐藏文件
  3. -h:将文件的大小显示为简单易懂的单位
  4. 空格+路径:查看对应目录
  1. cd:切换目录。.. 返回上级目录,~ 返回用户主目录,- 返回上一个目录,/返回根目录。
  2. mkdir:创建目录。
  1. 新建单个目录:mkdir 目录名
  2. 一次性新建多个目录:mkdir 目录1 目录2 目录3
  3. -p:递归创建多层嵌套目录,目录已存在不报错,工作最常用
  4. -m:创建同时直接指定目录权限
  1. touch:创建空文件或更新文件时间戳。
  1. 创建空文件:touch file.txt

如果 file.txt 不存在,会新建一个空文件;如果已存在,则只更新其时间戳。

  1. 一次创建多个文件:touch a.txt b.txt c.txt
  2. 使用 -t 指定时间:touch -t 202601311200 file.txt

将 file.txt 的时间戳改为 2026年1月31日 12:00

  1. 使用 -r 参考其他文件:touch -r ref.txt file.txt

让 file.txt 的时间戳和 ref.txt 保持一致

  1. rmdir:删除空目录。
  1. 删除单个空目录:rmdir 目录名
  2. 删除多个空目录:rmdir 目录1 目录2 目录3
  3. 核心硬性规则:只能删除空目录,非空目录无法删除
  4. -p:递归删除多层嵌套空目录
  1. rm:删除文件或目录。
  1. 删除单个文件: rm 文件名
  2. 删除多个文件: rm 文件1 文件2 文件3
  3. -r: 递归删除,用于删除目录及其内部所有内容
  4. -f: 强制删除,不提示确认,忽略不存在的文件
  5. -i: 交互式删除,每次删除前都询问确认
  1. cp:复制文件或目录。
  1. 复制文件:cp 源文件 目标文件
  2. 复制文件到目录:cp 源文件 目标目录/
  3. -r:递归复制,用于复制目录(必加)
  4. -i:交互式复制,目标存在时询问是否覆盖
  5. -f:强制复制,目标存在时直接覆盖不询问
  6. -p:保留文件属性(权限、时间戳等)
  7. 使用示例:
  • 复制文件并重命名:cp original.txt backup.txt

将 original.txt 复制为 backup.txt

  • 复制文件到目录cp file.txt /home/user/Documents/
  • 复制整个目录(必须加 -r)cp -r project/ project_backup/

将 project 目录完整复制到 project_backup

  • 复制多个文件到目录cp a.txt b.txt c.txt target_dir/
  • 保留文件属性复制cp -p config.conf config_backup.conf

复制的文件保持原权限和修改时间不变

  • 使用通配符批量复制cp *.log logs/

将所有 .log 文件复制到 logs 目录

  1. mv:移动/重命名文件或目录。
  1. 重命名:mv 原文件名 新文件名
  2. 移动文件到目录:mv 源文件 目标目录/
  3. 移动目录:mv 源目录 目标目录/
  4. -i:交互式移动,目标存在时询问是否覆盖
  5. -f:强制移动,目标存在时直接覆盖不询问
  6. -u:只移动比目标文件更新的文件(增量更新)
  7. 使用示例:
  • 重命名文件mv old_name.txt new_name.txt
  • 重命名目录mv project/ project_backup/
  • 移动文件到其他目录mv file.txt /home/user/Documents/
  • 移动多个文件到目录mv a.txt b.txt c.txt target_dir/
  • 移动目录mv myfolder/ /backup/

将整个 myfolder 目录移动到 /backup/ 下

  • 结合通配符批量移动mv *.log logs/

移动所有 .log 文件到 logs 目录

  • mv file_{1..10}.txt archive/

移动file1.txt~file10.txt文件到 archive 目录

  1. cat、less、more:查看文件内容。

对比维度

cat

more

less

显示方式

一次性输出全部内容

分屏显示,按空格翻页

分屏显示,按空格翻页

向上翻页

无法翻页

有限支持(按 b,但依赖版本)

流畅支持(按 b 或 k)

向下翻页

无法翻页

按空格/回车

按空格/回车

跳转到开头/结尾

按 g / G

搜索功能

支持(/关键词)

支持(/ 和 ? 双向搜索)

查看时编辑

按 v 进入编辑器

文件加载方式

一次性全部读入内存

按需读取

按需读取(大文件更省内存)

适合文件大小

小文件(几十行)

大文件

大文件(包括 GB 级)

是否适合管道输入

可以

可以

可以

退出方式

自动结束

按 q 退出

按 q 退出

  1. head、tail:查看文件开头,结尾内容(默认10行)。tail -f 文件名可实时监控日志输出。
  2. find:搜索文件。
  1. 按文件名搜索

参数

作用

示例

-name

精确匹配文件名(区分大小写)

find . -name "test.txt"

-iname

忽略大小写匹配

find . -iname "*.jpg"

-regex

使用正则表达式匹配完整路径

find . -regex ".*\.txt$"

  1. 按文件类型搜索

参数

类型

示例

-type f

普通文件

find . -type f

-type d

目录

find . -type d

-type l

符号链接

find . -type l

-type b

块设备文件

find /dev -type b

-type c

字符设备文件

find /dev -type c

  1. grep:搜索文件内容中的文本模式。

参数

作用

示例

-i

忽略大小写

grep -i "error" file.txt

-v

反向匹配(显示不包含模式的行)

grep -v "#" config.conf(过滤注释行)

-n

显示行号

grep -n "error" app.log

-c

统计匹配行数

grep -c "error" app.log

-r / -R

递归搜索目录

grep -r "TODO" ./src/

-l

只输出匹配的文件名

grep -l "error" *.log

-L

只输出不匹配的文件名

grep -L "SUCCESS" *.log

-o

只输出匹配的部分

grep -o "[0-9]\{3\}"

-A N

显示匹配行及其后 N 行(After)

grep -A 5 "error" app.log

-B N

显示匹配行及其前 N 行(Before)

grep -B 5 "error" app.log

-C N

显示匹配行及前后各 N 行(Context)

grep -C 3 "error" app.log

-e

指定多个匹配模式

grep -e "error" -e "warning" app.log

-f

从文件读取匹配模式

grep -f patterns.txt app.log

-E

扩展正则表达式(同 egrep)

grep -E "error|fatal" app.log

-F

固定字符串匹配(同 fgrep),不解析正则

grep -F ".*" file.txt

  1. clear:清除终端屏幕上的所有内容,将光标移动到左上角。
  2. which:查找命令位置。

-a:显示所有匹配的路径(可能有多个版本)。示例:which -a python

  1. sed:文本替换、删除、插入。
  1. 核心语法:sed [选项] '动作' 文件名
  2. 最常用场景:

场景

命令

替换文本

sed 's/旧/新/g' file.txt

直接修改文件

sed -i 's/旧/新/g' file.txt

删除行

sed '/关键词/d' file.txt

删除空行

sed '/^$/d' file.txt

打印指定行

sed -n '5,10p' file.txt

插入行

sed '3i\插入内容' file.txt

  1. 核心参数

参数

作用

-i

直接修改文件(不输出到屏幕)

-n

取消默认输出,配合 p 只打印匹配行

-e

执行多个 sed 命令

-r / -E

使用扩展正则表达式

  1. 常用示例
  • 替换文件中的所有 foo 为 bar(输出到屏幕,不改文件)

sed 's/foo/bar/g' file.txt

  • 直接修改文件

sed -i 's/foo/bar/g' file.txt

  • 替换行首的 # 注释

sed -i 's/^#//' config.conf

  • 删除包含 "debug" 的行

sed '/debug/d' app.log

  • 删除空行

sed '/^$/d' file.txt

  • 打印第 5 到第 10 行

sed -n '5,10p' file.txt

  • 在第 3 行后面插入一行

sed '3i\new line' file.txt

  • 替换指定第 2 行中的内容

sed '2s/old/new/' file.txt

  • 组合多个操作

sed -e 's/foo/bar/g' -e '/^$/d' file.txt

  1. awk:字段提取、计算、格式化报表。
  1. 核心语法:awk '模式 { 动作 }' 文件名
  2. 核心概念:

$0:整行内容

$1:第 1 列

$2:第 2 列

$NF:最后一列

NR:当前行号

NF:当前行的字段数(列数)

FS:字段分隔符(默认空格/制表符)

  1. 最常用场景

场景

命令

打印指定列

awk '{print $1, $3}' file.txt

指定分隔符

awk -F',' '{print $2}' data.csv

条件过滤

awk '$3 > 100 {print $0}' file.txt

统计行数

awk 'END {print NR}' file.txt

求和

awk '{sum += $1} END {print sum}' file.txt

格式化输出

awk '{printf "%-10s %s\n", $1, $2}' file.txt

三、小技巧

  • 管道符 |:将前一个命令的输出,作为后一个命令的输入。这是组合命令 的神器。

history | grep "ssh" # 在命令历史中搜索ssh相关记录

  • 重定向:

>:覆盖写入文件(如 echo "hello" > file.txt)。

>>:追加到文件末尾。

  • 快捷键:

Tab:自动补全路径或命令(救命技能)。

Ctrl + C:终止当前运行的程序。

Ctrl + D:退出当前终端。

Ctrl + R:逆向搜索历史命令(输入关键词就能找到)。

  • 后台运行:在命令后加 & 可放入后台,如 python script.py &。用 jobs 查看后台任务,用 fg 调回前台。