CSDN技能树评测征文活动-Vue技能树社区
链接点我
小编是双非本科大一菜鸟不赘述,欢迎大佬指点江山(QQ:1319365055)
此前博客点我!点我!请搜索博主 【知晓天空之蓝】
非科班转码社区诚邀您入驻
小伙伴们,打码路上一路向北,背后烟火,彼岸之前皆是疾苦
一个人的单打独斗不如一群人的砥砺前行
这是我和梦想合伙人组建的社区,诚邀各位有志之士的加入!!
社区用户好文均加精(“标兵”文章字数2000+加精,“达人”文章字数1500+加精)
直达: 社区链接点我
倾力打造转码社区微信公众号
shell 即外壳的意思,它是 Linux 的外壳程序,所谓的外壳程序是我们对于他的一个感性认知。
该怎么理解呢?假设有一个场景:
我是一个颜值不上线但是百万年薪的闷骚程序员,公司里新来的程序媛让我坠入爱河,但我根本不敢和她说话甚至目光的交集都让我窒息,所以我找到了和我同一家公司工作的朋友,无话不谈的死党,巧的是他是一个颜值上线的现充,于是乎我就找到他帮我助攻,他爽口答应并且一步上篮。但是不幸的是她是事业型现在根本不想谈恋爱,于是悲伤的故事落下帷幕。
我想强调的是这个场景里面的三个人:“我”,现充死党,女神。他们对应的角色就是用户,shell 外壳,内核。那么问题来了,我用户为什么不直接找内核解决问题呢?很简单,他也是社恐他不山擅于直接和内核打交道。所以用户指令交给OS执行完后才交给 shell, shell 再交给用户命令行解释器。Linux 下外壳指的就是命令行解释器,而 Windows 下外壳指的是图形化界面。
他的第一个意义就是如上所说将使用者的命令交给核心处理,同时将核心的处理结果翻译给使用者,shell 降低了操作 OS 的成本。
第二个意义,假设我是个执着的人,就是想追那位程序媛,我的现充死党就又为了我提枪上阵,但是刚杀到人家办公室就发现她和隔壁办公室的高富帅在打情骂俏,于是无奈之余只能在外面闲绕两圈回来告诉我已经不可能了,我于是接收了这个现实。这个场景里面,现充之所以能成为现充还是因为他八面玲珑会处事。也就是说 shell 会提前为内核把关不合理请求并过滤掉,也就是变相保护了 OS 系统。
在 centos 7 中常用的命令行解释器叫做 bash,shell 作为月老的话 bash 就相当于我的现充死党。
用户分为 root 用户和普通用户,root 用户相当于管理员,我们叫做超级用户,拥有最高权限,我们可以在 root 用户下创建多个普通用户。我们的权限是受管控的,root 和 Linux 下任何一个用户都要设置密码,建议各位不要将 root 密码和普通用户密码搞得一样,对密码不做区分也就是对用户不做区分,你可能就不知道我到底在输谁的密码。
只要知道系统密码,。我们就可以用 su- 命令进行随意切换。
我们知道文件类型加文件属性得到一个文件,我们看看在 Linux 下的文件:
不难发现在用户名 “Asoul” 前面有一串字符,也就是每行第一列的第一个字符就叫做文件类型,也就是说 Linux 系统不是以文件名后缀,区分文件类型的而是通过 ll 指令显示的第一个字符区分文件类型的,比如:
-:普通文件,文本,源代码,可执行程序,第三方动态库等等
d:目录文件
l:链接文件
p:管道文件
b:块设备文件(磁盘这样的设备)
c:字符设备文件
虽然不以文件名后缀区分文件但是如果在 Linux 里执行的话依然会区分,因为 Linux 规则并不等于 gcc 环境规则,这些咱不需要特意去记忆,后面都会遇到的家人们。
什么是权限呢?它是用来约束人的,在对应事物具有的基本属性的范围内,比如一个文件对应文件基本的属性我们权限被分为能访问和不能访问,一个高度的概念就是权限 = 人+事物属性。
在 Linux 系统中,所谓的人分为了三类:
这个 grouper 什么什么东西呢?这就涉及到一个公司对待一个项目时展现出不同的世界观,比如百度奉行绝不会让两个工作组搞相同的事情,拿钱雇你不是让你做相同的事情,一组成功那就意味着另一组必定失败,所以百度觉得这是资源的浪费。但是腾讯化腾就有一手赛马机制,比如现在的微信就是在内部竞争完后才拿出来进行市场竞争。grouper 不是一个非此即彼的关系,除了 owner 本人有权限同组的人或者你的 leader 都可以进行查看。
上面这三者是三种不同角色,和我是 root 用户还是普通用户的身份并不冲突,他们是相互补充的。
每一行指令的前面都有 10 个字符,这 10 个字符我们去掉开头的文件类型,后 9 个三三为一组分成三组:
第一组是拥有者权限,第二组是所属组权限,第三组是other的权限,每一组对应的权限位置含义是确定的:r–,-w-,–x ,分别代表是否可读可写可执行。
后面的 Asoul 是拥有者, root 是所属组,4096 是大小。
chmod 是 Linux 用于修改权限的指令,语法是
chmod [ u/g/o ]+/-/=[ r/w/x ] filename
u,g,o 代表所属组, + 表示增加权,- 表示取消权限,= 表示唯一设定权限,r,w,x 代表读写执行的功能。系统判定权限情况会将他是否具有该权限化为二进制 0/1 ,再把二进制化为一个八进制数,比如所属组 u 是 r-x ,二进制就是 101 ,化成八进制是 7,假设三个所属组一样都是 r-x,就是三组 7,组合下来是 777,我们在 chmod 指令可以直接跟 8 进制(理解上当成 2 进制)指令比如上面这种情况可以写成:
chmod 555 myfile.txt
或者也可以进行全员统一修改:
chmod a=x myfile.txt
这里的 x 可以是 r,w,x ,面对的对象是三个所属组一起修改。
我们想要给别人东西的时候也是需要别人同意的,所以修改所属组是需要询问的,在 Linux 中利用 sudo + chgrp 指令可以达到,他可以达到权限提升的作用,强迫现有所属组接收给予,就好比你收到爷爷奶奶的压岁钱,你爸爸妈妈不想你要,但是爷爷奶奶一声令下:拿着!这时你爸爸妈妈也只就只能勉强答应了。
这就是更改拥有者,我们现在的系统执行 sudo 指令是会报错的,在之后 vim 部分完善后会得到统一解决。之所以他会报错是因为系统里面有一个叫信任列表的东西,你并没有被添加进去,它是一个 etc/sudoers 路径下的一个配置文件,我们现在是没有权限的。
非战斗人员请撤离!注意,这是一个面试题目:如果我想进入一个目录,需要什么权限?
答案是 x ,可执行权限。我们可能会首先想到 r 权限, read 读取权限嘛,结果 chmod - r 后惊奇的发现依然可以进去。如果一个目录没有 r 权限,可以哦进入但是不允许查看,如果没有 w 权限,可以进入但是不能写入比如创建文件这种动作,如果没有 rw 权限并非不能查看文件内容,只是不允许查看目录下的文件列表,文件内容查看只由自己的权限决定。
我们之前说过, Linux 下一切皆文件,目录也是一个文件,只要是文件他就具有文件的基本属性:内容+属性,我们理解目录其实可以当作是在理解文件。
这个图就反应了一个经典的问题:为什么我们创建目录默认权限是 775 ,而普通文件默认权限是 664 ?当然不同的系统可能有差异!
其实按规定默认目录权限是从 777 开始,而普通文件是从 666 开始,但是为什么这里又是 775 和 664 呢?因为系统中还存在一个叫做 umask 的权限掩码:0002,凡是在权限掩码中出现的权限就不能再最终权限中出现。比如默认给出的 777 是这样变成 775 的: