深入探索Android签名机制:从v1到v3的演进之旅


引言

在Android开发的世界中,APK的签名机制是确保应用安全性的关键环节。随着技术的不断进步,Android签名机制也经历了从v1到v3的演进。本文将带你深入了解Android签名机制的演变过程,揭示每个版本背后的技术细节,并探讨它们对开发者和用户的影响。


一、签名机制


1、什么是Android签名?


在Android生态中,APK签名机制是确保应用安全性的重要环节。它不仅保障了应用来源的真实性,还防止了APK文件在传输过程中被篡改。Android系统要求每个应用程序都必须经过数字签名,这是一种使用密钥对(包含公钥和私钥)对应用程序进行加密和验证的方式。


2、签名机制的主要目的

  • 确保应用程序的完整性
    当用户从任何来源(如Google Play商店或第三方网站)下载应用程序时,Android系统会使用应用程序的证书对应的公钥来验证应用程序的签名。如果签名验证通过,则表明应用程序在传输过程中没有被篡改或损坏,确保了应用程序的完整性。


  • 建立应用程序的信任关系
    Android系统使用应用程序的签名来识别应用程序的开发者身份。如果同一个开发者发布了一个新版本的应用程序,Android系统会检查新版本的签名是否与之前版本的签名相同。只有签名相同,Android系统才会允许新版本应用程序访问之前版本应用程序的数据和资源,从而建立了应用程序之间的信任关系。


  • 保护应用程序的权限和数据
    Android系统使用签名来控制应用程序之间的权限和数据访问。例如,如果一个应用程序需要访问另一个应用程序的组件(如Activity、Service或BroadcastReceiver),则两个应用程序必须由同一个开发者签名,否则将无法访问。这种机制可以防止恶意应用程序访问其他应用程序的敏感数据或资源。


举个例子,假设你是Android应用程序开发者,你需要发布一个新的应用程序。

在开发过程中,你需要生成一个密钥对,使用私钥对应用程序进行签名。然后,你可以将公钥嵌入到应用程序的元数据中,并将签名后的应用程序发布到Google Play商店或其他渠道。

当用户下载并安装你的应用程序时,Android系统会使用嵌入在应用程序中的公钥来验证应用程序的签名。如果签名验证通过,则表明应用程序来自可信任的来源,没有被篡改过,系统会允许应用程序安装和运行。

如果你以后需要发布应用程序的新版本,你必须使用相同的私钥对新版本进行签名。这样,Android系统就会识别出新版本和旧版本来自同一个开发者,并允许新版本访问旧版本的数据和资源。


二、签名机制的核心概念


1、消息摘要


消息摘要(Message Digest)是一种通过单向散列算法对任意长度的数据进行计算并产生固定长度的小型摘要信息(又称哈希值或指纹)的技术。


(1)、消息摘要主要特点

  • 压缩性:无论输入的数据有多大,计算出来的消息摘要的长度都是固定的,通常为128位或更长。

  • 易计算:给定需要计算摘要的数据,非常容易计算出消息摘要。

  • 隐行性:相同的输入必定得到相同的输出,但反过来,由输出极其困难推导出输入值。

  • 抗碰撞:理论上不可能找到两个不同的输入计算出相同的消息摘要。

常见的消息摘要算法有:MD5、SHA-1、SHA-256等。以MD5为例,它会对任意长度的输入数据执行一系列复杂的操作,最终生成一个128位(16字节)的散列值。这个散列值就是该输入数据的唯一"指纹"。


(2)、消息摘要应用场景

  • 数据完整性验证

    通过对原始数据计算出摘要,传输时只需传输摘要。接收方重新计算摘要并与传输的摘要进行比对,可验证数据在传输过程中是否遭到篡改。如软件下载的MD5/SHA-1校验。


  • 数字签名

    发送方先对原始数据计算消息摘要,再使用自己的私钥对摘要加密,形成数字签名附加在原始数据后发送。接收方使用发送方的公钥解密签名,并重新计算原始数据的摘要与解密后的摘要进行比对,以验证数据的完整性和发送方身份。


  • 信息认证

    可使用消息摘要作为口令、证书等的内容,再与其他信息结合来认证用户或实体身份。


  • 数据去重

    在处理海量数据时,利用消息摘要可方便地对重复数据进行判断和去重处理。


  • 散列表

    消息摘要常被用来优化存储和查找,作为键值存储结构的关键字段。


2、数字签名


