《Linux系统编程之入门基础》【Linux基础 理论+命令】(上)

【Linux基础 理论+命令】(上)目录

往期《Linux系统编程》回顾:

/------------ 入门基础 ------------/
【Linux的前世今生】
【Linux的环境搭建】

前言:

hi~ 小伙伴们大家好呀!上次教完大家搭建环境,鼠鼠特意隔了好些天才继续更,其实就是想等大家攒够钱、把云服务器准备好,咱们再正式开始学 Linux 嘛~

怎么样, ~ o( ̄▽ ̄)o对于鼠鼠的狡辩你有什么想要说的吗?
哎,有人问了ପ(๑•̀ㅁ•́ฅ✧)୧:Linux 这趟学习之旅进度好像有点慢,到底啥时候能结束呀?

这个嘛...... 嗯~o ( ̄▽ ̄) o 鼠鼠掐指一算,哎呀,手指头都数不过来啦!˚‧º·(˚ ˃̣̣̥⌓˂̣̣̥ )‧º·˚

---------------前置知识---------------

1. 核心问题怎么CV?

身为CV工程师,第一步当然是得先搞明白在 XShell 里咋进行复制和粘贴啦:

在 XShell 中,复制粘贴的默认快捷键和Windows下常见的 Ctrl + C/Ctrl + V 不同,具体如下:

  • 复制:使用 ctrl + Insert或者 ctrl +Shift + c 组合键完成复制

    • 部分设备需配合 Fn 键按 Insert 才能触发(因键盘布局差异,若直接按 Ctrl + Insert 无效,可尝试加上 Fn 键)
  • 粘贴:使用 Shift + Insert 或者 ctrl +Shift + v 组合键完成粘贴

2. 怎么将屏幕全搞黑/白?

按住 Alt + Enter 键,就可以将 Xshell 切换进入全屏或者退出全屏啦~ (≧∇≦)ノ

在 Xshell 终端里敲指令、写代码时,纯黑或纯白的界面,是不是还挺有极客范儿的?

3. 命令都长什么样?

Linux 命令的格式有一定的规范性,掌握其基本结构有助于更高效地使用命令。

