深入探索Linux:ACL权限、特殊位与隐藏属性的奥秘

前言:

在Linux系统中,文件和目录的权限管理是一项至关重要的任务。它决定了哪些用户或用户组可以对文件或目录执行读、写或执行等操作。传统的Linux权限模型基于用户、组和其他的概念,但随着时间的推移,这种模型在某些情况下显得不够灵活。为了解决这个问题,Linux引入了访问控制列表(ACL)权限,提供了更细粒度的权限控制。

除了ACL权限,Linux文件系统中还隐藏着一些特殊位和属性,它们对文件和目录的行为有着深远的影响。这些特殊位和属性包括执行位、设置用户ID位、设置组ID位等。了解并正确使用这些特殊位和属性,对于Linux系统管理员和开发者来说,是必不可少的技能。

在本文中,我们将深入探讨Linux的ACL权限、特殊位和隐藏属性,以及如何在日常工作中利用它们来增强系统的安全性和灵活性。无论您是Linux新手还是经验丰富的系统管理员,相信本文都会为您带来宝贵的启示和实用的技巧。

一.关于ACL权限的介绍

1.1 什么是ACL

  1. ACL是Access Control List的缩写,即访问控制列表。可以通过下列的实例来理解ACL的作用:

思考如何实现如下的权限控制:

  • 每个项目成员在有一个自己的项目目录,对自己的目录有完全权限
  • 项目组中的成员对项目目录也有完全权限
  • 其他人对项目目录没有任何权限
  • 对于被分配进入项目的临时人员,只有读和执行权限,不能修改
  1. 如何实现

初步思路:

  • 创建一个临时组(例如:temp),并将临时组的权限设置位 r-w
  • 将临时组也作为项目目录的所属组
  • 对于临时用户作为临时组的成员即可

问题:

  • Linux基本权限中,文件和目录同时只能有一个分组
  • 使用ACL来解决上面的问题

1.2 操作步骤

# 1. 添加测试目录,用户,组,并将用户添加到组  -------------------[root@localhost ~]# mkdir /project
[root@localhost ~]# useradd zs
[root@localhost ~]# useradd ls
[root@localhost ~]# groupadd tgroup
[root@localhost ~]# gpasswd -a zs tgroup
正在将用户“zs”加入到“tgroup”组中
[root@localhost ~]# gpasswd -a ls tgroup
正在将用户“ls”加入到“tgroup”组中
# 可以查看组是否正常建立[root@localhost ~]# cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
...tgroup:x:1003:zs,ls
   ✨# 2. 修改目录的所有者和所属组    -----------------------------[root@localhost ~]# chown root:tgroup /project
[root@localhost ~]# ll -d /projectdrwxr-xr-x.   2 root    tgroup    6 8月  23 13:07 project# 3. 设定权限   ----------------------------[root@localhost ~]# chmod 770 /project
[root@localhost ~]# ll -d /project
drwxrwx---. 2 root tgroup 6 8月  23 13:07 /project
# 4. 此时需要为临时用户进行分配权限, r-x  -----------------# 4.1 添加临时用户[root@localhost ~]# useradd tempuser
[root@localhost ~]# passwd tempuser
# 4.2 为临时用户分配特定权限[root@localhost ~]# setfacl -m u:tempuser:rx /project
[root@localhost ~]# getfacl /project
getfacl: Removing leading '/' from absolute path names
# file: project
# owner: root
# group: tgroup
user::rwx
user:tempuser:r-x
  ✨group::rwx
mask::rwx
other::---
# 4.3  查看目录权限,注意+,表示文件或目录有acl权限[root@localhost ~]# ll -d /project
drwxrwx---+ 2 root tgroup 6 8月  23 13:07 /project
# 5.  验证acl权限 --------------------------------------# 5.1  切换到tempuser用户[root@localhost ~]# su tempuser
[tempuser@localhost root]$ 
# 5.2 验证可以进入project目录[tempuser@localhost project]$ cd /project
[tempuser@localhost project]$ 
# 5.3 验证不能在project中创建文件[tempuser@localhost project]$ touch test.txt
touch: 无法创建"test.txt": 权限不够
# 6. 控制组的ACL权限    ---------------------------------# 6.1 创建一个temp组[root@localhost project]# groupadd temp
# 6.2 设置组的ACL[root@localhost project]# setfacl -m g:temp:rx /project
# 6.3 查看设置后ACL[root@localhost project]# getfacl /project
getfacl: Removing leading '/' from absolute path names
# file: project
# owner: root
# group: tgroup
user::rwx
user:tempuser:r-x
group::rwx
group:temp:r-x
   ✨mask::rwx
