chmod命令学习1

理解权限的基础

chmod命令可以修改与文件或目录相关联的权限,Linux是如何理解这些权限的。

Linux认为有三组用户会使用文件或目录,即实际拥有者(也称为文件的用户)、用户组及系统中的其他人。每组用户分别用不同的字母表示,如表7-1所示。

表-1 用户组及其缩写

用 户 组 缩  写
用户(拥有者)(User) u
组(Group) g
其他(Other) o

用户能够对文件和目录进行操作:读、写和执行,分别表示为r、w和x。其他可能的权限还有suid、sgid和sticky bit,分别表示为s(在有些系统中为S)、s(或S)和t(或T)。但是要牢记,根据使用这些权限的是文件还是目录,所有这些权限字符的意义可能会有所不同。表-2总结了每种权限属性、缩写以及它们各自的含义。

表-2 权限字母及其含义

文件属性 缩写 对文件的含义 对目录的含义
可读(readable) r 可以查看 可以使用ls命令列出其内容
可写(writable) w 可以编辑 可以删除、重命名或添加文件
可执行(executable) x 可以作为程序来运行 可以读取它的文件和子目录,或运行文件
suid s 任何用户都可以使用拥有者的权限来执行文件 不可用
sgid s 任何用户都可以使用用户组的权限来执行文件 在目录中新创建的任何文件都属于拥有该目录的用户组
sticky bit t 告诉OS经常要执行这个文件,所以通常把它保存在交换区以便快速访问(只适用于较早的Unix系统,Linux将忽略这个属性) 用户不能删除或重命名文件,除非当前用户是文件或目录的拥有者

说明 root用户一直能够对任何文件或目录进行任何操作,所以表7-2中的限制并不适用于root。

在接下来的几节中会详细介绍表7-2中的每个文件属性。现在你应该已经理解这些权限了,接下来就看看如何用chmod命令修改文件和目录的权限。

用字母表示法修改文件和目录的权限

chmod [ugo][±=][rwx]

chmod命令使用两种权限表示法:字母或数字。二者各有各的优点,但是有时对于用户来说,先学习字母系统要更容易些。字母表示法基本上使用一个简单的公式:想要修改的用户组(u、g、或者o),后面用加号(+)来授予权限、用减号(-)来删除权限、用等号(=)来设置完全匹配的权限,后面再跟上表示想要修改的权限的字母(r、w、x、s、或者t)。例如,假设你想让family用户组的成员能够修改图片。

复制代码
$ ls --l
-rw-r--r-- 1 scott family ... libby.jpg
$ chmod g+w libby.jpg
$ ls -l
-rw-rw-r-- 1 scott family ... libby.jpg

如果你想让family组以及所有其他用户都有权改写文件:

复制代码
$ ls --l
-rw-r--r-- 1 scott family ... libby.jpg
$ chmod go+w libby.jpg
$ ls -l
-rw-rw-rw- 1 scott family ... libby.jpg

想要的是让所有用户(拥有者、用户组以及所有其他人)都能读和写访问,应该使用以下命令:

复制代码
$ ls --l
-rw-r--r-- 1 scott family ... libby.jpg
$ chmod a=rw libby.jpg
$ ls -l
-rw-rw-rw- 1 scott family ... libby.jpg

如果需要删除family组和其他人的权限,不让他们修改图片,甚至要确保其他人都看不到图片。

复制代码
$ ls --l
-rw-rw-rw- 1 scott family ... libby.jpg
$ chmod go-w libby.jpg
$ ls -l
-rw-r--r-- 1 scott family ... libby.jpg
$ chmod o-r libby.jpg
$ ls -l
-rw-r----- 1 scott family ... libby.jpg

除了使用-,也可以使用=:

复制代码
$ ls --l
-rw-rw-rw- 1 scott family ... libby.jpg
$ chmod g=r libby.jpg
$ ls -l
-rw-r--rw- 1 scott family ... libby.jpg
$ chmod o= libby.jpg
$ ls -l
-rw-r----- 1 scott family ... libby.jpg

注意最后的chmod命令,o等于什么也没有,相当于删除了系统中所有其他用户的所有权限。

用数字权限修改文件和目录的权限

