文章目录
- 一、shell 命令以及运行原理
- 二、Linux 权限的概念
- 三、Linux 权限管理
- 01.文件类型和访问权限(事物属性)
- 02.文件访问的分类(人)
- ①用户分类
- ②角色划分
- 03.文件权限值的表现方法
- 04.文件访问权限的相关设置方法
- (a.)chmod 指令
- (b.)chown 指令
- c)chgrp
- 补充:file 指令
- 四、目录的权限
- umask
- 五、粘滞位
- 六、关于权限的总结
一、shell 命令以及运行原理
Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。 而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel?
从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)主要包含:
- 将使用者的命令翻译给核心(kernel)处理。
- 同时,将核心的处理结果翻译给使用者。
对比windows GUI,我们操作windows不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符,或者运行起来一个应用程序)。
shell对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运 行出结果,通过shell解析给用户。
注:shell 和 bash 就像是水果和苹果之间的关系,bash 是 shell 的其中一个。
二、Linux 权限的概念
权限:人 + 事物属性(这里的事物主要是指文件)
三、Linux 权限管理
01.文件类型和访问权限(事物属性)
- 文件类型:
Linux下不用文件后缀区分文件类型- d:文件夹
- -:普通文件
- l:软链接(类似Windows的快捷方式)
- b:块设备文件(例如硬盘、光驱等)
- p:管道文件
- c:字符设备文件(例如屏幕等串口设备)
- s:套接口文件
文件后缀名的意义:给用户自己看;用于其他软件识别文件类型
例如:gcc(如下)
用 gcc 编译文件:
[root@VM-12-2-centos dir3]# gcc test2.c
[root@VM-12-2-centos dir3]# tree
.
|-- a.out
|-- dir
|-- hi
|-- test2.c
`-- test.txt
1 directory, 4 files
[root@VM-12-2-centos dir3]# ./a.out
改变文件名的后缀:
Hello World![root@VM-12-2-centos dir3]# mv test2.c test2.txt
[root@VM-12-2-centos dir3]# gcc test2.txt
test2.txt: file not recognized: File format not recognized
collect2: error: ld returned 1 exit status
👆 gcc 无法编译
- 文件权限:
三三为一组,分别对应—— 读、写、执行 ——rwx
(顺序不可变!)
一共三组,每组分别对应——文件拥有者、文件所属组、其他(other)
i.读(r/4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
ii.写(w/2):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
iii.执行(x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
iv.“—”表示不具有该项权限
02.文件访问的分类(人)
①用户分类
- 超级用户 root ——基本不受权限约束
- 普通用户
超级用户:可以再linux系统下做任何事情,不受限制
普通用户:在linux下做有限的事情。
超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。
-
su -
:以 root 用户重新登录,默认在用户的家目录下 -
su [username]
:切换到其他用户(但要在 root 用户的情况下才可以随意切换),没指明切换到哪个用户(没写 [username])默认是切换到 root 用户,然后提示需要输入对应切换到的用户的密码 -
sudo [command]
:对单条指令提权 - ctrl + d :退出
②角色划分
- 三种角色:
1.文件拥有者;
2.文件所属组;(类似开放朋友圈指定好友可见的“指定好友”)
3.其他(other).
03.文件权限值的表现方法
- 字符表示法
Linux表示 | 说明 |
---|---|
r– | 只读 |
-w- | 仅可写 |
–x | 仅可执行 |
rw- | 可读可写 |
-wx | 可写和可执行 |
…… | |
rwx | 可读可写可执行 |
- - - | 无权限 |
- 8进制表示方法
权限符号 (读写执行) | 八进制 | 二进制 |
---|---|---|
r– | 4 | 100 |
-w- | 2 | 010 |
–x | 1 | 001 |
rw- | 6 | 110 |
…… | ||
rwx | 7 | 111 |
- - - | 0 | 000 |
04.文件访问权限的相关设置方法
(a.)chmod 指令
-
功能: 设置文件的访问权限
-
格式:
chmod [参数] 权限 文件名
-
常用选项:
- R -> 递归修改目录文件的权限(说明:只有文件的拥有者和root才可以改变文件的权限)
-
chmod
① 用户表示符+/-=权限字符
+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
用户符号:
u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户
示例:
eg. chmod u+r [文件]:给该文件 拥有者 增加 读 权限
eg. chmod g+w [文件]:给该文件 所属组 增加 写 权限
eg. chmod o-rwx [文件]:给 其他人 减去 读写执行 权限
②三位8进制数字
- 有权限:1
- 无权限:0
如下图 rwxr-xr-x
换算成二进制 111 101 101 换算成八进制就是:7 5 5
如下指令:
chmod 777 [文件]
777 → 111 111 111 → rwx rwx rwx 即设定 文件所有者、文件所属组、其他 的权限均为:可读可写可执行
(b.)chown 指令
- 功能: 修改文件的拥有者
- 格式:
chown [参数] 用户名 文件名
c)chgrp
- 功能: 修改文件或目录的所属组
- 格式: chgrp [参数] 用户组名 文件名
- 常用选项: -R 递归修改文件或目录的所属组
补充:file 指令
- 功能说明: 辨识文件类型。
- 语法:
file [选项] 文件或目录...
- 常用选项:
- -c 详细显示指令执行过程,便于排错或分析程序执行的情形。
- -z 尝试去解读压缩文件的内容。
四、目录的权限
- 进入目录 需要什么权限? → answer:
x
- 默认权限(不同的操作系统,默认权限可能不一样)
文件类型 | 默认权限 |
---|---|
普通文件 | 664 |
目录 | 775 |
权限类型 | 含义 |
---|---|
默认权限 | 你看到的 |
起始权限 | 系统设定的 |
最终权限 | 最终设定的权限 |
- 起始权限
文件类型 | 起始权限 |
---|---|
普通文件 | 666 |
目录 | 777 |
umask
- 起始权限 → 最终权限?(how?)
超级用户默认掩码值为0022,普通用户默认为0002。
0 0 0 2
(8进制)→ 转化为二进制 → 000 000 010
普通文件 的 起始权限:666
6 6 6 → 转化为二进制 → 110 110 110
0 0 2 → 转为为二进制 → 000 000 010
权限掩码:在起始权限中,去掉在umask中出现的权限,不影响其他任何权限
运算过程:最终权限 = 起始权限 & (~umask)
关于 umask 指令:
# umask //查看
# umask 044//设置 → 更改 umask 的值
五、粘滞位
背景:共享目录 开放于 所有普通用户,用于保存产生的临时文件(家目录一般只对使用者自己开放,一般由 root 提供),虽然受到权限的约束,由于 共享目录的 开放性 导致别的用户可以 删除 我的文件。
-
为什么 别人可以删除我的文件?
- 能访问目录就具有
w
权限,w
权限能创建文件,亦能删除文件(必须有w
权限,不然这个共享目录就没法用)
- 能访问目录就具有
-
如何解决 这个“其他用户可能删除共享目录下我的文件”的问题?
- 粘滞位
-
操作:
(sudo) chmod +t [dir]
# 加上粘滞位
设置粘滞位之后谁还能删除?
- root
- 文件拥有者
- 文件所属组
六、关于权限的总结
- 目录的可执行权限是表示你可否在目录下执行命令。
- 如果目录没有 -x 权限,则无法对目录执行任何命令,甚至无法cd 进入目录, 即使目录仍然有 -r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)
- 而如果目录具有 -x 权限,但没有 -r 权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限
- 所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。
END