我的Linux自学笔记(二)——Linux的文件权限与目录配置
Linux的文件权限与目录配置
本文所有内容均参考鸟哥的Linux私房菜:linux.vbird.org/linux_basic/
一、使用者与群组的概念
Linux最优秀的地方之一在于他的多人多任务环境,Linux 一般将文件可存取的身份分为三个类别,分别是【owner/group/others】,且三种身份各有【read/write/execute 】等权限。
二、Linux文件权限概念
文件权限的概念很重要,最大的用途就是体现在数据安全性上。
2.1 Linux文件属性
列出root用户home文件夹下所有文件,如下图:
拿上图中.config文件举例,其中第一列代表文件的类型与权限、第二列代表有多少文件名连接到此节点、第三列代表这个文件的拥有者、第四列代表这个文件的所属群组、第五列代表文件的大小、第六列代表文件最近修改日期、第七列代表文件名。
第一列说明:可以把格式这样看【(x)(xxx)(xxx)(xxx)】,第一个字符代表这个文件是目录、文件或链接文件等,接下来的字符三个为一组。第一组是文件拥有着的权限,第二组是加入此群组的账号的权限,第三组为非文件拥有着且没有加入此群组的权限。d代表目录,-代表文件,rwx分别代表可读、可写、可执行。注意一点,对于目录来说,x代表的是用户能否进入该目录成为工作目录。
2.2 如何改变文件属性与权限
常用群组、拥有者、各种身份的权限修改指令:chgrp(改变文件所属群组)、chown(改变文件拥有者)、chmod(改变文件权限,SUID、SGID、SBIT等)
2.2.1 chgrp
修改root用户家目录下的initial-setup-ks.cfg文件的群组由root变为users,语法为【chgrp [-R] filename/dirname】(-R代表递归,就是说连同这个目录下所有文件、目录都更新成这个群组的意思),如下图:
2.2.2 chown
修改root用户下initial-setup-ks.cfg文件的拥有者由root变为centos7,语法【chown [-R] username filename/dirname】,修改文件拥有着与群组的语法【chown [-R] username:groupname filename/groupname】,例子:
知道了如何更改群组与拥有者了,那么什么时候要用chgrp或chown呢?其实最常见的就是复制文件给其他人的时候。例如使用cp指令拷贝文件,语法【cp 来源文件 目标文件】,例子:
这下就可以改变这个拷贝的文件的群组或拥有者拉~
2.2.3 chmod
修改权限的指令是chmod,修改权限的方式有两种:数字类型改变文件权限、符号类型改变文件权限。
a. 数字类型改变权限
文件权限字符【-rwxrwxrwx】,上面说过了这九个权限是三个一组。我们可以使用数字来代表各个权限:r对应4,w对应2,x对应1。例如【-rwx-rw----】的分数为760(owner:7=4+2+1 group:6=4+2 other=0)。语法【chmod xyz 文件或目录】,例子:
b. 符号类型改变文件权限
语法【chmod 身份权限 符号 读写权限 文件或目录】,其中身份权限由u、g、o、a表示(ugo不用说拉,a代表all全部的意思),符号由+、-、=表示,读写权限由r、w、x表示。例子:
2.3 关于目录x权限的说明
如果你在某个目录下不具有x权限,那么你就无法切换到该目录,也就无法执行该目录下任何指令,即使你有该目录的r或w权限。要放开目录给任何人浏览时,应该至少给予其r与x权限,但w权限不能随便给。
2.4 一个小例子
通过一个小例子来说明x在目录当中是与【能否进入该目录】有关,如果一个用户在该目录具有了x权限又具有了w权限,那么这个用户就可以在这个目录下为所欲为了(删除、更新、新建文件或目录)
先用root身份在所有人都可以工作的/tmp目录中建立一个testing目录,该目录权限为744且拥有者为root用户,另外在testing目录下建立一个空文件名为testing。语法【cd 目录名】【mkdir 目录名】【chmod xyz 目录名或文件名】【touch 目录名/文件名】
用centos7这个用户测试,发现没有权限。
让目录属于用户本身之后,你会发现,哇塞!竟然可以删除,就是这样。
2.5 Linux文件种类与扩展名
2.5.1 文件种类
除了我们用【ls -al ~】命令看到当前用户家home文件夹下的一般文件(-)和目录文件(d)之外,还有哪些类型?
a. 正规文件(regular file):第一个属性为【-】纯文本文件(ascii)、二进制文件(binary)、数据格式文件(data)
b. 目录(directory):第一个属性为【d】
c. 连结档(link):类似windows操作系统下的快捷方式,第一个属性为【l】(小写的L),例如【lrwxr--r--】
d. 设备与装置文件(device):与系统周边及存储相关的文件,通常在/dev目录下
* 区块设备档(block):第一个字符为【b】,一些存储数据以提供系统随机存取的接口设备,例如硬盘与软盘等
* 字符设备文件(chracter):第一个字符为【c】,一些串行端口的接口设备,例如键盘鼠标等
*
e. 资料接口文件(sockets):第一个属性为【s】,这种类型的文件最常用在网络上的数据承接,最常在/tmp或/run这些目录看到这类文件
f. 数据传输文件(FIFO,pipe):第一个属性为【p】,主要目的在解决多个程序同时存取一个文件所造成的错误问题
2.5.2 扩展名
*.sh:脚本或批处理文件(scripts),因为批处理文件使用shell写成的,所以扩展名就是.sh
*.Z,*.tar,*.tar.gz,*.zip,*.tgz:压缩文件,不同压缩软件压缩的扩展名
*.html,*.php:网页相关文件
三、 Linux目录配置
Linux目录配置依据——FHS(Filesystem Hierarchy Standard)标准,规范了Linux目录配置方法。因为如果不这样做,那些利用Linux来开发产品或distributions的社群/公司或个人,如果每个人都用自己的想法来配置文件放置的目录,那么你能够想象到是多么可怕。
FHS依据文件系统使用的频繁程度和是否允许使用者随意改动,而将目录定义为四种交互作用的形态:
a. 可分享的:可以分享给其他系统挂载使用的目录,是能够分享给网络上其他主机挂载用的目录,包括执行文件与用户的邮件数据等
b. 不可分享的:自己机器上面运作的装置文件或是与程序有关的socket文件等,仅与自身机器有关
c. 不变的:有些数据是不会经常变动的,例如函式库、文件说明文件、系统管理员所管理的主机服务配置文件等
d. 可变动的:经常改变的数据,例如用户登录文件、一般用户可自行收受的新闻组等
。。。这个目录配置有点多,单独拿出一篇文章来做整理吧