
忧郁兔斯基:个人主页
个人专栏:《从零开始的C++学习之旅》《C语言》《数据结构》《Linux学习》《优选算法》
励志名言:道阻且长,行则将至
个人介绍:

目录
前言:承上启下
一、对上一篇文章的总体回顾
1.1开篇:为什么Linux要用命令行?
1.2 地基:Linux文件系统与目录结构
1.3 实战:八个基础指令详解
二、深入理解文件属性与类型
2.1 文件类型标识详解
2.2 隐藏文件与路径分隔符
2.3 关于文件后缀名的“误区”与“真相”
三、echo以及printf指令引出"一切皆文件"
3.1 使用nano以及cat进行写入与读取
3.2 echo以及printf直接在屏幕打印
3.3 认识什么是“万物皆文件”
3.4 重定向操作(重要)
四、文件拷贝、移动与重命名(补充)
mv —— 移动或改名
五、文件内容查看五兄弟:cat / more / less / head / tail
1. cat —— 一次性输出全部内容
2. more 和 less —— 分页查看
3. head 和 tail —— 只看头尾
六、文件查找三剑客:find / which / whereis
1. find —— 最强大的文件搜索
补充:通配符*
2. which —— 查找命令所在路径
3. whereis —— 查找命令的二进制、源码和手册
七、文本搜索神器:grep
八、打包与压缩:zip/unzip 和 tar
1. zip / unzip —— 通用 ZIP 格式
2. tar —— Linux 最核心的归档工具
九、时间与日历:date 和 cal
1. date —— 显示或设置系统时间
2. cal —— 显示日历
十、其他实用小命令
总结与下篇预告
前言:承上启下
在系列第一篇中,我们从文件系统结构出发,详细介绍了 pwd、ls、cd、touch、mkdir、rmdir/rm、man 和 cp 这八个基础命令。相信大家已经能够在目录间自由穿梭,并熟练地创建、删除文件和目录了。
然而,日常开发运维远不止于此。我们还需要查看文件内容、搜索文本、打包压缩、管理时间,甚至要控制权限。本篇作为系列第二篇,将基于PDF教材、实战笔记以及多篇技术博客,综合呈现一份更全面、更接地气的Linux入门指令指南。
此外,本文将专门设立章节,结合 /dev/pts 目录、设备文件等实例,深入探讨Linux那句经典名言——“万物皆文件”。
一、对上一篇文章的总体回顾
上一篇文章链接:【Linux系统篇】Linux入门基础指令(一)-CSDN博客
1.1开篇:为什么Linux要用命令行?
回答了一个关键问题:为什么Linux离不开命令行?
-
操作系统发展早期都是黑屏终端+指令操作,后来分化为两条路:Windows走图形化界面面向大众,Linux保留了命令行界面面向专业用户。
-
服务器上的Linux几乎只有黑底白字的终端,命令的本质就是可执行文件——这是理解Linux操作的第一步。
1.2 地基:Linux文件系统与目录结构
在教命令之前,文章花了较大篇幅讲解文件系统:
-
文件=内容+属性:即使空文件也占磁盘空间,学习Linux文件操作本质上就是操作文件的内容和属性。
-
目录树结构:Linux文件系统是一棵以 /(根目录)为根的多叉树。
-
重要目录速览:/bin(基本命令)、/home(用户家目录)、/etc(配置文件)、/usr(软件资源)、/root(超级用户家目录)。
-
路径:绝对路径(从根开始)和相对路径(从当前位置开始),以及 . 和 .. 的用法。
1.3 实战:八个基础指令详解
| pwd | 显示当前所在目录 | 最简单的定位命令 |
| ls | 列出目录内容 | -l 显示详细信息,-a 显示隐藏文件,ll 是 ls -l 的别名 |
| cd | 切换目录 | 配合 .(当前)和 ..(上级)使用 |
| touch | 新建文件或修改时间戳 | 也可用 stat 查看文件时间信息 |
| mkdir | 创建目录 | -p 选项可递归创建多级目录 |
| rmdir / rm | 删除目录/文件 | rm -r 删除目录,rm -f 强制删除,rm -rf 威力巨大需谨慎 |
| man | 查看命令手册 | 手册分9章,可用 man 章节号 命令 精确定位 |
| cp | 复制文件或目录 | 复制目录需加 -r 选项 |
二、深入理解文件属性与类型
当我们输入 ls -l 时,输出的第一列字符究竟代表了什么?
ls -l 命令会显示文件的详细信息,每一列都有其特定含义。以一个典型的输出 -rw——-. 1 root root 4434 May 30 13:58 ks.cfg 为例:
| 第1列 | -rw——-. | 文件类型与权限 |
| 第2列 | 1 | 硬链接次数 |
| 第3列 | root | 文件所有者 |
| 第4列 | root | 文件所属组 |
| 第5列 | 4434 | 文件大小(字节) |
| 第6-8列 | May 30 13:58 | 最后修改时间 |
| 第9列 | ks.cfg | 文件名 |
关于目录的链接数:对于目录文件,第二列的数字表示其第一级子目录的个数。这个值要减2才等于该目录下子目录的实际个数,因为Linux中每个目录都自带 .(当前目录)和 ..(上级目录)两个特殊目录项。
2.1 文件类型标识详解
| – | 普通文件 | 文本文件、可执行程序、库文件、图片、视频等。 |
| d | 目录文件 | 相当于Windows中的文件夹(如 /home)。 |
| c | 字符设备文件 | 按顺序传输数据的设备。例如键盘、显示器、终端。数据具有顺序性(先来后到)。 |
| b | 块设备文件 | 按块随机存取的设备。例如磁盘(/dev/vda*、/dev/sda*)。支持快速定位读写。 |
| l | 链接文件 | 软链接(符号链接),类似于Windows的快捷方式。 |
| p | 管道文件 | 用于进程间通信(FIFO)。 |
| s | 套接字文件 | 用于网络通信。 |
2.2 隐藏文件与路径分隔符
-
隐藏文件:在Linux中,以 . 开头的文件默认是隐藏的。使用 ls -a 可以强制显示它们(例如 .bashrc、.gitignore)。
-
路径分隔符:Linux使用 / 作为路径分隔符。路径中最开头的 / 代表根目录(根目录是文件系统的起点)。
2.3 关于文件后缀名的“误区”与“真相”
核心认知:系统不关心后缀,但工具关心。
-
系统层面:Linux内核并不靠后缀名来区分文件类型(它靠的是文件头部的魔法数字)。你可以将一个Shell脚本命名为 test.txt,只要赋予执行权限,它依然能运行。
-
工具层面:虽然系统不关心,但应用软件非常关心后缀。例如 gcc 编译器默认寻找 .c 文件,vim 根据 .py 后缀进行Python语法高亮。所以,为了方便工具和用户识别,我们强烈建议规范使用后缀名。
三、echo以及printf指令引出"一切皆文件"
3.1 使用nano以及cat进行写入与读取
root@VM-0-15-ubuntu:~/linuxlearn/lesson2# tree
.
└── test.txt
0 directories, 1 file
root@VM-0-15-ubuntu:~/linuxlearn/lesson2# nano test.txt
root@VM-0-15-ubuntu:~/linuxlearn/lesson2# cat test.txt
aaa
bbb
root@VM-0-15-ubuntu:~/linuxlearn/lesson2#
nano可以对文件进行写入,cat可以显示文件的内容。
nano下载的指令:
yum install nano -y
按ctrl+x 而后按y 以及回车就可以退出nano
3.2 echo以及printf直接在屏幕打印
root@VM-0-15-ubuntu:~# echo aaabbb
aaabbb
root@VM-0-15-ubuntu:~# printf "hello %s,hello %s\\n" "linux" "C++"
hello linux,hello C++
我们对比发现,上一组指令是对文件进行读写操作,而下一组指令是在终端进行写入,在屏幕上直接输出了。在上一篇文章中,我们提出万物皆文件,下面我们在此基础上重新认识一下到底什么是“万物皆文件”。
3.3 认识什么是“万物皆文件”
一般有以下几个与我们操作强相关的文件:

我们说键盘显示器都是文件,实际上这些文件在 /dev/pts/ 目录中,会被整合成某个文件
以c开头的文件叫做字符文件,在/dev/pts目录中,其中的数字会随着终端的增加而增加
程序启动时一般会默认打开下面的三个文件。
理解参考:我们使用C/C++进行输入以及打印时,是不是在显示器上打印,这些操作本质上就是文件操作。而我们学过文件操作,文件在被操作之前一定要被打开,可是我们在Linux指向上面那些指令时,好像并没有指向打开的操作啊?
其实系统会自己帮我们打开,不需要我们手动打开。
但是呢?我空口无凭,凭什么说系统就帮我们打开了?如何理解系统帮我们打开了?
1、以C语言为例:C语言中打开文件的指令为fopen,那我们直接:man fopen
#include <stdio.h>
FILE *fopen(const char *pathname, const char *mode);
程序启动时,默认会打开这三个文件,对应的文件就是键盘、显示器、显示器
extern FILE *stdin;
extern FILE *stdout;
extern FILE *stderr;
2、不是说我们写完代码之后就所有都结束了,我们写完代码之后,编译器、操作系统也会帮我们操作的,也可以理解成系统在调用我们的代码之前会给我们添加代码,先打开这些文件。
3.4 重定向操作(重要)
在3.1以及3.2展示的功能中,我们能否通过某些方法来改变这些指令的输入输出方向:即将echo输入到文件中?
答案是可以的,我们可以通过重定向操作来实现上述目的,下面先进行展示:
root@VM-0-15-ubuntu:~/linuxlearn/lesson2# cat test.txt
aaa
bbb
root@VM-0-15-ubuntu:~/linuxlearn/lesson2# echo "hello linux" > test.txt
root@VM-0-15-ubuntu:~/linuxlearn/lesson2# cat test.txt
hello linux
我们发现,原本echo指令应该是将后面的字符串写入显示器文件中打印出来,但是在上述指令中,经过输出重定向操作,我们将“hello linux"写入了test.txt文件中,而后使用cat展示。
但是我们会发现原本test.txt中的内容是aaa/n bbb,被替换成了”hello linux",所以以下是>符号的规则以及拓展的用法:
> 文件
如果后续的文件不存在,会新建该文件;如果该文件是存在的,会先清空文件中的内容再输入
那我们可以开发出下面的两个用法:
1、利用第一条特性,我们可以不使用touch命令来新建文件,直接输入 >不存在的文件名,这样就会新建一个文件
2、输入>存在的文件名,就会清空该文件的内容
如果不想让前面的内容被覆盖,那么就是使用>>符号,这叫做追加重定向,展示:
root@VM-0-15-ubuntu:~/linuxlearn/lesson2# cat test.txt
hello linux
root@VM-0-15-ubuntu:~/linuxlearn/lesson2# echo "hello world" >> test.txt
root@VM-0-15-ubuntu:~/linuxlearn/lesson2# cat test.txt
hello linux
hello world
如果我们使用cat时,后面不加指定的文件名,那么就会读取键盘文件中的内容,即我们输入什么下一行就会输出什么 想要停止按ctrl + c
root@VM-0-15-ubuntu:~/linuxlearn/lesson2# cat
aa
aa
bb
bb
cc
cc
这时我们后续如果想让该指令实现显式指定文件的内容,就需要使用<,输入cat < 指定文件名 这叫做输入重定向,这样看结果与cat 文件名的结果是一样的,但是实际执行的操作是不一样的,后者是利用<,将文件中的内容重新输入到显示器中,前者是调用命令行的指令,是执行相关的程序。
四、文件拷贝、移动与重命名(补充)
上一篇已经介绍了 cp 复制,这里补上 mv(移动/重命名)。
mv —— 移动或改名
语法:mv [选项] 源 目标
-
如果目标是目录且目录存在,则将源文件/目录移入该目录。
-
如果目标是文件(且源只有一个),则相当于重命名。
-
常用 -i 选项在覆盖前询问,-f 强制覆盖。
$ touch myfile.txt
$ mv myfile.txt yourfile.txt # 重命名
$ mv yourfile.txt ../temp/ # 移动到上级目录的 temp 下
五、文件内容查看五兄弟:cat / more / less / head / tail
1. cat —— 一次性输出全部内容
cat 是最简单的查看命令,适合查看小文件,它会将文件所有内容一股脑打印到屏幕。
cat [选项] 文件
常用选项:
-
-n:对所有输出行编号(包括空行)
-
-b:仅对非空行编号
-
-s:压缩连续空行为一行
示例:查看一个包含多行文本的文件,并带行号。
$ cat -n temp.txt
1 hello bite
2 hello bite
3
4
5 hello bite
💡 小技巧:cat 也常用于快速创建小文件,如 cat > file.txt 然后输入内容,按 Ctrl+D 结束。
2. more 和 less —— 分页查看
当文件很大(比如日志)时,cat 会刷屏,此时用 more 或 less 更合适。
-
more:分页显示,按空格翻页,按 q 退出,但不能向上翻。
-
less:功能更强大,支持上下翻页(PageUp/PageDown)、搜索,且不会预先加载整个文件,打开大文件更快。
less 常用操作:
-i 忽略搜索时的大小写
-N 显示每行的行号
/字符串:向下搜索“字符串”的功能
?字符串:向上搜索“字符串”的功能
n:重复前⼀个搜索(与 / 或 ?有关)
N:反向重复前⼀个搜索(与 / 或 ? 有关)
q:quit
示例:查看一个 2000 行的文件,并显示行号,搜索关键词。
$ less -N temp.txt
1 hello 0
2 hello 1
3 hello 2
…
/hello 100 # 向下搜索
建议:养成用 less 的习惯,它才是 Linux 下真正的“正统”文本查看器。
3. head 和 tail —— 只看头尾
-
head:默认显示文件前 10 行,可用 -n 指定行数。
-
tail:默认显示文件末尾 10 行,同样支持 -n,还有 -f 参数用于实时追踪日志更新。
示例:查看文件前 5 行、后 3 行,以及动态监控日志。
$ head -5 temp.txt
hello 0
hello 1
hello 2
hello 3
hello 4
$ tail -3 temp.txt
hello 1998
hello 1999
hello 2000
$ tail -f /var/log/syslog # 实时滚动输出
经典组合:查看文件中间某一段(比如第 180~200 行)——利用管道 | 连接 head 和 tail。
利用head tail 可以得到文件的指定或部分的开头以及结尾的内容,如果想看中间部分的内容呢?
1、创建临时文件
2、使用 |符号,即管道实现指令的组合使用,就不需要利用临时文件存储了
$ head -200 temp.txt | tail -20
hello 180
hello 181
…
hello 199
|符号的理解,由于每个指令都会得到结果,使用|可以使该结果通过管道流向下一个指令,得以实现指令的组合
六、文件查找三剑客:find / which / whereis
1. find —— 最强大的文件搜索
find 会在指定目录树中实时遍历查找,功能强大但可能较慢。
语法:find [路径] [选项]
常用选项:
-
-name "文件名":按文件名匹配(支持通配符)
-
-type f 或 -type d:只查文件或只查目录
示例:在用户家目录下查找所有 .c 文件。
$ find ~ -name "*.c"
/home/whb/test_code/test.c
/home/whb/project/main.c
补充:通配符*
*是一个通配符,匹配当前目录下的所有文件
2. which —— 查找命令所在路径
which 在 PATH 环境变量中搜索命令的位置。
$ which ls
/usr/bin/ls
$ which pwd
/usr/bin/pwd
3. whereis —— 查找命令的二进制、源码和手册
$ whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
七、文本搜索神器:grep
grep 用于在文件(或标准输入)中搜索匹配的行,是日志分析、代码检索的必备工具。
语法:grep [选项] "搜索字符串" 文件
常用选项:
-
-i:忽略大小写
-
-n:显示匹配行的行号
-
-v:反向匹配(显示不包含该字符串的行)
-
-r:递归搜索目录
示例:
$ cat temp.txt
abcd
ABCD
hello
bite
1234
$ grep -i "abcd" temp.txt # 忽略大小写
abcd
ABCD
$ grep -vn "abcd" temp.txt # 反向且显示行号
3:hello
4:bite
5:1234
八、打包与压缩:zip/unzip 和 tar
打包和压缩是什么?
打包:将文件进行合并 压缩:减少体积
为什么?
打包:防止文件丢失 压缩:节省存储空间,因为是网络传送,可以有效减少网络传送时间
查看zip 版本命令 zip –version
下载命令:apt install zip
sz rz 实现windows以及liunx之间的文件传送
下载命令:apt install -y lrzsz
1. zip / unzip —— 通用 ZIP 格式
-
压缩目录需要加 -r 递归。
-
解压到指定目录用 -d。
$ zip -r myarchive.zip mydir/
$ unzip myarchive.zip -d /tmp/
2. tar —— Linux 最核心的归档工具
语法:
tar 选项 xxx.tgz srcdir 把后者打包压缩成前者
常用参数:
-
-c:创建归档
-
-x:解归档
-
-v:显示过程(verbose)
-
-f:指定归档文件名(必须紧接参数)
-
-z:通过 gzip 压缩/解压
-
-j:通过 bzip2 压缩/解压
-
-C:解压到指定目录
-
-t:查看归档内容(不实际解压)
tar czf xxx.tgz srcdir 压缩
tar xzf xxx.tgz 解压
如果要解压到指定文件,那么需要在后面加上:-C 路径
示例:
# 打包并压缩 /etc 目录
$ tar -czvf etc.tar.gz /etc
# 查看压缩包内容
$ tar -tzvf etc.tar.gz
# 解压到 /tmp 下
$ tar -xzvf etc.tar.gz -C /tmp
# 只解压出单个文件
$ tar -xzvf etc.tar.gz etc/passwd
⚠️ 注意:tar 默认会去除绝对路径的根 /,这是安全机制,不用担心。
九、时间与日历:date 和 cal
1. date —— 显示或设置系统时间
显示时间时支持自定义格式,常用格式符:
-
%Y 年、%m 月、%d 日、%H 时、%M 分、%S 秒
-
%F 相当于 %Y-%m-%d
-
%X 相当于 %H:%M:%S
示例:
$ date +%Y/%m/%d-%H:%M:%S
2026/08/08-14:30:25
# 时间戳(从1970-01-01开始的秒数)
$ date +%s
1723105825
# 将时间戳转为可读时间
$ date -d @1723105825 +%F
2026-08-08
小知识:我的计算机已经关机了,为什么开机之后,他还能获取记录时间呢?
主板上有纽扣电池记录时间
2. cal —— 显示日历
-
cal 显示当月日历。
-
cal 2026 显示全年。
-
cal -3 显示上、当、下三个月。
十、其他实用小命令
-
alias:给命令起别名,如 alias ll='ls -l',方便日常使用。
-
bc:命令行计算器,支持浮点运算。
-
uname -r:查看内核版本。
Uname -a 查看Linux的系统信息 Uname -r 查看内核版本
体系结构其实是芯片结构
新老内核的问题?
企业一定不会用新内核,新内核存在没有引爆的雷
-
热键:
-
Tab:命令/文件名自动补全
-
Ctrl+C:终止当前程序
-
Ctrl+D:退出终端(EOF)
-
-
shutdown:关机或重启,shutdown -h now 立即关机。
总结与下篇预告
本篇作为系列第二篇,重点覆盖了:
-
文本查看与搜索(cat/more/less/head/tail/grep)
-
查找与打包(find/which/whereis/zip/tar)
-
时间管理(date/cal)
-
权限基础与“万物皆文件”的哲学理解
接下来的第三篇,我们将全面展开 Linux 权限管理(chmod、chown、umask、粘滞位、sudo),并深入讲解 shell 运行原理和环境变量。
学习 Linux 就像拼图,每掌握一条命令,你就离系统高手更近一步。如果本篇对你有帮助,欢迎点赞、收藏、评论交流!
附:常用命令速查表(本篇新增)
| cat | 查看小文件内容 |
| more/less | 分页查看大文件 |
| head/tail | 查看文件头/尾 |
| grep | 搜索文本 |
| find | 按条件查找文件 |
| which/whereis | 查找命令位置 |
| zip/unzip | ZIP 压缩/解压 |
| tar | 归档压缩(最常用) |
| date/cal | 时间/日历 |
| alias | 自定义命令别名 |
Happy Linuxing! 🐧






