4 文件基本属性

4.1 Linux 文件属性

  • Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限
  • 为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定
  • 在Linux中我们可以使用ll或者ls –l命令来显示一个文件的属性以及文件所属的用户和组,如

    • 实例中,bin文件的第一个属性用”d”表示,在Linux中代表该文件是一个目录文件

      [root@www /]# ls -l
      total 64
      dr-xr-xr-x   2 root root 4096 Dec 14  2012 bin
      dr-xr-xr-x   4 root root 4096 Apr 19  2012 boot
      
  • 在Linux中第一个字符代表这个文件是目录、文件或链接文件等等

    • d 目录
    • - 文件
    • l 链接文档(link file)
    • b 可供储存的接口设备(可随机存取装置)
    • c 串行端口设备,如键盘、鼠标(一次性读取装置)
  • 接下来的字符中,以三个为一组,且均为rwx的三个参数的组合

    • r代表可读(read)
    • w代表可写(write)
    • x代表可执行(execute)
    • 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号-
  • 每个文件的属性由左边第一部分的10个字符来确定,从左至右用0-9这些数字来表示

    • 0位:确定文件类型
    • 1-3位:确定属主(该文件的所有者 owner)拥有该文件的权限
    • 4-6位:确定属组(所有者的同组用户 group)拥有该文件的权限
    • 7-9位:确定其他用户(others)拥有该文件的权限
    • 1、4、7位:表示读权限,”r”字符表示有读权限;”-“字符表示没有读权限
    • 2、5、8位:表示写权限,”w”字符表示有写权限;”-“字符表示没有写权限
    • 3、6、9位:表示可执行权限,”x”字符表示有执行权限;”-“字符表示没有执行权限

文件属性

4.1.1 Linux 一切皆文件

  • Linux 中所有内容都是以文件的形式保存和管理的,即一切皆文件。包括普通文件、目录(Windows 下称为文件夹)、硬件设备(键盘、监视器、硬盘、打印机)、套接字(socket)、网络通信等资源
  • 好处
    • 开发者仅需要使用一套 API 和开发工具即可调取 Linux 系统中绝大部分的资源
    • 比如,Linux 中几乎所有读(文件、系统状态、socket、pipe)的操作都可以用 read 函数;几乎所有更改(改文件、改系统参数、写 socket、写 pipe)的操作都可以用 write 函数
  • 坏处
    • 使用任何硬件设备都必须与根目录下某一目录执行挂载操作,否则无法使用
    • 如果想通过 Linux 上的根目录找到设备文件的目录结构,就必须将这两个文件系统目录合二为一,这就是挂载的真正含义
    • 如果不挂载,通过Linux系统中的图形界面系统可以查看找到硬件设备,但命令行方式无法找到

4.1.1.1 挂载

  • 挂载:指将设备文件中的顶级目录连接到 Linux 根目录下的某一目录(最好是空目录),访问此目录就等同于访问设备文件
  • 误区:并不是根目录下任何一个目录都可以作为挂载点,由于挂载操作会使得原有目录中文件被隐藏,因此根目录以及系统原有目录都不要作为挂载点,会造成系统异常甚至崩溃,挂载点最好是新建的空目录
  • 根目录下的 /dev/ 目录文件负责所有的硬件设备文件,事实上,当 U 盘插入 Linux 后,系统会给 U 盘分配一个目录文件(比如 sdb1),就位于 /dev/ 目录下(/dev/sdb1),但无法通过 /dev/sdb1/ 直接访问 U 盘数据,访问此目录只会提供此设备的一些基本信息(比如容量)

4.1.2 Linux/UNIX 文件类型

  • Linux系统中,文件具体可分为以下几种类型
文件类型 权限位表示 描述
普通文件 ’-’ 类似 mp4、pdf、html 这样,可直接拿来使用的文件。Linux 用户根据访问权限不同可对这些文件进行查看、删除和更改操作
目录文件 ’d’ 包含了此目录中各个文件的文件名以及指向这些文件的指针。打开目录等同于打开目录文件,只要有权限,可以随意访问目录中的任何文件
特殊文件-块文件(block) ‘b’ 通常隐藏在 /dev/ 目录下,当进行设备读取或外设交互时才会被使用。如磁盘光驱
特殊文件-字符设备文件(character) ‘c’ 通常隐藏在 /dev/ 目录下,当进行设备读取或外设交互时才会被使用。如串口设备
特殊文件-符号链接文件(symbolic link) ‘l’ 类似与 Windows 中的快捷方式,是指向另一文件的简介指针(软链接)
特殊文件-管道文件(pipe) ‘p’ 主要用于进程间通信。例如,使用 mkfifo 命令创建一个 FIFO 文件,与此同时,启用进程 A 从 FIFO 文件读数据,启用进程 B 从 FIFO 文件中写数据,随写随读
特殊文件-套接字文件(socket) ’s’ 一般隐藏在 /var/run/ 目录下,用于进程间的网络通信
  • 目录文件的访问权限,同普通文件的执行权限,是一个意思

