学习目标

  • 理解本节涉及的核心主题:Linux 基本命令、文件内容查看、less - 分页查看文件内容、more - 分页查看文件内容。
  • 掌握重点命令或工具:lessmoreheadtailfindlocate
  • 能够结合示例完成常见操作,并理解关键参数、使用场景与结果差异。
  • 能够识别本节相关的常见风险、易错点或排查思路。

学习重点

  • 主题范围:Linux 基本命令、文件内容查看、less - 分页查看文件内容、more - 分页查看文件内容、head - 查看文件开头部分、tail - 查看文件末尾部分
  • 重点命令:lessmoreheadtailfindlocate
  • 学习重点:命令用途、关键参数、典型场景、与相近命令的区别
  • 复习方式:先理解场景,再动手练习,最后对照结果检查

Linux 基本命令

文件内容查看

less - 分页查看文件内容

less 是一个功能强大的分页查看工具,允许用户在查看大型文件时进行高效的导航和搜索。

基本用法

命令:

less example.txt

操作说明:

打开 example.txt 后,可以使用以下键盘命令进行导航:

  • 向前翻页:按 f 或空格键
  • 向后翻页:按 b
  • 向下滚动一行:按 j 或向下箭头
  • 向上滚动一行:按 k 或向上箭头
  • 跳转到文件开头:按 g
  • 跳转到文件结尾:按 G
  • 退出 less:按 q
常用命令与导航

示例操作:

  1. 向前翻页:
    按空格键查看下一页内容。
  2. 向后翻页:
    b 返回上一页内容。
  3. 跳转到文件结尾:
    G 直接跳到最后一行。
  4. 跳转到文件开头:
    g 跳回第一行。
搜索与标记

搜索内容:

  • 正向搜索:按 /,输入关键词 Error,然后按回车。

    /Error
    

    这将跳转到第一个包含 "Error" 的行(如 Line 2)。

  • 反向搜索:按 ?,输入关键词 User,然后按回车。

    ?User
    

    这将向上搜索包含 "User" 的行。

标记位置:

  • 设置标记:按 m 然后按字母 a,设置标记 a 在当前行。
    m a
    
  • 跳转到标记:按 ``` 然后按字母 a,跳转到标记 a 所在行。
    ` a
    

more - 分页查看文件内容

more 是早期的分页查看工具,虽然功能不如 less 强大,但在某些系统中仍然广泛使用。

基本用法

命令:

more example.txt

操作说明:

打开 example.txt 后,可以使用以下键盘命令进行导航:

  • 向前翻页:按空格键
  • 向下滚动一行:按 Enter
  • 退出 more:按 q
less 的区别
  • 功能性less 提供更丰富的导航和搜索功能,而 more 功能相对有限。
  • 双向导航less 支持向前和向后翻页,而 more 在某些实现中只支持向前翻页。
  • 资源消耗more 通常比 less 更轻量,但现代系统中差异不大。

示例对比:

使用 more 查看 example.txt

more example.txt

操作体验:

  • 只能向前翻页,无法像 less 一样向后翻页。
  • 不支持高级搜索和标记功能。

相比之下,使用 less 提供了更灵活的浏览体验。

head - 查看文件开头部分

head 命令用于显示文件的开头部分内容,常用于快速查看文件的前几行。

基本用法

命令:

head example.txt

输出:

Line 1: This is the first line of the example file.
Line 2: Error: Failed to connect to the database.
Line 3: User 'alice' logged in.
Line 4: Warning: Disk space running low.
Line 5: User 'bob' logged out.
Line 6: Error: Unable to open file.
Line 7: System update completed successfully.
Line 8: User 'charlie' uploaded a file.
Line 9: Error: Null pointer exception.
Line 10: User 'dave' changed password.

注意: 默认情况下,head 显示前 10 行。如果 example.txt 仅有 10 行,则显示全部内容。

显示指定行数(-n 选项)

命令:

head -n 5 example.txt

输出:

Line 1: This is the first line of the example file.
Line 2: Error: Failed to connect to the database.
Line 3: User 'alice' logged in.
Line 4: Warning: Disk space running low.
Line 5: User 'bob' logged out.
应用实例

查看日志文件的前 20 行:

假设有一个更长的日志文件 syslog.log,查看其前 20 行:

head -n 20 /var/log/syslog.log

结合其他命令使用:

显示当前系统中前 5 个进程的信息:

ps aux | head -n 5

