Linux一般将文件可存取的身份分为三个类别,分别是 owner/group/others,且三种身份各有 read/write/execute 等权限。

使用者与群组

文件拥有者

由于Linux是个多用户多任务的系统, 所以可以设置为只有文件拥有者才可查看或修改,其他人无法查看修改

群组概念

以团队形式来共享,分隔可查看,修改的权限。

其他人

既不是文件拥有者,又不是群组里的人,root除外。

Linux 使用者身份与群组记录的文件

默认的情况下:

  1. 所有的系统上的帐号与一般身份使用者,还有root, 记录在 /etc/passwd
  2. 个人的密码则是记录在 /etc/shadow
  3. Linux所有的群组名称都纪录在 /etc/group

Linux 文件权限概念

Linux文件属性

ls -al

  1. 第一栏代表这个文件的类型与权限(permission)

    文件的类型与权限之内容

    1. 第一个字符代表这个文件是“目录、文件或链接文件等等”:

      • 当为d则是目录,例如上表文件名为“.config”的那一行;
      • 当为-则是文件,例如上表文件名为“initial-setup-ks.cfg”那一行;
      • 若是l则表示为链接文件(link file);
      • 若是b则表示为设备文件里面的可供储存的周边设备(可随机存取设备);
      • 若是c则表示为设备文件里面的序列埠设备,例如键盘、鼠标(一次性读取设备)。
    2. 接下来的字符中,以三个为一组,且均为“rwx” 的三个参数的组合。

      • r代表可读(read)、w代表可写(write)、x代表可执行(execute)
      • 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号-而已。
      • 第一组为“文件拥有者可具备的权限”,以“initial-setup-ks.cfg”那个文件为例, 该文件的拥有者可以读写,但不可执行;
      • 第二组为“加入此群组之帐号的权限”;
      • 第三组为“非本人且没有加入本群组之其他帐号的权限”。
  2. 第二栏表示有多少文件名链接到此节点(i-node)

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

  4. 第四栏表示这个文件的所属群组

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

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

  7. 第七栏为这个文件的文件名

如何改变文件属性与权限

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

改变所属群组, chgrp

  • 被改变的群组名称必须要在/etc/group文件内存在才行,否则就会显示错误
1
2
3
4
5
6
7
8
9
10
[root@study ~]$ chgrp [-R] dirname/filename ...
选项与参数:
-R : 进行递回(recursive)的持续变更,亦即连同次目录下的所有文件、目录
都更新成为这个群组之意。常常用在变更某一目录内所有的文件之情况。
范例:
[root@study ~]$ chgrp users initial-setup-ks.cfg
[root@study ~]$ ls -l
-rw-r--r--. 1 root users 1864 May 4 18:01 initial-setup-ks.cfg
[root@study ~]$ chgrp testing initial-setup-ks.cfg
chgrp: invalid group: testing

改变文件拥有者, chown

  • /etc/passwd这个文件中有纪录的使用者名称才能改变
  • 可以顺便直接修改群组的名称chown [-R] 帐号名称:群组名称 文件或目录
  • : 可以用 . 替换, 推荐 :
  • chown也能单纯的修改所属群组呢! 例如chown .sshd initial-setup-ks.cfg就是修改群组,就是那个小数点的用途!
1
2
3
4
5
6
7
8
9
10
11
12
[root@study ~]# chown [-R] 帐号名称 文件或目录
[root@study ~]# chown [-R] 帐号名称:群组名称 文件或目录
选项与参数:
-R : 进行递回(recursive)的持续变更,亦即连同次目录下的所有文件都变更
范例:将 initial-setup-ks.cfg 的拥有者改为bin这个帐号:
[root@study ~]# chown bin initial-setup-ks.cfg
[root@study ~]# ls -l
-rw-r--r--. 1 bin users 1864 May 4 18:01 initial-setup-ks.cfg
范例:将 initial-setup-ks.cfg 的拥有者与群组改回为root:
[root@study ~]# chown root:root initial-setup-ks.cfg
[root@study ~]# ls -l
-rw-r--r--. 1 root root 1864 May 4 18:01 initial-setup-ks.cfg

