linux 基础(2) 文件权限及其修改
文件的权限属性
在 linux 中,每个文件都有唯一的“所属者”(user)和“所属群组”(group)。owner 和 group 都对文件有特殊的权限
输入ls -l
,就可以详细查看每个文件的权限属性。
我们可以看到,用户名和群组名可以是相同的。一个群组可以只包含一个用户,也可以包含多个用户。
rwx 权限
ls -l
的第一行一定是一个长度为10的字符串:drwxr-xr-x
其中第1位表明文件的类型,常见如
-
表示一般文件,d
表示目录,l
表示链接;第 2-4 位表示所属者的权限,形如
rwx
,r 代表可读,w 代表可写,x 代表可执行。
可读代表可以打开文件查看内容,可写代表可以修改文件内容,可执行则代表这个文件可不可以装载到内存中执行。在 linux 中,文件能否装载执行不取决于后缀名,而取决于有无 x 权限,即使让给一个文本文件加上 x 权限后,你也能用命令执行它(虽然执行结果肯定是失败)。第 5-7 为表示所属群组的权限,也就是这个文件所属群组里的人(除了 user)对他的权限。
r-x
表示可读可执行,但不可写。第 8-10 为其他人(others)的权限,也就是除了 user 和 group 中用户以外的其他人。
而这些权限都不受 root 限制,root 就是万能的神,可以随意操作任何文件。
更改文件的权限属性
更改文件权限的命令有chgrp, chown 和 chmod。这三个命令往往需要 root 来执行。
chgrp
chgrp 即“change group”,可以修改文件的群组:
chgrp root a.cpp # 修改a.cpp的群组为 root
chgrp -R mygroup myfolder # 修改myfolder和其中所有文件的群组
chown
chown 改变文件的所属者。同时 chown 也可以改变文件的群组,兼任的 chgrp 的功能。
chown root a.cpp # 修改a.cpp的群组为 root
chown myuser:mygroup a.cpp # 修改a.cpp所属者为myuser,群组为mygroup
chown :mygroup a.cpp # 只修改a.cpp群组为mygroup
chmod
chmod 修改文件的权限(即那个长度10的字符串),有两种使用方式。
常用的用法是将每一个rwx的r记为4、w记为2,x记为1,这样rwx就是一个0-7之间的数字,用三个数字就组成了文件的权限。比如 5 代表 r-x,7 代表 rwx,而 0 代表 ---。
chmod 777 a.cpp # a.cpp对 owner group others的权限都是rwx
chmod 755 a.cpp # a.cpp对 owner 的权限是rwx,对 group 和 others 的权限是r-x
除此之外,也可以直接用 rwx 字符串来修改权限,u 代表 user,g 代表 group,o 代表 others,a 则代表全部。加号,减号与等号都可以赋值。
chmod u=rwx,go=rx a.cpp # u修改为rwx g和o修改为r-x
chmod a+x a.cpp # 所有权限全部加上x,r和w权限不变
chmod a-w a.cpp # 所有权限全部去掉w
目录的 rwx 权限
之前提到的 rwx 权限都是针对文件了,那对于目录来说,rwx的意义会有哪些不同呢?在 linux 里,我们不要只目录理解成“文件夹”,而把目录也当成一种特殊的文件,这个文件的内容就是目录下的文件信息,这样就好理解了。
对于目录来说,r 代表你能否读取目录下的文件列表(即是否可以用 ls 列出里面的文件);w 代表是否可以更改目录下的文件列表(也就是在目录下新建,删除,移动和更名),x 则代表能否进入这个目录。
目录的权限非常重要!如果我的主目录下有一个 root 所属的文件夹:
drwxr--r-- 2 root root 4096 1月 16 12:45 root/
“我”对于这个目录是 others,因此只有 r 权限。但我不能cd root
,也不能打开 root 下的文件,因为没有 x 权限。所以无权操作目录,只有 r 没有 x的目录就像一个不能运行的二进制文件。r 权限没有起到实质作用。
另一方面,假设如果我的主目录下有一个 root 所属的文件:
drwx------ 2 root root 4096 1月 16 12:45 rootfile
“我”对于这个目录是 others,因此只有没有权限。但我对~
目录有完整的rwx
权限,所以虽然我不能打开,也不能修改文件,我却可以直接删掉他!文件能否打开修改取决于自己的权限,但能否被移动删除等则取决于目录的权限。
rws 和 rwt 特殊权限
我们查看/tmp
和/usr/bin/passwd
的权限,就会发现原来还有rws
和rwt
权限
drwxrwxrwt 3 root root 4096 1月 16 15:42 /tmp
-rwsr-xr-x 1 root root 59976 3月 14 2022 /usr/bin/passwd
SUID 权限
位于所有者权限的 x 替换为 s 就叫做SUID权限,这个权限具有以下的性质:执行程序的人需要有 x 权限才能执行(那是废话),但在执行途中将获得 owner 的权限。
这个权限有什么意义呢?就以/usr/bin/passwd
作为例子,他是用来修改密码的,而密码信息保存在/etc/shadow
里面,而 shadow 储存着用户信息这样机密的内容,他的权限是"-rw-r-----",也就是说我连打开都不行。可用户修改密码也并不需要 root 权限。这就是因为 passwd 命令是 rws,当我执行他时,我就暂时获得了 root 的权限,可以修改密码。
另一个例子就是 sudo 命令,用 ls 查看 sudo ,它的权限是"rwsr-xr-x",任何用户都可以执行他,在执行他的期间就暂时获得了 root 权限。sudo 这个命令本身就是理解 SUID 的最佳方式
SGID 权限
位于所属群组权限的 x 替换为 s 就叫做 SGID 权限,与 SUID 相似,执行程序的人可以获得群组的支持。
SGID 也可以用于目录,当进入一个 SGID 的目录,在该目录下新建的所有文件都会以目录的群组作为群组。
SBIT 权限
SBIT 权限则仅用于目录。others 权限为rwt
表示 SBIT 权限,在 SBIT 的权限的文件夹里,所有人都可以创建文件,但创建的文件只有自己才能删除,其他用户无法删除。/tmp
就是 SBIT 应用的典型,所有人都可以创建文件,但只能删除自己的文件,而不能删除其他用户创建的。
这三个权限怎么设置呢?记 SUID, SGID, SBIT 分别为 421,又可以得到一个 0-7 的数字,把这个数字加在原来的3位数字前,变成4位就可以了。或者通过字符串设置也可以。
chmod 4755 a.out # rwxr-xr-x
chmod u+s a.out # SBIT
umask 默认属性
当我们新创建一个文件,他的 user 和 group 默认都是你自己,那默认的 rwx 权限是什么呢?这就取决于用户的 umask。
输入umask,可以得到一个4位字符串:
$ umask
0022
$ touch f1
$ mkdir f2
$ ls-d f1 f2
-rw-r--r-- 1 ofnoname ofnoname 0 1月 16 17:14 f1
drwxr-xr-x 2 ofnoname ofnoname 4096 1月 16 17:14 f2
0022 表示的的是“被拿掉的权限”,022自然表示“user 不拿权限,而 group 和 other 默认被去掉 w 权限”。目录文件默认是777,因此结果是 rwxr-xr-x,而普通文件默认是666(没有 x),因此结果是rwxr-xr-x。
*文件目录的隐藏权限
(摘自《鸟哥的linux私房菜 基础篇》)
rwx 权限是所有 linux 都拥有的基础权限。除此之外,rwx在很多时候还不够满足需求,特定的文件系统还支持很多其他有用的属性。
chattr [+-=][ASacdistu] 文件或目录名称
选项与参数:
+ :增加某一个特殊参数,其他原本存在参数则不动。
- :移除某一个特殊参数,其他原本存在参数则不动。
= :设置一定,且仅有后面接的参数
A :当设置了 A 这个属性时,若你有存取此文件(或目录)时,他的存取时间 atime 将不会被修改,
可避免 I/O 较慢的机器过度的存取磁盘。(目前建议使用文件系统挂载参数处理这个项目)
S :一般文件是非同步写入磁盘的(原理请参考[前一章sync](../Text/index.html#sync)的说明),如果加上 S 这个属性时,
当你进行任何文件的修改,该更动会“同步”写入磁盘中。
a :当设置 a 之后,这个文件将只能增加数据,而不能删除也不能修改数据,只有root 才能设置这属性
c :这个属性设置之后,将会自动的将此文件“压缩”,在读取的时候将会自动解压缩,
但是在储存的时候,将会先进行压缩后再储存(看来对于大文件似乎蛮有用的!)
d :当 dump 程序被执行的时候,设置 d 属性将可使该文件(或目录)不会被 dump 备份
i :这个 i 可就很厉害了!他可以让一个文件“不能被删除、改名、设置链接也无法写入或新增数据!”
对于系统安全性有相当大的助益!只有 root 能设置此属性
s :当文件设置了 s 属性时,如果这个文件被删除,他将会被完全的移除出这个硬盘空间,
所以如果误删了,完全无法救回来了喔!
u :与 s 相反的,当使用 u 来设置文件时,如果该文件被删除了,则数据内容其实还存在磁盘中,
可以使用来救援该文件喔!
注意这些属性并非在任何系统上都有支持。lsattr可以列出这些隐藏属性。
linux 基础(2) 文件权限及其修改的更多相关文章
- Linux下查看文件权限、修改文件权限的方法
查看权限命令查看目录的相关权限可以采用命令ls -lD,或者直接用ls -la 如 ls -l www.jb51.net //这里表示查看www.jb51.net目录 修改权限命令 chmod 77 ...
- Linux基础命令-文件与目录
Linux基础命令-文件与目录 参考:<鸟哥linux私房菜>五-七章,17/12/5复习,18/01/15复习 文件权限 rwx421:用户,用户组,其他 umask查看默认权限:000 ...
- linux中的文件权限chmod
linux中的文件权限chmod 还是GPU集群那点事儿,集群之间磁盘互相挂载,普通用户也可以操作/cu02_nfs./cu04_nfs文件夹,这就牵扯到权限的问题,去google发现所谓的777 ...
- Linux用户及文件权限管理
Linux用户及文件权限管理
- 【Linux】目录文件权限的查看和修改【转】
转载自:http://zhaoyuqiang.blog.51cto.com/6328846/1214718 ============================================== ...
- Linux】目录文件权限的查看和修改【转】
转载自:http://zhaoyuqiang.blog.51cto.com/6328846/1214718 ============================================== ...
- linux用户创建删除以及文件权限查看修改
一. 1.查看用户 命令如下:whoami 2.创建用户 创建用户命令:sudo adduser hello 超级用户是 root 删除用户名命令:sudo deluser hello --remov ...
- linux 基础 文件系统 用户权限
描述Linux系统的启动过程? 1.开机自检 BIOS 2.MBR引导 3.GRUB菜单 4.加载内核 5.运行init进程 6.从/etc/inittab读取运行级别 7.根据/etc/rc.sys ...
- linux基础指令以及权限管理
基础指令 #打印字符串 echo hello linux #将file1 和 file2粘合在一起,打印到标准输出流 cat file1 file2 标准输入输出 标准输入,stdin,即键盘.鼠标输 ...
- Day005_Linux基础之文件权限
test.sh 举例: [oldboy@luffy001 ~]$ ls -l test.sh -rw-r--r-- 1 oldboy ops 0 Nov 14 10:42 test.sh 该文件权 ...
随机推荐
- sql语法巧用之not取反
数据库的重要性和通用性都不用说了,什么sql的通用性,sql优化之类的也不必说了,咱们今天来聊聊另一个有意思的话题:如何取一个筛选的反面案例. 1. 举几个正反案例的例子 为了让大家理解我们的假设场景 ...
- NLP之基于Seq2Seq的单词翻译
Seq2Seq 目录 Seq2Seq 1.理论 1.1 基本概念 1.2 模型结构 1.2.1 Encoder 1.2.2 Decoder 1.3 特殊字符 2.实验 2.1 实验步骤 2.2 算法模 ...
- 18.drf request及源码分析
REST framework的 Request 类扩展了Django标准的 HttpRequest ,添加了对REST framework请求解析和身份验证的支持. 源代码片段: class Requ ...
- JUC中的AQS底层详细超详解
摘要:当你使用java实现一个线程同步的对象时,一定会包含一个问题:你该如何保证多个线程访问该对象时,正确地进行阻塞等待,正确地被唤醒? 本文分享自华为云社区<JUC中的AQS底层详细超详解,剖 ...
- mlflow详细安装部署
1.安装docker # 安装工具 sudo yum install -y yum-utils # 添加yum仓库配置 sudo yum-config-manager --add-repo https ...
- Scrapy 发送Request Payload
Scrapy 发送Request Payload 首先要打开 F12 进入调试模式 然后 查看是用什么方法获取的 如果是Json: 1. json.dumps 转化成Json yield Reques ...
- 嵌入式-C语言基础:数组得初始化
#include<stdio.h> int main() { int a[10]; int size=sizeof(a)/sizeof(a[0]);//计算数组得大小 for(int i= ...
- C#与Halcon联合编程之用PictureBox控件替代HWindowControl控件
在使用HALCON和C#联合编程,有时候要使用halcon的HWindowControl控件,但是我发现,HWindowControl的图片显示控件,不能使用GDI+绘制ROI,不知道为什么,反正我测 ...
- 关于windows上开启远程桌面连接不上的问题解决
解决办法 启用远程桌面连接(计算机-属性-远程设置) 选择第二个:允许运行任意版本远程桌面 关闭防火墙(或者给远程桌面添加端口3389放行也可以) 创建用户以及密码 这里注意,一定要建立密码,只有账号 ...
- Selenium4+Python3系列(十) - Page Object设计模式
前言 Page Object(PO)模式,是Selenium实战中最为流行,并且被自动化测试同学所熟悉和推崇的一种设计模式之一.在设计测试时,把页面元素定位和元素操作方法按照页面抽象出来,分离成一定的 ...