linux文件权限与目录配置

本文详细解释了Linux系统中的用户与用户组概念,文件权限的rwx控制,以及FHS标准对目录配置的指导,包括文件属性解读、权限修改工具如chmod和chown的使用,以及根目录、/usr和/var的重要性和内容划分。
摘要由CSDN通过智能技术生成

用户与用户组

linux一般将文件可读写的身份分为三个类别:拥有者(owner)、所属群组(group)、其他人(other)
三种身份都有读、写、执行等权限

  1. 文件拥有者
    linux是个多人多任务的系统,可能存在多个人同时使用一台主机的情况,这就需要对每个用户的隐私进行保护
    可以设置文件只有拥有者才可以查看,其他用户就查看不到这个文件的内容啦
  2. 用户组概念
    可以设置文件对一组用户可见,保证团队工作的效率与隐私性
    每个账号都可以有多个用户组支持
  3. 其他人
    其他人可以通过组内用户访问文件
  • linux用户身份与用户组记录的文件
    默认情况下,所有的系统上的账号与普通用户、root用户信息都记录在**/etc/passwd文件中,个人密码记录在/etc/shadow文件中,所有组名记录在/etc/group**中

打开/etc/passwd文件后可以看到里面有很多数据,但是很多用户都不是自己创建的,这就是系统自己创建的系统用户,也就是伪用户
在这里插入图片描述
这些系统用户不能用来登录系统,但是也不能删除。因为一旦删除,依赖这些用户运行的进程将不能正常执行,会导致系统问题

linux文件权限概念

linux文件属性

列出文件后可以查看其相关属性
在这里插入图片描述
上述图片从左到右为:
文件的类型权限,链接数,文件拥有者,文件所属用户组,文件大小,文件最后被修改的时间,文件名

  • 第一栏为文件的类型与权限,含10个字符
    • 第一个字符代表文件是目录、文件、链接文件等
      • d:目录
      • -:文件
      • l:链接文件
      • b:设备文件里面可供存储的周边设备(可按块随机读写的设备)
      • c:设备文件里面的串行端口设备,如键盘、鼠标(一次性读取设备)
    • 之后的字符,3个为一组,均为rwx三个参数的组合,分别为可读、可写、可执行
      • 第一组为文件拥有者具备的权限
      • 第二组为加入用户组成员的权限
      • 非本人非用户组成员的其他账号的权限
  • 第二栏表示有多少文件名链接到此节点
    每个文件都会将它的权限与属性记录到文件系统的inode中,但我们平时使用的文件数确是使用文件名来记录,故每个文件名都会链接到一个inode,这个属性记录的就是有多少不同的文件名链接到同一个inode号码
  • 第三栏表示文件(或目录)拥有者的账号
  • 第四栏表示这个文件的所属用户组
  • 第五栏表示文件的容量大小,默认单位为Bytes
  • 第六栏为文件的创建日期或是最近的修改日期

修改文件属性与权限

  • chgrp 修改文件所属用户组
    change group的缩写
    注意,要修改的组名必须在/etc/group文件中才行,否则会显示错误

    chgrp [-R] 修改为用户组 dirname/filename  
    
    • 选项与参数
      -R:进行递归修改,即子目录下的所有文件、目录进行同步修改

    对于文件修改:
    在这里插入图片描述
    可以看到用户组已经修改
    对于文件夹修改:
    在这里插入图片描述
    在这里插入图片描述
    其内部文件也进行了递归修改

  • chown 修改文件拥有者

    chown [-R] 新拥有者名称 目标文件(若是文件夹,需要有-R参数)
    chown [-R] 新拥有者名称:新用户组名称 目标文件(若是文件夹,需要有-R参数)
    

    chown也可以顺便修改用户组的名称
    在这里插入图片描述

  • chmod 修改文件权限,SUID、SGID、SBIT等的特性

    • 数字类型修改权限
      rwx视为二进制

      chmod [-R] 权限数字 文件或目录
      

      在这里插入图片描述

    • 符号类型修改权限
      权限分别对应三种身份:user(u),group(g), others(o)
      还有一种all(a)

      chmodu、g、o、a+(加入)、-(移除)、=(设置)r、w、x文件或目录

      可以对每一部分权限进行具体设置
      在这里插入图片描述

