运维常用基础&进阶命令(持续更新)

一、网络常用命令

1.ss(Socket Statistics)

ss 直接从内核空间获取信息,比遍历 /procnetstat 快得多,尤其在连接数巨大的高并发场景下。

常用组合

最常用的参数是:-tulnp

  • -t (tcp): 显示 TCP 连接
  • -u (udp): 显示 UDP 连接
  • -l (listening): 仅显示处于监听状态的 socket(默认只显示已建立的连接)
  • -n (numeric): 不解析服务名(如显示 22 而不是 ssh,显示 IP 而不是域名),极大提升速度
  • -p (process): 显示哪个进程在使用该 socket(需要 sudo 权限)

场景化实战

  • 查看本机开启了哪些 端口 (服务):

    ss -tulnp

  • 查看所有已建立的连接(不含监听):

    arduino 复制代码
    ss -tan
    • (注意去掉 -l,保留 -a 表示 all,或者直接不加 -l)
  • 统计连接状态(非常有用,看服务器负载):

    复制代码
      ss -s
    • 输出会告诉你当前有多少个 TCP 连接,多少个处于 ESTABLISHED,多少个 TIME-WAIT。
  • 高级过滤(骚操作):

    • 查找所有连接到远程 8080 端口的连接:
    复制代码
      ss -nt dst :8080
    • 查找状态为"已建立"的连接:
    perl 复制代码
    ss -t state established
    • 查找状态为 TIME-WAIT 的连接(排查高并发连接释放问题):
    perl 复制代码
    ss -t state time-wait

前世前辈 ------ netstat

虽然已被 ss 取代,但很多老系统或脚本中依然存在,必须看懂。

  • 常用组合: netstat -tulnp (参数含义与 ss 完全一致)
  • 核心区别: netstat 如果不加 -n,会尝试反向解析 DNS,导致命令卡顿半天,切记加上 -n
  • 查看 路由表 netstat -rn (现在推荐用 ip route)

2.lsof (List Open Files)

在 Linux 中"一切皆文件",网络 Socket 也是文件。ss 是从网络角度看进程,lsof 是从文件/进程角度看网络。

核心参数

  • -i: 列出符合条件的网络文件
  • -p: 指定 PID
  • -n: 不解析主机名(提速)

场景化实战

  • 谁占用了 80 端口 ?(比 ss 更直观地找凶手)
css 复制代码
lsof -i :80
  • 某个进程( PID 1234)打开了哪些网络连接?

    css 复制代码
    lsof -p 1234 -a -i
    • ( -a 表示 AND,即同时满足 PID 1234 和 网络连接)
  • 查看特定用户的网络活动:

css 复制代码
lsof -u username -i
  • 恢复删除的文件(高阶技巧): 如果日志文件被 rm 了但进程没重启,空间不释放,可以用 lsof | grep deleted 找到句柄恢复。

3.ip & tcpdump

1. ip 命令 (iproute2 套件)

用来取代 ifconfigroute

  • 查看 IP 地址:

    css 复制代码
    ip addr (或 ip a)
    • 对比 ifconfig ,它能看到 secondary **IP
  • 查看/操作 路由表

    ip route

  • 查看网络邻居 ( ARP 表):

    ip neigh

  • 查看接口统计(丢包、错误):

bash 复制代码
ip -s link

2. tcpdump (网络抓包神器)

ss 告诉你连接存在,但通不通、数据对不对时,就需要抓包。

  • 基础 抓包 (抓 eth0 网卡 ):
css 复制代码
tcpdump -i eth0
  • 生产环境防刷屏(重要):
css 复制代码
tcpdump -i eth0 -nn port 80
  • 抓特定 IP 的包:
css 复制代码
tcpdump -i eth0 host 192.168.1.5
  • 保存为文件(供 Wireshark 分析):
css 复制代码
tcpdump -i eth0 -w capture.pcap

4. nc & curl------网络连通性测试

1. nc (Netcat) - 网络瑞士军刀

  • 测试 端口 通不通(替代 telnet ):

    nc -v -z 192.168.1.1 80

  • 临时建立一个聊天/传输通道:

    • 服务端:nc -l 1234
    • 客户端:nc IP地址 1234

2. curl - HTTP 测试

1.基本使用与输出控制
  • 查看详细的连接过程( DNS 耗时、握手耗时):
