Ubuntu 22.04 离线安装软件包
在使用最小化安装时,默认是不带有vim 或者nano编辑器的,如果你的环境不能上外网就需要离线安装。
首先你需要先找一台可以上网的ubuntu系统(虚拟机搭建也行),下载所有的依赖包,然后上传到需要安装的服务器上手动安装。
我已经使用sudo -i 切换到了root用户
如下示例:
root@localhost:/opt# mkdir Package
root@localhost:/opt# cd Package/
下载软件包
root@localhost:/opt/Package# apt-get download vim
Get:1 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 vim amd64 2:8.2.3995-1ubuntu2.20 [1729 kB]
Fetched 1729 kB in 1s (1555 kB/s)
查看vim所有依赖包
如果在下载软件包过程中报错:
couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied)
时,这是因为在下载软件包的时候使用_apt 权限不足所以切换到root用户下载了。saz
root@localhost:/opt/Package# apt-cache depends vim
vimDepends: vim-commonDepends: vim-runtimeDepends: libacl1Depends: libc6Depends: libgpm2Depends: libpython3.10Depends: libselinux1Depends: libsodium23Depends: libtinfo6Suggests: <ctags>exuberant-ctagsuniversal-ctagsSuggests: vim-docSuggests: vim-scripts
- Depends 的必要下
- Suggests 建议下载
到这里只需要把所有依赖的包都下载到本地,然后打包到需要安装的服务器上,dpkg -i *.deb
即可安装
这种适合安装一个或者少个软件,如果要一次性安装多个软件就会有点不方便,下面介绍一次性安装多个软件以及依赖。
root@localhost:~# mkdir Package
root@localhost:~# cd Package
sudo apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances <packagename> | grep "^\w" | sort -u)
- apt-get download 仅仅下载软件包
apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances <packagename> | grep "^\w" | sort -u
-
<packagename> 指明你要下载的软件包,可以有多个
-
apt-cache depends 列出软件包的依赖关系
例如:root@localhost:~# apt-cache depends net-tools net-toolsDepends: libc6Depends: libselinux1
-
--recurse 递归显示所有依赖项,把依赖的依赖也显示出来
例如:消息过多这里只展示一部分
root@localhost:~# apt-cache depends net-tools --recurse | head net-toolsDepends: libc6Depends: libselinux1 libc6Depends: libgcc-s1Depends: libcrypt1Breaks: busyboxBreaks: fakerootBreaks: <hurd>Breaks: ioquake3
-
--no-recommends: 排除推荐依赖;推荐依赖不是软件包运行所必需的,但通常建议安装以获得更好的用户体验。
-
--no-suggests:排除建议依赖;建议依赖是那些APT认为可能对用户有用的软件包,但不是必需的。
内容过多不展示
-
--no-conflicts:不显示与给定软件包冲突的软件包信息。
-
--no-breaks:不显示会与给定软件包产生破坏性更新的软件包信息。
-
--no-replaces:不显示被给定软件包替换的软件包信息。
-
--no-enhances:不显示增强依赖。增强依赖是指那些可以提升软件包功能,但不是必需的软件包
root@localhost:~# apt-cache depends net-tools --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances net-toolsDepends: libc6Depends: libselinux1 libc6Depends: libgcc-s1Depends: libcrypt1 libselinux1Depends: libc6Depends: libpcre2-8-0 libgcc-s1Depends: gcc-12-baseDepends: libc6 libcrypt1Depends: libc6 libpcre2-8-0Depends: libc6 gcc-12-base
-
grep “^\w”: 这个管道命令将过滤输出,只保留以单词字符(字母、数字、下划线)开头的行,即忽略空行或以非单词字符开头的行
获得的内容如下:root@localhost:~# apt-cache depends net-tools --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances | grep "^\w" net-tools libc6 libselinux1 libgcc-s1 libcrypt1 libpcre2-8-0 gcc-12-base
-
sort -u: 排序后并去重
最后得到所有的依赖包:root@localhost:~# apt-cache depends net-tools --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances | grep "^\w" | sort -u gcc-12-base libc6 libcrypt1 libgcc-s1 libpcre2-8-0 libselinux1 net-tools
将所有的依赖包作为参数给到 apt-get download 去下载
root@localhost:/opt/Package# apt-get download $(apt-cache depends net-tools --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances | grep "^\w" | sort -u)
Get:1 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libcrypt1 amd64 1:4.4.27-1 [82.0 kB]
Get:2 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 libselinux1 amd64 3.3-1build2 [74.6 kB]
Get:3 http://cn.archive.ubuntu.com/ubuntu jammy/main amd64 net-tools amd64 1.60+git20181103.0eebece-1ubuntu5 [204 kB]
Get:4 http://cn.archive.ubuntu.com/ubuntu jammy-updates/main amd64 gcc-12-base amd64 12.3.0-1ubuntu1~22.04 [20.1 kB]
Get:5 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 libc6 amd64 2.35-0ubuntu3.8 [3235 kB]
Get:6 http://cn.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libgcc-s1 amd64 12.3.0-1ubuntu1~22.04 [53.9 kB]
Get:7 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 libpcre2-8-0 amd64 10.39-3ubuntu0.1 [221 kB]
Fetched 3891 kB in 2s (1986 kB/s)
W: Download is performed unsandboxed as root as file '/opt/Package/libcrypt1_1%3a4.4.27-1_amd64.deb' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied)
使用dpkg-scanpackages给当前的所有软件包建立依赖关系,生成本地软件包目录,以便在本地使用apt-get 安装
sudo apt-get install dpkg-dev # 提前安装dpkg-dev
创建archives目录将生成的依赖关系打包到archives目录下
一定要写成Packages.gz,不然不识别会报错
如果dpkg-scanpackages命令只是输出waring和info信息不用管,只要不报错就行
root@localhost:/opt/Package# mkdir archives
root@localhost:/opt/Package# dpkg-scanpackages ./ | gzip > ./archives/Packages.gz
dpkg-scanpackages: info: Wrote 7 entries to output Packages file.
root@localhost:/opt/Package# ls archives/
Packages.gz
打包Package整个目录
root@localhost:/opt/Package# tar -zcvf ../Package.tar.gz ../Package
root@localhost:/opt/Package# ls ../
Package Package.tar.gz
将打包好的文件放到需要安装的服务器上解压,这里到放到 /tmp 目录下
root@localhost:/tmp# ls -1
Package.tar.gz
Package/
备份/etc/apt/sources.list文件,并重启编辑它。
root@localhost:/tmp# mv /etc/apt/sources.list /etc/apt/sources.list.bak
root@localhost:/tmp# echo "deb [trusted=yes] file:///tmp/Package/ archives/" > /etc/apt/sources.list
- archives 软件源名称
- /tmp/Package/ 软件包路径
更新软件源
root@localhost:/tmp# apt-get update
Get:1 file:/tmp/Package archives/ InRelease
Ign:1 file:/tmp/Package archives/ InRelease
Get:2 file:/tmp/Package archives/ Release
Ign:2 file:/tmp/Package archives/ Release
Get:3 file:/tmp/Package archives/ Packages
Ign:3 file:/tmp/Package archives/ Packages
Get:4 file:/tmp/Package archives/ Translation-en
Ign:4 file:/tmp/Package archives/ Translation-en
Get:3 file:/tmp/Package archives/ Packages
Ign:3 file:/tmp/Package archives/ Packages
Get:4 file:/tmp/Package archives/ Translation-en
Ign:4 file:/tmp/Package archives/ Translation-en
Get:3 file:/tmp/Package archives/ Packages
Ign:3 file:/tmp/Package archives/ Packages
Get:4 file:/tmp/Package archives/ Translation-en
Ign:4 file:/tmp/Package archives/ Translation-en
Get:3 file:/tmp/Package archives/ Packages [3358 B]
Get:4 file:/tmp/Package archives/ Translation-en
Err:4 file:/tmp/Package archives/ Translation-enFile not found - /tmp/Package/archives/en.gz (2: No such file or directory)
Get:4 file:/tmp/Package archives/ Translation-en
Err:4 file:/tmp/Package archives/ Translation-enFile not found - /tmp/Package/archives/en.lz4 (2: No such file or directory)
Get:4 file:/tmp/Package archives/ Translation-en
Err:4 file:/tmp/Package archives/ Translation-enFile not found - /tmp/Package/archives/en.zst (2: No such file or directory)
Get:4 file:/tmp/Package archives/ Translation-en
Ign:4 file:/tmp/Package archives/ Translation-en
Reading package lists... Done
安装net-tools
root@localhost:/tmp# apt-get install net-tools
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following NEW packages will be installed:net-tools
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B/204 kB of archives.
After this operation, 819 kB of additional disk space will be used.
Get:1 file:/tmp/Package archives/ net-tools 1.60+git20181103.0eebece-1ubuntu5 [204 kB]
debconf: delaying package configuration, since apt-utils is not installed
Selecting previously unselected package net-tools.
(Reading database ... 64334 files and directories currently installed.)
Preparing to unpack .../net-tools_1.60+git20181103.0eebece-1ubuntu5_amd64.deb ...
Unpacking net-tools (1.60+git20181103.0eebece-1ubuntu5) ...
Setting up net-tools (1.60+git20181103.0eebece-1ubuntu5) ...
debconf: unable to initialize frontend: Dialog
debconf: (No usable dialog-like program is installed, so the dialog based frontend cannot be used. at /usr/share/perl5/Debconf/FrontEnd/Dialog.pm line 78.)
debconf: falling back to frontend: Readline
Scanning processes...
Scanning linux images...Running kernel seems to be up-to-date.No services need to be restarted.No containers need to be restarted.No user sessions are running outdated binaries.No VM guests are running outdated hypervisor (qemu) binaries on this host.
root@localhost:/tmp# netstat -tnlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:6010 0.0.0.0:* LISTEN 929/sshd: zjh@pts/0
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 682/systemd-resolve
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 765/sshd: /usr/sbin
tcp6 0 0 ::1:6010 :::* LISTEN 929/sshd: zjh@pts/0
tcp6 0 0 :::22 :::* LISTEN 765/sshd: /usr/sbin
到这里就安装成功了
同时安装多个软件包测试
还是一样的步骤
root@localhost:/opt/Package# apt-get download $(apt-cache depends vim nginx haproxy --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances | grep "^\w" | sort -u)
同时下载 vim nginx haproxy 的软件包以及依赖
生成依赖关系:
root@localhost:/opt/Package# dpkg-scanpackages ./ | gzip > ./archives/Packages.gz
打包整个目录:
root@localhost:/opt/Package# tar -zcvf ../Package.tar.gz ../Package
将压缩包上传到需要下载的服务器上解压
我的路径在/opt/Package
root@localhost:/opt/Package# pwd
/opt/Package
root@localhost:/opt/Package# ls
adduser_3.118ubuntu5_all.deb libgssapi-krb5-2_1.19.2-2ubuntu0.4_amd64.deb libsemanage2_3.3-1build2_amd64.deb
archives libicu70_70.1-2_amd64.deb libsepol2_3.3-1build1_amd64.deb
cdebconf_0.261ubuntu1_amd64.deb libjbig0_2.1-3.1ubuntu0.22.04.1_amd64.deb libslang2_2.3.2-5build4_amd64.deb
coreutils_8.32-4.1ubuntu1.2_amd64.deb libjpeg-turbo8_2.1.2-0ubuntu1_amd64.deb libsodium23_1.0.18-1build2_amd64.deb
debconf_1.5.79ubuntu1_all.deb libjpeg8_8c-2ubuntu10_amd64.deb libsqlite3-0_3.37.2-2ubuntu0.3_amd64.deb
dpkg_1.21.1ubuntu2.3_amd64.deb libk5crypto3_1.19.2-2ubuntu0.4_amd64.deb libssl3_3.0.2-0ubuntu1.18_amd64.deb
fontconfig-config_2.13.1-4.2ubuntu5_all.deb libkeyutils1_1.6.1-2ubuntu3_amd64.deb libstdc++6_12.3.0-1ubuntu1~22.04_amd64.deb
fonts-croscore_20201225-1build1_all.deb libkrb5-3_1.19.2-2ubuntu0.4_amd64.deb libsystemd0_249.11-0ubuntu3.12_amd64.deb
fonts-dejavu-core_2.37-2build1_all.deb libkrb5support0_1.19.2-2ubuntu0.4_amd64.deb libtextwrap1_0.1-15build1_amd64.deb
fonts-freefont-otf_20120503-10build1_all.deb liblua5.3-0_5.3.6-1build1_amd64.deb libtiff5_4.3.0-6ubuntu0.10_amd64.deb
fonts-freefont-ttf_20120503-10build1_all.deb liblz4-1_1.9.3-2build2_amd64.deb libtinfo6_6.3-2ubuntu0.1_amd64.deb
fonts-liberation2_2.1.5-1_all.deb liblzma5_5.2.5-2ubuntu1_amd64.deb libtirpc-common_1.3.2-2ubuntu0.1_all.deb
fonts-liberation_1%3a1.07.4-11_all.deb libmaxminddb0_1.5.2-1build2_amd64.deb libtirpc3_1.3.2-2ubuntu0.1_amd64.deb
fonts-texgyre_20180621-3.1_all.deb libmd0_1.0.4-1build1_amd64.deb libuuid1_2.37.2-4ubuntu3.4_amd64.deb
fonts-urw-base35_20200910-1_all.deb libmnl0_1.0.4-3build2_amd64.deb libwebp7_1.2.2-2ubuntu0.22.04.2_amd64.deb
gcc-12-base_12.3.0-1ubuntu1~22.04_amd64.deb libmpdec3_2.5.1-2build2_amd64.deb libx11-6_2%3a1.7.5-1ubuntu0.3_amd64.deb
haproxy_2.4.24-0ubuntu0.22.04.1_amd64.deb libncursesw6_6.3-2ubuntu0.1_amd64.deb libx11-data_2%3a1.7.5-1ubuntu0.3_all.deb
init-system-helpers_1.62_all.deb libnewt0.52_0.52.21-5ubuntu2_amd64.deb libxau6_1%3a1.0.9-1build5_amd64.deb
install-info_6.8-4build1_amd64.deb libnginx-mod-http-auth-pam_1.18.0-6ubuntu14.5_amd64.deb libxcb1_1.14-3ubuntu3_amd64.deb
iproute2_5.15.0-1ubuntu2_amd64.deb libnginx-mod-http-cache-purge_1.18.0-6ubuntu14.5_amd64.deb libxdmcp6_1%3a1.1.3-0ubuntu5_amd64.deb
libacl1_2.3.1-1_amd64.deb libnginx-mod-http-dav-ext_1.18.0-6ubuntu14.5_amd64.deb libxml2_2.9.13+dfsg-1ubuntu0.4_amd64.deb
libattr1_1%3a2.5.1-1build1_amd64.deb libnginx-mod-http-echo_1.18.0-6ubuntu14.5_amd64.deb libxpm4_1%3a3.5.12-1ubuntu0.22.04.2_amd64.deb
libaudit-common_1%3a3.0.7-1build1_all.deb libnginx-mod-http-fancyindex_1.18.0-6ubuntu14.5_amd64.deb libxslt1.1_1.1.34-4ubuntu0.22.04.1_amd64.deb
libaudit1_1%3a3.0.7-1build1_amd64.deb libnginx-mod-http-geoip2_1.18.0-6ubuntu14.5_amd64.deb libxtables12_1.8.7-1ubuntu5.2_amd64.deb
libbpf0_1%3a0.5.0-1ubuntu22.04.1_amd64.deb libnginx-mod-http-geoip_1.18.0-6ubuntu14.5_amd64.deb libzstd1_1.4.8+dfsg-3build1_amd64.deb
libbrotli1_1.0.9-2build6_amd64.deb libnginx-mod-http-headers-more-filter_1.18.0-6ubuntu14.5_amd64.deb lsb-base_11.1.0ubuntu4_all.deb
libbsd0_0.11.5-1_amd64.deb libnginx-mod-http-image-filter_1.18.0-6ubuntu14.5_amd64.deb mailcap_3.70+nmu1ubuntu1_all.deb
libbz2-1.0_1.0.8-5build1_amd64.deb libnginx-mod-http-perl_1.18.0-6ubuntu14.5_amd64.deb media-types_7.0.0_all.deb
libc6_2.35-0ubuntu3.8_amd64.deb libnginx-mod-http-subs-filter_1.18.0-6ubuntu14.5_amd64.deb mime-support_3.66_all.deb
libcap-ng0_0.7.9-2.2build3_amd64.deb libnginx-mod-http-uploadprogress_1.18.0-6ubuntu14.5_amd64.deb nginx-common_1.18.0-6ubuntu14.5_all.deb
libcap2-bin_1%3a2.44-1ubuntu0.22.04.1_amd64.deb libnginx-mod-http-upstream-fair_1.18.0-6ubuntu14.5_amd64.deb nginx-core_1.18.0-6ubuntu14.5_amd64.deb
libcap2_1%3a2.44-1ubuntu0.22.04.1_amd64.deb libnginx-mod-http-xslt-filter_1.18.0-6ubuntu14.5_amd64.deb nginx-extras_1.18.0-6ubuntu14.5_amd64.deb
libcom-err2_1.46.5-2ubuntu1.2_amd64.deb libnginx-mod-mail_1.18.0-6ubuntu14.5_amd64.deb nginx-full_1.18.0-6ubuntu14.5_amd64.deb
libcrypt1_1%3a4.4.27-1_amd64.deb libnginx-mod-nchan_1.18.0-6ubuntu14.5_amd64.deb nginx-light_1.18.0-6ubuntu14.5_amd64.deb
libdb5.3_5.3.28+dfsg1-0.8ubuntu3_amd64.deb libnginx-mod-stream-geoip2_1.18.0-6ubuntu14.5_amd64.deb nginx_1.18.0-6ubuntu14.5_amd64.deb
libdebian-installer4_0.122ubuntu3_amd64.deb libnginx-mod-stream-geoip_1.18.0-6ubuntu14.5_amd64.deb passwd_1%3a4.8.1-2ubuntu2.2_amd64.deb
libdeflate0_1.10-2_amd64.deb libnginx-mod-stream_1.18.0-6ubuntu14.5_amd64.deb perl-base_5.34.0-3ubuntu1.3_amd64.deb
libelf1_0.186-1build1_amd64.deb libnsl2_1.3.0-2build2_amd64.deb perl-modules-5.34_5.34.0-3ubuntu1.3_all.deb
libexpat1_2.4.7-1ubuntu0.4_amd64.deb libpam-modules-bin_1.4.0-11ubuntu2.4_amd64.deb perl_5.34.0-3ubuntu1.3_amd64.deb
libffi8_3.4.2-4_amd64.deb libpam-modules_1.4.0-11ubuntu2.4_amd64.deb readline-common_8.1.2-1_all.deb
libfontconfig1_2.13.1-4.2ubuntu5_amd64.deb libpam0g_1.4.0-11ubuntu2.4_amd64.deb sensible-utils_0.0.17_all.deb
libfreetype6_2.11.1+dfsg-1ubuntu0.2_amd64.deb libpcre2-8-0_10.39-3ubuntu0.1_amd64.deb tar_1.34+dfsg-1ubuntu0.1.22.04.2_amd64.deb
libgcc-s1_12.3.0-1ubuntu1~22.04_amd64.deb libpcre3_2%3a8.39-13ubuntu0.22.04.1_amd64.deb ttf-bitstream-vera_1.10-8.2_all.deb
libgcrypt20_1.9.4-3ubuntu3_amd64.deb libperl5.34_5.34.0-3ubuntu1.3_amd64.deb ucf_3.0043_all.deb
libgd3_2.3.0-2ubuntu2.3_amd64.deb libpng16-16_1.6.37-3build5_amd64.deb vim-common_2%3a8.2.3995-1ubuntu2.21_all.deb
libgdbm-compat4_1.23-1_amd64.deb libpython3.10-minimal_3.10.12-1~22.04.7_amd64.deb vim-runtime_2%3a8.2.3995-1ubuntu2.21_all.deb
libgdbm6_1.23-1_amd64.deb libpython3.10-stdlib_3.10.12-1~22.04.7_amd64.deb vim_2%3a8.2.3995-1ubuntu2.21_amd64.deb
libgeoip1_1.6.12-8_amd64.deb libpython3.10_3.10.12-1~22.04.7_amd64.deb xxd_2%3a8.2.3995-1ubuntu2.21_amd64.deb
libgmp10_2%3a6.2.1+dfsg-3ubuntu1_amd64.deb libreadline8_8.1.2-1_amd64.deb zlib1g_1%3a1.2.11.dfsg-2ubuntu9.2_amd64.deb
libgpg-error0_1.43-3_amd64.deb libselinux1_3.3-1build2_amd64.deb
libgpm2_1.20.7-10build1_amd64.deb libsemanage-common_3.3-1build2_all.deb
配置本地源:
root@localhost:/opt/Package# echo "deb [trusted=yes] file:///opt/Package archives/" > /etc/apt/sources.list
更新本地源,并安装 vim nginx haproxy软件
root@localhost:/opt/Package# apt-get update
root@localhost:/opt/Package# echo "deb [trusted=yes] file:///opt/Package archives/" > /etc/apt/sources.list
root@localhost:/opt/Package# apt-get install vim nginx haproxy -y
查看已安装的软件
root@localhost:/opt/Package# dpkg -l | grep -E 'nginx|vim|haproxy'
ii haproxy 2.4.24-0ubuntu0.22.04.1 amd64 fast and reliable load balancing reverse proxy
ii libnginx-mod-http-geoip2 1.18.0-6ubuntu14.5 amd64 GeoIP2 HTTP module for Nginx
ii libnginx-mod-http-image-filter 1.18.0-6ubuntu14.5 amd64 HTTP image filter module for Nginx
ii libnginx-mod-http-xslt-filter 1.18.0-6ubuntu14.5 amd64 XSLT Transformation module for Nginx
ii libnginx-mod-mail 1.18.0-6ubuntu14.5 amd64 Mail module for Nginx
ii libnginx-mod-stream 1.18.0-6ubuntu14.5 amd64 Stream module for Nginx
ii libnginx-mod-stream-geoip2 1.18.0-6ubuntu14.5 amd64 GeoIP2 Stream module for Nginx
ii nginx 1.18.0-6ubuntu14.5 amd64 small, powerful, scalable web/proxy server
ii nginx-common 1.18.0-6ubuntu14.5 all small, powerful, scalable web/proxy server - common files
ii nginx-core 1.18.0-6ubuntu14.5 amd64 nginx web/proxy server (standard version)
ii vim 2:8.2.3995-1ubuntu2.21 amd64 Vi IMproved - enhanced vi editor
ii vim-common 2:8.2.3995-1ubuntu2.21 all Vi IMproved - Common files
ii vim-runtime 2:8.2.3995-1ubuntu2.21 all Vi IMproved - Runtime files
相关文章:
Ubuntu 22.04 离线安装软件包
在使用最小化安装时,默认是不带有vim 或者nano编辑器的,如果你的环境不能上外网就需要离线安装。 首先你需要先找一台可以上网的ubuntu系统(虚拟机搭建也行),下载所有的依赖包,然后上传到需要安装的服务器…...
网络安全——浅谈HTTP协议
HTTP请求 HTTP请求是客户端往服务端发送请求动作,告知服务器自己的要求。 HTTP请求由状态行、请求头、请求正文三部分组成: 状态行:包括请求方式Method、资源路径URL、协议版本Version;请求头:包括一些访问的域名、…...