目录与文件的权限意义

  • 权限对文件的重要性

    • r:可以读取文件内容
    • w:可编辑、修改文件内容(但是不能删除文件)
    • x:文件具有可以被系统执行的权限

    对于rwx权限来说,主要都是针对文件的内容而言,与文件名的存在与否没有绝对关系

    在windows下,文件是否具有执行能力是由扩展名来判断的,如exe,bat等
    但是在linux下,文件是否能被执行是借由是否具有[x]这个权限来决定的,与文件名没有绝对关系

  • 权限对目录的重要性
    文件是存放实际数据的存在,目录主要的内容是记录文件名列表,文件名与目录有强烈的关联

    • r:可以读取目录下文件名数据
    • w:具有改动该目录结构列表的权限
    • x:用户是否能进入该目录称为工作目录
      要开放目录给任何人浏览时,应至少需要基于r及x权限,但w权限不能随便给

linux文件种类

任何设备在linux下都是文件

  • 常规文件
    一般我们在进行读写的类型的文件,在ls -al所显示出来的属性方面,第一个字符为[-]
    依照文件的内容,又可以分为:

    • 纯文本文件
    • 二进制文件
    • 数据文件:如linux在用户登录时会将登录的数据记录在/var/log/wtmp文件内,该文件是一个数据文件,可以通过last命令读取出来,但是使用cat时会出现乱码
  • 目录:第一个属性为[d]

  • 链接文件:属性为[l]

  • 设备与设备文件
    与系统周边及存储等相关的一些文件,通常都集中在/dev目录下,通常又分为两种

    • 区块设备文件:第一个属性为[b]。就是一些存储数据,以提供系统随机存取的接口设备 在这里插入图片描述

    • 字符设备文件:第一个属性为[c]。一些串行端口的接口设备,如键盘、鼠标等。这些设备的特点就是一次性读取,不能截断输出。
      在这里插入图片描述

  • 数据接口文件(sockets):第一个属性为[s],通常在/run或/tmp这些目录中看到这种文件类型。这类文件通常被用在网络上的数据交换。我们可以启动一个程序来监听客户端的要求,而客户端可以通过socket来进行数据的沟通

  • 数据输送文件(FIFO, pipe):FIFO也是一种特殊的文件类型,她主要的目的是解决多个程序同时读写一个文件所造成的错误问题,FIFO也是先进先出的缩写,即管道,第一个属性为[p]

linux文件扩展名

linux文件是否能执行与扩展名无关,只要有[x]权限即可,但是可以被执行与可执行成功是不一样的,故[x]只是代表这个文件具有可执行的能力,但是能不能执行成功,就要看该文件的内容了

但是,一般扔希望可以通过扩展名来了解该文件是什么东西,故还是以适当的扩展名来表示文件是什么种类

  • 一些常用扩展名
    • .sh:脚本或批处理文件
    • .Z、.tar、.tar.gz 、 .zip、 .tgz:经过打包的压缩文件
    • .html、.php:网页相关文件

linux目录配置

Linux目录配置的依据——FHS

为了让用户可以了解到已安装软件通常放置于哪个目录下,方便企业公司管理,便诞生了FHS标准

  • FHS依据文件系统使用的频繁与否与是否允许用户随意修改,将目录定义为四种交互作用的形态

    可分享不可分享
    不变/usr(软件存放处) 、/opt(第三方辅助软件)/etc(配置文件)、/boot(启动与内核文件)
    可变动/var/mail(用户邮箱)、/var/spool/news(新闻组)/var/run(程序相关)、/var/lock(程序相关)
    • 可分享:可以分享给其他系统挂载使用的目录,故包括执行文件与用户的邮件等数据,是能够分享给网络上其他主机挂载用的目录
    • 不可分享:自己机器上面运行的设备文件或是与程序有关的socket文件等,由于仅与自身机器有关,所以不适合分享给其他主机
    • 不变:有些数据是不会进程变动的,跟随着发行版而不变动
    • 可变动:经常修改的数据,如日志文件、一般用户可自行接收的新闻组等
  • 事实上,FHS针对目录树架构仅定义出三层目录下应该放置什么数据而已,下面是这三个目录的定义

    • /(root,根目录):与启动系统有关
    • /usr(unix software resource):与软件安装/执行有关
    • /var(variable):与系统运行过程有关
      每层目录下面应该要放置的目录也都有特定的规定

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

