首页 > 技术文章 > Linux的文件权限与目录配置

benon94 2019-07-25 15:35 原文

Linux的文件权限:

  首先,使用su -切换到root用户;

  其次,使用ls -al命令查看,ls是list的意思,显示文件的文件名和相关属性,-al参数是列出所有的文件详细权限与属性;

    

    1.第一栏代表文件的类型和权限,总共有十个字符,各自代表的内容如下:

      

      第一个字符代表这个文件是目录、文件或者链接文件等;

        [d]则是目录,[-]则是文件 ,[l]则是链接文件,[b]则表示为可供存储的周边设备,[c]则表示设备文件里的串行端口设备(键盘、鼠标等)。

      接下来的字符三个为一组,且均为[rwx]三个参数的组合,r代表可读,w代表可写,x代表可执行。

      注意:对于目录来说,必须拥有可执行的权限才可以进入该目录,只拥有可读权限是不能进入的。

      第一组为文件拥有者所具有的权限,第二组为加入此用户组之账号的权限,第三组为非本人且没有加入本用户组的其他账号的权限。

    2.第二栏表示有多少文件名链接到此节点(inode);

      每个文件都会将它的权限与属性记录到文件系统的节点中,不过,我们使用的目录树却是使用文件名来记录,因此每个文件名都会链接到一个节点。

    3.第三栏表示这个文件(或目录)的拥有者账号;

    4.第四栏表示这个文件的所属用户组;

    5.第五栏表示这个文件的容量大小,默认单位为Bytes;

    6.第六栏为这个文件的创建日期或是最近的修改日期;

    7.第七栏为这个文件名。(文件名前多一个点,则表示这个文件为隐藏文件)

 

修改文件属性与权限:

  常用命令:chgrp、chown、chmod。

    chgrp(change group):修改文件所属用户组,要被修改的组名必须要在/etc/group文件中存在才行。

      格式:chgrp  [-R] 用户组 文件名  (-R为递归修改,连同子目录下的所有文件一并修改)

    chown(change owner):修改文件拥有者,用户必须是已经存在/etc/passwd这个文件中。

      格式:chown [-R] 账号名称 文件或目录。

    注意:什么时候使用以上两个命令,当你复制文件给你之外的其他人时,新复制的文件必须修改用户组和拥有者,他人才能打开。

    chmod:修改文件权限。

      数字类型修改文件权限:r对应4,w对应2,x对应1,每种身份各自的三个权限数字是累加的。

        格式:chmod [-R] 权限数字 文件或目录

        举例:owner = rwx = 4+2+1=7

           group = rwx = 4+2+1=7

           others = ---=0+0+0=0

        所以,以上文件的权限数字就是770。

      符号类型修改文件权限:u对应user,g对应group,o对应others,a即全部身份,+增加权限,-删除权限,=设置权限。

        格式:chmod u=rwx,g=rx,o=r 文件名

           chmod a-x 文件名   

  

权限的具体意义:

  文件的权限:

    r(read):可读取此文件的实际内容;

    w(write):可以编辑、新增或是修改该文件的内容(但不能删除);

    x(execute):可以被系统执行。(注意:在Windows下,一个文件是否具有执行的能力是借由扩展名来判断的,但在Linux下,是借由是否具有[x]这个权限来决定的。)

  目录的权限:

    r(read contents in directory):可查询该目录下的文件名数据;(前提是要有x权限,否则无法进入该目录,就无法执行任何命令)

    w(modify contents of directory):具有改动该目录结构列表的权限,比如建立新文件与目录、删除已存在文件与目录、重命名已存在文件或目录、移动该目录内的文件或目录位置。

    x(access directory):代表的是用户能否进入该目录成为工作目录。(工作目录即当前所在目录)

  具体如下表:

  

 

Linux文件种类与扩展名:

  文件种类:

    1.常规文件:就是一般我们在进行读写的类型的文件,第一个属性为-

      纯文本文件(ASCII):这是Linux系统中最多的一种文件类型,内容都是人类可以直接读到的数据,比如数字、字母等。

      二进制文件(binary):计算机仅认识二进制文件。

      数据文件(data):程序在运行过程当中会读取到某些特定格式的文件,比如用户登录时,会将登录的数据记录在/var/log/wtmp这个文件内。

    2.目录:就是目录,第一个属性为d

    3.链接文件(link):类似Windows系统下的快捷方式,第一个属性为l

    4.设备与设备文件(device):与系统周边及存储相关的一些文件,通常都集中在/dev这个目录下。

      区块设备文件(block):就是一些存储数据,以提供系统随机存取的接口设备,比如硬盘和软盘。第一个属性为b

      字符设备文件(character):是一些串行端口的接口设备,比如键盘、鼠标等,这些设备都是一次性截取,不能够截断输出。第一个属性为c

    5.数据接口文件(sockets):通常被用在网络上的数据交换,第一个属性为s

    6.数据输送文件(FIFO,pipe):主要目录是解决多个程序同时读写一个文件所造成的错误问题,第一个属性为p

  

  文件扩展名:    

    *.sh:脚本或批处理文件(scripts),批处理文件都是使用shell写成,所以扩展名就是.sh。

    *Z、*.tar、*.tar.gz、*.zip、*.tgz:经过打包的压缩文件,因为压缩软件分别是gunzip、tar等,故取其相关的扩展名。

    *.html、*.php:网页相关文件,分别代表HTML语法与PHP语法的网页文件。

    注意:Linux上的文件名只是让你了解文件可能的用途而已。

  

  文件名长度限制:

    在Linux下面,使用传统的ext2、ext3、ext4文件系统以及近来被CentOS7当作默认文件系统的xfs而言,文件名长度限制为:

      单一文件或目录的最大容许名为255字节,以一个ASCII英文占用一个字节来说,则大约可达255个字符长度。

      如是以每个汉字占用2字节来说,最大文件名就是大约在128个汉字之间。

  文件名的限制:

    命名应该避免一些特殊字符,如下:

      * ? > < ; & ! [ ] | \ ' " ` ( ) { }

 

