Linux文件结构与文件权限

news2024/11/25 12:47:00

基于centos了解Linux文件结构

了解一下文件类型

Linux采用的一切皆文件的思想,将硬件设备、软件等所有数据信息都以文件的形式呈现在用户面前,这就使得我们对计算机的管理更加方便。所以本篇文章会对Linux操作系统的文件结构和文件权限进行讲解。

首先我们键入到达~目录

    cd ~   

然后键入ll查看所有非隐藏文件,可以看到在每个文件最前方都有一个由10个字符构成的字符串,就以第一行为例-rw-------.,可以看到第一行的10字符的第一个字符是-,在Linux操作系统中,这个符号就代表着文件是一般文件,也就是我们日常配置、文本文件等这类文件。

在这里插入图片描述

除了一般文件以外,每个文件第一栏的第一个字符还可能出现以下几种情况:

  1. d:代表当前文件为文件夹
  2. l:代表当前文件为超连接文件
  3. b:该文件提供为提供给系统存取的设备,例如你计算机的硬盘所存储的数据内容,可能都会保存在这个类型文件中
  4. c:代表着连接到你计算机的一些硬件设备,例如鼠标、键盘等配置文件开头都是以c开头的

为了验证这一点,我们随意创建一个文件夹:

mkdir /tmp/dir

然后使用ll命令查看其文件属性:

ll /tmp/

可以看到我们创建的文件夹是以d打头的

在这里插入图片描述

上文还提到了一个b打头的文件,这个文件是提供系统存储的数据且可能硬盘也可能是其他存储设备的,这类型文件一般都在设备目录dev下,我们可以进入dev目录看到这些文件:

ll /dev/sda

在这里插入图片描述

而c打头的文件则是硬件设备,我们不妨键入 ll /dev查看一下,如下图所示的BUS总线,以及CPU等这些都是硬件设备:

在这里插入图片描述

同样的在上文中我们也有提到关于隐藏文件的概念,在Linux中隐藏文件大多以.开头,这些文件使用常规的ll、ls等命令是看不到的,必须使用al选项查看所有文件才能看到(补充一句a的意思就是all):

ls -al查看

于是在当前目录的所有文件列表下,我们看到了隐藏目录:

在这里插入图片描述

文件名的限制

在现如今的Linux,文件系统基本采取XFS,所以文件名长度限制基本是255byte以内,说通俗一点,你的文件要是以英文命名就可以起一个长度为255的文件名,若为汉字则长度大约是127。注意由于Linux命令中常会用到-以及一些特殊符号,所以文件命名应该尽量避免以下几个特殊符号:

* ? > < ; & ! [ ] | \ ' " ` ( ) { } -

树形目录结构

Linux的文件结构总的来说类似于一棵树,用户可以按照规范约定在相应的文件夹下存储文件,就例如在var目录下可以存储一些与系统的运作有关的文件例如程序日志文件、在tmp目录下存储一些临时文件等。
需要了解的是,无论是何种Linux系统,他的目录都会遵循一个标准,包括下图中的文件结构,而这个标准名为Filesystem Hierarchy Standard (FHS)

在这里插入图片描述

FHS规定文件的整体结构应该是这样的:

1. /:根目录,与开机系统有关
2. /usr(unix software resource):与软件的安装和执行有关
3. /var(variable):与系统的运作有关

首先介绍一个根目录/,它的子节点文件基本都是和系统开机相关、各种程序、库函数的文件夹,所以在根目录这一级是非常重要的,所以FHS希望后续使用Linux的时候尽量不要将用户的文件夹或者文件存储到这一层级以避免误操作到重要文件导致系统崩溃。

在这里插入图片描述

根目录下有个bin文件夹,我们日常使用Linux的时候都会用到lscattouchmkdir等基本操作命令都存放于bin目录下:

在这里插入图片描述

接下来是/boot,这个目录存放的基本都是Linux开机会用到配置文件,像Linux kerner常用到的文件名 vmlinuz就会存放在这个文件夹下

在这里插入图片描述

