Linux程序包管理與初識磁盤
Linux 程序包管理
- API:Application Binary Interface(應用程序的二進制接口)
- ABI:APPlication Program Inertface(應用程序的開發接口)
- Windows : exe,msi
- Windows與Linux不兼容
- ELF:(Executale and Linkable Format):可執行可鏈接格式,linux運行格式
- PE:(Portable Executable)可移植可執格式Windows運行格式
-
庫級別的虛擬化:
- 要想在Windows與Linux上分別運行對方的應用程序需:
- WinE,在linux上模擬windows系統
- cywin:在windows上模擬linux系統
-
系統級開發:
- c/c++:httpd,vsftpd,nginx(服務類應用程序)
- go
-
應用級開發
- java /Python/perl/ruby/php:
- java:hadoop,hbase,運行java程序要依賴(jvm java虛擬機解釋器)
- Python:openstack(雲操做系統)依賴(Python 虛擬機解釋器pvm)
-
c/c++ 程序格式:
- 源代碼:文本格式的程序代碼:
- 編譯開發環境:編譯器 , 頭文件 , 開發庫 ,
- 二進制格式:文本格式的程序代碼-->編譯器-->二進制格式(二進制程序, 庫文件, 配置文件 ,幫助文件)
-
java/Python程序格式:
- 源代碼:要編譯成可以在其虛擬機(jvm/pvm)運行的格式:
- 開發環境:編譯器 , 開發庫
-
項目構建工具:
- c/c++:make
- java :maven
程序包管理器:
- 源代碼程序-->可在目標可直接運行的二進制格式(二進制程序, 庫文件, 配置文件 ,幫助文件) -->組織成爲一個或有限幾個"包"文件;
- 安裝, 升級 , 卸載, 查詢, 校驗
- 包管理:
- redhat:redhat package manager,rpm,"rpm";rpm package manager;
- 源代碼:name-VERSION.tar.gz
- VERSION:major,minor.release
-
rpm 包命令格式:
- name-VERSION-release.arch.rpm
- VERSION:major, minor ,release
- release:rpm包的發行號
- release.os : 2.ei7.i386.rpm
- archetecture:操作系統架構( i386, x64(amd64) , ppc ,noarch)
- redis-3.0.2.tar.gz--> redis-3.0.2-1.centos7.x64.rpm(包命名格式)
- 拆包:主包,子包
- 主包:name-VERSION-relesase.arch.rpm
- 子包:name-function-VERSION-relesase.arch.rpm
- function:devel, utils ,libs...
-
包之間的依賴關係:
- 例:x ,y ,z
- x-->y ,z
- y -->a , b, c
-
前段工具:自動解決依賴關係;
- yum:rhel系列系統上 rpm包管理器的前段工具;
- apt-get( apt-cache):deb包管理的前段工具;
- zypper:suse的rpm管理器嵌段工具;
- dnf:Fedora 22+系統上rpm包管理器的前段工具;
- 功能:將編譯好的應用程序的各組成文件打包成一個或幾個程序文件,從而更方便實現程序包的安裝, 升級, 卸載和查詢等管理操做;
- 程序報的組成清單(每一個程序包都單獨實現)
- 文件清單
- 安裝或卸載時運行的腳本
- 數據庫(公共)
- 程序包的名稱和版本;
- 依賴關係;
- 功能說明;
- 安裝生成的個文件的文件路徑及校驗碼信息;
- /var/lib/rpm/rpm數據庫
-
獲取程序包的途徑:
- 1, 系統發行版的光盤或官方的文件服務器;(或鏡像站點);
- http://mirrors.aliyun.com,
- http://mirrors,163.com
- 2, 項目的官方站點
- 3,第三方組織:EPEL:
Centos系統上rpm命令管理程序;
- 安裝 ,升級,卸載,查詢和校驗,數據庫維護
- rmp: rpm [option][package_file]
- 安裝:-i --install
- 升級: -U --update,-F --freshen
- 卸載:-e --erase
- 查詢:-q --query
- 校驗:-V --verify
- 數據庫維護:--buiddb ,--initdo
- 安裝:
- rpm {-i|--install} [install-options] PACKAGE_FILE ...
- rpm -ivh PACKAGE _FILE
- GENRAL OPTION
- -v:version,詳細信息
- -vv:更詳細信息
- [install-option]:
- -h:hash marks輸出進度條;每一個#表示2%的進度;
- --test:測試安裝,
- --nodeps:忽略依賴關係
- --replacepkgs:從新安裝
- --noscripts:不運行腳本
- rpm能夠自帶腳本:
- 四類:
- preinstall:安裝過程完成以後運行的腳本,%pre
- postinstall:安裝過程完成以後運行腳本,%post
- preuninstall:卸載過程真正開始執行以前運行的腳本,%preun-nopreun
- postuninstall:卸載過程完成以後運行的腳本,%potun,--nopostun
- --nosignature:不檢查包簽名信息,不檢查來源合法性,
- --nodigest:不檢查包的完整性信息;
-
升級:
- -U:升級或安裝
- - F:升級
- rpm -Uvh package _file
- rpm -Fvh package _file
- --oldpackage:降級;
- --force:強制升級;
- 1,不要對內核作升級操做,Linux支持多內和版本並存,所以,直接安裝新版本內核;
- 2,若是某源程序包的配置文件安裝曾被修改過,升級時,新本版本的程序提供的同一個配置文件不會覆蓋原配置文件,而是把新版本的配置文件重命名(filename.epmenew)後提供;
- 卸載:
- rpm {-e|--erase} [--allmatches] [--justdb] [--nodeps] [--noscripts]
- [--notriggers] [--test] PACKAGE_NAME ...
- --ailmatches:卸載全部匹配指定名稱的程序包的個版本;
- -nodeps:hulue依賴關係
- -test:測試卸載
-
查詢:
- rpm {-q|--query} [select-options] [query-options]
- package_name :查詢指定的程序包是否已經安裝 ,及版本
- -a,--all:查看全部已經安裝過的包;
- -f :file:查詢指定的文件由那個程序包安裝生成;
- -p --package PACKAGE_FILE:用於實現未安裝的程序包進行查詢
- --whatprovides CAPABILITY :查詢指定的CAPANILITY由那個程序包提供
- --whatrequires CAPABILITY:查詢指定的CAPANILITY被那個包所依賴;[query-options]
- --changelog:查看rpm包的changelog;
- -l,list:程序安裝生成的全部文件列表;
- -i,info:程序包相關的信息,版本號,大小, 所屬的包組,等;
- -c,--cnfigfiles:查詢指定的程序提供的配置文件;
- -d --docfiles:查詢指定的程序包提供的文檔;
- --provides :查詢指定程序包提供的全部的capanility
- -R:查詢指定的程序包的依賴關係;
- --scripts:查詢程序包自帶腳本信息
-
用法:
- -ql package , -qf:file, -qc:package
- -qd: package, -qe packag, -qp package
- -qpl package_file, -qpi package _file
- -qpc package_file
-
校驗:
- rpm -V--verify[select-options][verify-options]
-
包來源合法性驗證和完整性驗證:
- 來源合法性驗證:
- 數字簽名
- 完整性驗證:
- 獲取並導入信任的包製做者的密鑰;
- 對於Centos7發行版來講; rpm --import/etc/pki/rpm-gpg RPM-GPG-KEY-CentOS-7
-
驗證:
- 1,安裝此組織簽名的程序時,會自動執行驗證;
- 2,手動驗證 rpm -K PACKAGE_FILE
-
數據庫重建:
- rpm管理器數據庫路徑:/var/lib/rpm/
- 查詢操做:經過此處的數據庫進行;
-
獲取幫助:
- Centos6:man rpm
- Centos7:man rpmdb
- rpm {--initdb|--rebuilddb} [-v] [--dbpath DIRECTORY] [--root DIRECTORY]
- --initdb:初始化數據庫,當前無任何數據庫可初始化建立一個新的;當前有時不執行任何操做;
- --rebuildb:從新構建,經過讀取當前系統上全部已經安裝的程序包進行從新建立;
使用前端工具: yum ,dnf
- YUM:yellow dog, yellowdog Upadate Modifer
- yum repository:yum repo
- 存儲了衆多rpm包,以及包的相關的元數據文件(放置於特定 目錄下:repodata);
-
文件服務器:
- ftp:// http:// file://
-
yum客戶端:
- 配置文件:/etc/yum.cof :爲倉庫的指向提供公共配置
- /etc/yum.repos.d/*.repo:爲倉庫的指向提供配置
- 倉庫定義:
- [repositoryID]
- name= xxx some name this repository
- baseurl=url ://path/to/repository/
- gpgcheck=1|0
- 例:
- [base]
- name=base on 172.16.0.1
- baseurl=http://172.16.0.1/cobbler/ks_mirror/Centos-6.8_x86_x64/gpgcheck=1
-
yum命令的使用
- yum [options] [command] [package ...]
-
顯示倉庫列表:
- repolist [all|enabled|disabled] 顯示程序包組\:
- list
- yum list [all | glob_exp1] [glob_exp2] [...]
- yum list available [glob_exp1] [... ]
- 安裝程序包:
- install package1 [package2] [...]
- reinstall package1 [package2] [...(從新安裝)
- 檢查升級包:
- update [package1] [package2] [...]
- downgrade package1 [package2] [...](降級)
- 卸載程序包:
- remove | erase package1 [package2] [...]
- 查看程序包infomation簡要信息
- info [...]
- 查看程序包提供的特性(能夠是某個文件)是由那個程序包所提供的
- provides | whatprovides feature1 [feature2] [...]
- 清理本地緩存:
- clean [ packages | metadata | expire-cache | rpmdb | plugins |
- 構建緩存:makecache
-
搜索:
- search string1 [string2] [...]
- 以指定的關鍵字搜索程序包名summary信息
- 查看指定包的所依賴的capabilities:
- deplist package1 [package2] [...]
- history查看yum事務歷史:
- history [info|list|packages-list|packages-info|summary|addoninfo|redo|undo|rollback|new|sync|stats]
包組管理groupinstall:
- 如何使用光盤當作本地yum倉庫:
- 1.掛載光盤只某目錄:
- 例如 /media/cdrom
- mount -r /dev/cdrom /media/cdrom(掛載cd光盤)
- 2.建立配置文件:
- [repositoryID]
- name= xxx some name this repository
- baseurl=url ://path/to/repository/
- gpgcheck=1|0
- yum的命令選項:
- --nogpgcheck:禁止進行gpg check;
- -y:自動回答"yes
- -q:靜默
- --disablerepo=repoidglob:臨時禁用此處hiding的repo
- --nopiugins:禁用全部插件
- yum的repo配置文件中的可用的變量:
- $releasever:當前0S的發行版本號:
- $arch:平臺
- $basearch:基礎平臺:
- %YUM0-YUM9
建立yum倉庫:
- createrrpo [options][directory]
-
程序包編譯安裝:
- testapp -VERSION-release.src.rpm-->安裝後,使用rpmbuild命令製做成二進制格式的rpm包,然後在安裝;
- 源代碼組織格式:
- 多文件:文件中的代碼之間,極可能存在的跨文件依賴關係
- C代碼編譯安裝三步驟:
- ./configgure:
- 1.經過選項傳遞參數,指定啓用特性,安裝路徑等;執行時會參考用戶的指定用戶的指定以及Makefile.in文件生成makefile;
- 2.檢查依賴到的外部環境:
-
make:
- 根據makefile文件,構建應用程序;
- make install
- 開發工具:
- autoconf,生成configure腳本
- automake:生成Makefile.in
- 安裝前查看INSTALL ,README
- 開源程序源代碼的獲取:
- 官方自建站點:
- apache.org(ASF)
- mariadb.org
- 代碼託管:
- SourForge
- Github.com
- code.google.com
- c/c++:gcc(GNU C Complier) C編譯器
- 編譯C源代碼:
- 前提:提供開發工具及開發環境
- 開發工具:make ,gcc等
- 開發環境: 開發庫,頭文件
- glibc:標準庫
- 經過"包組"提供開發組件
- Cents6 :"Devrlopment Tools"," Server Platform Development"
- 第一步: configure腳本
- 選項: 指定安裝位置, 指定啓用的特性
- --help:獲取其支持使用的選項
- 選項分類
- 安裝路徑設定:
- --prefix=/path/to/somewhere:指定默認安裝位置,默認/usr/lolcor
- --sysyconfig=/path/to/somewhere:配置文件安裝位置
- System types:
- Optional Features:可選特性
- --disable -FEATURE
- Optional Pcakager:可選包
- --with -PAKCAGE[=ARG]
- netstat -tan
- 第二步:make
- 第三步:make install
-
安裝後的配置:
- 1.導出二進制程序目錄至PATH環境變量中:
- 編輯文件/etc/profile.d/NAME.sh
- export PATH=/PATH/TO/BIN:$PATH
- 2.導出庫文件路徑:
- 編輯/etc/so.conf.d/NAME.conf
- 添加新的庫文件所在目錄至此文件中;
- 讓系統從新生成緩存:
- 1dconfig[-v]
- 3,導出頭文件
- 基於連接的方式實現:
- in -sv
- 4導出幫助手冊
- 編輯/etc/man.config文件
- 添加一個MANPATH
Linux磁盤及基礎管理
- Disks:提供持久存儲數據功能
- 磁盤:機械硬盤,固態;
- 機械硬盤(HDD):Hard Disk Drive.
- 機械硬盤機構:
- head : 磁頭
- track:磁道
- sector:扇區
- cylinder:柱面
- 磁盤接口類型:
- IDE:並口 133MB/s
- SCSI:並口
- SATA:串口 6gbps
- SAS: 串口 6gbps
- USB:串口,480MB/s 並口:同一線纜能夠接多塊設備;
- 設備類型:
- Linux的哲學思想:一切皆文件:
- 塊設備(block)隨機訪問,數據交換單位是塊‘
- 字符設備:char線性訪問,數據交換單位是「字符」;
- 設備文件:FHS磁盤的設備
- /dev/ DEV_FILE
- 設備文件:關聯至設備的驅動程序;進而可以跟與之對應的硬件設備進行IO通訊
- 設備編號:
- major:主設備號,區分設備類型;用於代表設備所須要的驅動程序
- minor:次設備號,區分同類型下的不一樣的設備;是特定設備的訪問入口;
- mknod命令;
- mknod - make block or character special files
- mknod [OPTION]... NAME TYPE [MAJOR MINOR]
- -m MODE:建立後的設備文件的訪問權限;
- 設備文件名:ICANN
- 磁盤:
- IDE:/dev/sd
- 例:/dev/sda,/dev/sdb
- SCSI,SATA,USB,SAS,:/dev/sd【a-z】
- 分區:
- /dev/sda#:
- /dev/ada1...
- 引用設備的方式:
- 設備文件名, 卷標 , UUID;
磁盤分區:MBR,GPT
- 分區劃分基於柱面
- MBR: Master Boot Record(使用32位表示扇區數,分區不超過2T)
- 0磁道0扇區:512bytes
- 446bytes:bootloader,程序,引導啓動操做系統程序:
- 64bytes:分區表
- 4主分區;3主分區1擴展, n邏輯分區
- 主分區和擴展分區的標識:1-4
- 邏輯分區:5+
建立及管理分區:
分區建立工具; parted ,fdisk'gdisk:
- fdisk :建立MBR分區
- gdisk :建立GPT分區
- lsblk:列出設備塊
- 建立分區使用:
- fdisk提供了一個交互式接口來管理分區,他有許多子命令,分別用於不一樣的管理功能;
- 全部的操做均在內存中完成,沒有直接同步到磁盤; 直到使用w命令保存至磁盤之上;
- fdisk命令:fdisk -l [-u] [device...]
- fdisk-l [-u ][ device...]
- 經常使用命令:
- n: 建立新分區
- d: 刪除已有分區
- t:修改分區類型
- l:查看全部已經ID
- w:保存並退出
- q:不保存並退出
- m:查看幫助信息
- GPT:GUID(Globals Unique Identifiers) partitiontable支持128個分區,使用64位,支持8Z(512Byte/blok)64Z (4096bYyte/blok) 使用128UUID(Universally Unique Identifier)表示次磁盤和分區GPT分區表自動備份再投尾兩份,並有CRC校驗位UEFI(統一擴展固件接口)硬件支持GPT,使用操做系統啓動 在已經分區而且已經掛載其中某個分區的磁盤設備上建立的新分區,內核可能在常見文成後沒法直接識別;
- 查看:
- cat /proc/partitions
- centos6通知內核從新讀取硬盤分區表(刷新操做)
- 新增分區:
- partx-a /dev/DEVICE
- 刪除分區:
- patx -d --nr -M-N /dev/DEVICE
- centos7使用: partprobe
- parted: pared的操做都是實時生效,
- 用法: parted[option]...設備,命令,參數...
歡迎關注本站公眾號,獲取更多信息