Shell命令与Linux操作系统:深入理解其原理和功能(2/2)

 

在当今数字化时代,操作系统的安全性和稳定性对于个人用户和企业都至关重要。Linux,作为一个广泛使用的操作系统,其强大的文件权限系统是保护系统安全的核心机制之一。无论是在服务器管理、软件开发还是日常使用中,有效地管理和理解Linux的文件权限对于保障系统的安全和性能至关重要。

Linux文件权限系统的设计思想与Windows等其他操作系统有显著不同。它基于精细的权限控制机制,允许用户对文件和目录进行详尽的访问控制。这种灵活性和精确性使得Linux系统能够在多用户环境中提供高度的安全保障。

然而,Linux文件权限的复杂性也带来了一定的学习挑战。新手用户和甚至一些经验丰富的用户也可能在理解和应用这些权限设置上遇到困难。错误的权限设置可能导致安全漏洞,或阻碍用户有效地执行日常任务。

本文旨在提供一个全面且易于理解的Linux文件权限系统指南。我们将从最基本的文件类型和权限字符讲起,详细解释权限的结构和修改方法,并探讨目录权限的特殊情况及粘滞位的概念。无论你是Linux的新手还是希望深化理解的资深用户,这篇文章都将是你宝贵的资源。

通过这篇文章,我们希望使读者能够更加自信和有效地在Linux环境下管理文件权限,从而提升整个系统的安全性和效率。

基本概念

文件类型和权限

  • 文件类型:Linux中文件类型用单个字符表示,常见的有-(普通文件)和d(目录文件)。
  • 权限字符:Linux文件权限通过r(读)、w(写)、x(执行)三种基本权限表示,这九个字符分为三组,分别代表文件的拥有者(owner)、所属组(group)和其他用户(others)。

权限的结构

例如,rw-rw-r--表示文件的拥有者和所属组用户拥有读写权限,而其他用户只有读权限。

首先我们在每个文件开头都可以看到这样的字符

drwxrwxr-x    或    -rw-rw-r -- 

 其实我们数一下就可以知道这是10个字符 而开头只会有两种类型   -   和  d

这就涉及到文件的类型   -  :普通文件   d: 目录文件

那么剩下就有就个字符  文件的权限属性一般有三种

这九个字符分为三部分,分别是:拥有者,所属组, other

所以可以得出  权限 = 用户角色+文件权限属性

 我们每三个一组,拿上图举例: 去掉开头的-后 还剩余九个字符 为 rw-rw-r--  

33为一组,我们先看第一组,rw-   

第一个字符:是否具有读权限

第二个字符:是否具有写权限

第三个字符:是否具有可执行权限

所以他代表拥有者只有读和写的功能,不包括可执行权限

接下来我们从四方面进行讲解

权限修改方法

快速掌握修改权限的方法

  1. 使用chmod命令:这是修改文件访问权限最常用的方法。
    • 基本格式:chmod [参数] 权限 文件名
    • 用户表示符:u(拥有者)、g(所属组)、o(其他用户)、a(所有用户)
    • 权限操作:+(增加权限)、-(取消权限)、=(设置特定权限)

     2.  使用chgrp修改所属组

  • 基本格式:chgrp [参数] 用户组名 文件名

功能: 设置文件的访问权限
格式: chmod [ 参数 ] 权限 文件名
常用选项:
R -> 递归修改目录文件的权限
说明:只有文件的拥有者和 root 才可以改变文件的权限
chmod
① 用户表示符 +/-= 权限字符
+: 向权限范围增加权限代号所表示的权限
-: 向权限范围取消权限代号所表示的权限
=: 向权限范围赋予权限代号所表示的权限
用户符号:  
u :拥有者
g :拥有者同组用
o :其它用户
a :所有用户

一个文件的权限,谁能修改?

a:文件的拥有者

b:root

首先我们修改user的权限

经过修改后,r权限已经被移除  同理 用 + 或  - 就可以修改 所属组是  g + 或 g -  

other就是  o+  或 o-

若要同时修改,在u-后输入,分隔即可

 给所有人加上可以用 a  代表all

  

2.文件类型和权限区分

当我们关掉所有权限后,发现任何操作都会显示 Permission denied  权限被拒绝

  

可如果我们切换到root,可以发现,root相对于这个文件是other的身份,但是他可以执行任何操作

所以我们可以得出:root账户不受权限约束的!

 权限存在的意义:

