歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> Unix基礎知識 >> 在HP-UX下處理文件和目錄

在HP-UX下處理文件和目錄

日期:2017/3/3 15:25:40   编辑:Unix基礎知識

創建文件

可以使用 cat 命令創建包含文本的文件。例如,要創建名為“myfile”的文件,請按如下方式使用 cat 命令:

$ cat > myfile

鍵入此命令之後,光標位於空文件的第一行。鍵入文本並在每一行的結尾按 Enter 鍵。要退出文件,請在按住 CTRL 鍵的同時按 D。cat 命令會使您返回命令行提示符。

可以使用 cat 命令創建自己的 myfile 版本。例如,可以創建以下文件:

$ cat > myfileThe text I am typing will be stored in "myfile". EnterI press RETURN at the end of each line. EnterWhen I'm finished, I hold down the CTRL key and press D. EnterCTRL-D

列舉文件

要驗證 cat 是否創建了 myfile,請運行 ls 命令,該命令會列出文件名。同時運行 ls 命令和該文件名可以確認該文件是否存在,但不會列出其他文件。

ls(1)

$ ls myfile

myfile ls 命令列出了 myfile。

要查看有關文件的其他信息,請使用 ll (long listing) 命令。

ll(1)

$ ll myfile

-rw-r--r-- 1 myname mygroup 146 8 月 4 日 14:13 myfile

上一行開頭的神秘字符 (-rw-r--r--) 表示所有者、組用戶和其他用戶讀和(或)寫文件的權限。“1”表示與此文件相關的鏈接(名稱)數,“myname”通常是指登錄名,“mygroup”是由管理員指定的名稱,該名稱屬於與您一起工作的用戶組,“146”是文件的字節(字符)數,接下來是上次修改文件的日期,最後是文件名。

命名文件

選擇文件名時,名稱長度和所包括的字符類型需要遵循特定的規則。

命名文件的准則

選擇文件名時,請牢記以下規則:

通常,文件名最多可以包含 256 個字符(對於非 ASCII 字符集,為 256 字節)。這些字符可以為以下任何一種組合:

大寫或小寫字母(A 到 Z;a 到 z)

數字(0 到 9)

特殊字符,如:+、-、_ 和 .

根據上述規則,以下文件名為有效名稱:

有效名稱

money     Acct.01.87   CODE.clost+found   112.3-data   foo_bar

HP-UX 中的文件名區分大小寫。因此,下列所有文件名均互不相同:

money   Money   MoneY   MONEY

注釋:短文件名系統:

在某些計算機上,文件名長度不能超過 14 個字符。如果不確定所用的計算機是否可以支持較長的文件名,請向系統管理員核實。另外,還可以嘗試創建一個具有較長名稱的文件,查看該文件名是否會被截短。

隱藏文件名

第一個字符是點 (.) 的文件名為隱藏文件名,因為 ls 命令不能正常顯示該文件名。如果不希望或不需要在運行 ls 時顯示某些文件,請使用隱藏文件名。

舉例來說,登錄時系統運行隱藏啟動文件,即登錄腳本(用於定制工作環境)。有關登錄腳本的詳細信息,請參閱第 3 章 “使用 Shell”中的“使用登錄腳本設置系統環境 ”。

為使 ls 可以列出隱藏文件名(包括登錄腳本的名稱),請同時運行該命令和 -a 選項:

$ ls -a        使用 -a 查看隱藏文件名。

.profile myfile   這是 POSIX Shell,所以顯示 .profile。

隱藏文件或“點文件”通常用於存儲配置信息。如果不清楚文件的用途,請不要將其刪除。

查看和打印文件

使用 more 命令,可以逐屏查看文本文件。如果正確配置了系統,可以使用 lp 命令打印文本文件。

使用 more 查看文件 

more 命令將文本文件的內容顯示在屏幕上。例如,以下 more 命令顯示 myfile

