大数据开发面试常问的 Linux 命令 总结

大数据开发面试必备Linux命令清单


本文总结了大数据开发面试中高频考察的Linux命令,重点突出与实际开发场景相关的技能点。核心内容包括:

  1. 文本处理三剑客(grep/awk/sed)的日志分析和数据处理应用
  2. 进程管理(ps/kill)和资源监控(top/free)命令
  3. 日志追踪(tail -f)和文件统计(wc)技巧
  4. 定时任务(crontab)和文件查找(find)的实战用法
  5. 网络诊断(netstat/ping)和性能分析(iostat)工具

特别整理了大数据场景下的典型命令组合,如排查Spark任务失败、清理HDFS数据等实用案例。


同时对比了kill -9/-15、>与>>等常见命令区别,帮助面试者精准应答技术细节问题。


总结大数据开发面试常问的 Linux 命令


作为大数据开发面试,Linux命令的考察重点与普通运维不同,更侧重于文件处理、日志查看、进程管理、性能监控、定时任务等实际开发场景。


下面我按照面试频率重要程度,给你整理一份大数据开发面试必备的Linux命令清单。


一、面试必考(出现率90%+)

1. 文本处理三剑客(awk/sed/grep)

命令 面试考点 大数据场景
grep 筛选日志、过滤关键信息 从海量日志中找错误、异常
sed 替换、删除指定行 清洗数据、格式化文本
awk 按列处理(最常考) 解析结构化日志、CSV文件、取特定字段
面试高频问题

bash

复制代码
# 1. 从日志中找出包含"ERROR"的行
grep "ERROR" app.log

# 2. 统计某个IP出现的次数
cat access.log | awk '{print $1}' | sort | uniq -c | sort -rn

# 3. 取出文件第3列(逗号分隔)
awk -F "," '{print $3}' data.csv

# 4. 输出内存使用率(top命令结果解析)
top -bn1 | grep "Cpu(s)" | awk '{print $2}' | awk -F "%" '{print $1}'

# 5. 替换文件中的旧内容为新内容
sed -i 's/old/new/g' file.txt

2. 进程与资源查看

命令 面试考点 大数据场景
ps 查看进程是否存在、进程ID 检查Hadoop/Spark服务是否启动
top 实时监控CPU、内存 排查资源瓶颈、查看哪个进程占用高
kill 结束进程 杀掉僵死进程、重启服务
free -m 查看内存使用 检查集群节点内存是否充足
df -h 查看磁盘使用 检查HDFS数据盘是否满
面试高频问题

bash

复制代码
# 1. 查看NameNode进程是否存在
ps -ef | grep NameNode | grep -v grep

# 2. 强制杀掉进程(-9 和 -15 的区别?)
kill -9 PID   # 强制杀死,不给清理机会
kill -15 PID  # 优雅关闭,允许进程清理资源

# 3. 查看Java进程(大数据组件多是Java写的)
ps -ef | grep java

# 4. 实时查看CPU最高的5个进程
top -b -n 1 | head -20

# 5. 查看磁盘空间,找出占用大的目录
du -sh /* 2>/dev/null | sort -rh | head -10

二、高频考察(70%+)

3. 日志查看与追踪

命令 面试考点 大数据场景
tail -f 实时追踪日志 监控任务执行日志
head / tail 查看文件头尾 快速预览数据文件
cat 查看小文件 查看配置文件、小数据文件
less / more 分页查看大文件 查看几GB的大日志
wc -l 统计行数 统计数据量
面试高频问题

bash

复制代码
# 1. 实时查看Hadoop任务日志
tail -f /var/log/hadoop/yarn/userlogs/application_xxx/container_xxx/stdout

# 2. 统计文件总行数
wc -l hugefile.txt

# 3. 查看文件前10行和后20行
head -10 file.txt && echo "===分隔===" && tail -20 file.txt

# 4. 查看文件从第1000行开始的200行(常用于分页查看大文件)
tail -n +1000 hugefile.txt | head -200

4. 文件查找与处理

命令 面试考点 大数据场景
find 按条件查找文件 查找日志文件、配置文件
xargs 批量处理文件 批量删除、批量移动文件
sort 排序 排序数据
uniq 去重 统计唯一值
wc 统计行数字数 数据量统计
面试高频问题

bash

复制代码
# 1. 查找7天前的日志文件并删除
find /var/log -name "*.log" -mtime +7 | xargs rm -rf

# 2. 查找大于100MB的文件
find / -type f -size +100M 2>/dev/null

# 3. 统计访问日志中独立IP数
cat access.log | awk '{print $1}' | sort | uniq | wc -l

# 4. 找出访问量前10的IP
cat access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -10

5. 定时任务

命令 面试考点 大数据场景
crontab -e 编辑定时任务 定时调度数据同步、清理脚本
crontab -l 查看定时任务 检查已有的调度
crontab -r 删除定时任务 清理无用调度
面试高频问题

bash

复制代码
# 1. 每天凌晨2点执行数据同步脚本
0 2 * * * /home/hadoop/bin/sync_data.sh

# 2. 每周日凌晨3点清理临时数据
0 3 * * 0 /home/hadoop/bin/clean_temp.sh

# 3. 每隔10分钟检查Hadoop服务状态
*/10 * * * * /home/hadoop/bin/check_hadoop.sh