数字签名(Digital Signature)是一种利用加密技术在数字信息上附加一个标记,以实现信息发送者身份的可靠性、数据完整性和防止抵赖性的密码技术。


(1)、数字签名特点

  • 真实性认证
    数字签名使用了发送者的私钥进行签名,只有拥有对应私钥的发送者才能产生有效的数字签名。接收方可使用发送者的公钥对签名进行验证,以确认信息确实来自声称的发送者。


  • 不可抵赖性
    发送者在发送信息前先对信息签名,一旦签名的信息被发送,发送者就无法抵赖曾经发送过这个消息。


  • 完整性
    数字签名是在原始数据上做运算得到的,任何对原始数据的修改都会使签名失效。因此,数字签名能有效防止信息在传输过程中被篡改。


  • 不可伪造
    理论上,由于采用了单向散列函数和发送者私钥的双重保护,数字签名是不可能被伪造的。

(2)、数字签名的生成过程

  • 使用摘要算法(如MD5、SHA-1等)计算原始数据的消息摘要
  • 使用发送者的私钥对消息摘要进行加密,生成数字签名
  • 将原始数据和数字签名一并发送

在这里插入图片描述


(3)、验证数字签名过程

  • 使用同样的摘要算法计算收到原始数据的消息摘要
  • 使用发送者的公钥对数字签名进行解密,获得原始的消息摘要
  • 比较两个消息摘要是否相同,若相同则验证通过

在这里插入图片描述


常见的数字签名算法有RSA、DSA等,它们基于复杂的数论和离散对数问题,具有非常高的计算复杂度,从理论上保证了签名的安全性。

数字签名被广泛应用于电子商务、网上银行、软件分发、电子合同、电子政务等领域,是构建信任机制、保证信息安全的重要手段。


3、数字证书


数字证书(Digital Certificate)是一种用于加密和解密的电子文件,它遵循国际标准X.509,用于确认公钥实际属于某个人或组织。

数字证书最关键的作用是在网络通信中确认对方身份的合法性,建立加密连接的信任基础。

数字证书通过CA机构的数字签名,解决了公钥的安全可信问题,保证了公钥的持有者身份。


(1)、数字证书包含信息

  • 证书版本号:标识证书所使用的X.509标准版本。

  • 证书序列号:证书的唯一标识符号。

  • 签名算法:签发证书时所使用的签名算法,如SHA256withRSA。

  • 签发者:签发此证书的证书颁发机构(CA)的信息。

  • 有效期限:证书的有效期,包括生效日期和失效日期。

  • 主题信息:持有此证书实体的信息,如组织名称、域名等。

  • 公钥信息:证书持有者的公钥数据,用于加密或验证数字签名。

  • 扩展信息:可选的附加信息,如密钥使用范围、证书吊销列表分发点等。

  • 数字签名:由证书颁发机构使用其私钥对整个证书进行签名后的数字签名值。


(2)、数字证书的生成和使用过程

  • 证书申请者向权威的证书颁发机构(CA)提交公钥、个人信息和申请证书材料。
  • CA按照严格的身份审核流程,验证申请者的身份合法有效后。
  • CA使用自身的私钥,对申请者的证书信息进行数字签名,并将证书文件返回给申请者。
  • 申请者收到数字证书后,即可使用其中的公钥进行加密和解密操作。
  • 任何需要验证申请者身份的第三方,只需获取证书对应的CA的公钥,就能验证证书上的数字签名,确认公钥的所有权。

(3)、数字证书应用场景

  • HTTPS网站服务,确保网站身份合法有效
  • 移动应用程序,验证APP签名身份
  • 电子邮件签名,防止邮件伪造
  • 文件签名,确保文件的完整性和发送者身份
  • 无线网络接入,验证无线接入点的合法性
  • 虚拟专网VPN,实现客户端到服务器的加密通信

三、APK签名方案v1


1、APK签名方案v1原理

v1签名使用的是SHA-1算法对整个APK进行摘要计算,然后使用开发者私钥对该摘要进行数字签名。

签名后的数据将被储存在APK的META-INF/CERT.SF和META-INF/CERT.RSA文件中。

在这里插入图片描述


(1)、MANIFEST.MF

该文件中保存的内容其实就是逐一遍历 APK 中的所有条目,如果是目录就跳过,如果是一个文件,就用 SHA1(或者 SHA256)消息摘要算法提取出该文件的摘要然后进行 BASE64 编码后,作为「SHA1-Digest」属性的值写入到 MANIFEST.MF 文件中的一个块中。该块有一个「Name」属性, 其值就是该文件在 APK 包中的路径。

