欢迎来到Linux专栏~~权限
Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel?
所以才从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)主要包含
shell外壳的意义:
对比windows GUI,我们操作windows不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)
shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。
大家可能听得糊里糊涂的,下面我就来讲一个感性的故事来认识下Shell
你看上了小花却不好意思去表达心意,你找到了你爸(村长),让你爸找媒婆帮你说媒,你和王婆沟通完后,媒婆就去和如花私下转达一番
(●ˇ∀ˇ●)shell 可以传递
请求命令,让OS执行
命令
可是小花回答说:根本不喜欢你,说不是她的猜,她已经有男朋友了
好比下面
这里相当于媒婆保护了小花,免受打扰 (●ˇ∀ˇ●)shell 可以保护内核
我们在Linux中用的外壳程序是bash
对应王婆,而我们上面的shell
对应的就是媒婆
王婆只是众多媒婆里的一个,bash同理
root
:最高权限 ~ 可以再linux系统下做任何事情,不受限制这两套密码绝对要不一样,否则会产生权限界限不清的状况
ps:超级用户的命令提示符是“#”,普通用户的命令提示符是“$
普通用户切换为root
su -
su
su
切换成root用户以后,pwd一下,发现工作目录不变仍然是普通用户的工作目录;而用su -
命令切换以后,工作目录变成root的工作目录了
本质区别如下:
su
只是切换了root身份,但Shell环境仍然是普通用户的Shellsu-
连用户和Shell环境一起切换成root身份了root切换为普通用户
su - ljj //举例
众所周知root是万能的,和这位一样——》LeBron James
说明root可以变成任何人,且不需要输密码,在我们的自己的服务器就可以尽情爽
回退我们可以直接输入exit
或者 直接【ctrl +d
】
权限是啥意思?允许特定的人做某件事情。针对人的:比如不是我们学校的人就进不来我们学校、不是一家人就进不了一家门。针对事物属性:我想去吃一台电脑、我想在面包上玩英雄联盟、看电影。面包能吃,但是电脑不能吃、你可以吃面包,但是不能吃电脑;这里面包括了两个属性。
权限约束的是人,文件本身具有天然的权限属性(读r写w执行x)。所以权限 = 人 + 事物属性
。
我们在基础指令阶段的ll
可以显示更多文件属性
linux用户类别
不需要列出other,因为不是拥有者和所属组的就是other了
ps:所属组就好比团队,比如说我们常用的微信是一开始由很多个团队做,只是由张小龙团队胜出了
比如说:一个部门有两个项目组在竞争性完成一个项目,张三写的绝妙代码,我想让自己能看见,同组人能看见,其他组的看不见。如果领导王五想要来看,我就把他归进我的所属组内,other还是看不见
在Linux系统中,不以文件后缀区分文件类型,也就是说文件类型与后缀没有直接关系。
(但不代表不可以使用,在系统层面没意义,可以给自己看)
对了gcc是一个Linux上的软件,它是分后缀的哦,不要和Linux系统搞混了
Linux下一切皆文件,文件类型 ——
d 目录文件
- 普通文件(各种动静态库,可执行程序,源程序)
—————————————————下面只做了解————————————————————————
l 软链接link(类似Windows的快捷方式)
b 块设备文件bar(例如硬盘、光驱等)
p 管道文件pile(通信操作)
c 字符设备文件(例如键盘显示器等串口设备)[后序会站在系统角度重新理解]
s 套接口文件
剩下的9列:
三三为一组,分别对应拥有者、所属组、其他人;三个字母分别对应文件属性,读r
、写w
、执行x
,无对应的是-
。每个字母都具有两态概念,即是否其具有读权限、是否具有写权限、是否具有可执行权限。
那下面的举例:拥有者可读可写可执行、所属组可读可写可执行、other可读可执行 不可写
drwxrwxr-x 2 ljj ljj 4096 Aug 13 09:07 code
a.字符表示方法
chmod u+w file.txt
也就是
chmod 用户表示符+/-=权限字符 文件名
用户表示符
u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户
更改一个人的一个权限
更改一个人的多个权限
更改多个人的多个权限
如果要修改不是自己的文件的时候需要sudo
临时权限提升或者直接切成root身份
sudo chmod 用户表示符+/-=权限字符 文件名
那么我们没有权限会是什么样子呢?
普通文件被约束权限的状况
那么root受到权限约束吗?
root 竟然不经过拥有者的允许,直接把读写权限都干掉了,修改了我的权限属性
更过分的来了
root作为文件的other,无视一切约束,还是可以为所欲为
作总结:权限是用来约束普通人的,root是不受任何限制的
好比海贼王里的天龙人。我们认识到世界的不一样,我们也依然热爱这个世界(奥利给)
chown指令
❗更改文件拥有者
chown [参数] newUser filename
更改是需要得到别人的允许的,一般直接更改是不行的。
给别人东西,人家不同意咋办?那我们就强迫他同意哈哈哈(借用root之手)
这时我们可以sodu
进行临时的权限提升或者直接切成root身份
sudo chown root file.txt 或 su
(要想执行sudo,需提升权限,要求该用户在信任列表中,才可以执行,添加用户到信任列表是要root身份的)
还有可以直接切换成root
可以看见root就是这么为所欲为
chgrp指令
❗更改文件或目录所属组
sudo chgrp newGrp filename
还有那样root就是为所欲为
ls
等命令查看目录中的文件内容这都是显而易见的,那么进入目录需要什么权限?
cd
到目录中x
r
w
为何我们创建一个目录或者文件,默认权限是你所看到的样子?
默认权限 = 起始权限 &(^ 权限掩码)
起始权限
666
777
权限掩码
但是当我们创建的文件和目录,看到的权限往往不是上面的这个值,这是因为还受到权限掩码的影响
凡是在umask中出现的权限,都不应该在最终权限中出现!
超级用户默认掩码值为0022
(第一个0表示八进制),即000 010 010
;普通用户默认掩码值为0002
,即000 000 010
.
八进制就是0开头
rwxrwxr-x ?
111111111 起始权限
000000010 umask
——————————————————————
111111101 默认权限
rwxrwxr-x 775
那这时候如何做到的呢?
是做减法吗?❌
默认权限 = 起始权限 &(^ 权限掩码)
在八进制中直接对应位做减法可快速计算(只是机缘巧合)
我们也是可以自定义umask的——
umask 0777 所有人啥权限都没有
在目录里touch了几个拥有者为root的文件,且对other什么权限也没有
那么现在我以普通人的身份来,也就是other身份来看,这些文件对我什么权限都没有,我不能看,不能改,那我就不爽了我把你文件做掉
我竟然就真的做掉了!!
这是因为你目录本身就是对我就是可写的,我可以删自己的也可以删别人的。如果我们去掉目录的写[w]权限,那就确实删不掉了 ——
w
权限此处的场景:大家所有用户都在共同的一个路径下,对该目录具有读写执行权限
那我们不想别删咋办?吧目录的w权限去掉?不现实,因为这样我们拥有者都删不了自己的文件了
噔噔蹬蹬 闪亮登场
粘滞位
现在我有这样的需求,当多个用户共享一个目录,需要在该目录下,进行读写创建删除文件。但是自己只能删除自己的,而不能删除别人的(w:可以互删,不满足条件)
chmod o+t dir
ps:
目录
设置(一般是对other)文件的拥有者
或root
可以删除,其他人不能删除我们linux下就有这样一个目录tmp:用于储存临时文件
有时,有多个人或者系统会有很多的临时数据,所有的临时文件都放在系统的*/tmp*目录下。所有的权限需要放开,但是只想让文件的拥有者删除自己的文件,这需要设置粘滞位
vim
》等…一键三连撒