shell腳本擴展

2018-06-08 17:09 更新

防偽碼:要做到無可替代,就要與眾不同。

一、正則表達式:

      正則表達式(或稱Regular Expression,簡稱RE)就是由普通字符(例如字符 a 到 z)以及特殊字符(稱為元字符)組成的文字模式。

     該模式描述在查找文字主體時待匹配的一個或多個字符串。

 正則表達式作為一個模板,將某個字符模式與所搜索的字符串進行匹配。簡單的說,正則表示式就是處理字符串的方法,它是以行為單位來進行字符串的處理行為, 正則表示式通過一些特殊符號的輔助,可以讓使用者輕易的達到搜尋/刪除/取代某特定字符串的處理程序。vim、grep、find、awk、sed等命令都支持正則表達式。

常用正則表達式:

1、.代表任意單個字符, 如:/l..e/與包含一個l,后跟兩個字符,然后跟一個e的行相匹配

2、^代表行的開始。 ^love 如:與所有l(wèi)ove開頭的行匹配

3、$代表行的結(jié)束。love$ 如:與所有l(wèi)ove結(jié)尾的行匹配

那么‘^$’ 就表示空行

4、[…]匹配括號中的字符之一

[abc]      匹配單個字符a或b或c

[123]      匹配單個字符1或2或3

[a-z]      匹配小寫字母a-z之一

[a-zA-Z]    匹配任意英文字母之一

[0-9a-zA-Z]匹配任意英文字母或數(shù)字之一

注意:上面標紅色的單個和之一,不管[]里面多復(fù)雜,它的結(jié)果都是一個字符!

 

可以用^標記做[]內(nèi)的前綴,表示除[]內(nèi)的字符之外的其他字符(即匹配不在此括號中的任何字符)。比如 搜索oo前沒有g(shù)的字符串的行. 應(yīng)用 '[^g]oo' 作搜索字符串,^符號如果出現(xiàn)在[]的起始位置表示否定,但是在[]的其他位置是普通字符。[^ab^c] 除了a或b或^或c的其他任意單個字符

5、* 用于修飾前導(dǎo)字符,表示前導(dǎo)字符出現(xiàn)0或任意多

如:'a*grep'匹配所有0個或多個a后緊跟grep的行。“.*”表示任意字符串

 

6、\? 用于修飾前導(dǎo)字符,表示前導(dǎo)字符出現(xiàn)0或1

a\? 匹配0或1個a

 

7、\+ 用于修飾前導(dǎo)字符,表示前導(dǎo)字符出現(xiàn)1或多

a\+ 匹配1或多個a

 

8、\{n,m\}  用于修飾前導(dǎo)字符,表示前導(dǎo)字符出現(xiàn)n至m次 (n和m都是整數(shù),且n<m)

a\{3,5\} 匹配3至5個連續(xù)的a

 

\{n,m\}還有其他幾種形式:

\{n\}  連續(xù)的n個前導(dǎo)字符

\{n,\}  連續(xù)的至少n個前導(dǎo)字符

9、\  用于轉(zhuǎn)義緊跟其后的單個特殊字符,使該特殊字符成為普通字符

 

\.*

\.php$

 

如:^\.[0-9][0-9] 以一個句點和兩個數(shù)字開始

 

例如:

a* 匹配連續(xù)的任意(也包括0)個a

a\? 匹配0或1個a

a\+ 匹配1或多個a

a\{3,5\} 匹配3至5個連續(xù)的a

\.* 匹配0或多個連續(xù)的. \.表示普通字符句點

 

10、|表示  如: a|b|c 匹配a或b或c。如:grep|sed匹配grep或sed

 

11、(),將部分內(nèi)容合成一個單位組,比如 要搜索 glad 或 good 可以如下 'g(la|oo)d'

\.(php|jsp|asp)$

綜合舉例1:

1 Christian Scott lives here and will put on a Christmas party.

2 There are around 30 to 35 people invited.

3 They are:

4  Tom

5 Dan

6  Rhonda Savage

7 Nicky and Kimerly.

8 Steve, Suzanne, Ginger and Larry.

^[A-Z]..$

搜索行以AZ的一個字母開頭,然后跟兩個任意字母,然后跟一個換行符的行。將找到第5行。

 

^[A-Z][a-z]*3[0-5]

