一、 检索工具:find 与 grep
-
find(找文件) :去磁盘里寻找特定的文件 。例如:find /home -name "*.txt"找出所有 txt 文件。 -
grep(找内容) :在文件里面寻找匹配的字符串 。例如:grep "error" log.txt找出文件中含 error 的行。
- 面试技巧 :
which找可执行命令位置,whereis找程序的二进制、源码和手册。
二、 检索工具的高阶参数
grep 常用选项:
-
-i:忽略大小写。 -
-n:显示行号。 -
-v:反向选择(显示不包含该字符串的行)。
find 常用选项:
-
-name:按文件名查找。 -
-type:按文件类型查找(f为普通文件,d为目录)。
三、 灵魂所在:管道符 | 与重定向 > >>
1. 管道符 |
管道的核心思想是:前一个命令的输出,作为后一个命令的输入。
实战场景:我想在 /etc 目录下找所有带 "ssh" 名字的文件。
bash
ls /etc | grep "ssh"
进阶场景:未来查看系统进程,过滤特定服务:
bash
ps aux | grep "nginx"
2. 重定向 > 与 >>
默认情况下,命令的输出会打印在屏幕上。用重定向可以改变输出位置。
-
>:覆盖写入。如果文件存在,旧内容会被清空。 -
>>:追加写入。新内容会加到文件末尾,常用作日志记录。
bash
echo "测试覆盖" > test.log
echo "测试追加" >> test.log
四、 终端实用小技巧:清屏
当终端屏幕被大量输出占满时,有三种清屏方式:
-
clear命令:最标准的清屏指令。 -
Ctrl + L快捷键:强烈推荐,无需敲回车,瞬间清空当前视口,效率最高。 -
reset命令:当终端因为输出二进制文件导致乱码,或者终端卡死时,使用此命令可以彻底重置终端状态。
注意:clear 只是把内容顶到了上面,如果向上滚动鼠标滚轮,依然能看到之前的输出记录。如果想清空命令历史,可以使用 history -c。
五**、**面试/进阶冷知识
-
clear真的把屏幕内容删了吗?没有。在 Linux 中,
clear或者Ctrl + L只是把之前的输出内容"往上翻"推到了缓冲区。如果你往上滚动鼠标滚轮,还是能看到之前的记录。 -
想彻底清空历史记录怎么办?
输入
history -c,这会把你敲过的历史命令记录清空。
总结
find 找文件,grep 找内容。而管道符 | 就像流水线,把无数个简单的小命令串联成了极其强大的工具。面试中,能把 grep 和管道结合使用,是基本功的体现。
自我实战操作
实战 1:grep 文本搜索(配合管道)
bash
cd ~
# 创建一个包含各种信息的文件
echo -e "Error: connection failed\nSuccess: user login\nWarning: disk full" > status.log
# 1. 查找包含 Error 的行
grep "Error" status.log
# 2. 忽略大小写(-i)
grep -i "error" status.log
# 3. 反向查找(-v),即看除了包含 error 以外的行
grep -v "Error" status.log
# 4. 显示行号(-n)
grep -n "Error" status.log
实战 2:find 文件查找
bash
# 1. 准备环境
mkdir -p mydir/subdir
touch mydir/test1.txt mydir/test2.c mydir/subdir/test3.txt
# 2. 按名称查找 (-name)
find ~/mydir -name "*.txt"
# 3. 按类型查找 (-type d 代表目录,f 代表普通文件)
find ~/mydir -type d
find ~/mydir -type f
实战 3:which 与 whereis
bash
which ls
whereis ls
# 观察两者的区别,whereis 给出的信息更多
实战 4:体验管道的威力(管道 + grep)
bash
# 1. 我们想看看 /etc 目录下有哪些跟 ssh 有关的文件
ls /etc | grep "ssh"
# 2. 假设我们要查看进程,找出 nginx 的进程(目前没安装,所以没输出,但记住这个语法)
ps aux | grep "nginx"
实战 5:重定向 (> 与 >>)
bash
# 1. 覆盖写入(相当于清空并写新内容)
echo "第一行" > redirect.txt
cat redirect.txt
# 2. 追加写入(在末尾加)
echo "第二行" >> redirect.txt
cat redirect.txt
# 3. 覆盖的坑:本来文件有两行,你这么干就剩一行了
echo "我覆盖了前面的" > redirect.txt
cat redirect.txt




