

前言
经过了之前的Linux学习,相信各位读者已经知道了Linux是什么,并掌握了基本的指令操作。接下来,我们将开启新的航程,驶向Linux基础开发工具的广阔海洋!
在本章节中,你将学会强大的软件包管理器、高效的Vim编辑器、核心的编译器gcc/g++以及版本控制工具git等等。是不是已经干劲十足了?
各位船员请就位,我们的Linux探索之舟,现在扬帆起航!
1.之前权限留下的小尾巴
1.1.目录权限
下面我先给各位读者留下一个小问题:如果我想要进入一个目录,需要什么权限捏?这个问题我先不告诉各位答案,下面我们通过控制变量法来看看这个问题的答案到底是什么,首先我们要创建好一个目录,如下所示。

此时不难看出,这个目录的拥有者和所属组具有所有的权限,而其他用户没有写的权限,下面我们先把使用者的r权限去掉,关于权限如何去掉,我在上篇文章已经说明了,忘记的读者可以看看我上一篇的文章(阅读量这不就上来了(#^.^#)),此时权限就如下所示。

此时我们尝试进入目录,发现是可以进入目录的,这证明r权限并不限制我们进入目录,但是r权限到底是限制我们权限了,此时的你如果想要查看目录里面文件,系统会显示。

所以这代表着,r权限限制了是否可以查看目标目录的内容,不过此时我们并没有解答刚刚的小问题,此时依据控制变量法,我们需要把r权限弄回来,之后再把w的权限去掉,效果如下。

此时我们依旧尝试进入目录,发现仍然可以进去,此时就代表着w权限同样也是和我们是否能进入目录无关的,那么w权限限制我们什么了?最简单的方法就是尝试各种指令,虽然无脑但是好用,当我们想要创建文件的时候,就会发现此时的文件无法创建,并且我们尝试删除文件,发现也无法删除,所以此时不难看出,w权限是限制了我们修改文件的操作,包括但不限于创建文件,删除文件,查看文件等等。
依据控制变量法,此时我们其实已经解答了上面的问题,x权限限制了我们是否可以进入目录,如果觉着错误的读者,等看完我这篇文章可以自行验证,我说的,指定是对的,不然这篇文章就不会出现了(严谨这一块)。
1.2.缺省权限
看过我之前文章的读者,一定对缺省这个词不陌生,在C++里,有着缺省参数这个概念,它代表着我们在函数的形参是可以提前设置好一个值的,如果我们自行输入实参了,那么就按照输入的来进行函数的使用,如果没有规定实参,那么我们就用缺省参数。这是C++的概念,其实这也可以类比Linux的缺省权限,Linux的缺省权限指的是当我们并没有规定一个文件或者目录权限的时候,文件和目录自带的权限。在讲缺省权限之前,我还得补充一个知识点。
1.权限可以用八进制表示
权限是可以用八进制来表示的,其实不难看出,一个角色拥有者三种权限,分别是w,r,和x,有的话显示相应的字母,可以看做成1,没有的话就是-,可以看成0,此时如果一个拥有者的权限是:wrx,那么用二进制表示就是111,换算成八进制就是7。以上面的目录为例,此时ceshi目录的权限用八进制表示就是575,并且值得学习的是,我们可以用chmod命令时,也可以用八进制来修改一个目标文件/目录的权限,例如。
bash
chmod 777 ceshi.c #这样表示是不是更方便呢?
2.权限掩码
回归正题,Linux规定,文件的缺省权限默认是666,而目录的缺省权限是777,这个时候我相信许多好奇心强的读者已经去自己的Linux环境尝试一下,新建文件的权限到底是不是666了,不要急,我相信绝大的读者的Linux下新建文件的权限不可能是666,因为Linux的下的文件/目录并不会按照缺省权限直接设置好权限,这其中还有个东西控制着最终的权限,那就是:权限掩码。
权限掩码,各位读者可以看做是限制缺省权限的东西,关于为什么会有权限掩码,我还是用一个小故事来解释:
我是忘梓,我是XXX公司的某个程序员,有一天产品经理给我下达了一个任务,让我写一个大型程序,作为一个老实的程序员,我自然是老老实实的干活,过了几个小时以后,领导想要查看我的工作进度,此时因为领导是所属组,而我并没有给所属组r和w的权限,于是我通过chmod指令给领导修改一下权限,等到领导看完以后,我又把权限关掉了,为什么我不给领导这俩权限呢?原因是有一次领导趁我不在的时候,偷偷查看了我写的代码,因为他之前也是一个程序员,并且好奇心贼重,于是他看到我写的代码有点拉胯,本着让产品更好的心态,直接把我的代码给改了,殊不知,那几行很废物的指令,其实是为了稳住整个代码的定海神针,要不是我有备份,我和领导都要卷铺盖走人了,于是从此往后,我只敢给领导进入的权限,而不敢让他去进行别的操作了。
不过我领导也是个神人,半个小时找了我三十次查看我的代码,于是我灵光一闪,想起了系统里的"权限掩码(umask)"功能。我立刻在终端里输入了 umask 026
这条神奇的指令。这样一来,我之后创建的所有新文件和文件夹,其组权限都会自动被系统"剥夺"掉写(w)权限。领导再来查看时,他发现虽然能自由地进入目录和阅读文件,但任何修改的企图都会被系统无情拒绝。他终于明白,我这并非是针对他,而是为了项目代码的万无一失所设立的安全底线。从此,他安心督查,我专注开发,我俩再也没为权限的问题折腾过,项目也得以平稳推进。这一切的功劳,都归功于这个在背后默默守护的"权限掩码"。
这就是权限掩码存在的意义,下面我们告诉各位权限掩码和缺省权限是如何构成最后的权限的:最终权限 == 起始权限 & (~umask【权限掩码】)。就拿我们系统初始的文件和目录权限为例,当权限掩码是002时,其最终权限计算结果如下所示。

当然,每个人的缺省权限都是不太相同的,各位读者可以输入umask代码来查看自己Linux环境下的缺省权限。
3.粘滞位
接下来是我补充的最后一个小知识点,关于粘滞位的介绍,在介绍它之前,我先给各位介绍一下预备知识以及一个小故事:
我们都知道,Linux是多用户的操作系统,当我们进入home目录的时候,就会发现每个用户的目录权限都是一样的:

每个用户仅仅只能访问自己的家目录,这说明Linux用户对用户之间的访问,是隔离的。不过在一个公司中,难免会出现多人共同协作的场景,此时我们需要一个共享文件来共同完成一个任务,此时因为用户之间的访问是隔离的,所以我们想要放置这个共享文件,需要放到别的目录下,我们可以随便找到一个目录,作为所有人可见的目录,此时我们让管理员创建一个文件,并且把它的权限改为拥有者和所属组才可以进行读写操作,这样就能完成进行多人协作了,可能有读者疑惑了,那么粘滞位存在的作用是什么呢?不要急,下面我们依旧一个小故事来介绍粘滞位。
我是忘梓,一天,公司吩咐我和小张共同完成一个任务,此时我和小张为了工作方便,于是创建了一个共享文件,用来存放我们各自写的代码,本来任务完成的速度很快,在某一天,隔壁工作组的小风想要查看我们完成的项目,因为项目的保密性,于是我们言辞拒绝了小张,小张这个人吧,平时就不喜欢别人拒绝他,于是他就想使坏,趁着别人不注意,他进入了共享文件所在的目录,直接使用rm指令删除了我们的共享文件(删除文件属于目录权限),导致我们并没有按时完成任务,直接卷铺盖回家了(o(╥﹏╥)o)。
所以这个故事告诉我们,共享文件不一定是安全的,因为它可能会被别人恶意删除,这个时候就需要我们的好朋友------乐迪(bushi),粘滞位登场了,当我们输入下面的指令。
bash
chmod +t directory_name
就可以给文件添加粘滞位了,此时添加了粘滞位的文件------仅仅拥有者root删掉目标文件,其他用户无法删除,这大大增加了共享文件的安全性,可喜可贺。
到这里,我讲完了Linux的权限所有内容,可能有的内容我在写文章的时候漏掉了,如果有读者有疑问的话,欢迎添加我微信向我反馈,反馈者没有奖励哦~(#^.^#)(开个玩笑)。
2.Linux下的安装
在Linux下,我们肯定有的时候是需要安装软件的,就比如我记着我在某个文件展示过yum指令,但我忘记了,时间有点久远------过了半年在写Linux文章,连自己的文章都忘了是啥了,哈基忘,你这家伙(。不闹了,目前据我所知,Linux下安装软件有三种方式,下面我给各位一一讲述。
1.源代码安装
这个我就不多说了,很好解释,你自己写一段代码,然后这段代码可以帮助你进行相关软件的安装,相信看我的读者大多都是和我一样的菜鸟,这个方式不太适合我们这种新手...
2.rpm包安装
rpm是 Red Hat Package Manager 的缩写,是 Red Hat、CentOS、Fedora 等基于 RHEL 的发行版中核心的底层 包管理工具。它可以用来安装、查询、验证、更新和卸载单个的 .rpm
软件包。
rpm的一个主要特点是它不会自动处理依赖关系 。如果一个软件包 A
需要系统里先存在软件包 B
和 C
才能正常运行,那么当你直接安装 A
时,rpm
会报错并列出缺少的依赖,但不会自动去安装它们。你必须手动找到并安装所有依赖包,这个过程通常被称为"依赖地狱"(Dependency Hell)。
正因为如此,在实际工作中,我们更推荐使用基于 rpm
但能自动解决依赖关系的高级工具 ,如 yum
(CentOS 7) 或 dnf
(CentOS 8+,Fedora)。但理解 rpm
是理解这些高级工具的基础。不过它并不是我们今天的主角,我们今天的主角是下一个方式:包管理器安装
3.包管理器安装-----yum/apt
1.包管理器是什么
关于什么是包管理器,我以一个比较容易的例子为例:相信各位的手机都有一个AppStore或者应用商店的APP,我提出个问题:你们下载的这些app都是存放在手机系统里面的吗?答案是肯定不是的,如果真这么做,1T的手机也没这么能造,其实这些软件都是存放在远端机器中的,我们下载一个软件,无非是:1.搜索;2.下载软件,当我们下载一个软件的时候,此时就是向远端机器中的软件仓库(Repository) 进行软件包的搜索,然后手机本地的包管理程序(如App Store应用) 负责从仓库拉取软件包并执行安装、配置等操作。

上图就是我们的云服务器和软件包管理器之间的练习,当我们想通过yum/apt指令下载的时候,此时其实就是我们的云服务器(或虚拟机)通过软件包管理器从远端的软件包服务器进行查找软件包,并且找到适合的软件吧,将其下载到本地中,也可以说是拖回,这边是yum和apt的工作原理。不过这里会有一个问题,我们使用的Linux操作系统是国外的,而我们此时是在国内,按理说我们下不到国外的软件,此时是我们是如何下载的?这涉及到了镜像的问题,此时我们是通过国内的镜像软件,国内的镜像软件把国外的软件包服务器下载,当我们想要下载软件的时候,此时我们其实是通过国内的镜像下载到的,这点各位了解就好,既然我们学到了操作系统了,那么我们不得说说操作系统的生态了。
2.操作系统的生态
目前全球有很多的操作系统,就比如现在我们学习的Linux操作系统以及可能不少读者都是用的Windows系统或者macOS系统,这些操作系统都是国外的,这个时候可能会有部分读者会疑惑:为什么我们国家不搞个大型操作系统呢?是没有能力吗?首先我得否认这一点,我们国家其实是可以自己搞一个操作系统的,至于为什么不搞,那是因为操作系统研发出来,就必须有良好的生态,说人话就是需要有人去使用研发出来的操作系统,如果操作系统研发出来但没人使用,这个时候就会有不少国家来讽刺我们国家操作系统建设的不好什么的,这样就得不偿失了,因此,目前我们国家不建设操作系统的原因,就是因为操作系统的生态还没有建立出来,那么我说了这么多,肯定有读者会好奇了:哈基忘,你这家伙,说了半天,也没告诉我啥是生态呀?不要着急,下面我就来说说生态是怎么个事。

上图其实就是展示了操作系统的生态,操作系统的生态包括了社区论坛,官方文档,软件体系等等,社区论坛指的是如果这个操作你有任何疑惑或者提出了任何问题,发表到这个论坛上,会有专业的人士给你解答疑惑;而官方文档比不多说了,如果你有不会的知识,可以通过官方的文档来进行自我学习,软件体系就好比上面的软件包管理器,会有着丰富的软件包,从而针对不同读者的软件需求,维护更新速度说明了这个操作系统一直有专人进行各种的修改,就比如打个补丁什么的,不用怕有一天操作系统的开发人员全部跑路了,当然,打铁还需自身硬,如果操作系统本来就不好,那么它的生态会逐渐走向没落的,至于针对的用户群体,这不多说,人往往是构成生态的重点,当操作系统提供好足够的服务后,这个系统的生态自然会好。
所以回归刚开始我说的,目前国内没有精良的操作系统,就是因为生态不太好搭建,不过现在,今时不同往日,华为的鸿蒙系统宛如一颗新星在逐渐升起,在这里我真心的祝鸿蒙系统会将自己的生态做好,有朝一日可以和Windows这种风靡全球的操作系统碰一碰的。

上图形象的展示了,我开头说的,国内的云服务器想要下载软件的时候,需要通过国内的镜像把国外的拷贝过来,之后再从镜像拷贝到云服务中,目前有很多主流的镜像站,感兴趣的读者可以去询问一下deepseek,它会告诉你详细的答案的。不过此时我们的重点并不是左边,而是右边。右边展示了一个开发者开发出一个软件的,并且将其源代码发布出来,此时各个版本的Linux厂商会争先恐后的将其上线到自家的云服务器中,这个时候其实就是企业和企业之间的竞争,当然这并不是今天我们索要讨论的。众所周知,Linux是开源的,我们使用Linux系统是不会有消费的,所以这个时候可能有读者会有疑问了:那么这些操作系统厂商是如何赚钱的呢?为爱发电吗?答案肯定不是这样的,我在上面说过,大型的操作系统会有自己的生态,里面会有各种各样的用户去使用这个操作系统,所以如果操作系统的开发者没有钱的话,那么如果他在某个社区频道抱怨的时候,这个时候就会有匿名账户找他要银行卡账号了,从而给他打钱,这些匿名用户是什么呢?其实就是一个个的公司,这些公司就是在这个操作系统下开发软件的,因此,他们是不希望这个操作系统因为钱这件小事(这话我是怎么说的出口的)而倒闭的,因此,他们会定时给这些操作系统的厂商打钱,防止操作系统有问题。所以这个时候其实就可以得出一个结论了:开源是一种商业模式!
3.yum指令的使用
以上就是关于包管理器和操作系统生态的问题,这些各位读者了解就好,下面我来带领各位学习一下干货:yum相关的指令。
1.查看一个软件是否安装
bash
yum list | grep xxxx #这个xxx代表的就是软件的名字,查找相关软件是否已经被下载了,比如下图的gcc

2.下载一个软件
bash
yum install xxx #这个就是下载软件的指令,就比如下面我这个趣味小软件的下载

上面就是一个趣味软件的下载:会说话的小牛,在演示这个指令之前,我还想给各位读者补充一个小知识点:当我们下载软件的时候,当时普通用户的时候,我们就必须用sudo以超级用户的权限进行各种软件的下载,这么做的原因,我个人认为是就害怕给普通用户开放权利,有些使坏的读者就会下载一些病毒,让系统直接崩掉,所以超级用户或者受信任的下载更安全可靠些,并且,一旦软件下载,那么所有用户均可使用,这里各位读者要牢记,当然捏,我不会忘记给各位演示这个趣味的代码滴。

3.删除一个软件
bash
yum remove xxx #会下载一个软件,删除一个软件应该也有会,这里我就不演示了,各位读者可以自行去尝试(不要删掉重要软件)
4.一些趣味的软件
到最后,我给各位说一下,Linux其实是有许多趣味的软件的,想要了解这些趣味软件的读者,可以自行去AI让它给你生成一个,你绝对会爱上下载趣味软件,当然,我这里也给各位方式一些趣味的指令【均是由AI生成,如果涉及到了版权,请私信我,我一定删除】。
1. cowsay
- 会说话的小牛
让一头ASCII艺术的小牛说出你想说的话。非常适合用来显示一些提示信息或者 just for fun。
安装:
bash
sudo yum install cowsay
使用:
bash
cowsay "Hello, CentOS Master!"
输出:
bash
__________________
< Hello, CentOS Master! >
------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
进阶玩法: 使用管道符
bash
echo "Mooooo" | cowsay
fortune | cowsay # 结合fortune命令(需要安装fortune-mod)
2. sl
- 蒸汽机车(Steam Locomotive)
当你误输入 ls
为 sl
时,一辆蒸汽火车会从你的终端里开过。这是一个经典的"彩蛋"命令,用来提醒你打字要小心。
安装:
bash
# 需要先启用EPEL仓库
sudo yum install epel-release
sudo yum install sl
使用:
bash
sl
效果: 一辆ASCII艺术的蒸汽火车会从右向左驶过你的屏幕。
3. figlet
- 生成大型ASCII艺术文字
将普通文本转换成大型的、由字符组成的艺术字。
安装:
bash
sudo yum install figlet
使用:
bash
figlet "Welcome"
输出:
bash
__ __ _
\ \ / /__| | ___ ___ _ __ ___ ___
\ \ /\ / / _ \ |/ __/ _ \| '_ ` _ \ / _ \
\ V V / __/ | (_| (_) | | | | | | __/
\_/\_/ \___|_|\___\___/|_| |_| |_|\___|
进阶玩法: 结合管道使用
bash
echo "CentOS" | figlet
4. cmatrix
- 模仿《黑客帝国》的代码雨
让你感觉像在《黑客帝国》电影里一样,屏幕上不断落下绿色的数字雨,非常酷炫。
安装:
bash
sudo yum install epel-release
sudo yum install cmatrix
使用:
bash
bashcmatrix
退出: 按 q
键退出。
可选参数:
-
-a
: 异步滚动,看起来更流畅 -
-b
: 随机加粗字符 -
-C blue
: 使用蓝色(blue可替换为red, green, white等)
5. fortune
- 随机名言/笑话
随机显示一条名言、谚语、笑话或者俏皮话。经常和 cowsay
搭配使用。
安装:
bash
sudo yum install fortune-mod
使用:
bash
fortune
输出示例:
bash
The human brain is a wonderful thing. It starts working the moment you are
born, and never stops until you stand up to speak in public.
经典组合:
bash
fortune | cowsay
6. yes
- 无限输出
这个命令会不停地输出你指定的字符串,直到你按下 Ctrl+C
中断它。看起来简单但有时很有用(比如给管道命令提供大量输入或进行压力测试)。
使用:
bash
yes "Are we there yet?"
输出:
bash
Are we there yet?
Are we there yet?
Are we there yet?
Are we there yet?
... (无限循环直到你按 Ctrl+C)
7. rev
- 反转字符串
将你输入的每一行文字反过来显示。
安装: (CentOS 默认通常已安装)
使用:
bash
echo "hello world" | rev
输出:
bash
dlrow olleh
8. aafire
- 终端火焰
在终端里显示一段炫酷的ASCII火焰动画。
安装:
bash
sudo yum install libaa-bin
使用:
bash
aafire
退出: 按 Ctrl+C
退出。
很多有趣的命令在默认的 yum
仓库里没有,需要先安装 EPEL (Extra Packages for Enterprise Linux) 仓库:
bash
sudo yum install epel-release
然后你就可以安装上面提到的大部分软件包了。
这些命令不仅能带来乐趣,还能让你更熟悉命令行的管道操作(|
)、重定向等概念。玩得开心!
3.小结
本文到这也就结束了,这篇文章我带领了各位学习了目录权限,权限掩码,粘滞位以及关于Linux下安装的相关知识,希望各位可以好好的去掌握,有不会的地方可以私信询问我,这里我先预告一下,我下一篇文章将会带领各位学习文本编辑器vim,各位敬请期待!最后,我给各位大佬一个建议(生活上的),每次不要做的太久,久坐后一定要站起来走走,不然就会和我一样,正是奋斗的年纪,结果就有点腰椎间盘突出了,索性还没突出来,希望各位爱惜自己的身体,闲话不多聊了,各位大佬们,我们下一篇文章见啦!
