Linux基础学习--linux的文件权限与目录配置

linux的文件权限与目录配置

1.用户与用户组

在Linux中,每个文件都有相当多的属性和权限,其中最重要的概念就是文件的拥有者。

1.1 文件拥有者

Linux是一个多人多任务的系统,常常有多人共用一台主机的情况出现,因此在系统中可以设置多个用户及用户组,以此来保护每个人的隐私。
对于一个文件的拥有者,他如果设置只有自己才能看和修改这个文件,其他人就无法查看和修改它。

1.2 用户组

用户组一般在团队协作时被使用。在一个用户组中,我们既可以允许组内成员查看和修改自己的文件,以便于完成团队任务,也可以私有自己的文件,保护自己的隐私,并且可以设置组外的成员对组内的文件没有任何权限。而对于一个用户来说,它可以加入多个用户组。

1.3 其他人

一个用户(User)所属群组(Group),以及不属于用户组的其他人(Others)
一个用户的文件,同属于这个用户的用户组,组外的其他人对于这个文件都是陌生人。
在其中有个例外,就是root用户,root用户在Linux系统中拥有至高无上的权利,他可以任意查看修改任何文件,拥有相当万能和危险的力量。
Linux用户身份和用户组记录文件
Linux系统中,默认情况下,以下三个文件是Linux系统中账号,密码,用户组信息的集中地:
/etc/passwd文件中,所有系统上的账号和一般身份用户,以及root用户的相关信息,
/etc/shadow文件中:记录个人的密码。
/etc/group文件中:记录Linux中所有的组名。

2.linux文件权限概念

初学Linux时常常遇到的Permission deny问题,就是权限不足的意思。

2.1 Linux文件属性

在Linux中,使用命令ls可以查看当前目录下的所有文件。使用su -来切换到root用户,再使用ls -al就会得到以下形式:

-rw-r--r--.   2     root    root     1024     May 4 18:00 test.txt

【 权限 】【链接数】【拥有者】【用户组】【文件容量】【 修改日期 】【文件名】

  • 在学习时,建议使用root用户,可以用su -来切换到root用户,exit来退回到原用户。

  • 第一栏:代表这个文件的类型和权限 ‘’ -rw-r–r-- " 一共有十个字符

    • 第一个字符 代表文件是目录,文件,还是链接文件
      • 为【d】时是目录
      • 为【-】时是文件
      • 为【|】时是链接文件
      • 为【b】时是设备文件内可供存储的周边设备
      • 为【c】时是设备文件内的串行端口设备,如键盘鼠标
    • 接下来的字符中,三个为一组,均为【rwx】的组合,r表示可读(read),w表示可写(write),x表示可执行(execute),无对应权限时,就用-代替。
      • 第一组表示文件拥有者可具备权限
      • 第二组表示加入此用户组的账号的权限
      • 第三组表示非本人且没有加入本用户组的其他账号的权限
  • 第二栏:表示有多少文件名链接到此节点

    • 每个文件都会把它的权限和属性记录到文件系统的incode中
  • 第三栏:表示这个文件或目录的拥有者账号。

  • 第四栏:表示这个文件的所属用户组。

  • 第五栏:表示这个文件的大小,默认大小为Bytes。

  • 第六栏:表示文件的创建日期或者最近的修改日期。

  • 第七栏:表示这个文件的文件名。如果文件名前面有【.】,表示这个文件是隐藏文件。

2.2 修改文件属性与权限
chgrp:修改文件所属用户组

chgrp即是change group的缩写,它的一般用法为:

chgrp [-R] 新用户组名 目录名/文件名
  • -R:即进行递归(recursive)修改,连同子目录下的所有文件,目录都更新为这个用户组。
    其中新用户组名必须存在于/etc/group文件中。
chown:修改文件拥有者

chown即是change owner的缩写,它的一般用法为:

chown [-R] 新用户名[:用户组] 目录名/文件名
  • 即可以只写新用户名修改文件拥有者,也可以写新用户名:用户组名来修改文件拥有者和用户组。
    用户名必须存在于/etc/passwd文件中
chmod:修改文件权限

