linux 文件权限识别及其修改

一、文件权限认识

在 Linux 系统中,一切皆文件,目录也是一种文件形式叫目录文件,它们的属性主要包含:索引节点(inode),类型、权限属性、链接数、所归属的用户和用户组、最近修改时间等内容。
如下为根目录下目录:

$ ls -lih
total 60K
 263121 lrwxrwxrwx   1 root root    7 Jun  2  2017 bin -> usr/bin
 263122 dr-xr-xr-x   2 root root 4.0K Dec  7  2017 boot
      1 drwxr-xr-x   5 root root  360 Aug 11 14:36 dev
1315847 drwxr-xr-x   1 root root 4.0K Aug 11 14:36 etc
 263621 drwxr-xr-x   5 root root 4.0K Nov 29  2019 home
 264862 lrwxrwxrwx   1 root root    7 Jun  2  2017 lib -> usr/lib
 264863 lrwxrwxrwx   1 root root    9 Jun  2  2017 lib64 -> usr/lib64
 264864 drwx------   2 root root 4.0K Jun  2  2017 lost+found
 264865 drwxr-xr-x   2 root root 4.0K Dec 13  2015 media
 264866 drwxr-xr-x   2 root root 4.0K Dec 13  2015 mnt
 264867 drwxr-xr-x   3 root root 4.0K Nov 29  2019 opt
      1 dr-xr-xr-x 373 root root    0 Aug 11 14:36 proc
4851238 dr-xr-x---   1 root root 4.0K Dec 11  2019 root
4851241 drwxr-xr-x   1 root root 4.0K Feb 14 11:17 run
 264881 lrwxrwxrwx   1 root root    8 Jun  2  2017 sbin -> usr/sbin
 264882 drwxr-xr-x   2 root root 4.0K Dec 13  2015 srv
      1 dr-xr-xr-x  13 root root    0 Aug 11 14:36 sys
4851264 drwxrwxrwx   1 root root 4.0K Feb 14 11:17 tmp
4851265 drwxr-xr-x   1 root root 4.0K Nov 29  2019 usr
4852397 drwxr-xr-x   1 root root 4.0K Jun  4  2019 var

1.1、索引节点

在 Linux 文件系统中,每个文件都有一个用于标识和管理它的唯一索引节点号(inode number)。索引节点位于文件系统的元数据区域,包含了文件的所有元数据信息,例如文件的所有者、权限、大小、创建时间、修改时间、访问时间等。

索引节点号是一个唯一的数字,用于标识一个文件。在 Linux 文件系统中,每个文件和目录都有一个唯一的索引节点号,这个号码在文件系统中是唯一的。

使用如下命令查看文件目录索引节点:

$ ls -i
total 12528
266890 locale-archive

# 266890 即为文件locale-archive的索引节点

一个文件可以有多个硬链接(hard link),每个硬链接都有一个不同的文件名,但它们共享同一个索引节点号。因此,通过硬链接可以让多个文件名指向同一个物理文件。

硬链接和软链接

硬链接(Hard Link)是指多个文件名指向同一个物理文件的链接。多个硬链接共享同一个索引节点号(inode number),因此它们在文件系统中的位置相同,且没有任何区别。每个硬链接都是一个完整的文件名,都可以作为原始文件名使用,并且都可以对文件进行读写操作。

符号链接(Symbolic Link,也称软链接)是指一个特殊类型的文件,它包含了指向另一个文件的路径名。符号链接本身是一个文件,其中包含的路径名指向另一个文件。当访问符号链接时,实际上是访问链接所指向的文件。与硬链接不同,符号链接指向的是文件名,而不是物理文件。

硬链接和符号链接的主要区别如下:

  • 硬链接只能链接同一文件系统中的文件,而符号链接可以跨越文件系统。
  • 硬链接会共享同一个索引节点,因此它们必须指向同一个物理文件,而符号链接可以指向任意文件或目录。
  • 删除原始文件对硬链接没有任何影响,因为它们共享同一个索引节点,而删除原始文件会导致符号链接失效。

示例如下:

# 新建文件file.txt, 写入“Hello World!”
$ vim file.txt

# 分别对file.txt 建立硬链接和软链接
$ ln file.txt hard_file.txt

$ ln -s file.txt soft_file.txt  # 与硬链接区别在于加 -s

$ ll
total 8
-rw-r--r-- 2 root root 13 Aug 11 16:35 file.txt
-rw-r--r-- 2 root root 13 Aug 11 16:35 hard_file.txt
lrwxrwxrwx 1 root root  8 Aug 11 16:36 soft_file.txt -> file.txt

