【Linux系统编程】第八弹---权限管理操作(中)

  ✨个人主页: 熬夜学编程的小林

💗系列专栏: 【C语言详解】 【数据结构详解】【C++详解】【Linux系统编程】

目录

1、修改文件权限的做法(二)

2、文件类型

3、可执行权限

4、创建文件/目录的默认权限

4.1、权限掩码

总结


前面一弹我们学习了用chmod+-来修改权限与有无权限的表示,这一弹再学习一种修改权限的方法与跟更多的权限知识。

1、修改文件权限的做法(二)

在第六弹我们学习了权限用八进制的表示方法,此处我们也可以通过八进制的方式来修改权限。

语法:

chmod 八进制数字 文件名   

注意:八进制数字由三个数组成,第一个代表拥有者权限,第二个代表所属组权限,第三个代表其他用户权限(上图为详细权限的八进制数)。

[lin@VMCentos7 ~]$ ll
----rwx--- 1 lin lin 12 Mar 27 19:51 1.txt
[lin@VMCentos7 ~]$ chmod 000 1.txt  # 将1.txt文件均改为无读写执行权限
[lin@VMCentos7 ~]$ ll
---------- 1 lin lin 12 Mar 27 19:51 1.txt
[lin@VMCentos7 ~]$ chmod 777 1.txt  # 将1.txt文件均改为有读写执行权限
[lin@VMCentos7 ~]$ ll
-rwxrwxrwx 1 lin lin 12 Mar 27 19:51 1.txt
[lin@VMCentos7 ~]$ chmod 544 1.txt  # 拥有者读执行权限 所属组读权限 其他用户读权限
[lin@VMCentos7 ~]$ ll
-r-xr--r-- 1 lin lin 12 Mar 27 19:51 1.txt

2、文件类型

我们知道Windows中是通过文件后缀名来区分文件类型的,可是Linux中不通过文件后缀名来区分文件类型(不代表不用后缀),那Linux中是如何区分文件类型的呢?Linux中常见的文件类型有哪些呢?

Linux中通过文件属性的第一位区分文件类型。常见的文件类型如下,此处我们通过命令来进一步验证。

d:文件夹
-:普通文件
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)
s:套接口文件

[root@VMCentos7 lesson1]# touch file.txt # 创建一个普通文件(-)
[root@VMCentos7 lesson1]# mkdir dir      # 创建一个文件夹(d)
[root@VMCentos7 lesson1]# ll             # 查看当前目录文件详细信息
drwxr-xr-x 2 root root 4096 Mar 28 21:22 dir
-rw-r--r-- 1 root root    0 Mar 28 21:22 file.txt
[root@VMCentos7 lesson1]# ll /dev/vda    # 查看块设备文件
brw-rw---- 1 root disk 253, 0 Mar 20 23:33 /dev/vda
[root@VMCentos7 lesson1]# ll /dev/pts    # 查看字符设备文件
crw--w---- 1 root tty  136, 0 Mar 28 21:24 0
c--------- 1 root root   5, 2 Mar 20 23:28 ptmx
[root@VMCentos7 lesson1]# mkfifo pipe    # 创建一个管道文件
[root@VMCentos7 lesson1]# ll
drwxr-xr-x 2 root root 4096 Mar 28 21:22 dir
-rw-r--r-- 1 root root    0 Mar 28 21:22 file.txt
prw-r--r-- 1 root root    0 Mar 28 21:25 pipe
[root@VMCentos7 tmp]# ln -s /root/lesson1/file.txt a.link  # 创建一个软链接文件
[root@VMCentos7 tmp]# ll
total 0
lrwxrwxrwx 1 root root 22 Mar 28 21:30 a.link -> /root/lesson1/file.txt
[root@VMCentos7 tmp]# cat a.link # 查看软链接文件信息
hello Linux
[root@VMCentos7 tmp]# cd ../lesson1
[root@VMCentos7 lesson1]# cat file.txt
hello Linux

 补充知识:

1.ln 指令

功能:为某一个文件在另外一个位置建立一个同步的链接。

语法:ln [选项]… [-T]源文件 链接名 (第一种格式)

常见选项:-s, –symbolic 创建符号链接而不是硬链接,会出现 -> 符号。

2.mkfifo 指令

功能:创建一个允许进程进行通信的的命名管道文件。

语法:mkfifo [选项]… 文件名…

3、可执行权限

首先我们提出一个问题,我们进入目录需要什么权限???