鸿蒙开发-在ArkTS中制作音乐播放器
音频播放功能实现 导入音频播放相关模块 首先需要从ohos.multimedia.audio模块中导入必要的类和接口用于音频播放。例如: import audio from ohos.multimedia.audio;创建音频播放器实例并设置播放源 可以通过audio.createAudioPlayer()方法创建一个音频播放器实…...
Rust学习笔记_03——元组
Rust学习笔记_01——基础 Rust学习笔记_02——数组 Rust学习笔记_03——元组 文章目录 Rust学习笔记_03——元组元组1. 定义元祖2. 访问元组中的元素3. 元组的解构4. 元组不可遍历和切片5. 元组作为函数返回值6. 单元元组7. 代码演示 元组 在Rust编程语言中,元组&a…...

LabVIEW内燃机气道试验台测控系统
基于LabVIEW软件开发的内燃机气道试验台测控系统主要应用于内燃机气道的性能测试和数据分析,通过高精度的测控技术,有效提升内燃机的测试精度和数据处理能力。 项目背景 随着内燃机技术的发展,对其气道性能的精准测量需求日益增加。该系统通…...
git 本地同步远端分支
一、关联远程仓库 本地仓库关联远端仓库 git remote add origin https://github.com/user/repository.git 二、获取远程分支信息 获取远程仓库的最新分支信息 git fetch origin 三、创建或切换到本地分支以跟踪远程分支 1. 创建分支 创建分支并关联到远端分支 git bra…...

