一.文件的打包和壓縮
1.compress/uncompress
compress [options] file *.Z
-d:解壓縮,等同於uncompress
-c:輸出到屏幕
-r:壓縮目錄
zcat file.Z > file
2.gzip/gunzip
gzip [options] file *.gz
-c:輸出到屏幕
-d:解壓縮
-k:保留源文件
-#:確定壓縮比,1-9,1是最差9是最好,默認是6
gzcat:不解壓預覽壓縮文件內容
gzip可以解壓Z壓縮文件
3.bzip2
bzip2 [options] file *.bz2
-c:輸出到屏幕
-d:解壓縮
-k:保留源文件
-#:壓縮比,同gz
bzcat:同gzcat
4.xzip
xzip [options] file *.xz
-c
-d
-k
-#:同上
xzcat:同上
應為是最新的壓縮解壓縮程序,所有壓縮後的大小是最小的
5.zip
zip[options] file壓縮後name file
-r:壓縮目錄
支持重定向,支持管道
cat /PATH/TO/FILE | zip name - | cat /PATH/TO/FILE
-的意思是指代前邊的內容
unzip file 解壓縮
以上集中壓縮程序,最多的是gz,用的最多的是bzip2,最新的是xzip,compress基本上已經不適用,即便有,也可以用其他幾個解壓縮
二.打包壓縮文件
1.tar:打包壓縮程序,重點程序
tar [options] file/dir
有種多選項和眾多共用,但基本上適用來打包壓縮解壓縮的,因為以上的壓縮程序默認都不支持目錄
所以需要用tar程序將眾多文件打包成一個大文件在進行壓縮
主要記住以下用法
tar -cvf files/dir :文件打包
tar -gcvf :打包壓縮成gz格式
tar -jcvf :打包壓縮成bz2格式
tar -Jcvf :打包壓縮成xz格式
tar -tvf :預覽壓縮文件內容
tar -xvf :解壓縮 後面加-C指定解壓地點
tar -zpvf :備份
有的時候一個壓縮文件,我們只需要其中的一部分,tar也可以完成
首先,查看文件內容,搜索自己需要的文件,支持管道
tar -tvf file | grep ”xxx”
找出文件名後
tar -xvf file 目標file
2.cpio程序:同樣是打包壓縮程序,cpio支持重定向,並且同樣支持只解壓部分文件
cpio xxxx > 設備或文件
cpio xxxx < 設備或文件
基本上用法如下
cpio -iov file > 設備或文件 備份文件
-iv/idv 解壓文件
-tv 預覽文件
主要就是支持重定向
二.狀態回執
echo $? 每執行一個命令都會有一個狀態回執,來表示上一個命令是否執行成功
回執的數值有2中情況
0 :上一條命令執行成功
1-255 :上條命令執行不成功
很多時候,我們並不關心命令本身的執行結果,只是想知道命令是不是成功的
執行了,這個時候就可以使用重定向將結果輸出到/dev/null然後查看變量$?
的回執的數值來看是不是成功執行,並以此來做出判斷,腳本中常用
自定義回執數值
exit # 在腳本中的時候,經常用到這些來決定下一步的走向,而且這個數值也是可以自定義的,
在exit後邊加上一個數字,那麼那個數字將會成為成功回執的數值
三.條件判斷(單項)
ture:0
false:1
判斷格式
test 表達式
[ 表達式 ] 兩頭空格
[[ 表達式 ]] 兩頭空格
1.數值判斷 判斷兩邊的數值的大小關系
-eq:兩邊的數值相等
-ne:兩邊的數值不等
-lt:左邊小於右邊
-le:左邊小於等於右邊
-gt:左邊大與右邊
-ge:左邊大與等於右邊
2.字符串判斷 判斷字符串的關系
[ n “變量” ] :判斷變量是不是空的,是空的為真
[ z “變量” ] :判斷變量是不是非空的,是非空的為真
==:判斷兩邊的字符串是不是想等
!=:判斷兩邊的字符串是不是不相等
<:判斷左邊的字符串的ascii碼的是不是小於右邊,小於為真
>:判斷左邊的字符串的ascii碼的是不是大於右邊,大於為真
~=:判斷左邊的字符串是不是能被右邊的pattern匹配到
3.文件類型,存在判斷
-a/-e:判斷文件是不是存在,存在為真
-[fdbclpS] :判斷文件是不是什麼類型,是為真
4.權限判斷
-r:判斷文件是不是有讀權限,有為真
-w: 寫
-x: 執行
5.特殊權限判斷
-u:判斷文件是不是有suid的特殊權限,有為真
-g:判斷文件或目錄是不是有sgid的特殊權限
-k:判斷目錄是不是有sickty的特殊權限
6.屬主屬組判斷
-N:判斷文件在上一次讀取過後有沒有做過修改,有為真
-O:判斷當前用戶是不是文件的屬主,是為真
-G:判斷當前用戶的用戶組是不是文件的屬組
7.文件時間判斷
-ef:判斷左右兩個文件是否是同一個文件,即相同分區的相同節點的文件
-ot:判斷左邊文件的時間是不是右邊文件早,修改時間mtime
-nt:判斷左邊文件的時間是不是比右邊的晚,修改時間mtime
四.條件判斷(復數向)
1.&&與 ||或 !非
格式 command1 && command2
command1 || command2
!command
關於&& || !加上異或^的關系前邊提到過
&&:
1&&1 真
1&&0 假
0&&1 假
0&&0 假 可以看出,當前邊的命令是假的時候,後邊的命令並不需要運行,因為結果一定是假的,所以後邊的命令
的運行條件是,保證前邊的命令是真的
||:
1||1 真
1||0 真
0||1 真
0||0 假 可以看出,當前邊的命令是假的時候,想要得知最後的結果是不是真的,需要需要運行後邊的命令,但前
邊的命令如果是真的,則不需要運行後邊的命令,所以後邊命令想要運行,必須的保證前邊的而命令是假
以上兩個關系經常用在命令或者腳本真來判斷執行那個後續命令,例如下邊的腳本
#!/bin/bash
#author
#version
#description
[ -e /etc/nologin ] && rm -f /etc/nologin || touch /etc/nologin
上述腳本的內容意思是
[ -e /etc/nologin ]查看/etc/nologin這個文件是不是存在
&& rm -f /etc/nologin 如果,存在,即前邊的[ -e /etc/nologin ] 為真,那麼必須運行&&後邊的命令刪去nologin
如果,不存在,就是前邊的[ -e /etc/nologin ]為假,那麼後邊的rm命令就不會運行
|| touch /etc/nologin 如果nologin存在,那就是說[ -e /etc/nologin ]為真,就會運行rm,那麼||前邊的命令為真,
touch命令不管真假,最後都會是真,所以touch命令沒必要也不會運行
如果nologin不存在,[ -e /etc/nologin ]為假,那麼rm就不會運行,那麼,||前邊的所有都為假
那麼久需要運行touch命令來創建一個nologin
!:就是非的意思
異或:異或的符號是^,意思是^兩邊的內容命令都是真的的時候,那麼最終的結果會是假的,當兩邊的內容有一個為假,那麼最後
的結果就是真的,就說要要求兩邊不相同就行
例如 [ -w file2 ] && [ -r file2 ] file2具有讀且寫權限,都有為真,有一個沒有為假
[ -w file2 ] || [ -r file2 ] file2具有讀或寫權限,都沒有為假,其余為真
[ !-r file2 ] file2不具有讀權限,有為假,沒有為真
2. -a -o !
這幾個字符在find命令中提到過,用法也基本等同,-a是且的意思,-o是或的意思,!是非的意思(!表達非的意思的地方到現在為止學了很多,但是
只有在sed命令中,!才寫在地址的後邊來表示非的意思,其余的都寫在了前邊)
格式 [ 表達式 -a 表達式 ]
[ 表達式 -o 表達式 ]
! [ 表達式 -a/-o 表達式 ] 注意幾乎所有的地方都有一個空格
意思大致上沒有什麼變化,只是將兩個[]部分寫成了一個,!也放在了[]外邊,值得注意的是!對於[]內的-a和-o的影響
要考慮摩根定律
五.尚未講完rpm
rpm簡單理解成安裝程序的安裝包的程序就行,類似window上少了下載功能的一種軟件管家
基本上記住以下用法就成
rpm -ivh
i:是互動模式
v:是verbose,顯示具體過程
h:是用#號來制作顯示一個進度條
這樣的###########################################>100%
剩下的和yum寫在一起
六.read命令
read命令是用來批量給變量賦值的
當輸入read xx1 xx2 xx3後會進入交互模式
----------屏幕上顯示這玩意讓你輸入內容,輸入的內容會對應的成XX的變量內容,回車結束,多個變量空格隔開
但是有一個問題就是,read在批量給變量賦值時多個變量內容使用空格隔開的,因此很容易讀取錯誤,例如
read xx1 xx2 xx3 xx4
a b c d f
echo $xx1
a
echo $xx2
b
echo $xx3
c
echo $xx4
d f
會默認的將剩下的內容賦值到最後一個變量中,所以,必須要對應一個變量一個內容,不能多
-p “內容” :顯示制定要出現的提示
-t:給一個截止時間,多長時間不輸入就取消賦值,默認是秒為單位。。似乎也不能改單位。。
本文出自 “博客作業初版” 博客,謝絕轉載!