根目录是整个系统最重要的一个目录,因为不但所有的目录都由根目录衍生出来,同时根目录也与启动、还原、系统修复等操作有关。由于系统启动时需要特定的启动软件、内核文件、启动所需程序、函数库等文件数据,若系统出现错误时,跟系统也必须要包含能够修复文件系统的程序才行。

由于根目录这么重要,故FHS要求方面,它希望根目录不要放在非常大的分区内,因为越大的分区会放入越多的数据,如此依赖根目录所在分区就可能会有较多发生错误的机会。

因此FHS建议:根目录(/)所在分区应越小越好,且应用程序锁安装的软件最好不要与根目录放在同一个分区内,保持根目录越小越好。如此不但性能较佳,根目录所在的文件系统也较不容易发生问题。

故FHS定义出根目录应要有下面这些子目录存在才好,即使没有物理目录,FHS也希望至少有链接目录存在才好:

  1. FHS要求必须存在的目录
    • /bin:放置在单人维护模式下还能够被使用的命令。在/bin下面的命令可以被root与一般账号所使用,主要有:cat chmod chown date mv cp等常用命令
    • /boot:放置启动会用到的文件,包括Linux内核文件以及启动选项与启动所需配置文件等。Linux内核常用文件名为vmlinuz,若使用的是grub2这个启动引导程序,还会存在/boot/grub2这个目录
    • /dev:任何设备与接口设备都是以文件的形式存在于这个目录当中。通过读写这个目录下面的某个文件,就等于读写某个设备,比较重要的文件有/dev/null、/dev/zero、/dev/tty、/dev/loop*、/dev/sd*等
    • /etc:系统主要的配置文件几乎都放置在这个目录内,如人员的账号密码文件、各种服务的启动文件等。一般来说这个目录下的各文件属性是可以让一般用户查看的,但只有root用户有权利修改。FHS建议不要放可执行文件(binary)在这个目录中。比较重要的文件有/etc/modprobe.d/、/etc/passwd、/etc/fstab、/etc/issue等。另外,FHS还规范几个重要的目录最好要存在/etc/目录下
      • /etc/opt(必要):这个目录在放置第三方辅助软件/opt的相关配置文件
      • /etc/X11/(建议):与X window有关的各种配置文件都在这里,尤其是xorg.conf这个X Server的配置文件
      • /etc/sgml/(建议):与SGML格式有关的各项配置文件
      • /etc/xml/(建议):与xml格式有关的各项配置文件
    • /lib:启动时会用到的函数库以及在/bin或/sbin下面的命令会调用的函数库。FHS要求必须存在的目录:
      • /lib/modules/:主要放置可抽换式的内核相关模块(驱动程序)
    • /media:放置可删除的设备,包括软盘、光盘、DVD等设备都暂时挂载于此
    • /mnt:若想暂时挂载某些额外的设备,一般可以放到这个目录中。
    • /opt:第三方辅助软件放置的目录
    • /run:系统启动后所产生的各项信息
    • /sbin:系统启动过程中所需要的命令,里面包括了启动、修复、还原系统所需要的命令。置于某些服务器软件程序,一般则放置在/usr/sbin中;本机自行安装的软件所产生的系统执行文件,放置到/usr/local/sbin中。常见的命令包括:fdisk、fsck、ifconfig、mkfs等
    • /srv:可以视为service的缩写,是一些网络服务启动之后,这些服务所需要使用的数据目录,常见的服务如WWW、FTP等。如,WWW服务器需要的网页数据就可以放置在/srv/www/目录里面。不过,系统的服务数据若尚未要提供给因特网任何人浏览的话,默认还是建议放在/var/lib下面即可。
    • tmp:一般用户或是正在执行的程序暂时放置文件的地方。任何人都能存取的,故要定时清理,重要数据不可放置在此目录中。
    • /usr:二层FHS设置,后续介绍
    • /var:二层FHS设置,主要为放置变动性的数据,后续介绍
  2. 第二部分:FHS建议可以存在的目录
    • /home:系统默认的用户家目录。新增一个一般用户账号时,默认的用户家目录都会规范到这里来。
    • /lib<qual>:存放与/lib不同的格式的二进制数据库
    • /root:系统管理员的家目录,之所以放在这里是因为进入单人维护模式而仅挂载根目录时,该目录就能拥有root的家目录,故我们会希望root家目录与根目录放置在同一个分区中。