的內容:

more(1)

$ more myfileThe text I am typing will be stored in "myfile".I press RETURN at the end of each line.When I'm finished, I hold down the CTRL key and press D.

如果文件包含的行數比屏幕上顯示得多,more 在滿屏的情況下會暫停。對於較長的文件,請按空格鍵繼續查看其他屏幕;結束查看時請按 Q。然後,more 使您返回系統提示符。

嘗試在系統文件 /etc/passwd 中運行 more:

$ more /etc/passwdroot:XOSDMfBA.hqs6:0:3::/:/usr/bin/shdaemon:*:1:5::/:/usr/bin/shbin:*:2:2::/bin:/usr/bin/shadm:*:4:4::/var/adm:/usr/bin/sh More(4%)

屏幕底部的“More(4%)”消息表示迄今為止您已查看了 4% 的文件,還有 96% 的文件尚待查看。此時,執行下列任何操作:

按空格鍵,逐頁滾動查看文件。

按 B,逐頁回滾查看。

按 Enter 鍵,逐行滾動查看文件。

按 Q,結束查看文件並退出 more。

顯示文件的前幾行和後幾行 

通常,只需查看文件的起始部分(開頭)或結束部分(結尾)。

要查看文件的前幾行但不使用文本編輯器,請使用 head 命令:

head(1)

$ head filename

缺省情況下,將顯示 filename 的前 10 行(包括空行)。例如:

CONFERENCE NOTES Attendees: Mary Sam Nina George Raphael Sergei

要查看文件的後 10 行(缺省值),請使用 tail 命令:

tail(1)

$ tail filename

將顯示 filename 的後 10 行(包括空白行)。

head 和 tail 均可附帶數字參數。例如,使用此命令顯示 file1 的前 25 行:head -25 file1

使用 lp 打印文件 

使用 lp (line printer) 命令可以打印文本文件。例如:

lp(1)

$ lp myfile

lp 命令將顯示一條消息,表明它已將文件發送到打印機。例如:

請求的 id 是 lp-number (1 file)

其中,number 是 lp 命令指定給打印作業的 ID 號。如果看不到此消息,或看到錯誤消息,請向系統管理員咨詢。應使用第一頁上顯示的用戶名獲得打印輸出。打印輸出所需的時間長短取決於系統當前運行的任務數和打印機的速度。

要配置打印機和設置 lp 假脫機程序,請使用 SAM(系統管理程序)。對於命令行打印機配置,請參閱《“Configuring HP-UX for Peripherals”》手冊。對於命令行假脫機程序配置,請參閱《《管理系統和工作組》》手冊。

使用 lpstat 獲取打印機信息

要顯示有關打印機狀態(包括打印隊列中打印作業的順序)的報告,請鍵入:

lpstat(1)

$ lpstat -t

使用 cancel 取消打印請求

要取消打印請求,請輸入 cancel 命令和請求的 ID 號:

cancel(1)

$ cancel request_id

重命名、復制和刪除文件

要重命名文件,請使用 mv (move) 命令;要復制文件,請使用 cp (copy) 命令;要刪除文件,請使用 rm (remove) 命令。

使用 mv 重命名文件 

使用 mv 命令,可以按如下方式將文件 myfile 重命名為 foofile:

mv(1)

$ mv myfile foofile

要驗證 mv 是否重命名了文件,請使用 ls 命令:

$ lsfoofile

要將 foofile 重新命名為 myfile,請鍵入:

$ mv foofile myfile 

$ ls   使用 ls 驗證此操作是否成功。

myfile  

注意:如果將一個文件重命名為現有文件的文件名,則現有文件的內容將會丟失。

重命名文件時,一定不要將文件重命名為該目錄下已有的文件名。否則,原先具有該文件名的文件內容將會丟失。為避免意外覆蓋現有的文件,請使用 -i 選項。例如:

$ mv -i myfile foofile