# 查看文件内容
$ cat file.txt 
Hello World!

$ cat hard_file.txt 
Hello World!

$ cat soft_file.txt # 有文章说符号链接无法查看内容,只是显示文件名,这里无法确认 
Hello World!

# 删除原始文件后查看文件内容
$ rm -rf file.txt 

$ cat hard_file.txt 
Hello World!

$ cat soft_file
cat: soft_file: No such file or directory

1.2、类型

1.2.1、普通文件:

-代表普通文件,如下:

$ ll /etc/passwd
-rw-r--r-- 1 root root 1690 Aug 14 04:46 /etc/passwd

1.2.2、目录文件

d代表目录文件,如下:

$ ll /home/
drwx------   3 admin       admin 4096 Mar 21 10:32 admin

1.2.3、块设备文件

b代表目录文件,如下:

brw-rw----  1 root disk    253,   0 Nov 30  2022 vda
brw-rw----  1 root disk    253,   1 Nov 30  2022 vda1
brw-rw----  1 root disk    253,   2 Nov 30  2022 vda2
brw-rw----  1 root disk    253,  16 Nov 30  2022 vdb

在Linux系统中,块设备文件是一种特殊的文件类型,用于访问磁盘、光盘等块设备。块设备文件通常以/dev/sdX/dev/hdX的形式存在,其中X表示驱动器的字母编号,从a开始递增。例如,/dev/sda表示系统中的第一个硬盘,/dev/sdb表示系统中的第二个硬盘,以此类推。

块设备文件是一种原始的设备文件,可以直接读写设备的扇区数据。在Linux系统中,块设备驱动程序会把块设备映射到文件系统中,从而使用户可以通过文件系统来管理磁盘。

块设备文件通常被用于分区、格式化、挂载、卸载硬盘等操作。例如,通过fdisk命令可以对块设备文件进行分区操作,使用mkfs命令可以对分区进行格式化,使用mount和umount命令可以将文件系统挂载到块设备上,并在不需要访问文件系统时将其卸载。

1.2.4、字符设备文件

c代表字符设备文件,如下:

crw-rw-rw-  1 root tty       5,   0 Aug  4 14:25 tty
crw--w----  1 root tty       4,   0 Nov 30  2022 tty0
crw--w----  1 root tty       4,   1 Nov 30  2022 tty1
crw--w----  1 root tty       4,  10 Nov 30  2022 tty10

在Linux系统中,字符设备文件是一种特殊的文件类型,用于访问字符设备,例如键盘、鼠标、串口等。字符设备文件通常以/dev/ttyX/dev/ttySX的形式存在,其中X表示设备的编号。

与块设备文件不同,字符设备文件以字符为单位进行读写,而不是以块为单位。因此,字符设备文件通常用于处理流数据,例如文本文件、串口数据等。字符设备文件具有缓存机制,可以提高文件读写速度,并且支持随机访问。

在Linux系统中,字符设备文件的操作方式与普通文件类似,可以使用open、read、write、ioctl等系统调用来访问设备。例如,使用cat命令可以读取键盘输入的字符,使用echo命令可以向串口发送数据。

1.2.5、符号链接文件

l代表符号链接文件,如下:

lrwxrwxrwx. 1 root root  7 Nov 11 2020 python -> python2
lrwxrwxrwx. 1 root root  9 Nov 11 2020 python2 -> python2.7
lrwxrwxrwx  1 root root  16 Nov 11 2020 python2-config -> python2.7-config
lrwxrwxrwx. 1 root root  9 Apr 12 2022 python3 -> python3.6

1.2.6、管道文件

p代表管道文件,如下:

prw-------  1 root  root    0 Nov 30  2022 dmeventd-client
prw-------  1 root  root    0 Nov 30  2022 dmeventd-server

管道文件是一种特殊的文件类型,用于进程之间的通信。管道文件又被称为命名管道文件(Named pipe),与普通文件不同的是,管道文件不能用于存储数据,而是用于流式传输数据。

管道文件可以通过mkfifo命令创建,并且可以使用rm命令删除。管道文件的创建和删除不会影响到已经存在的进程,但是如果所有进程都关闭了管道文件,那么管道文件也会被删除。

在Linux系统中,管道文件通常用于进程之间的数据传输,例如通过管道将一个进程的输出直接传递给另一个进程的输入,从而实现数据处理。例如,可以使用以下命令将一个进程的输出传递给另一个进程:

$ command1 | command2

这样,command1的输出将被传递给command2的输入,从而实现数据处理。

1.2.7、套接字文件

s代表套接字文件,如下:

srwxr-xr-x  1 root  root     0 Apr 12 16:43 dockershim.sock
srw-rw----  1 root  docker   0 Jul 27 16:47 docker.sock

在Linux系统中,套接字文件是一种特殊的文件类型,用于进程之间的网络通信。套接字文件通常以文件路径的形式存在,例如/var/run/docker.sock

套接字文件可以被多个进程共享,因此可以用于实现进程之间的通信和协调。在Linux系统中,套接字文件通常用于实现网络服务,例如Web服务器、数据库服务器等。

套接字文件的创建和使用需要借助Socket API,这是一组用于网络编程的系统调用。在Socket API中,可以使用socket、bind、listen、accept等函数来创建和操作套接字文件。

套接字文件还可以分为两种类型:流套接字(Stream socket)和数据报套接字(Datagram socket)。流套接字是一种面向连接的套接字,用于可靠的传输数据。数据报套接字是一种无连接的套接字,用于快速传输小型数据包。

总之,套接字文件是Linux系统中非常重要的文件类型,用于进程之间的网络通信和协调。了解套接字文件的工作原理和使用方法,对于系统管理员和开发人员来说都是非常重要的。

1.3、权限

文件权限以 3 位为一组,分成 3 组,分别表示文件所有者的权限,文件所有者所属组的权限及其他用户的权限。
在这里插入图片描述
权限与数字对应关系表:

数字符号权限
0没有权限
1–x执行
2-w-写入
3-wx写入和执行
4r–读取
5r-x读取和执行
6rw-读取和写入
7rwx读取、写入和执行

1.4、链接数

链接数表示指向该文件的硬链接数量。当一个新的硬链接被创建时,文件的链接数会自动增加,当硬链接被删除时,链接数会相应减少。

例如,如果有一个名为 file.txt 的文件,并创建了两个硬链接 link1 和 link2,那么该文件的链接数就是 3(原始文件名 file.txt 和两个硬链接 link1 和 link2)。

链接数是 Linux 文件系统中一个重要的概念,它有以下几个作用:

1)确定文件是否可以被删除

链接数为 0 表示没有任何硬链接指向该文件,该文件可以被删除。

2)确定文件是否可以被修改

只有文件的所有硬链接都被删除之后,才能对文件进行修改。在硬链接存在的情况下,修改任何一个链接都会影响到其他链接。

3)确定文件是否可以被重命名

如果一个文件有多个硬链接,重命名其中一个硬链接会影响到其他硬链接。因此,只有当文件的所有硬链接都被删除后,才能将该文件重命名。

4)确定文件占用的磁盘空间

链接数的值等于文件的硬链接数加 1,其中加 1 表示文件本身所占用的空间。因此,当一个文件有多个硬链接时,它实际上只占用了一次磁盘空间。

如何查看文件链接数

ls -l

$ ls -l
total 4
-rw-r--r-- 1 root root 5 Aug 14 14:11 test.txt
# 其中链接数为 1

stat 命令

stat test.txt 
  File: ‘test.txt’
  Size: 5         	Blocks: 8          IO Block: 4096   regular file
Device: 2000d8h/2097368d	Inode: 1315730     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2023-08-14 14:11:57.865926283 +0800
Modify: 2023-08-14 14:11:57.865926283 +0800
Change: 2023-08-14 14:11:57.865926283 +0800
 Birth: -

二、修改文件权限

2.1、chmod 命令

2.1.1、数字方式

使用数字方式时,每个权限都由三个数字表示,分别代表所有者、所属组和其他用户的权限。结合1.3,使用命令chmod 700 file.txt,给文件file.txt 加权限为rwx------

2.1.2、符号方式

可以使用 +- 来添加或删除权限,通过 ugo 分别表示所有者、所属组和其他用户。

$ chmod u+rw file.txt

# 此命令以为着给所有者增加读写权限,所属组合其他用户权限不变。

2.2、chown 命令

chown 命令用于修改文件的所有者。它可以通过用户名或用户 ID 指定新的所有者。

$ chown admin test.py 

$ ll | grep test.py
-rw-r--r-- 1 admin root    1997 Jun 27 16:59 test.py

2.3、chgrp命令

chgrp 命令用于修改文件的所属组。它可以通过组名或组 ID 指定新的所属组。

$ chgrp admin test.py 


$ ll | grep test.py
-rw-r--r-- 1 admin admin    1997 Jun 27 16:59 test.py

2.4、umask命令

Linux 操作系统中,umask 命令用于设置新建文件或目录的默认权限。umask 命令是用户级别的命令,通过该命令可以设置当前用户的 umask 值,即默认权限掩码。