输出示例:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1  22500  4100 ?        Ss   10:00   0:01 /sbin/init
root         2  0.0  0.0      0     0 ?        S    10:00   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        I<   10:00   0:00 [rcu_gp]
root         4  0.0  0.0      0     0 ?        I<   10:00   0:00 [rcu_par_gp]
root         5  0.0  0.0      0     0 ?        I<   10:00   0:00 [kworker/0:0H-events_highpri]

tail - 查看文件末尾部分

tail 命令用于显示文件的末尾部分内容,常用于监控日志文件的最新更新。

基本用法

命令:

tail example.txt

输出:

Line 1: This is the first line of the example file.
Line 2: Error: Failed to connect to the database.
Line 3: User 'alice' logged in.
Line 4: Warning: Disk space running low.
Line 5: User 'bob' logged out.
Line 6: Error: Unable to open file.
Line 7: System update completed successfully.
Line 8: User 'charlie' uploaded a file.
Line 9: Error: Null pointer exception.
Line 10: User 'dave' changed password.

注意: 默认情况下,tail 显示最后 10 行。如果 example.txt 仅有 10 行,则显示全部内容。

实时监控文件(-f 选项)

命令:

tail -f example.txt

操作说明:

该命令会持续监控 example.txt 文件的新增内容,并实时显示在终端。适用于实时查看日志文件的更新。

示例操作:

  1. 打开一个终端窗口,运行:
    tail -f example.txt
    
  2. 在另一个终端窗口,向 example.txt 添加新内容:
    echo "Line 11: User 'eve' logged in." >> example.txt
    
  3. 第一个终端窗口会实时显示新添加的行:
    Line 11: User 'eve' logged in.
    
应用实例

监控应用程序日志:

tail -f /var/log/myapp/application.log

实时查看 application.log 文件的最新活动,方便调试和监控。

查看文件的最后几字节:

使用 -c 选项显示文件的最后指定字节数。

命令:

tail -c 50 example.txt

输出:

Line 6: Error: Unable to open file.
Line 7: System update completed successfully.
Line 8: User 'charlie' uploaded a file.
Line 9: Error: Null pointer exception.
Line 10: User 'dave' changed password.

总结

