LIUNX中程式包管理

来源:https://www.cnblogs.com/fengciaimei/archive/2020/04/13/12688973.html
-Advertisement-
Play Games

LIUNX中程式包管理 此內容僅為筆記,這一兩天給會重新整理補充上操作示例。 一、基礎 1、程式描述: 第一種描述: 程式+數據 第二種描述: 演算法+數據結構 2、程式的組成部分: ​ 1、二進位程式 ​ 2、配置文件,可以被查看其內容的文件 ​ 3、庫文件,庫文件不能獨立執行,只能被調用執行 ​ ...


LIUNX中程式包管理

此內容僅為筆記,這一兩天給會重新整理補充上操作示例。

 

一、基礎

1、程式描述:

    第一種描述: 程式+數據

    第二種描述: 演算法+數據結構

 

2、程式的組成部分:

​     1、二進位程式

​     2、配置文件,可以被查看其內容的文件

​     3、庫文件,庫文件不能獨立執行,只能被調用執行

​     4、幫助文件,可以被查看其內容的文件。

 

  解壓rpm軟體包

    rpm2cpio 包文件 | cpio -id

 

3、程式包管理器描述:

  最早的包管理器應用於Debian上,dpkg為第一個包管理工具。

​   程式的組成文件打包 成一個或者有限幾個文件

​       安裝

​       卸載

​       查詢

       升級

       校驗

 

    1> 包組成(每個包都有)

      包內的文件

      元數據,如:包的名稱 版本 依賴性 描述等

      可能會有包安裝或卸載時運行的腳本

 

    2> 資料庫(公共) /var/lib/rpm  自動更新

      程式包名稱及版本

      依賴關係

      功能說明

      包安裝後生成的各文件路徑及校驗碼信息

 

 

4、各個發行版本的程式包管理器和前端管理工具

    發行版     包管理器   包前端管理工具

​     Debian:   deb     apt-get/apt

​     ubuntu:      deb     apt-get/apt

 

​     RedHat:    rpm     yum/dnf

​     centos:    rpm      yum/dnf

 

 

5、程式編譯方式:

​   動態編譯:編譯時不會把庫文件編譯進程式,編譯好的程式不能獨立運行,需要調運庫文件,體積小。

​   靜態編譯:編譯時會把需要用到的庫文件都編譯進程式,編譯後程式沒有庫也可以獨立運行,體積大。

 

6、命令存放路徑:

    普通命令:/bin     /usr/bin   /usr/local/bin

    管理命令:/sbin      /usr/sbin      /usr/local/sbin

    庫文件:   /lib       /lib64      /usr/lib   /usr/lib64   /usr/local/lib   /usr/local/lib64

 

7、命令行展開

    命令行展開優先順序

    1、把命令行分成單個命令詞

    2、展開別名

    3、展開大括弧的聲明{}

    4、展開波浪線聲明~

    5、命令替換$()或··

    6、再次把命令行分成命令詞

    7、展開文件通配符

    8、準備I/O重定向

    9、運行命令

 

8、ABI 二進位編程介面

    windows:   PE

    LINUX:   ELF

 

    虛擬化技術

      LINUX:    WINE

      windows:      Cygwin

 

 

9、LINUX中源文件生成執行文件的過程

    預處理:gcc -E hello.c -o hello.i 對hello.c文件進行預處理,生成hello.i文件

    編譯:gcc -S hello.i  -o hello.s 對預處理文件hello.i進行編譯,生成彙編文件hello.s

    彙編:gcc -C hello.s -o hello.o 對彙編文件hello.s進行編譯,生成目標文件hello.o

    鏈接:hello.o -o hello 對目標文件hello.o文件進行鏈接,生成可執行文件

      gcc hello.c -o hello2 一步到位,直接生成執行文件

        選項:

          -c 源文件 把源文件編譯成目標文件

          -o 新名稱 目標文件1  目標文件2 把多個目標文件鏈接成可執行文件,並以新名稱命名

          -O 此選項主要用於優化編譯

          -l 庫文件名 指定編譯時需要的庫文件,此庫文件名不用寫開頭字母lib和結尾字母so

          -L 庫文件路徑 路徑為目錄,指定庫文件在什麼位置搜索。省略的話預設在/lib  /lib64 /usr/lib /usrlib64等位置搜索

          -I 頭文件 指定編譯時需要用到的頭文件

 