umask 值是三个八进制数的形式,如 022,每个数字分别表示文件权限掩码的三个位的值。其中,第一个数字表示新建文件的权限掩码的所有者部分,第二个数字表示所属组部分,第三个数字表示其他用户部分

默认情况下,umask 值通常为 022,即新建文件的默认权限为 -rw-r--r--,新建目录的默认权限为 drwxr-xr-x

例如,当 umask 值为 002 时,新建文件的默认权限为 -rw-rw-r--,新建目录的默认权限为 drwxrwxr-x

umask 值可以使用 umask 命令进行修改,该命令的语法如下:

$ umask [mode]

其中,mode 参数可以是一个八进制数或者一个符号模式。如果没有指定 mode 参数,则 umask 命令将会显示当前的 umask 值

$ umask
0022

和chmod类似,也可以使用符号模式设置默认权限,如果要将默认权限掩码设置为 -rwxr-xr-x,那么可以使用以下命令:

$ umask u=rwx,g=rx,o=rx

上述命令中,u 表示所有者,g 表示所属组,o 表示其他用户,= 表示设置权限。因此,u=rwx 表示设置所有者的权限为可读可写可执行,g=rx 表示设置所属组的权限为可读可执行,o=rx 表示设置其他用户的权限为可读可执行。

需要注意的是,umask 值是在当前会话中设置的,它不会影响已经存在的文件或目录的权限,只会影响新建文件或目录的默认权限

如果要永久修改 umask 值,可以将其添加到 shell 配置文件中,如 ~/.bashrc、~/.bash_profile 或 /etc/profile 等。

总之,umask 命令用于设置新建文件或目录的默认权限掩码。umask 值是三个八进制数的形式,可以使用八进制数或符号模式进行修改。默认情况下,umask 值通常为 022。

参考文档

1、https://www.cnblogs.com/bluestorm/p/16806954.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/78740.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于OpenCV的人脸识别和模型训练系统(万字详解)

前言 我们身边的人脸识别有车站检票,监控人脸,无人超市,支付宝人脸支付,上班打卡,人脸解锁手机。 人脸检测是人脸识别系统组成的关键部分之一,其目的是检测出任意给定图片中的包含的一个或多个人脸&#…

网络通信原理IP头部格式(第四十二课)

字段作用解析:1)版本: 指的IP地址的版本 (IPv4 或 IPV6)2)首部长度: 次数据包的首部长度一共是多少,没有加可选项3)优先级与服务类型:表示****数据包是否需要优选传递4)总长度: 表示的是整个数据包的大小,也就****是首部+数据5)标识符、标志、段偏移量:的作用将拆开的…

ts与vue

ts与Vue 如果你已经学习了typeScript,但不知道如何在vue项目中使用,那么这篇文章将会很适合你。参考千峰教育 kerwin视频 1.会自动推导,隐士推导。提示 类型系统。 独立模块。 isolatedModules选项:是否配置为独立的模块。 减少报错 let …

Springboot项目启动后按顺序加载自定义类 (demo)

1. 实现ApplicationRunner接口, 重写run方法 import lombok.extern.slf4j.Slf4j; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.core.annotation.Order; import org.springframewor…

IDEA项目实践——JavaWeb简介以及Servlet编程实战

系列文章目录 IDEA项目实践——创建Java项目以及创建Maven项目案例、使用数据库连接池创建项目简介 IDEWA项目实践——mybatis的一些基本原理以及案例 IDEA项目实践——动态SQL、关系映射、注解开发 IDEA项目实践——Spring框架简介,以及IOC注解 IDEA项目实践——Spring当…

mysql 03.查询(重点)

先准备测试数据,代码如下: -- 创建数据库 DROP DATABASE IF EXISTS mydb; CREATE DATABASE mydb; USE mydb;-- 创建student表 CREATE TABLE student (sid CHAR(6),sname VARCHAR(50),age INT,gender VARCHAR(50) DEFAULT male );-- 向student表插入数据…

好用的安卓手机投屏到mac分享

工具推荐:scrcpy github地址:https://github.com/Genymobile/scrcpy/tree/master mac使用方式 安装环境,打开terminal,执行以下命令,没有brew的先安装brew brew install scrcpy brew install android-platform-too…

运营商三要素 API:构建安全高效的身份验证系统

当今数字化的世界中,身份验证是各行各业中至关重要的一环。为了保护用户的隐私和数据安全,企业需要寻求一种既安全可靠又高效便捷的身份验证方式。运营商三要素 API 应运而生,为构建安全高效的身份验证系统提供了有力的解决方案。 运营商三要…