other::---
# 6.4 创建一个用户,并将该用户设置为temp组[root@localhost project]# useradd tempu02
[root@localhost project]# passwd tempu02
更改用户 tempu02 的密码 。
新的 密码:
# 6.5 将用户添加到temp组中[root@localhost project]# gpasswd -a tempu02 temp
正在将用户“tempu02”加入到“temp”组中
# 6.6 验证  ----------------------------[root@localhost project]# su tempu02
# 可以进入目录[tempu02@localhost project]$ cd /project
[tempu02@localhost project]$ ls
# 不能创建文件[tempu02@localhost project]$ touch aa.txt
touch: 无法创建"aa.txt": 权限不够

1.3 ACL中mask修改最大权限

 getfacl /project

最大权限是指: 如果给用户赋予了ACL权限,则用户所获取的权限并不是ACL时所附的权限,而是赋予的ACL权限 与 mask权限 进行 与 操作 之后的权限。例如:user:tempuser:r-x 第一位是r, mask的第一位也是r, 则与操作后,用户则有 r 的权限, user:tempuser:r-x 第二位是 - ,mask的第二位是 w,则与操作后用户则没有 w 的权限。

最大权限的作用:mask的默认值为rwx,即最大权限,任何其他的权限值和mask相“与”都会得到其自身; 可以通过调整mask的方式来控制分配给用户的最大权限,例如: mask值调整为 r-x ,则不管是否给用户分配”w”权限,用户都没有“w”的权限。mask可以用来避免权限分配不当而给系统带来的风险

注意:mask不会影响文件所有者的权限

实例

setfacl -m m:rx /project

  # 所属组虽然设置的权限为rwx,但其实际的权限 r-x  ✨group:temp:r-x
mask::r-x
    # 修改之后的mask

1.4 ACL权限的删除

# 删除指定ACL权限

setfacl -x u:tempuser /project


# 删除所有ACL权限
 

setfacl -b /project

# 注意: 权限没有 + [root@localhost ~]# ll -d /project
drwxrwx---. 2 root tgroup 6 8月  23 13:07 /project

1.5 ACL权限的递归及默认值

所谓递归是指:指定目录下的所有文件及其子目录,都具体指定的ACL权限属性

注意:ACL权限只对已有的文件或目录起作用,对新加的不起作用

ACL的默认值:如果希望新加的文件或目录都具有父目录所拥有的ACL权限属性,则需要设置默认值

# 设置ACL权限[root@localhost project]# setfacl -m u:tempuser:rx /project
[root@localhost project]# ll -d 
drwxrwx---+ 2 root tgroup 6 8月  23 13:07 .
# project目录已经设置好了ACL权限,在该目录中添加一个文件,文件并不具有ACL权限,因为在设置ACL权限时并没有指定递归属性[root@localhost project]# touch abc.txt
[root@localhost project]# ll
总用量 0
-rw-r--r--. 1 root root 0 8月  23 17:29 abc.txt
# 设置ACL权限可以递归,注意:R参数的位置在此处是固定的,这算是Linux中命令的一个特例,Linux中命令参数的位置一般是不敏感的[root@localhost ~]# setfacl -m u:tempuser:rx -R /project[root@localhost project]# ll /project
总用量 0
-rw-r-xr--+ 1 root root 0 8月  23 17:29 abc.txt
# 在设置了project目录递归ACL权限属性后,再在该目录中创建一个新的文件,此时发现新的文件并没有ACL权限,这说明ACL权限只对已有的文件或目录起作用,对新加的不起作用[root@localhost project]# touch def.txt
[root@localhost project]# ll
总用量 0
-rw-r-xr--+ 1 root root 0 8月  23 17:29 abc.txt
-rw-r--r--. 1 root root 0 8月  23 17:43 def.txt
# 设置ACL默认值,默认值的参数是d,可以和-R结合使用[root@localhost project]# setfacl -m d:u:tempuser:rx -R /project
[root@localhost project]# getfacl /project
getfacl: Removing leading '/' from absolute path names
# file: project
# owner: root
# group: tgroup
user::rwx
user:tempuser:r-x
group::rwx
mask::rwx
other::---
default:user::rwx
default:user:tempuser:r-x
default:group::rwx
default:mask::rwx
default:other::---

