Linux运维实践(2) 文件管理命令实战

今日学习目标

  • ✅ 掌握文件和目录的增删改查
  • ✅ 理解绝对路径和相对路径
  • ✅ 学会使用通配符批量操作文件

第一部分:基础命令实战

打开你的CentOS虚拟机,登录后开始今天的练习:

1
2
# 首先进入昨天的学习目录
cd ~/linux-learning/day2

1. pwd - 查看当前位置

1
2
3
# 无论你在哪里,先搞清楚自己在哪
pwd
# 输出类似:/home/你的用户名/linux-learning/day2

2. ls - 列出文件和目录

1
2
3
4
5
6
7
8
9
10
11
# 基本用法
ls # 简单列出
ls -l # 详细信息(权限、大小、日期)
ls -a # 显示所有文件(包括隐藏文件)
ls -lh # 人性化显示大小(K、M、G)
ls -lt # 按时间排序
ls -lS # 按大小排序

# 实战练习
ls -l /etc | head -5 # 查看/etc目录前5个文件
ls -la ~ # 查看家目录所有文件(包括隐藏的配置文件)

3. cd - 切换目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 重要:绝对路径 vs 相对路径
cd /etc # 绝对路径:从根目录开始
cd ../../ # 相对路径:相对于当前位置

# 常用技巧
cd ~ # 回家目录
cd - # 回到刚才的目录
cd .. # 回到上一级目录
cd ../.. # 回到上两级目录

# 实战:在不同的目录间穿梭
cd /var/log # 去日志目录
pwd # 确认位置
ls # 看看有哪些日志
cd /tmp # 去临时目录
cd - # 回到/var/log

4. 创建文件和目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# mkdir - 创建目录
mkdir project # 创建单级目录
mkdir -p project/src/css # 创建多级目录(-p参数)
mkdir project{1..5} # 批量创建project1到project5

# touch - 创建空文件或更新文件时间
touch readme.txt # 创建空文件
touch file{1..10}.txt # 批量创建file1.txt到file10.txt

# 实战:创建项目结构
mkdir -p mywebsite/{html,css,js,images,backup}
cd mywebsite
touch html/index.html
touch css/style.css
touch js/main.js
tree . # 如果提示没有tree,先安装:dnf install -y tree

5. cp - 复制文件

1
2
3
4
5
6
7
8
9
10
# 基本语法:cp 源文件 目标位置
cp file1.txt file2.txt # 复制并重命名
cp file1.txt backup/ # 复制到目录
cp -r project/ backup/ # 复制目录(-r递归)
cp -p file1.txt file3.txt # 保留属性(权限、时间)
cp -a project/ project_backup/ # 归档复制(保留所有属性)

# 实战:备份你的项目
cp -r mywebsite mywebsite_backup_$(date +%Y%m%d)
ls -l # 查看备份是否成功

6. mv - 移动或重命名

1
2
3
4
5
6
7
8
9
10
11
12
# 重命名文件
mv oldname.txt newname.txt # 文件重命名
mv project/ project_old # 目录重命名

# 移动文件
mv file1.txt backup/ # 移动到目录
mv *.txt backup/ # 移动所有txt文件

# 实战:整理文件
mkdir documents images scripts
mv *.txt documents/ # 把所有txt移到documents
mv *.jpg *.png images/ 2>/dev/null # 移动图片(忽略错误)

7. rm - 删除(小心使用!)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 删除文件
rm file1.txt # 删除文件
rm -f file2.txt # 强制删除,不提示
rm -i file3.txt # 交互式删除(提示确认)

# 删除目录
rm -r project/ # 删除目录
rm -rf temp/ # 强制删除目录(极其危险!)

# ⚠️ 危险命令警告(永远不要执行!)
# rm -rf / # 删除根目录,系统崩溃
# rm -rf * # 删除当前目录所有文件

# 安全删除练习
mkdir test_delete
cd test_delete
touch a.txt b.txt c.txt
rm -i *.txt # 逐个确认删除
cd ..
rmdir test_delete # 只能删除空目录