在这里插入图片描述


(2)、CERT.SF

  • SHA1-Digest-Manifest-Main-Attributes:对 MANIFEST.MF 头部的块做 SHA1(或者SHA256)后再用 Base64 编码
  • SHA1-Digest-Manifest:对整个 MANIFEST.MF 文件做 SHA1(或者 SHA256)后再用 Base64 编码
  • SHA1-Digest:对 MANIFEST.MF 的各个条目做 SHA1(或者 SHA256)后再用 Base64 编码

在这里插入图片描述


(3)、CERT.RSA

这里会把之前生成的 CERT.SF 文件,用私钥计算出签名, 然后将签名以及包含公钥信息的数字证书一同写入 CERT.RSA 中保存。

这里要注意的是,Android APK 中的 CERT.RSA 证书是自签名的,并不需要这个证书是第三方权威机构发布或者认证的,用户可以在本地机器自行生成这个自签名证书。Android 目前不对应用证书进行 CA 认证。

在这里插入图片描述


​ 这里我们看到的都是二进制文件,因为 RSA 文件加密了,需要用 openssl 命令才能查看其内容:

$ openssl pkcs7 -inform DER -in /Sample-release_new/original/META-INF/CERT.RSA -text -noout -print_certs

在这里插入图片描述


签名具体过程:

  • 计算APK的SHA-1摘要值digest
  • 使用开发者私钥对digest进行签名,生成数字签名sig
  • 将sig存储在CERT.RSA文件中
  • 生成包含APK的digest描述及其他元数据的CERT.SF文件
  • 对CERT.SF文件计算SHA-1摘要digest2
  • 使用开发者私钥对digest2签名,存储到CERT.SF中

在这里插入图片描述


签名校验过程:

签名验证是发生在 APK 的安装过程中,一共分为三步:

  • 第一步,检查 APK 中包含的所有文件,对应的摘要值与 MANIFEST.MF 文件中记录的值一致。

  • 第二步,使用证书文件(RSA 文件)检验签名文件(SF 文件)没有被修改过。

  • 第三步,使用签名文件(SF 文件)检验 MF 文件没有被修改过。

在这里插入图片描述


2、使用APK签名v1的完整示例


(1)、生成密钥对

使用keytool工具生成密钥对,别名为mykey,有效期为10000天:

keytool -genkey -v -keystore mykey.keystore -alias mykey -keyalg RSA -keysize 2048 -validity 10000

(2)、对APK进行对齐

使用zipalign工具对APK进行对齐优化:

复制

zipalign 4 myapp.apk myapp-aligned.apk

(3)、获取待签名APK的摘要值

使用apkutil工具计算待签名APK的摘要值:

apkutil digest myapp-aligned.apk
Digest of myapp-aligned.apk:SHA-1: A0:EA:B8:12.....

(4)、使用密钥库签名APK

使用apksigner工具对APK进行签名:

apksigner sign --ks mykey.keystore --ks-key-alias mykey myapp-aligned.apk

输入密钥库密码后,APK将被签名,生成myapp-aligned-signed.apk文件。


(5)、验证签名

使用apksigner工具验证签名:

apksigner verify --verbose myapp-aligned-signed.apk

输出显示APK签名合法,说明签名成功。

这样就完成了使用v1签名方案对APK进行签名的全过程。

需要注意的是,从Android 9.0开始,APK需要同时使用v1和v2签名方案。使用v2签名方案可以提高签名效率和安全性。开发者可以使用Android SDK的apksigner工具同时进行v1和v2签名。


四、APK签名方案v2


Android APK签名方案v2是Google在Android 7.0中引入的新签名方案,旨在提高签名的效率和安全性。它主要解决了v1方案中存在的一些问题,如签名数据过大、校验效率低下等。


1、APK签名方案v2原理

v2签名使用更高强度的SHA-256算法和先进的APK Signature Scheme v2签名方案。

v2 签名模式在原先 APK 块中增加了一个新的块(签名块),新的块存储了签名,摘要,签名算法,证书链,额外属性等信息,这个块有特定的格式。


在这里插入图片描述


为了保护 APK 内容,整个 APK(ZIP 文件格式)被分为以下 4 个区块:

  • ZIP 条目的内容(从偏移量 0 处开始一直到“APK 签名分块”的起始位置)

  • APK 签名分块

  • ZIP 中央目录

  • ZIP 中央目录结尾


