linux 文件搜索与文件内容查看

发布于:2025-07-15 ⋅ 阅读:(14) ⋅ 点赞:(0)

文件查询: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

# 跳转到第100100g
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 和类型

网站公告

今日签到

点亮在社区的每一天
去签到