在這種情況下,如果 foofile 存在,上述命令在覆蓋文件之前會請求確認。

mv 命令還可用於將文件移動到系統中的其他位置。請參閱“在目錄間移動和復制文件”。

使用 cp 復制文件 

如果希望創建新版本但仍保留舊版本,則需要復制文件。例如,要復制 myfile 並將其命名為 myfile2,請鍵入:

cp(1)

$ cp myfile myfile2

這樣,如果使用 ls 命令,將看到:

$ ls

myfile   myfile2

使用 more 查看 myfile2。將發現其內容與 myfile 的相同。

注意:如果粘貼文件的位置已有同名文件,則原有文件的內容將丟失。

為避免意外覆蓋原有的文件,請使用 -i 選項。例如,如果嘗試將 myfile 復制到當前目錄下,並將其命名為 myfile2,而名為 myfile2 的文件已存在,則 cp 將請求是否覆蓋原有的 myfile2:

$ cp -i myfile myfile2

覆蓋 myfile2? (y/n)

使用 rm 刪除文件 

如果有不再需要的文件,應將其刪除。刪除不需要的文件可以為系統中的其他文件留出更多空間。例如,假定已結束對 myfile2 的操作,且不再需要它。要刪除 myfile2,請鍵入:

rm(1)

$ rm myfile2

要查看 myfile2 是否已被刪除,請使用 ls:

$ ls 此命令列出了剩下的文件。

myfile

注釋:要讓 rm 命令在刪除文件之前提示您進行確認,請使用 -i 選項:

$ rm -i myfilemyfile: ? (y/n)

有關如何刪除目錄及其內容的信息,請參閱“刪除目錄 ”。

比較兩個文件的內容 ---http://www.bianceng.cn

如果已知兩個文本文件的內容非常相似,但是希望確定二者之間的差別或哪個文件已被更改,請執行以下操作:

首先,運行 ll,查看日期和時間字段,了解上次保存文件的日期和時間。例如:

-rw-r--r--  1 jim   users   1759 3 月 17 日 15:53 test1

-rw-r--r--  1 jim   users   2130 3 月 17 日 15:47 test2

test1 的保存時間晚於 test2,因為它的時間較新(大小亦有所改變)。

通過運行 diff 命令,可以確定 test1 和 test2 之間的差別:

diff(1)

$ diff test1 test2

例如,如果 test1 的內容是:

You are in a maze of twisty little passages which are all alike.

而 test2 的內容是:

You are in a maze of twisty little passages which are all different.

此命令將按行號指出找到的差別,並用“<”和“>”指出存在差別的文件:

3c3 相關的行號

< which are all alike. test1 的版本

---

> which are all different. test2 的版本

注意,diff 命令指出:如果刪除標為“<”的一行,並添加標為“>”的另一行,則兩個文件將相同。

連接兩個文件

要附加到現有的文件,請使用 cat 命令和兩個大於號 (>>)。>> 後的文件名表示要將第一個文件的內容附加到的文件。如果該文件存在,新數據將附加到該文件的結尾。如果該文件不存在,將另行創建。命令格式如下:

cat(1)

$ cat filename2 >> filename1

其中,filename2 是要重定向輸出的文件,filename1 是要將輸出附加到的文件的名稱。

此方法還適用於命令輸出。以下示例執行 date 命令,重定向輸出,將其附加到 whoison 文件中:

$ date >> whoison           將輸出附加到 whoison 中。

$ more whoison            顯示 whoison 的內容。

pat  console 10月 4 日 08:50    上一個示例的輸出。

terry tty01  10月 4 日 11:57 

kim  tty02  10月 4 日 08:13 

1994 年 10 月 4 日 星期二, 13:20:16   新近附加的 date 的輸出。

了解目錄分級結構

目錄樹

