文件权限
查看文件属性
ls命令
-a, --all
列出所有文件,包括以点号开头的文件
-A, --almost-all
列出所有文件,但不包括 . 和 …
–block-size=SIZE
以 SIZE 字节为单位显示文件大小
-B, --ignore-backups
不列出以 ~ 结尾的条目
-d, --directory
列出指定目录的条目而不是其内容
-h, --human-readable
与 -l 选项配合使用,以人们可读的方式而不是字节数来显示文件大小(如,1K 234M 2G)
-i, --inode
显示文件的索引号
-k
相当于 --block-size=1K
-l
以长格式显示结果
-n, --numeric-uid-gid
类似 -l 选项,但是数字形式列出用户与组的 ID。
-o
类似 -l 选项,但是不列出组信息。
-Q, --quote-name
使用双引号将条目名称括起来。
-r, --reverse
反序显示结果
-R, --recursive
递归地列出目录及其子目录的内容
-S
按文件大小排序
-t
按修改时间排序
举例:
ls -l file 查看文件属性
ls -ld dir 查看目录属性
ls -lR dir 递归显示文件夹内的文件
我们可以看到查看文件属性后出现了一共8列属性:
- | rw-rw-r--. | 1 | hyj | hyj | 0 | APR 2 22:48 | file1
[1] [2] [3] [4] [5] [6] [7] [8]
1:文件类型
2:9个字符说明文件权限的信息
3:包含链接数
4:文件所有者
5:文件所有者的所有组
6:显示文件大小
7:文件时间戳
8:文件名字
下面分别介绍各个属性
1.文件类型
常见的文件类型
- 表示空文件,普通文件
l 软链接
d 表示目录
c 字符设备(如shell在 /dev/pts/0)
s socket 套接字符,与程序交互的“门”
b block 块设备(如系统的第一块硬盘是 /dev/sda 插入u盘是 /dev/sdb)
p 管道文件
2.文件权限
#rw- rw- r--
u g o
用户 组 其他人
对文件的权限:
r:是否可读
w:是否可写
x:是否可执行
对目录的权限:
r:是否可查看目录中的文件
w:是否可在目录在建立删除
x:是否可进入目录
修改权限方式
字符方式
chmod (u,g,o)+(r,w,x) 文件名
相同的权限操作可合并 ug+r
同一用户修改多个权限 u=rwx
不同的用户可用“,”隔开 ug+r,o+x
如图用 chmod ugo+rwx file 表示修改file文件权限为 rwxrwxrwx
修改不同用户权限可用“,”分开,如图则表示用户的权限修改为 w 用户组修改为 wx 其他修改为 rw
数字方式
r=4 w=2 x=1 则权限可用0~7的数字表示,最高权限为777
rw-rw-r-- 则为 664
chmod 777 file 表示修改file文件权限为 rwxrwxrwx
##【3】对文件:硬链接个数(文件内容被系统记录的次数)
3. 包含连接数
添加软,硬链接
ln命令
4.文件所有人
#chown可修改文件和目录(不加-R之修改目录,不修改目录中的文件)的所有人,
#或所有人和所有组
chown root file 更改file的用户
同时更改用户和组用:或者,隔开
chown root.root file
chown root:root file
更改目录的时候不能更改目录内所有文件这时候可以用-R 命令递归更改
chown root:root test -R
如下图,使用watch命令可以看到test内的文件所有人都改变
5.文件所有组
#chgrp可修改文件和目录(-R)所有组
chgrp root file -R
在使用chown 更改用户和组之后使用chgrp 命令可以看到组变成了hyj,并使用了-R 成功修改了目录内的所有文件
6.文件大小
对文件:文件大小
对目录:目录中子文件元数据大小(元数据matedate可以理解为文件的属性,
#也就是描述文件属性的那一串字符(【1】~【8】)的字节数)
7.最后修改时间
可以用touch修改时间
8.文件名
#mv修改
可以看到test1变成了test2
############修改默认预留权限############
##系统默认为022
##只修改当前shell中的预留权限(临时更改)
umask 000 #默认创建目录权限为777-000=777,文件再减111为600
可以看到下图的权限 目录变为了:rwxrwxrwx 文件变为了rw-rw-rw-
##修改系统的默认预留权限(永久更改)
vim /etc/profile #系统配置文件
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
umask 111 #普通用户的umask
else
umask 111 #超级用户的umask
fi
vim /etc/bashrc #shell配置文件
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
umask 111 #普通用户的umask
else
umask 111 #超级用户的umask
fi
source /etc/profile #重新读取文件,使更改生效
source /etc/bashrc
可以看到,在修改了/etc/profile 和 /etc/bashrc之后,创建的新文件的权限也修改了,变为了rw-rw-rw
在实验过后记得将umask改回原值
特殊权限
1.sticky #粘滞位
#作用:
针对目录生效,当设置sticky权限后,这个目录中的文件只能被文件所有人删除
当对文件操作时,也会显示t,但是非文件所有人也可以删除
#设定方式:
chmod o+t dir #只针对other,o位会出现t
chmod 1xxx dir
可以看到使用 chmod o+t dir和chmod 1xxx dir 都能更改
增加粘滞位之后其他用户不能删除文件
2.sgid和suid 强制位 和 冒险位
作用:
针对目录:
当设置强制位后,任何人在该目录中建立的文件,都属于该目录的所有组
或所有人(g+s或u+s)
可以看到在root下创建文件依然属于test目录的用户组hyj
针对文件(只能针对可执行二进制文件):
不设置强制位时,谁执行这个文件,这个进程就是谁的。。设置后,无论
是谁执行此文件,进程都属于这个文件的所有人或组(u+s或g+s)
很多命令都是二进制的文件,可以修改他们来做很多事情
比如修改touch和vim来让所有用户创建的文件都属于某一用户
#设定方式:
chmod g+s dir #u位出现s即为成功
chmod g+s file
或
chmod 2xxx dir
chmod 2xxx file
chmod u+s dir #u位出现s即为成功
chmod u+s file
或
chmod 4xxx dir
chmod 4xxx file
chmod 6xxx dir #操作成功后u和g位都出现s
chmod 6xxx file
###########acl权限列表#############
#作用:
#让特定用户对特定文件有特定的权限
#查看:
getfacl file
#管理:
#开启后(-m添加后)ls -l fle会在权限后显示+
#关闭后(-b后)ls -l fle会在权限后的+消失,使用原权限设定
setfacl -m u:username:0 file #使hyj用户对file没有任何权限
setfacl -m g:groupname:rwx file #使usertest组的用户对file拥有rwx权限
setfacl -x u:username file #删除hyj用户的acl列表信息
setfacl -x g:groupname file #删除usertest组的acl列表信息
setfacl -b file #关闭file文件的acl列表功能(关闭后所有添加的acl列表信息都被删除)
mask值
默认是acl列表中授予权限的最大值
添加acl列表后,使用chmod将g权限修改小后会出现问题
先查看file的权限,发现file对hyj组的权限是rwx,然后我们切换到组hyj下的usertest用户对file进行删除操作,发现没有权限删除,所以在开启了acl之后,换言之查看权限发现后面有“+“之后,最好是用getfacl查看权限,否则会出错
可使用下面方式修改回来
setfacl -m m:rwx file #让最大权限值还原
setfacl -k file #关闭acl默认权限列表