chmod [0-7][0-7][0-7]

数字权限(也称为八进制权限)是基于二进制数字系统而创建的。读(read,r)的值为4,写(write,w)的值为2,而执行(execute,x)的值是1。Linux权限识别三个用户组,即拥有者、组以及其他人,每个用户组都能进行读、写和执行操作(如表-3所示)。

表-3 权限和相应的数字表示

项目 Owner(拥有者) Group(组) World(其他人)
权限 r; w; x r; w; x r; w; x
数字表示 4; 2; 1 4; 2; 1 4; 2; 1

在这种模式下,权限组合就演变成了简单的加法运算。

用户具有读和写文件或目录的权限。读是4,写是2,执行是0(因为没有授权),4 + 2 + 0 = 6。

用户具有读和执行文件的权限。读是4,写是0(因为没有授权),执行是1,4 + 0 + 1 = 5。

用户具有读、写及执行目录的权限。读是4,写是2,执是1,4 + 2 + 1 = 7。

使用这种方法,用户组的最大权限值是7(读、写和执行),最小权限值是0(不能读、写和执行)。因为有三种用户组,所以就有三个相应的数字,每个值都介于0和7之间,分别表示相应用户组的权限。表7-4展示了可能的权限数值以及它们各自的含义。

表-4 ls -l命令表示的数字权限

数  字 ls -l命令的表示 数  字 ls -l命令的表示
0 --- 4 r--
1 --x 5 r-x
2 -w- 6 rw-
3 -wx 7 rwx

虽然可以设置各种各样的权限,但是有一些权限会经常不断出现。表7-5列举了几种常用的权限以及它们的含义。

表-5 使用ls -l命令表示的通用权限

Chmod命令 ls -l表示 含  义
chmod 400 -r-------- 拥有者能够读,其他任何人不能进行任何操作
chmod 644 -rw-r--r-- 所有人都能够读,但只有拥有者才能编辑
chmod 660 -rw-rw---- 拥有者和组用户能够读和写,其他人不能进行任何操作
chmod 664 -rw-rw-r-- 所有人都能读,但只有拥有者和组用户能够编辑
chmod 700 -rwx------ 拥有者能够读、写和执行,其他用户不能进行任何操作
chmod 744 -rwxr--r-- 所有人都能读,但只有拥有者才能编辑和执行
chmod 755 -rwxr-xr-x 所有人都能读和执行,但只有拥有者才能编辑
chmod 777 -rwxrwxrwx 所有人都能读、写和执行(这样的设置通常不是个好想法)

警告 可以对文件或目录使用chmod 000,但是那样的话,唯一能够对它进行任何操作或再使用chmod命令修改权限的用户就只有root了。

与权限的字母表示法相比,八进制权限的理解需要更多的思考,但是它的优点就是能够一次设置许多权限。

假设你想允许family组的成员能够修改图片。

复制代码
$ ls --l
-rw-r--r-- 1 scott family ... libby.jpg
$ chmod 664 libby.jpg
$ ls -l
-rw-rw-r-- 1 scott family ... libby.jpg

让family组以及所有其他用户具有写这个文件的权限

复制代码
$ ls --l
-rw-r--r-- 1 scott family ... libby.jpg
$ chmod 666 libby.jpg
$ ls -l
-rw-rw-rw- 1 scott family ... libby.jpg

需要删除family组和其他人的权限,不让他们修改图片,甚至要确保其他人都看不到图片。

复制代码
$ ls --l
-rw-rw-rw- 1 scott family ... libby.jpg
$ chmod 640 libby.jpg
$ ls -l
-rw-r----- 1 scott family ... libby.jpg

使用权限的字母表示法需要两步,先是chmod go-w,然后是chmod o-r(或chmod g=r,然后chmod o=),而使用权限的数字表示法则只需要一条简单的命令就可以了。

相关推荐
西岸行者5 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意5 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码5 天前
嵌入式学习路线
学习
毛小茛5 天前
计算机系统概论——校验码
学习
babe小鑫5 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms5 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下5 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。5 天前
2026.2.25监控学习
学习
im_AMBER5 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J5 天前
从“Hello World“ 开始 C++
c语言·c++·学习