swift 复制代码
curl -w "\nDNS: %{time_namelookup}s\nConnect: %{time_connect}s\nTotal: %{time_total}s\n" -o /dev/null -s http://www.google.com
  • 测试由 Header 引起的访问问题:
arduino 复制代码
curl -I http://example.com

( -I 只抓取 Header)

2.HTTP 请求定制

指定方法:

arduino 复制代码
curl -X POST https://api.example.com/items

说明: 强制请求方法。多数情况下用 -d 会自动变成 POST。

  • 请求头:
arduino 复制代码
curl -H "Content-Type: application/json" \
     -H "Authorization: Bearer <token>" \
     https://api.example.com/items

说明: -H添加自定义头。适合模拟前端/客户端请求。

  • 发送表单或 JSON
json 复制代码
# x-www-form-urlencoded
curl -d "name=alice&age=30" https://api.example.com/users

# JSON
curl -H "Content-Type: application/json" \
     -d '{"name":"alice","age":30}' \
     https://api.example.com/users

说明: -d会设置 Content-Type 为表单并切换到 POST;发送 JSON 时需手动设头。

  • 多部分上传(文件):
arduino 复制代码
curl -F "file=@/path/to/report.pdf" \
     -F "meta=Q3" \
     https://api.example.com/upload

说明: -F按 multipart/form-data 上传文件与字段。

  • Cookies:

代码

arduino 复制代码
curl --cookie "sid=abc123" https://example.com
curl --cookie-jar cookies.txt https://example.com/login
curl --cookie cookies.txt https://example.com/profile

说明: 管理会话或跨请求登录态。

  • 压缩与解压:

代码

arduino 复制代码
curl --compressed https://api.example.com/list
  • 说明: 自动协商并解压 gzip/deflate 响应
3.认证、代理与安全
  • 基本认证:
arduino 复制代码
curl -u username:password https://api.example.com/private
  • Bearer 令牌:
arduino 复制代码
curl -H "Authorization: Bearer <token>" https://api.example.com/private
  • 代理(HTTP/ SOCKS):
bash 复制代码
curl -x http://proxy.local:8080 https://example.com
curl --socks5-hostname 127.0.0.1:1080 https://example.com
  • TLS 选项(谨慎使用):
bash 复制代码
curl --cacert ca.pem https://secure.example.com
curl -k https://self-signed.local    # 跳过证书校验(不建议生产)
4.下载、续传与性能
  • 断点续传:
arduino 复制代码
curl -C - -O https://example.com/bigfile.zip
  • 限速与并发(进阶):
arduino 复制代码
curl --limit-rate 1M -O https://example.com/video.mp4
  • 只取响应头:
arduino 复制代码
curl -I https://example.com
  • 详细调试输出:
c 复制代码
curl -v https://example.com
curl --trace-ascii trace.log https://example.com
diff 复制代码
-X 指定方法(GET/POST/PUT/PATCH/DELETE)
-H 添加请求头
-d 发送请求体(表单或 JSON)并切换为 POST
-F 发送 multipart/form-data(文件/字段)
-I 仅请求响应头
-L 跟随重定向
-o/-O 保存输出(自定义/远端文件名)
-C - 断点续传
-u 基本认证
--cookie/--cookie-jar Cookies 管理
--compressed 启用压缩
-x/--socks5-hostname 代理
-k/--cacert TLS 校验控制
-s/-v/--trace 静默/详细/跟踪
--limit-rate 限速
--max-time 全局超时
--retry/--retry-delay/--retry-max-time 自动重试策略
--data-urlencode 对表单字段进行 URL 编码
--http2/--http3 指定协议版本(依平台构建而定)

大量文件下载、断点续传、递归镜像网站、后台任务:选 wget。

  1. Level 1 (生存必备):

    1. ss -tulnp (看端口)
    2. ip a (看IP)
    3. ping (看连通性)
  2. Level 2 (运维排障):

    1. lsof -i :端口号 (查占用)
    2. curl -v (调试 HTTP)
    3. ss -s (看连接概况)
  3. Level 3 (专家调试):

    1. tcpdump -nn ... (抓包分析)
    2. ss state established (精细化连接分析)

二、资源管理常用命令

1.top & htop

经典老将:top