搜索以一個大寫字母開頭,后跟0個或多個小寫字母,再跟數(shù)字3,再跟05之間的一個數(shù)字。無法找到匹配行(改成^[A-Z][a-z]*.*3[0-5]可找到第2)

 

^ *[A-Z][a-z][a-z]$

搜索以0個或多個空格開頭,跟一個大寫字母,兩個小寫字母和一個換車符。將找到第4行的TOM(整行匹配)和第5行。注意,*前面有一個空格。

 

^[A-Za-z]*[^,][A-Za-z]*$

將查找以0個或多個大寫或小寫字母開頭,不跟逗號,然后跟0個或多個大寫或小寫字母,然后跟一個換車符。將找到第45行。

 

綜合舉例2:

# ls -l  /bin | grep   '^...s'

上面的命令是用來查找suid文件的;

# ls -lR /usr | grep   '^...s..s'

上面的命令是用來查找suid和guid的。

r w x

suid  sgid 粘制位

s     s     t

acl屬性

 

二、grep命令的用法

grep (global search regular expression(RE) and print out the line,全面搜索正則表達式并把行打印出來)是一種強大的文本搜索工具,它能使用正則表達式搜索文本,并把匹配的行打印出來.

 

參數(shù):

1. -A NUM,--after-context=NUM   除了列出符合行之外,并且列出后NUM行。

如:   $ grep –A 1 panda file  (從file中搜尋有panda樣式的行,并顯示該行的后1行)

 

2. -B NUM,--before-context=NUM  與 -A NUM 相對,但這此參數(shù)是顯示除符合行之外并顯示在它之前的NUM行。如:    (從file中搜尋有panda樣式的行,并顯示該行的前1行)

$ grep -B 1 panda file

 

3、 -C [NUM], -NUM, --context[=NUM]  列出符合行之外并列出上下各NUM行,默認值是2。

 

如:    (列出file中除包含panda樣式的行外并列出其上下2行)(若要改變默認值,直接改變NUM即可)

$ grep -C[NUM] panda file

 

4、 -c, --count  不顯示符合樣式行,只顯示符合的總行數(shù)。若再加上-v,--invert-match,參數(shù)顯示不符合的總行數(shù)

5、-i,--ignore-case 忽略大小寫差別

 

6、-n,--line-number 在匹配的行前面打印行號

 

7、-v,--revert-match  反檢索,只顯示不匹配的行

 

8、精確匹配:

例如在抽取字符串“ 48”,返回結(jié)果包含諸如484和483等包含“48”的其他字符串,實際上應(yīng)精確抽取只包含48的各行。

 

使用grep抽取精確匹配的一種有效方式是在抽取字符串后加\>。假定現(xiàn)在精確抽取48,

方法如下:

#grep '48\>' filename

 

9、-s 不顯示不存在或無匹配文本的錯誤信息

如:執(zhí)行命令grep "root" /etc/password,因為password文件不存在,所以在屏幕上輸出錯誤信息,若使用grep命令-s開關(guān),可屏蔽錯誤信息

 

要用好grep這個工具,其實就是要寫好正則表達式,所以這里不對grep的所有功能進行實例講解,只列幾個例子,講解一個正則表達式的寫法。

 

$ ls -l | grep  '^d'
通過管道過濾ls -l輸出的內(nèi)容,只顯示以d開頭的行。

 

$ grep  'test'  d*
顯示所有以d開頭的文件中包含test的行。

 

$ grep  'test'  aa  bb  cc
顯示在aa,bb,cc文件中匹配test的行。

 

$ grep  '[a-z]\{5,\}'  aa
顯示所有包含每個字符串至少有5個連續(xù)小寫字符的字符串的行。

 

$grep  ‘t[a|e]st’  filename

顯示包含test或tast的所有行。

 

$grep  '\.$'  filename

顯示以.為結(jié)尾的所有行。

 

三、sed命令的用法

sed是一種在線編輯器,它一次處理一行內(nèi)容。處理時,把當前處理的行存儲在臨時緩沖區(qū)中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區(qū)中的內(nèi)容,處理完成后,把緩沖區(qū)的內(nèi)容送往屏幕。接著處理下一行,這樣不斷重復(fù),直到文件末尾。文件內(nèi)容并沒有改變,除非你使用重定向存儲輸出。

 

sed的基本命令

1.替換: s命令
1.1 基本用法

  如: sed  's/day/night/'  old >new
 
