Linux最优秀的地方之一就在于它的多人多任务环境。而为了让各个用户具有保密的文件数据,因此文件权限管理就变得很重要了

用户(User)、用户组(Group)及其他人(Others)

用户文件拥有者

文件拥有者设置修改该文件的相关权限,则其他人无法操作

用户组

用于团队协同工作,用户组A无法操作用户组B的文件,但同一用户可以加入多个用户组

其他人

其他人未取得相关权限时,无法查看文件

root

root的权限无限大,可以进行任何操作

默认保存地址

用户信息:/etc/passwd
密码:/etc/shadow
组名:/etc/group

Linux文件权限

切换到root

普通用户登录后执行su -回车输入密码切换到root,退出到普通用户执行exit

文件属性ls -al

ls:显示文件名
ls -al显示所有文件详细权限与属性(包含以.开头的隐藏文件)
image.png
image.png

drwxr-xr-x. 2 root root 4096 Nov 17 00:46 tmpfiles.d
为例分别对应文件类型权限、链接数、文件拥有者、文件所属用户组、文件大小、最后被修改时间、文件名

文件类型权限

  • 第一个字符代表这个文件是目录、文件或链接文件等
  • 为d则为目录
  • 为-则为文件
  • 为l则为链接文件
  • 为b则表示为设备文件里面的可供存储的周边设备(可按块随机读写的设备)
  • 为c则表示为设备文件里面的串行端口端口设备,例如键盘鼠标(一次性读取设备)
  • 接下来字符3个为一组,均为[rwx]的三个参数的组合,r为可读,w为可写,x为可执行。如果没有权限则为-
  • 第一组为文件拥有者可具备的权限
  • 第二组为加入此用户组账号的权限
  • 的三组为没有加入用户组其他人的权限
    当为目录时若没有x权限,则无法进入目录

链接数

表示有多少文件名链接到此节点(inode)
目录树使用文件名来记录,每个文件名就会链接到一个inode,这个属性的记录值就是有多少不同的文件名连接到相同的一个inode号码。

文件拥有者

文件拥有者账号

文件所属用户组

文件的所属用户组

文件大小

文件的容量大小默认为Bytes

最后被修改时间

可以为创建日期或最近你的修改日期。如果未见被修改时间距离太久,则只会显示年份,可使用 ls -l --full-time

文件名

文件名以.开头则为隐藏文件

文件

Linux文件权限重要性

系统保护的功能

系统服务的文件通常只有root才能读写或执行,文件权限可以设置为-------。root不受系统权限限制,无论文件权限是什么,默认root都可以读写。
image.png
上图表示权限不够,普通用户无法进入root目录

团队开发软件或数据共享的功能

使用权限将用户数据分割开

未将权限设置妥当的危害

目录权限未做好,则只有root才有的权限其他普通用户都可以执行,例如开关机,增删用户等

修改文件属性与权限

  • chgrp 修改文件所属用户组 change group
  • chown 修改文件拥有者 change owner
  • chmod 修改文件的权限,SUID、SGID、SBIT的特性 change

修改文件所属用户组

chgrp 用户组 文件名
用户组必须在/tec/group当中

修改文件拥有者

chown 用户名 文件名

修改文件权限

chmod 777 文件名
执行该文件对文件拥有者、用户组、其他人都可以执行读、写、执行文件。

  • 权限数字对照表
    r:4
    w:2
    x:1
    总结:当复制文件给其他人时,相关权限和属性并未更改。此时可通过
    chgrp、chown、chmod命令使得复制给其他人的用户也拥有权限使用及更改。

目录与文件权限意义

文件权限对于一般文件与目录文件的不同

文件权限

文件包含文本文件、数据库文件、二进制可执行文件
r:可读取此文件的实际内容,如读取文本文件的文字内容等
w:可以编辑、新增或是修改文件内容但不能删除该文件
x:该文件具有可以被系统执行的权限。

  • windows是否有可执行的能力是由扩展名来判断,但Linux文件是否能执行,是由x权限决定,与扩展名没有绝对的关系。w可以对文件内容进行修改,但不能对文件本身修改,例如修改文件名及删除文件。