HP-UX 目錄可以包含文件和其他目錄。因此,目錄通常有父目錄(上級),父目錄中可能還有子目錄(下級)。同樣,每個子目錄不僅可以包含其他文件,還可以包含更多子目錄。由於目錄的組織方式是分級進行的,所以為組織文件提供了一種邏輯方式。

有了目錄的幫助,就可以將文件組織成可管理的且在邏輯上相關的組。例如,如果有若干不同的項目,且每個項目都有若干文件,則可為每個項目創建一個目錄,並將每個項目的所有文件都存儲在相應的目錄下。

HP-UX 的目錄結構類似一棵顛倒的樹。這些目錄(如下圖中的橢圓形所示)通常包含更多目錄,因此,典型的主目錄擴展成了樹狀分支結構。

圖 2-1 典型的 HP-UX 目錄結構

每個目錄還包含保存有實際文本、數據或代碼的文件(如下圖中的方框所示)。顛倒樹結構的頂部是根目錄,在路徑名中用 / 表示。下圖所示為系統目錄結構的橫向部分。---http://www.bianceng.cn

圖 2-2 系統目錄結構

確定在 HP-UX 目錄分級結構中所處的位置

本部分討論了 HP-UX 目錄結構,並介紹了如何在目錄結構中指定文件的位置。所有目錄均位於最頂部的根目錄(用斜線 (/) 表示)下。使用 HP-UX 時,在稱為當前工作目錄的目錄下工作。登錄時,HP-UX 將進入到主目錄下。

下圖所示為典型 HP-UX 目錄結構的最上面兩級。每個目錄(包括根目錄)都可以包含以邏輯方式組織的文件和更多目錄。

圖 2-3 HP-UX 目錄結構

以下示例為用戶 Leslie 的目錄分級結構。當 Leslie 登錄時,將位於她的主目錄 leslie 下。

圖 2-4 Leslie 的主目錄

pwd(1)

要確定在目錄分級結構中所處的位置,請使用 pwd (print working directory) 命令。pwd 命令顯示從根目錄到當前工作目錄的“路徑”。

例如:

$ pwd

/home/engineers/leslie

指定文件和目錄

指定當前工作目錄下的文件時,只需鍵入文件名。但是,指定當前工作目錄之外的目錄和文件時,必須使用路徑名,以告知 HP-UX 如何指向相應的目錄。

絕對路徑名

絕對路徑名指定從顛倒樹結構頂部的根目錄開始到某個目錄或文件的路徑。根目錄用斜線 (/) 表示。絕對路徑由一列連續的目錄組成,中間用斜線分隔,直到要指定的目錄或文件。路徑中的最後一個名稱即為要指向的目錄或文件。

以下示例為用 pwd 命令顯示的絕對路徑:

$ pwd

/home/engineers/leslie

從根目錄開始一直向下,指定了當前工作目錄 leslie 的位置。

下圖所示為典型目錄結構中各種目錄和文件的絕對路徑名:

圖 2-5 絕對路徑名

相對路徑名

可以將相對路徑名用作指向文件和目錄位置的快捷方式。相對路徑名從當前工作目錄(而不是根目錄)開始指定目錄和文件。

無標題 (相對路徑名 )

相對路徑名

含義

.

當前目錄。

..

父目錄(當前目錄的上一級目錄)。

../..

當前目錄的上兩級目錄。

directory_name

當前目錄的下一級目錄。

例如,假定當前目錄為 /home/engineers/leslie。要列出上一級目錄 (/home

/engineers) 中的文件,請輸入:

$ ls ..  

arnie leslie sally

要列出當前目錄下一級目錄中的文件,只需輸入目錄名。例如,要列出當前目錄 /home/engineers/leslie 下一級的 projects 目錄中的文件,請輸入:

$ ls projects

$           projects 目錄是空的。

下圖所示為從當前目錄 /home/engineers/leslie 開始的各種目錄和文件的相對路徑名。

圖 2-6 從 /home/engineers/leslie 開始的相對路徑名

