文件查询:find(实时搜索)、locate(快速搜索)、which / whereis(命令路径)。
文件内容查询:cat(小文件)、less(大文件分页)、grep(关键词搜索)、tail -f(实时日志监控)。
内存查询:free(概览)、top / htop(动态监控)、vmstat(性能分析)、ps(进程内存)、pmap(进程内存详情)、/proc/meminfo(内核实时数据)。
一、查询文件
1、find:实时递归搜索文件/目录
功能:在指定目录下递归搜索文件或目录,支持按名称、类型、大小、修改时间等条件过滤。
语法:find [搜索路径] [匹配条件] [操作]
常用选项:
-name "模式":按文件名匹配(支持通配符 *、?,如 -name "*.log")
-iname "模式":不区分大小写的文件名匹配(如 -iname "Readme.md")
-type 类型:按文件类型过滤(f=普通文件,d=目录,l=软链接,s=套接字等)
-size [+-]大小:按文件大小过滤(如 +10M表示大于10MB,-500k表示小于500KB)
-mtime [+-]天数:按修改时间过滤(+7表示7天前修改,-1表示最近1天内修改)
-user 用户名:按文件所有者过滤(如 -user root)
-exec 命令 {} \;:对搜索结果执行操作(如 -exec rm {} \;删除匹配文件)
示例:
find /www -type f -name appout.log
find /www -type f -name *.log
find /www/ -name *.log -size +100k
//大于100kb 小于200kb
find /www/ -name *.log -size +100k -size -200k
//查询大于100k的普通文件
find /home -type f -size +100k
//
find /www/ -name *.log -mtime +7
-7 表示:
文件的最后修改时间在 7 天以内(包括 7 天前)
+7:
文件的修改时间 超过 7 天(即 7 天前或更早)
-----(+7)1234567(-7)
//查询当前目录下所有者为root的普通文件
find . -type f -user root
# 查找 /tmp 目录下的软链接,并删除它们(谨慎使用!)
find /tmp -type l -exec rm {} \;
2. locate:基于数据库的快速搜索
功能:通过系统预先生成的文件索引数据库(updatedb维护)快速查找文件,速度远快于 find,但数据非实时。
语法:locate [选项] 关键词
常用选项:
-i:不区分大小写(如 locate -i readme)。
-d 数据库路径:指定索引数据库(默认 /var/lib/mlocate/mlocate.db)。
-n 数量:限制返回结果数量(如 -n 10只显示前10条)。
注意:首次使用或文件新增后,需手动更新数据库:sudo updatedb
示例:
# 快速查找所有包含 "test.log" 的文件路径
locate test.log
# 只显示前5条结果
locate -n 5 test
locate *.log
# 输出:/var/log/app.log
3. which:查找可执行文件的路径
功能:定位系统环境变量 $PATH 中某个命令的可执行文件路径(适用于脚本或命令的绝对路径查询)。
语法:which 命令名
示例:
# 查找 python3 的绝对路径
which python3
4. whereis:查找二进制文件、源文件和手册页
功能:比 which 更全面,可查找命令的二进制文件(-b)、源文件(-s)、手册页(-m)路径。
语法:whereis [选项] 命令名
示例:
# 查找 cat 的二进制文件、源文件和手册页路径
whereis cat
# 仅查找二进制文件路径
whereis -b ssh
5. type:判断命令类型(内置/外部/别名)
功能:查看一个命令是二进制文件、Shell 内置命令、别名还是脚本(用于调试命令行为)。
语法:type 命令名
示例:
# 查看 cd 命令类型(Shell 内置命令)
type cd
# 查看 ls 命令类型(实际是别名或二进制文件)
type ls
# 查看 python 命令类型(外部二进制文件)
type python
二、查询文件内容(查看/搜索文本内容)
1. cat:拼接并显示文件内容
功能:快速查看小文件的全部内容(大文件会刷屏)(显示文件内容\拼接多个文件\重定向输出到新文件)
语法:cat [选项] 文件名
注意:大文件慎用 cat(建议改用 more 或 less 分页查看)
常用选项:
-n:显示行号(如 cat -n file.txt)。
-b:显示非空行号(忽略空行)。
-A:显示所有不可见字符(如 $表示换行符,^I表示制表符)。
示例:
cat -n text4.txt
cat -b text4.txt
cat -A text4.txt
# 拼接多个文件并显示
cat text1.txt text2.txt
# 重定向输出到新文件
# 合并内容到 merged.txt(覆盖原文件)
cat text1.txt text2.txt > text5.txt
# 追加内容到 text6.txt
cat text3.txt >> text6.txt
2. more:分页查看文件内容(仅向下翻页)
功能:分页显示大文件内容,支持逐页/逐行滚动,但不支持向上翻页(适合简单查看)。
语法:more 文件名
操作方式:
- 空格:下一页;
- Enter:下一行;
- q:退出。
# 分页查看 /var/log/syslog(系统日志)
more /var/log/syslog
3. less:增强型分页查看(支持双向滚动)
功能:比 more 更强大,支持向上/向下翻页、搜索、跳转行号等(推荐用于大文件)。
语法:less 文件名
常用选项:
选项 | 作用 | 示例 |
---|---|---|
-N | 显示行号 | less -N file.txt |
-S | 禁用自动换行(适合查看日志) | less -S log.txt |
-i | 忽略大小写搜索 | less -i file.txt |
-p | 启动时自动搜索指定字符串 | less -p “error” file.txt |
-M | 显示文件百分比和行号 | less -M file.txt |
常用操作:
- ↑ / ↓:逐行滚动;
- PageUp / PageDown:逐页滚动;
- /关键词 :向下搜索(?关键词 向上搜索);
- n:下一个匹配项;
- N:上一个匹配项;
- gg / G :跳转到首行/末行;
- q:退出。
示例:
# 用 less 查看大文件(如 nginx 日志)
less /var/log/nginx/access.log
# 进入 less 后,搜索包含 "404" 的行(按 / 后输入 404,回车)
/404
# 跳转到第100行
100g
less /var/log/syslog
# 在查看时输入:/error # 搜索 "error" 字符串
# 按 `n` 找下一个匹配,按 `N` 找上一个
less -N +100 file.txt # +100 表示启动时跳转到第 100 行
less +F /var/log/syslog # 启动后按 `F` 实时监控文件末尾(类似 tail -f)
4. head / tail:查看文件头部/尾部内容
功能:
- head :默认显示文件前10行;
- tail :默认显示文件最后10行(常用于实时监控日志)。
常用选项:
- -n 行数 :指定显示行数(如 head -n 20 file.txt 显示前20行)。
- -f(仅 tail ):实时跟踪文件新增内容(按 Ctrl+C 退出)。
示例:
# 查看文件前5行
head -n 5 config.ini
# 查看文件最后3行
tail -n 3 error.log
# 实时监控 /var/log/syslog 的新增内容(按 Ctrl+C 退出)
tail -f /var/log/syslog
# 监控多个文件(输出会标注文件名)
tail -f /var/log/nginx/access.log /var/log/nginx/error.log
5. grep:在文件中搜索关键词
功能:通过正则表达式在文件(或管道输出)中搜索匹配的行,是文本处理的核心工具。
语法:grep [选项] 关键词 文件名 或 命令 | grep [选项] 关键词(管道输入)
常用选项:
- -i:忽略大小写(如 grep -i “error” log.txt)。
- -n:显示匹配行的行号。
- -r /-R:递归搜索目录下所有文件(如 grep -r “TODO” ./src)。
- -v :反向匹配(显示不包含关键词的行)。
- -w :精确匹配整个单词(如 grep -w “port” config.conf)。
- -E:启用扩展正则表达式(支持 | 、() 等,等价于 egrep)。
示例:
# 在 log.txt 中搜索包含 "ERROR" 的行(区分大小写)
grep "ERROR" log.txt
# 忽略大小写搜索 "error" 或 "warning"
grep -iE "error|warning" log.txt
# 显示匹配行的行号和内容
grep -n "timeout" config.ini
# 递归搜索当前目录下所有 .py 文件中的 "import requests"
grep -r --include="*.py" "import requests" .
# 反向匹配(显示不包含 "success" 的行)
grep -v "success" response.log
# 精确匹配单词 "debug"(而非 "debugging")
grep -w "debug" app.log
6. tac:反向显示文件内容(与 cat 相反)
7. nl:显示带行号的文件内容
功能:类似 cat -n,但更灵活(可自定义行号格式)。
语法:nl [选项] 文件名
常用选项:
- -b a:所有行都显示行号(默认仅非空行);
- -n rz:行号右对齐(如 0001);
- -s 分隔符:行号与内容的分隔符(默认是制表符 \t)。
# 显示所有行的行号(包括空行)
nl -b a file.txt
# 行号右对齐,宽度为4位
nl -n rz -w 4 file.txt
8. od / hexdump:查看二进制或非文本文件的原始字节
功能:以八进制、十六进制或其他格式显示文件的字节内容(用于分析二进制文件或乱码文件)。
语法:od [选项] 文件名 或 hexdump [选项] 文件名
常用选项(od):
- -t cx:指定输出格式(c =字符,x =十六进制,d =十进制,o =八进制)。
- -An:不显示偏移量(默认显示字节偏移)。
# 以十六进制+字符形式显示 /bin/ls 的前512字节
od -tx1 -tc -An /bin/ls | head -n 20
# 用 hexdump 显示文件的十六进制(每行16字节)
hexdump -C /etc/passwd
三、查询内存(内存使用状态)
用于监控系统内存、交换空间(Swap)的使用情况,或分析进程的内存占用。
1. free:显示内存使用概览
功能:快速查看物理内存(Mem)、交换空间(Swap)的总容量、已用/空闲/缓存/缓冲情况。
语法:free [选项]
常用选项:
- -h:以人类可读格式显示(如 KB、MB、GB);
- -s 秒数:每隔指定秒数刷新一次(如 free -s 2每2秒刷新);
- -c 次数:刷新指定次数后退出(如 free -c 5 刷新5次);
- -t:显示内存总和(Mem+Swap)。
free -h
Mem:物理内存;
total:总容量;
used:已使用(不包含缓存/缓冲);
free:未使用;
buff/cache:缓冲(Buffer)和缓存(Cache)占用的内存(可被回收);
available:可用内存(程序可直接申请的空间)。
Swap:交换空间(虚拟内存,磁盘分区模拟的内存)。
# 每1秒刷新一次,共刷新3次
free -s 1 -c 3
2. top / htop:动态监控内存及其他资源
功能:实时监控系统的进程活动、CPU、内存、交换空间等资源使用情况( htop 是 top 的增强版,界面更友好)。
top基本操作:
启动后,默认按 CPU 使用率排序;
按 M键:按内存使用率排序(降序);
按 P键:按 CPU 使用率排序(默认);
按 q键:退出。
3. vmstat:虚拟内存统计(详细系统性能指标)
功能:显示虚拟内存、进程、CPU、I/O 等统计信息(适合分析系统性能瓶颈)。
语法:vmstat [间隔秒数] [刷新次数]
vmstat 1 3 ,每秒刷新1次,共3次
procs:进程状态;
r:运行队列中的进程数(理想值 ≤ CPU核心数);
b:阻塞(等待I/O)的进程数(过高表示I/O瓶颈)。
memory:内存使用;
swpd:已使用的交换空间大小(理想值=0);
free:空闲物理内存;
buff:缓冲(Buffer)大小;
cache:缓存(Cache)大小。
swap:交换空间I/O;
si:从磁盘交换到内存的数据量(swap in,过高表示内存不足);
so:从内存交换到磁盘的数据量(swap out,过高表示内存不足)。
cpu:CPU使用率;
us:用户进程占用CPU时间百分比;
sy:内核进程占用CPU时间百分比;
id:空闲CPU时间百分比;
wa:等待I/O的CPU时间百分比(过高表示I/O瓶颈);
st:被虚拟机偷走的时间(仅虚拟机场景)。
# 每1秒刷新一次内存/CPU统计
vmstat 1
# 显示内存详细统计(含交换空间、缓存等)
vmstat -s
4. ps:查看进程的内存占用
功能:显示当前系统中运行的进程信息,结合选项可筛选内存占用高的进程。
语法:ps [选项]
常用选项:
- -aux(BSD风格):显示所有用户的进程(a =所有用户,u =详细用户信息,x=包括无终端的进程);
- -ef(标准风格):显示完整格式的进程列表(e =所有进程,f =显示进程树);
- -o 字段:自定义输出字段(如 ps -o pid,user,%mem,comm 显示进程ID、用户、内存占比、命令名)。
关键字段说明(以 ps -aux 为例):
%MEM:进程占用物理内存的百分比;
RSS:进程占用的物理内存大小(KB);
VSZ:进程占用的虚拟内存大小(KB);
COMMAND:进程的命令名。
示例:
# 显示所有进程的内存占用(按内存降序排序)
ps -aux --sort=-%mem | head -n 10
# 显示进程ID、用户、内存占比、命令名(简洁版)
ps -eo pid,user,%mem,comm --sort=-%mem | head -n 10
# 显示 nginx 进程的内存占用
ps -ef | grep nginx
5. pmap:查看进程的内存映射详情
功能:显示某个进程的内存分配细节(如代码段、数据段、共享库、堆、栈等占用的内存)。
语法:pmap [选项] 进程ID
常用选项:
- -x :扩展格式(显示更详细的内存块信息);
- -s:按内存大小排序(仅 -x 模式有效)。
# 查看进程ID为 1234 的内存映射(简洁模式)
pmap 1234
# 查看进程ID为 1234 的详细内存分配(扩展模式)
pmap -x 1234
# 按内存大小排序显示(仅扩展模式)
pmap -x 1234 | sort -nr -k 3
6. /proc/meminfo:内核提供的实时内存信息文件
功能:Linux 内核通过虚拟文件系统 /proc 暴露的实时内存统计信息(适合脚本解析)。
语法:直接读取文件 cat /proc/meminfo
关键字段说明:
MemTotal:总物理内存;
MemFree:空闲物理内存;
MemAvailable:可用内存(程序可直接申请的空间);
Buffers:缓冲(Buffer)大小;
Cached:缓存(Cache)大小;
SwapTotal:总交换空间;
SwapFree:空闲交换空间;
Shmem:共享内存大小(如 tmpfs)
示例:
# 查看内存详细信息(单位:KB)
cat /proc/meminfo
# 提取可用内存(转换为 GB)
grep MemAvailable /proc/meminfo | awk '{print $2/1024/1024 " GB"}'
7. lshw:查看硬件相关的内存信息(需root权限)
8. df:显示文件系统的磁盘使用情况
作用:查看挂载点的磁盘空间使用情况(文件系统级别)。 常用选项:
- -h :以人类可读格式(KB、MB、GB)显示。
- -a:显示所有文件系统(包括隐藏的)。
- -T:显示文件系统类型(如 ext4、xfs)。
- -i:显示 inode 使用情况(文件数量限制)。
示例:
df -h # 显示所有挂载点的磁盘使用情况(易读格式)
df -h /home # 仅查看 /home 目录所在文件系统的使用情况
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda1 50G 30G 20G 60% /
9. du:查看目录或文件的磁盘使用量
作用:统计目录或文件占用的磁盘空间(实际数据大小)。 常用选项:
- -s:仅显示汇总结果(不递归子目录)。
- -h:人类可读格式。
- -c:显示总大小(最后一行)。
- -d <深度>:限制递归深度(-d 1 表示仅当前目录)。
示例:
du -sh /home # 显示 /home 目录的总大小(易读格式)
du -h --max-depth=1 /var # 查看 /var 目录下各子目录的大小
12G /home/user1
8.5G /home/user2
20G /home # 总大小
10. lsblk:列出块设备信息
作用:查看磁盘分区和挂载点信息(物理设备级别)。
示例:
lsblk # 列出所有块设备(磁盘、分区)
NAME MAJ:MIN SIZE RO TYPE MOUNTPOINT
sda 8:0 100G 0 disk
├─sda1 8:1 50G 0 part / # 挂载到根目录
└─sda2 8:2 50G 0 part /home # 挂载到 /home
11.fdisk:磁盘分区管理(需谨慎)
12. 其他相关命令
查看磁盘 IO 性能
bashiostat # 显示磁盘 I/O 统计(需安装 `sysstat` 工具)
查看磁盘挂载信息
bashmount | grep -E 'sd[a-z]|nvme' # 过滤磁盘挂载点
查看磁盘 UUID 和文件系统类型
bashblkid # 显示所有块的 UUID 和类型