該例子將文件 old 中的每一行第一次出現(xiàn)的 day 替換成 night, 將結(jié)果輸出到文件 new

 

  s            " 替換 " 命令
 /../../      
分割符 (Delimiter)
 day          
搜索字符串
 night        
替換字符串
 
其實 , 分割符 "/" 可以用別的符號代替 , 比如 ",", "|" .
如:sed 's/\/usr\/local\/bin/\/common\/bin/'<old >new
 
等價于 sed 's_/usr/local/bin_/common/bin_' <old >new
 
顯然 , 此時用 "_" 作分割符比 "/" 好得多

 

1.2 用 & 表示匹配的字符串

有時可能會想在匹配到的字符串周圍或附近加上一些字符 .
如: sed 's/abc/(abc)/' <old >new

 

sed  's/[a-z]/(&)

 

 該例子在找到的 abc 前后加上括號 .
該例子還可以寫成 sed 's/abc/(&)/' <old >new

 

 下面是更復(fù)雜的例子 :
sed 's/[a-z]*/(&)/' <old >new

 

sed 默認只替換搜索字符串的第一次出現(xiàn) , 利用 /g 可以替換搜索字符串所有

$ sed 's/test/mytest/g' example-----在整行范圍內(nèi)把test替換為mytest。如果沒有g(shù)標記,則只有每行第一個匹配的test被替換成mytest。

$ sed 's/^192.168.0.1/&localhost/' example-----&符號表示替換字符串中被找到的部份。所有以192.168.0.1開頭的行都會被替換成它自已加 localhost,變成192.168.0.1localhost。

$ sed 's#10#100#g' example-----不論什么字符,緊跟著s命令的都被認為是新的分隔符,所以,“#”在這里是分隔符,代替了默認的“/”分隔符。表示把所有10替換成100。

如果需要對同一文件或行作多次修改,可以使用 "-e" 選項

2.刪除行:d命令 

將/etc/passwd的內(nèi)容顯示并找印行號,同時將2~5刪除

 

附:nl命令在linux系統(tǒng)中用來計算文件中行號。nl 可以將輸出的文件內(nèi)容自動的加上行號

如果只要刪除第2行,可以使用nl /etc/passwd | sed '2d' 來達成,至于若是要刪除第 3 到最后一行,則是nl /etc/passwd | sed '3,$d'的啦。

 

3.增加行:a命令(在指定的行后新增)或i命令(在指定的行前新增)

a的后面可以接字符串,而這些字符串會在新的一行出現(xiàn)

在/etc/passwd的第二行后增加“XXXXX”字樣的新行

 


在/etc/passwd的第二行前增加“XXXXX”字樣的新行

如果要同時新增多行,則每行之間要用反斜杠\來進行新行的添加

4、取代行:c命令

c的后面可以接字符串,這些字符串可以取代n1,n2之間的行

 

5、打?。簆命令

sed '/north/p' datafile 默認輸出所有行,找到north的行重復(fù)打印

 

sed  –n '/north/p' datafile 禁止默認輸出,只打印找到north的行

 

nl /etc/passwd | sed -n '5,7p' 僅列出/etc/passwd文件中的第5~7行內(nèi)容

 

注:sed 的-i選項可以直接修改文件中的內(nèi)容 

6.擴展:

調(diào)用sed有三種方式:

l 在命令行鍵入命令

l 將sed命令插入腳本文件,然后調(diào)用sed

l 將sed命令插入腳本文件,并使sed腳本可執(zhí)行。

A 使用sed命令行格式為:

sed [選項] sed命令 輸入文件。

記住在命令行使用sed命令時,實際命令要加單引號。sed也允許加雙引號。

 

B、使用sed腳本文件,格式為:

sed [選項] -f sed腳本文件  輸入文件

 

C、要使用第一行具有sed命令解釋器的sed腳本文件,其格式為:

sed腳本文件 [選項]  輸入文件

 

不管是使用shell命令行方式或腳本文件方式,如果沒有指定輸入文件, sed從標準輸入中接受輸入,一般是鍵盤或重定向結(jié)果。

 

sed選項如下:

-f, --filer=script-file 引導(dǎo)sed腳本文件名

 

綜合舉例:

通過sed腳本對test.txt進行處理,test.txt文件內(nèi)容如下:

 