接下来是/dev,这个文件夹基本存放的都是硬件设备,我们都知道Linux主张一切皆文件,所以所有的鼠标、键盘、硬盘的设备信息都是存放在这个文件夹下:

在这里插入图片描述

/etc目录则是存放配置文件的地方,常见我们的用户文件/etc/passwd,以及密码文件/etc/shadow,还有系统文件/etc/rc等都会存放在这个目录下。
除此之根目录下还有一些文件夹如下所示,这里就不一一介绍了:

  1. mnt存放挂载相关。
  2. lib存放库函数相关、
  3. sbin存放开机、系统还原、修复等众多指令。
  4. tmp存储临时文件习惯。

我们再来聊聊FHS规范中一个命名比较特殊导致用户使用时常受到误导的文件夹/usr,很多人最初都会误以为这是user的缩写,其实这个单词是unix software resource的缩写,这个文件夹是FHS规定存放软件资源相关的文件夹,他们建议用户软件相关的资源尽可能都放到这个目录。

首先来看看/usr/bin目录,这个目录实质上就FHS希望用户能够将一般用户所能够的使用的指令都放到这个目录下,所以我们在日常软件安装时对应各种启动指令脚本都建议存放到这个位置。此外usrbin目录下还存放了系统指令的软连接,参见下图:

在这里插入图片描述

除此之外usr下还有3个常见的目录:
1./usr/lib与根目录的lib功能相同,存放的基本是lib目录下的软链接。
2. /usr/local/则是FHS希望用户将下载的软件都放到这个目录下统一管理
3. /usr/sbin同样也是将根目录的sbin目录下的指令软链接到此。

最后我们再来介绍一些/var,这个目录FHS认为应该存放那些经常发生变化的文件,例如日志,他们希望日志统一存放到/var/log下。/var/lib存放的则是会临时改变的库文件。而/var/lock存放的则是被某个程序锁定的文件,已确保其他程序不会同时使用到这个文件。

在这里插入图片描述

绝对路径和相对路径

绝对路径则是以根节点作为其实节点的文件搜寻办法,例如我们想到达tmp文件夹,如果使用绝对路径的方式则是

cd /tmp

假如我们在boot目录下,而tmp和他一样都属root的子节点,所以使用相对路径的方式是先退到root目录,然后再进入tmp文件夹,如下图,所以在boot目录下,我们进入tmp文件夹的命令为 cd ../tmp/:

在这里插入图片描述

演示结果参见下图:
在这里插入图片描述

注意:../代表着退到上一级,那么就会有这么一个指令./,代表当前目录,这个指令是干什么用的是,很简单,假如我们Linux中某个sh文件不在binsbin/usr/bin这样的目录下,Linux规定我们执行可执行sh文件文件时都必须标明./,例如我在tmp目录下有个执行脚本test,那么我在test目录下执行这个脚本的格式就必须是

sh ./test.sh

文件权限

权限对应角色

我们在随意一个目录下键入ll查看文件信息,如下图我们可以看到每个文件的第一栏除去第一个字符串代表着文件类型外,其余字符都会显示rwx-相关,其含义为:

  1. r代表读权限。
  2. w代表写权限。
  3. x代表执行权限。

在这里插入图片描述

我们以dir的文件描述为例,第一个字符d代表它是个文件夹,2-4代表当前所有者权限为读写执行都有,而5-7代表所属组权限,即这个文件所属的组所拥有的权限为读和执行,最后一行代表其他人的权限也是读和执行。

d   rwx   r-x     r-x.

todo

那什么又是所有者、所属组、其他人呢?还是以第一行为例,可以看到第3列为root,说明这个文件属于root的,root用户拥有读写执行权限。而第4列也为root,说明属于root组的用户拥有读写执行的权限。

假如此时有个名为xiaoming的用户进来,它属于xiaomingzu,那么对于这个dir文件夹而言,他就是other用户,他的权限就是第三列的读和执行权限了。

目录与文件对应权限的相似与区别