我们直接通过命令进行验证!!!

[lin@VMCentos7 ~]$ mkdir dir  # 创建一个目录
[lin@VMCentos7 ~]$ ll
drwxrwxr-x 2 lin lin 4096 Mar 28 22:06 dir # 读写执行权限都有一定能进入目录
[lin@VMCentos7 ~]$ chmod u-w dir # 取消写权限
[lin@VMCentos7 ~]$ cd dir  # 能够进入目录
[lin@VMCentos7 dir]$ touch file.txt  # 取消写权限不能创建修改文件
touch: cannot touch 'file.txt': Permission denied

[lin@VMCentos7 dir]$ cd .. # 回退到上级目录
[lin@VMCentos7 ~]$ chmod u-r dir  # 再取消读权限
[lin@VMCentos7 ~]$ cd dir  # 依旧能够进入目录
[lin@VMCentos7 dir]$ ls
ls: cannot open directory '.': Permission denied # 取消读权限可以进入目录,但是不能读目录里面的信息

[lin@VMCentos7 dir]$ cd ..
[lin@VMCentos7 ~]$ chmod u-x dir  # 再取消执行权限
[lin@VMCentos7 ~]$ cd dir  # 不能进入目录
-bash: cd: dir: Permission denied

结论:

目录的w(写)权限:决定用户能否在指定的目录内新建,修改,删除文件。

目录的r(读)权限:决定用户能够查看指定目录的文件信息。

目录的x(执行)权限:决定用户能否进入目录。

了解了执行权限,那么可执行和执行权限的关系是什么呢???

同样的我们通过一个命令进行验证!!!

[lin@VMCentos7 ~]$ ls
test.c   # 首先创建一个test.c文件,在里面写入一些C语言代码
[lin@VMCentos7 ~]$ gcc test.c # 使用gcc进行编译,默认会生成a.out的可执行程序
[lin@VMCentos7 ~]$ ls
a.out   test.c            
[lin@VMCentos7 ~]$ ll
-rwxrwxr-x 1 lin lin 25792 Mar 28 22:24 a.out  # 有x权限
-rw-rw-r-- 1 lin lin    70 Mar 28 22:24 test.c
[lin@VMCentos7 ~]$ ./a.out # 运行该可执行程序
hello Linux
[lin@VMCentos7 ~]$ chmod u-x a.out # 取消x权限
[lin@VMCentos7 ~]$ ./a.out
-bash: ./a.out: Permission denied # 不能运行可执行程序

结论:

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

gcc编译文件使a.out是一个可执行文件,加上有可执行权限,因此可以运行此程序,二者缺一不可。 

4、创建文件/目录的默认权限

通过下面命令来查看文件/目录的默认权限

[lin@VMCentos7 ~]$ mkdir dir1
[lin@VMCentos7 ~]$ mkdir dir2
[lin@VMCentos7 ~]$ mkdir dir3
[lin@VMCentos7 ~]$ touch file1
[lin@VMCentos7 ~]$ touch file2
[lin@VMCentos7 ~]$ touch file3
[lin@VMCentos7 ~]$ ll
drwxrwxr-x 2 lin lin  4096 Mar 28 22:54 dir1
drwxrwxr-x 2 lin lin  4096 Mar 28 22:55 dir2
drwxrwxr-x 2 lin lin  4096 Mar 28 22:55 dir3
-rw-rw-r-- 1 lin lin     0 Mar 28 22:55 file1
-rw-rw-r-- 1 lin lin     0 Mar 28 22:55 file2
-rw-rw-r-- 1 lin lin     0 Mar 28 22:55 file3

通过上面命令我们可以看到,三个文件的默认权限是一样的(八进制表示为664),三个目录的默认权限(八进制表示为775)也是一样的,但是这是为什么呢? 

此处需要知道,Linux对于文件/目录有起始权限:

创建的普通文件,起始权限是:0666,去掉x的

创建的目录文件,起始权限是:0777,包含x的

4.1、权限掩码

umask 指令

功能:

查看或修改文件掩码

语法:

umask [权限值]    查看则输入umask  修改则在后面输入要修改的数值。

在创建文件的时候,要在起始权限中,过滤umask中出现的权限。

假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask

说明:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为0022,普通用户默认为0002(掩码不同也是正常的)。


举例:

[lin@VMCentos7 ~]$ umask
0002
[lin@VMCentos7 ~]$ ll
drwxrwxr-x 2 lin lin  4096 Mar 28 22:54 dir1
drwxrwxr-x 2 lin lin  4096 Mar 28 22:55 dir2
drwxrwxr-x 2 lin lin  4096 Mar 28 22:55 dir3
-rw-rw-r-- 1 lin lin     0 Mar 28 22:55 file1
-rw-rw-r-- 1 lin lin     0 Mar 28 22:55 file2
-rw-rw-r-- 1 lin lin     0 Mar 28 22:55 file3

[lin@VMCentos7 ~]$ umask 0111  # 修改掩码
[lin@VMCentos7 ~]$ umask       # 查看掩码
0111
[lin@VMCentos7 ~]$ touch file0
[lin@VMCentos7 ~]$ mkdir dir0
[lin@VMCentos7 ~]$ ll
drw-rw-rw- 2 lin lin  4096 Mar 28 23:18 dir0
-rw-rw-rw- 1 lin lin     0 Mar 28 23:17 file0

 通过上面的命令可以看到掩码改变之后,创建文件和目录的默认权限也跟着改变了,因此是umask影响我们的默认权限

总结


本篇博客就结束啦,谢谢大家的观看,如果公主少年们有好的建议可以留言喔,谢谢大家啦!

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

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

相关文章

CH4INRULZ-v1靶机练习实践报告

CH4INRULZ-v1靶机练习实践报告 1 安装靶机 靶机是.ova文件,需要用VirtualBox打开,但我习惯于使用VMWare,因此修改靶机文件,使其适用于VMWare打开。 解压ova文件,得到.ovf文件和.vmdk文件。直接用VMWare打开.ovf文件即可。 2 夺…

社区新零售:重构邻里生活圈,赋能美好未来

新时代的邻里脉动 在城市的肌理中,社区作为生活的基本单元,正经历一场由新零售引领的深刻变革。社区新零售,以其独特的商业模式、创新的技术手段和以人为本的服务理念,重新定义了社区商业的边界,重构了邻里生活的形态…

[C++ QT项目实战]----C++ QT系统实现多线程通信

前言 在C QT中,多线程通信原理主要涉及到信号与槽机制和事件循环机制。 1、信号与槽机制: 在QT中,信号与槽是一种用于对象间通信的机制。对象可以通过发送信号来通知其他对象,其他对象通过连接槽来接收信号并进行相应的处…

软件物料清单(SBOM)生成指南 .pdf

如今软件安全攻击技术手段不断升级,攻击数量显著增长。尤其是针对软件供应链的安全攻击,具有高隐秘性、追溯难的特点,对企业软件安全威胁极大。 同时,软件本身也在不断地更新迭代,软件内部成分安全性在持续变化浮动。…

web题目实操 5(备份文件和关于MD5($pass,true)注入的学习)

