返回文章列表

Linux 学习笔记(二):进阶操作与系统管理

2026年6月26日14 分钟阅读

接上一篇 [[Linux 学习笔记(一):基础入门]],本篇涵盖文本处理、系统监控、Vim 编辑器和网络工具。


第三周:文本进阶

掌握文本处理的进阶工具,数据处理效率翻倍。

3.1 sort / uniq

sort — 排序

bash
1sort file               # 按字母排序
2sort -n file            # 按数字排序
3sort -r file            # 逆序
4sort -k 2 file          # 按第 2 列排序
5sort -t',' -k 3 file    # 指定分隔符,按第 3 列排序
6sort -u file            # 排序并去重

uniq — 去重统计

uniq 必须配合 sort 使用(只去除连续重复行)。

bash
1sort file | uniq         # 全局去重
2sort file | uniq -c      # 统计每行出现次数(最常用)
3sort file | uniq -d      # 只显示重复的行
4sort file | uniq -u      # 只显示不重复的行

3.2 cut / tr

cut — 按列切割

bash
1cut -d',' -f1 file.csv       # 逗号分隔,取第 1 列
2cut -d':' -f1,3 /etc/passwd  # 冒号分隔,取第 1、3 列
3cut -c1-5 file               # 取每行前 5 个字符

tr — 字符替换与删除

bash
1echo "hello" | tr 'a-z' 'A-Z'      # 小写转大写
2echo "a,b,c" | tr ',' '\t'         # 逗号变制表符
3echo "hello 123" | tr -d '0-9'     # 删除所有数字
4echo "a  b   c" | tr -s ' '        # 压缩连续空格

3.3 diff — 文件对比

bash
1diff file1 file2          # 显示差异
2diff -u file1 file2       # 统一格式(更易读,补丁文件格式)
3diff -r dir1 dir2         # 递归对比两个目录

3.4 tee — 同时输出到屏幕和文件

bash
1命令 | tee file         # 显示并写入(覆盖)
2命令 | tee -a file      # 显示并追加

3.5 find — 查找文件

bash
1find 路径 -name "pattern"          # 按文件名
2find 路径 -type f                  # 只找普通文件
3find 路径 -type d                  # 只找目录
4find 路径 -size +100M              # 大于 100MB
5find 路径 -size -1K                # 小于 1KB
6find 路径 -mtime -7                # 7 天内修改
7find 路径 -empty                   # 空文件或目录
8find 路径 -name "*.tmp" -delete    # 查找并删除
9find 路径 -name "*.log" -exec ls -lh {} \;  # 查找并执行

3.6 xargs — 参数传递

将 stdin 转为命令行参数,常与 find 配合。

bash
1find . -name "*.tmp" | xargs rm -f              # 查找并删除
2find . -name "*.txt" | xargs -I {} cp {} /bak/  # 查找并复制
3cat urls.txt | xargs -n 1 curl -O               # 逐行读取并下载

3.7 压缩与解压

tar — 归档与压缩

