Skip to content

Linux

概述

简介

  • 开源、免费的操作系统内核。广泛用于服务器、嵌入式设备、云计算等场景。

发展历史

  1. Unix 的诞生

    • 时间:1969年
    • 地点:贝尔实验室(Bell Labs)
    • 起源:“Unix”最初是作为“Multics”项目的替代品而诞生,后来成为现代操作系统的重要基石。
  2. 关键人物

    • Andrew S. Tanenbaum(谭宁邦)

      • 开发了 Minix 操作系统(1984年)
      • 用于教学目的,强调操作系统原理的学习
      • Minix 是一个类 Unix 系统,但规模较小,适合学习使用
    • Richard Stallman(斯托曼)

      • 发起 GNU 项目(GNU = "GNU's Not Unix")

      • 目标:创建一个完全自由、开源、功能完整的 Unix-like 操作系统

      • 推动开发了许多重要工具:Bash(Shell)、GCC(C语言编译器)、Gawk(文本处理工具)、Emacs(编辑器)

      • 提出 GPL 协议(通用公共许可协议)

        • 规则:
          1. 所有软件必须开源,允许获取和修改源代码。
          2. 修改后的版本也必须以开源方式发布(“传染性”)。
      • Linus Torvalds(托沃兹)

        • 1991年,开发了 Linux 内核
        • 原因:对 Minix 不满意,希望拥有更强大、可定制的操作系统
        • Linux 内核是基于 Unix 设计哲学,但它是独立开发的
    人物贡献关键成果
    谭宁邦教学驱动Minix(小型类 Unix 系统)
    斯托曼开源理念GNU 项目、Bash、GCC、GPL 协议
    托沃兹技术实现Linux 内核(填补 GNU 缺失的部分)
  3. Linux 与 GNU 的结合

    • Linux 内核 + GNU 工具链 = 完整的自由操作系统
    • 因此,“Linux”常被误称为“Linux 系统”,实际上应为“GNU/Linux 系统
    • 例如:Ubuntu、CentOS、Fedora 都是基于 Linux 内核 + GNU 工具构建的发行版
  4. 历史时间线

    • 1969:Unix 诞生(贝尔实验室)
    • 1984:Minix 出现(谭宁邦)
    • 1984:GNU 项目启动(斯托曼)
    • 1991:Linux 内核发布(托沃兹)

💡 最终结果
Linux 内核 + GNU 工具 = 完整的自由操作系统
这就是今天我们使用的各种 Linux 发行版的基础。

系统组成

  • 内核(Kernel):核心,管理硬件与进程。
  • Shell:命令行解释器。
  • 文件系统:组织和管理文件。
  • 应用程序:用户使用的各种软件。

发行版分类

发行版家族代表发行版特点适用场景
RHEL 系RHEL、Rocky、AlmaLinux企业级稳定,长期支持服务器、生产环境
CentOS StreamRHEL 上游(滚动预览版)开发/测试
Fedora新技术试验田开发者、尝鲜
Debian 系Debian稳定、自由软件通用服务器
Ubuntu用户友好,生态完善桌面、云、开发
Kali Linux预装安全工具渗透测试
SUSE 系openSUSE / SLES强大管理工具(YaST)企业、HPC
国产系麒麟、红旗国产化替代政企、信创

常用操作命令

文件和目录操作

