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

七、Linux入门之软件包管理

包和包管理器

        最初只有.tar.gz的打包的源码文件,用户必须编译每个他想在GNU/Linux上运行的软件。用户们急需系统提供一种方法来管理这些安装在机器上的软件,当Debian诞生时,这样一个管理工具也就应运而生,它被命名为dpkg。从而著名的“package”概念第一次出现在GNU/Linux系统中,稍后Red Hat才开发自己的“rpm”包管理系统

包的组成:

二进制文件、库文件、配置文件、帮助文件

程序包管理器

debian: deb文件, dpkg包管理器

redhat: rpm文件, rpm包管理器

        rpm:Redhat Package Manager

        RPM  Package Manager

包命名

源代码:name-VERSION.tar.gz|bz2|xz

        VERSION: major.minor.release

rpm包命名方式:

        name-VERSION-release.arch.rpm

        例:bash-4.2.46-19.el7.x86_64.rpm

        VERSION: major.minor.release

        release:release.OS

        常见的arch:

                x86: i386, i486, i586, i686

                x86_64: x64, x86_64, amd64

                powerpc: ppc

        跟平台无关:noarch

包:分类和拆包

Application-VERSION-ARCH.rpm: 主包

Application-devel-VERSION-ARCH.rpm 开发子包

Application-utils-VERSION-ARHC.rpm 其它子包

Application-libs-VERSION-ARHC.rpm 其它子包

包之间:可能存在依赖关系,甚至循环依赖

解决依赖包管理工具:

        yum:rpm包管理器的前端工具

        apt:deb包管理器前端工具

        zypper:suse上的rpm前端管理工具

        dnf:Fedora 18+ rpm包管理器前端管理工具

库文件

查看二进制程序所依赖的库文件

        ldd /PATH/TO/BINARY_FILE

管理及查看本机装载的库文件

        ldconfig     加载配置文件中指定的库文件

        /sbin/ldconfig –p  显示本机已经缓存的所有可用库文件名及文件路径映射关系

配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf

缓存文件:/etc/ld.so.cache

包管理器

功能:将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、升级和校验等管理操作

包文件组成 (每个包独有) :

        RPM包内的文件

        RPM的元数据,如名称,版本,依赖性,描述等

        安装或卸载时运行的脚本

程序包的来源

管理程序包的方式:

        使用包管理器:rpm

        使用前端工具:yum, dnf

获取程序包的途径:

        1、系统发版的光盘或官方的服务器

                CentOS镜像:

                        https://www.centos.org/download/

                        http://mirrors.aliyun.com

                        http://mirrors.sohu.com

                        http://mirrors.163.com

        2、项目官方站点

        3、第三方组织:

                Fedora-EPEL:

                        Extra Packages for Enterprise Linux

                       Rpmforge:RHEL推荐,包很全

                        搜索引擎:

                                http://pkgs.org

                                http://rpmfind.net

                                http://rpm.pbone.net

                                https://sourceforge.net/

        4、自己制作

        注意:第三方包建议要检查其合法性、来源合法性、程序包的完整性

rpm包管理

CentOS系统上使用rpm命令管理程序包: 安装、卸载、升级、查询、校验、数据库维护

安装:rpm {-i|--install} [install-options] PACKAGE_FILE…

        -v: verbose

        -vv:

        -h: 以#显示程序包管理执行进度

        rpm -ivh PACKAGE_FILE ...

        [install-options]

        --test: 测试安装,但不真正执行安装,即dry run模式

        --nodeps:忽略依赖关系

        --replacepkgs | replacefiles

        --nosignature: 不检查来源合法性

        --nodigest:不检查包完整性

        --noscripts:不执行程序包脚本

        %pre: 安装前脚本     --nopre

        %post: 安装后脚本    --nopost

        %preun: 卸载前脚本  --nopreun

        %postun: 卸载后脚本   --nopostun

        示例:

                给系统安装另一个内核:

                可以看到无法安装,添加--force强制安装

                卸载内核:

升级:rpm {-U|--upgrade} [install-options] PACKAGE_FILE...

        rpm {-F|--freshen} [install-options] PACKAGE_FILE...

        upgrade:安装有旧版程序包,则“升级”

        如果不存在旧版程序包,则“安装”

        freshen:安装有旧版程序包,则“升级”

        如果不存在旧版程序包,则不执行升级操作

        rpm -Uvh PACKAGE_FILE ...

        rpm -Fvh PACKAGE_FILE ...

        --oldpackage:降级

        --force: 强制安装

        注意:(1) 不要对内核做升级操作;Linux支持多内核版本并存,因此直接安装新版本内核

                   (2) 如果原程序包的配置文件安装后曾被修改,升级时,新版本提供的同一个配置文件不会直接覆盖老版本的配置文件,而把新版本文件重命名(FILENAME.rpmnew)后保留

