一句话总结
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。