10、軟體包名

    軟體名-軟體版本號-編譯版本號-適用平臺-尾碼

          適用平臺

            noarch 無論任何機型都行

            i386 只要是x86平臺的架構都支持

            i686 32位平臺

            x86_64 64位平臺

 

    示例: 查看目錄內各個平臺架構的數量

      ls *.rpm | rev | cut -d . -f2 |rev | sort | uniq -c

練習題:在出現進度條出現的時候按esc鍵,進入光碟,然後進入救援模式 進行恢復 被刪除的基礎庫文件/lib64/libc.so.6

 

11、雜項

ldconfig命令

  此命令會更具/etc/ldconfig配置文件中記載目錄中的庫文件載入入緩存中,以提高調用程式的執行速度

  -p 顯示已經載入到記憶體中的庫文件

 

autofs工具可以自動掛在/misc/cd目錄下

    yum -y install autofs

    systemctl enable --now autofs

 

 

 

二、軟體包和包管理器

rpm命

  此命令主要是通過資料庫記錄的方式來管理軟體的安裝、卸載、升級、查詢、校驗等等。

  rpm軟體的數據包保存在/var/lib/rpm目錄中,如果此目錄中的數據損壞可以通過rpm --rebuilddb重建資料庫

   

  選項:

    -i --install 安裝

    -v 顯示詳細進度

    -h 顯示百分比,一個#表示2%

    -q 查詢

-qa 列出所有已安裝的包的,依賴於/var/lib/rpm內的資料庫

rpm -qa "*http*" 最好加上雙引號,怕出問題。可以直接模糊搜索

 

-qi 查詢某個已安裝過的安裝包的信息

-qpi 查詢指定未安裝的安裝包的信息

 

-ql 查詢指定已安裝的安裝包的安裝文件列表

-qpl 查詢指定未安裝的安裝包的要安裝文件列表

 

-qf 查詢某個命令或文件來自於哪個安裝包。很有用

-q --whatprovides /PATH/TO/COMMAND 查詢某個命令由哪個安裝包所提供

-q --whatrequires 查詢指定的安裝包被哪個包所依賴

 

-qc 查詢指定安裝包的配置文件

-qd 查詢指定安裝包的幫助文檔

-q --changelog 查詢指定安裝包的變更歷史

-q --scripts 查詢指定安裝包的腳本

-q --provides 查詢指定安裝包的提供了哪些依賴性

安裝腳本分為:

安裝前 preinstall

安裝後 postinstall

卸載前 preuninstalll

卸載後 postuninstalll

 

-U 或 --Update 升級或安裝軟體包

-F 或 --Freshen 只升級,如果沒有不安裝

 

-e --erase 卸載,如果卸載的時候別的包,依賴於要下載的包,就卸載不了

 

--root= 指定根目錄

--nodeps 忽略依賴性,強行安裝卸載

--force 強制安裝

--replacepkgs 重裝 和 force差不多,多用於重新安裝老版本軟體

 

 

包校驗

--import 導入密鑰

-K  或 --checksig 檢查簽名

 

-V 查詢文件是否有修改

-Va 檢查所有安裝包,看看哪些包被修改過

S file size differs 文件大小是否被改變

M modediffers 文件的類型或文件屬性是否被改變

5 MD5

D device major/minor number設備的主次代碼號是否被修改

L readlink path 軟連接指向路徑是否被修改

U user ownership 屬主是否被修改

G group ownership 屬組是否被修改

T mtime differ 文件的mtime是否被修改

P

 

c 配置文件  config file

d 文件   documentation

g 鬼文件,通常時該文件不被某個軟體所包含,較少發生  ghost file

l 授權文件  license file

r 自述文件  read me

 

 

 

yum命令

同一臺電腦上,只能運行一個yum。yum的日誌文件是/var/log/yum.log   centos8:/var/log/dnf.log

命令的選項優先順序高於配置文件

-y 不詢問,自動安裝

-q 或--quiet 靜默安裝

 

install 安裝

reinsatll 重新安裝

remove 卸載

update 升級

history 安裝歷史

history info # 具體查看安裝的幾個文件

history undo # 卸載指定第幾次操作

history redo # 重新安裝指定的第幾次操作

list 列表

repolist 倉庫列表

search 搜索

deplist 查詢依賴關係

info 查看軟體信息

repolist [all] 顯示yum源列表

 

--enablerepo=* 臨時啟用指定某個源

--disablerepo=* 臨時禁用指定某個源

 

--showduplicates 顯示重覆的源

--noplugins 禁用所有插件

clean all 清理緩存

