2.Linux的文件权限与目录配置

北城余情 提交于 2019-11-30 15:25:08

 


目录

1.用户与用户组

2.Linux文件的属性

3.如何修改文件属性与权限

3.1改变档案的权限(chmod) 

3.2.改变档案的拥有者(chown)

3.3.改变档案的所属组(chgrp)

4.Linux的目录配置

5.绝对目录和相对目录


 

1.用户与用户组

用户和群组的作用:这个『用户与群组』的功能可是相当健全而好用的一个安全防护,保证了用户信息安全与系统结构的稳定。

由于Linux 是个多人多任务的系统,因此可能常常会有多人同时使用这部主机来进行工作的情况发生, 为了考虑每个人的隐私权以及每个人喜好的工作环境,则需要设置一个组的概念,这个组只有授予权限的人才能去修改和查阅文档为内容。

用户:档案拥有者。

用户组:由多个成员组合的称为用户组,可以把一个组想象成一个团队,不同的用户组表示不同的团队,比如团队A,拥有成员A,成员B,成员C,团队B:拥有成员D,成员E,成员F,两个团队之间是属于不同用户,所以资源互相访问,而A团队里面的成员的公共资源部分是可以共同享用的。

 

使用下面的一张图来解释他们之间的关系,现在把团队比喻成是一个合租的房子,有三个房间,每个成员有成员有一个房间。

使用者的意义(User):虽然团队A的成员直接可以互相走访他们的房间,但是他们也有自己隐私的地方,比如说衣柜等,虽然说一个房子里住,但是不允许触碰的。

组的概念(Group):除了自己的房间之外就是公共的区域了,公共的资源他们组内的成员可以公用,比如看电视,煮饭,上厕所等。

所以说,团队A就是一个群组,三个成员就是:用户,而且用户直接也可以互相设置权限。

其他人(Other)的概念:成员A,和成员D是不属于同一个组的,所以对于成员A来说成员D,成员E,成员F,都称为Others。

root:root就拥有无限的权利啦,他可以任意访问每个团队的资源,和每个团队成员的个人资源。

 


 2.Linux文件的属性

以root身份登录Linux系统:

然后下达指令:ls  -l 

注意:ls 是『list』意思,重点在显示档案的文件名与相关属性,-l,表示以长模式显示出来

文件属性分析,解释一下scsrun.log文件的属性:


 1.第一项档案的类型与权限(permission):一共有十个字符的位置:

档案类型一项详解:

当为 [ d ]则是目录。
当为 [ - ]则是档案,普通文件。
当是[ l ]则表示为连结档(link file),快捷方式。
当是[ b ]则表示为装置文件里面的可供储存的接口讴备(可随机存取装置);
当是[ c ]则表示为装置文件里面的串行端口讴备,例如键盘、鼠标(一次怅读取装置)。

例子:

若有一个档案的类型与权限数据为【-rwxr-xr--】,是什么意思呢?
答:
先将整个类型不权限数据分开查阅,并将十个字符整理成为如下所示:

[-]  [rwx]  [r-x]  [r--]

十个字符用0-9的标号表示:
0 为:代表这个文件名为目录或档案,本例中为档案(-);
123 为:拥有者的权限,本例中为可读、可写、可执行(rwx);
456 为:同群组用户权力,本例中为可读可执行(rx);
789 为:其他用户权力,本例中为可读(r)
注意:rwx 所在的位置是不会改变的,有该权限就会显示字符,没有该权限就变成减号(-)了。


注意事项:X(execute)权限的意思:


2.第二栏表示有多少档名连结到此节点(i-node):

每个档案都会将他的权限与属性记录到文件系统的 i-node 中,我们使用的目录树却是使用文件名来记录, 因此每个档名就会连结到一个 i-node。

3.第三栏:档案的拥有者。

4.第四栏:档案所属的群组,在Linux系统中,你的账户会附属一个或多个群组当中。

5.第五栏:档案容量大小,单位为:byte

6.第六栏为这个档案的建档日期或者是最近的修改日期

7.第七栏为这个档案的档名,如果前面有一个点 “.”,代表是隐藏的档案。

 


3.如何修改文件属性与权限

 

指令: 

  •   chgrp :改变档案所属群组
  •   chown :改变档案拥有者
  •   chmod :改变档案的权限, SUID, SGID, SBIT 等等的特性

提示:chgrp:(change group) ,chown(change own),chmod(change mode)

