方式一
通过udev
规则监听设备事件,编写/etc/udev/rules.d/99-udev-mount.rules
规则实现U盘插入捕获U盘插入事件
1 | # 插入U盘自动挂载 |
规则编辑完成后执行以下命令使规则生效
1 | sudo udevadm control --reload |
通过udev
规则监听设备事件,编写/etc/udev/rules.d/99-udev-mount.rules
规则实现U盘插入捕获U盘插入事件
1 | # 插入U盘自动挂载 |
规则编辑完成后执行以下命令使规则生效
1 | sudo udevadm control --reload |
.h
)、库文件(.dll或.so
)及对接文档ctypes
库或第三方库例如Cython
(用于复杂场景)sdk/windows/sdk.dll
)加载SDK
1 | import sys |
定义结构体
1 | # 定义结构体,需要与SDK头文件一致 |
![[Python对接C库/IMG-20250327180040644.png]]
定义函数原型,需严格对齐SDK中的数据类型和函数参数顺序
1 | sdk.Init.restype = c_bool # 映射返回值,Init为C/C++中的函数名 |
函数调用
1 | sdk.Init(c_int(0), c_int_p(0), c_char_p(b"this is a test")) |
带有回调函数的函数调用
回调函数例如
1 | int (*Callback) (int, char*); |
Python中定义回调函数类型
1 | CallbackType = CFUNCTYPE(c_int, c_int, c_char_p) # 返回类型在前,参数在后 |
若C函数使用__stdcall
(常见于Windows API),需要WINFUNCTYPE
替代CFUNCTYPE
,若为__cdecl
(默认),则使用CFUNCTYPE
Python实现回调函数(参数和返回值需与C定义严格一致)
1 | def py_callback(num, text) -> int: |
处理指针参数
若回调参数包含指针,例如void*
,需要使用c_void_p
类型,并通过cast解析
1 | def py_callback(data_ptr): |
注册回调函数
1 | c_callback = CallbackType(py_callback) # 使用定义的回调类型包装Python函数 |
退出时需要调用SDK中的清理函数释放资源
1 | sdk.Cleanup() |
WORD
,DWORD
在wintypes
包中1 | from ctypes import py_object, pythonapi |
os.stat()
1 | package main |
os.open()
1 | package main |
mkdir()
1 | package main |
ECB模式,PKCS5填充
1 | package sm4 |
sys
模块1 | import sys |
platform
模块1 | import platform |
os
模块1 | import os |
方法一
1 | sudo apt update & sudo apt install net-tools # 安装 net-tools |
方法二
1 | sudo ip link set dev eth0 down # 停用网卡 |
注意: 永久修改需要停止NetworkManager服务,此服务可能导致修改不生效
1 | sudo systemctl stop NetworkManager.service |
方法一
编辑`/etc/init.d/rc.local``文件,在此配置文件最后追加临时修改网卡MAC命令
1 | # 修改 ech0 网卡的 MAC 地址 |
方法二
编辑/etc/network/interfaces
文件,在此文件后追加
1 | auto eth0 # 网卡自动启动 |
修改完成需要重启网络服务使配置生效
1 | sudo systemctl restart networking.service |
1 | wget https://repo.anaconda.com/archive/Anaconda3-2024.10-1-Linux-x86_64.sh |
如果是否添加环境变量选择no
的话,安装完成需要手动添加环境变量
1 | export ANACONDA3_ROOT=/usr/local/anaconda3 |
如果安装时选择了no
但安装完成还想初始化可以执行
1 | source /usr/local/anaconda3/bin/activate |
![[Anaconda环境配置/IMG-20250326093704426.png]]
安装完成后查看.bashrc
中变更内容如下
1 | # >>> conda initialize >>> |
1 | ``` |
channels:
1 |
|
1 | # 新建虚拟环境 -n 为新建虚拟环境命名 |
1 | # 查看所有虚拟环境 |
Docker 19.03以上版本可以使用 docker buildx build
命令使用BuildKit
构建镜像。该命令支持--platform
参数可以同时构建多种系统架构的Docker镜像。
Docker for Linux不支持构建arm
架构镜像,可以运行一个新的容器让其支持该特性,Docker Desktop版本无需进行此项设置。
1 | docker run --rm --privileged tonistiigi/binfmt:latest --install all |
由于Docker默认的build
实例不支持同时指定多个 --platform
,必须首先创建一个新的builder
实例。
1 | # 适用于国内环境 |
构建镜像
1 | FROM --platform=$TARGETPLATFORM alpine |
1 | docker buildx build --platform linux/arm,linux/arm64,linux/amd64 -t {镜像名称} . --push |
--push
参数表示将构建好的镜像推送到Docker仓库
TARGETPLATFORM
构建镜像的目标平台,例如 linux/amd64
,linux/arm/v7
,windows/amd64
TARGETOS
构建镜像的OS类型,例如 linux
,windows
TARGETARCH
构建镜像的架构类型,例如 amd64
,arm
BUILDPLATFORM
构建镜像主机平台,例如 linux/amd64
BUILDOS
构建镜像主机的OS类型,例如 linux
BUILDARCH
构建镜像主机的架构类型,例如 amd64
BUILDVARIANTBUILDPLATFORM
的变种,该变量可能为空,例如 v7
使用举例
例如要构建 linux/arm/v7
和 linux/amd64
两种架构的镜像
1 | FROM docker.io/library/python:3.10-alpine |
最简单的一种方法,将当前用户添加到root组。这样做之后该用户将拥有所有root
权限,从而使用户在使用sudo
时不再需要输入密码。
1 | sudo adduser {当前用户名} root |
注意: 将用户添加到root
组后,该用户将拥有最高权限,因此在执行系统级操作时要特别小心,以避免可能的系统破坏。
通过编辑/etc/sudoers
文件来配置特定用户或组的sudo
行为。这种方法允许更灵活的控制哪些命令可以绕过密码提示。
![[Linux配置sudo无密码/IMG-20250319160639846.png]]
单用户配置
1 | {用户名} ALL=(ALL:ALL) NOPASSWD:ALL #在 root 后新添加一行 |
用户组配置
1 | %{用户组} ALL=(ALL:ALL) NOPASSWD:ALL # 在 %sudo 后添加 |
使用此方式需将用户添加进组
1 | sudo usermod -a -G {用户组} {用户名} |
Windows版本下载安装程序安装即可,Ubuntu下有两种安装方式
第一种方式
1 | sudo apt update |
此种方式安装的版本并不是最新版,或者下载 [官方包]执行
1 | sudo tar -zxvf go1.24.2.linux-amd64.tar.gz -C /usr/local # 解压缩到/usr/local |
打开 系统设置->关于->高级系统设置->环境变量
,注意如果只给当前用户使用添加到用户的环境变量即可,全部用户可用需配置系统环境变量。
GOROOT
![[Golang环境配置/IMG-20250319151338172.png]]
GOPATH
![[Golang环境配置/IMG-20250319151450977.png]]
GOPROXY
![[Golang环境配置/IMG-20250319151516015.png]]
如果只给当前用户使用编辑用户目录下.bashrc
文件,全部用户可用需配置/etc/profile
。
1 | export GOROOT=/usr/local/go # Golang根目录 |
GOPROXY可在环境变量中配置也可使用go env -w
命令配置
1 | go env -w GOPROXY=https://goproxy.cn # 七牛 |
GO111MODULE
从go 1.11版本开始,推荐使用Go Modules进行包管理。
1 | go env -w GO111MODULE=on |
在项目目录下初始化模块
1 | go mod init |