• Linux的文件权限与目录配置


    1.用户与用户组

      Linux系统下,存在3种用户身份:

    • 文件所有者
    • 用户组     
    • 其他人

      每个账号可以有多个用户组的支持(这样它就能同时具有这两个用户组的权限)。

      默认情况下,用户的相关信息都记录在/etc/password这个文件内,个人的密码记录在/etc/shadow,Linux所有的组名都记录在/etc/group内。

    2.Linux文件属性

      在登录Linux后,执行“ls -al”命令,可以查看所有文件的详细的权限和属性,如下:

    [root@www ~]# ls -al
    total 156
    drwxr-x---   4    root   root     4096   Sep  8 14:06 .
    drwxr-xr-x  23    root   root     4096   Sep  8 14:21 ..
    -rw-------   1    root   root     1474   Sep  4 18:27 anaconda-ks.cfg
    -rw-------   1    root   root      199   Sep  8 17:14 .bash_history
    -rw-r--r--   1    root   root       24   Jan  6  2007 .bash_logout
    -rw-r--r--   1    root   root      191   Jan  6  2007 .bash_profile
    -rw-r--r--   1    root   root      176   Jan  6  2007 .bashrc
    -rw-r--r--   1    root   root      100   Jan  6  2007 .cshrc
    drwx------   3    root   root     4096   Sep  5 10:37 .gconf      <=范例说明处
    drwx------   2    root   root     4096   Sep  5 14:09 .gconfd
    -rw-r--r--   1    root   root    42304   Sep  4 18:26 install.log <=范例说明处
    -rw-r--r--   1    root   root     5661   Sep  4 18:25 install.log.syslog
    [    1   ][  2 ][   3  ][  4 ][    5   ][     6     ][       7          ]
    [  权限  ][连结][拥有者][群组][文件容量][  修改日期 ][      檔名        ]

      上面查询结果共7列,第一列代表这个文件的类型和权限,第二列表示有多少文件名连接到此节点,第三列表示文件的所有者的账号,第四列表示文件的所属用户组,第五列表示文件的容量大小(默认单位为B),第六列表示文件的创建日期或者最近的修改时期,第七列为该文件名

      第一列共有十个字符,第一个字符代表这个文件的类型,后九个字符代码这个文件的权限

      第一个字符代表的意义:

    d:表示 bin/ 为目录;
    -: 表示 bin/ 为文件;
    l: 表示 bin/ 为连接文件(类似Windows中都快捷方式);
    b:表示 bin/ 为设备文件里面的可供存储的接口设备;
    c:表示 bin/ 为设备文件里面都串行串行端口设备,例如键盘、鼠标;

      后9个字符中,以三个为一组,且均为『rwx』 的三个参数的组合。其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ – ]而已

    前面3个:文件所有者的权限
    中间3个:同一用户组的权限
    最后3个:其他人的权限

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

      常用修改文件属性和权限的命令如下:

    ##chgrp:改变文件所属用户组。
    chgrp -[R] groupname dirname/filename
    
    ##chown:改变文件所有者。
    chown [-R] username dirname/filename
    
    ##chmod:改变文件的权限。
    chmod 777 filename  

    -R : 进行递归(recursive)的持续变更,即连同子目录下的所有文件都更改。

      设置权限的方法有两种:数字和符号。

      (1)数字方式设置权限:

      上面谈到Linux中权限分为9个,分别是 Owner、Group、Others 三种身份分别对应各自的 Read、Write、Execute 权限,对照表如下:

    • Read : r : 4
    • Write : w : 2
    • Execute : x : 1

      假设我们现在要将文件 test.txt 的属性设置为文件所有者拥有全部权限,文件用户组拥有读写权限,其他人拥有读权限,那么最终的权限数字计算公式如下:

    • 文件所有者全部权限:4 + 2 + 1 = 7
    • 文件用户组读写权限:4 + 2 = 6
    • 其他人只有读取权限:4

      所以,最终的权限数字为:764。

      (2)符号方式设置权限:

      在这种方式中Linux分别用u,g,o,a代表文件Owner、Group、Others 、All(所有人)。

    chmod

    u
    g
    o
    a

    +(加入)
    -(除去)
    =(设定)

    r
    w
    x

    文件或目录

      假如我们要设置一个文件的权限成为『-rwxr-xr-x』时,可以使用:

    [root@www ~]# chmod  u=rwx,go=rx  .bashrc

      假如我们要设置一个文件的某个权限,而不影响该文件的其他权限,可以使用:

    [root@www ~]# chmod  a-x  .bashrc

    4.Linux文件名与扩展名

    常用文件扩展名

    • *.sh : 脚本或批处理文件
    • *.z *.tar *.tar.gz *.zip *z.tgz : 经过打包都压缩文件
    • *.html *.php : 网页相关文件

    文件名长度限制

    • 单一文件或目录文件名的最大长度为255个字符
    • 包含完整路径及目录名称的文件名最大长度为4096个字符

    5.Linux目录配置

    5.1 Linux目录配置标准:FHS

      因为Linux的版本非常多,如果每个版本都有自己的目录配置,那么会造成很多困扰,所以就有了Linux目录配置标准:FHS标准。  

      FHS针对目录树架构仅定义出三层目录底下应该放置什么数据而已,分别是底下这三个目录的定义:

    • / (root, 根目录):与开机系统有关。一定要注意其子目录也有一个root目录,与这个完全不同,不要混为一谈,也就是说根目录就是“/”。
    • /usr (unix software resource):与软件安装/执行有关。
    • /var (variable):与系统运作过程有关。

    5.2 根目录的意义与内容

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

      FHS标准建议:根目录(/)所在分割槽应该越小越好,且应用程序所安装的软件最好不要与根目录放在同一个分割槽内,保持根目录越小越好。如此不但效能较佳,根目录所在的文件系统也较不容易发生问题。

      有鉴于上述的说明,因此FHS定义出根目录(/)底下应该要有底下这些次目录的存在才好:

    目录

    应放置文件内容

    /bin

    系统有很多放置执行文件的目录,但/bin比较特殊。因为/bin放置的是在单人维护模式下还能够被操作的指令。 在/bin底下的指令可以被root与一般账号所使用,主要有:cat, chmod, chown, date, mv, mkdir, cp, bash等等常用的指令。

    /boot

    这个目录主要在放置开机会使用到的文件,包括Linux核心文件以及开机选单与开机所需配置文件等等。 Linux kernel常用的档名为:vmlinuz,如果使用的是grub这个开机管理程序,则还会存在/boot/grub/这个目录喔!

    /dev

    在Linux系统上,任何装置与接口设备都是以文件的型态存在于这个目录当中的。你只要透过存取这个目录底下的某个文件,就等于存取某个装置啰~比要重要的文件有/dev/null, /dev/zero, /dev/tty, /dev/lp*, /dev/hd*, /dev/sd*等等

    /etc

    系统主要的配置文件几乎都放置在这个目录内,例如人员的账号密码文件、各种服务的启始档等等。一般来说,这个目录下的各文件属性是可以让一般使用者查阅的,但是只有root有权力修改。FHS建议不要放置可执行文件(binary)在这个目录中喔。比较重要的文件有: /etc/inittab, /etc/init.d/, /etc/modprobe.conf, /etc/X11/, /etc/fstab, /etc/sysconfig/ 等等。另外,其下重要的目录有:

    • /etc/init.d/:所有服务的预设启动 script 都是放在这里的,例如要启动或者关闭 iptables的话:『 /etc/init.d/iptables start』、『/etc/init.d/iptables stop』
    • /etc/xinetd.d/:这就是所谓的super daemon管理的各项服务的配置文件目录。
    • /etc/X11/:与 X Window 有关的各种配置文件都在这里,尤其是 xorg.conf 这个 X Server 的配置文件。

    /home

    这是系统默认的用户家目录(home directory)。在你新增一个一般使用者账号时,默认的用户家目录都会规范到这里来。比较重要的是,家目录有两种代号喔:
    ~:代表目前这个用户的家目录,而 
    ~dmtsai :则代表 dmtsai 的家目录!

    /lib

    系统的函式库非常的多,而/lib放置的则是在开机时会用到的函式库,以及在/bin或/sbin底下的指令会呼叫的函式库而已。什么是函式库呢?妳可以将他想成是『外挂』,某些指令必须要有这些『外挂』才能够顺利完成程序的执行之意。尤其重要的是/lib/modules/这个目录,因为该目录会放置核心相关的模块(驱动程序)喔!

    /media

    media是『媒体』的英文,顾名思义,这个/media底下放置的就是可移除的装置啦! 包括软盘、光盘、DVD等等装置都暂时挂载于此。常见的档名有:/media/floppy, /media/cdrom等等。

    /mnt

    如果妳想要暂时挂载某些额外的装置,一般建议妳可以放置到这个目录中。在古早时候,这个目录的用途与/media相同啦!只是有了/media之后,这个目录就用来暂时挂载用了。

    /opt

    这个是给第三方协力软件放置的目录。什么是第三方协力软件啊?举例来说,KDE这个桌面管理系统是一个独立的计划,不过他可以安装到Linux系统中,因此KDE的软件就建议放置到此目录下了。另外,如果妳想要自行安装额外的软件(非原本的distribution提供的),那么也能够将你的软件安装到这里来。不过,以前的Linux系统中,我们还是习惯放置在/usr/local目录下呢!

    /root

    系统管理员(root)的家目录。之所以放在这里,是因为如果进入单人维护模式而仅挂载根目录时,该目录就能够拥有root的家目录,所以我们会希望root的家目录与根目录放置在同一个分割槽中。

    /sbin

    Linux有非常多指令是用来设定系统环境的,这些指令只有root才能够利用来『设定』系统,其他用户最多只能用来『查询』而已。 放在/sbin底下的为开机过程中所需要的,里面包括了开机、修复、还原系统所需要的指令。 至于某些服务器软件程序,一般则放置到/usr/sbin/当中。至于本机自行安装的软件所产生的系统执行文件(system binary),则放置到/usr/local/sbin/当中了。常见的指令包括:fdisk, fsck, ifconfig, init, mkfs等等。

    /srv

    srv可以视为『service』的缩写,是一些网络服务启动之后,这些服务所需要取用的数据目录。常见的服务例如WWW, FTP等等。举例来说,WWW服务器需要的网页数据就可以放置在/srv/www/里面。

    /tmp

    这是让一般使用者或者是正在执行的程序暂时放置文件的地方。这个目录是任何人都能够存取的,所以你需要定期的清理一下。当然,重要数据不可放置在此目录啊!因为FHS甚至建议在开机时,应该要将/tmp下的数据都删除唷!

    5.3 绝对路径与相对路径

      除了需要特别注意的FHS目录配置外,在文件名部分我们也要特别注意喔!因为根据档名写法的不同,也可将所谓的路径(path)定义为绝对路径(absolute)与相对路径(relative)。这两种文件名/路径的写法依据是这样的:

    • 绝对路径:由根目录(/)开始写起的文件名或目录名称,例如 /home/dmtsai/.bashrc;
    • 相对路径:相对于目前路径的文件名写法。例如 ./home/dmtsai 或 ../../home/dmtsai/ 等等。反正开头不是 /就属于相对路径的写法

      举例来说,你目前在 /home这个目录下,如果想要进入 /var/log 这个目录时,可以怎么写呢?

    1. cd /var/log   (absolute)
    2. cd ../var/log (relative)

      因为你在 /home 底下,所以要回到上一层 (../) 之后,才能继续往 /var 来移动的!

    特别注意下面几个特殊的目录:

    • .  :代表当前的目录,也可以使用 ./ 来表示。
    • .. :代表上一层目录,也可以 ../ 来代表。
    • - :代表前一个工作目录
    • ~: 代表“目前使用者身份”所在的主文件夹
    • ~account: 代表 account 这个使用者的主文件夹(account是个帐号名称)

     例子:

    [dmtsai@study ~]$ su - # 先切换身份成为 root 看看!
    [root@study ~]# cd [相对路径或绝对路径]
    # 最重要的就是目录的绝对路径与相对路径,还有一些特殊目录的符号啰!
    [root@study ~]# cd ~dmtsai
    # 代表去到 dmtsai 这个使用者的主文件夹,亦即 /home/dmtsai
    [root@study dmtsai]# cd ~
    # 表示回到自己的主文件夹,亦即是 /root 这个目录
    [root@study ~]# cd
    # 没有加上任何路径,也还是代表回到自己主文件夹的意思喔!
    [root@study ~]# cd ..
    # 表示去到目前的上层目录,亦即是 /root 的上层目录的意思;
    [root@study /]# cd -
    # 表示回到刚刚的那个目录,也就是 /root 啰~
    [root@study ~]# cd /var/spool/mail
    # 这个就是绝对路径的写法!直接指定要去的完整路径名称!
    [root@study mail]# cd ../postfix
    # 这个是相对路径的写法,我们由/var/spool/mail 去到/var/spool/postfix 就这样写!

    参考:

    《鸟哥的Linux私房菜》

    http://february30thcf.iteye.com/blog/1770406

    http://www.cnblogs.com/duanbiaowu/p/5089418.html

  • 相关阅读:
    Win7 VS2015环境编译Libpng
    VS2013正确设置DLL环境变量目录的方法
    Win7 VS2013环境编译Squirrel 3.0.7
    docker-compose部署redis
    docker-compose部署nginx
    mysql备份
    docker 清理空间
    centos安装docker
    django整合vue
    部署3主3从redis伪集群
  • 原文地址:https://www.cnblogs.com/Jason-Xiang/p/5889430.html
Copyright © 2020-2023  润新知