保证普通用户的文件的一般安全性

我们继续研究还可以发现:linux不同于windows的是linux对用户身份进行识别只识别一次,当他识别成功用户与文件拥有者时,就不会继续匹配了。所以也就是说,即使我们的user在组里有可读写权限,但user本身没有rw权限,那么最终他也不会拥有读写权限,而windows恰恰相反,win的ntfs权限是叠加的。

我们还可以通过修改拥有者和修改所属组来达到我们想要的权限预期效果

b)chown
功能 :修改文件的拥有者
格式 chown [ 参数 ] 用户名 文件名
实例:
 chown user1 f1
chown -R user1 filegroup1
c)chgrp
功能 :修改文件或目录的所属组
格式 chgrp [ 参数 ] 用户组名 文件名
常用选项 -R 递归修改文件或目录的所属组
实例chgrp users /abc/f2

3.修改权限的第二套做法

                

sudo提权,给别人,但我们一般运行不了 ,建议直接使用su 切换到root 再赋予权限

但为什么没有修改other的指令呢?因为不需要,因为我们将user改了 group改了 other自然而然就变了

 八进制修改法

chmod 664 /home/abc.txt  比如批量给所有人赋予所有权限就是 chmod 777 111.txt

4.文件类型

Windows是如何区分文件类型的呢?

:通过后缀名

而linux不通过后缀区分文件类型(不是说linux不用后缀名)

当我们写了一份a,c后,我们可以发现,我们后缀无论改成什么都能运行 ,,/a/exe  ./a.txt   ./a.c都能运行

 那我么用什么来区分呢?

:ls-l 第一个属性列

-代表普通文件,文本文件,可执行程序,库等都叫做普通文件

d:目录文件

可是如果用gcc编译发现更改后缀就无法编译 linux不区分文件类型不代表linux工具不用后缀

我们在linux对于文件后缀的态度:

可以使用!

如何理解X权限?

可执行权限 ---    可执行

能执行 = 具有可执行权限+本身是一个可执行文件

所以仅仅具有可执行权限不代表能执行。

可执行不等于能执行

唐钮不等式秒了


目录的权限

可执行权限: 如果目录没有可执行权限, 则无法cd到目录中

可读权限 : 如果目录没有可读权限 , 则无法用 ls 等命令查看目录中的文件内容 .
可写权限 : 如果目录没有可写权限 , 则无法在目录中创建文件 , 也无法在目录中删除文件 .
umask:权限掩码
于是 , 问题来了 ~~
换句话来讲 , 就是只要用户具有目录的写权限 , 用户就可以删除目录中的文件 , 而不论这个用户是否有这个文件的写权限.
这好像不太科学啊 , 我张三创建的一个文件 , 凭什么被你李四可以删掉 ?
[root@localhost ~]# chmod 0777 /home/
[root@localhost ~]# ls /home/ -ld 
drwxrwxrwx. 3 root root 4096 9月 19 15:58 /home/
[root@localhost ~]# touch /home/root.c
[root@localhost ~]# ls -l /home/
总用量 4
-rw-r--r--. 1 root root 0 9月 19 15:58 abc.c
drwxr-xr-x. 27 litao litao 4096 9月 19 15:53 litao
-rw-r--r--. 1 root root 0 9月 19 15:59 root.c
[root@localhost ~]# su - litao
[litao@localhost ~]$ rm /home/root.c #litao可以删除root创建的文件
rm:是否删除有写保护的普通空文件 "/home/root.c"?y
[litao@localhost ~]$ exit 
logout
为了解决这个不科学的问题 , Linux 引入了粘滞位的概念 
[root@localhost ~]# chmod +t /home/ # 加上粘滞位
[root@localhost ~]# ls -ld /home/
drwxrwxrwt. 3 root root 4096 9月 19 16:00 /home/
[root@localhost ~]# su - litao
[litao@localhost ~]$ rm /home/abc.c #litao不能删除别人的文件
rm:是否删除有写保护的普通空文件 "/home/abc.c"?y
rm: 无法删除"/home/abc.c": 不允许的操作
当一个目录被设置为 " 粘滞位 "( chmod +t), 则该目录下的文件只能由
一、超级管理员删除
二、该目录的所有者删除
三、该文件的所有者删除
关于权限的总结
目录的可执行权限是表示你可否在目录下执行命令。
如果目录没有 -x 权限,则无法对目录执行任何命令,甚至无法 cd 进入目 , 即使目录仍然有 -r 读权限(这
个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)
而如果目录具有 -x 权限,但没有 -r 权限,则用户可以执行命令,可以 cd 进入目录。但由于没有目录的读权限所以在目录下,即使可以执行ls 命令,但仍然没有权限读出目录下的文档