需要补充一点,在Linux系统下文件系统下,文件的可执行权限和文件夹的可执行权限是有所不同的。假如一个用户对文件夹只有读和写权限,那么他就无法进入到这个目录,如下所示,我们有root创建一个testDir,所以对于其他用户来说只有读和写权限。
注意一下笔者赋权的命令,这里我们需要了解一下Linux中r用4表示,w用2表示,x用1表示,所以766为(4+2+1)+(4+2)+(4+2)代表着所属者读写执行,所属组和其他都是读和执行

# 进入tmp目录
 cd /tmp/
 # 创建testDir文件夹
mkdir testDir
# 设置这个文件夹 所属者有所有权限 所属组和其他用户只有读和写权限
chmod 766 testDir/

所以当笔者以其他用户登录(这个用户不是所属者root也不属于root组)时,就会报出没有权限的问题

在这里插入图片描述
这时候我们希望其他用户可以有执行的权限,要怎么做呢?很简单,我们也可以参考上面的数学公司对其他用户增加执行权限,即

chmod 777 /test/testDir

当然我们也可以单独对其他用户增加一个可执行权限,命令如下所示,可以看到其他为o,增加一个可执行权限为+x。同理可知若是所者为u,所属组为g。增加权限用+,减去权限用-,赋值权限用=

chmod o+x testDir/

所以我们若希望所属者赋值为所有权限则是u=rwx,所属组和其他都希望是读和执行,那就是go合在一起写,并=rx,如下所示:

 chmod u=rwx,go=rx testDir/

当然有时候你希望这个文件改变所属组,你也可以这么做

# 将文件夹testDir所属组改为zhangshiyu
chgrp zhangshiyu testDir/

此时所属组就会改变了

在这里插入图片描述

若你希望改变所有者则可以

chown zhangshiyu testDir/

此时所有者就改变了

在这里插入图片描述
当然,若你希望所有者和所属组都能改变则可以

# 将testDir所有者改为冒号左边的root,将所属组改为冒号右边的root
chown root:root testDir/

在这里插入图片描述

回到原题,为了方便演示文件和文件夹可执行权限的区别,我们将文件夹所属者和所属者都改为root,并且所有用户都具备所有权限

chmod 777 testDir/
chown root:root   testDir/

在这里插入图片描述

然后进去该文件夹,创建一个file1的文件,权限设置为700,即可所属者才有权限,所属组和其他没有任何权限

cd testDir/
 touch file1
 chmod 700 file1

使用ll -d查看testDir文件夹以及文件夹下对应的文件file1的权限,可以发现对于其他用户而言文件夹有所有的权限,而文件没有任何权限

ll -d  /tmp/testDir/ /tmp/testDir/file1

在这里插入图片描述

所以我们使用别的账户可以进入路径,但是无法读写该文件如下图
在这里插入图片描述

vim file1

在这里插入图片描述
但是以为其他用户拥有file文件的目录testDir的执行权限,所以它可以将这个文件删除。所以得出结论,文件夹的可执行权限意为着可以删除这个文件夹下所有的文件,但是并不意味着可以修改或者读取文件夹下文件的内容。
这种情况我们完全可以将文件夹testDir看作一个抽屉,任何人对其都有任何权限。此时root往里面放了一个小保险盒,读写权限只有root有。所以其他用户是无法打开或者修改盒子中的内容。但是他具有抽屉(testDir)的所有权限,所以他可以将这个保险盒扔掉。

在这里插入图片描述

以下这张表格就说明了操作文件夹下某些文件所需的最低权限,可以看到像删除、复制等这些无需读取文件内容的操作,文件所对应的文件夹甚至不一定需要rw的权限。用上面抽屉和文件的例子来说,我们删除完完全全可以看不到抽屉内部文件的具体的内容,复制文件不需要知道文件夹内有什么文件,我们完完全全可以瞎摸出来放到别的目录。
在这里插入图片描述

文件目录与默认权限以及隐藏权限

补充:如果我们希望创建的文件默认umask为0022
导致创建的文件权限为 644
创建的文件夹权限为 755

如果我们将umask改为0000

umask 0000

创建的文件权限就是 666
创建的文件夹就是 777

参考文献

鸟哥的Linux私房菜

