linux命令 chmod
Linux系统上的每个对象都有一个权限模式,该权限模式描述了用户可以对其执行的操作。 权限分为三种:读( r ),写( w )和执行( x )。
读取文件就是查看其内容。 例如,文本文件必须具有读取权限,某人才能读取其中的文本。 如果用户要在该文件中添加句子,则需要写权限。 执行权限使某人可以运行文件,例如Shell脚本或二进制程序文件。
基本权限
ls -l命令显示分配给文件的权限。 例如:
ls
-l
-rw-rw-r--
1 bruce bruce
0 Jul
30
16 :
25 schedule1.txt
某些权限( rw )多次出现,因为它们指的是不同的实体: user , group和other 。 用户是所有者的同义词, 组是用户的主要组,两者都是bruce 。 其他是指所有其他用户。
第一个位置表示对象的类型: -表示文件, d表示目录, l表示符号链接。 接下来的9个位置分为三部分,并描述了许可模式。 位置按r , w , x排序, 组按用户 , group或other排序。
--- --- --- | rwx rwx rwx |
uuu ggg ooo | u =用户,g =组,o =其他 |
档案
将显示一个为所有实体设置了读,写和执行位的文件:
rwxrwxrwx
当然,我们通常不会在现实世界中随意配置文件。 这只是如何使用每个位置的说明。
在以下示例中,文件被配置为其拥有者( pablo )具有读取和写入权限,该组的成员仅具有读取权限,而其他所有人则没有权限。
-rw-r----- 1 pablo pablo 0 Jul 30 16 : 25 textfile
chmod命令修改系统中对象的许可模式。 它是Linux安全命令集中最常用和重要的命令之一。
加号( + )符号添加权限,减号( - )符号删除权限。 您可以将chmod u + r读为“用户加读”,因为它授予了用户读权限。 chmod ur命令的意思是“用户减去读取”,因为它使读取许可权脱离了用户。
目录
相同的三个权限也适用于目录。 目录必须具有读取权限,用户才能查看其内容。 用户需要添加到目录的写权限(例如,创建新文件)。 用户要更改目录( cd ),必须具有执行权限。
drw-rw-r-- 2 pablo pablo 4096 Jul 30 15 : 56 JBOSS
巴勃罗可能是JBOSS目录的所有者,但是因为他没有执行权限,他不能cd到它。 他可以使用命令chmod u + x添加该权限,然后可以使用cd进入该权限。
$
cd JBOSS
bash: cd: JBOSS: Permission denied
$
chmod u+x JBOSS
$
ls
-l
drwxrw-r--
2 pablo pablo
4096 Jul
30
15 :
56 JBOSS
$
cd JBOSS
$
pwd
/ opt
/ JBOSS
综合论点
您可以使用逗号来组合参数。 在此示例中,您只需要一个命令来设置权限,这样该组就无法写入文件,世界其他地方也无法读取该文件:
$
chmod o-r,g-w readme.txt
$
ls
-l
-rw-r-----
1 pablo share
0 Jul
31
13 :
34 readme.txt
您可以将其读为“其他减去读和分组减去写”。
假设Denise已经编写了一个名为home_backup.sh的Bash脚本,并希望授予其执行权限。 她还希望阻止其他任何人阅读,编写或执行它。 一种方法是使用加号和减号:
$ chmod go-rw,u+x home_backup.sh
另一种方法是使用等号( = )符号。 这将完全设置权限,而无需考虑先前的设置。 请注意,第二个等于之后有一个空格; 这表明值none :
$ chmod u =rwx, go = home_backup.sh
您可以将其读为“用户相等的读,写和执行权限,以及组和其他不相等的权限”。
数值模式
Chmod还支持数字模式,该模式使用分配给每个位置的值:
所有者 | 组 | 其他 | ||||||
---|---|---|---|---|---|---|---|---|
r | w | X | [R | w | X | [R | w | X |
400 | 200 | 100 | 40 | 20 | 10 | 4 | 2 | 1个 |
可以计算一组权限的总值,并将其作为单个参数传递给chmod命令。 以Denise及其备份脚本为例。 如果她使用数字方式设置脚本权限,则必须首先计算合计值:
-rwx------ 1 denise denise 0 Jul 31 13 : 53 home_backup.sh
Denise会添加与她要申请的每个许可相对应的数字:
400 + 200 + 100 = 700
她的命令将是chmod 700 home_backup.sh 。 假设Denise想重置文件的原始权限:
-rw-rw-r-- 1 denise denise 0 Jul 31 13 : 53 home_backup.sh
这些权限的值计算为664:
400 + 200 + 40 + 20 + 4 = 664
Denise可以使用命令chmod 664 home_backup.sh还原原始权限。
特殊模式
可以在对象上设置其他三种模式:
名称 | 象征性的 | 数字 |
---|---|---|
setuid | s | 4000 |
setgid | s | 2000 |
sticky | Ť | 1000 |
SetUID位对可执行文件强制执行用户所有权。 设置后,文件将以文件所有者的用户ID(而不是运行文件的用户)执行。
$ chmod u+s
SetGID位对文件和目录强制执行组所有权。 设置后,在目录中创建的任何文件或目录都将获得目录的组所有权,而不是用户的组所有权。 在文件上设置文件后,该文件将始终作为其所属组而不是用户执行:
$ chmod g+s
可以在目录上设置粘性位,也称为“受限制的删除标志”,以防止目录所有者以外的任何人删除该目录中的文件:
$ chmod o+t
可以通过将粘性位的值添加到其他权限的值上来设置该粘性位。 如果您有一个值为755的对象,并且想要设置粘性位,请添加1000:
1000 + 400 + 200 + 100 + 40 + 10 + 4 +1 = 1755
该命令将为chmod 1755 。 几种符号方法是等效的。 一个示例是chmod u = rwx,go = rx,o + t 。
附加功能
字母a是向所有用户分配权限的快捷方式。 chmod a + rwx命令等效于chmod ugo + rwx 。
递归的
像许多其他Linux命令一样,chmod具有一个递归参数-R ,它允许您递归操作目录及其内容。 递归的意思是该命令将尝试对指定目录下的所有对象进行操作,而不仅仅是目录本身。 本示例从一个空目录开始,并添加-v (详细)参数,因此chmod将报告其操作:
$
ls
-l . conf
.:
drwxrwxr-x
2 alan alan
4096 Aug
5
15 :
33 conf
conf:
-rw-rw-r--
1 alan alan
0 Aug
5
15 :
33 conf.xml
$
chmod
-vR
700 conf
mode of
'conf' changed from 0775
( rwxrwxr-x
) to 0700
( rwx------
)
mode of
'conf/conf.xml' changed from 0664
( rw-rw-r--
) to 0700
( rwx------
)
参考
参考文件命令( --reference = RFILE )可用于复制另一个文件( RFILE )的模式,称为参考文件。 当您要更改文件的模式以匹配特定配置时,或者您不知道确切的模式,或者不想花时间来计算它时,这非常方便:
$
ls
-l
-rw-r--r-x
1 alan alan
0 Aug
5
17 :
10 notes.txt
-rw-rw-r--
1 alan alan
0 Aug
5
17 :
10 readme.txt
$
chmod
--reference =readme.txt notes.txt
$
ls
-l
-rw-rw-r--
1 alan alan
0 Aug
5
17 :
10 notes.txt
-rw-rw-r--
1 alan alan
0 Aug
5
17 :
10 readme.txt
报告变更
-c (-- changes )参数,它告诉chmod仅在进行更改时报告(与-v或-verbose相对 ,它告诉chmod报告其所有输出)。 Chmod仍会报告其他内容,例如是否允许执行某项操作。参数-f (-- silent ,-- quiet )禁止显示大多数错误消息。 将此参数与-c一起使用将仅显示实际更改。
保留根
Linux文件系统的根( / )应该受到高度重视。 如果有人在此级别上犯了一个命令错误,则后果可能很糟糕,并使系统完全无用,尤其是当您运行将进行任何更改(或更糟糕的是:删除)的递归命令时。 幸运的是,chmod命令的--preserve-root参数将保护和保留根。 如果该参数与根目录上的递归chmod命令一起使用,则将不会发生任何事情,并且您将看到以下消息:
[ alan
@ localhost ~
]
# chmod -cfR --preserve-root a+w /
chmod: it is dangerous to operate recursively on
'/'
chmod: use
--no-preserve-root to override this failsafe
不与递归一起使用时,该选项无效。 但是,如果root用户运行命令,则/的权限将更改,而其他文件或目录的权限则不会更改。
[ alan
@ localhost ~
] $
chmod
-c
--preserve-root a+
w
/
chmod: changing permissions of
'/' : Operation not permitted
[ root
@ localhost
/
]
# chmod -c --preserve-root a+w /
mode of
'/' changed from 0555
( r-xr-xr-x
) to 0777
( rwxrwxrwx
)
令人惊讶的是,这不是默认参数。 --no-preserve-root是。 如果运行不带“ preserve”选项的命令,则该命令默认为“不保留”模式,并可能更改了不应更改的文件的权限。
[ alan
@ localhost ~
] $
chmod
-cfR a+x
/
mode of
'/proc/1525/task/1525/comm' changed from 0644
( rw-r--r--
) to 0755
( rwxr-xr-x
)
mode of
'/proc/1541/task/1541/comm' changed from 0644
( rw-r--r--
) to 0755
( rwxr-xr-x
)
mode of
'/proc/1541/task/1580/comm' changed from 0644
( rw-r--r--
) to 0755
( rwxr-xr-x
)
mode of
'/proc/1541/task/1592/comm' changed from 0644
( rw-r--r--
) to 0755
( rwxr-xr-x
)
mode of
'/proc/1557/task/1557/comm' changed from 0644
( rw-r--r--
) to 0755
( rwxr-xr-x
)
mode of
'/proc/1558/task/1558/comm' changed from 0644
( rw-r--r--
) to 0755
( rwxr-xr-x
)
mode of
'/proc/1561/task/1561/comm' changed from 0644
( rw-r--r--
) to 0755
( rwxr-xr-x
)
结论
Linux系统上的所有对象都有一组权限。 重要的是偶尔检查和维护它们以防止不必要的访问。
翻译自: https://opensource.com/article/19/8/linux-chmod-command
linux命令 chmod