臭名昭著aTrust隔离计划1.臭名昭著aTrust隔离计划2.VPN原理与aTrust隔离网络实践3.docker-easyconnect到底做了什么4.TUN(tunnel-隧道-虚拟网卡)模式
个人项目
personal(个人展示)GitHub Actions 自动部署个人展示项目
基于Quartz搭建的个人博客1.Quartz个人博客使用教程2.使用 rsync 增量部署 Quartz 博客3.使用 GitHub Actions 自动部署 Quartz 博客5.域名绑定6.CDN加速7.Google 搜索收录排查:为什么关键词搜得到别人,却搜不到我的网站?Obsidian、双向链接与知识图谱
架构设计
分布式分布式事务RPC原理
旅行
行程攻略青岛三日游行程攻略
前端
NginxNginx配置与反向代理入门
Nodenpm与npx的区别
数据库
mysql01.MySQL基础语法与约束02.MySQL数据库类型03.MySQL多表查询04.MySQL 索引05.MySQL 事务06.MySQL 隔离级别07.MySQL MVCC08.MySQL 锁09.EXPLAIN10.慢查询与 SQL 优化
mysql面试题01.索引问题02.事务与隔离级别03.锁机制04.存储引擎与性能优化05.用户权限、字符集与备份恢复
mysql实战01.EXPLAIN实战02.测试环境菜单误删排查与恢复03.MySQL IN 详解
网络
网络安全1.无线监听网卡苹果M系列虚拟机安装Kali Linux教程3.kali怎么使用RTL8812AU4.kali基础命令
网络基础进程之间怎样通过网络传递数据
网址常用网址
中间键
esElasticsearch 入门
mq
RabbitMQRabbitMQ高级RabbitMQ基础
1. MQ 基础2. MQ 核心角色与代码对应3. MQ Consumer Group 与消费模式4. SOFAMQ 账户变更代码实践5. MQ 可靠性问题6. 消息幂等
redis缓存击穿、穿透与雪崩Redis 分布式锁Redis 缓存问题Redis 数据结构
AI
使用说明
第三方插件&技能简介Archify使用与安装指南geekgeekRun使用OfferFlow使用指南Ponytail使用指南Skills Manager使用指南
CodexCodex CLI与IDE区别及使用指南Codex Hook单独配置与提交通知Codex MCP安装与使用指南Codex第三方插件安装与使用指南
Agent开发0-学习路线1.LLM、Token、上下文窗口与模型参数2.大模型 API、请求参数与响应结构3.Spring AI ChatClient4.Prompt、System Prompt、Prompt 模板6.结构化输出、JSON Schema7.SSE 流式响应8.会话 ID、聊天记录、Redis9.超时、重试、限流、降级10.*完成可运行聊天接口11.Function Calling、Tool Calling 原理12.用 Java 方法定义 Tool13.工具参数设计和校验14.实现订单查询工具15.实现物流查询工具16.实现库存查询工具17.多个工具自动选择18.工具异常、超时、重试
diy主机
主机零件学习1.CPU2.主板3.内存4.显卡5.硬盘6.散热7.风扇8.机箱热门型号价格表
捡垃圾diy-13600kf+5060diy-14600kf+5070
English高频词汇英文基础语法简单句子音标
GitGit常用命令Sublime Merge 使用指南
Java
工具库Caffeine本地缓存Reactor教程
工作实践如何使用@Async线程池使用与排查线上服务 CPU 使用率过高排查压测下RPC接口大量失败排查记录
基础1.HashMap2.ConcurrentHashMap3.HashSet4.final5.static6.volatile7.AtomicInteger8.String动态代理反射锁与线程同步线程注解
面试题1.HashMap 存储在方法内是线程安全的吗2.ArrayList参数传递与引用重新赋值3.== 和 equals 的区别、hashcode4.重载和重写的区别5.String、StringBuffer、StringBuilder区别及使用场景6.接口和抽象类7.ArrayList 与 LinkedList 的区别和扩容机制8.HashMap 和 Hashtable 的区别及底层实现9.Object 和 Objects 的区别10.ThreadLocal的原理和使用场景11.字节码是什么及作用12.Java类加载器有哪些13.双亲委派模型14.Java异常体系15.GC是什么16.GC如何判断对象可以被回收
面试总结0.HR面试模板1.面试一2.面试二3.面试三笔试
网络与 IO(黑马程序员-纯理论)01-网络编程基础02-IO模型与零拷贝03-BIO04-NIO基础与缓冲区05-NIO通道与选择器06-AIO
juc00-目录01-进程与线程02-线程同步与通信03-并发设计模式04-Java内存模型05-CAS与原子类06-ThreadLocal07-阻塞队列08-线程池使用与原理09-任务调度10-ForkJoin与享元模式11-AQS12-ReentrantLock13-读写锁14-并发协作工具15-ConcurrentHashMap16-CopyOnWrite与同步容器17-SkipListMap18-非阻塞队列
juc(工作常见)Java并发编程三个重点拆解
jvm1. JVM运行时数据区
Spring1.Spring IoC、DI与构造方法注入CGLIB、Byte Buddy 与 Spring AOPSpring 常用注解详解Spring Bean 生命周期
Spring MVC异常处理机制
linux常用命令
mac快捷键终端常用操作
python
基础01.Python是什么,为什么要安装Python02.Python项目中.venv是什么03.Python基础语法
基础实战sql替换
HTTPXHRMS员工详情接口调用(Python HTTPX)
windowswindows激活