provides /PATH/TO/COMMAND 查詢某個命令是由哪個安裝包提供

 

 

--nogpgcheck 禁止檢查gpgcheck,即使配置文件中指定了需要檢查,命令行的優先順序高於配置文件

 

包組

安裝卸載包組在引用包組名的時候需要加上引號

groupinstall 安裝包組

groupupdate 包組升級

grouplist 查詢包組列表

groupremove 包組卸載

groupinfo 查詢包組的信息

 

 

yum的repo配置文件中的變數

    $releasever 當前OS的發行版的主版本號  如 6 7 8

    $arch 平臺 如:i386  x86_64

    $basearch 基礎平臺 如:1386 ppc arm

 

 

 

createrepo命令

    createrepo [options] <directory>

        --basedir path 用戶一定輸出repodata的位置。常用於指向軟體包的父目錄

 

dpkg包管理器

-i 安裝

dpkg -i package.deb

-r 不完全卸載

dpkg -r  package.deb

-l 已安裝包的列表

dpkg -l

-L PACKAGE 列出軟體包所包含的文件,相當於rpm -ql

-S FILE 查詢某個文件屬於哪個包,相當於rpm -qf

-a 配置所偶沒有配置的軟體包

-c

 apt命令

  包前端管理工具,類似yum命令。debian系統的軟體包前端管理工具。之前的叫apt-get

apt install

apt remove

apt purge

apt update

apt upgrade

apt search

apt show

三、倉庫

 

倉庫一般由包文件、包文件元數據組成。客戶端會先下載元數據下載到本地緩存中。

然後校驗元數據,看看元數據是否下載有無問題。

根據元數據內信息再到倉庫中下載對應的各種包文件和依賴包文件。

最後安裝。

 

企業中可以單獨新建一個軟體倉庫伺服器。通過網路服務(http https ftp)共用給區域網內電腦遠程安裝。

 

本地電腦需要配置倉庫客戶端

centos 8中由兩個軟體倉庫 Base倉庫和AppStream倉庫

 

repodata 元數據存放目錄

Packages 軟體包存放目錄

 

關於倉庫路徑就是repodata所在的父目錄的絕對路徑就是倉庫路徑

倉庫配置文件必須放在yum.repo.d目錄下。尾碼必須是.repo

 

  倉庫元數據存放路徑/var/cache/yum

 

yum.conf(centos7)配置文件{

cachedir=/var/cache/yum/$basearch/$releasever

keepcache=0

debuglevel=2

logfile=/var/log/yum.log

exactarch=1

obsoletes=1

gpgcheck=1

plugins=1

installonly_limit=5

bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum

distroverpkg=centos-release

    }

 

dnf.conf(centso8)配置文件{

gpgcheck=1 是否安裝前檢測簽名

installonly_limit=3 併發安裝

clean_requirements_on_remove=True 安裝後清空軟體

best=True 如果多個倉庫中某個軟體由多個版本,預設指定安裝最新版本

     }

 

 

repo配置倉庫{}

[] 中括弧內的是倉庫ID,必須項

name=Base 倉庫名

mirrorlist= 倉庫路徑,

baseurl= 倉庫路徑,建議使用國內

 

gpgcheck=1 校驗包簽名

enabled=1 是否啟用倉庫,如果不寫,預設是啟用的

gpgkey= 簽名保存路徑

 

 

 

 

創建私有倉庫

yum -y install httpd

systemctl enable --now httpd

mkdir /var/www/html/centos/8

mount /dev/sr0 /var/www/html/centos/8

 

用於同步倉庫中的軟體和元數據

  dnf reposync --repoid=REPOID --download-metadata -p /path centos8

  reposync --repoid=REPOID --download-metadata -p /path centos7

 

  creatrepo /var/www/heml/epel/ 手工創建元數據

    --basedir 指定repodata存放位置

 

 

 

四、源碼編譯安裝

./configure 最終目的是生成Makefile文件

  1、通過選型傳遞參數,指定安裝路徑、啟用特性等,執行時會參考用戶的指定的選項以及模板文件Makefile.in 生成Makefile

  2、檢查依賴到的外部環境,如依賴的軟體包

選項:

  --prefix=PATH/TO/SOMEDIR 指定總安裝目錄

  --sysconfdir=DIR 指定配置文件安裝目錄

 

備註:

  autoconf命令,用來生成configure腳本。部分軟體沒有configure腳本,需要事先自己手工生成,然後再去執行./configure等後續編譯安裝步驟,也可能已經實現提供號了Makefile文件

  automake命令,用於生成Makfiel.in模板文件

 make