Linux 命令的核心结构通常可以概括为:命令 [选项] [参数]

  • 其中 命令 是必须的
  • 然而 [选项][参数] 是可选的(根据具体命令的功能需求决定是否添加)

  1. 命令(Command)
  • 含义:是命令的核心,代表要执行的具体操作(如:查看文件、创建目录等)
  • 特点:由小写字母组成,通常是英文单词的缩写,便于记忆
  • 示例
    • ls(list 的缩写,列出目录内容)
    • cd(change directory 的缩写,切换目录)
    • cp(copy 的缩写,复制 文件/目录)

  1. 选项(Options)
  • 含义:用于调整命令的行为,实现更具体的功能(如:显示详细信息、忽略错误等)
  • 格式分类
    • 短选项:由 - 加单个字母组成(如:-l-a
      示例:ls -l(以长格式列出文件)
    • 长选项:由 -- 加完整单词组成(更易理解)
      示例:ls --all(等同于 -a,显示所有文件,包括隐藏文件)
  • 组合使用 :多个短选项可以合并,例如:ls -la 等同于 ls -l -a

  1. 参数(Arguments)
  • 含义:指定命令操作的对象(如:文件、目录、路径等)
  • 数量 :根据命令不同,参数数量可分为:
    • 0 个参数:如 pwd(显示当前目录,无需参数)
    • 1 个参数:如 cd /home(参数为目标目录 /home
    • 多个参数:如 cp file1.txt file2.txt /backup(复制 file1.txtfile2.txt/backup 目录,前两个是源文件,最后一个是目标目录)
  • 路径格式 :参数可以是绝对路径(如:/usr/local)或相对路径(如:./docs,表示当前目录下的 docs 文件夹)

一、文件夹 VS 目录

在 Linux 系统里,目录和文件夹是同一概念的不同表述 ,可简单理解为 "目录 ≈ 文件夹",用于组织和管理文件。

二、绝对路径 VS 相对路径

绝对路径:以 根目录(/) 为起点开始构建的路径

  • 不依赖当前所在目录
  • 因定位逻辑固定,唯一性稳定,常用于服务配置文件(需精准、固定指向)
  • 示例:/home/user/docs/file.txt

相对路径:以当前用户所处目录为起点开始构建的路径

  • 无需写全路径,更简洁
  • 因依赖当前位置,灵活性高,常用于命令行操作(手动快速输入)
  • 示例:docs/file.txt(若当前在 /home/user

注意:

  • Windows 系统:路径分隔符为反斜杠 \
  • Linux 系统:路径分隔符为正斜杠 /

特殊情况与补充:

  • 选项参数顺序
    • 通常选项在前,参数在后(如:ls -l /home

    • 部分命令允许选项和参数混合(但建议按规范顺序使用,避免混淆)


  • 帮助信息查看
    • 几乎所有命令都支持 --help 选项(如:ls --help),用于查看该命令的详细格式、选项和参数说明

    • 也可以通过 man 命令(如:man ls)查看更完整的手册页


  • 管道与重定向

    • 命令可以通过管道(|)将输出传递给其他命令(如:ls -l | grep "txt",筛选出 .txt 文件)

    • 可以通过重定向符号(>>>< 等)处理输入输出(如:ls > filelist.txt,将结果写入文件 filelist.txt)


示例总结:

命令格式 说明
ls 无选项、无参数,列出当前目录内容
ls -a 带短选项,显示所有文件(包括隐藏文件)
ls --long /tmp 带长选项和参数,以长格式列出 /tmp 目录
cp -r src/ dest/ 短选项(-r 递归复制目录)+ 两个参数(源目录和目标目录)

4. 我是谁?我在哪?我要干嘛?

一、whoami

whoami - 英文全称为 "who am I"

核心作用显示当前登录并正在操作终端的有效用户的用户名,快速确认当前身份


基本用法

  • whoami:直接执行,无需参数,输出当前用户的用户名

    bash 复制代码
    whoami  # 输出当前登录用户的用户名,如:zhangsan

使用示例

bash 复制代码
whoami       # 普通用户登录时,输出如:user1

sudo whoami  # 切换到root权限后执行,输出:root

# 在脚本中判断用户身份
if [ "$(whoami)" != "root" ]; then
  echo "请使用root用户执行此脚本"
  exit 1
fi

注意事项

  • whoami 仅输出当前有效用户的用户名,不包含其他信息(如用户 ID、组信息等)
  • id -un 命令功能完全相同(id -un 表示输出用户 ID 对应的用户名)
  • 区别于 who 命令 :who 显示系统中所有登录的用户信息,而 whoami 只显示当前操作的用户
  • 当使用 sudo 切换权限后,whoami 会显示切换后的用户(如:sudo su 后执行会显示 root

二、pwd

pwd - 英文全称为 "print working directory"

核心作用显示当前所在的工作目录的绝对路径


基本用法

  • pwd:不带任何参数,直接输出当前工作目录的绝对路径

    bash 复制代码
    pwd  # 显示当前所在目录的绝对路径

使用示例

bash 复制代码
pwd   # 显示当前工作目录的绝对路径

三、cd

cd - 英文全称为 "change directory"

核心作用切换当前工作目录,即从当前目录跳转到指定目录


基本用法

  • cd [目录路径] :切换到指定路径的目录(路径可以是绝对路径相对路径

    bash 复制代码
    cd  /home/user/docs  # 绝对路径:切换到 /home/user/docs 目录
    cd ./downloads       # 相对路径:切换到当前目录下的 downloads 子目录
  • cd :不带任何参数时,默认切换到当前用户的家目录(等价于 cd ~

    bash 复制代码
    cd  # 切换到当前用户的家目录

特殊用法

  • cd ~:切换到当前用户的家目录(与 cd 效果相同)
  • cd ..:切换到当前目录的父目录(上一级目录)
  • cd -:切换到上一次所在的目录(相当于 "返回" 功能)
  • cd ~用户名:切换到指定用户的家目录(需有相应权限)

使用示例

bash 复制代码
cd /etc        # 切换到 /etc 系统目录
cd ..          # 切换到上一级目录
cd -           # 切换到上一次所在的目录
cd ~root       # 切换到 root 用户的家目录(需权限)

5. 输出Hello World?

四、echo

echo

核心作用在终端输出指定的字符串或变量值,是 Shell 脚本中用于打印信息的基础命令


基本用法

  • echo [字符串]:直接输出指定的字符串

    bash 复制代码
    echo "Hello World"  # 输出:Hello World
    echo 12345          # 输出:12345(数字无需引号包裹)
  • echo $[变量名] :输出变量的值(变量前需加 $ 符号)

    bash 复制代码
    name="Linux"
    echo $name  # 输出:Linux

常用选项

  • -n:输出内容后不自动换行(默认会在结尾添加换行符)
  • -e:启用转义字符解析(支持 \n 换行、\t 制表符等特殊字符)

使用示例

bash 复制代码
# 基本输出
echo "这是一条消息"  # 输出:这是一条消息

# 输出变量
age=25
echo "年龄:$age"    # 输出:年龄:25

# 不换行输出
echo -n "正在加载"
echo "...完成"       # 输出:正在加载...完成(两行内容在同一行显示)

# 解析转义字符
echo -e "姓名\t年龄"     # 输出:姓名    年龄(\t 表示制表符,即Tab键效果)
echo -e "第一行\n第二行"  # 输出两行内容(\n 表示换行)

# 输出到文件(配合重定向符号 > 或 >>)
echo "日志记录:$(date)" >> app.log  # 将带时间的日志追加到 app.log 文件

# 输出命令执行结果(配合 $() 或 ``)
echo "当前目录:$(pwd)"  # 输出:当前目录:/home/user

注意事项

  • 字符串中包含空格或特殊字符(如:$*)时,需用单引号或双引号包裹
  • 单引号 '' 与双引号 "" 的区别:
    • 双引号 :会解析变量(如:$name)和转义字符
    • 单引号 :则原样输出所有内容(如:echo '$name' 会输出 $name
  • 在脚本中,echo 常用于打印提示信息、变量值或调试内容
  • 部分系统(如:BSD 系统)的 echo 命令默认不支持 -e 选项,可使用 printf 命令替代更复杂的格式化输出

五、printf

printf - 英文全称为 "print formatted"

核心作用按照指定格式输出字符串、变量或数据,支持复杂的格式化控制(如对齐、宽度、精度等),功能比 echo 更强大灵活


基本用法

  • printf "[格式字符串]" [参数1] [参数2] ...:按格式字符串指定的规则输出参数

    bash 复制代码
    printf "姓名:%s,年龄:%d\n" "张三" 25  # 按格式输出字符串和数字

常用格式符

  • %s:输出字符串
  • %d/%i:输出十进制整数
  • %f:输出浮点数
  • %c:输出单个字符
  • %%:输出百分号本身

格式修饰符

  • [数字]:指定输出宽度(不足补空格,正数右对齐,负数左对齐)
  • .[数字]:对浮点数指定小数位数(精度)
  • -:左对齐(默认右对齐)
  • 0:用 0 填充数字的空位(如:%04d 表示输出 4 位数字,不足前补 0)

使用示例

bash 复制代码
# 基本字符串与数字输出
printf "Hello, %s! \n" "Word"          # 输出:Hello, Word!
printf "整数:%d,浮点数:%f\n" 100 3.14  # 输出:整数:100,浮点数:3.140000

# 控制宽度与对齐
printf "|%10s|%-10s|\n" "右对齐" "左对齐"  # 输出:|    右对齐|左对齐    |
printf "|%8d|%08d|\n" 123 123            # 输出:|     123|00000123|

# 浮点数精度控制
printf "圆周率:%.2f\n" 3.14159  # 输出:圆周率:3.14(保留2位小数)

# 循环输出(配合Shell变量)
names=("Alice" "Bob" "Charlie")
ages=(22 25 30)
for i in {0..2}; do
  printf "第%d人:%-10s 年龄:%d\n" $((i+1)) ${names[i]} ${ages[i]}
done
# 输出:
# 第1人:Alice      年龄:22
# 第2人:Bob        年龄:25
# 第3人:Charlie    年龄:30

注意事项

  • printf 不会像 echo 那样自动添加换行符,需手动添加 \n
  • 格式字符串中的格式符数量 需与后面的参数数量匹配,否则可能出现意外输出
  • 跨平台兼容性比 echo 更好(不同系统的 echo 行为可能有差异)
  • 适合需要精确控制输出格式的场景(如:表格、日志等),简单输出可继续使用 echo

6. Linux 重定向命令有哪些?

一、输出重定向:>(覆盖写入)

基础命令echo "helloworld" > hello.txt

  • 执行逻辑:检查hello.txt是否存在:

    • 若不存在新建 hello.txt ,将 echo 输出的 helloworld 写入文件
    • 若已存在先清空文件原有内容,再写入 helloworld
  • 验证步骤

二、输出重定向:>>(追加写入)

基础命令echo "helloworld" >> hello.txt

  • 执行逻辑
    无论 hello.txt 是否存在,不会清空原有内容 ,而是在文件末尾 追加写入新内容

  • 验证步骤

三、输入重定向:<(从文件读入)

基础命令cat < hello.txt

  • 执行逻辑

    改变 cat 命令的输入源:默认 cat键盘读入 ,用 < 后,改为从 hello.txt 读入内容,并输出到终端。

  • 验证步骤


重定向总结:

1. 输出重定向(>/>>)

  • 本质 :将命令的标准输出(stdout)导向文件,而非终端。
    • >:强制覆盖,会清空文件(类似 "替换文件内容" )
    • >>:追加模式,在文件末尾续写(类似 "在文件最后加内容" )

2. 输入重定向(<)

  • 本质 :将命令的标准输入(stdin)从默认的 "键盘",改为 "指定文件"。
    • 例如 cat < hello.txt:让 cathello.txt 读内容,而非等待键盘输入

---------------理论知识---------------

1. Linux 命令的本质是什么?

在 Linux 系统中,命令的本质,其实就是 "可执行文件"

这些可执行文件,和我们用 C/C++(或其他编程语言 )编写、编译后的程序,在逻辑上是同一类东西 ------ 它们都是系统能识别、加载并运行的 "程序载体"。


简单说:

  • 当你在终端输入 lscd 这类命令时,背后执行的就是系统里预先存放好的可执行文件
  • 从开发视角看,我们自己写的 C/C++ 程序,编译成可执行文件后,也能像系统命令一样被终端调用(只要放在系统能找到的路径,或通过路径指定执行 )

可以这么理解Linux 命令 ≈ 可执行文件 ≈ 我们编写并编译后的程序,它们都是系统执行 "特定操作逻辑" 的载体,只是命令是系统自带、为基础运维设计的可执行文件,而我们写的程序,是按需求定制功能的可执行文件


补充说明

  • 当然,Linux 也有 "内置命令",由 Shell 直接实现,不对应独立文件
  • 但绝大多数常用命令(如:lscp 等 ),确实是独立的可执行文件,和我们编译的程序逻辑一致

2. 文件的本质是什么?

Linux 中,文件由 "内容" 和 "属性" 两部分构成

  • 内容:是文件实际存储的数据(如:文本、程序代码等 )
  • 属性:包含文件权限(读写执行等 )、所有者、大小、创建时间等元信息

即便创建一个空文件,系统也会为其分配基础属性(如:占用磁盘 inode 等),所以空文件也会占据一定磁盘空间

3. 文件操作操作的是啥?

学习 Linux 文件操作时,核心思路可归纳为:围绕文件的 "内容" 或 "属性" 开展操作 ,比如:

  • 对内容操作:用 cat 查看文本内容、echo 追加内容、vim 编辑内容等
  • 对属性操作:用 chmod 修改权限、chown 变更所有者、touch 更新文件时间戳等

4. Linux 的文件系统结构长什么样?

Linux 的文件结构,是以根目录 / 为起点的多叉树 结构,磁盘里的文件与目录 共同组成一棵目录树 ,每个节点仅为目录文件

  • 文件:在目录树里一定是叶子节点(无法包含其他节点 )

  • 目录:可能是叶子节点(如:空目录,无下属内容 ),也可能是中间节点(包含子文件/子目录 )

5. (.)和(...)到底是什么鬼?

在 Linux 系统里,任何一个目录,哪怕是空目录,系统都会默认自动为其生成两个特殊的目录:. ..

  • . :代表当前目录,可用于在路径中指代当前操作所处的这个目录本身,比如:执行 cp file.txt ./ ,就是把 file.txt 复制到当前目录(当然直接写 cp file.txt . 更常见 )
  • .. :代表父目录(当前目录的上一级目录 ),像执行 cd .. ,就能从当前目录切换到上一级目录,方便在目录层级间跳转

这两个特殊目录是 Linux 目录结构的基础特性,保障了目录树的层级关联与路径导航的逻辑完整性,让用户和程序能便捷地进行目录相关操作。

6. 为什么cd...能切换到上一级目录?

cd 是 Linux 里切换目录的命令,它的核心逻辑是:
接收一个目录路径作为参数,将用户的 "当前工作目录" 切换到该路径。

当执行 cd .. 时:

  • .. 被识别为父目录的路径标识(由系统自动维护 )
  • cd 命令会读取当前目录里 .. 指向的 "父目录位置",并跳转过去

假设当前在 /home/user/docs 目录:

  • 这个目录里的 .. ,指向的是 /home/user(父目录 )
  • 执行 cd ..cd 会解析 .. 的指向,把当前工作目录切换到 /home/user

简单总结:
cd .. 能切换目录,是因为 Linux 目录里默认有 .. 标识父目录 ,且 cd 命令会依据 .. 的指向,完成 "跳转到上一级" 的操作~


Linux 文件系统是目录树 结构(以 / 为根 ),每个目录在树里都有唯一的 "父目录"(除了根目录 / ,它的 .. 指向自己 )

所以 :不断的执行cd..命令,最终会停留在根目录层级。

7. Linux 系统中,一切皆文件!

在 Linux 体系里,文件概念被极大拓展 ,不仅是你手动创建的普通文本、程序文件,像 键盘、显示器 这类硬件设备,在系统视角中,也以 "文件" 形式存在、被管理。


一、设备文件与文件操作的关联

printf/scanf(C 语言标准输入输出函数)、cout/cin(C++ 输入输出流),本质都是 "文件操作" ------ 它们背后的逻辑,和用 fopen(C 语言文件打开函数)、fstream(C++ 文件流)操作普通文件,遵循相同的 "文件交互流程" 。

  • 对键盘、显示器这些设备文件来说:访问之前,必须先 "打开"
  • 只不过在日常编程里,系统默默帮我们做了 "打开设备文件" 这件事,让我们能直接用 printf 输出到显示器、用 scanf 读取键盘输入

二、系统自动 "打开" 设备文件的原理

系统启动后,会自动帮我们 "打开" 最基础的几个设备文件,核心依赖如下:

c 复制代码
#include <stdio.h>  
// C 标准库函数:手动打开文件时调用,指定路径、打开模式  
FILE *fopen(const char *path, const char *mode);  

// 系统预先定义的 "标准设备文件指针"  
extern FILE *stdin;  // 对应键盘(标准输入)  
extern FILE *stdout; // 对应显示器(标准输出)  
extern FILE *stderr; // 对应显示器(标准错误输出,如:程序报错信息 )  

1. 系统为什么要帮我们打开?

这是为了让编程更简单!

想象一下,如果每次写 printf 前,都要手动 fopen 显示器设备文件,代码会变得繁琐且不通用。

系统预先打开 stdin/stdout/stderr ,相当于提供了 "默认交互通道"

  • 写代码时,直接用 printf/cout 就能往显示器输出,无需关心硬件细节
  • scanf/cin 就能从键盘读入,背后靠 stdin 这个已打开的 "设备文件" 支撑

2. 为什么只默认打开这几个?
stdin(键盘)、stdout(显示器)、stderr(显示器)是 最基础、最通用的交互设备

  • 几乎所有程序都需要 "输入、输出、报错" 功能,系统预先打通这些通道,能让程序开发 "开箱即用" ,覆盖 99% 的基础场景

  • 如果需要操作其他设备(比如:摄像头、自定义硬件),就需要 手动用 fopen 等函数打开对应的设备文件 ,并按设备规则读写数据


三、理解 "一切皆文件" 的意义

把设备抽象成 "文件" ,是 Linux 设计的精妙之处:

  1. 统一操作逻辑:不管是操作普通文件,还是键盘、显示器,都能用一套 "打开 → 读写 → 关闭" 的流程,降低学习和开发成本
  2. 方便灵活扩展:新硬件接入时,只要按 "文件" 规范实现驱动,就能被系统以统一方式管理,让 Linux 能适配海量设备

简单说:"一切皆文件" 是 Linux 高效、灵活的基石之一 。

系统预先打开标准设备文件,是为了让我们写代码更轻松 ------ 而背后的原理,本质是 用 "文件抽象" 简化硬件交互 ,这也是 Linux 体系最核心的思想之一 。

8. 终端也是文件???

这时小伙伴们可能会感到疑惑 (・・?) 啊,"一切皆文件",那岂不是说------嘿嘿,终端也是文件咯?

芜湖~起飞~~ (ノ≧∀≦)ノ♪✈️

---------------基础命令---------------

------- 文件目录查看 -------

一、ls

ls - 英文全称为 "list"

核心作用显示当前或指定目录下的文件和子目录


基本用法

  • ls:不带任何参数时,默认列出当前目录中可见的文件和子目录(不包括隐藏文件),按字母顺序排列,以空格分隔

    bash 复制代码
    ls  # 列出当前目录内容
  • ls [目录路径]:指定目录路径时,列出该目录下的内容

    bash 复制代码
    ls /home   # 列出 /home 目录下的内容
    ls ./docs  # 列出当前目录下 docs 子目录的内容(相对路径)

常用选项

  • -l:以长格式显示(包含文件权限所有者大小修改时间等详细信息)
  • -a:显示所有文件和目录(包括隐藏文件,即以.开头的文件)
  • -h:与-l结合使用,以易读格式显示文件大小(如:KB、MB)
  • -t:按修改时间排序(最新的在前)
  • -r:反向排序(默认按字母顺序,反向后从 Z 到 A)

使用示例

bash 复制代码
ls 		   # 列出当前目录内容
ls -a      # 列出当前目录所有文件(包括隐藏)
ls -lh     # 详细列出当前目录内容

二、stat

stat - 英文全称为 "status"

核心作用显示文件或文件系统的详细状态信息,包括权限、大小、创建/修改时间等元数据


基本用法

  • stat [文件名/目录名]:显示指定文件或目录的详细状态信息

    bash 复制代码
    stat note.txt  # 显示 note.txt 文件的详细信息
    stat docs/     # 显示 docs 目录的详细信息
  • stat [路径]/[文件/目录名]:显示指定路径下文件或目录的状态(支持绝对路径和相对路径)

    bash 复制代码
    stat /home/user/data.csv  # 绝对路径:显示 /home/user 下 data.csv 的信息
    stat ./logs/error.log     # 相对路径:显示当前目录 logs 子目录下 error.log 的信息

常用选项

  • -f:显示文件所在文件系统的信息(而非文件本身),如:文件系统类型、总容量、可用空间等
  • -t:以简洁的单行格式输出信息(适合脚本中提取数据)
  • -c [格式符]:自定义输出格式,常用格式符包括:
  • %a:八进制权限(如:644)
  • %A:符号权限(如:-rw-r--r--)
  • %s:文件大小(字节数)
  • %U:文件所有者用户名
  • %G:文件所属组名
  • %y:最后修改时间(带时区)

使用示例

bash 复制代码
# 显示文件的完整状态信息
stat report.pdf
# 输出示例包含:文件类型、大小、权限、所有者、创建/修改/访问时间等

# 显示文件系统信息(如磁盘空间)
stat -f /home
# 输出可能包含:文件系统类型、总块数、空闲块数、块大小等

# 简洁格式输出文件关键信息
stat -t image.png
# 单行输出:文件名 大小 权限 所有者 时间等精简信息

# 自定义格式输出权限和所有者
stat -c "权限:%A,所有者:%U" config.ini
# 输出如:权限:-rw-r--r--,所有者:admin

三、tree

tree

核心作用以树形结构递归显示目录和文件的层级关系,直观展示文件夹的组织结构,便于快速了解目录结构


基本用法

  • tree:不带参数时,以树形结构显示当前目录下的所有文件和子目录

    bash 复制代码
    tree  # 显示当前目录的树形结构
  • tree [目录路径]:显示指定目录的树形结构

    bash 复制代码
    tree /home/user/docs  # 显示 docs 目录的树形结构

常用选项

  • -L [层数]:限制显示的目录深度(层数),避免层级过深导致输出过长
  • -d:仅显示目录,不显示文件
  • -f:显示每个文件 / 目录的完整路径
  • -p:显示文件 / 目录的权限
  • -u:显示文件 / 目录的所有者
  • -s:显示文件 / 目录的大小
  • -h:以人类可读的格式显示大小(如 K、M、G)
  • -P [模式]:只显示文件名匹配指定模式的文件 / 目录(支持通配符)
  • -I [模式]:排除文件名匹配指定模式的文件 / 目录

使用示例

bash 复制代码
tree -L 2     # 只显示当前目录下2层的结构(当前目录为第1层)
tree -d /etc  # 仅显示 /etc 目录下的子目录结构
tree -f -h    # 显示当前目录所有文件的完整路径和人类可读的大小

tree -P "*.txt"         # 只显示所有 .txt 结尾的文件及所在目录
tree -I "node_modules"  # 显示当前目录结构,排除 node_modules 目录

tree -p -u    # 显示文件权限和所有者信息

注意事项

  • 部分 Linux 系统默认未安装 tree,需手动安装(如 sudo apt install treesudo yum install tree
  • 对于包含大量文件的目录,tree 输出可能很长,可结合管道符 | less 分页查看(如 tree /usr | less
  • 通配符模式需用引号包裹,避免被 Shell 提前解析
  • 使用 -L 选项限制层级,可使输出更简洁,适合快速了解目录框架
  • ls -R 相比,tree 的输出更直观,层级关系一目了然

tree 命令可递归以树状结构显示指定目录内容,若未安装需手动部署:

  • 若当前是root 用户

    • 直接执行 yum install -y tree(centos系统)
    • 直接执行 apt install -y tree (ubuntu系统)
  • 若当前是普通用户:需用 sudo yum/apt install -y tree(后续讲完 vim 后,才可将用户加入系统信任列表开启 sudo 权限,当前普通用户暂无法使用 sudo)

四、which

which

核心作用在环境变量 $PATH 定义的目录中,查找可执行命令的路径,帮助确认命令是否存在及实际执行的版本


基本用法

  • which [命令名]:查找指定命令在系统中的路径

    bash 复制代码
    which ls  # 查找 ls 命令的路径
  • which [命令名1] [命令名2]:同时查找多个命令的路径

    bash 复制代码
    which python3 gcc  # 同时查找 python3 和 gcc 命令的路径

常用选项

  • -a:显示所有匹配的命令路径(默认只显示第一个找到的路径)

使用示例

bash 复制代码
which pwd                # 查找 pwd 命令的路径,输出如:/bin/pwd
which -a python          # 显示所有名为 python 的可执行文件路径

which cd                 # 若 cd 是内置命令,可能无输出(因 which 只查外部可执行文件)

注意事项

  • which 仅搜索环境变量 $PATH 包含的目录,若命令在当前目录但未加入 $PATH,则无法找到(需用 ./命令 执行)
  • 对别名(如:ll='ls -l'),which 通常会显示别名对应的原始命令路径,而非别名本身
  • whereis 不同,which 只关注可执行文件,不包含手册页、源文件等信息
  • 内置命令(如:cd)由 shell 自身提供,which 可能无法返回其路径

五、whereis

whereis - 英文全称为 "where is"

核心作用在系统预设的目录中,快速查找命令对应的可执行文件、源代码文件和手册页文件的位置


基本用法

  • whereis [命令名]:查找指定命令相关的文件(可执行文件、源代码、手册页)

    bash 复制代码
    whereis ls  # 查找与 ls 命令相关的文件
  • whereis [命令名1] [命令名2]:同时查找多个命令相关的文件

    bash 复制代码
    whereis gcc python3  # 同时查找 gcc 和 python3 相关的文件

常用选项

  • -b:仅查找可执行文件(binary)
  • -s:仅查找源代码文件(source)
  • -m:仅查找手册页文件(manual)
  • -u:查找不完整的文件(即缺少可执行文件、源代码或手册页中至少一项的文件)

使用示例

bash 复制代码
whereis grep               # 查找 grep 相关的所有文件,输出如:grep: /bin/grep /usr/share/man/man1/grep.1.gz

whereis -b python3         # 仅查找 python3 的可执行文件路径
whereis -m ls              # 仅查找 ls 命令的手册页文件位置
whereis -s gcc             # 仅查找 gcc 的源代码文件(若存在)

whereis -u find            # 查找 find 命令中不完整的文件信息

注意事项

  • whereis 仅搜索系统预设的目录(如:/bin/usr/bin/usr/share/man 等),非标准路径的文件可能无法找到
  • 相比 whichwhereis 不仅能找到可执行文件,还能找到手册页和源代码(若存在),但搜索范围更局限于系统默认目录
  • 对于没有源代码或手册页的命令,whereis 只会显示其可执行文件路径
  • 速度较快,因为它依赖预先生成的数据库(部分系统),而非实时遍历目录

------- 文件目录操作 -------

一、touch

touch

核心作用创建新的空文件,或更新已有文件的访问时间和修改时间(不改变文件内容)


基本用法

  • touch [文件名]:若文件不存在,则创建指定名称的空文件;若文件已存在,则更新其时间戳

    bash 复制代码
    touch note.txt  # 创建空文件 note.txt,或更新已有 note.txt 的时间
  • touch [文件1] [文件2] ...:同时处理多个文件,批量创建空文件或更新时间

    bash 复制代码
    touch a.txt b.md c.log  # 同时创建/更新多个文件

常用选项

  • -a:仅更新文件的访问时间(不改变修改时间)
  • -m:仅更新文件的修改时间(不改变访问时间)
  • -d "时间字符串":指定更新为特定时间(如:2024-01-01 12:00
  • -t 时间戳:用数字时间戳指定更新时间(格式:YYYYMMDDhhmm.ss

使用示例

bash 复制代码
touch report.txt        		 # 创建空文件 report.txt

touch -a readme.md               # 仅更新 readme.md 的访问时间

touch -d "2025-05-20" data.csv   # 将 data.csv 时间改为 2025年5月20日
touch -t 202312312359.59 log.txt # 将 log.txt 时间改为 2023年12月31日23:59:59

二、mkdir

mkdir - 英文全称为 "make directory"

核心作用创建新的目录(文件夹)


基本用法

  • mkdir [目录名]:在当前目录下创建指定名称的新目录

    bash 复制代码
    mkdir docs  # 在当前目录下创建名为 docs 的目录
  • mkdir [路径]/[目录名]:在指定路径下创建新目录(路径可以是绝对路径或相对路径)

    bash 复制代码
    mkdir /home/user/downloads  # 绝对路径:在 /home/user 下创建 downloads 目录
    mkdir ./data/reports        # 相对路径:在当前目录的 data 子目录下创建 reports 目录

常用选项

  • -p:递归创建目录,即当父目录不存在时,自动创建所需的所有父目录

使用示例

bash 复制代码
mkdir images                # 在当前目录创建 images 目录
mkdir -p project/src/css    # 递归创建嵌套目录(若 project 和 src 不存在则自动创建)

三、rmdir

rmdir - 英文全称为 "remove directory"

核心作用删除空目录(只能删除空目录,若目录非空则无法删除)


基本用法

  • rmdir [目录名]:删除当前目录下指定的空目录

    bash 复制代码
    rmdir temp  # 删除当前目录下名为 temp 的空目录
  • rmdir [路径]/[目录名]:删除指定路径下的空目录(路径可以是绝对路径或相对路径)

    bash 复制代码
    rmdir  /home/user/old  # 绝对路径:删除 /home/user 下的 old 空目录
    rmdir ./docs/backup    # 相对路径:删除当前目录 docs 子目录下的 backup 空目录

常用选项

  • -p:递归删除空目录,删除子目录后若其父目录也为空,则一并删除

使用示例

bash 复制代码
rmdir images           # 删除空目录 images

rmdir -p a/b/c         # 递归删除空目录 a/b/c,若 b 和 a 也为空则同时删除
rmdir project/src/css  # 删除相对路径下的css目录

四、rm

rm - 英文全称为 "remove"

核心作用删除文件或目录(可删除非空目录,功能比 rmdir 更灵活,但需谨慎操作,删除后通常无法恢复)


基本用法

  • rm [文件名]:删除当前目录下的指定文件

    bash 复制代码
    rm note.txt  # 删除当前目录下的 note.txt 文件
  • rm [路径]/[文件/目录名]:删除指定路径下的文件或目录(路径可以是绝对路径或相对路径)

    bash 复制代码
    rm /home/user/temp.log  # 绝对路径:删除 /home/user 下的 temp.log 文件
    rm ./docs/old/          # 相对路径:删除当前目录 docs 子目录下的 old 目录(需配合选项)

常用选项

  • -f:强制删除,不提示确认(即使文件权限为只读也直接删除)
  • -i:删除前提示确认(交互式删除,避免误操作)
  • -r-R:递归删除,用于删除目录及其包含的所有文件和子目录(包括非空目录)
  • -v:显示删除过程的详细信息(verbose 模式)

使用示例

bash 复制代码
rm file1.txt              # 删除 file1.txt 文件(默认可能提示确认,视系统配置而定)
rm -f junk.txt            # 强制删除 junk.txt,不提示
rm -i important.doc       # 删除前提示确认是否删除 important.doc

rm -r docs                # 递归删除 docs 目录及其中所有内容
rm -rf old_project        # 强制递归删除 old_project 目录(慎用,无法恢复)

rm -v *.log               # 删除所有 .log 结尾的文件,并显示删除过程

注意事项

  • rm 命令删除的文件 / 目录不会进入 "回收站",删除后难以恢复,尤其是 rm -rf 操作风险极高,使用时务必确认路径和名称正确(建议先用 ls 查看目录内容再删除)
  • 避免在根目录(/)或系统重要目录下使用 rm -rf,否则可能导致系统崩溃

五、cp

cp - 英文全称为 "copy"

核心作用复制文件或目录,可在不同位置创建 文件/目录 的副本


基本用法

  • cp [源文件] [目标路径]:复制单个文件到指定路径

    bash 复制代码
    cp file.txt ./backup/  # 复制 file.txt 到当前目录的 backup 子目录
    cp document.pdf /home/user/docs/  # 复制 document.pdf 到 /home/user/docs 目录
  • cp [源文件1] [源文件2] ... [目标目录]:复制多个文件到同一目标目录

    bash 复制代码
    cp a.txt b.jpg c.csv ./archive/  # 同时复制多个文件到 archive 目录
  • cp -r [源目录] [目标路径] :复制目录(需加 -r 选项递归复制所有内容)

    bash 复制代码
    cp -r ./photos/ /media/backup/  # 复制 photos 目录及其中所有内容到 /media/backup

常用选项

  • -r-R:递归复制目录(必须用于复制目录,否则会报错)
  • -i:交互式操作,若目标文件已存在则提示是否覆盖
  • -f:强制复制,若目标文件已存在则直接覆盖,不提示
  • -v:显示复制过程的详细信息(verbose 模式)

使用示例

bash 复制代码
cp text.txt text_copy.txt  # 复制 text.txt 并在当前目录创建副本 text_copy.txt
cp -i data.csv ./backup/   # 复制 data.csv 到 backup 目录,若已存在则提示确认
cp -rv ./docs/ ./backup/   # 递归复制 docs 目录到 backup 并显示复制过程

cp *.txt ./txt_files/      # 复制当前目录所有 .txt 文件到 txt_files 目录

注意事项

  • 复制目录时必须使用 -r 选项,否则会提示错误
  • 若目标路径是文件名,则会创建该名称的副本
  • 若目标路径是目录,则会将源文件/目录复制到该目录下

六、mv

mv - 英文全称为 "move"

核心作用移动文件或目录,也可用于重命名文件或目录(本质是在同一位置移动并改名)


基本用法

  • mv [源文件/目录] [目标路径]:将源文件 / 目录移动到指定目标路径

    bash 复制代码
    mv file.txt ./docs/  # 将 file.txt 移动到当前目录的 docs 子目录
    mv ./images/ /home/user/  # 将 images 目录移动到 /home/user 目录下
  • mv [源1] [源2] ... [目标目录]:将多个文件 / 目录移动到同一目标目录

    bash 复制代码
    mv a.txt b.jpg ./archive/  # 同时移动 a.txt 和 b.jpg 到 archive 目录
  • mv [旧名称] [新名称]:重命名文件或目录(在同一目录下移动并改名)

    bash 复制代码
    mv old.txt new.txt  # 将 old.txt 重命名为 new.txt
    mv docs/ documents/  # 将 docs 目录重命名为 documents

常用选项

  • -i:交互式操作,若目标路径已存在同名文件/目录则提示是否覆盖
  • -f:强制移动,若目标路径存在同名文件/目录则直接覆盖,不提示
  • -v:显示移动过程的详细信息(verbose 模式)

使用示例

bash 复制代码
mv report.pdf ./final/  # 将 report.pdf 移动到 final 目录

mv -i data.csv ./backup/  # 移动 data.csv 到 backup 目录,若存在则提示确认
mv -v old_dir/ new_dir/   # 重命名目录并显示操作信息

mv *.log ./logs/  # 将当前目录所有 .log 文件移动到 logs 目录

注意事项

  • 移动目录时无需加递归选项(与 cp 不同),直接使用即可

  • 跨文件系统移动时,mv 实际会执行 "复制 + 删除" 操作,而非单纯移动指针

    谨慎使用 -f 选项,避免误覆盖重要文件

------- 文件内容处理 -------

一、cat

cat - 英文全称为 "concatenate"

核心作用查看文件内容、连接多个文件内容、创建新文件或向文件追加内容


基本用法

  • cat [文件名]:显示指定文件的全部内容(适合查看内容较少的文件)

    bash 复制代码
    cat note.txt    # 显示 note.txt 的内容
    cat /etc/hosts  # 显示系统 hosts 文件的内容
  • cat [文件1] [文件2] ...:依次显示多个文件的内容,或连接后输出

    bash 复制代码
    cat part1.txt part2.txt  # 先显示 part1.txt 内容,再显示 part2.txt 内容
  • cat > [文件名] :创建新文件并输入内容(按 Ctrl+D 结束输入)

    bash 复制代码
    cat > newfile.txt  # 创建 newfile.txt 并开始输入内容
  • cat [文件1] >> [文件2]:将文件 1 的内容追加到文件 2 的末尾(不覆盖原内容)

    bash 复制代码
    cat log1.txt >> total.log  # 把 log1.txt 内容追加到 total.log 中

常用选项

  • -n:显示内容时为每一行添加行号(包括空行)
  • -b:显示内容时为非空行添加行号(忽略空行)
  • -s:将连续的多个空行压缩为一个空行
  • -v:显示不可见字符(如:制表符、换行符等,除了换行符)

使用示例

bash 复制代码
cat README.md     # 查看 README.md 的内容

cat -n script.sh  # 显示 script.sh 内容并带行号
cat -b data.txt   # 为 data.txt 的非空行添加行号

cat file1.txt file2.txt > combined.txt  # 合并两个文件内容到 combined.txt
cat >> notes.txt  # 向 notes.txt 追加内容(输入后按 Ctrl+D 结束)

注意事项

  • cat 适合查看小型文件,若文件过大(如:日志文件),使用 lessmore 命令更合适(可分页查看)
  • 使用 cat > 文件名 时,若文件已存在,会覆盖原有内容,需谨慎操作

二、tac

tac - 英文可理解为 "cat reversed"

核心作用按行反向输出文件内容,即从最后一行开始打印到第一行,与 cat 命令的顺序相反


基本用法

  • tac [文件名]:反向输出指定文件的内容(从最后一行到第一行)

    bash 复制代码
    tac notes.txt  # 反向输出 notes.txt 的内容
  • tac [文件1] [文件2]:依次反向输出多个文件的内容(每个文件内部反向,文件之间顺序不变)

    bash 复制代码
    tac log1.txt log2.txt  # 先反向输出 log1.txt,再反向输出 log2.txt

常用选项

  • -b:在每行前添加分隔符(默认在每行后添加,与 cat -n 类似但方向相反)
  • -r:将分隔符视为正则表达式处理
  • -s [字符串]:指定行分隔符(默认以换行符 \n 为分隔)

使用示例

bash 复制代码
# 假设文件 test.txt 内容为:
# line 1
# line 2
# line 3

# 基本反向输出
tac test.txt
# 输出:
# line 3
# line 2
# line 1

# 多文件反向输出
tac a.txt b.txt  # 先反向输出 a.txt 所有行,再反向输出 b.txt 所有行

# 结合管道使用(如反向查看日志最新内容)
cat /var/log/syslog | tac | head -5  # 先反向日志内容,再显示前5行(即原日志最后5行)

# 指定分隔符(以 ";" 为分隔反向输出)
echo "a;b;c" | tac -s ";"  # 输出:c;b;a

注意事项

  • taccat 的反向操作,名字也正好是 cat 的倒序拼写
  • 适合查看需要从末尾开始阅读的内容(如:日志文件最新条目、倒序排列的列表等)
  • rev 命令的区别:tac 按行反向(整体顺序颠倒),rev 按字符反向(每行内部字符颠倒)
  • 对于大型文件,tac 效率可能低于 cat,但仍能正常工作

三、more

more

核心作用分页查看文件内容,是 Linux 中基础的分页工具,适用于内容较长、超出一屏的文件,按页逐步显示内容


基本用法

  • more [文件名]:以分页方式显示指定文件的内容,默认从第一页开始

    bash 复制代码
    more /var/log/syslog    # 分页查看系统日志文件
    more long_document.txt  # 分页查看长文档
  • 命令 | more:通过管道符接收其他命令的输出,并分页显示(常用于处理命令输出过长的情况)

    bash 复制代码
    ls -l /usr/bin | more 	   # 分页显示 /usr/bin 目录的详细列表
    cat large_file.txt | more  # 分页显示 cat 命令输出的大文件内容

常用选项

  • +n:从文件的第n行开始显示(n为数字)

    bash 复制代码
    more +50 data.txt  # 从 data.txt 的第 50 行开始查看
  • -n:指定每页显示n行内容(默认根据终端窗口大小自动调整)

    bash 复制代码
    more -20 log.txt  # 每页显示 20 行查看 log.txt

交互操作:(在查看模式中使用)

  • 空格:向下翻一页
  • Enter:向下翻一行
  • h:显示帮助信息(列出所有操作键)
  • q:退出 more 查看模式(直接返回命令行)
  • / 关键词:向下搜索指定关键词(部分版本支持,找到后按 n 查看下一个结果)

使用示例

bash 复制代码
more setup guide.txt  # 分页查看名为 "setup guide.txt" 的文件(文件名含空格需加引号)
ps -ef | more  # 分页查看系统进程列表

more +100 -30 report.txt  # 从 report.txt 的第 100 行开始,每页显示 30 行

注意事项

  • more 是早期的分页工具,功能相对简单,仅支持向前滚动(无法向上翻页),适合简单的分页需求
  • 对于需要频繁上下滚动或复杂搜索的场景,推荐使用功能更强大的 less 命令

四、less

less

核心作用分页查看文件内容,功能比 more 更强大,支持前后滚动、搜索等高级操作,适合查看大型文件


基本用法

  • less [文件名]:以分页交互方式显示指定文件内容

    bash 复制代码
    less /var/log/messages   # 分页查看系统消息日志
    less large_document.txt  # 分页查看大型文档
  • 命令 | less:通过管道接收其他命令输出并分页显示

    bash 复制代码
    ps aux | less  # 分页查看进程列表
    grep "error" *.log | less  # 分页查看包含 "error" 的日志内容

交互操作:(常用)

  • 空格:向下翻一页
  • b:向上翻一页
  • Enter:向下翻一行
  • k:向上翻一行
  • /关键词:向下搜索关键词(按 n 跳至下一个结果,N 跳至上一个)
  • ?关键词:向上搜索关键词
  • G:跳至文件末尾
  • g:跳至文件开头
  • q:退出 less 查看模式
  • v:在默认编辑器中打开当前文件(需配置编辑器)

使用示例

bash 复制代码
less -N bigfile.txt   # 显示行号并分页查看 bigfile.txt

less +/ERROR app.log  # 打开 app.log 并直接定位到第一个 "ERROR" 位置
history | less  # 分页查看命令历史记录

注意事项

  • 特点 :less 不会一次性加载整个文件,对大型文件的处理效率更高,且支持双向滚动,是查看长文件的首选工具

五、head

head

核心作用显示文件的开头部分内容,默认显示前 10 行,适合快速查看文件的起始信息


基本用法

  • head [文件名]:显示指定文件的前 10 行内容

    bash 复制代码
    head log.txt  # 显示 log.txt 的前10行
    head /etc/passwd  # 显示系统用户文件的前10行
  • head [文件1] [文件2] ...:同时显示多个文件的开头部分,每个文件内容前会标注文件名

    bash 复制代码
    head file1.txt file2.txt  # 分别显示 file1.txt 和 file2.txt 的前10行
  • 命令 | head:通过管道接收其他命令的输出,显示前 10 行结果

    bash 复制代码
    ls -l /usr/bin | head  # 显示 /usr/bin 目录详细列表的前10行

常用选项

  • -n [数字]:指定显示文件的前n行(n为正整数)

    bash 复制代码
    head -n 5 data.txt    # 显示 data.txt 的前5行
    head -n 20 report.md  # 显示 report.md 的前20行
  • -c [数字]:按字节数显示文件开头部分(n为字节数,可加k、m等单位)

    bash 复制代码
    head -c 100 config.ini    # 显示 config.ini 开头的100个字节
    head -c 2k largefile.dat  # 显示 largefile.dat 开头的2KB内容

使用示例

bash 复制代码
head -n 1 README.txt  # 只显示 README.txt 的第一行(通常是文件说明)
head -n 0 access.log  # 显示0行(实际作用是检查文件是否存在且可读取)

head -c 1024 *.txt  # 显示当前目录所有 .txt 文件的前1024字节内容

ps aux | head -n 6  # 查看系统进程列表的前6行(含表头)

注意事项

  • 当显示多个文件时,head 会在每个文件内容前添加 ==> 文件名 <== 作为分隔标识
  • 若文件行数少于指定的 n,则显示整个文件内容,不会报错
  • tail 命令(显示文件末尾)配合使用,可灵活查看文件的不同部分

六、tail

tail

核心作用显示文件的末尾部分内容,默认显示最后 10 行,常用于查看日志文件的最新记录或文件的结尾信息


基本用法

  • tail [文件名]:显示指定文件的最后 10 行内容

    bash 复制代码
    tail log.txt          # 显示 log.txt 的最后10行
    tail /var/log/syslog  # 显示系统日志的最后10行
  • tail [文件1] [文件2] ...:同时显示多个文件的末尾部分,每个文件内容前会标注文件名

    bash 复制代码
    tail access.log error.log  # 分别显示两个日志文件的最后10行
  • 命令 | tail:通过管道接收其他命令的输出,显示最后 10 行结果

    bash 复制代码
    ls -l /usr/bin | tail  # 显示 /usr/bin 目录详细列表的最后10行

常用选项

  • -n [数字]:指定显示文件的最后n行(n为正整数)

  • -f:实时跟踪文件内容的更新(常用于监控日志文件,按Ctrl+C退出)

  • -F:与-f类似,但当文件被删除并重新创建后仍能继续跟踪(比-f更稳定)

  • -c [数字]:按字节数显示文件末尾部分(n为字节数,可加k、m等单位)


使用示例

bash 复制代码
tail -n 1 README.txt      # 只显示 README.txt 的最后一行
tail -n +100 data.txt  # 从第100行开始显示 data.txt 到末尾的内容(+表示从第n行起)

tail -f -n 50 server.log  # 实时跟踪 server.log 的最后50行更新

ps aux | tail -n +2    # 查看系统进程列表,排除表头只显示进程信息

注意事项

  • -f 选项非常适合监控实时生成的日志文件(如应用程序运行日志),能即时看到新写入的内容
  • 当显示多个文件时,tail 会在每个文件内容前添加 ==> 文件名 <== 作为分隔标识
  • head 命令配合,可灵活提取文件中间部分的内容(如:head -n 20 file.txt | tail -n 10 提取第 11-20 行)

小技巧: 如何显示文件temp.txt中[180,200] 行的内容?

七、grep

grep - 英文全称为 "Global Regular Expression Print"

核心作用在文件或命令输出中搜索符合指定模式(字符串或正则表达式)的内容,并打印匹配的行,是文本搜索的核心工具


基本用法

  • grep [模式] [文件名]:在指定文件中搜索匹配模式的行

    bash 复制代码
    grep "error" app.log  # 在 app.log 中搜索包含 "error" 的行
  • 命令 | grep [模式]:通过管道接收其他命令的输出,搜索匹配的行

    bash 复制代码
    ls -l | grep "txt"  # 在 ls -l 的输出中搜索包含 "txt" 的行

常用选项

  • -i:忽略大小写(不区分大小写匹配)
  • -v:反向匹配,只显示不包含模式的行
  • -n:显示匹配行的行号
  • -r-R:递归搜索目录下的所有文件
  • -w:匹配完整单词(避免部分匹配,如搜索 "cat" 不会匹配 "category")
  • -E:启用扩展正则表达式(支持 |() 等元字符,等价于 egrep
  • --color=auto:为匹配到的内容添加颜色高亮(多数系统默认开启)

使用示例

bash 复制代码
grep -i "warning" system.log  # 在 system.log 中搜索包含 "warning" 的行,忽略大小写
grep -nv "debug" app.log      # 显示 app.log 中不包含 "debug" 的行,并显示行号
grep -r "config" /etc/        # 递归搜索 /etc 目录下所有文件中包含 "config" 的行
grep -w "user" /etc/passwd    # 在 passwd 文件中搜索完整单词 "user"
ps aux | grep -E "nginx|apache"  # 在进程列表中搜索包含 nginx 或 apache 的进程
grep "^error" log.txt         # 搜索以 "error" 开头的行(^ 表示行首,正则表达式用法)
grep "end$" report.txt        # 搜索以 "end" 结尾的行($ 表示行尾,正则表达式用法)

注意事项

  • 模式中包含空格或特殊字符(如:$*)时,需用单引号或双引号包裹
  • 搜索目录时必须使用 -r 选项,否则 grep 会将目录视为普通文件并报错
  • 正则表达式中的元字符(如:.*+)需转义(加 \)才能当作普通字符匹配,或使用 -F 选项禁用正则(等价于 fgrep
  • 对于大型文件或目录,可结合 -m [数字] 选项限制匹配的最大行数,提高效率
相关推荐
跨境数据猎手1 天前
跨境独立站系统技术拆解(附带源码)
服务器·前端·php
AOwhisky1 天前
Kubernetes 学习笔记:集群管理、命名空间与 Pod 基础
linux·运维·笔记·学习·云原生·kubernetes
小龙在慢慢变强..1 天前
目录结构(FHS 标准)
linux·运维·服务器
2035去旅行1 天前
嵌入式开发,如何选择C标准库
linux·arm开发
刘延林.1 天前
win11系统下通过 WSL2 安装Ubuntu 24.04 使用RTX 5080 GPU
linux·运维·ubuntu
星恒讯工业路由器1 天前
星恒讯工业生产自动化解决方案
运维·物联网·自动化·智能路由器·信息与通信
a8a3021 天前
Laravel9.x新特性全解析
运维·spring boot·nginx
beyond阿亮1 天前
IEC104 Client Simulator - IEC104 主站/客户端模拟器 仿真器免费使用教程
运维·服务器·网络
(Charon)1 天前
【C++/Qt】Qt 封装 TCP 客户端底层 Network 类:连接、收发、自动测试与错误处理
服务器·网络·qt·tcp/ip