Linux 常用命令速查指南
面向开发者的实用命令手册,覆盖文件操作、文本处理、网络调试、进程管理、Docker/K8s 等场景
一、文件与目录操作
查看与导航
# 查看当前目录
pwd
# 列出文件(详细信息)
ls -la
# 列出文件(按时间倒序,最新的在前)
ls -lt
# 列出文件(人类可读的文件大小)
ls -lh
# 只列出目录
ls -d */
# 切换目录
cd /path/to/dir
cd .. # 上一级
cd ~ # 回到用户主目录
cd - # 回到上一次的目录
# 查看目录树结构(需安装 tree)
tree -L 2 # 显示 2 层深度
创建与删除
# 创建目录(含父目录)
mkdir -p /path/to/new/dir
# 创建空文件
touch file.txt
# 删除文件
rm file.txt
# 删除目录(递归,强制,不提示)
rm -rf dir_name
# 复制文件
cp source.txt dest.txt
# 复制目录
cp -r source_dir/ dest_dir/
# 移动/重命名
mv old_name.txt new_name.txt
mv file.txt /other/path/
查看文件内容
# 查看完整文件
cat file.txt
# 查看前 N 行
head -n 20 file.txt
# 查看后 N 行
tail -n 20 file.txt
# 实时跟踪文件末尾(看日志用)
tail -f /var/log/app.log
# 实时跟踪 + 只看包含 ERROR 的行
tail -f /var/log/app.log | grep ERROR
# 分页查看大文件
less file.txt
# less 中:q 退出,/ 搜索,n 下一个匹配,G 跳到末尾
# 查看文件行数/字数/字节数
wc -l file.txt # 行数
wc -w file.txt # 字数
查找文件
# 按名称查找
find / -name "*.log"
find /app -name "settings.py"
# 按名称查找(不区分大小写)
find / -iname "readme*"
# 查找最近 1 天内修改的文件
find /app -mtime -1
# 查找大于 100M 的文件
find / -size +100M
# 快速定位命令路径
which python
which nginx
# 查找文件(基于索引,更快但可能不是最新)
locate settings.py
二、文本搜索与处理
grep 文本搜索
# 在文件中搜索关键词
grep "ERROR" app.log
# 递归搜索目录下所有文件
grep -r "database" /app/configs/
# 忽略大小写
grep -i "error" app.log
# 显示行号
grep -n "ERROR" app.log
# 显示匹配行的前后 3 行上下文
grep -C 3 "Exception" app.log
# 反向匹配(排除包含 DEBUG 的行)
grep -v "DEBUG" app.log
# 统计匹配行数
grep -c "ERROR" app.log
# 正则匹配
grep -E "error|warning|fatal" app.log
# 只输出匹配的文件名
grep -rl "password" /app/
sed 文本替换
# 替换文件中的文本(直接修改文件)
sed -i 's/old_text/new_text/g' file.txt
# 替换(不修改原文件,输出到新文件)
sed 's/old/new/g' file.txt > new_file.txt
# 删除空行
sed '/^$/d' file.txt
# 删除第 5 行
sed '5d' file.txt
# 只打印第 10-20 行
sed -n '10,20p' file.txt
awk 文本分析
# 打印第 1 列和第 3 列(默认空格分隔)
awk '{print $1, $3}' file.txt
# 指定分隔符(如冒号)
awk -F: '{print $1, $3}' /etc/passwd
# 打印行号和内容
awk '{print NR, $0}' file.txt
# 条件过滤(第 3 列大于 100)
awk '$3 > 100 {print $0}' data.txt
# 求和
awk '{sum += $1} END {print sum}' numbers.txt
排序与去重
# 排序
sort file.txt
# 数字排序
sort -n file.txt
# 倒序
sort -r file.txt
# 去重
sort file.txt | uniq
# 去重并统计出现次数(按次数倒序)
sort file.txt | uniq -c | sort -rn
三、权限与用户
# 查看文件权限
ls -la file.txt
# 修改权限(所有人可读可写可执行)
chmod 777 file.txt
# 常用权限
chmod 755 script.sh # 所有者 rwx,其他人 rx
chmod 644 config.txt # 所有者 rw,其他人 r
chmod +x script.sh # 添加执行权限
# 修改文件所有者
chown user:group file.txt
chown -R user:group dir/ # 递归
# 查看当前用户
whoami
# 切换用户
su - username
# 以 root 权限执行
sudo command
四、网络与调试
网络连通性
# ping 测试
ping -c 4 10.19.103.159
# 测试端口是否通(替代 telnet)
nc -zv 10.19.103.159 9200
# 查看路由跳数
traceroute 10.19.103.159
# DNS 查询
nslookup example.com
dig example.com
# 查看本机 IP
ip addr
hostname -I
curl HTTP 请求
# GET 请求
curl http://example.com/api
# POST 请求(JSON)
curl -X POST "http://example.com/api" \
-H "Content-Type: application/json" \
-d '{"key": "value"}'
# 带认证
curl -u "user:password" http://example.com/api
# 显示响应头
curl -I http://example.com
# 详细调试信息
curl -v http://example.com
# 忽略 SSL 证书验证
curl -k https://example.com
# 下载文件
curl -O http://example.com/file.tar.gz
# 设置超时(秒)
curl --connect-timeout 5 --max-time 30 http://example.com
# 输出格式化 JSON
curl -s http://example.com/api | python3 -m json.tool
curl -s http://example.com/api | jq .
# 测试 SSL/TLS 握手
openssl s_client -connect example.com:443 -servername example.com
端口与连接
# 查看所有监听端口
ss -tlnp
netstat -tlnp
# 查看指定端口被谁占用
lsof -i :8080
ss -tlnp | grep 8080
# 查看所有网络连接
ss -anp
# 查看防火墙规则
iptables -L -n
firewall-cmd --list-all
五、进程管理
# 查看所有进程
ps aux
# 搜索指定进程
ps aux | grep python
ps aux | grep nginx
# 实时进程监控(类似任务管理器)
top
htop # 更好用,需安装
# 杀死进程
kill PID
kill -9 PID # 强制杀死
# 按名称杀死进程
pkill -f "python api.py"
killall python
# 后台运行命令
nohup python api.py > output.log 2>&1 &
# 查看后台任务
jobs
# 查看系统负载
uptime
六、磁盘与内存
# 查看磁盘使用情况
df -h
# 查看当前目录大小
du -sh .
# 查看子目录大小(排序)
du -sh */ | sort -rh
# 查看内存使用
free -h
# 查看系统信息
uname -a
# 查看 CPU 信息
lscpu
cat /proc/cpuinfo | head -20
七、压缩与解压
# tar.gz 压缩
tar -czf archive.tar.gz dir_name/
# tar.gz 解压
tar -xzf archive.tar.gz
# 解压到指定目录
tar -xzf archive.tar.gz -C /target/dir/
# zip 压缩
zip -r archive.zip dir_name/
# zip 解压
unzip archive.zip
# 查看压缩包内容(不解压)
tar -tzf archive.tar.gz
unzip -l archive.zip
八、系统服务管理(systemctl)
# 查看服务状态
systemctl status nginx
# 启动/停止/重启服务
systemctl start nginx
systemctl stop nginx
systemctl restart nginx
# 设置开机自启
systemctl enable nginx
systemctl disable nginx
# 查看所有运行中的服务
systemctl list-units --type=service --state=running
# 查看服务日志
journalctl -u nginx -f # 实时跟踪
journalctl -u nginx --since today
九、Docker 常用命令
# 查看运行中的容器
docker ps
# 查看所有容器(含已停止)
docker ps -a
# 查看镜像列表
docker images
# 运行容器
docker run -d --name myapp -p 8080:8080 image_name
# 进入运行中的容器
docker exec -it container_name bash
docker exec -it container_name sh # 如果没有 bash
# 查看容器日志
docker logs container_name
docker logs -f container_name # 实时跟踪
docker logs --tail 100 container_name # 最后 100 行
# 停止/启动/重启容器
docker stop container_name
docker start container_name
docker restart container_name
# 删除容器
docker rm container_name
docker rm -f container_name # 强制删除运行中的
# 删除镜像
docker rmi image_name
# 构建镜像
docker build -t image_name:tag .
# 查看容器资源占用
docker stats
# 复制文件到容器/从容器复制
docker cp local_file container_name:/path/
docker cp container_name:/path/file local_file
# 清理无用资源
docker system prune -f
十、Kubernetes (kubectl) 常用命令
# 查看所有 Pod
kubectl get pods -A
kubectl get pods -n namespace_name
# 查看 Pod 详情
kubectl describe pod pod_name -n namespace
# 查看 Pod 日志
kubectl logs pod_name -n namespace
kubectl logs -f pod_name -n namespace # 实时跟踪
kubectl logs pod_name -n namespace --tail=100 # 最后 100 行
# 进入 Pod
kubectl exec -it pod_name -n namespace -- bash
kubectl exec -it pod_name -n namespace -- sh
# 查看 Service
kubectl get svc -A
# 查看 Ingress
kubectl get ingress -A
kubectl describe ingress ingress_name -n namespace
# 查看 ConfigMap / Secret
kubectl get configmap -n namespace
kubectl get secret -n namespace
kubectl describe secret secret_name -n namespace
# 查看节点
kubectl get nodes
kubectl describe node node_name
# 查看集群事件
kubectl get events -n namespace --sort-by='.lastTimestamp'
# 端口转发(本地调试)
kubectl port-forward pod_name 8080:8080 -n namespace
# 扩缩容
kubectl scale deployment deploy_name --replicas=3 -n namespace
# 重启 Deployment(滚动重启)
kubectl rollout restart deployment deploy_name -n namespace
# 查看部署历史
kubectl rollout history deployment deploy_name -n namespace
# 查看资源使用
kubectl top pods -n namespace
kubectl top nodes
十一、Git 常用命令
# 查看状态
git status
# 查看分支
git branch -a
# 切换分支
git checkout branch_name
git switch branch_name
# 创建并切换新分支
git checkout -b new_branch
# 拉取最新代码
git pull
git pull origin main
# 暂存 + 提交
git add .
git commit -m "提交说明"
# 推送
git push origin branch_name
# 查看提交日志
git log --oneline -20
# 查看某个文件的修改历史
git log --oneline -p file.py
# 查看差异
git diff
git diff --staged
# 暂存当前修改(不提交)
git stash
git stash pop
# 回退到上一个提交(保留修改)
git reset --soft HEAD~1
# 回退到上一个提交(丢弃修改)
git reset --hard HEAD~1
# 合并分支
git merge branch_name
# 变基
git rebase main
十二、日志分析实战
# 统计 ERROR 出现次数
grep -c "ERROR" app.log
# 按小时统计错误数
grep "ERROR" app.log | awk '{print substr($1,1,13)}' | sort | uniq -c
# 查看最近 1 小时的日志
awk -v d="$(date -d '1 hour ago' '+%Y-%m-%d %H:%M')"'$0 >= d' app.log
# 提取所有 IP 并统计访问次数
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -20
# 查看响应时间最慢的 10 个请求
awk '{print $NF, $7}' access.log | sort -rn | head -10
# 实时监控错误日志并报警
tail -f app.log | grep --line-buffered "ERROR" | whileread line; do
echo"$(date) ALERT: $line"
done
十三、管道与重定向
# 管道:将前一个命令的输出作为后一个命令的输入
cat file.txt | grep "error" | wc -l
# 输出重定向(覆盖)
echo"hello" > file.txt
# 输出重定向(追加)
echo"world" >> file.txt
# 错误输出重定向
command 2> error.log
# 标准输出和错误输出都重定向
command > output.log 2>&1
# 丢弃所有输出
command > /dev/null 2>&1
# xargs:将输入转为命令参数
find . -name "*.pyc" | xargs rm -f
grep -rl "old_text" . | xargs sed -i 's/old_text/new_text/g'
十四、快捷键
以上命令基于 CentOS/Ubuntu 等主流 Linux 发行版,部分命令可能需要 sudo 权限或额外安装(如 htop、jq、tree)。
十五、历史记录与清理
# 查看历史命令
history
# 查看最近 20 条
history 20
# 搜索历史命令(交互式)
Ctrl+R # 然后输入关键词,按 Ctrl+R 继续搜索上一条
# 执行历史中第 N 条命令
!100
# 执行上一条命令
!!
# 执行上一条以 curl 开头的命令
!curl
# 清除当前会话的历史记录
history -c
# 清除历史记录文件(彻底清除)
history -c && history -w
# 或直接清空文件
> ~/.bash_history && history -c
# 删除历史中指定某一条(如第 150 条)
history -d 150
# 执行命令但不记录到历史(前面加空格)
curl -u "user:pass" http://example.com # 注意最前面有个空格
# 设置历史记录不保存(临时)
export HISTSIZE=0
# 清屏
clear
# 或
Ctrl+L
十六、环境变量与配置
# 查看所有环境变量
env
printenv
# 查看指定环境变量
echo$PATH
echo$HOME
echo$USER
# 临时设置环境变量(当前会话有效)
export MY_VAR="hello"
export PATH=$PATH:/new/path
# 永久设置(写入配置文件)
echo'export MY_VAR="hello"' >> ~/.bashrc
source ~/.bashrc # 立即生效
# 取消环境变量
unset MY_VAR
# 常用配置文件
~/.bashrc # 用户级 bash 配置(每次打开终端加载)
~/.bash_profile # 用户级登录配置(登录时加载)
/etc/profile # 系统级配置
/etc/environment # 系统环境变量
# 查看当前 shell
echo$SHELL
# 切换 shell
chsh -s /bin/zsh
十七、定时任务(crontab)
# 查看当前用户的定时任务
crontab -l
# 编辑定时任务
crontab -e
# cron 表达式格式:分 时 日 月 周
# ┌───── 分钟 (0-59)
# │ ┌───── 小时 (0-23)
# │ │ ┌───── 日 (1-31)
# │ │ │ ┌───── 月 (1-12)
# │ │ │ │ ┌───── 星期 (0-7, 0和7都是周日)
# │ │ │ │ │
# * * * * * command
# 每分钟执行
* * * * * /path/to/script.sh
# 每天凌晨 2 点执行
0 2 * * * /path/to/backup.sh
# 每周一上午 9 点执行
0 9 * * 1 /path/to/report.sh
# 每 5 分钟执行
*/5 * * * * /path/to/check.sh
# 每天 8 点和 20 点执行
0 8,20 * * * /path/to/task.sh
# 查看 cron 执行日志
grep CRON /var/log/syslog
journalctl -u cron
十八、SSH 远程操作
# 登录远程服务器
ssh user@10.19.103.159
ssh -p 2222 user@host # 指定端口
# 免密登录配置
ssh-keygen -t rsa # 生成密钥对
ssh-copy-id user@10.19.103.159 # 复制公钥到服务器
# 远程执行命令(不登录)
ssh user@host "ls -la /app"
ssh user@host "docker ps"
# 文件传输 scp
scp local_file user@host:/remote/path/ # 上传
scp user@host:/remote/file local_path/ # 下载
scp -r local_dir/ user@host:/remote/path/ # 上传目录
# rsync 同步(增量传输,更高效)
rsync -avz local_dir/ user@host:/remote/dir/
rsync -avz --delete local_dir/ user@host:/remote/dir/ # 同步删除
# SSH 隧道(端口转发)
# 本地转发:访问本地 9200 等于访问远程 ES
ssh -L 9200:10.19.103.159:9200 user@jump_host
# 后台保持 SSH 连接
ssh -fN -L 9200:10.19.103.159:9200 user@jump_host
# SSH 配置文件(免得每次输一长串)
# 编辑 ~/.ssh/config
Host prod-server
HostName 10.19.103.159
User deploy
Port 22
IdentityFile ~/.ssh/id_rsa
# 之后直接 ssh prod-server 即可
十九、系统监控与排障
# 查看系统运行时间和负载
uptime
# 查看谁在登录
w
who
# 查看系统日志
dmesg | tail -20 # 内核日志
journalctl -xe # 系统日志(最近的错误)
cat /var/log/messages # 系统消息
cat /var/log/secure # 登录日志
# 查看 OOM(内存不足被杀)记录
dmesg | grep -i "oom\|killed"
journalctl -k | grep -i "oom"
# 查看 TCP 连接状态统计
ss -s
ss -ant | awk '{print $1}' | sort | uniq -c | sort -rn
# 查看 IO 使用情况
iostat -x 1 5 # 每秒刷新,共 5 次
iotop # 实时 IO 监控(需安装)
# 查看网络流量
iftop # 实时网络流量(需安装)
nethogs # 按进程查看网络流量(需安装)
# 查看文件被哪个进程占用
lsof /path/to/file
fuser -v /path/to/file
# 查看删除但未释放的文件(磁盘满排查)
lsof | grep deleted | sort -k7 -rn | head -20
二十、实用技巧与组合命令
# 命令替换:用上一条命令的结果
echo"当前目录: $(pwd)"
echo"Python 版本: $(python3 --version)"
# 多条命令顺序执行
command1 && command2 # 前一个成功才执行后一个
command1 || command2 # 前一个失败才执行后一个
command1 ; command2 # 无论成功失败都执行
# 后台执行 + 日志
nohup python3 app.py > app.log 2>&1 &
echo $! # 打印后台进程 PID
# 批量重命名
# 把所有 .txt 改成 .md
for f in *.txt; do mv "$f""${f%.txt}.md"; done
# 批量查找替换文件内容
find . -name "*.py" -exec sed -i 's/old_text/new_text/g' {} +
# 监控命令输出变化(每 2 秒刷新)
watch -n 2 "docker ps"
watch -n 5 "kubectl get pods -n prod"
# 计算命令执行时间
time curl -s http://example.com > /dev/null
# 生成随机密码
openssl rand -base64 16
cat /dev/urandom | tr -dc 'a-zA-Z0-9' | head -c 20
# 快速创建大文件(测试用)
dd if=/dev/zero of=test_100m.bin bs=1M count=100
fallocate -l 1G test_1g.bin
# 对比两个文件差异
diff file1.txt file2.txt
diff -u file1.txt file2.txt # unified 格式,更易读
# 查看命令帮助
man command_name
command_name --help
tldr command_name # 更简洁的帮助(需安装 tldr)
全文共 20 个章节,覆盖日常开发、运维、排障的绝大多数场景。建议收藏后按需查阅。
二十一、Shell 脚本执行
运行 .sh 脚本的几种方式
# 方式一:bash 直接执行(不需要执行权限)
bash run.sh
bash /app/sh/start_report.sh
# 方式二:sh 执行
sh run.sh
# 方式三:先加执行权限,再直接运行
chmod +x run.sh
./run.sh
# 方式四:source 执行(在当前 shell 环境中运行,环境变量会保留)
source run.sh
. run.sh # 等同于 source
# 方式五:后台运行(终端关闭后不中断)
nohup bash run.sh > run.log 2>&1 &
# 方式六:后台运行 + 查看日志
nohup bash run.sh > run.log 2>&1 &
tail -f run.log
区别说明
| | | |
|---|
bash run.sh | | | |
./run.sh | | | |
source run.sh | | | |
nohup bash run.sh & | | | |
常见启动场景
# 启动 Python 服务
nohup python3 api.py > logs/api.log 2>&1 &
# 启动 Flask/FastAPI 服务
nohup python3 -u api/jindie_merge_api.py > logs/jindie.log 2>&1 &
# -u 参数:不缓冲输出,日志实时写入
# 启动多个服务
bash sh/start_report.sh &
bash sh/start_financial_report.sh &
# 指定端口启动
nohup python3 -u api/report_api.py --port 8991 > logs/report.log 2>&1 &
# 带环境变量启动
AIBI_ENV=PROD nohup python3 api/jindie_merge_api.py > logs/prod.log 2>&1 &
AIBI_ENV=TEST bash run.sh
# 查看启动的后台进程
jobs -l
ps aux | grep python
# 停止后台服务
kill $(ps aux | grep 'jindie_merge_api' | grep -v grep | awk '{print $2}')
# 或者用 pkill
pkill -f "jindie_merge_api"
脚本调试
# 调试模式运行(打印每一行执行的命令)
bash -x run.sh
# 遇到错误立即退出
bash -e run.sh
# 脚本内部开启调试(在 .sh 文件头部加)
#!/bin/bash
set -ex # -e 遇错退出,-x 打印执行过程
# 检查脚本语法(不执行)
bash -n run.sh
# 查看脚本内容
cat run.sh
开机自启动
# 方式一:写入 /etc/rc.local
echo"bash /app/run.sh" >> /etc/rc.local
chmod +x /etc/rc.local
# 方式二:创建 systemd 服务(推荐)
cat > /etc/systemd/system/myapp.service << 'EOF'
[Unit]
Description=My App Service
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/app
ExecStart=/usr/bin/python3 api/jindie_merge_api.py
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable myapp # 开机自启
systemctl start myapp # 立即启动
systemctl status myapp # 查看状态
全文共 21 个章节。
二十二、查看服务与进程状态(全场景)
场景判断
# 先确认你的环境有没有 systemctl
which systemctl
# 如果输出路径 → 用 systemctl(完整 Linux 系统)
# 如果 not found → 你在 Docker 容器或精简系统里,用 ps 方式
方式一:systemctl(完整 Linux 系统,如 CentOS 7+、Ubuntu 16+)
# 查看所有运行中的服务
systemctl list-units --type=service --state=running
# 查看指定服务状态
systemctl status nginx
systemctl status docker
# 查看是否开机自启
systemctl is-enabled nginx
systemctl: not found 的原因:
- Docker 容器内默认没有 systemd(容器只跑一个主进程,不需要服务管理器)
- Alpine Linux 用的是 OpenRC 而不是 systemd
- 老系统(CentOS 6)用的是 SysVinit(service 命令)
方式二:ps 查看进程(万能方式,任何环境都能用)
# 查看所有进程
ps aux
# 查看 Python 相关进程
ps aux | grep python
# 查看 Java 相关进程
ps aux | grep java
# 查看 nginx 进程
ps aux | grep nginx
# 更精确(排除 grep 自身)
ps aux | grep '[p]ython'
# 只看进程号和命令
ps -eo pid,cmd | grep python
# 查看进程树(父子关系)
ps auxf
pstree -p
方式三:service 命令(老系统 CentOS 6 / SysVinit)
# 查看所有服务状态
service --status-all
# 查看指定服务
service nginx status
service mysqld status
# 启动/停止
service nginx start
service nginx stop
方式四:Docker 容器内查看
# 容器内查看当前运行的进程
ps aux
# 如果 ps 也没有(极简镜像)
ls /proc/*/cmdline 2>/dev/null | whileread f; do
echo"PID $(echo $f | cut -d/ -f3): $(tr '\0' ' ' < $f)"
done
# 从宿主机查看容器内进程
docker top container_name
# 查看容器状态
docker ps
docker inspect container_name | grep -i status
# 查看容器资源占用
docker stats container_name
方式五:查看端口判断服务是否在运行
# 查看谁在监听端口(推荐 ss)
ss -tlnp
# 查看指定端口
ss -tlnp | grep 8080
# 如果没有 ss,用 netstat
netstat -tlnp
# 如果都没有,用 /proc
cat /proc/net/tcp # 端口是十六进制
# 测试端口是否通
curl -s http://localhost:8080/health
# 或
echo > /dev/tcp/localhost/8080 && echo"端口通" || echo"端口不通"
快速判断表
| | |
|---|
| systemctl list-units --type=service | |
| service --status-all | |
| ps aux | |
| ps aux | |
| ps aux | grep xxx | |
| ss -tlnp | |
全文共 22 个章节。
二十三、查看系统信息与运行环境
判断操作系统类型和版本
# 查看系统发行版信息(最常用)
cat /etc/os-release
# 简洁输出
cat /etc/os-release | grep PRETTY_NAME
# 输出示例:PRETTY_NAME="Ubuntu 22.04.3 LTS"
# 输出示例:PRETTY_NAME="CentOS Linux 7 (Core)"
# 输出示例:PRETTY_NAME="Alpine Linux v3.18"
# 输出示例:PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
# 其他方式(不同系统可能只有其中一个)
cat /etc/redhat-release # CentOS / RHEL
cat /etc/debian_version # Debian / Ubuntu
cat /etc/alpine-release # Alpine
# 查看内核版本
uname -a
uname -r # 只看内核版本号
# 查看系统架构(x86_64 / aarch64)
uname -m
arch
判断是否在 Docker 容器内
# 方法一:查看 cgroup(最可靠)
cat /proc/1/cgroup
# 如果输出包含 docker 或 kubepods → 在容器内
# 如果输出是 / → 在宿主机
# 方法二:查看 .dockerenv 文件
ls /.dockerenv 2>/dev/null && echo"在容器内" || echo"在宿主机"
# 方法三:查看 hostname
hostname
# 容器内通常是一串随机字符如 a3f8b2c1d4e5
# 方法四:查看 PID 1 的进程
ps -p 1 -o comm=
# 容器内通常是 python/java/nginx 等应用进程
# 宿主机通常是 systemd 或 init
判断是否在 K8s Pod 内
# 查看 K8s 注入的环境变量
env | grep KUBERNETES
# 如果有 KUBERNETES_SERVICE_HOST → 在 K8s Pod 内
# 查看 ServiceAccount
ls /var/run/secrets/kubernetes.io/ 2>/dev/null && echo"在 K8s Pod 内"
# 查看 Pod 名称
echo$HOSTNAME
cat /etc/hostname
查看已安装的软件和服务
# 查看包管理器类型(判断系统家族)
which apt && echo"Debian/Ubuntu 系"# apt
which yum && echo"CentOS/RHEL 系"# yum
which dnf && echo"Fedora/CentOS 8+ 系"# dnf
which apk && echo"Alpine 系"# apk
which pip && echo"Python 已安装"
which node && echo"Node.js 已安装"
which java && echo"Java 已安装"
# 查看已安装的包
dpkg -l # Debian/Ubuntu
rpm -qa # CentOS/RHEL
apk list --installed # Alpine
# 搜索是否安装了某个包
dpkg -l | grep nginx # Debian/Ubuntu
rpm -qa | grep nginx # CentOS/RHEL
apk list | grep nginx # Alpine
# 查看 Python 版本和已安装的包
python3 --version
pip list
pip freeze
# 查看 Java 版本
java -version
# 查看 Node 版本
node -v
npm -v
查看硬件和资源信息
# CPU 信息
lscpu
cat /proc/cpuinfo | grep "model name" | head -1
nproc # CPU 核心数
# 内存信息
free -h
cat /proc/meminfo | head -5
# 磁盘信息
df -h
lsblk
# 系统运行时间和负载
uptime
# 输出示例:10:30:25 up 45 days, load average: 0.15, 0.10, 0.08
# load average 三个数字分别是 1分钟/5分钟/15分钟 平均负载
# 一般不超过 CPU 核心数就正常
快速环境摸底(一条命令搞定)
# 复制这段到任何 Linux 机器上执行,快速了解环境
echo"=== 系统 ===" && cat /etc/os-release 2>/dev/null | grep PRETTY || uname -a && \
echo"=== 内核 ===" && uname -r && \
echo"=== 架构 ===" && uname -m && \
echo"=== CPU ===" && nproc && \
echo"=== 内存 ===" && free -h | head -2 && \
echo"=== 磁盘 ===" && df -h / && \
echo"=== 容器? ===" && (ls /.dockerenv 2>/dev/null && echo"是" || echo"否") && \
echo"=== K8s? ===" && (env | grep -q KUBERNETES && echo"是" || echo"否") && \
echo"=== Python ===" && (python3 --version 2>/dev/null || echo"未安装") && \
echo"=== PID 1 ===" && ps -p 1 -o comm= 2>/dev/null
全文共 23 个章节。