命令功能说明与常用参数
ls列出目录内容
-l:长格式(显示权限、所有者、大小、时间等)
-a:显示隐藏文件(以 . 开头)
-h:配合 -l 以易读单位(KB/MB)显示大小
-t:按修改时间排序(最新在前)
cd切换当前工作目录
cd ~cd:回到当前用户主目录
cd ..:返回上一级目录
cd -:切换到上一个工作目录
cd /path/to/dir:进入指定目录
pwd显示当前完整路径(Print Working Directory)
-P:显示实际物理路径(不包含符号链接)
mkdir创建目录
-p:递归创建多层目录(如 mkdir -p a/b/c
-v:显示创建过程(verbose)
• 示例:mkdir -pv project/{src,bin,docs}
touch创建空文件或更新文件的时间戳(访问/修改时间)
• 可一次创建多个文件:touch file1 file2
cp复制文件或目录
-r-R:递归复制整个目录
-i:覆盖前提示确认(交互式)
-v:显示复制过程
• 示例:cp -rv /etc/nginx ./backup/
mv移动文件/目录 或 重命名
-i:覆盖前提示
-v:显示操作过程
• 示例:
 重命名:mv old.txt new.txt
 移动:mv *.log /var/log/
rm删除文件或目录
-r:递归删除目录及其内容
-f:强制删除,不提示(慎用!)
-i:删除前确认(安全模式)
⚠️ 警告:rm -rf / 会删除整个系统!
vi / vim强大的文本编辑器
• 基本退出命令:
:q — 退出(未修改时)
:q! — 强制退出,放弃修改
:wq:x — 保存并退出
:w filename — 另存为
• 编辑模式:按 i 进入插入模式,按 Esc 返回命令模式
cat查看小文件内容(concatenate)
cat file1 file2:合并输出多个文件

查询与辅助

命令说明推荐场景
command --help显示命令的简易帮助信息(短格式)
例如:cat --help
快速查看常用参数,适合初学者
man command查看命令的 手册页(manual page),包含详细说明、选项、示例等
例如:man cat
最常用、最全面的帮助方式
info command提供比 man 更详细的文档,支持超链接和导航
例如:info cat
学习复杂工具(如 gccgdb)时推荐使用
help command仅适用于 shell 内置命令(如 cd, echo, alias 等)
例如:help cd
查询 Bash 内置命令时使用

系统监控与进程管理

命令主要功能特点典型用法与说明
ps显示当前进程的静态快照一次性输出,适合脚本ps aux:查看所有用户的所有进程(最常用)
ps -ef:显示完整格式,包含父进程 ID(PPID)
ps aux | grep nginx:查找特定进程
top动态显示 CPU、内存、进程排名交互式,实时刷新(默认 3 秒)• 直接输入 top 进入交互界面
• 按 P 按 CPU 排序,M 按内存排序
• 按 q 退出,k 可直接 kill 进程
kill向进程发送信号(如终止)默认发送 SIGTERM(15)kill 1234:优雅终止 PID 为 1234 的进程
kill -9 1234:强制终止(SIGKILL,慎用)
df显示磁盘分区使用情况查看存储空间df -h:以人类可读单位(GB/MB)显示
du显示目录/文件占用空间定位大文件或目录du -sh /var/log:汇总显示 /var/log 总大小
du -h --max-depth=1 /home:查看 /home 下各子目录大小
du -ah /path | sort -rh | head -n 10:找出最大的 10 个文件/目录

进阶实用命令

命令功能说明
wc统计文件的行数、单词数、字节数(-l, -w, -c
sort对文件内容按行排序(常用于配合 uniq
uniq去除连续重复的行;加 -c 可统计重复次数
⚠️ 注意:必须先排序才能完全去重(通常与 sort 联用)
dos2unix转换 Windows(DOS)格式文本为 Unix 格式(处理换行符 \r\n\n
diff / vimdiff比较两个文件差异;vimdiff 提供可视化对比
which / whereis查询命令的可执行路径(which)或相关文件位置(whereis
date查看或设置系统时间
alias查看或设置简短别名,提升效率。示例:alias ll='ls -l'
tail查看文件末尾内容(10 行)
tail -n 20 file.log
tail -f file.log:实时监控

打包

tar命令参数含义
-ccreate:创建新的归档文件
-xextract:从归档中解压文件
-tlist:列出归档中的内容(不解压)
-ffile:指定归档文件名(必须放在最后,后面紧跟文件名)
-vverbose:显示详细过程(可选,方便查看进度)
-z用 gzip 压缩或解压(对应 .tar.gz.tgz
-j用 bzip2 压缩或解压(对应 .tar.bz2
-J用 xz 压缩或解压(对应 .tar.xz
格式打包压缩命令解压命令
.tartar -cvf file.tar dir/tar -xvf file.tar
.tar.gz / .tgztar -czvf file.tar.gz dir/tar -xzvf file.tar.gz
.tar.bz2tar -cjvf file.tar.bz2 dir/tar -xjvf file.tar.bz2
.tar.xztar -cJvf file.tar.xz dir/tar -xJvf file.tar.xz

四剑客 grep/sed/awk/find

1. grep —— 文本搜索过滤器

主要用途:在文件或输入流中按行匹配正则表达式,快速筛选内容。
核心特点:高效、支持正则、常用于日志分析。

常用参数

  • -i:忽略大小写
  • -v:反向匹配(显示不匹配的行)
  • -r-R:递归搜索子目录
  • -n:显示匹配行的行号
  • -l:只列出包含匹配内容的文件名

典型示例

bash
# 在 /var/log 及其子目录中递归查找包含 "error" 的行
grep -r "error" /var/log
# 过滤掉以 # 开头的注释行,仅显示有效配置
grep -v "^#" config.conf
# 在当前目录所有 .py 文件中搜索 "TODO",并显示所在行号
grep -n "TODO" *.py

2. sed —— 流式文本编辑器

主要用途:对文本进行非交互式替换、删除、插入等操作,适合脚本自动化。
核心特点:逐行处理、支持正则替换、可直接修改文件。

常用参数

  • -i:直接修改原文件(慎用!)
  • -n:抑制默认输出(需配合 p 打印)
  • s/old/new/g:全局替换(g 表示一行内全部替换)

典型示例

bash
# 将 file 中所有 "foo" 替换为 "bar",输出到终端(不改原文件)
sed 's/foo/bar/g' file
# 直接删除 file 的第一行(原文件被修改)
sed -i '1d' file
# 仅打印 log 中包含 "ERROR" 的行(`-n` 关闭自动输出,`p` 显式打印匹配行)
sed -n '/ERROR/p' log

3. awk —— 结构化文本处理器

主要用途:按列处理数据(如日志、CSV),支持条件判断、计算和格式化输出。
核心特点:类似轻量级编程语言,适合生成报表或提取字段。

常用参数/变量

  • -F',':指定字段分隔符(如逗号)
  • $1, $2...:表示第1、2…列
  • NR:当前行号;NF:当前行字段数
  • BEGIN{} / END{}:预处理和后处理块

典型示例

bash
# 打印每行的第一个字段(如 IP 地址或时间戳)
awk '{print $1}' file
# 以逗号分隔,筛选第二列数值大于 100 的行(适用于 CSV 数据分析)
awk -F',' '$2 > 100' data.csv
# 输出文件前 5 行(NR 是行号)
awk 'NR<=5' file

4. find —— 文件系统查找工具

主要用途:根据名称、类型、时间、大小等条件查找文件或目录。 核心特点:功能强大、支持复杂组合条件、可联动其他命令执行操作。

常用参数

  • -name "*.txt":按文件名匹配(支持通配符)
  • -type f(文件)或 -type d(目录)
  • -mtime +7:7 天前修改过的文件
  • -size +10M:大于 10MB 的文件
  • -exec command {} +:对找到的文件批量执行命令

典型示例

bash
# 在当前目录及子目录中查找所有 .log 文件
find . -name "*.log"
# 删除 /tmp 中 7 天前 修改过的文件(⚠️ 谨慎使用 -delete!)
find /tmp -mtime +7 -delete
# 找到所有普通文件,并统一设置权限为 644(+ 表示高效批量传参)
find . -type f -exec chmod 644 {} +

💡 组合技巧: 这四个命令经常串联使用,例如:
find . -name "*.log" -print0 | xargs -0 grep "ERROR" | awk '{print $1, $4}'
实现:查找日志 → 筛选错误 → 提取关键字段。

网络

命令用途
ping测试网络连通性
curl测试 HTTP 接口
dig / nslookupDNS 查询

权限与用户管理

命令用途说明常用示例
chmod修改文件或目录的权限(读 r、写 w、执行 x)chmod 755 script.sh
→ 所有者可读写执行,组和其他人可读执行
chmod +x file
→ 给文件添加执行权限
chown修改文件或目录的所有者(可同时改所属组)chown alice file.txt
→ 将文件所有者改为 alice
chown alice:dev file.txt
→ 所有者改为 alice,所属组改为 dev
chgrp修改文件或目录的所属组chgrp developers project/
→ 将 project/ 目录的所属组改为 developers
sudo以超级用户(root)或其他用户身份执行命令sudo systemctl restart nginx
→ 以 root 权限重启服务
sudo -u bob whoami
→ 以用户 bob 身份执行 whoami
su切换到其他用户(默认切换到 root)su -
→ 切换到 root 并加载其环境
su - alice
→ 切换到用户 alice

附录

附1:$()`` 对比

特性$()``
可读性高(括号匹配清晰)低(反引号易与单引号混淆)
嵌套支持直接嵌套: $ (cmd1 $ (cmd2))需转义
转义处理简单(内部双引号无需特殊处理)复杂(内部反引号需转义)
POSIX 标准✅ 推荐⚠️ 兼容但过时

Released under the MIT License.