改变权限, chmod

  1. 数字类型改变文件权限

    r, w, x 分别对应数字 4, 2, 1

    每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为:-rwxrwx--- 分数则是:

    owner = rwx = 4+2+1 = 7 > group = rwx = 4+2+1 = 7 > others= --- = 0+0+0 = 0 即该文件权限为770

    1
    2
    3
    4
    [root@study ~]$ chmod [-R] xyz 文件或目录
    选项与参数:
    xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。
    -R : 进行递回(recursive)的持续变更,亦即连同次目录下的所有文件都会变更
    • vim编辑后的文件默认是664 —— -rw-rw-r--
    • 需要变成可执行文件是755 —— -rwxr-xr-x
  2. 符号类型改变文件权限

    user, group, others, all 分别对应字母 u, g, o, a

    • | chmod | u g o a | +(加入) -(除去) =(设置) | r w x | 文件或目录 |

目录与文件之权限意义

一个文件可以具有的权限有:可读、可写、可执行权限

权限 具体内容
r 可读权限—read
对文件:具有显示文件内容的权限
对目录:具有浏览目录的权限,可以查看目录内容,但是无法进入目录
w 可写权限—write
对文件:具有编辑和删除文件的权限
对目录:具有删除和移动目录的权限
x 可执行权限—excute
对文件:具有执行文件的权限
对目录:具有进入目录的权限

Linux文件种类与扩展名

文件种类 符号 说明
正规文件(regular file) 第一个属性为 - 纯文本文件(ASCII)
二进制档(binary)
数据格式文件(data)
目录(directory) 第一个属性为 d 如 [drwxrwxrwx]
链接文件(link) 第一个属性为 l 类似Windows中的快捷方式
设备与设备文件(device) 第一个属性为b
第一个属性为c
区块(block)设备文件 储存设备
字符(character)设备文件 外设
数据接口文件(sockets) 第一个属性为 s 最常在/run或/tmp这些个目录中看到这种文件类型
数据输送档(FIFO, pipe) 第一个属性为p 目的在解决多个程序同时存取一个文件所造成的错误问题

Linux目录配置

Linux目录配置的依据–FHS

Filesystem Hierarchy Standard (FHS)标准

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

根目录 (/) 的意义与内容

可分享的(shareable) 不可分享的(unshareable)
不变的(static) /usr (软件放置处) /etc (配置文件)
/opt (第三方协力软件) /boot (开机与核心档)
可变动的(variable) /var/mail (使用者邮件信箱) /var/run (程序关)
/var/spool/news (新闻群组) /var/lock (程序相关)

具体内容参看鸟哥Linux私房菜第四版p281

  • 根目录越小越好。 如此不但性能较佳,根目录所在的文件系统也较不容易发生问题。
目录 应放置文件内容
/lost+found 这个目录是使用标准的ext2/ext3/ext4文件系统格式才会产生的一个目录,目的在于当文件系统发生错误时, 将一些遗失的片段放置到这个目录下。不过如果使用的是 xfs 文件系统的话,就不会存在这个目录了!
/proc 这个目录本身是一个“虚拟文件系统(virtual filesystem)”喔!他放置的数据都是在内存当中, 例如系统核心、行程信息(process)、周边设备的状态及网络状态等等。因为这个目录下的数据都是在内存当中, 所以本身不占任何硬盘空间啊!比较重要的文件例如:/proc/cpuinfo, /proc/dma,/proc/interrupts, /proc/ioports, /proc/net/* 等等。
/sys 这个目录其实跟/proc非常类似,也是一个虚拟的文件系统,主要也是记录核心与系统硬件信息较相关的信息。 包括目前已载入的核心模块与核心侦测到的硬件设备信息等等。这个目录同样不占硬盘容量喔

/usr 的意义与内容

usr是Unix Software Resource,也就是“Unix操作系统软件资源”所放置的目录,所有软件开发者,应该将他们的数据合理的分别放置到这个目录下的次目录,而不要自行创建该软件自己独立的目录。

/var 的意义与内容

/var目录主要针对常态性变动的文件,包括高速缓存(cache)、登录文件(log file)以及某些软件运行所产生的文件, 包括程序文件(lock file,run file),或者例如MySQL数据库的文件等等。

CentOS 7 与过去的目录编排:

  • /bin –> /usr/bin
  • /sbin –> /usr/sbin
  • /lib –> /usr/lib
  • /lib64 –> /usr/lib64
  • /var/lock –> /run/lock
  • /var/run –> /run

目录树(directory tree)

目录树架构示意图