系列文章目录
【跟小嘉学 Linux 系统架构与开发】一、学习环境的准备与Linux系统介绍
【跟小嘉学 Linux 系统架构与开发】二、Linux发型版介绍与基础常用命令介绍
【跟小嘉学 Linux 系统架构与开发】三、如何查看帮助文档
【跟小嘉学 Linux 系统架构与开发】四、文件和目录的权限
文章目录
- 系列文章目录
- @[TOC](文章目录)
- 前言
- 一、使用者(owner)、用户组(group)、其他(others)
- 二、文件权限的概念
- 2.1、文件属性
- 2.2、如何修改文件的属性和权限
- 2.2.1、修改文件所属用户组(chgrp)
- 2.2.2、修改文件的所有者(chown)
- 2.2.3、修改文件的权限(chmod)
- 2.2.3.1、使用数字来修改权限
- 2.2.3.2、使用符号来修改文件权限
- 2.2.4、权限的意义
- 2.2.4.1、权限对文件的意义
- 2.2.4.2、权限对目录的意义
- 三、文件类型
- 3.1、正规文件(regular file)
- 3.1.1、纯文本文档(ASCII)
- 3.1.2、二进制文件(binary)
- 3.1.3、数据格式文件(data)
- 3.2、目录(directory)
- 3.3、 连接文件(link)
- 3.4、设备与装置文件(device)
- 3.5、 数据接口文件(sockets)
- 3.6、数据传输文件(FIFO,pipe)
- 四、文件的扩展名
- 五、Linux 文件的限制
- 5.1、Linux文件名限制
- 5.1.1、文件名长度限制
- 5.1.2、Linux文件名的限制
- 5.2、文件大小限制
- 5.2.1、FAT32 文件系统
- 5.2.2、ex3/ext4
- 5.2.3、xfs
- 5.2.4、exFAT
- 六、目录配置
- 6.1、Filesytem Hierarchy Standard(FHS)
- 6.2、第一部分:FHS要求必须要存在的目录
- 6.3、第二部分:FHS 建议可以存在的目录
- 6.4、放置的内容
- 6.5、`/usr` 目录存放的内容
- 6.5.1、第一部分:FHS 要求必须要存在的目录
- 6.5.1、第二部分:FHS 建议可以存在的目录
- 6.6、`/var` 目录存放的内容
- 6.6.1、第一部分:FHS 要求必须要存在的目录
- 6.7、目录树(directory tree)
- 6.8、绝对路径和相对路径
- 七、Linux Standard Base(LSB)
- 7.1、LSB 简介
- 7.2、如何查看
- 7.2.1、uname
- 7.2.2、lsb_release
- 7.2.3、查看文件
文章目录
- 系列文章目录
- @[TOC](文章目录)
- 前言
- 一、使用者(owner)、用户组(group)、其他(others)
- 二、文件权限的概念
- 2.1、文件属性
- 2.2、如何修改文件的属性和权限
- 2.2.1、修改文件所属用户组(chgrp)
- 2.2.2、修改文件的所有者(chown)
- 2.2.3、修改文件的权限(chmod)
- 2.2.3.1、使用数字来修改权限
- 2.2.3.2、使用符号来修改文件权限
- 2.2.4、权限的意义
- 2.2.4.1、权限对文件的意义
- 2.2.4.2、权限对目录的意义
- 三、文件类型
- 3.1、正规文件(regular file)
- 3.1.1、纯文本文档(ASCII)
- 3.1.2、二进制文件(binary)
- 3.1.3、数据格式文件(data)
- 3.2、目录(directory)
- 3.3、 连接文件(link)
- 3.4、设备与装置文件(device)
- 3.5、 数据接口文件(sockets)
- 3.6、数据传输文件(FIFO,pipe)
- 四、文件的扩展名
- 五、Linux 文件的限制
- 5.1、Linux文件名限制
- 5.1.1、文件名长度限制
- 5.1.2、Linux文件名的限制
- 5.2、文件大小限制
- 5.2.1、FAT32 文件系统
- 5.2.2、ex3/ext4
- 5.2.3、xfs
- 5.2.4、exFAT
- 六、目录配置
- 6.1、Filesytem Hierarchy Standard(FHS)
- 6.2、第一部分:FHS要求必须要存在的目录
- 6.3、第二部分:FHS 建议可以存在的目录
- 6.4、放置的内容
- 6.5、`/usr` 目录存放的内容
- 6.5.1、第一部分:FHS 要求必须要存在的目录
- 6.5.1、第二部分:FHS 建议可以存在的目录
- 6.6、`/var` 目录存放的内容
- 6.6.1、第一部分:FHS 要求必须要存在的目录
- 6.7、目录树(directory tree)
- 6.8、绝对路径和相对路径
- 七、Linux Standard Base(LSB)
- 7.1、LSB 简介
- 7.2、如何查看
- 7.2.1、uname
- 7.2.2、lsb_release
- 7.2.3、查看文件
前言
Linux的文件或者目录的使用者分为三类:owner、group、others、且三种使用者各有read、write、execute等权限。
参考资料
- 《鸟哥的Linux私房菜繁体版》
- 《鸟哥的Linux私房菜简体版》
- Filesystem Hierarchy Standar
一、使用者(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
,*.tgz
、zip
等: 经过打包的压缩文件。这是因为压缩软件分别为 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
和普通用户所使用,例如:cat
、chmod
、chown
、date
、mv
、mkdir
、cp
、bash
等;/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
、/bin
、lib
统统移动到了 /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