Day 5:本周串联实操

今日目标:把本周 4 天的命令串起来,在真实场景中练习——创建 → 复制 → 移动 → 查看 → 统计 → 排错 🎯

命令速览(本周全部命令)

pwd cd ls touch rm mkdir rmdir cp mv ln -s cat head tail less wc sort uniq

场景一:搭建一个项目骨架

你要在 /tmp 下搭建一个日志分析项目的目录结构,并准备一些测试数据。

操作流程(每步都在终端完成):

  1. cd /tmp——进入工作区
  2. mkdir -p log-project/{data,scripts,logs,backup}——创建项目骨架
  3. ls -lR log-project/——验证目录结构
  4. 进入 data/ 目录,用 cat 配合 <<EOF 创建测试数据:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    cat > sample.log <<EOF
    2024-01-01 ERROR disk full
    2024-01-01 INFO service started
    2024-01-02 ERROR memory leak
    2024-01-02 WARN high cpu
    2024-01-03 ERROR disk full
    2024-01-03 INFO backup complete
    2024-01-03 ERROR timeout
    2024-01-04 INFO service started
    2024-01-04 ERROR disk full
    2024-01-04 ERROR permission denied
    EOF
  5. wc -l sample.log——确认有 10 行数据
  6. cp sample.log sample.log.bak——备份
  7. cd ../scripts && ln -s ../data/sample.log ./data_link——在 scripts 目录创建数据软链接
  8. 验证软链接:cat data_link | head -3

场景二:日志分析(管道串联)

从 sample.log 中提取信息,用管道串联完成以下分析:

  1. 统计共有多少条日志:wc -l ../data/sample.log
  2. 只看 ERROR 日志:grep ERROR ../data/sample.log(提示:grep 将在 Week 2 正式学习,此处可先照做体会管道筛选思想)
  3. ERROR 日志有多少条:grep ERROR ../data/sample.log | wc -l
  4. 每种日志级别各多少条:awk '{print $2}' ../data/sample.log | sort | uniq -c | sort -rn(提示:awk 将在 Week 2 正式学习,此处可先照做体会管道组合)
  5. ERROR 日志中最常见的错误描述:grep ERROR ../data/sample.log | awk '{for(i=3;i<=NF;i++) printf "%s%s", $i, (i==NF?"\n":" ")}' | sort | uniq -c | sort -rn(说明:原 {print $NF} 只能取每行最后一个词,如 “disk full” 会变成 “full”,改用 {for(i=3;i<=NF;i++)...} 才能取完整错误描述。此写法较复杂,Week 2 详细讲解 awk)
  6. 查看数据文件最后 3 行:tail -3 ../data/sample.log

场景三:目录与文件清理

  1. cd /tmp/log-project
  2. du -sh *——查看各子目录大小(提示:du 将在 Week 3 磁盘管理中正式学习,此处可先照做)
  3. cp data/sample.log data/sample2.log——创建一份重复数据
  4. rm data/sample2.log——删除重复文件
  5. mv logs old_logs——重命名 logs 目录
  6. rmdir old_logs——确认空目录可删除
  7. 清理整个项目:cd /tmp && rm -rf log-project/