Linux 常用命令

本文按日常使用场景整理。示例中的路径、用户名、进程号和服务名需要替换为实际值。多数命令适用于常见 Linux 发行版;systemctl 适用于使用 systemd 的系统,软件安装命令按发行版选择。

1. 查看帮助与当前位置

命令用途
pwd查看当前目录
ls -lah查看所有文件、权限和易读的文件大小
cd /var/log进入指定目录
cd ..返回上一级目录
cd ~返回当前用户的家目录
cd -返回上一次所在目录
man ls查看命令手册,按 q 退出
ls --help查看简要帮助
command -v python3查看命令的可执行文件位置
history查看历史命令

快捷键:Tab 补全命令或路径,Ctrl+C 中断前台命令,Ctrl+R 搜索历史命令,Ctrl+L 清屏,Ctrl+D 结束标准输入或退出当前 Shell。

2. 文件与目录操作

# 创建多级目录
mkdir -p ~/demo/logs
 
# 创建空文件;文件存在时更新其时间戳
touch ~/demo/app.log
 
# 复制文件、复制目录
cp ~/demo/app.log ~/demo/app.log.bak
cp -r ~/demo/logs ~/demo/logs-backup
 
# 移动或重命名;-i 在覆盖前询问
mv -i ~/demo/app.log.bak ~/demo/old.log
 
# 删除文件;-i 在删除前询问
rm -i ~/demo/old.log
 
# 删除空目录
rmdir ~/demo/logs-backup
 
# 删除目录及内容,逐项询问
rm -ri ~/demo/logs-backup
 
# 创建软链接:先写目标,再写链接路径
ln -s /opt/app/current/config.yml ~/config.yml
 
# 查看文件类型和元数据
file ~/demo/app.log
stat ~/demo/app.log

rm 通常不会把文件放入回收站。删除前先用 ls 确认路径;rmdir 只能删除空目录。

3. 查看和编辑文本

命令用途
cat app.log输出整个文件,适合小文件
less app.log分页查看,/关键词 搜索,n 下一个,q 退出
head -n 30 app.log查看前 30 行
tail -n 100 app.log查看最后 100 行
tail -F app.log持续跟踪日志,并尝试在文件轮转后重新打开
wc -l app.log统计换行符数量,通常用于估算行数
nano config.yml使用 nano 编辑(如已安装)
vi config.yml使用 vi 编辑

vi 常用操作:按 i 进入插入模式,按 Esc 回到普通模式,输入 :wq 保存退出,输入 :q! 放弃修改退出。

4. 查找文件与搜索内容

# 按文件名查找;通配符加引号,交给 find 处理
find /var/log -type f -name '*.log'
 
# 查找最近 24 小时内修改的文件
find /var/log -type f -mtime -1
 
# 查找超过 100 MiB 的文件
find /var/log -type f -size +100M
 
# 查找空文件
find ~/demo -type f -empty
 
# 搜索内容,显示行号;-i 忽略大小写
grep -n 'ERROR' app.log
grep -ni 'timeout' app.log
 
# 递归搜索指定目录
grep -rn --include='*.yml' 'server' ./config
 
# 显示匹配行前后各 3 行
grep -n -C 3 'Exception' app.log
 
# 匹配多个关键词;-v 用于排除匹配行
grep -nE 'ERROR|WARN' app.log
grep -v 'DEBUG' app.log

5. 管道、重定向与文本处理