創建目錄

要創建目錄,請使用 mkdir (make directory) 命令。創建目錄之後,可將文件移到該目錄下,還可在該目錄下創建更多目錄。例如,要在當前工作目錄 projects 下創建子目錄,請鍵入:

mkdir(1)

$ mkdir projects

要驗證是否已創建目錄,可以使用 ls 或 lsf 命令列出該目錄的內容。這兩個命令都可以顯示新目錄,但 lsf 在目錄名結尾附加了一個斜線 (/),以與其他文件名區分開。例如:

$ ls

myfile projects 它完成了您的請求。

lsf(1)

$ lsf

myfile projects/ lsf 命令在目錄名後附加了一個斜線。

下圖所示為 /home/engineers 下最終的目錄結構:

圖 2-7 創建“projects”目錄

按如下方式使用 mkdir 命令:

$ mkdir new_dir_path

其中 new_dir_path 是要創建的目錄的路徑名。例如,要在 projects 目錄下創建名為 old 和 new 的目錄,請鍵入:

$ mkdir projects/old

$ mkdir projects/new

$ lsf projects

new/   old/

圖 2-8 創建了新目錄之後的結構

更改當前目錄

要更改當前工作目錄,請使用 cd 命令。例如,cd projects 命令可使您進入目錄 projects(在“創建目錄 ”中創建的目錄)。

要驗證所在的位置,請使用 pwd 命令顯示當前目錄。例如,如果主目錄為 /home/leslie,並且運行了 cd projects 命令,pwd 將顯示如下內容:

$ pwd

/home/leslie/projects

要進入 projects 下的 new 目錄,請鍵入:

cd(1)

$ cd new    

$ pwd         驗證所在的位置。

/home/leslie/projects/new

切記 :.. 是當前工作目錄父目錄的相對路徑名。因此,要上移一級返回 projects,請鍵入:

$ cd ..  

$ pwd           顯示當前工作目錄。---http://www.bianceng.cn

/home/leslie/projects  已成功完成您的請求。

注釋:查找返回主目錄的路徑:

請嘗試使用 cd 和 pwd 命令在目錄結構中移動。如果不清楚所在的位置,請不要擔心;只需記住:鍵入 cd 即可返回主目錄。例如:

$ cd 

$ pwd           是否已返回主目錄?

/home/leslie       是!

下圖舉例說明如何使用各種 cd 命令更改當前工作目錄。本示例假定從目錄 /home/leslie/projects 開始,且主目錄為 /home/leslie。

圖 2-9 各種 cd 命令的結果

絕對路徑

還可以使用絕對路徑名指向任何目錄。例如,要更改為以上分級結構示例中的 projects 目錄,請輸入:

$ cd /home/leslie/projects

在目錄間移動和復制文件

使用 mv 命令可以將文件從一個目錄移動到另一個目錄。使用 cp 命令可以將文件復制到其他目錄。

移動文件

要將文件從一個目錄移動到另一個目錄,請使用 mv 命令。

$ mv from_path to_path

其中,from_path 是要移動文件的文件名或路徑名,to_path 是要移入文件的路徑名。例如,要將 myfile 移入 projects 目錄,請鍵入:

$ cd           首先移動到主目錄。

$ mv myfile projects 

路徑名中的單個點 (.) 表示當前工作目錄。因此,要將 myfile 從 projects 目錄移回當前工作目錄,請鍵入:

$ mv projects/myfile .  不要忘記加上一點。

注意:如果將一個文件重命名為現有的文件,則現有文件的內容將丟失。---http://www.bianceng.cn

重命名文件時,一定不要將文件重命名為該目錄下已有的文件名。否則,原先具有該文件名的文件內容將會丟失。為避免意外覆蓋現有的文件,請使用 -i 選項。例如:

$ mv -i myfile /home/leslie/foofile

