Linux学习笔记02

Linux的文件权限与目录配置

1.用户与用户组

  • 每个文件都有相当多的属性与权限,最重要的概念可能就是文件的拥有者了
  • 文件拥有者(User)
  • 用户组(Group):当你在团队进行协同工作的时候,用户组非常有用,每个账号都可以有多个用户组的支持
  • 其他人(Others):在Linux里面,任何一个文件都具有用户、所属群组以及其他人(Others)三种身份的个别权限,注意root无所不能

2.Linux文件权限概念

2.1Linux文件属性

  1. 使用su - 切换为root身份
  2. 运行ls -al命令,运行结果如下,如果不熟悉ls命令,运行ls帮助命令
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    drwxr-xr-x.  2 root root     6 7月  10 13:22 公共
    drwxr-xr-x. 2 root root 6 7月 10 13:22 模板
    drwxr-xr-x. 2 root root 6 7月 10 13:22 视频
    drwxr-xr-x. 2 root root 6 7月 10 13:22 图片
    drwxr-xr-x. 2 root root 6 7月 10 13:22 文档
    drwxr-xr-x. 2 root root 6 7月 10 13:22 下载
    drwxr-xr-x. 2 root root 6 7月 10 13:22 音乐
    drwxr-xr-x. 2 root root 6 7月 10 13:22 桌面
    [1] [2] [3] [4] [5] [6] [7]
    权限 链接 拥有者用户组 文件容量 修改日期 文件名
  3. 文件属性说明:
    1. 第[1]栏代表这个文件的类型与权限
      • 这一栏总共有十个字符
      • 第一个字符代表这个文件是目录、文件还是链接文件
      • [d]表示目录,[-]表示文件,[l]表示链接文件(link file),[b]表示设备文件里面的可供存储的周边设备,[c]表示设备文件里面的串行端口设备,例如键盘
      • 接下来的字符中,三个为一组,均为[rwx]三个参数的组合,其中[r]代表可读(read),[w]代表可写(write),[x]代表可执行(execute),如果没有权限,就会出现[-]号
      • 第一组为文件拥有者(User)具备的权限,第二组为加入此用户组(Group)的账号的权限,第三组为非本人且没有加入本用户组的其他账号(Others)权限
    2. 第[2]栏表示有多少文件名链接到此节点(inode):每个文件都会将它的权限与属性记录到文件系统的inode中
    3. 第[3]栏表示这个文件(或者目录)的拥有者账号
    4. 第[4]栏表示这个文件所属用户组
    5. 第[5]栏表示这个文件的容量大小,默认单位是Bytes
    6. 第[6]栏表示这个文件的创建日期或者是最近的修改日期
    7. 第[7]栏表示文件名
    8. root基本上不受系统权限所限制,无论文件权限是什么,默认root都可以读写

2.2修改文件属性与权限

  • chgrp(change group):修改所属用户组,被修改的组名必须要在/etc/group文件中存在才行,否则会显示错误,详细用法参考man page
  • chown:修改文件拥有者,用户必须是已经存在系统中的账号,也就是在/etc/passwd这个文件中有记录的用户名称才能修改,如果要连目录下的所有子目录或文件同时更改文件拥有者的话,直接加上-R的选项即可。此外,这个命令还可以顺便直接修改用户组的名称,详细用法参考man page
  • 注意:使用cp 源文件 目标文件这个命令将文件复制给你之外的其他人时,由于复制操作cp会复制执行者的属性与权限,所以必须要将这个文件的拥有者与用户组修改一下
  • chmod:修改权限,两种方法,分别是使用数字或者符号来进行权限的修改:
    1. 数字类型修改文件权限:文件的权限字符为【-rwxrwxrwx】,三个三个一组,各权限数字对照表为r:4, w:2, x:1,其实这就相当于二进制,例如用户权限为rwx,那么4+2+1=7,即为二进制111,而如果时r-x,4+1=5,即为二进制101。修改权限命令的语法是:
      1
      2
      3
      4
      chmod [-R] xyz 文件或者目录
      选线与参数:
      xyz:就是上面提到的数字类型的权限属性,为rwx属性数值的相加
      -R:进行递归(recursive)修改,即子目录下的所有文件都会修改
    2. 符号类型修改文件权限:文件的九个权限分别是(1)user,(2)group,(3)others三种身份,可以借用u、g、o来代表三种身份的权限,此外a代表all即全部身份,可以用下表的方法来修改权限
