目录
[chown 该拥有者](#chown 该拥有者)
[chgrp 改所属组](#chgrp 改所属组)
shell的原理
我们广义上的Linux系统= Linux内核+Linux外壳
Linux严格意义上说的是⼀个操作系统,我们称之为"核⼼(kernel)",但我们⼀般⽤⼾,不能直接 使⽤kernel。⽽是通过kernel的"外壳"程序,也就是所谓的shell,来与kernel沟通。
为什么要有一个外壳呢?
首先我们的用户不擅长和我们的内核进行访问,并且我们的内核也不会同意让用户直接和它进行访问
所以我们的外壳会将我们的指令翻译交给我们的内核,我们外壳在将我们的内核的处理的结果翻译给我们的用户。
从技术⻆度,
Shell的最简单定义:命令⾏解释器(commandInterpreter)
主要包含:
-
将使⽤者的命令翻译给核⼼(kernel)处理。
-
同时,将核⼼的处理结果翻译给使⽤者
在我们的Windows系统中,我们的外壳程序就是我们的图形化界面,我们通过单击或者双击我们的图形从完成我们的操作。
为了保证我们的外壳程序的稳定性,我们可以创建一个子进程来帮我们 进行命令行解释,在我们的xshell中我们的具体外壳程序是我们的bash。
Linux权限
Linux的用户分为两种:
超级用户和普通用户
-
超级用户:可以再linux系统下做任何事情,不受限制
-
普通用户:在linux下做有限的事情。
-
超级用户的命令提示符是"#",普通用户的命令提示是"$"。
命令:su [⽤⼾名]
**功能:**切换⽤⼾。
例如,要从root⽤⼾切换到普通⽤⼾user,则使⽤suuser,不用输入密码。 要从普通⽤⼾user切换到root⽤⼾则使⽤suroot(root可以省略),此时系统会提⽰输⼊root⽤⼾的 ⼝令。
sudo命令提权
普通用户如果我们不想进行身份切换,而对一条命令进行身份提权。就是用我们的sudo 命令
这个时候我们还是要我们输入密码,但是使用自己的密码。而不是我们的root的密码
但是我们的sudo不一定能用,是因为我们系统中存在一个类似于白名单的东西,在文件/etc/sudoer中的配置文件中。
你将我们自己的用户添加在这个配置文件中,再去执行我们sudo就可以一超级用户的权限去执行了
sudo 命令
权限
权限=人+事物属性。
我们Linux当中的权限是指文件的权限。
对于文件来说:
-
拥有者
-
other
-
所属组
但我们的用户不是拥有者也不是所属组就是other。
我们Linux为了进行更加细粒度的权限管理,就有我们的所属组。
文件的属性
我们自己想做一件事情,一方面取决于我们的是谁,另一方面取决于我们的文件的属性
比如我们不能在我们的爱奇艺中进行编程,不能再我们的leedcode进行看电影。
⽂件类型:
-
d:⽂件夹
-
-:普通⽂件 ◦
-
l:软链接(类似Windows的快捷⽅式)
-
b:块设备⽂件(例如硬盘、光驱等)
-
p:管道⽂件
-
c:字符设备⽂件(例如屏幕等串⼝设备)
-
s:套接⼝⽂件
基本权限:
-
读(r/4):Read对⽂件⽽⾔,具有读取⽂件内容的权限;对⽬录来说,具有浏览该⽬录信息 的权
-
限 ◦ 写(w/2):Write对⽂件⽽⾔,具有修改⽂件内容的权限;对⽬录来说具有删除移动⽬录内 ⽂件的权限
-
执⾏(x/1):execute对⽂件⽽⾔,具有执⾏⽂件的权限;对⽬录来说,具有进⼊⽬录的权 限 ◦ "---"表⽰不具有该项权限
我们如何第一个人进行身份认证呢?
我们先将我们一个具体的人属于什么身份判定清楚,之后他是什么身份,就拥有什么权限。
我们在确定身份的时候只能确定一次,顺序为 拥有者、所属组、other。
chmod 改权限
功能:设置⽂件的访问权限
格式:chmod[参数]权限⽂件名
常⽤选项:
- R->递归修改⽬录⽂件的权限
只有⽂件的拥有者和root才可以改变⽂件的权限
chmod 命令权限值的格式:
• ⽤⼾表⽰符+/-=权限字符
-
+:向权限范围增加权限代号所表⽰的权限
-
-:向权限范围取消权限代号所表⽰的权限
-
=:向权限范围赋予权限代号所表⽰的权限
⽤⼾符号:
-
u:拥有者
-
g:拥有者同组⽤
-
o:其它⽤⼾
-
a:所有⽤⼾
例子:chmod u+w /home/abc.txt
chmod o-x /home/abc.txt
chmod a=x /home/abc.txt
注意:我们给我们的文件加上我们的可执行权限,我们的文件不一定能够可执行。
因为我们的文件可执行,需要文件本身就可以执行,并且具有可执行权限。
我们的权限是说是否有读/写/可执行具有两面性,我们转化为二进制就可以用1/0来表示。
例子: rw-就是110。
我们的110转化为八进制就是我们的6
我们可以用三个八进制数字来代表所有用户的权限。
三位8进制数字
实例: chmod 664 /home/abc.txt
chmod 640 /home/abc.txt
umask
功能: 查看或修改⽂件掩码
新建⽂件夹默认权限=0666
新建⽬录默认权限=0777
但实际上你所创建的⽂件和⽬录,看到的权限往往不是上⾯这个值。原因就是创建⽂件或⽬录的 时候还要受到umask的影响。
假设默认权限是mask,则实际创建的出来的⽂件权限是:
mask& ~umask
格式:umask 权限值
说明:将现有的存取权限减去权限掩码后,即可产⽣建⽴⽂件时预设权限。超级⽤⼾默认掩码值为 0022,普通⽤⼾默认为0002。
实例: • umask 755 • umask //查看 • umask 044//设置
我们不仅能够改权限,还可以改我们的拥有者
chown 该拥有者
**功能:**修改⽂件的拥有者
**格式:**chown[参数]⽤⼾名⽂件名
例子:chown user1 f1
chown -R user1 filegroup1
chgrp 改所属组
功能:修改⽂件或⽬录的所属组
格式:chgrp[参数]⽤⼾组名⽂件名
常⽤选项:
- -R递归修改⽂件或⽬录的所属组
实例: chgrp users /abc/f2
最后:
我们把文件给别人,需要得到别人的允许,草鸡用户不需要,可以直接给,但是去询问不方便,我们一般直接sudo权限提权去进行。
目录权限
-
可执⾏权限:如果⽬录没有可执⾏权限,则⽆法cd到⽬录中.
-
可读权限:如果⽬录没有可读权限,则⽆法⽤ls等命令查看⽬录中的⽂件内容.
-
可写权限:如果⽬录没有可写权限,则⽆法在⽬录中创建⽂件,也⽆法在⽬录中删除⽂件.
于是,问题来了~~换句话来讲,就是只要⽤⼾具有⽬录的写权限,⽤⼾就可以删除⽬录中的⽂件,⽽不论 这个⽤⼾是否有这个⽂件的写权限. 这好像不太科学啊,我张三创建的⼀个⽂件,凭什么被你李四可以删掉?
所以我们的Linux中引出了粘滞位的概念
粘滞位
粘滞位是类Linux系统(如Linux、macOS)中的一个特殊文件权限标志,通常用于控制文件或目录的访问权限,特别是在公共目录中。它通常用来限制用户对文件的删除或重命名权限,即使该用户对该目录有写权限。
作用:
当一个目录设置了粘滞位时,即使目录中的文件的所有者具有删除或修改该文件的权限,其他用户只能删除自己创建的文件或目录,而不能删除其他用户的文件。这样可以避免用户误删或恶意删除其他用户的文件。
设置粘滞位的常见用途
-
公共目录:对于共享的公共目录(例如 /tmp),粘滞位防止了非所有者的用户删除或重命名其他人的文件。
-
安全性:通过使用粘滞位,可以确保其他用户不会干扰你在公共目录中的文件,即使他们也有写权限。
在文件或目录的权限部分,粘滞位通常以 t 表示。如果你使用 ls -l 命令查看一个目录的权限并看到 t,就表示该目录设置了粘滞位。
你可以使用 chmod 命令来设置粘滞位。
设置粘滞位:
chmod +t /path/to/directory
总结
-
粘滞位 用于控制用户在公共目录中的删除权限。
-
设置了粘滞位的目录,用户只能删除自己创建的文件,而无法删除其他人的文件,即使他们对该目录有写权限。
-
通常用于如 /tmp 这样的临时目录中,防止用户误删或恶意删除其他人的文件。