6、查找命令
在 Linux/Unix 系统中,which 和 find 是两个常用的查找命令,但它们的用途和功能有显著区别。
6.1、which
which - 查找可执行文件的路径
①、功能
-
用于定位 可执行程序(命令)的绝对路径。
-
在
$PATH环境变量指定的目录中搜索。
②、示例
bash
# 基本语法
which [选项] 命令名
which ls # 查找 `ls` 命令的路径(通常输出 `/bin/ls`)
which python # 查找当前使用的 Python 解释器路径
which -a git # 显示所有匹配的路径(如果有多个同名命令)
③、特点
-
仅搜索
$PATH中的目录。 -
只能查找可执行文件(二进制文件或脚本)。
-
不支持模糊匹配(如通配符
*)。
6.2、find
find - 递归查找文件或目录
要想在整个系统完成搜索可以通过命令:su进入超级管理员模式(root用户)来获取更大的权限
①、功能
-
在指定目录及其子目录中 递归搜索文件或目录。
-
支持按名称、类型、大小、时间等条件过滤。
②、示例
bash
# 基本语法
find [搜索路径] [选项] [操作]
# 按名称查找文件
find /home -name "*.txt" # 查找 `/home` 下所有 `.txt` 文件
find . -name "file*" # 当前目录下文件名以 `file` 开头的文件
# 按类型查找文件
find /var/log -type f # 查找 `/var/log` 下的所有文件(不包括目录)
find ~ -type d -name "docs" # 查找用户主目录下名为 `docs` 的目录
# 按时间查找文件
find /tmp -mtime +30 # 查找 `/tmp` 下 30 天前修改的文件
find . -newer reference.txt # 查找比 `reference.txt` 更新的文件
③、常用选项
| 选项 | 作用 |
|---|---|
-name |
按文件名匹配(支持通配符 * ?) |
-type |
按类型过滤(f 文件,d 目录) |
-size |
按文件大小(如 +1M 表示大于 1MB) |
-mtime |
按修改时间(如 -7 表示 7 天内) |
-exec |
对搜索结果执行命令(如删除、压缩) |
④、特点
-
功能强大,支持复杂条件组合。
-
可以搜索任意文件类型(包括隐藏文件)。
-
递归搜索子目录。
-
支持模糊匹配(如-name 、通配符"*.txt"等)。
7、grep、wc和管道符
在 Linux/Unix 系统中,grep、wc 和管道符 | 是文本处理和数据统计的常用工具,它们可以单独使用,也可以组合起来实现强大的功能
7.1、grep
grep - 文本搜索工具
①、功能
- 在文件或输入流中搜索匹配指定模式(正则表达式或普通字符串)的行。
②、示例
bash
# 基本语法
grep [选项] "搜索模式" 文件名
grep "error" log.txt # 查找包含 "error" 的行
grep -i "warning" log.txt # 忽略大小写搜索 "warning"
grep -v "#" config.conf # 显示不包含 `#` 的行(过滤注释)
grep -r "main" /src # 递归搜索 `/src` 目录下所有文件
# 如果在要过滤的关键字中含有特殊符号或者空格,建议使用双引号""引起来
③、常用选项
| 选项 | 作用 |
|---|---|
-i |
忽略大小写 |
-v |
反向匹配(显示不包含模式的行) |
-n |
显示匹配行的行号 |
-c |
统计匹配的行数 |
-r |
递归搜索目录 |
-E |
使用扩展正则表达式(等同于 egrep) |
7.2、wc
wc - 统计行数、单词数、字符数
①、功能
- 统计文件或输入流的行数(
-l)、单词数(-w)、字符数(-c)。
②、示例
bash
# 基本语法
wc [选项] 文件名
wc log.txt # 输出:行数 单词数 字节数 文件名
wc -l log.txt # 只统计行数
wc -w *.txt # 统计所有 `.txt` 文件的单词数
③、常用选项
| 选项 | 作用 |
|---|---|
-l |
只统计行数 |
-w |
只统计单词数 |
-c |
只统计字节数 |
-m |
只统计字符数(与 -c 区别在于多字节字符) |
7.3、管道符
管道符 | - 组合命令
左边内容的输出作为右边指令的输入
①、功能
- 将前一个命令的输出作为后一个命令的输入。
②、示例
bash
# 基本语法
命令1 | 命令2 | 命令3...
# 统计日志中错误出现的次数
grep -i "error" log.txt | wc -l # 先通过 grep 过滤出包含 "error" 的行,再通过 wc -l 统计行数
# 统计代码中函数定义的行数
grep -n "def " script.py | wc -l # 查找 script.py 中所有 def开头的行(函数定义),并统计数量。
# 过滤注释后统计有效代码行数
grep -v "^#" config.conf | wc -l # 排除以 # 开头的行(注释),统计剩余行数。
# 统计当前目录下 .sh 文件的总行数
find . -name "*.sh" -exec cat {} \; | wc -l # 查找所有 .sh 文件,cat 合并内容后统计总行数。
# 统计文件中每个单词的频率
cat text.txt | tr -s ' ' '\n' | sort | uniq -c | sort -nr
# - tr -s ' ' '\n':将空格替换为换行(每行一个单词)
# - sort:排序
# - uniq -c:统计重复次数
# - sort -nr:按频率降序排列
8、echo、tail、重定向符
在 Linux/Unix 系统中,echo、tail 和重定向符(>、>>、< 等)是处理文本输出和文件操作的基础工具
8.1、echo
echo - 输出文本
①、功能
-
在终端打印文本或变量内容。
-
常用于脚本调试、生成文件内容或传递数据给其他命令。
②、示例
bash
# 基本语法
echo [选项] "文本内容"
echo "Hello World" # 输出文本(自动换行)
# 示例输出:Hello World
echo -n "No newline"; echo "Continued" # 两行合并为一行
# 示例输出:No newlineContinued
echo -e "Line1\nLine2" # 输出多行(启用转义符)
# 示例输出:
# Line1
# Line2
echo $PATH # 打印环境变量
③、常用选项
| 选项 | 作用 |
|---|---|
-n |
不自动换行(默认 echo 会在末尾加换行符) |
-e |
启用转义字符(如 \n 换行、\t 制表符) |
④、补充:反引号
反引号是使用英文输出时的tap上方,数字1的左方那个键,中文输出是~
正常使用echo pwd时会默认将pwd当成普通字符,我们要想将其作为命令执行,只需将pwd用反引号``包裹即可
bash
echo pwd
# 示例输出:pwd
echo `pwd`
# 示例输出:/home/user
8.2、tail
tail - 查看文件尾部内容
①、功能
-
显示文件的末尾部分(默认最后 10 行)。
-
常用于实时监控日志文件更新。
②、示例
bash
# 基本语法
tail [选项] 文件名
tail log.txt # 查看文件最后 10 行
tail -n 20 log.txt # 查看最后 20 行
tail -f /var/log/syslog # 实时监控日志更新(按 `Ctrl+C` 退出)
tail -F /var/log/nginx/access.log # 即使文件被重建也能继续跟踪
# 注意;(路径下必须包含该文件)
③、常用选项
| 选项 | 作用 |
|---|---|
-n <行数> |
指定显示的行数(如 -n 5) |
-f |
实时追踪文件变化(日志监控) |
-F |
类似 -f,但会处理文件被轮替(如日志切割)的情况 |
-q |
不显示文件名(多文件时默认会显示) |
8.3、重定向
重定向符 - 控制输入/输出流向
①、功能
- 将命令的输入/输出重定向到文件或其他设备。
②、常用符号
| 符号 | 作用 |
|---|---|
> |
符号左侧命令结果覆盖输出到符号右侧文件(若文件不存在则创建) |
>> |
符号左侧命令结果追加输出到符号右侧文件(不覆盖原有内容) |
< |
从文件读取输入(代替键盘输入) |
2> |
重定向错误输出(如 2> error.log) |
&> |
重定向标准输出和错误输出(如 &> all.log) |
③、示例
bash
# 输出重定向
echo "Hello" > output.txt # 覆盖写入文件(文件原有内容丢失)
# 原来的文件内容清空消失,output.txt只剩下 Hello
echo "World" >> output.txt # 追加到文件末尾
# 原来的文件内容仍在,output.txt内容为 Hello World
# 只要是左边有输出结果的都可以通过>或>>写入右边文件中
wc test1.txt >> input.txt # 将 test1.txt 文件的行数 单词数 字节数 文件名追加到 output.txt 中
# 输入重定向
wc -l < input.txt # 统计文件行数(从文件读取输入)
# 错误重定向
ls /nonexistent 2> error.log # 将错误信息保存到文件
# 合并输出和错误
ls /tmp /nonexistent &> all.log # 所有输出(正常+错误)保存到文件
9、文本编辑器
9.1、vi/vim编辑器
vi 和 vim 是 Unix/Linux 系统上最常见的文本编辑器之一
vim编辑器是vi编辑器的增强版
工作模式
①、 普通模式(Normal Mode)
-
默认模式,启动后自动进入。
-
功能:执行命令、导航文本、删除/复制/粘贴等操作。
-
常用操作:
-
h/j/k/l:左/下/上/右移动光标。 -
dd:删除整行;yy:复制整行;p:粘贴。 -
u:撤销;Ctrl + r:重做。 -
:w:保存;:q:退出(需组合使用,如:wq)。
-
②、插入模式(Insert Mode)
-
输入文本的模式,类似常规编辑器。
-
进入方式(在 Normal 模式下):
-
i:光标前插入;a:光标后插入。 -
o:下方新行插入;O:上方新行插入。
-
-
退出 :按
Esc返回 Normal 模式。
③、可视模式(Visual Mode)
-
选择文本以进行操作。
-
子模式:
-
v:字符可视模式(按字符选择)。 -
V:行可视模式(按行选择)。 -
Ctrl + v:块可视模式(矩形选择)。
-
-
操作 :选中后可用
d(删除)、y(复制)等命令。
④、命令行模式(Command-Line Mode)
-
执行复杂命令,如保存、退出、搜索替换等。
-
进入方式 :Normal 模式下按
:。 -
常用命令:
-
:w:保存;:q!:强制退出不保存;:q:仅退出。 -
:%s/old/new/g:全局替换文本。 -
:set nu:显示行号;:set nonu:隐藏行号。
-
⑤、替换模式(Replace Mode)
-
直接覆盖文本而非插入。
-
进入方式 :Normal 模式下按
R。 -
退出 :按
Esc。
模式切换总结:
-
Normal → Insert :按
i、a、o等。 -
Insert → Normal :按
Esc。 -
Normal → Visual :按
v、V、Ctrl + v。 -
Normal → Command-Line :按
:。 -
Normal → Replace :按
R。
9.2、nano编辑器
在 Linux 中,nano 是一个简单易用的命令行文本编辑器,适合快速编辑配置文件。以下是使用 nano 的完整指南:
bash
# 打开/创建文件
nano 文件名 # 打开或新建文件
sudo nano /etc/ssh/sshd_config # 编辑系统文件(需root权限)
常用快捷键
| 快捷键 | 功能 |
|---|---|
Ctrl + O |
保存文件(需按回车确认) |
Ctrl + X |
退出(若未保存会提示) |
Ctrl + K |
剪切当前行 |
Ctrl + U |
粘贴 |
Ctrl + W |
搜索文本 |
Ctrl + \ |
替换文本 |
Ctrl + G |
打开帮助菜单 |
Alt + U |
撤销操作 |
Ctrl + _ |
跳转到指定行号 |