chmod u(user)
g(group)
o(others)
a(all)
+(加入)
-(移除)
=(设置)
r
w
x
文件或目录

2.3目录与文件的权限意义

  1. 权限对文件的重要性
    • r(read):可读取此文件的实际内容
    • w(write):可以编辑、新增或是修改该文件的内容(但是不含删除该文件)
    • x(execute):该文件具有可以被系统执行的权限,在Linux下面,我们的文件能否被执行,是借助是否具有【x】这个权限来决定,跟文件名是没有绝对的关系的
  2. 权限对目录的重要性
    • r(read contents in directory):表示具有读取目录结构列表的权限,所以当你具有读取(r)一个目录的权限时,你可以查询该目录下的文件名数据,所以可以用ls这个命令将该目录的内容列表显示出来
    • w(modify contents of directory):表示具有改动该目录结构列表的权限
      • 建立新的文件与目录
      • 删除已经存在的文件与目录(不论该文件的权限是什么)
      • 将已存在的文件或者目录进行更名
      • 移动该目录内的文件、目录位置
    • x(access directory):目录的x代表的是用户能否进入该目录成为工作目录的用途,如果你在某目录下不具有x的权限,那么你就无法切换到该目录下,也就无法执行该目录下的任何命令,即使你具有该目录的 r 或 w 权限
    • :假设有两个文件名:/dir1/file1/dir2,分别需要的最小的权限才能完成各项任务如下所示:
操作 /dir1 /dir1/file1 /dir2 重点
读取file1内容 x r - 要能够进入/dir1才能读取到里面的文件数据
修改file1内容 x rw - 能够进入/dir1且修改file1才行
执行file1内容 x rx - 能够进入/dir1且file1能运行才行
删除file1文件 wx - - 能够进入/dir1具有目录修改的权限即可
将file1复制到/dir2 x r wx 要能够读file1且能够修改/dir2内的数据

2.4Linux文件种类与拓展名

  1. 文件种类
    1. 常规文件(regular file)
      • 纯文本文件
      • 二进制文件
      • 数据文件:有些程序在运行过程当中会读取某些特定格式的文件,那些特定格式的文件可以被成为数据文件
    2. 目录(directory)
    3. 链接文件(link):类似Windows系统下面的快捷方式
    4. 设备与设备文件(device):与系统周边及存储等相关的一些文件,通常都在/dev这个目录之下,通常分为两种:
      • 区块(block)设备文件:就是一些存储数据,以提供系统随机存取的接口设备,例如硬盘和软盘,这些文件第一个属性为[b]
      • 字符(character)设备文件:一些串行端口的接口设备,例如键盘、鼠标等,这些设备一次性读取,不能够截断输出,第一个属性是[c]
    5. 数据接口文件:这种类型的文件通常被用在网络上的数据交换,第一个属性为[s]
    6. 数据输送文件(FIFO,pipe):主要的目的是解决多个程序同时读写一个文件所造成的错误问题
  2. Linux文件扩展名:一个Linux文件能否被执行,与它第一栏的十个属性有关,与文件名一点关系也没有,只要你的权限当中有【x】,就代表这个文件具有被执行的能力,不过可以被执行与可以执行成功是不一样的。我们仍然希望可以借助扩展名来了解该文件,所以通常我们还是会以适当的扩展名来表示该文件是什么种类,下面有数种常用的扩展名:
    • *.sh:脚本或批处理文件(scripts),因为批处理文件使用shell写成,所以扩展名就编程.sh
    • Z、 .tar、 .tar.gz、 .zip、 *.tgz:经过打包的压缩文件,这是因为压缩软件分别为gunzip、tar等,由于不同的压缩软件,而取其相关的扩展名
    • .html、 .php:网页相关文件,分别代表HTML语法与PHP语法的网页文件
  3. Linux文件名长度限制:单一文件或者目录的最大容许文件名为255字节,以一个ASCII英文占用一个字节来说,则大约可达255个字符长度。若是以每个汉字占用2字节来说,最大文件名大约在128个汉字之间
  4. Linux文件名的限制:由于Linux在命令行模式下的一些命令操作关系,一般来说,在设置Linux下面的文件名时,最好可以避免一些特殊字符比较好,例如* ? > < ; & ! [ ] | \ ' " ( ) { },因为这些符号在命令行模式下,是有特殊意义的。