所有 Linux 发行版必带,必须熟练掌握交互快捷键。

  • 常用启动:

    css 复制代码
    top
    • (或者 top -c 显示完整的命令行路径,而不仅仅是进程名)
  • 交互式快捷键(神器):

    • 1 (数字1): 展开显示所有 CPU 核心的负载(看是不是单核被打满)。
    • M (Shift+m): 按 内存 使用率排序(找内存泄漏)。
    • P (Shift+p): 按 CPU 使用率排序(默认)。
    • c: 切换显示完整命令路径。
    • k: 输入 PID 杀死进程。
  • 关键指标解读:

    • Load Average: 1.00, 0.50, 0.20(1分钟、5分钟、15分钟平均负载)。

      • 经验值:如果数值超过了 CPU 核心数,说明系统过载了。
    • %Cpu(s):

      • us (user): 用户空间占用(高通常是业务代码运算多)。
      • sy (system): 内核空间占用(高通常是系统调用多,如频繁 I/O)。
      • wa (iowait): 等待磁盘 I/O 的时间(重点!如果这个高,说明磁盘是瓶颈)。

视觉系新秀:htop

如果系统允许安装,强烈推荐htop 代替 top。它支持鼠标点击、颜色区分、图形化显示 CPU 条,直观度大幅提升。

2. free------内存管理

当你怀疑服务器变慢是因为内存不足时,看这里。

常用命令

  • 以人类可读格式查看 内存
c 复制代码
free -h
  • 如何判断 内存 真不够了? 不要只看 free 那一列!Linux 喜欢把空闲内存拿来做缓存。

    • 重点看 available 这一列: 这才是你真正应用程序可以调用的剩余内存。
    • buff/cache 如果这部分很大,free 很小,通常没事,系统会自动释放 cache 给程序用。
    • Swap 如果 Swapused 很大且在不断变化,说明内存严重不足,系统在频繁读写硬盘交换区,由于硬盘速度远慢于内存,机器会卡死。

3.df & du------ 磁盘空间与文件

这两个命令区别在于df 看房子的总面积,du 看某个房间里的家具占地。

1. df (Disk Free) - 宏观视角

  • 查看磁盘挂载点和使用率:
bash 复制代码
df -Th
  • 排查问题: 如果 df -h 显示磁盘没满,但无法写入文件,可能是 Inode 满了(小文件太多)。

    • 查看 Inode 使用率:df -i

2. du (Disk Usage) - 微观视角

  • 当前目录下哪个文件夹最大?(找出吃磁盘的元凶):
bash 复制代码
du -sh * | sort -rh

4.iostat & iotop ------ 磁盘 I/O 瓶颈

top 里的 %wa (iowait) 很高时,用这组命令抓出是谁在疯狂读写硬盘。

1. iostat (属于 sysstat 包)

  • 查看所有磁盘的吞吐和繁忙度(黄金参数):

    iostat -xz 1

  • 核心指标解读:

    • %util: 磁盘利用率。如果接近 100%,说明磁盘已经满负荷运转,必须优化或换盘。
    • await: I/O 请求的平均等待时间(毫秒)。如果这个值很大(如 >10ms 甚至上百),说明磁盘响应慢。

2. iotop

类似于 top,但是专门按 磁盘 I/O 排序进程。

  • 查看是谁在读写硬盘:

    iotop -o

5. vmstat & dmesg------系统综合快照

1. vmstat (Virtual Memory Statistics)

虽然名字叫虚拟内存,但它其实是查看 CPU、内存、I/O 的综合报表,适合脚本监控。

  • 每秒刷新一次系统状态:

    vmstat 1

2. dmesg (Kernel Ring Buffer)

  • 查看内核日志(硬件故障、 OOM Killer): 如果进程突然莫名其妙消失了,很可能是内存溢出被系统杀掉了。
perl 复制代码
dmesg -T | grep -i "kill"
  1. Level 1 (系统卡顿先看它):

    1. top (看 Load Average, CPU %, wait %)
    2. free -h (看内存剩多少,Swap 用没用)
    3. df -Th (看磁盘是不是满了)
  2. Level 2 (找出谁在捣乱):

    1. du -sh * (磁盘满了,找大文件)
    2. iotop (磁盘慢了,找读写进程)
    3. topM (找吃内存进程)
  3. Level 3 (深层分析):

    1. iostat -xz 1 (分析磁盘具体的饱和度)
    2. dmesg | grep error (看有没有硬件报错)
    3. sar (查看历史性能数据,如果不安装 sysstat 包可能没有)