写法含义
命令1 | 命令2将前一命令的标准输出交给后一命令
命令 > result.txt标准输出写入文件,会覆盖原内容
命令 >> result.txt标准输出追加到文件
命令 2> error.txt标准错误写入文件
命令 > all.log 2>&1标准输出和标准错误写入同一文件
命令1 && 命令2前一命令成功后才执行后一命令
# 统计包含 ERROR 的行数
grep -c 'ERROR' app.log
 
# 统计第一列的出现次数,并按次数降序排列
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -n 10
 
# 按冒号分隔,输出第一列
cut -d ':' -f 1 /etc/passwd
 
# 输出第 10~20 行
sed -n '10,20p' app.log
 
# 替换文本并输出结果,不修改原文件
sed 's/old/new/g' config.txt
 
# 同时显示结果并保存到文件;tee 默认覆盖
printf 'hello\n' | tee result.txt

uniq 只合并相邻的重复行,所以统计重复值时通常先执行 sort。重定向中的 2>&1 顺序有意义,应放在目标输出重定向之后。

6. 权限与用户

# 查看当前用户及其用户组
whoami
id
 
# 查看文件权限
ls -l app.sh
 
# 为文件所有者增加执行权限
chmod u+x app.sh
 
# 所有者可读写,组内及其他用户只读
chmod 644 config.yml
 
# 所有者可读写执行,组内及其他用户可读执行
chmod 755 app.sh
 
# 修改文件所有者和所属组,需要相应权限
sudo chown appuser:appgroup /opt/app/config.yml
 
# 使用管理员权限执行单条命令
sudo systemctl status nginx

权限数值:读 r=4、写 w=2、执行 x=1,三位依次对应所有者、所属组、其他用户。目录的 x 表示允许进入或访问目录中的条目。不要为解决权限问题直接把所有文件设为 777。

7. 进程与后台任务

# 查看全部进程
ps aux
 
# 按完整命令行查找进程
pgrep -af java
 
# 动态查看 CPU、内存和进程,按 q 退出
top
 
# 请求进程正常退出,12345 替换为实际 PID
kill -TERM 12345
 
# 正常退出无效时才强制终止,进程无法执行清理逻辑
kill -KILL 12345
 
# 后台运行,并将输出追加到日志
nohup ./app.sh >> app.log 2>&1 &
 
# 查看当前 Shell 的后台任务
jobs -l
 
# 将第 1 个后台任务切回前台
fg %1

Ctrl+Z 暂停前台任务;bg %1 让已暂停的第 1 个任务在后台继续运行。长期运行的服务宜交给 systemd 等服务管理器管理。

8. 系统、内存与磁盘

命令用途
uname -a查看内核及系统信息
cat /etc/os-release查看发行版信息
uptime查看运行时长和系统负载
date查看系统时间
free -h查看内存和交换空间
df -h查看文件系统容量使用情况
df -i查看 inode 使用情况
du -sh /var/log查看目录总大小
du -h --max-depth=1 /var/log查看一级子目录大小
lsblk查看块设备及挂载关系
vmstat 1 5每秒采样一次,共 5 次(如已安装)

free 的 available 比单看 free 更适合判断可用内存。磁盘仍有容量却无法新建文件时,可用 df -i 检查 inode 是否耗尽。

9. 网络与端口排查

# 查看 IP 地址和路由
ip addr
ip route
 
# 测试网络连通性;部分网络会禁用 ICMP
ping -c 4 example.com
 
# 查询 DNS 解析
dig example.com
 
# 查看 TCP 监听端口及进程,进程信息可能需要管理员权限
sudo ss -lntp
 
# 查看 UDP 监听端口
sudo ss -lnup
 
# 查看占用指定 TCP 端口的进程(需安装 lsof)
sudo lsof -nP -iTCP:8080 -sTCP:LISTEN
 
# 查看 HTTP 响应头;-I 发出 HEAD 请求
curl -I --connect-timeout 5 --max-time 15 https://example.com
 
# 查看请求及连接细节
curl -v --connect-timeout 5 --max-time 15 https://example.com
 
# 下载文件:HTTP 错误时返回失败,并跟随重定向
curl -fL --connect-timeout 5 --max-time 120 -o package.tar.gz https://example.com/package.tar.gz
 
# 测试 TCP 端口(需安装 nc;不同实现的选项可能不同)
nc -zv -w 3 127.0.0.1 8080

ping 成功只能说明 ICMP 连通,不能证明业务端口或 HTTP 服务正常。dig、lsof、nc 在精简系统上可能需要单独安装。