chmod来修改文件的权限,有两种设置方法,分别是数字和符号:

  • 数字类型修改文件权限
    Linux文件的基本权限有9个,分为三组:拥有者(owner),所属群组(group),其他人(others)。每组各有自己的读(read),写(write),执行(execute)权限。整体权限字符为【-rwxrwxrwx】。
    每种权限都可以用数字代替:
r:4
w:2
x:1

那么每种权限组合就可以用数字和表示出来:

rwx = 7
-wx = 3
...
r-- = 4
...
--- = 0

整体权限字符就可以直接用数字表示:

-rwxrw-r-- 表示为 764

就可以用chomd进行设置

chomd [-R] xyz 文件名或目录
  • 符号类型修改文件权限

在符号类型修改中:

对象操作符权限类型说明
u指拥有者(user)
g+r为用户组添加读权限
chmodo-w为其他人移除写权限
a=x设置全部用户仅有执行权限

具体命令为

chomd u=rwx,g+rw,o-r 文件名
2.3.目录和文件的权限意义

在linux系统中,文件权限对于数据安全非常重要,而权限对于目录和文件是不同的。

  • 权限对文件的重要性
    文件就是实际含有数据的地方,包括一般文本文件,数据库文件,二进制可执行文件等。
    权限对于文件:
    • r(read):可以读取此文件的实际内容,如读取文本文件的文字内容等。
    • w(write):可以编辑,新增或修改该文件的内容(不包含删除该文件)。
    • x(execute):该文件有可以被系统执行的权限。
      • 在Linux中,一个文件是否可以被执行,仅由x权限决定,与文件名没有决定关系。
  • 权限对目录的重要性
    目录主要的内容在记录文件名列表,文件名和目录有强烈的关联。对于目录来说权限的意义有些不同:
  • r (read contects in dirctory)
    表示具有读取目录结构列表的权限,具有该权限时,可以查询该目录下的文件名数据。
  • w (modify contects of directory)
    表示具有改动该目录结构列表的权限,也就是
    • 建立新的文件和目录。
    • 删除已经存在的文件或目录(无视该文件或目录的权限)。
    • 将已存在的文件或目录改名。
    • 移动该目录内的文件或目录的位置。
  • x (access directory)

表示具有用户进入该目录成为工作目录的权限
总结一下:

组件内容rwx
文件详细数据data读取文件内容修改文件内容执行文件内容
目录文件名读取文件名修改文件名进入该目录的权限
2.4.linux文件种类与拓展名
文件种类
  • 常规文件(regular file):第一个属性为 - ,就是一般进行读写的文件。根据文件内容还可以继续分类:
    • 纯文本文件(ASC||):内容为人类可以直接读到的数据,如数字,字母等。
    • 二进制文件(binary):Linux中的可执行文件,系统仅可认识并执行此类文件。
    • 数据文件(data) :在程序运行过程中会读取的特定格式的文件。
  • 目录(directory):第一个属性为d
  • 链接文件(link):第一个属性为l,类似于快捷方式。
  • 设备与设备文件(device):与系统周边及存储等相关的一些文件,通常都集中在/dev目录下,通常又分为两种:
    • 区块(block):第一个属性为b。就是一些存储数据,以提供系统随机存取的接口设备,举例来说硬盘和软盘就是。
    • 字符(character):第一个属性为c,亦是一些串行端口的接口设备,如键盘,鼠标等。
  • 数据输送软件(FIFO):第一个属性为p。主要目的为解决多个程序同时读写一个文件所造成的错误问题。
Linux文件拓展名

一个文件能不能被执行,与它的第一栏的十个属性有关,与文件拓展名根本一点关系都没有。
一个文件能否执行成功,只和两个要素有关:

  • 文件是否是Linux可执行的类型
  • 文件是否有被执行的权限
    但在Linux中,为了借由拓展名来了解该文件是什么东西,通常还是会以适当拓展名来表示文件是什么种类。
    以下是常用拓展名:
  • *.sh:脚本或批处理文件(scripts),因为批处理文件使用shell写成,所以拓展名就编成 .sh。
  • Z,.tar,.tar.gz,.zip,*.tgz:经过打包的压缩文件,不同的压缩文件gunzip,tar等,产生了不同的后缀名。
  • .html,.php:网页相关文件,分别代表HTML文件语法和PHP语法的网页文件。.html的文件可以使用网页浏览器直接开启。.php文件可以通过客户端的浏览器来服务端浏览,以得到运算后的网页结果。

