【跟小嘉学 Linux 系统架构与开发】四、文件和目录的权限

本文是一系列教程,介绍了Linux系统的基础知识,如环境准备、Linux发行版、文件权限概念、文件类型、权限操作方法、文件扩展名规则、文件限制、目录配置和LSB标准等,帮助读者全面掌握Linux系统开发环境的管理和操作。
摘要由CSDN通过智能技术生成

系列文章目录

【跟小嘉学 Linux 系统架构与开发】一、学习环境的准备与Linux系统介绍
【跟小嘉学 Linux 系统架构与开发】二、Linux发型版介绍与基础常用命令介绍
【跟小嘉学 Linux 系统架构与开发】三、如何查看帮助文档
【跟小嘉学 Linux 系统架构与开发】四、文件和目录的权限

文章目录

前言

Linux的文件或者目录的使用者分为三类:owner、group、others、且三种使用者各有read、write、execute等权限。

参考资料


一、使用者(owner)、用户组(group)、其他(others)

  • 所谓的使用者就是文件的拥有者
  • 所谓的用户组,就是用户所在的组;
  • 所谓的其他,除了所有者以及用户组所在的用户的用户都是其他用户

所有和用户相关的信息都存放 /etc/passwd/etc/shadow/etc/group 文件之中。
详细的用户和用户组,我们会在用户管理章节详细介绍。

二、文件权限的概念

我们讲解文件的权限就是以后大家能够在遇到 Permission deny 的时候,能够知道事权限设置不正确导致的问题。

2.1、文件属性

raojiamin@192 ruoyi_radius % vagrant ssh
[vagrant@10 ~]$ su -
Password: 
[root@10 ~]# 
[root@10 ~]# ls -al
total 36
dr-xr-x---.  2 root root  137 Dec  4  2020 .
dr-xr-xr-x. 18 root root  255 Apr  2 17:12 ..
-rw-------.  1 root root 5207 Dec  4  2020 anaconda-ks.cfg
-rw-r--r--.  1 root root   18 May 11  2019 .bash_logout
-rw-r--r--.  1 root root  176 May 11  2019 .bash_profile
-rw-r--r--.  1 root root  176 May 11  2019 .bashrc
-rw-r--r--.  1 root root  100 May 11  2019 .cshrc
-rw-------.  1 root root 5006 Dec  4  2020 original-ks.cfg
-rw-r--r--.  1 root root  129 May 11  2019 .tcshrc

我们可以看到 ls -al 这个命令以列表形式写出当前目录下的所有文件(包括隐藏文件)的信息。

  • 第一行:total 36 是公共文件大小之和,默认单位是k
  • 第一列:-rw-r--r--. 代表了文件的类型与权限属性(permission),第一个字符表示的文件的类型
    • d:表示目录;
    • -:表示普通文件;
    • l :表示连接文件;
    • b:表示可存储的设备
    • c:表示字符设备,例如键盘、鼠标等;
      接下来三个字符一组,都是rwx等组合,其中 r 代表可读(read)、w 代表可写 wite、x 代表可执行 execute,- 代表没有权限;
    • 第一组代表文件所有者拥有的权限;
    • 第二组代表那个文件的所属群组;
    • 第三组代表其他用户的权限;
  • 第二列:链接数(links),表示有多少文件连接到此节点(i-node),关于i-node,我们在讲解内核原理和文件系统的时候会具体在详细讲解
  • 第三列:表示文件或目录的所有者用户;
  • 第四列:表示文件或目录的所属用户组;
  • 第五列:表示文件的容量大小
  • 第六列:表示文件的创建时间或更新时间,格式为月、日、时间,如果时间较久了,那么就会仅仅显示年份而已,如果想要显示完整的时间,可以使用 ls -l --fulltime命令
  • 第七列:表示是文件的名称,文件如果以.开头则是Linux系统的隐藏文件;

2.2、如何修改文件的属性和权限

2.2.1、修改文件所属用户组(chgrp)

使用 chgrp(change group ownership的缩写) 命令可以用来修改文件的所有组

chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...
  • 用法1:修改用户组
  • 用法2:参考 RFILE 来修改用户组

2.2.2、修改文件的所有者(chown)

其用法和chgrp 差不多

chown:可以修改文件的所有者

2.2.3、修改文件的权限(chmod)

使用 chmod 可以 修改用户的权限,我们可以用 o(other)、g(group)、u(user)来表示用户信息,用read(r、4)、write(w、2)、execute(x、1)来表示权限。

