当前位置: 首页 > news >正文

RHCE8 资料整理(二)

RHCE8 资料整理

  • 第二篇 用户及权限管理
    • 第8章 用户管理
      • 8.1 基本概念
      • 8.2 管理用户
        • 8.2.1 创建用户
        • 8.2.2 修改用户属性
      • 8.3 用户的密码策略
      • 8.4 用户授权
      • 8.5 重置root密码
    • 第9章 权限管理
      • 9.1 所有者和所属组
      • 9.2 查看及修改权限
      • 9.3 数字权限
      • 9.4 默认权限
      • 9.5 特殊权限
      • 9.6 隐藏权限
    • 第10章 ACL权限
      • 10.1 ACL介绍及基本用法
      • 10.2 ACL的mask权限
      • 10.3 设置默认权限

在这里插入图片描述

第二篇 用户及权限管理

第8章 用户管理

8.1 基本概念

详细参考: https://blog.csdn.net/u010230019/article/details/132224998

用户信息:/etc/passwd
密码信息:/etc/shadow
群组信息:/etc/group
群组密码:/etc/gshadow

用户信息也可以通过getent获取

[root@server yurq]# getent shadow yurq root
yurq:$6$kKNzhuprgmIZd5Ma$L5mUUIwFM8gUDztJOfvWWGyviUpvWSS1X6q/L5Ss5h5tOyHx/5wl9MLBLdVsYtZygeZHEOFeHdIMI.eLYYuWB.:19608:0:99999:7:::
root:$6$rgRTLqdztP39Kgqd$WGy53xGZ2gg1Fr8BalJbSibzzSiI5aGk2ighMuiyP1Ofn1ZW20ZdzHkfx0qo8b3yDHe4zUmJkYfeSiIxWhtxx/::0:99999:7:::

判断用户是否存在

[root@server yurq]# id yurq
uid=1000(yurq) gid=1000(yurq) groups=1000(yurq),10(wheel)

8.2 管理用户

8.2.1 创建用户
useradd [options] username
-d
-M
-G
-g
-s
-u
-m
-c
passwd username		#隐式
echo 'password'|passwd --stdin username	#显式
-l	#锁定
-u	#解锁
-S	#显示信息
-d	#清除密码

锁定的账号登录会提示

[alex@server ~]$ su - yurq
Password:
su: Authentication failure
8.2.2 修改用户属性
usermod [options] username
-c
-s
-g
-u
-d
-L#锁定用户
-U#解锁用户

被锁定的账号同样不能登录,提示认证失败

[root@server yurq]# passwd -l yurq
Locking password for user yurq.
passwd: Success
[root@server yurq]# passwd -S yurq
yurq LK 2023-09-08 0 99999 7 -1 (Password locked.)
[root@server yurq]# passwd -u yurq
Unlocking password for user yurq.
passwd: Success
[root@server yurq]# passwd -S yurq
yurq PS 2023-09-08 0 99999 7 -1 (Password set, SHA512 crypt.)

锁定前后

删除用户

userdel [options] username
-f #强制,即使登录
-r #删除家目录

组管理

groupadd groupname
groupdel groupname
groups groupname			#查看组信息
gpasswd -a username groupname	#添加用户到组
gpasswd -d username groupname	#从组中删除用户

8.3 用户的密码策略

详细参考 https://blog.csdn.net/u010230019/article/details/132224998

[root@study ~]# chage [-ldEImMW] 账号名
选项与参数:
-l :列出该账号的详细密码参数;
-d :后面接日期,修改 shadow 第三字段(最近一次更改密码的日期),格式 YYYY-MM-DD,(0为下次登录需修改,常用)
-E :后面接日期,修改 shadow 第八字段(账号失效日),格式 YYYY-MM-DD,(-1 永不过期,1 立即过期)
-I :后面接天数,修改 shadow 第七字段(密码失效日期)
-m :后面接天数,修改 shadow 第四字段(密码最短保留天数)
-M :后面接天数,修改 shadow 第五字段(密码多久需要进行变更)
-W :后面接天数,修改 shadow 第六字段(密码过期前警告日期)