事实上FHS针对根目录所定义的标准仅有上面的东西,不过Linux下还有许多目录需要了解

  • 几个在Linux下也是非常重要的目录
    • /lost+found:使用标准的ext2、ext3、ext4文件系统格式才会产生的一个目录,目的在于当文件系统发生错误时,将一些意识的片段放置到这个目录下,但若使用的是xfs文件系统的话,就不会存在这个目录。平时是空的,系统非正常关机而留下“无家可归”的文件就在这里
    • /proc:这个目录本身是一个虚拟文件系统,它放置的数据都是在内存当中的,如系统内核、进程信息、外界设备的状态及网络状态等。因为这个目录下的数据都是在内存当中,所以本身不占任何硬盘空间。较重要的文件如:/proc/cpuinfo、/proc/dma、/proc/interrupts、/proc/ioports、/proc/net/*等
    • /sys:与/proc相似,也是一个虚拟的文件系统,主要也是记录内核与系统硬盘信息相关的内容。包括目前已加载的内核模块与内核检测到的硬件设备信息等,这个目录同样不占硬盘容量。

/usr的意义与内容

/usr不是/user的缩写,而是UNIX Software Resource的缩写,即UNIX操作系统软件资源所放置的目录(注意不是用户的数据!)FHS建议所有的软件开发者,将她们的数据合理的分别放置到这个目录下的子目录,而不要自行建立该软件自己独立的目录

因为是所有系统默认的软件都会放置到/usr下面,故这个目录有点像Win系统里“C:\windows(当中的一部分)+C:\Program Files\这两个目录的综合体”,系统刚安装完毕时,这个目录会占用最多的硬盘容量。

  • /usr:最庞大的目录,要用 到的应用程序和文件几乎都在这个目录。其中包含:
    • /usr/x11r6:存放x window的目录。
    • /usr/bin:众多的应用程序。
    • /usr/sbin:超级用户的一些管理程序。
    • /usr/doc:linux文档。
    • /usr/include:linux下开发和编译应用程序所需要的头文件。
    • /usr/lib:常用的动态链接库和软件包的配置文件。
    • /usr/man:帮助文档。
    • /usr/src:源代码,linux内核的源代码就放在/usr/src/linux 里。
    • /usr/local/bin:本地增加的命令。
    • /usr/local/lib:本地增加的库根文件系统。

/var的意义与内容

如果说/usr是在安装时会占用较大硬盘容量的目录,那么/var就是在系统运行后才会渐渐占用硬盘容量的目录。
因为/var目录主要针对经常性变动的文件,包括缓存、日志文件以及某些软件运行所产生的文件,包括程序文件或例如MySQL数据库的文件等。

  • /var/cache/:应用程序本身运行过程中会产生的一些缓存
  • /var/lib/:程序本身执行的过程中,需要使用到的数据文件放置的目录。在此目录下各自的软件应该要有各自的目录
  • /var/lock/:某些设备或是文件资源一次只能被一个应用程序所使用,若同时又两个程序使用该设备时,就会产生一些错误的情况,故要讲该设备上锁,以确保该设备只会给单一软件所使用。
  • /var/log/:重要到不行。是日志文件放置的目录,里面比较重要的文件有/var/log/messages、/var//log/wtmp(记录登录信息)等
  • /var/mail/:放置个人电子邮箱的目录
  • /var/run/:某些程序或是服务启动后,会将他们的PID放置到这个目录下,与/run相同,这个目录链接到/run
  • /var/spool/:放置一些队列数据(排队等待其他程序使用的数据),这些数据被使用后通常都会被删除。

当前,许多原本在根目录(/)里面的目录,将他内部数据全部移到/usr里面去,然后进行链接设置,包括:

  • /bin --> /usr/bin
  • /sbin --> /usr/sbin
  • /lib --> /usr/lib
  • /lib64 --> /usr/lib64
  • /var/lock --> /run/lock
  • /var/run --> /run
    在这里插入图片描述

目录树

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值