3.linux目录配置

3.1Linux目录配置的依据——FHS

FHS的主要目的是希望用户可以了解到以安装软件通常放置与哪个目录下,所以制定了一个Linux目录配置的标准。
FHS依据文件系统使用的频繁与否与是否允许用户随意修改,而将目录定义成为四种可交互作用的形态:

可分享不可分享
不变/usr(软件存放处)/etc(配置文件)
/opt(第三方软件)/boot(启动与内核文件)
可变动/var/mail(用户邮箱)/var/run(程序相关)
/var/spool/news(新闻组)/var/lock(程序相关)

这四种类型为:

  • 可分享:可以分享给其他系统挂载使用的目录,所以包括执行文件与用户的邮件等数据,是能够分享给网络上其他主机挂载用到目录。
  • 不可分享:自己机器上面运行的设备文件或是与程序相关的socket文件等,仅与自身机器有关,不适合分享给其他主机。
  • 不变:有些数据是不会经常变动的,跟随着发行版而不变动。
  • 可变动:经常修改的数据,例如日志文件,一般用户可自行接受的新闻组等。
    事实上,FHS针对目录树架构仅定义出三层目录下该放什么:
  • /(root,根目录):与启动系统有关。
  • /user:与软件安装/执行有关。
  • /var:与系统运行过程有关。
根目录(/)的意义与内容

根目录是整个系统中最重要的一个目录,所有的目录都由根目录衍生,同时根目录也与启动,还原,系统修复有关。
因为根目录十分重要,以此根目录(/)所在分区应该越小越好,且应用程序所安装的软件最好不要与根目录放在同一个分区
在FHS定义下,根目录下应该有下面这些目录:
第一部分:FHS要求必须安装的目录。

  • /bin:放置在单人维护模式下还能被使用的命令,可以被root与一般账号所使用,主要有:cat,chmod,chown,date,mv等
  • /boot:主要放置启动会使用到的文件,包括Linux内核文件以及启动选项与启动所需配置文件等。Linux内核常用文件名为:vmlinuz。
  • /dev:在Linux系统中,任何设备与接口设备都是以文件的形式存在于这个目录中。只要通过读写这个目录下的某个文件,就等于读写某个设备。
  • /etc系统主要的配置文件几乎都放置在这个目录内,例如人员的账号密码文件,各种服务的启动文件等。一般来说,这个目录下的各文件属性是可以让一般用户查看的,但是只有root用户有权力修改。FHS建议不要放置可执行文件在这个目录中。还规范了几个重要的目录最好要在/etc/目录下:
    • /etc/opt(必要):这个目录在放置第三方辅助软件/opt的相关配置文件。
    • /etc/X11/(建议):与X Window有关的各种配置文件都在这里,尤其是xorg.conf这个X Server的配置文件。
    • /etc/sgml/(建议):与SGML格式有关的各项配置文件。
    • /etc/xml/(建议):与XML格式有关的各项配置文件。
  • /lib:其中放置的是在启动时会用到的函数库,以及在/bin或/sbin下面的命令会调用的函数库而已。FHS要求以下目录必须存在
    • /lib/modules/:这个目录主要放置可抽换式的内核相关模板(驱动程序)
  • /media:目录下放置的是可删除的设备,包括软盘,光盘,DVD等设备都暂时挂载于此
  • /mnt:放置一些想要暂时挂载的额外的设备
  • /opt:这个是给第三方辅助软件放置的目录
  • /run:放置系统启动后所产生的各项信息
  • /sbin:放置的是在系统启动过程中所需要的,包括启动,修复,还原系统所需要的命令。至于某些服务器软件程序,一般放置在/usr/sbin/中。本机自行安装的软件产生的系统执行文件,放置到/usr/local/sbin中。常见命令包括:放fdisk,fsck,ifconfig,mkfs等。
  • /srv:是一些网络服务启动之后,这些服务所需要使用的数据目录。
  • /tmp:这是让一般用户或是正在执行的程序暂时放置文件的地方。这个目录是任何人都可以存取的需要定时清理。FHS建议在启动时要将/tmp下的数据全部删除。
    第二部分:FHS建议可以存在的目录
  • home:系统默认的家目录,默认的用户家目录都会规范到这里。
    * :代表目前这个用户的家目录。
    * dmatsai:代表dmatsai的家目录。
  • /lib:用来存放与/lib不同的格式的二进制函数库,例如支持64位的/lib64函数库等。
  • /root:系统管理员(root)的家目录。
    有些FHS标准外的目录需要注意:
  • lost+found:这个目录是使用ext2,ext3,ext4文件系统格式才会产生的目录,目的时当文件系统发生错误时,将一些遗失的片段放置到这个目录下,不过如果使用的是xfs系统就不会存在此目录。
  • proc:这个目录本身是一个虚拟文件系统,它放置的数据都是在内存中,例如系统内核,进程信息,外接设备的状态及网络状态,所有数据都在内存中,所以本身不占任何空间。
  • sys:与/proc非常类似,也是虚拟的文件系统,主要记录内核和系统硬件信息相关的内容。同样不占硬盘容量。
  • usr:下文中详细讲解。
  • var:下文中详细讲解。