通过本文的探讨,我们得以深入了解Linux文件权限系统的核心原理和实践应用。这一系统不仅是Linux安全架构的基石,也是其灵活性和强大功能的源泉。理解和妥善运用这些权限机制,对于确保Linux环境中的数据安全和系统稳定性至关重要。

我们探讨了从文件类型的辨识、权限的基本结构,到权限修改方法的多样性,以及目录权限和粘滞位等高级概念。这些知识的掌握,将使我们在日常的Linux使用中更加得心应手,无论是进行系统管理、软件开发还是处理日常任务。

Linux文件权限的学习和应用是一个持续的过程。本文仅仅是这一广阔领域的入门导引。随着技术的不断进步和个人经验的积累,总会有新的挑战和发现。因此,我们鼓励读者持续学习,不断探索Linux这个强大工具的更多可能。

最后,我们希望这篇文章能够成为你在Linux文件权限管理旅程中的一盏明灯,指引你顺利地驾驭Linux系统,发挥其最大的潜力。记住,掌握Linux文件权限,就是掌握了保护你的系统和数据的关键

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MongoDB文档操作

3.3 文档操作 3.1 文档介绍 文档的数据结构和 JSON 基本一样。 所有存储在集合中的数据都是 BSON 格式。 BSON 是一种类似 JSON 的二进制形式的存储格式,是 Binary JSON 的简称。 文档是一组键值(key-value)对(即 BSON),一个简单的文档例子如下&…

输入日期,计算当前日期是这一年中的第几天(涉及闰年问题)

一、应用到的知识:闰年问题,数组,for循环,命令行参数,atoi函数 1. 闰年问题: 闰年 是指该年有366日,即较平常年份多出一日。每400年就会有一次闰年;或者年份是4的倍数,但…

【后端】拷贝数据字典

文章目录 前言逻辑前端创建复制弹窗引用复制弹窗打开复制弹窗后端定义【复制】控制器定义服务接口实现服务接口前言 一开始在设计单据状态的时候,是考虑了将所有单据状态的字典项全部规划好啦,但是实际使用,可能不同的业务其单据的字典项内容不同,例如客户要求的到货单单据…

Flowable-升级为7.0.0.M2-第二节

目录 替换变化的类和配置把javax.servlet 替换为 jakarta.servlet修改redis的配置配置logging.level.org.springframework.boot.autoconfigureerror避免影响视听 替换变化的类和配置 把javax.servlet 替换为 jakarta.servlet import javax.servlet.ServletContext; import ja…

【Qt-容器类】

Qt编程指南 ■ 顺序容器类■ QList■ QVector■ QLinkedList■ QStack■ QQueue ■ 关联容器类■ QSet■ QMap■ QMultiMap■ QHash■ QMultiHash ■ 顺序容器类 ■ QList QList 比较常用的容器类,以数组列表的形式实现,在前、后添加数据非常快。以下为…

SpringBoot操作world格式的文件与pdf格式的文件互转

文章目录 一、SpringBoot如何将pdf格式的文件流转换成world格式的文件流二、SpringBoot如何将world格式的文件转换成pdf格式的文件 一、SpringBoot如何将pdf格式的文件流转换成world格式的文件流 ​ 将 PDF 格式的文件流转换成 Word 格式的文件流是一个比较复杂的任务&#xf…

【Linux基础】9. 用户管理

文章目录 【 1. 用户基本管理 】1.1 useradd 添加用户1.2 passwd 更改用户密码1.3 su 切换用户1.4 userdel 删除用户 【 2. 用户的组 】2.1 more 查看系统所有组2.2 显示用户的组2.3 更改用户的组 【 3. 环境变量 】 【 1. 用户基本管理 】 1.1 useradd 添加用户 全称作用use…

【教程】使用ipagurd打包与混淆Cocos2d-x的Lua脚本

文章目录 摘要引言正文1. 准备工作2. 使用ipaguard处理Lua文件3. 运行ipagurd进行混淆代码加密具体步骤测试和配置阶段IPA 重签名操作步骤4. IPA重签名与发布 总结 摘要 本文将介绍如何使用ipagurd工具对Cocos2d-x中的Lua脚本进行打包与混淆,以及在iOS应用开发中的…

