tar ,cpio打包解壓. shell腳本for,while,until循環. rpm包管理,循環的特殊用法. select循環菜單,函數function,rpm包查詢,yum

tar 

tar -cf 路徑+文件名字后續.tar  +路徑 創建歸檔壓縮

tar cf /testdir/etc.tar /etc/

tar cvf 可以查看解壓過程

tar tvf 預覽作用

tar xvf 解壓文件 

tar zcvf /testdir/etc2.tar.gz /etc/ 解壓再壓縮到指定路徑,文件格式

tar jcvf  

cpio

復制 從或到文件

cpio 命令是通過重定向的方式將文件進行打包備份,還原恢復的工具,它可以解壓以“.cpio”或者".tar"

結尾的文件。

cpio[選項] > 文件名或者設備名

? cpio[選項] < 文件名或者設備名

-o 將文件拷貝打包成文件或者將文件輸出到設備上

-i 解包,將打包文件解壓或將設備上的備份還原到系統

-t 預覽,查看文件內容或者輸出到設備上的文件內容

-v 顯示打包過程中的文件名稱。

-d 解包生成目錄,在cpio還原時,自動的建立目錄

-c 一種較新的存儲方式

cpio -ivd < /root/etc.cpio

shell 腳本

循環執行

    將某代碼段重復運行多次

重復運行多少次:

循環次數事先已知

循環次數事先未知

有進入條件和退出條件

for, while, until

for

for 變量名 in 列表;do

循環體

;done

for NAME [in WORDS … ] : do COMMANDS :done

循環列表

for id in "$@" 

do

echo "the number is $id"

done

QQ圖片20160818145700.png

列表生成方式:

(1) 直接給出列表

(2) 整數列表:

(a) {start..end}

(b) $(seq[start [step]] end)

(3) 返回列表的命令

$(COMMAND)

(4) 使用glob,如:*.sh

(5) 變量引用;

$@, $*

while循環

while CONDITION; do

循環體

done

?CONDITION:循環控制條件;進入循環之前,先做一次判斷;每一次循環之后會再次做判斷;條件為“true”,則執行一次循環;直到條件測試狀態為“false”終止循環

?因此:CONDTION一般應該有循環控制變量;而此變量的值會在循環體不斷地被修正

?進入條件:CONDITION為true

?退出條件:CONDITION為false

until循環

until CONDITION; do

循環體

?done

?進入條件:CONDITION 為false

?退出條件:CONDITION 為true

循環控制語句continue

continue(中斷當次循環)

break (打斷之后的循環)

exit(直接退出腳本)

while CONDTIITON1; do

CMD1

if CONDITION2; then

continue(break)

fi

CMDn

done

創建無限循環

while true; do

循環體

done

until false; do

循環體

Done

軟件包管理

程序源代碼–>預處理–>編譯–>匯編–>鏈接

Windows與Linux不兼容

(二進制文件的格式都不相同)

java

二進制文件格式為.class

可以通過進行二次編譯使二進制文件能夠在各種平臺上運行。

包管理器

二進制應用程序的組成部分:

二進制文件、庫文件、配置文件、幫助文件

?程序包管理器:

debian:deb文件, dpkg包管理器

redhat: rpm文件, rpm包管理器

rpm: RedhatPackage Manager

RPM Package Manager

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

rpm包命名方式:

name-VERSION-release.arch.rpm

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

常見的arch:

x86: i386, i486, i586, i686

x86_64: x64, x86_64, amd64powerpc: ppc

跟平臺無關:noarch

noarch是兼容版本,32位文件能在64位系統運行,但64位文件不能在32位系統中運行。

包的分類和拆包

Application-VERSION-ARCH.rpm: 主包

Application-devel-VERSION-ARCH.rpm開發子包

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

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

包之間:可能存在依賴關系,甚至循環依賴

解決依賴包管理工具:

yum(主要使用工具):rpm包管理器的前端工具

apt-get: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

程序包管理器:

功能:將編譯好的應用程序的各組成文件打包一個或幾個程序包文件,從而方便快捷地實現程序包的安裝、卸載、查詢、升級和校驗等管理操作

?1、包文件組成(每個包獨有)

RPM包內的文件

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

安裝或卸載時運行的腳本

(安裝包前要看檢查包里面的內容,防止惡意腳本運行。)

?2、數據庫(公共)

程序包名稱及版本

依賴關系(包的依賴性全部在)

功能說明

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

(可以對比程序是否發生變化)

管理程序包的方式:

使用包管理器:rpm

使用前端工具:yum

?獲取程序包的途徑:

(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包的管理

rpm -i 安裝

CentOS系統上使用rpm命令管理程序包:

安裝、卸載、升級、查詢、校驗、數據庫維護

安裝:

rpm {-i|–install} [install-options] PACKAGE_FILE…

-v: verbose

-vv: 更詳細地顯示內容

-h: 以#顯示程序包管理執行進度

rpm -ivh PACKAGE_FILE …

rpm -ivh

    -e 卸載 

    –test: 測試安裝,但不真正執行安裝;dry run模式

–nodeps:忽略依賴關系

–replacepkgs| replacefiles

(同一個包,版本一樣。覆蓋安裝 | 版本號,文件名不一樣,但里面有重復的文件,覆蓋安裝。)

–nosignature: 不檢查來源合法性

–nodigest:不檢查包完整性

–noscipts:不執行程序包腳本片斷

%pre: 安裝前腳本;–nopre

%post: 安裝后腳本;–nopost

%preun: 卸載前腳本;–nopreun

%postun: 卸載后腳本;–nopostun

升級:

rpm -U

rpm -F

upgrade:安裝有舊版程序包,則“升級”

如果不存在舊版程序包,則“安裝”

freshen:安裝有舊版程序包,則“升級”

如果不存在舊版程序包,則不執行升級操作

–oldpackage:降級

–force: 強行升級(強制命令??梢曰齑钇渌噶钍褂?

注意:

ls kernel-* 查看內核包

內核是安裝,rpm -ivh kernel-*. 保留舊內核,安裝新內核??梢酝ㄟ^重啟開機選擇運行的內核版本。

(1) 不要對內核做升級操作;Linux支持多內核版本并存,因此,對直接安裝新版本內核

(升級會刪除舊的內核版本)

(2) 如果原程序包的配置文件安裝后曾被修改,升級時,新版本的提供的同一個配置文件并不會直接覆蓋老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留

while

特殊用法

while read line :do

(輸入不輸入變量都是真$?=0)

while read -p "good morning"hello;do echo $hello ;done (會一直循環訪問你)

傳一行處理一行

QQ圖片20160821141451.png

(( ))

C語言風格的(( ))用法

i=10; let i++;echo $i

i=10; ((i++));echo $i

for循環的特殊格式

for((exp1;exp2;exp3))

do

cmd

done

for ((i=1;i<10;i++));

do

echo $i;

done

打印出數字1到9

QQ圖片20160821141846.png

?for循環的特殊格式:

for ((控制變量初始化;條件判斷表達式;控制變量的修正表達式))

do

循環體

done

?    控制變量初始化:僅在運行到循環代碼段時執行一次

?    控制變量的修正表達式:每輪循環結束會先進行控制變量修正運算,而后再做條件判斷

select循環與菜單

?select variable in list

do

循環體命令

done

?select 循環主要用于創建菜單,按數字順序排列的菜單項將顯示在標準錯誤上,并顯示PS3 提示符,等待用戶輸入

?用戶輸入菜單列表中的某個數字,執行相應的命令

?用戶輸入被保存在內置變量REPLY 中。

select menu in gbjd kr lm;do echo $menun ;done

$menu 可以被 gbjd kr lm 內容替代,可以通過指定使用變量1,2,3使用。

QQ圖片20160821142729.png

可以實現了一個分支判斷

$REPLY 顯示的是你輸入的內容

PS3=" "

            (默認是輸入的數值為可選擇數值)

select menu 

do

caes $menu in

gbjd)

echo" "

;;

lm)

echo" "

;;

kr)

echo" "

;;

*)

echo" "

;;

esac

done

函數function 

由若干條shell命令組成的語句塊,實現代碼重用和模塊化編程。

函數也是一段代碼,與當前shell并行關系。

函數由兩部分組成:函數名和函數體。

?語法一:

function f_name{

…函數體…

}

?語法二:

function f_name(){

…函數體…

}

?語法三:

f_name(){

…函數體…

}

function fun1 (){

echo "this is a fun1"

 }

fun1

直接用fun1就等于使用了里面的指令,不等于變量,不需要加$.

QQ圖片20160821143846.png

set 用來看內存的環境變量,也可以看到在內存的函數。

unset +函數名 可以釋放內存中的函數。

函數返回值

?函數有兩種返回值:

?函數的執行結果返回值:

(1) 使用echo或printf命令進行輸出

(2) 函數體中調用命令的輸出結果

?函數的退出狀態碼:

(1) 默認取決于函數中執行的最后一條命令的退出狀態碼

(2) 自定義退出狀態碼,其格式為:

return 從函數中返回,用最后狀態命令決定返回值

return 0 無錯誤返回。

return 1-255 有錯誤返回

return +數字 可以用echo $? 查詢到函數指定的數值

