目录
一、shell的理解
二、Linux权限
一、用户的引入
二、权限管理
一、什么是权限
二、Linux下的权限
三、视图展示
四、文件类型
五、为什么gcc编译器编译.txt后缀的文件有问题?
六、修改权限
一、chmod设置文件的访问权限
一、基本使用
二、八进制方案(访问所有人的权限)
二、chown修改文件拥有者
三、sudo对指令做提权操作
为什么提权了还要输入密码?
四、chgrp修改文件所属组
七、Linux规定下的目录和普通文件的起始权限以及umask修改默认权限掩码
八、为什么目录起始权限是777呐(答案在最后)?
九、file指令查看文件类型
三、粘滞位
一、背景
二、使用
三、作用
四、关于权限的总结?
一、shell的理解
Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel) “ ,但我们一般用户,不能直接使用kernel。而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel?
从技术角度, Shell的最简单定义:命令行解释器(command Interpreter)主要包含:
将使用者的命令翻译给核心(kernel)处理。同时,将核心的处理结果翻译给使用者。
shell变相的保护操作系统,比如张三是用户、王婆是shell、操作系统是美女。张三不怎么会说话,想跟美女处对象,王婆作为媒人帮助张三,张三把自己要说的传递给王婆,王婆再传递给美女,映照了人不能直接和操作系统对话,也就是在Linux使用中我们常见权限不够、不允许、是否确认访问等情况。
二、Linux权限
一、用户的引入
Linux下的用户分超级用户(root)、普通用户,超级用户可以在Linux系统下做任何事情不受约束,普通用户则受约束,超级用户的命令提示符是#,普通用户是$
切换方式
普通用户:su 用户名
超级用户:su root(root可以省略)
扩展:su - 切换到root用户,且目录改为root的家目录
su 切换到root用户,且目录仍然是当前目录
二、权限管理
一、什么是权限
权限可以理解为文件本身的权限和文件对角色的限制(例如腾讯视频不是用来做OJ的,腾讯视频给VIP用户提供观看VIP电影的权限)
文件是由文件属性和文件内容构成的,属性包含文件对角色的限制,文件本身的属性(类型、大小等)
二、Linux下的权限
我的一篇《Linux-常见指令详解》一文中提到过Linux文件后缀与Windows不同,Liunx当中区分文件类型和文件后缀是没有关系的,仅仅是给用户做一个提示,后缀本质其实就是文件名的一部分,这正与文件的属性相对应,在shell里面可以输入ll 文件名,查看文件详细信息,前面会有一些字母,包含rwx-,r表示读,w表示写,x表示执行,-表示无(即顺序应当是rwx,但显示rw-,则表示没有x权限),ll详细信息前的2-10位的字符是三三为一组,第一个字符是文件类型。
从左往右,第一个表示文件的属性,后9个表示文件对角色的访问限制,而不是具体的人,角色从左往右分为文件的拥有者、所属组、其他人。
三、视图展示
四、文件类型
d:目录文件
-:普通文件(源代码、库文件、可执行程序、文档压缩包等等)
l:链接文件(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)
s:套接口(socket)文件
其中前两个必须掌握。
五、为什么gcc编译器编译.txt后缀的文件有问题?
因为gcc等工具,对文件后缀可能有要求,跟Linux没有关系。
六、修改权限
一、chmod设置文件的访问权限
一、基本使用
1.+增加权限 -去除权限
eg:chmod o-w 文件名
意为去除其他人写的权限
2.也可以用逗号分隔继续
eg:chmod u-rwx,g-rwx,o-rwx 文件名
意为去除拥有者rwx权限,去除用户组rwx权限,去除其他人rwx权限
3.=:向权限范围赋予权限代号所表示的权限
eg:chmod a=x /home/abc.txt
意为给所有人赋予x权限
4.a:所有用户
5.R -> 递归修改目录文件的权限
二、八进制方案(访问所有人的权限)
理解为二进制的1为存在,二进制的0为没有,比如修改文件权限:
rwx rw- r--
111 110 100
7 6 4
chmod 764 文件名/目录名
二、chown修改文件拥有者
chown [参数] 用户名 文件名
eg:chown 用户名 文件名
chown -R 用户名 目录名
当然所有跨界操作都应当是文件的拥有者、所属组、超级用户可以执行命令,也可以使用sudo。
三、sudo对指令做提权操作
在root用户下的/etc/sudoers可以编辑白名单列表,就是添加信任用户,sudo指令指不切换用户,使普通用户以root用户的身份执行对应的指令,短暂的提权。
为什么提权了还要输入密码?
给受信任的用户,提供最少的执行障碍。
四、chgrp修改文件所属组
与chmod、chown一样有-R选项,递归修改文件或目录的所属组。
格式:chgrp [参数] 用户组名 文件名
七、Linux规定下的目录和普通文件的起始权限以及umask修改默认权限掩码
目录:0777,文件:0666(这里是八进制表示形式,以0开头)
可以通过umask修改起始权限
umask可以查看或修改文件掩码 #umask #umask 0000
当然有时候创建文件和目录的起始权限不是上面那样,因为受到umask的影响,假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask
即:最终权限=起始权限&(~umask)
那么特殊情况会出起始权限-权限掩码就是最终权限,其实并不这样。
逻辑规则是:umask,默认去掉的位是1,要保留的位是0
~umask,要去掉的位是0,要保留的位是1
八、为什么目录起始权限是777呐(答案在最后)?
一个问题,如果我们进入一个目录需要什么权限?
r权限是查看目录里的文件,w是在目录里创建文件,x是进入目录,所以所有的目录被创建出来一般都需要x权限进入,如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容,如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件.
九、file指令查看文件类型
语法: file [选项] 文件或目录...
常用选项:
-c 详细显示指令执行过程,便于排错或分析程序执行的情形。
-z 尝试去解读压缩文件的内容
三、粘滞位
一、背景
搞一块公共的目录,方便所有人访问,进行读写执行,但是有个缺陷。
由于目录的权限rwx全有导致其中文件可以被删除,这是不科学的,可恶的目录,不让其他人看读写,其他人就有可能删除这个文件,受害人就是拥有者。
所以粘滞位就担任了给目录设置防止互删文件的权限
二、使用
所以使用root用户:chmod +t 目录名
或
sudo chmod +t 目录名
注意:sudo提权操作是需要输入当前用户密码的
测试样例:使用root用户在根目录下创建一个目录,公共目录的属性值应当是777,即所有人都是rwx,chmod 777 目录名,使用普通用户1创建文件,设置other权限为0,使用普通用户2访问这个文件是不被允许的,但是可以删掉这个文件。
三、作用
该目录被设置成粘滞位,只能被root用户、文件的拥有者、目录的拥有者可以删除
四、关于权限的总结?
目录的可执行权限是表示你可否在目录下执行命令。
如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目录, 即使目录仍然有-r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)
而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限,所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。