用Pycharm安装manim
由于版本和工具的差异,manim的安装方式不尽相同。本文用Pycharm来安装manim. 一、准备工作:安装相应版本的python、pycharm和ffmpeg. 此处提供一种安装ffmpeg的方式 下载地址:FFmpeg 下载后,解压到指定目录。 配置环境变量&am…...

#渗透测试#红蓝攻防#HW#漏洞挖掘#漏洞复现01-笑脸漏洞(vsftpd)
免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停…...

vue3项目中使用星火API
在node环境epxress中使用讯飞ai接口进行二次封装,通过ai对话回复提取,获得ai提取的文章摘要 本文章只是简单使用,更复杂功能比如调用星火API制作对话机器人可以查看文档,对于初次使用星火AI接口或许有帮助 讯飞星火大模型API-大模…...

digit_eye开发记录(3): C语言读取MNIST数据集
在前两篇,我们解读了 MNIST 数据集的 IDX 文件格式,并分别用 C 和 Python 做了 读取 MNIST 数据集的实现。 基于 C 的代码稍长,基于 Python 的代码则明显更短,然而它们的共同特点是:依赖了外部库: 基于 C …...

【linux】(23)对象存储服务-MinIo
MinIO 是一个高性能的对象存储服务,兼容 Amazon S3 API。 Docker安装MinIo 前提条件 确保您的系统已经安装了 Docker。如果还没有安装 Docker,可以参考 Docker 官方文档进行安装。 1. 拉取 MinIO Docker 镜像 首先,从 Docker Hub 拉取 Mi…...

