Linux: 基本指令知识点(3)

1. Linux核心哲学:"一切皆文件"

  1. 核心理念 :在Linux系统中,硬件设备、输入输出、乃至操作系统提供的功能,其访问接口大多被抽象为文件。这是理解后续所有操作的基础。

  2. 应用实例printf/cout(输出到显示器)、scanf/cin(从键盘输入),其本质都是文件操作

  3. 标准流文件:系统默认会为每个进程打开三个"文件"(流):

    • stdin (标准输入):对应键盘,文件描述符为0

    • stdout (标准输出):对应显示器,文件描述符为1

    • stderr (标准错误):对应显示器,文件描述符为2

    思考:为什么系统要帮我们打开这三个文件?为了方便程序进行最基础的输入输出交互。

2. 文件重定向操作

核心思想:改变默认的输入/输出"文件"(即键盘/显示器),将其关联到其他文件或设备。

  • 语法 :在命令后使用 >, >>, < 等操作符。
  1. 输出重定向 (>)

    • 功能 :将命令的标准输出 ,从显示器重定向到指定文件。

    • 特性 :若文件不存在则创建;若文件存在则先清空原有内容,再写入。

    • 示例

bush 复制代码
$ echo "helloworld" > hello.txt  # 将"helloworld"写入hello.txt,并清空原文件
$ cat hello.txt                   # 显示文件内容
helloworld
  1. 追加重定向 (>>)
  • 功能 :将命令的输出追加 到指定文件的末尾,不清空原内容。

  • 示例

bash 复制代码
$ echo "new line" >> hello.txt    # 在hello.txt末尾追加一行"new line"
$ cat hello.txt
helloworld
new line
  1. 输入重定向 (<)
  • 功能 :将命令的标准输入 ,从键盘重定向为从指定文件读取。

  • 示例

bash 复制代码
$ wc -l < hello.txt               # 统计hello.txt的行数,结果直接显示
2

3. 文件类型与C语言文件操作

  1. Linux文件类型 (ls -l 首字符识别)
符号 类型 说明
- 普通文件 文本、可执行程序、数据等。Linux不依赖文件后缀区分类型,但工具(如gcc)会关心。
d 目录文件 文件夹。
c 字符设备文件 以字符流形式访问的设备,如**键盘、显示器、终端 (/dev/pts/) **,输入有顺序性。
b 块设备文件 以数据块形式访问的设备,如磁盘
l 链接文件 快捷方式。
p 管道文件 用于进程间通信。
  1. . C语言文件操作函数 (fopen模式)

    • fopen() 函数用于打开文件,其模式参数与重定向逻辑相通:

      • "r":只读打开文本文件。

      • "w" / "w+":写入模式。文件不存在则创建,存在则清空 (类似于 >)。

      • "a" / "a+":追加模式。写入内容始终追加到文件末尾 (类似于 >>)。

      • "r+":读写模式,文件必须存在。

  2. 设备文件示例

    • 终端本身就是一个字符设备文件,路径类似于 /dev/pts/1。向这个文件写入内容,就会显示在对应的终端窗口上。
bash 复制代码
$ echo "Message to terminal 1" > /dev/pts/1

4. 管道与日志处理

  1. 管道 (|)

    • 功能 :将一个命令的标准输出 ,作为另一个命令的标准输入。用于组合多个简单命令完成复杂任务。

    • 示例

bash 复制代码
# 查看 log.txt 文件的第 510 行
$ head -510 log.txt | tail -1
hello 510

# 组合命令:查看第510行 -> 反向排列 -> 统计行数(此例中反向排列后行数不变)
$ cat log.txt | head -510 | tail -1 | tac | wc -l
1
  1. 实用命令组合

    • head -N:显示文件前N行。

    • tail -N:显示文件后N行。

    • tac:反向显示文件内容(cat的反写)。

    • wc -l:统计行数。

5. 系统时间与时间戳

  1. 时间戳概念

    • 定义 :Unix时间戳,指从 1970年1月1日 00:00:00 UTC (北京时间1970-01-01 08:00:00)起所经过的秒数

    • 用途

      1. 用于系统内部记录时间(如文件修改时间)。

      2. 在日志中记录事件发生的精确时刻,便于排查和追踪。

    • 计算机为何能持续计时 :主板上有一颗纽扣电池,用于在关机后维持CMOS芯片(存储BIOS设置和系统时钟)的运行。

  2. 时间戳操作命令

    • 获取当前时间戳
bash 复制代码
$ date +%s
1725974746

格式化当前时间

bash 复制代码
$ date +%Y-%m-%d_%H:%M:%S
2024-09-10_21:21:43

将时间戳转换为可读时间

bash 复制代码
$ date -d @1725974749 +%Y-%m-%d_%H:%M:%S
2024-09-10_21:25:49

查看时间戳起点

bash 复制代码
$ date -d @0 +%Y-%m-%d_%H:%M:%S
1970-01-01_08:00:00

6. 查找命令文件

  1. which命令

    • 功能 :在环境变量 $PATH 指定的路径中,查找可执行命令的位置。

    • 特点 :用于查找我们将要执行的命令的绝对路径。

    • 示例

bash 复制代码
$ which ls
alias ls='ls --color=auto'  # 显示别名
    /usr/bin/ls                 # 实际命令位置
$ which pwd
/usr/bin/pwd
  1. whereis命令
  • 功能 :查找二进制程序、源代码文件和手册页 的位置,搜索范围比 which 更广。

  • 示例

bash 复制代码
$ whereis man
man: /usr/bin/man /usr/share/man /usr/share/man/man1/man.1.gz  # 程序本身和手册页位置
相关推荐
吴声子夜歌16 分钟前
Java——接口的细节
java·开发语言·算法
阿拉金alakin18 分钟前
深入理解 Java 锁机制:CAS 原理、synchronized 优化与主流锁策略全总结
java·开发语言
myheartgo-on22 分钟前
Java—方 法
java·开发语言·算法·青少年编程
雨落在了我的手上27 分钟前
如何学习java?
java·开发语言·学习
nnsix1 小时前
Unity 动画 Avatar 笔记
笔记·unity·游戏引擎
神仙别闹1 小时前
基于 C# OpenPGP 的文件管理系统
开发语言·c#
汉克老师1 小时前
GESP6级C++考试语法知识(四、图与树(四))
c++·贪心算法·优先队列·哈夫曼编码·哈夫曼树·gesp6级·gesp六级
番石榴AI2 小时前
纯 CPU 推理!0.1B 超轻量级端到端OCR模型,使用 Java 进行文档解析
java·开发语言·ocr
likerhood2 小时前
ConcurrentHashMap详细讲解(java)
java·开发语言·性能优化
wanhengidc2 小时前
服务器中带宽的重要性
运维·服务器·网络·安全·web安全