Linux文件权限和目录配置

Linux文件权限和目录配置

用户和用户组

文件拥有者(Owner)

文件拥有者是指创建文件的用户,拥有者可以对文件进行读取、写入和执行等操作。设置文件的拥有者可以保护个人隐私和文件安全,确保只有文件拥有者能够查看或修改文件内容。

用户组(Group)

用户组是将多个用户组织在一起的概念,通过用户组可以实现协同工作和权限管理。用户组可以设置不同的权限,允许组内成员相互访问和修改文件,同时限制其他用户对文件的访问权限。

其他人(Others)

其他人是除文件所有者和文件所属组之外的所有用户,这些用户被认为是文件的“其他人”,只能根据文件的“其他人”权限来访问文件或目录。

image-20240225173621025

如上图所示:

以用户1来说,用户1创建的文件拥有者为用户1,它属于用户组1,而用户3相对于用户1来说,则他只是其他人。

如果你想让用户3进来查看共享的文件,只需要将用户3拉进用户组1即可。用户可以加入多个组

root(超级管理员)

在Linux系统中,root是一个特殊的用户,通常被称为“超级用户”或“管理员用户”,拥有系统上最高的权限。root用户具有对系统中所有文件和进程的完全控制权,可以执行任何操作,包括创建、删除和修改文件,安装软件,更改文件权限以及管理其他用户和用户组等

Linux文件权限

Linux文件属性

使用【ls -al】列出指定目录下的所有文件的详细信息

image-20240225182117192

  • ls是列出文件和目录内容的命令。
  • -a参数表示显示所有文件,包括以.开头的隐藏文件。
  • -l参数表示使用长格式列表输出,这意味着会显示文件或目录的详细信息,包括权限、所有者、所属组、大小、创建日期等。

image-20240225192541582

第一栏: 文件类型权限

【-rw- --- ---】代表这个文件类型权限

第一个字符【-】代表这个文件是目录、文件或链接文件等

当为【d】则是目录,例如【.config】那一行

当为【-】则是文件,例如我上图【anaconda-ks.cfg】这个文件

当为【l】则是链接文件,如下图

image-20240225184636833

当为【b】则是设备文件里面的可供存储的设备

image-20240225184745086

当为【c】则表示为设备文件里面的串行端口设备,例如鼠标、键盘(一次性读取设备)

image-20240225185132331


接下来字符中,以三个为一组,且均为【rwx】的三个参数组合。

image-20240225191315989

其中【r】代表可读 (read)、【w】代表可写(write)、【x】代表可执行(execute)

这三个权限的位置不会变,如果没有权限,就会出现【-】,有该权限就会显示对应权限的字符

以【anaconda-ks.cfg】文件为例,文件拥有者拥有读和写的权限,文件所属用户组没有权限,其他人没有权限。

第二栏:链接数