/usr的意义与u内容

依据FHS的基本定义,/usr里面放置的数据属于不可分享与不可变动。
/usr并非user的缩写,usr为UNIX Software Resource 的缩写,也就是UNIX操作系统软件资源所存放的目录,并不是用户的数据。所有系统默认的的软件都会放置到/usr下面。一般来说/usr的子目录建议有下面这些:
第一部分:FHS要求必须存在的部分

  • /usr/bin/:所有一般用户能够使用的命令都放在这里。FHS要求在此目录下不应该有子目录。
  • /usr/lib/:基本上,与/lib功能相同。
  • /usr/local/:系统管理员在本机安装自己下载的软件时,建议安装到此目录。
  • /usr/sbin/:非系统正常运行所需要的系统命令。
  • /usr/share/:主要放置只读的数据文件,也包括共享文件,在这个目录下放置的数据几乎是不分硬件架构均可以读取的数据,几乎都是文本文件。还有些常见的子目录:
    • /usr/share/man:在线帮助文件。
    • /usr/share/doc:软件的说明文档。
    • /usr/share/zoneinfo:与时区有关的时区文件。
      第二部分:FHS建议可以存在的目录
  • /usr/games/:与游戏比较相关的数据存放处。
  • /usr/include/:c/c++等程序语言的头文件与包含文件放置处。
  • /usr/libexec/:某些不被一般用户常用的执行文件或脚本。
  • /usr/lib:与/lib作用相同。
  • /usr/src/:一般建议把源代码放置到这里。内核源代码放置到/usr/src/Linux/目录下。
/var的意义与内容

/var是在系统运行后会逐渐占用硬盘容量的目录。/var目录主要针对于经常性变动的文件,包括缓存(cache),日志文件(log file),以及某些软件运行所产生的文件。常见子目录有:
第一部分:FHS要求必须要存在的目录

  • /var/cache/:应用程序本身运行过程中会产生的一些缓存。
  • /var/lib/:程序本身执行过程中,需要使用到的数据文件所放置的目录。在此目录下的各自的软件应该要有各自的目录。
  • /var/lock/:某些设备或者文件资源一次只能被一个应用程序所使用,如果同时有两个程序使用该设备时,就可能产生一些错误的情况,因此就得要将该设备上锁,以确保该设备只会给单一软件所使用。
  • /var/log/:相当重要。这是日志文件放置的目录。
  • /var/mail/:放置个人电子邮箱的目录。
  • /var/run/:某些程序或者服务启动后,会将它们的PID放置到该目录下。
  • /var/spool/:这个目录通常放置一些队列数据,所谓的队列就是需要排队等待其他进程使用的数据,这些数据使用后都会被删除。
3.2 目录树

在Linux下,所有的文件和目录都是有根目录开始,它是所有目录和源文件的源头,再一个个分支出其他节点,称这种目录配置方式为:目录树。

  • 目录树的启动点为根目录(/,root)
  • 每一个目录不止能使用本地分区的文件系统,也可以使用网络上的文件系统。
  • 每一个文件在此目录树中的文件名都是独一无二的。
