在Linux中,所有的数据都是以文件的形态展现出来的,文件的意义在Linux中至关重要,因此,在Linux中,文件有着很多的属性与权限!
一. 用户与用户组
通常情况下,登录者相对于一个文件可能有着三种角色:
1. 文件所有者
即这个文件是你的,你所拥有的。通常情况下这个文件是你的私密信息,比如你的情书什么的,毕竟你不想让别人看到,如果你是这个文件的文件所有者,那么你就可以将这个文件设定为文件所有者可访问、可修改(不包含删除,后文将说明)。
2. 用户组
文件除了拥有文件所有者这个属性,还有一个属性就是用户组。所谓用户组,通常用于团队开发的情况,你和你团队的人员应该属于一个用户组,一个或多个用户 组成一个用户组,假设在这台机器上同时工作者两个团队A、B,那么A团队的文件就应该设置为用户组可访问、可修改,用户组的其他人不可访问、不可修改。
相对于文件所有者这种亲密的关系,用户组的限制则比较宽泛,通常用户组的权限比文件所有者的权限要小一些。
当然,在上面的团队模式下,你也可以将一些私人文件设置成用户组不可见、不可修改,这样即使与你在同一个用户组的成员也不会看到它们。
3. 其他人概念
所谓其他人,就是对于这台机器,我可以有自己的用户,但是相对于这个文件我既不是文件所有者也不是文件制定用户组的成员,那么我相对于这个文件就是其他人!与上面两个文件属性一样,Linux中的文件拥有其他人权限这个属性,我们可以为文件设置其他人的文件权限。
二. 文件权限查看
在Linux中,文件权限是一种文件属性,我们可以通过ls -al命令查看一个文件的部分重要属性,如下图所示:
如上图所示,(ls值得是list,al表示列出所有文件的权限与属性,包括隐藏文件,隐藏文件的文件名都是以.开头)首先我们可以把上面的list分成7列来看:
1. 第一列展示了文件的类型与权限,例如第一行的d rwx r-x r-x,这一串字符长度是10,我们分为四组来看,第一组就是第一个字符,它代表了这个文件的类型,文件类型主要有以下几种:
【-】:表示是一个文件
【d】:表示是一个目录
【l】:表示是一个连接文件(相当于windows中的快捷方式)
【b】:设备文件中可供存储的设备接口
【c】:设备文件中的串行端口设备,如键盘、鼠标(一次性读取设备)
第二组是第2个字符到第四个字符,他表示了文件所有者的权限;
第三组是第5个字符到第7个字符,它表示了文件的文件组的权限;
第四组是第8个字符到第10个字符,它表示了文件的其他人的权限;
那么如何通过三个字母来判断权限呢,首先,第一个字母表示了是否可读,如果是【r】,则代表可读,如果是【-】,则表示不可读,如果是一个目录,则表示是否可以看到这个目录的文件列表,请注意,可读目录并不代表你真的可以看到目录中的文件!第二个字母代表了文件是否可写,即可修改,如果是【w】,表示可以修改,如果是【-】,则表示不可修改,这里的可修改不包括删除操作!;第三个字母代表了是否可以执行这个文件,如果是【x】,表示可以执行,如果是【-】,表示不可以执行,请注意,在Linux中,一个文件是否可执行不可以向windows一样根据文件扩展名进行判断,在windows中,可执行文件通常其扩展名是.com、exe、.bat等,但是在Linux中,要判断一个文件是否可执行,只能同过可执行权限进行判断!还有一点,对于目录,可执行权限代表是否可以以此目录作为工作目录,所谓工作目录,就是你可以cd进行的。
2. 第二列表示的是有多少文件名链接到此节点。Linux中的目录树是通过文件名记录的,每个文件名都会对应系统中的一个i-node,而这一列就是记录了连接在相同i-node上的文件的文件数量。
3. 第三列表示的是文件所有者是谁,如图所示,上面的文件所有这均是jason用户。
4. 第四列表示的是文件的所属用户组名,如上图所示,文件的用户组是jason用户组。
5. 第五列记录了文件的大小,默认单位是B。
6. 第六列记录了文件最后被修改的时间。
7. 最后一列则记录着文件名。
三. 改变文件权限
改变文件的权限使用的命令是如下三个:
【chgrp】:改变文件所属用户组;
【chown】:改变文件的文件所有者;
【chmod】:改变文件的权限;
1. chgrp:即时change group英文的缩写,其语法格式如下:
chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...
其中常用的option是-r,表示的是递归的连续修改,即联通子目录下的所有文件所有目录都进行更新(下文将不再解释喽),如果你输入的用户组并不存在,系统将提示你invalid group;
2. chown:更改文件的文件所有者,其语法格式与chgrp相似:
chown [OPTION]... [OWNER][:[GROUP]] FILE...
chown [OPTION]... --reference=RFILE FILE...
我们举个例子:
可以看到,首先我的根目录下有一个test的文本文件,它的所有者是jason,然后我使用该命令将它的所有者变成root!如果制定用户不存在,那么将提示错误!
注意:使用chown也可以进行修改文件的所属用于组,命令为: chown owner.group filename或者chown owner:group filename,如果是单纯的修改用户组,也可以
chown .group filename。
3. chmod修改权限,使用chmod修改文件权限的时候有两种方式分别是使用数字方式和使用符号类型方式。
3.1. 数字修改:
在rwx权限中,其排列顺序是不变的,我们规定三位分别拥有不同的权重,其中【r】:4 【w】:2 【x】: 1,这样规定的话,不管如何组合,每种组合的权重之和都是不同的,因此我们就可以根据权重之和来判断相应 的权限了,举个例子:
如果一个文件的权限是 【-】【r】【w】【x】【r】【-】【w】【r】【-】【-】,那么,转换成数字表示的话, 文件的所有者权限就是7,文件的用户组权限就是5,其他人权限就是4,合起来文件的权限就是754,这个时 候,chmod的语法格式如下:
chmod 【-R】 【r】+【w】+【x】 filename
举个例子:
文件原来的权限是664,通过数字修改后变成了775.
3.2. 符号类型修改文件权限
我们知道,对于与一个文件,用户可以有三种身份,分别是owner、group、others,我们规定可以使用u、g、o 分别代表这三个身份,同时使用r、w、x、代表三种不同的权限,我们使用 身份 连接符 权限 来设置不同身份 的不同权限,其中,连接符有三种:
【=】:指的是将该身份 直接设置成 该权限,不管你以前是什么权限;
【+】:指的是为该身份添加该权限,其他权限保持不变;
【-】:指的是除去该身份的该权限
设置多个身份的权限可以使用“,”分割,其语法格式如下:
chmod 【u/g/o/a】 【+/-/=】 【r/w/x】,【u/g/o/a】 【+/-/=】 【r/w/x】,...
举个例子:
如图所示,文件test最初的权限是r-- r-x r-x,然后我们为owner添加了wx权限,为group和others除去了执行权限x。
注意:【a】身份值得是所有人。
四. 文件权限的意义
三种权限对于文件有着重要的且不同的意义,具体如下:
【r】:是否可读。
对于文件指的是是否可以读取文件的实际内容,如读取文本文件的文字内容等。
对于目录,是否具有读取目录结构列表的权限,即查询目录下文件名列表。
【w】:
对于文件,是否可写,其权限有可编辑、新增、修改文件的内容,但是不可以删除。
对于目录,其权限比较大,它包含:
可以新建文件或目录;
可以删除已经存在的文件或目录(不管你相对于这个文件的权限是什么)
· 将已经存在的文件或者目录进行重命名
修改其中的文件或目录的位置
总的来说,目录的w权限与这个目录下的文件名额度变动有关。
【x】:
对于文件,判断这个文件是否可以被执行,文件的是否可被执行与扩展名没有关系!
对于目录,就是是否可以将这个目录作为工作目录。
有几个需要注意的地方,我们举两个例子来说明一下:
1. 假如现在的登录用户是jason,那么他的工作目录/home/jason的权限就应该是700,如果此时该目录下有一个文件A他的权限是700,但是文件的所有者和用户组都是root。
这种情况下,首先相对于文件来说,用户jason是不可读、不可编辑、不可执行的,但是,由于文件的父目录对于jason来说权限充足,拥有完整的权限,因此他可以对文件进行删除、移动等操作!
2. 如果对于一个目录,你的权限是可读不可执行,但是目录里面有一个文件,你没有任何权限,那么当你尝试用ls -l访问目录的结构的时候,会出现什么情况呢?
这种情况下,由于你对于这个文件是没有任何权限的,理论上你是不可读、不可写、不可执行,但是对于目录,你仅仅拥有读取的权利,目录的权限优于文件的权限,因此你可以查看目录结构(注意,请记住,目录结构只包含目录内目录和文件的名称列表),因此,你依然可以看到这个文件名,但是你对于目录不具备x权限,因此文件的所有属性将被显示成?,同时,你无法cd到这个目录下!
五. Linux目录标准配置
FHS(FileSystem Hierarchy Standard)的重点在于规范Linux下每个特定目录下应该放置什么样子的数据!
FHS 根据 文件系统的使用频繁程度 和 是否允许用户随意改动,将目录顶已成为四种交互作用的形态:
1. 可分享的、不可变的:/usr(软件放置处)、/opt(第三方软件)
2. 可分享的、可变动的:/var/mail(用户邮件信箱)、/var/spool/news(新闻组)
3. 不可分享的、不可变的:/etc(配置文件)、/boot(开机和内核文件)
4. 不可分享的、可变动的:/var/run(程序相关)、/var/lock(程序相关)
根目录:
在Linux系统的目录树中,最重要的三个目录分别是“/”(root、根目录)、“/usr”、“/var”。
其中,根目录是整个系统中最重要的目录,原因:所有的目录都是由根目录衍生出来的;根目录存储着与开机、还原以及系统修复等操作的相关文件。因此,FHS指出尽量让根目录越小越好,不要将用户文件和其他软件文件放在这里!
/usr目录:
/usr:根据FHS定义,该目录下的数据是可分享但是不可变动的,usr的含义是UNIX Software Rsources的缩写,即UNIX操作系统软件资源,FHS建议所有的软件开发者尽量将他们的数据合理的放置到该目录下的子目录中。系统默认的软件都会放到该目录下!其子目录有:
/usr/x11R6/:为X WINDOW系统重要的数据所放置的目录
/usr/bin/ :绝大部分用户可用命令(注意在根目录下也有一个bin文件,/bin存储的是在但用户维护模式下还可以被操作的命令)
/usr/include/:C/C++等程序语言的头文件与包含文件的放置处
/usr/lib/:软件的函数库、目标文件以及不被惯用的执行文件或者脚本
/usr/local/:系统管理员在本机自行安装自己下载的软件建议安装到此目录!
/usr/sbin/:非系统正常运行所需要的命令
/usr/share/:放置共享文件的地方
/usr/src/:源码
/var目录:
该目录主要是针对常态性变动的文件,缓存、登陆文件以及软件运行期间产生的文件等。
在根目录下,还有一些重要的、被规范了的目录:
/home:系统默认的用户主文件夹,所有被创建的用户,用户的主文件夹都会被规范到这里,比如我创建了一个用户jason,在该目录下就会有一个jason用户的主文件夹/hone/jason
/lib:开机的时候用到的函数库
/medis:与媒体相关的,例如软盘、光盘、DVD等
/opt:第三方软件放置的目录,但是还可以放置到/usr/local目录下(我建议),可以看上面介绍的/usr目录。
/root:系统管理员的主文件夹。
/sbin:放置了那些一般只有root才可以使用的,用于开机、修复、还原系统所需要的命令。
/srv:一些网络服务启动后所取用数据的目录。
/tmp:临时文件
以上只是简单的介绍了FHS所规范的大多数目录,详细信息可以参看网上的资料。
Linux目录树架构:
1万+



被折叠的 条评论
为什么被折叠?