一个小技巧: 如果你发现系统很慢,但 CPU、内存、磁盘 I/O 看起来都正常,请检查 打开文件数限制ulimit -n

Ulimit -a显示当前所有资源限制 很多时候服务起不来或者报错,是因为达到了最大文件句柄限制(默认通常是 1024,生产环境通常需要调大)。

三、搜索常用命令

1.grep内容搜索

1.基础搜索

最常用的场景:在一个文件或一堆文件里找个关键词。

  1. 黄金组合参数: -rni
  • -r (recursive): 递归查找,不光找当前目录,还找子目录。
  • -n (line number): 显示行号,告诉你关键词在哪一行。
  • -i (ignore case): 忽略大小写(找 "Error" 时也能把 "error" 揪出来)。
  1. 场景化实战
  • 在当前目录及子目录下,查找所有包含 "password" 的文件:
perl 复制代码
grep -rni "password" .
  • 在单个文件中查找:
perl 复制代码
grep -i "error" /var/log/syslog

2.上下文控制

这是 grep 最强大的功能之一。当你搜到 "Exception" 时,只看这一行通常没用,你需要看它上面 发生了什么,以及下面的堆栈信息。

  1. 记忆口诀:ABC
  • -A (After): 显示匹配行之后的 n 行。
  • -B (Before): 显示匹配行之前的 n 行。
  • -C (Context): 显示匹配行前后各 n 行。
  1. 场景化实战
  • 查看报错后的 10 行堆栈信息(最常用):
csharp 复制代码
grep -A 10 "NullPointerException" catalina.out
  • 查看报错前后各 5 行,分析上下文:
c 复制代码
grep -C 5 "Critical Error" application.log

3.精准过滤

有时候搜出来的东西太多,或者太模糊,需要提纯。

  1. 反向过滤: -v (Invert)
  • 场景: 查看配置文件,但是不想看被 # 注释掉的行,也不想看空行。
bash 复制代码
grep -v "^#" /etc/nginx/nginx.conf | grep -v "^$"
  1. 精确单词匹配: -w (Word)
  • 场景: 你想搜变量 is,但 grep 会把 this, list, history 全给你搜出来。
perl 复制代码
grep -w "is" code.py
  1. 只要匹配的内容: -o (Only matching)
  • 场景: 只需要提取日志中的 IP 地址,不需要整行内容。
css 复制代码
grep -o "[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}" access.log

4.统计与文件名 ------ 宏观视角

  1. 只看文件名: -l (List)
  • 场景: 你不需要看代码具体内容,只想知道哪些文件 里调用了 getUserInfo 这个函数。
bash 复制代码
grep -r -l "getUserInfo" ./src
  1. 统计出现次数: -c (Count)
  • 场景: 今天发生了多少次 404 错误?
c 复制代码
grep -c "404 Not Found" access.log

5.高阶正则 ------ -E & -F

  1. 扩展正则: -E (Extended)

默认的 grep 支持的基础正则比较弱,使用 | (或)、+ (一个或多个) 等符号时需要转义。加上 -E 就解放了(相当于命令 egrep)。

  • 同时搜两个关键词("Error" 或者 "Warning"):
c 复制代码
grep -E "Error|Warning" app.log
  • 搜 8000 到 8999 的端口号:
arduino 复制代码
grep -E "8[0-9]{3}" config.xml
  1. 固定字符串: -F (Fixed)
  • 场景: 你要搜索的内容里包含大量的 . * [ 等特殊字符,你不想让 grep 把它们当正则处理,只想当普通字符搜。
  • 优势: 速度极快。
perl 复制代码
grep -F "user[0]" script.sh

按照使用频率排序的学习路径:

  1. Level 1 (每天都用):

    1. grep "text" file (基础搜)
    2. grep -rni "text" . (递归搜代码/配置)
    3. ps aux | grep java (查进程,配合管道)
  2. Level 2 (日志分析):

    1. grep -v "info" log (排除干扰信息)
    2. grep -A 10 "error" log (看报错堆栈)
    3. grep -E "error|warn" log (搜多个词)
  3. Level 3 (数据提取):

    1. grep -o (配合正则提取 IP、邮箱)
    2. grep -l (只找文件名,配合 xargs 做批量修改)

一个经典的"骚操作"组合: 找出所有包含 "TODO" 的代码文件,并显示行号,最后只保留最近修改过的文件(需配合 lsfind,这里展示 grep 配合管道):

ini 复制代码
# 在当前目录递归搜 TODO,显示颜色,显示行号
grep -rni --color=auto "TODO" .

小贴士: 如果你的文件是二进制文件 (在这堆乱码里搜字符串),grep 可能会提示 "Binary file matches"。加上 -a 参数可以将二进制文件当作文本文件处理: grep -a "string" binary_file

2.find文件搜索

基础搜索:名字与类型

  • 按文件名找(最常用):
arduino 复制代码
find /etc -name "nginx.conf"
  • 只找目录或文件:
lua 复制代码
find . -type d -name "config"

时间角度:按时间搜索

这是运维排查问题的核心技能。比如:找最近被黑客修改过的文件,或者找一年前的旧日志删除。

  • 参数口诀:

    • -mtime (Modify Time): 内容修改时间。
    • -n : n 天以内(Newer)。
    • +n : n 天以前(Older)。
  • 场景化实战:

    • 找最近 24 小时内被修改过的文件:
    arduino 复制代码
    find /var/www -mtime -1
    • 找 7 天以前的旧日志:
    lua 复制代码
    find /var/log -name "*.log" -mtime +7

空间管理:按大小搜索

  • 找大文件(清理磁盘必备):
matlab 复制代码
find / -type f -size +100M

骚操作:搜索并执行 (-exec)

找到文件只是第一步,通常我们还要删掉它、移动它或修改它。

  • 找到 7 天前的日志并直接删除(慎用):
bash 复制代码
find /var/log -name "*.log" -mtime +7 -exec rm -f {} ;
  • 性能优化版(推荐): 配合 xargs 当文件成千上万时,-exec 会启动成千上万个 rm 进程,极慢。用 xargs 可以把文件名打包一次性传给 rm
arduino 复制代码
find . -name "*.log" | xargs rm -f

5.极速闪电 ------ locate

如果你觉得 find 太慢(因为它要扫描磁盘),可以用 locate

  • 原理: 它不扫磁盘,而是查一个系统自带的数据库(通常在 /var/lib/mlocate/mlocate.db)。
  • 缺点: 新建的文件可能搜不到,因为数据库通常每天只更新一次。
  1. 常用命令
  • 秒级搜索文件:

    locate nginx.conf

  • 我要搜刚创建的文件怎么办? 先手动更新数据库,再搜:

    sudo updatedb
    locate new_file.txt


3.命令寻踪 ------ which / whereis / type

这三个命令专门用来找"命令"本身在哪里。

1. which (我到底在用哪个版本?)

  • 场景: 你装了 python2 和 python3,输入 python 到底运行的是哪一个?
bash 复制代码
which python
  • 原理: 它只在环境变量 $PATH 里找可执行文件。

2. whereis (全家桶)

  • 场景: 我不光想找二进制文件,还想找它的源代码帮助文档(Man page)在哪里。

    whereis nginx

3. type (验明正身)

  • 场景: 为什么 ls 有颜色?为什么 cd 找不到文件?
bash 复制代码
type ls
bash 复制代码
type cd

按照使用频率场景记忆:

  1. Level 1 (文件去哪了):

    1. locate filename: 只要大概记得名字,先用这个,最快。
    2. find . -name "filename" : locate 找不到或者是刚建的文件,用这个。
  2. Level 2 (运维清理与排查):

    1. find . -mtime -1: 昨天谁改了文件?(查被黑/查故障)。
    2. find . -size +1G: 磁盘怎么满了?(查大文件)。
    3. find ... | xargs rm: 批量删除旧文件。
  3. Level 3 (环境调试):

    1. which java: 查环境变量配置对不对。
    2. type ll: 查这个命令到底是个啥。

一个核心区别:

  • grep 是在书中(文件内容)里找句子。
  • find 是在图书馆(文件系统)里找书**。**
相关推荐
用户0328472220703 小时前
如何搭建本地yum源(上)
运维
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工3 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智3 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_3 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
施努卡机器视觉3 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造
AC赳赳老秦3 天前
用 OpenClaw 搭建服务器故障应急响应系统,自动处理 80% 常见运维故障
android·运维·服务器·python·rxjava·deepseek·openclaw
java_cj3 天前
深入kube-apiserver认证机制:从Bearer Token到mTLS的完整认证链解析
linux·运维·服务器·云原生·容器·kubernetes