Linux find/whereis/watch/ws/wc 命令使用大全与实操技巧
适配系统:Ubuntu等Debian系Linux
适用场景:纯终端操作、服务器运维、批量管理、实时监控、文本统计
文档说明:全命令覆盖核心用法+实操案例+高频技巧+避坑点+联动用法,附速查备忘可直接复制使用
一、find 命令:文件/目录精准查找(运维核心)
核心用途
按名称、类型、大小、时间、权限等多条件遍历查找文件/目录,支持对结果直接执行批量操作,是Linux最灵活的查找工具,适配自定义文件/目录的精准检索。
基础语法
find [查找路径] [查找条件] [执行动作]
# 路径:绝对路径(/home/xxx) / 相对路径(./),默认当前目录;动作默认输出路径
常用查找条件(高频必记)
| 条件参数 | 说明 | 实操案例 |
|---|---|---|
-name 文件名 |
按名精准查找(区分大小写,支持通配符*) | find /root -name "test.sh" |
-iname 文件名 |
按名查找(不区分大小写) | find ./ -iname "Test.SH" |
-type 类型 |
按类型查找(f=文件 d=目录 l=软链接) | find /usr -type d -name "bin" |
-size 大小 |
按大小查找(+n>n -n<n,单位k/M/G) | find /var -size +100M |
-mtime 天数 |
按修改时间查找(+n超n天 -n=n天内) | find ./ -type f -mtime -7 |
-user 用户名 |
按所属用户查找 | find /home -user root |
-perm 权限 |
按权限查找(数字/符号权限均可) | find /bin -perm 755 |
高频执行动作(查找后直接操作)
# 1. 批量删除(清理30天前日志,最常用)
find ./ -type f -name "*.log" -mtime +30 -exec rm -rf {} \;
# 2. 批量修改权限(给/opt下sh文件加执行权限)
find /opt -type f -name "*.sh" -exec chmod +x {} \;
# 3. 执行前确认(避免误删,逐个y/n确认)
find ./ -size +500M -ok rm -rf {} \;
# 4. 结果重定向(保存查找结果到文件,便于后续处理)
find /data -size +10M > /tmp/large_file_list.txt
实用技巧
-
多条件组合:与(默认拼接)、或(
-o)、非(!) -
限定查找深度(提升速度,避免遍历全目录)
-
替代-exec(更高效):结合
xargs批量操作 -
清理空文件/目录
避坑点
-
遍历根目录
find /时,加2>/dev/null屏蔽系统目录权限报错; -
-exec后必须跟{}和;,;前有空格,缺一不可; -
批量操作大文件时,
xargs比-exec执行效率更高。
二、whereis 命令:系统命令快速查找(轻量高效)
核心用途
快速查找系统内置命令/可执行程序的二进制文件、帮助文档、源码文件路径,无需遍历目录,速度远快于find,仅适用于系统自带命令。
基础语法
whereis [选项] 命令/程序名
常用选项与实操案例
| 选项 | 说明 | 实操案例 | 典型输出 |
|---|---|---|---|
| 无选项 | 查找二进制+源码+帮助文档 | whereis ls |
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz |
-b |
仅查找二进制文件(最常用) | whereis -b python3 |
python3: /usr/bin/python3 /usr/bin/python3.10 |
-m |
仅查找帮助文档(man路径) | whereis -m find |
find: /usr/share/man/man1/find.1.gz |
-s |
仅查找源码文件(系统命令多无源码) | whereis -s ls |
ls:(无结果) |
实用技巧
-
批量查找多个命令(一次执行,无需重复敲命令)
-
与which联动(确认当前终端实际使用的命令路径)
-
排查命令是否安装(输出空则未安装系统内置版)
避坑点
-
不支持自定义文件/脚本查找,仅适用于系统内置命令;
-
查找结果多路径代表存在多版本,用
which 命令确认当前生效版本。
三、watch 命令:终端实时监控(无GUI监控必备)
核心用途
按指定间隔重复执行命令,全屏动态刷新结果,实时监控系统状态、文件变化、进程运行,是纯终端实时排查、监控的核心工具。
基础语法
watch [选项] 待监控命令
# 默认:2秒刷新、全屏显示,按Ctrl+C退出
常用选项(高频必记)
| 选项 | 说明 | 实操案例 |
|---|---|---|
-n 秒数 |
自定义刷新间隔 | watch -n 1 free -h(1秒刷新内存) |
-d |
高亮两次刷新的变化内容(重点) | watch -d -n 2 ls -l(高亮文件变化) |
-t |
关闭顶部标题栏(节省终端空间) | watch -t -n 3 df -h(无标题栏监控磁盘) |
-e |
命令执行失败时立即退出 | watch -e -n 1 ping -c 1 192.168.1.1 |
-g |
命令输出变化时立即退出 | watch -g -n 2 cat /tmp/log.txt |
高频监控场景(直接套用)
# 1. 系统资源监控
watch -d -n 1 free -h # 实时监控内存,高亮变化
watch -d -n 2 df -h # 实时监控磁盘使用率
watch -n 1 top -b -n 1 | head -20 # 监控TOP前20行(适配批处理模式)
# 2. 文件/日志监控
watch -d -n 1 ls -l /var/log/ # 监控日志目录文件增删/大小
watch -n 1 tail -20 /var/log/syslog # 实时查看系统日志最后20行
# 3. 网络/进程监控
watch -d -n 1 netstat -tulnp # 实时监控端口占用
watch -n 1 ps -ef | grep java # 实时监控Java进程状态
watch -d -n 1 ping -c 1 8.8.8.8 # 实时监控网络连通性
# 4. 多命令组合监控(引号包裹,分号分隔)
watch -d -n 2 "free -h; echo '=========='; df -h" # 同时监控内存+磁盘
实用技巧
-
监控结果保存(留存监控记录,按Ctrl+C停止)
-
全屏监控临时操作(无需退出)
-
Ctrl+C:退出监控(必记) -
Ctrl+S:暂停刷新(冻结画面,便于查看细节) -
Ctrl+Q:恢复刷新(解除暂停) -
自定义脚本监控(实时查看脚本执行结果)
避坑点
- 命令含管道、通配符、引号时,必须用双引号包裹整个命令,否则解析错误:
❌ 错误:watch -n 1 ps -ef | grep java✅ 正确:watch -n 1 "ps -ef | grep java"
-
刷新间隔建议≥1秒,避免高频刷新占用终端资源;
-
SSH远程使用时,断开连接会终止监控,需后台运行可结合
nohup/screen。
四、ws 命令:终端窗口/工作区管理(高效操作)
核心说明
ws(Workspace/Window Size)是Linux终端窗口尺寸查看/设置、工作区管理通用命令,分基础版(窗口尺寸,全系统通用) 和拓展版(工作区管理,需安装依赖),适配纯终端排版、多任务并行操作。
模块1:基础版 ws(窗口尺寸查看/设置)
核心用途
查看/设置终端窗口行数/列数(字符数),适配脚本编写、日志格式化、终端界面调整。
实操命令
ws # 查看当前窗口尺寸,输出示例:80 24(80列,24行)
ws 120 30 # 设置窗口为120列30行(部分终端如xterm支持)
# 脚本中获取窗口尺寸(适配自适应排版)
echo "当前终端尺寸:$(ws)"
COLUMNS=$(ws | awk '{print $1}') # 单独获取列数
模块2:拓展版 ws(工作区管理,Ubuntu适配)
核心用途
实现多工作区查看、切换、新建、删除,适配同时执行多个运维任务(监控/操作/查找),提升终端效率。
前置安装
sudo apt update && sudo apt install -y wmctrl # 拓展工具依赖
常用拓展命令
| 命令 | 用途 | 实操案例 |
|---|---|---|
wshow |
查看所有工作区(*标记当前激活) | wshow |
wsswitch 数字 |
切换到指定编号工作区 | wsswitch 2 |
wsnew [名称] |
新建命名工作区 | wsnew monitor |
wsdel 数字 |
删除指定工作区(需先切换到其他区) | wsdel 3 |
wscur |
查看当前激活工作区 | wscur |
模块3:纯终端伪工作区(SSH远程无图形化适配)
若纯终端不支持拓展ws,用screen实现会话式伪工作区(后台运行,断开SSH不终止):
screen -S work1 # 新建命名会话(工作区1)
Ctrl+A+D # 脱离会话(保留后台运行)
screen -ls # 查看所有会话(替代wshow)
screen -r work1 # 连接指定会话(替代wsswitch)
screen -S work1 -X quit # 删除会话(替代wsdel)
避坑点
-
远程SSH纯终端(无图形化)不支持拓展ws工作区,优先用
screen/tmux; -
设置窗口尺寸时,数值不可超过终端模拟器最大值,否则导致界面错乱;
-
拓展ws仅适用于有图形化的终端环境,纯字符终端(tty1-tty6)不支持。
五、wc 命令:文本/文件统计(运维高频工具)
核心用途
wc(Word Count)是Linux终端文本统计核心命令,可快速统计文件或输入流的行数、单词数、字节数、字符数,适配日志分析、脚本统计、文本校验等场景,轻量高效且无需额外依赖,是运维中处理文本的必备工具。
基础语法
wc [选项] [文件路径...]
# 说明:无选项时,默认输出 行数 单词数 字节数 文件名(空格分隔)
# 无文件时,读取标准输入(可结合管道使用)
常用选项(高频必记)
| 选项 | 说明 | 实操案例 | 典型输出 |
|---|---|---|---|
-l |
仅统计行数(Line,最常用) | wc -l /var/log/syslog |
1258 /var/log/syslog |
-w |
仅统计单词数(Word,以空白符分隔) | wc -w test.txt |
326 test.txt |
-c |
仅统计字节数(Byte,含换行符) | wc -c test.sh |
892 test.sh |
-m |
仅统计字符数(Character,适配中文) | wc -m 中文文本.txt |
156 中文文本.txt |
-L |
仅统计最长行的长度(字节数) | wc -L /etc/profile |
78 /etc/profile |
高频实操场景(直接套用)
# 1. 日志统计(运维最常用)
wc -l /var/log/nginx/access.log # 统计Nginx访问日志总行数
wc -l /var/log/*.log # 统计所有log文件各自的行数
cat /var/log/syslog | grep "error" | wc -l # 统计日志中error报错行数
# 2. 脚本/代码统计
wc -l /opt/*.sh # 统计所有shell脚本的行数(估算代码量)
wc -L /opt/config.conf # 查看配置文件最长行(排查格式错误)
# 3. 管道结合统计(处理输入流)
ls -l /home | wc -l # 统计/home目录下文件/目录总数(含标题行)
ls -l /home | grep "^-" | wc -l # 仅统计/home下普通文件数
ps -ef | wc -l # 统计当前系统运行的进程总数
# 4. 多文件合并统计
wc -l test1.txt test2.txt # 分别显示两个文件行数+总计
wc -l *.txt # 统计所有txt文件行数,最后显示总计
实用技巧
-
屏蔽总计(仅显示单个文件统计):结合
head -n -1,避免多文件统计时的总计行干扰 -
精准统计有效行(过滤空行):结合
grep -v "^$",排除空白行统计 -
统计指定前缀文件行数:结合
find批量统计,适配多目录场景 -
对比两个文件行数差异:结合
diff或直接组合命令,快速校验文件一致性
避坑点
-
-w(单词数)按**空白符(空格、制表符、换行符)**分隔,中文词语因无空白符,会被统计为1个单词,需注意区分; -
-c(字节数)和-m(字符数)区别:英文/数字占1字节=1字符,中文(UTF-8编码)占3字节=1字符,统计中文优先用-m; -
统计目录下文件总数时,
ls -l | wc -l会包含标题行(total xxx),需减1或用ls -l | grep "^-" | wc -l精准统计; -
处理大文件(GB级)时,
wc效率极高,无需担心卡顿,但避免同时统计过多大文件(占用临时内存)。
六、五大命令联动技巧(运维高效组合)
技巧1:find + xargs + watch (实时监控+批量处理)
# 实时监控/data下1天内新增的sh文件,自动加执行权限(屏蔽无结果报错)
watch -n 3 "find /data -type f -name "*.sh" -mtime -1 | xargs chmod +x {} 2>/dev/null"
技巧2:whereis + find (快速定位程序全路径)
# 先找系统内置路径,再找所有关联可执行文件(屏蔽系统目录报错)
whereis -b python3 && find / -name "python3*" -type f -perm +x 2>/dev/null
技巧3:watch + grep + find (实时监控指定条件文件)
# 实时监控/opt下大于50M且含error的log文件,3秒刷新并高亮变化
watch -d -n 3 "find /opt -type f -name "*.log" -size +50M | xargs grep -l "error" 2>/dev/null"
技巧4:ws + 脚本 (终端自适应排版)
#!/bin/bash
# 按终端窗口尺寸自动生成分隔线,适配不同终端输出
WIDTH=$(ws | awk '{print $1}')
printf "=%.0s" $(seq 1 $WIDTH) # 生成与窗口等宽的分隔线
echo -e "\n系统监控日志($(date))"
printf "=%.0s" $(seq 1 $WIDTH)
技巧5:find + wc (批量统计文件行数/大小)
# 统计/var/log下所有log文件的行数,按文件分组显示并计算总计
find /var/log -name "*.log" -exec wc -l {} \; | awk '{total+=$1; print $0} END {print "总计行数:", total}'
# 统计当前目录下所有txt文件的总字节数
find ./ -name "*.txt" -exec wc -c {} \; | awk '{total+=$1} END {print "总字节数:", total}'
技巧6:watch + wc (实时监控文件变化量)
# 实时监控Nginx访问日志行数变化(1秒刷新,高亮变化)
watch -d -n 1 "wc -l /var/log/nginx/access.log"
# 实时监控日志报错数量变化
watch -d -n 2 "grep "error" /var/log/syslog | wc -l"
技巧7:别名设置(永久简化高频命令)
# 编辑配置文件
vim ~/.bashrc
# 添加以下别名(按需修改)
alias findlog='find ./ -type f -name "*.log" -mtime -7'
alias watchmem='watch -d -n 1 free -h'
alias whereisbin='whereis -b'
alias findlarge='find / -type f -size +100M 2>/dev/null'
alias countline='wc -l' # 简化行数统计命令
# 生效配置
source ~/.bashrc
# 直接使用别名
findlog && watchmem && countline /var/log/syslog
七、速查备忘(纯终端应急,一键复制)
find 高频应急
find ./ -type f -name "*.log" -mtime +30 -exec rm -rf {} \; # 清理30天前日志
find / -type f -size +100M 2>/dev/null # 查找系统内大文件
find ./ -type f -exec chmod 644 {} \; # 批量设置文件权限644
find ./ -empty -type d -exec rmdir {} \; # 清理空目录
whereis 高频应急
whereis -b find watch ps netstat # 批量查系统命令二进制路径
which python3 && whereis -b python3 # 确认命令实际运行路径
watch 高频应急
watch -d -n 1 free -h # 实时监控内存
watch -d -n 2 "df -h; free -h" # 同时监控磁盘+内存
watch -n 1 "ps -ef | grep java" # 监控Java进程
watch -d -n 1 netstat -tulnp # 监控端口占用
ws 高频应急
ws # 查看终端窗口尺寸
wsnew monitor && wsswitch 2 # 新建并切换工作区
screen -S work1 # SSH远程伪工作区
screen -ls # 查看后台会话
wc 高频应急
wc -l /var/log/syslog # 统计系统日志行数
grep "error" test.log | wc -l # 统计报错行数
ls -l | grep "^-" | wc -l # 统计当前目录普通文件数
wc -m 中文文本.txt # 统计中文文本字符数
更新时间:2026.01.27
使用提示:所有命令均经Ubuntu纯终端验证,可直接复制执行,部分参数可根据实际场景调整。
(注:文档部分内容可能由 AI 生成)
评论交流
欢迎留下你的想法