8.4 用户授权

普通用户的权限往往不够,例如有些命令只能root执行,所以可以让root对普通用户进行授权
详细参考:https://blog.csdn.net/u010230019/article/details/132269498

普通用户可以通过root添加授权,来实现root的权限,并且不需要知道root密码。有两种方式:

  1. 修改/etc/sudoers
  2. 在/etc/sudoers.d/目录中添加配置文件,文件名称建议以用户名命名

这两种方式添加的内容格式一致,格式:

user1	主机名A=(user2)  命令1,命令2,命令3...

这里授权表明用户user1在主机A拥有user2的执行命令1,命令2,命令3的权限

套用到root,则为

yurq	server.rhce.cc=(root)	/bin/mount

此时yurq就拥有root执行mount的权限,这里需要指明命令的绝对路径

此时yurq在server.rhce.cc可以执行mount命令,但是执行的时候需要通过sudo命令,例如

sudo mount /dev/ /mnt/sda

但此时,仍需要输入yurq的密码,如下修改则免除密码

yurq	server.rhce.cc=(root)	NOPASSD:	/bin/mount

如果需要赋权的指令较多,总不能加一堆吧,可通过ALL这个关键字实现,这个ALL可以替代主机名,用户和指令

yurq    ALL=(ALL) NOPASSWD:    ALL

yurq 不论来自哪部主机登入,他可以变换身份成为任何人,且可以进行系统上面的任何指令

想管理一个赋权账号,就需要有时间限制,在/etc/sudoers中,添加

Defaults	timestamp_timeout=N

可以设置密码保留时间为N分钟(默认为5分钟),此时配置文件中不能有NOPASSD:字段

用户可以通过sudo -k可以立即清除保留的密码
用户可以通过sudo -i切换到root用户,如果配置了NOPASSD:可以无密码直接切换

8.5 重置root密码

  1. 在内核引导界面,通过上下键选择第一行,按e键进入grub编辑界面,编辑grub菜单
    在这里插入图片描述
  2. 将linux行的ro改为rw,行尾加init=/bin/bash,按ctrl+x进行启动
    在这里插入图片描述
  3. 这样我们进入bash
    在这里插入图片描述
  4. 挂载根目录
    mount -o remount, rw /
    
  5. 接着在此处可以直接重置root密码,并且不需要知道原密码
    在这里插入图片描述
  6. 更改selinux
    vi etc/selinux/config #把 enforcing 改为 disable
    
  7. 重启该虚拟机就可以使用新密码登录root了
    exec /sbin/reboot
    
    命令重启不好用,可以直接手动重启

第9章 权限管理

9.1 所有者和所属组

所有者和所属组又称为属主和属组,这里一般指文件或目录的权限
详细参考 https://blog.csdn.net/u010230019/article/details/132208697

改变属主和属组命令为chown,格式

chown [OPTION]... [OWNER][:[GROUP]] FILE...
-R #递归,通常针对目录

这里指的一提的是属主和属组之间的关联符号,官方默认是:,但也可以用.,例如

chown user.group file 等价于chown user:group file

修改群组有单独的命令chgrp,格式

chgrp user file...

9.2 查看及修改权限

一般都是通过ls -lll查看,输入alias可以看到llls -l的别名

[root@server ~]# alias
...
alias ll='ls -l --color=auto'

关于ls -l 查看的文件权限一共九位,分三组。另外第10位.,也需要注意其含义,这里不展开写了,参考
https://blog.csdn.net/u010230019/article/details/132208697

修改权限一般使用chmod,格式

chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]... OCTAL-MODE FILE...
-R #递归

这里对权限的修改,格式还是比较多的

字符权限