在这里插入图片描述


其中,应用签名方案的签名信息会被保存在 区块 2(APK Signing Block)中,而区块 1(Contents of ZIP entries)、区块 3(ZIP Central Directory)、区块 4(ZIP End of Central Directory)是受保护的,在签名后任何对区块 1、3、4 的修改都逃不过新的应用签名方案的检查。


主要特点:

  • 使用更高强度的SHA-256代替SHA-1
  • 只对APK中的代码和资源进行签名,而不是整个APK文件
  • 引入APK Signature Scheme v2,对每个文件单独签名并存储签名数据
  • 支持使用多个签名密钥对APK签名

签名过程:

  • 遍历APK中的所有内容,计算SHA-256摘要值

  • 使用开发者的私钥对每个文件摘要进行签名

  • 将所有文件签名保存在APK的META-INF/hashValue文件中

  • 生成证书列表,存储在APK的META-INF/hashValue.sf文件中

  • 生成APK Signature Block,包含证书链、签名数据,存储在APK的META-INF/hashValue.rsa文件中


在这里插入图片描述


签名校验过程:

我们来看v2签名的校验过程,整体大概流程如下图所示:

在这里插入图片描述


其中 v2 签名机制是在 Android 7.0 以及以上版本才支持。

因此对于 Android 7.0 以及以上版本,在安装过程中,如果发现有 v2 签名块,则必须走 v2 签名机制,不能绕过;否则降级走 v1 签名机制。 v1 和 v2 签名机制是可以同时存在的,其中对于 v1 和 v2 版本同时存在的时候,v1 版本的 META_INF 的 .SF 文件属性当中有一个 X-Android-APK-Signed 属性:

X-Android-APK-Signed: 2

因此如果想绕过 v2 走 v1 校验是不行的。


2、使用APK签名v2的完整示例

(1)、生成密钥对

keytool -genkey -v -keystore mykey.keystore -alias mykey -keyalg RSA -keysize 2048 -validity 10000

(2)、使用zipalign优化APK文件

zipalign 4 myapp.apk myapp-aligned.apk

(3)、使用apksigner对APK进行v2签名

apksigner sign --ks mykey.keystore --ks-key-alias mykey --v2-signing-enabled true myapp-aligned.apk

输入密钥库密码后,apksigner将会生成已签名的APK文件myapp-aligned-signed.apk。

(4)、验证APK签名(可选)

apksigner verify --verbose myapp-aligned-signed.apk

输出显示APK使用的是v2签名方案,并且签名合法。

这样就完成了v2签名方案对APK的签名操作。我们可以看到相比v1方案,v2签名更加高效和安全,签名数据也更小。

需要注意的是,从Android 9.0开始,Google要求所有上架Google Play的新APK必须同时使用v1和v2签名方案进行签名。

我们可以使用如下:

apksigner sign --ks mykey.keystore --ks-key-alias mykey --v1-signing-enabled true --v2-signing-enabled true myapp-aligned.apk

这将生成一个同时包含v1和v2签名的APK文件,可以在所有Android版本上安装和运行。


五、APK签名方案v3


Android APK签名方案v3是Google在Android 11中引入的最新签名方案,主要目的是提高签名的安全性和可靠性。相比之前的签名方案,v3签名引入了一些重大改变,如引入Android KeyStore系统以增强密钥安全性、支持对签名使用压缩等。下面将详细介绍APK签名v3的原理和使用案例。


1、APK签名方案v3原理

(1)、v3签名的主要特性

  • 使用Android KeyStore系统存储和管理私钥,增强密钥安全性。

  • 支持使用压缩算法(如gzip)对签名数据进行压缩,减小APK大小。

  • 支持签名时向APK添加新的签名方案,但保留之前版本的签名数据。

  • 签名时支持附加描述信息(attribution)。


(2)、签名过程

  • 开发者生成密钥对,并将私钥安全存储在Android KeyStore系统中。
  • 遍历APK内容,计算SHA-256或SHA-512摘要值。
  • 使用私钥对每个文件摘要进行签名。
  • 将签名数据压缩后存储在APK的新增的APK Signature Block文件中。
  • 可选地添加签名者的描述信息(attribution)。

(3)、签名校验过程

在这里插入图片描述

需要注意的是,对于覆盖安装的情况,签名校验只支持升级,而不支持降级。也就是说设备上安装了一个使用 v1 签名的 APK,可以使用 v2 签名的 APK 进行覆盖安装,反之则不允许。