如何使用Python解析从淘宝API接口获取到的JSON数据?
基本的 JSON 解析 当从淘宝 API 接口获取到数据后(假设数据存储在变量response_data中),首先要判断数据类型是否为 JSON。如果是,就可以使用 Python 内置的json模块进行解析。示例代码如下: import json # 假设respon…...
C# 2024年Visual Studio实用插件集合
在2024年,Visual Studio作为.NET开发者的首选IDE,其插件生态不断壮大,为开发者提供了更高效、便捷的开发体验。本文将介绍一些实用的Visual Studio插件,特别是针对C#开发者,帮助提升开发效率和代码质量。 1. GitHub C…...

Matlab Simulink HDL Coder开发流程(一)— 创建HDL兼容的Simulink模型
创建HDL兼容的Simulink模型 一、使用Balnk DUT模板二、从HDL Coder库中选择模块三、为DUT开发算法/功能四、为设计创建Testbench五、仿真验证设计功能六、Simulink模型生成HDL代码 这个例子说明了如何创建一个用于生成HDL代码的Simulink模型。要创建兼容HDL代码生成的MATLAB算法…...
详解Qt pdf 之QPdfSelection 选择文本类
文章目录 QPdfSelection 类详解前言 详细说明公共函数说明1. 构造函数2. text3. boundingRect4. isEmpty5. startPage6. endPage 使用场景示例代码代码说明总结 QPdfSelection 类详解 前言 QPdfSelection 是 Qt PDF 模块中的一个类,用于表示在 PDF 文档中被选中的…...
docker中redis查看key、删除key
查看docker启动的进程 docker ps这个命令会列出所有正在运行的容器,包括容器的 ID、镜像名称、创建时间、状态、端口映射和名称 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1a2b3c4d5e6…...