对应所属赋值符类型含义
a+,-,=[r|w|x]对所有所属(属主,属组,其他人)进行操作
u+,-,=[r|w|x]对属主进行操作
g+,-,=[r|w|x]对属组进行操作
o+,-,=[r|w|x]对其他人进行操作

9.3 数字权限

八进制数字权限
可对[a,u,g,o]直接使用=进行数字赋权

r	-- 4	#读
w -- 2		#写
x -- 1		#执行
--- -- 0	#无任何权限,我们可以看到/etc/shadow每组都是这个权限

9.4 默认权限

目录的默认权限是755,文件的默认权限是644,这些权限是根据umask计算获得

[root@server ~]# umask
0022
[root@server ~]# umask -S
u=rwx,g=rx,o=rx

修改umask可以直接赋值,或者修改/etc/bashrc

umask 002

umask 过滤计算结论:

  1. 目录默认权限=777 - umask
  2. 文件默认权限=666 - (umask每个奇数 -1),如umask=333,则文件默认权限位444

9.5 特殊权限

这里主要说suid,sgid,sbit,详细参考:https://blog.csdn.net/u010230019/article/details/132171439

  1. SUID:当 s 这个标志出现在文件拥有者的 x 权限上时,那么:

SUID 权限仅对二进制程序(binary program)有效;
执行者对于该程序需要具有 x 的可执行权限;
本权限仅在执行该程序的过程中有效 (run-time);
执行者将在执行该程序过程中具有拥有者 (owner) 的权限。

修改方法:

chmod u[+|-]s binary_program

这个有什么用呢?举个例子,我们可以修改自己的登录密码,却不用联系管理员,因为/bin/passwd就设置了SUID

	[root@server yurq]# ll /bin/passwd-rwsr-xr-x. 1 root root 32648 Aug 10  2021 /bin/passwd

再举个例子,默认文件权限644,其他人是否可以修改文件内容呢?理论上不行,但是可以如下操作:

[root@server opt]# touch testfile
[root@server opt]# ll testfile
-rw-r--r-- 1 root root 10 Oct 19 22:14 testfile
[root@server opt]# chmod u+s /bin/vim
[root@server opt]# ll /bin/vim
-rwsr-xr-x. 1 root root 4025616 Feb 24  2022 /bin/vim
[root@server opt]# su - yurq
[yurq@server ~]$ vim /opt/testfile
[yurq@server ~]$ cat /opt/testfile
testfile1
[yurq@server ~]$ exit
logout
[root@server opt]# chmod u-s /bin/vim
[root@server opt]# su - yurq
[yurq@server ~]$ vim /opt/testfile
...
"/opt/testfile"
"/opt/testfile" E212: Can't open file for writing
Press ENTER or type command to continue
[yurq@server ~]$ exit
logout
  1. SGID:当 s 标志在文件/目录 群组的 x 项目上时,
    那么如果是文件的话:

SGID 对二进制程序有用;
程序执行者对于该程序来说,需具备 x 的权限;
执行者在执行的过程中将会获得该程序群组的支持!

参考SUID的示例,这个很好理解

如果是目录的话:

用户若对于此目录具有 r 与 x 的权限时,该用户能够进入此目录;
用户在此目录下的有效群组(effective group)将会变成该目录的群组;
用途:若用户在此目录下具有 w 的权限(可以新建文件),则使用者所建立的新文件,该新文件的群组与此目录的群组相同。

修改方法:

chmod g[+|-]s binary_program
  1. SBIT:这个 Sticky Bit, SBIT 目前只针对目录有效,对于文件已经没有效果了。SBIT 对于目录的作用是:

当用户对于此目录具有 w, x 权限,亦即具有写入的权限时;
当用户在该目录下建立文件或目录时,仅有自己与 root 才有权力删除该文件

即如果某个目录o位置上设置t时,那么此目录中的文件除所有者和root外,其他用户即使对此文件具有所有权限,也无法删除此文件

