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

原文地址:https://www.cnblogs.com/Jason-Xiang/p/5889430.html