一、壓縮軟件(二)
tar
tar [OPTION]... (1) 創建歸檔 tar -c -f / PATH/TO/SOMEFILE .tar FILE... tar cf / PATH/TO/SOMEFILE .tar FILE... (2) 查看歸檔文件中的文件列表 tar -t -f /PATH/TO/SOMEFILE .tar(3) 展開歸檔 tar -x -f /PATH/TO/SOMEFILE .tar tar -x -f /PATH/TO/SOMEFILE .tar -C /PATH/ 結合壓縮工具實現:歸檔并壓縮 -j: bzip2, -z: gzip, -J: xz
cpio
復制 從或到文件 cpio命令是通過重定向的方式將文件進行打包備份,還原恢復的工具,它可以解壓以“.cpio” 或者“.tar” 結尾的文件。 cpio [ 選項] > 文件名或者設備名 cpio [ 選項] < 文件名或者設備名 選項 -o 將文件拷貝打包成文件或者將文件輸出到設備上 -i 解包,將打包文件解壓或將設備上的備份還原到系統 -t 預覽,查看文件內容或者輸出到設備上的文件內容 -v 顯示打包過程中的文件名稱。 -d 解包生成目錄,在cpio 還原時,自動的建立目錄 -c 一種較新的存儲方式
示例
將etc 目錄備份: find ./etc -print |cpio -ov >etc.cpio 內容預覽 cpio –tv < etc.cpio 要解包文件 cpio –iv <etc.cpio cpio –idv < etc.cpio
二、shell編程(三)(循環)
循環
循環執行 將某代碼段重復運行多次 重復運行多少次: 循環次數事先已知 循環次數事先未知 有進入條件和退出條件 for, while, until
for 循環
for 變量名 in 列表;do 循環體 done 執行機制 : 依次將列表中的元素賦值給“變量名”;每次賦值后即執行一次循環體;直到列表中的元素耗盡,循環結束 列表生成方式: (1)直接給出列表 1 2 3 4 5 6 7 8 9 10 (2)整數列表: (a){start..end} echo {1..10} 1 2 3 4 5 6 7 8 9 10 (b)$(seq [start [step]] end) [root@6 bin]# seq 0 10 100 0 10 20 30 40 50 60 70 80 90 100 (3)返回列表的命令 $(COMMAND) (4)使用glob, , 如:*.sh (5)變量引用; $@, $*
while 循環
while CONDITION; do 循環體doneCONDITION:循環控制條件;進入循環之前,先做一次判斷;每一次循環之后會再次做判斷;條件為“true”,則執行一次循環;直到條件測試狀態為“false” 終止循環 因此:CONDTION一般應該有循環控制變量;而此變量的值會在循環體不斷地被修正 進入條件:CONDITION 為true; 退出條件:CONDITION 為false
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
創建無限循環
while true; do 循環體doneuntil false; do 循環體 Done
三、軟件包管理
軟件運行環境
API :Application Programming InterfacePOSIX :Portable OS程序源代碼 --> 預處理 --> 編譯 --> 匯編 --> 鏈接 靜態編譯: 共享編譯:.soABI :Application Binary InterfaceWindows 與Linux 不兼容 ELF(Executable and Linkable Format) PE(Portable Executable) 庫級別的虛擬化: Linux: WINE Windows: Cywin
開發語言
系統級開發 C C++ 應用級開發 java delphi Python go php perl ruby
包管理器
二進制應用程序的組成部分: 二進制文件、庫文件、配置文件、幫助文件 程序包管理器: debian :deb 文件, dpkg 包管理器 redhat: rpm 文件, rpm 包管理器 rpm: Redhat Package 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, amd64 powerpc: 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 -ivh PACKAGE_FILE ...
rpm 包安裝
[install-options] --test: 測試安裝,但不真正執行安裝;dry run 模式 --nodeps :忽略依賴關系 --replacepkgs (重新安裝相同的程序)| replacefiles(有重合的部分安裝文件,強制安裝) --nosignature: 不檢查來源合法性 --nodigest :不檢查包完整性 --noscr ipts :不執行程序包腳本片斷 %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 -Uvh PACKAGE_FILE ... rpm -Fvh PACKAGE_FILE ... --oldpackage :降級 --force: 強行升級
升級注意項
注意: (1)不要對內核做升級操作;Linux支持多內核版本并存,因此,對直接安裝新版本內核 (2)如果原程序包的配置文件安裝后曾被修改,升級時,新版本的提供的同一個配置文件并不會直接覆蓋老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew) 后保留
積累應用
1、for、until、while實現倒三角形
#! /bin/bash #author:lvasu #description: #version:0.1 #date: read -p "請輸入三角形行數:" line # 每行左側空格數=n-i # 每行的*的數量=2*i-1 for ((i=1;i<=line;i++)) do for ((j=1;j<=(line-i);j++)) do echo -n " " done for ((k=(2*i-1);k>=1;k--)) do echo -n "*" done echo done echo '========================' # 每行左側空格數=n-i # 每行*的數量=2*i-1 i=1; while [ $i -le $line ];do space=$[$line-$i]; #每行左側的空格數 xing=$[$i*2-1]; #每行*的數量 j=1; while [ $j -le $space ];do echo -n " " let j++ done k=$[space+xing] while [ $k -gt $space ];do echo -n "*" let k-- done echo let i++ done echo '========================' # 每行左側空格數=n-i # 每行的最后一個*位置=space+xing=n-i+2*i-1=n+i-1 i=1; until [ $i -gt $line ];do j=1; space=$[$line-$i]; #每行左側的空格數 xing=$[$i*2-1]; #每行*的數量 until [ $j -gt $space ];do echo -n " " let j++ done k=$[space+xing] until [ $k -le $space ];do echo -n "*" let k-- done echo let i++ done
2、for、until、while實現國際象棋棋盤
qipan3.sh #! /bin/bash #author lvasu #description: #version:0.1 #date: i=1; while [ $i -le 8 ];do j=1; while [ $j -le 8 ];do num=$[($i+$j)%2] if [ $num -eq 1 ];then if [ $j -ne 8 ];then echo -ne '\E[41m \E[0m' else echo -e '\E[41m \E[0m' fi else if [ $j -ne 8 ];then echo -ne '\E[42m \E[0m' else echo -e '\E[42m \E[0m' fi fi let j++ done let i++ done #! /bin/bash #author lvasu #description: #version:0.1 #date: i=1; while [ $i -le 8 ];do j=1; while [ $j -le 8 ];do num=$[($i+$j)%2] if [ $num -eq 1 ];then echo -ne '\E[41m \E[0m' else echo -ne '\E[42m \E[0m' fi let j++ done echo let i++ done
原創文章,作者:lvasu,如若轉載,請注明出處:http://www.www58058.com/38124
文章整體架構清晰,層次分明,通過實例演示讓內容更為充實飽滿,再接再厲。