参数作用
-c创建
-x解压
-v显示过程
-f指定文件名(必须放最后
-zgzip 压缩
-jbzip2 压缩
-C解压到指定目录
bash
1# 压缩
2tar -cvf a.tar files              # 仅打包
3tar -czvf a.tar.gz files          # 打包 + gzip 压缩
4tar -cjvf a.tar.bz2 files         # 打包 + bzip2 压缩
5
6# 解压
7tar -xvf a.tar                    # 解包
8tar -xzvf a.tar.gz                # 解压 .tar.gz
9tar -xjvf a.tar.bz2               # 解压 .tar.bz2
10tar -xzvf a.tar.gz -C /target     # 解压到指定目录
11tar -xzvf a.tar.gz --wildcards "*.txt"   # 只解压特定文件
12tar -tzvf a.tar.gz                # 查看压缩包内容(不解压)

zip / unzip

bash
1# 压缩
2zip test.zip a.txt b.txt          # 压缩文件
3zip -r test.zip dir a.txt         # 递归压缩
4zip -r test.zip dir -x "*.log"    # 排除 .log 文件
5
6# 解压
7unzip test.zip                    # 解压到当前目录
8unzip test.zip -d /target         # 解压到指定目录
9unzip -l test.zip                 # 查看内容(不解压)

练一练 1

  1. find 查找 /etc 目录下所有名称以 .conf 结尾的文件
  2. /tmp 下所有 .log 文件通过一条命令查找并删除
  3. 统计 /var/log/syslog(或 /var/log/messages)中每行出现次数最多的前 5 行
  4. cut -d':' -f1 /etc/passwd 提取所有用户名
  5. 将当前目录所有 .txt 文件打包为 backup.tar.gz

第四周:系统入门

学会查看系统状态、管理进程和服务。

4.1 df / du — 磁盘空间

bash
1df -h          # 各分区占用情况(人类可读)
2df -i          # 查看 inode 使用情况
3df -T          # 显示文件系统类型
4
5du -sh dir     # 目录总大小
6du -h --max-depth=1    # 各子目录大小
7du -sh * | sort -rh    # 按大小排序

4.2 ps — 查看进程

bash
1ps -ef                # 所有进程(标准格式)
2ps aux                # 所有进程(BSD 格式)
3ps -ef | grep 关键词   # 过滤指定进程
4ps aux --sort=-%mem   # 按内存使用排序
5ps aux --sort=-%cpu   # 按 CPU 使用排序
字段含义
UID所属用户
PID进程 ID
PPID父进程 ID
CCPU 占用百分比
STIME启动时间
TTY终端序号(? 后台进程)
TIME累计 CPU 时长
CMD程序路径或命令

4.3 kill / killall — 终止进程

bash
1kill PID           # 温和终止(SIGTERM)
2kill -9 PID        # 强制杀死(SIGKILL)
3kill -l            # 列出所有信号
4killall 进程名      # 按名称终止所有匹配进程

4.4 top — 系统监控

bash
1top   # 实时进程监控,按 q 退出

交互快捷键:

按键功能
M按内存排序
P按 CPU 排序
T按时间排序
i隐藏闲置进程
c显示完整命令
1展开 CPU 核心
h帮助

启动参数:

bash
1top -p PID          # 只看指定进程
2top -d 2            # 每 2 秒刷新
3top -u 用户名       # 只看某用户进程
4top -b -n 3 > out   # 批次模式输出 3 次

4.5 systemctl — 服务管理

bash
1systemctl start 服务名           # 启动
2systemctl stop 服务名            # 关闭
3systemctl restart 服务名         # 重启
4systemctl reload 服务名          # 热加载配置
5systemctl status 服务名          # 查看状态
6systemctl enable 服务名          # 开机自启
7systemctl disable 服务名         # 关闭自启
8systemctl is-enabled 服务名      # 检查自启状态
9systemctl list-units --type=service   # 列出所有服务
10systemctl list-unit-files             # 列出所有单元
11systemctl daemon-reload               # 重载 systemd

常见内置服务: sshd(SSH)、NetworkManager(网络)、ufw(防火墙)

4.6 journalctl — 系统日志

bash
1journalctl -xe                    # 最近日志(-x 详情,-e 跳末尾)
2journalctl -u nginx               # 只看某服务
3journalctl -u sshd --since "1 hour ago"  # 按时间过滤
4journalctl -f                     # 实时跟踪
5journalctl --disk-usage           # 日志占用磁盘
6journalctl --vacuum-size=200M     # 清理日志保留 200M
7journalctl -p err -b              # 本次启动的错误日志

4.7 history — 命令历史

bash
1history           # 显示所有已执行命令
2!n                # 重复执行第 n 条
3!!                # 重复上一条
4!命令前缀          # 自动匹配执行

4.8 电源管理

bash
1shutdown -h now    # 立即关机
2shutdown -r now    # 立即重启
3shutdown -h +5     # 5 分钟后关机
4shutdown -c        # 取消已计划的关机
5reboot             # 重启
6halt               # 关闭系统(不断电)
7poweroff           # 关机并断电

4.9 timedatectl — 时间时区

bash
1timedatectl                          # 查看时间与时区
2timedatectl list-timezones           # 所有时区
3timedatectl set-timezone Asia/Shanghai  # 设置时区

练一练 2

  1. ps -ef 找到当前终端对应的 shell 进程(提示:找 bash 关键词)
  2. 启动一个 sleep 120 命令放到后台,然后用 kill 终止它
  3. 查看 sshd 服务是否正在运行,并查看其日志
  4. df -h 查看根分区 / 还剩多少空间
  5. journalctl -u cron --since "1 hour ago" 查看最近一小时的定时任务日志

第五周:Vim 与网络

掌握编辑器 + 网络操作,这是日常最频繁的操作。

5.1 Vim 编辑器

三种模式

命令模式 ──→ 输入模式      (按 i, a, o 等)
输入模式 ──→ 命令模式      (按 Esc)
命令模式 ──→ 底线命令模式   (按 :)
底线命令模式 ──→ 命令模式   (Esc 或执行完命令)

快速上手

bash
1vim hello.txt     # 打开文件(不存在则新建)
2i                 # 进入输入模式,开始编辑
3Esc               # 返回命令模式
4:wq               # 保存并退出

命令模式 → 输入模式

命令描述
i光标前插入
a光标后插入
I行首插入
A行尾插入
o下一行插入
O上一行插入

光标移动

命令描述
h j k l左 下 上 右
0 / $行首 / 行尾
gg / G首行 / 尾行
:n跳到第 n 行
Ctrl + F / B向下 / 向上翻页

搜索

命令描述
/关键词向下搜索
?关键词向上搜索
n / N继续下 / 上搜索

删除 / 复制 / 粘贴

命令描述
dd / 3dd删除 1 / 3 行
dG / dgg删到文件尾 / 头
x删除光标字符
yy / 3yy复制 1 / 3 行
p / P光标后 / 前粘贴

撤销与重做

命令描述
u撤销
Ctrl + R重做

底线命令

命令描述
:wq保存退出
:q退出(未修改)
:q!强制退出不保存
:w保存
:set nu / :set nonu显示/隐藏行号
:set paste粘贴模式(避免缩进乱掉)
:%s/旧/新/g全文替换
:%s/旧/新/gc全文替换(逐个确认)
:e 文件名打开另一个文件
:!命令执行 shell 命令

小技巧:忘记用 sudo 打开文件时,用 :w !sudo tee % 强行保存。

5.2 ping — 网络连通性

bash
1ping -c 4 hostname/ip    # 发 4 个包测连通
2ping -c 4 8.8.8.8        # 测外网

5.3 ip / ifconfig — 网络接口

bash
1# ip(推荐)
2ip addr       # 查看 IP 地址
3ip link       # 查看网络接口状态
4ip route      # 查看路由表
5
6# ifconfig(需安装 net-tools)
7ifconfig      # 查看网络接口

5.4 ss / netstat / nmap — 端口

bash
1# ss(推荐,速度更快)
2ss -tlnp      # TCP 监听端口及进程
3ss -ulnp      # UDP 监听端口
4ss -tunap     # 所有 TCP/UDP 连接
5
6# netstat
7netstat -tlnp | grep :端口
8
9# nmap(需安装)— 扫描远程主机
10sudo apt install nmap
11nmap IP地址                     # 扫描开放端口
12nmap -p 22,80 192.168.1.1      # 扫描指定端口
13nmap -sV IP                     # 探测服务版本

5.5 ssh / scp — 远程连接与传输

bash
1ssh user@hostname          # 默认端口连接
2ssh -p 2222 user@host      # 指定端口
3ssh -i key.pem user@host   # 密钥认证
4
5ssh-keygen                 # 生成密钥对
6ssh-copy-id user@host      # 复制公钥到远程(免密登录)
7
8# 远程复制文件
9scp file user@host:/path          # 本地 → 远程
10scp user@host:/path/file ./       # 远程 → 本地
11scp -r dir user@host:/path        # 递归复制目录

5.6 rsync — 文件同步(推荐替代 scp)

bash
1rsync -av src/ dst/                  # 本地同步
2rsync -av dir/ user@host:/path/      # 推送到远程
3rsync -av user@host:/path/ dir/      # 从远程拉取
4rsync -avz --progress bigfile user@host:/path/  # 压缩 + 进度
5rsync -av --delete src/ dst/         # 镜像(删除目标多余文件)
选项说明
-a归档(保留权限、时间)
-v显示详情
-z传输时压缩
--progress显示进度
--delete删除目标多余文件

5.7 wget / curl — 文件下载与 HTTP

bash
1# wget — 下载
2wget url                    # 下载到当前目录
3wget -O name.zip url        # 指定文件名
4wget -b url                 # 后台下载
5wget -c url                 # 断点续传
6tail -f wget-log            # 监控后台下载
7
8# curl — HTTP 请求
9curl -O url                 # 下载并保存
10curl -I https://example.com # 查看响应头
11curl -L url                 # 跟随重定向
12curl -X POST -d "k=v" url   # POST 请求
13curl -H "Authorization: Bearer TOKEN" url  # 带请求头

5.8 主机名管理

bash
1hostname                          # 查看当前主机名
2hostnamectl set-hostname 新名称    # 永久修改(需 root)

5.9 crontab — 定时任务

bash
1crontab -e     # 编辑当前用户定时任务
2crontab -l     # 列出
3crontab -r     # 删除所有

格式: 分 时 日 月 周 命令

bash
1# 每天凌晨 2 点
20 2 * * * /path/to/script.sh
3
4# 每 5 分钟
5*/5 * * * * /path/to/script.sh
6
7# 工作日早 9 点
80 9 * * 1-5 /path/to/script.sh
9
10# 每月 1 号和 15 号
110 0 1,15 * * /path/to/script.sh

练一练 3

  1. 用 Vim 新建一个文件 hello.txt,输入三行文字,保存退出,然后用 cat 验证
  2. ping -c 3 测试能否连通 baidu.com
  3. ss -tlnp 查看本机有哪些端口在监听
  4. ssh-keygen 生成一对密钥,用 ls -la ~/.ssh 查看生成的文件
  5. 写一条 crontab 规则:每天下午 6 点执行 /home/backup.sh

继续阅读:Linux 学习笔记(三):自动化与实战 →

发表评论