Linux的文件权限
在Linux里面,任何一个文件都有User、Group及Others三种身份个别权限。
所有的系统上的账号与一般身份信息记录在 /etc/passwd文件内,个人的密码记录在/etc/shadow,所有的组名都记录在/etc/group内。
Linux文件属性
以root身份登录Linux,执行“ls -al” , 显示文件名称与相关属性:
ls是“list”的意思,“-al”表示列出所有文件详细的权限与属性。
第一部分文件权限
第一个字符代表这个文件是“目录、文件或者链接文件等”
d 是目录
- 是文件
| 是链接文件
b 表示设备文件里面的可供存储的接口设备
c 表示设备文件里面的串行端口设备,如键盘、鼠标等
接下来的字符中,以3个为一组,r代表可读,w代表可写,x代表可执行。如果没有权限是 -
第一组为 “文件所有者权限”。
第二组为 “同用户组权限”。
第三组 为 “其他非本用户组的权限”。
第二部分表示有多少文件名链接到此节点
每个文件都会将它的权限与属性记录到文件系统的i-node中,每个文件名会连接到一个i-node。这个属性记录的就是有多少不同的文件名连接到相同的一个i-node号码。
改变文件属性与权限
- chgrp 改变用户组
- chown 改变文件所有者
- chmod 改变文件的权限
改变所属用户组:chgrp
chgrp [-R] newgroup dirname/filename,-R:进行递归的持续更改,即连通子目录下的所有文件、目录都更新称为这个用户组之意。常常用在更改某一目录内所有文件情况。
要改变的组名必须在/etc/group文件内才行,否则会发生错误
改变文件所有者:chown
chown [-R] 账号名称 文件名称, -R:进行递归的持续修改,即连同子目录下的所有文件都更改
要注意的是,用户必须是已经存在于系统中的账号,也就是在/etc/passwd这个文件中有记录的用户名才能改变。
chown的用途很多,它还可以顺便直接修改用户组的名称。
chown [-R] 账号名称:组名 文件名称
改变权限:chmod
chomd [-R] xyz 文件或目录,xyz:是数字类型的权限属性。-R:进行递归的持续更改,即连通自目录下的所有文件都更改。
文件权限的改变使用的是chmod,权限的设置设置方法有两种,分别可以使用数字或者是符号来进行权限的更改。
数字类型改变文件权限:Linux文件的基本权限有9个,分别是owner、group、others三种身份各有自己的read、write、execute权限。我们可以使用数字来代表各个权限,各
权限的分数对照关系,r : 4,w : 2,x : 1(- :0)。每种权限分数累加得到分数。如,owner = rwx = 1 + 2 + 4 = 7
#chmod 777 .bashrc
符号类型改变文件权限:权限分别是user、group、others 3种身份。那么我们可以通过u,g,o来代表3种身份的权限。此外a代表all,也即全部的身份。读写权限可以写成 r,w,x
#chmod u=rwx, go=rx .bashrc
如果我不知道原先的文件属性,而我只想要增加 .bashrc这个文件每个人均可写入的权限,那么我们可以使用: chmod a+w .bashrc
如果要是将权限去掉而不更改其他属性,例如要去掉全部人的可执行权限:chmod a-x .bashrc
在+与-的状态下,只要是没有指定到选项,则该权限“不会被变动”,如上例中,由于仅以-去掉x则其他两个保持当时的值不变。
目录与文件的权限意义
权限对于文件的意义如下:
- r (read) 可读取文件的实际内容。
- w (write) 可以编辑、新增或者是修改文件的内容,但不含删除该文件。
- x (eXecute) 该文件具有可以被系统执行的权限。在Linux里,我们的文件是否能被执行是由是否具有“x”这个权限来决定的。
权限对于目录的重要性:
- r (read contents in directory) 表示你可以查询该目录下的文件名数据,所以你可以利用ls这个命令将该目录的内容列表显示出来。
- w (modify contents of directory) 表示具有更改该目录结构列表的权限:新建文件与目录;删除已经存在的目录与文件;重命名、移动目录内文件目录位置。
- x (access directory) 代表用户是否进入该目录称为工作目录的用途。更换目录的命令是“cd”。
如果你在某目录下有r权限,不具有x权限,那么你就无法切换到该目录下,即使你具有该目录的r权限。所以,要开放目录给任何人浏览时,应该至少也要给与r及x的权限,但
w权限不可随便给。
Linux文件种类与扩展名
任何设备在Linux下面都是文件,不仅如此,连接数据通信的接口也有专门的文件负责。
文件种类:
普通文件:纯文本文件,二进制文件,数据格式文件。
目录
连接文件:就是类似Windows系统下面的快捷方式。
设备与设备文件,与系统外设及存储等相关的一些文件,通常都集中在/dev这个目录。通常分为两种:块设备文件(提供系统随机访问的接口设备,如硬盘、软盘等)、
字符设备文件(是一些串行端口的接口设备,如键盘、鼠标等)。
套接字:数据接口文件,这种类型的文件通常被用在网络上的数据连接。
管道
Linux文件扩展名
基本上Linux系统上的文件名真的只是让你了解该文件可能的用途而已,真正的执行与否仍然需要权限的规范才行。
linux下边,使用默认的Ext2/Ext3文件系统时,针对文件名长度限制为:
单一文件或目录的最大容许文件名为255个字符;
包含完整路径名称及目录(/)的完整名为4096个字符。 我们希望Linux的文件名可以一看就知道文件在做什么的,所以文件名通常是很长。
Linux目录配置
Filesystem Hirarchy Standard(HFS)标准的重点在于规范每个特定的目录下应该要放置什么样子的数据而已。FHS根据文件系统使用的频繁与否与是否允许用户随意改动,
而将目录定义为四种交互作用的形态。如下:
可分享的:可以分享给其他系统挂在使用的目录,所以包括执行文件与用户的邮件等数据,是能够分享给网络上其他主机挂载用的目录。
不可分享的:自己机器上面运行的设备文件或者是与程序有关的sokcet文件等,由于仅与机器有关,所以当然就不适合分享给其他主机了。
不变的:有些数据是不会经常变动的。
可变动的:经常改变的数据,如登录文件、新闻等。
FHS针对目录树架构仅定义出三层目录下面应用放置什么数据而已,分别是下面这三个目录的定义:
- /(root, 根目录) :与开机系统有关;
- /usr(UNIX software resource):与软件安装/执行有关;
- /var(variable):与系统运作过程有关。
根目录(/), 根目录是整个系统最重要的一个目录,因为不但所有的目录都是由根目录衍生出来的,同时根目录也与开机、还原、系统修复等操作有关。
因此FHS标准建议,根目录所在的分区应该越小越好,且应用程序所安装的软件不要与根目录放在同一个分区。如此不但性能较好,根目录所在的文件
系统也较不容易发生问题。
FHS定义出根目录(/)下面应该有这些子目录才好,如:
因为根目录与开机有关,开机过程中仅有根目录会被挂载,其他分区则是在开机完成之后才会持续进行挂载行为。因此根目录下与开机过程有关的目录
就不能够与根目录放到不同的分区去。那到底哪些目录不可与根目录分开呢:
/etc:配置文件,
/bin:重要执行文件
/dev:所需要的设备文件
/lib:执行文件所需要的函数库与内核所需的模块
/sbin:重要的系统执行文件
这五个目录千万不可与根目录分开放在不同的分区。
/usr的意义与内容
依据FHS的基本定义,/usr里面放置的数据属于可分享的与不可变动的,如果你知道如何通过网络进行分区的挂载,那么/usr确实可以分享给局域网内的其他主机来使用。
usr是UNIX Software Resource 的缩写,也就是“UNIX操作系统软件资源”所放置的目录。FHS建议所有软件开发者应该将他们的数据合理地分别放置到这个目录下的子目录。
因为是所有系统默认软件都会放置到/usr下面,因此这个目录有点类似Windows系统的“C:\Windows\”和“C:\Program files\”这两个目录的综合体,系统刚安装完毕时,这个目录
会占用最多的硬盘容量。
/var的意义与容量
如果/usr是安装时会占用较大硬盘容量的目录,那么/var就是在系统运行后才会渐渐占用硬盘容量的目录。因为/var目录主要针对常态性变动的文件。
目录树
在Linux目录下,所有的文件与目录都是由根目录开始的。然后在一个一个分支下来,像树枝状。它的主要特征有:
- 目录树的起始点为根目录(/,root);
- 每个目录不只能使用本地端的文件系统,也可以使用网络上的文件系统,举例来说可以利用Network File System服务器挂载某个特定目录等。
- 每个文件在此目录树中的文件名都是独一无二的。
绝对路径与相对路径
绝对路径:由根目录(/)开始写起的文件名或者目录名
相对路径:相对于目前路径的文件名写法
:代表当前目录,也可以使用./来表示
..:代表上一层目录,也可以../来表示。