10. 服务与系统日志

以下命令适用于 systemd 系统;修改服务状态通常需要管理员权限。

# 查看服务状态
systemctl status nginx
 
# 启动、停止、重启服务
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
 
# 请求服务重新加载配置,需服务本身支持
sudo systemctl reload nginx
 
# 设置开机自启;不等于立即启动
sudo systemctl enable nginx
 
# 查看是否设置了开机自启
systemctl is-enabled nginx
 
# 修改 systemd 单元文件后,重新加载单元定义
sudo systemctl daemon-reload
 
# 查看服务最近 100 条日志
journalctl -u nginx -n 100 --no-pager
 
# 持续跟踪服务日志
journalctl -u nginx -f
 
# 查看本次开机的错误级别及更严重日志
journalctl -b -p err --no-pager
 
# 按时间范围查询
journalctl -u nginx --since '2026-10-24 09:00:00' --until '2026-10-24 10:00:00'

服务日志是否可见取决于当前用户权限;必要时使用 sudo journalctl。daemon-reload 重新读取单元定义,应用自身配置变更通常需要对应服务的 reload 或 restart。

11. 压缩与解压

# 打包并 gzip 压缩目录
tar -czf app-backup.tar.gz ./app
 
# 先查看压缩包内容
tar -tzf app-backup.tar.gz
 
# 解压到指定目录,目录需要先存在
mkdir -p ./restore
tar -xzf app-backup.tar.gz -C ./restore
 
# 创建 ZIP 压缩包(需安装 zip)
zip -r app.zip ./app
 
# 查看 ZIP 内容、解压到指定目录(需安装 unzip)
unzip -l app.zip
unzip app.zip -d ./restore

tar 常用参数:c 创建、x 解包、t 列出内容、z 使用 gzip、f 指定归档文件。解压前检查内容和目标目录,避免覆盖现有文件。

12. 远程连接与文件传输

# SSH 连接;默认端口为 22
ssh user@192.0.2.10
 
# 使用指定端口和私钥连接
ssh -p 2222 -i ~/.ssh/id_ed25519 user@192.0.2.10
 
# 上传文件;scp 的端口参数是大写 -P
scp -P 2222 ./app.tar.gz user@192.0.2.10:/tmp/
 
# 下载远程文件
scp user@192.0.2.10:/var/log/app.log ./app.log
 
# 先预览同步结果,不实际传输
rsync -avhn ./app/ user@192.0.2.10:/opt/app/
 
# 执行同步(远程目标目录需要有写入权限)
rsync -avh ./app/ user@192.0.2.10:/opt/app/

以上地址为文档示例地址,请替换。首次 SSH 连接应核对主机指纹。rsync 的源目录 ./app/ 表示复制目录内的内容,./app 表示复制目录本身;默认不会删除目标端多余文件。

13. 软件安装

# Debian / Ubuntu:更新软件包索引,再安装软件
sudo apt update
sudo apt install curl
 
# Fedora / 使用 dnf 的 RHEL 系发行版
sudo dnf install curl
 
# 较旧的 CentOS / RHEL 系统可能使用 yum
sudo yum install curl

安装前确认发行版和管理员权限。apt update 更新包索引,升级已安装软件使用 apt upgrade,两者作用不同。

14. 常见排查顺序

服务无法访问

  1. systemctl status 服务名:确认服务状态。
  2. journalctl -u 服务名 -n 100 --no-pager:查看启动错误。
  3. sudo ss -lntp:确认端口以及监听地址。
  4. curl -v http://127.0.0.1:端口:确认本机请求是否成功。
  5. 本机正常、远程异常时,继续检查 DNS、路由、防火墙及云平台安全组。

磁盘空间不足

  1. df -h:找到容量紧张的文件系统。
  2. df -i:排查 inode 是否耗尽。
  3. du -h --max-depth=1 /目标目录:逐层定位占用空间的目录。
  4. sudo lsof +L1:排查已删除但仍被进程打开的文件(需安装 lsof)。
  5. 确认文件用途和保留要求后再归档或清理;仍被进程打开的已删除文件,通常需要让进程关闭文件后才会释放空间。

CPU 或内存占用过高

  1. top:找到资源占用高的进程。
  2. ps -p 进程号 -o pid,ppid,%cpu,%mem,etime,args:查看进程及其运行时长。
  3. free -h:查看可用内存和交换空间。
  4. 结合应用日志进一步定位原因;操作进程前确认其归属及影响。