tar
創(chuàng)新互聯(lián)建站專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于做網(wǎng)站、網(wǎng)站制作、紅花崗網(wǎng)絡(luò)推廣、微信小程序、紅花崗網(wǎng)絡(luò)營(yíng)銷、紅花崗企業(yè)策劃、紅花崗品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)建站為所有大學(xué)生創(chuàng)業(yè)者提供紅花崗建站搭建服務(wù),24小時(shí)服務(wù)熱線:18982081108,官方網(wǎng)址:www.cdcxhl.com
tar -cf 路徑+文件名字后續(xù).tar +路徑 創(chuàng)建歸檔壓縮
tar cf /testdir/etc.tar /etc/
tar cvf 可以查看解壓過程
tar tvf 預(yù)覽作用
tar xvf 解壓文件
tar zcvf /testdir/etc2.tar.gz /etc/ 解壓再壓縮到指定路徑,文件格式
tar jcvf
cpio
復(fù)制 從或到文件
cpio 命令是通過重定向的方式將文件進(jìn)行打包備份,還原恢復(fù)的工具,它可以解壓以“.cpio”或者".tar"
結(jié)尾的文件。
cpio[選項(xiàng)] > 文件名或者設(shè)備名
cpio[選項(xiàng)] < 文件名或者設(shè)備名
-o 將文件拷貝打包成文件或者將文件輸出到設(shè)備上
-i 解包,將打包文件解壓或?qū)⒃O(shè)備上的備份還原到系統(tǒng)
-t 預(yù)覽,查看文件內(nèi)容或者輸出到設(shè)備上的文件內(nèi)容
-v 顯示打包過程中的文件名稱。
-d 解包生成目錄,在cpio還原時(shí),自動(dòng)的建立目錄
-c 一種較新的存儲(chǔ)方式
cpio -ivd < /root/etc.cpio
shell 腳本
循環(huán)執(zhí)行
將某代碼段重復(fù)運(yùn)行多次
重復(fù)運(yùn)行多少次:
循環(huán)次數(shù)事先已知
循環(huán)次數(shù)事先未知
有進(jìn)入條件和退出條件
for, while, until
for
for 變量名 in 列表;do
循環(huán)體
;done
for NAME [in WORDS ... ] : do COMMANDS :done
循環(huán)列表
for id in "$@"
do
echo "the number is $id"
done
列表生成方式:
(1) 直接給出列表
(2) 整數(shù)列表:
(a) {start..end}
(b) $(seq[start [step]] end)
(3) 返回列表的命令
$(COMMAND)
(4) 使用glob,如:*.sh
(5) 變量引用;
$@, $*
while循環(huán)
while CONDITION; do
循環(huán)體
done
CONDITION:循環(huán)控制條件;進(jìn)入循環(huán)之前,先做一次判斷;每一次循環(huán)之后會(huì)再次做判斷;條件為“true”,則執(zhí)行一次循環(huán);直到條件測(cè)試狀態(tài)為“false”終止循環(huán)
因此:CONDTION一般應(yīng)該有循環(huán)控制變量;而此變量的值會(huì)在循環(huán)體不斷地被修正
進(jìn)入條件:CONDITION為true
退出條件:CONDITION為false
until循環(huán)
until CONDITION; do
循環(huán)體
done
進(jìn)入條件:CONDITION 為false
退出條件:CONDITION 為true
循環(huán)控制語句continue
continue(中斷當(dāng)次循環(huán))
break (打斷之后的循環(huán))
exit(直接退出腳本)
while CONDTIITON1; do
CMD1
...
if CONDITION2; then
continue(break)
fi
CMDn
...
done
創(chuàng)建無限循環(huán)
while true; do
循環(huán)體
done
until false; do
循環(huán)體
Done
軟件包管理
程序源代碼-->預(yù)處理-->編譯-->匯編-->鏈接
Windows與Linux不兼容
(二進(jìn)制文件的格式都不相同)
java
二進(jìn)制文件格式為.class
可以通過進(jìn)行二次編譯使二進(jìn)制文件能夠在各種平臺(tái)上運(yùn)行。
包管理器
二進(jìn)制應(yīng)用程序的組成部分:
二進(jìn)制文件、庫(kù)文件、配置文件、幫助文件
程序包管理器:
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
跟平臺(tái)無關(guān):noarch
noarch是兼容版本,32位文件能在64位系統(tǒng)運(yùn)行,但64位文件不能在32位系統(tǒng)中運(yùn)行。
包的分類和拆包
Application-VERSION-ARCH.rpm: 主包
Application-devel-VERSION-ARCH.rpm開發(fā)子包
Application-utils-VERSION-ARHC.rpm其它子包
Application-libs-VERSION-ARHC.rpm其它子包
包之間:可能存在依賴關(guān)系,甚至循環(huán)依賴
解決依賴包管理工具:
yum(主要使用工具):rpm包管理器的前端工具
apt-get:deb包管理器前端工具
zypper: suse上的rpm前端管理工具
dnf(還在測(cè)試階段的新工具): Fedora 18+ rpm包管理器前端管理工具
查看二進(jìn)制程序所依賴的庫(kù)文件:
ldd/PATH/TO/BINARY_FILE
管理及查看本機(jī)裝載的庫(kù)文件:
ldconfig
/sbin/ldconfig-p: 顯示本機(jī)已經(jīng)緩存的所有可用庫(kù)文件
名及文件路徑映射關(guān)系
配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
緩存文件:/etc/ld.so.cache
第三方軟件,安裝之后要將路徑寫入庫(kù)文件夾
才能調(diào)進(jìn)內(nèi)存中。
包管理器
rpm
程序包管理器:
功能:將編譯好的應(yīng)用程序的各組成文件打包一個(gè)或幾個(gè)程序包文件,從而方便快捷地實(shí)現(xiàn)程序包的安裝、卸載、查詢、升級(jí)和校驗(yàn)等管理操作
1、包文件組成(每個(gè)包獨(dú)有)
RPM包內(nèi)的文件
RPM的元數(shù)據(jù),如名稱,版本,依賴性,描述等
安裝或卸載時(shí)運(yùn)行的腳本
(安裝包前要看檢查包里面的內(nèi)容,防止惡意腳本運(yùn)行。)
2、數(shù)據(jù)庫(kù)(公共)
程序包名稱及版本
依賴關(guān)系(包的依賴性全部在)
功能說明
包安裝后生成的各文件路徑及校驗(yàn)碼信息
(可以對(duì)比程序是否發(fā)生變化)
管理程序包的方式:
使用包管理器:rpm
使用前端工具:yum
獲取程序包的途徑:
(1) 系統(tǒng)發(fā)版的光盤或官方的服務(wù)器;
CentOS鏡像:
https://www.centos.org/download/
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
(2) 項(xiàng)目官方站點(diǎn)
(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系統(tǒng)上使用rpm命令管理程序包:
安裝、卸載、升級(jí)、查詢、校驗(yàn)、數(shù)據(jù)庫(kù)維護(hù)
安裝:
rpm {-i|--install} [install-options] PACKAGE_FILE…
-v: verbose
-vv: 更詳細(xì)地顯示內(nèi)容
-h: 以#顯示程序包管理執(zhí)行進(jìn)度
rpm -ivh PACKAGE_FILE ...
rpm -ivh
-e 卸載
--test: 測(cè)試安裝,但不真正執(zhí)行安裝;dry run模式
--nodeps:忽略依賴關(guān)系
--replacepkgs| replacefiles
(同一個(gè)包,版本一樣。覆蓋安裝 | 版本號(hào),文件名不一樣,但里面有重復(fù)的文件,覆蓋安裝。)
--nosignature: 不檢查來源合法性
--nodigest:不檢查包完整性
--noscipts:不執(zhí)行程序包腳本片斷
%pre: 安裝前腳本;--nopre
%post: 安裝后腳本;--nopost
%preun: 卸載前腳本;--nopreun
%postun: 卸載后腳本;--nopostun
升級(jí):
rpm -U
rpm -F
upgrade:安裝有舊版程序包,則“升級(jí)”
如果不存在舊版程序包,則“安裝”
freshen:安裝有舊版程序包,則“升級(jí)”
如果不存在舊版程序包,則不執(zhí)行升級(jí)操作
--oldpackage:降級(jí)
--force: 強(qiáng)行升級(jí)(強(qiáng)制命令。可以混搭其他指令使用)
注意:
ls kernel-* 查看內(nèi)核包
內(nèi)核是安裝,rpm -ivh kernel-*. 保留舊內(nèi)核,安裝新內(nèi)核。可以通過重啟開機(jī)選擇運(yùn)行的內(nèi)核版本。
(1) 不要對(duì)內(nèi)核做升級(jí)操作;Linux支持多內(nèi)核版本并存,因此,對(duì)直接安裝新版本內(nèi)核
(升級(jí)會(huì)刪除舊的內(nèi)核版本)
(2) 如果原程序包的配置文件安裝后曾被修改,升級(jí)時(shí),新版本的提供的同一個(gè)配置文件并不會(huì)直接覆蓋老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留
while
特殊用法
while read line :do
(輸入不輸入變量都是真$?=0)
while read -p "good morning"hello;do echo $hello ;done (會(huì)一直循環(huán)訪問你)
傳一行處理一行
(( ))
C語言風(fēng)格的(( ))用法
i=10; let i++;echo $i
i=10; ((i++));echo $i
for循環(huán)的特殊格式
for((exp1;exp2;exp3))
do
cmd
done
for ((i=1;i<10;i++));
do
echo $i;
done
打印出數(shù)字1到9
for循環(huán)的特殊格式:
for ((控制變量初始化;條件判斷表達(dá)式;控制變量的修正表達(dá)式))
do
循環(huán)體
done
控制變量初始化:僅在運(yùn)行到循環(huán)代碼段時(shí)執(zhí)行一次
控制變量的修正表達(dá)式:每輪循環(huán)結(jié)束會(huì)先進(jìn)行控制變量修正運(yùn)算,而后再做條件判斷
select循環(huán)與菜單
select variable in list
do
循環(huán)體命令
done
select 循環(huán)主要用于創(chuàng)建菜單,按數(shù)字順序排列的菜單項(xiàng)將顯示在標(biāo)準(zhǔn)錯(cuò)誤上,并顯示PS3 提示符,等待用戶輸入
用戶輸入菜單列表中的某個(gè)數(shù)字,執(zhí)行相應(yīng)的命令
用戶輸入被保存在內(nèi)置變量REPLY 中。
select menu in gbjd kr lm;do echo $menun ;done
$menu 可以被 gbjd kr lm 內(nèi)容替代,可以通過指定使用變量1,2,3使用。
可以實(shí)現(xiàn)了一個(gè)分支判斷
$REPLY 顯示的是你輸入的內(nèi)容
PS3=" "
(默認(rèn)是輸入的數(shù)值為可選擇數(shù)值)
select menu
do
caes $menu in
gbjd)
echo" "
;;
lm)
echo" "
;;
kr)
echo" "
;;
*)
echo" "
;;
esac
done
函數(shù)function
由若干條shell命令組成的語句塊,實(shí)現(xiàn)代碼重用和模塊化編程。
函數(shù)也是一段代碼,與當(dāng)前shell并行關(guān)系。
函數(shù)由兩部分組成:函數(shù)名和函數(shù)體。
語法一:
function f_name{
...函數(shù)體...
}
語法二:
function f_name(){
...函數(shù)體...
}
語法三:
f_name(){
...函數(shù)體...
}
function fun1 (){
echo "this is a fun1"
}
fun1
直接用fun1就等于使用了里面的指令,不等于變量,不需要加$.
set 用來看內(nèi)存的環(huán)境變量,也可以看到在內(nèi)存的函數(shù)。
unset +函數(shù)名 可以釋放內(nèi)存中的函數(shù)。
函數(shù)返回值
函數(shù)有兩種返回值:
函數(shù)的執(zhí)行結(jié)果返回值:
(1) 使用echo或printf命令進(jìn)行輸出
(2) 函數(shù)體中調(diào)用命令的輸出結(jié)果
函數(shù)的退出狀態(tài)碼:
(1) 默認(rèn)取決于函數(shù)中執(zhí)行的最后一條命令的退出狀態(tài)碼
(2) 自定義退出狀態(tài)碼,其格式為:
return 從函數(shù)中返回,用最后狀態(tài)命令決定返回值
return 0 無錯(cuò)誤返回。
return 1-255 有錯(cuò)誤返回
return +數(shù)字 可以用echo $? 查詢到函數(shù)指定的數(shù)值
source funs 當(dāng)前shell運(yùn)行
. funs 等于在當(dāng)前目錄下打開一個(gè)shell。
函數(shù)的定義和使用:
可在交互式環(huán)境下定義函數(shù)
可將函數(shù)放在腳本文件中作為它的一部分
可放在只包含函數(shù)的單獨(dú)文件中
調(diào)用:函數(shù)只有被調(diào)用才會(huì)執(zhí)行;
調(diào)用:給定函數(shù)名
函數(shù)名出現(xiàn)的地方,會(huì)被自動(dòng)替換為函數(shù)代碼
函數(shù)的生命周期:被調(diào)用時(shí)創(chuàng)建,返回時(shí)終止
專門找一個(gè)文件放函數(shù),
要使用的時(shí)候在shell中使用
.函數(shù) 或者 source 函數(shù)。
(函數(shù)本身不用加執(zhí)行權(quán)限)
函數(shù)變量
局部變量
local +變量 定義的變量函數(shù)內(nèi)部使用。
變量作用域:
環(huán)境變量:當(dāng)前shell和子shell有效
本地變量:只在當(dāng)前shell進(jìn)程有效,為執(zhí)行腳本會(huì)啟動(dòng)專用子shell進(jìn)程;因此,本地變量的作用范圍是當(dāng)前shell腳本程序文件,包括腳本中的函數(shù)。
局部變量:函數(shù)的生命周期;函數(shù)結(jié)束時(shí)變量被自動(dòng)銷毀
注意:如果函數(shù)中有局部變量,如果其名稱同本地變量,使用局部變量。
在函數(shù)中定義局部變量的方法
local NAME=VALUE
fun (){ let i++;echo "$i";fun; }
無限fun
pstree查看父子進(jìn)程
包的查詢
rpm -q 查詢
-a: 所有包
-f: 查看指定的文件由哪個(gè)程序包安裝生成
rpm -qf
即使刪除了,數(shù)據(jù)庫(kù)還有記錄,能查詢。
rpm -ql 可以查詢包里面的文件。
l+包名。
-p rpmfile:針對(duì)尚未安裝的程序包文件做查詢操作;
rpm -qpl /root/tree.rpm
表示查詢還沒有安裝包里面文件查詢,要配合p,p+文件名。
--whatprovidesCAPABILITY:查詢指定的CAPABILITY由哪個(gè)包所提供
CAPABILITY:能力 (關(guān)鍵字作用)
rpm -q --whatprovides bash
查詢那個(gè)包提供了bash能力
--whatrequiresCAPABILITY:查詢指定的CAPABILITY被哪個(gè)包所依賴
rpm -q --whatrequires bash
查詢哪個(gè)包依賴bash能力
--changelog:查詢r(jià)pm包的changelog
-c: 查詢程序的配置文件
-d: 查詢程序的文檔
-i: information 查詢包的具體信息
-l: 查看指定的程序包安裝后生成的所有文件;
--scripts:程序包自帶的腳本片斷
-R: 查詢指定的程序包所依賴的CAPABILITY;
rpm -qR bash 查看bash依賴哪些包
--provides: 列出指定程序包所提供的CAPABILITY
rpm -q --provides
rpm2cpio 包文件|cpio–itv預(yù)覽包內(nèi)文件
rpm2cpio tree.rpm |cpio -tv 預(yù)覽
rpm2cpio 包文件|cpio–id “*.conf”釋放包內(nèi)文件
rpm2cpio tree.rpm |cpio -idv +所選指定文件的路徑
解壓縮指定包內(nèi)的文件
yum是建立在rpm之上
rpm -e +包名字 卸載
rpm -e kernel 卸載內(nèi)核會(huì)卸載不成功
--allmatches 全部卸載
--nodeps 卸載不考慮依耐性
--noscripts 卸載不運(yùn)行腳本
--notriggers 卸載不觸發(fā)
--test 不真實(shí)卸載
包檢驗(yàn)
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
導(dǎo)入公鑰
可以通過公鑰檢測(cè)包的簽名
rpm -V tree 檢查包跟原來的差別
rpm -K|checksigrpmfile檢查包的完整性和簽名
rpm -K tree.rpm 檢查包是否被破壞
檢查的前提是要先導(dǎo)入鑰匙
包來源合法性驗(yàn)正及完整性驗(yàn)正:
完整性驗(yàn)正:SHA256
來源合法性驗(yàn)正:RSA
公鑰加密:
對(duì)稱加密:加密、解密使用同一密鑰;
非對(duì)稱加密:密鑰是成對(duì)兒的
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數(shù)據(jù)庫(kù)
/var/lib/rpm
initdb: 初始化
如果事先不存在數(shù)據(jù)庫(kù),則新建之
否則,不執(zhí)行任何操作
rebuilddb:重建
無論當(dāng)前存在與否,直接重新創(chuàng)建數(shù)據(jù)庫(kù)
yum
解決包的依賴性
YUM:Yellowdog Update Modifier,rpm的前端程序,用來解決軟件包相關(guān)依賴性,可以在多個(gè)庫(kù)之間點(diǎn)位軟件包,up2date的代替工具。
yum的倉(cāng)庫(kù)
yum repository: yum repo,存儲(chǔ)了眾多rpm包,以及包的相關(guān)的元數(shù)據(jù)文件(放置于特定目錄repodata下)
路徑寫父目錄
文件服務(wù)器:
ftp://
http://
file:///
文件共享yum的倉(cāng)庫(kù)
/etc/yum.conf
/etc/yum.repos.d
repo配置文件
vim base.repo (必須文件repo結(jié)尾)
[base] (倉(cāng)庫(kù)名字自定義。但是5版本前的必須使用bash名字,不然會(huì)出錯(cuò))
name=centos 7 (自定義)
baseurl=http://10.1.0.1/cobbler/ks_mirror/7/ (網(wǎng)絡(luò)上存有的倉(cāng)庫(kù)路徑,路徑寫到父目錄就可以使用)
gpgcheck=1 (是否使用鑰匙鑒定(1是0否))
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-Centos-7 (本機(jī)自帶的公共鑰匙庫(kù)路徑)
enabled=1 (是否啟用yum倉(cāng)庫(kù))
yum repolist 查看顯示資源庫(kù)的配置
yum install tree 裝tree包
yum list |grep tree 查看包的出處
yum remove +包名卸載
yum客戶端配置文件:
/etc/yum.conf:為所有倉(cāng)庫(kù)提供公共配置
/etc/yum.repos.d/*.repo:為倉(cāng)庫(kù)的指向提供配置
yum-config-manager --add-repo= http://172.16.0.1/cobbler/ks_mirror/CentOS-X-x86_64/
自動(dòng)生成倉(cāng)庫(kù)
yum-config-manager --disable “倉(cāng)庫(kù)名" 禁用倉(cāng)庫(kù)
yum-config-manager --enable “倉(cāng)庫(kù)名” 啟用倉(cāng)庫(kù)
cat /var/log/yum.log 查看yum的日志
顯示倉(cāng)庫(kù)列表:
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] [...] (重新安裝)
升級(jí)程序包:
update [package1] [package2] [...]
downgrade package1 [package2] [...] (降級(jí))
檢查可用升級(jí):
check-update
卸載程序包:
remove | erase package1 [package2] [...]
info [...]可安裝和可更新的RPM包 信息
查看程序包information。
provides | whatprovidesfeature1 [feature2] [...]
查看指定的特性(可以是某文件)是由哪個(gè)程序包所提供。
清理本地緩存:
clean [ packages | metadata | expire-cache | rpmdb| plugins | all ]
yum clean all 清理所有緩存
(用來清理舊的錯(cuò)誤數(shù)據(jù))
構(gòu)建緩存:
makecache
yum makecache
yum search tree 搜索關(guān)鍵字
yum history 查看yum歷史
用循環(huán)實(shí)現(xiàn)國(guó)際象棋棋盤
9*9乘法表