【MySQL — 数据库基础】MySQL的安装与配置 & 数据库简单介绍
数据库基础 本节目标 掌握关系型数据库,数据库的作用掌握在Windows和Linux系统下安装MySQL数据库了解客户端工具的基本使用和SQL分类了解MySQL架构和存储引擎 1. 数据库的安装与配置 1.1 确认MYSQL版本 处理无法在 cmd 中使用 mysql 命令的情况&a…...

ehr系统建设方案,人力资源功能模块主要分为哪些,hrm平台实际案例源码,springboot人力资源系统,vue,JAVA语言hr系统(源码)
eHR人力资源管理系统:功能强大的人力资源管理工具 随着企业规模的不断扩大和业务需求的多样化,传统的人力资源管理模式已无法满足现代企业的需求。eHR人力资源管理系统作为一种先进的管理工具,能够为企业提供高效、准确、实时的人力资源管理。…...

【解决安全扫描漏洞】---- 检测到目标站点存在 JavaScript 框架库漏洞
1. 漏洞结果 JavaScript 框架或库是一组能轻松生成跨浏览器兼容的 JavaScript 代码的工具和函数。如果网站使用了存在漏洞的 JavaScript 框架或库,攻击者就可以利用此漏洞来劫持用户浏览器,进行挂马、XSS、Cookie劫持等攻击。 1.1 漏洞扫描截图 1.2 具体…...

flink学习(12)——checkPoint
如何设置checkPoint package com.bigdata.day06;/** * 1、需要三句话 * 2、设置完checkPoint后若程序出现异常,会一直重启 * 3、此时是自动进行checkPoint保存 * 4、注意:此时如果有checkpoint ,是不会出现异常的,需要将checkpoint的代码关…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...

如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...
PostgreSQL——环境搭建
一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在࿰…...