Linux: Linux的文件权限与目录配置

 阅读约 7 分钟

此篇文章记录相关的Linux读书笔记

Linux是个多用户、多任务的系统,对于每个文件都具有文件所有者(user),用户组(group)和其他用户(Others)3种身份的个别权限,每个账号可以有多个用户组。

而root具有最高的权限,是Linux的管理员账号。

在Linux系统中,默认的情况下所有系统上的账号与一般身份用户,还有root的信息,都是记录在/etc/passwd这个文件内。至于个人的密码则是记录在/etc/shadow这个文件下。此外,linux所有的组名都记录在/etc/group内。

linux的文件属性

image.png

  • 第一列代表这个文件的类型与权限

第一个字符代表这个文件是目录、文件或者链接文件等。
若是【d】代表目录
若是【-】代表文件
若是【l】代表连接文件
若是【b】代表设备文件里面可供存储的接口设备
若是【c】代表设备文件里面的串行端口设备,例如键盘、鼠标(一次性读取设备)
接下来的字符,以3个为一组,均为“rwx”的3个参数组合。其中【r】代表可读,【w】代表可写,【x】代表可执行。3个权限的位置不会改变,如果没有权限则会出现【-】号。
第一组为文件所有者权限
第二组为同用户组权限
第三组为其他非本用户组的权限

  • 第二列表示有多少文件名连接到此节点
  • 第三列表示这个文件(或目录)的所有者账号
  • 第四列表示这个文件的所属用户组。一个账号是可以附属于一个多多个用户组。
  • 第五列为这个文件的容量大小,默认单位为B.
  • 第六列为这个文件的创建日期或者是最近的修改日期

这一列的内容为日期(月/日)及时间,如果这个文件被修改的时间距离现在太久了,那么时间部分会仅显示年份而已。
如果想要显示完整的时间,可以使用“--full-tiem”参数来查看

full-time参数.png

如果系统是以简体中文安装,那么日期字段会以中文来显示,但是中文没有办法在纯文本的终端模式正确显示,此栏可能会变成乱码,如果修改配置文件,以ubuntu为例,把“/etc/default/locale”的LANG变量修改为:LANG="en_US.UTF-8"

  • 第七列就是该文件名

如果文件名带着“.”,则代表该文件为隐藏文件,可以使用“ls -a”来显示所有的隐藏文件。要看ls的更多参数,可以使用“man ls”或者“info ls”来查看其基本用法。

对于文件夹的权限,如果用户要进入目录,那么用户对应的权限一定至少要具有可读可执行(r-x)

如何改变文件属性和权限

常用于用户组、所有者、各种身份的权限修改的命令有:

  • chgrp: 更改文件所属用户组
  • chown: 更改文件所有者
  • chmod:改变文件的权限
改变所属用户组:chgrp
$ chgrp 用户组 [-R] dirname/filename
# -R 代表进行递归的持续更改,连同子目录下的所有文件、目录

注意,更改的用户组一定是/etc/group中存在的,否则会提示错误

改变文件所有者:chown

chown除了更改所有者,还可以更改文件的用户组

$ chown 所有者 [-R] dirname/filename
$ chown 所有者:用户组 [-R] dirname/filename
# -R 代表进行递归的持续更改,连同子目录下的所有文件、目录

注意更改的所有者一定要在/etc/passwd这个文件中记录的用户名称。

这两个命令常用在复制文件后,要把复制的文件给予其他用户

$ cp 源文件 目标文件
# 复制后,查看文件的用户用户组发现与原来的文件一致,可以修改为其他用户

改变权限:chmod
文件权限的改变使用的是chmod命令,但是文件权限可以使用数字或者符号来进行权限更改。
(1)数字类型改变权限
可读可写可执行分别代表不同的数字,
r: 4
w: 2
x: 1
每种身份各自的3个权限需要累加,例如:【-rwxr-xr--】代表
owner = rwx = 4+2+1 = 7
group = r-x = 4+0+1 = 5
other = r-- = 4+0+0 = 4
所以该文件的权限数字为754,更改权限命令的语法为:

$ chmod [-R] xyz 文件或目录
# 其中xyz为上面的数字类型的权限属性
# -R 为递归的持续更改,连同子目录下的所有文件都会被更改

符号类型改变文件权限
我们用u,g,o分别代表user,group和other,a代表全部的身份all,那么读写的权限可以写成r,w,x,那么命令格式可以是:

image.png
相应的例子如下:

# 要设置权限为'-rwxr-xr-x'
$ chmod u=rwx,go=rx testfile
# 要设置权限为'-rwxr-xr--'
$ chmod u=rwx,g=rx,o=r testfile
# 如果我们原先不知道文件的权限,只想给每个人均可以写入的权限
$ chmod a+w testfile
# 如果要把某个权限去掉而不更改其他属性,例如去掉每个人的可执行权限
$ chmod a-w testfile

有一些特殊权限需要注意的,例如
要对目录可以进行浏览,至少要有r和x的权限。
对于属于用户testuser本身的目录,即使在该目录下的某个文件对于testuser来说并没有拥有任何权限,但用户testuser还是对这个文件具有rwx权限。例如

$ sudo su
$ cd /tmp
$ mkdir testing
$ chmod 744 testing
$ chmod 644 testing/testing 
$ ls -ald testing testing/testing 
# 显示结果如下
# drwxr--r-- 2 root root 4096 Dec  2 16:28 testing
# -rw-r--r-- 1 root root    0 Dec  2 16:28 testing/testing
# 这时候我们切换其他用户,
$ su vagrant
# 再去查看testing目录,由于没有x权限,所以无法查看,也无法进入
$ ls -l tesing/
# ls: cannot access testing/testing: Permission denied
# total 0
# -????????? ? ? ? ?            ? testing
$ cd testing/
# bash: cd: testing/: Permission denied
# 然后我们如果把文件夹变成vagrant用户,则可以删掉testing/testing
$ sudo su
$ chown vagrant testing
$ cd /tmp/testing/
$ rm testing
# 最后删除成功了,即使testing/testing目录没有对vagrant用户开放可写可执行权限

Linux目录配置

Linux目录配置遵循FHS(Filesystem Hierarchy Standard)标准。目录树如下:
linux目录树.png

阅读 253更新于 12月11日
推荐阅读
目录