1.[ACTF2020 新生赛]BackupFile (1)打开页面后根据提示是备份文件 (2)查看源码发现啥都没有 (3)这里啊直接用工具扫描,可以扫描到一个文件名为:/index.php.bak的文件 (…

json解析大全

JSON解析案例1 将String转为JSONObject JSONObject res JSONObject.parseObject(result);获取documents JSONArray array res.getJSONObject("result").getJSONArray("documents");遍历JSONArray for (int i 0; i < array.size(); i) {JSONObject…

IDEA pom.xml依赖警告

IDEA中&#xff0c;有时 pom.xml 中会出现如下提示&#xff1a; IDEA 2022.1 升级了检测易受攻击的 Maven 和 Gradle 依赖项&#xff0c;并建议修正&#xff0c;通过插件 Package Checker 捆绑到 IDE 中。 这并不是引用错误&#xff0c;不用担心。如果实在强迫症不想看到这个提…

稳态视觉诱发电位 (SSVEP) 分类学习系列 (4) :Temporal-Spatial Transformer

稳态视觉诱发电位分类学习系列:Temporal-Spatial Transformer 0. 引言1. 主要贡献2. 提出的方法2.1 解码的主要步骤2.2 网络的主要结构 3. 结果和讨论3.1 在两个数据集下的分类效果3.2 与基线模型的比较3.3 消融实验3.4 t-SNE 可视化 4. 总结欢迎来稿 论文地址&#xff1a;http…

Hive——DDL(Data Definition Language)数据定义语句用法详解

1.数据库操作 1.1创建数据库 CREATE DATABASE [IF NOT EXISTS] database_name [COMMENT database_comment] [LOCATION hdfs_path] [WITH DBPROPERTIES (property_nameproperty_value, ...)];IF NOT EXISTS&#xff1a;可选参数&#xff0c;表示如果数据库已经存在&#xff0c…

软考-系统分析师-精要2

5、可行性分类 经济可行性&#xff1a;成本收益分析&#xff0c;包括建设成本、运行成本和项目建设后可能的经济收益。 技术可行性&#xff1a;技术风险分析&#xff0c;现有的技术能否支持系统目标的实现&#xff0c;现有资源&#xff08;员工&#xff0c;技术积累&#xff0…

GEM TSU Interface Details and IEEE 1588 Support

摘要&#xff1a;Xilinx ZNYQ ULTRASCALE MPSOC的GEM和1588的使用 对于FPGA来说&#xff0c;只需要勾选一些znyq的配置就行了&#xff0c;其余的都是软件的工作&#xff1b; 所有配置都勾选之后&#xff0c;最终会露出来的接口如下&#xff1a; GEM需要勾选的配置如下&#xf…

泰坦尼克号乘客生存情况预测分析2

泰坦尼克号乘客生存情况预测分析1 泰坦尼克号乘客生存情况预测分析2 泰坦尼克号乘客生存情况预测分析3 泰坦尼克号乘客生存情况预测分析总 背景描述 Titanic数据集在数据分析领域是十分经典的数据集&#xff0c;非常适合刚入门的小伙伴进行学习&#xff01; 泰坦尼克号轮船的…

AI新闻速递:揭秘本周科技界最热的AI创新与发展

兄弟朋友们&#xff0c;本周的AI领域又迎来了一系列激动人心的进展。在这个快速变化的时代&#xff0c;不会利用AI的人&#xff0c;就像在数字化高速公路上步行的旅行者&#xff0c;眼看着同行者驾驶着智能汽车绝尘而去&#xff0c;而自己却束手无策。 1. Adobe Firefly 3&…

【基础算法总结】双指针算法二

双指针 1.有效三角形的个数2.和为S的两个数字3.和为S的两个数字4.四数之和 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1f603; 1.有效三角形的个数…

深度学习运算:CUDA 编程简介

一、说明 如今&#xff0c;当我们谈论深度学习时&#xff0c;通常会将其实现与利用 GPU 来提高性能联系起来。GPU&#xff08;图形处理单元&#xff09;最初设计用于加速图像、2D 和 3D 图形的渲染。然而&#xff0c;由于它们能够执行许多并行操作&#xff0c;因此它们的实用性…

Python游戏工具包pygame

当你涉及游戏开发时&#xff0c;Pygame是一个强大的工具包&#xff0c;它提供了一系列功能丰富的模块和工具&#xff0c;让你可以轻松地创建各种类型的游戏。在本文中&#xff0c;我将介绍Pygame的依赖以及其详细属性&#xff0c;同时提供一些示例代码来说明其用法。 目录 一…

Github 2024-04-27 开源项目日报 Top9

根据Github Trendings的统计,今日(2024-04-27统计)共有9个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目6TypeScript项目2C++项目1JavaScript项目1Open-Sora: 构建自己的视频生成模型 创建周期:17 天开发语言:Python协议类型:Apache Lic…

嵌入式Linux学习——Linux常用命令(上)

Linux命令行介绍 Linux Shell 简介 Shell 的意思是“外壳”&#xff0c;在 Linux 中它是一个程序&#xff0c;比如/bin/sh、/bin/bash 等。它负责接收用户的输入&#xff0c;根据用户的输入找到其他程序并运行。比如我们输入“ ls”并回车时&#xff0c; shell 程序找到“ ls…

TinyML之Hello world----基于Arduino Nano 33 BLE Sense Rev2的呼吸灯

早期版本的Hello World 这应该是一个逼格比较高的呼吸灯了&#xff0c;用ML来实现呼吸灯功能&#xff0c;之前已经有大佬发过类似的文章&#xff1a;https://blog.csdn.net/weixin_45116099/article/details/126310816 当前版本的Hello World 这是一个ML的入门例程&#xff…

黑马程序员C++学习总结【进阶篇】

本阶段主要针对C泛型编程和STL技术做详细讲解&#xff0c;探讨C更深层的使用 黑马程序员C学习总结【基础篇】 黑马程序员C学习总结【核心篇】 黑马程序员C学习总结【进阶篇】 黑马程序员C学习总结【进阶篇】 一、模板1.函数模板&#xff08;1&#xff09;函数模板2种使用方式&a…