2.2.3.1、使用数字来修改权限
chmod 644 .bashrc
2.2.3.2、使用符号来修改文件权限
chmod  u=rwx,go=rx  .bashrc
chmod  a+w  .bashrc
chmod  a-x  .bashrc
  • = 表示设置
  • - 表示减去
  • + 表示加上

2.2.4、权限的意义

2.2.4.1、权限对文件的意义
  • r(read):表示可以读取文件的内容信息;
  • w(write):表示可以编辑、新增文件或修改文件的内容,但不包括删除文件;
  • x(execute):表示文件可以被系统执行;
2.2.4.2、权限对目录的意义
  • r(read contents in directory):表示拥有可以读取目录的结构权限,例如 ls 命令;
  • w(modify contents in directory):表示有如下权限
    • 创建新的文件或目录的权限
    • 删除已经存在的文件或目录;
    • 将已存在的文件和目录进行重命名;
    • 移动目录内的文件、目录位置;
  • x(access directory):表示使用者是否拥有进入该目录的作为工作目录(work directory)的权限,例如 cd(change directory) 命令

三、文件类型

3.1、正规文件(regular file)

3.1.1、纯文本文档(ASCII)

3.1.2、二进制文件(binary)

例如我们 c、cpp 或 rust 编译出来的可执行程序,默认都是 a.out文件。

3.1.3、数据格式文件(data)

3.2、目录(directory)

3.3、 连接文件(link)

相当于超链接

3.4、设备与装置文件(device)

- 区块设备文件(block):例如硬盘、软盘等
- 字符设备文件(character):例如鼠标、键盘、 

3.5、 数据接口文件(sockets)

3.6、数据传输文件(FIFO,pipe)

四、文件的扩展名

Linux 文件是否能够被执行看是否有可执行的权限,不像 Windows 系统对文件有扩展名的区分,例如.exe.com.bat等等。

但是我们通常也会借助扩展名来了解文件是什么东西,例如

  • *.sh: shell 脚本文件;
  • *Z, *.tar, *.tar.gz, *.zip, *.tgzzip等: 经过打包的压缩文件。这是因为压缩软件分别为 gunzip, tar 等等的,由于不同的压缩软件,而取其相关的扩展名啰
  • *.php*.c*.cpp*.py*.css*.js*.rs*.html*.java等编程语言编写的文件等

五、Linux 文件的限制

5.1、Linux文件名限制

5.1.1、文件名长度限制

  • ext2、3
    如果你使用的是 ex2、3xt3文件系统
  • 那么文件或目录的最大容许文件名为255个字符
  • 包含完整路径名称及目录(/)之完整名为4096个字符;

5.1.2、Linux文件名的限制

最好不要使用下面这些字符,因为这些字符都是有特殊含义的,

* ? > < ; & ! [ ] | \ ' " ` ( ) { }

5.2、文件大小限制

5.2.1、FAT32 文件系统

单个文件大小限制为 4GB

5.2.2、ex3/ext4

在ext3 中,单个文件大小为16GB
在ext4 中,单个文件大小限制为16TB,如果启用啦 largefile4 可以提升到256 TB

5.2.3、xfs

理论上没有限制,实际上受到资源限制

5.2.4、exFAT

最大文件大小为16EB,但是linux支持可能受限

六、目录配置

我们可以发现不同的Linux发行版的目录的设置、软件的位置、目录的内容都大差不差呢,因为他们都遵守一套标准的依据。

6.1、Filesytem Hierarchy Standard(FHS)

由于利用 LInux 来开发产品和发行版的社区的公司和个人实在太多了,如果每个人都按照自己的想法来防止目录和文件,会造成很多困扰。

FHS一句文件系统的使用的频率、是否允许随意变动将目录分为了如下几种类型

可分享的(shareable)不可分享的
不可变的(static)/usr/etc
不可变的(static)/opt/boot
不可变的(variable)/var/mail/var/run
不可变的(variable)/var/spool/news/var/lock
  • 可分享的:可以分享给其他系统挂载使用的目录;
  • 不可分享的:不必刻意分享给其他主机;
  • 不变的:不会经常变动,例如函数库、文件说明、系统管理员所管理的主机服务配置等
  • 可变的:经常改变的资料,例如登录信息、新闻等‘