Linux目录配置:

  FHS(Filesystem Hierarchy Standard)标准,主要目的是希望让用户可以了解到已安装软件通常放置于哪个目录下。

  FHS仅是定义了最上层(/)及次层(/usr与/var)的目录内容应该要放置的文件或目录数据。

  FHS依据文件系统使用的频繁与否与是否允许用户随意修改,而将目录定义成为四种交互作用的形态,如以下表格:

  

    可分享:可以分享给其他系统挂载使用的目录,所以包括执行文件与用户的邮件等数据。

    不可分享:自己机器上运行的设备文件或是与程序有关的socket文件等。(因为仅与机器有关,所以不适合分享)

    不变:有些数据是不会经常变动的,比如函数库、文件说明、系统管理员所管理的主机服务配置文件等。

    可变动:需要经常修改的数据,例如日志文件,一般用户可自行接收的新闻组等。

 

  事实上,FHS针对目录树架构仅定义出三层目录:

    /(根目录):与启动系统有关;

    /usr(unix software resource):与软件安装/执行有关;

    /var(variable):与系统运行过程有关。

    1.根目录

      根目录是整个系统最重要的一个目录,不但所有的目录都是由根目录衍生出来,同时根目录也与启动、还原、系统修复等操作有关。

      正因为根目录的重要性,FHS希望根目录不要放在非常大的分区内,因为越大的分区你会放入越多的数据,也会有更多错误发生的机会。

      另外,应用程序所安装的软件最好不要与根目录放在同一个分区内,这样可保持根目录最佳性能。

      FHS要求根目录下必须要存在的目录:

        /bin:放置的是单人维护模式下还能被使用的命令;

        /boot:放置启动会用到的文件,包括Linux内核文件以及启动选项与启动配置文件等;

        /dev:设备与接口设备文件;

        /etc:系统的主要配置文件,例如账号密码文件等;

        /lib:放置的是在启动时会用到的函数库,以及在/bin或/sbin下面的命令会调用的函数库;

        /media:放置的是可删除的设备,包括软盘、光盘等都挂载于此;

        /mnt:用于暂时挂载某些额外的设备;

        /opt:给第三方辅助软件放置的目录;

        /run:系统启动后所产生的各项信息;

        /sbin:系统启动过程中所需要的的命令,包括启动、修复、还原;

        /srv:service的缩写,一些网络服务启动之后,这些服务所需要使用的数据目录,例如www、FTP等;

        /tmp:让一般用户或是正在执行的程序暂时放置文件的地方;

        /usr:第二层FHS设置;

        /var:第二层FHS设置。

      FHS建议根目录下可以存在的目录:

        /home:系统默认的用户家目录;

        /lib<qual>:用来存放与/lib不同格式的二进制函数库;

        /root:系统管理员的家目录。

    2./usr

      所有系统默认的软件都会放置到/usr下面,因此这个目录类似于Windows系统C:\Windows\ + C:\Program Files\ 这两个目录的综合体。

      刚安装完的系统,这个目录会占用最多的硬盘空间。

      FHS要求必须要存在的目录:

        /usr/bin/:所有一般用户能够使用的命令都放在这里,目录与根目录下的/bin是一模一样了;

        /usr/lib/:与根目录下的/lib功能相同,根目录下的/lib就是链接到此目录中;

        /usr/local/:系统管理员在本机安装自己下载的软件到该目录中;

        /usr/sbin/:非系统正常运行所需要的命令,与根目录下的/sbin功能相同,根目录下的/sbin就是链接到此目录中;

        /usr/share/:主要放置只读的数据文件,也包括共享文件。

      FHS建议可以存在的目录:

        /usr/games/:与游戏相关的数据放置处;

        /usr/include/:c/c++等语言的头文件与包含文件放置处;

        /usr/libexec/:某些不被一般用户常用的执行文件或脚本等的放置处;

        /usr/lib<qual>/:与/lib<qual>/功能相同,根目录中的/lib<qual>/就是链接到此目录;

        /usr/src/:一般源代码建议放置到这里,src是source的意思。(内核源代码建议放置到/usr/src/Linux/目录下)

     3./var

      系统运行后才会渐渐占用硬盘容量的目录,主要针对经常性变动的文件,包括缓存、日志文件以及某些软件运行所产生的文件。

      FHS要求必须存在的目录:

        /var/cache/:应用程序运行过程中产生的缓存;

        /var/lib/:程序执行过程中,需要使用到的数据文件放置处;

        /var/lock/:某些设备或是文件资源一次只能被一个应用程序所使用,如果同时两个程序使用该设备时,就可能产生一些错误,因此需要将该设备上锁。

        /var/log/:日志文件放置的目录;

        /var/main/:放置个人电子邮箱的目录;

        /var/run/:某些程序或者服务启动后,会将它们的PID放置在这个目录下;

        /var/spool/:通常放置一些队列数据(就是排队等待其他程序使用的数据)。

 

 绝对路径和相对路径:

    绝对路径(absolute):由根目录开始写起的文件名或目录名称;

    相对路径(relative):相对于目录路径的文件名写法,反正开头不是 / 就属于相对路径的写法;

  注意:. :代表当前的目录,也可以使用./来表示;

     ..:代表上一层目录,也可以使用../来表示。

  

推荐阅读