tekton 发布 kubernetes 应用

tekton 发布 kubernetes 应用 基于Kubernetes 服务部署 Tekton Pipeline 实例,部署完成后使用tekton来完成源码拉取、应用打包、镜像推送和应用部署。 本文实现一个 golang-helloworld 项目 CI/CD 的完整流程,具体包括以下步骤: 从 gitee…

css 超过一行/多行显示省略号... - 附示例

效果 1、超过一行 2、超过多行 - 以两行为例 二、示例代码 1、超过一行 margin: 20px; width: 50px; border: 1px solid red; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; 2、超过多行 - 以两行为例 margin: 20px; width: 50px; border: 1px solid r…

【日常聊聊】年度总结

🍎个人博客:个人主页 🏆个人专栏:日常聊聊 ⛳️ 功不唐捐,玉汝于成 目录 前言 博客创作的初衷: 学到的技能: Java知识的深度掌握: Spring框架的应用和实践: 前端技…

Unity so文件的问题

文章目录 问题在面板上无法显示子节点如何保存继承于so的类必须放置在单个脚本so类文件名和类名要一致 问题 最近自己在写一个行为树出现一些问题记录一下首先NodeTree肯定是so文件但是node可以是单纯的类,也可以是so。后来我发现只能是so 在面板上无法显示 第一…

linux 网络工具(二)

linux 网络工具 1. ip命令簇4.1 address4.2 link4.3 route4.4 rule 2. 其他常用命令2.1 ifup/ifdown2.2 配置主机名2.3 设置DNS服务器指向2.4 配置域名解析2.5 ss2.6 路由相关配置文件2.7 查看机器可用端口2.8 traceroute2.9 dhclient 1. ip命令簇 Linux的ip命令和ifconfig类似…

asp.net core webapi AutoMapper使用

1.AutoMapper介绍: AutoMapper是一个.NET库,用于简化对象之间的映射。它可以帮助开发人员在不同类型之间进行自动转换,从而减少重复的手动映射代码。 使用AutoMapper,开发人员可以定义映射规则,然后该库会自动执行对…

Mybatis-Plus基础之Mapper增删改

文章目录 一、普通增删改普通新增普通删除根据 entity 条件,删除记录根据 ID 批量删除根据 ID 删除根据 columnMap 条件,删除记录 普通修改根据 whereWrapper 条件,更新记录根据 ID 修改 二、insert ID 主键回填三、条件删除:使用…

【C语言学习疑难杂症】第12期:如何从汇编角度深入理解y = (*--p)++这行代码(易懂版)

对于如下代码,思考一下输出结果是什么? int a[] = {5, 8, 7, 6, 2, 7, 3}; int y, *p = &a[1]; y = (*--p)++; printf("%d ",y); printf("%d",a[0]); 这个代码看似简单,但是在“y = (*--p)++;”这行代码里,编译器做了很多工作。 我们在vs2022的…

系列十七(面试)、请你谈谈RocketMQ的消息丢失问题

一、RocketMQ的消息丢失问题 1.1、概述 生产环境中为了保证服务的高可用,一般情况下都是采用集群的方式,RocketMQ也不例外,另外现在企业级的开发基本都是分布式微服务的模式,这就存在着跨网络传输数据的问题,而网络传…

促进软件开发团队创新的方法和团队协作原则

在迅速发展的科技领域,创新成为软件开发团队不可或缺的一部分。为了在竞争激烈的市场中保持竞争力,团队需要采用创新的方法,并建立一种积极的团队协作文化。本文将探讨一些促进软件开发团队创新的方法和团队协作原则。 1. 鼓励创意和实验 为团…

qt中实现鼠标拖动一张图片到qt控件内,图片自动在控件中展示

很多电脑软件都有鼠标拖动一张图片或者拖动一个文件到软件的指定区域内,就可以自动在软件中显示图片内容或者文件内容。qt中也可以这样实现。 本文介绍两种方法: 1、只可以以非管理员的身份运行软件时,才可以实现上述功能。 mainwindow.h#…

orangepi--开发板配置网络SSH登录

常用指令: ifconfig-------------------------------------查看网络地址 sudo passwd orangepi-------------------------改密码 nmcli dev wifi-------------------------------查看wifi nmcli dev wifi connect xx password xx--------连接网络 ip addr show wla…