第二部分:文件查看命令实战

1
2
3
4
5
6
7
8
9
10
11
# 创建一个练习文件
cd ~/linux-learning/day2
cat > sample.txt << 'EOF'
Linux is awesome
I love learning Linux
This is line 3
Linux commands are powerful
Learning every day
Line 6 is here
The last line
EOF

1. cat - 查看文件内容

1
2
3
cat sample.txt                    # 显示全部内容
cat -n sample.txt # 显示行号
cat /etc/passwd # 查看用户信息文件

2. less/more - 分页查看

1
2
3
4
5
6
7
8
less /var/log/messages             # 查看系统日志(按q退出)
# 操作技巧:
# 空格:下一页
# b:上一页
# /关键词:搜索(按n下一个)
# g:第一行 G:最后一行

more /etc/services # 类似less,功能较少

3. head/tail - 查看头尾

1
2
3
4
5
6
7
8
9
10
11
head sample.txt                    # 默认显示前10行
head -3 sample.txt # 显示前3行

tail sample.txt # 默认显示后10行
tail -5 sample.txt # 显示后5行
tail -f /var/log/messages # 实时跟踪日志(重要!)
# 按Ctrl+C退出跟踪

# 实战:查看最新的系统日志
tail -f /var/log/messages
# 打开另一个终端窗口执行一些操作,看日志实时更新

4. grep - 文本搜索(超级重要!)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 基本用法
grep "Linux" sample.txt # 查找包含Linux的行
grep -i "linux" sample.txt # 忽略大小写
grep -n "line" sample.txt # 显示行号
grep -v "Linux" sample.txt # 显示不包含Linux的行
grep -c "Linux" sample.txt # 统计匹配的行数

# 正则表达式
grep "^L" sample.txt # 以L开头的行
grep "e$" sample.txt # 以e结尾的行
grep "L.*g" sample.txt # L开头g结尾

# 实战:在系统文件中查找
grep "root" /etc/passwd # 查找root用户
grep -r "ERROR" /var/log/ # 递归查找所有日志中的ERROR
ps aux | grep ssh # 查找ssh进程(管道符的用法)

第三部分:实战项目 - 日志分析小工具

现在我们来做一个综合练习,创建一个日志分析脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
cd ~/linux-learning/day2

# 创建日志分析脚本
cat > log_analyzer.sh << 'EOF'
#!/bin/bash
# 日志分析工具 - 分析/var/log/messages

LOG_FILE="/var/log/messages"
REPORT_DIR="$HOME/linux-learning/day2/reports"

# 创建报告目录
mkdir -p $REPORT_DIR

# 生成报告文件名(带时间戳)
REPORT_FILE="$REPORT_DIR/report_$(date +%Y%m%d_%H%M%S).txt"

echo "=========================================" > $REPORT_FILE
echo " 系统日志分析报告 - $(date)" >> $REPORT_FILE
echo "=========================================" >> $REPORT_FILE
echo "" >> $REPORT_FILE

# 1. 统计日志大小
echo "1. 日志文件信息:" >> $REPORT_FILE
ls -lh $LOG_FILE >> $REPORT_FILE
echo "" >> $REPORT_FILE

# 2. 统计错误数量
ERROR_COUNT=$(grep -i "error" $LOG_FILE | wc -l)
echo "2. 错误统计:" >> $REPORT_FILE
echo " 错误总数: $ERROR_COUNT" >> $REPORT_FILE
echo "" >> $REPORT_FILE

# 3. 最近5条错误
echo "3. 最近的5条错误:" >> $REPORT_FILE
grep -i "error" $LOG_FILE | tail -5 >> $REPORT_FILE
echo "" >> $REPORT_FILE

