主頁 > 作業系統 > LIUNX中程式包管理

LIUNX中程式包管理

2020-09-22 21:20:55 作業系統

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

 

 

 

 

 

轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/107393.html

標籤:Linux

上一篇:關于sort命令輸出錯誤的問題

下一篇:time_wait 原理分析和優化

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • CA和證書

    1、在 CentOS7 中使用 gpg 創建 RSA 非對稱密鑰對 gpg --gen-key #Centos上生成公鑰/密鑰對(存放在家目錄.gnupg/) 2、將 CentOS7 匯出的公鑰,拷貝到 CentOS8 中,在 CentOS8 中使用 CentOS7 的公鑰加密一個檔案 gpg -a ......

    uj5u.com 2020-09-10 00:09:53 more
  • Kubernetes K8S之資源控制器Job和CronJob詳解

    Kubernetes的資源控制器Job和CronJob詳解與示例 ......

    uj5u.com 2020-09-10 00:10:45 more
  • VMware下安裝CentOS

    VMware下安裝CentOS 一、軟硬體準備 1 Centos鏡像準備 1.1 CentOS鏡像下載地址 下載地址 1.2 CentOS鏡像下載程序 點擊下載地址進入如下圖的網站,選擇需要下載的版本,這里選擇的是Centos8,點擊如圖所示。 決定選擇Centos8后,選擇想要的鏡像源進行下載,此 ......

    uj5u.com 2020-09-10 00:12:10 more
  • 如何使用Grep命令查找多個字串

    如何使用Grep 命令查找多個字串 大家好,我是良許! 今天向大家介紹一個非常有用的技巧,那就是使用 grep 命令查找多個字串。 簡單介紹一下,grep 命令可以理解為是一個功能強大的命令列工具,可以用它在一個或多個輸入檔案中搜索與正則運算式相匹配的文本,然后再將每個匹配的文本用標準輸出的格式 ......

    uj5u.com 2020-09-10 00:12:28 more
  • git配置http代理

    git配置http代理 經常遇到克隆 github 慢的問題,這里記錄一下幾種配置 git 代理的方法,解決 clone github 過慢。 目錄 git配置代理 git單獨配置github代理 git配置全域代理 配置終端環境變數 git配置代理 主要使用 git config 命令 git單獨 ......

    uj5u.com 2020-09-10 00:12:33 more
  • Linux npm install 裝包時提示Error EACCES permission denied解

    npm install 裝包時提示Error EACCES permission denied解決辦法 ......

    uj5u.com 2020-09-10 00:12:53 more
  • Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包

    Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包。 18 (flaskApi) [root@67 flaskDemo]# yum -y install nginx 19 已加載插件:fastestmirror, langpacks 20 Loading ......

    uj5u.com 2020-09-10 00:13:13 more
  • Linux查看服務器暴力破解ssh IP

    在公網的服務器上經常遇到別人爆破你服務器的22埠,用來挖礦或者干其他嘿嘿嘿的事情~ 這種情況下正確的做法是: 修改默認ssh的22埠 使用設定密鑰登錄或者白名單ip登錄 建議服務器密碼為復雜密碼 創建普通用戶登錄服務器(root權限過大) 建立堡壘機,實作統一管理服務器 統計爆破IP [root ......

    uj5u.com 2020-09-10 00:13:17 more
  • CentOS 7系統常見快捷鍵操作方式

    Linux系統中一些常見的快捷方式,可有效提高操作效率,在某些時刻也能避免操作失誤帶來的問題。 ......

    uj5u.com 2020-09-10 00:13:31 more
  • CentOS 7作業系統目錄結構介紹

    作業系統存在著大量的資料檔案資訊,相應檔案資訊會存在于系統相應目錄中,為了更好的管理資料資訊,會將系統進行一些目錄規劃,不同目錄存放不同的資源。 ......

    uj5u.com 2020-09-10 00:13:35 more
最新发布
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:43:21 more
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:42:36 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:26:53 more
  • 設定Windows主機的瀏覽器為wls2的默認瀏覽器

    這里以Chrome為例。 1. 準備作業 wsl是可以使用Windows主機上安裝的exe程式,出于安全考慮,默認情況下改功能是無法使用。要使用的話,終端需要以管理員權限啟動。 我這里以Windows Terminal為例,介紹如何默認使用管理員權限打開終端,具體操作如下圖所示: 2. 操作 wsl ......

    uj5u.com 2023-04-19 09:25:49 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:19:04 more
  • Linux學習筆記

    IP地址和主機名 IP地址 ifconfig可以用來查詢本機的IP地址,如果不能使用,可以通過install net-tools安裝。 Centos系統下ens33表示主網卡;inet后表示IP地址;lo表示本地回環網卡; 127.0.0.1表示代指本機;0.0.0.0可以用于代指本機,同時在放行設 ......

    uj5u.com 2023-04-18 06:52:01 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:50 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:01 more
  • 你是不是暴露了?

    作者:袁首京 原創文章,轉載時請保留此宣告,并給出原文連接。 如果您是計算機相關從業人員,那么應該經歷不止一次網路安全專項檢查了,你肯定是收到過資訊系統技術檢測報告,要求你加強風險監測,確保你提供的系統服務堅實可靠了。 沒檢測到問題還好,檢測到問題的話,有些處理起來還是挺麻煩的,尤其是線上正在運行的 ......

    uj5u.com 2023-04-05 16:52:56 more
  • 細節拉滿,80 張圖帶你一步一步推演 slab 記憶體池的設計與實作

    1. 前文回顧 在之前的幾篇記憶體管理系列文章中,筆者帶大家從宏觀角度完整地梳理了一遍 Linux 記憶體分配的整個鏈路,本文的主題依然是記憶體分配,這一次我們會從微觀的角度來探秘一下 Linux 內核中用于零散小記憶體塊分配的記憶體池 —— slab 分配器。 在本小節中,筆者還是按照以往的風格先帶大家簡單 ......

    uj5u.com 2023-04-05 16:44:11 more