3.3 绝对路径与相对路径

根据文件名写法的不同,也可以将所谓的路径定义为绝对路径与相对路径。

  • 绝对路径:由根目录(/)开始写起的文件名或目录名称,如/home/dmtsai/.bashrc;

  • 相对路径:相对于目前路径的文件名写法。

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

  • :代表上一层目录,也可以用…/来表示;

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

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

相关文章

【数据可视化-19】智能手机用户行为可视化分析

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN人工智能领域的优质创作者,提供AI相关的技术咨询、项目开发和个…

vue项目通过GetCapabilities获取wmts服务元数据信息并在openlayers进行叠加显示

vue项目通过openlayers加载wmts服务示例&#xff1a; <template><div id"map" ref"mapContainer"></div> </template><script> import ol/ol.css; import Map from ol/Map; import View from ol/View; import TileLayer fr…

JavaWeb学习打卡-Day1-分层解耦、Spring IOC、DI

三层架构 Controller&#xff08;控制层&#xff09;&#xff1a;接收前端发送的请求&#xff0c;对请求进行处理&#xff0c;并响应数据。Service&#xff08;业务逻辑层&#xff09;&#xff1a;处理具体的业务逻辑。DAO&#xff08;数据访问层/持久层&#xff09;&#xff…

【含文档+PPT+源码】基于Python爬虫二手房价格预测与可视化系统的设计与实现

项目介绍 本课程演示的是一款基于Python爬虫二手房价格预测与可视化系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 带你从零开始部署运行本套系统 该项…

游戏引擎学习第229天

仓库:https://gitee.com/mrxiao_com/2d_game_5 回顾上次内容并介绍今天的主题 上次留下的是一个非常简单的任务&#xff0c;至少第一步是非常简单的。我们需要在渲染器中加入排序功能&#xff0c;这样我们的精灵&#xff08;sprites&#xff09;才能以正确的顺序显示。为此我…

【“星瑞” O6 评测】—NPU 部署 face parser 模型

前言 瑞莎星睿 O6 (Radxa Orion O6) 拥有高达 28.8TOPs NPU (Neural Processing Unit) 算力&#xff0c;支持 INT4 / INT8 / INT16 / FP16 / BF16 和 TF32 类型的加速。这里通过通过官方的工具链进行FaceParsingBiSeNet的部署 1. FaceParsingBiSeNet onnx 推理 首先从百度网盘…

单例模式的使用场景 以及 饿汉式写法(智能指针)

单例模式的使用场景 以及 饿汉式写法&#xff08;智能指针&#xff09; 饿汉式&#xff1a;创建类时就已经创建好了类的实例&#xff08;用智能指针实现&#xff09;什么时候用单例模式&#xff1a;1. 全局配置管理2. 日志系统3. 资源管理器4. 硬件设备访问总结 饿汉式&#xf…

微信小程序的全局变量(quanjubianliang)

在微信小程序开发中&#xff0c;管理和使用全局变量是一种常见的需求。例如&#xff0c;可以通过小程序的App实例和globalData对象来实现全局变量的存储和共享。以下是详细说明&#xff1a; 1. 全局变量的定义 微信小程序提供了 App() 函数&#xff0c;其中可以定义一个 global…

Latex科研入门教程

Introduction 这篇文章适合有markdown基础的人看,不会的人可以先去学一下markdown. 仅适用于科研入门. 本文使用的latex环境为overleaf Latex概况 文件格式 以.tex为结尾的文件可能有多个.tex文件最终只编译一个文件,相当于一个文件控制其他子文件. Latex 代码分为三种&…

FastGPT Docker Compose本地部署与硅基流动免费AI接口集成指南

本文参考&#xff1a;https://doc.tryfastgpt.ai/docs/development/ 一、背景与技术优势 FastGPT是基于LLM的知识库问答系统&#xff0c;支持自定义数据训练与多模型接入。硅基流动&#xff08;SiliconFlow&#xff09;作为AI基础设施平台&#xff0c;提供高性能大模型推理引…

19_大模型微调和训练之-基于LLamaFactory+LoRA微调LLama3