source funs 當前shell運行

. funs 等于在當前目錄下打開一個shell。

QQ圖片20160821144323.png

函數的定義和使用:

            可在交互式環境下定義函數

            可將函數放在腳本文件中作為它的一部分

            可放在只包含函數的單獨文件中

?                        調用:函數只有被調用才會執行;

                            調用:給定函數名

                            函數名出現的地方,會被自動替換為函數代碼

?                            函數的生命周期:被調用時創建,返回時終止

專門找一個文件放函數,

要使用的時候在shell中使用

.函數 或者 source 函數。

(函數本身不用加執行權限)

函數變量

局部變量

local +變量 定義的變量函數內部使用。

變量作用域:

環境變量:當前shell和子shell有效

本地變量:只在當前shell進程有效,為執行腳本會啟動專用子shell進程;因此,本地變量的作用范圍是當前shell腳本程序文件,包括腳本中的函數。

局部變量:函數的生命周期;函數結束時變量被自動銷毀

?注意:如果函數中有局部變量,如果其名稱同本地變量,使用局部變量。

?在函數中定義局部變量的方法

local NAME=VALUE

fun (){ let i++;echo "$i";fun; }

無限fun

pstree查看父子進程

QQ圖片20160821144624.png

包的查詢

rpm -q 查詢

-a: 所有包

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

rpm -qf 

即使刪除了,數據庫還有記錄,能查詢。

rpm -ql 可以查詢包里面的文件。

l+包名。

-p rpmfile:針對尚未安裝的程序包文件做查詢操作;

rpm -qpl /root/tree.rpm

表示查詢還沒有安裝包里面文件查詢,要配合p,p+文件名。

–whatprovidesCAPABILITY:查詢指定的CAPABILITY由哪個包所提供

CAPABILITY:能力 (關鍵字作用)

rpm -q –whatprovides bash

查詢那個包提供了bash能力

QQ圖片20160821144909.png

–whatrequiresCAPABILITY:查詢指定的CAPABILITY被哪個包所依賴

rpm -q –whatrequires bash

查詢哪個包依賴bash能力

QQ圖片20160821145004.png

–changelog:查詢rpm包的changelog

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

-d: 查詢程序的文檔

-i: information 查詢包的具體信息

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

–scripts:程序包自帶的腳本片斷

-R: 查詢指定的程序包所依賴的CAPABILITY;

rpm -qR bash 查看bash依賴哪些包

QQ圖片20160821145119.png

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

rpm -q –provides 

QQ圖片20160821145226.png

rpm2cpio 包文件|cpio–itv預覽包內文件

rpm2cpio tree.rpm |cpio -tv 預覽

?

rpm2cpio 包文件|cpio–id “*.conf”釋放包內文件

rpm2cpio tree.rpm |cpio -idv +所選指定文件的路徑 

解壓縮指定包內的文件

yum是建立在rpm之上

rpm -e +包名字 卸載

rpm -e kernel 卸載內核會卸載不成功

–allmatches 全部卸載

–nodeps 卸載不考慮依耐性

–noscripts 卸載不運行腳本

–notriggers 卸載不觸發

–test 不真實卸載

包檢驗

rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

導入公鑰

可以通過公鑰檢測包的簽名

rpm -V tree 檢查包跟原來的差別

rpm -K|checksigrpmfile檢查包的完整性和簽名

rpm -K tree.rpm  檢查包是否被破壞

檢查的前提是要先導入鑰匙

包來源合法性驗正及完整性驗正:

完整性驗正:SHA256

來源合法性驗正:RSA

?公鑰加密:

對稱加密:加密、解密使用同一密鑰;

非對稱加密:密鑰是成對兒的

public key: 公鑰,公開所有人

secret key: 私鑰, 不能公開

rpm -V tree 檢查包跟原來的差別

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 mTimediffers

P capabilities differ

rpm數據庫

/var/lib/rpm

initdb: 初始化

如果事先不存在數據庫,則新建之

否則,不執行任何操作

rebuilddb:重建

無論當前存在與否,直接重新創建數據庫

yum

解決包的依賴性

YUM:Yellowdog Update Modifier,rpm的前端程序,用來解決軟件包相關依賴性,可以在多個庫之間點位軟件包,up2date的代替工具。

yum的倉庫

yum repository: yum repo,存儲了眾多rpm包,以及包的相關的元數據文件(放置于特定目錄repodata下)

路徑寫父目錄

文件服務器:

ftp://

http://

file:///

文件共享yum的倉庫

/etc/yum.conf

/etc/yum.repos.d

QQ圖片20160821145827.png

repo配置文件

