歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux技術 >> 0527 第九節課

0527 第九節課

日期:2017/3/3 12:05:28   编辑:Linux技術

一.文件的打包和壓縮

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:給一個截止時間,多長時間不輸入就取消賦值,默認是秒為單位。。似乎也不能改單位。。

本文出自 “博客作業初版” 博客,謝絕轉載!

Copyright © Linux教程網 All Rights Reserved