本文总结了Linux进阶操作的核心知识点:
管道与批量处理(xargs、sort、uniq等命令组合使用);
文件权限管理(chmod数字表示法及chown命令);
定时任务配置(crontab时间格式与示例);
常用运维命令(网络、进程、磁盘等);
文本处理三剑客(awk列处理、sed行编辑、grep过滤);
实战练习(考试成绩分析、日志处理、销售数据分析)。
重点包括权限数字计算(如765=rwxrw-r-x)、sed的-i原地修改特性、awk按列处理数据等实用技巧,并提供了典型场景的解决方案。
🐧 Linux 课堂笔记(进阶篇)
一、管道与批量处理(| 与 xargs)
1. xargs:将输出结果转为单行(空格分隔)
bash
# 示例:将多行结果合并为一行
cat aaa | xargs
2. |:前一个命令的输出作为后一个命令的输入
bash
# 获取文件的第5行
head -5 aaa | tail -1
# 查找所有数字命名的文件并压缩
find . -name "[0-9]" | xargs tar -zcvf num.tar.gz
# 查找7天外的tar.gz包并删除
find . -name "*.tar.gz" -mtime +7 | xargs rm -rf
3. sort:排序
bash
# 数值降序排序
cat aaa | sort -rn # r:降序 n:按数值
4. uniq:去重(相邻行去重)
bash
cat aaa | sort -n | uniq # 先排序再去重
5. wc -l:统计行数
bash
wc -l aaa
find . -name "[0-9]" | wc -l # 统计数字文件个数
二、文件权限管理
ls -l 输出详解
bash
-rw-rw-r-- 1 hadoop hadoop 29 5月 14 11:13 aaa
| 字段 | 含义 |
|---|---|
- |
文件类型(-文件,d目录) |
rw- |
属主权限(读写) |
rw- |
属组权限(读写) |
r-- |
其他用户权限(只读) |
1 |
子目录个数(含.和..) |
hadoop |
属主 |
hadoop |
属组 |
29 |
文件大小(字节) |
5月 14 11:13 |
最后修改时间 |
aaa |
文件名 |
权限数字表示法
| 权限 | 数字 |
|---|---|
| r(读) | 4 |
| w(写) | 2 |
| x(执行) | 1 |
权限修改命令
bash
# 修改权限(递归)
chmod -R 760 aaa # 结果:-rwxrw---
# 修改属主/属组(需root)
chown -R omm:dbgrp aaa
练习题 :chmod 765 file 的含义?
✅ 属主:rwx(7),属组:rw-(6),其他:r-x(5)
三、定时任务 crontab
基本命令
bash
crontab -e # 编辑定时任务
crontab -l # 列出所有定时任务
crontab -r # 删除定时任务
时间格式:分 时 日 月 周
| 位置 | 含义 | 范围 |
|---|---|---|
第1个* |
分钟 | 0-59 |
第2个* |
小时 | 0-23 |
第3个* |
日 | 1-31 |
第4个* |
月 | 1-12 |
第5个* |
周 | 0-6 |
周 (0-6)中的 0 表示 周日中午 12点00分
周 (0-6)和 天(0-31) 一般不会同时定义
示例
bash
# 每分钟执行
* * * * * echo hello >> /home/hadoop/2608/test/1
# 每天凌晨1点执行
0 1 * * * echo 123 >> /home/hadoop/2608/test/1
# 每年4月3日2:01执行
1 2 3 4 * echo 123 >> /home/hadoop/2608/test/1
# 每月1号1:00执行脚本
0 1 1 * * /path/to/script.sh
四、Linux 网络与运维命令
| 命令 | 作用 | 示例 |
|---|---|---|
ifconfig |
查看IP地址 | ifconfig |
ping |
测试网络连通性 | ping 192.168.5.100 |
netstat -apn |
查看端口占用 | `netstat -apn |
su - 用户名 |
切换用户(环境变量生效) | su - root |
free -m |
查看内存(MB) | free -m |
df -h |
查看磁盘使用情况 | df -h |
du -sh |
查看文件/目录大小 | du -sh /home |
top |
实时查看进程资源 | top |
kill -9 PID |
强制结束进程 | kill -9 12345 |
| `ps -ef | grep 服务` | 查看服务是否启动 |
wget |
下载网络资源 | wget http://xxx.com/file |
rz -E |
上传文件(Windows→Linux) | rz -E |
sz 文件名 |
下载文件(Linux→Windows) | sz aaa |
常见服务端口
| 服务 | 端口 |
|---|---|
| Oracle | 1521 |
| MySQL | 3306 |
| Tomcat | 8080 |
| SSH | 22 |
| SVN | 8443/443 |
| HDFS | 9870 |
五、Linux 三剑客(文本处理)
1. awk:按列拆分
bash
# 语法
awk -F "分隔符" '{print $N}' 文件名
# 示例:输出emp文件的第3列(岗位)
awk -F "\t" '{print $3}' emp | sort | uniq
# 示例:输出最高薪资
awk -F "\t" '{print $6}' emp | sort -rn | head -1
# 示例:统计部门个数
awk -F "\t" '{print $8}' emp | sort -rn | uniq | wc -l
2. sed:按行处理
bash
# 输出第2-4行
sed -n '2,4p' user.log
# 删除第3行
sed -i '3d' user.log
# 替换(全局)
sed -i 's/101/zhangsan/g' user.log
核心 :
sed -i的-i= in-place(原地修改),文件内容直接改变,不输出到屏幕。
sql# ❌ 不加 -i:只输出到屏幕,原文件不变 sed 's/old/new/' file.txt # ✅ 加 -i:直接修改原文件 sed -i 's/old/new/' file.txt # 备份 + 修改 sed -i.bak 's/old/new/' file.txt # 生成 file.txt.bak 备份
3. grep:筛选
bash
# 筛选包含"SALESMAN"的行
grep "SALESMAN" emp
# 筛选不包含"1981"的行
grep -v "1981" emp
# 管道中使用
ps -ef | grep mysql
六、课堂练习与参考答案
练习1:score 文件
文件内容:
text
zhangsan,yuwen,98
lisi,yuwen,79
wangwu,yuwen,76
xiongda,yuwen,100
xionger,yuwen,88
Q1:多少人参加考试?
bash
awk -F "," '{print $1}' score | wc -l
Q2:最高分是多少?
bash
awk -F "," '{print $3}' score | sort -n | tail -1
Q3:最高分的学生姓名?
bash
awk -F "," '{print $1,$3}' score | sort -rnk 2 | head -1 | awk -F " " '{print $1}'
练习2:user.log 文件
文件内容:
text
20260101-101-login
20260101-102-login
20260101-101-shoucang
20260101-101-logout
20260101-102-pay
20260101-102-logout
Q1:输出第2-4行
bash
sed -n '2,4p' user.log
Q2:删除第3行
bash
sed -i '3d' user.log
Q3:将所有101替换为zhangsan
bash
sed -i 's/101/zhangsan/g' user.log
Q4:输出emp表薪资第2~5名的员工姓名
bash
awk -F "\t" '{print $2,$6}' emp | sort -rnk 2 | sed -n '2,5p' | awk -F " " '{print $1}'
练习3:sales 文件
文件内容:
text
202001-apple-8765
202001-pear-8888
202001-banana-7777
202002-apple-3232
202002-pear-34534
202002-banana-23212
202003-apple-46546
202003-pear-7666
202003-banana-323
Q1:pear哪个月份卖得最好?
bash
grep "pear" sales | awk -F "-" '{print $1,$3}' | sort -rnk 2 | head -1 | awk -F " " '{print $1}'
# 答案:202002
Q2:202003月卖得最好的产品?
bash
grep "202003" sales | awk -F "-" '{print $2,$3}' | sort -rnk 2 | head -1 | awk -F " " '{print $1}'
# 答案:apple
Q3:哪个产品历史销量最少?最少是多少?
bash
awk -F "-" '{print $2,$3}' sales | sort -rnk 2 | tail -1
# 答案:banana 323
七、小贴士
-
Ctrl + C/Ctrl + Z:终止当前命令 -
管道
|可以串联多个命令 -
xargs将标准输入转为参数 -
-i参数会直接修改文件(sed/rm等) -
sort -rnk 2:按第2列数值降序排序