# 4. 每月1号凌晨1点执行数据压缩归档
0 1 1 * * /home/hadoop/bin/archive_data.sh

三、中等频率(40-60%)

6. 网络与通信

命令 面试考点 大数据场景
netstat -apn 查看端口占用 检查HDFS端口9870是否正常监听
ss 查看socket连接 更快的netstat替代
ping 测试网络连通 排查节点间通信问题
telnet 测试端口是否通 测试某个节点端口是否开放
curl 发送HTTP请求 测试REST API、下载数据
面试高频问题

bash

复制代码
# 1. 检查NameNode的9870端口是否在监听
netstat -apn | grep 9870

# 2. 测试DataNode的50010端口是否通
telnet datanode01 50010

# 3. 查看当前所有TCP连接状态统计
netstat -ant | awk '{print $6}' | sort | uniq -c | sort -rn

# 4. 下载Hadoop安装包
curl -O https://archive.apache.org/dist/hadoop/common/hadoop-3.3.4/hadoop-3.3.4.tar.gz

7. 文件权限

命令 面试考点 大数据场景
chmod 修改权限 给脚本添加执行权限
chown 修改属主/属组 修改HDFS数据目录权限
ls -l 查看权限 排查权限错误
面试高频问题

bash

复制代码
# 1. 给脚本添加执行权限
chmod +x run_spark.sh

# 2. 修改整个目录的属主为hadoop用户
chown -R hadoop:hadoop /opt/hadoop_data

# 3. 给文件设置644权限(rw-r--r--)
chmod 644 config.xml
# 解释:属主读写,其他人只读

# 4. 面试题:755是什么意思?
# 答:属主:rwx(7),属组:r-x(5),其他:r-x(5)

读4写2执行1 确实看着没规律,但用对方法3秒就能记住


最核心的记忆规律(二进制)
  • 4 = 2²,2 = 2¹,1 = 2⁰
权限 数字 二进制 位位置
读(r) 4 100 第3位(4的位)
写(w) 2 010 第2位(2的位)
执行(x) 1 001 第1位(1的位)

规律:3位二进制,每一位代表一种权限

复制代码
  读    写    执行
  ↓     ↓     ↓
 [4]   [2]   [1]   ← 这位为1就有权限
  
 例:7 = 1 1 1 → rwx(全有)
 例:6 = 1 1 0 → rw-(无执行)
 例:5 = 1 0 1 → r-x(无写)
 例:4 = 1 0 0 → r--(只读)

8. 磁盘与空间管理

命令 面试考点 大数据场景
du -sh 查看目录大小 定位哪个目录占用空间大
df -h 查看磁盘使用率 检查数据盘是否快满了
lsblk 查看磁盘分区 查看磁盘挂载情况
面试高频问题

bash

复制代码
# 1. 找出/home下最大的10个文件
find /home -type f -exec du -sh {} \; 2>/dev/null | sort -rh | head -10

# 2. 查看哪个挂载点磁盘使用率最高
df -h | awk '{print $5,$1}' | sort -rn | head -5

