作者:謝麗爾·卡裏什
針對不熟悉Linux文件命令的初學者的速成課程。
雖然GUI桌面(如KDE和GNOME)可以幫助用戶在沒有命令行界面功能知識的情況下利用Linux的特性,但他們通常需要更多的功能和靈活性。此外,基本熟悉這些命令對於在shell腳本中正確地自動化某些功能仍然是必要的。
本文是壹個關於Linux文件命令的“速成班”,是為不熟悉這個操作系統的用戶或者只是需要補充這方面知識的用戶提供的。它包含壹些更有用的命令的簡要概述,以及關於它們最強大的應用程序的指導。下面包含的信息-結合壹些實驗-將使您輕松掌握這些基本命令。(註意:當涉及結合了Oracle集群文件系統(OCFS)的內核時,其中壹些命令的行為可能會略有不同。在這種情況下,Oracle提供了OCFS工具集,可以為文件命令應用提供更好的選擇。)
請註意,這裏包含的所有示例都已經在SUSE Linux 8.0 Professional上進行了測試。盡管沒有理由相信它們不能在其他系統上工作,但是如果有問題,您應該檢查您的文檔以了解可能的更改。
背景概念
在深入研究規範之前,我們先來復習壹些基礎知識。
文件和命令
在Linux/UNIX操作系統中,壹切都被視為文件:硬件設備(包括鍵盤和終端)、目錄、命令本身,當然還有文件。這種奇怪的約定實際上是Linux/UNIX的能力和靈活性的基礎。
大多數(幾乎所有)命令都采用以下形式:
命令[選項][源文件][目標文件]
尋求幫助
最有用的命令之壹是那些有幫助的命令(特別是對於那些學習Linux的人)。Linux中兩個重要的信息來源是在線參考手冊,或者手冊頁和工具。您可以使用whatis命令來訪問不熟悉的命令的手冊頁。
$什麽是echo
要了解有關此命令的更多信息,您可以使用:
$ man echo
如果您不知道特定任務所需的命令,您可以使用man -k(也稱為apropos)和壹個主題來生成可能的命令。例如:
$ man -k文件
壹個有用但經常被忽略的命令可以提供關於使用man本身的信息:
$ man man
您可以使用空格鍵瀏覽任何手冊頁;向上箭頭將向上滾動文件。。要退出,請輸入q,!,或者ctrl-z。
用戶類別
還記得那句名言“所有動物都是平等的,只是有些動物比其他動物更平等”嗎?在Linux世界中,根用戶是負責人。
根用戶可以使用另壹個用戶名su(來自“超級用戶”)登錄。要執行添加新用戶、打印機或文件系統等任務,您必須以root用戶身份登錄,或者使用su命令和root密碼切換到超級用戶。系統文件(包括控制初始化過程的文件)最終歸用戶所有。盡管普通用戶可能被允許閱讀它們,但出於系統安全的原因,編輯它們的權利將留給根用戶。
BASH shell
雖然提供了其他shell,但是BASH(Bourne Shell)是Linux的默認Shell。它結合了伯恩·謝爾的特點和科恩、C和tcsh·謝爾的特點。
默認情況下,BASH內置的命令歷史記錄了最後500條命令。您可以通過在命令提示符下輸入history來查看它們。要檢索特定命令,可以在命令提示下按向上鍵或向下鍵,或者在歷史列表中輸入其編號,並添加“!”在它之前。,例如:
$ !四十九個
您還可以根據命令與歷史列表頂部項目的距離來執行命令:如果歷史列表中有53個事件,$!-3將執行事件編號51。
像UNIX/Linux世界中的其他shell壹樣,BASH使用特殊的環境變量來促進系統管理。例如:
主頁,用戶主目錄
PATH,Linux用來搜索您輸入的命令的可執行映像的搜索路徑。
HISTSIZE,系統保存的歷史事件數。
除了這些保留的關鍵字,您還可以定義自己的環境變量。例如,ORACLE使用ORACLE_HOME(和其他變量),必須在您的環境中進行設置,Oracle安裝才能成功完成。
您可以在提示符下臨時設置變量:
$HISTSIZE=100
或者,在/etc/profile中進行系統範圍的永久設置(需要root用戶權限)或在中進行本地永久設置。側寫。
您可以通過echo命令訪問環境變量的值,並使用$符號查看該值。
$ echo $HOME
/home/bluher
您可以使用env命令查看所有當前的環境變量。
正則表達式和通配符
許多Linux命令使用通配符*和?分別匹配任意數量的字符或任意單個字符;正則模式匹配表達式使用句點(。)匹配除“換行符”以外的任何單個字符。在這兩種情況下,方括號([])用於匹配除“*”以外的字符組。然而,在每種情況下,*符號具有相似但不同的含義:盡管它將匹配shell中的壹個或多個字符,但它將匹配正則表達式中的零個或多個上述字符的實例。有些命令,如egrep和awk,使用更廣泛的特殊字符進行模式匹配。
文件處理命令
解析文件列表
ls命令用於查看用戶擁有執行權限的任何目錄中的文件列表。這個命令有許多有趣的選項。例如:
$ ls -liah *
22684 -rw-r - r - 1 bluher用戶952 12月28日18:43。輪廓
19942-rw-r-r-1 scali sh用戶30 1月3日20:00 test2.out
925 -rwxr-xr-x 1 scalish用戶378 2002年9月2日測試. sh
上面的列表顯示了8列:
列1表示文件的索引節點,因為我們使用了-i選項。其余的列通常使用-l選項顯示。
第二列顯示文件類型和文件訪問權限。
第三列顯示鏈接的數量,包括目錄。
第4列和第5列顯示了文件所有者和組所有者。在這裏,所有者“bluher”屬於組“users”。
第六列顯示文件大小(單位是顯示的單位,而不是默認的字節數,因為我們使用了-h選項。
第七列顯示日期(看起來像三列),包括月、日、年和壹天中的時間。
第八列顯示文件名。在選項列表中使用-a將使列表包含壹個隱藏文件列表(例如。簡介)。
流程文件
您可以移動(mv)、復制(cp)或刪除(rm)文件和目錄。明智地使用-i選項來獲得確認通常是個好主意。
$ CP-1ls . out ls2 . out
cpverwrite `ls2.out '?
mv命令允許使用-b選項,這將在移動文件之前制作壹個備份副本。Rm和cp接受強大但危險的-r選項,該選項將在目錄及其文件上遞歸執行。
$ rm -ir測試
rm:進入目錄“測試”?y
可以使用mkdir創建目錄,使用rmdir刪除目錄。但是,由於不能使用rmdir刪除包含文件的目錄,所以使用rm plus -r選項通常更方便。
出於安全原因,所有文件都被擁有和保護。文件訪問權限(或文件模式)包含前面提到的相同的10字符:
第壹個字符表示文件類型。最常見的是-代表文件,d代表目錄,l代表鏈接。
接下來的九個字符是三種用戶類別的訪問權限:文件所有者(字符2-4)、用戶組(5-7)和其他(8-10),其中R代表讀權限,W代表寫權限,X代表對文件的執行權限。破折號——如果它出現在這九個位置中的任何壹個位置,則表示該類別的用戶禁止該操作。
您可以使用chmod命令通過字符符號或二進制掩碼來設置訪問權限。要使用二進制掩碼,您必須將三個權限組的字符表示轉換為二進制格式,然後轉換為八進制格式:
用戶類別:所有者用戶組其他
字符表示:rwxr-xr-
二進制表示:111101100。
八進制表示法:7 5 4
要向用戶組授予寫權限,您可以使用:
chmod g+w test.sh或chmod 774 test.sh
使用umask命令,在/etc/init.dev文件或中設置系統範圍的默認文件權限。配置文件。該命令指示從777中減去該數字以獲得默認權限:
$ umask 022
這將為用戶創建的所有新文件生成默認文件許可755。
Chown可用於修改文件的所有權:
$ chown bluher已退出
在這裏,布魯厄是新的文件所有者。同樣,組成員資格將被修改如下:
$ chgrp開發組ls.out
在這裏,devgrp是新的用戶組。
Ls不提供關於哪些文件是文本文件,哪些文件是二進制文件的信息。要了解這些信息,可以使用file *命令。
重命名文件
給壹個文件取多個名字的兩種流行方法是使用鏈接和別名命令。Alias可用於用更方便的名稱重命名較長的命令:
$ alias ll='ls -l '
ll美元
註意單引號的使用,這使得BASH將項傳遞給別名,而不是自己估計。別名也可以用作較長路徑名的縮寫:
$ alias jdev 9i =/jdev 9i/jdev/bin/jdev
有關alias及其反命令unalias的更多信息,請參見BASH手冊頁的“SHELL內置命令”小節。在最後壹個示例中,定義了壹個環境變量來實現相同的結果。
$ export JDEV _ HOME =/JDEV 9i/JDEV/bin/JDEV
$ echo $JDEV_HOME
/jdev9i/jdev/bin/jdev
$ $JDEV_HOME
鏈接允許多個文件名引用以下格式的單個源文件:
在[-s]文件中,您希望鏈接到新名稱
單獨的ln命令創建指向文件的硬鏈接,而-s選項用於創建符號鏈接。簡而言之,硬鏈接很難與原始文件區分開來(除了兩個文件的inode會相同)。符號鏈接更容易區分,因為它們出現在壹個很長的文件列表中,並標有->;;為了表示源文件,l表示文件類型。
查看和查找文件
文件過濾器
用於讀取文件內容並對其執行操作的命令有時被稱為。& amp過濾器。Sed和awk命令是兩個過濾器的例子,因為它們在以前的OTN文章中已經詳細討論過,這裏將跳過。
像cat這樣的命令,或多或少地允許您從命令行查看文本文件的內容,而不需要調用編輯器。Cat是“concatenate”的縮寫,默認情況下會在標準輸出(顯示屏)上顯示文件內容。cat提供的最有趣的選項之壹是-n選項,它用編號的輸出行顯示文件的內容。
$ cat -n test.out
1這是測試。
因為cat壹次輸出文件中的所有行,所以您可能更喜歡使用more和less,因為它們都是壹次壹屏地輸出文件的內容。Less是more的增強版本,它允許vi文本編輯器中的鍵盤命令增強文件查看。例如,d向前滾動,b向後滾動n行(如果在d或b之前指定了n)。為n輸入的值成為後續d命令的默認值。手冊頁實用程序使用less來顯示說明的內容。
重定向和管道
重定向允許您將命令輸出重定向到壹個文件,而不是標準輸出,或者類似地,您可以重定向輸入。重定向的標準符號>;;創建壹個新文件。& gt;& gt;將輸出添加到現有文件的符號:
$更多測試2.out
另壹個測試。
$ cat test.out & gt;& gt;test2.out
$ cat test2.out
另壹個測試。
這是壹個測試。
文件的標準輸入可以用
$ cat & lttest2.out
帶有2 >的錯誤消息;;和2 >;;& gt;進行重定向和添加,格式如下:
$ command 2 & gt;錯誤文件的名稱
為了避免無意中覆蓋現有文件,請使用BASH的內置命令集:
$ set -o noclobber
可以用>:;!符號重載此功能。要關閉此功能,請使用+o而不是-o。
重定向在命令和文件之間或者文件之間起作用。重定向語句的壹項必須是文件。
管道使用|符號並在命令之間工作。例如,您可以通過以下方式將命令的輸出直接發送到打印機:
$ ls -l * | lpr
您可以通過以下方式在歷史列表中快速找到命令:
$ history | grep cat
更多過濾器
Grep、fgrep和egrep都顯示匹配某個模式的行。這三個命令都在文件中搜索指定的模式,如果您不記得所需文件的名稱,這將非常有用。基本格式是:
grep[選項]模式[文件...]
$ grep -r '主題' nsmail
CTRL-Z將終止上述或任何其他命令。
也許grep最有用的選項是-s。如果您以root用戶之外的任何人的身份搜索系統文件,將會為您沒有訪問權限的每個文件生成壹條錯誤消息。這條命令禁止這些信息。
Fgrep(也叫grep -F)只查找固定字符串,不查找grep接收到的正則表達式。另壹方面,Egrep接收包含更多特殊字符的模式,比如“|”,它表示條件OR操作符。
$ egrep 'Subject|mailto' *
查找文件
find命令的GNU版本非常強大、靈活,並且比UNIX系統上現有的經典版本更具包容性。它對於涉及目錄結構的任務非常有用,包括在文件上查找和執行命令。find命令的基本格式是:
$ find startdirectory選項匹配條件[actionoptions]
如果您知道文件的名稱,甚至知道文件的壹部分,但不知道文件所在的目錄,您可以這樣做:
$ find。-名稱“測試*”
。/測試
。/jdevhome/my work/EmpWS/EMP BC 4j/test
與經典的UNIX系統不同,在Linux中不需要在末尾添加-print操作,因為如果沒有指定其他操作選項,就會假定這個操作。壹個點(。)將使find開始在您的工作目錄中搜索。兩點,...,開始在父目錄中搜索。您可以在任何目錄中開始搜索。
請註意,您可以使用通配符作為搜索條件的壹部分(只需用單引號將整個項目括起來)。
$ find。-名稱“測試*”-打印
。/test.out
。/test2.out
顯示帶有。外部分機:
$ find /home -name '*。“出去”
但是請記住,除非您以超級用戶的身份運行該命令,否則您可能會收到許多“權限被拒絕”的錯誤消息。
最強大的搜索工具之壹是與grep壹起使用的-exec操作:
$ find。-姓名' *。html '-exec grep ' mailto:foo @ Yahoo . com ' { } \;
。,找到壹個html文件,*。html,並對當前文件執行(-exec) grep命令。使用-exec操作時,需要分號;這用於在使用find命令時執行其他操作。需要使用反斜線\和引號來確保這些項目通過BASH,以便它們被命令而不是shell解釋。