1、文件系統的相關命令 編程
(1)mkdir命令的功能是建立目錄,而且可同時建立多個目錄,格式以下:
mkdir [-p] directory-name(s)
[例]
mkdir dir1 dir2 dir3 //在當前目錄下創建目錄dir一、dir二、dir3
mkdir dir1/dir4 //在當前目錄下的dir1子目錄中建立目錄dir4
mkdir –p dir6/dir7 //在當前目錄下,因爲不存在dir6目錄,則先自動建立目錄dir6,
//而後建立其子目錄dir7
(2)rmdir命令的功能是刪除目錄,但其只能刪除空目錄(即目錄中不包含文件),故此命令通常較少使用,在後文中會介紹一個更爲經常使用的刪除目錄命令。rmdir命令的格式以下:
rmdir directory-name(s)
(3)在進行處理文件等的操做過程當中不免須要在不一樣的目錄下工做,這時cd命令就能派上用場了。cd命令的功能是改變當前的工做目錄,它的命令格式以下:
cd [directory-name]
cd dir1 //進入當前目錄中的dir1子目錄
cd .. //進入上級目錄,即把工做目錄改變成當前目錄的父目錄
cd ../zcl //回到父目錄,同時再進入zcl子目錄中
(注:上述三個命令的路徑都爲相對路徑)
(4)ls命令的功能是列表顯示指定目錄中文件及子目錄的信息(其實在Unix系統中目錄自己也被視爲一個文件,可是爲了照顧習慣的思惟,在敘述時仍然將其區分爲文件與目錄兩類),缺省輸出順序爲縱向按字符順序排列。它經常使用的命令格式以下:
ls [-altFR] [directory-name]
參數a表明顯示全部類型的文件,包括文件名以「.」爲第一個字符的隱藏文件。參數t表明按文件最後修改時間的順序依次排列文件,參數R將會列出指定目錄下以及其全部子目錄中的文件,使用參數F將會在列表中的每個目錄後面加上「/」,在每一個可執行文件後面加上「*」。參數l表明長列表顯示目錄內容,即列出文件的類型、訪問權限、擁有者、文件大小、修改時間及名稱等詳細信息。下面將介紹一下長列表顯示中的信息的含義,「ls –l」命令的使用以下圖所示。
在上圖長列表顯示文件信息的每一行中,
第一列
|
第1個字符表示文件的類型;
第2-4個字符表示文件全部者對此文件的訪問權限;
第5-7個字符表示用戶組對此文件的訪問權限;
第8-10個字符表示其餘用戶對此文件的訪問權限;
|
第二列
|
文件的連接數 |
第三列
|
文件的全部者 |
第四列
|
文件的用戶組名 |
第五列
|
文件所佔的字節數 |
第六至八列
|
文件上一次的修改時間 |
第九列
|
文件名 |
注:此表格中的一些概念在下文會有詳細介紹,這裏只需先了解一下便可
|
(二)文件管理
一、文件的建立、編輯與刪除
Unix系統中可使用touch命令來建立新文件,它的命令格式以下:
touch filename(s)
但要指出,touch命令最經常使用的功能並非建立文件,而是改變指定文件(或目錄)的最後訪問時間和修改時間。它的命令格式以下:
touch [-am] [mmddhhmm[yy]] filename(s)
此命令中,若指定文件不存在,則建立之;若已存在,則將指定文件的訪問時間和修改時間按參數的要求進行改變。參數a表明只改變訪問時間,參數m表明只改變修改時間。參數mmddhhmm[yy]中每隔兩位分別表示「月日時分[年]」,用戶可利用此參數指定欲設置的時間,若不帶此參數,則會自動使用系統當前的默認時間。
[例] 在當前目錄下建立新文件document:
touch document
將剛建立的文件document的訪問與修改時間改成2005年10月1日0時0分:
touch -am 1001000005 document
你們可不要小視touch命令的此項做用,在軟件的實際開發中,有時它還會與企業的客戶關係管理策略或企業經濟效益密切關聯。假若你所在企業的開發團隊協做精神好,工做效率高,或者是改進了相關技術與流程,使原與客戶合同中約定的項目完成日期大大提早,爲了屏蔽用戶知情,避免節外生枝,該命令就派上大用場了。這事我知你知便可,彼此只能心領神會噢!
文件建立好以後就須要對此文件的內容進行相應的編輯了,在Unix系統中最常使用的編輯工具是vi,在後文中會有專門的章節進行詳細介紹,此處先行略過。
在使用Unix系統一段時間以後,你們可能會發現文件數量正在快速增長,而其中的一部分文件可能已經變得過期,或是沒有了使用價值,這時就應該及時利用rm命令將此類文件刪除了。rm命令的功能是刪除文件或目錄,它的命令格式以下:
rm [-i] filename(s)
或 rm –r[i] directory-name(s)
使用參數i的目的是給你們一次「買後悔藥」的機會。因爲Unix系統中的文件一旦刪除將極難恢復,所以在刪除文件以前必定要慎重。而參數i的做用是在刪除文件以前進行逐一詢問提醒,是否確實要刪除此文件。若是輸入y則刪除文件,若輸入其餘字符,文件則會被保留。使用了帶參數r的rm命令可用來刪除一個目錄以及其全部子目錄,此時沒必要受刪除目錄必須爲空目錄的條件限制,所以也就更具危險性,你們在使用前應當慎之又慎。
[例]
rm doc1 doc2 doc3 // 直接刪除文件doc一、doc二、doc3
rm –i doc1 doc2 doc3 //在刪除文件doc一、doc二、doc3時,每刪除一個以前先做提示
rm -ri dir1 //刪除目錄dir1以及其中所含的全部文件與子目錄,刪除前先做提示
二、文件的查看
經常使用的查看文本文件的命令有cat、more、head、tail等,下面將逐一進行介紹。
(1)cat命令能夠在屏幕上顯示出文本文件的內容,它的命令格式以下:
cat filename(s)
不過cat最多見的用法是配合重定向符來清空文件以及將幾個文件合併成爲一個文件。重定向符的詳細用法請參見本文第二章節的內容。
[例]
cat /dev/null > doc.txt //清空文件doc.txt,/dev/null表明空設備文件(記住使用便可)
cat < doc1.txt >> doc2.txt //將doc1.txt中的內容保存在doc2.txt的尾部
(2)使用cat命令查看文本文件時會有一個問題,就是它不會分屏顯示文件,這樣當文件的內容超出一屏時,除了最後一屏的內容以外,上面的內容都將是一閃而過。固然解決的辦法Unix也替咱們想好了,就是使用more命令來查看此類文件。more命令的格式以下:
more filename
more命令將會以分頁的方式顯示文本文件內容。當每次將文件內容顯示在屏幕上時,若是內容超出一屏,則會在屏幕的左下部顯示「 --more--」,而且在其後面顯示百分比表示已顯示部分佔總內容的比例。此後按回車鍵則會下滾一行,按空格鍵則會下翻一屏,按「b」字母鍵能夠返回上一屏,按「h」字母鍵能夠得到關於更多功能的幫助;使用「/」加上字符串能夠查找指定字符串的內容信息,找到後能夠按「n」字母鍵繼續搜索下一個符合要求的內容信息,按「q」字母鍵則可退出並返回Shell命令提示符狀態。
(3)head & tail 命令
head與tail命令的格式以下:
head [-n] filename(s)
tail [-n] filename(s)
head命令的功能是顯示一個或多個文件開頭n行的內容,tail命令的功能是顯示一個或多個文件最後n行的內容。若沒有指定參數n,則系統會默認顯示10行內容。
(三)文件與目錄的訪問權限
一、文件訪問權限簡介
在Unix系統中每一個文件(或目錄)都包含有一套權限,這些權限決定了誰能訪問該文件以及如何訪問該文件。一般文件有三種權限:
權限
|
普通文件的權限
|
目錄的權限
|
r
|
讀取文件內容
|
讀取文件名稱
|
w
|
向文件寫入信息
|
創建和刪除文件,能夠改變文件名等
|
x
|
執行文件
|
使用該目錄中的文件
|
在Unix系統中有三種不一樣的用戶類型,分別是全部者(owner)、用戶組成員(group)、其餘用戶(other)。全部者是指文件的建立者;用戶組成員是指由若干個用戶組成的組內成員;而除全部者、用戶組成員以外的訪問者,統稱爲其餘用戶。全部者除擁有相關的訪問權限外,還有向另兩類用戶受權之權限。用戶組中的成員在同組內能夠共享信息,一般某一類或某一項目中的用戶會被Unix系統管理員歸爲一個用戶組,每一個用戶都被授予能訪問同組成員文件的權限。其餘用戶在全部者的受權下可對文件有讀、寫或執行的權限。
上文中咱們曾提到使用「ls –l」命令來顯示文件的訪問權限。如圖中所示:
以文件myfile1爲例:
|
全部者
|
用戶組
|
其餘用戶
|
權限
|
rw-
|
r--
|
r--
|
含義
|
可讀、可寫、不可執行
|
可讀、不可寫、不可執行
|
可讀、不可寫、不可執行
|
二、文件訪問權限的設置
使用chmod命令能夠修改文件的訪問權限,chmod命令的格式分爲兩種:
格式1:chmod symbolic_mode file(s)
格式2:chmod absolute_mode file(s)
(1)格式1:符號模式(symbolic_mode)的命令格式以下:
chmod who op permission(s) file(s)
參數who表示用戶類型,它的內容爲如下一項或多項:
u |
文件全部者 |
g |
用戶組 |
o |
其餘用戶 |
a |
全部用戶 |
參數op表示操做:
+ |
表示要增長permission指定的權限 |
- |
表示要取消permission指定的權限 |
= |
設置爲permission指定的權限,並取消原設置權限 |
參數permission爲權限類型,它的內容爲如下一項或多項:
[例] 以上圖爲例,要爲myfile1的全部者增長執行權限,用戶組增長寫權限與執行權限,取消其餘用戶的讀權限,使用命令以下:
chmod u+x,g+wx,o-r myfile1 //爲不一樣用戶類型設置權限時用「,」分隔
(2)格式2:絕對模式(absolute_mode)的命令格式以下:
chmod xyz file(s)
參數x、y、z分別表明0-7的數字,用來表示全部者、用戶組、其餘用戶對該文件的訪問權限。x、y、z所表明的0-7數字的含義以下:
Value
|
permission
|
7
|
r w x
|
6
|
r w -
|
5
|
r – x
|
4
|
r - -
|
3
|
- w x
|
2
|
- w -
|
1
|
- - x
|
0
|
- - -
|
[例] 用絕對模式來完成符號模式中的例子:
chmod 770 myfile1
從對比中你們應該感覺到,符號模式會更加直觀一些,而絕對模式的數字含義較難記憶,所以設置文件權限時推薦使用符號模式。
(四)文件與目錄的移動複製
在Window系統中,咱們最熟悉的操做應該莫過於「Ctrl + C」、「Ctrl + V」、「Ctrl + X」了,由於它爲咱們節省了大量的時間,帶來了極大的便利。而在Unix系統中一樣爲咱們準備了cp、mv命令,利用它們能夠實現剪刀加糨糊的操做了:)
一、移動或重命名文件(或目錄)
利用mv命令能夠將一個文件(或目錄)從一個目錄移到另外一個目錄中,也能夠用於重命名一個文件(或目錄)。mv命令的格式以下:
mv [-i] source-file target-file
或 mv [-i] source-directory target-directory
當target-file爲文件名時,則至關於文件重命名,target-directory同理。參數i表明在將文件移動到指定目錄中時,若已存在同名文件,則將詢問是否覆蓋已存在的文件,輸入y則覆蓋,輸入其餘字符則停止移動,保留原文件。
[例]
mv beans nuts //將文件beans重命名爲nuts
mv file1 file2 /tmp //將文件 file1和file2移動到目錄/tmp中
mv dir1 /export/home/anray // 將目錄dir1包括其全部文件與子目錄都移動到目
// 錄
/export/home/anray下
二、複製文件(或目錄)
利用cp命令能夠將一個文件(或目錄)從一個目錄複製到另外一個目錄中,命令格式以下:
cp [-i] source-file(s) destination-directory
或 cp –r[i] source-directory(s) destination-directory
參數i表明在將文件複製到指定目錄中時,若已存在同名文件,則將詢問是否覆蓋已存在的文件,輸入y則覆蓋,輸入其餘字符則停止複製,保留原文件。當複製文件到指定目錄,或許會指望賦予此複製的文件不一樣於源文件的文件名,則只需將新文件名放在目標目錄名以後,用「/」隔開便可。當須要將一個目錄連同它的全部子目錄一塊兒複製到目標目錄中時,可以使用參數r。
[例]
cp beans apple //將文件beans複製到同目錄下並改文件名爲apple
cp beans apple dir1 //同時複製兩個文件beans與apple到當前目錄下的子目錄dir1中
cp apple dir2/orange //將文件apple複製到當前目錄下的子目錄dir2中,並更名爲orange
cp -r dir1 dir2 //將目錄dir1中的全部文件以及其全部子目錄複製到目錄dir2中
(五)其它經常使用命令
一、man命令
man命令用於查看幫助信息,經常使用的命令格式有:
man name
或 man –k keyword
[例]
man //查看man的使用方法
man ls //查看ls命令的幫助信息
在查看幫助信息過程當中,按回車鍵則會下滾一行,按空格鍵則會下翻一屏,按「b」字母鍵能夠返回上一屏,使用「/」加上字符串能夠查找指定字符串的內容信息,找到後能夠按「n」字母鍵繼續搜索下一個符合要求的內容信息,按「q」字母鍵則可退出並返回Shell命令提示符狀態。
二、clear命令
clear命令的功能是清理屏幕,每次操做Unix系統時間長了,屏幕上的信息不免顯得有些凌亂,這時clear一下是否是以爲眼前一會兒「清靜」了許多:)
三、date命令
date命令的功能是顯示系統時間,並可修改系統時間。date命令的格式以下:
date [mmddhhmm[yy]]
date命令後若無參數,則會顯示系統當前的默認時間。若要修改系統時間,則輸入參數的順序依次爲「月日時分年」。如要將當前系統時間修改成2005年10月1日0時0分,則可以使用以下命令:
date 1001000005
四、cal命令
cal命令的功能是顯示日曆。
[例1] 要查看2005年的整年日曆:
cal 2005
[例2] 要查看2005年5月份的日曆:
cal 5 2005
2、特殊字符的使用
先說一個事例:一次有位朋友問我有沒有辦法把某英語輔導軟件中加密的數據搞到手,我想也沒想,馬上翻箱倒櫃去找出各類解密工具。大半個小時後,正在我毫無頭緒之際,這位朋友跑來講本身已搞掂了這個軟件的使用受權。問他,說只是給軟件做者打了個電話。由此想到Unix中的一些特殊字符,每每平時操做中未曾想到去用它,而是墨守成規地進行本身所熟悉的步驟,其實是在用那些老笨的方法。如能想到並熟知Unix中特殊字符的功能及使用技巧,就會像我這位聰明的朋友同樣取得事半功倍的效果。
(一)通配符的使用
文件名是命令中最多見的參數,你們可能常常會碰到這樣的狀況,就是僅知道文件名的一部分,或者是想同時引用多個具備相同擴展名或以相同字符串開頭的文件。Shell中提供了一套被稱做通配符的符號,它們能搜索、匹配併產生一個文件名列表,通配符包括「*」、「?」、「[]」。用戶執行以包含通配符的文件名爲參數的命令以後,Shell會自動去搜索匹配文件並返回所發現的一個文件名列表,而後Shell就會用這些文件名做爲命令的參數了。
星號「*」用於指代以特定字符串開始或結束的文件名,問號「?」表明文件名稱中的單一字符,即「*」可替代文件名中任意長度的字符串,而「?」只能替代一個字符。方括號「[]」 的做用是使用戶肯定所需搜索的有效字符集,任何在「[]」裏的字符都將被匹配。此外,在「[]」中可以使用「-」來指定一個字符集範圍,這樣就沒必要手動的一個個列出來了。
請看下面的例子:
假設當前目錄下有8個文件doc1,doc2,doc3,docA,docB,docC,docD,document,分別對其進行以下操做:
ls doc* //顯示出doc1,doc2,doc3,docA,docB,docC,docD,document
ls doc? // 顯示出doc1,doc2,doc3,docA,docB,docC,docD
ls doc[13AD] // 顯示出doc1,doc3,docA,docD
ls doc[A-C] // 顯示出docA,docB,docC
ls doc[1-8] // 顯示出doc1,doc2,doc3
(二)命令分隔符「;」的使用
有時某些用戶可能想在一行中運行多個命令,那麼能夠在這一行中輸入多個命令,命令間用「;」相隔,如:
mkdir tmp; cp file1 tmp/file2; ls -l tmp
Unix會順序執行以上三條命令,要注意的是在命令間使用分隔符「;」,只表明命令執行的前後順序。
(三)重定向符的使用
用戶欲執行一個命令,固然是要先輸入此命令,系統默認的標準輸入設備是鍵盤,而執行命令後的結果一般顯示在系統默認的標準輸出設備顯示器上。可是,Unix系統具備重定向功能,即將標準輸出重定向則可將命令的處理結果存入指定的文件,而非顯示在屏幕上;將標準輸入重定向則可把指定的數據文件做爲輸入源,而非從鍵盤輸入數據。
重定向符以下:
< |
從一個文件或設備重定向輸入 |
> |
重定向輸出到一個文件或設備,如文件不存在則建立該文件,如文件已存在則覆蓋該文件 |
>> |
重定向輸出到一個文件或設備,並將輸出信息追加到已存在文件的尾部 |
例如:
cal 5 2005 > doc1.txt //將2005年5月份的日曆保存在文件doc1.txt中
cal 6 2005 >> doc1.txt //將2005年6月份的日曆保存在文件doc1.txt尾部
//此時文件doc1.txt中保存了五、6兩個月的日曆
cat < doc1.txt > doc2.txt //將doc1.txt做爲輸入源,把其中的內容保存在doc2.txt中
(四)管道符「|」的使用
有時可能會須要將一個命令的標準輸出發送給另外一個命令使用,而非發送到一個目標文件,這時就須要使用Unix提供的管道符「|」在這兩個命令間架起一條鏈接管道。管道符「|」的做用就是從「|」左邊的命令接受輸出數據併發送給「|」右邊的命令做爲輸入數據。
如:l
s -l /etc | more
管道符「|」的功能很是強大且頗有用,利用它能夠實現一些複雜的操做。在下一節關於信息查找命令部分,咱們將會看到它的一些應用。
(五)其它特殊字符
美圓符「$」是一個特殊操做符,當其置於變量名前面時,變量名會被變量值所代替。所以一般都是經過在變量名前加上「$」來引用該變量的值,「$」也常被稱爲變量取值符。
Unix中可使用三種引號符:
(1)單引號(’ ’):功能是讓系統原樣輸出單引號中所含的內容。
(2)雙引號(「 」):雙引號中的字符串若含有通配符,則系統會先進行通配後再輸出;若含有變量取值符「$」,則系統會先進行變量取值後再輸出。
(3)反引號(` `):反引號中所含的內容必須是一個命令,這樣它會先執行此命令,而後把命令執行的結果返回輸出。
對於上述幾個特殊字符,在下文關於Shell腳本編程部分你們會看到具體的應用例子。此外,常見的特殊字符還有「.」表明用戶所在的當前目錄,「..」表明用戶所在的當前目錄的父目錄,「~」表明用戶登錄系統的主目錄。