如果 /home/leslie/foofile 存在,上述命令在覆蓋文件之前會請求確認。

復制文件

要將文件復制到其他目錄,請使用 cp 命令。

$ cp from_path to_path

其中,from_path 是要復制的文件的文件名或路徑名,to_path 是要復制到的目錄或文件的路徑名。

例如,要在 projects 目錄下創建 myfile 的副本,並將其命名為 myfile2,請鍵入:

$ cp myfile projects/myfile2

$ lsf

myfile  projects/ 文件 myfile 仍存在。

$ lsf projects

myfile2 new/ old/ 副本 (myfile2) 位於 projects 目錄下。

要在當前目錄下創建 myfile2 的新版本,並將其命名為 myfile3,請鍵入:

$ cp projects/myfile2 myfile3

$ lsf

myfile  myfile3  projects/

注意:如果粘貼文件的位置已有同名文件,則原有文件的內容將丟失。---http://www.bianceng.cn

為避免意外覆蓋原有的文件,請使用 -i 選項。例如,如果嘗試將 /home/leslie

/myfile 復制到當前目錄下,並將其命名為 myfile2,而名為 myfile2 的文件已存在,則 cp 將請求是否覆蓋原有的 myfile2:

$ cp -i /home/leslie/myfile myfile2

覆蓋 myfile2? (y/n)

復制目錄

要復制整個目錄,請使用 cp 命令的 -r 選項。

例如,如果有一個名為 mydir 的目錄,其中包含 myfile 和 newfile,則可以將該目錄復制到一個名為 mydir2 的新目錄。mydir2 還將包含 myfile 和 newfile 的副本。請使用以下命令:

$ cp -r mydir mydir2

-r 選項可將任何文件和子目錄復制到指定的目錄下。

注釋:粘貼該目錄的位置:

如果目的目錄已經存在,所復制的目錄將成為現有目的目錄下的子目錄。如果目的目錄不存在,將另行創建。

刪除目錄

使用 rmdir 命令可以刪除空目錄。要一次性刪除目錄及其全部內容,請同時使用 rm 命令和 -rf 選項。

刪除目錄之後,將無法繼續使用,此目錄也不會再出現在 ll 或其他高於此目錄的目錄列表中。

使用 rmdir 刪除目錄

使用 rmdir 刪除目錄之前,必須刪除該目錄下所有的可見文件或隱藏文件。例如,假定要刪除 projects 目錄及其文件:

圖 2-10 projects 目錄結構

要刪除此結構,請按順序運行以下命令:

$ cd           返回主目錄。

$ lsf           列出文件和目錄。

myfile myfile3 projects/ 

$ rmdir projects     嘗試刪除 projects。

rmdir: projects 目錄不空  不允許刪除。

$ cd projects       將目錄更改為 projects。

$ lsf           列出其內容。

myfile2 new/ old/    

$ rm myfile2       刪除文件 myfile2。---http://www.bianceng.cn

$ lsf           檢查是否已刪除此目錄。

new/  old/       

$ rmdir new        刪除目錄 new。如果此目錄是空的,rmdir 將刪除它。

$ lsf           檢查是否已刪除此目錄。

old/           

$ rmdir old       現在刪除目錄 old。如果此目錄是空的,rmdir 將刪除它。

$ lsf           不顯示任何消息;此操作已成功完成。

$ cd           現在返回主目錄。

$ rmdir projects 

$ lsf          驗證是否已刪除此目錄。

myfile  myfile3    

$

使用 rm -rf 刪除所有內容

為避免在刪除目錄之前必須先清空目錄的麻煩,可以鍵入以下命令一次性刪除目錄及其所有的文件和目錄:

$ rm -rf dirname

注意:請慎重使用 rm -rf,因為它會一次性刪除目錄及其全部內容,而且無法撤消操作。

文件名簡寫方式:通配符

