首先登入linux,并使用 下面的命令看看(需要su权限)
ls -al
ls是【list】的意思,显示文件名和相关属性,【-al】是列出包括隐藏文件(文件名第一个字符为【.】时是隐藏文件)的所有文件详细的权限与属性
输出的属性解释如下
drwxr-xr-x. 3 root root 18 4月 24 16:40 .config
文件类型与权限 链接数 文件拥有者 所属群组 大小 最后修改时间 文件名
可以发现,有十个字符
第一个字符代表文件的类型
接下来以三个字符为一组,且取值只能在r(可读)、w(可写)、x(可执行)。这三个字符位置不会改变,如果没有相关权限则显示为【-】
每个文件都会将他的权限和属性记录到文件系统的i-node,由于linux使用的目录树是使用文件名来记录,因此每个档名就会链接到一个i-node,这个属性即记录有多少不同的档名链接到相同的一个i-node。
相对于文件所属的群组,如果不在群组的账号权限是第一列的最后三位权限
如果时间太久,就会只显示年份。如果想要完整的时间格式,可以用
ls -l --full-time
来显示完整的时间
对于更详细的ls用法,使用【ls --help】或【man ls】或【info ls】来查看官方的文档。
在学习修改权限之前,一定要搞清什么数据是可变的,什么是不可变的
常用指令如下:
chgrp即change group。现在,新建一个测试文件:
touch test.txt
新建文件无任何输出,linux的理念就是没有反馈信息就是最好的运行成功信息
来用【ls -al】看一下该文件的属性
在改变群组之前,先学习一下chgrp用法:
chgrp [-R] group dirname/filename ...
选项-R:进行递归操作,即连同此目录下的所有文件、目录都改变。
将test.txt的群组改变为users并查看**(注意群组必须在/etc/group存在)**:
chgrp users test.txt
ls -al
那如果改变在一个/etc/group里没有的群组:
便会报错invaild group(默认语系是英文时。上图默认语系是中文)
用法与改变群组完全一致,只不过把chgrp换为chown。
chown比chgrp还多一个功能就是他可以同时改变文件所有者及所属群组:
chown [-R] 用户名:组名 文件或目录
这种用法也可以
chown [-R] 用户名.组名 文件或目录
也可直接修改群组
chown [-R] .组名 文件或目录
同样,用户名需要在/etc/passwd中有记录。
权限设定方法有两种,一种是数字一种是rwx符号。
符号 | 分数 |
---|---|
r | 4 |
w | 2 |
x | 1 |
前面提到,每三个符号为一组权限,我们只需要累加即可,如rwx=4+2+1=7,r-x=4+1=5
linux文件基本权限设定了三组,即owner/group/others,三个身份都有各自的权限,假设一组权限是【-rwxrwx—】则:
owner = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7
others = — = 0+0+0 = 0
因此该权限为770,那么以数字方式改变权限语法:
chmod [-R] xyz 文件或目录
xyz即为数字分数
将test.txt改为完全的权限即777:
chomd 777 test.txt
chmod u=rwx,go=rx test.txt
或者
chmod u=rwx.g=rx,u=rx test.txt
如果不清楚原先的属性,只需要对每个增加可写权限,就可以这样:
chmod a+w test.txt
如果拿掉权限就是【-】,要直接设定权限就用【=】
文件是实际含数据的地方,对于文件来说:
对于【x】可能不太好理解,在windows下,一个文件能否被执行是靠扩展名如.exe,.bat等来判断,但在linux下,是靠是否有【x】来判断,与文件名无关。
对于【w】是没有删除权限的
对于目录来说
下表可以解释权限对文件和目录的区别
请注意,如果你在某目录不具有x权限,那么你就无法切换到该目录,无法执行该目录下的任何指令,即使你有该目录的r或w权
要开放目录给人浏览时,至少给予r和
x权,但不要随便给w权!
上述强调,x在目录中是与【能否进入该目录】有关,w可以让使用者删除、更新、新建文件或目录
例如有两个档名:
前面提到过,linux没有扩展名的,能不能执行只看是否有【x】权,而我们看到的扩展名只是帮助人类判断这个文件是干嘛的,如.sh是脚本,.tar是压缩包,只是帮助人类识别。
以上内容根据《鸟哥的Linux私房菜-基础学习篇(第四版(Linuxidc.com))》有删改