6.2、第一部分:FHS要求必须要存在的目录

  • /bin:系统有很多放置可执行文件的目录,/bin 放置的是担任维护模式下还能够被操作的命令,在 /bin 目录下的命令可以被 root 和普通用户所使用,例如:catchmodchowndatemvmkdircpbash等;
  • /boot:目录主要放置开机会使用的文件,包括 Linux 内核文件、开关机菜单等配置,Linux 内核常见的文件名为 vmlinuz,如果使用 grub2 这种开机管理程序,则还会存在/boot/grub2目录
  • /dev:在Linux系统上,任何设备都是以文件的形式存在的这个目录之中的,例如:/dev/null, /dev/zero, /dev/tty, /dev/loop*, /dev/sd*等等
  • /etc:系统的主要配置文件都在这个目录,例如用户账号和密码,服务的配置文件,一般情况下这个目录的文件属性都是使用者可以查看,但是只有root才有权力修改,FHS建议不要放置可执行程序在这个目录之中。
  • /lib:系统的函数库非常,/lib 放置的则是开机会用的函数库,以及/bin/sbin底下的命令会调用的函数库。另外 FHS 还要求底下的目录必须存在 /lib/modules
  • /media:这个目录下放置的是可以移除的设备,例如光盘、DVD等设备暂时挂载在这,例如 /media/floppy/media/cdrom等等;
  • /mnt:这个目录用途和 /media类似,这个目录用来暂时挂载使用
  • /opt:这个目录是第三方软件安装的目录,例如KDE等,不过以前的 Linux 喜欢放置在 /usr/local目录下
  • /sbin:Linux 很多命令是用来设置系统环境的,只有 root 命令才可以来设置,其他用户只能查询,放在/sbin 目录下都是为开机过程所需要的,包括开机、修复、还原系统所需要的命令。自行安装的软件所所产生的系统可执行程序会安装到 /usr/sbin 之中
  • /srv:srv 可以看作 service 的缩写,一些网络服务启动之后,这些服务所需要的资料等目录,例如某些http服务,不过现在apache服务等www目录一般在 /var/www/html
  • /tmp:这个目录一般使用者或正在执行的程序暂时存放的非地方,任何人都可以存取,这个额目录不可以放置资料。

6.3、第二部分:FHS 建议可以存在的目录

  • /home: 这是系统预设的用户主目录(home directory),一般情况下,新增账号的时候都会在这个目录下创建
    • ~: 代表当前用户的主目录
    • ~dmtsai:代表 dmtsai 的主目录
  • /lib<qual>:用来存放 /lib 不同格式的二进制函数库,例如 64位的函数库 /lib64
  • /root:系统管理员的主目录,因为担任模式下挂载跟目录时,就能够拥有root的主目录;

6.4、放置的内容

