基本属性

在Linux中一切皆文件,也就是目录、设备标识等等都是以文件进行表示的。
在使用ls -l查看命令时会看到
-rwxr-xr--``drwxr-xr-x 这样的标识,其中第一个字符如果是-代表的是普通文件,如果是d代表的是一个文件夹。
-: 代表是文件
d: 代表是目录
l: 代表是链接,类似Windows的快捷方式
c: 代表的是串行端口设备,例如鼠标、键盘等
b: 代表的是可供存储的设备,例如硬盘
image.png
每个文件的类型由最左边的10个字符来确定
image.png

从上面可以看到由两列是 shumstaff,这代表着这个文件的所有者(shum)和所属用户组(staff)

修改所属信息

修改所属组chgrp

语法是:chgrp [-R] <属组名> <文件名>
其中 -R是可选参数,如果有此参数则代表的是递归修改
示例:
chgrp staff test.txt
chgrp -R staff /tmp/test/

修改所属用户chown

语法是:chown [-R] <用户名> <文件名> 或者 chown [-R] <用户名>:<属组名> <文件名>
第一种写法只是修改所属用户,第二种写法可以同时修改所属组
示例:
chown shum test.txt
chown shum:staff test.txt
chown -R shum:staff /tmp/test/

修改文件权限 chmod

从上面的图可以看到文件的基本权限有 r``w``x三种,如果没有对应的权限,则对应位置使用-来表示。
在Linux里rwx还可以使用数字表示,其中r代表4w代表2x代表1,所以rwx同时存在则表示7,即4+2+1。如果是-则表示0,所以r-x代表的是5
又因为一个文件的权限分为三部分,即所属用户所属组其他用户/组,每一部分又分为rwx三个权限位。所以修改权限时需要同时修改三部分或者指定修改某一部分。
同时修改三部分
chmod [-R] <权限数字:如755、0755> <文件名>
这里的0755755意思是一样的,都表示rwxr-xr-x,也就是只有所有者才有写的权限,其他只有读和运行的权限。
如果是 777或者 0777则表示rwxrwxrwx,也就是任何人都有读、写、执行的权限。

指定修改某一部分:
chmod [-R] <[ugo][+-=][rwx]> <文件名>
其中 u代表所有者,g代表所属组,o代表其他,+代表增加权限,-代表移除权限,=则表示直接设定权限
示例:
chmod u-x test.sh 意思就是test.sh的文件所有者移除可执行权限
chmod og+wx test.sh 这个意思test.sh文件的所属组以及其他用户增加写权限和可执行权限
chmod u=rwx,g=rx,o=r test.sh 这个意思就是 test.sh的所有者设置权限为可读、可写、可执行,所属组可读和可执行,而其他人则只有读的权限

其他

除了常见的rwx权限外,可能在有些时候看到某个文件当前用户是有权限操作的,但是却无法删除或修改。
image.png
这可能是因为文件被加了其他保护。我们可以使用lsattr <文件名>来查看是否有其他属性保护。
image.png
这里可以看到有一个 i标识,这个标识的意思是禁止文件或目录发生更改,所以在删除或修改时会提示错误。
类似的标识还有一下几种:
a: 让文件或目录仅供附加用途,也就是只能追加,例如echo 'test' >> test.txt,注意是>>代表是追加,>代表覆盖,而这里是只能使用>>。同样也无法使用文本编辑器打开文件进行修改内容。
b:不能更新文件或目录的最后存取时间
c:将文件或目录压缩后存放
d:当系统备份时,dump程序会忽略此文件
i:不能随意更改、删除文件或目录
s:保密性删除文件或目录
S:及时更新文件或目录
u:防止意外删除

我们可以使用chattr [-R] [+-=][abcdisSu] <文件名>来增加或移除特殊属性。
示例:
chattr +a test.txt 意思是让test.txt只能追加内容
chattr -a test.txt 意思是移除 a只能追加的属性
chattr +i test.txt 让文件变为只读文件,防止被修改或被删除
chattr -i test.txt 移除只读属性