創(chuàng)建sed腳本文件append.sed,通過sed腳本向test.txt中新增內(nèi)容,腳本內(nèi)容如下:

 

保存它,增加可執(zhí)行權(quán)限:chmod +x append.sed

 

運行腳本append.sed

顯示結(jié)果如下:

現(xiàn)在查看其具體功能。

 

第一行是sed命令解釋行。腳本在這一行查找sed以運行命令,這里定位在/bin。

第二行以/company/開始,這是附加操作起始位置。a\通知sed這是一個附加操作,首先插入二個新行。

第三、四行是附加操作要加入到拷貝的實際文本。

這里只舉例通過sed腳本增加新行的操作,有關(guān)sed的其他操作大家要會舉一反三。

 

五、awk命令:

awk也是一個數(shù)據(jù)處理工具!相較于 sed 常常作用于一整個行的處理, awk 則比較傾向于一行當中分成數(shù)個字段來處理。

 

.awk語言的最基本功能是在文件或字符串中基于指定規(guī)則來分解抽取信息,也可以基于指定的規(guī)則來輸出數(shù)據(jù)。其實他更像一門編程語言,他可以自定義變量,有條件語句,有循環(huán),有數(shù)組,有正則,有函數(shù)等。

 

有三種方式調(diào)用awk

 

1.命令行方式

awk  [-F field-separator]  'commands'  input-files

其中,[-F域分隔符]是可選的,因為awk使用空格或tab鍵作為缺省的域分隔符,因此如果要瀏覽域間有空格的文本,不必指定這個選項,如果要瀏覽諸如passwd文件,此文件各域以冒號作為分隔符,則必須指明-F選項,如:awk -F: 'commands' input-file。

注:在linux系統(tǒng)中用環(huán)境變量IFS存儲分隔符,但根據(jù)實際應(yīng)用也可以改變IFS的值.

例如:

腳本執(zhí)行結(jié)果如下:

commands 是真正awk命令, input-files 是待處理的文件。

iput_files可以是多于一個文件的文件列表,awk將按順序處理列表中的每個文件。

在awk中,文件的每一行中,由域分隔符分開的每一項稱為一個域。通常,在不指名-F域分隔符的情況下,默認的域分隔符是空格或tab鍵。

 

2.shell腳本方式

將所有的awk命令插入一個文件,并使awk程序可執(zhí)行,然后awk命令解釋器作為腳本的首行,以便通過鍵入腳本名稱來調(diào)用。

相當于shell腳本首行的:#!/bin/sh可以換成:#!/bin/awk

 

3.將所有的awk命令插入一個單獨文件,然后調(diào)用:

Awk        -f        awk-script-file        input-files

其中,-f選項加載awk-script-file中的awk腳本,input-files跟上面的是一樣的。

 

awk的模式和動作

 

任何awk語句都由模式和動作組成(awk_pattern { actions })。
在一個awk腳本中可能有許多語句。

模式部分決定動作語句何時觸發(fā)及觸發(fā)事件。處理即對數(shù)據(jù)進行的操作。如果省略模式部分,動作將時刻保持執(zhí)行狀態(tài)。即省略時不對輸入記錄進行匹配比較就執(zhí)行相應(yīng)的actions。

 

模式可以是任何條件語句或正則表達式等。awk_pattern可以是以下幾種類型:

 

1) 正則表達式用作awk_pattern: /regexp/

例如:awk '/ ^[a-z]/' input_file

2) 布爾表達式用作awk_pattern,表達式成立時,觸發(fā)相應(yīng)的actions執(zhí)行。

表達式中可以使用變量(如字段變量$1,$2等)和/regexp/

② 布爾表達式中的操作符:

 

關(guān)系操作符: < > <= >= == !=
匹配操作符: value ~ /regexp/ 如果value匹配/regexp/,則返回真

value !~ /regexp/ 如果value不匹配/regexp/,則返回真
例如: awk '$2 > 10 {print "ok"}' input_file
     awk '$3 ~ /^d/ {print "ok"}' input_file

③ &&(與) 和 ||(或) 可以連接兩個/regexp/或者布爾表達式,構(gòu)成混合表達式。!(非) 可以用于布爾表達式或者/regexp/之前。

 

例如: awk '($1 < 10 ) && ($2 > 10) {print "ok"}' input_file
     awk '/^d/ || /x$/ {print "ok"}' input_file

