文件权限相关
ls命令展示文件信息
ls -l
-rw-r--r-- 1 slynux user 2456 2010-02-28 11:22 bot.py
drwxr-xr-x 2 slynux user 5456 2010-05-28 17:22 a.py
-rw-r--r-- 1 slynux user 534 2010-02-12 09:22 c1.p1
- :普通文件
d :目录·
c:字符设备
b :块设备
l:符号链接
s:套接字
p:管道
- 接下来的9个字符可以分为三组,每组三个字符。第一组三个字符对应用户权限(所有者);第二组对应用户组权限,第三组对应其他用户权限。
- 三种常见的字符:
r(read):如果设置表示该文件,设备或目录可读。
w(write):如果设置,表明该文件,设备或目录可以被更改。(对于目录而言,定义了能否在该目录下删除或者创建文件)。
x(execute):如果设置,表示该文件可执行。(对于目录:指定了能否访问目录下的文件)。 - 用户权限:第一组的三个字符:数据文件:rw- ;可执行文件;rwx。用户还有一个称为setuid(S)的特殊权限,出现在x的位置,该权限允许可执行文件以其拥有者的权限来执行,即使该文件由其他用户运行。
- 用户组权限:该组中并没有setuid,但是有一个setgid(S)位,允许使用与可执行文件所属组权限相同的有效组来运行该文件,但是这个组和实际发起命令的用户组未必相同。
- 其他用户。
粘滞位(sticky bit)
- 目录的特殊权限叫粘滞位。如果目录设置里粘滞位,只有创建该目录的用户才能删除目录中的文件,就算用户组和其他用户也有写权限,仍然无能为力。
- 粘滞位出现在其他用户权限组中的执行权限(x)位置,使用、t或者T来表示。如果灭有设置执行权限,但是设置了粘滞位,就使用T,如果同时设置了执行权限和粘滞位,就使用t。
- 典型例子:/tmp,任何人都可以在该目录中创建文件,但只有文件的所有者才能删除文件。
文件权限设置
chmod指令设置文件权限
$ chmod u=rwx g=rw o=r filename
$ chmod o+x filename
$ chmod a+x filename
$ chmod a-x filename
用三位八进制数表示权限
- 读,写和执行都有与之唯一对应的八进制数
r=4
w=2
x=1
将相加权限对应的八进制得到所需的权限组合。例如
rw-=4+2=6
$ chmod 764 filename
补充
更改文件所有权
$ chown user:group filename
$ chown slynux:user test.sh
设置粘滞位
- 粘滞位应用于目录,设置粘滞位可以用chmod 的+t选项设置
$ chmod a+t directory_name
递归方式设置文件权限
- chmod的-R选项实现以递归的方式修改当前目录下的文件和子目录的权限
$ chmod 777 . -R
$ chmod 777 "$(pwd)" -R
以递归方式设置所有权
$ chmod user:group . -R
以不同的身份运行可执行文件
- setuid权限允许其他用户以文件所有者的身份来执行文件。首先需要将文件的所有权更改为需要执行该文件的用户,然后以该用户的身份登录,运行如下命令
$ chmod +s executable_file
$ ./executable_file
- setuid只能应用在Linux ELF格式的二进制文件中,不能对脚本设置。
将文件设置为不可修改
- chatter可以用于更改扩展属性,可以将文件设置为不可修改,也可以修改其他属性来调节文件系统同步或压缩率。
- 实例
chatter +i file
rm file
rm:cannot remove 'file':Operation not permitted
chatter -i file
批量生成空白文件
- touch命令可以用来生成空白文件或者是修改已有文件的时间戳。
- 以下步骤来批量生成空白文件
$ touch filename
for name in {1..100}.txt
do
touch $name
done
- 如果文件已经存在,那么touch命令将会月该文件相关的所有时间戳都更改为当前时间,如果只想要更改某些时间戳,则可以使用如下选项
touch -a :只更改文件访问时间
touch -m:只更改文件修改时间 - 除了将时间戳更改为当前时间,还能够指定特定的时间和日期
$ touch -d "Fri Jun 25 20:50:14 IST 1999" filename