💪 今日必刷(全部终端实操)

  1. /tmp/yourname/ 下搭建一个类似场景一的项目骨架(把 yourname 换成你的名字拼音)
  2. 创建自己的测试数据(不少于 8 行),至少包含 3 种日志级别,至少 2 种错误类型
  3. 用管道串联统计:每种级别的行数(从多到少排列)(提示:需用 awk '{print $2}' 提取级别列,awk 将在 Week 2 学习,此处可参考场景二第 4 题写法照做)
  4. 用一条命令找出数据文件中第 3 到第 7 行(提示:head -7 | tail -5
  5. 排错题:你创建了 data/test.log,在 scripts/ 下做了软链接 ln -s ../data/test.log ./tlog,但后来你 mv data/test.log data/real.log,软链接还能用吗?为什么?如何验证?
  6. 排错题ls -l /tmp/yourname/data/ 能看到文件,但 wc -l /tmp/yourname/data/*.logNo such file or directory——排查步骤是什么?

📚 命令详解

命令 详细参考
pwd 文件与目录管理-pwd
cd 文件与目录管理-cd
ls 文件与目录管理-ls
touch 文件与目录管理-touch
rm 文件与目录管理-rm
mkdir 文件与目录管理-mkdir
rmdir 文件与目录管理-rmdir
cp 文件与目录管理-cp
mv 文件与目录管理-mv
ln 文件与目录管理-ln
cat 文件查看与文本处理-cat
head 文件查看与文本处理-head
tail 文件查看与文本处理-tail
less 文件查看与文本处理-less
wc 文件查看与文本处理-wc
sort 文件查看与文本处理-sort
uniq 文件查看与文本处理-uniq

第一周 · 综合实战

实战场景

你是运维新人,主管给你一台 Linux 机器,让你整理 /var/log/app/ 下的日志文件。
这个目录结构混乱,有重复文件、死软链接、日志文件散落各处。你需要完成以下任务。


任务一:摸清目录结构

/tmp 下先搭建模拟环境:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mkdir -p /tmp/app-log/{archive,reports}
cd /tmp/app-log
# 模拟一些日志文件
echo "ERROR: disk failure at 01:00" > app-2024-01-01.log
echo "INFO: backup started at 02:00" >> app-2024-01-01.log
echo "ERROR: memory leak detected at 03:00" > app-2024-01-02.log
echo "WARN: high cpu usage at 04:00" >> app-2024-01-02.log
echo "ERROR: disk failure at 05:00" > app-2024-01-03.log
echo "INFO: backup completed at 06:00" >> app-2024-01-03.log
echo "ERROR: timeout at 07:00" > app-2024-01-04.log
echo "ERROR: disk failure at 08:00" >> app-2024-01-04.log
# 创建软链接和备份混淆
ln -s app-2024-01-01.log app-latest.log
cp app-2024-01-01.log archive/
cp app-2024-01-01.log reports/summary.log

完成后:

  1. ls -lh 查看当前目录所有文件(含隐藏)
  2. ls -l 找出软链接 app-latest.log,确认它指向谁
  3. ls -lR 递归查看整个目录树

任务二:日志内容分析

  1. 查看 app-latest.log 的内容(通过软链接读取)
  2. 统计所有 .log 文件的总行数(一条命令)
  3. 找出所有包含 ERROR 的行,并统计共有多少条 ERROR(提示:grep ERROR *.loggrep ERROR *.log | wc -lgrep 将在 Week 2 详细学习)
  4. 统计每种错误类型(disk failure / memory leak / timeout)各出现多少次(提示:需组合 grep + awk 提取错误描述后再 sort | uniq -cgrepawk 将在 Week 2 正式学习,此处可先尝试照做)
  5. 从所有日志中提取第 3 到第 6 行(提示:先合并,再截取)

任务三:整理目录

  1. 软件链接 app-latest.log 指向的是 app-2024-01-01.log——这可能是旧的,删除这个软链接
  2. archive/ 下的文件是重复的,确认内容与源文件一致后删除整个 archive/ 目录
  3. reports/summary.log 移动到当前目录并改名为 summary-2024-01.log
  4. 删除空的 reports/ 目录
  5. 将当前目录所有 .log 文件打包为 logs-archive.tar(不用压缩,归档即可;提示:tar -cvf logs-archive.tar *.logtar 将在 Week 3 详细学习)

故障排查一

现象:你执行 cat app-2024-01-05.log 想查看日志,终端输出:

1
cat: app-2024-01-05.log: No such file or directory

你确定文件名拼写正确。

  • 排查步骤是什么?(写出你要依次执行的命令)
  • 可能的原因有哪些?(至少列出 2 个)

故障排查二

现象:执行 mkdir -p /tmp/app-log/archive 报错:

1
mkdir: cannot create directory '/tmp/app-log/archive': File exists

ls /tmp/app-log/archive 显示该路径存在且是文件不是目录。

  • 为什么 -p 参数没有忽略这个错误?
  • 怎么解决?(两条不同的思路)

环境公约

项目 约定
服务器 Ubuntu 24.04 LTS(云厂商最小规格 1C/1G)
SSH 客户端 WindTerm(首选)/ Windows Terminal + ssh(备选)
编辑器 vim
终端复用 tmux
文件传输 WindTerm 内置 SFTP

面向 Windows 用户为主。不推荐 PuTTY + WinSCP 组合(增加工具切换成本)。

Linux 1 月速成计划

面向有基础经验的学习者,4 周掌握 Linux 日常操作。纯终端实操,排错驱动。

学习路线图

第一周:文件系统与文本基础 第二周:权限、进程与重定向 第三周:文本三剑客与打包 第四周:网络、系统与自动化
Day 1 路径与目录切换 用户身份与基本权限 grep 基础 网络诊断
Day 2 文件与目录操作 权限深入与提权 grep 正则与上下文 SSH 远程连接
Day 3 文件内容查看 进程查看与管理 sed 流编辑 系统资源监控
Day 4 文本统计与处理 前后台与重定向管道 awk 列处理 定时任务
Day 5 本周串联实操 本周串联实操 打包与压缩 本周串联实操
周末 综合实战 综合实战 综合实战 综合实战

命令速查索引

第一周 — 文件系统与文本基础

分类 命令
路径导航 pwd cd ls
文件操作 touch rm mkdir rmdir cp mv ln -s
内容查看 cat head tail less
文本处理 wc sort uniq

第二周 — 权限、进程与重定向

分类 命令
用户权限 whoami id groups chmod chown su sudo
进程管理 ps top kill pkill jobs fg bg
重定向 > >> 2> 2>&1 | <<EOF

第三周 — 文本三剑客与打包

分类 命令
文本过滤 grep
流编辑 sed
列处理 awk
归档压缩 tar gzip gunzip unzip

第四周 — 网络、系统与自动化

分类 命令
网络诊断 ping curl wget ss netstat ip ifconfig
远程连接 ssh ssh-keygen ssh-copy-id scp
系统资源 df du free uptime uname who
定时任务 crontab

使用方法

  1. 每天一个文件:按顺序从 Day1 开始,先看”逐个击破”中的上手练,再做”今日必刷”
  2. 所有题目在终端完成:不纸上谈兵,每道题都动手敲
  3. 排错题不要直接看答案:先自己排查,培养”读报错 → 定位原因 → 修正”的思路
  4. 周末综合实战:用一个完整场景串联本周所有命令,检验融会贯通程度

🔗 课程导航

Day 1: 路径与目录切换 | Day 8: 用户与权限 | Day 15: grep基础 | Day 22: 网络诊断

🔗 相关文档

云计算专业学习方法与技巧 | linux命令速查手册 | 容器云学习路径 | 私有云 OpenStack 学习路径

压缩与归档-compress 📦 — 传统文件压缩

作用

compress 是最早期的 Unix 文件压缩工具,使用 LZW 算法,压缩后文件以 .Z 为扩展名。在现代 Linux 系统中已被 gzipbzip2 取代,但部分老旧系统和脚本仍在使用。

语法

1
2
compress [选项] 文件名
uncompress [选项] 文件.Z

用法

compress 压缩文件并替换原文件。-d 解压(等价于 uncompress);-f 强制压缩(即使不节省空间);-v 显示压缩信息;-V 显示版本号;-c 输出到标准输出。uncompress FILE.Z 解压。在现代系统中,更推荐使用 gzip 替代。

常用参数

参数 说明
-d 解压
-f 强制压缩
-v 显示压缩信息
-V 版本信息
-c 输出到标准输出

示例

1
2
3
4
5
compress FILE.TXT                  # 压缩为 .Z 格式(传统 LZW)
uncompress FILE.TXT.Z # 解压 .Z 文件
compress -f FILE.TXT # 强制压缩(即使压缩后更大)
compress -v # 显示压缩信息
compress -V # 显示版本信息

已被 gzip 替代。


来源:菜鸟教程

压缩与归档-gzip 📦 — 文件压缩与解压

作用

gzip(GNU zip)是 Linux 最广泛使用的文件压缩工具,基于 DEFLATE 算法。压缩后文件以 .gz 为扩展名,常与 tar 组合使用。压缩率高、速度快,是日常文件压缩的首选工具。

语法

1
2
gzip [选项] 文件名
gunzip [选项] 文件名.gz

用法

gzip 将指定文件压缩为 .gz 格式并替换原文件。-d 解压(等价于 gunzip);-r 递归压缩/解压;-c 输出到标准输出(保留原文件);-n 不保存原始文件名和时间戳;-l 显示压缩比;-k 保留原文件(默认删除原文件);-1~-9 压缩级别(-1 最快,-6 默认,-9 最高压缩比);-t 测试文件完整性。gunzip FILE.GZ 解压文件。

常用参数

参数 说明
-d 解压
-r 递归
-c 输出到标准输出
-n 不保存原始文件名和时间戳
-l 显示压缩比
-k 保留原文件
-1~-9 压缩级别
-t 测试完整性

示例

1
2
3
4
5
6
gzip FILE.TXT                      # 压缩文件(原文件被替换)
gzip -9 FILE.TXT # 最高压缩比压缩
gzip -d FILE.TXT.GZ # 解压 .gz 文件
gzip -r -k /HOME/USER # 递归压缩目录并保留原文件
gzip -c FILE.TXT > FILE.TXT.GZ # 压缩到标准输出(保留原文件)
gzip -t FILE.TXT.GZ # 测试压缩文件完整性

来源:菜鸟教程

📖 课程位置

本命令在以下课程中讲解:Day 5:打包与压缩

压缩与归档-tar 📦 — 归档与压缩

作用

tar(tape archive)是 Linux 中最常用的归档工具,将多个文件或目录打包成一个归档文件,常结合 gzip/bzip2/xz 实现打包并压缩。是备份、软件分发、迁移数据的标准工具。

语法

1
tar [选项] [归档文件] [源文件...]

用法

tar 的选项分为操作模式和修饰符。核心操作:-c 创建归档;-x 解压归档;-t 查看归档内容。-z 通过 gzip 压缩/解压(.tar.gz);-j 通过 bzip2(.tar.bz2);-J 通过 xz(.tar.xz);--lzma 通过 lzma(.tar.lzma)。-v 显示处理过程;-f 文件 指定归档文件名;-C 目录 指定解压目标目录;--exclude=模式 排除文件;-u 更新归档。

常用参数

参数 说明
-c 创建归档
-x 解压归档
-t 查看归档内容
-z gzip 压缩
-j bzip2 压缩
-J xz 压缩
--lzma lzma 压缩(.tar.lzma
-v 显示处理过程
-f 文件 指定文件名
-C 目录 解压到目录
--exclude=模式 排除文件

示例

1
2
3
4
5
6
tar -cvf ARCHIVE.TAR DIR/         # 打包目录为 .tar
tar -czvf ARCHIVE.TAR.GZ DIR/ # 打包并用 gzip 压缩
tar -xjf ARCHIVE.TAR.BZ2 # 解压 bzip2 归档到当前目录
tar -tvf ARCHIVE.TAR # 查看归档内容列表
tar -czvf BACKUP.TAR.GZ --exclude="*.LOG" /VAR/LOG # 打包排除 .LOG 文件
tar -xzf ARCHIVE.TAR.GZ -C /TARGET # 解压 gzip 归档到指定目录

来源:菜鸟教程

📖 课程位置

本命令在以下课程中讲解:Day 5:打包与压缩

压缩与归档-xz 📦 — 文件压缩(高压缩比)

作用

xz 基于 LZMA2 算法,提供比 gzip 和 bzip2 更高的压缩比,压缩后文件以 .xz 为扩展名。是目前主流的高压缩率工具,许多 Linux 发行版的内核和软件包使用 xz 压缩。配套工具 unxzxz -d 解压。

语法

1
2
xz [选项] 文件名
unxz [选项] 文件.xz

用法

xz 压缩文件并替换原文件。-d 解压(等价于 unxz);-k 保留原文件;-c 输出到标准输出;-t 测试完整性;-0~-9 压缩级别(-0 最快,-6 默认,-9 极高压缩比但耗内存);-e 使用更慢的压缩变体(提高压缩比);-T N 多线程压缩;-v 显示详细信息(含压缩比)。常与 tar 搭配:tar -cvJf ARCHIVE.TAR.XZ DIR/

常用参数

参数 说明
-d 解压
-k 保留原文件
-c 输出到标准输出
-t 测试完整性
-0~-9 压缩级别
-e 使用更慢的压缩变体(提高压缩比)
-v 显示详细信息(含压缩比)
-T N 多线程

示例

1
2
3
4
5
6
7
8
xz FILE.TXT                        # 压缩为 .xz(原文件被替换)
xz -9 FILE.TXT # 极高压缩比压缩
unxz FILE.TXT.XZ # 解压 .xz 文件
xz -d FILE.TXT.XZ # 解压(同 unxz)
xz -T 4 FILE.TXT # 使用 4 线程并行压缩
xz -e FILE.TXT # 使用极慢压缩变体提高压缩比
xz -v FILE.TXT # 显示详细信息(含压缩比)
xz -l FILE.TXT.XZ # 查看压缩文件信息

来源:菜鸟教程

压缩与归档-zgrep-zcat-zless / zgrep / zless 📦 — 查看压缩文件

作用

zcat、zgrep、zless 是 gzip 压缩文件的查看工具族,在不解压的情况下直接读取 .gz 文件内容,节省磁盘空间且方便快速搜索。相当于 gzip -dcgrepless 的压缩文件封装。

zcat

1
zcat [选项] 文件.gz

将压缩文件内容解压后输出到标准输出(相当于 gunzip -c)。用于查看日志归档、配置文件备份等。支持 less 配合分页查看:zcat FILE.GZ | less

zgrep

1
zgrep [选项] 模式 文件.gz

在压缩文件中直接搜索文本模式。支持所有 grep 选项(-i-n-v 等)。zgrep -i ERROR /VAR/LOG/SYSLOG*.GZ 搜索压缩日志中的错误。

zless

1
zless 文件.gz

分页查看压缩文件内容(相当于 zcat FILE.GZ | less)。支持 less 的所有操作(上下翻页、搜索、跳转等)。比先解压再查看更高效。

示例

1
2
3
4
5
zcat FILE.TXT.GZ                   # 查看压缩文件内容(不解压)
zcat FILE.GZ | less # 分页查看压缩文件
zgrep -i ERROR LOG.GZ # 在压缩文件中搜索(忽略大小写)
zgrep -n "FAILED" AUTH.LOG.GZ # 搜索并显示匹配行号
zless FILE.GZ # 分页浏览压缩文件

来源:菜鸟教程

压缩与归档-zip-unzip / unzip 📦 — ZIP 格式压缩与解压

作用

zip 和 unzip 用于创建和解压 zip 格式的压缩文件。ZIP 是跨平台最通用的压缩格式,广泛用于 Windows/Linux/macOS 间的文件交换,支持包含多个文件的目录结构。

语法

1
2
zip [选项] 压缩包.zip [源文件...]
unzip [选项] 压缩包.zip

用法

zip 将文件或目录打包为 .zip 文件。-r 递归压缩目录;-q 静默模式;-d 删除压缩包中的文件;-u 更新或添加文件到压缩包;-9 最大压缩级别。unzip 解压 zip 文件。-l 列出压缩包内容;-d 解压到指定目录;-o 覆盖前不提示。zip 格式支持密码保护(-P 密码)。

常用参数

参数 说明
-r(zip) 递归压缩
-q(zip) 静默模式
-d(zip) 删除包内文件
-u(zip) 更新添加文件
-9 最大压缩
-l(unzip) 列出内容
-d 目录(unzip) 解压到目录

示例

1
2
3
4
5
6
zip -r ARCHIVE.ZIP DIR/            # 递归压缩目录
unzip ARCHIVE.ZIP # 解压到当前目录
unzip -l ARCHIVE.ZIP # 列出压缩包内容
unzip ARCHIVE.ZIP -d /TARGET # 解压到指定目录
zip -9 ARCHIVE.ZIP FILE1 FILE2 # 最大压缩级别打包
zip -u ARCHIVE.ZIP NEWFILE.TXT # 向压缩包添加新文件

来源:菜鸟教程

📖 课程位置

本命令在以下课程中讲解:Day 5:打包与压缩

包管理-apt 📦 — Debian/Ubuntu 包管理(新一代)

作用

apt(advanced package tool)是 Debian/Ubuntu 系列的新一代包管理命令,整合了 apt-getapt-cache 的常用功能,提供更简洁友好的输出和操作体验。是 apt-get 的现代替代品。

语法

1
apt [选项] 操作 [包名]

用法

apt 常用操作:install 包 安装;remove 包 卸载(保留配置);purge 包 完全卸载(删除配置);update 更新软件源列表;upgrade 升级所有已安装包;full-upgrade 全面升级(含依赖变更);search 关键词 搜索包;show 包 显示包信息;list --installed 列出已安装包;autoremove 清理不再需要的依赖包。

常用参数

参数 说明
install 包 安装包
remove 包 卸载包
purge 包 完全卸载
update 更新源列表
upgrade 升级包
search 关键词 搜索包
show 包 显示包信息
autoremove 清理依赖
list --installed 已安装列表

示例

1
2
3
4
5
6
7
8
sudo apt update                    # 更新软件源列表
sudo apt install nginx # 安装 nginx 包
sudo apt remove nginx # 卸载 nginx(保留配置)
sudo apt purge nginx # 完全卸载 nginx(删除配置)
sudo apt upgrade # 升级所有已安装包
apt search nginx # 搜索 nginx 相关包
apt show nginx # 查看 nginx 包详细信息
sudo apt autoremove # 清理不再需要的依赖

来源:菜鸟教程

🔗 相关文档

包管理-apt-get | 包管理-dpkg | snap-flatpak
0%