[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 —— 显示日历
十、其他实用小命令
总结与下篇预告
前言:承上启下
在系列第一篇中,我们从文件系统结构出发,详细介绍了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/pwd3.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! 🐧