4.2 Linux 文件属主和属组

  • 对于文件来说,它都有一个特定的所有者,也就是对该文件具有所有权的用户
  • 在Linux系统中,用户是按组分类的,一个用户属于一个或多个组
  • 文件所有者以外的用户又可以分为文件所有者的同组用户和其他用户
  • Linux系统按文件所有者、文件所有者同组用户和其他用户来规定了不同的文件访问权限

    [root@www /]# ls -l
    total 64
    drwxr-xr-x 2 root  root  4096 Feb 15 14:46 cron
    drwxr-xr-x 3 mysql mysql 4096 Apr 21  2014 mysql
    
  • 在以上实例中,mysql 文件是一个目录文件,属主和属组都为 mysql,属主有可读、可写、可执行的权限;与属主同组的其他用户有可读和可执行的权限;其他用户也有可读和可执行的权限

  • 对于 root 用户来说,一般情况下,文件的权限对其不起作用

4.2.1 更改文件属性

4.2.1.1 chgrp 更改文件属组

  • 语法:chgrp [-R] 属组名 文件名
  • 参数选项
    • -R:递归更改文件属组,即在更改某个目录文件的属组时加上 -R,则该目录下所有文件的属组都会更改

4.2.1.2 chown 更改文件属主,也可以同时更改文件属组

  • 语法:chown [–R] 属主名 文件名chown [-R] 属主名:属组名 文件名
  • 进入/root目录(~)将install.log的拥有者改为bin这个账号

    [root@www ~] cd ~
    [root@www ~]# chown bin install.log
    [root@www ~]# ls -l
    -rw-r--r--  1 bin  users 68495 Jun 25 08:53 install.log
    
  • install.log的拥有者与群组改回root

    [root@www ~]# chown root:root install.log
    [root@www ~]# ls -l
    -rw-r--r--  1 root root 68495 Jun 25 08:53 install.log
    

4.2.1.3 chmod 更改文件9个属性

  • Linux文件属性有两种设置方法,一种是数字,一种是符号
4.2.1.3.1 chmod 用数字更改文件9个属性
  • Linux文件的基本权限有九个,分别是owner/group/others三种身份各有自己的read/write/execute权限。

    • 文件的权限字符为:-rwxrwxrwx, 这九个权限是三个三个一组的
    • 可以使用数字来代表各个权限,各权限的分数对照表如下
    • r:4
    • w:2
    • x: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
    • 变更权限的指令 chmod 的语法:chmod [-R] xyz 文件或目录
    • 选项与参数
      • xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加
      • -R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都会变更
    • 举例,如果要将.bashrc这个文件所有的权限都设定启用,那么命令如下

      [root@www ~]# ls -al .bashrc
      -rw-r--r--  1 root root 395 Jul  4 11:45 .bashrc
      [root@www ~]# chmod 777 .bashrc
      [root@www ~]# ls -al .bashrc
      -rwxrwxrwx  1 root root 395 Jul  4 11:45 .bashrc
      
      • 如果要将权限变成-rwxr-xr--,那么权限的分数就成为[4+2+1][4+0+1][4+0+0]=754
4.2.1.3.1 chmod 用符号更改文件9个属性
  • 九个权限分别是
    • (1)user
    • (2)group
    • (3)others
  • 使用 u, g, o 来代表三种身份的权限
  • a 则代表 all,即全部的身份。读写的权限可以写成 r, w, x,也就是可以使用:chmod u|g|o|a +(加入)|-(除去)|=(设定) r|w|x 文件或目录
  • 如果需要将文件权限设置为-rwxr-xr--,可以使用chmod u=rwx,g=rx,o=r 文件名

    # 创建 test1 文件
    touch test1
    # 查看 test1 默认权限
    ls -al test1
    # -rw-r--r-- 1 root root 0 Nov 15 10:32 test1
    # 修改 test1 权限
    chmod u=rwx,g=rx,o=r test1
    ls -al test1
    # -rwxr-xr-- 1 root root 0 Nov 15 10:32 test1
    # 如果是要将权限去掉而不改变其他已存在的权限。如要拿掉全部人的可执行权限
    chmod  a-x test1
    ls -al test1
    #-rw-r--r-- 1 root root 0 Nov 15 10:32 test1
    

4.3 Linux 文件时间属性

  • Linux 系统中,每个文件主要拥有 3 个时间参数(通过 stat 命令进行查看),分别是文件的访问时间、数据修改时间以及状态修改时间
    • 访问时间(Access Time, atime):只要文件的内容被读取,访问时间就会更新。例如,使用 cat 命令可以查看文件的内容,此时文件的访问时间就会发生改变
    • 数据修改时间(Modify Time, mtime):当文件的内容数据发生改变,此文件的数据修改时间就会跟着相应改变
    • 状态修改时间(Change Time, ctime):当文件的状态发生变化,就会相应改变这个时间。比如,如果文件的权限或者属性发生改变,此时间就会相应改变

相关