卸载:

        rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...

        当包卸载时,对应的配置文件不会删除, 以FILENAME.rpmsave形式保留

包查询:rpm {-q|--query} [select-options] [query-options]

        [select-options]

                -a:所有包

                -f:查看指定的文件由哪个程序包安装生成

                -p rpmfile:针对尚未安装的程序包文件做查询操作

                --whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供

               --whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖

        rpm2cpio 包文件|cpio –itv  预览包内文件

        rpm2cpio 包文件|cpio –id  “*.conf” 释放包内文件

        [query-options]

                --changelog:查询rpm包的changelog

                -c:查询程序的配置文件

                -d:查询程序的文档

                -i:information

                -l:查看指定的程序包安装后生成的所有文件

                --scripts:程序包自带的脚本

                --provides:列出指定程序包所提供的CAPABILITY

                -R:查询指定的程序包所依赖的CAPABILITY

        常用查询用法:

                -qi PACKAGE:查看已安装程序详细说明信息

                -qf FILE:查找某个文件来源于哪个安装包

                -qc PACKAGE:查看已安装程序的配置文件

                -ql PACKAGE:查看已安装程序所生成的文件列表

                -qd PACKAGE:查看已安装程序的说明文档

                -qpi PACKAGE_FILE:查看包的详细说明信息,版本号、官网、大小等

                -qpl PACKAGE_FILE:查看包中的文件列表

                -qa:查看本地已安装的包

                -qpR PACKAGE_FILE:查看包所依赖的其他包

包校验

        包在安装时会对安装包进行合法检测及完整性验证,如果检测不到或包完整性错误则会提示警告信息

        rpm {-V|--verify} [select-options] [verify-options]

        S file Size differs

        M Mode differs (includes permissions and file type)

        5 digest (formerly MD5 sum) differs

        D Device major/minor number mismatch

        L readLink(2) path mismatch

        U User ownership differs

        G Group ownership differs

        T mTime differs

        P capabilities differ

        包来源的合法性验证及完整性验证

                完整性验证:SHA256

                来源合法性验证:RSA

        公钥加密

                对称加密:加密、解密使用同一密钥

                非对称加密:密钥是成对儿的

                        public key: 公钥,公开所有人

                        secret key: 私钥, 不能公开

        导入所需要公钥

                rpm  -K|checksig  rpmfile  检查包的完整性和签名

                rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7                导入验证公钥

                CentOS 7发行版光盘提供:RPM-GPG-KEY-CentOS-7

                rpm –K tree-1.6.0-10.el7.x86_64             检测包的完整性

                rpm -qa “gpg-pubkey*”   查看导入的key文件存放的文件

                rpm -qi gpg-pubkey-f4a80eb5-53a7ff4b           查看key信息

                rmm –e gpg-pubkey-f4a80eb5-53a7ff4b        删除key

rpm数据库

        数据库目录:/var/lib/rpm,存放的数据包括程序包名称及版本、依赖关系、功能说明、包安装后生成的各文件路径及校验码信息

        rpm {--initdb|--rebuilddb}

                initdb: 初始化

                        如果事先不存在数据库,则新建之,否则,不执行任何操作

                rebuilddb:重建已安装的包头的数据库索引目录

 yum

YUM: Yellowdog Update Modifier,rpm的前端程序,可解决软件包相关依赖性,可在多个库之间定位软件包,up2date的替代工具

yum repository: yum repo,存储了众多rpm包,以及包的相关的元数据

文件(放置于特定目录repodata下)

        文件服务器:http://、https://、ftp://、file://

