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  # 程序本身和手册页位置
相关推荐
Android系统攻城狮14 分钟前
Linux PipeWire深度解析之pw_init调用流程与实战(八十三)
linux·运维·服务器·音频进阶·pipewire音频进阶
M78佐菲1 小时前
Linux学习笔记:进程
linux·笔记·学习·算法
liangshanbo12151 小时前
虚拟列表深度面试题整理
java·开发语言·前端
ZISHU_9871 小时前
用 TLabel 给 SynTouch BioTac 数据做语义标注:从原始信号到结构化标注
开发语言·人工智能·python·数据·机器人触觉
略略略咯咯1 小时前
C#Unity
开发语言·unity·c#
gugucoding1 小时前
59. 【Java】Spring Boot 入门:第一个 Web 应用
java·开发语言·spring boot
ShineWinsu1 小时前
对于C++:C++20中线程、初始化、Lambda与内存视图等特性的解析
c++·c++20
lilian2332 小时前
Harmony os 技术实战|拼豆制图43:压缩字符矩阵上线前如何拦住错位图纸
开发语言·前端·华为·矩阵·harmonyos
进击ing小白2 小时前
Qt 无边框窗口进阶指南
开发语言·qt
点我头像干啥2 小时前
004:多个PDF文件合并
开发语言·pdf·php