大数据开发面试常问的 Linux 命令 总结
大数据开发面试必备Linux命令清单本文总结了大数据开发面试中高频考察的Linux命令重点突出与实际开发场景相关的技能点。核心内容包括文本处理三剑客grep/awk/sed的日志分析和数据处理应用进程管理ps/kill和资源监控top/free命令日志追踪tail -f和文件统计wc技巧定时任务crontab和文件查找find的实战用法网络诊断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.txt2. 进程与资源查看命令面试考点大数据场景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 -2004. 文件查找与处理命令面试考点大数据场景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 -105. 定时任务命令面试考点大数据场景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.gz7. 文件权限命令面试考点大数据场景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是什么意思 # 答属主rwx7属组r-x5其他r-x58. 磁盘与空间管理命令面试考点大数据场景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|MemAvailable10. 重定向与管道基础但高频符号含义大数据场景|管道组合多个命令覆盖重定向将结果写入文件追加重定向追加日志2错误重定向只记录错误信息21合并错误到标准输出同时记录标准输出和错误面试高频问题bash# 1. 将命令的标准输出和错误输出都写入同一个文件 sh run_task.sh task.log 21 # 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 -9vskill -15-9强制杀-15优雅关闭可清理资源vs覆盖追加grepvsawkgrep按行筛选awk按列处理morevslessmore只能往下翻less可上下翻more less → less功能更多$?vs$$$?上一条命令退出码$$当前shell的PIDps -efvsps 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 21场景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概念前端类比管道|Promise.then()链式调用grepArray.filter()awkmap().split()sedreplace() 正则ps -efChrome的任务管理器tail -fconsole.log()实时看输出重定向fs.writeFileSync()/dev/null黑洞相当于void九、推荐学习路径第一天ls、cd、pwd、cat、echo、grep第二天ps、kill、top、free、df第三天awk、sed、grep进阶第四天find、xargs、crontab第五天组合实战排查日志、清理数据总结面试必背的10条命令序号命令掌握程度1grep必须熟练2awk {print $n}必须熟练3sed -i s/old/new/g熟练掌握4ps -ef | grep java必须熟练5kill -9 PID必须会6tail -f必须熟练7find ... -mtime 7 | xargs rm熟练掌握8crontab -e掌握格式9netstat -apn | grep 端口掌握10df -h/free -m掌握把这10条练熟大数据开发的Linux面试基本没问题了补充面试必背的10条命令都是什么意思啊刚刚学还没记住你说得对我直接给了10条命令但没解释清楚意思对新人不友好。下面我把这10条命令逐条拆解用前端类比英文原词实际例子帮你彻底搞懂。面试必背10条命令详解1.grep— 搜索关键词bashgrep ERROR app.log组成部分含义grepGlobalRegularExpressionPrint全局正则匹配打印ERROR要搜索的关键词app.log要搜索的文件前端类比javascript// grep 相当于 filter const result appLog.filter(line line.includes(ERROR));实际效果从app.log文件中找出所有包含ERROR的行并打印出来。面试常问bashgrep -v ERROR app.log # -v 是反选找不包含ERROR的行 grep -n ERROR app.log # -n 显示行号 grep -r ERROR ./logs/ # -r 递归搜索整个目录2.awk {print $n}— 取第几列bashawk {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列打印。面试常问bashawk -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— 替换内容bashsed -i s/error/success/g app.log组成部分含义sedStreamEditor流编辑器-iin-place直接修改原文件不加-i只是预览s/error/success/gs替换(substitute)把error换成successg全局(global)app.log要修改的文件前端类比javascript// sed 相当于 replaceAll const result appLog.replaceAll(error, success); // 并且把结果写回原文件 fs.writeFileSync(app.log, result);实际效果把app.log文件中所有的error替换成success。面试常问bashsed -i 3d file.txt # 删除第3行ddelete sed -n 1,5p file.txt # 打印第1-5行pprint-n禁止默认输出 sed -i s/old/new/ file.txt # 不加g只替换每行第一个匹配4.ps -ef | grep java— 查看Java进程bashps -ef | grep java组成部分含义psProcessStatus进程状态-efe所有进程(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任务等。面试常问bashps aux | grep hadoop # aux是另一种格式也能看所有进程 ps -ef | grep -v grep | grep java # 去掉grep自身那条 pgrep -f java # 更简洁的方式只打印PID5.kill -9 PID— 强制结束进程bashkill -9 12345组成部分含义kill杀死进程-9信号9SIGKILL强制杀死不给进程清理机会12345进程IDPID前端类比javascript// 相当于 Chrome 任务管理器里的结束进程 process.kill(12345, SIGKILL);实际效果立刻终止PID为12345的进程进程来不及做任何清理工作。面试常问bashkill -15 12345 # 优雅关闭进程可以做清理关闭文件、释放资源 kill -9 -1 # 杀死当前用户的所有进程 killall java # 杀死所有java进程区别-15是请关闭-9是立刻死。6.tail -f— 实时追踪日志bashtail -f app.log组成部分含义tail尾部查看文件末尾-ffollow追踪文件有新内容就实时显示前端类比javascript// 相当于 console.log 实时输出 const watcher fs.watch(app.log, (event) { console.log(fs.readFileSync(app.log, utf8)); });实际效果显示文件最后10行默认然后实时打印新增的内容按CtrlC退出。面试常问bashtail -100 app.log # 查看最后100行 tail -n 200 app.log # 从第200行开始显示 tail -f app.log | grep ERROR # 实时追踪只显示包含ERROR的行7.find ... -mtime 7 | xargs rm— 删除7天前的文件bashfind /var/log -name *.log -mtime 7 | xargs rm -rf组成部分含义find查找文件/var/log要搜索的目录-name *.log文件名以.log结尾-mtime 7mtime修改时间7表示7天前超过7天|管道把找到的文件传给xargsxargs把输入转成命令行参数因为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文件然后批量删除。面试常问bashfind . -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— 编辑定时任务bashcrontab -e组成部分含义crontabcron table定时任务表-eedit编辑前端类比javascript// 相当于 setInterval但更强大可以设置每天/每周执行 setInterval(() { runTask(); }, 24 * 60 * 60 * 1000);实际效果打开一个编辑器在里面写入定时任务规则保存后自动生效。定时任务格式bash* * * * * command │ │ │ │ │ │ │ │ │ └─── 周几 (0-6, 0周日) │ │ │ └───── 月份 (1-12) │ │ └─────── 日期 (1-31) │ └───────── 小时 (0-23) └─────────── 分钟 (0-59)面试常问bashcrontab -l # 查看当前所有定时任务 crontab -r # 删除所有定时任务 # 例子每天凌晨2点执行备份 0 2 * * * /home/hadoop/backup.sh # 例子每10分钟执行一次 */10 * * * * /home/hadoop/check.sh9.netstat -apn | grep 端口— 查看端口占用bashnetstat -apn | grep 9870组成部分含义netstatNetworkStatistics网络统计-aall所有端口-pprocess显示进程名/PID-nnumeric用数字显示端口不解析服务名| grep 9870筛选出包含9870的行前端类比javascript// 相当于 const connections getNetworkConnections(); const port9870 connections.filter(c c.port 9870);实际效果查看哪个进程占用了9870端口HDFS NameNode的Web UI端口。面试常问bashnetstat -an | grep LISTEN # 查看所有监听端口 ss -tlnp | grep 9870 # 更快的netstat替代方案 lsof -i :9870 # 另一个查看端口占用的命令10.df -h/free -m— 查看磁盘和内存bashdf -h free -m命令组成部分含义df -hDiskFree磁盘空闲human人类可读查看磁盘使用情况free -mFreememory megabytes以MB显示查看内存使用情况前端类比javascript// df -h 相当于 console.log(硬盘剩余:, diskInfo.free / 1024 / 1024 / 1024, GB); // free -m 相当于 console.log(内存剩余:, memoryInfo.free, MB);实际效果df -h输出示例textFilesystem Size Used Avail Use% Mounted on /dev/sda1 100G 45G 55G 46% /free -m输出示例texttotal used free available Mem: 15985 8232 7753 7123 Swap: 2047 0 2047面试常问bashdu -sh /home/hadoop # 查看某个目录占多大空间 df -i # 查看inode使用情况文件数量限制 free -h # 人类可读格式的内存 cat /proc/meminfo # 查看更详细的内存信息附一次性搞定记忆表命令英文原词一句话解释前端类比grepGlobal Regular Expression Print搜索关键词filter()awk作者姓氏取第几列split()[2]sedStream Editor替换/删除行replaceAll()psProcess Status看进程任务管理器kill杀死结束进程结束任务tail -fTail Follow实时看日志console.logfind查找找文件搜索文件xargs无全称转换参数格式适配器模式crontabCron Table定时任务setIntervalnetstatNetwork Statistics看端口网络连接dfDisk Free看磁盘硬盘属性free空闲看内存任务管理器内存最后的建议每天练3条4天就记住了Day1:grepawksed文本处理铁三角Day2:pskilltail -f进程日志铁三角Day3:findxargscrontab文件定时铁三角Day4:netstatdffree系统监控铁三角每条命令自己动手敲5遍比看10遍都有用