通配符提供了用一個名稱指定多個文件名或目錄名的便捷方式。最常用的兩個通配符是 * 和 ?。* 可以匹配任何字符序列(字符串),包括無字符的情況;? 可以匹配任何一個字符。

* 通配符

* 通配符表示“任何字符,包括無字符”。假定在當前工作目錄下創建了以下文件:

$ lsf

myfile  myfile2  myfile3  xenic  yourfile

要只列出以 myfile 開頭的文件名,請鍵入:

$ lsf myfile*

myfile  myfile2  myfile3

要列出包含 file 的文件名,請鍵入:

$ lsf *file*

myfile  myfile2  myfile3  yourfile

? 通配符

? 通配符表示“任何單個的字符”。盡管 ? 通配符不如 * 使用得頻繁,但仍然很有用。例如,如果只希望列出以 myfile 開頭且以其他單個字符結尾的文件,請鍵入:

$ lsf myfile?

myfile2  myfile3

? 通配符精確匹配一個字符。由於 myfile 末尾沒有字符,所以並未顯示在此列表中。

將 * 通配符與 mv、cp 和 rm 一起使用

如果希望將多個文件從一個目錄移動或復制到另一個目錄,通配符通常會很有用。例如,假定當前目錄下有兩個目錄,分別稱為 new 和 old,這兩個目錄包含以下文件:

$ lsf new

myfile  myfile2

lsf old

myfile3  myfile4

要將目錄 new 下的所有文件移動到目錄 old,請鍵入:

$ mv new/* old  

$ lsf new  目錄 new 下不再存在這些文件。---http://www.bianceng.cn

lsf old    

myfile myfile2 myfile3 myfile4 它們位於目錄 old 下。

使用 cp 命令可以執行類似的操作。例如,要將 old 下的所有文件復制到 new,請鍵入:

$ cp old/* new

同樣,可以將通配符與 rm 命令一起使用。例如,要刪除目錄 new 下的所有文件,請鍵入:

$ rm new/*

注意:這樣很容易誤刪文件。

使用通配符時,千萬不要誤刪有用的文件。如果希望查看符合模式的文件名,可以使用 ls 命令代替 rm 命令。

更多信息

有關 * 和 ? 的常用功能,請參閱 《regexp》(5) 聯機幫助頁。對於與個別 shell 相關的其他功能:如果使用 POSIX Shell,請參閱 《sh-posix》(1) 聯機幫助頁;如果使用 C shell,請參閱 《csh》(1) 聯機幫助頁。

使用 grep 搜索文本模式

可以使用 grep (global regular expression print) 命令在文件內搜索文本模式,或顯示包含指定文本模式的文件名。如果希望在文件或目錄中搜索信息,此命令會很有用。

grep 命令逐行查看一個或多個文件,搜索符合指定模式的文本字符串。如果找到相符的文本字符串,此命令將顯示該字符串所在的行。

在文件中搜索文本字符串

假定您有一個名為 mailist 的郵件列表,內容如下:

Smith, Joe   2345 Pine St.   Santa Clara, CA

Walsen, Stacey 493 Winkle Ave. San Jose, CA

Diaz, Robert  6789 Pine St.   Santa Clara, CA

Wang, Michael 1832 Jackson St. Santa Clara, CA

如果要提取所有住在 Pine Street 的人員的地址,請輸入:

grep(1)

$ grep Pine mailist

grep 命令列出了 mailist 中所有包含字符串 Pine 的行。輸出如下:

Smith, Joe   2345 Pine St.   Santa Clara, CA

Diaz, Robert  6789 Pine St.   Santa Clara, CA

如果搜索時不區分大小寫,請使用 -i 選項。例如:

$ grep -i pine mailist

搜索多個文件

在其他方面,grep 命令也極為有用。例如,有時您不確定要查找的信息究竟位於哪個文件中。

假定有三個郵件列表,但不記得哪個列表包含 Stacey Walsen 的地址。請輸入:

$ grep 'Walsen, Stacey' mailist mailist2 mailist3

mailist: Walsen, Stacey 493 Winkle Ave. San Jose, CA

grep 命令將顯示包含 Stacey 地址的行以及該行所在的文件。注意,由於字符串中包含空格,所以必須用單引號將其括起來 ('Walsen, Stacey')。

要在整個當前目錄下搜索此信息,請輸入:

$ grep 'Walsen, Stacey' *

有關使用 grep 命令的詳細信息,請參閱《“HP-UX Reference”》中的 《grep》(1) 聯機幫助頁。---http://www.bianceng.cn

使用 find 搜索文件

可以使用 find 命令在整個目錄及其子目錄下搜索符合特定准則的文件。然後,可以在找到的文件中執行命令。

查找符合某種模式的文件

雖然 find 的語法較為復雜,但它有助於提高使用 HP-UX 的效率。此命令功能強大而且靈活。但是運行速度較慢,搜索多個目錄時尤其如此。

假定要顯示當前目錄及其子目錄下所有以 d 開頭的文件,請輸入:

find(1)

$ find . -name 'd*'

命令中的點 (.) 會使 find 搜索當前目錄及其子目錄。文件名後的 -name 選項或文件名模式(在這種情況下為 d*)告知 find 搜索所有符合該模式的文件。在本示例中,find 將搜索所有以 d 開頭的文件名。

注意,d* 要用單引號括起來 ('d*')。如果在 find 命令中使用文件名模式,必須用單引號將其括起來,以便 shell 可以對其進行正確地解釋。

查找晚於某個文件創建日期的文件

假定您想顯示所有在某個文件創建日期之後修改過的文件。要顯示 /home/leslie 目錄及其子目錄下所有晚於 myfile 創建日期的文件,請輸入:

$ find /home/leslie -newer myfile

本示例可以理解為:在目錄 /home/leslie 及其子目錄下,查找所有在 myfile 創建日期之後修改過的文件。(要確定文件的上次修改日期,請使用 ll 命令。)

在文件中運行命令

可以在使用 find 命令查找到的文件中執行命令。假定您想刪除當前目錄及其子目錄下所有擴展名為 .tmp 的文件。請輸入:

$ find . -name '*.tmp' -exec rm {} \;

本示例查找當前目錄及其子目錄下所有擴展名為 .tmp 的文件,並將其顯示在屏幕上,然後將其刪除。-exec 選項會導致以下命令 (rm) 的執行。花括號 {} 代表使用 find 命令找到的文件。結束 exec 字符串的分號之前應添加一個反斜線 (\;)。

使用邏輯運算符

find 的語法中包括邏輯布爾運算符:NOT、AND 和 OR。

要查找不符合特定模式的文件,請使用 NOT 邏輯運算符,即感歎號 (!)。使用此運算符之後,必須使用選項定義文件屬性,如文件名。然後,將找到不具有指定屬性的文件。

例如,要查找 /tmp 下所有不屬於 leslie 的文件,請使用以下命令:

$ find /tmp \( ! -user leslie \)

\ 避免了 shell 將圓括號視為特殊字符的可能性。

要查找具有兩個不同屬性的文件,請使用 AND 邏輯運算符(表達式 -a 表達式)。例如,要查找 / 下所有屬於 leslie 的目錄,請使用以下命令:

$ find / \( -type d -a -user leslie \)

要查找具有其中一個或兩個屬性的文件,請使用 OR 邏輯運算符(表達式 -o 表達式)。例如,要刪除一周以來從未訪問過的以 .o 結尾或名為 a.out 的所有文件,請使用以下命令:

$find / \( -name a.out -o -name '*.o' \) -atime +7 -exec rm {} \;

更多信息

有關使用 find 命令的詳細信息,請參閱 《find》(1) 聯機幫助頁。

Copyright © Linux教程網 All Rights Reserved