第二栏数字在文件或目录中表示链接数

  • 当链接数为 1 时:表示只有一个链接指向此文件。这经常发生在普通的文件上,因为通常情况下一个文件只有一个入口链接。

  • 当链接数大于等于2时:表示目录,如果一个目录的链接数为 2,表示除了当前目录(.)本身外,还有一个链接指向上一级目录(..

    image-20240225194127455

例如:【.cache】这个目录

image-20240225193714385

【.】代表当前目录【..】代表父目录,【.cache】当前目录有7个链接文件,父目录也有7个

第三栏:文件的所有者

第四栏:文件的所属用户组

第五栏:文件的大小(默认是Bytes,1G=1024MB,1MB=1024KB,1KB=1024B)

第六栏:文件的最后修改时间(通常以月 /日 时间表示,如果这个文件修改时间距离太久,时间则换成年来表示)

image-20240225194855298

如果想显示完整时间,可以利用ls的选项

[root@chenshiren ~]# ls -al --full-time /
总用量 28
dr-xr-xr-x.  18 root root  235 2024-02-24 15:56:21.809820460 +0800 .
dr-xr-xr-x.  18 root root  235 2024-02-24 15:56:21.809820460 +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.391692482 +0800 boot
drwxr-xr-x.  18 root root 3300 2024-02-25 17:29:43.350677858 +0800 dev
drwxr-xr-x. 133 root root 8192 2024-02-25 17:29:44.170720479 +0800 etc
drwxr-xr-x.   3 root root   17 2024-02-24 16:00:40.717387465 +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.258712278 +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.241000070 +0800 proc
dr-xr-x---.   7 root root 4096 2024-02-25 19:19:19.478157163 +0800 root
drwxr-xr-x.  46 root root 1180 2024-02-25 18:20:10.169400199 +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.180453726 +0800 sys
drwxrwxrwt.  19 root root 4096 2024-02-25 18:43:01.529678204 +0800 tmp
drwxr-xr-x.  12 root root  144 2024-02-24 15:56:21.861820454 +0800 usr
drwxr-xr-x.  20 root root 4096 2024-02-24 16:05:25.773999649 +0800 var

第七栏:文件的名称

第七栏就是文件的名称,比较特殊的是

文件名称是【.】表示当前目录【..】表示上一级目录

文件名称以【.cache】类似以【.】开头的文件是隐藏文件,之所以能看见是因为,【ls】命令的【-a】参数

image-20240225195244928

Linux文件权限的重要性

  1. 数据保护:文件权限可以阻止未经授权的用户或进程访问敏感数据。设置正确的文件权限可以确保只有授权用户才能读取、写入或执行文件,有助于保护隐私信息和重要数据。
  2. 系统安全:通过设置正确的文件权限,可以防止恶意用户或恶意软件修改系统关键文件,从而保护系统的安全性。例如,关键系统文件只能由root用户进行修改,其他用户无法访问或修改这些文件。
  3. 权限管理:文件权限是对系统资源进行访问控制和管理的重要手段。通过正确设置文件权限,可以确保用户只能访问他们需要的文件,并避免对系统的不必要干扰和风险。
  4. 文件完整性:文件权限还有助于确保文件的完整性,防止文件被非法篡改或破坏。只有具有足够权限的用户才能对文件进行修改,这有助于确保文件内容的可信度。
  5. 避免意外修改:正确的文件权限设置可以避免用户或程序意外修改或删除关键文件,从而降低系统发生意外故障的风险。

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  225 20:19 csq.txt
[root@chenshiren ~]# chgrp -R zhw csq/
[root@chenshiren ~]# ls -l csq/  # 修改用户组后
总用量 0
-rw-r--r--. 1 root zhw 0  225 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  225 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  225 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  224 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  224 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  224 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
  • 描述: 文件的符号链接,指向另一个文件或目录
  • 示例:image-20240226000108793

字符设备文件

  • 文件类型标识符: c

  • 描述: 提供串端口的接口设备

  • 示例: 终端接口文件 /dev/tty

    鼠标键盘

    image-20240226000421385

块设备文件

  • 文件类型标识符: b
  • 描述: 提供块为单位的设备访问的设备文件
  • 示例: 硬盘驱动器文件 /dev/nvme0n1.(通常是sda sdb之类,我是因为在选择磁盘类型时候选择了NVMe)

套接字文件(Socket Files)

  • 文件类型标识符: s
  • 描述: 用于进程间通信的文件类型。
  • 示例: image-20240226000705135

管道文件

  • 文件类型标识符: p

  • 描述: 用于进程间通信的一种特殊文件。

  • 示例:

    image-20240226001226673

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  810  2021 afs
lrwxrwxrwx.   1 root root    7  810  2021 bin -> usr/bin
dr-xr-xr-x.   5 root root 4096  224 16:00 boot
drwxr-xr-x.  18 root root 3300  226 15:01 dev
drwxr-xr-x. 133 root root 8192  226 15:02 etc
drwxr-xr-x.   3 root root   17  224 16:00 home
lrwxrwxrwx.   1 root root    7  810  2021 lib -> usr/lib
lrwxrwxrwx.   1 root root    9  810  2021 lib64 -> usr/lib64
drwxr-xr-x.   2 root root    6  810  2021 media
drwxr-xr-x.   3 root root   18  224 15:58 mnt
drwxr-xr-x.   2 root root    6  810  2021 opt
dr-xr-xr-x. 370 root root    0  226 11:53 proc
dr-xr-x---.   7 root root 4096  226 14:59 root
drwxr-xr-x.  46 root root 1160  226 11:53 run
lrwxrwxrwx.   1 root root    8  810  2021 sbin -> usr/sbin
drwxr-xr-x.   2 root root    6  810  2021 srv
dr-xr-xr-x.  13 root root    0  226 11:53 sys
drwxrwxrwt.  21 root root 4096  226 15:02 tmp
drwxr-xr-x.  12 root root  144  224 15:56 usr
drwxr-xr-x.  20 root root 4096  226 00:08 var

目录树架构

image-20240226151245122

Linux绝对路径与相对路径

在Linux系统中,有绝对路径和相对路径这两种方式来指定文件或目录的位置:

  • 绝对路径是一个完整的文件或目录的路径,从根目录(/)开始一直到目标文件或目录的路径。它提供了文件或目录的完整位置信息,不依赖于当前工作目录。比如,/home/user/Documents/file.txt就是一个绝对路径,从根目录开始沿着目录树一直指向文件 file.txt

  • 相对路径:相对路径则是相对于当前工作目录来指定文件或目录的路径。

    例如:假设当前工作目录是/home/user,要指向同级目录下的文件notes.txt,可以使用相对路径./notes.txt,如果要指向上一级目录/home,可以使用相对路径【../】

    在Linux文件属性中的文件名称里,讲到Linux当前目录下隐藏了【.】和【..】俩个目录

    image-20240226152458897

  • 【.】:代表当前的目录,也可以使用【./】表示

  • 【..】:代表上一级目录,也可以使用【../】表示

  • 14
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值