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  # 程序本身和手册页位置
相关推荐
暴躁小师兄数据学院2 分钟前
【AI大数据工程师特训笔记】第14讲:Linux操作系统与shell脚本
大数据·人工智能·笔记
茫忙然11 分钟前
U 盘搭建免驱 Linux 便携系统教程
linux·服务器
QiLinkOS26 分钟前
《打破“用爱发电”:一种基于 Gitee 与时间戳的开源权益分配机制探索》
c语言·数据结构·c++·科技·算法·gitee·开源
土狗TuGou29 分钟前
SQL内功笔记 · 第8篇:事务的四大特性与隔离级别
数据库·笔记·后端·sql·mysql·oracle
Irissgwe1 小时前
c++STL--string类
c++·stl·string
Irissgwe1 小时前
c++类型转换
c++·类型转换·explicit·static_cast·const_cast·dynamic_cast·rtti
智者知已应修善业1 小时前
【51单片机用T0定时器方式1,实现0.5S的时间间隔实现第一次一个灯亮、第二次二个灯亮,直到全部灯亮,然后重复整个过程】2023-12-29
c++·经验分享·笔记·算法·51单片机
在繁华处1 小时前
Java从零到熟练(九):并发编程基础
java·开发语言
木头程序员1 小时前
SSM框架学习笔记
java·开发语言·mysql·spring·maven
一起逃去看海吧1 小时前
dify-03
java·linux·开发语言