1. Linux核心哲学:"一切皆文件"
-
核心理念 :在Linux系统中,硬件设备、输入输出、乃至操作系统提供的功能,其访问接口大多被抽象为文件。这是理解后续所有操作的基础。
-
应用实例 :
printf/cout(输出到显示器)、scanf/cin(从键盘输入),其本质都是文件操作。 -
标准流文件:系统默认会为每个进程打开三个"文件"(流):
-
stdin(标准输入):对应键盘,文件描述符为0。 -
stdout(标准输出):对应显示器,文件描述符为1。 -
stderr(标准错误):对应显示器,文件描述符为2。
思考:为什么系统要帮我们打开这三个文件?为了方便程序进行最基础的输入输出交互。
-
2. 文件重定向操作
核心思想:改变默认的输入/输出"文件"(即键盘/显示器),将其关联到其他文件或设备。
- 语法 :在命令后使用
>,>>,<等操作符。
-
输出重定向 (
>)-
功能 :将命令的标准输出 ,从显示器重定向到指定文件。
-
特性 :若文件不存在则创建;若文件存在则先清空原有内容,再写入。
-
示例:
-
bush
$ echo "helloworld" > hello.txt # 将"helloworld"写入hello.txt,并清空原文件
$ cat hello.txt # 显示文件内容
helloworld
- 追加重定向 (
>>)
-
功能 :将命令的输出追加 到指定文件的末尾,不清空原内容。
-
示例:
bash
$ echo "new line" >> hello.txt # 在hello.txt末尾追加一行"new line"
$ cat hello.txt
helloworld
new line
- 输入重定向 (
<)
-
功能 :将命令的标准输入 ,从键盘重定向为从指定文件读取。
-
示例:
bash
$ wc -l < hello.txt # 统计hello.txt的行数,结果直接显示
2
3. 文件类型与C语言文件操作
- Linux文件类型 (ls -l 首字符识别)
| 符号 | 类型 | 说明 |
|---|---|---|
- |
普通文件 | 文本、可执行程序、数据等。Linux不依赖文件后缀区分类型,但工具(如gcc)会关心。 |
d |
目录文件 | 文件夹。 |
c |
字符设备文件 | 以字符流形式访问的设备,如**键盘、显示器、终端 (/dev/pts/) **,输入有顺序性。 |
b |
块设备文件 | 以数据块形式访问的设备,如磁盘。 |
l |
链接文件 | 快捷方式。 |
p |
管道文件 | 用于进程间通信。 |
-
. C语言文件操作函数 (
fopen模式)-
fopen()函数用于打开文件,其模式参数与重定向逻辑相通:-
"r":只读打开文本文件。 -
"w"/"w+":写入模式。文件不存在则创建,存在则清空 (类似于>)。 -
"a"/"a+":追加模式。写入内容始终追加到文件末尾 (类似于>>)。 -
"r+":读写模式,文件必须存在。
-
-
-
设备文件示例
- 终端本身就是一个字符设备文件,路径类似于
/dev/pts/1。向这个文件写入内容,就会显示在对应的终端窗口上。
- 终端本身就是一个字符设备文件,路径类似于
bash
$ echo "Message to terminal 1" > /dev/pts/1
4. 管道与日志处理
-
管道 (
|)-
功能 :将一个命令的标准输出 ,作为另一个命令的标准输入。用于组合多个简单命令完成复杂任务。
-
示例:
-
bash
# 查看 log.txt 文件的第 510 行
$ head -510 log.txt | tail -1
hello 510
# 组合命令:查看第510行 -> 反向排列 -> 统计行数(此例中反向排列后行数不变)
$ cat log.txt | head -510 | tail -1 | tac | wc -l
1
-
实用命令组合
-
head -N:显示文件前N行。 -
tail -N:显示文件后N行。 -
tac:反向显示文件内容(cat的反写)。 -
wc -l:统计行数。
-
5. 系统时间与时间戳
-
时间戳概念
-
定义 :Unix时间戳,指从 1970年1月1日 00:00:00 UTC (北京时间1970-01-01 08:00:00)起所经过的秒数。
-
用途:
-
用于系统内部记录时间(如文件修改时间)。
-
在日志中记录事件发生的精确时刻,便于排查和追踪。
-
-
计算机为何能持续计时 :主板上有一颗纽扣电池,用于在关机后维持CMOS芯片(存储BIOS设置和系统时钟)的运行。
-
-
时间戳操作命令
- 获取当前时间戳:
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. 查找命令文件
-
which命令-
功能 :在环境变量
$PATH指定的路径中,查找可执行命令的位置。 -
特点 :用于查找我们将要执行的命令的绝对路径。
-
示例:
-
bash
$ which ls
alias ls='ls --color=auto' # 显示别名
/usr/bin/ls # 实际命令位置
$ which pwd
/usr/bin/pwd
whereis命令
-
功能 :查找二进制程序、源代码文件和手册页 的位置,搜索范围比
which更广。 -
示例:
bash
$ whereis man
man: /usr/bin/man /usr/share/man /usr/share/man/man1/man.1.gz # 程序本身和手册页位置