Linux 常用命令?

2025年 阅读约 12 分钟 面试指南 · Linux/Docker

深入解析Linux常用命令:文件操作(ls/cp/mv/find)、权限管理(chmod/chown)、进程管理(ps/kill)、文本处理三剑客(grep/awk/sed)、压缩解压(tar/gzip),附面试模拟问答。

一句话总结

Linux 常用命令分五大类:文件操作(ls/cp/mv/rm/find/tail)、权限管理(chmod 755/chown)、进程管理(ps aux/kill -9/top)、文本处理三剑客(grep 过滤/awk 列处理/sed 替换)、压缩解压(tar -czf/tar -xzf)。核心记忆:ls -la(看权限)、ps aux | grep java(找进程)、tail -f(看日志)、chmod 755(改权限)、find / -name "*.log"(找文件)。

初级理解

文件操作

# 目录操作 ls -la # 列出所有文件(含隐藏,详细信息) ls -lh # 人类可读的文件大小 cd /path # 切换目录 pwd # 当前目录路径 mkdir -p a/b/c # 递归创建目录 # 文件操作 cp source dest # 复制文件 cp -r src/ dest/ # 递归复制目录 mv old new # 移动/重命名 rm file # 删除文件 rm -rf dir/ # 递归强制删除(危险!) touch file.txt # 创建空文件/更新时间戳 # 查看文件 cat file.txt # 查看全部内容 head -n 20 file # 查看前 20 行 tail -f app.log # 实时查看日志(跟踪) tail -n 100 file # 查看最后 100 行 less file # 分页查看(可上下翻页) wc -l file # 统计行数 # 查找文件 find / -name "*.log" # 按名称查找 find / -size +100M # 查找大于 100M 的文件 find / -mtime -7 # 最近 7 天修改的文件 find . -name "*.log" -delete # 查找并删除

权限管理

# 权限表示:rwx rwx rwx # r=4(读) w=2(写) x=1(执行) # 三组:所有者 所属组 其他人 # 数字权限: chmod 755 file # rwxr-xr-x(所有者全权限,其他读+执行) chmod 644 file # rw-r--r--(所有者读写,其他只读) chmod 777 file # rwxrwxrwx(所有人全权限,危险!) # 符号权限: chmod u+x file # 所有者加执行权限 chmod g-w file # 所属组去掉写权限 chmod o=r file # 其他人只读 # 所有者/组: chown user:group file # 修改所有者和组 chown -R user:group dir/ # 递归修改 # 查看权限: ls -la # -rwxr-xr-x 1 root root 1234 May 17 10:00 file # 第一位:-文件 d目录 l链接 # 后9位:三组 rwx

中级深入

文本处理三剑客

# === grep:文本过滤 === grep "ERROR" app.log # 查找包含 ERROR 的行 grep -i "error" app.log # 忽略大小写 grep -v "DEBUG" app.log # 排除包含 DEBUG 的行 grep -c "ERROR" app.log # 统计匹配行数 grep -n "ERROR" app.log # 显示行号 grep -A 3 "ERROR" app.log # 显示匹配行及后 3 行 grep -B 2 "ERROR" app.log # 显示匹配行及前 2 行 grep -E "ERROR|WARN" app.log # 正则(多个关键词) ps aux | grep java # 管道组合 # === awk:列处理 === awk '{print $1}' file # 打印第 1 列 awk '{print $1, $3}' file # 打印第 1 和第 3 列 awk -F':' '{print $1}' /etc/passwd # 指定分隔符 awk '$3 > 100 {print $1}' file # 条件过滤 awk '{sum+=$3} END {print sum}' # 求和 # 实战:统计 Nginx 日志各状态码数量 awk '{print $9}' access.log | sort | uniq -c # === sed:流编辑器(替换/删除) === sed 's/old/new/g' file # 全局替换(不修改文件) sed -i 's/old/new/g' file # 直接修改文件 sed '3d' file # 删除第 3 行 sed -n '5,10p' file # 打印第 5-10 行 sed '/pattern/d' file # 删除匹配行 # 实战:替换配置文件中的端口 sed -i 's/port=8080/port=8081/g' config.properties

