Linux基础篇之文件权限问题讲解
个人主页:欢迎大家光临——>沙漠下的胡杨
各位大帅哥,大漂亮
如果觉得文章对自己有帮助
可以一键三连支持博主
你的每一分关心都是我坚持的动力
![]()
☄: 本期重点:Linux下的权限
希望大家每天都心情愉悦的学习工作。
目录
☄: 本期重点:Linux下的权限
shell外壳程序:
权限的概念:
简单认识文件的属性
权限中 “人” 的概念
文件的权限:
2.修改事物的属性
面试题总结:
1.目录权限
2.umask权限掩码
3.粘滞位
权限的总结:
shell外壳程序:
我们先从操作系统和shell外壳说起,我们的Linux实际上是一个操作系统,但是我们一般人能不能够直接操作操作系统,要使用一个外壳程序来帮助我们使用操作系统。
从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)主要包含:
将使用者的命令翻译给核心(kernel)处理。同时,将核心的处理结果翻译给使用者。
我们一般使用windows时,是通过点击图形化界面的方式进行操作的。而我们使用Linux时,是使用一个外壳程序来进行对我们的指令解析给操作系统,最后通过内核进行运算后,输出结果,然后shell外壳在进行解析呈现到人的面前。这也就是我们在使用shell外壳的原理,我们敲击的各种命令其实上也不是直接访问的操作系统。
权限的概念:
我们在Linux下用户是被分为两类的,一类是超级用户,也就是root,一类是普通用户。他们之间的区别如下:
超级用户:可以再linux系统下做任何事情,不受限制
普通用户:在linux下做有限的事情。
超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。当然我们不能让一个文件做不属于它属性外的事情,比如你让一个文件给你买菜做饭,或者是让一个文件给你填饱肚子,这些都是不属于这个文件的属性,此时即使是超级用户也不行,也就是说权限这个东西,其实上是当文件有这些属性时,在当前用户下你是否可以执行一些命令。
所以说权限的核心就是:用户+事物的属性。
简单认识文件的属性
我们简单的看下一个文件的基本属性吧,我们 ls -l 或者 ll 可以查看文件详细的属性。
[ssh@VM-4-10-centos 22.7.24]$ ls -l total 4 -rw-rw-r-- 1 ssh ssh 12 Jul 24 16:39 test.txt
这是文件的基本属性,我们整体分析下:
1. ll显示的第一个字符表示的是文件的类型:
d:表示的是目录文件。(常见)
-:表示的是普通文件(可执行的文件也是普通文件)(常见)
p: 表示的是管道文件
b: 表示的是块设备(磁盘设备)
c: 表示的是字符设备(键盘或者显示器)
l :表示的是链接文件
文件的拥有者和所属组以及other
拥有者:就是文件属于谁。
所属组:文件属于那个组。
other:如果都不属于,那么就是other。
剩下的属性比较简单就不再解释。
权限中 “人” 的概念
我们上述说了,在Linux下可以有多个用户,可以有超级用户,这些是实际中对应的是用户的概念,一般我们不谈论root,因为root不受权限约束,我们针对一个文件对不同用户的权限,
其中文件常见的属性为读(r)写(w)可执行(x), 我们根据其中的权限的不同,把用户分为了三类 “人” :
1. 拥有者
文件属于谁谁就是拥有者。拥有者权限对应的是 ll 显示文件名中第2个到第4个字符。其中这三个字符分别对应的是读(r)写(w)可执行(x)。
2.所属组
和文件的拥有者一组的成员,就叫做所属组。就像我们日常的工作分组。所属组权限对应的是 ll 显示文件名中第5个到第7个字符,这三个字符对应的是读(r)写(w)可执行(x)。
3.other
不属于上面的任何一个,就是other,other权限对应的是 ll 显示文件名中第5个到第7个字符,这三个字符对应的是读(r)写(w)可执行(x)。
所以权限我们是分“人”来看的,不同的人有不同的权限。而每个人具体点就是普通用户,而超级用户(root)不受权限约束。
注意:在Linux下,我们文件的区分就是 ll 显示的第一个字符,表示的文件类型决定的,不以后缀进行区分,而在windows下我们是以后缀区分的。但是,我们在Linux下的一些工具,比如gcc,这些工具会以文件后缀区分文件,但是在Linux系统看来,是没有任何区别的,所以Linux下,也不排斥这种现象。
文件的权限:
我们怎么描述一个文件的权限呢?
[ssh@VM-4-10-centos 22.7.24]$ ls -l total 4 -rw-rw-r-- 1 ssh ssh 12 Jul 24 16:39 test.txt
这个文件,拥有者具有读写权限,所属组具有读写权限,other只有读权限。
那我们怎么修改权限呢?
首先,权限的核心是:“人” +事务属性。
1. 我们可以通过修改 “人”,来获取不同的权限,我们可以通过更高级的权限,来进行修改文件的拥有者或者所属组,达到我们的目的。
常见的方法:<1>切换成root进行修改。<2>使用root同级的权限修改(sudo指令)
我们使用root权限修改拥有者和所属组后发现,我们文件的拥有者和所属组已经发生改变,如果我们此时把文件进行写入,我们发现不能写入了,原因是我们现在是other了,只有读权限,没有写权限了。这个叫做修改 “人” 的操作,我们改变了我们访问的权限。
[ssh@VM-4-10-centos 22.7.24]$ ls -l total 4 -rw-rw-r-- 1 ssh ssh 12 Jul 24 16:39 test.txt [ssh@VM-4-10-centos 22.7.24]$ whoami ssh [ssh@VM-4-10-centos 22.7.24]$ su Password: [root@VM-4-10-centos 22.7.24]# ls -l total 4 -rw-rw-r-- 1 ssh ssh 12 Jul 24 16:39 test.txt [root@VM-4-10-centos 22.7.24]# chown huyang test.txt [root@VM-4-10-centos 22.7.24]# ls -l total 4 -rw-rw-r-- 1 huyang ssh 12 Jul 24 16:39 test.txt [root@VM-4-10-centos 22.7.24]# chgrp huyang test.txt [root@VM-4-10-centos 22.7.24]# ls -l total 4 -rw-rw-r-- 1 huyang huyang 12 Jul 24 16:39 test.txt [root@VM-4-10-centos 22.7.24]# exit [ssh@VM-4-10-centos 22.7.24]$ whoami ssh [ssh@VM-4-10-centos 22.7.24]$ cat test.txt hello world [ssh@VM-4-10-centos 22.7.24]$ echo you can see me > test.txt bash: test.txt: Permission denied
2.修改事物的属性
我们可以通过修改文件拥有者,所属组,other的读,写,可执行,来进行权限的修改。就是对针对具体的“人”来修改,相对应的权限。
我们是可以使用以下两种方法进行修改权限:
<1>chmod 用户表示符 (+ - = )文件路径(文件名)
chmod 用户表示符+/-=权限字符
+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
用户符号:
u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户我们先把拥有者的全部权限去掉,把所属组的读和可执行去掉,再把other的可执行权限加上,接着把拥有者只赋予读权限,把所属组的全部权限加上,再把other的所有权限去掉。
最后把所有人的所有权限加上。
[ssh@VM-4-10-centos 22.7.24]$ ll -rw-rw-r-- 1 ssh ssh 12 Jul 24 16:39 test.txt [ssh@VM-4-10-centos 22.7.24]$ chmod u-rwx test.txt [ssh@VM-4-10-centos 22.7.24]$ ll ----rw-r-- 1 ssh ssh 12 Jul 24 16:39 test.txt [ssh@VM-4-10-centos 22.7.24]$ chmod g-rx test.txt [ssh@VM-4-10-centos 22.7.24]$ ll -----w-r-- 1 ssh ssh 12 Jul 24 16:39 test.txt [ssh@VM-4-10-centos 22.7.24]$ chmod o+x test.txt [ssh@VM-4-10-centos 22.7.24]$ ll -----w-r-x 1 ssh ssh 12 Jul 24 16:39 test.txt [ssh@VM-4-10-centos 22.7.24]$ chmod u+r test.txt [ssh@VM-4-10-centos 22.7.24]$ ll -r---w-r-x 1 ssh ssh 12 Jul 24 16:39 test.txt [ssh@VM-4-10-centos 22.7.24]$ chmod g+rwx test.txt [ssh@VM-4-10-centos 22.7.24]$ ll -r--rwxr-x 1 ssh ssh 12 Jul 24 16:39 test.txt [ssh@VM-4-10-centos 22.7.24]$ chmod o-rwx test.txt [ssh@VM-4-10-centos 22.7.24]$ ll -r--rwx--- 1 ssh ssh 12 Jul 24 16:39 test.txt [ssh@VM-4-10-centos 22.7.24]$ chmod a+rwx test.txt [ssh@VM-4-10-centos 22.7.24]$ ll -rwxrwxrwx 1 ssh ssh 12 Jul 24 16:39 test.txt
<2>我们发现,一个文件要么可以读,要么不可以读,要么可以写,要么不可以写,最后得出结论这个权限是两态的,所以我们可以用三位8进制数来表示文件的权限:
我们要给拥有者所有权限,给所属组读写权限,给other只读,我们可以表示为 764.
[ssh@VM-4-10-centos 22.7.24]$ chmod 764 test.txt [ssh@VM-4-10-centos 22.7.24]$ ll total 4 -rwxrw-r-- 1 ssh ssh 12 Jul 24 16:39 test.txt
注意:
如果给一个普通的文本文件赋予可执行权限,它也不能执行,因为赋予它权限和他能行使权限是两码事,赋予了也不一定能够可以。
[ssh@VM-4-10-centos 22.7.24]$ ./test.txt ./test.txt: line 1: hello: command not found
面试题总结:
1.目录权限
首先对于目录来说我们也有读,写,可执行权限之分,我们要进入目录需要可执行权限,我们显示目录需要读权限,我们在目录创建文件需要可执行权限。
我们此时是文件的拥有者,我们把该目录的可执行权限去掉,其他的都不变,发现我们不能够进入目录,然后我们把可执行权限加上后,发现可以进入,所以进入目录需要可执行权限,同理我们要显示目录,需要的是读权限,在目录下创建问价需要的是写权限。
[ssh@VM-4-10-centos ~]$ ll drwxrwxr-x 4 ssh ssh 4096 Jul 24 16:38 CSDN [ssh@VM-4-10-centos ~]$ chmod u-x CSDN/ [ssh@VM-4-10-centos ~]$ ll drw-rwxr-x 4 ssh ssh 4096 Jul 24 16:38 CSDN [ssh@VM-4-10-centos ~]$ cd CSDN/ -bash: cd: CSDN/: Permission denied [ssh@VM-4-10-centos ~]$ chmod u+x CSDN/ [ssh@VM-4-10-centos ~]$ ll drwxrwxr-x 4 ssh ssh 4096 Jul 24 16:38 CSDN [ssh@VM-4-10-centos ~]$ cd CSDN/ [ssh@VM-4-10-centos CSDN]$ ll drwxrwxr-x 2 ssh ssh 4096 Jul 22 21:06 22.7.21 drwxrwxr-x 2 ssh ssh 4096 Jul 24 16:39 22.7.24
2.umask权限掩码
我们如果创建一个目录或者创建一个普通文件,那么它的默认权限是什么样子呢?默认的目录权限是775,普通文件权限是664,为什么呢?可以更改默认权限吗?
[ssh@VM-4-10-centos 22.7.24]$ umask 0002 [ssh@VM-4-10-centos 22.7.24]$ touch test.c [ssh@VM-4-10-centos 22.7.24]$ mkdir mydir [ssh@VM-4-10-centos 22.7.24]$ ll total 4 drwxrwxr-x 2 ssh ssh 4096 Jul 25 14:54 mydir -rw-rw-r-- 1 ssh ssh 0 Jul 25 14:54 test.c
我们目录的初始权限是777,普通文件的起始权限是666,但是我们有一个叫umask的权限掩码,我们在权限掩码中出现的都不应该在最终权限也就是我们看到的权限中出现。
所以最终权限 = 起始权限&(~umask)。
所以我们可以通过修该umask的值来修改默认权限;
[ssh@VM-4-10-centos 22.7.24]$ umask 0777 [ssh@VM-4-10-centos 22.7.24]$ touch test [ssh@VM-4-10-centos 22.7.24]$ mkdir dir [ssh@VM-4-10-centos 22.7.24]$ ll total 4 d--------- 2 ssh ssh 4096 Jul 25 15:11 dir ---------- 1 ssh ssh 0 Jul 25 15:11 test
3.粘滞位
现在有一个场景,就是很多用户在使用一个公开目录,在这个目录下,很多用户都会创建删除文件,那么他虽然访问不了你的文件,但是他是可以删除你的文件的,在这个情况下,我们需要给该目录设置粘滞位(chmod +t 目录名),这样我们就可以在该文件下保证不能删除别人的文件,别人也删除不了你的文件了。
粘滞位特点:1.粘滞位只能对目录使用 2. 粘滞位谁设置的谁才能取消(root不受限制)
权限的总结:
1.权限的核心:“人”+事务属性。我们可以改变文件的人,也就是改变文件的拥有者,所属组
来改变权限,我们还可以通过修改文件的属性,比如chmod 改变文件的读写执行权限。
2.文件的基本属性,我们的 ll 命令的第一个字符表示文件的类型,Linux下不以文件后缀区分文件类型,但是linux下的一些工具会以后缀区分。
3.目录的可执行权限是表示你可否在目录下执行命令。如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目, 即使目录仍然有-r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。
下期我们讲解Linux下的工具。
Linux基础篇之文件权限问题讲解相关推荐
- Linux学习随笔(基础篇)-- 文件权限
Linux学习随笔(基础篇)-- 文件权限 小土豆Linux学习随笔 -- 清听凌雪慕忆
- Linux 基础学习:文件权限与种类
1.文件权限 linux系统中通过 "ls -al",可查看当前目录的所有文件的详细信息. 第一列代表这个文件的类型与权限: 第一个字符表示文件类型: [d]:表示目录文件 [-] ...
- Linux基础知识:文件权限管理以及umask
1 文件/目录的权限 1.1 文件的权限 每个文件都有其所有者(u:user).所属组(g:group)和其他人(o:other)对它的操作权限,a:all则同时代表这3者.权限包括读(r:read) ...
- linux基础篇-10,权限管理chown chgrp chmod umask
linux用户及权限详解 权限管理 chown chgrp chmod umask ################################################ chown:修改属 ...
- Linux删除证书文件命令,Linux基础面面观之文件复制、移动、删除的命令
用惯Windows的朋友在开始学习Linux时都会觉得在Linux中进行文件的复制.移动和删除工作也是只需点点鼠标或者键盘快捷键就能简单完成,然而事实并没有这么简单.在Linux下进行以上三种操作一般 ...
- Linux随笔-鸟哥Linux基础篇学习总结(全)
Linux随笔-鸟哥Linux基础篇学习总结(全) 修改Linux系统语系:LANG-en_US,如果我们想让系统默认的语系变成英文的话我们可以修改系统配置文件:/etc/sysconfig/i18n ...
- Linux基础篇--shell脚本编程基础
Linux基础篇–shell脚本编程基础 本章内容概要 编程基础 脚本基本格式 变量 运算 条件测试 配置用户环境 7.1 编程基础 程序:指令+数据 程序编程风格: 过程式:以指令为 ...
- linux文件操作和目录操作,Linux基础操作1——文件和目录
Linux基础操作1--文件和目录 一.目录 1.mkdir dirname 建立子目录. 注意:用户不能在一个不存在的目录中建立子目录. 2.mkdir data 在当前目录下建立子目录data 3 ...
- linux基础:文件安全与权限(转)
linux基础:文件安全与权限(转)[@more@]我正在看的一本书,自己也整理了一下这里面可能用到用户管理方面的知识.当创建一个文件的时候,系统保存了有关该文件的全部信息,包括:• 文件的位置.• ...
最新文章
- TVM 各个模块总体架构
- 领域驱动设计门槛很高,没有深厚的面向对象编码能力很难实践成功
- 身份识别协议枚举工具ident-user-enum
- 马斯克的脑机接口,距离我们还有多远?
- 怎样设置左右两个区域_消防水炮设置区域高于22米效果怎样
- 基于http协议的api接口对于客户端的身份认证方式以及安全措施[转]
- html5中如何去掉input type date默认
- (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
- php7 mysql json 小程序_微信小程序JSON数组递交PHP服务端解析处理
- 进程间通信 - 整理
- 【二十三】win 10 :Jmeter 报告可视化 —— 配置生成测试报告仪表板,Jmeter + Jenkins 自动化构建生成 HTML 报告
- C++11 —— 基于区间(range)的 for 循环
- 在 win7rc 版下成功安装完 vs2010 beta1
- 快手科技——Animoji
- 从2T-12.8T 一颗芯片全搞定
- 基于ARIMA模型的空气质量AQI时间序列分析
- python 设置Pyplot的动态rc参数、绘图的填充
- 鼠标右键菜单跑到左边改回右边显示
- oracle数据库进入控制台,oracle web浏览器无法打开控制台的解决办法
- 英雄萨姆二次出击全攻略