基于LLamaFactory微调_LLama3的LoRA微调 1. 基本概念1.1. LoRA微调的基本原理1.2. LoRA与QLoRA1.3. 什么是 GGUF 2.LLaMA-Factory介绍3. 实操3.1 实验环境3.2 基座模型3.3 安装 LLaMA-Factory 框架3.3.1 前置条件 3.4 数据准备3.5 微调和训练模型torch.cuda.OutOfMemoryError: …

Linux Wlan-四次握手(eapol)框架流程

协议基础 基于 IEEE 802.1X 标准实现的协议 抓包基础 使用上一章文章的TPLINK wn722n v1网卡在2.4G 频段抓包&#xff08;v2、v3是不支持混杂模式的&#xff09; eapol的四个交互流程 根据不同的认证模式不同&#xff0c;两者的Auth流程有所不同&#xff0c;但是握手流程基…

基于亚马逊云科技 Amazon Bedrock Tool Use 实现 Generative UI

背景 在当前 AI 应用开发浪潮中&#xff0c;越来越多的开发者专注于构建基于大语言模型&#xff08;LLM&#xff09;的 chatbot 和 AI Agent。然而&#xff0c;传统的纯文本对话形式存在局限性&#xff0c;无法为用户提供足够直观和丰富的交互体验。为了增强用户体验&#xff…

第 2 篇:初探时间序列 - 可视化与基本概念

第 2 篇&#xff1a;初探时间序列 - 可视化与基本概念 (图片来源: Luke Chesser on Unsplash) 在上一篇《你好&#xff0c;时间序列&#xff01;》中&#xff0c;我们了解了什么是时间序列数据以及学习它的重要性。现在&#xff0c;是时候卷起袖子&#xff0c;真正开始接触和探…

Linux服务器配置Anaconda环境、Pytorch库(图文并茂的教程)

引言&#xff1a;为了方便后续新进组的 师弟/师妹 使用课题组的服务器&#xff0c;特此编文&#xff08;ps&#xff1a;我导从教至今四年&#xff0c;还未招师妹&#xff09; ✅ NLP 研 2 选手的学习笔记 笔者简介&#xff1a;Wang Linyong&#xff0c;NPU&#xff0c;2023级&a…

Spring-AOP分析

Spring分析-AOP 1.案例引入 在上一篇文章中&#xff0c;【Spring–IOC】【https://www.cnblogs.com/jackjavacpp/p/18829545】&#xff0c;我们了解到了IOC容器的创建过程&#xff0c;在文末也提到了AOP相关&#xff0c;但是没有作细致分析&#xff0c;这篇文章就结合示例&am…

【Python网络爬虫开发】从基础到实战的完整指南

目录 前言&#xff1a;技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解核心作用讲解关键技术模块技术选型对比 二、实战演示环境配置要求核心代码实现&#xff08;10个案例&#xff09;案例1&#xff1a;基础静态页面抓取案例2&#xff1a;动…

服务器监控软件推荐

以下是几款常用的服务器监控软件推荐&#xff0c;涵盖开源和商业方案&#xff0c;适用于不同规模和需求&#xff1a; 一、开源免费方案 Prometheus Grafana 特点&#xff1a;时序数据库 可视化仪表盘&#xff0c;支持多维度监控和告警。适用场景&#xff1a;云原生、Kubernet…

编译原理实验(四)———— LR(1)分析法

一、实验目的 掌握LR(1)分析法的基本原理与实现流程。通过构造LR(1)分析表&#xff0c;验证符号串是否符合给定文法规则。理解LR(1)分析中向前搜索符&#xff08;Lookahead Symbol&#xff09;的作用&#xff0c;解决移进-归约冲突。 二、实验题目 1.对下列文法&#xff0c;用…

vue3 主题模式 结合 element-plus的主题

vue3 主题模式 结合 element-plus的主题 npm i element-plus --save-dev在 Vue 3 中&#xff0c;实现主题模式主要有以下几种方式 1.使用 CSS 变量&#xff08;自定义属性&#xff09; CSS 变量是一种在 CSS 中定义可重用值的方式。在主题模式中&#xff0c;可以将颜色、字体…