可以查看/tmp,也不难理解

[root@server opt]# ll -d /tmp/
drwxrwxrwt. 21 root root 4096 Oct 19 22:35 /tmp/

验证:
以 root 登入系统,并且进入 /tmp 当中;
touch test,并且更改 test 权限成为 777 ;
以一般使用者登入,并进入 /tmp;
尝试删除 test 这个文件!

修改方法:

chmod o[+|-]s binary_program

9.6 隐藏权限

系统中还存在一些隐藏权限,这些权限的设置对root也是生效的。查看命令lsattr,格式:

lsattr [ -RVadlpv ] [ files...  ]
-a :将隐藏文件的属性也秀出来;
-d :如果接的是目录,仅列出目录本身的属性而非目录内的文件名;
-R :连同子目录的数据也一并列出来!

修改命令chattr,格式:

chattr [+-=][ASacdistu] 文件或目录名称选项与参数:
+ :增加某一个特殊参数,其他原本存在参数则不动。
- :移除某一个特殊参数,其他原本存在参数则不动。
= :设定一定,且仅有后面接的参数a :当设定 a 之后,这个文件将只能增加数据,而不能删除也不能修改数据,只有 root 才能设定这属性
c :这个属性设定之后,将会自动的将此文件『压缩』,在读取的时候将会自动解压缩,但是在储存的时候,将会先进行压缩后再储存(看来对于大文件似乎蛮有用的!)
i :这个 i 可就很厉害了!他可以让一个文件『不能被删除、改名、设定连结也无法写入或新增数据!』对于系统安全性有相当大的帮助!只有 root 能设定此属性
s :当文件设定了 s 属性时,如果这个文件被删除,他将会被完全的移除出这个硬盘空间,所以如果误删了,完全无法救回来了喔!
u :与 s 相反的,当使用 u 来配置文件案时,如果该文件被删除了,则数据内容其实还存在磁盘中,可以使用来救援该文件喔!
[root@server yurq]# ll 123
-rw-rw-rw- 1 root root 0 Oct 19 21:51 123
[root@server yurq]# chattr +i 123
[root@server yurq]# su - yurq
[yurq@server ~]$ echo 123>123
-bash: 123: Operation not permitted
[yurq@server ~]$ exit
logout
[root@server yurq]# chattr -i 123
[root@server yurq]# su - yurq
[yurq@server ~]$ echo 1234 >123
[yurq@server ~]$ cat 123
1234
[yurq@server ~]$ lsattr 123
---------------------- 123[root@server yurq]# chattr +a 123
[root@server yurq]# lsattr 123
-----a---------------- 123
[root@server yurq]# su - yurq
[yurq@server ~]$ echo 12345 > 123
-bash: 123: Operation not permitted
[yurq@server ~]$ echo 12345 >> 123
[yurq@server ~]$ cat 123
1234
12345

第10章 ACL权限

详细可查看https://blog.csdn.net/u010230019/article/details/132269498

10.1 ACL介绍及基本用法

ACL 是 Access Control List 的缩写,主要的目的是在提供传统的 owner,group,others 的read,write,execute 权限之外的细部权限设定。ACL 可以针对单一使用者,单一文件或目录来进行r,w,x 的权限规范,对于需要特殊权限的使用状况非常有帮助。

说白了,就是直接对用户进行权限设置,而非依托于属主,属组和其他

查看ACL使用getfacl,格式

getfacl [options] file
-c #去除以#行首的行

设置ACL使用setfacl,格式

setfacl [-bkRd] [{-m|-x} acl参数] 目标文件名
选项与参数:
-m :设定后续的 acl 参数给‘文件’使用,不可与 -x 合用;
-x :删除后续的 acl 参数,不可与 -m 合用;
-b :移除『所有的』 ACL 设定参数;
-k :移除『预设的』 ACL 参数,关于所谓的『预设』参数于后续范例中介绍;
-R :递归设定 acl ,亦即包括次目录都会被设定起来;
-d :设定『预设 acl参数』的意思!只对‘目录’有效,在该目录新建的数据会引用此默认值
  • 用户设定规范:『 u:[使用者账号列表]:[rwx] 』
    比如说:
[root@server yurq]# getfacl yurq -c
user::rw-
group::r--
other::r--[root@server yurq]# setfacl -m u:alex:rwx yurq
[root@server yurq]# getfacl yurq -c
user::rw-
user:alex:rwx
group::r--
mask::rwx
other::r--[root@server yurq]# su - alex
[alex@server ~]$ echo 123 > /home/yurq/yurq
-bash: /home/yurq/yurq: Permission denied
[alex@server ~]$ ll /home/yurq/
ls: cannot open directory '/home/yurq/': Permission denied
[alex@server ~]$ exit
logout
[root@server yurq]# ll /home/yurq/ -d
drwx------. 15 yurq yurq 4096 Oct 20 17:39 /home/yurq/
[root@server yurq]# chmod o+rwx /home/yurq/
[root@server yurq]# su - alex
[alex@server ~]$ echo 123 > /home/yurq/yurq
[alex@server ~]$ ll /home/yurq/yurq
-rw-rwxr--+ 1 root root 4 Oct 20 17:54 /home/yurq/yurq

如果使用setfacl -m u::rwx file,则为所有用户加rwx

  • 特定的单一群组的权限设定:『 g:群组名:权限 』
    这个参考“用户”的设定即可,例如
setfacl -m g:mygroup1:rx acl_test1

10.2 ACL的mask权限

  • 针对有效权限设定:『 m:权限 』,即针对有效权限 mask 的设定方式
[root@study ~]# setfacl -m m:r acl_test1
[root@study ~]# getfacl acl_test1
# file: acl_test1
# owner: root
# group: root
user::rwx
user:vbird1:r-x 		#effective:r-- 	<==vbird1+mask 均存在者,仅有 r 而已,x 不会生效
group::r--
group:mygroup1:r-x 	#effective:r--
mask::r--
other::r--

实际用户权限会和有效权限mask取余

10.3 设置默认权限

  • 使用默认权限设定目录未来文件的 ACL 权限继承『 d:[u|g]:[user|group]:权限 』,针对预设权限的设定方式:
[root@study ~]# setfacl -m d:u:myuser1:rx /srv/projecta
[root@study ~]# getfacl /srv/projecta
# file: srv/projecta
# owner: root
# group: projecta
# flags: -suser::rwx
user:myuser1:r-x
group::rwx
mask::rwx
other::---
default:user::rwx
default:user:myuser1:r-x
default:group::rwx
default:mask::rwx
default:other::---[root@study ~]# cd /srv/projecta
[root@study projecta]# touch zzz1
[root@study projecta]# mkdir zzz2
[root@study projecta]# ll -d zzz*
-rw-rw----+ 1 root projecta 0 Jul 21 17:50 zzz1
drwxrws---+ 2 root projecta 6 Jul 21 17:51 zzz2
# 看吧!确实有继承喔!然后我们使用 getfacl 再次确认看看!
[root@study projecta]# getfacl zzz2
# file: zzz2
# owner: root
# group: projecta
# flags: -suser::rwx
user:myuser1:r-x
group::rwx
mask::rwx
other::---
default:user::rwx
default:user:myuser1:r-x
default:group::rwx
default:mask::rwx
default:other::---

透过这个『针对目录来设定的默认 ACL 权限设定值』的项目,我们可以让这些属性继承到次目录底下呢! 非常方便啊!那如果想要让 ACL 的属性全部消失又要如何处理?透过『 setfacl -b 檔名 』即可啦!

权限内容远远不止介绍中的内容,可参考
https://blog.csdn.net/u010230019/article/details/132208697

相关文章:

RHCE8 资料整理(二)