[root@localhost project]# touch www.txt
[root@localhost project]# ll
总用量 0
-rw-r-xr--+ 1 root root 0 8月  23 17:29 abc.txt
-rw-r--r--. 1 root root 0 8月  23 17:43 def.txt
  # 该文件在设置规则之后,默认值之前创建,两头都不管,所以没有ACL权限属性-rw-rw----+ 1 root root 0 8月  23 17:51 www.txt
[root@localhost project]# 

2. 特殊位

2.1 SUID

  1. 什么是suid
  • SUID是对二进制可执行的文件才有效, 普通文件设置之后是没有意义的
  • 执行者对该程序有x权限
  • 当程序具有suid时,程序执行者在执行程序期间,会暂时获得该程序所有者的身份
  • 程序执行者所获取的属主身份,只在程序运行过程中有效
  1. 为什么需要suid

Linux中具有suid权限的文件,如:passwd

[root@localhost ~]# whereis passwd
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz
[root@localhost ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27856 4月   1 2020 /usr/bin/passwd
[root@localhost ~]#

注意:passwd的权限中在文件所有者的权限中有一个“s”,这说明:

  • passwd执行程序具有suid权限
  • 在passwd执行期间会获取root权限
  • 同时所属组和其他用户是用户r和x权限

为什么需要这么设置权限?

  • passwd修改的实际上是/etc/shadow的内容,但该文件只有root超级管理员才能修改,一般用户不可以
  • 但一般用户应该可以修改自己的账户密码,这是正当的需求
  • 在passwd执行期间,让普遍用户暂时获取root用户的权限,以便于修改shadow文件,执行完成临时赋予的权限消失,这即满足了用户可以修改自己密码的需求,也照顾到了系统安全性。
  1. 怎么设置suid?
  • 字母方式
    • chmod u+s <文件名>
    • u代表设置的是suid
  • 数字方式
    • chmod 4755 <文件名>
    • 最前方的4表示设置的是suid,后面的755分别代码 所有者,所属组,其他人的权限
  1. 怎样移除suid
  • 设置设置权限
    • chmod 755 <文件名>
  • 字符方式
    • chmod u-s <文件名>

2.2 SGID

  1. 什么是SGID

相对于SUID只能设置可执行的文件,SGID可以设置可执行文件,也可以设置目录,SGID有如下特征:

  • 如果设置的对象是文件,则只能是可执行的二进制文件,且命令的执行者需要对文件有 x 权限
  • 命令执行过程中,组身份升级为该文件的所属组
  • 只有在程序执行的过程中才有效
  1. 使用案例
# centos7默认没有安装locate,先执行安装[root@localhost ~]# yum install mlocate[root@localhost ~]# updatedb[root@localhost ~]# locate inittab
/etc/inittab
/usr/share/vim/vim74/syntax/inittab.vim
# 查看locate命令,注意权限 所属组部分的s,这个s即表示开启了SGID,在执行该# 命令时,会在执行期间临时将组身份升级为该文件的所属组[root@localhost ~]# ll /usr/bin/locate
-rwx--s--x. 1 root slocate 40520 4月  11 2018 /usr/bin/locate
# locate命令需要使用mlocate.db文件,但该文件默认情况下普通用户是没有权限读的,当用户# 运行locate命令时,临时获取了SGID属性,组身份升级为了该文件的所属组,所以具有了对# mlocate文件的读权限。[root@localhost test]# ll /var/lib/mlocate/mlocate.db
-rw-r-----. 1 root slocate 1123834 10月  2 15:06 /var/lib/mlocate/mlocate.db
#  ---- 为目录设置SGID的示例 -----# 查看当前目录[root@localhost ~]# pwd
/root
# 在tmp目录下创建一个目录[root@localhost ~]# mkdir /tmp/test
# 给test赋予SGID的权限,(第一2表示SGID),如果需要清除SGID则可以使用 777# 也可以使用 chmod g+s 文件或目录名[root@localhost ~]# chmod 2777 /tmp/test
# 权限所属组部分的s,表示拥有SGID权限[root@localhost ~]# ll -d /tmp/test
drwxrwsrwx. 2 root root 6 10月  2 14:58 /tmp/test
# 切换用户[root@localhost ~]# su lisen
[lisen@localhost root]$ pwd
/root
# 普通用户无权在root目录下创建文件[lisen@localhost root]$ touch abc.txt
touch: 无法创建"abc.txt": 权限不够
# 在home目录下创建一个文件,文件的默认的所属组为,当前用户的所属组[lisen@localhost root]$ cd /home/lisen
[lisen@localhost ~]$ touch abc.txt
[lisen@localhost ~]$ ll
总用量 0
-rw-rw-r--. 1 lisen lisen 0 10月  2 15:01 abc.txt
# 在设置了SGID的目录中,创建文件,默认的所属组变成了目录的所属组,这是SGID的作用[lisen@localhost ~]$ cd /tmp/test
[lisen@localhost test]$ touch bcd.txt
[lisen@localhost test]$ ll
总用量 0
-rw-rw-r--. 1 lisen root 0 10月  2 15:01 bcd.txt
[lisen@localhost test]$ 

2.3 SBIT粘着位权限

SBIT权限的特点:

  • SBIT权限只能针对目录有效
  • 普通用户对目录拥有w和x权限,即普通用户对目录有写入权限
  • 若没有SBIT,则普通用户可以删除目录下的所有文件,包括其他用户创建的文件;若目录有SBIT权限,则只用root用户可以删除所有文件,普通用户就算拥有w权限,也只能删除自己建立的文件,对于其他用户创建的文件则无权删除。
  • SBIT权限的设置只能是root用户,其他用户不可以
# Linux中的tmp目录是使用SBIT权限的典型目录,注意权限部分最后的t字母[root@localhost ~]# ll -d /tmp
drwxrwxrwt. 10 root root 218 10月  2 16:05 /tmp
# 创建一个新用户,并设置密码[root@localhost ~]# useradd test
[root@localhost ~]# passwd test# 切换到lisen用户,在/tmp目录下创建文件[lisen@localhost root]$ touch /tmp/abcd.txt
# 切换到test用户,删除/tmp/目录下的abcd.txt文件,因为tmp目录具有SBIT权限,且abcd.txt# 文件不是当前用户创建,所以无权删除。[test@localhost root]$ cd /tmp
[test@localhost tmp]$ ls
abcd.txt
abc.txt
systemd-private-a092fa5008e44207b2cdbcae85170c80-chronyd.service-WocDs1
test
vmware-root_665-3988687359
[test@localhost tmp]$ rm abcd.txt
rm:是否删除有写保护的普通空文件 "abcd.txt"?y
rm: 无法删除"abcd.txt": 不允许的操作
# ---- 设置SBIT权限 ----[root@localhost /]# mkdir /test
# 创建的目录默认的权限是755[root@localhost /]# ll -d /test
drwxr-xr-x. 2 root root 6 10月  2 17:33 /test
# 设置SBIT权限[root@localhost /]# chmod 1755 /test
[root@localhost /]# ll -d /test
drwxr-xr-t. 2 root root 6 10月  2 17:33 /test
# 上面的设置test的其他用户没有写入的权限,所以SBIT权限的没有什么含义[root@localhost ~]# chmod 1777 /test
[root@localhost ~]# ll -d /test
drwxrwxrwt. 2 root root 6 10月  2 17:33 /test

3. 文件系统属性chattr权限

命令格式: chattr [+-=] [权限选项] 文件或目录, + 增加权限, -删除权限, =赋予权限

权限选项:

  • i 如果文件被设置i属性,则不允许文件进行删除,改名,文件内容也不允许改动; 如果目录被设置了i选项,则只能修改目录下的文件数据,但不允许建立和删除文件。需要注意的是该属性对root用户也同样有效
  • a 如果对文件设置了a属性,则只能在文件中增加数据,但不能修改也不能删除数据; 如果对目录设置了a属性,那么只能在目录中建立或修改文件,但不能删除

使用示例

# ------ 文件的chattr属性示例 ---------# ======= 文件的i属性 =============# 创建一个文件,先不为其设置 i 属性, 此时可以正常写入内容[root@localhost ~]# touch abc
[root@localhost ~]# ll
总用量 116
-rw-r--r--. 1 root root      0 10月  3 18:51 abc
-rw-------. 1 root root   1396 2月   8 2021 anaconda-ks.cfg
-rw-r--r--. 1 root root   2381 8月  17 14:58 index.html
-rw-r--r--. 1 root root 102052 8月  17 15:02 index.html.1
-rw-r--r--. 1 root root   1612 3月  19 2021 index.html.2
-rw-r--r--. 1 root root   2381 8月  17 15:21 index.html.3
[root@localhost ~]# echo 1234345 > abc
[root@localhost ~]# cat abc
1234345
[root@localhost ~]# # 为abc文件设置i属性[root@localhost ~]# chattr +i abc
# 一般的ls命令不能显示文件的i属性,需要使用lsattr命令[root@localhost ~]# lsattr -a abc
----i----------- abc
[root@localhost ~]# 
# 设置了abc文件的i属性后,测试修改其内容,无权修改,删除也不行[root@localhost ~]# echo efefe >> abc
-bash: abc: 权限不够
[root@localhost ~]# 
[root@localhost ~]# rm abc
rm:是否删除普通文件 "abc"?y
rm: 无法删除"abc": 不允许的操作
[root@localhost ~]# 
# ========= 目录的i属性示例 =========[root@localhost ~]# mkdir /test
[root@localhost ~]# cd /test
[root@localhost test]# ll
总用量 0
# 没有设置chattr属性之前,可以添加文件[root@localhost test]# touch a.txt
[root@localhost test]# ls
a.txt
# 设置chattr属性之后,可以对原来的目录中有的文件进行修改,但不能在目录中# 添加或删除文件(报权限不够)[root@localhost test]# chattr +i /test
[root@localhost test]# lsattr -a /test/
----i----------- /test/.
---------------- /test/..
---------------- /test/a.txt
[root@localhost test]# echo avaavv >> /test/a.txt
[root@localhost test]# touch /test/b.txt
touch: 无法创建"/test/b.txt": 权限不够
[root@localhost test]# 
# ============ 文件的a属性 ===========[root@localhost test]# touch a.txt[root@localhost test]# chattr +a a.txt
# > 将内容写入文件[root@localhost test]# echo 123 > a.txt
-bash: a.txt: 不允许的操作
# >> 将内容追加到文件[root@localhost test]# echo 12345 >> a.txt
[root@localhost test]# cat a.txt
12345
# ========== 目录的a属性 =========[root@localhost /]# mkdir test02
[root@localhost /]# chattr +a test02
[root@localhost /]# cd /test02
[root@localhost test02]# touch a.txt
[root@localhost test02]# rm a.txt
rm:是否删除普通空文件 "a.txt"?y
rm: 无法删除"a.txt": 不允许的操作
[root@localhost test02]# mv a.txt b.txt
mv: 无法将"a.txt" 移动至"b.txt": 不允许的操作
[root@localhost test02]# 

4. sudo

作用:

  • root把本来只能由超级用户使用的命令赋予普通用户使用
  • sudo的操作对象是系统命令

使用场景:

  • 在需要将超级管理员的某些功能权限临时下方与普通用户时可以使用使用,(尚方宝剑)

修改sudo的配置(/etc/sudoers):

  • 修改格式:
    • root ALL=(ALL) ALL
    • 用户名 被管理主机IP=(可使用的身份) 授权命令(绝对路径)
    • %wheel ALL=(ALL) ALL
    • 组名 被管理主机IP=(可使用的身份) 授权命令 (绝对路径)
# 查看或修改sudo的配置,也可以直接编辑/etc/sudoers文件[root@localhost ~]# visudo
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL## 增加lisen用户,可以执行服务器重启命令lisen      ALL=/sbin/shutdown -r now
## 切换到到lisen用户后可以使用上面的命令,但是需要注意两个地方:1. 和sudo一起用,2. 使用命令## 的绝对路径

注意事项:

  • 主要不要将vim等编辑工具配置到sudo中去,如果在sudo的配置文件中配置了vim,则普通用户在运行vim中就拥有了超级用户的身份,这是很危险的,使用普通用户有权修改任何文件。










































































 

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

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

相关文章

Bean的声明周期

1.创建Bean对象&#xff08;调用无参数构造&#xff09; 2.给bean对象设置相关属性&#xff08;依赖注入&#xff09; 3.bean后置处理器&#xff08;初始化前执行&#xff0c;类似于过滤器和拦截器&#xff09; 首先要定义一个类MyBeanPost&#xff0c;实现BeanPostProcessor…

解锁业务灵活性:RuleGo规则引擎的高效解耦与实时响应秘籍

文章目录 入门指南&#xff1a;RuleGo规则引擎&#x1f389; 概述&#x1f3c6; RuleGo的优势&#x1f680; 特性&#x1fa81; 架构图使用场景&#x1f3af; 典型使用场景规则链概述RuleGo规则链优势规则链配置示例 入门指南&#xff1a;RuleGo规则引擎 &#x1f389; 概述 …

嵌入式中十大经典排序算法(代码实现),建议收藏

前言 兜兜转转&#xff0c;时间如白驹过隙。时间证明了一个道理&#xff0c;学啥忘啥&#xff0c;学的越快忘得越快&#xff0c;还不如踏踏实实写点笔记心得来的实在。 编程初学期间&#xff0c;排序算法是让人抓头最多的一块。为什么我连最简单的冒泡排序都理解不了&#xff…

【动态规划】【状态压缩】LCP04 覆盖

作者推荐 【广度优先搜索】【网格】【割点】【 推荐】1263. 推箱子 本文涉及知识点 动态规划汇总 LCP04 覆盖 你有一块棋盘&#xff0c;棋盘上有一些格子已经坏掉了。你还有无穷块大小为1 * 2的多米诺骨牌&#xff0c;你想把这些骨牌不重叠地覆盖在完好的格子上&#xff0…

C#学习总结

1、访问权限 方法默认访问修饰符&#xff1a;private 类默认访问修饰符&#xff1a;internal 类的成员默认访问修饰符&#xff1a;private 2、UserControl的使用 首先添加用户控件 使用时一种是通过代码添加&#xff0c;一种是通过拖动组件到xaml中

音频的“隐形保镖”——音频数字水印

在互联网时代&#xff0c;多媒体数字资源可以快捷地传播和获取&#xff0c;但同时也导致了数字音频产品的非法扩散、非法拷贝和非法篡改猖獗&#xff0c;数字音频产品的完整性和版权保护问题越来越凸显。文档和图像可以添加水印&#xff0c;音频同样可以添加水印&#xff0c;让…

【递归版】归并排序算法(1)

目录 MergeSort归并排序 整体思想 图解分析 代码实现 时间复杂度 递归&归并排序VS快速排序 MergeSort归并排序 归并排序&#xff08;MERGE-SORT&#xff09;是建立在归并操作上的一种有效的排序算法&#xff0c;该算法是采用分治法&#xff08;Divide and Conquer&a…

堆排序法的名字由来,排序步骤是什么,最坏情况下的排序次数如何计算得来的呢?

问题描述&#xff1a;堆排序法的名字由来&#xff0c;排序步骤是什么&#xff0c;最坏情况下的排序次数如何计算得来的呢&#xff1f; 问题解答&#xff1a; 堆排序法的名字来源于它使用了堆这种数据结构。堆是一种特殊的树形数据结构&#xff0c;具有以下特点&#xff1a;在…

基于RK3399 Android11适配OV13850 MIPI摄像头

目录 1、原理图分析2、编写和配置设备树3、调试方法4、遇到的问题与解决5、补丁 1、原理图分析 从上图可看出&#xff0c;我们需要关心的&#xff0c;①MIPI数据和时钟接口使用的是MIPI_TX1/RX1 ②I2C使用的是I2C4总线 ③RST复位引脚使用的是GPIO2_D2 ④PWDN使用的是GPIO1_C7 ⑤…

A星寻路算法详解

A星寻路算法 前言 A星寻路算法是静态路网中求解最短路径最有效的直接搜索方法&#xff0c;也是解决许多搜索问题的有效算法&#xff0c;它可以应对包括复杂地形&#xff0c;各种尺度的障碍物以及不同地形的路径规划问题。掌握A星寻路算法能够提高路径规划效率&#xff0c;应对…

大模型参数高效微调

参数高效微调目的 PEFT技术旨在通过最小化微调参数的数量和计算复杂度&#xff0c;来提高预训练模型在新任务上的性能&#xff0c;从而缓解大型预训练模型的训练成本。这样一来&#xff0c;即使计算资源受限&#xff0c;也可以利用预训练模型的知识来迅速适应新任务&#xff0…

域名 SSL 证书信息解析 API 数据接口

域名 SSL 证书信息解析 API 数据接口 网络工具&#xff0c;提供域名 SSL 证书信息解析&#xff0c;多信息查询&#xff0c;毫秒级响应。 1. 产品功能 提供域名 SSL 证书信息解析&#xff1b;最完整 SSL 属性信息解析&#xff1b;支持多种元素信息抽取&#xff0c;包括主题的可…

【Java程序设计】【C00278】基于Springboot的数码论坛管理系统(有论文)

基于Springboot的数码论坛管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的数码论坛系统 本系统分为系统功能模块、管理员功能模块以及用户功能模块。 系统功能模块&#xff1a;在系统首页可以查看首页、…

Linux:Jenkins:GitLab+Maven+Jenkins的部署

1.环境 我这里准备了三台centos7 1.用于部署gitlab 运行内存&#xff1a;6G 名字&#xff1a;Jenkins-GitLab 192.168.6.1 2.用于部署jenkins 运行内存&#xff1a;2G 名字&#xff1a;Jenkins-server 192.168.6.2 3.用于打包测试…

全面解析企业财务报表系列之五:阅读财报结构、顺序、模块与不同侧重

全面解析企业财务报表系列之五&#xff1a;阅读财报结构、顺序、模块与不同侧重 一、明确本次报表分析的目的二、确定报表分析的重点项目三、重点分析项目之间的联系四、资产负债表的阅读五、利润表的阅读六、现金流量表的阅读七、综合分析 一、明确本次报表分析的目的 报表的…

VBA即用型代码手册:立即保护所有工作表Code及插入多工作表Code

我给VBA下的定义&#xff1a;VBA是个人小型自动化处理的有效工具。可以大大提高自己的劳动效率&#xff0c;而且可以提高数据的准确性。我这里专注VBA,将我多年的经验汇集在VBA系列九套教程中。 作为我的学员要利用我的积木编程思想&#xff0c;积木编程最重要的是积木如何搭建…

【C语言】指针变量未初始化

我们知道&#xff1a;全局变量未赋初值&#xff0c;编译器会直接赋值为0&#xff1b;局部变量如果未赋初值&#xff0c;则会维持上一状态保存在该地址上的值&#xff0c;这个值是随机的。把这个值赋值给局部变量是没有意义的。 但是指针变量是如何解决不赋初值&#xff1f; 指…

探索设计模式的魅力:状态模式揭秘-如何优雅地处理复杂状态转换

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;并且坚持默默的做事。 探索设计模式的魅力&#xff1a;状态模式揭秘-如何优雅地处理复杂状态转换 文章目录 一、案例…

力扣 187. 重复的DNA序列

1.题目 DNA序列 由一系列核苷酸组成&#xff0c;缩写为 A, C, G 和 T.。 例如&#xff0c;"ACGAATTCCG" 是一个 DNA序列 。 在研究 DNA 时&#xff0c;识别 DNA 中的重复序列非常有用。 给定一个表示 DNA序列 的字符串 s &#xff0c;返回所有在 DNA 分子中出现不止一…

如何连接ACL认证的Redis

点击上方蓝字关注我 应用程序连接开启了ACL认证的Redis时与原先的方式有差别&#xff0c;本文介绍几种连接开启ACL认证的Redis的Redis的方法。 对于RedisACL认证相关内容&#xff0c;可以参考历史文章&#xff1a; Redis权限管理体系(一&#xff09;&#xff1a;客户端名及用户…
最新文章