yum配置文件

        yum客户端配置文件:

                /etc/yum.conf:为所有仓库提供公共配置

                /etc/yum.repos.d/*.repo:为仓库的指向提供配置

        仓库指向的定义:

                [repositoryID]:源ID

                name=Some name for this repository:源名称

                baseurl=url://path/to/repository/:源路径

                enabled={1|0} :              是否启用

                gpgcheck={1|0}:             是否进行验证

                gpgkey=URL:                            验证的key路径

                enablegroups={1|0}:    

                failovermethod={roundrobin|priority}

                roundrobin:意为随机挑选,默认值

                priority:按顺序访问

                cost=   默认为1000

yum仓库

        yum的repo配置文件中可用的变量:

                $releasever: 当前OS的发行版的主版本号

                $arch: 平台,i386,i486,i586,x86_64等

                $basearch:基础平台;i386, x86_64

                $YUM0-$YUM9:自定义变量

        示例:

                http://server/centos/$releasever/$basearch/

                http://server/centos/7/x86_64

                http://server/centos/6/i386

yum源

        阿里云repo文件

                http://mirrors.aliyun.com/repo/

        CentOS系统的yum源

                阿里云:https://mirrors.aliyun.com/centos/$releasever/os/x86_64/

        清华大学:https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/os/x86_64/

        EPEL的yum源

                阿里云:https://mirrors.aliyun.com/epel/$releasever/x86_64

                阿里巴巴开源软件:https://opsx.alibaba.com/

yum-config-manager

        生成172.16.0.1_cobbler_ks_mirror_CentOS-X-x86_64_.repo

        yum-config-manager   --add-repo= http://172.16.0.1/cobbler/ks_mirror/7/

        yum-config-manager --disable “仓库名"  禁用仓库

        yum-config-manager --enable  “仓库名” 启用仓库

yum命令

        yum命令的用法:yum [options] [command] [package ...]

        显示仓库列表:       yum repolist [all|enabled|disabled]

        显示程序包:

                yum list

                yum list [all | glob_exp1] [glob_exp2] [...]

                yum list {available|installed|updates} [glob_exp1] [...]

        安装程序包:

                yum install package1 [package2] [...]

                yum reinstall package1 [package2] [...]  (重新安装)

        升级程序包:

                yum update [package1] [package2] [...]

                yum downgrade package1 [package2] [...] (降级)

        检查可用升级:

                yum check-update

        卸载程序包:

                yum remove | erase package1 [package2] [...]

        查看程序包information:

                yum info [...]

        查看指定的特性(可以是某文件)是由哪个程序包所提供:

                yum provides | whatprovides feature1 [feature2] [...]

        清理本地缓存:

                清除/var/cache/yum/$basearch/$releasever缓存

                yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]

        构建缓存:

                yum makecache

        搜索:yum search string1 [string2] [...]

                以指定的关键字搜索程序包名及summary信息

        查看指定包所依赖的capabilities:

                yum deplist package1 [package2] [...]

        查看yum事务历史:

                yum history [info|list|packages-list|packages-info|

                summary|addon-info|redo|undo|

                rollback|new|sync|stats]

                yum history

                yum history info 6

                yum history undo 6

        日志 :/var/log/yum.log

        安装及升级本地程序包:

                yum localinstall rpmfile1 [rpmfile2] [...]

                        (用install替代)

                yum localupdate rpmfile1 [rpmfile2] [...]

                        (用update替代)

        包组管理的相关命令:

                yum groupinstall group1 [group2] [...]

                yum groupupdate group1 [group2] [...]

                yum grouplist [hidden] [groupwildcard] [...]

                yum groupremove group1 [group2] [...]

                yum groupinfo group1 [...]

        yum的命令行选项:

                --nogpgcheck:禁止进行gpg check

                -y: 自动回答为“yes”

                -q:静默模式

                --disablerepo=repoidglob:临时禁用此处指定的repo

                --enablerepo=repoidglob:临时启用此处指定的repo

                --noplugins:禁用所有插件

系统光盘yum仓库

        系统安装光盘作为本地yum仓库:

                1、挂载光盘至某目录,例如/mnt/cdrom

                        mount /dev/cdrom /mnt/cdrom

                2、创建配置文件

                        [CentOS7]

                        name=

                        baseurl=

                        gpgcheck=

                        enabled=

                        创建yum仓库:

                        createrepo [options] <directory>

DNF (DaNdiFied)

DNF 介绍:新一代的RPM软件包管理器。DNF 发行日期是2015年5月11日,DNF 包管理器采用Python 编写,发行许可为GPL v2,首先出现在Fedora 18 发行版中。在RHEL 8.0 版本正式取代了 YUM,DNF包管理器克服了YUM包管理器的一些瓶颈,提升了包括用户体验,内存占用,依赖分析,运行速度等

 

安装所需软件包,依赖epel源

        wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64/dnf-conf-0.6.4-2.sdl7.noarch.rpm

        wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64//dnf-0.6.4-2.sdl7.noarch.rpm

        wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64/python-dnf-0.6.4-2.sdl7.noarch.rpm

        yum install python-dnf-0.6.4-2.sdl7.noarch.rpm dnf-0.6.4-2.sdl7.noarch.rpm dnf-conf-0.6.4-2.sdl7.noarch.rpm python2-libcomps-0.1.8-3.el7.x86_64.rpm libcomps-0.1.8-3.el7.x86_64.rpm

配置文件:/etc/dnf/dnf.conf

仓库文件:/etc/yum.repos.d/ *.repo

日志: /var/log/dnf.rpm.log

yum源安装DNF

        把上面下载的rpm文件存放到/data/dnf下

        创建repo仓库文件:createrepo /data/dnf,这样在/data/dnf目录下生成了repodata仓库文件

        配置yum源

                [dnf]

                name=dnf

                baseurl=file:///data/dnf/

                gpgcheck=0

                enable=1

        安装:

DNF使用

        帮助:man dnf

        dnf 用法:与yum一致

        dnf [options] <command> [<arguments>...]

        dnf –version

        dnf repolist

        dnf clean all

        dnf makecache

        dnf list installed

        dnf list available

        dnf search nano

        dnf history

        dnf history undo 1

源码编译安装

Application-VERSION-release.src.rpm --> 安装后,使用rpmbuild命令制作成二进制格式的rpm包,而后再安装

源代码-->预处理-->编译-->汇编-->链接-->执行

源代码组织格式:

        多文件:文件中的代码之间,很可能存在跨文件依赖关系

        C、C++:make 项目管理器

        configure脚本 --> Makefile.in --> Makefile

        java: maven

C语言源代码编译安装三步骤:

        1、./configure

                (1) 通过选项传递参数,指定启用特性、安装路径等;执行时会参考用户的指定以及Makefile.in文件生成Makefile

                (2) 检查依赖到的外部环境,如依赖的软件包

        2、make  根据Makefile文件,构建应用程序

        3、make install  复制文件到相应路径

开发工具:

        autoconf: 生成configure脚本

        automake:生成Makefile.in

        注意:安装前查看INSTALL,README

开源程序源代码的获取:

        官方自建站点:

                apache.org (ASF:Apache Software Foundation)

                mariadb.org

                ...

        代码托管:

                SourceForge.net

                Github.com

                code.google.com

c/c++编译器: gcc (GNU C Complier)

编译C源代码:

        准备:提供开发工具及开发环境

                开发工具:make, gcc等

                开发环境:开发库,头文件

                glibc:标准库

        实现:通过“包组”提供开发组件

                Development Tools

                Server Platform Development

        生产实践:(基于最小化安装的系统)

                yum install gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel zlib-devel vim lrzsz tree screen lsof tcpdump wget ntpdate net-tools iotop bc zip unzip nfs-utils

                第一步:configure脚本

                        选项:指定安装位置、指定启用的特性

                        --help: 获取其支持使用的选项

                        选项分类:

                                安装路径设定:

                                        --prefix=/PATH:指定默认安装位置,默认为/usr/local/

                                        --sysconfdir=/PATH:配置文件安装位置

                                System types:支持交叉编译

                                Optional Features: 可选特性

                                --disable-FEATURE

                                --enable-FEATURE[=ARG]

                                Optional Packages: 可选包

                                --with-PACKAGE[=ARG]  依赖包

                                --without-PACKAGE   禁用依赖关系

                                注意:通常被编译操作依赖的程序包,需要安装此程序包的“开发”组件,其包名一般类似于name-devel-VERSION

                第二步:make

                第三步:make install

        安装后的配置:

                1、二进制程序目录导入至PATH环境变量中

                        编辑文件/etc/profile.d/NAME.sh

                        export PATH=/PATH/TO/BIN:$PATH

                2、导入帮助手册

                        编辑/etc/man.config|man_db.conf文件

                        添加一个MANPATH

Ubuntu 软件管理

Debian软件包通常为预编译的二进制格式的扩展名“.deb”,类似rpm文件,因此安装快速,无需编译软件。包文件包括特定功能或软件所必需的文件、元数据和指令

dpkg

package manager for Debian,类似于rpm, dpkg是基于Debian的系统的包管理器。可以安装,删除和构建软件包,但无法自动下载和安装软件包或其依赖项

dpkg常见用法: man dpkg

        dpkg -i package.deb  安装包

        dpkg -r package  删除包,不建议,不自动卸载依赖于它的包

        dpkg -P package  删除包(包括配置文件)

        dpkg -l      列出当前已安装的包,类似rpm –qa

        dpkg -l package  显示该包的简要说明,类似rpm –qi

        dpkg -L package  列出该包中所包含的文件,类似rpm –ql

        dpkg -S <pattern>  搜索包含pattern的包,类似rpm –qf

        dpkg -s  package  列出该包的状态,包括详细信息,类似rpm –qi

        dpkg --configure package  配置包,-a 使用,配置所有没有配置的软件包

        dpkg -c package.deb  列出 deb 包的内容,类似rpm –qpl

        dpkg --unpack package.deb 解开 deb 包的内容

dpkg示例:

        列出系统上安装的所有软件包:        dpkg –l

        列出软件包安装的文件:                   dpkg -L bash

        查看/bin/bash来自于哪个软件包:    dpkg -S /bin/bash

        安装本地的 .deb 文件:                    dpkg -i /mnt/cdrom/pool/main/z/zip/zip_3.0-11build1_amd64.deb

        卸载软件包:                                    dpkg -r zip

        注意:一般建议不要使用dpkg卸载软件包。因为删除包时,其它依赖它的包不会卸载,并且可能无法再正常运行

APT

Advanced Packaging Tool,功能强大的软件管理工具,甚至可升级整个Ubuntu的系统,基于客户/服务器架构

APT工作原理:在服务器上先复制所有DEB包,然后用APT的分析工具genbasedir根据每个DEB 包的包头(Header)信息对所有的DEB包进行分析,并将该分析结果记录在文件夹base内的一个DEB 索引清单文件中,一旦APT 服务器内的DEB有所变动,要使用genbasedir产生新的DEB索引清单。客户端在进行安装或升级时先要查询DEB索引清单,从而获知所有具有依赖关系的软件包,并一同下载到客户端以便安装。当客户端需要安装、升级或删除某个软件包时,客户端计算机取得DEB索引清单压缩文件后,会将其解压置放于 /var/cache/apt/,而客户端使用apt-get install或apt-get upgrade命令的时候,就会将这个文件夹内的数据和客户端计算机内的DEB数据库比对,知道哪些DEB已安装、未安装或是可以升级的

Debian 使用APT工具来管理包系统,它与 apt 命令不同。在基于 Debian 的 Linux 发行版中,有各种工具可以与 APT 进行交互,以方便用户安装、删除和管理的软件包。

apt-get 是其中一个常用的命令行工具,另外一款较为流行的命令行与 GUI 兼顾的工具是 aptitude ,之前最常用的 Linux 包管理命令都被分散在了 apt-get、apt-cache、apt-config 这三条命令中

在 2014 年apt 命令发布第一个稳定版,Ubuntu 16.04 引入新特性之一便是 apt 命令,apt 命令解决了命令过于分散的问题,它包括 apt-get 命令出现以来使用最广泛的功能选项,以及 apt-cache 和 apt-config 命令中很少用到的功能。在使用 apt 命令时,用户不必再由 apt-get 转到 apt-cache 或 apt-config,提供管理软件包所需的必要选项

apt 相当于 apt-get、apt-cache 和 apt-config 中最常用命令选项的集合

apt 具有更精减但足够的命令选项,而且参数选项的组织方式更为有效。此外,启用的几个特性也非常有帮助。例如:可以在使用 apt 命令安装或删除程序时看到进度条,apt还会在更新存储库数据库时提示用户可升级的软件包个数

apt 与 apt-get 有一些类似的命令选项,但它并不能完全向下兼容 apt-get 命令,也即可用 apt 替换部分 apt-get 系列命令,但不是全部

查看帮助:apt help

apt与apt-get命令对比

        apt 命令    被取代的命令      命令的功能

        apt install   apt-get install     安装软件包

        apt remove  apt-get remove     移除软件包

        apt purge   apt-get purge     移除软件包及配置文件

        apt update  apt-get update     刷新存储库索引

        apt upgrade  apt-get upgrade     升级所有可升级的软件包

        apt autoremove  apt-get autoremove    自动删除不需要的包

        apt full-upgrade  apt-get dist-upgrade    在升级软件包时自动处理依赖关系

        apt search   apt-cache search    搜索应用程序

        apt show    apt-cache show    显示安装细节

apt 特有的命令

        apt list      列出包含条件的包(已安装,可升级等)

        apt edit-sources  编辑源列表

APT包索引来自/etc/apt/sources.list文件和/etc/apt/sources.list.d目录中定义的存储库的可用包的数据库。要使用存储库中所做的最新更改来更新本地程序包索引

apt命令操作(如安装和删除软件包)记录在/var/log/dpkg.log日志文件中

apt示例:

        安装包:        apt install tree zip

        删除包:        apt remove tree  zip

        说明:apt remove中添加--purge选项会删除包配置文件,谨慎使用

        更新包索引:        apt update

        升级包,要升级系统,请首先更新软件包索引,再升级:        apt upgrade

练习

1、查询命令java来自于哪个rpm包

        答:dnf info java     或              dnf list java

2、yum的配置和使用,包括yum仓库的创建

        答:vim /etc/yum.repos.d/yumbase.repo

                        [yumbase]

                        name=yumbase

                        baseurl=file:///misc/cd/

                        gpgcheck=1

                        gpgkey=file:///misc/cd/RPM-GPG-KEY-CentOS-$releasever

                        enabled=1

                       

                        [epel]

                        name=epel

                        baseurl=https://mirrors.aliyun.com/epel/$releasever/$basearch/

                        gpgcheck=1

                        gpgkey=https://mirrors.aliyun.com/epel/RPM-GPG-KEY-EPEL-$releasever

                        enabled=1

3、编写系统初始化脚本 reset.sh,包括别名,提示符颜色,yum仓库配置文件,安装tree,ftp,lftp,telnet等包

4、在CentOS 7上编译安装 http源码包,并启动此服务

        答:安装编译工具及依赖库:yum install   gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl  openssl-devel systemd-devel zlib-devel  vim lrzsz tree screen  lsof tcpdump wget  ntpdate net-tools iotop bc  zip unzip nfs-utils apr-devel.x86_64 apr-util-devel.x86_64

                        1、创建安装目录:mkdir /usr/local/http

            2、运行:./configure --prefix=/usr/local/http

           3、编译安装:make && make install

           4、运行httpd服务:

                      cd /usr/local/http/

                      bin/httpd

                      打开PC浏览器

                      访问成功

相关文章:

  • 七、Linux入门之磁盘存储和文件系统
  • 7、Linux入门之小练习
  • 十、Linux入门之Shell进阶
  • tekla钢结构算量_【BIM应用案例】钢结构第一楼:天津117大厦!
  • matlab 加入高频噪声_电路中共模噪声的产生和抑制机理
  • 类图中表达总体与局部的关系_游戏中的亲密关系表达
  • ppt流程图字体太小_PPT字体使用攻略,看这一篇文章就够了!
  • mediarecorder添加时间戳_LeetCode312.戳气球
  • 数据库建造_详细解答二级建造师考试哪些专业可以报
  • 8086的两种工作模式_心理学家说,人有2种思维模式,拥有成长型思维的人更容易成功...
  • indesign中如何锁定零点_什么是机器人零点标定?以kuka机器人为例
  • 魔道祖师电脑壁纸_网红图,手机屏锁全面屏壁纸
  • 四阶龙格库塔法的基本思想_韩非“法治”思想的道家渊源
  • android image调整尺寸_android ImageView 宽度设定,高度自适应
  • jna 构造函数_java – 使用JNA在Clojure中按值获取和传递结构
  • 【知识碎片】第三方登录弹窗效果
  • Apache的基本使用
  • CentOS6 编译安装 redis-3.2.3
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • IndexedDB
  • JAVA并发编程--1.基础概念
  • Java新版本的开发已正式进入轨道,版本号18.3
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • node入门
  • Python连接Oracle
  • SQLServer之索引简介
  • TCP拥塞控制
  • Vue实战(四)登录/注册页的实现
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 关于 Cirru Editor 存储格式
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 目录与文件属性:编写ls
  • 爬虫模拟登陆 SegmentFault
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 数组大概知多少
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 线性表及其算法(java实现)
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • 大数据全解:定义、价值及挑战
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • $.each()与$(selector).each()
  • (AngularJS)Angular 控制器之间通信初探
  • (zhuan) 一些RL的文献(及笔记)
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (动态规划)5. 最长回文子串 java解决
  • (二开)Flink 修改源码拓展 SQL 语法
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (七)Java对象在Hibernate持久化层的状态
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (学习日记)2024.02.29:UCOSIII第二节
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (转)Oracle存储过程编写经验和优化措施
  • (转)详解PHP处理密码的几种方式
  • *** 2003