(3)、使用APK签名v3的完整示例

  • 生成密钥对并保存到Android KeyStore
cmd:  keytool --genkeypair --v --keystore ~/.android/debug.keystore --alias androiddebugkey --keyalg RSA --keysize 2048 --validity 10000
  • 使用zipalign优化APK
zipalign 4 myapp.apk myapp-aligned.apk
  • 使用apksigner进行v3签名

从Android 11开始,apksigner工具默认使用v3签名方案

apksigner sign --ks ~/.android/debug.keystore --ks-key-alias androiddebugkey myapp-aligned.apk

输入密钥库密码后,将生成已签名的APK: myapp-aligned-signed.apk

  • 验证APK签名
apksigner verify --verbose myapp-aligned-signed.apk

输出将显示签名使用了v3方案,并且合法有效。

以上就是使用v3签名APK的完整过程。

值得注意的是:

  • 对于Android 11及更高版本,Google Play要求新APK必须使用v3签名方案。
  • 对于Android 9至10版本,新APK需同时使用v2和v3签名。可以使用参数--v2-signing-enabled true启用v2签名。
  • 对于Android 8及以下版本,新APK必须使用v1和v2签名,使用参数--v1-signing-enabled true启用v1签名。

通过并存不同版本的签名数据,Google保证了APK在所有Android版本上的兼容性。总的来说,v3签名进一步增强了签名的安全性和可靠性,为Android系统的应用程序分发提供了更好的保护。


结语

签名机制的演进为Android应用的安全性提供了坚实的基础,但随着技术的发展,未来是否还会出现新的签名方案?现有的机制又将如何适应不断变化的安全需求?让我们拭目以待。

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

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

相关文章

浅谈下MYSQL表设计的几条规则

作为后端开发人员,避免不了和数据库打交道,可是我们怎么能够设计出高效,可维护,可扩展的数据库设计呢,在这里我总结了几个点,供大家参考。 在写之前,可能需要重复下数据库设计的范式原则&#…

水雨情监测系统—实时监测水位信息

TH-SW3水雨情监测系统是一种专门用于实时监测和收集水文气象数据的自动化系统。它能够实时获取区域内降雨和水情数据,并将其存储到数据库中进行分析处理,从而为防汛指挥人员提供及时准确的信息服务。 水雨情监测系统的主要功能包括实时监测水位、流速、流…

C++类与对象基础探秘系列(二)

目录 类的6个默认成员函数 构造函数 构造函数的概念 构造函数的特性 析构函数 析构函数的概念 析构函数的特性 拷贝构造函数 拷贝构造函数的概念 拷贝构造函数的特性 赋值运算符重载 运算符重载 赋值运算符重载 const成员 const修饰类的成员函数 取地址及const取地址操作…

MySQL文档_下载

可能需要:MySQL下载–》更新版本–》迁移数据库到MySQL 以下都不重要【只要确定好需要安装版本,找到对应的版本下载,安装,设置即可】 下载、安装: Determine whether MySQL runs and is supported on your platform…

Debian12安装后更换为国内镜像源,切换root用户,解决用户名不在sudoers文件中此事将被报告

选择Debian作为编程开发最佳Linux的理由: Debian是面向程序员的最古老,最出色的Linux发行版之一。Debian提供了具有.deb软件包管理兼容性的超稳定发行版。Debian为程序员提供了许多最新功能。因此,它具有一个特殊的编程空间。Debian是开发人员…

弥合孤岛:克服构建 DevOps 文化的挑战

持续变革正在发生软件开发行业。DevOps 因其对自动化、协作和持续改进的关注而成为优化软件交付并弥合开发和运营团队之间鸿沟的重要方法。然而,过渡到真正的 DevOps 文化并非没有挑战。本文探讨了您在追求 DevOps 时可能面临的障碍并提供了解决方案。 01 了解 Dev…

数据结构 顺序表1

1. 何为顺序表: 顺序表是一种线性数据结构,是由一组地址连续的存储单元依次存储数据元素的结构,通常采用数组来实现。顺序表的特点是可以随机存取其中的任何一个元素,并且支持在任意位置上进行插入和删除操作。在顺序表中&#xf…

算法-卡尔曼滤波之基本数学的概念

1.均值 定义:均值是一组数据中所有数值的总和除以数据的数量。均值是数据的中心趋势的一种度量,通常用符号 xˉ 表示。 :对于包含 n 个数据的数据集 {𝑥1,𝑥2,...,𝑥𝑛},均值 xˉ 计…