模式包括兩個特殊字段 BEGIN和END。使用BEGIN語句設(shè)置計數(shù)和打印頭。BEGIN語句使用在任何文本瀏覽動作之前,之后文本瀏覽動作依據(jù)輸入文本開始執(zhí)行。END語句用來在awk完成文本瀏覽動作后打印輸出文本總數(shù)和結(jié)尾狀態(tài)標志。

 

實際動作在大括號{ }內(nèi)指明。動作大多數(shù)用來打印,但是還有些更長的代碼諸如i f和循環(huán)語句及循環(huán)退出結(jié)構(gòu)。如果不指明采取動作,awk將打印出所有瀏覽出來的記錄。

 

awk執(zhí)行時,其瀏覽域標記為$1,$2...$n。這種方法稱為域標識。使用這些域標識將更容易對域進行進一步處理。

 

使用$1 , $3表示參照第1和第3域,注意這里用逗號做域分隔。如果希望打印一個有5個域

的記錄的所有域,不必指明$1 , $2 , $3 , $4 , $5,可使用$0,意即所有域。

為打印一個域或所有域,使用print命令。這是一個awk動作

 

awk的運行過程:

1 如果BEGIN 區(qū)塊存在,awk執(zhí)行它指定的actions。

2  awk從輸入文件中讀取一行,稱為一條輸入記錄。(如果輸入文件省略,將從標準輸入讀取)

3  awk將讀入的記錄分割成字段,將第1個字段放入變量$1中,第2個字段放入$2,以此類推。$0表示整條記錄。

4  把當前輸入記錄依次與每一個awk_cmd中awk_pattern比較,看是否匹配,如果相匹配,就執(zhí)行對應(yīng)的actions。如果不匹配,就跳過對應(yīng)的actions,直到比較完所有的awk_cmd。

5  當一條輸入記錄比較了所有的awk_cmd后,awk讀取輸入的下一行,繼續(xù)重復(fù)步驟,這個過程一直持續(xù),直到awk讀取到文件尾。

6  當awk讀完所有的輸入行后,如果存在END,就執(zhí)行相應(yīng)的actions。

 

入門實例:

例1:顯示/etc/passwd文件中的用戶名和登錄shell

如果只是顯示/etc/passwd的賬戶和賬戶對應(yīng)的shell,而賬戶與shell之間以tab鍵分割

如果只是顯示/etc/passwd文件中的用戶名和登錄shell, 而賬戶與shell之間以逗號分割

注:awk的總是輸出到標準輸出,如果想讓awk輸出到文件,可以使用重定向。


例3:如果只是顯示/etc/passwd文件中的UID大于500的用戶名和登錄shell,而賬戶與shell之間以逗號分割,而且在所有行添加列名name,shell,在最后一行添加"blue,/bin/nosh"。

注:

1.awk 后面接兩個單引號并加上大括號 {} 來設(shè)定想要對數(shù)據(jù)進行的處理動作

2.awk工作流程是這樣的:先執(zhí)行BEGING,然后讀取文件,讀入有\n換行符分割的一條記錄,然后將記錄按指定的域分隔符劃分域,填充域,$0則表示所有域,$1表示第一個域,$n表示第n個域,隨后開始執(zhí)行模式所對應(yīng)的動作。接著開始讀入第二條記錄······直到所有的記錄都讀完,最后執(zhí)行END操作。

思考題:如何打印所有記錄(以/etc/passwd中的內(nèi)容為例)

例4:搜索/etc/passwd有root關(guān)鍵字的所有行

這種是pattern(模式)的使用示例,匹配了pattern(這里是root)的行才會執(zhí)行action(沒有指定action,默認輸出每行的內(nèi)容)。

搜索支持正則表達式,例如找root開頭的:

 

例5:顯示最近登錄系統(tǒng)的5個用戶信息,只顯示用戶名和IP地址

使用last命令可以查看最近登錄的用戶信息。如下圖所示:

使用awk命令抽取用戶名和IP區(qū)域的數(shù)據(jù)

awk內(nèi)置變量

awk有許多內(nèi)置變量用來設(shè)置環(huán)境信息,下面給出了最常用的一些變量。

 FILENAME  awk瀏覽的文件名

 FS   設(shè)置輸入域分隔符,等價于命令行-F選項

 NF   瀏覽記錄的域個數(shù)(每一行($0)擁有的字段總數(shù))

 NR   已讀的記錄數(shù)(awk所處理的是第幾行數(shù)據(jù))

 