掌握文件内容查看命令是高效进行系统管理和日常操作的基础。以下是基于 example.txt 文件的具体应用总结:

  • cat:适用于简单的文件显示和合并操作。
    • 显示整个文件内容:
      cat example.txt
      
    • 连接多个文件:
      cat example.txt additional.txt
      
    • 创建新文件:
      cat > newfile.txt
      
  • less:提供更强大的分页查看功能,支持双向导航和高级搜索。
    • 分页查看文件:
      less example.txt
      
    • 搜索特定内容:
      /Error
      
    • 设置和跳转标记:
      m a
      `a
      
  • more:适合进行简单的分页查看,功能较 less 略为有限。
    • 分页查看文件:
      more example.txt
      
  • head:便于快速查看文件的开头内容,尤其适用于日志文件的初始部分。
    • 查看前 5 行:
      head -n 5 example.txt
      
    • 查看前 20 行系统日志:
      head -n 20 /var/log/syslog.log
      
  • tail:用于查看文件的末尾内容,尤其是实时监控日志文件的最新更新。
    • 查看最后 10 行:
      tail example.txt
      
    • 实时监控文件更新:
      tail -f example.txt
      
    • 查看最后 50 个字节:
      tail -c 50 example.txt
      

查找与搜索

在日常的系统管理和文件处理过程中,查找和搜索文件是非常常见且必要的操作。Unix/Linux 提供了多种强大的命令来高效地完成这些任务,如 findlocategrep。为了更直观地理解这些命令的使用,假设我们有以下的目录结构和文件内容:

假设的目录结构

/home/user/
├── documents/
│   ├── report.docx
│   ├── summary.txt
│   ├── data.csv
│   └── old_reports/
│       ├── report_2020.docx
│       └── report_2021.docx
├── downloads/
│   ├── setup.exe
│   ├── movie.mkv
│   └── archive.zip
├── projects/
│   ├── project_alpha/
│   │   ├── main.py
│   │   ├── utils.py
│   │   └── README.md
│   └── project_beta/
│       ├── app.js
│       ├── index.html
│       └── styles.css
└── logs/
    ├── system.log
    ├── error.log
    └── access.log

find - 在目录中查找文件

find 是一个功能强大的命令,用于在目录层次结构中查找符合特定条件的文件或目录。它支持按名称、类型、大小、时间等多种条件进行查找,并且可以对找到的文件执行指定的操作。

基本用法

命令语法:

find [搜索路径] [条件] [操作]

示例:

/home/user/documents 目录中查找所有文件:

find /home/user/documents

输出:

/home/user/documents
/home/user/documents/report.docx
/home/user/documents/summary.txt
/home/user/documents/data.csv
/home/user/documents/old_reports
/home/user/documents/old_reports/report_2020.docx
/home/user/documents/old_reports/report_2021.docx
按名称查找

使用 -name 选项按文件名查找。

示例 1:查找名为 report.docx 的文件

find /home/user/documents -name "report.docx"

输出:

/home/user/documents/report.docx

示例 2:查找所有以 .txt 结尾的文件

find /home/user/documents -name "*.txt"

输出:

/home/user/documents/summary.txt
按类型查找

使用 -type 选项按文件类型查找。

  • f:普通文件
  • d:目录
  • l:符号链接

示例:查找所有目录

find /home/user -type d

输出:

/home/user
/home/user/documents
/home/user/documents/old_reports
/home/user/downloads
/home/user/projects
/home/user/projects/project_alpha
/home/user/projects/project_beta
/home/user/logs
按大小查找

使用 -size 选项按文件大小查找。

单位说明:

  • c:字节
  • k:千字节
  • M:兆字节
  • G:千兆字节

示例:查找大于 1MB 的文件

find /home/user/downloads -type f -size +1M

输出:

/home/user/downloads/movie.mkv
/home/user/downloads/archive.zip
按时间查找(-mtime, -ctime 选项)
  • -mtime:按修改时间查找(以天为单位)
  • -ctime:按状态更改时间查找(以天为单位)

示例:查找过去 7 天内修改过的文件

find /home/user/documents -type f -mtime -7

输出:

/home/user/documents/summary.txt
/home/user/documents/data.csv
/home/user/documents/report.docx
执行动作(如删除、移动,-exec 选项)

-exec 选项允许对找到的每一个文件执行指定的命令。

示例:删除所有 .tmp 文件

假设 /home/user/projects/project_alpha 目录中有一些临时文件:

/home/user/projects/project_alpha/temp1.tmp
/home/user/projects/project_alpha/temp2.tmp

命令:

find /home/user/projects/project_alpha -type f -name "*.tmp" -exec rm {} \;

说明:

  • {}:代表当前找到的文件
  • \;:结束 -exec 命令

操作结果:

临时文件 temp1.tmptemp2.tmp 被删除。

示例:将所有 .log 文件移动到 /home/user/logs 目录

find /home/user/documents -type f -name "*.log" -exec mv {} /home/user/logs/ \;

locate - 快速查找文件

locate 是一个基于预建数据库的快速文件查找工具,适用于需要快速查找文件路径的场景。相比 findlocate 查找速度更快,但依赖于数据库的更新。

基本用法

命令语法:

locate [选项] 文件名

示例:查找所有包含 report 的文件

locate report

输出:

/home/user/documents/report.docx
/home/user/documents/old_reports/report_2020.docx
/home/user/documents/old_reports/report_2021.docx
更新数据库(updatedb 命令)

locate 使用的数据库需要定期更新,以确保查找结果的准确性。可以使用 updatedb 命令手动更新数据库。

命令:

sudo updatedb

说明:

  • updatedb 需要超级用户权限,因此使用 sudo
  • 此命令会扫描系统中的文件并更新数据库。
使用场景与限制

使用场景:

  • 需要快速查找文件路径时,例如查找某个配置文件或文档的位置。
  • 系统启动时自动更新数据库,用户可以即时使用 locate 查找文件。

限制:

  • locate 的查找结果依赖于数据库的更新,如果数据库未及时更新,可能找不到新创建的文件或包含已删除文件。
  • 默认情况下,locate 不显示权限受限的文件,除非以超级用户身份运行。

示例:查找所有 .md 文件

locate "*.md"

输出:

/home/user/projects/project_alpha/README.md

本节总结

  • 本节主要围绕 Linux 基本命令、文件内容查看、less - 分页查看文件内容、more - 分页查看文件内容、head - 查看文件开头部分 展开。
  • 需要重点掌握的命令或工具包括:lessmoreheadtailfindlocate
  • 学习时应优先抓住「命令解决什么问题、在什么场景下使用、执行后会产生什么结果」。
  • 对涉及权限、覆盖、网络、系统服务、删除或安全配置的操作,建议先在测试环境练习。

复习建议

  • 先用自己的话复述本节每个主题或命令的作用,避免只记参数不懂用途。
  • 按原文示例至少手敲一遍典型命令,并观察输出变化。
  • 对高风险操作先确认路径、权限和目标对象,再执行实际命令。
  • 可优先复习这些高频命令:lessmoreheadtailfindlocate