循序渐进Linux(第2版)

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

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

相关文章

新项目决定用 JDK 17了

大家好&#xff0c;我是风筝。 最近在调研 JDK 17&#xff0c;并且试着将之前的一个小项目升级了一下&#xff0c;在测试环境跑了一段时间。最终&#xff0c;决定了&#xff0c;新项目要采用 JDK 17 了。 JDK 1.8&#xff1a;“不是说好了&#xff0c;他发任他发&#xff0c;…

uni-app 设置tabBar的setTabBarBadge购物车/消息等角标

目录 一、效果二、代码实现二、全部代码1.index.vue2.cart.vue 三、真实案例参考最后 一、效果 二、代码实现 只要使用uni.setTabBarBadge和uni.removeTabBarBadge来进行对红点的设置和移除。 主要代码&#xff1a; //设置红点 uni.setTabBarBadge({index: 1, // 底部菜单栏…

urllib 的 get 请求和 post 请求(二)

目录 一、爬取网页、图片视频 二、请求对象的定制 三、get请求的urlencode方法 四、post 请求英文翻译 一、爬取网页、图片视频 目标&#xff1a;下载数据 知识点&#xff1a;urllib.request.urlretrieve()下载 使用urllib下载网页、图片和视频 下载网页&#xff1a; #…

【动态规划】LeetCode2111:使数组 K 递增的最少操作次数

作者推荐 [二分查找]LeetCode2040:两个有序数组的第 K 小乘积 本文涉及的基础知识点 二分查找算法合集 分组 动态规划 题目 给你一个下标从 0 开始包含 n 个正整数的数组 arr &#xff0c;和一个正整数 k 。 如果对于每个满足 k < i < n-1 的下标 i &#xff0c;都有…

项目进度已经落后了,项目经理该怎么办?

进度管理是项目管理的核心工作之一&#xff0c;通过可续的进度计划与控制管理&#xff0c;最终实现项目按照目标交付。 进度管理的两大核心工作&#xff1a;计划制定、过程管控。 项目管理过程中难免会遇到工作进度和计划不一致的情况&#xff0c;有效管理项目进度&#xff…

数字工厂时代,如何实现3D数据访问与发布、WEB大模型可视化?

Tech Soft 3D的HOOPS 3D CAD SDK为现代工厂工作流程奠定了基础&#xff0c;通过最快、最准确的CAD数据访问和动态3D可视化支持数字孪生、机器人仿真、设计、流程和规划、IIoT和操作辅助应用程序。 本文将和您详细探讨。如何利用HOOPS技术来增强您的应用程序。 HOOPS_HOOPS试…

INFINI Console 与华为鲲鹏完成产品兼容互认证

何为华为鲲鹏认证 华为鲲鹏认证是华为云围绕鲲鹏云服务&#xff08;含公有云、私有云、混合云、桌面云&#xff09;推出的一项合作伙伴计划&#xff0c;旨在为构建持续发展、合作共赢的鲲鹏生态圈&#xff0c;通过整合华为的技术、品牌资源&#xff0c;与合作伙伴共享商机和利…

【Verilog】 FPGA程序设计---Verilog基础知识

目录 Verilog 和 VHDL 区别 Verilog 和 C 的区别 Verilog 基础知识 1 Verilog 的逻辑值 2 Verilog 的标识符 3 Verilog 的数字进制格式 4 Verilog 的数据类型 1) 寄存器类型 2) 线网类型 3) 参数类型 5 Verilog 的运算符 1) 算术运算符 2) 关系运算…

GOLAND搭建GIN框架以及基础框架搭建

创建GO环境文件夹 终端输入安装GIN go get -u github.com/gin-gonic/gin如果遇到超时错误 package golang.org/x/net/html: unrecognized import path "golang.org/x/net/html": https fetch: Get "https://golang.org/x/net/html?go-get1": dial tcp …

设计模式之GoF23介绍