【卷积神经网络】卷积,池化,全连接

随着计算机硬件的升级与性能的提高,运算量已不再是阻碍深度学习发展的难题。卷积神经网络(Convolution Neural Network,CNN)是深度学习中一项代表性的工作,CNN 是受人脑对图像的理解过程启发而提出的模型,其…

【C++学习手札】一文带你认识C++虚函数(内层剖析)

食用指南:本文在有C基础的情况下食用更佳 🍀本文前置知识: C初识继承 ♈️今日夜电波:No title —REOL 1:02 ━━━━━━️💟──────── 4:03 …

微服务中间件--微服务保护

微服务保护 微服务保护a.sentinelb.sentinel限流规则1) 流控模式1.a) 关联模式1.b) 链路模式 2) 流控效果2.a) 预热模式2.b) 排队等待 3) 热点参数限流 c.隔离和降级1) Feign整合Sentinel2) 线程隔离2.a) 线程隔离(舱壁模式) 3) 熔断降级3.a) 熔断策略-慢…

基于Servlet实现的管理系统(包含服务器源码+数据库)

资料下载链接 介绍 基于Servlet框架的管理系统 简洁版 ; 实现 登录 、 注册 、 增 、 删 、 改 、 查 ; 可继续完善增加前端、校验、其他功能等; 可作为 Servlet项目 开发练习基础模型; 课程设计 、 毕业设计 开发基础&…

java-垃圾回收与算法

垃圾回收与算法 1. 如何确定垃圾 1. 引用计数法 在 Java 中,引用和对象是有关联的。如果要操作对象则必须用引用进行。因此,很显然一个简单的办法是通过引用计数来判断一个对象是否可以回收。简单说,即一个对象如果没有任何与之关联的引用&…

基于YOLOv5n/s/m不同参数量级模型开发构建茶叶嫩芽检测识别模型,使用pruning剪枝技术来对模型进行轻量化处理,探索不同剪枝水平下模型性能影响【续】

这里主要是前一篇博文的后续内容,简单回顾一下:本文选取了n/s/m三款不同量级的模型来依次构建训练模型,所有的参数保持同样的设置,之后探索在不同剪枝处理操作下的性能影响。 在上一篇博文中保持30的剪枝程度得到的效果还是比较理…

Qt平滑弹出页面

目标功能&#xff1a; (1)按下btn&#xff0c;弹出绿色页面。 (2)按下btn2,绿色页面隐藏。 (3)按下左边余下的区域&#xff0c;绿色页面也隐藏。 (4)平滑地显示和隐藏 效果&#xff1a; form.h #ifndef FORM_H #define FORM_H#include <QWidget>namespace Ui { class…

如何将labelImg打包成exe

最近整理一下数据标注这块的内容&#xff0c;在目标检测和目标分割里面用的最多的标注工具labelimg&#xff0c;labelme labelimg主要用于目标检测领域制作自己的数据集&#xff0c;如&#xff1a;YOLO系列目标检测模型 labelme主要用于图像分割领域制作自己的数据集&#xf…

IDEA 设置为护眼的豆沙绿

代码区域设置成护眼色 先打开 IDEA 的设置界面&#xff0c;然后按照下图按顺序店了设置就可以了 这个时候&#xff0c;可以看到&#xff0c;只有代码区域别成了护眼色&#xff0c;其他地方还是白的刺眼&#xff0c;我们来一个一个的解决掉 左侧的文件页修改为护眼色 还是先…

WPF 界面结构化处理

文章目录 概要一、xaml界面结构化处理二、逻辑树与视觉树 概要 WPF 框架是开源的&#xff0c;但是不能跨平台&#xff0c;可以使用MAUI&#xff0c;这个框架可以跨平台&#xff0c;WPF源码可以在github上下载&#xff0c;下载地址&#xff1a;https://gitbub.com/dotnet/wpf。…

5G智能网关助力打造数字乡村物联网

乡村振兴&#xff0c;网络先行&#xff0c;信息通信技术赋能农业农村现代化发展的作用日益彰显&#xff0c;也成为实施乡村振兴战略的重要力量。 截止今年三月&#xff0c;我国5G网络已经覆盖全国所有地级市、县城城区及数万行政村&#xff0c;农村光纤平均下载速率超过100Mb/s…

每天一道leetcode:剑指 Offer 64. 求1+2+…+n(中等递归)

今日份题目&#xff1a; 求 12...n &#xff0c;要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句&#xff08;A?B:C&#xff09;。 示例1 输入: n 3 输出: 6 示例2 输入: n 9 输出: 45 提示 1 < n < 10000 题目思路 使用递归…