走进Linux_Linux的文件权限与目录配置

引:了解好文件权限和目录的具体含义才能更好的操作Linux,所以理解好文件权限与目录配置才至关重要。

用户与用户组

用户(User)

  1. 用户可以随意改变自己所拥有的文件
  2. root用户就是最大的大佬,可以干任何事。

用户组(Group)

  1. 同一个用户组的用户可以访问该用户组的文件
  2. 每个账号可以加入多个用户组
  3. 在同一个用户组的文件也可以设置不同的权限,可以不让本组用户查看

其他人(Others)

除了文件用户、同组用户以外的人就是其他人。

Linux用户身份与用户组记录的文件

  1. 系统上的账号与一般身份用户以及root的相关信息都记录在/etc/passwd文件中
  2. 个人的密码都记录在/etc/shadow文件中
  3. Linux所有的组名都记录在/etc/group文件中

文件权限概念

Linux文件属性

我们可以利用下面的命令来查看文件属性:

ls -al // 列出所有文件详细的权限和属性(包含隐藏文件)

如下:

1
2
3
4
5
6
总用量 92
drwxr-xr-x. 22 root root 4096 3月 17 12:33 .
dr-xr-xr-x. 20 root root 4096 3月 22 09:14 ..
drwxr-xr-x. 2 root root 4096 11月 5 2016 adm
drwxr-xr-x 2 root root 4096 3月 12 10:27 alldata
... 省略

解释一下上面7列的意思:

  1. 第一列:文件的类型与权限

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

    • d:目录文件
    • -:普通文件
    • l:链接文件
    • b:用于存储数据的设备文件
    • c:用于传输数据的设备文件:鼠标、键盘

      接下来都是三个字符为一组,分别表示文件所有者的权限、同组用户的权限、其他用户的权限,而且r(读)、w(写)、x(执行)的顺序是固定不变的。

  2. 第二列:有多少文件名连接到此节点
  3. 第三列:这个文件(或目录)的所有者账号
  4. 第四列:这个文件所属的用户组
  5. 第五列:这个文件的大小,单位是B
  6. 第六列:这个文件的创建日期或修改日期
  7. 第七列:文件名

改变文件属性与权限的命令

  1. chgrp:改变文件所属的用户组 (注意-R 参数,递归更改)
  2. chown:改变文件所有者 (注意-R 参数,递归更改)
  3. chmod:改变文件的权限 (注意-R 参数,递归更改)

    改变文件的权限有两种办法,分别是:用数字进行权限的修改、用符号进行权限的修改。

    • 用数字进行权限的修改:权限有9个字母组成,并且每三个为一组,分别表示:文件主的权限、同组用户的权限、其他人的权限。在这种方式中,r=4、w=2、x=1,将每一组的三个值加起来,组成一个三位数即可。实例如下:

      1
      chmod -R 754 文件或目录
    • 用符号进行权限的修改:我们通过u(user),g(group),o(others),a(all)来表示身份权限,通过
      r(读),w(写),x(执行)来表示读写的权限,通过+(加入),-(除去),=(设置)来表示修改操作,实例如下:

      1
      chmod u/g/o/a  +/-/=  r/w/x  文件/目录

目录与文件的权限意义

  1. 权限对文件的重要性:
    • r:可读取此文件的实际内容。
    • w:可以编辑、新增或者修改该文件的内容(单不含删除该文件)
    • x:该文件具有可以被系统执行的权限。
  2. 权限对目录的重要性
    • r:表示具有读取目录结构的权限,即可以执行ls命令
    • w:表示具有更改该目录结构列表的权限,比如新建新的文件与目录、删除已经存在的文件与目录、将已存在或目录进行重命名、转移该目录内的文件和目录位置
    • x:表示用户能否进入该目录,即可以使用cd进入该目录

文件种类与扩展名

  1. 文件种类
    • 普通文件
      • 纯文本文件(ASCII),可以用cat命令读取
      • 二进制文件(binary),Linux中的可执行文件
      • 数据格式文件(data),就是程序运行时会被读取的具有特定格式的文件,如配置文件,需要用last命令去读取,用cat读取会乱码
    • 目录
    • 连接文件,类似Windows下的快捷方式
    • 设备与设备文件
      • 块设备文件,用于存储数据的设备文件,如:硬盘、软盘
      • 字符设备文件,用于数据传输的设备文件,如:键盘、鼠标
      • 套接字,这个设备文件在/var/run中
      • 管道,用于解决多个程序同时访问一个文件所造成的错误问题
  2. 文件扩展名

    Linux并没有扩展名,一个Linux的文件是否可以执行,取决于这个文件的属性中是否有x这个权限(也要真的可以执行)。
    但是为了增强文件的可读性,我们还是给文件增加了“扩展名“。如下面几种(等):

    • *.sh表示脚本或批处理文件
    • *Z、*.tar、*.tar.gz、*.zip、*.tgz他们都是压缩文件
    • 注意:从网上下载的文件的权限是有可能发生改变的,所以当我们下载的文件无法运行时查看一下它的权限是否有x。

      Linux对文件的限制:Linxu默认采用Ext2/Ext3文件系统,对文件名的长度限制为,单个文件名或目录名最大长度255个字符;完整的文件或目录名最大长度为4096个字符。

