一.概述
上一章剩余內容
壓縮工具 cpio
復制從或到文件
cpio命令是通過重定向的方式將文件進行打包備份,還原恢復的工具,它可以解壓以“.cpio”或者“.tar”結尾的文件。
cpio[選項] > 文件名或者設備名
cpio[選項] < 文件名或者設備名
選項
-o 將文件拷貝打包成文件或者將文件輸出到設備上
-i解包,將打包文件解壓或將設備上的備份還原到系統
-t 預覽,查看文件內容或者輸出到設備上的文件內容
-v 顯示打包過程中的文件名稱。
-d 解包生成目錄,在cpio還原時,自動的建立目錄
-c 一種較新的存儲方式
二.shell 腳本編程
循環執行
將某代碼段重復運行多次
重復運行多少次:
循環次數事先已知
循環次數事先未知
有進入條件和退出條件
for, while, until
for
while 當…
until 直到…
for循環
for 變量名in 列表;do
循環體
done
執行機制:
依次將列表中的元素賦值給“變量名”; 每次賦值后即執行一次循環體; 直到列表中的元素耗盡,循環結束
列表生成方式:
(1) 直接給出列表
(2) 整數列表:
(a) {start..end}
(b) $(seq[start [step]] end)
(3) 返回列表的命令
$(COMMAND)
(4) 使用glob,如:*.sh
(5) 變量引用;
$@, $*
until循環
until CONDITION; do
循環體
done
進入條件:CONDITION 為false
退出條件:CONDITION 為true
循環控制語句continue
用于循環體中
continue [N]:提前結束第N層的本輪循環,而直接進入下一輪判斷;最內層為第1層
while CONDTIITON1; do
CMD1
…
if CONDITION2; then
continue
fi
CMDn
…
done
循環控制語句break
用于循環體中
break [N]:提前結束第N層循環,最內層為第1層
while CONDTIITON1; do
CMD1
…
if CONDITION2; then
break
fi
CMDn
…
done
三.軟件包管理
1)概述
軟件運行環境
軟件包基礎
Rpm包管理
yum管理
定制yum倉庫
編譯安裝
軟件運行的環境
API:Application Programming Interface(應用程序開發接口)
POSIX:Portable OS (國際標準)
程序源代碼–> 預處理–> 編譯–> 匯編–> 鏈接
靜態編譯:
共享編譯:.so
ABI:Application Binary Interface (應用程序的二進制接口)
Windows與Linux不兼容
ELF(Executable and Linkable Format)
PE(Portable Executable)
庫級別的虛擬化:
Linux: WINE
Windows: Cywin
開發語言
系統級開發
C
C++
應用級開發
java
delphi
Python
go
php
perl
ruby
包管理器
二進制應用程序的組成部分:
二進制文件、庫文件、配置文件、幫助文件
查詢關聯的庫文件
例: ldd /bin/ls
程序包管理器:
debian:deb文件, dpkg包管理器
redhat: rpm文件, rpm包管理器
rpm: RedhatPackage Manager
RPM Package Manager
包的命名方式
源代碼:name-VERSION.tar.gz|bz2|xz
VERSION: major.minor.release
rpm包命名方式:
name-VERSION-release.arch.rpm
例:bash-4.2.46-19.el7.x86_64.rpm
VERSION: major.minor.release
release:release.OS
常見的arch:
x86: i386, i486, i586, i686
x86_64: x64, x86_64, amd64powerpc: ppc
跟平臺無關:noarch
包命名和工具
包:分類和拆包
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
包管理器
功能:將編譯好的應用程序的各組成文件打包一個或幾個程序包文件,從而方便快捷地實現程序包的安裝、卸載、查詢、升級和校驗等管理操作
1、包文件組成(每個包獨有)
RPM包內的文件
RPM的元數據,如名稱,版本,依賴性,描述等
安裝或卸載時運行的腳本
2、數據庫(公共)
程序包名稱及版本
依賴關系
功能說明
包安裝后生成的各文件路徑及校驗碼信息
程序包的來源
管理程序包的方式:
使用包管理器:rpm
使用前端工具:yum, dnf
獲取程序包的途徑:
(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包管理 (重點~!!!)
CentOS系統上使用rpm命令管理程序包:
安裝、卸載、升級、查詢、校驗、數據庫維護
安裝:
rpm {-i|–install} [install-options] PACKAGE_FILE…
-v: verbose
-vv:
-h: 以#顯示程序包管理執行進度
rpm -ivhPACKAGE_FILE …
rpm包安裝
[install-options]
–test: 測試安裝,但不真正執行安裝;dry run模式
–nodeps:忽略依賴關系
–replacepkgs(如果丟失中的一個,可以使用這個命令進行覆蓋安裝)| replacefiles (覆蓋重復的)
–nosignature: 不檢查來源合法性(本身系統不具備檢查系統的合法性.使用這個可以忽略)
–nodigest:不檢查包完整性
–noscipts:不執行程序包腳本片斷
%pre: 安裝前腳本;–nopre
%post: 安裝后腳本;–nopost
%preun: 卸載前腳本;–nopreun
%postun: 卸載后腳本;–nopostun
rpm包升級
升級:
rpm {-U|–upgrade} [install-options] PACKAGE_FILE…
rpm {-F|–freshen} [install-options] PACKAGE_FILE…
upgrade:安裝有舊版程序包,則“升級”
如果不存在舊版程序包,則“安裝”
freshen:安裝有舊版程序包,則“升級”
如果不存在舊版程序包,則不執行升級操作
rpm -UvhPACKAGE_FILE …
rpm -FvhPACKAGE_FILE …
–oldpackage:降級
–force: 強行升級
升級注意項
注意:
(1) 不要對內核做升級操作;Linux支持多內核版本并存,因此,對直接安裝新版本內核
(2) 如果原程序包的配置文件安裝后曾被修改,升級時,新版本的提供的同一個配置文件并不會直接覆蓋老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留
1、判斷/var/目錄下所有文件的類型
2、添加10個用戶user1-user10,密碼同用戶名
3、/etc/rc.d/rc3.d目錄下分別有多個以K開頭和以S開頭的文件;分別讀取每個文件,以K開頭的文件輸出為文件加stop,以S開頭的文件輸出為文件名加start;
“K34filename stop”
“S66filename start”
4、編寫腳本,提示輸入正整數n的值,計算1+2+3+…n的總和
5、編寫腳本,提示請輸入網絡地址,如192.168.0.0,判斷輸入的網段中主機在線狀態
6、打印九九乘法表
7.編寫腳本,刪除gid大于1000的組
8.編寫腳本,求100以內所有正整數之和
9.編寫腳本,通過ping命令探測172.16.250.1-254范圍內的所有主機的在線狀態,統計在線主機和離線主機各多少。
10.編寫腳本,打印九九乘法表
11.編寫腳本,利用變量RANDOM生成10個隨機數字,輸出這個10數字,并顯示其中的最大者和最小者
12.編寫腳本,實現打印國際象棋棋盤
13.每隔3秒鐘到系統上獲取已經登錄的用戶的信息;如果發現用戶hacker登錄,則將登錄時間和主機記錄于日志/var/log/login.log中,并提示該用戶退出系統。
14.隨機生成10以內的數字,實現猜字游戲,提示比較大或小,相等則退出。
原創文章,作者:Kartik,如若轉載,請注明出處:http://www.www58058.com/38774