Linux基本指令2
一、课前复习(5分钟)
正式开始新内容之前,我们先快速回顾一下之前讲过的重点。
1.1 Linux 历史回顾
-
计算机发展史:从 ENIAC(1945年)到摩尔定律推动计算机小型化
-
操作系统诞生:UNIX 由肯·汤普森(汇编)和丹尼斯·里奇(C语言重写)开发
-
Linux 诞生:1991年,芬兰赫尔辛基大学学生 林纳斯·托瓦兹 开源了 Linux 内核
-
开源 vs 闭源:开源系统(如 Linux)进化速度快,性能、稳定性、安全性更优
1.2 发行版与内核版本
| 类型 | 说明 | 示例 |
|---|---|---|
| 商业化发行版 | 不同厂商打包的 Linux 系统 | Ubuntu、CentOS、Red Hat、Kali |
| 内核版本 | 技术路线,数字标识 | 3.10、5.10、6.10 |
不同发行版底层可能使用相同的内核版本。
1.3 环境搭建与用户管理
-
推荐方案:云服务器 + Xshell 远程登录
-
用户管理命令:
-
whoami:查看当前用户 -
pwd:查看当前路径 -
adduser 用户名:新建用户 -
passwd 用户名:设置密码 -
userdel -r 用户名:删除用户(必须带-r)
-
1.4 核心知识点回顾
| 知识点 | 说明 |
|---|---|
| 目录 = 文件夹 | Linux 中的"目录"等同于 Windows 的"文件夹" |
| 文件 = 内容 + 属性 | 空文件也占用磁盘空间(存储属性信息) |
| 文件类型 | d=目录,-=普通文件 |
| 隐藏文件 | 以 . 开头的文件,ls -a 查看 |
| 当前目录/上级目录 | .=当前目录,..=上级目录 |
| 路径 | 绝对路径(从 / 开始),相对路径(从当前位置开始) |
| 家目录 | root:/root,普通用户:/home/用户名,cd ~ 快速回家 |
| 命令本质 | 命令就是可执行文件(C/C++ 程序) |
| 快捷键 | Ctrl+C 终止程序,上下键翻历史命令 |
二、一切皆文件
2.1 核心概念
Linux 下一切皆文件
Linux 系统不仅把 .c、.txt、可执行程序当做文件,磁盘、网卡、显卡、键盘、鼠标、显示器等设备,在系统层面也被设计成了文件的形式。
2.2 默认打开的三个文件
我们以前学 C/C++ 时,直接用 printf/cout 输出、scanf/cin 输入,从来没有手动打开过键盘或显示器。这是因为:
系统在启动程序时,默认帮我们打开了三个文件:
stdin(标准输入)→ 对应键盘
stdout(标准输出)→ 对应显示器
stderr(标准错误)→ 对应显示器
所以,printf、scanf 的本质就是文件操作——向显示器文件写入,从键盘文件读取。
2.3 终端也是文件
当我们用 Xshell 登录 Linux 时,系统会在 /dev/pts/ 目录下创建一个设备文件(如 0、1、2),代表当前终端。
ls -l /dev/pts # 输出示例: # crw------- 1 root root 136, 0 Sep 10 19:59 0 # crw------- 1 root root 136, 1 Sep 10 19:59 1
-
文件类型为
c(字符文件),代表字符设备 -
终端文件既能接收键盘输入,也能显示输出
2.4 C 语言验证
c
#include <stdio.h>
int main()
{
FILE *fp = fopen("/dev/pts/0", "w");
if (fp == NULL) {
printf("open error\n");
return 1;
}
fprintf(fp, "hello from C to terminal!\n");
fclose(fp);
return 0;
}
编译运行后,字符串会直接写入到指定的终端设备文件中。
三、重定向操作
3.1 输出重定向(>)
默认情况下,echo "hello" 会将字符串写入显示器文件。使用 > 可以改变输出方向:
echo "hello world" > hello.txt
如果
hello.txt不存在 → 新建如果
hello.txt已存在 → 先清空,再写入
3.2 清空文件
> hello.txt # 什么都不写,只清空文件
3.3 追加重定向(>>)
echo "new line" >> hello.txt # 追加到文件末尾,不清空原有内容
3.4 输入重定向(<)
cat 命令默认从键盘读取,使用 < 可以从指定文件读取:
cat < hello.txt # 从 hello.txt 读取内容并显示
注意:这个输入重定向与cat直接打印还有点区别学到后面会细讲。
3.5 重定向与 C 语言打开方式的对应
| 重定向操作 | 对应 C 语言打开方式 | 行为 |
|---|---|---|
> |
fopen(path, "w") |
不存在则新建,存在则清空 |
>> |
fopen(path, "a") |
追加写入 |
< |
输入重定向 | 从文件读,而非键盘 |
四、文件类型详解
使用 ls -l 查看文件详细信息,第一列的第一个字符表示文件类型:
| 字符 | 文件类型 | 示例 | 说明 |
|---|---|---|---|
- |
普通文件 | -rw-r--r-- |
文本、可执行程序、图片、视频等 |
d |
目录文件 | drwxr-xr-x |
文件夹 |
c |
字符设备文件 | crw------- |
键盘、显示器、终端 |
b |
块设备文件 | brw-rw---- |
磁盘(支持随机读写) |
l |
链接文件 | lrwxrwxrwx |
类似 Windows 快捷方式 |
p |
管道文件 | prw-r--r-- |
进程间通信 |
s |
套接字文件 | srwxrwxrwx |
网络通信 |
4.1 关于文件后缀
Linux 系统不通过后缀区分文件类型,而是通过文件属性(第一列第一个字符)。
但这不是说 Linux 禁止使用后缀。GCC 编译器仍然识别 .c 后缀,系统只是不强制要求。
# 把 .c 改成 .txt 后,gcc 就不认了 mv test.c test.txt gcc test.txt # 报错:文件格式不识别 # 改回 .c 后恢复正常 mv test.txt test.c gcc test.c # 正常编译
结论:后缀在 Linux 中只是文件名的一部分,但某些工具(如 GCC)会依赖后缀来识别文件类型。
五、新增指令详解
5.1 echo — 打印字符串
echo 'hello world' # 输出:hello world
-
将后面的内容当作字符串打印到显示器(默认写入显示器文件)
-
会自动在末尾添加换行符
\n
5.2 printf — 格式化打印
printf "hello %d, %s\n" 100 "bit" # 输出:hello 100, bit
-
用法与 C 语言的
printf类似 -
不会自动添加换行符,需要手动加
\n
5.3 cat — 查看文件内容
cat test.c # 显示 test.c 的内容 cat -n test.c # 带行号显示
-
适合查看短文件
-
查看大文件会刷屏
5.4 tac — 反向查看文件内容
tac test.c # 从最后一行开始显示
-
cat的反向拼写,功能也是反向的
5.5 mv — 移动 / 重命名
mv 1.txt 2.txt # 重命名:1.txt → 2.txt mv file.txt /tmp/ # 移动:将 file.txt 移动到 /tmp 目录 mv dir1/ /tmp/ # 移动整个目录
-
如果目标路径是目录 → 剪切
-
如果目标路径不是目录且不存在 → 重命名
5.6 more — 分页查看文件
more /var/log/temp.txt
-
空格/回车:向下翻页/翻行
-
q:退出 -
不支持向上翻页
5.7 less — 更强大的分页查看器(推荐)
less /var/log/messages
-
上下键:上下翻行
-
空格/PageDown:向下翻页
-
PageUp:向上翻页
-
/关键词:向下搜索,n下一个,N上一个 -
?关键词:向上搜索 -
q:退出
推荐使用
less,功能比more更全面。
5.8 head — 查看文件开头
head -n 10 log.txt # 查看前10行(默认10行)
5.9 tail — 查看文件结尾
tail -n 10 log.txt # 查看最后10行(默认10行) tail -f log.txt # 实时跟踪文件新增内容(常用于查看日志)
5.10 date — 查看/设置时间
date # 默认格式 date "+%Y:%m:%d %H:%M:%S" # 自定义格式:年:月:日 时:分:秒
常用格式符:
-
%Y:年(四位数) -
%m:月 -
%d:日 -
%H:时(24小时制) -
%M:分 -
%S:秒
5.11 时间戳(Timestamp)
date +%s # 显示当前时间戳(从1970-01-01 00:00:00 UTC 到现在的秒数)
-
格林威治时间戳:全球统一的时间计数方式
-
计算机内部维护一个线性递增的计数器(每秒+1)
-
1970年1月1日午夜(UTC)为起点
-
东八区比 UTC 早8小时,所以
date -d @0显示1970-01-01 08:00:00
时间戳与可读时间互转:
date -d @时间戳 # 时间戳 → 可读时间 date -d "2024-09-10 12:00:00" +%s # 可读时间 → 时间戳
时间戳的作用:
-
计算机内部存储和计算更方便(整数递增)
-
便于做区间查找(如查某段时间内的日志)
5.12 cal — 查看日历
cal # 当前月 cal 2024 # 全年 cal 9 2024 # 指定年月的日历
5.13 find — 查找文件
find / -name "*.c" # 从根目录开始找所有 .c 文件 find /root -name "test.c" # 在指定目录下查找
-
在整棵目录树中按文件名查找
-
范围大时可能较慢
5.14 which / whereis — 查找命令位置
which ls # /usr/bin/ls whereis ls # 查找命令、源码、手册等相关文件
六、管道(|)
6.1 什么是管道
管道 | 可以将左边命令的输出作为右边命令的输入,实现命令的组合。
命令1 | 命令2 | 命令3 ...
6.2 管道示例
示例1:查看文件第500~510行
head -n 510 log.txt | tail -n 10
-
head -n 510:取前510行 -
tail -n 10:取后10行 → 得到第501~510行
示例2:统计行数
cat log.txt | wc -l # 统计 log.txt 的行数
示例3:组合多个命令
head -n 510 log.txt | tail -n 10 | tac | wc -l
-
取第501~510行 → 反向显示 → 统计行数(输出10)
6.3 管道的本质
-
管道也是一个文件(内存级文件)
-
左边命令向管道文件写入,右边命令从管道文件读取
-
实现"流水线"式的文本处理
七、日志与文本处理
7.1 什么是日志
日志是程序运行时记录的信息,用于:
-
排查错误
-
追踪用户行为
-
监控系统状态
Linux 系统日志通常位于
/var/log/目录下,如/var/log/syslog。不同的系统有不同差异我的系统是Ubantu。
7.2 日志中的时间戳
日志通常带时间戳,方便定位问题发生的时间段。例如:
-
将开始时间和结束时间转换为时间戳
-
在日志中查找该区间内的记录
7.3 常用日志查看方式
# 查看最新日志(实时跟踪) tail -f /var/log/syslog # 搜索包含 "error" 的行 grep "error" /var/log/syslog # 分页查看 less /var/log/syslog # 查看某段时间的日志(需配合时间戳转换)
grep命令下节课详细讲解,是文本搜索的利器。
八、本节课指令清单
| 指令 | 作用 | 常用选项 |
|---|---|---|
echo |
打印字符串 | |
printf |
格式化打印 | |
cat |
查看文件内容 | -n 显示行号 |
tac |
反向查看文件内容 | |
mv |
移动/重命名文件或目录 | |
more |
分页查看(仅向下) | |
less |
分页查看(支持上下、搜索) | /搜索,q退出 |
head |
查看文件开头 | -n 指定行数 |
tail |
查看文件结尾 | -n 指定行数,-f 实时跟踪 |
date |
查看/设置时间 | +%Y%m%d... 格式化,+%s 时间戳 |
cal |
查看日历 | |
find |
查找文件 | -name 按名称查找 |
which |
查找命令位置 | |
whereis |
查找命令及手册位置 |
九、本节课简单总结
今天我们围绕 Linux 的核心设计哲学——"一切皆文件",展开了一系列深入的学习:
-
一切皆文件:这是理解 Linux 的钥匙。键盘、显示器、终端、甚至管道,在系统层面都被抽象成文件。正是因为这个设计,我们才能用统一的文件操作接口去处理各种设备。
-
重定向:
>、>>、<让我们可以灵活控制数据的流向,把本应输出到屏幕的内容写入文件,或从文件读取输入。这本质上对应了 C 语言中fopen的不同打开方式(w、a、r)。 -
管道
|:管道让命令可以像流水线一样组合起来,左边命令的输出变成右边命令的输入。这是 Linux 命令行"小而美"哲学的体现——每个命令只做一件事,但组合起来可以完成复杂任务。 -
文件类型:Linux 通过
ls -l第一列的第一个字符区分文件类型(-普通文件、d目录、c字符设备、b块设备、l链接等)。系统不依赖后缀,但工具(如 GCC)可能依赖。 -
文本查看工具链:
cat(短文件)、less(分页+搜索)、head/tail(头尾)、more(已过时),配合管道可以做到"指哪打哪"的文本分析。 -
时间与日志:
date获取时间,时间戳(date +%s)是计算机内部的时间表示方式,从 1970-01-01 UTC 开始计数。日志是排查问题的关键,时间戳让区间查找成为可能。
重点提醒:命令本身不需要死记硬背,多用自然就记住了。真正重要的是理解"一切皆文件"的思想,以及重定向、管道这些组合方式——它们才是 Linux 命令行的灵魂。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)