RHCE8 资料整理 第二篇 用户及权限管理第8章 用户管理8.1 基本概念8.2 管理用户8.2.1 创建用户8.2.2 修改用户属性 8.3 用户的密码策略8.4 用户授权8.5 重置root密码 第9章 权限管理9.1 所有者和所属组9.2 查看及修改权限9.3 数字权限9.4 默认权限9.5 特殊权限9.6 隐藏权限 第1…...

pytest合集(11)— conftest.py文件

1、conftest.py文件 conftest.py文件是pytest框架中的一个特殊文件&#xff0c;用于定义共享的设置、夹具(fixture)和钩子函数&#xff08;hook&#xff09;。 在pytest中&#xff0c;conftest.py文件可以用于在整个测试项目中共享夹具、配置和钩子函数。通过在conftest.py文…...

completablefuture的使用

CompletableFuture使用详解 【Java异常】Variable used in lambda expression should be final or effectively final CompletableFuture原理与实践-外卖商家端API的异步化 项目描述 项目接口需要从下游多个接口获取数据&#xff0c;并且下游的网络不稳定还会涉及到循环调用…...

51单片机的时钟系统

1.简介 51内置的时钟系统可以用来计时&#xff0c;与主程序分割开来&#xff0c;在计时过程中不会终端主程序&#xff0c;还可以通过开启时钟中断来执行相应的操作。 2.单片机工作方式 单片机内部有两个十六位的定时器T0和T1。每个定时器有两种工作方式选择&#xff0c;分别…...

神经网络的问题总结

神经网络目前可以分为以下几类问题&#xff0c;每类问题都有其特点和不断取得的进展&#xff1a; 分类问题&#xff1a; 特点&#xff1a;在给定一组数据点的情况下&#xff0c;将它们分为不同的类别。进展&#xff1a;神经网络在图像分类、文本分类、音频分类等方面取得了显著…...

树莓派图像处理基础知识

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、基本函数1. cvtColor(src,tmp,COLOR_BGR2RGB);2.在OpenCV和Qt中&#xff0c;转换cv::Mat到QImage3.Canny(tmp,dst,30,255);4.dst matframe.clone();5.video…...

Kotlin中的Lambda表达式基本定义和使用

在Kotlin中&#xff0c;Lambda表达式是一种简洁的方式来定义匿名函数。Lambda表达式可以作为函数的实际参数或者返回值&#xff0c;使得函数成为高阶函数。本篇博客将介绍Lambda表达式的基本概念以及使用方法&#xff0c;并提供相关的示例代码。 Lambda表达式的基本概念 Lamb…...

递福巴士是不是骗局呢?

递福巴士的背景介绍 递福巴士是社区服务机构软件。递福巴士是一家提供公益服务的平台&#xff0c;为社区居民提供各种服务和支持的软件。多年来&#xff0c;递福巴士一直致力于社区服务和社会公益&#xff0c;积极推动社区的发展&#xff0c;改善社区居民的生活质量。 递福巴士…...

torch.Size([])与torch.Size([0])的区别

在PyTorch中&#xff0c;torch.Size([])和torch.Size([0])都表示一个空的维度&#xff08;dimension&#xff09;。然而&#xff0c;它们之间有微妙的区别。 torch.Size([])&#xff1a; 表示一个标量&#xff08;scalar&#xff09;&#xff0c;即一个没有维度的张量。这个张量…...

DP基础相关笔记

基础 DP LIS LIS&#xff08;Longest Increasing Subsequence&#xff09;&#xff0c;顾名思义&#xff0c;就是最长上升子序列问题。 在这里我们要区分一下子串和子序列的区别&#xff0c;很简单&#xff0c;子串连续&#xff0c;子序列可以不连续。然而就在几小时之前本蒟…...

配置公网和私网用户通过非公网口的IP地址访问内部服务器和Internet示例