# 3. 查看Hadoop数据目录大小
du -sh /data/hadoop/*

四、加分项(面试时亮眼)

9. 性能分析与调优

命令 用途 大数据场景
iostat 查看磁盘IO 分析HDFS读写是否瓶颈
vmstat 查看虚拟内存 分析内存交换情况
sar 历史性能数据 回溯分析历史性能问题
lsof 查看进程打开的文件 排查"文件打开过多"错误
面试加分回答

bash

复制代码
# 1. 查看磁盘IO情况(HDFS很依赖磁盘)
iostat -x 1  # 每秒刷新,看%util列

# 2. 查看系统负载(load average)
uptime
# load average: 0.5, 0.8, 1.2 
# 分别表示1分钟、5分钟、15分钟平均负载

# 3. 查看一个进程打开了哪些文件
lsof -p PID

# 4. 查看内存使用详情
cat /proc/meminfo | grep -E "MemTotal|MemFree|MemAvailable"

10. 重定向与管道(基础但高频)

符号 含义 大数据场景
` ` 管道
> 覆盖重定向 将结果写入文件
>> 追加重定向 追加日志
2> 错误重定向 只记录错误信息
2>&1 合并错误到标准输出 同时记录标准输出和错误
面试高频问题

bash

复制代码
# 1. 将命令的标准输出和错误输出都写入同一个文件
sh run_task.sh > task.log 2>&1

# 2. 只保留错误输出,丢弃标准输出
sh run_task.sh 2> error.log > /dev/null

# 3. 管道组合:找出消耗内存最多的Java进程
ps -ef | grep java | awk '{print $2}' | xargs -I {} sh -c "ps -p {} -o rss=,cmd= | awk '{print \$1,\$2}'"

五、面试官常问的"区别题"

对比项 区别说明
kill -9 vs kill -15 -9强制杀,-15优雅关闭(可清理资源)
> vs >> >覆盖,>>追加
grep vs awk grep按行筛选,awk按列处理
more vs less more只能往下翻,less可上下翻(more less → less功能更多)
$? vs $$ $?上一条命令退出码,$$当前shell的PID
ps -ef vs ps aux 格式不同,-ef用标准格式,aux用BSD格式,都能看所有进程
软链接 vs 硬链接 软链接像快捷方式,硬链接是多个文件名指向同一inode

六、大数据场景实战组合命令

场景1:排查Spark任务失败原因

bash

复制代码
# 1. 找到失败的application ID
yarn application -list -appStates FAILED

# 2. 找到该任务的日志文件位置
find /var/log/hadoop/yarn -name "*application_xxx*" -type f

# 3. 查看最后100行日志,找ERROR
tail -100 /path/to/container.log | grep -E "ERROR|Exception|Caused by"

# 4. 统计错误类型数量
grep "Exception" /path/to/container.log | awk '{print $NF}' | sort | uniq -c | sort -rn

场景2:清理HDFS临时数据

bash

复制代码
# 1. 查找7天前的tmp文件
find /data/hadoop/tmp -name "*.tmp" -mtime +7

# 2. 确认无误后删除
find /data/hadoop/tmp -name "*.tmp" -mtime +7 -delete

# 3. 定时清理脚本(crontab)
0 2 * * * /home/hadoop/bin/clean_hdfs_tmp.sh >> /var/log/clean_hdfs.log 2>&1

场景3:监控DataNode健康状况

bash

复制代码
# 1. 检查DataNode进程
ps -ef | grep DataNode | grep -v grep | wc -l

# 2. 检查DataNode端口
netstat -apn | grep 50020 | grep LISTEN

# 3. 查看DataNode日志最新错误
tail -100 /var/log/hadoop/hdfs/hadoop-hadoop-datanode-*.log | grep ERROR

# 4. 检查磁盘使用率
df -h | grep -E "data|Filesystem"

七、面试官可能问的Shell编程

bash

复制代码
# 1. $0、$1、$@、$# 分别代表什么?
$0  # 脚本名字
$1  # 第一个参数
$@  # 所有参数
$#  # 参数个数

# 2. if判断文件是否存在
if [ -f /path/to/file ]; then
    echo "文件存在"
fi

# 3. 循环处理
for i in {1..10}; do
    echo "Number: $i"
done

# 4. 判断命令是否执行成功
if [ $? -eq 0 ]; then
    echo "成功"
fi

八、记忆技巧(针对你的前端背景)

Linux概念 前端类比
管道 ` `
grep Array.filter()
awk map().split()
sed replace() + 正则
ps -ef Chrome的任务管理器
tail -f console.log() 实时看输出
重定向 > fs.writeFileSync()
/dev/null 黑洞,相当于 void

九、推荐学习路径

  1. 第一天:ls、cd、pwd、cat、echo、grep

  2. 第二天:ps、kill、top、free、df

  3. 第三天:awk、sed、grep进阶

  4. 第四天:find、xargs、crontab

  5. 第五天:组合实战(排查日志、清理数据)


总结:面试必背的10条命令

序号 命令 掌握程度
1 grep 必须熟练
2 awk '{print $n}' 必须熟练
3 sed -i 's/old/new/g' 熟练掌握
4 `ps -ef grep java`
5 kill -9 PID 必须会
6 tail -f 必须熟练
7 `find ... -mtime +7 xargs rm`
8 crontab -e 掌握格式
9 `netstat -apn grep 端口`
10 df -h / free -m 掌握

把这10条练熟,大数据开发的Linux面试基本没问题了!


补充面试必背的10条命令,都是什么意思啊,刚刚学,还没记住


你说得对!我直接给了10条命令但没解释清楚意思,对新人不友好。


下面我把这10条命令逐条拆解 ,用前端类比+英文原词+实际例子帮你彻底搞懂。


面试必背10条命令详解


1. grep --- 搜索关键词

bash

复制代码
grep "ERROR" app.log
组成部分 含义
grep G lobal R egular E xpression Print(全局正则匹配打印)
"ERROR" 要搜索的关键词
app.log 要搜索的文件

前端类比

javascript

复制代码
// grep 相当于 filter
const result = appLog.filter(line => line.includes('ERROR'));

实际效果 :从 app.log 文件中找出所有包含 ERROR 的行并打印出来。

面试常问

bash

复制代码
grep -v "ERROR" app.log   # -v 是反选,找不包含ERROR的行
grep -n "ERROR" app.log   # -n 显示行号
grep -r "ERROR" ./logs/   # -r 递归搜索整个目录

2. awk '{print $n}' --- 取第几列

bash

复制代码
awk '{print $3}' file.txt
组成部分 含义
awk 作者姓氏首字母(Aho、Weinberger、Kernighan),一个文本处理工具
'{print $3}' 打印第3列(1是第1列,1是第1列,2是第2列...)
file.txt 要处理的文件

前端类比

javascript

复制代码
// awk 相当于 split + 取数组元素
const lines = fileContent.split('\n');
lines.forEach(line => {
    const cols = line.split(/\s+/);  // 默认按空格分割
    console.log(cols[2]);             // 打印第3列(索引2)
});

实际效果:把文件的每一行按空格分割,取出第3列打印。

面试常问

bash

复制代码
awk -F "," '{print $2}' data.csv   # -F 指定分隔符,这里用逗号分割
awk '{print $1, $NF}' file.txt     # $NF 表示最后一列
awk '{sum += $3} END {print sum}' file.txt  # 计算第3列的总和

3. sed -i 's/old/new/g' --- 替换内容

bash

复制代码
sed -i 's/error/success/g' app.log
组成部分 含义
sed S tream Editor(流编辑器)
-i in-place(直接修改原文件,不加-i只是预览)
's/error/success/g' s=替换(substitute),把error换成success,g=全局(global)
app.log 要修改的文件

前端类比

javascript

复制代码
// sed 相当于 replaceAll
const result = appLog.replaceAll('error', 'success');
// 并且把结果写回原文件
fs.writeFileSync('app.log', result);

实际效果 :把 app.log 文件中所有的 error 替换成 success

面试常问

bash

复制代码
sed -i '3d' file.txt        # 删除第3行(d=delete)
sed -n '1,5p' file.txt      # 打印第1-5行(p=print,-n禁止默认输出)
sed -i 's/old/new/' file.txt # 不加g,只替换每行第一个匹配

4. ps -ef | grep java --- 查看Java进程

bash

复制代码
ps -ef | grep java
组成部分 含义
ps P rocess Status(进程状态)
-ef e=所有进程(every),f=完整格式(full)
` `
grep java 筛选包含"java"的行

前端类比

javascript

复制代码
// ps -ef 相当于任务管理器
const allProcesses = taskManager.getAll();
const javaProcesses = allProcesses.filter(p => p.name.includes('java'));

实际效果:查看系统中所有进程,只显示包含"java"的那些(比如NameNode、DataNode、Spark任务等)。

面试常问

bash

复制代码
ps aux | grep hadoop   # aux是另一种格式,也能看所有进程
ps -ef | grep -v grep | grep java  # 去掉grep自身那条
pgrep -f java          # 更简洁的方式,只打印PID

5. kill -9 PID --- 强制结束进程

bash

复制代码
kill -9 12345
组成部分 含义
kill 杀死进程
-9 信号9,SIGKILL(强制杀死,不给进程清理机会)
12345 进程ID(PID)

前端类比

javascript

复制代码
// 相当于 Chrome 任务管理器里的"结束进程"
process.kill(12345, 'SIGKILL');

实际效果:立刻终止PID为12345的进程,进程来不及做任何清理工作。

面试常问

bash

复制代码
kill -15 12345   # 优雅关闭,进程可以做清理(关闭文件、释放资源)
kill -9 -1       # 杀死当前用户的所有进程
killall java     # 杀死所有java进程

区别:-15是"请关闭",-9是"立刻死"。


6. tail -f --- 实时追踪日志

bash

复制代码
tail -f app.log
组成部分 含义
tail 尾部,查看文件末尾
-f follow(追踪,文件有新内容就实时显示)

前端类比

javascript

复制代码
// 相当于 console.log 实时输出
const watcher = fs.watch('app.log', (event) => {
    console.log(fs.readFileSync('app.log', 'utf8'));
});

实际效果 :显示文件最后10行(默认),然后实时打印新增的内容,按 Ctrl+C 退出。

面试常问

bash

复制代码
tail -100 app.log      # 查看最后100行
tail -n +200 app.log   # 从第200行开始显示
tail -f app.log | grep ERROR  # 实时追踪,只显示包含ERROR的行

7. find ... -mtime +7 | xargs rm --- 删除7天前的文件

bash

复制代码
find /var/log -name "*.log" -mtime +7 | xargs rm -rf
组成部分 含义
find 查找文件
/var/log 要搜索的目录
-name "*.log" 文件名以.log结尾
-mtime +7 mtime=修改时间,+7表示7天前(超过7天)
` `
xargs 把输入转成命令行参数(因为rm不支持管道直接传)
rm -rf 强制删除

前端类比

javascript

复制代码
// 相当于
const files = findFiles('/var/log', { ext: '.log', daysOld: 7 });
files.forEach(file => fs.rmSync(file, { force: true, recursive: true }));

实际效果 :找到 /var/log 目录下所有7天前修改的 .log 文件,然后批量删除。

面试常问

bash

复制代码
find . -type f -size +100M      # 找大于100M的文件
find . -type d -name "temp"     # 找名为temp的目录
find . -mtime -3                # 找3天内修改的文件
find . -name "*.tmp" -delete    # 更安全的写法,不用xargs

为什么用xargsrm 不支持从管道直接读数据,所以需要 xargs 转换。


8. crontab -e --- 编辑定时任务

bash

复制代码
crontab -e
组成部分 含义
crontab cron table(定时任务表)
-e edit(编辑)

前端类比

javascript

复制代码
// 相当于 setInterval,但更强大(可以设置每天/每周执行)
setInterval(() => { runTask(); }, 24 * 60 * 60 * 1000);

实际效果:打开一个编辑器,在里面写入定时任务规则,保存后自动生效。

定时任务格式

bash

复制代码
* * * * * command
│ │ │ │ │
│ │ │ │ └─── 周几 (0-6, 0=周日)
│ │ │ └───── 月份 (1-12)
│ │ └─────── 日期 (1-31)
│ └───────── 小时 (0-23)
└─────────── 分钟 (0-59)

面试常问

bash

复制代码
crontab -l   # 查看当前所有定时任务
crontab -r   # 删除所有定时任务

# 例子:每天凌晨2点执行备份
0 2 * * * /home/hadoop/backup.sh

# 例子:每10分钟执行一次
*/10 * * * * /home/hadoop/check.sh

