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  # 程序本身和手册页位置
相关推荐
fengci.2 小时前
ctfshow其他(web408-web432)
android·开发语言·前端·学习·php
向宇it2 小时前
获取服务器hung住时的崩溃日志并自动系统重启——监听服务器异常崩溃问题
运维·服务器
wuminyu2 小时前
专家视角看Java线程生命周期与上下文切换的本质
java·linux·c语言·jvm·c++
云深麋鹿2 小时前
C++ | 容器list
开发语言·c++·容器·list
程序猿乐锅2 小时前
Java第十三篇:Stream流
java·笔记
殷忆枫2 小时前
AI学习笔记三十六:基于 YOLOv8 与 Qwen3.5 的多模态视频行为分析系统
笔记·学习·yolo
小陈phd2 小时前
多模态大模型学习笔记(三十七)——模型管理平台实战:Ollama本地部署与全流程指南
笔记·学习
deviant-ART2 小时前
java stream 的 findFirst 和 findAny 踩坑点
java·开发语言·后端
jgec23 小时前
哈工大计算机系统2024大作业——Hello的程序人生
c语言·计算机系统