【Linux】常见指令用法

目录

一、基本指令

[1. ls 指令](#1. ls 指令)

[2. pwd 指令](#2. pwd 指令)

[3. cd 指令](#3. cd 指令)

[4. touch 指令](#4. touch 指令)

[5. mkdir 指令](#5. mkdir 指令)

[6. rm 指令](#6. rm 指令)

[7. cp 指令](#7. cp 指令)

基本用法:

可跟选项:

常用选项组合:

严禁执行的操作:

注意事项:

[7.1 scp 指令](#7.1 scp 指令)

基本用法:

可跟选项:

常用选项组合:

严禁执行的操作:

注意事项:

[8. mv 指令](#8. mv 指令)

基本用法:

可跟选项:

常用选项组合:

严禁执行的操作:

注意事项:

[9. echo 指令](#9. echo 指令)

基本用法:

可跟选项:

[常用转义字符(需配合 - e 选项):](#常用转义字符(需配合 - e 选项):)

常用选项组合:

注意事项:

[10. cat 指令](#10. cat 指令)

基本用法:

可跟选项:

常用选项组合:

严禁执行的操作:

注意事项:

[11. 输出重定向、输入重定向、追加重定向](#11. 输出重定向、输入重定向、追加重定向)

基本用法:

[1. 标准输出重定向(>,覆盖式)](#1. 标准输出重定向(>,覆盖式))

[2. 标准输出追加重定向(>>,追加式)](#2. 标准输出追加重定向(>>,追加式))

[3. 标准错误输出重定向](#3. 标准错误输出重定向)

[4. 标准输出 + 错误输出合并重定向](#4. 标准输出 + 错误输出合并重定向)

[5. 标准输入重定向(<)](#5. 标准输入重定向(<))

可跟特性说明:

常用组合场景:

严禁执行的操作:

注意事项:

[12. more 指令](#12. more 指令)

基本用法:

可跟选项:

常用交互操作(查看文件时使用):

常用选项组合:

注意事项:

[13. less 指令](#13. less 指令)

基本用法:

可跟选项:

常用交互操作(查看文件时使用):

常用选项组合:

注意事项:

[14. head 指令](#14. head 指令)

基本用法:

可跟选项:

常用选项组合:

注意事项:

[15. tail 指令](#15. tail 指令)

基本用法:

可跟选项:

常用选项组合:

严禁执行的操作:

注意事项:

[16. man 指令](#16. man 指令)

[17. find 指令](#17. find 指令)

基本用法:

可跟选项:

常用选项组合:

严禁执行的操作:

注意事项:

[18. which 指令](#18. which 指令)

基本用法:

可跟选项:

常用选项组合:

注意事项:

[19. alias 指令](#19. alias 指令)

基本用法:

可跟选项:

常用选项组合:

严禁执行的操作:

注意事项:

[20. grep 指令](#20. grep 指令)

基本用法:

可跟选项:

常用选项组合:

严禁执行的操作:

注意事项:

[21. 管道 |](#21. 管道 |)

基本用法:

可跟特性说明:

常用组合场景:

严禁执行的操作:

注意事项:

[22. zip /unzip 指令](#22. zip /unzip 指令)

[zip 指令(压缩)](#zip 指令(压缩))

基本用法:

可跟选项:

常用选项组合:

严禁执行的操作:

[unzip 指令(解压)](#unzip 指令(解压))

基本用法:

可跟选项:

常用选项组合:

严禁执行的操作:

[zip/unzip 通用注意事项:](#zip/unzip 通用注意事项:)

[23. tar 指令](#23. tar 指令)

基本用法:

可跟选项:

常用选项组合:

严禁执行的操作:

注意事项:

[24. bc 指令](#24. bc 指令)

基本用法:

可跟选项:

核心内置功能与常用语法:

常用选项组合:

注意事项:

二、查询软硬件相关指令

[1. uname 指令(含 uname -r 核心用法)](#1. uname 指令(含 uname -r 核心用法))

基本用法:

可跟选项:

常用选项组合:

注意事项:

[2. free 指令](#2. free 指令)

基本用法:

可跟选项:

输出字段说明:

常用选项组合:

注意事项:

[3. df 指令](#3. df 指令)

基本用法:

可跟选项:

输出字段说明:

常用选项组合:

注意事项:

[4. lscpu 指令](#4. lscpu 指令)

基本用法:

核心输出字段说明(高频关注项):

可跟选项:

常用选项组合:

注意事项:

三、时间相关指令

[1. date 指令](#1. date 指令)

基本用法:

常用格式符说明:

可跟选项:

常用选项组合:

严禁执行的操作:

注意事项:

[2. cal 指令](#2. cal 指令)

基本用法:

可跟选项:

常用选项组合:

注意事项:

四、常用热键

一、光标移动类热键

二、文本编辑类热键

三、命令控制类热键

四、历史命令类热键

注意事项:


一、基本指令

1. ls 指令

语法:ls [选项] [文件或者目录名]
功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。

基本用法:

  • 直接输入 ls,会列出当前目录下的可见文件和子目录(不包含隐藏文件),按字母顺序排列,以空格分隔。
  • 指定目录:在 ls 后加上目录路径,可列出该目录下的内容。

可跟选项:

-a 列出目录下的所有文件,包括以 . 开头的隐含文件。

-l 列出文件的详细信息。常将ls -l 简写为ll

-d将目录象文件一样显示,而不是显示其下的文件。 如:ls --d 指定目录

-i 输出文件的 i 节点的索引信息。 如 ls --ai 指定文件

-k以 k 字节的形式表示文件的大小。ls --alk 指定文件

-n用数字的 UID,GID 代替名称。 (介绍 UID, GID)

-F 在每个文件名后附上一个字符以说明该文件的类型,"*"表示可执行的普通文件;"/"表示目录;"@"表示符号链接;"|"表示FIFOs;"="表示套接字(sockets)。(目录类型识别)

-r 对目录反向排序。

-t以时间排序。

-s 在l文件名后输出该文件的大小。(大小排序,如何找到目录下最大的文件)

-R 列出所有子目录下的文件。(递归)

-1 一行只输出一个文件。

注:

像 ls 这种可以附带选项的指令,后面可以同时跟多个选项,如:

ls -la

ls -al

ls -a -l

这三种写法是等价的,都是可以的。


2. pwd 指令

语法:pwd
**功能:**当你在终端中操作时,始终处于某个目录下(称为 "当前工作目录"),pwd 命令会直接输出这个目录的 完整绝对路径,帮你明确自己的操作位置。

可跟选项:

-P(物理路径,默认不常用)显示 实际物理路径,会自动解析路径中的 "符号链接"(软链接),输出其指向的真实目录路径。

假设创建了一个软链接 link_doc 指向 documents,进入 link_doc 后


-L(逻辑路径,默认行为)显示 逻辑路径,即包含符号链接名称的路径(不解析软链接),这是 pwd 的默认行为(不写选项时等同于 -L)。

假设创建了一个软链接 link_doc 指向 documents,进入 link_doc 后


3. cd 指令

语法:cd [目录路径]

其中 [目录路径] 是需要切换到的目标目录,可以是 绝对路径相对路径(若省略路径,默认切换到用户的家目录)。
功能::改变工作目录,将当前工作目录改变到指定的目录下。

基本用法:

1. 切换到指定目录(绝对路径)

绝对路径 是从系统根目录 / 开始的完整路径(比如 /home/user/documents),无论当前在哪个目录,使用绝对路径都能准确切换。


2. 切换到指定目录(相对路径)

相对路径 是相对于当前目录的路径(比如 ./documents../images),依赖于当前所在位置。

  • . 表示 当前目录(可省略);
  • .. 表示 父目录(当前目录的上一级目录)。

假设当前在 /home/your_username 目录:

常见用法:

cd(无参数): 直接切换到 当前用户的家目录 (家目录路径通常为 /home/用户名/Users/用户名

cd .. : 返回上级目录


cd ~:进入用户家目


cd -:返回最近访问目录


4. touch 指令

语法:touch [选项] [文件名]
功能:touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的文件。

基本用法:

1. 创建空文件(最常用)

在当前目录创建一个指定名称的空文件,若文件已存在则仅更新时间戳(不影响内容)。


2. 一次性创建多个空文件

语法:touch 文件1 文件2 ... 文件N

通过空格分隔多个文件名,可批量创建空文件。


3. 修改文件的时间戳(进阶功能)

Linux 中每个文件有三个关键时间戳(可通过 ls -l 或 stat 文件名 查看)

  • 访问时间(atime):最后一次读取文件的时间;
  • 修改时间(mtime):最后一次修改文件内容的时间(ls -l 默认显示此时间);
  • 状态改变时间(ctime):最后一次修改文件元数据(如权限、名称)的时间(自动更新,无法直接通过 touch 修改)。

可跟选项:

  • -a 仅更新文件的 访问时间(atime),不改变修改时间(mtime)。
  • -m 仅更新文件的 修改时间(mtime),不改变访问时间(atime)。
  • -d "时间"自定义时间戳(同时更新 atime 和 mtime),支持多种时间格式(如 2023-10-01、1 hour ago)。
  • -t 时间以 YYYYMMDDhhmm.ss 格式指定时间(精确到秒),例如 202310011230.45 表示 2023 年 10 月 1 日 12:30:45。
  • -r 参考文件让目标文件的时间戳与 "参考文件" 保持一致(复制参考文件的 atime 和 mtime)。

注意事项:

  • 创建文件时,若指定路径中的目录不存在(如 touch /a/b/c.txt 中 /a/b 不存在),会报错,需先通过 mkdir -p 指令创建目录。
  • 对已存在的文件使用 touch 不会删除或修改其内容,仅更新时间戳。

5. mkdir 指令

语法:mkdir [选项] [目录名]
功能:在指定路径下创建新的目录,支持创建单个目录、多个目录,或通过选项创建嵌套的多级目录。

基本用法:

1. 创建单个目录

在当前目录下创建一个指定名称的新目录。


2. 一次性创建多个目录

语法:mkdir 目录1 目录2 ... 目录N,通过空格分隔多个目录名,可批量创建多个同级目录。

可跟选项:

1. -p(创建嵌套目录,自动补全父目录)(最常用)

当需要创建 多级嵌套目录 时,若中间的父目录不存在,-p 会自动创建所有缺失的父目录,避免手动逐级创建。

2. -m(创建目录时指定权限)

默认情况下,新目录的权限由系统的 umask 配置决定(通常是 755775)。-m 选项可直接指定目录的权限(用数字权限表示,如 755700 等)。

3. -v(显示创建过程,verbose 模式)

创建目录时输出详细信息,显示每个目录的创建过程,适合确认是否按预期创建。

注意事项:

  • 若目标目录 已存在 ,直接执行 mkdir 会报错(如 mkdir: 无法创建目录 'test': 文件已存在),此时可忽略或删除已有目录后重试。
  • 创建目录时,需确保对 父目录有写入权限 ,否则会报错,例如,普通用户无法在 /root 目录下创建子目录(需管理员权限)。
  • 目录名若包含 空格或特殊字符 (如空格、&*),需用引号包裹或用反斜杠 \ 转义:

6. rm 指令

语法:rm [选项] [文件名]
**功能:**核心作用是删除指定的文件或目录,默认情况下:

  • 可直接删除 文件
  • 需配合选项才能删除 目录(防止误删);
  • 删除后的数据通常不会进入 "回收站",直接从文件系统中移除(难以恢复,需特别小心)。

基本用法:

1. 删除文件

语法:rm [选项] 文件名

直接删除指定文件,支持同时删除多个文件(空格分隔)。


2. 删除目录(必须用 -r 或 -R 选项)

rm 默认无法删除目录,需使用 -r(递归)选项,强制删除目录及其所有内容(包括子目录和文件)。

可跟选项:

选项 功能描述 风险提示
-f 强制删除:忽略不存在的文件,不提示确认(即使文件是只读的也直接删除)。 减少交互,但可能误删重要文件(无提醒)。
-i 交互模式 :删除前逐一提示确认(输入 y 确认删除,n 取消)。 增加安全性,适合删除重要文件时使用。
-r/-R 递归删除:删除目录及其所有子目录和文件(必须用于删除目录)。 若目录包含大量文件,删除后难以恢复;配合 -f 风险极高。
-v 详细模式:显示删除过程(每个被删除的文件 / 目录都会被列出)。 便于确认删除范围,适合批量操作时检查。

常用选项组合:

rm -i file.txt :删除 file.txt 前提示确认(安全操作)。
rm -f *.tmp :强制删除当前目录所有 .tmp 后缀的文件(不提示,适合清理临时文件)。
rm -rv old_data/ :递归删除 old_data 目录,同时显示删除的每个文件 / 子目录
rm -rf 目录名 :最危险的组合,递归强制删除目录及其所有内容,无任何提示,一旦误操作**(如删除系统目录)可能导致系统崩溃。**

严禁执行的操作:

现代 Linux 系统默认启用 --preserve-root 保护机制,会阻止直接删除根目录,但仍需警惕类似的危险路径(如 /home/etc 等)。

注意事项:

  1. 删除即永久rm 删除的文件通常不会进入 "回收站",除非系统有特殊配置(如部分桌面环境对图形界面操作的文件有保护),终端中用 rm 删除后几乎无法恢复,操作前务必确认路径。
  2. 权限问题 :删除文件 / 目录时,需对其父目录有 写入权限 ,否则会报错 rm: 无法删除 'xxx': 权限不够(可用 sudo 提升权限,但需更谨慎)。
  3. 通配符风险 :使用通配符(如 *?)时需格外小心,例如 rm *.txt 会删除所有 .txt 文件,若误写为 rm *txt 可能删除非预期文件。
  4. 替代方案 :重要文件建议先移动到临时目录(如 mkdir ~/trash && mv file.txt ~/trash),确认无需后再删除,降低误删风险。

7. cp 指令

语法:cp [选项] 源文件 / 目录 目标文件 / 目录
功能:核心作用是复制指定的文件或目录,默认情况下:

  • 可直接复制单个 / 多个文件;
  • 需配合选项才能复制目录(防止递归复制遗漏子目录及文件);
  • 复制后源文件 / 目录保持不变,目标路径生成完全一致的副本,默认同名文件会提示是否覆盖。
基本用法:
  • 复制文件语法:cp [选项] 源文件 目标路径 / 目标文件名直接复制指定文件到目标路径,支持同时复制多个文件(空格分隔),目标路径需已存在。

    cp note.txt /home/user/doc/ # 复制当前目录下的note.txt到doc目录
    cp a.txt b.txt /tmp/ # 同时复制当前目录的a.txt和b.txt到/tmp目录
    cp note.txt note_bak.txt # 在当前目录复制文件,并重命名为note_bak.txt

  • 复制目录(必须用 -r 或 -R 选项)cp 默认无法复制目录,需使用 -r(递归)选项,复制目录及其所有内容(包括子目录和所有文件)。

    cp -r docs /home/user/backup/ # 复制docs目录及其内部所有文件和子目录到backup目录
    cp -r dir1 dir2 /tmp/ # 同时复制dir1和dir2两个目录及其内容到/tmp目录

可跟选项:
选项 功能描述 风险提示
-f 强制复制:忽略不存在的文件,强制覆盖目标同名文件,无提示确认 减少交互,但可能误覆盖重要文件,无二次确认,需谨慎使用
-i 交互模式:覆盖前逐一提示确认(输入 y 确认覆盖,n 取消) 增加安全性,适合复制重要文件、避免误覆盖时使用
-r/-R 递归复制:复制目录及其所有子目录和文件(必须用于复制目录) 若目录包含大量文件,会占用双倍磁盘空间;配合 - f 风险极高
-p 保留属性:复制时保留文件的原权限、所有者、时间戳等属性 适合备份场景,避免复制后文件权限、属性发生变更
-a 归档复制:等同于 - dpR,递归复制的同时,保留所有文件属性、链接属性 系统备份、全量复制的首选选项,完整保留文件所有特性
-v 详细模式:显示复制过程(每个被复制的文件 / 目录都会被列出) 便于确认复制范围,适合批量操作时检查、调试
-n 不覆盖:复制时跳过已存在的同名文件,不执行覆盖 安全选项,增量复制、避免误覆盖已有文件时使用
-u 更新复制:仅当源文件比目标文件新,或目标文件不存在时才执行复制 适合增量备份、同步更新文件,避免重复复制无变化的内容
常用选项组合:
复制代码
cp -i note.txt /tmp/  # 复制note.txt到/tmp目录,覆盖前提示确认(安全操作)
cp -rf docs/ /home/backup/  # 强制递归复制docs目录到backup目录,无提示覆盖同名文件
cp -av project/ /opt/backup/  # 归档复制project目录,保留所有属性,同时显示复制过程
cp -u *.log /home/log_bak/  # 仅复制更新过的.log文件到备份目录,无变化的文件跳过
cp -pn *.conf /etc/  # 复制.conf配置文件,保留原文件属性,不覆盖已存在的文件
严禁执行的操作:
复制代码
# 严禁无校验的强制覆盖系统核心目录
cp -rf /tmp/malicious/* /etc/  # 强制覆盖系统配置目录,会导致系统配置异常、服务崩溃甚至无法启动
cp -rf test/* /  # 直接复制文件到根目录,会覆盖系统核心文件,导致系统瘫痪
注意事项:
  1. 复制即副本:cp 复制后会生成独立的文件副本,修改源文件不会影响目标副本,反之亦然;硬链接复制除外。
  2. 权限问题:复制文件 / 目录时,需对源文件有读取权限,对目标目录有写入权限,权限不够可用 sudo 提升权限,但需更谨慎。
  3. 同名文件处理:不同 Linux 发行版默认行为不同,部分系统默认 cp 会直接覆盖同名文件,建议重要文件复制固定加 - i 选项,避免误覆盖。
  4. 目录复制规范:复制目录时,目标路径末尾是否带 / 会影响结果:cp -r docs /backup 会把 docs 目录复制到 backup 下;cp -r docs/ /backup 会把 docs 内的所有文件复制到 backup 下,操作前务必确认路径。
  5. 大文件复制:复制超大文件或海量小文件时,建议加 - v 选项查看进度,或使用 rsync 替代,避免终端无响应误以为卡死。

7.1 scp 指令

语法:scp [选项] 源文件 / 目录 目标文件 / 目录
功能:核心作用是基于 SSH 协议,在本地主机与远程主机之间安全加密地传输文件或目录,默认情况下:

  • 传输过程全程加密,数据安全性高,替代传统不安全的 rcp 命令;
  • 支持三种传输模式:本地文件 / 目录传到远程、远程文件 / 目录传到本地、远程文件 / 目录传到另一远程;
  • 需远程主机开启 SSH 服务(默认端口 22),且用户对远程路径有读写权限;
  • 传输目录需配合递归选项,否则仅传输单个文件。
基本用法:
  • 本地文件传到远程主机语法:scp [选项] 本地文件 远程用户名 @远程 IP: 远程目标路径将本地文件上传到远程主机的指定路径,远程路径需已存在。

    scp note.txt root@192.168.1.100:/home/user/doc/ # 将本地note.txt上传到192.168.1.100的doc目录
    scp /home/user/a.log user@10.0.0.5:/tmp/ # 将本地a.log上传到10.0.0.5的/tmp目录

  • 远程文件传到本地主机语法:scp [选项] 远程用户名 @远程 IP: 远程源文件 本地目标路径将远程主机的文件下载到本地的指定路径,本地路径需已存在。

    scp root@192.168.1.100:/var/log/nginx/access.log ./ # 将远程access.log下载到本地当前目录
    scp user@10.0.0.5:/home/user/b.txt /home/local/doc/ # 将远程b.txt下载到本地doc目录

  • 传输目录(必须用 -r 选项)scp 默认无法传输目录,需使用 -r(递归)选项,传输目录及其所有子目录、文件。

    本地目录传到远程

    scp -r ./project root@192.168.1.100:/opt/ # 将本地project目录上传到远程/opt目录

    远程目录传到本地

    scp -r root@192.168.1.100:/home/user/data ./backup/ # 将远程data目录下载到本地backup目录

  • 远程主机传到另一远程主机(需本地主机能访问两台远程)

    scp user1@10.0.0.5:/home/file.txt user2@10.0.0.6:/tmp/ # 将10.0.0.5的文件传到10.0.0.6的/tmp目录

可跟选项:
选项 功能描述 风险提示
-r 递归传输:传输目录及其所有子目录和文件(必须用于传输目录) 若目录包含大量文件,会占用大量带宽和时间;配合覆盖操作风险高
-P 端口号 指定远程 SSH 端口:远程 SSH 非默认 22 端口时,需用此选项指定 注意是大写 P,小写 p 是保留文件属性,写错会导致命令执行失败
-p 保留文件属性:传输时保留文件的原修改时间、访问时间、权限等属性 适合备份场景,避免传输后文件属性变更
-q 静默模式:传输时不显示进度条、传输速度等信息 适合脚本中批量传输,减少冗余输出
-v 详细模式:显示传输的完整调试信息,包括 SSH 连接、认证、传输细节 适合排查传输失败、连接异常的问题
-C 压缩传输:传输过程中对数据进行压缩,减少带宽占用 适合传输大文件、带宽有限的场景,但会增加本地和远程主机的 CPU 占用
-l 限速值 限制传输速度:单位为 Kbit/s,限制传输的最大带宽 避免传输占用全部带宽,影响其他业务,适合生产环境大文件传输
常用选项组合:
复制代码
# 1. 指定非默认 SSH 端口,传输目录,保留文件属性
scp -rP 2222 -p ./project root@192.168.1.100:/opt/

# 2. 压缩传输大文件,限制传输速度为 10000 Kbit/s(约 10MB/s),显示详细信息
scp -Cv -l 10000 /home/user/large_file.iso root@192.168.1.100:/tmp/

# 3. 静默批量传输日志文件,不显示进度
scp -q /home/user/logs/*.log root@192.168.1.100:/home/log_archive/

# 4. 下载远程文件到本地,保留属性,显示传输进度(默认显示进度,无需额外选项)
scp -p root@192.168.1.100:/var/log/nginx/error.log ./
严禁执行的操作:
复制代码
# 严禁无校验的覆盖远程系统核心目录/文件
scp -r ./malicious/* root@192.168.1.100:/etc/  # 覆盖远程系统配置目录,导致远程服务崩溃、无法登录
scp test root@192.168.1.100:/bin/ls  # 覆盖远程系统核心命令,导致远程主机命令异常

# 严禁在生产环境无限制传输超大文件,不做限速,导致带宽被占满,业务中断
注意事项:
  1. SSH 权限要求:传输需远程主机开启 SSH 服务,且用户对远程目标路径有写入权限(上传)、对远程源文件有读取权限(下载),权限不足可通过密钥认证或 sudo 配合(需配置远程 sudo 免密)。
  2. 端口选项大小写:指定 SSH 端口必须用大写 -P,小写 -p 是保留文件属性,极易写错,操作前务必确认选项。
  3. 路径规范:远程路径若包含空格、特殊字符,需用双引号包裹,避免被 Shell 拆分;建议使用绝对路径,避免相对路径导致文件传输位置错误。
  4. 大文件传输建议:传输 GB 级超大文件时,建议先压缩(tar/zip)再传输,配合 -C 压缩选项和 -l 限速选项,避免占用全部带宽;也可使用 rsync 替代,支持断点续传,传输更稳定。
  5. 密钥认证优化:频繁传输建议配置 SSH 密钥认证,避免每次输入密码,提升传输效率和安全性。

8. mv 指令

语法:mv [选项] 源文件 / 目录 目标文件 / 目录
功能:核心作用是移动或重命名指定的文件或目录,默认情况下:

  • 可直接移动 / 重命名文件、目录,无需额外递归选项;
  • 同一分区内移动为 "重命名",文件数据不发生物理移动,速度极快;跨分区移动为 "复制 + 删除",完成后源文件会被删除;
  • 移动后源文件 / 目录会被移除到目标路径,默认同名文件会提示是否覆盖。
基本用法:
  • 重命名文件 / 目录语法:mv [选项] 原名称 新名称在同一路径下,对文件或目录执行重命名操作,是 Linux 重命名的核心用法。

    mv note.txt note_new.txt # 将当前目录的note.txt重命名为note_new.txt
    mv old_dir new_dir # 将当前目录的old_dir目录重命名为new_dir

  • 移动文件 / 目录语法:mv [选项] 源文件 / 目录 目标路径将指定的文件 / 目录移动到目标路径,支持同时移动多个文件 / 目录(空格分隔),目标路径需已存在。

    mv note.txt /home/user/doc/ # 将当前目录的note.txt移动到doc目录
    mv a.txt b.txt /tmp/ # 同时移动当前目录的a.txt和b.txt到/tmp目录
    mv docs dir1 /home/backup/ # 同时移动docs和dir1两个目录到backup目录

可跟选项:
选项 功能描述 风险提示
-f 强制移动:忽略不存在的文件,强制覆盖目标同名文件 / 目录,无提示确认 减少交互,但可能误覆盖重要文件,无二次确认,需谨慎使用
-i 交互模式:覆盖前逐一提示确认(输入 y 确认覆盖,n 取消) 增加安全性,适合移动重要文件、避免误覆盖时使用
-v 详细模式:显示移动过程(每个被移动的文件 / 目录都会被列出) 便于确认移动范围,适合批量操作时检查、调试
-n 不覆盖:移动时跳过已存在的同名文件 / 目录,不执行覆盖 安全选项,避免误覆盖已有文件,增量移动时使用
-u 更新移动:仅当源文件比目标文件新,或目标文件不存在时才执行移动覆盖 适合增量更新文件,避免覆盖更新的目标文件
-b 备份覆盖:覆盖目标文件前,先对目标同名文件创建备份(备份文件末尾加~) 兼顾效率与安全,覆盖后可通过备份文件恢复原内容
常用选项组合:
复制代码
mv -i note.txt /tmp/  # 移动note.txt到/tmp目录,覆盖前提示确认(安全操作)
mv -f *.log /home/log_archive/  # 强制移动所有.log文件到归档目录,无提示覆盖同名文件
mv -v docs/ /opt/  # 移动docs目录到/opt目录,同时显示移动过程
mv -b *.conf /etc/  # 移动配置文件到/etc目录,覆盖前自动备份原文件
mv -n *.jpg /home/picture/  # 移动jpg图片到图片目录,已存在的文件不覆盖
严禁执行的操作:
复制代码
# 严禁无校验的强制移动系统核心目录/文件
mv -f /tmp/test/* /bin/  # 强制移动文件到系统二进制目录,会覆盖系统命令,导致系统无法正常执行指令
mv /etc /home/  # 移动系统核心配置目录,会导致所有服务、系统配置失效,系统崩溃
注意事项:
  1. 移动的不可逆性:mv 跨分区移动完成后,源文件会被直接删除,不会进入回收站,误操作后难以恢复,重要文件建议先复制再删除源文件。
  2. 目录移动特性:mv 移动目录无需 - r 选项,直接即可移动整个目录及其所有内容,这是和 cp、rm 的核心区别。
  3. 权限问题:移动文件 / 目录时,需对源文件 / 目录的父目录、目标目录有写入权限,权限不够可用 sudo 提升权限,但需极度谨慎。
  4. 跨分区移动注意:跨磁盘分区移动大文件 / 大量文件时,会先复制再删除源文件,耗时较长,建议加 - v 选项查看进度,避免中途中断导致文件损坏。
  5. 重命名限制:同一路径下,不能将文件 / 目录重命名为已存在的同名文件,除非加 - f/-i 等覆盖选项,否则会报错。

9. echo 指令

语法:echo [选项] [输出内容]
功能:核心作用是在终端输出指定的字符串、变量值或表达式结果,默认情况下:

  • 输出内容后会自动换行;
  • 支持解析转义字符、输出 Shell 变量值,是 Shell 脚本中最常用的内容输出、日志打印命令;
  • 可配合重定向,将输出内容写入到文件中。
基本用法:
  • 输出普通字符串语法:echo [选项] 字符串直接在终端输出指定的字符串,带空格的字符串建议用双引号包裹。

    echo "Hello Linux" # 在终端输出 Hello Linux
    echo 123456 # 直接输出数字 123456

  • 输出变量值语法:echo $ 变量名输出 Shell 中已定义的变量、系统环境变量的值,是脚本中查看变量的核心用法。

    name="test"
    echo name # 输出变量name的值 test echo PATH # 输出系统环境变量PATH的内容
    echo $USER # 输出当前登录的用户名

  • 配合重定向写入文件

    echo "test content" > note.txt # 将字符串写入note.txt,覆盖文件原有内容
    echo "new line" >> note.txt # 将字符串追加到note.txt末尾,不覆盖原有内容

可跟选项:
选项 功能描述 风险提示 / 使用提示
-n 取消自动换行:输出内容后,不自动换行,光标停留在输出内容末尾 适合脚本中连续输出、进度条打印等场景,注意后续输出会拼接在同一行
-e 启用转义字符解析:支持解析反斜杠转义字符(如 \n、\t、\033 等) 必须加此选项,转义字符才会生效,否则会直接输出转义字符本身
-E 禁用转义字符解析:默认行为,不解析反斜杠转义字符,直接原样输出 避免输出内容中的反斜杠被意外解析,适合输出包含特殊字符的内容
常用转义字符(需配合 - e 选项):
转义字符 功能描述
\n 换行符,输出时在此处换行
\t 水平制表符(Tab 键),输出时插入空格缩进
\r 回车符,光标移动到当前行的行首
\\ 输出反斜杠本身
\033[ 终端颜色控制符,用于输出带颜色的字体、背景
常用选项组合:
复制代码
echo -e "第一行\n第二行\t带缩进"  # 输出换行和制表符,实现分行和缩进
echo -n "正在处理..."  # 输出内容后不换行,后续内容可拼接在同一行
echo -e "\033[31m红色字体\033[0m"  # 输出红色的字体,终端高亮提示
echo "当前登录用户:$USER,当前路径:$PWD"  # 输出变量组合内容,脚本日志常用
echo "export PATH=$PATH:/opt/bin" >> ~/.bashrc  # 追加环境变量配置到系统配置文件
注意事项:
  1. 引号使用规范:输出带空格、特殊字符的内容时,建议用双引号包裹,避免内容被 Shell 拆分;单引号会原样输出内容,不解析变量和转义字符。
  2. 转义字符生效条件:所有反斜杠转义字符,必须加 - e 选项才会生效,否则会直接原样输出。
  3. 脚本中的使用:echo 是 Shell 脚本中日志打印、变量调试的核心命令,脚本中建议统一格式,方便日志排查。
  4. 特殊字符处理:输出包含!、$、* 等 Shell 特殊字符时,需用单引号包裹,或用反斜杠转义,避免被 Shell 解析为其他含义。
  5. 大文件写入:echo 仅适合写入短内容,大段内容建议使用 cat 配合重定向,避免 echo 命令过长导致可读性差。

10. cat 指令

语法:cat [选项] 文件名
功能:核心作用是查看、合并、创建文件内容,默认情况下:

  • 直接读取并输出文件的全部内容到终端,适合查看小文件;
  • 支持同时读取多个文件,合并输出内容;
  • 配合重定向可实现文件合并、创建新文件;
  • 读取大文件时会一次性加载全部内容,终端会快速滚动,不适合查看超大文件。
基本用法:
  • 查看文件内容语法:cat [选项] 文件名直接读取并输出文件的全部内容到终端,支持同时查看多个文件(空格分隔)。

    cat note.txt # 查看当前目录下note.txt的全部内容
    cat /home/user/log1.log /home/user/log2.log # 同时查看两个日志文件的内容,按顺序合并输出

  • 合并多个文件语法:cat 文件 1 文件 2 > 合并后的新文件将多个文件的内容按顺序合并,写入到新文件中。

    cat a.txt b.txt c.txt > all.txt # 将a.txt、b.txt、c.txt的内容合并,写入到all.txt
    cat *.log > total.log # 将当前目录所有.log文件的内容合并,写入total.log

  • 创建并写入文件语法:cat > 文件名 << EOF配合重定向和结束符,创建新文件并写入多行内容,输入 EOF 结束写入。

    cat > test.txt << EOF
    第一行内容
    第二行内容
    第三行内容
    EOF

    创建test.txt文件,并写入三行内容,输入EOF后结束编辑

可跟选项:
选项 功能描述 风险提示 / 使用提示
-n 显示行号:输出内容时,给所有行(包括空行)添加连续的行号 便于定位内容行号,适合查看代码、配置文件时定位问题
-b 非空行显示行号:仅给非空的内容行添加行号,空行不编号、不占用行号 适合查看有空行的配置文件,行号更贴合有效内容
-s 压缩空行:将连续的多个空行,压缩为单个空行输出 适合查看有大量冗余空行的文件,提升内容可读性
-A 显示所有隐藏字符:输出换行符、制表符等不可见的特殊字符 排查文件中的隐藏字符、换行符异常、制表符问题时使用
常用选项组合:
复制代码
cat -n note.txt  # 查看note.txt内容,给所有行添加行号,方便定位内容
cat -b /etc/ssh/sshd_config  # 查看ssh配置文件,仅给非空行添加行号,空行不编号
cat -s test.log  # 查看日志文件,压缩连续的空行,减少冗余内容
cat -A test.txt  # 查看文件中的所有隐藏字符,排查特殊符号问题
cat -n *.conf > config_bak.txt  # 给所有配置文件内容加行号,合并写入备份文件
严禁执行的操作:
复制代码
# 严禁用cat读取超大文件(GB级),会占用大量系统内存,导致终端卡死、系统负载飙升
# 错误示例:cat 10G.log  # 超大日志文件用cat读取,会导致系统资源耗尽
注意事项:
  1. 文件大小限制:cat 适合查看 KB 级、小 MB 级的文件,超过 10MB 的大文件建议用 more、less 命令分页查看,避免终端滚动过快无法查看内容,同时减少内存占用。
  2. 权限问题:查看文件时,需对目标文件有读取权限,权限不够可用 sudo 提升权限;写入文件时,需对目标目录有写入权限。
  3. 合并文件规范:合并文件时,> 会覆盖目标文件的原有内容,>> 会追加到目标文件末尾,操作前务必确认重定向符号,避免误覆盖文件。
  4. 二进制文件警告:不要用 cat 读取二进制文件(如图片、可执行程序),会导致终端输出乱码,甚至终端异常,需用专用工具查看二进制文件。
  5. 结束符使用:创建文件时,EOF 结束符可自定义为其他字符(如 END),但必须保证开头和结尾的结束符完全一致,且结尾的结束符必须单独占一行,前后无空格。

11. 输出重定向、输入重定向、追加重定向

核心语法:

命令 重定向符号 目标文件 / 路径功能:核心作用是改变命令的默认输入 / 输出方向,将原本输出到终端的内容写入到文件,或从文件中读取内容作为命令的输入,是 Shell 中文件操作、脚本编写的核心机制

默认情况下:

  • Linux 命令默认有 3 个标准流:标准输入 (stdin,文件描述符 0,默认来自键盘)、标准输出 (stdout,文件描述符 1,默认输出到终端)、标准错误输出 (stderr,文件描述符 2,默认输出到终端);
  • 输出重定向改变 stdout/stderr 的输出方向,输入重定向改变 stdin 的输入来源;
  • 重定向操作会直接操作文件,操作不当会导致文件内容被覆盖、丢失。
基本用法:
1. 标准输出重定向(>,覆盖式)

语法:命令 > 目标文件将命令的标准输出结果,覆盖写入到目标文件中;若文件不存在则自动创建,若文件已存在则清空原有内容后写入。

复制代码
echo "Hello Linux" > test.txt  # 将echo的输出内容覆盖写入test.txt,原有内容会被清空
ls -l > file_list.txt  # 将当前目录的文件列表覆盖写入file_list.txt
cat note.txt > note_bak.txt  # 将note.txt的内容覆盖写入note_bak.txt,实现文件复制
2. 标准输出追加重定向(>>,追加式)

语法:命令 >> 目标文件将命令的标准输出结果,追加写入到目标文件的末尾;若文件不存在则自动创建,若文件已存在则保留原有内容,在末尾新增内容,不会覆盖。

复制代码
echo "新的一行内容" >> test.txt  # 将内容追加到test.txt的末尾,不覆盖原有内容
date >> run_log.txt  # 将当前时间追加到run_log.txt,适合记录脚本执行日志
cat *.log >> total_log.txt  # 将所有.log文件的内容追加到total_log.txt末尾
3. 标准错误输出重定向

语法:命令 2> 错误日志文件将命令执行时的错误输出,覆盖写入到目标文件,正常输出仍打印到终端;2 是标准错误输出的文件描述符,必须紧跟 >,无空格。

复制代码
ls /root/test 2> error.log  # 若命令执行报错,错误信息会覆盖写入error.log,正常结果输出到终端
cat not_exist.txt 2> error.log  # 读取不存在的文件,错误信息写入error.log
  • 错误追加重定向:命令 2>> 错误日志文件,将错误信息追加到文件末尾,不覆盖原有内容。

    sh test.sh 2>> script_error.log # 脚本执行的错误信息,追加写入到script_error.log

4. 标准输出 + 错误输出合并重定向

语法:命令 > 目标文件 2>&1将命令的正常输出和错误输出,合并覆盖写入到同一个目标文件中,是脚本日志记录的最常用用法。

复制代码
sh run.sh > run.log 2>&1  # 脚本的所有正常输出和错误输出,都覆盖写入run.log
ls -l /root /test > all.log 2>&1  # 命令的所有输出和报错,都写入all.log
  • 合并追加重定向:命令 >> 目标文件 2>&1,将所有输出追加到文件末尾,不覆盖。

    sh cron_task.sh >> task.log 2>&1 # 定时任务的所有日志,追加写入task.log,适合定时任务记录

5. 标准输入重定向(<)

语法:命令 < 源文件将文件的内容作为命令的标准输入,替代默认的键盘输入,命令从文件中读取内容执行。

复制代码
cat < test.txt  # 从test.txt中读取内容,作为cat的输入,输出文件内容
wc -l < test.txt  # 从test.txt中读取内容,统计文件的行数
mysql -uroot -p123456 < backup.sql  # 从backup.sql中读取SQL语句,导入到MySQL数据库
可跟特性说明:
重定向符号 功能描述 风险提示
> 标准输出覆盖重定向 会清空目标文件原有内容,操作前务必确认文件,重要文件严禁使用,避免内容丢失
>> 标准输出追加重定向 不会覆盖原有内容,仅在末尾新增,是日志记录的安全选项,推荐优先使用
2> 标准错误输出覆盖重定向 仅捕获错误信息,正常输出仍打印到终端,适合单独记录报错日志
2>> 标准错误输出追加重定向 追加记录错误信息,不会覆盖历史报错日志,适合脚本长期运行记录错误
> 文件 2>&1 输出 + 错误合并覆盖重定向 所有输出都写入同一个文件,覆盖原有内容,脚本单次执行日志常用
>> 文件 2>&1 输出 + 错误合并追加重定向 所有输出都追加到同一个文件,保留历史日志,定时任务、长期运行脚本首选
< 标准输入重定向 从文件读取输入,避免手动输入,适合批量执行命令、导入数据场景
/dev/null 空设备文件,所有写入的内容都会被丢弃,不占用磁盘空间 用于屏蔽命令的输出 / 报错,不想在终端显示内容,也不想写入文件时使用
常用组合场景:
复制代码
# 1. 屏蔽命令的所有输出和报错,不显示任何内容
ls -l > /dev/null 2>&1

# 2. 脚本日志规范写法,执行命令同时记录日志到文件,终端也显示
sh run.sh 2>&1 | tee -a run.log

# 3. 批量创建文件并写入多行内容
cat > init.sh << EOF
#!/bin/bash
echo "脚本初始化开始"
date
echo "初始化完成"
EOF
# 给脚本添加执行权限
chmod +x init.sh

# 4. 分别记录正常日志和错误日志
sh task.sh > normal.log 2> error.log
严禁执行的操作:
复制代码
# 严禁无校验的覆盖重定向系统核心文件
echo "test" > /etc/passwd  # 覆盖系统用户配置文件,会导致所有用户无法登录,系统崩溃
cat test.txt > /etc/fstab  # 覆盖系统磁盘挂载配置文件,会导致系统重启后无法挂载磁盘,无法启动

# 严禁错误使用重定向符号,把>>写成>,导致重要日志文件被清空
# 错误示例:echo "test" > important.log  # 原本想追加,写成覆盖,导致历史日志全部丢失
注意事项:
  1. 覆盖与追加的核心区别:> 是覆盖,会清空文件原有内容,风险极高;>> 是追加,仅在末尾新增内容,安全可控,日志记录优先使用 >>。
  2. 文件描述符规范:2>&1 必须写在重定向目标文件的后面,顺序错误会导致无法合并输出;2 和 > 之间不能有空格,&1 必须连写,不能有空格。
  3. 空设备文件 /dev/null:所有写入 /dev/null 的内容都会被永久丢弃,无法恢复,适合屏蔽不需要的输出,不要把重要内容写入 /dev/null。
  4. 权限问题:重定向写入文件时,需对目标目录有写入权限,即使命令加了 sudo,重定向也不会继承 sudo 权限,需用 sudo sh -c "命令 > 文件" 或 tee 命令实现 sudo 写入。
  5. 特殊文件警告:不要对系统核心配置文件、业务重要数据文件使用 > 覆盖重定向,必须操作前先备份文件,避免误操作导致数据丢失、系统崩溃。

12. more 指令

语法:more [选项] 文件名
功能:核心作用是分页查看文件内容,解决 cat 命令查看大文件时终端快速滚动的问题,默认情况下:

  • 按页加载文件内容,一页显示满后暂停,等待用户操作后继续加载;
  • 支持向下翻页、查找内容、显示行号,适合查看中等大小的文本文件;
  • 仅支持向下翻页,不支持向上回翻,这是和 less 命令的核心区别。
基本用法:

直接分页查看指定文件的内容,支持同时查看多个文件(空格分隔)。

复制代码
more test.log  # 分页查看test.log文件的内容
more -n 10 test.log  # 分页查看test.log,每页显示10行内容
more /var/log/nginx/access.log  # 分页查看nginx访问日志
可跟选项:
选项 功能描述 风险提示 / 使用提示
-num 指定每页显示的行数,num 为数字,如 - 10 代表每页 10 行 适配不同终端大小,自定义每页显示内容,提升查看体验
-n 显示行号:输出内容时,给所有行添加连续的行号 便于定位内容行号,查看配置文件、代码时快速定位问题
-s 压缩空行:将连续的多个空行,压缩为单个空行显示 减少冗余空行,提升内容可读性,适合查看有大量空行的日志
+num 从文件的第 num 行开始显示,num 为数字 跳过文件开头的内容,直接从指定行开始查看,适合大文件定位
+/ 关键词 打开文件后,直接定位到第一个匹配关键词的行,并显示该行前后的内容 快速定位到文件中的目标内容,无需手动翻页查找
常用交互操作(查看文件时使用):
操作按键 功能描述
空格键(Space) 向下翻一页,加载下一页的内容
回车键(Enter) 向下滚动一行,逐行查看内容
/ 关键词 向下查找指定的关键词,匹配到的内容会高亮显示
n 跳转到下一个匹配的关键词位置
:f 显示当前文件的文件名和当前显示的行号
q 退出 more 查看模式,回到终端命令行
! 命令 临时执行 Shell 命令,执行完成后回到 more 查看模式
常用选项组合:
复制代码
more -n 20 /etc/ssh/sshd_config  # 分页查看ssh配置文件,每页显示20行,同时显示行号
more +/error test.log  # 打开test.log文件,直接定位到第一个包含error的行
more +100 test.log  # 从test.log的第100行开始查看内容
more -s *.log  # 分页查看所有.log文件,压缩连续的空行
注意事项:
  1. 翻页限制:more 仅支持向下翻页,不支持向上回翻,若需要回看之前的内容,只能退出后重新打开,适合单向查看的场景,需要灵活翻页建议使用 less 命令。
  2. 文件大小适配:more 适合查看 MB 级的文件,超大文件(GB 级)建议用 tail、head 配合查看,或用 less 命令,避免加载过慢。
  3. 权限问题:查看文件时,需对目标文件有读取权限,权限不够可用 sudo 提升权限。
  4. 二进制文件警告:不要用 more 查看二进制文件(图片、可执行程序),会导致终端输出乱码,甚至异常。
  5. 多文件查看:同时查看多个文件时,查看完一个文件后会自动进入下一个文件,:n 切换到下一个文件,:p 切换到上一个文件。

13. less 指令

语法:less [选项] 文件名
功能:核心作用是分页查看文件内容,是 more 命令的增强版,解决了 more 无法向上翻页的问题,默认情况下:

  • 支持向上、向下双向翻页,逐行滚动,灵活度极高;
  • 加载文件时无需一次性读取全部内容,打开超大文件速度极快,不会占用大量内存;
  • 支持关键词查找、高亮、行号显示、跳转指定行,是 Linux 中查看文件的首选命令,有 "less is more" 的称号。
基本用法:

直接分页查看指定文件的内容,支持同时查看多个文件(空格分隔)。

复制代码
less test.log  # 分页查看test.log文件的内容
less /var/log/nginx/access.log  # 分页查看nginx访问日志
less -N /etc/ssh/sshd_config  # 带行号查看ssh配置文件
可跟选项:
选项 功能描述 风险提示 / 使用提示
-N 显示行号:输出内容时,给所有行添加连续的行号 最常用选项,便于定位内容行号,查看配置文件、代码、日志必用
-s 压缩空行:将连续的多个空行,压缩为单个空行显示 减少冗余空行,提升内容可读性,适合查看有大量空行的日志
-i 忽略大小写:查找关键词时,忽略大小写差异 适合日志查找,避免因大小写问题遗漏匹配内容
-m 显示进度百分比:在底部显示当前查看的内容占文件总内容的百分比 便于了解当前查看位置,掌握文件整体进度
-M 显示详细进度:在底部显示文件名、当前行号、总行数、进度百分比 信息更全面,精准定位当前查看位置
+/ 关键词 打开文件后,直接定位到第一个匹配关键词的行,并高亮显示 快速定位到目标内容,无需手动翻页查找
+G 打开文件后,直接跳转到文件的末尾 查看日志文件时,直接看最新的日志内容,高频常用
常用交互操作(查看文件时使用):

表格

操作按键 功能描述
空格键(Space) 向下翻一页
PageDown 向下翻一页
PageUp 向上翻一页
回车键(Enter) 向下滚动一行
方向键↓ 向下滚动一行
方向键↑ 向上滚动一行
d 向下翻半页
u 向上翻半页
g 跳转到文件的开头(第一行)
G 跳转到文件的末尾(最后一行)
数字 + g 跳转到指定的行号,如 100g 跳转到第 100 行
/ 关键词 向下查找指定的关键词,匹配内容高亮显示
? 关键词 向上查找指定的关键词,从当前位置往文件开头查找
n 跳转到下一个匹配的关键词位置
N 跳转到上一个匹配的关键词位置
:f 显示当前文件的文件名、行号、总行数
:n 切换到下一个查看的文件(同时打开多个文件时)
:p 切换到上一个查看的文件(同时打开多个文件时)
q 退出 less 查看模式,回到终端命令行
F 实时滚动刷新文件内容,等同于 tail -f,按 Ctrl+C 停止
v 调用 vi/vim 编辑器,编辑当前查看的文件
常用选项组合:
复制代码
less -N /etc/ssh/sshd_config  # 带行号查看ssh配置文件,精准定位配置项
less -m /var/log/messages  # 查看系统日志,显示查看进度百分比
less +G test.log  # 打开日志文件后,直接跳转到文件末尾,查看最新日志
less -i +/error test.log  # 打开test.log,忽略大小写查找error关键词,直接定位到匹配行
less -NM *.conf  # 查看所有配置文件,带行号、显示详细进度信息
注意事项:
  1. 大文件优势:less 打开文件时不会一次性加载全部内容,即使是 GB 级的超大日志文件,也能瞬间打开,不会占用大量系统内存,是查看超大文件的首选命令,远超 cat、more。
  2. 实时刷新功能:查看正在写入的日志文件时,按 F 键即可实时刷新显示新增的内容,和 tail -f 效果一致,按 Ctrl+C 即可停止刷新,回到正常查看模式,非常灵活。
  3. 权限问题:查看文件时,需对目标文件有读取权限,权限不够可用 sudo 提升权限;编辑文件时,需对文件有写入权限。
  4. 查找优化:查找关键词时,默认区分大小写,加 - i 选项可忽略大小写;匹配到的内容会高亮显示,n/N 快速切换匹配位置,日志排查效率极高。
  5. 跨平台兼容性:less 是绝大多数 Linux 发行版默认预装的命令,比 more 的兼容性更广,功能更强大,日常查看文件优先使用 less,替代 cat 和 more。

14. head 指令

语法:head [选项] 文件名
功能:核心作用是查看文件开头的内容,默认情况下:

  • 不带选项时,默认输出文件的前 10 行内容到终端;
  • 可通过选项自定义查看的行数、字节数,支持同时查看多个文件;
  • 仅读取文件开头的内容,无需加载整个文件,打开速度极快,适合快速查看文件的头部信息、配置说明、日志开头。
基本用法:
  • 查看文件前 N 行语法:head -n 行数 文件名输出文件开头指定行数的内容,是最核心的用法。

    head test.txt # 不带选项,默认输出test.txt的前10行内容
    head -n 20 test.log # 输出test.log的前20行内容
    head -5 test.txt # 简写格式,直接-数字,输出test.txt的前5行内容

  • 查看文件前 N 个字节语法:head -c 字节数 文件名输出文件开头指定字节数的内容,适合查看二进制文件的头部信息、固定长度的内容。

    head -c 100 test.txt # 输出test.txt前100个字节的内容
    head -c 1k test.log # 输出test.log前1KB的内容,支持k(KB)、m(MB)单位

  • 同时查看多个文件

    head -n 5 a.txt b.txt c.txt # 同时查看a.txt、b.txt、c.txt三个文件的前5行内容,自动标注文件名
    head *.conf # 查看当前目录所有.conf文件的前10行内容,快速浏览所有配置文件

可跟选项:
选项 功能描述 风险提示 / 使用提示
-n 行数 指定输出文件开头的行数,支持简写 - 数字 最核心常用选项,自定义查看的行数,精准控制输出内容
-c 字节数 指定输出文件开头的字节数,支持 k、m、g 单位 适合查看固定长度的头部信息、二进制文件头,避免查看整个文件
-q 静默模式:同时查看多个文件时,不输出文件名标题,仅输出内容 适合合并多个文件的头部内容,写入到新文件时使用
-v 详细模式:始终显示文件名标题,即使只查看一个文件 明确标注当前输出的文件,避免多个文件查看时混淆
常用选项组合:
复制代码
head -n 1 /etc/passwd  # 查看系统用户配置文件的第一行,快速了解文件格式
head -n 30 /var/log/nginx/access.log  # 查看nginx访问日志的前30行,了解日志格式
head -q -n 5 *.log > log_head.txt  # 提取所有.log文件的前5行,合并写入log_head.txt,不显示文件名
head -c 200 /usr/bin/ls  # 查看ls命令二进制文件的前200个字节,查看文件头信息
head -v -n 10 test.conf  # 查看test.conf的前10行,强制显示文件名标题
注意事项:
  1. 行数与字节数限制:-n 和 - c 选项不能同时使用,同时指定时,后指定的选项会生效,前一个会被覆盖。
  2. 大文件优势:head 仅读取文件开头的指定内容,无论文件多大,都能瞬间输出结果,不会占用系统内存,适合快速查看超大文件的头部信息。
  3. 权限问题:查看文件时,需对目标文件有读取权限,权限不够可用 sudo 提升权限。
  4. 管道组合用法:head 常和其他命令配合,通过管道获取输出的前几行,例如 ls -l | head -n 20 查看当前目录前 20 个文件,ps aux | head -n 10 查看前 10 个进程。
  5. 空文件处理:查看空文件时,head 不会输出任何内容,也不会报错,属于正常行为。

15. tail 指令

语法:tail [选项] 文件名
功能:核心作用是查看文件末尾的内容,默认情况下:

  • 不带选项时,默认输出文件的最后 10 行内容到终端;
  • 可通过选项自定义查看的行数、字节数,支持实时刷新文件新增内容,是 Linux 查看日志的核心命令;
  • 仅读取文件末尾的内容,无需加载整个文件,打开速度极快,适合查看日志的最新内容、文件尾部信息。
基本用法:
  • 查看文件最后 N 行语法:tail -n 行数 文件名输出文件末尾指定行数的内容,是最核心的用法。

    tail test.txt # 不带选项,默认输出test.txt的最后10行内容
    tail -n 20 test.log # 输出test.log的最后20行内容
    tail -5 test.txt # 简写格式,直接-数字,输出test.txt的最后5行内容

  • 实时刷新查看文件新增内容(最常用)语法:tail -f 文件名持续监听文件的新增内容,文件有新内容写入时,会实时输出到终端,是查看正在运行的服务日志的核心用法,按 Ctrl+C 停止监听。

    tail -f /var/log/nginx/access.log # 实时刷新查看nginx访问日志的新增内容
    tail -f test.log # 实时监听test.log文件,有新内容写入时立即显示

  • 从文件指定行开始输出到末尾语法:tail -n + 行数 文件名从文件的第 N 行开始,一直输出到文件的末尾,适合跳过文件开头的内容,查看剩余全部内容。

    tail -n +100 test.log # 从test.log的第100行开始,输出到文件末尾

  • 查看文件最后 N 个字节语法:tail -c 字节数 文件名输出文件末尾指定字节数的内容。

    tail -c 100 test.txt # 输出test.txt最后100个字节的内容
    tail -c 1k test.log # 输出test.log最后1KB的内容,支持k(KB)、m(MB)单位

可跟选项:
选项 功能描述 风险提示
-n 行数 指定输出文件末尾的行数,支持简写 - 数字;+ 数字代表从第 N 行输出到末尾 最核心常用选项,自定义查看的行数,精准控制输出内容
-f 持续监听:实时刷新输出文件新增的内容,按 Ctrl+C 停止监听 日志排查、服务运行监控的必用选项,高频使用
-F 增强监听:等同于 --follow=name --retry,即使文件被删除、重建、轮转,也会自动重新监听文件 适合查看按天轮转的日志文件(如系统日志、服务日志),避免日志轮转后停止监听
-c 字节数 指定输出文件末尾的字节数,支持 k、m、g 单位 适合查看文件末尾固定长度的内容
-q 静默模式:同时查看多个文件时,不输出文件名标题,仅输出内容 适合合并多个文件的尾部内容,写入到新文件时使用
-v 详细模式:始终显示文件名标题,即使只查看一个文件 明确标注当前输出的文件,避免多个文件查看时混淆
--pid = 进程号 配合 - f 使用,当指定的进程结束后,自动退出 tail 监听 适合脚本中监听服务日志,服务进程停止后自动退出 tail,无需手动终止
常用选项组合:
复制代码
tail -f /var/log/messages  # 实时刷新查看系统日志的新增内容,排查系统问题
tail -n 50 /var/log/nginx/error.log  # 查看nginx错误日志的最后50行,排查服务报错
tail -F /var/log/nginx/access.log  # 增强监听nginx访问日志,日志轮转后仍能持续监听
tail -n +50 test.txt > new_test.txt  # 从test.txt的第50行开始,输出所有内容写入new_test.txt
tail -f test.log --pid=12345  # 监听test.log,当进程号12345结束后,自动退出tail
tail -v -n 20 *.log  # 查看所有.log文件的最后20行,强制显示文件名标题
严禁执行的操作:
复制代码
# 严禁在生产服务器无限制监听海量日志文件,同时tail -f几十个日志文件,会占用大量系统资源,导致负载飙升
# 严禁用tail -f查看二进制文件、正在高速写入的超大文件,会导致终端持续刷屏,无法正常操作
注意事项:
  1. 实时监听的区别:-f 是监听文件的文件描述符,文件被删除、重建后会停止监听;-F 是监听文件名,文件重建后会自动重新监听,日志轮转场景必须用 - F,避免日志更新后看不到内容。
  2. 大文件优势:tail 仅读取文件末尾的指定内容,无论文件多大,都能瞬间输出结果,不会占用系统内存,是查看 GB 级超大日志文件的首选命令。
  3. 权限问题:查看文件时,需对目标文件有读取权限,权限不够可用 sudo 提升权限;实时监听文件时,需文件有读取权限,且文件所在目录有执行权限。
  4. 管道组合用法:tail 常和 grep 配合,过滤日志中的关键词,例如 tail -f test.log | grep "error" 实时监听日志,只输出包含 error 的行,日志排查效率极高。
  5. 停止监听:tail -f/-F 实时监听时,必须按 Ctrl+C 才能停止监听,回到终端命令行;脚本中使用时,需注意进程退出机制,避免 tail 进程残留。

16. man 指令

基本概念:

man 是 Linux/Unix 系统中用于 查看命令 / 工具 / 配置文件详细手册 的命令,全称 "manual"(手册),是获取系统帮助的最核心工具之一。通过 man 可以查询几乎所有系统自带命令的用法、选项、参数及注意事项,是 Linux 学习者和管理员的 "随身手册"。
语法:man [选项] [目标名称]

目标名称可以是:

  • 系统命令(如 ls、cd、man 本身);
  • 系统调用(如 open、read 等内核函数);
  • 配置文件(如 passwd、nginx.conf);
  • 设备文件(如 /dev/sda)等。
    功能:man 会调用系统内置的手册文档(存放在 /usr/share/man 等目录),以分页形式展示指定内容的详细说明,包括命令的语法、选项、示例、相关文件等,帮助用户理解和正确使用系统工具。

常用选项:

1. 按 "章节" 查询(解决重名问题)

系统手册分为多个章节(共 8 章),部分名称可能重复(如 passwd 既是命令也是配置文件),需用章节号指定查询对象,以下是常用的章节:

章节号 内容类型 示例
1 用户命令(最常用,如 ls man 1 passwd → 查看 passwd 命令手册
2 系统调用(内核函数,如 open man 2 open → 查看 open 系统调用
3 库函数(C 语言等库函数) man 3 printf → 查看 printf 函数
5 配置文件格式(如 /etc/passwd man 5 passwd → 查看 passwd 文件格式
8 管理员命令(如 ifconfig man 8 ifconfig → 查看网络配置命令

2. 搜索相关手册(-k-f

  • man -k 关键词:搜索所有手册中包含 "关键词" 的内容(相当于 apropos 命令),适合不知道具体命令名时模糊查询。
  • man -f 名称:显示指定名称在手册中的章节和简介(相当于 whatis 命令),快速判断名称对应的内容类型。

手册页的结构(如何阅读)

手册页内的操作快捷键

进入 man 分页界面后,无法用鼠标操作,需通过键盘快捷键导航

快捷键 功能描述
空格键 向下翻一页(最常用)。
b 向上翻一页。
Enter 键 向下翻一行。
k 向上翻一行。
/关键词 从当前位置向下搜索 "关键词"(如 / -l 搜索 -l 选项的说明)。
n 跳转到下一个搜索结果。
N 跳转到上一个搜索结果。
q 退出 man 界面(回到终端,必须记住!)。
h 查看 man 自身的帮助(列出所有快捷键)。

17. find 指令

语法:find [查找路径] [选项 / 匹配条件] [执行动作]
功能:核心作用是在指定目录路径下,递归查找符合条件的文件或目录,默认情况下:

  • 不指定查找路径时,默认在当前工作目录下递归查找;
  • 支持按文件名、文件类型、大小、修改时间、权限、所有者等多维度条件精准匹配;
  • 查找到目标后,可配合执行动作(如删除、复制、移动、执行脚本等),实现批量文件处理;
  • 支持自定义递归查找的目录深度,控制遍历范围。
基本用法:
  • 按文件名查找(最常用)语法:find 查找路径 -name "文件名匹配模式"按文件名匹配查找,支持通配符 *、?,通配符需用双引号包裹,避免被 Shell 提前解析。

    find . -name "test.txt" # 当前目录及子目录查找名为test.txt的文件
    find /home -name ".log" # /home目录下查找所有.log后缀的文件
    find /etc -iname "
    .conf" # /etc目录下忽略大小写,查找所有.conf后缀的文件

  • 按文件类型查找语法:find 查找路径 -type 文件类型精准过滤文件类型,避免查找结果混入无关类型文件。

    find . -type d # 当前目录及子目录查找所有目录
    find /var/log -type f -name "*.log" # /var/log下查找所有.log后缀的普通文件

  • 常用文件类型:f(普通文件)、d(目录)、l(软链接)、b(块设备)、c(字符设备)。

  • 按文件大小查找语法:find 查找路径 -size [+/-] 大小单位+ 代表大于,- 代表小于,无符号代表等于,支持单位:c(字节)、k(KB)、M(MB)、G(GB)。

    find . -size +100M # 当前目录查找大于100MB的文件
    find /tmp -size -10k # /tmp目录查找小于10KB的文件

  • 按修改时间查找语法:find 查找路径 -mtime [+/-] 天数+ 代表 n 天以前,- 代表 n 天以内,无符号代表正好第 n 天;支持 - mmin(分钟级)、-atime(访问时间)、-ctime(状态修改时间)。

    find . -mtime -7 # 当前目录查找7天内修改过的文件
    find /var/log -mtime +30 # /var/log下查找30天以前修改过的文件

可跟选项:
选项 功能描述 风险提示
-name 按文件名匹配查找,支持通配符 *、? 通配符必须用双引号包裹,避免被 Shell 提前解析,导致查找结果异常
-iname 忽略大小写按文件名匹配查找 适合文件名大小写不统一的场景,避免遗漏匹配结果
-type 按文件类型匹配查找,常用 f (普通文件)、d (目录)、l (软链接) 精准过滤文件类型,避免查找结果混入无关类型文件
-size 按文件大小匹配查找,支持 +/- 筛选大于 / 小于指定大小的文件 单位区分大小写,k 是 KB、M 是 MB、G 是 GB,写错单位会导致查找结果完全错误
-mtime 按文件内容修改时间匹配,单位天,支持 +/- 筛选 +n 是 n 天以前,-n 是 n 天以内,注意符号含义,避免筛选时间范围错误
-maxdepth 限制递归查找的最大目录深度,如 - maxdepth 1 仅查找当前目录 避免无限制递归深层目录,提升查找效率,减少系统资源占用
-user/-group 按文件所有者 / 所属组匹配查找 系统目录查找需 sudo 权限,普通用户会出现权限不足提示
-perm 按文件权限匹配查找,如 - perm 644 适合查找权限异常的文件,需注意权限数字的准确性
-exec 对查找到的每个文件执行指定 Shell 命令,{} 代表匹配到的文件,命令必须以;结尾 高危选项,尤其是配合 rm 删除时,必须先确认查找结果,再执行动作,避免误删
-delete 直接删除查找到的符合条件的文件 / 目录 极高危选项,删除后无法恢复,必须先执行查找确认结果,再添加该选项
-o/-a/-not 逻辑或 / 逻辑与 / 逻辑非,实现多条件组合匹配 多条件组合时注意优先级,避免逻辑错误导致匹配结果异常
常用选项组合:
复制代码
# 1. 安全查找:当前目录查找7天内修改过的.log文件,仅列出结果
find . -type f -name "*.log" -mtime -7

# 2. 限制深度查找:仅在/etc一级目录下查找.conf文件,不递归子目录
find /etc -maxdepth 1 -type f -name "*.conf"

# 3. 查找大文件:查找/目录下大于1GB的文件,显示文件大小和路径,排查磁盘占用
find / -type f -size +1G -exec ls -lh {} \;

# 4. 批量清理过期日志:先确认查找结果,无误后再执行删除
find /var/log -type f -name "*.log" -mtime +30
# 确认无误后执行删除:find /var/log -type f -name "*.log" -mtime +30 -delete

# 5. 多条件组合查找:查找当前目录下,非.log后缀、大于10MB、7天内修改的文件
find . -type f -not -name "*.log" -size +10M -mtime -7
严禁执行的操作:
复制代码
# 严禁无提前校验的根目录批量删除,会直接导致系统崩溃、数据完全丢失
find / -name "*.log" -delete  # 根目录无校验删除,会误删系统核心文件,导致系统异常
find / -type f -mtime +7 -exec rm -rf {} \;  # 无校验删除根目录文件,系统直接瘫痪

# 严禁未确认查找结果就直接加-delete/-exec rm,误删后数据几乎无法恢复
注意事项:
  • 路径规范:查找路径建议写绝对路径,避免当前目录切换导致查找范围错误;当前目录查找用。表示,根目录查找 / 需极度谨慎。
  • 高危操作规范:所有带删除、修改的操作,必须先执行不带动作的查找命令,确认结果完全符合预期后,再添加动作执行。
  • 查找效率:查找大目录、海量文件时,建议添加 - maxdepth 限制查找深度,用 - type 精准过滤文件类型,减少不必要的递归遍历。
  • 权限问题:查找系统目录(/etc、/root、/var 等)时,需 root 权限,可加 sudo 提升权限,但需更谨慎。

18. which 指令

语法:which [选项] 命令名
功能:核心作用是查找指定 Shell 命令对应的可执行文件的绝对路径,默认情况下:

  • 会在系统环境变量 $PATH 定义的目录中,按顺序查找命令对应的可执行文件;
  • 默认只返回第一个匹配到的可执行文件路径;
  • 可识别命令的别名(alias),返回别名对应的真实命令路径;
  • 仅能查找可执行的二进制文件、脚本,无法查找普通文件、目录。
基本用法:
  • 基础查找命令路径语法:which 命令名直接查找指定命令的可执行文件绝对路径,是最核心用法。

    which ls # 查找ls命令的可执行文件路径,默认返回/bin/ls
    which python3 # 查找python3命令的可执行文件路径
    which nginx # 查找nginx服务的可执行文件路径

  • 查找命令的所有匹配路径语法:which -a 命令名查找 $PATH 中所有匹配的可执行文件路径,返回所有结果,而非仅第一个。

    which -a python # 查找所有python命令的可执行文件路径,显示所有匹配结果
    which -a java # 查找所有java命令的可执行文件路径

可跟选项:
选项 功能描述 使用提示
-a 查找所有匹配路径:返回 $PATH 目录中所有匹配的可执行文件路径 适合排查命令多版本共存的问题,确认当前生效的版本
--skip-alias 跳过别名解析:不处理命令的别名,直接查找原始命令的可执行路径 适合排查别名导致的命令执行异常,确认原始命令的真实路径
-i 忽略大小写:查找命令名时忽略大小写差异 仅部分 Linux 发行版支持,兼容性有限,不建议跨平台脚本使用
常用选项组合:
复制代码
# 1. 排查命令多版本问题:查找所有匹配的java路径,确认当前生效版本
which -a java

# 2. 跳过别名,查找原始命令路径:比如ls设置了别名,查看原始ls命令的路径
which --skip-alias ls

# 3. 同时查找多个命令的路径
which ls cat grep rm
注意事项:
  1. 查找范围限制:which 仅在环境变量定义的目录中查找,不在PATH 中的目录,即使有可执行文件,也无法找到。
  2. 别名解析:默认会解析命令的别名,返回别名对应的真实命令路径,若需查看原始命令路径,需加 --skip-alias 选项。
  3. 脚本常用场景:Shell 脚本中常用 which 判断命令是否存在,例如 if which nginx >/dev/null 2>&1; then echo "nginx已安装"; fi
  4. 权限问题:which 无需 root 权限,普通用户即可正常执行,仅需对 $PATH 中的目录有读取权限。

19. alias 指令

语法:alias [别名 =' 真实命令 ']
功能:核心作用是给 Shell 命令设置别名,将长命令、复杂命令简化为短别名,提升命令行操作效率,默认情况下:

  • 不带参数时,列出当前 Shell 环境中所有已设置的别名;
  • 别名仅在当前 Shell 会话中生效,关闭终端后会失效,需写入配置文件永久生效;
  • 别名优先级高于原始命令,会优先执行别名对应的命令;
  • 支持给带选项、参数、管道的复杂命令设置别名,简化操作。
基本用法:
  • 查看当前所有别名语法:alias直接执行,列出当前 Shell 环境中所有已定义的别名。

    alias # 查看当前所有已设置的别名

  • 设置临时别名(当前会话生效)语法:alias 别名 =' 真实命令 '给指定命令设置别名,带选项、参数的命令必须用单引号包裹。

    alias ll='ls -l' # 设置ll为ls -l的别名,执行ll等同于执行ls -l
    alias la='ls -alh' # 设置la为ls -alh的别名,显示所有文件,带人类易读单位
    alias grep='grep --color=auto' # 设置grep别名,匹配内容自动高亮显示
    alias rm='rm -i' # 设置rm别名,删除前提示确认,提升安全性

  • 取消别名语法:unalias 别名取消指定的别名,恢复原始命令的执行。

    unalias ll # 取消ll别名
    unalias rm # 取消rm的别名,恢复原始rm命令
    unalias -a # 取消当前Shell环境中所有的别名

可跟选项:
选项 功能描述 使用提示
-p 以可复用的格式打印所有别名,输出内容可直接写入配置文件 适合备份当前别名配置,快速写入.bashrc 等配置文件
无参数 列出当前 Shell 中所有已定义的别名,显示别名与真实命令的对应关系 快速查看当前已设置的别名,排查命令执行异常
常用选项组合:
复制代码
# 1. 高频简化别名,提升操作效率
alias ll='ls -l --color=auto'
alias la='ls -alh --color=auto'
alias ..='cd ..'  # 简化上级目录切换
alias ...='cd ../..'  # 简化上两级目录切换
alias df='df -h'  # 简化磁盘查看命令,默认带人类易读单位
alias free='free -h'  # 简化内存查看命令,默认带人类易读单位

# 2. 安全类别名,降低误操作风险
alias rm='rm -i'  # 删除前提示确认
alias cp='cp -i'  # 覆盖前提示确认
alias mv='mv -i'  # 覆盖前提示确认

# 3. 永久生效别名:将别名写入Shell配置文件,重启终端也生效
# 1. 编辑配置文件(Bash用~/.bashrc,Zsh用~/.zshrc)
vi ~/.bashrc
# 2. 在文件末尾添加别名配置
# 3. 使配置立即生效
source ~/.bashrc
严禁执行的操作:
复制代码
# 严禁给系统核心命令设置破坏性别名,会导致命令执行异常,甚至系统崩溃
alias cd='rm -rf'  # 给cd设置别名,执行cd会直接删除文件,导致灾难性后果
alias ls='rm -rf /*'  # 恶意别名,执行ls会直接删除根目录所有文件,系统直接瘫痪

# 严禁在系统全局配置文件(/etc/bashrc)中设置高危别名,会影响所有用户
注意事项:
  1. 生效范围:终端直接设置的别名仅在当前 Shell 会话生效,永久生效需写入对应用户的 Shell 配置文件,全局生效写入 /etc/bashrc。
  2. 别名优先级:别名的执行优先级高于系统原始命令,排查命令执行异常时,需先检查是否设置了别名。
  3. 引号规范:别名对应的真实命令必须用单引号包裹,避免命令中的变量、管道被 Shell 提前解析,确保别名正常生效。
  4. 安全提示:不要给 rm、cd、ls 等高频核心命令设置破坏性别名,生产服务器建议设置 rm、cp、mv 的 - i 别名,提升操作安全性。

20. grep 指令

语法:grep [选项] "匹配模式 / 关键词" [目标文件 / 输入流]
功能:核心作用是在指定的文件、输入流中,查找匹配指定模式(关键词、正则表达式)的行,并输出匹配的内容,默认情况下:

  • 支持普通字符串匹配、基础正则表达式、扩展正则表达式匹配;
  • 默认输出包含匹配关键词的整行内容;
  • 支持管道输入,可接收其他命令的输出作为查找目标,是 Shell 管道操作的核心命令;
  • 可自定义输出格式,显示行号、匹配次数、上下文内容、高亮匹配关键词等。
基本用法:
  • 基础文件内容查找语法:grep "关键词" 目标文件在指定文件中查找包含关键词的行,输出整行内容,是最核心用法。

    grep "error" test.log # 在test.log中查找包含error的行,输出整行内容
    grep "root" /etc/passwd # 在/etc/passwd中查找包含root的行
    grep "192.168.1.1" /var/log/nginx/access.log # 在nginx日志中查找指定IP的访问记录

  • 多文件批量查找语法:grep "关键词" 文件 1 文件 2 目录 /*同时在多个文件、目录下的文件中查找匹配内容,自动标注匹配的文件名。

    grep "error" /var/log/*.log # 在/var/log目录下所有.log文件中查找包含error的行
    grep -r "test" /home/user/ # 递归查找/home/user目录下所有文件中包含test的行

  • 管道输入查找语法:其他命令 | grep "关键词"接收其他命令的标准输出,过滤出包含关键词的行,是最常用的组合用法。

    ps aux | grep "nginx" # 查看系统所有进程,过滤出nginx相关的进程
    ls -l | grep ".txt" # 列出当前目录文件,过滤出.txt后缀的文件
    cat /etc/passwd | grep "bash" # 查看系统用户,过滤出使用bash的用户

可跟选项:
选项 功能描述 风险提示 / 使用提示
-i 忽略大小写:查找时忽略关键词的大小写差异 适合日志、文本中大小写不统一的场景,避免遗漏匹配结果,高频常用
-v 反向匹配:输出不包含关键词的行,取反过滤 适合排除不需要的内容,如过滤掉注释行、空行,高频常用
-n 显示行号:输出匹配行的同时,显示该行在文件中的行号 便于定位匹配内容的位置,查看代码、配置文件、日志时必用
-c 统计匹配次数:仅输出匹配到的总行数,不输出具体内容 适合统计关键词出现的次数,日志统计、数据统计常用
-r 递归查找:递归查找指定目录下所有文件中的匹配内容 批量查找目录下所有文件,注意不要在根目录无限制递归,避免系统资源占用过高
-w 全词匹配:仅匹配完整的单词,不匹配单词的一部分 避免关键词作为其他单词的一部分被匹配,精准查找
-A N 显示匹配行的后 N 行内容(After) 查看匹配内容的下文,日志排查报错的上下文信息,高频常用
-B N 显示匹配行的前 N 行内容(Before) 查看匹配内容的上文,配合 - A 使用,查看完整上下文
-C N 显示匹配行的前后各 N 行内容(Context) 等同于 - A N -B N,快速查看匹配内容的完整上下文,日志排查必用
-E 启用扩展正则表达式:支持扩展正则语法,等同于 egrep 支持更复杂的正则匹配,如 (或)、+、() 等,复杂匹配场景必用
-F 固定字符串匹配:将关键词作为普通固定字符串,不解析正则表达式 查找包含正则特殊字符的内容时,避免被解析为正则,提升查找效率
-o 仅输出匹配内容:只输出匹配到的关键词部分,不输出整行内容 适合提取文本中的指定内容,配合正则提取关键信息
-l 仅输出匹配的文件名:仅输出包含匹配内容的文件名,不输出具体匹配行 批量查找时,快速筛选出包含关键词的文件
--color=auto 匹配内容高亮显示:将匹配到的关键词自动高亮显示 提升内容可读性,快速定位匹配关键词,建议设置为别名默认启用
常用选项组合:
复制代码
# 1. 日志排查高频用法:查找error关键词,忽略大小写,显示行号,前后各5行上下文
grep -inC 5 "error" /var/log/nginx/error.log

# 2. 反向过滤:查看配置文件,排除注释行(#开头)和空行
grep -vE "^#|^$" /etc/ssh/sshd_config

# 3. 进程查找:过滤进程,排除grep自身进程
ps aux | grep "nginx" | grep -v grep

# 4. 统计匹配次数:统计日志中404状态码出现的次数
grep -c " 404 " /var/log/nginx/access.log

# 5. 递归查找:在/etc目录下递归查找所有.conf文件中包含Listen关键词的行,显示行号
grep -rn "Listen" /etc/ --include="*.conf"

# 6. 提取匹配内容:用正则提取日志中的所有IP地址
grep -oE "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" /var/log/nginx/access.log
严禁执行的操作:
复制代码
# 严禁在根目录无限制递归查找海量文件,会占用大量CPU、内存资源,导致系统负载飙升
grep -r "test" /  # 直接在根目录递归查找,会遍历所有文件,导致系统资源耗尽
注意事项:
  1. 正则表达式:默认 grep 仅支持基础正则表达式,若需使用扩展正则(|、+、()、? 等),必须加 - E 选项,或使用 egrep 命令。
  2. 特殊字符处理:查找的关键词包含.、*、?、$ 等正则特殊字符时,需用反斜杠 \ 转义,或加 - F 选项将关键词作为普通字符串处理。
  3. 管道组合:grep 是 Shell 管道操作的核心命令,常和 ps、ls、cat、tail、find 等命令配合,实现复杂的内容过滤、数据提取。
  4. 大文件处理:grep 处理 GB 级超大文件时,采用流式处理,无需加载整个文件,效率远高于编辑器打开查找,是日志排查的首选。
  5. 权限问题:查找系统目录、受保护的文件时,需 root 权限,可加 sudo 提升权限。

21. 管道 |

语法:命令 1 | 命令 2 [| 命令 3 ...]
功能:核心作用是将前一个命令的标准输出(stdout) ,作为后一个命令的标准输入(stdin),实现多命令的串行协同处理,默认情况下:

  • 仅处理前一个命令的标准输出,不处理标准错误输出(stderr);
  • 命令按从左到右的顺序串行执行,前一个命令执行完成后,输出传递给后一个命令;
  • 支持多级管道串联,实现复杂的文本、数据处理流水线。
基本用法:

语法:命令 A | 命令 B

将命令 A 的输出结果,直接交给命令 B 进行处理,无需生成中间临时文件。

复制代码
ls -l | grep ".txt"  # 列出当前目录所有文件,筛选出包含.txt后缀的条目
cat /etc/passwd | wc -l  # 读取系统用户配置文件,统计文件的总行数
ps aux | grep nginx  # 查看系统所有进程,筛选出nginx相关的进程信息
可跟特性说明:
特性 功能描述 使用提示
标准输出传递 仅传递前序命令的 stdout,默认不传递 stderr 若需传递错误输出,需搭配 2>&1 重定向,如 `cat file 2>&1 grep "error"`
多级串联 支持无限级命令串联,形成数据处理流水线 避免过度嵌套导致可读性下降,复杂逻辑建议拆分脚本
管道返回值 默认返回最后一条命令的退出状态码 需获取所有命令状态可使用 PIPESTATUS 变量,适配 shell 脚本场景
常用组合场景:
复制代码
# 1. 日志筛选与统计:统计nginx日志中状态码为404的请求数量
cat /var/log/nginx/access.log | grep "404" | wc -l

# 2. 结果排序与去重:查看系统登录用户,去重后排序
last | awk '{print $1}' | sort | uniq

# 3. 进程批量处理:筛选出java进程并强制终止(谨慎使用)
ps aux | grep java | grep -v grep | awk '{print $2}' | xargs kill -9
严禁执行的操作:
复制代码
# 严禁无校验的批量删除/高危操作管道,例如:
find / -name "*.log" | rm -rf  # 错误用法,管道无法直接传递文件名给rm,会导致不可预期的删除
# 此类操作需使用xargs或find的-exec参数,且必须提前校验筛选结果
注意事项:
  1. 数据传递特性:管道传递的是字节流,而非文件名称,部分不支持标准输入的命令(如 rm、cp 等)无法直接接收管道内容,需搭配 xargs 命令使用。
  2. 错误处理:默认管道不中断执行,即使前序命令执行失败,后续命令仍会执行,脚本中可使用 set -o pipefail 让管道中任意命令失败时,整体返回非 0 状态码。
  3. 性能优化:管道无需生成中间文件,处理大文件时比 "先写入文件再读取" 的方式性能更高,适合高频数据处理场景。

22. zip /unzip 指令

zip 指令(压缩)

语法:zip [选项] 压缩包名.zip 待压缩的文件 / 目录
功能:核心作用是将指定的文件或目录打包并压缩为.zip 格式的压缩包,默认情况下:

  • 可直接压缩单个 / 多个文件;
  • 需配合选项才能压缩目录(递归处理子目录);
  • 生成的.zip 压缩包兼容 Windows、macOS、Linux 多平台,通用性极强。
基本用法:
  • 压缩文件语法:zip [选项] 压缩包名.zip 文件 1 文件 2 ...直接压缩指定文件,支持同时压缩多个文件(空格分隔)。

    zip note.zip note.txt # 将当前目录的note.txt压缩为note.zip
    zip log.zip /home/user/temp/log1.log log2.log # 压缩指定路径的log1.log和当前目录的log2.log

  • 压缩目录(必须用 -r 选项)zip 默认无法递归压缩目录,需使用 -r(递归)选项,压缩目录及其所有子目录、文件。

    zip -r docs.zip docs # 压缩docs目录及其内部所有文件和子目录,生成docs.zip
    zip -r project.zip dir1 dir2 # 同时压缩dir1和dir2两个目录及其内容

可跟选项:
选项 功能描述 使用提示
-r 递归压缩:压缩目录及其所有子目录和文件(必须用于压缩目录) 压缩目录时必须携带,否则仅会生成空的目录压缩包
-q 静默模式:压缩时不输出执行过程信息 适合脚本中批量压缩,减少冗余输出
-m 移动压缩:压缩完成后,删除原始的文件 / 目录 风险较高,确认备份后再使用,避免原始文件丢失
-P 密码 加密压缩:为压缩包设置密码,解压时需输入对应密码 仅基础加密,安全性有限,不适合存储高敏感数据
-9 最高压缩比:优先保证压缩率,压缩速度会变慢 适合大文件 / 长期归档场景;默认压缩级别为 - 6,平衡速度与压缩率
-1 最快压缩:优先保证压缩速度,压缩率较低 适合临时打包、小文件快速处理场景
常用选项组合:
复制代码
zip -rq project.zip src/  # 静默递归压缩src目录,不输出过程信息
zip -rP 123456 backup.zip /home/user/data/  # 递归压缩data目录,并设置解压密码为123456
zip -rm log.zip *.log  # 压缩当前目录所有.log文件,压缩完成后删除原始log文件
zip -9r archive.zip big_file/  # 以最高压缩比递归压缩big_file目录
严禁执行的操作:
复制代码
# 严禁无校验的-m选项系统目录操作,例如:
zip -rm system.zip /etc /home  # 压缩系统核心目录后删除原始文件,会直接导致系统崩溃、数据丢失

unzip 指令(解压)

语法:unzip [选项] 压缩包名.zip
功能:核心作用是解压.zip 格式的压缩包,提取其中的文件和目录,默认情况下:

  • 直接解压到当前工作目录;
  • 自动还原压缩包的目录结构;
  • 支持查看压缩包内容、校验压缩包完整性,无需完整解压。
基本用法:
  • 基础解压语法:unzip 压缩包名.zip直接将指定压缩包完整解压到当前目录。

    unzip note.zip # 将note.zip完整解压到当前目录
    unzip /home/user/backup.zip # 解压指定路径的backup.zip到当前目录

  • 解压到指定目录(必须用 -d 选项)

    unzip docs.zip -d /home/user/temp/ # 将docs.zip解压到指定的temp目录下,目录不存在会自动创建

可跟选项:
选项 功能描述 使用提示
-d 目录路径 指定解压目录:将压缩包内容解压到指定目录 最常用选项,避免解压文件污染当前工作目录
-l 列表查看:仅列出压缩包内的文件 / 目录结构、大小,不执行解压 适合提前确认压缩包内容,避免解压冗余文件
-t 校验测试:测试压缩包完整性,检查是否损坏,不执行解压 下载压缩包后,建议先执行此命令校验文件完整性
-o 强制覆盖:解压时无需确认,直接覆盖已存在的同名文件 风险较高,可能覆盖已有修改的文件,无二次确认
-n 不覆盖:解压时跳过已存在的同名文件,不进行覆盖 安全选项,适合增量解压,避免误覆盖已有文件
-q 静默模式:解压时不输出执行过程信息 适合脚本中批量解压,减少冗余输出
-P 密码 解压加密压缩包:指定解压密码,解压加密的 zip 包 密码需紧跟 - P 参数,注意密码明文会留在命令历史中
常用选项组合:
复制代码
unzip -n project.zip -d /opt/app/  # 将project.zip解压到/opt/app/目录,已存在的文件不覆盖
unzip -l backup.zip  # 仅查看backup.zip内的文件列表,不执行解压
unzip -t download.zip  # 校验download.zip压缩包是否损坏
unzip -oP 123456 secret.zip -d ~/private/  # 输入密码解压加密压缩包到指定目录,强制覆盖同名文件
严禁执行的操作:
复制代码
# 严禁无校验的-o选项系统目录解压,例如:
unzip -o malicious.zip -d /  # 直接解压到根目录,恶意压缩包会覆盖系统核心文件,导致系统瘫痪
zip/unzip 通用注意事项:
  1. 跨平台兼容性:.zip 是跨平台通用格式,Windows 生成的 zip 包在 Linux 中可正常解压,反之亦然,注意文件名编码问题(中文文件名建议使用 UTF-8 编码)。
  2. 权限问题:压缩 / 解压文件时,需对目标目录有写入权限,对源文件有读取权限,权限不足可使用 sudo 提升权限。
  3. 大文件处理:zip 单文件最大支持 4GB(传统 zip 格式),超过 4GB 的大文件建议使用 zip64 格式,或切换为 tar 压缩格式。
  4. 安全提示:加密 zip 的密码保护强度有限,无法抵御暴力破解,高敏感数据建议使用更安全的加密方式;不要解压来源不明的 zip 包,避免恶意文件入侵。

23. tar 指令

语法:tar [选项] 归档包名 [待打包的文件 / 目录]
功能:核心作用是将多个文件 / 目录打包为单个 tar 归档文件,配合压缩选项可实现打包 + 压缩一体化处理,是 Linux 中最常用的归档压缩工具,默认情况下:

  • 仅打包不压缩,需配合压缩选项(gzip/bzip2/xz)实现压缩;
  • 支持递归打包目录及其所有子目录、文件,无需额外递归选项;
  • 保留文件的权限、所有者、时间戳等属性,适合系统备份、文件归档场景。
基本用法:
  • 打包文件 / 目录(仅打包,不压缩)语法:tar -cvf 归档包名.tar 源文件 / 目录将指定的文件 / 目录打包为 tar 归档文件,保留文件属性。

    tar -cvf note.tar note.txt # 将当前目录的note.txt打包为note.tar
    tar -cvf docs.tar docs/ # 打包docs目录及其所有内容,生成docs.tar
    tar -cvf project.tar dir1 dir2 file1 # 同时打包dir1、dir2两个目录和file1文件

  • 打包 + 压缩一体化(最常用)tar 支持搭配多种压缩算法,通过选项直接实现打包 + 压缩,无需额外命令。

    gzip压缩(.tar.gz/.tgz,兼容性最好,速度快)

    tar -zcvf archive.tar.gz docs/ # 打包docs目录并以gzip压缩,生成archive.tar.gz

    bzip2压缩(.tar.bz2,压缩率比gzip高,速度稍慢)

    tar -jcvf archive.tar.bz2 docs/ # 打包docs目录并以bzip2压缩,生成archive.tar.bz2

    xz压缩(.tar.xz,压缩率最高,适合大文件归档,速度最慢)

    tar -Jcvf archive.tar.xz docs/ # 打包docs目录并以xz压缩,生成archive.tar.xz

  • 解压 / 提取归档文件语法:tar [选项] 归档包名 [-C 目标目录]提取 tar 归档包中的内容,自动识别压缩格式,无需额外指定压缩算法。

    基础解压到当前目录

    tar -xvf archive.tar # 解压tar归档包到当前目录
    tar -xvf archive.tar.gz # 解压gzip压缩的tar包,自动识别压缩格式
    tar -xvf archive.tar.bz2 # 解压bzip2压缩的tar包
    tar -xvf archive.tar.xz # 解压xz压缩的tar包

    解压到指定目录(必须用 -C 选项)

    tar -xvf archive.tar.gz -C /home/user/temp/ # 将压缩包内容解压到指定的temp目录

可跟选项:
选项 功能描述 使用提示
-c 创建模式:生成新的归档包,用于打包操作 打包时必须携带,与 - x 互斥,不可同时使用
-x 提取模式:解压 / 提取归档包中的内容,用于解压操作 解压时必须携带,与 - c 互斥,不可同时使用
-v 详细模式:显示打包 / 解压的过程,列出所有处理的文件 / 目录 便于确认操作范围,适合手动操作;脚本中可省略,减少输出
-f 指定归档文件:后面必须紧跟归档包的文件名 必须放在所有选项的最后一位,后面直接接包名,是必选选项
-z gzip 压缩 / 解压:启用 gzip 算法,对应.tar.gz 格式 最通用的压缩选项,平衡速度与压缩率
-j bzip2 压缩 / 解压:启用 bzip2 算法,对应.tar.bz2 格式 压缩率优于 gzip,适合中等大小文件归档
-J xz 压缩 / 解压:启用 xz 算法,对应.tar.xz 格式 压缩率最高,适合大文件、长期归档场景
-C 目录路径 指定解压目录:将归档内容解压到指定目录 避免解压文件污染当前目录,是解压高频选项
-t 列表查看:仅列出归档包内的文件 / 目录结构,不执行解压 提前确认包内容,避免解压冗余文件
-p 保留权限:解压时保留文件的原始权限、所有者属性 系统备份、迁移时必须携带,避免权限异常
--exclude = 模式 排除文件:打包时排除匹配指定模式的文件 / 目录 适合打包时跳过临时文件、日志、缓存目录
常用选项组合:
复制代码
# 1. 系统备份高频命令:打包/opt目录,保留文件权限,排除临时文件
tar -zcvpf opt_backup.tar.gz /opt/ --exclude=/opt/temp --exclude=*.log

# 2. 安全解压:查看压缩包内容,确认后再解压
tar -tf project.tar.gz  # 仅查看包内文件列表
tar -xvf project.tar.gz -C ~/workspace/  # 解压到指定工作目录

# 3. 增量打包:仅打包指定时间内修改过的文件
tar -zcvf update.tar.gz --newer-mtime="7 days ago" /home/user/data/

# 4. 跨目录打包解压:将A目录的内容直接打包解压到B目录,无需生成中间包
tar -cf - -C /source/dir . | tar -xf - -C /target/dir
严禁执行的操作:
复制代码
# 严禁无校验的解压到系统根目录,例如:
tar -xvf malicious.tar -C /  # 直接解压到根目录,恶意归档包会覆盖系统核心文件,导致系统瘫痪、数据丢失

# 严禁打包时使用错误的--exclude路径,导致核心文件被排除,备份失效
注意事项:
  1. 选项顺序:-f 选项必须放在所有选项的最后,后面直接跟归档包名,错误的顺序(如 tar -fvcz)会导致命令执行失败。
  2. 压缩格式识别:现代 tar 命令解压时可自动识别 gzip/bzip2/xz 格式,无需指定 - z/-j/-J 选项,仅需 - xvf 即可完成解压。
  3. 权限问题:打包系统目录、解压到系统目录时,需 root 权限(sudo),否则会出现权限不足、无法保留文件所有者的问题。
  4. 大文件处理:tar 无单文件 4GB 的限制,支持超大文件、海量小文件的打包归档,是 Linux 系统备份、软件分发的首选格式。
  5. 安全提示:不要解压来源不明的 tar 包,部分恶意包会包含绝对路径文件,解压后直接覆盖系统文件,建议先使用 - t 选项查看包内结构,确认安全后再解压。

24. bc 指令

语法:bc [选项] [脚本文件]
功能:核心作用是 Linux 下的高精度计算器工具,支持整数、浮点数的算术运算、逻辑运算、函数运算,支持交互式计算和脚本批量计算,默认情况下:

  • 支持交互式模式,进入 bc 环境后可逐行输入表达式计算;
  • 默认整数精度,可通过 scale 参数设置小数位数,实现高精度浮点运算;
  • 兼容 C 语言的大部分运算符、语法,支持自定义函数、循环、条件判断。
基本用法:
  • 交互式计算(最常用)语法:直接输入 bc,进入交互式计算环境,输入表达式回车即可输出结果,输入 quit 退出。

    bc # 进入bc交互式环境

    进入后输入:

    1+2*3 # 输出7
    scale=2 # 设置小数精度为2位
    10/3 # 输出3.33
    quit # 退出bc环境

  • 非交互式单行计算通过管道传递表达式,直接输出计算结果,无需进入交互式环境,适合脚本中使用。

    echo "1+2*3" | bc # 直接输出计算结果7
    echo "scale=4; 10/3" | bc # 设置4位小数精度,输出3.3333

  • 执行 bc 计算脚本将多个计算表达式写入脚本文件,通过 bc 批量执行。

    编写calc.bc脚本,内容如下:

    scale=3

    a=10

    b=3

    a/b

    a*b

    bc calc.bc # 执行脚本,依次输出3.333、30

可跟选项:
选项 功能描述 使用提示
-l 启用数学库:加载高级数学函数库,同时默认设置 scale=20(20 位小数精度) 必须携带此选项才能使用 sin、cos、log、sqrt 等高级数学函数
-q 静默模式:启动时不输出 bc 的版本、版权等欢迎信息 最常用选项,避免冗余输出,脚本中必加
-i 强制交互式模式:即使输入来自文件 / 管道,也强制进入交互式环境 适合调试计算脚本
-w 警告模式:对不符合 POSIX 标准的语法给出警告提示 编写跨平台 bc 脚本时使用
核心内置功能与常用语法:
语法 / 函数 功能描述 示例
scale=N 设置小数精度,N 为保留的小数位数,默认 0(整数运算) scale=5; 1/2 输出 0.50000
+ - * / % ^ 算术运算符:加、减、乘、除、取余、幂运算 2^10 输出 1024
> < >= <= == != 比较运算符,返回 1(真)、0(假) 5>3 输出 1
&& || ! 逻辑运算符:与、或、非 1&&0 输出 0
sqrt(x) 计算 x 的平方根(需 - l 选项) echo "sqrt(16)" bc -l 输出 4
s(x) 计算 x 的正弦值(x 为弧度,需 - l 选项) echo "s(3.1415926/2)" bc -l 输出接近 1
c(x) 计算 x 的余弦值(x 为弧度,需 - l 选项) echo "c(0)" bc -l 输出 1
l(x) 计算 x 的自然对数(需 - l 选项) echo "l(2.71828)" bc -l 输出接近 1
e(x) 计算 e 的 x 次方(需 - l 选项) echo "e(1)" bc -l 输出 e 的近似值
常用选项组合:
复制代码
# 1. 静默高精度浮点计算,最常用的单行计算格式
echo "scale=6; 123.45 * 67.89 / 100" | bc -q

# 2. 高级数学函数计算,启用数学库
echo "scale=10; sqrt(2) + l(10)" | bc -lq

# 3. 进制转换:十进制转二进制
echo "obase=2; 100" | bc  # 输出1100100

# 4. 进制转换:十六进制转十进制
echo "obase=10; ibase=16; FF" | bc  # 输出255

# 5. shell脚本中获取计算结果
result=$(echo "scale=2; 100/3" | bc -q)
echo "计算结果为:$result"
注意事项:
  1. 小数精度问题:默认 scale=0,仅做整数运算,除法会直接舍弃小数部分,浮点计算必须先设置 scale 参数,或使用 - l 选项启用默认 20 位精度。
  2. 进制转换:ibase 设置输入数字的进制,obase 设置输出结果的进制,默认均为 10 进制;设置时需注意顺序,先设置 obase 再设置 ibase,避免进制混乱。
  3. 脚本兼容性:bc 支持条件判断(if)、循环(for/while)、自定义函数,可编写复杂的计算脚本,但不同平台的 bc 语法略有差异,跨平台使用建议遵循 POSIX 标准。
  4. 高精度优势:bc 支持任意精度的数值计算,不会出现 shell 算术运算的整数溢出问题,适合高精度的科学计算、财务计算场景。

二、查询软硬件相关指令

1. uname 指令(含 uname -r 核心用法)

语法:uname [选项]
功能:核心作用是查询系统内核、操作系统、硬件架构等核心信息,是 Linux 系统基础信息查询的核心命令,默认情况下:

  • 不带选项时仅输出操作系统内核名称(Linux);
  • 可通过不同选项,单独输出内核版本、硬件架构、主机名等细分信息;
  • 输出结果无冗余,适合脚本中获取系统信息做判断。
基本用法:

直接执行命令,输出对应维度的系统信息,支持多个选项组合使用。

复制代码
uname  # 不带选项,输出内核名称,默认输出Linux
uname -r  # 最常用,输出系统内核的发行版本号
uname -a  # 输出所有系统核心信息,包含内核、主机名、架构、编译时间等
可跟选项:
选项 功能描述 使用提示
-r 内核发行版本:输出系统内核的版本号(如 5.15.0-105-generic) 最核心常用选项,驱动安装、软件兼容性判断必用
-a 全部信息:输出所有系统核心信息,包含内核名称、主机名、内核版本、硬件架构、操作系统等 快速查看系统完整基础信息
-s 内核名称:输出操作系统内核名称,默认输出 Linux 脚本中判断操作系统类型
-v 内核编译版本:输出内核的编译时间、发行补丁版本等详细信息 内核定制、漏洞排查时使用
-m 硬件架构:输出系统的硬件架构(如 x86_64、arm64、aarch64) 软件安装时判断安装包对应架构,高频使用
-n 主机名:输出当前系统的主机名 等同于 hostname 命令,快速查看主机标识
-o 操作系统:输出操作系统名称,默认输出 GNU/Linux 跨平台脚本中判断系统类型
常用选项组合:
复制代码
# 1. 驱动安装必用:同时获取内核版本和硬件架构
uname -rm

# 2. 脚本中判断系统架构,执行对应安装逻辑
arch=$(uname -m)
if [ $arch == "x86_64" ];then
  echo "x86 64位系统"
elif [ $arch == "aarch64" ];then
  echo "ARM 64位系统"
fi

# 3. 快速获取系统核心标识信息
uname -snrvm
注意事项:
  1. 信息准确性:uname 输出的信息直接来自系统内核,无缓存,实时准确,不会出现配置文件修改导致的信息偏差。
  2. 跨平台兼容性:uname 是 POSIX 标准命令,所有 Unix/Linux 系统(包括 macOS)均支持,仅部分小众选项存在差异。
  3. 版本号解读:uname -r 输出的内核版本号,格式为 主版本。次版本。补丁版本 - 发行补丁,次版本偶数为稳定版,奇数为开发版。

2. free 指令

语法:free [选项]
功能:核心作用是查询系统内存的使用情况,包括物理内存、交换分区(Swap)、缓冲区、缓存的占用详情,默认情况下:

  • 不带选项时以 KB 为单位输出内存数据;
  • 实时读取系统 /proc/meminfo 文件,输出当前最新的内存占用状态;
  • 区分可用内存、已用内存、缓存、缓冲区,清晰展示内存分配详情。
基本用法:

直接执行命令,输出系统内存、Swap 分区的使用详情,通过选项调整输出单位和格式。

复制代码
free  # 不带选项,默认以KB为单位输出内存使用情况
free -h  # 最常用,以人类易读的单位(GB/MB)输出内存详情
可跟选项:
选项 功能描述 使用提示
-h 人类易读模式:自动适配 GB/MB/KB 单位,输出带单位的易读格式 最核心常用选项,手动查看内存必用
-b/-k/-m/-g 指定单位:分别以 Byte、KB、MB、GB 为单位输出内存数据 脚本中获取数值时使用,避免单位换算
-s 秒数 持续刷新:每隔指定秒数,自动刷新输出一次内存数据 实时监控内存变化,如 free -h -s 1 每秒刷新一次
-c 次数 刷新次数:配合 - s 使用,指定刷新的次数,完成后自动退出 free -h -s 2 -c 5 每 2 秒刷新一次,共刷新 5 次
-t 汇总行:在输出末尾添加一行物理内存 + Swap 的总合计值 快速查看系统总内存资源
-w 宽格式输出:将缓冲区(buffers)和缓存(cache)分开列示 更清晰区分两种不同类型的内存占用,新版 free 默认已分开
输出字段说明:
字段 含义说明
total 总内存 / 总 Swap 大小,系统物理内存总容量
used 已使用内存,包含应用程序、内核、缓存、缓冲区占用的总内存
free 完全空闲的内存,未被任何程序占用的内存
shared 共享内存,主要用于进程间通信的内存占用
buff/cache 缓冲区 + 页缓存,系统为提升 IO 性能占用的内存,可被应用程序回收使用
available 真正可用的内存,包含空闲内存 + 可回收的缓存 / 缓冲区,是判断系统剩余内存的核心指标
常用选项组合:
复制代码
# 1. 手动查看首选:易读格式,带合计行
free -ht

# 2. 实时监控内存:每秒刷新一次,持续输出内存变化
free -h -s 1

# 3. 脚本中获取可用内存大小(单位MB)
free_available=$(free -m | grep Mem | awk '{print $7}')
echo "系统可用内存:${free_available}MB"

# 4. 一次性获取GB单位的内存详情
free -g
注意事项:
  1. 可用内存判断:Linux 系统会利用空闲内存做缓存提升性能,因此 free 值低不代表内存不足,核心看 available 值,available 值充足说明系统内存资源充足。
  2. Swap 分区说明:Swap 是硬盘上的交换分区,当物理内存不足时,系统会将不常用的内存数据置换到 Swap 中,Swap 占用过高会导致系统卡顿,建议物理内存充足时优化 Swap 使用阈值。
  3. 数据实时性:free 命令的数据直接来自 /proc/meminfo,是实时的内核数据,无延迟,可准确反映当前内存状态。
  4. 权限问题:free 命令无需 root 权限,普通用户即可正常执行,查看系统内存信息。

3. df 指令

语法:df [选项] [挂载点 / 设备路径]
功能:核心作用是查询文件系统的磁盘空间占用情况,包括磁盘总容量、已用容量、可用容量、使用率、挂载点等信息,默认情况下:

  • 不带选项时以 1KB 块为单位,输出所有已挂载文件系统的磁盘使用情况;
  • 可指定挂载点 / 设备,单独查询对应磁盘的占用详情;
  • 支持查看 inode 使用情况,排查磁盘满但容量充足的 inode 耗尽问题。
基本用法:

直接执行命令,输出磁盘使用详情,通过选项调整输出单位、过滤内容。

复制代码
df  # 不带选项,默认以KB为单位输出所有已挂载文件系统的磁盘信息
df -h  # 最常用,以人类易读的单位(GB/MB)输出磁盘占用详情
df -h /  # 单独查询根目录所在磁盘的使用情况
可跟选项:
选项 功能描述 使用提示
-h 人类易读模式:自动适配 GB/MB/KB 单位,输出带单位的易读格式 最核心常用选项,手动查看磁盘占用必用
-H 十进制易读模式:以 1000 为进制换算单位(而非 1024),适配硬盘厂商标注容量 对比硬盘标称容量时使用
-T 显示文件系统类型:额外输出每一个挂载点的文件系统格式(如 ext4、xfs、tmpfs) 排查文件系统兼容性、挂载问题时使用
-t 文件系统类型 过滤显示:仅输出指定类型的文件系统信息 df -ht ext4 仅显示 ext4 格式的磁盘
-x 文件系统类型 排除显示:排除指定类型的文件系统,不输出相关信息 df -hx tmpfs 排除临时文件系统,只看真实磁盘
-i 查看 inode 使用情况:输出 inode 的总量、已用、可用、使用率 排查 "磁盘提示满,但 df -h 看容量充足" 的 inode 耗尽问题
--total 汇总行:在输出末尾添加所有磁盘的总容量合计行 快速查看服务器整体磁盘资源
输出字段说明:
字段 含义说明
Filesystem 磁盘设备 / 文件系统名称,对应的磁盘分区或逻辑卷
Type 文件系统类型(-T 选项才会显示),如 ext4、xfs、vfat 等
Size 磁盘分区的总容量
Used 已使用的磁盘容量
Avail 可用的磁盘容量,普通用户可使用的剩余空间
Use% 磁盘空间使用率,核心监控指标,通常超过 85% 需预警
Mounted on 磁盘分区的挂载点,即该磁盘在系统中的访问路径
常用选项组合:
复制代码
# 1. 手动查看首选:易读格式,显示文件系统类型,排除临时文件系统
df -hT -x tmpfs -x devtmpfs

# 2. 查看根目录所在磁盘的详细使用情况
df -h /

# 3. 排查inode耗尽问题,查看所有磁盘inode使用率
df -hi

# 4. 查看所有ext4/xfs格式的磁盘,带合计行
df -ht ext4,xfs --total

# 5. 脚本中获取根目录磁盘使用率
root_use=$(df -h / | grep / | awk '{print $5}' | sed 's/%//g')
echo "根目录磁盘使用率:${root_use}%"
注意事项:
  1. 磁盘满的两种场景:一种是磁盘容量(block)耗尽,df -h 看 Use% 100%;另一种是 inode 耗尽,df -i 看 IUse% 100%,通常是海量小文件导致,需针对性排查。
  2. 可用空间差异:Avail 值不等于 Size-Used,因为系统默认会为 root 用户预留 5% 的磁盘空间,用于系统紧急维护,普通用户无法使用这部分预留空间。
  3. 虚拟文件系统:tmpfs、devtmpfs 等是内存中的虚拟文件系统,不占用真实磁盘空间,查看物理磁盘时建议用 - x 选项排除,避免干扰判断。
  4. 权限问题:df 命令无需 root 权限,普通用户即可正常执行,查看所有已挂载的磁盘信息。

4. lscpu 指令

语法:lscpu [选项]
功能:核心作用是查询 CPU 的详细硬件信息,包括 CPU 架构、核心数、线程数、主频、缓存、NUMA 节点、支持的指令集等,默认情况下:

  • 直接执行输出格式化的 CPU 完整信息,分类清晰,易读性强;
  • 信息直接读取系统 /sys/devices/system/cpu/ 和 /proc/cpuinfo,数据准确无延迟;
  • 无需 root 权限,普通用户即可执行,是 Linux 服务器 CPU 信息查询的首选命令。
基本用法:

直接执行命令,输出 CPU 的完整详细信息,通过选项过滤、格式化输出内容。

复制代码
lscpu  # 不带选项,输出CPU的完整分类信息
lscpu | grep "CPU(s)"  # 过滤查看CPU核心/线程数相关信息
核心输出字段说明(高频关注项):
字段 含义说明
Architecture CPU 架构,如 x86_64、aarch64、armv7l 等
CPU(s) 总逻辑 CPU 数(总线程数),即超线程后的总线程数量
Thread(s) per core 每个核心的线程数,1 代表不支持超线程,2 代表开启超线程
Core(s) per socket 每个 CPU 插槽的物理核心数
Socket(s) CPU 插槽数,即服务器物理 CPU 的个数
NUMA node(s) NUMA 节点数,多 CPU 服务器的 NUMA 架构节点数量
CPU MHz CPU 当前主频
CPU max MHz CPU 支持的最大主频
CPU min MHz CPU 支持的最小主频
L1d/L1i cache CPU 一级数据缓存、一级指令缓存大小
L2 cache CPU 二级缓存大小
L3 cache CPU 三级缓存大小
Flags CPU 支持的指令集,如 vmx(虚拟化)、sse4.2、avx2、aes 等
Virtualization CPU 支持的虚拟化技术,如 VT-x、AMD-V
可跟选项:
选项 功能描述 使用提示
-p 可解析格式输出:以冒号分隔的格式输出 CPU 信息,适合脚本解析 脚本中提取 CPU 核心、NUMA 节点信息时使用
-e 扩展格式输出:以表格形式输出每个逻辑 CPU 的详细信息,包括核心、插槽、NUMA 节点 查看每个 CPU 核心的详细归属、绑定信息
-s 目录路径 指定系统根目录:用于查看虚拟机、chroot 环境中的 CPU 信息 系统运维、容器排查时使用
-x 显示十六进制的 CPU 掩码信息 高级 CPU 绑定、性能调优时使用
-y 显示物理 CPU 的拓扑结构信息 多 CPU 服务器 NUMA 架构、核心拓扑排查时使用
常用选项组合:
复制代码
# 1. 快速查看CPU核心配置:物理CPU数、每个CPU核心数、总线程数
lscpu | grep -E "Socket|Core|CPU\(s\)" | head -4

# 2. 查看CPU缓存详情
lscpu | grep -E "L1|L2|L3"

# 3. 查看CPU支持的虚拟化技术
lscpu | grep -i virtualization

# 4. 以表格形式查看每个逻辑CPU的核心、NUMA节点归属
lscpu -e

# 5. 脚本中获取总逻辑CPU数
cpu_total=$(lscpu | grep "^CPU(s):" | awk '{print $2}')
echo "系统总CPU线程数:${cpu_total}"
注意事项:
  1. 物理核心与逻辑线程区分:总逻辑 CPU 数 = 插槽数 × 每个插槽核心数 × 每个核心线程数,超线程开启后,1 个物理核心对应 2 个逻辑线程,性能调优、程序绑核时需区分物理核心与逻辑线程。
  2. 指令集查看:Flags 字段的指令集信息,决定了 CPU 是否支持虚拟化、加密加速、高性能计算等特性,如 vmx/svm 指令集是开启 KVM 虚拟化的前提。
  3. 跨平台兼容性:lscpu 是 util-linux 包中的命令,绝大多数 Linux 发行版默认预装,嵌入式系统、极简发行版可能需要手动安装 util-linux。
  4. 权限问题:lscpu 命令无需 root 权限,普通用户即可正常执行,查看完整的 CPU 硬件信息。

三、时间相关指令

1. date 指令

语法:date [选项] [+ 输出格式]
功能:核心作用是查看或修改系统的日期与时间,支持自定义格式输出时间、时间戳转换、设置系统时间,是 Linux 系统时间管理的核心命令,默认情况下:

  • 不带选项时,输出系统当前的本地时间(包含星期、月份、日期、时间、时区、年份);
  • 支持格式化输出,可自定义时间的显示格式,提取年、月、日、时、分、秒、时间戳等细分字段;
  • 可配合选项修改系统时间,需 root 权限。
基本用法:
  • 查看当前时间语法:date [+ 输出格式]直接执行输出当前系统时间,通过格式符自定义输出内容。

    date # 不带选项,输出系统当前完整本地时间,如:Mon Mar 10 10:20:30 CST 2025
    date +"%Y-%m-%d %H:%M:%S" # 最常用,输出格式化的年-月-日 时:分:秒,如:2025-03-10 10:20:30

  • 时间戳转换

    1. 查看当前时间的秒级时间戳(Unix时间戳,从1970-01-01 00:00:00 UTC到现在的秒数)

    date +%s

    2. 时间戳转日期时间:将指定秒级时间戳转换为可读格式

    date -d @1741573230 # 输出时间戳对应的本地时间
    date -d @1741573230 +"%Y-%m-%d %H:%M:%S" # 格式化输出时间戳对应的时间

  • 查看相对时间

    date -d "3 days ago" # 查看3天前的时间
    date -d "next Monday" # 查看下周一的日期
    date -d "1 month ago" +"%Y-%m-%d" # 查看1个月前的日期,格式化输出

  • 修改系统时间(需 root 权限)

    格式:date -s "年-月-日 时:分:秒"

    sudo date -s "2025-03-10 10:30:00" # 将系统时间设置为指定的日期时间
    sudo date -s "10:30:00" # 仅修改时间,日期保持不变

常用格式符说明:
格式符 功能描述 输出示例
%Y 4 位完整年份 2025
%y 2 位年份 25
%m 2 位月份(01-12) 03
%d 2 位日期(01-31) 10
%H 24 小时制的小时(00-23) 14
%I 12 小时制的小时(01-12) 02
%M 2 位分钟(00-59) 20
%S 2 位秒数(00-59) 30
%s 秒级 Unix 时间戳 1741573230
%A 完整星期名称 Monday
%a 缩写星期名称 Mon
%B 完整月份名称 March
%b 缩写月份名称 Mar
%Z 系统时区 CST
%j 当年的第几天(001-366) 069
%w 星期几(0 = 周日,6 = 周六) 1
可跟选项:
选项 功能描述 使用提示
-d 时间字符串 显示指定的时间,而非当前时间,支持相对时间、时间戳转换 最核心常用选项,时间转换、相对时间计算必用
-s 时间字符串 设置系统时间,将系统时间修改为指定的时间 需 root 权限,修改后建议同步硬件时钟,避免重启后失效
-R 输出 RFC 2822 格式的时间 邮件、日志等场景的标准时间格式
-I 输出 ISO 8601 格式的日期 如 2025-03-10,标准化日期输出
-u 输出 UTC 世界标准时间,而非本地时区时间 跨时区服务、日志统一时间戳时使用
-r 文件路径 输出指定文件的最后修改时间 查看文件更新时间,替代 ls -l 的简化用法
常用选项组合:
复制代码
# 1. 日志文件名高频用法:生成格式化的当前日期,用于日志、备份文件名
date +"%Y%m%d"  # 输出20250310
backup_file="data_backup_$(date +%Y%m%d).tar.gz"

# 2. 脚本中获取当前完整格式化时间
current_time=$(date +"%Y-%m-%d %H:%M:%S")
echo "脚本执行时间:${current_time}"

# 3. 时间格式转换:将指定日期转换为时间戳
date -d "2025-03-10 10:30:00" +%s

# 4. 查看UTC标准时间,格式化输出
date -u +"%Y-%m-%d %H:%M:%S"

# 5. 查看指定文件的最后修改时间,格式化输出
date -r /etc/passwd +"%Y-%m-%d %H:%M:%S"
严禁执行的操作:
复制代码
# 严禁在生产服务器随意修改系统时间,尤其是往回修改时间
# 错误示例:sudo date -s "2020-01-01"
# 会导致日志、数据库、定时任务、证书验证等大量服务异常,甚至业务崩溃
注意事项:
  1. 系统时间与硬件时钟:date 修改的是系统时间(内核维护的软件时间),服务器重启后会读取硬件时钟(BIOS 时间),修改系统时间后,建议执行 sudo hwclock -w 将系统时间同步到硬件时钟,避免重启失效。
  2. 时区问题:date 默认输出本地时区时间,国内服务器默认是 CST(东八区),跨时区业务建议统一使用 UTC 时间,避免时区混乱。
  3. 时间同步:生产服务器建议配置 NTP 时间同步服务,自动校准系统时间,避免手动修改时间导致的业务异常,手动修改时间仅适用于测试环境、无网络环境。
  4. 时间戳范围:date 支持的 Unix 时间戳为 32 位和 64 位,64 位系统无 2038 年问题,可正常转换远期时间。
  5. 权限问题:查看时间无需 root 权限,修改系统时间、同步硬件时钟必须使用 root 权限(sudo)。

2. cal 指令

语法:cal [选项] [月份] [年份]
功能:核心作用是在终端中输出日历,支持查看当月、指定月份、指定年份的日历,默认情况下:

  • 不带选项和参数时,输出当前月份的日历,高亮显示当天日期;
  • 支持指定月份和年份,查看对应时间的日历;
  • 支持查看全年日历、指定年份的日历,是 Linux 终端快速查看日历的便捷工具。
基本用法:
  • 查看当前月份日历语法:cal直接执行,输出当前月份的日历,高亮显示当天日期。

    cal # 不带参数,输出当前月份的日历

  • 查看指定年份的全年日历

    cal 2025 # 输出2025年全年的日历
    cal 2026 # 输出2026年全年的日历

  • 查看指定月份的日历语法:cal [月份] [年份]月份为 1-12 的数字,年份为 4 位完整年份,必须同时指定月份和年份。

    cal 3 2025 # 输出2025年3月的日历
    cal 10 2026 # 输出2026年10月的日历

可跟选项:
选项 功能描述 使用提示
-1 仅显示当前月份的日历(默认行为) 无特殊需求可省略,默认就是单月显示
-3 显示前一个月、当前月、后一个月,三个月的日历 快速查看相邻月份的日期,高频常用选项
-y 显示当前年份的全年日历 等同于 cal 当前年份,快速查看全年日历
-j 儒略日格式:显示日期为当年的第几天(1-366),而非当月的日期 计算日期间隔、日志排查时使用
-m 周一作为每周的第一天 默认日历周日为每周第一天,此选项适配国内习惯,周一开头
-s 周日作为每周的第一天(默认行为) 恢复默认的日历显示格式
-w 在每周的行首显示该周是当年的第几周 周度统计、项目排期时使用
常用选项组合:
复制代码
# 1. 国内用户首选:当前月份日历,周一为每周第一天,显示周数
cal -mw

# 2. 查看相邻三个月日历,周一为每周第一天
cal -3m

# 3. 查看当前年份全年日历,周一为每周第一天
cal -ym

# 4. 查看指定月份的儒略日格式,计算日期间隔
cal -j 3 2025

# 5. 查看2025年全年日历,带周数,周一开头
cal -ymw 2025
注意事项:
  1. 日期格式适配:国内用户习惯周一作为一周的第一天,建议固定搭配 - m 选项使用,符合日常日历查看习惯。
  2. 年份参数规范:cal 命令的年份必须输入 4 位完整年份,输入 2 位数字(如 cal 3 25)会被识别为公元 25 年,而非 2025 年,务必注意。
  3. 跨平台兼容性:cal 是 POSIX 标准命令,所有 Linux 发行版、macOS、Unix 系统均默认预装,无需额外安装。
  4. 高亮显示:终端中 cal 命令会默认高亮显示当天的日期,部分极简终端、远程终端可能不支持高亮,会以下划线、反白等方式标注。
  5. 权限问题:cal 命令无需 root 权限,普通用户即可正常执行,所有功能均无权限限制。

四、常用热键

Linux 终端(Bash/Zsh Shell)的常用快捷键,用于提升命令行操作效率,分为光标移动、文本编辑、命令控制、历史命令四大类,默认情况下:

  • 所有热键均在终端命令行界面生效,无需额外安装工具;
  • 热键不区分大小写,Ctrl 组合键按下 Ctrl + 对应字母即可触发;
  • 适用于绝大多数 Linux 发行版的默认 Shell 环境,跨平台兼容性强。

一、光标移动类热键

热键 功能描述 使用场景
Ctrl + a 光标快速移动到当前命令行的行首 命令很长,需要修改开头的参数 / 命令时,一键到行首
Ctrl + e 光标快速移动到当前命令行的行尾 命令很长,需要在末尾添加参数时,一键到行尾
Ctrl + b 光标向左移动一个字符(等同于左方向键) 微调光标位置,修改单个字符
Ctrl + f 光标向右移动一个字符(等同于右方向键) 微调光标位置,修改单个字符
Alt + b 光标向左移动一个单词(以空格 / 符号分隔) 快速跳过单词,修改命令中间的参数
Alt + f 光标向右移动一个单词(以空格 / 符号分隔) 快速跳过单词,在命令中间添加参数

二、文本编辑类热键

热键 功能描述 使用场景
Ctrl + u 删除光标位置到行首的所有内容 命令输入错误,一键清空行首到光标处的内容,重新输入
Ctrl + k 删除光标位置到行尾的所有内容 保留行首的命令,一键删除后面的所有参数,重新填写
Ctrl + w 删除光标左侧的一个单词(以空格分隔) 输错了最后一个参数,一键删除,重新输入
Alt + d 删除光标右侧的一个单词 删除光标后面的错误参数,无需反复按删除键
Ctrl + d 删除光标当前位置的单个字符(等同于 Delete 键) 光标在字符前方时,删除该字符
Ctrl + h 删除光标左侧的单个字符(等同于 Backspace 键) 退格删除,部分无退格键的终端使用
Ctrl + y 粘贴之前通过 Ctrl+u/Ctrl+k/Ctrl+w 删除的内容 误删内容后一键恢复,或复制删除的内容到其他位置
Ctrl + t 交换光标当前位置和前一个位置的字符 输错两个字符的顺序,一键交换,无需删除重输
Alt + t 交换光标当前位置和前一个位置的单词 输错两个参数的顺序,一键交换
Alt + . 粘贴上一条命令的最后一个参数 连续多条命令使用同一个文件 / 路径,一键复用,无需重复输入

三、命令控制类热键

热键 功能描述 使用场景
Ctrl + c 强制终止当前正在前台运行的命令 / 进程,中断执行 命令卡死、执行时间过长、输入错误命令执行时,一键终止
Ctrl + z 暂停当前正在前台运行的进程,将其放到后台挂起 进程运行中,需要临时回到终端操作,后续可通过 fg/bg 恢复进程
Ctrl + d 退出当前 Shell 终端 / 登录会话,等同于 exit 命令 结束终端会话、退出 SSH 登录、退出 Python/MySQL 等交互式环境
Ctrl + l 清空终端屏幕,等同于 clear 命令 终端输出内容太多,一键清屏,保持界面整洁
Ctrl + s 锁定终端屏幕,暂停屏幕输出 终端输出内容过快,暂停输出查看内容
Ctrl + q 解锁终端屏幕,恢复屏幕输出 解除 Ctrl+s 的锁定,继续正常输出
Tab 命令 / 路径 / 文件名自动补全 最核心常用热键,输入命令、路径、文件名的前几个字符,按 Tab 自动补全,按两次 Tab 列出所有匹配项,大幅提升输入效率,避免输错

四、历史命令类热键

热键 功能描述 使用场景
Ctrl + p 向上切换历史命令(等同于上方向键) 查看上一条执行过的命令
Ctrl + n 向下切换历史命令(等同于下方向键) 查看下一条执行过的命令
Ctrl + r 反向搜索历史命令,进入搜索模式后,输入关键词,自动匹配包含该关键词的历史命令 执行过的长命令,无需翻找,输入关键词一键搜索复用,高频常用
Ctrl + g 退出 Ctrl+r 的历史命令搜索模式,回到正常命令行 搜索不到目标命令,退出搜索模式
!! 执行上一条命令(两个感叹号,回车执行) 上一条命令权限不足,直接执行 sudo !! 即可用 root 权限重新执行上一条命令,高频常用
! 关键词 执行最近一条以指定关键词开头的历史命令 如!ssh,执行最近一条以 ssh 开头的命令,快速复用

注意事项:

  1. 热键优先级:终端热键的优先级高于运行中的程序,例如 Ctrl+c 会优先被 Shell 捕获,终止前台进程,除非程序单独设置了信号捕获。
  2. 兼容性说明:Alt 组合键在部分远程终端工具(如 Xshell、Putty)中可能需要单独配置,部分工具默认将 Alt 键作为菜单快捷键,可修改终端配置启用 Alt 组合键。
  3. 安全提示:Ctrl+c 仅能终止前台进程,后台运行的进程无法通过此热键终止,需使用 kill 命令终止。
  4. 效率核心:Tab 自动补全、Ctrl+r 历史搜索、Ctrl+a/Ctrl+e 行首行尾跳转、Ctrl+c 终止命令,是 Linux 终端最高频的 5 个热键,熟练掌握可大幅提升命令行操作效率。

感谢阅读,本文如有错漏之处,烦请各位斧正。

相关推荐
c++之路2 小时前
Linux进程池与线程池深度解析:设计原理+实战实现(网盘项目架构)
java·linux·架构
Irissgwe2 小时前
Ext系列⽂件系统
linux·服务器·ext系统文件
蜜獾云2 小时前
从linux内核理解Java怎样实现Socket通信
java·linux·运维
小鹿软件办公3 小时前
谷歌将在2026年第二季度为ARM64 Linux设备推出Chrome
linux·chrome
被遗忘的旋律.3 小时前
Linux驱动开发笔记(二十六)——PWM(SG90驱动)
linux·驱动开发·笔记
赵民勇3 小时前
gtk-update-icon-cache用法技巧总结
linux
wefg13 小时前
【Linux】线程同步与互斥 - 2(线程同步/条件变量/基于阻塞/环形队列的cp模型/线程池/线程安全/读写锁)
linux·开发语言
小生不才yz3 小时前
【Makefile 专家之路 | 基础篇】02. 初试锋芒:编写第一个 Makefile 与运行机制深度剖析
linux
Xu_youyaxianshen3 小时前
[特殊字符] Docker 小白极速入门笔记
linux·docker