深入探讨设计模式&#xff1a;构建可维护、可扩展的软件架构 一、设计模式的背景1.1 什么是设计模式1.2 设计模式的历史 二、设计模式的分类2.1 创建型模式2.2 结构型模式2.3 行为型模式 三、七大设计原则四、设计模式关系结论 :rocket: :rocket: :rocket: 在软件开发领域&…

关于大模型在文本分类上的尝试

文章目录 前言所做的尝试总结前言 总共25个类别,在BERT上的效果是48%,数据存在不平衡的情况,训练数据分布如下: 训练数据不多,4000左右 所做的尝试 1、基于 Qwen-14b-base 做Lora SFT,Loss忘记记录 准确率在68%左右 Lora配置 class LoraArguments:lora_r: int = 64…

马尔科夫决策过程(Markov Decision Process)揭秘

RL基本框架、MDP概念 MDP是强化学习的基础。MDP能建模一系列真实世界的问题&#xff0c;它在形式上描述了强化学习的框架。RL的交互过程就是通过MDP表示的。RL中Agent对Environment做出一个动作&#xff08;Action&#xff09;&#xff0c;Environment给Agent一个反馈&#xff…

leetcode:LCR 122. 路径加密(python3解法)

难度&#xff1a;简单 假定一段路径记作字符串 path&#xff0c;其中以 "." 作为分隔符。现需将路径加密&#xff0c;加密方法为将 path 中的分隔符替换为空格 " "&#xff0c;请返回加密后的字符串。 示例 1&#xff1a; 输入&#xff1a;path "a.a…

「Verilog学习笔记」无占空比要求的奇数分频

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 timescale 1ns/1nsmodule odd_div ( input wire rst ,input wire clk_in,output wire clk_out5 ); //*************code***********//reg [1:0] data ;reg […

在耳机心率血氧健康检测中应用的穿戴心率血氧接收芯片

时代快速发展的今天&#xff0c;随着生活节奏的加快&#xff0c;工作压力的加大&#xff0c;越来越多的消费者开始关注到自身身体健康&#xff0c;加班熬夜生活不规律&#xff0c;很容易让我们的身体处于亚健康的状态&#xff0c;而心率和体温的变化&#xff0c;就能反应我们身…

Python源码30:海龟画图turtle画紫色的小熊

turtle模块是一个Python的标准库之一&#xff0c;它提供了一个基于Turtle graphics的绘图库。Turtle graphics是一种流行的绘图方式&#xff0c;它通过控制一个小海龟在屏幕上移动来绘制图形。 turtle模块可以让您轻松地创建和控制海龟图形&#xff0c;从而帮助您学习Python编…

预览控制;预见控制;预测控制;预观控制(preview control)

预演控制&#xff08;preview control&#xff09;作为一种新兴的控制方法&#xff0c;首次在轮式车辆中被提出。 参考文献&#xff1a; https://www.sciencedirect.com/science/article/pii/S0016003219300390https://www.sciencedirect.com/science/article/pii/S0016003219…

企企通供应链专家:拥抱智能化趋势,企业如何打造智慧供应链形成竞争优势?

智能时代&#xff0c;数字生产力正在逐步成为推动经济发展和社会进步的核心引擎。随着互联网技术的不断创新与发展&#xff0c;以5G、云计算、人工智能等数字技术为代表的先进生产工具&#xff0c;其价值和潜力日益凸显&#xff0c;智能化也逐渐成为企业未来竞争高地之一。 近日…

数字化转型如何落地?_光点科技

数字化转型是现代企业发展的关键环节&#xff0c;它不仅仅是技术的升级&#xff0c;更是企业文化、运营模式和市场战略的全面革新。一个成功的数字化转型能够为企业带来更高效率、更好的客户体验和更强的市场竞争力。那么&#xff0c;数字化转型如何落地呢&#xff1f; 确定转型…

医院预约挂号平台的设计与实现

摘 要 网络的空前发展给人们的工作和生活带来了极大的便利&#xff0c;信息技术已成为节约运营成本、提高工作效率的首选。相比之下&#xff0c;国内相当多的中小医院在医院预约工作中的手工工作比较保守&#xff0c;数据查询和存储成本都很高&#xff0c;但效率很低。为了使医…