组网需求 如配置公网和私网用户通过非公网口的IP地址访问内部服务器和Internet示例所示&#xff0c;某小型企业内网部署了一台路由器、一台FTP服务器和一台Web服务器。路由器作为接入网关&#xff0c;为下挂的内网用户提供上网服务&#xff0c;主要包括浏览网页、使用即时通信…...

相机镜头选择与机器视觉控制

相机镜头选择与机器视觉控制 在机器视觉领域&#xff0c;除了图像处理和算法&#xff0c;还需要关注硬件方面的选型和控制。相机镜头的选择是其中重要的一部分&#xff0c;需要考虑像素大小、镜头焦距等因素以满足项目需求。此外&#xff0c;编程技能也包括相机的调用和使用&a…...

Git 为文件添加执行权限

背景 当你是一台Linux&#xff0c;想要给文件加权限很简单&#xff0c;只需要执行以下命令 chmod x filename就可以给文件添加执行权限&#xff0c;但是如果你是Windows那就很麻烦了 解决方案 假设这里有一个名为 file.sh 的文件&#xff0c;内容如下&#xff1a; #!/bin/…...

问题记录:GPU显卡提高后,代码总体运行效率没有提高

问题&#xff1a;GPU显卡提高后&#xff0c;代码总体运行效率没有提高 原先显卡NIVIDA T400换成NVIDIA RTX A4000&#xff0c;CUDA核心&#xff08;物理GPU线程单位&#xff09;从三百多提升到了六千多&#xff0c;但是程序总体运行的时间没有变化。 原因分析 显卡没用上或者…...

Reparameterization trick(重参数化技巧)

“Reparameterization trick”&#xff08;重参数化技巧&#xff09;是一种在训练生成模型中处理随机性潜在变量的方法&#xff0c;特别常见于变分自动编码器&#xff08;VAE&#xff09;等模型中。这个技巧的目的是使模型可微分&#xff08;differentiable&#xff09;&#x…...

Kotlin中的可空类型

在 Kotlin 中&#xff0c;可空类型是一项重要的特性&#xff0c;它允许我们声明变量可以为空。在本篇博客中&#xff0c;我们将介绍 Kotlin 中的可空类型&#xff0c;并提供示例代码演示如何处理可空变量、使用安全调用操作符&#xff08;?.&#xff09;、Elvis 运算符&#x…...

数学建模——最大流问题(配合例子说明)

目录 一、最大流有关的概念 例1 1、容量网络的定义 2、符号设置 3、建立模型 3.1 每条边的容量限制 3.2 平衡条件 3.3 网络的总流量 4、网络最大流数学模型 5、计算 二、最小费用流 例2 【符号说明】 【建立模型】 &#xff08;1&#xff09;各条边的流量限制 &a…...

AAOS CarMediaService 服务框架

文章目录 前言MediaSessionCarMediaService作用是什么&#xff1f;提供了哪些接口&#xff1f;如何使用&#xff1f;CarMediaService的实现总结 前言 CarMediaService 是AAOS中统一管理媒体播放控制、信息显示和用户交互等功能的服务。这一服务依赖于android MediaSession框架…...

gRPC之gRPC转换HTTP

1、gRPC转换HTTP 我们通常把RPC用作内部通信&#xff0c;而使用Restful Api进行外部通信。为了避免写两套应用&#xff0c;我们使用grpc- gateway 把gRPC转成HTTP。服务接收到HTTP请求后&#xff0c;grpc-gateway把它转成gRPC进行处理&#xff0c;然后以JSON 形式返回数据。…...

【十四】记一次MySQL宕机恢复过程,MySQL INNODB 损坏恢复

记一次MySQL宕机恢复过程 简介&#xff1a;一个业务数据库疏于运维管理&#xff0c;突然在今天崩溃宕机了&#xff0c;真是让人抓狂&#xff0c;上面也不知道积累了多久的数据&#xff0c;平时也没有定期做好备份&#xff0c;这下岂不是瞎了啊&#xff0c;经过不断的收集信息和…...