Linux目录配置

Linux目录配置标准

FHS一句文件系统使用的频繁与否与是否允许用户随意改动,而将目录定义为四中交互的形态,如下:

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

解释一下四个类型的意思:

  • 可分享的:可以分享给网络上的其他主机挂载使用
  • 不可分享的:只与自己的机器有关,所以自然就不能分享给其他主机
  • 不变的:不管什么样的distributions,这些数据基本不发生变化。一般这些目录中存放函数库、系统配置文件等
  • 可变的:经常改变的数据,如登录文件、新闻组等

根目录是整个系统最重要的目录,其他所有的子目录都是由根目录衍生而来的,同时根目录也与开机、还原、系统修复等操作有关。

FHS建议:根目录要足够的小,而且应用程序不要和根目录放在同一个分区中。同时,FHS建议根目录下应该要有这些目录:

目录 应放置文件内容
/bin 在bin目录下的命令可以被所有账号使用,一般的命令是:cat、chmod、chown、date、mv、mkdir、cp、bash
/boot 主要放置开机会使用到的文件
/dev 任何设备都是以文件的形式存放在这个目录当中
/etc 统主要的配置文件都放在这个目录中。这个目录下的文件属性是可以给一般用户查阅的,但只有root才可以修改,FHS建议:这个目录下不要放置可执行文件
/home 系统默认的用户主文件夹,~表示当前登陆用户的主文件夹 ,~rex表示指定用户的主文件夹
/lib 存放开机时用到的库函数及/bin、/sbin目录下的命令会使用到的库函数
/media 放置可删除的设备文件。如:软盘、光盘
/mnt 如果要临时挂载一些额外的设备就放在这个文件夹下
/opt 放置第三方软件的目录
/root 系统管理员的主文件夹
/sbin 放置开机过程中需要的,包括开机、修复、还原系统所需要的命令
/srv 是service的缩写,存放网络服务所需的一些数据
/tmp 一般用户执行程序暂时存放数据的地方。任何人都可以访问,所以要定时清理一下。FHS建议distributions开机时要将这个目录清空

其他重要的目录:

目录 应放置文件内容
/lost+found 使用ext2/ext3文件系统才会产生的一个目录。当文件系统发生错误时,一些丢失的片段就会放在这个目录中
/proc 是一个虚拟文件系统,也就是它的数据都是存放在内存中的,不占用硬盘空间
/sys 也是一个虚拟文件系统,记录内核相关信息

开机的时候只有根目录被挂载了,其他的目录所在的分区都是在系统启动完成之后才被挂载的。因此与开机过程有关的目录就必须要和根目录放在同一个分区中。必须与根目录放在同一个分区中的目录有下面这些目录:

  • /etc:配置文件
  • /bin:重要的执行文件
  • /dev:所需要的设备文件
  • /lib:执行文件所需要的库函数与内核所需要的模块
  • /sbin:重要的系统执行文件

/usr目录:=UNIX Software Resource,是操作系统关键资源放置的目录。
FHS建议:所有软件开发者都应将数据放置在这个目录的子目录下,而不要自行创建独立的目录。
这个目录就相当于Windows下的c:\program files

/var目录:/usr放置安装程序时所需要的较大容量的文件,而/var下存放系统运行后才会渐渐占用硬盘的目录。如:缓存、日志、Mysql数据库的文件等。

目录树

在Linux里面,所有的文件与目录都是由根目录开始的,那是所有目录与文件的源头,然后在一个一个分支下来,我们称这种目录配置为目录树

目录树主要有以下特征:

  1. 目录树的起始点为根目录(/,root)
  2. 每个目录不只能使用本地端的文件系统,也可以使用网络上的文件系统,例如可以利用NFS服务器挂载某特定目录等
  3. 米格文件在此目录树的文件名(包含完整路径)都是独一无二的。

参考

  1. 《鸟哥的Linux私房菜》