9. netstat -apn | grep 端口 --- 查看端口占用

bash

复制代码
netstat -apn | grep 9870
组成部分 含义
netstat Net work Statistics(网络统计)
-a all(所有端口)
-p process(显示进程名/PID)
-n numeric(用数字显示端口,不解析服务名)
` grep 9870`

前端类比

javascript

复制代码
// 相当于
const connections = getNetworkConnections();
const port9870 = connections.filter(c => c.port === 9870);

实际效果:查看哪个进程占用了9870端口(HDFS NameNode的Web UI端口)。

面试常问

bash

复制代码
netstat -an | grep LISTEN     # 查看所有监听端口
ss -tlnp | grep 9870          # 更快的netstat替代方案
lsof -i :9870                 # 另一个查看端口占用的命令

10. df -h / free -m --- 查看磁盘和内存

bash

复制代码
df -h
free -m
命令 组成部分 含义
df -h D isk F ree(磁盘空闲)+ human(人类可读) 查看磁盘使用情况
free -m Free memory + megabytes(以MB显示) 查看内存使用情况

前端类比

javascript

复制代码
// df -h 相当于
console.log('硬盘剩余:', diskInfo.free / 1024 / 1024 / 1024, 'GB');

// free -m 相当于
console.log('内存剩余:', memoryInfo.free, 'MB');