3Linux目录配置

3.1Linux目录配置的依据——FHS(Filesystem Hierarchy Standard)

FHS的目的是希望让用户可以了解到已安装软件通常放置于哪个目录下,希望独立的软件开发商、操作系统制作者以及想要维护系统的用户,都能够遵循FHS的标准。FHS依据文件系统使用的频繁与否与是否允许用户随意修改,将目录定义成为四种交互作用的形态:
| | 可分享(shareable) |不可分享(unshareable)|
|–|–|–|
| 不变(static)|/usr(软件存放处) |/etc(配置文件)|
||/opt(第三方辅助软件)|/boot(启动与内核文件)|
|可变动(variable)|/var/mail(用户邮箱)|/var/run(程序相关)|
||var/spool/news(新闻组)|/var/lock(程序相关)|

  • 可分享:可以分享给其他系统挂载使用的目录,所以包括执行文件与用户的邮件等数据,是能够分享给网络上其他主机挂在用的目录
  • 不可分享:自己机器上面运行的设备文件或是与程序有关的socket文件等,由于仅与自身机器有关,所以当然就不适合分享给其他主机
  • 不变:有些数据是不会经常变动的,跟随着发行版而不变动。例如函数库、文件说明、系统管理员所管理的主机服务配置文件等
  • 可变动:经常修改的数据。例如日志文件、一般用户可自行接受的新闻组等

事实上,FHS针对目录树架构仅定义出三层目录下面应该放置什么数据而已

  • /(root,根目录):与启动系统有关,根目录(/)所在分区应该越小越好,且应用程序所安装的软件最好不要与根目录放在同一分区内,保持根目录越小越好。如此不但能性能较佳,根目录所在的文件系统也较不容易发生问题
  • /usr(unix software resour):与软件安装/执行有关,UNIX操作系统软件资源所放置的目录,而不是用户的数据。FHS建议所有软件开发者,应该将他们的数据合理地分别放到这个目录的子目录下,而不要自行建立该软件自己独立的目录
  • /var(variable):与系统运行过程有关,这是在系统运行后才会渐渐占用硬盘容量的目录。因为/var目录主要针对经常性变动的文件,包括缓存(cache)、日志文件(log file)以及某些软件运行所产生的文件。

3.2目录树(directory tree)

Linux目录配置方式为目录树,主要特点如下:

  • 目录树的起始点为根目录(/,root)
  • 每一个目录不止能使用本地分区的文件系统,也可以使用网络上的文件系统。举例来说,可以利用Network File System(NFS)服务器挂载某特定目录等
  • 每一个文件在此目录树中文件名(包含完整路径)都是独一无二的

根据FHS的定义,最好能够将/var独立出来,这样对于系统的数据有一些安全性的保护,至少在/var死掉时,根目录还在,还能够进入恢复模式。

3.3绝对路径与相对路径

  • 绝对路径:由根目录(/)开始写起的文件名或者目录名称
  • 相对路径:相对于目前路径的文件名写法
  • . :代表当前的目录,也可以使用 ./ 来表示
  • .. 代表上一层目录,也可以使用../ 来表示