詳細(xì)的內(nèi)容可以參考下面的參考文檔,下面的內(nèi)容主要是為網(wǎng)絡(luò)設(shè)備運維人員使用的pexpect 跨平臺簡明教程。
成都創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站建設(shè)、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的翁源網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
Expect 程序主要用于人機對話的模擬,就是那種系統(tǒng)提問,人來回答 yes/no ,或者賬號登錄輸入用戶名和密碼等等的情況。
pexpect是 Don Libes 的 Expect 語言的一個 Python 實現(xiàn),是一個用來啟動子程序,并使用正則表達(dá)式對程序輸出做出特定響應(yīng),以此實現(xiàn)與其自動交互的 Python 模塊。它可以用來實現(xiàn)與ssh, ftp, telnet等程序的自動交互。
send命令后執(zhí)行結(jié)果內(nèi)容保存在buffer中,這時child.expect('keyword')后,child.before即為“keyword”之前的字符串,child.after即為匹配的”keyword”字符串。
command的執(zhí)行結(jié)果都保存在一個buffer中,每次執(zhí)行expect時都從buffer中開始檢查匹配的pattern,如果找到了匹配的pattern,則所有在匹配處之前的內(nèi)容都從buffer中清除。
(這邊沒有看明白也沒有關(guān)系,可以看后面的實踐篇例子)
通常維護人員有的偏向于用WIN系統(tǒng),有的偏向于LINUX系統(tǒng)。所以前期團隊希望形成一個統(tǒng)一框架的時候就出現(xiàn)了一個難題。框架如何適用于不同的系統(tǒng)。
LInux系統(tǒng)pexpect包,win系統(tǒng)前期嘗試使用winpexpect,但是程序改動很大,并沒有調(diào)試成功。
如何在WIN系統(tǒng)使用python的pexpect包很難找到相關(guān)資料,某乎上都是類似的疑問沒有解答。
團隊成員增加后,終于有了新的思路 , 團結(jié)就是力量 。
通過這個模塊進行不同系統(tǒng)的適配。
將plink.exe裝在python的文件夾在python的安裝目錄下,win系統(tǒng)可以同樣使用pexpect模塊
參考信息1:Pexpect 官方文檔 New in version 4.0: Windows support。Pexpect can be used on Windows to wait for a pattern to be produced by a child process, using [ pexpect.popen_spawn.PopenSpawn ]
參考信息2:PuTTY是一個Telnet、SSH、rlogin、純TCP以及串行接口連接軟件。plink是可以獨立使用的exe實現(xiàn)形式,可以讓我們直接在命令行制定好命令,然后執(zhí)行,完成后自動關(guān)閉session。ssh是一個安全通道協(xié)議。plink是這個通道協(xié)議的一個實現(xiàn) [圖片上傳中...(-572001-1587612890428-0)]
從官方文檔來看,
sendline() 和 send() 唯一的區(qū)別就是在發(fā)送的字符串后面加上了回車換行符,這也使它們用在了不同的地方:
只需要發(fā)送字符就可以的話用send()
如果發(fā)送字符后還要回車的話,就用 sendline()
但是在調(diào)測過程中,WIN系統(tǒng)下命令輸入后,child.before始終得不到預(yù)想中的結(jié)果。
經(jīng)過逐步排查,發(fā)現(xiàn)在WIN系統(tǒng)下只能使用send() ,如果使用sendline() ,第一次交互沒有問題,后續(xù)交互就開始問題。
WIN系統(tǒng)下child.before輸出為b'byte型,做判斷時要轉(zhuǎn)為str型。具體可以參考最后面一篇講編碼類型的文章,講的很詳細(xì)。
例子1
send Username后,child.before一直到'Tac_Userna',child.after為‘me:’,child.buffer為空。
expect關(guān)鍵字assword:后,child.before回顯一直到keyword之前,child.after為keyword,child.buffer為空。
例子2
下發(fā)command命令,child.before維持原來的不變,expect到keyword以后,child.before變?yōu)橄掳l(fā)command命令后的設(shè)備回顯。
參考文檔
官方文檔
探索Pexpect
Pexpect示例及使用Tips
Python Pexpect模塊講解
Pexpect模塊使用說明
windows下使用plink實現(xiàn)全自動登陸ssh
Python3_字符編碼
繼 Git 后貴系的另一個暑培項目,講授 Linux 的基本用法,恰好這學(xué)期「操作系統(tǒng)」課程實驗需要用到 Linux,而且實驗室的服務(wù)器也需要學(xué)習(xí)相關(guān)用法,故學(xué)之。
本文部分內(nèi)容參考了清華 ZAH 同學(xué)的教程,部分參考了 劉遄 老師的《 Linux 就該這么學(xué) 》, 菜鳥教程-Linux 。
Linux,全稱 GNU/Linux,是一套免費使用和自由傳播的類 Unix 操作系統(tǒng)。相比于其他系統(tǒng),Linux 更加穩(wěn)定且有效率、更加安全、相對不耗資源……以至于幾乎所有 長期穩(wěn)定運行的網(wǎng)站服務(wù)器 上、在 處理大數(shù)據(jù)的集群系統(tǒng) 中,以及需要 協(xié)同工作的服務(wù)器環(huán)境 都采用 Linux 系統(tǒng)。
Linux 嚴(yán)格來說是單指操作系統(tǒng)的 內(nèi)核 ,因操作系統(tǒng)中包含了許多用戶圖形接口和其他實用工具。如今 Linux 常用來指「基于 Linux 的完整操作系統(tǒng)」,內(nèi)核則改以「Linux 內(nèi)核」稱之。
一些組織或廠商將 Linux 內(nèi)核與各種軟件和文檔 包裝 起來,并提供系統(tǒng)安裝界面和系統(tǒng)配置、設(shè)定與管理工具,就構(gòu)成了 Linux 的發(fā)行版本。
在學(xué)習(xí) Linux 的過程中,有幾個易混淆的概念:
命令行界面(Command-Line Interface,CLI)是在圖形用戶界面得到普及之前使用最為廣泛的用戶界面,它通常不支持鼠標(biāo),用戶通過鍵盤輸入指令,計算機接收到指令后,予以執(zhí)行。也有人稱之為字符用戶界面(Character User Interface,CUI)。
一般來說,在 服務(wù)器 中較多采用的是 CLI 界面,或許有以下幾點原因:
Shell 是一個用 C 語言編寫的程序,它是用戶使用 Linux 等系統(tǒng)的橋梁,如同「 殼 」一般。它的本質(zhì)是一個 命令解釋器 ,將用戶輸入的命令(符合 Shell 語法)處理成對應(yīng) 操作系統(tǒng)的控制命令 ,處理完畢后再將結(jié)果反饋給用戶。
不同操作系統(tǒng)下面的 Shell 種類眾多,常見的有:
Ken Thompson 的 sh 是第一種 Unix Shell,本教程關(guān)注的是 Bash,也就是 Bourne Again Shell,Bash 也是大多數(shù) Linux 系統(tǒng)默認(rèn)的 Shell。
終端 (Terminal),是一種用來讓用戶輸入數(shù)據(jù)至計算機,以及顯示其計算結(jié)果的機器。早期的終端通常就是一臺 電子打字機 (Teletypewriter, TTY),后來隨著計算機的發(fā)展,打字機被鍵盤和顯示器取代,而 GUI 界面也成了主流。
于是,這時候我們就需要一個程序來模擬傳統(tǒng)終端的行為,即 終端模擬器 (Terminal Emulator),當(dāng)用戶打開終端模擬器時,實際上是進入一個 會話進程 (Session)。終端模擬器有很多,這里舉幾個經(jīng)典的例子:
在 Linux 系統(tǒng)中打開終端時,會看到一個提示符,通常類似 hewei@hewei-VirtualBox ~$ 。在提示符下,命令會被 Shell 環(huán)境 解析并反饋 到終端中。
提示符是 Shell 最主要的 文本接口 。它告訴你,你的主機名是 hewei-VirtualBox ,你現(xiàn)在的身份是 hewei 并且你當(dāng)前的 工作目錄 (Current working directory)是 ~ (默認(rèn)在 /home/hewei/ 用戶目錄)。
$ 符號表示您現(xiàn)在的身份不是 root ,輸入如下命令可以暫時切換到 root 權(quán)限:
輸入密碼后,可以看到提示符變成了 root@hewei-VirtualBox:/home/hewei# ,其中 # 符號就是超級用戶權(quán)限的標(biāo)志。再輸入 exit 即可退回普通用戶身份。
在 Git學(xué)習(xí)筆記 #1 基礎(chǔ)知識介紹 中,已經(jīng)簡單介紹了命令行界面的一些使用技巧,這些命令在 Linux 系統(tǒng)的 Bash 中同樣使用。這里羅列出 Linux 常用快捷鍵:
常見的執(zhí)行 Linux 命令的格式是這樣的: 命令名稱 [命令參數(shù)] [命令對象] 。其中,命令參數(shù)用于對命令進行調(diào)整,使之更好地貼近需求,參數(shù)分為 長格式 和 短格式 ,如: man --help , man -h 。短格式之間可以合并,合并后僅保留一個減號即可。
在 Linux 相關(guān)的手冊中,我們會約定俗成地將可選擇的、非必需的參數(shù)使用 中括號 引起來,而命令所要求的、必須有的參數(shù)或?qū)ο笾担瑒t不帶中括號。
此外,要注意 Linux 系統(tǒng)中的命令、參數(shù)、對象都是 嚴(yán)格區(qū)分大小寫 的。
Shell 除了是一個 交互式 (Interactive)的命令解釋器,它還是一種 程序設(shè)計語言 (Shell Script)。它定義了各種變量和參數(shù),并提供了許多在高級語言中才具有的控制結(jié)構(gòu),包括循環(huán)和分支。
用 Shell 編寫的 腳本文件 即 .sh 文件,它能在 Shell 環(huán)境下運行,fork 出一個 子進程 ,調(diào)用系統(tǒng)內(nèi)核來執(zhí)行 批處理 (Batch)的系統(tǒng)控制。在文件的第一行,通常是 #!/bin/bash ,這句話約定了這個腳本需要哪種 Shell 環(huán)境來執(zhí)行。
通過如下命令就可以執(zhí)行一個 Shell 腳本:
下面羅列了部分常用指令與參數(shù)的介紹,更多功能請在幫助手冊中檢索。
ls命令 - list directory contents
顯示文件詳細(xì)信息:ls -l file name
file命令 — determine file type
determine file type :file file name
output MIME type strings (--mime-type and --mime-encoding) :file -i file name
stat命令 - display file or file system status
顯示文件狀態(tài)信息:stat file name?《Linux就該這么學(xué)》一起學(xué)習(xí)
顯示文件在系統(tǒng)的狀態(tài)信息:stat -f file name
簡明顯示文件的狀態(tài)信息:stat -t file name
Linux 文件命令精通指南
作者:Sheryl Calish
為剛接觸 Linux 文件命令的初學(xué)者提供的速成教程
雖然 GUI 桌面(如 KDE 和 GNOME)能夠幫助用戶利用 Linux 特性,而無需關(guān)于命令行接口的功能知識,但還是經(jīng)常會需要更多的功能和靈活性。而且,基本熟悉這些命令對于在 shell 腳本中正確地使某些功能自動化仍然是必需的。
這篇文章是關(guān)于 Linux 文件命令的一個“速成教程”,它是為那些剛接觸這個操作系統(tǒng)或者只是需要補充這方面知識的用戶提供的。它包含了對一些更有用的命令的一個簡明的概述以及關(guān)于它們的最強大的應(yīng)用的指導(dǎo)。下面包含的信息 — 結(jié)合一些實驗 — 將使您能夠容易地掌握這些基本的命令。(注意:當(dāng)涉及到一個與 Oracle 集群文件系統(tǒng) (OCFS) 結(jié)合的內(nèi)核時,這些命令中的某些命令的行為可能會稍微有所不同。在此情況下,Oracle 提供了一個 OCFS 工具集,該工具集可以為文件命令應(yīng)用提供一個更好的選擇。)
注意,這里包含的所有示例都在 SUSE Linux 8.0 Professional 上進行了測試。雖然沒有理由相信它們在其它的系統(tǒng)上將不能工作,但如果出現(xiàn)問題,您應(yīng)當(dāng)查看您的文檔,以了解可能的變化。
背景概念
在深入研究規(guī)范之前,讓我們回顧一些基礎(chǔ)知識。
文件和命令
在 Linux/UNIX 操作系統(tǒng)中,所有事物都被當(dāng)作文件來處理:硬件設(shè)備(包括鍵盤和終端)、目錄、命令本身,當(dāng)然還有文件。這個奇怪的慣例實際上是 Linux/UNIX 的能力和靈活性的基礎(chǔ)。
大多數(shù)(幾乎是全部)的命令形式如下:
command [option] [source file(s)] [target file]
獲取幫助
最有用的命令之一是那些提供幫助的命令(特別是對那些學(xué)習(xí) Linux 的人而言)。Linux 中的兩個重要的信息來源是聯(lián)機參考手冊,或 man 頁面和 whatis 工具。您可以用 whatis 命令來訪問一個不熟悉的命令的 man 頁面。
$ whatis echo
要了解關(guān)于這個命令的更多信息,可以使用:
$ man echo
如果您不知道某個特殊任務(wù)所需的命令,您可以用 man -k (也稱為 apropos)和一個主題來生成可能的命令。例如:
$ man -k files
一個很有用但常常被忽視的命令可以提供關(guān)于使用 man 本身的信息:
$ man man
您可以用 SPACEBAR 來瀏覽任意的 man 頁面;UP ARROW 將向上翻滾文件。.要退出,則輸入 q,!,或 CTRL-Z。
用戶類別
記得那句名言“所有動物一例平等但有些動物比其他動物更加平等”嗎?在 Linux 世界中,根用戶掌管一切。
根用戶可以以另一個用戶名 su (源自 "superuser")登錄。要執(zhí)行諸如添加一個新用戶、打印機或文件系統(tǒng)之類的任務(wù),必須作為根用戶登錄或者用 su 命令和根用戶密碼切換到超級用戶。系統(tǒng)文件(包括控制初始化過程的系統(tǒng)文件)歸根用戶所有。雖然可能允許普通用戶對它們進行讀操作,但出于系統(tǒng)安全性的原因,編輯的權(quán)利將留給根用戶。
BASH shell
雖然提供了其它的 shell,但 BASH (Bourne Again Shell) 是 Linux 的默認(rèn) shell。它結(jié)合了與它同名的 Bourne shell 的特性和 Korn、C 和 TCSH shell 的特性。
BASH 內(nèi)置的命令 history 默認(rèn)記錄最后輸入的 500 條命令。可以通過在命令提示符下輸入 history 來查看它們。要檢索某個特定的命令,可以在命令提示符下按 UP ARROW 或 DOWN ARROW,或在歷史列表中輸入它的編號,并在編號前面加上 "!",例如:
$ !49
您還可以通過一條命令在歷史列表中離位置最靠前的項目的距離來執(zhí)行該命令:如果在歷史列表中有 53 個事件,$ !-3 將執(zhí)行事件號 51。
像 UNIX/Linux 世界的其它 shell 一樣,BASH 使用了特殊的環(huán)境變量來方便系統(tǒng)管理。例如:
HOME,用戶主目錄
PATH,Linux 用來搜索您輸入的命令的可執(zhí)行鏡像的搜索路徑
HISTSIZE,系統(tǒng)保存的歷史事件的數(shù)量
除了這些保留的關(guān)鍵字之外,您還可以定義您自己的環(huán)境變量。例如,Oracle 使用 ORACLE_HOME (還有其它一些變量),要使 Oracle 安裝成功完成,必須在您的環(huán)境中設(shè)置這些變量。
可以在提示符下臨時設(shè)置變量:
$HISTSIZE=100
或者,在 /etc/profile (需要根用戶權(quán)限)中進行系統(tǒng)范圍的永久設(shè)置,或在 .profile 中進行局部永久設(shè)置。
可以通過 echo 命令,并用一個 $ 符號來訪問一個環(huán)境變量的值,進而查看該值。
$ echo $HOME
/home/bluher
可以用 env 命令來查看當(dāng)前所有的環(huán)境變量。
正則表達(dá)式和通配符
許多 Linux 命令使用通配符 * 和 ? 來匹配任意數(shù)量的字符或分別匹配任意的單個字符;正則模式匹配表達(dá)式利用一個句點 (.) 來匹配除“換行符”之外的任意單個字符。這兩種情況下都使用方括號 ([ ]) 來匹配除“*”號之外的字符組。不過,* 號在各種情況下有類似但不同的意義:雖然它在 shell 中將匹配一個或更多的字符,但在正則表達(dá)式中,它匹配上述字符的零個或更多的實例。一些命令(如 egrep 和 awk)使用了一組更廣泛的特殊字符來進行模式匹配。
文件處理命令
剖析一個文件列表
ls 命令用來查看用戶有執(zhí)行權(quán)限的任意目錄中的文件列表,該命令有許多有趣的選項。例如:
$ ls -liah *
22684 -rw-r--r-- 1 bluher users 952 Dec 28 18:43 .profile
19942 -rw-r--r-- 1 scalish users 30 Jan 3 20:00 test2.out
925 -rwxr-xr-x 1 scalish users 378 Sep 2 2002 test.sh
上面的列表顯示 8 列:
第 1 列指示文件的 inode,因為我們使用了 -i 選項。剩下的列通過 -l 選項來進行正常顯示。
第 2 列顯示文件類型和文件訪問權(quán)限。
第3 列顯示鏈接數(shù),包括目錄。
第 4 和第 5 列顯示文件的所有者和組所有者。這里,所有者 "bluher" 屬于組 "users"。
第 6 列顯示文件大小(單位為所顯示的單位,而不是默認(rèn)的字節(jié)數(shù),因為我們使用了 -h 選項。
第 7 列顯示日期(它看起來像是三列),包括月、日和年,以及當(dāng)天的時間。
第 8 列顯示文件名。在選項列表中使用 -a 將使列表中包含隱藏文件(如 .profile)的列表。
處理文件
可以移動 (mv)、復(fù)制 (cp) 或刪除 (rm) 文件和目錄。明智地使用 -i 選項,以獲得確認(rèn)通常是個不錯的主意。
$ cp -i ls.out ls2.out
cpverwrite `ls2.out'?
mv 命令允許使用 -b 選項,這將在移動文件之前作一個備份拷貝。rm 和 cp 接受功能強大但卻危險的 -r 選項,它將在一個目錄和它的文件上遞歸執(zhí)行。
$ rm -ir Test
rm:descend into directory `Test'? y
可以用 mkdir 來創(chuàng)建目錄,用 rmdir 來刪除目錄。不過,因為不能用 rmdir 來刪除包含文件的目錄,所以使用 rm 加 -r 選項通常要更方便些。
出于安全的原因,所有的文件都有所有權(quán)和保護。文件訪問權(quán)限(或文件模式)包含之前提到的相同的 10 個字符:
第一個字符指示文件類型。最常見的是 - 代表文件,d 代表目錄,而 l 代表鏈接。
接下來的 9 個字符是三種用戶類別的訪問權(quán)限:文件所有者(字符 2-4),用戶組 (5-7) 和其它 (8-10),其中 r 表示讀權(quán)限,w 表示寫權(quán)限,x 指示一個文件上的執(zhí)行權(quán)限。破折號 - 如果出現(xiàn)在這九個位置的任意一個,則指示這個操作對該類別的用戶禁止。
可以使用 chmod 命令通過字符符號或二進制掩碼來設(shè)置訪問權(quán)限。要使用二進制掩碼,必須將三個權(quán)限組的字符表示轉(zhuǎn)換成二進制格式,然后轉(zhuǎn)換成八進制格式:
用戶類別: 所有者 用戶組 其它
字符表示: rwx r-x r--
二進制表示: 111 101 100
八進制表示: 7 5 4
將寫權(quán)限賦予用戶組,您可以使用:
chmod g+w test.sh or chmod 774 test.sh
用 umask 命令,在 /etc/init.dev 文件中進行系統(tǒng)范圍內(nèi)的、或在 .profile 文件中進行的本地的文件權(quán)限默認(rèn)設(shè)置。這個命令指示用 777 減去這個數(shù)字來獲取默認(rèn)的權(quán)限:
$ umask 022
這將為用戶創(chuàng)建的所有新文件生成一個默認(rèn)的文件權(quán)限 755。
可以用 chown 來修改文件的所有權(quán):
$ chown bluher ls.out
這里,bluher 是新的文件所有者。類似地,組成員資格將按以下方式修改:
$ chgrp devgrp ls.out
這里,devgrp 是新的用戶組。
ls 不提供哪些文件是文本的,哪些文件是二進制的的信息。要了解這個信息,您可以使用 file * 命令。
重命名文件
賦予一個文件多個名字的兩種流行的方法是利用鏈接和 alias 命令。Alias 可以用來為一個更長的命令重新起一個更方便的名字:
$ alias ll='ls -l'
$ ll
注意單引號的使用,這使得 BASH 將該項目傳遞給別名,而不是自己估計它。別名還可用作較長的路徑名的縮寫:
$ alias jdev9i=/jdev9i/jdev/bin/jdev
關(guān)于 alias 和它的反命令 unalias 的更多信息,請查看 BASH 的 man 頁面的 "SHELL BUILTIN COMMANDS" 子部分。在最后一個例子中,定義了一個環(huán)境變量來實現(xiàn)相同的結(jié)果。
$ export JDEV_HOME=/jdev9i/jdev/bin/jdev
$ echo $JDEV_HOME
/jdev9i/jdev/bin/jdev
$ $JDEV_HOME
鏈接允許幾個文件名引用單個源文件,格式如下:
ln [-s] fileyouwanttolinkto newname
單獨的 ln 命令創(chuàng)建到文件的一個硬鏈接,而使用 -s 選項來創(chuàng)建一個符號鏈接。簡而言之,一個硬鏈接幾乎不能和原始的文件區(qū)分開(除了這兩個文件的 inode 將相同之外)。符號鏈接較容易區(qū)分,因為它們出現(xiàn)在一個長的文件列表中,并用 -; 來指示源文件,l 指示文件類型。
查看和查找文件
文件過濾器
用來讀取文件內(nèi)容和在文件內(nèi)容上執(zhí)行操作的命令有時被稱為 1濾器。sed 和 awk 命令是兩個濾波器的例子,因為在以前的 OTN 文章中有它們詳細(xì)的討論,在這里將略過。
諸如 cat、 more 和 less 之類的命令讓您能夠從命令行查看一個文本文件的內(nèi)容,而無需調(diào)用編輯器。Cat 是 "concatenate" 的縮寫,它將默認(rèn)地在標(biāo)準(zhǔn)輸出(顯示屏)上顯示文件內(nèi)容。和 cat 一起提供的最有趣的選項之一是 -n 選項,它用編號的輸出行來顯示文件內(nèi)容。
$ cat -n test.out
1 This is a test.
因為 cat 一次性輸出文件中的所有行,所以您可能更喜歡用 more 和 less,因為它們都一次輸出一屏的文件內(nèi)容。Less 是 more 的一個增強的版本,它允許用來自 vi 文本編輯器的關(guān)鍵命令來增強文件查看。例如,d 向前翻滾、b 向后翻滾 N 行(如果 N 是在 d 或 b 之前指定的)。為 N 輸入的值成為隨后的 d 命令的默認(rèn)值。man 頁面實用工具使用 less 來顯示使用說明的內(nèi)容。
重定向和管道
重定向允許將命令輸出重定向到文件中,而不是標(biāo)準(zhǔn)輸出,或者類似地,也可重定向輸入。重定向的標(biāo)準(zhǔn)符號 ; 創(chuàng)建一個新的文件。;; 符號將輸出添加到一個現(xiàn)有的文件中:
$ more test2.out
Another test.
$ cat test.out ;; test2.out
$ cat test2.out
Another test.
This is a test.
到文件的標(biāo)準(zhǔn)輸入可以用 符號來重定向:
$ cat test2.out
錯誤消息用 2; 和 2;; 來重定向和添加,格式如下:
$ command 2; name_of_error_file
要避免無意地覆蓋一個現(xiàn)有的文件,使用 BASH 內(nèi)置的命令集:
$ set -o noclobber
可以在命令和輸出文件之間用 ;! 符號來重載這個特性。要關(guān)閉這個特性,用 +o 代替 -o。
重定向在一個命令和文件之間、或文件和文件之間工作。重定向語句的一項必須是一個文件。
管道使用 |符號,并且在命令之間工作。例如,您可以用以下方式將一個命令的輸出直接發(fā)送到打印機上:
$ ls -l * | lpr
可以用以下方式快速地找到歷史列表中的一個命令:
$ history | grep cat
更多的濾波器
Grep、fgrep 和 egrep 都顯示匹配一種模式的行。所有這三個命令都在文件中搜索指定的模式,如果您想不起來一個所需文件的名稱,這將非常有用。基本格式是:
grep [options] PATTERN [FILE...]
$ grep -r 'Subject' nsmail
CTRL-Z 將終止上述或其它任何命令。
grep 的最有用的選項可能是 -s。如果您以除根用戶之外的任何身份搜索系統(tǒng)文件,那么對于每一個您沒有訪問權(quán)限的文件,都將產(chǎn)生錯誤消息。這個命令禁止那些消息。
Fgrep(也以 grep -F 調(diào)用)只查找固定的字符串,而不是 grep 接收的正則表達(dá)式。而 egrep 接收包含更大范圍的特殊字符(如 “|”,它指示條件 OR 運算符)的模式。
$ egrep 'Subject|mailto' *
查找文件
find 命令的 GNU 版本非常強大、靈活并且比 UNIX 系統(tǒng)上存在的經(jīng)典版本更具包容性。它對于涉及到目錄結(jié)構(gòu)的任務(wù)非常有用,包括在文件上查找和執(zhí)行命令。find 命令的基本格式是:
$ find startdirectory options matchcriteria [actionoptions]
如果您知道文件的名稱、或者甚至名稱的一部分,但不知道它所處的目錄,您可以這么做:
$ find .-name 'test*'
./test
./jdevhome/mywork/EmpWS/EmpBC4J/test
與經(jīng)典的 UNIX 系統(tǒng)不同,在 Linux 中不需要在末尾添加 -print 操作,因為如果沒有指定其它的操作選項,就將假定執(zhí)行這個操作。在目錄起始位置上的一個點 ( . ) 將使 find 在您的工作目錄中開始搜索。兩個點, ..,在父目錄中開始搜索。您可以在任意目錄下開始搜索。
注意,您可以使用通配符作為搜索準(zhǔn)則的一部分(只要用單引號將整個項目括起來)。
$ find .-name 'test*' -print
./test.out
./test2.out
顯示擁有 .out 擴展名的一系列文件:
$ find /home -name '*.out'
不過記住,除非您是作為超級用戶運行這個命令,否則您將可能得到許多的 "ermission denied" 錯誤消息。
最強大的搜索工具之一是和 grep 一起使用的 -exec 操作:
$ find .-name '*.html' -exec grep 'mailto:foo@yahoo.com' {} \;
.,查找一個 html 文件,*.html,并在當(dāng)前文件上執(zhí)行 (-exec) grep 命令,{}。當(dāng)使用 -exec 操作時,需要一個分號 ;,這是用來在使用 find 命令時執(zhí)行其它一些操作。需要反斜線 \ 和引號來確保這些項目通過 BASH,以使它們由命令而不是 shell 來進行解釋。
當(dāng)前名稱:簡明linux命令 linux命令大全詳解
網(wǎng)頁網(wǎng)址:http://www.chinadenli.net/article16/ddopsgg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、網(wǎng)站排名、網(wǎng)站營銷、App開發(fā)、虛擬主機、網(wǎng)站收錄
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)