实际效果

df -h 输出示例:

text

复制代码
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       100G   45G   55G  46% /

free -m 输出示例:

text

复制代码
              total   used   free   available
Mem:           15985   8232   7753    7123
Swap:          2047      0   2047

面试常问

bash

复制代码
du -sh /home/hadoop   # 查看某个目录占多大空间
df -i                 # 查看inode使用情况(文件数量限制)
free -h               # 人类可读格式的内存
cat /proc/meminfo     # 查看更详细的内存信息

附:一次性搞定记忆表

命令 英文原词 一句话解释 前端类比
grep Global Regular Expression Print 搜索关键词 filter()
awk 作者姓氏 取第几列 split()+[2]
sed Stream Editor 替换/删除行 replaceAll()
ps Process Status 看进程 任务管理器
kill 杀死 结束进程 结束任务
tail -f Tail + Follow 实时看日志 console.log
find 查找 找文件 搜索文件
xargs 无全称 转换参数格式 适配器模式
crontab Cron Table 定时任务 setInterval
netstat Network Statistics 看端口 网络连接
df Disk Free 看磁盘 硬盘属性
free 空闲 看内存 任务管理器内存

最后的建议

每天练3条,4天就记住了

  • Day1: grep + awk + sed(文本处理铁三角)

  • Day2: ps + kill + tail -f(进程日志铁三角)

  • Day3: find + xargs + crontab(文件定时铁三角)

  • Day4: netstat + df + free(系统监控铁三角)