进程管理

# 查看进程 ps aux # 所有进程详细信息 ps aux | grep java # 查找 Java 进程 ps -ef | grep java # 另一种格式 # ps aux 输出列: # USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND # VSZ=虚拟内存(KB) RSS=物理内存(KB) # 进程状态 STAT: # R=运行 S=睡眠 D=不可中断 Z=僵尸 T=停止 # 终止进程 kill 1234 # 优雅终止(SIGTERM) kill -9 1234 # 强制终止(SIGKILL) kill -15 1234 # 默认终止信号 pkill -f "java -jar" # 按名称终止 # 后台运行 nohup java -jar app.jar > app.log 2>&1 & # nohup:忽略挂断信号 # > app.log:标准输出重定向 # 2>&1:标准错误重定向到标准输出 # &:后台运行 # 查看后台任务 jobs # 当前终端后台任务 bg %1 # 将任务 1 放到后台 fg %1 # 将任务 1 调到前台

高级进阶

管道与重定向

# 管道(|):将前一个命令的输出作为后一个命令的输入 ps aux | grep java | awk '{print $2}' | xargs kill # 解释:找 Java 进程 → 提取 PID → 传给 kill # 重定向: # > 覆盖写入 # >> 追加写入 # < 从文件读取 # 2> 错误输出重定向 # 2>&1 错误输出合并到标准输出 # /dev/null 黑洞(丢弃输出) # 实战: java -jar app.jar > app.log 2>&1 & # 标准输出和错误都写入 app.log,后台运行 # xargs:将标准输入转为命令行参数 find . -name "*.log" | xargs rm -f # 查找所有 .log 文件并删除 # tee:同时输出到文件和屏幕 java -jar app.jar 2>&1 | tee app.log # 日志同时显示在屏幕和写入文件

压缩与解压

# tar(最常用) tar -czf archive.tar.gz dir/ # 打包并 gzip 压缩 tar -xzf archive.tar.gz # 解压 tar -czf backup.tar.gz --exclude=*.log dir/ # 排除 .log # 参数记忆: # c=create(创建) x=extract(解压) # z=gzip j=bzip2 # v=verbose(显示过程) f=file(文件名) # zip/unzip zip -r archive.zip dir/ # 压缩 unzip archive.zip # 解压 # 查看压缩包内容(不解压) tar -tzf archive.tar.gz # 列出内容 unzip -l archive.zip # 列出内容

实战场景

# 场景1:查看日志中的错误 grep "ERROR" app.log | tail -20 # 最近 20 条错误日志 # 场景2:统计接口调用次数 grep "/api/user" access.log | wc -l # 统计 /api/user 被调用多少次 # 场景3:批量替换配置文件 sed -i 's/192.168.1.100/192.168.1.200/g' *.properties # 替换所有 properties 文件中的 IP # 场景4:查找大文件清理磁盘 find / -type f -size +100M -exec ls -lh {} \; # 查找大于 100M 的文件 # 场景5:查看 Java 进程启动参数 ps aux | grep java # 或 jps -lvm

面试模拟

面试官:Linux 常用命令有哪些?如何查看日志?

你:文件操作:ls/cp/mv/find。权限:chmod 755/chown。进程:ps aux | grep java/kill -9。日志:tail -f app.log(实时跟踪)、grep "ERROR" app.log(过滤错误)。文本处理:grep(过滤)、awk(列处理)、sed(替换)。管道组合:ps aux | grep java | awk '{print $2}' | xargs kill。

面试官:如何后台运行 Java 应用并记录日志?

你:nohup java -jar app.jar > app.log 2>&1 &。nohup 忽略挂断信号(关闭终端不退出),> app.log 标准输出重定向,2>&1 错误输出合并,& 后台运行。查看日志用 tail -f app.log。