# 4. 统计不同服务的日志
echo "4. 各服务日志量:" >> $REPORT_FILE
echo " SSH: $(grep -c "sshd" $LOG_FILE)" >> $REPORT_FILE
echo " Kernel: $(grep -c "kernel" $LOG_FILE)" >> $REPORT_FILE
echo " Systemd: $(grep -c "systemd" $LOG_FILE)" >> $REPORT_FILE
echo "" >> $REPORT_FILE

# 5. 按小时统计日志量
echo "5. 最近24小时日志分布:" >> $REPORT_FILE
for hour in {00..23}; do
COUNT=$(grep " $(date +%b %d) $hour:" $LOG_FILE | wc -l)
echo " $hour:00 - $hour:59 : $COUNT 条日志" >> $REPORT_FILE
done

echo "" >> $REPORT_FILE
echo "报告生成时间: $(date)" >> $REPORT_FILE
echo "=========================================" >> $REPORT_FILE

# 显示报告摘要
echo "报告已生成: $REPORT_FILE"
echo "报告摘要:"
echo "- 错误总数: $ERROR_COUNT"
echo "- 最近5条错误已记录"
echo "- 按小时统计完成"

# 如果错误太多,发出警告
if [ $ERROR_COUNT -gt 100 ]; then
echo "⚠️ 警告:系统错误过多,建议检查!"
fi
EOF

# 给脚本执行权限
chmod +x log_analyzer.sh

# 执行脚本
./log_analyzer.sh

# 查看生成的报告
ls -l reports/
cat reports/report_*.txt | head -20

第四部分:今日挑战任务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# 挑战1:文件管理大师
cd ~/linux-learning/day2
mkdir challenge
cd challenge

# 创建以下文件结构
# challenge/
# ├── docs/
# │ ├── report1.txt
# │ ├── report2.txt
# │ └── notes.txt
# ├── data/
# │ ├── 2024/
# │ └── 2025/
# └── backup/

# 请用一行命令完成
# 提示:使用mkdir -p 和 {}

# 答案(先自己尝试):
mkdir -p challenge/{docs,data/{2024,2025},backup}
touch challenge/docs/{report1.txt,report2.txt,notes.txt}

# 挑战2:批量操作
# 1. 将所有txt文件复制到backup目录
cp challenge/docs/*.txt challenge/backup/

# 2. 将data/2024重命名为data/2023
mv challenge/data/2024 challenge/data/2023

# 3. 删除空目录(如果backup为空)
rmdir challenge/backup 2>/dev/null || echo "backup不为空"

# 挑战3:查找练习
# 在/etc目录下查找所有.conf文件,并统计数量
find /etc -name "*.conf" 2>/dev/null | wc -l

# 查找最近7天修改过的文件
find ~ -type f -mtime -7 2>/dev/null

# 查找大于10M的文件
find / -type f -size +10M 2>/dev/null | head -10

第五部分:今日总结和作业

完成今天的学习后,你应该掌握了:

  • ✅ 文件导航命令(pwd, cd, ls)
  • ✅ 文件操作命令(touch, mkdir, cp, mv, rm)
  • ✅ 文件查看命令(cat, less, head, tail)
  • ✅ 文本搜索命令(grep)
  • ✅ 能够创建简单的分析脚本

今日作业:

1
2
3
4
5
6
7
8
9
10
11
12
# 1. 创建一个你的个人项目目录结构
# 例如:myproject/{src,doc,test,bin,config}

# 2. 使用grep查找系统日志中的警告信息
grep -i "warning" /var/log/messages | tail -10

# 3. 练习使用通配符
ls /etc/*.conf # 所有conf文件
ls /etc/rc*.d # 所有rc开头的目录
ls /var/log/*.log # 所有log文件

# 4. 创建一个备份脚本,自动备份你的项目

常见问题解决

问题 解决方法
命令没找到 使用which 命令名查看是否安装
权限不足 使用sudo或以root执行
文件不存在 检查路径是否正确
删除错了 无法恢复! 所以删除前一定要确认

今日名言:”在Linux中,一切都是文件” - 理解这句话,你就理解了Linux的一半。