每条命令自己动手敲5遍,比看10遍都有用!

相关推荐
GIOTTO情1 小时前
大数据技术应用:媒介投放全域舆情风控与数据优化解决方案
大数据
辰尘_星启1 小时前
【Linux】Python Socket编程指南
linux·python·socket·系统·通信
跨境卫士苏苏1 小时前
经营变量持续增加之下跨境团队如何减少月度计划偏差
大数据·人工智能·内容运营·亚马逊·跨境
eastyuxiao1 小时前
能源电力领域的数字孪生应用场景有哪些
大数据·人工智能·智慧城市·能源·数字孪生
恋奴娇2 小时前
ubuntu 25 突破pipewire 不能以root帐号运行 系统没有声音输入输出设备
linux·运维·ubuntu
财经资讯数据_灵砚智能2 小时前
基于全球经济类多源新闻的NLP情感分析与数据可视化(夜间-次晨)2026年5月13日
大数据·人工智能·python·信息可视化·语言模型·自然语言处理
Bert.Cai2 小时前
Linux dirname命令详解
linux·运维·服务器
有梦想的小何2 小时前
Cursor AI 编程实战(篇一):Prompt 与案例总结
java·linux·prompt·ai编程
程序 代码狂人2 小时前
Linux查询自己环境的一些基础命令
linux·运维·服务器