GPU虚拟化

引言 现有如下环境&#xff08;注意相关配置&#xff1a;只有一个k8s节点&#xff0c;且该节点上只有一张GPU卡&#xff09;&#xff1a; // k8s版本 $ kubectl version Client Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.7&…...

原型对象(Prototype)详解

原型对象(Prototype)详解 一、核心概念 本质:每个 JavaScript 对象(除 null 外)都有的内置属性作用:实现对象间的属性/方法继承(原型继承)存储位置:[[Prototype]] 内部属性(通过 __proto__ 或 Object.getPrototypeOf() 访问)二、关键特性图示 对象实例 (obj)│├─…...

kubernetes jenkins pipeline优化拉取大仓库性能指定分支+深度

有时候我们历史的git仓库&#xff0c;提交了某个比较大的文件如果不限制 depth &#xff0c;就会拉取所有的历史提交记录&#xff0c;这样在历史仓库比较大的时候 clone 非常之慢&#xff0c;而实际上我们只需要最新的代码来构建就行了&#xff0c;为了优化性能&#xff0c;我们…...

C++基础进阶:函数、内联函数与Lambda函数详解

引言 在C编程的旅程中&#xff0c;函数是构建复杂程序的基本单元。它们像乐高积木一样&#xff0c;允许我们将代码分解成更小、更易于管理的部分。今天&#xff0c;我们将深入探讨C中的三种重要函数类型&#xff1a;普通函数、内联函数以及Lambda函数。掌握它们&#xff0c;将…...

Maven入门(够用)

1、Maven是什么&#xff1f; 这个问题非常不重要&#xff0c;或者说不应该上来就问maven是什么&#xff0c;而是直接学习maven怎么用能干什么&#xff0c;学完之后自然就知道了maven是个什么玩意儿&#xff0c;很多技术都是如此。 2、Maven下载 先准备Java环境&#xff0c;安…...

卫星接收天线G/T值怎么计算?附G/T计算excel表格链接

我们在进行无线通信链路设计时&#xff0c;都会涉及接收天线最重要的参数G/T。今天&#xff0c;咱们就来聊聊G/T值该怎么计算&#xff0c;计算过程中有哪些需要留意的地方&#xff0c;以及当你看到产品说明书中标注了G/T指标&#xff0c;还需要进一步了解哪些信息。 G/T的含义 …...

1. Web网络基础 - IP地址核心知识解析

深入解析IP地址与ipconfig命令&#xff1a;网络工程师的必备技能 在网络世界中&#xff0c;IP地址是设备通信的基石。本文将全面解析IP地址的核心概念&#xff0c;并通过ipconfig命令实战演示如何获取关键网络配置信息。 一、IP地址核心知识解析 1. IP地址的本质 定义&#x…...

Go语言中的if else控制语句

if else是Go语言中最基础也最常用的条件控制语句&#xff0c;用于根据条件执行不同的代码块。下面我将详细介绍Go语言中if else的各种用法和特性。 1. 基本语法 1.1. 最简单的if语句 if 条件表达式 {// 条件为true时执行的代码 } 示例&#xff1a; if x > 10 {fmt.Prin…...

深入解析 CAS 操作

一、CAS 的本质&#xff1a;硬件级别的乐观锁 CAS&#xff08;Compare-And-Swap&#xff0c;比较并交换&#xff09; 是一种原子操作指令&#xff0c;用于实现对共享变量的无锁并发修改。它是现代多核处理器支持的底层硬件指令&#xff0c;也是构建高效并发数据结构&#xff0…...

相机--相机标定实操

教程 camera_calibration移动画面示例 usb_cam使用介绍和下载 标定流程 单目相机标定 我使用的是USB相机&#xff0c;所以直接使用ros的usb_cam功能包驱动相机闭关获取实时图像&#xff0c;然后用ros的camera_calibration标定相机。 1,下载usb_cam和camera_calibration: …...