3.1改变档案的权限(chmod) 

例子:改变档案的权限:

权限的设定方法有两种, 分别可以使用数字或者是符号来进行权限的变更。

从上面已经知道,档案的类型和权限总共用10个字符表示,而档案的权限是用后9个字符来表示的:

分别是user/group/other三种身份,各自的read/write/execute权限,我们可以有字母u,g,o来表示这三种身份的权限,a 则代表 all 亦即全部的身份,读写权限仍为:r,w,x

 

第一种方法: 符号类型改变档案权限

实际操作一下吧:

首先命令:ls -l 看一下list的详情,可以发现install.log.syslog这个档案的权限是  【rw-  r--  r--】,说明用户可读可写,所有组可读,所有其他(other)可读。

如果我们想让档案所有者(user)加上 x(extcute)权限,让档案所有组加上 w(write)权限,让其他人(other)没有任何的权限:如何做呢?

使用命令:chmod  u+x,g+w,o-r  install.log.syslog

解释:给档案install.log.syslog:user加上x权限,owner加上w权限,other除去r权限

可以看到当执行命令后重新看这个文件的权限就改变成我们设置的权限了。

现在想让文档,owner和group的读写权限,全部去掉,可以使用结合的命令:

使用命令:chmod    ug-rw   install.log.syslog

解释:去除档案对user和group的可读可写权限。

想让所有的用户对档案都只有可读权限:

使用命名:chmod  a=r install.log.syslog

第二种方式:数字类型改变档案权限

从上面已经知道,档案的类型和权限总共用10个字符表示,而档案的权限是用后9个字符来表示的:分别是owner/group/other三种身份,各自的read/write/execute权限,这个权限是三个一组的,如果用数字来表示的话,每一种权限代表的数字分别是:

权限 数值
r 4(0100)
w 2(0010)
x 1(0001)

例如:owner的权限是:rwx,group的权限是:rwx,other的权限是:---

那么该档案的权限数字就是:770

owner 4+2+1=7(0111)
group 4+2+1=7(0111)
other 0+0+0=0(0000)

 例子:可以看到档案,install.log.syslog的user ,group,  other 的权限都是可读(r)。

如果现在想让user 加上 w和 x 权限,让group加上w权限,去除other的r权限。

根据上面的要求,那么  u = r+w+x=4+2+1=7;  g = r+w=4+2+0 =6 , o = 0;

使用命令:chmod   760  install.log.syslog


附加例子:

首先创建一个文件夹test,并跳转到test目录下:

使用命令:mkdir  test   

在目录test下创建一个文件 file1:

使用命令:touch file1

现在看一下test目录的详情:

使用命令:ls  -l  test/

文件夹里面的一个文件是我们创建的 file1,这个文件的权限代码是:644 

 看一下test这个文件夹的属性,在命令选项中加一个d代表directory,表示查看目录自身的属性,没有加d属性,就是查看目录下档案的属性:

使用命令:ls -ld test/

test文件夹的权限代码是:755 

现在直接使用命令:

chmod 000 test/

查看一下目录的权限改变了,权限代码变成:000,但是test目录下的文件file的权限没有改变,权限代码仍然为:644

 再次使用命令:

chmod 755 test/

无论改变test的权限,都无法改变test里面目录的权限的: 

 那如何修改目录里面的权限呢?

使用命名:意思是,除了改变文件夹test的属性之外,还要改变该文件夹下所有文件的属性:

chmod -R 000 test/
//-R : 进行递归(recursive)的持续变更,同次目录下的所有档案都更改

 

可以看到,文件夹的属性和文件夹目录下所有文件的属性一起修改了: 


3.2.改变档案的拥有者(chown)

情况一:比如说我是团队A的,我有私人游戏机,那么这个游戏机的所有者就是我本人,所属的组就是团队A,那现在我想把这个游戏机送给团队A,的B成员,此时这个游戏的所有者就不是我了,应该是B成员,但是所属的组还是团队A。在Linux中可以更改一个档案的所有者(owner),给团队其他成员。

情况二:如果说我不想把这个游戏机送给团队内的成员,我把它分享给团队B,用了,那么此时的所有者还是我,但是所属组就是团队B了,在Linux中可以修改档案的所属组(group).

例子:

可以看到test这个档案的的所有者和所属组都是root

我们先去创建一个用户,这个用户名为:numberA

使用命令:

useradd numberA
//意思是添加一个名为number的用户

现在将test文件的所有者变成 numberA这个用户,改变用户的所有者:

使用命令:chowm  numberA test/

可以使用命令:chown  root    test/  ,把档案所有者还给root

使用:chown命令,也可以同时修改档案的所属者,和档案的所属组:

使用命令:chown  numberA:nunberA   test/

 

注意:也可以只改变一个,比如命令:chown  numberA:root   test/,意思是改变所有者为numberA,所属组为root


通过上面我们大概了解,我们去改变一个文件夹档案的所有者和所属组,是不会改变这个文件夹里面的档案的所有者和所属组的,可以看到经过上面的改变,把test的所有者给numberA,但是test里面的档案所属者还是root:

还是同样的原理,如果需要修改整个test文件夹里面所有东西的属性,必须使用  -R 参数,进行递归修改,比如需要修改test文件夹以及文件夹里面所有内容的所属者,如何做:

使用命令:chown  -R  numberA  test/


 3.3.改变档案的所属组(chgrp)

改变档案的所有者,接着上面的把test文件夹该变成numberA的所属组:

使用命令:chgrp  numberA  test/

修改test文件夹下所有文档的所属组为 numberA:

使用命令:chgrp  -R numberA  test/


4.Linux的目录配置

打开Linux的文件系统,到底这些目录的用途是什么呢?


4.1.Linux 目录配置的依据--FHS(Filesystem Hierarchy Standard )

  • FHS 的重点在于规范每个特定的目录下应该要放置什么数据而已。 这样做好处非常多,因为 Linux 操作系统就能够在既有的面貌下(目录框架不变)开发出出开发者想要的独特风格。
  • 事实上,FHS 针对目录树架构仅定义出三层目录底下应该放置什么数据而已,分别是底下这三个目录:

1.  / (root, 根目彔):与开机系统有关;
2.  /usr (unix software resource):与软件安装/执行有关;
3.  /var (variable):与系统运作过程有关。

注意:根目录是整个系统最重要的一个目录,所有的目录都是根目录衍生出来的,而且根目录还与开机/还原/系统修复等动作有关,在系统出错时应该有自动修复的功能。

因此FHS 也给出了 (/)根目录下应该放一些什么文件如下图所示:


挂载点的解析:

就拿我们熟悉的window系统:

如果现在有一块磁盘,我们需要给磁盘分区后才能使用,每一个分区都是需要一个盘符的,比如:

像下面这样分完全是没有问题的,你可以直接使用:

但是当你还需要在你的window系统增加五个分区,但是现在已经没有盘符分配了怎么办:

在window下我们可以在c盘的下创建一个目录,比如:c:/aa,然后把没有分配盘符的分区,挂载到c盘创建的目录aa上,此时如果去访问c盘的aa目录就是去访问那块你挂载的分区:

这样一来无论你有多少个分区,都可以通过挂载的方式,挂载在c盘或者在别的可用盘符上,这样的意思就是,当你访问一个文件夹的时候,就相当于访问一个分区。 

注意:在Window中 A--Z都可以当盘符,但是在Linux只有 (/)可以当盘符,其他的文件都是以挂载的方式在(/)盘符下的,所以在Linux系统就只有一个文件系统,不想Window系统一样有c盘,d盘等。


5.绝对目录和相对目录

  • 绝对路径:由根目录 (/) 开始写起的文件名戒目录名称, 例如 /home/dmtsai/.bashrc;
  • 相对路径:相对二目前路径的文件名写法。 例如  . /home/dmtsai 或 ../../home/dmtsai/ 等等。反正开头不是 / 就属于相对路径的写法,相对路径,顾名思义,是根据你现在本身的位置为参考位置。

 例子:

假如说我需要进入两个文件夹里去:/var/run/cups    和/var/run/dbus ,如何做?

首先使用绝对路径点方法:

使用命令:cd   /var/run/cups

 

使用相对路径方法:

因为dubs和cups都是在run目录下的,所以此时可以使用相对路径的方法,相对于现在的路径,/var/run/cups,退回上一个目录,也就是回到 :/var/run/,然后接着就去到:dbus目录下:

使用命令:cd  ../dbus

当你的目录很长的时候使用相对路径就可以省很多麻烦。

注意:

一个点  . : 代表当前目录,也可以用(./)来表示。

两个点  .:代表上一层目录,也可以用(../)来表示。


 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!