下面目录不是 FHS 所定义的标准,不过这些目录也是需要了解一下的。

  • /lost+found:这里放置的是 ext2/ext3/ext4 文件系统才会产生的目录,该目录目的是文件系统发生错误时,讲一些丢失的片段放置到该目录下,如果使用 xfs 文件系统就不会存在该目录了
  • /proc:这个目录是虚拟文件系统(virtual filesystem),这里的文件是系统核心、进程信息、设备状态、网络状态等等,不会占用任何硬盘空间,例如/proc/cpuinfo/proc/dma/proc/interrupts/proc/ioports/proc/net/*
    - /sys:该目录与 /proc非常类似,也是虚拟文件系统,最主要记录与系统硬件信息相关的内容,包括已经载入的内核模块、硬件配置等

在 Centos 7.x 已经将 /sbin/binlib 统统移动到了 /usr

6.5、/usr 目录存放的内容

/usr 目录是 Unix Software Resource 的缩写,是Unix软件资源的目录,就像 windows的 Program files 目录类似;

6.5.1、第一部分:FHS 要求必须要存在的目录

  • /usr/bin:普通用户所能够使用的指令都存在在,目前 Centos7 已经将素有使用者的命令都放置在这个目录下,而使用连接文件方式链接到 /bin 目录
  • /usr/lib:基本上与 /lib 目录功能相同,/lib就是链接到此目录的
  • /usr/lcoal:系统管理员在本机自行安装下载的软件,建议安装到这个目录,该目录也会有bin、etc、include、lib等目录
  • /usr/sbin:非系统正常运行所需要的系统的命令,最常见的就是服务器命令,不过基本上与 /sbin也差不多;
  • /usr/share:放置共享文件,例如 man、doc、zoneinfo等等

6.5.1、第二部分:FHS 建议可以存在的目录

  • /usr/games:游戏相关的目录
  • /usr/include: c/cpp 的头文件
  • /usr/libexec:某些不被普通使用者惯用的软件或脚本,大部分是X window 下的操作命令
  • /usr/lib<qual>:与 /lib<qual> 功能相似
  • /usr/src/:一般源代码都放在该目录,Linux 核心代码一般建议放置 /usr/src/linux 目录下

6.6、/var 目录存放的内容

/var 目录包括 缓存、登录日志、软件产生的日志,程序锁文件、运行文件等等都存在该目录

6.6.1、第一部分:FHS 要求必须要存在的目录

  • /var/cache: 应用程序运行过程中产生的缓存
  • /var/lib:程序本身运行过程中需要用到的文件,例如 mysql 的文件放置在 /var/lib/mysql
  • /var/lock: 一些文件或设备只能被一个程序所使用,就需要上锁,就会生成文件咋i这个目录之中;
  • /var/log: 这里放置的登录日志:/var/log/messages/var/log/wtmp
  • /var/mail: 这里放置个人邮件的目录,也被放置到 /var/spool/mail,这两个目录互为链接有时候
  • /var/run/ :某些程序会将他们的 PID 放置在该目录下,至于PID 位们会在后面章节详细讲解到,这个目录连接到 /run 目录
  • /var/spool:这个目录放置等待其他程序使用的资料,通常使用后就会被删除

不同发行版的差异

  • Centos 的网络配置文件 /etc/sysconfig/network-scripts/目录
  • SuSE 的网络配置文件 /etc/sysconfig/network 目录

目前 Centos 7 的情况

  • /bin --> /usr/bin
  • /sbin --> /usr/sbin
  • /lib --> /usr/lib
  • /lib64 --> /usr/lib64
  • /var/lock --> /run/lock
  • /var/run --> /run

6.7、目录树(directory tree)

目录树的特征

  • 目录树的开始为 根目录(/, root)
  • 每一个目录不止能使用本地分区的文件系统,也可以使用网络的文件系统,也就是说可以利用 Network File System(NFS)服务挂载目录
  • 每个文件在此目录树的文件名都是独一无二的;

6.8、绝对路径和相对路径

文件的路径分为了 绝对路径(absolute)和相对路径(relative)。

  • 绝对路径(absolute):使用 / 开始的文件名或目录名。例如 /root
  • 相对路径(relative):相对路径相对当前路径。例如 ./home 或者 ../../home

两个特殊的目录

  • .:代表当前目录,也可以使用 ./来表示
  • ..:代表上一级目录,也可以使用 ../来表示

七、Linux Standard Base(LSB)

7.1、LSB 简介

Linux Standard Base(LSB) 目前是 FSG(Free Standards Group) 的最为活跃的工作组,使命就是开发一系列的标准来增强 Linux 发行版的兼容性,使得各个软件都可以很好地在兼容LSB标准的系统上运行;

LSB 以 POSIX 和 SUS 标准为基础,并对其他领域中的源代码进行了扩充;

LSB 制定了应用程序与运行环境之间的二进制接口

  • Single UNIX Specification(SUS)
  • System V Interface Definition(SVID)
  • compilers for the Intel Itanium processor
  • C++ ABI
  • System V Application Binary Interface(ABI)

LSB目前支持7种体系结构:IA32、IA64、X86_64、PPC32、PPC64、S390、S390x

7.2、如何查看

我们可以使用 uname 命令 或者 lsb_release 命令来查看

7.2.1、uname

[root@10 ~]# uname -a. # 查看所有信息
Linux 10.0.2.15 4.18.0-240.1.1.el8_3.x86_64 #1 SMP Thu Nov 19 17:20:08 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
[root@10 ~]# uname -r # 查看内核版本
4.18.0-240.1.1.el8_3.x86_64
[root@10 ~]# uname -m # 查看当前系统的体系结构
x86_64。
[root@10 ~]# 

7.2.2、lsb_release

[root@10 ~]# yum install redhat-lsb -y
[root@10 ~]# lsb_release -a
LSB Version:	:core-4.1-amd64:core-4.1-noarch:cxx-4.1-amd64:cxx-4.1-noarch:desktop-4.1-amd64:desktop-4.1-noarch:languages-4.1-amd64:languages-4.1-noarch:printing-4.1-amd64:printing-4.1-noarch
Distributor ID:	CentOS
Description:	CentOS Linux release 8.5.2111
Release:	8.5.2111
Codename:	n/a

7.2.3、查看文件

[root@10 ~]# cat /etc/redhat-release 
CentOS Linux release 8.5.2111
  • 17
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小嘉丶学长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值