例6:統(tǒng)計/etc/passwd:文件名,每行的行號,每行的列數(shù),對應(yīng)的完整行內(nèi)容:

顯示所有賬戶的記錄,并帶有其記錄號,并在END部分打印輸入文件名

除了awk的內(nèi)置變量,awk還可以自定義變量

 

例7:統(tǒng)計/etc/passwd的賬戶人數(shù)

count是自定義變量。之前的action{}里都是只有一個print,其實print只是一個語句,而action{}可以有多個語句,以;號隔開。

這里沒有初始化count,雖然默認是0,但“是妥當?shù)淖龇ㄟ€是初始化為0:


六、函數(shù)及腳本的綜合應(yīng)用

 

1、shell函數(shù):shell允許將一組命令集或語句形成一個可用塊,這些塊稱為shell函數(shù)。

 

函數(shù)由兩部分組成:函數(shù)標題、函數(shù)體。

 

標題是函數(shù)名。函數(shù)體是函數(shù)內(nèi)的命令集合。

 

標題名應(yīng)該唯一;如果不是,將會混淆結(jié)果,因為腳本在查看調(diào)用腳本前將首先搜索函數(shù)調(diào)用相應(yīng)的shell

 

2、定義函數(shù)的格式為:

函數(shù)名(){

命令1

...

}

如果愿意,可在函數(shù)名前加上關(guān)鍵字function,這取決于使用者。

function函數(shù)名()

{

  命令1

  ...

}

 

3、舉例:

 

例1:刪除文件中的空行

這個腳本(腳本名為del.lines)可以處理一個或多個文件。每個文件在用sed刪除空行之前要先核實是否存在。

sed的輸出被導(dǎo)入一個文件名中含有$ $的臨時文件,最后這個臨時文件又被移回到原來的文件中。

該腳本使用shift命令取得所有的文件名,用while循環(huán)逐個處理所有的文件,直至處理完

為止??梢允褂胐el.lines --help獲得一個簡短的幫助

 

保存后給腳本文件增加執(zhí)行權(quán)限:chmod +x del.lines

執(zhí)行腳本進行測試:

 


注:

1、basename命令能夠從路徑中分離出文件名。通常用于shell腳本中

2、shift語句用于遷移位置變量,將 $1~$9 依次向左傳遞

例如,若當前腳本程序獲得的位置變量如下:

$1=file1、$2=file2、$3=file3、$4=file4

則執(zhí)行一次shift命令后,各位置變量為:

$1=file2、$2=file3、$3=file4

再次執(zhí)行shift命令后,各位置變量為:

$1=file3、$2=file4

 

例2:如果某些日志文件超過了特定的長度(如8K),那么它的內(nèi)容將被倒換到另一個文件中,并清除原有文件中的內(nèi)容.

 

系統(tǒng)中的有些日志文件增長十分迅速,每天手工檢查這些日志文件的長度并倒換這些日志文件(通常是給文件名加個時間戳)是非常乏味的??梢跃帉懸粋€腳本來自動完成這項工作。該腳本將提交給cron進程來運行,如果某個日志文件超過了特定的長度,那么它的內(nèi)容將被倒換到另一個文件中,并清除原有文件中的內(nèi)容。

 

該腳本中日志文件的長度限制是由變量BLOCK_LIMIT設(shè)定的。這一數(shù)字代表了塊數(shù)目,在本例中是8(塊大小默認為4K)??梢园凑兆约旱男枨蟀堰@一數(shù)字設(shè)得更高。所有要檢查的日志文件名都保存在變量LOGS中。

 

這里使用了一個for循環(huán)來依次檢查每一個日志文件,使用du命令來獲取日志文件長度。

 

如果相應(yīng)的文件長度大于BLOCK_LIMIT變量所規(guī)定的值,那么該文件將被拷貝到一個文件

 

名含有時間戳的文件中,原先的文件長度將被截斷為0。

 

注:du 并不是顯示文件的實際大小,而是顯示文件所占用的 block 大小,默認linux系統(tǒng)分區(qū)的 block size 是4k,也就是說即使文件只有1個字節(jié),也會占用4k.
ls -l則是文件的實際大小。


本文出自 “一盞燭光” 博客,謝絕轉(zhuǎn)載!

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號