根據上一步生成的Makefile文件,檢測依賴環境,進行構建應用程式

執行make命令之前一定要進入到解壓目錄,只有在解壓目錄才能執行成功make

make命令

選項:

-j # 如果軟體較大,可以指定多個CPU同時工作

備註:

make命令這一步也會檢查環境依賴配置,一般情況下是很順利,如果這一步檢測依賴環境報錯,

可能說明上一步configure配置處的Makefile文件有問題,需要刪掉整個文件夾,重新來。要不會出現莫名其妙的問題。

 

make install

複製文件到相應路徑

make install 命令會自動創建目錄。不用手工創建

 

可以通過README  INSTALL文件獲取安裝幫助

 

開法工具:make gcc

開發環境:開發庫(gblic:標準庫) 頭文件

 

系統通過修改/etc/man_db.conf文件指定新軟體幫助文件的路徑。以後就能直接使用man幫助了

 

 

五、備註

生產環境一般是最小安裝,推薦安裝軟體明細。

gcc

make

gcc-c++

glibc  glibc-devel

pcre pcre-devel 與正則表達式相關的包

openssl openssl-devel 與openssl加密相關的包

systemd-devel

zlib-devel 與壓縮相關的包

vim

lrzsz 傳輸文件工具,xshell給主機傳送文件需要依賴此包,它提供了rz命令

tree

tmux screen 視窗工具。在斷開鏈接後不會終止

lsof

tcpdump 抓包工具

wget 下載工具

net-tools 網路工具

iotop io的檢測工具

bc bzip2 zip unzip

nfs-utils

man-pages

 

 

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 清華大學鏡像地址:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json操作步驟:進入jenkins系統管理進入插件管理點擊高級,修改升級站點的地址為清華大學鏡像地址二、更換源配置1. 關閉對 update-ce... ...
  • 本文接上篇文章 C#獲取設備(Audio和Video)名稱 簡單整理,對第四種方式使用整理. EnumDevice.dll是網上下載的,也下載了對應的源代碼, 對應dll:https://download.csdn.net/download/QQ81867376/12322158 該dll的源碼: ... ...
  • 直接上測試代碼和運行結果 static void Main(string[] args) { #region 測試代碼 List dataList; dataList = DirectXHelper.GetAudioDevicesList(); OutPutInfo("DirectX獲... ...
  • 一、引言 日常生活中,很多的APP都有延遲隊列的影子。比如在手機淘寶上,經常遇到APP派發的限時消費紅包,一般有幾個小時或24小時不等。假如在紅包倒計時的過程中,沒有消費掉紅包的話,紅包會自動失效。假如上述行為使用RabbitMQ延時隊列來理解的話,就是在你收到限時消費紅包的時候,手機淘寶會自動發一 ...
  • 最近在做微信公眾號項目,配置過程中發現,如果公眾號已設置了自定義菜單,如用戶點擊菜單後自動回覆文字、圖片、語音、視頻和圖文消息等。但如果該公眾號第三方開髮網站也需要用到自動回覆功能,則需要啟用:開發>>基本配置>>伺服器配置。啟用時會提示:開啟後,用戶發送的消息將自動轉發到該配置地址,並且在網站中設 ...
  • 知道為什麼要用內插字元串,只有踩過坑的人才能明白,如果你曾今使用string.format超5個以上占位符,那其中的痛苦我想你肯定是能夠共鳴的。 一:痛苦經歷 先上一段曾今寫過的一段代碼,大家來體會一下: 這裡擁有多達8個占位符,當年寫這個的時候,會有三個痛點。 1. 占位符不能寫錯了 比如這裡的 ...
  • .net core 集成 sentry 進行異常報警 Intro Sentry 是一個實時事件日誌記錄和彙集的平臺。其專註於錯誤監控以及提取一切事後處理所需信息而不依賴於麻煩的用戶反饋。它分為客戶端和服務端,客戶端(目前客戶端有 C , Python, PHP, JavaScript, Ruby等多 ...
  • 一、引言 在具體業務中可能會遇到一些要提前處理的消息,比如普通客戶的消息按先進先出的順序處理,Vip客戶的消息要提前處理。在RabbitMQ中,消息優先順序的實現方式是:在聲明queue時設置隊列的x-max-priority屬性,然後在publish消息時,設置消息的優先順序即可。 RabbitMQ優 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...