Linux入门1(2/2)

6、查找命令

在 Linux/Unix 系统中,whichfind 是两个常用的查找命令,但它们的用途和功能有显著区别。

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 系统中,grepwc 和管道符 | 是文本处理和数据统计的常用工具,它们可以单独使用,也可以组合起来实现强大的功能

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 系统中,echotail 和重定向符(>>>< 等)是处理文本输出和文件操作的基础工具

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编辑器

vivim 是 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

模式切换总结:

  1. Normal → Insert :按 iao 等。

  2. Insert → Normal :按 Esc

  3. Normal → Visual :按 vVCtrl + v

  4. Normal → Command-Line :按 :

  5. 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 + _ 跳转到指定行号
相关推荐
cellurw3 小时前
Day72 传感器分类、关键参数、工作原理与Linux驱动开发(GPIO/I²C/Platform/Misc框架)
linux·c语言·驱动开发
NextZeros3 小时前
基于CentOS安装LNMP
linux·centos
梁萌3 小时前
Linux安装mysql8.4.6
linux·运维·mysql安装·8.4.6
gtr20203 小时前
Ubuntu24.04 无法读取 U盘
linux
南棱笑笑生3 小时前
20251028在Ubuntu20.04.6上编译AIO-3576Q38开发板的Buildroot系统
大数据·linux·服务器·rockchip
FreeBuf_3 小时前
Ubuntu内核曝严重UAF漏洞,可致攻击者获取Root权限
linux·运维·ubuntu
Jason_zhao_MR3 小时前
RK3576机器人核心:三屏异显+八路摄像头,重塑机器人交互与感知
linux·人工智能·嵌入式硬件·计算机视觉·机器人·嵌入式·交互
☆璇4 小时前
【Linux】数据链路层
linux·服务器·网络
阿巴~阿巴~6 小时前
线程局部存储(Thread-Local Storage, TLS)
linux·服务器·开发语言·c++·线程·虚拟地址空间·线程局部存储