三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

[Linux系统篇】Linux入门指令详解(二)并认识“Linux万物皆文件”

[Linux系统篇】Linux入门指令详解(二)并认识“Linux万物皆文件”

忧郁兔斯基:个人主页

个人专栏:《从零开始的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 —— 显示日历

十、其他实用小命令

总结与下篇预告


前言:承上启下

在系列第一篇中,我们从文件系统结构出发,详细介绍了pwdlscdtouchmkdirrmdir/rmmancp这八个基础命令。相信大家已经能够在目录间自由穿梭,并熟练地创建、删除文件和目录了。

然而,日常开发运维远不止于此。我们还需要查看文件内容搜索文本打包压缩管理时间,甚至要控制权限。本篇作为系列第二篇,将基于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显示隐藏文件,llls -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.moreless—— 分页查看

当文件很大(比如日志)时,cat会刷屏,此时用moreless更合适。

  • 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.headtail—— 只看头尾

  • 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 行)——利用管道|连接headtail

利用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—— 查找命令所在路径

whichPATH环境变量中搜索命令的位置。

$ 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/unziptar

打包和压缩是什么?

打包:将文件进行合并 压缩:减少体积

为什么?

打包:防止文件丢失 压缩:节省存储空间,因为是网络传送,可以有效减少网络传送时间

查看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默认会去除绝对路径的根/,这是安全机制,不用担心。

九、时间与日历:datecal

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 权限管理chmodchownumask、粘滞位、sudo),并深入讲解shell 运行原理环境变量

学习 Linux 就像拼图,每掌握一条命令,你就离系统高手更近一步。如果本篇对你有帮助,欢迎点赞、收藏、评论交流!


附:常用命令速查表(本篇新增)

命令功能
cat查看小文件内容
more/less分页查看大文件
head/tail查看文件头/尾
grep搜索文本
find按条件查找文件
which/whereis查找命令位置
zip/unzipZIP 压缩/解压
tar归档压缩(最常用)
date/cal时间/日历
alias自定义命令别名

Happy Linuxing! 🐧

← 返回列表