大家好,欢迎来到IT知识分享网。
文章目录
Linux文件权限和目录配置
用户和用户组
文件拥有者(Owner)
文件拥有者是指创建文件的用户,拥有者可以对文件进行读取、写入和执行等操作。设置文件的拥有者可以保护个人隐私和文件安全,确保只有文件拥有者能够查看或修改文件内容。
用户组(Group)
用户组是将多个用户组织在一起的概念,通过用户组可以实现协同工作和权限管理。用户组可以设置不同的权限,允许组内成员相互访问和修改文件,同时限制其他用户对文件的访问权限。
其他人(Others)
其他人是除文件所有者和文件所属组之外的所有用户,这些用户被认为是文件的“其他人”,只能根据文件的“其他人”权限来访问文件或目录。
如上图所示:
以用户1来说,用户1创建的文件拥有者为用户1,它属于用户组1,而用户3相对于用户1来说,则他只是其他人。
如果你想让用户3进来查看共享的文件,只需要将用户3拉进用户组1即可。用户可以加入多个组
root(超级管理员)
在Linux系统中,root是一个特殊的用户,通常被称为“超级用户”或“管理员用户”,拥有系统上最高的权限。root用户具有对系统中所有文件和进程的完全控制权,可以执行任何操作,包括创建、删除和修改文件,安装软件,更改文件权限以及管理其他用户和用户组等
Linux文件权限
Linux文件属性
使用【ls -al】列出指定目录下的所有文件的详细信息
ls
是列出文件和目录内容的命令。-a
参数表示显示所有文件,包括以.
开头的隐藏文件。-l
参数表示使用长格式列表输出,这意味着会显示文件或目录的详细信息,包括权限、所有者、所属组、大小、创建日期等。
第一栏: 文件类型权限
【-rw- — —】代表这个文件类型权限
第一个字符【-】代表这个文件是目录、文件或链接文件等
当为【d】则是目录,例如【.config】那一行
当为【-】则是文件,例如我上图【anaconda-ks.cfg】这个文件
当为【l】则是链接文件,如下图
当为【b】则是设备文件里面的可供存储的设备
当为【c】则表示为设备文件里面的串行端口设备,例如鼠标、键盘(一次性读取设备)
接下来字符中,以三个为一组,且均为【rwx】的三个参数组合。
其中【r】代表可读 (read)、【w】代表可写(write)、【x】代表可执行(execute)
这三个权限的位置不会变,如果没有权限,就会出现【-】,有该权限就会显示对应权限的字符
以【anaconda-ks.cfg】文件为例,文件拥有者拥有读和写的权限,文件所属用户组没有权限,其他人没有权限。
第二栏:链接数
第二栏数字在文件或目录中表示链接数
- 当链接数为 1 时:表示只有一个链接指向此文件。这经常发生在普通的文件上,因为通常情况下一个文件只有一个入口链接。
- 当链接数大于等于2时:表示目录,如果一个目录的链接数为 2,表示除了当前目录(
.
)本身外,还有一个链接指向上一级目录(..
)
例如:【.cache】这个目录
【.】代表当前目录【..】代表父目录,【.cache】当前目录有7个链接文件,父目录也有7个
第三栏:文件的所有者
第四栏:文件的所属用户组
第五栏:文件的大小(默认是Bytes,1G=1024MB,1MB=1024KB,1KB=1024B)
第六栏:文件的最后修改时间(通常以月 /日 时间表示,如果这个文件修改时间距离太久,时间则换成年来表示)
如果想显示完整时间,可以利用ls的选项
[root@chenshiren ~]# ls -al --full-time / 总用量 28 dr-xr-xr-x. 18 root root 235 2024-02-24 15:56:21. +0800 . dr-xr-xr-x. 18 root root 235 2024-02-24 15:56:21. +0800 .. dr-xr-xr-x. 2 root root 6 2021-08-10 06:13:01.000000000 +0800 afs lrwxrwxrwx. 1 root root 7 2021-08-10 06:13:01.000000000 +0800 bin -> usr/bin dr-xr-xr-x. 5 root root 4096 2024-02-24 16:00:08. +0800 boot drwxr-xr-x. 18 root root 3300 2024-02-25 17:29:43. +0800 dev drwxr-xr-x. 133 root root 8192 2024-02-25 17:29:44. +0800 etc drwxr-xr-x. 3 root root 17 2024-02-24 16:00:40. +0800 home lrwxrwxrwx. 1 root root 7 2021-08-10 06:13:01.000000000 +0800 lib -> usr/lib lrwxrwxrwx. 1 root root 9 2021-08-10 06:13:01.000000000 +0800 lib64 -> usr/lib64 drwxr-xr-x. 2 root root 6 2021-08-10 06:13:01.000000000 +0800 media drwxr-xr-x. 3 root root 18 2024-02-24 15:58:10. +0800 mnt drwxr-xr-x. 2 root root 6 2021-08-10 06:13:01.000000000 +0800 opt dr-xr-xr-x. 340 root root 0 2024-02-25 17:29:40. +0800 proc dr-xr-x---. 7 root root 4096 2024-02-25 19:19:19. +0800 root drwxr-xr-x. 46 root root 1180 2024-02-25 18:20:10. +0800 run lrwxrwxrwx. 1 root root 8 2021-08-10 06:13:01.000000000 +0800 sbin -> usr/sbin drwxr-xr-x. 2 root root 6 2021-08-10 06:13:01.000000000 +0800 srv dr-xr-xr-x. 13 root root 0 2024-02-25 17:29:42. +0800 sys drwxrwxrwt. 19 root root 4096 2024-02-25 18:43:01. +0800 tmp drwxr-xr-x. 12 root root 144 2024-02-24 15:56:21. +0800 usr drwxr-xr-x. 20 root root 4096 2024-02-24 16:05:25. +0800 var
第七栏:文件的名称
第七栏就是文件的名称,比较特殊的是
文件名称是【.】表示当前目录【..】表示上一级目录
文件名称以【.cache】类似以【.】开头的文件是隐藏文件,之所以能看见是因为,【ls】命令的【-a】参数
Linux文件权限的重要性
- 数据保护:文件权限可以阻止未经授权的用户或进程访问敏感数据。设置正确的文件权限可以确保只有授权用户才能读取、写入或执行文件,有助于保护隐私信息和重要数据。
- 系统安全:通过设置正确的文件权限,可以防止恶意用户或恶意软件修改系统关键文件,从而保护系统的安全性。例如,关键系统文件只能由root用户进行修改,其他用户无法访问或修改这些文件。
- 权限管理:文件权限是对系统资源进行访问控制和管理的重要手段。通过正确设置文件权限,可以确保用户只能访问他们需要的文件,并避免对系统的不必要干扰和风险。
- 文件完整性:文件权限还有助于确保文件的完整性,防止文件被非法篡改或破坏。只有具有足够权限的用户才能对文件进行修改,这有助于确保文件内容的可信度。
- 避免意外修改:正确的文件权限设置可以避免用户或程序意外修改或删除关键文件,从而降低系统发生意外故障的风险。
Linux用户身份和用户组记录的文件
Linux系统中,用户身份和用户组信息通常记录在以下文件中:
- /etc/passwd:这个文件包含了系统上所有用户的基本信息,每行对应一个用户。每行包含了用户名、加密后的密码(现在通常为 “x”,密码以加密形式保存在 /etc/shadow 文件中)、用户ID(UID)、用户组ID(GID)、用户的全名、家目录和默认shell等信息。
- /etc/shadow:这个文件包含了用户的加密密码及密码相关的信息。只有root用户具有读权限。密码部分被加密存储,使用 shadow 文件可以增加对密码文件的安全性。
- /etc/group:这个文件包含了系统上所有用户组的信息。每行对应一个用户组,包含了用户组名、加密后的密码(现在通常为空)、用户组ID(GID)和属于该用户组的成员列表。
Linux修改文件属性和权限
chgrp:修改所属组
这个命令就是 change group的缩写,要修改用户组之前,确保所指定的用户组在 /etc/group
文件中已存在
用法
chgrp [选项] 用户组 文件 选项: -R:递归操作文件和目录
示例
将 csq 及其子目录下所有文件的属组更改为”zhw”
[root@chenshiren ~]# ls -l csq/ # 修改用户组前 总用量 0 -rw-r--r--. 1 root root 0 2月 25 20:19 csq.txt [root@chenshiren ~]# chgrp -R zhw csq/ [root@chenshiren ~]# ls -l csq/ # 修改用户组后 总用量 0 -rw-r--r--. 1 root zhw 0 2月 25 20:19 csq.txtchgrp -R zhw csq/ # 如果改一些不存在于 /etc/group的组 [root@chenshiren ~]# chgrp -R zzz csq/ chgrp: 无效的组:“zzz” # 报错
chown:修改文件拥有者
这个命令就是change owner的缩写,要修改之前,用户必须是/etc/passwd已存在的有效用户才能成功将文件或目录的所有者修改为该用户
chown还可以用于修改用户组
用法
chown [选项] [所有者][:[组]] 文件 选项: -R:递归操作文件和目录
示例
将 csq 及其子目录下所有文件的文件拥有者更改为”zhw”
[root@chenshiren ~]# chown -R zhw csq/ [root@chenshiren ~]# ls -l csq/ 总用量 0 -rw-r--r--. 1 zhw zhw 0 2月 25 20:19 csq.txt
将 csq 及其子目录下所有文件的文件拥有者更改为”zhw”,所属组更改为”root”
[root@chenshiren ~]# chown -R zhw:root csq/ [root@chenshiren ~]# ls -l csq/ 总用量 0 -rw-r--r--. 1 zhw root 0 2月 25 20:19 csq.txt
chmod:修改文件的权限
权限设置方法有两种,分别可以使用数字或是符号来进行权限修改
语法
chmod [选项] 模式[,模式] 文件 选项: -R:递归操作文件和目录 模式:用数字或符号表示权限修改的方式
数字模式
- 数字模式为 3 个数字表示的权限,每个数字代表了不同的用户类别(文件拥有者、用户组、其他用户),分别对应读取、写入和执行权限。
- 权限数字为 0~7,其中每个数字的二进制表示为 4(读取权限)、2(写入权限) 和 1(执行权限)的和。
例如:将【anaconda-ks.cfg】文件权限设置为文件拥有者可读可写,用户组可读,其他用户没权限
[root@chenshiren ~]# chmod 640 anaconda-ks.cfg [root@chenshiren ~]# ls -l 总用量 4 -rw-r-----. 1 root root 1437 2月 24 16:00 anaconda-ks.cfg
符号模式
- 符号模式使用符号来表示权限的更改,包括 :
+
(添加权限)、-
(去除权限)和=
(设置权限)、r
(读取权限)、”w
(写入权限)、x
(执行权限)等。 - u:表示文件拥有者
- g:表示用户组
- o:表示其他用户
- a:表示所有用户
例如:将【anaconda-ks.cfg】文件权限设置为文件拥有者可读可写可执行,用户组可读可写,其他用户可读
[root@chenshiren ~]# chmod u=rwx,g=rw,o=r anaconda-ks.cfg [root@chenshiren ~]# ls -l 总用量 4 -rwxrw-r--. 1 root root 1437 2月 24 16:00 anaconda-ks.cfg
例如:将【anaconda-ks.cfg】文件权限设置为文件拥有者可读可写可执行,用户组和其他用户没权限
[root@chenshiren ~]# chmod u=rwx,g-rwx,o-rwx anaconda-ks.cfg [root@chenshiren ~]# ls -l 总用量 4 -rwx------. 1 root root 1437 2月 24 16:00 anaconda-ks.cfg
Linux目录与文件的权限意义
在Linux系统中,文件的权限用于控制对文件的访问和操作权限,其中对于一般文件和目录文件的权限有不同的含义和影响:
一般文件
:对于一般文件,读取权限(r)表示可以查看文件内容,写入权限(w)表示可以修改文件内容(不含删除),执行权限(x)表示该文件具有可以被系统执行的权限目录文件
:对于目录文件,读取权限(r)表示可以列出目录中的文件列表,写入权限(w)表示可以在目录中创建、删除或重命名文件以及移动文件、目录位置,执行权限(x)表示可以进入该目录
Linux文件种类、扩展名和文件名限制
Linux文件种类
在Linux文件属性中已经说到了文件种类,下面是更全面的文件种类
普通文件(Regular Files)
- 文件类型标识符:
-
- 描述: 包含纯文本、二进制文件、数据文件等
- 示例:
.txt
文本文件、.sh
图片文件、/var/log/下的日志文件等
目录文件
- 文件类型标识符:
d
- 描述: 目录
- 示例: 例如通过 【ls -l】查看文件权限属性,【drwxrwxrwx】d开头就是目录。
符号链接文件
- 文件类型标识符:
l
- 描述: 文件的符号链接,指向另一个文件或目录
- 示例:
字符设备文件
- 文件类型标识符:
c
- 描述: 提供串端口的接口设备
- 示例: 终端接口文件
/dev/tty
鼠标键盘
块设备文件
- 文件类型标识符:
b
- 描述: 提供块为单位的设备访问的设备文件
- 示例: 硬盘驱动器文件
/dev/nvme0n1
.(通常是sda sdb之类,我是因为在选择磁盘类型时候选择了NVMe)
套接字文件(Socket Files)
- 文件类型标识符:
s
- 描述: 用于进程间通信的文件类型。
- 示例:
管道文件
- 文件类型标识符:
p
- 描述: 用于进程间通信的一种特殊文件。
- 示例:
Linux文件扩展名
在Linux系统中,文件的扩展名不像在Windows系统中那样起着决定性的作用。Linux系统主要根据文件的内容和权限来确定文件类型,而不是仅仅依赖于文件扩展名。然而,为了帮助用户快速识别文件类型,有时会在文件名中包含一些表示文件类型或用途的扩展名。
以下是一些常见的在Linux系统中使用的文件扩展名以及它们通常表示的文件类型:
.txt
: 文本文件.sh
:Shell 脚本文件.conf
: 配置文件.log
:日志文件.html
,.css
,.js
,.php
: 网页文件.zip
,.tar.gz
,.tar
: 压缩文件.cpp
,.c
,.java
:源代码文件
Linux文件名长度限制
单一文件或目录的最大容许文件名为 255 字节,以一个 ASCIl英文占用一个字节来说,则大约可达 255 个字符长度。若是以每个汉字占用 2字节来说,最大文件名就是大约在 128个汉字之间
Linux文件名限制
设置Linux下面的文件名时,最好可以避免一些特殊字符比较好
+ - * ? > < ; & ! [ ] | \ ' " ` ( ) {
}
因为这些符号在命令行模式下,是有特殊意义的
文件名开头为小数点【.】时,代表这个文件为隐藏文件
Linux目录配置
Linux目录配置的依据——FHS
了Linux系统中的文件系统层次标准(FHS,Filesystem Hierarchy Standard),旨在规范不同目录下应该放置什么类型的数据,以帮助用户、开发者和维护者更好地管理系统。
FHS定义了四种目录形态
可分享 | 不可分享 | |
---|---|---|
不变 | /usr(软件存放处) | /etc(配置文件) |
/opt(第三方辅助软件) | /boot(启动与内核文件) | |
可变动 | /var/mail(用户邮箱) | /var/run(程序相关) |
/var/spool/news(新闻组) | /var/lock(程序相关) |
FHS针对目录树架构定义出三层目录下面一个放置什么数据
- /(root,根目录):与启动系统有关
- /usr(Unix Software Resource):与软件安装/执行有关
- /var(Variable):与系统运行过程有关
根目录(/)的意义与内容
以账号的角度来看,所谓的root就是系统管理员的身份;以目录的角度来看,所谓的root指的是根目录,也就是/
根目录的重要性无疑是不言而喻的,它是整个文件系统的起点和核心
根目录不仅包含系统运行所需的关键文件,还与系统的启动、还原和修复等操作密切相关
FHS要求:根目录不要放在非常大的分区内,因为越大的分区你会放入越多的数据,如此一来根目录所在分区就可能会有较多发生错误的机会
FHS建议:根目录(/)所在分区应该越小越好,且应用程序所安装的软件最好不要与根目录放在同一个分区内,保持根目录越小越好。如此不但性能较佳,根目录所在的文件系统也较不容易发生问题。
第一层:FHS要求必须存在的目录
目录 | 应放置的文件内容 |
---|---|
/bin | 存放系统启动和正常运行过程中必需的基本用户命令,/bin 目录中的命令通常是所有用户(包括普通用户和系统管理员)都可以执行的命令,无需特权权限 |
/boot | 放置启动会使用的文件,包含用于启动系统的内核和引导加载程序文件 |
/dev | 任何设备与接口设备都是以文件的形式存在于这个目录当中 |
/etc | 系统主要配置文件放在这个目录内 |
/lib | 放置启动时会用到的函数库 |
/media | 通常用于挂载可移动介质,如USB驱动器、光盘等 |
/mnt | 手动挂载临时文件系统的目录 |
/opt | 存放第三方软件放置目录 |
/run | 系统引导过程中存放系统运行时的临时文件 |
/sbin | 存放系统启动和维护过程中必需的系统管理命令,这些命令通常是用于系统修复、恢复以及在紧急情况下维护系统的关键工具 |
/srv | 包含特定服务相关数据或文件的目录 |
/tmp | 用于存放临时文件 |
/usr | 第二层FHS设置,后续介绍 |
/var | 包含经常变化的文件,如日志文件 |
第一层:FHS建议可以存在的目录
目录 | 应放置的文件内容 |
---|---|
/home | 包含用户的主目录,每个用户会有一个独立的子目录在其中存放个人文件 |
/lib64 | 用于存放与/lib不同格式的二进制函数库 |
/root | 超级用户root的主目录,root用户的个人文件通常会存放在此目录下 |
需要了解的目录
目录 | 应放置的文件内容 |
---|---|
/lost+found | 这个目录是使用标准的 ext2、ext3、ext4 文件系统格式才会产生的一个目录,目的在于当文件系统发生错误时,将一些遗失的片段放置到这个目录下,不过如果使用的是 xfs 文件系统的话,就不会存在这个目录 |
/proc | 包含当前正在运行的进程的信息,是一个虚拟文件系统,提供有关内核和进程的信息 |
/sys | 同样是一个虚拟文件系统,提供有关系统硬件及内核模块的信息 |
/usr的意义和内容
很多人误以为 usr
是 user 的缩写,但实际上,usr
是 UNIX Software Resource 的缩写
根据 FHS的基本定义,/usr
目录包含的数据被认为是可分享的(shareable)和不可更改的(static)。这意味着,/usr
目录中的内容可以被共享给局域网内的其他主机使用,包括通过网络文件系统(如NFS服务器)进行挂载。
FHS 建议:软件开发者应该合理地将他们的数据放置在 /usr
目录的子目录中,而不是创建自己独立的目录。因为所有系统默认的软件(由发行版发布者提供的软件)都会被安装在 /usr
目录下
第二层:FHS要求/usr 目录下必须要存在的目录
目录 | 应放置的文件内容 |
---|---|
/usr/bin/ | 一般用户能够使用的命令放在这里 |
/usr/lib/ | 与/lib功能相同放置启动时会用到的函数库,lib就是链接到此目录中的 |
/usr/local/ | 用于安装本地系统管理员自行安装的软件,通常可以包含/usr/local/bin、/usr/local/lib等子目录 |
/usr/sbin/ | 用于存放系统管理员(root用户)所需的系统管理命令,而非系统正常运行所必需的系统命令 |
/usr/share/ | 放置只读的数据文件,包括共享文档 |
第二层:FHS建议可以存在的目录
目录 | 应放置的文件内容 |
---|---|
/usr/game/ | 游戏程序和游戏数据文件 |
/usr/include/ | 头文件(用于编译程序时包含的头文件) |
/usr/libexec/ | 系统特定的程序或脚本 |
/usr/lib/ | 放置启动时会用到的函数库 |
/usr/src/ | 源代码文件 |
/var的意义和内容
/var
目录通常用于存放经常变化的文件,包括日志文件、缓存文件、临时文件以及其他动态生成的数据,这些数据是系统在运行过程中产生的,并且可能随着时间的推移而变化。
第二层:FHS要求存在的目录
目录 | 应放置的文件内容 |
---|---|
/var/cache/ | 缓存文件,用于存放各种应用程序的缓存数据 |
/var/lib/ | 应用程序运行时需要的动态信息或状态信息的文件,如数据库文件等 |
/var/lock/ | 锁文件,用于确保同一时刻只有一个进程能够访问某个特定资源 |
/var/log/ | 系统和应用程序日志文件,记录系统活动和事件的日志信息 |
/var/mail/ | 用于存放用户的电子邮件 |
/var/run/ | 存放正在运行的系统进程和服务的PID文件 |
/var/spool/ | 用于存放需要排队等待其他程序处理的数据,这些数据一般是在被处理之前会先存放在这个目录中。一些常见的用途包括存放邮件队列、打印队列、数据传输队列等。一旦数据被处理完毕,通常会自动删除或移动这些数据,以便为新的数据腾出空间 |
Linux目录树
Linux系统的目录结构就像一棵倒挂的大树,所有文件和文件夹都从顶部的树根向下延伸
- 目录树起点为根目录(/)
- 每一个目录不止能使用本地分区的文件系统,也可以使用网络上的文件系统,举例来说,可以使用Network File System(NFS)服务器挂在某特定目录
- 每一个文件在此目录树中的文件名(包含路径)都说独一无二的
使用 【ls -l /】命令来查看跟目录
[root@chenshiren ~]# ls -l / dr-xr-xr-x. 2 root root 6 8月 10 2021 afs lrwxrwxrwx. 1 root root 7 8月 10 2021 bin -> usr/bin dr-xr-xr-x. 5 root root 4096 2月 24 16:00 boot drwxr-xr-x. 18 root root 3300 2月 26 15:01 dev drwxr-xr-x. 133 root root 8192 2月 26 15:02 etc drwxr-xr-x. 3 root root 17 2月 24 16:00 home lrwxrwxrwx. 1 root root 7 8月 10 2021 lib -> usr/lib lrwxrwxrwx. 1 root root 9 8月 10 2021 lib64 -> usr/lib64 drwxr-xr-x. 2 root root 6 8月 10 2021 media drwxr-xr-x. 3 root root 18 2月 24 15:58 mnt drwxr-xr-x. 2 root root 6 8月 10 2021 opt dr-xr-xr-x. 370 root root 0 2月 26 11:53 proc dr-xr-x---. 7 root root 4096 2月 26 14:59 root drwxr-xr-x. 46 root root 1160 2月 26 11:53 run lrwxrwxrwx. 1 root root 8 8月 10 2021 sbin -> usr/sbin drwxr-xr-x. 2 root root 6 8月 10 2021 srv dr-xr-xr-x. 13 root root 0 2月 26 11:53 sys drwxrwxrwt. 21 root root 4096 2月 26 15:02 tmp drwxr-xr-x. 12 root root 144 2月 24 15:56 usr drwxr-xr-x. 20 root root 4096 2月 26 00:08 var
目录树架构
Linux绝对路径与相对路径
在Linux系统中,有绝对路径和相对路径这两种方式来指定文件或目录的位置:
- 绝对路径是一个完整的文件或目录的路径,从根目录(/)开始一直到目标文件或目录的路径。它提供了文件或目录的完整位置信息,不依赖于当前工作目录。比如,
/home/user/Documents/file.txt
就是一个绝对路径,从根目录开始沿着目录树一直指向文件file.txt
。 - 相对路径:相对路径则是相对于当前工作目录来指定文件或目录的路径。
例如:假设当前工作目录是
/home/user
,要指向同级目录下的文件notes.txt
,可以使用相对路径./notes.txt
,如果要指向上一级目录/home
,可以使用相对路径【../】在Linux文件属性中的文件名称里,讲到Linux当前目录下隐藏了【.】和【..】俩个目录
- 【.】:代表当前的目录,也可以使用【./】表示
- 【..】:代表上一级目录,也可以使用【../】表示
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/156834.html