vim base.repo (必須文件repo結尾)

[base]        (倉庫名字自定義。但是5版本前的必須使用bash名字,不然會出錯)

name=centos 7  (自定義)

baseurl=http://10.1.0.1/cobbler/ks_mirror/7/ (網絡上存有的倉庫路徑,路徑寫到父目錄就可以使用)

gpgcheck=1      (是否使用鑰匙鑒定(1是0否))

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-Centos-7  (本機自帶的公共鑰匙庫路徑)

enabled=1         (是否啟用yum倉庫)

yum repolist 查看顯示資源庫的配置

QQ圖片20160821150954.png

yum install tree 裝tree包

QQ圖片20160821151210.png

yum list |grep tree 查看包的出處

QQ圖片20160821150643.png

yum remove +包名卸載

QQ圖片20160821150513.png

yum客戶端配置文件:

/etc/yum.conf:為所有倉庫提供公共配置

/etc/yum.repos.d/*.repo:為倉庫的指向提供配置

yum-config-manager –add-repo= http://172.16.0.1/cobbler/ks_mirror/CentOS-X-x86_64/

自動生成倉庫

yum-config-manager –disable “倉庫名" 禁用倉庫

?yum-config-manager –enable “倉庫名” 啟用倉庫

cat /var/log/yum.log 查看yum的日志

QQ圖片20160821151307.png

顯示倉庫列表:

?repolist[all|enabled|disabled]

?顯示程序包:

?list

# yum list [all | glob_exp1] [glob_exp2] […]

# yum list {available|installed|updates} [glob_exp1] […]

安裝程序包:

install package1 [package2] […]

reinstall package1 [package2] […] (重新安裝)

升級程序包:

update [package1] [package2] […]

downgrade package1 [package2] […] (降級)

?檢查可用升級:

check-update

?卸載程序包:

remove | erase package1 [package2] […]

info […]可安裝和可更新的RPM包 信息

查看程序包information。

provides | whatprovidesfeature1 [feature2] […]

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

?

清理本地緩存:

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

yum clean all 清理所有緩存?

(用來清理舊的錯誤數據)

構建緩存:

makecache

yum makecache 

yum search tree 搜索關鍵字

blob.png

yum history 查看yum歷史

blob.png

用循環實現國際象棋棋盤

blob.png

blob.png

9*9乘法表

blob.png

blob.png

原創文章,作者:swzczx,如若轉載,請注明出處:http://www.www58058.com/38250

(0)
swzczxswzczx
上一篇 2016-08-21
下一篇 2016-08-21

相關推薦

  • CentOS6 編譯安裝httpd-2.4

       CentOS7的鏡像中已經提供了httpd-2.4的rpm包,httpd-2.4相對于httpd2.2有較大的改進,在CentOS6下只能通過Apache官方網站提供的源碼包編譯安裝。    有時候,我們需要應用http-2.4的某些特性,但是因為當前的發行版沒有支持,所以我們需要自己編譯安裝。 httpd-2.…

    Linux干貨 2016-07-27
  • 磁盤管理

    磁盤,分區,文件系統

    Linux干貨 2017-12-02
  • 計算機組成及功能

    計算器:進行邏輯和算數運算 控制器:讀取,接受,發出控制指令 存儲器:存取程序和數據 I/O設備:輸入指令并顯示到標準輸出設備

    Linux干貨 2018-03-03
  • Linux第五周總結

    1、顯示當前系統上root、fedora或user1用戶的默認shell 2、找出/etc/rc.d/init.d/functions文件中某單詞后面跟一組小括號的行,形如:hello(); 3、使用echo命令輸出一個絕對路徑,使用gerp取出其基名;     擴展:取出其路徑名 4、找出ifconfig命令結果中的…

    2017-07-30
  • Redis學習手冊(持久化)

    一、Redis提供了哪些持久化機制:     1). RDB持久化:     該機制是指在指定的時間間隔內將內存中的數據集快照寫入磁盤。         2). AOF持久化:     該機制將以日志…

    Linux干貨 2015-02-25
  • 信息論的熵

    1.  前言    熵的概念最早起源于物理學,用于度量一個熱力學系統的無序程度。    在信息論里則叫信息量,即熵是對不確定性的度量。從控制論的角度來看,應叫不確定性。信息論的創始人香農在其著作《通信的數學理論》中提出了建立在概率統計模型上的信息度量。他把信息定義為“用來消除不確定性的東西”。在信息世界,熵越…

    Linux干貨 2016-03-27

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-22 13:40

    文章對當天的知識總結的很全面,態度端正,做事看做人,對學習有個好的態度,學習也不會辜負你,加油哦。

欧美性久久久久