Linux系统中,每个文件或目录都有一定的权限,用来控制不同的用户对它们的访问和操作。
1.权限说明
文件的权限可以分为三类:所有者(owner)、组(group)和其他(other)。
每类权限又可以分为三种:读(read)、写(write)和执行(execute)。
文件的权限可以用一个10位的字符串来表示,其中第一位表示文件类型,后面九位表示三类权限的三种权限。
例如,一个普通文件的权限可能是-rw-r–r–,表示所有者可以读写,组和其他只能读。一个目录的权限可能是drwxr-xr-x,表示所有者可以读写执行,组和其他只能读执行。
文件的权限可以用数字来表示,每种权限对应一个数字,读为4,写为2,执行为1,没有权限为0。三类权限的数字相加就是该类权限的数字,例如,读写为6,读执行为5,执行为1。文件的权限可以用三个数字来表示,分别表示所有者、组和其他的权限,例如,644表示所有者读写,组和其他只能读,755表示所有者读写执行,组和其他只能读执行。
2.chmod命令
chmod命令的作用是修改文件或目录的权限,可以使用数字或符号来指定权限。chmod命令的语法格式如下:
chmod [选项] [权限] [文件]...
其中,选项可以是以下之一:
- -c:显示修改权限的文件的信息。
- -f:忽略不存在的文件或无法修改的文件。
- -R:递归地修改目录及其子目录和文件的权限。
- -v:显示所有修改权限的文件的信息。
如果使用数字来指定权限,权限可以是一个三位或四位的数字,分别表示所有者、组、其他或特殊权限的权限。
特殊权限包括设置用户ID(suid)、设置组ID(sgid)和粘滞位(sticky bit)。
设置用户ID表示执行该文件时,以文件所有者的身份执行。设置组ID表示执行该文件或进入该目录时,以文件或目录所属组的身份执行。
粘滞位表示只有文件所有者或超级用户(root)才能删除或重命名该目录下的文件。特殊权限的数字分别为4、2和1,如果不指定特殊权限,可以省略第一位数字。
如果使用符号来指定权限,权限可以是以下的格式:
[类别][操作][权限]
其中,类别可以是以下之一:
- u:所有者。
- g:组。
- o:其他。
- a:所有,即所有者、组和其他。
- +:添加权限。
- -:删除权限。
- =:设置权限。
其中,操作可以是以下之一:
- +:添加权限。
- -:删除权限。
- =:设置权限。
其中,权限可以是以下之一:
- r:读。
- w:写。
- x:执行。
- s:设置用户ID或设置组ID。
- t:粘滞位。
可以使用逗号分隔多个权限,例如,u+r,g+w表示给所有者添加读权限,给组添加写权限。
例如,假设有一个文件file.txt,它的权限是-rw-r–r–,如果我们想要修改它的权限为-rwxr-xr-x,可以使用以下命令:
$chmod 755 file.txt
$ls -l file.txt
-rwxr-xr-x 1 user user 79 Feb 26 09:23 file.txt
也可以使用以下命令:
$chmod u+x,g+x,o+x file.txt
$ls -l file.txt
-rwxr-xr-x 1 user user 79 Feb 26 09:23 file.txt
如果我们想要修改它的权限为-rwsr-xr-x,即设置用户ID,可以使用以下命令:
$chmod 4755 file.txt
$ls -l file.txt
-rwsr-xr-x 1 user user 79 Feb 26 09:23 file.txt
也可以使用以下命令:
$chmod u+s file.txt
$ls -l file.txt
-rwsr-xr-x 1 user user 79 Feb 26 09:23 file.txt
如果我们想要修改它的权限为-rwxr-xr-t,即设置粘滞位,可以使用以下命令:
$chmod 1755 file.txt
$ls -l file.txt
-rwxr-xr-t 1 user user 79 Feb 26 09:23 file.txt
也可以使用以下命令:
$chmod o+t file.txt
$ls -l file.txt
-rwxr-xr-t 1 user user 79 Feb 26 09:23 file.txt
3.ln命令
ln命令的作用是创建文件或目录的链接,可以是硬链接或软链接。硬链接是指不同的文件名指向同一个文件,它们共享相同的索引节点(inode)和数据块。软链接是指一个文件名指向另一个文件名,它们有不同的索引节点和数据块,但是软链接的数据块只包含另一个文件名的路径。ln命令的语法格式如下:
ln [选项] [源文件] [目标文件]
其中,选项可以是以下之一:
- -f:强制创建链接,覆盖已存在的目标文件。
- -i:交互式创建链接,询问是否覆盖已存在的目标文件。
- -s:创建软链接,而不是硬链接。
- -v:显示创建链接的信息。
如果没有指定目标文件,ln命令会使用源文件的文件名作为目标文件的文件名。如果指定了多个源文件,目标文件必须是一个已存在的目录,ln命令会在该目录下创建与源文件同名的链接。
例如,假设有一个文件file.txt,它的内容如下:
$cat file.txt
This is a file.
如果我们想要创建一个硬链接link1.txt,可以使用以下命令:
$ln file.txt link1.txt
$ls -l file.txt link1.txt
-rw-r--r-- 2 user user 14 Feb 26 09:23 file.txt
-rw-r--r-- 2 user user 14 Feb 26 09:23 link1.txt
可以看到,file.txt和link1.txt的权限、所有者、组、大小和修改时间都相同,它们的链接数都是2,表示有两个文件名指向同一个文件。
如果我们修改file.txt的内容,link1.txt的内容也会跟着变化,反之亦然,因为它们共享同一个数据块:
$echo "This is a new line." >> file.txt
$cat file.txt
This is a file.
This is a new line.
$cat link1.txt
This is a file.
This is a new line.
如果我们删除file.txt,link1.txt仍然可以访问,因为它们共享同一个索引节点:
$rm file.txt
$ls -l link1.txt
-rw-r--r-- 1 user user 29 Feb 26 09:23 link1.txt
$cat link1.txt
This is a file.
This is a new line.
如果我们想要创建一个软链接link2.txt,可以使用以下命令:
$ln -s file.txt link2.txt
$ls -l file.txt link2.txt
-rw-r--r-- 1 user user 29 Feb 26 09:23 file.txt
lrwxrwxrwx 1 user user 8 Feb 26 09:23 link2.txt -> file.txt
可以看到,file.txt和link2.txt的权限、所有者、组、大小和修改时间都不同,它们的链接数也不同,file.txt的链接数是1,link2.txt的链接数是2,表示有两个文件名指向link2.txt。link2.txt的大小是8,表示它的数据块只包含file.txt的路径。
如果我们修改file.txt的内容,link2.txt的内容也会跟着变化,因为它指向file.txt:
$echo "This is another line." >> file.txt
$cat file.txt
This is a file.
This is a new line.
This is another line.
$cat link2.txt
This is a file.
This is a new line.
This is another line.
如果我们删除file.txt,link2.txt就无法访问,因为它指向的文件不存在了:
$rm file.txt
$ls -l link2.txt
lrwxrwxrwx 1 user user 8 Feb 26 09:23 link2.txt -> file.txt
$ cat link2.txt
cat: link2.txt: No such file or directory
以上就是Linux常用命令:文件的权限管理的介绍,希望对你有所帮助。如果你有任何问题或建议,欢迎在评论区留言。谢谢!