Spring原理

目录 一、Bean作用域 1、Bean作用域概念 2、Bean的六种作用域 3、举例演示bean的几种作用域 二、Bean的生命周期 1、Bean对象的生命周期 2、演示Bean对象的生命周期 三、SpringBoot的自动配置 1、概念 2、spring将对象存入容器中的原理 一、Bean作用域 在前面spring…

C语言(指针)7

Hi~!这里是奋斗的小羊,很荣幸各位能阅读我的文章,诚请评论指点,关注收藏,欢迎欢迎~~ 💥个人主页:小羊在奋斗 💥所属专栏:C语言 本系列文章为个人学习笔记&#x…

6款日常精选手机APP推荐!

AI视频生成:小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://aitools.jurilu.com/ 1.全能相机软件——无他相机 无他相机App是一款完全免费且功能全面的美颜相机软件。这款相机应用集自拍、美颜、图片编辑、风格化模板、流行贴…

springboot+vue+mybatis台球俱乐部管理系统的设计与实现+PPT+论文+讲解+售后

随着信息技术在管理上越来越深入而广泛的应用,作为一般的台球厅都会跟上时代的变化,用上计算机来代表重复性的劳动,并且给用户一种新奇的感受,实现台球俱乐部系统 在技术上已成熟。本文介绍了台球俱乐部系统 的开发全过程。通过分…

k8s v1.20二进制部署 部署 CNI 网络组件 部署 Calico

一、部署 flannel 1.1.K8S 中 Pod 网络通信 ●Pod 内容器与容器之间的通信 在同一个 Pod 内的容器(Pod 内的容器是不会跨宿主机的)共享同一个网络命名空间,相当于它们在同一台机器上一样,可以用 localhost 地址访问彼此的端口。…

InternLM-XComposer2-4KHD开拓性的4K高清视觉-语言模型

大型视觉-语言模型(LVLM)在图像字幕和视觉问答(VQA)等任务中表现出色。然而,受限于分辨率,这些模型在处理包含细微视觉内容的图像时面临挑战。 分辨率的限制严重阻碍了模型处理含有丰富细节的图像的能力。…

一个视频AI自动抠像 速度快 操作简单 - RobustVideoMattingGU

RVM的GUI版本: 一款基于Robust Video Matting(RVM)源码的图形用户界面(GUI)版本,采用先进的pyqt6框架和qdarkstyle风格设计,为视频编辑爱好者和二次创作者打造了一个功能丰富的工具箱。这款软件…

Python 全栈体系【四阶】(四十二)

第五章 深度学习 九、图像分割 3. 常用模型 3.2 U-Net(2015) 生物医学分割是图像分割重要的应用领域。U-Net是2015年发表的用于生物医学图像分割的模型,该模型简单、高效、容易理解、容易定制,能在相对较小的数据集上实现学习…

深度剖析进程概念与进程状态

文章目录 1. 前言2. 什么是进程2.1 进程概念2.2 进程描述——PCB 3. 进程的一些基本操作3.1 查看进程3.2 结束进程3.3 通过系统调用获取进程标示符3.4 通过系统调用创建子进程 4. 进程状态4.1 普适的操作系统层面4.2 具体Linux操作系统层面 5. 两种特殊的进程5.1 僵尸进程5.2 孤…

Linux中的磁盘分析工具ncdu

2024年5月14日,周二上午 概述 ncdu 是一个基于文本的用户界面磁盘使用情况分析工具。它可以在终端中快速扫描目录,并统计该目录下的文件和文件夹的磁盘使用情况,以交互友好的方式呈现给用户。 安装 在 Debian/Ubuntu 系统下,可…

算法:滑动窗口题目练习

目录 题目一:长度最小的子数组 题目二:无重复字符的最长子串 题目三:最大连续 1 的个数III 题目四:将 x 减到 0 的最小操作数 题目五:水果成篮 题目六:找到字符串中所有字母异位词 题目七&#xff1a…

Java modbus 实现RTU串口作为slave(服务端)读写数据

这里要了解下modbus的RTU和TCP 的几个名称关系: Modbus/RTU:主站 和从站 关系 Modbus/TCP:客户端和服务端关系 关系 主站主动找从站读写数据 客户端主动找服务端读写数据 所以当使用Modbus/TCP时,主站一般作为客户端&#xff…