目录权限

r:可以查询该目录下的文件名数据
w:具有改动该目录结构列表的权限

  • 建立新的文件与目录
  • 删除已经存在的文件与目录(不论该文件的权限是什么
  • 将已存在的文件或目录进行更名
  • 移动该目录内的文件、目录位置
    x:进入该目录称为工作目录(用户当前操作所在目录)的用途

Linux文件名种类与扩展名

Linux文件名

常规文件 -

常规文件第一个字符为-

  • 纯文本文件(ASCII):纯文本文件是因为该数据我们可以直接通过阅读读取,是Linux最多的一种文件类型
  • 二进制文件(binary):Linux当中的可执行文件(scripts,脚本文件不算),例如cat等命令
  • 数据文件(data):有些程序在运行的过程当中会读取某些特定格式的文件,那些特定格式文件可以被称为数据文件(data file)。直接用文本编辑器读取时会出现乱码,因为其属于一种特殊格式的文件

目录 d

目录第一个属性为d

链接文件 l

链接文件第一个属性为l,类似windows系统下面的快捷方式

设备与设备文件 /dev b c

与系统周边及储存等相关的一些文件,通常集中在/dev目录下,又可细分为

区块(block)设备文件:首字母为b,为一些存储数据,以提供系统随机存取的接口设备,例如硬盘与软盘

字符(character)设备文件:首字母为c,串行端口的设备接口,例如键盘鼠标等。这些设备一次性读取,不能够截断输出。例如鼠标不能跳到另一个画面,而是连续性滑动到另一个地方

image.png

数据接口文件 s /run /tmp

首字母为s,该类型文件通常被用在网络上的数据交换,常常在/tmp和/run目录下。启动一个程序来监听客户端的要求,而客户端可以通过socket来进行数据沟通
image.png

数据传输文件 p FIFO,pipe

首字母为p,FIFO(first-in-first-out)先进先出,即管道,目的是解决多个程序同时读写一个文件所造成的错误问题

Linux文件扩展名

Linux文件是没有所谓的扩展名,一个Linux文件能不能被执行,与它的权限属性是否为x有关,与文件名一点关系也没有
具有可执行的权限以及具有可执行的程序代码是2回事,x代表文件具有可执行的能力,但是否执行成功需依据该文件的内容
Linux系统上的文件扩展名只是让用户了解该文件是什么种类和可能用途而已

Linux常用的扩展名

  • .sh:脚本或批处理文件(scripts),因为批处理文件使用shell写成,所以扩展名就编成.sh
  • Z、.tar、.tar.gz、.zip、*.tgz:经过打包的压缩文件,这是因为压缩软件分别为gunzip、tar等,由于不同的压缩软件,而取其相关的扩展名
  • .html、.php:网页相关文件,分别代表HTML语法与PHP语法的网页文件。

Linux文件名长度限制

单一文件或目录的最大允许文件名为255字节,以一个ASCII英文占用一个字节,可达255个字符长度。汉字占用2字节,最大文件名大约在128个汉字

Linux文件名的限制

  • 避免使用一些特殊字符(避免在shell命令用到的特殊字符)
  • 以.开头为隐藏文件
  • shell经常用到-options之类的选项,避免将文件名的开头以-或+来命名

Linux目录配置

Linux的目录配置是有一套标准的依据的,以便于不同发行版本之间差距不大。

Linux目录配置的依据 FHS

FHS(Filesystem Hierarchy Standard)的目的是希望让用户可以了解到已安装软件通常放置于哪个目录下,FHS的重点在于规范每个特定的目录下应该要放置什么样子的数据

目录的四种类型

  • 可分享
    可以分享给其他系统挂载使用的目录,是能够分享给网络上其他主机挂载用的目录,例如执行文件与用户的邮件等数据
  • 不可分享
    本机上允许的设备文件或是与程序有关的socket文件等,不适合分享给其他主机
  • 不变
    数据不会经常变动,随着发行版而不变动,例如函数库,文件说明等
  • 可变动
    经常修改的数据,例如日志文件

FHS定义目录树架构

FHS针对目录树架构仅定义出三层目录下面应该放置什么数据,分别是下面这三个目录的定义

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

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

根目录是整个系统最重要的目录,所有的目录都是由根目录衍生出来,同时根目录也与启动、还原、系统修复等操作有关。
FHS标准建议:根目录(/)所在分区应该越小越好,且应用程序所安装的软件最好不要与根目录放在同一个分区内,保持根目录越小越好。如此不但性能较佳,根目录所在的文件系统也较不容易发生问题
image.png

FHS要求必须要存在的目录

  • /bin
    放置的是单人维护模式下还能够被使用的命令。在/bin下面的命令可以被root和一般账号所使用
  • /boot
    放置启动时会用到的文件,包括Linux内核文件以及启动选项与启动所需配置文件等
  • /dev
    任何设备与接口设备都是以文件的形式存在于这个目录当中。只要通过读写这个目录下面的某个文件,就等于读写某个设备
  • /etc
    系统主要的配置文件放置目录,一般用户可以查看,只有root可以修改
    /etc/opt:放置第三方辅助软件/opt的相关配置文件
    /etc/X11/:与X window有关的各种配置文件
    /etc/sgml/:与SGML格式有关的各项配置文件
    /etc/xml/:与XML格式有关的各项配置文件
  • /lib
    放置启动时会用到的函数库,以及在/bin或/sbin下面的命令会调用的函数库(某些命令必须要有函数库才能够执行)
    /lib/modules/:这个目录主要放置可以抽换式的内核相关模块(驱动程序)
  • /media
    放置可删除的设备,包括软盘、光盘、DVD等设备都挂载于此
  • /mnt
    暂时挂载某些额外的设备放置目录,只做暂时挂载
  • /opt
    第三方辅助软件放置的目录,但还是习惯将软件放置在/usr/local/目录下
  • /run
    新版FHS规定系统启动后所产生的各项信息放置到该目录下,而以前放置在/var/run。由于/run可以使用内存来模拟,因此性能上会好很多
  • /sbin
    启动过程中所需要的,里面包括了启动、修复、还原系统所需要的命令
  • /srv
    srv为service的缩写,是一些网络服务启动之后,这些服务所需要使用的数据目录,常见的服务例如WWW、FTP等
  • /tmp
    放置一般用户或是正在执行的程序暂时放置文件的地方。FHS建议在启动时,将/tmp下的数据都删除
  • /usr
    后续介绍
  • /var
    后续介绍,放置变动性数据,

FHS建议可以存在的目录

  • /home
    系统默认的用户家目录
  • /lib
    用来存放与lib不同的二进制函数库,例如支持64位的/lib64函数库等
  • /root
    root的家目录,放置在根目录下是方便进入单人维护模式而仅挂载根目录时,该目录就能够拥有root的家目录

其他非FHS的目录

  • /lost+found
    使用ext2、ext3、ext4文件系统格式才会产生的一个目录,目的在于当文件系统发生错误时,将一些遗失的片段放置到这个目录下。如果使用的是xfs文件系统就不会存在这个目录
  • /proc
    虚拟文件系统,放置的数据都是在内存当中,例如系统内核、进程信息、外接设备的状态及网络状态等,不占用硬盘容量
  • /sys
    也为虚拟文件系统,也是内核与系统硬件信息相关的内容,同样不占用内存

Linux在设计的时候,若发生问题,恢复模式通常仅挂载根目录,五个重要的目录被要求一定要与根目录放置在一起,为/etc、/bin、/dev、/lib、/sbin。后期/usr被设计为“即使挂载称为只读,系统还是可以正常运行”,恢复模式也可以挂载/usr

/usr的意义与内容

usr是(UNIX Software Resource)缩写是UNIX操作系统软件资源所放置的目录,而非user缩写
/usr里面放置的数据属于可分享与不可变动(shareable、static),可以分享给局域网内的其他主机来使用
FHS建议所有软件开发者,应该将他们的数据合理地分别放置到/usr目录下的子目录,而不要建立软件自己独立的目录。

FHS要求必须要存在的目录

  • /usr/bin/
    所有一般用户能够使用的命令都在这里,链接文件将/bin链接至/usr/bin中。在CentOS7中的/usr/bin与/bin是一模一样的
  • /usr/lib/
    与/lib相同,/lib就是链接到/usr/lib中的
  • /usr/local/
    系统管理员在本机安装自己下载的软件,建议安装到此目录,便于管理
    例如发行版提供的软件叫旧,想安装新的版本却不想删除旧版本,即可将软件安装在/usr/local/目录下
  • /usr/sbin/
    /sbin链接到/usr/sbin中
  • /usr/share/
    主要放置只读的数据文件,包括共享文件,基本都为文本文件。
    /usr/share/man:在线帮助文件
    /usr/share/doc:软件的说明文档
    /usr/share/zone:与时区有关的时区文件

FHS建议可以存在的目录

  • /usr/games/
    与游戏比较相关的数据放置处
  • /usr/include/
    c/c++等程序语言的头文件(header)与包含文件(include)放置处
  • /usr/libexec/
    某些不被一般用户常用的执行文件或脚本,例如X window下面的操作命令
  • /usr/lib/
    lib链接到/usr/lib/中
  • /usr/src/
    一般源代码放置目录,src有source的意思。
    内核源代码则放置到/usr/src/Linux/中

/var的意义与内容

/var主要针对经常性变动的文件,包括缓存(cache)、日志文件(log file)以及某些软件运行所产生的文件,包括程序文件(lock file、run file),例如MySQL数据库的文件。
/var是在系统运行后才会渐渐占用硬盘的容量

FHS要求必须要存在的目录

  • /var/cache/
    应用程序本身运行过程中会产生的一些缓存
  • /var/lib/
    程序本身执行的过程中,需要使用到的数据文件放置目录。例如MySQL的数据库放置到/var/lib/mysql/,而rpm的数据库存放到/var/lib/rpm/
  • /var/lock/
    已经转移到/run/lock/中,/var/lock/链接至/var/lock/。
    某些设备或是文件资源一次只能被一个应用程序所使用,如果同时又两个程序使用该设备时,就可能产生一些错误的情况,因此就要将该设备上错(lock),以确保该设备只会给单一软件所使用
  • /var/log/
    非常重要,这是日志文件存放目录,比较重要的文件有/var/log/messages、/var/log/wtmp(记录登记信息)等
  • /var/mail/
    链接至/var/spool/mail/目录中,放置个人电子邮箱
  • /var/run/
    链接到/run目录,某些程序或是服务启动后,会将PID放置在该目录下
  • /var/spool/
    放置一些队列数据,所谓的队列就是排队等待其他程序使用的数据,这些数据被使用后通常都会被删除
  • 可以阅读FHS官方英文文档

各家发行版针对FHS的异同

  • 由于FHS仅是定义出最上层(/)及次层(/usr与/var)的目录内容应该要放置的文件或目录数据,其他子目录层级内,就可以随开发者自行来配置

目录树

Linux所有的文件与目录都是由根目录开始的,是所有目录与文件的源头,然后再一个一个的分支下来,像树枝状
特性:

  • 目录树的起始点为根目录(/,root)
  • 每一个目录不止能使用本地分区的文件系统,也可以使用网络上的文件系统
  • 每一个文件在此目录树中的文件名(包含完整路径)都是独一无二的
    根据FHS的定义,最好将/var独立出来,这样对于系统的数据还有一些安全性的保护。当/var挂掉时,根目录还存在,还能够进入恢复模式

绝对路径与相对路径

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

CentOS的观察

除了FHS外,还有Linux Standard Base(LSB)的标准是可以依循的。


这个家伙很懒,啥也没有留下😋