|
||
linux指令大全cat cd ??chmod chown ??cp cut ??名稱:cat ??使用權限:所有使用者 ??使用方式:cat [-AbeEnstTuv] [--help] [--version] fileName ??說明:把檔案串連接后傳到基本輸出(螢幕或加 > fileName 到另一個檔案) ??參數: ??-n 或 --number 由 1 開始對所有輸出的行數編號 ??-b 或 --number-nonblank 和 -n 相似,只不過對于空白行不編號 ??-b 或 --number-nonblank 和 -n 相似,只不過對于空白行不編號 ??-s 或 --squeeze-blank 當遇到有連續兩行以上的空白行,就代換為一行的空白 ??行 ??-v 或 --show-nonprinting ??范例: ??cat -n textfile1 > textfile2 把 textfile1 的檔案內容加上行號后輸入 ??textfile2 這個檔案里 ??cat -b textfile1 textfile2 >> textfile3 把 textfile1 和 textfile2 的檔 ??案內容加上行號(空白行不加)之后將內容附加到 textfile3 ??名稱 : cd ??使用權限 : 所有使用者 ??使用方式 : cd [dirName] ??說明 : 變換工作目錄至 dirName。 其中 dirName 表示法可為絕對路徑或相對路 ??徑。若目錄名稱省略,則變換至使用者的 home directory (也就是剛 login 時 ??所在的目錄)。 ??另外,"~" 也表示為 home directory 的意思,"." 則是表示目前所在的目錄 ??,".." 則表示目前目錄位置的上一層目錄。 ??范例 : 跳到 /usr/bin/ : ??cd /usr/bin ??跳到自己的 home directory : ??cd ~ ??跳到目前目錄的上上兩層 : ??cd ../.. ??cd ../.. ??指令名稱 : chmod ??使用權限 : 所有使用者 ??使用方式 : chmod [-cfvR] [--help] [--version] mode file... ??說明 : Linux/Unix 的檔案存取權限分為三級 : 檔案擁有者、群組、其他。利用 ??chmod 可以藉以控制檔案如何被他人所存取。 ??把計 : ??mode : 權限設定字串,格式如下 : [ugoa...][[+-=][rwxX]...][,...],其中u ??表示該檔案的擁有者,g 表示與該檔案的擁有者屬于同一個群體(group)者,o 表 ??示其他以外的人,a 表示這三者皆是。 ??+ 表示增加權限、- 表示取消權限、= 表示唯一設定權限。 ??r 表示可讀取,w 表示可寫入,x 表示可執行,X 表示只有當該檔案是個子目錄 ??或者該檔案已經被設定過為可執行。 ??-c : 若該檔案權限確實已經更改,才顯示其更改動作 ??-f : 若該檔案權限無法被更改也不要顯示錯誤訊息 ??-v : 顯示權限變更的詳細資料 ??-R : 對目前目錄下的所有檔案與子目錄進行相同的權限變更(即以遞回的方式逐 ??個變更) ??--help : 顯示輔助說明 ??--version : 顯示版本 ??范例 :將檔案 file1.txt 設為所有人皆可讀取 : ??chmod ugo+r file1.txt ??將檔案 file1.txt 設為所有人皆可讀取 : ??將檔案 file1.txt 設為所有人皆可讀取 : ??chmod a+r file1.txt ??將檔案 file1.txt 與 file2.txt 設為該檔案擁有者,與其所屬同一個群體者可 ??寫入,但其他以外的人則不可寫入 : ??chmod ug+w,o-w file1.txt file2.txt ??將 ex1.py 設定為只有該檔案擁有者可以執行 : ??chmod u+x ex1.py ??將目前目錄下的所有檔案與子目錄皆設為任何人可讀取 : ??chmod -R a+r * ??此外chmod也可以用數字來表示權限如 chmod 777 file ??語法為:chmod abc file ??其中a,b,c各為一個數字,分別表示User、Group、及Other的權限。 ??r=4,w=2,x=1 ??若要rwx屬性則4+2+1=7; ??若要rw-屬性則4+2=6; ??若要r-x屬性則4+1=7。 ??范例: ??chmod a=rwx file ??和 ??chmod 777 file ??效果相同 ??chmod ug=rwx,o=x file ??和 ??和 ??chmod 771 file ??效果相同 ??若用chmod 4755 filename可使此程式具有root的權限 ?? ??指令名稱 : chown ??使用權限 : root ??使用方式 : chmod [-cfhvR] [--help] [--version] user[:group] file... ??說明 : Linux/Unix 是多人多工作業系統,所有的檔案皆有擁有者。利用 chown ??可以將檔案的擁有者加以改變。一般來說,這個指令只有是由系統管理者(root) ??所使用,一般使用者沒有權限可以改變別人的檔案擁有者,也沒有權限可以自己 ??的檔案擁有者改設為別人。只有系統管理者(root)才有這樣的權限。 ??把計 : ??user : 新的檔案擁有者的使用者 IDgroup : 新的檔案擁有者的使用者群 ??體(group)-c : 若該檔案擁有者確實已經更改,才顯示其更改動作-f : 若該檔案 ??擁有者無法被更改也不要顯示錯誤訊息-h : 只對于連結(link)進行變更,而非該 ??link 真正指向的檔案-v : 顯示擁有者變更的詳細資料-R : 對目前目錄下的所有 ??檔案與子目錄進行相同的擁有者變更(即以遞回的方式逐個變更)--help : 顯示輔 ??助說明--version : 顯示版本 ??范例 : ??將檔案 file1.txt 的擁有者設為 users 群體的使用者 jessie : ??chown jessie:users file1.txt ??將目前目錄下的所有檔案與子目錄的擁有者皆設為 users 群體的使用者 ??lamport : ??lamport : ??chown -R lamport:users * ?? ??名稱:cp ??使用權限:所有使用者 ??使用方式: ??cp [options] source dest ??cp [options] source... directory ??說明:將一個檔案拷貝至另一檔案,或將數個檔案拷貝至另一目錄。 ??把計 ??-a 盡可能將檔案狀態、權限等資料都照原狀予以復制。 ??-r 若 source 中含有目錄名,則將目錄下之檔案亦皆依序拷貝至目的地。 ??-f 若目的地已經有相同檔名的檔案存在,則在復制前先予以刪除再行復制。 ??范例: ??將檔案 aaa 復制(已存在),并命名為 bbb : ??cp aaa bbb ??將所有的C語言程式拷貝至 Finished 子目錄中 : ??cp *.c Finished ??名稱:cut ??使用權限:所有使用者 ??用法:cut -cnum1-num2 filename ??說明:顯示每行從開頭算起 num1 到 num2 的文字。 ??范例: ??shell>> cat example ??shell>> cat example ??test2 ??this is test1 ??shell>> cut -c0-6 example ## print 開頭算起前 6 個字元 ??test2 ??this i ??名稱 : find ??用法 : find ??使用說明 : ??將檔案系統內符合 expression 的檔案列出來。你可以指要檔案的名稱、類別、 ??時間、大小、權限等不同資訊的組合,只有完全相符的才會被列出來。 ??find 根據下列規則判斷 path 和 expression,在命令列上第一個 - ( ) , ! 之 ??前的部份為 path,之后的是 expression。如果 path 是空字串則使用目前路徑 ??,如果 expression 是空字串則使用 -print 為預設 expression ??expression 中可使用的選項有二三十個之多,在此只介紹最常用的部份。 ??-mount, -xdev : 只檢查和指定目錄在同一個檔案系統下的檔案,避免列出其它 ??檔案系統中的檔案 ??-amin n : 在過去 n 分鐘內被讀取過 ??-anewer file : 比檔案 file 更晚被讀取過的檔案 ??-atime n : 在過去 n 天過讀取過的檔案 ??-cmin n : 在過去 n 分鐘內被修改過 ??-cnewer file :比檔案 file 更新的檔案 ??-ctime n : 在過去 n 天過修改過的檔案 ??-ctime n : 在過去 n 天過修改過的檔案 ??-empty : 空的檔案-gid n or -group name : gid 是 n 或是 group 名稱是 ??name ??-ipath p, -path p : 路徑名稱符合 p 的檔案,ipath 會忽略大小寫 ??-name name, -iname name : 檔案名稱符合 name 的檔案。iname 會忽略大小寫 ??-size n : 檔案大小 是 n 單位,b 代表 512 位元組的區塊,c 表示字元數,k ??表示 kilo bytes,w 是二個位元組。-type c : 檔案類型是 c 的檔案。 ??d: 目錄 ??c: 字型裝置檔案 ??b: 區塊裝置檔案 ??p: 具名貯列 ??f: 一般檔案 ??l: 符號連結 ??s: socket ??-pid n : process id 是 n 的檔案 ??你可以使用 ( ) 將運算式分隔,并使用下列運算。 ??exp1 -and exp2 ??! expr ??-not expr ??exp1 -or exp2 ??exp1, exp2 ??范例: ??將目前目錄及其子目錄下所有延伸檔名是 c 的檔案列出來。 ??將目前目錄及其子目錄下所有延伸檔名是 c 的檔案列出來。 ??# find . -name "*.c" ??將目前目錄其其下子目錄中所有一般檔案列出 ??# find . -ftype f ??將目前目錄及其子目錄下所有最近 20 分鐘內更新過的檔案列出 ??# find . -ctime -20 ??名稱:less ??使用權限:所有使用者 ??使用方式: ??less [Option] filename ??說明: ??less 的作用與 more 十分相似,都可以用來瀏覽文字檔案的內容,不同的是 ??less 允許使用者往回卷動 ??以瀏覽已經看過的部份,同時因為 less 并未在一開始就讀入整個檔案,因此在 ??遇上大型檔案的開啟時,會比一般的文書編輯器(如 vi)來的快速。 ??范例: ??指令名稱 : ln ??使用權限 : 所有使用者 ??使用方式 : ln [options] source dist,其中 option 的格式為 : ??[-bdfinsvF] [-S backup-suffix] [-V {numbered,existing,simple}] ??[--help] [--version] [--] ??說明 : Linux/Unix 檔案系統中,有所謂的連結(link),我們可以將其視為檔案 ??的別名,而連結又可分為兩種 : 硬連結(hard link)與軟連結(symbolic link), ??的別名,而連結又可分為兩種 : 硬連結(hard link)與軟連結(symbolic link), ??硬連結的意思是一個檔案可以有多個名稱,而軟連結的方式則是產生一個特殊的 ??檔案,該檔案的內容是指向另一個檔案的位置。硬連結是存在同一個檔案系統中 ??,而軟連結卻可以跨越不同的檔案系統。 ??ln source dist 是產生一個連結(dist)到 source,至于使用硬連結或軟鏈結則 ??由參數決定。 ??不論是硬連結或軟鏈結都不會將原本的檔案復制一份,只會占用非常少量的磁碟 ??空間。 ??-f : 鏈結時先將與 dist 同檔名的檔案刪除-d : 允許系統管理者硬鏈結自己的 ??目錄-i : 在刪除與 dist 同檔名的檔案時先進行詢問-n : 在進行軟連結時,將 ??dist 視為一般的檔案-s : 進行軟鏈結(symbolic link)-v : 在連結之前顯示其 ??檔名-b : 將在鏈結時會被覆寫或刪除的檔案進行備份-S SUFFIX : 將備份的檔案 ??都加上 SUFFIX 的字尾-V METHOD : 指定備份的方式--help : 顯示輔助說 ??明--version : 顯示版本 ??范例 : ??將檔案 yy 產生一個 symbolic link : zz ??ln -s yy zz ??將檔案 yy 產生一個 hard link : zz ??ln yy xx ??名稱:locate ??使用權限:所有使用者 ??使用方式: locate [-q] [-d ] [--database=] ??locate [-r ] [--regexp=] ??locate [-r ] [--regexp=] ??locate [-qv] [-o ] [--output=] ??locate [-e ] [-f ] <[-l ] [-c] ??<[-U ] [-u]> ??locate [-Vh] [--version] [--help] ??說明: ??locate 讓使用者可以很快速的搜尋檔案系統內是否有指定的檔案。其方法是先建 ??立一個包括系統內所有檔案名稱及路徑的資料庫,之后當尋找時就只需查詢這個 ??資料庫,而不必實際深入檔案系統之中了。 ??在一般的 distribution 之中,資料庫的建立都被放在 contab 中自動執行。一 ??般使用者在使用時只要用 ??# locate your_file_name ??的型式就可以了。 參數: ??-u ??-U ??建立資料庫,-u 會由根目錄開始,-U 則可以指定開始的位置。 ??-e ??將 ??排除在尋找的范圍之外。 ??-l ??如果 是 1.則啟動安全模式。在安全模式下,使用者不會看到權限無法看到的檔 ??案。這會始速度減慢,因為 locate 必須至實際的檔案系統中取得檔案的權限資 ??料。 ??料。 ??-f ??將特定的檔案系統排除在外,例如我們沒有到理要把 proc 檔案系統中的檔案放 ??在資料庫中。 ??-q ??安靜模式,不會顯示任何錯誤訊息。 ??-n ??至多顯示 個輸出。 ??-r ??使用正規運算式 做尋找的條件。 ??-o ??指定資料庫存的名稱。 ??-d ??指定資料庫的路徑 ??-h ??顯示輔助訊息 ??-v ??顯示更多的訊息 ??-V ??顯示程式的版本訊息 范例: ??locate chdrv : 尋找所有叫 chdrv 的檔案 ??locate -n 100 a.out : 尋找所有叫 a.out 的檔案,但最多只顯示 100 個 ??locate -u : 建立資料庫 ??locate -u : 建立資料庫 |
|
||
名稱 : ls ??使用權限 : 所有使用者 ??使用方式 : ls [-alrtAFR] [name...] ??說明 : 顯示指定工作目錄下之內容(列出目前工作目錄所含之檔案及子目錄)。 ??-a 顯示所有檔案及目錄 (ls內定將檔案名或目錄名稱開頭為"."的視為隱藏檔, ??不會列出) ??-l 除檔案名稱外,亦將檔案型態、權限、擁有者、檔案大小等資訊詳細列出 ??-r 將檔案以相反次序顯示(原定依英文字母次序) ??-t 將檔案依建立時間之先后次序列出 ??-A 同 -a ,但不列出 "." (目前目錄) 及 ".." (父目錄) ??-F 在列出的檔案名稱后加一符號;例如可執行檔則加 "*", 目錄則加 "/" ??-R 若目錄下有檔案,則以下之檔案亦皆依序列出 ??范例: ??列出目前工作目錄下所有名稱是 s 開頭的檔案,愈新的排愈后面 : ??ls -ltr s* ??將 /bin 目錄以下所有目錄及檔案詳細資料列出 : ??ls -lR /bin ??列出目前工作目錄下所有檔案及目錄;目錄于名稱后加 "/", 可執行檔于名稱后 ??加 "*" : ??ls -AF ??名稱:more ??使用權限:所有使用者 ??使用權限:所有使用者 ??使用方式:more [-dlfpcsu] [-num] [+/pattern] [+linenum] [fileNames..] ??說明:類似 cat ,不過會以一頁一頁的顯示方便使用者逐頁閱讀,而最基本的指 ??令就是按空白鍵(space)就往下一頁顯示,按 b 鍵就會往回(back)一頁顯示 ??,而且還有搜尋字串的功能(與 vi 相似),使用中的說明文件,請按 h 。 ??參數:-num 一次顯示的行數 ??-d 提示使用者,在畫面下方顯示 [Press space to continue, q to quit.] , ??如果使用者按錯鍵,則會顯示 [Press h for instructions.] 而不是 嗶 聲 ??-l 取消遇見特殊字元 ^L(送紙字元)時會暫停的功能 ??-f 計算行數時,以實際上的行數,而非自動換行過后的行數(有些單行字數太長 ??的會被擴展為兩行或兩行以上) ??-p 不以卷動的方式顯示每一頁,而是先清除螢幕后再顯示內容 ??-c 跟 -p 相似,不同的是先顯示內容再清除其他舊資料 ??-s 當遇到有連續兩行以上的空白行,就代換為一行的空白行 ??-u 不顯示下引號 (根據環境變數 TERM 指定的 terminal 而有所不同) ??+/ 在每個檔案顯示前搜尋該字串(pattern),然后從該字串之后開始顯示 ??+num 從第 num 行開始顯示 ??fileNames 欲顯示內容的檔案,可為復數個數 ??范例: ??more -s testfile 逐頁顯示 testfile 之檔案內容,如有連續兩行以上空白行則 ??以一行空白行顯示。 ??more +20 testfile 從第 20 行開始顯示 testfile 之檔案內容。 ??名稱:mv ??使用權限:所有使用者 ??使用方式: ??mv [options] source dest ??mv [options] source... directory ??說明:將一個檔案移至另一檔案,或將數個檔案移至另一目錄。 ??參數:-i 若目的地已有同名檔案,則先詢問是否覆蓋舊檔。 ??范例: ??將檔案 aaa 更名為 bbb : ??mv aaa bbb ??將所有的C語言程式移至 Finished 子目錄中 : ??mv -i *.c ??名稱:rm ??使用權限:所有使用者 ??使用方式:rm [options] name... ??說明:刪除檔案及目錄。 ??把計 ??-i 刪除前逐一詢問確認。 ??-f 即使原檔案屬性設為唯讀,亦直接刪除,無需逐一確認。 ??-r 將目錄及以下之檔案亦逐一刪除。 ??范例: ??刪除所有C語言程式檔;刪除前逐一詢問確認 : ??rm -i *.c ??rm -i *.c ??將 Finished 子目錄及子目錄中所有檔案刪除 : ??rm -r Finished ??名稱:rmdir ??使用權限:于目前目錄有適當權限的所有使用者 ??使用方式: rmdir [-p] dirName ??說明: 刪除空的目錄。 ??參數: -p 是當子目錄被刪除后使它也成為空目錄的話,則順便一并刪除。 ??范例: ??將工作目錄下,名為 AAA 的子目錄刪除 : ??rmdir AAA ??在工作目錄下的 BBB 目錄中,刪除名為 Test 的子目錄。若 Test 刪除后,BBB ??目錄成為空目錄,則 BBB 亦予刪除。 ??rmdir -p BBB/Test ??名稱:split ??使用權限:所有使用者 ??使用方式:split [OPTION] [INPUT [PREFIX]] ??說明: ??將一個檔案分割成數個。而從 INPUT 分割輸出成固定大小的檔案,其檔名依序為 ??PREFIXaa, PREFIXab...;PREFIX 預設值為 `x。若沒有 INPUT 檔或為 `-,則從 ??標準輸入讀進資料。 ??匡兜 ??-b, --bytes=SIZE ??-b, --bytes=SIZE ??SIZE 值為每一輸出檔案的大小,單位為 byte。 ??-C, --line-bytes=SIZE ??每一輸出檔中,單行的最大 byte 數。 ??-l, --lines=NUMBER ??NUMBER 值為每一輸出檔的列數大小。 ??-NUMBER ??與 -l NUMBER 相同。 ??--verbose ??于每個輸出檔被開啟前,列印出偵錯資訊到標準錯誤輸出。 ??--help ??顯示輔助資訊然后離開。 ??--version ??列出版本資訊然后離開。 ??SIZE 可加入單位: b 代表 512, k 代表 1K, m 代表 1 Meg。 ??范例: ??PostgresSQL 大型資料庫備份與回存: ??因 Postgres 允許表格大過你系統檔案的最大容量,所以要將表格 dump 到單一 ??的檔案可能會有問題,使用 split進行檔案分割。 ??% pg_dump dbname | split -b 1m - filename.dump. ??重新載入 ??% createdb dbname ??% cat filename.dump.* | pgsql dbname ??% cat filename.dump.* | pgsql dbname ??名稱:touch ??使用權限:所有使用者 ??使用方式: ??touch [-acfm] ??[-r reference-file] [--file=reference-file] ??[-t MMDDhhmm[[CC]YY][.ss]] ??[-d time] [--date=time] [--time={atime,access,use,mtime,modify}] ??[--no-create] [--help] [--version] ??file1 [file2 ...] ??說明: ??touch 指令改變檔案的時間記錄。 ls -l 可以顯示檔案的時間記錄。 ??參數: ??a 改變檔案的讀取時間記錄。 ??m 改變檔案的修改時間記錄。 ??c 假如目的檔案不存在,不會建立新的檔案。與 --no-create 的效果一樣。 ??f 不使用,是為了與其他 unix 系統的相容性而保留。 ??r 使用參考檔的時間記錄,與 --file 的效果一樣。 ??d 設定時間與日期,可以使用各種不同的格式。 ??t 設定檔案的時間記錄,格式與 date 指令相同。 ??--no-create 不會建立新檔案。 ??--help 列出指令格式。 ??--version 列出版本訊息。 ??--version 列出版本訊息。 ??范例: ??最簡單的使用方式,將檔案的時候記錄改為現在的時間。若檔案不存在,系統會 ??建立一個新的檔案。 ??touch file ??touch file1 file2 ??將 file 的時間記錄改為 5 月 6 日 18 點 3 分,公元兩千年。時間的格式可以 ??參考 date 指令,至少需輸入 MMDDHHmm ,就是月日時與分。 ??touch -c -t 05061803 file ??touch -c -t 050618032000 file ??將 file 的時間記錄改變成與 referencefile 一樣。 ??touch -r referencefile file ??將 file 的時間記錄改成 5 月 6 日 18 點 3 分,公元兩千年。時間可以使用 ??am, pm 或是 24 小時的格式,日期可以使用其他格式如 6 May 2000 。 ??touch -d "6:03pm" file ??touch -d "05/06/2000" file ??touch -d "6:03pm 05/06/2000" file ??名稱 : at ??使用權限 : 所有使用者 ??使用方式 : at -V [-q queue] [-f file] [-mldbv] TIME ??說明 : at 可以讓使用者指定在 TIME 這個特定時刻執行某個程式或指令,TIME ??的格式是 HH:MM其中的 HH 為小時,MM 為分鐘,甚至你也可以指定 am, pm, ??midnight, noon, teatime(就是下午 4 點鍾)等口語詞。 ??midnight, noon, teatime(就是下午 4 點鍾)等口語詞。 ??如果想要指定超過一天內的時間,則可以用 MMDDYY 或者 MM/DD/YY 的格式,其 ??中 MM 是分鐘,DD 是第幾日,YY 是指年份。另外,使用者甚至也可以使用像是 ??now + 時間間隔來彈性指定時間,其中的時間間隔可以是 minutes, hours, ??days, weeks ??另外,使用者也可指定 today 或 tomorrow 來表示今天或明天。當指定了時間并 ??按下 enter 之后,at 會進入交談模式并要求輸入指令或程式,當你輸入完后按 ??下 ctrl+D 即可完成所有動作,至于執行的結果將會寄回你的帳號中。 ??把計 : ??-V : 印出版本編號 ??-q : 使用指定的佇列(Queue)來儲存,at 的資料是存放在所謂的 queue 中,使 ??用者可以同時使用多個 queue,而 queue 的編號為 a, b, c... z 以及 A, B, ??... Z 共 52 個 ??-m : 即使程式/指令執行完成后沒有輸出結果, 也要寄封信給使用者 ??-f file : 讀入預先寫好的命令檔。使用者不一定要使用交談模式來輸入,可以 ??先將所有的指定先寫入檔案后再一次讀入 ??-l : 列出所有的指定 (使用者也可以直接使用 atq 而不用 at -l) ??-d : 刪除指定 (使用者也可以直接使用 atrm 而不用 at -d) ??-v : 列出所有已經完成但尚未刪除的指定 ??例子 : ??三天后的下午 5 點鍾執行 /bin/ls : ??at 5pm + 3 days /bin/ls ??三個星期后的下午 5 點鍾執行 /bin/ls : ??三個星期后的下午 5 點鍾執行 /bin/ls : ??at 5pm + 2 weeks /bin/ls ??明天的 17:20 執行 /bin/date : ??at 17:20 tomorrow /bin/date ??1999 年的最后一天的最后一分鐘印出 the end of world ! ??at 23:59 12/31/1999 echo the end of world ! ??名稱:cal ??使用權限:所有使用者 ??使用方式:cal [-mjy] [month [year]] ??說明: ??顯示日歷。若只有一個參數,則代表年份(1-9999),顯示該年的年歷。年份必須 ??全部寫出:``cal 89 將不會是顯示 1989 年的年歷。使用兩個參數,則表示月份 ??及年份。若沒有參數則顯示這個月的月歷。 ??1752 年 9 月第 3 日起改用西洋新歷,因這時大部份的國家都采用新歷,有 10 ??天被去除,所以該月份的月歷有些不同。在此之前為西洋舊歷。 ??匡兜 ??-m : 以星期一為每周的第一天方式顯示。 ??-j : 以凱撒歷顯示,即以一月一日起的天數顯示。 ??-y : 顯示今年年歷。 ??范例: ??cal : 顯示本月的月歷。 ??[root@mylinux /root]# date ??Tue Aug 15 08:00:18 CST 2000 ??Tue Aug 15 08:00:18 CST 2000 ??[root@mylinux /root]# cal ??August 2000 ??Su Mo Tu We Th Fr Sa ??1 2 3 4 5 ??6 7 8 9 10 11 12 ??13 14 15 16 17 18 19 ??20 21 22 23 24 25 26 ??27 28 29 30 31 ??[root@mylinux /root]# ??cal 2001 : 顯示公元 2001 年年歷。 ??[root@mylinux /root]# cal 2001 ??2001 ??January February March ??Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa ??1 2 3 4 5 6 1 2 3 1 2 3 ??7 8 9 10 11 12 13 4 5 6 7 8 9 10 4 5 6 7 8 9 10 ??14 15 16 17 18 19 20 11 12 13 14 15 16 17 11 12 13 14 15 16 17 ??21 22 23 24 25 26 27 18 19 20 21 22 23 24 18 19 20 21 22 23 24 ??28 29 30 31 25 26 27 28 25 26 27 28 29 30 31 ??April May June ??Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa ??1 2 3 4 5 6 7 1 2 3 4 5 1 2 ??1 2 3 4 5 6 7 1 2 3 4 5 1 2 ??8 9 10 11 12 13 14 6 7 8 9 10 11 12 3 4 5 6 7 8 9 ??15 16 17 18 19 20 21 13 14 15 16 17 18 19 10 11 12 13 14 15 16 ??22 23 24 25 26 27 28 20 21 22 23 24 25 26 17 18 19 20 21 22 23 ??29 30 27 28 29 30 31 24 25 26 27 28 29 30 ??July August September ??Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa ??1 2 3 4 5 6 7 1 2 3 4 1 ??8 9 10 11 12 13 14 5 6 7 8 9 10 11 2 3 4 5 6 7 8 ??15 16 17 18 19 20 21 12 13 14 15 16 17 18 9 10 11 12 13 14 15 ??22 23 24 25 26 27 28 19 20 21 22 23 24 25 16 17 18 19 20 21 22 ??29 30 31 26 27 28 29 30 31 23 24 25 26 27 28 29 ??30 ??October November December ??Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa ??1 2 3 4 5 6 1 2 3 1 ??7 8 9 10 11 12 13 4 5 6 7 8 9 10 2 3 4 5 6 7 8 ??14 15 16 17 18 19 20 11 12 13 14 15 16 17 9 10 11 12 13 14 15 ??21 22 23 24 25 26 27 18 19 20 21 22 23 24 16 17 18 19 20 21 22 ??28 29 30 31 25 26 27 28 29 30 23 24 25 26 27 28 29 ??30 31 ??[root@mylinux /root]# ??cal 5 2001 : 顯示公元 2001 年 5 月月歷。 ??cal 5 2001 : 顯示公元 2001 年 5 月月歷。 ??[root@mylinux /root]# cal 5 2001 ??May 2001 ??Su Mo Tu We Th Fr Sa ??1 2 3 4 5 ??6 7 8 9 10 11 12 ??13 14 15 16 17 18 19 ??20 21 22 23 24 25 26 ??27 28 29 30 31 ??[root@mylinux /root]# ??cal -m : 以星期一為每周的第一天方式,顯示本月的月歷。 ??[root@mylinux /root]# cal -m ??August 2000 ??Mo Tu We Th Fr Sa Su ??1 2 3 4 5 6 ??7 8 9 10 11 12 13 ??14 15 16 17 18 19 20 ??21 22 23 24 25 26 27 ??28 29 30 31 ??[root@mylinux /root]# ??cal -jy : 以一月一日起的天數顯示今年的年歷。 ??[root@mylinux /root]# cal -jy ??2000 ??2000 ??January February ??Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat ??1 32 33 34 35 36 ??2 3 4 5 6 7 8 37 38 39 40 41 42 43 ??9 10 11 12 13 14 15 44 45 46 47 48 49 50 ??16 17 18 19 20 21 22 51 52 53 54 55 56 57 ??23 24 25 26 27 28 29 58 59 60 ??30 31 ??March April ??Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat ??61 62 63 64 92 ??65 66 67 68 69 70 71 93 94 95 96 97 98 99 ??72 73 74 75 76 77 78 100 101 102 103 104 105 106 ??79 80 81 82 83 84 85 107 108 109 110 111 112 113 ??86 87 88 89 90 91 114 115 116 117 118 119 120 ??121 ??May June ??Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat ??122 123 124 125 126 127 153 154 155 ??128 129 130 131 132 133 134 156 157 158 159 160 161 162 ??135 136 137 138 139 140 141 163 164 165 166 167 168 169 ??142 143 144 145 146 147 148 170 171 172 173 174 175 176 ??142 143 144 145 146 147 148 170 171 172 173 174 175 176 ??149 150 151 152 177 178 179 180 181 182 ?? |
|
||
名稱 : crontab ??使用權限 : 所有使用者 ??使用方式 : ??crontab [ -u user ] filecrontab [ -u user ] { -l | -r | -e } ??說明 : ??crontab 是用來讓使用者在固定時間或固定間隔執行程式之用,換句話說,也就 ??是類似使用者的時程表。-u user 是指設定指定 user 的時程表,這個前提是你 ??必須要有其權限(比如說是 root)才能夠指定他人的時程表。如果不使用 -u ??user 的話,就是表示設定自己的時程表。 ??餐數 : ??-e : 執行文字編輯器來設定時程表,內定的文字編輯器是 VI,如果你想用別的 ??文字編輯器,則請先設定 VISUAL 環境變數來指定使用那個文字編輯器(比如說 ??setenv VISUAL joe) ??-r : 刪除目前的時程表 ??-l : 列出目前的時程表 ??時程表的格式如下 : ??f1 f2 f3 f4 f5 program ??其中 f1 是表示分鐘,f2 表示小時,f3 表示一個月份中的第幾日,f4 表示月份 ??,f5 表示一個星期中的第幾天。program 表示要執行的程式。 ??,f5 表示一個星期中的第幾天。program 表示要執行的程式。 ??當 f1 為 * 時表示每分鐘都要執行 program,f2 為 * 時表示每小時都要執行程 ??式,其余類推 ??當 f1 為 a-b 時表示從第 a 分鐘到第 b 分鐘這段時間內要執行,f2 為 a-b 時 ??表示從第 a 到第 b 小時都要執行,其余類推 ??當 f1 為 */n 時表示每 n 分鐘個時間間隔執行一次,f2 為 */n 表示每 n 小時 ??個時間間隔執行一次,其余類推 ??當 f1 為 a, b, c,... 時表示第 a, b, c,... 分鐘要執行,f2 為 a, b, ??c,... 時表示第 a, b, c...個小時要執行,其余類推 ??使用者也可以將所有的設定先存放在檔案 file 中,用 crontab file 的方式來 ??設定時程表。 ??例子 : ??每月每天每小時的第 0 分鐘執行一次 /bin/ls : ??0 7 * * * /bin/ls ??在 12 月內, 每天的早上 6 點到 12 點中,每隔 20 分鐘執行一次 ??/usr/bin/backup : ??0 6-12/3 * 12 * /usr/bin/backup ??周一到周五每天下午 5:00 寄一封信給 alex@domain.name : ??0 17 * * 1-5 mail -s "hi" alex@domain.name < /tmp/maildata ??每月每天的午夜 0 點 20 分, 2 點 20 分, 4 點 20 分....執行 echo "haha" ??20 0-23/2 * * * echo "haha" ??注意 : ??當程式在你所指定的時間執行后,系統會寄一封信給你,顯示該程式執行的內容 ??當程式在你所指定的時間執行后,系統會寄一封信給你,顯示該程式執行的內容 ??,若是你不希望收到這樣的信,請在每一行空一格之后加上 > /dev/null 2>&1 ??即可。 ??名稱 : date ??使用權限 : 所有使用者 ??使用方式 : ??date [-u] [-d datestr] [-s datestr] [--utc] [--universal] ??[--date=datestr] [--set=datestr] [--help] [--version] [+FORMAT] ??[MMDDhhmm[[CC]YY][.ss]] ??說明 : ??date 可以用來顯示或設定系統的日期與時間,在顯示方面,使用者可以設定欲顯 ??示的格式,格式設定為一個加號后接數個標記,其中可用的標記列表如下 : ??時間方面 : ??% : 印出 % ??%n : 下一行 ??%t : 跳格 ??%H : 小時(00..23) ??%I : 小時(01..12) ??%k : 小時(0..23) ??%l : 小時(1..12) ??%M : 分鐘(00..59) ??%p : 顯示本地 AM 或 PM ??%r : 直接顯示時間 (12 小時制,格式為 hh:mm:ss [AP]M) ??%r : 直接顯示時間 (12 小時制,格式為 hh:mm:ss [AP]M) ??%s : 從 1970 年 1 月 1 日 00:00:00 UTC 到目前為止的秒數 ??%S : 秒(00..61) ??%T : 直接顯示時間 (24 小時制) ??%X : 相當于 %H:%M:%S ??%Z : 顯示時區 ??日期方面 : ??%a : 星期幾 (Sun..Sat) ??%A : 星期幾 (Sunday..Saturday) ??%b : 月份 (Jan..Dec) ??%B : 月份 (January..December) ??%c : 直接顯示日期與時間 ??%d : 日 (01..31) ??%D : 直接顯示日期 (mm/dd/yy) ??%h : 同 %b ??%j : 一年中的第幾天 (001..366) ??%m : 月份 (01..12) ??%U : 一年中的第幾周 (00..53) (以 Sunday 為一周的第一天的情形) ??%w : 一周中的第幾天 (0..6) ??%W : 一年中的第幾周 (00..53) (以 Monday 為一周的第一天的情形) ??%x : 直接顯示日期 (mm/dd/yy) ??%y : 年份的最后兩位數字 (00.99) ??%Y : 完整年份 (0000..9999) ??%Y : 完整年份 (0000..9999) ??若是不以加號作為開頭,則表示要設定時間,而時間格式為 ??MMDDhhmm[[CC]YY][.ss],其中 MM 為月份,DD 為日,hh 為小時,mm 為分鐘 ??,CC 為年份前兩位數字,YY 為年份后兩位數字,ss 為秒數 ??把計 : ??-d datestr : 顯示 datestr 中所設定的時間 (非系統時間) ??--help : 顯示輔助訊息 ??-s datestr : 將系統時間設為 datestr 中所設定的時間 ??-u : 顯示目前的格林威治時間 ??--version : 顯示版本編號 ??例子 : ??顯示時間后跳行,再顯示目前日期 : ??date +%T%n%D ??顯示月份與日數 : ??date +%B %d ??顯示日期與設定時間(12:34:56) : ??date --date 12:34:56 ??注意 : ??當你不希望出現無意義的 0 時(比如說 1999/03/07),則可以在標記中插入 - 符 ??號,比如說 date +%-H:%-M:%-S 會把時分秒中無意義的 0 給去掉,像是原本的 ??08:09:04 會變為 8:9:4。另外,只有取得權限者(比如說 root)才能設定系統時 ??間。 ??當你以 root 身分更改了系統時間之后,請記得以 clock -w 來將系統時間寫入 ??當你以 root 身分更改了系統時間之后,請記得以 clock -w 來將系統時間寫入 ??CMOS 中,這樣下次重新開機時系統時間才會持續抱持最新的正確值。 ??名稱 : sleep ??使用權限 : 所有使用者 ??使用方式 : sleep [--help] [--version] number[smhd] ??說明 : sleep 可以用來將目前動作延遲一段時間 ??參數說明 : ??--help : 顯示輔助訊息 ??--version : 顯示版本編號 ??number : 時間長度,后面可接 s、m、h 或 d ??其中 s 為秒,m 為 分鐘,h 為小時,d 為日數 ??例子 : ??顯示目前時間后延遲 1 分鐘,之后再次顯示時間 : ??date;sleep 1m;date ??名稱: time ??使用權限: 所有使用者 ??使用方式: time [options] COMMAND [arguments] ??說明: time 指令的用途,在于量測特定指令執行時所需消耗的時間及系統資源 ??等資訊。例如 CPU 時間、記憶體、輸入輸出等等。需要特別注意的是,部分資訊 ??在 Linux 上顯示不出來。這是因為在 Linux 上部分資源的分配函式與 time 指 ??令所預設的方式并不相同,以致于 time 指令無法取得這些資料。 ??把計 ??-o or --output=FILE ??-o or --output=FILE ??設定結果輸出檔。這個選項會將 time 的輸出寫入 所指定的檔案中。如果檔案已 ??經存在,系統將覆寫其內容。 ??-a or --append ??配合 -o 使用,會將結果寫到檔案的末端,而不會覆蓋掉原來的內容。 ??-f FORMAT or --format=FORMAT ??以 FORMAT 字串設定顯示方式。當這個選項沒有被設定的時候,會用系統預設的 ??格式。不過你可以用環境變數 time 來設定這個格式,如此一來就不必每次登入 ??系統都要設定一次。 ??一般設定上,你可以用 ??t ??表示跳欄,或者是用 ??n ??表示換行。每一項資料要用 % 做為前導。如果要在字串中使用百分比符號,就用 ??。(學過 C 語言的人大概會覺得很熟悉) ??time 指令可以顯示的資源有四大項,分別是: ??Time resources ??Memory resources ??IO resources ??Command info ??詳細的內容如下: ??Time Resources ??E 執行指令所花費的時間,格式是:[hour]:minute:second。請注意這個數字并 ??E 執行指令所花費的時間,格式是:[hour]:minute:second。請注意這個數字并 ??不代表實際的 CPU 時間。 ??e 執行指令所花費的時間,單位是秒。請注意這個數字并不代表實際的 CPU 時間 ??。 ??S 指令執行時在核心模式(kernel mode)所花費的時間,單位是秒。 ??U 指令執行時在使用者模式(user mode)所花費的時間,單位是秒。 ??P 執行指令時 CPU 的占用比例。其實這個數字就是核心模式加上使用者模式的 ??CPU 時間除以總時間。 ??Memory Resources ??M 執行時所占用的實體記憶體的最大值。單位是 KB ??t 執行時所占用的實體記憶體的平均值,單位是 KB ??K 執行程序所占用的記憶體總量(stack+data+text)的平均大小,單位是 KB ??D 執行程序的自有資料區(unshared data area)的平均大小,單位是 KB ??p 執行程序的自有堆疊(unshared stack)的平均大小,單位是 KB ??X 執行程序間共享內容(shared text)的平均值,單位是 KB ??Z 系統記憶體頁的大小,單位是 byte。對同一個系統來說這是個常數 ??IO Resources ??F 此程序的主要記憶體頁錯誤發生次數。所謂的主要記憶體頁錯誤是指某一記憶 ??體頁已經置換到置換檔(swap file)中,而且已經分配給其他程序。此時該頁的 ??內容必須從置換檔里再讀出來。 ??R 此程序的次要記憶體頁錯誤發生次數。所謂的次要記憶體頁錯誤是指某一記憶 ??體頁雖然已經置換到置換檔中,但尚未分配給其他程序。此時該頁的內容并未被 ??破壞,不必從置換檔里讀出來 ??破壞,不必從置換檔里讀出來 ??W 此程序被交換到置換檔的次數 ??c 此程序被強迫中斷(像是分配到的 CPU 時間耗盡)的次數 ??w 此程序自愿中斷(像是在等待某一個 I/O 執行完畢,像是磁碟讀取等等)的次 ??數 ??I 此程序所輸入的檔案數 ??O 此程序所輸出的檔案數 ??r 此程序所收到的 Socket Message ??s 此程序所送出的 Socket Message ??k 此程序所收到的信號 ( Signal )數量 ??Command Info ??C 執行時的參數以及指令名稱 ??x 指令的結束代碼 ( Exit Status ) ??-p or --portability ??這個選項會自動把顯示格式設定成為: ??real %e ??user %U ??sys %S ??這么做的目的是為了與 POSIX 規格相容。 ??-v or --verbose ??這個選項會把所有程式中用到的資源通通列出來,不但如一般英文語句,還有說 ??明。對不想花時間去熟習格式設定或是剛剛開始接觸這個指令的人相當有用。 ??范例: ??范例: ??利用下面的指令 ??time -v ps -aux ??我們可以獲得執行 ps -aux 的結果和所花費的系統資源。如下面所列的資料: ??USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND ??root 1 0.0 0.4 1096 472 ? S Apr19 0:04 init ??root 2 0.0 0.0 0 0 ? SW Apr19 0:00 [kflushd] ??root 3 0.0 0.0 0 0 ? SW Apr19 0:00 [kpiod] ??...... ??root 24269 0.0 1.0 2692 996 pts/3 R 12:16 0:00 ps -aux ??Command being timed: "ps -aux" ??User time (seconds): 0.05 ??System time (seconds): 0.06 ??Percent of CPU this job got: 68% ??Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.16 ??Average shared text size (kbytes): 0 ??Average unshared data size (kbytes): 0 ??Average stack size (kbytes): 0 ??Average total size (kbytes): 0 ??Maximum resident set size (kbytes): 0 ??Average resident set size (kbytes): 0 ??Major (requiring I/O) page faults: 238 ??Minor (reclaiming a frame) page faults: 46 ??Minor (reclaiming a frame) page faults: 46 ??Voluntary context switches: 0 ??Involuntary context switches: 0 ??Swaps: 0 ??File system inputs: 0 ??File system outputs: 0 ??Socket messages sent: 0 ??Socket messages received: 0 ??Signals delivered: 0 ??Page size (bytes): 4096 ??Exit status: 0 ??名稱: uptime ??使用權限: 所有使用者 ??使用方式: uptime [-V] ??說明: uptime 提供使用者下面的資訊,不需其他參數: ??現在的時間 ??系統開機運轉到現在經過的時間 ??連線的使用者數量 ??最近一分鐘,五分鐘和十五分鐘的系統負載 ??參數: -V 顯示版本資訊。 ??范例: uptime ??其結果為: ??10:41am up 5 days, 10 min, 1 users, load average: 0.00, 0.00, 1.99 ??10:41am up 5 days, 10 min, 1 users, load average: 0.00, 0.00, 1.99 ??名稱:chfn ??使用權限:所有使用者 ??用法:shell>> chfn ??說明:提供使用者更改個人資訊,用于 finger and mail username ??范例: ??shell>> chfn ??Changing finger information for user ??Password: [del] ??Name[]:Johnney Huang ### 提供 finger 時的資料 ??Office[]:NCCU ??Office Phone[]: [del] ??Home Phone[]: [del] ??名稱:chsh ??使用權限:所有使用者 ??用法:shell>> chsh ??說明:更改使用者 shell 設定 ??范例: ??shell>> chsh ??Changing fihanging shell for user1 ??Password: [del] ??New shell [/bin/tcsh]: ### [是目前使用的 shell] ??[del] ??[del] ??shell>> chsh -l ### 展示 /etc/shells 檔案內容 ??/bin/bash ??/bin/sh ??/bin/ash ??/bin/bsh ??/bin/tcsh ??/bin/csh ??名稱: finger ??使用權限: 所有使用者 ??使用方式: finger [options] user[@address] ??說明:finger 可以讓使用者查詢一些其他使用者的資料。會列出來的資料有: ??Login Name ??User Name ??Home directory ??Shell ??Login status ??mail status ??.plan ??.project ??.forward ??其中 .plan ,.project 和 .forward 就是使用者在他的 Home Directory 里的 ??其中 .plan ,.project 和 .forward 就是使用者在他的 Home Directory 里的 ??.plan , .project 和 .forward 等檔案里的資料。如果沒有就沒有。finger 指 ??令并不限定于在同一伺服器上查詢,也可以尋找某一個遠端伺服器上的使用者。 ??只要給一個像是 E-mail address 一般的地址即可。 ??把計 ??-l ??多行顯示。 ??-s ??單行顯示。這個選項只顯示登入名稱,真實姓名,終端機名稱,閑置時間,登入 ??時間,辦公室號碼及電話號碼。如果所查詢的使用者是遠端伺服器的使用者,這 ??個選項無效。 ??范例:下列指令可以查詢本機管理員的資料: ??finger root ??其結果如下: ??Login: root Name: root ??Directory: /root Shell: /bin/bash ??Never logged in. ??No mail. ??No Plan. ??名稱:last ??使用權限:所有使用者 ??使用方式:shell>> last [options] ??說明:顯示系統開機以來獲是從每月初登入者的訊息 ??說明:顯示系統開機以來獲是從每月初登入者的訊息 ??把計 ??-R 省略 hostname 的欄位 ??-num 展示前 num 個 ??username 展示 username 的登入訊息 ??tty 限制登入訊息包含終端機代號 ??范例: ??shell>> last -R -2 ??johnney pts/1 Mon Aug 14 20:42 still logged in ??johnney pts/0 Mon Aug 14 19:59 still logged in ??wtmp begins Tue Aug 1 09:01:10 2000 ### /var/log/wtmp ??shell>> last -2 minery ??minery pts/0 140.119.217.115 Mon Aug 14 18:37 - 18:40 (00:03) ??minery pts/0 140.119.217.115 Mon Aug 14 17:22 - 17:24 (00:02) ??wtmp begins Tue Aug 1 09:01:10 2000 ??名稱:login ??這個命令都不會就不要干算了!呵呵我也不在這里多費筆墨耽誤大家美好青春了^_^ ??名稱:passwd ??使用權限:所有使用者 ??使用方式:passwd [-k] [-l] [-u [-f]] [-d] [-S] [username] ??說明:用來更改使用者的密碼 ??參數: ??參數: ??-k ??-l ??-u ??-f ??-d 關閉使用者的密碼認證功能, 使用者在登入時將可以不用輸入密碼, 只有具備 ??root 權限的使用者方可使用. ??-S 顯示指定使用者的密碼認證種類, 只有具備 root 權限的使用者方可使用. ??[username] 指定帳號名稱. ??名稱 : who ??使用權線 : 所有使用者都可使用 ??使用方式 : who - [husfV] [user] ??說明 : 顯示系統中有那些使用者正在上面,顯示的資料包含了使用者 ID,使用 ??的終端機,從那邊連上來的,上線時間,呆滯時間,CPU 使用量,動作等等。 ??把計 : ??-h : 不要顯示標題列 ??-u : 不要顯示使用者的動作/工作 ??-s : 使用簡短的格式來顯示 ??-f : 不要顯示使用者的上線位置 ??-V : 顯示程式版本 ??名稱:/etc/aliases ??使用權限:系統管理者 ??使用方式: 請用 newaliases 更新資料庫 ??說明: ??sendmail 會使用一個在 /etc/aliases 中的檔案做使用者名稱轉換的動作。當 ??sendmail 收到一個要送給 xxx 的信時,它會依據 aliases檔的內容送給另一個 ??使用者。這個功能可以創造一個只有在信件系統內才有效的使用者。例如 ??mailing list 就會用到這個功能,在 mailinglist 中,我們可能會創造一個叫 ??redlinux@link.ece.uci.edu 的 mailinglist,但實際上并沒有一個叫 ??redlinux 的使用者。實際 aliases 檔的內容是將送給這個使用者的信都收給 ??mailing list 處理程式負責分送的工作。 ??/etc/aliases 是一個文字模式的檔案,sendmail 需要一個二進位格式的 ??/etc/aliases.db。newaliases 的功能傳是將 /etc/aliases 轉換成一個 ??sendmail 所能了解的資料庫。范例: ??# newaliases ??下面命令會做相同的事, ??# sendmail -bi ??相關命令: ??mail, mailq, newaliases, sendmail ?? |
|
||
名稱:mail ??使用權限:所有使用者 ??使用方式:mail [-iInv] [-s subject] [-c cc-addr] [-b bcc-addr] user1 ??[user 2 ...] ??說明: ??說明: ??mail 不僅只是一個指令, mail 還是一個電子郵件程式,不過利用 mail 來讀信 ??的人應該很少吧!對于系統管理者來說 mail 就很有用,因為管理者可以用 ??mail 寫成 script ,定期寄一些備忘錄提醒系統的使用者。 ??參數: ??i 忽略 tty 的中斷訊號。 (interrupt) ??I 強迫設成互動模式。 (Interactive) ??v 列印出訊息,例如送信的地點、狀態等等。 (verbose) ??n 不讀入 mail.rc 設定檔。 ??s 郵件標題。 ??c cc 郵件地址。 ??b bcc 郵件地址。 ??范例: ??將信件送給一個或以上的電子郵件地址,由于沒有加入其他的選項,使用者必須 ??輸入標題與信件的內容等。而 user2 沒有主機位置,就會送給郵件伺服器的 ??user2 使用者。 ??mail user1@email.address ??mail user1@email.address user2 ??將 mail.txt 的內容寄給 user2 同時 cc 給 user1 。如果將這一行指令設成 ??cronjob 就可以定時將備忘錄寄給系統使用者。 ??mail -s 標題 -c user1 user2 < mail.txt ??指令:mesg ??使用權限 : 所有使用者 ??使用權限 : 所有使用者 ??使用方式 : mesg [y|n] ??說明 : 決定是否允許其他人傳訊息到自己的終端機介面 ??把計 ??y : 允許訊息傳到終端機介面上。 ??n : 不允許訊息傳到終端機介面上 。 ??如果沒有設定,則訊息傳遞與否則由終端機界面目前狀態而定。 ??例子 : ??改變目前訊息設定,改成不允許訊息傳到終端機介面上 : ??mesg n ??與 mesg 相關的指令有: talk,write,wall。 ??名稱 : talk ??使用權限 : 所有使用者 ??使用方式 : ??talk person [ttyname] ??說明 : 與其他使用者對談 ??把計 : ??person : 預備對談的使用者帳號,如果該使用者在其他機器上,則可輸入 ??person@machine.name ??ttyname : 如果使用者同時有兩個以上的 tty 連線,可以自行選擇合適的 tty ??傳訊息 ??例子.1 : ??與現在機器上的使用者Rollaend對談,此時 Rollaend 只有一個連線 : ??talk Rollaend ??接下來就是等Rollaend回應,若Rollaend接受,則Rollaend輸入 `talk jzlee`即 ??接下來就是等Rollaend回應,若Rollaend接受,則Rollaend輸入 `talk jzlee`即 ??可開始對談,結束請按 ctrl+c ??例子.2 :與linuxfab.cx上的使用者Rollaend對談,使用pts/2來對談 : ??talk Rollaend@linuxfab.cx pts/2 ??接下來就是等Rollaend回應,若Rollaend接受,則Rollaend輸入 `talk ??jzlee@jzlee.home`即可開始對談,結束請按 ctrl+c ??注意 : 若螢幕的字會出現不正常的字元,試著按 ctrl+l 更新螢幕畫面 |
|
||
名稱: tr ??### 1.比方說要把目錄下所有的大寫檔名換為小寫檔名? ??似乎有很多方式,"tr"是其中一種: ??#!/bin/sh ??dir="/tmp/testdir"; ??files=`find $dir -type f`; ??for i in $files ??do ??dir_name=`dirname $i`; ??ori_filename=`basename $i` ??new_filename=`echo $ori_filename | tr [:upper:] [:lower:]` > ??/dev/null; ??#echo $new_filename; ??mv $dir_name/$ori_filename $dir_name/$new_filename ??done ??### 2.自己試驗中...lowercase to uppercase ??tr abcdef...[del] ABCDE...[del] ??tr a-z A-Z ??tr [:lower:] [:upper:] ??shell>> echo "this is a test" | tr a-z A-Z > www ??shell>> echo "this is a test" | tr a-z A-Z > www ??shell>> cat www ??THIS IS A TEST ??### 3.去掉不想要的字串 ??shell>> tr -d this ### 去掉有關 t.e.s.t ??this ??man ??man ??test ??e ??### 4.取代字串 ??shell>> tr -s "this" "TEST" ??this ??TEST ??th ??TE ??指令:clear ??用途:清除螢幕用。 ??使用方法:在 console 上輸入 clear。 ??名稱: reset, tset ??使用方法: tset [-IQqrs] [-] [-e ch] [-i ch] [-k ch] [-m mapping] ??[terminal] ??使用說明: ??使用說明: ??reset 其實和 tset 是一同個命令,它的用途是設定終端機的狀態。一般而言, ??這個命令會自動的從環境變數、命令列或是其它的組態檔決定目前終端機的型態 ??。如果指定型態是 ? 的話,這個程式會要求使用者輸入終端機的型別。 ??由于這個程式會將終端機設回原始的狀態,除了在 login 時使用外,當系統終端 ??機因為程式不正常執行而進入一些奇怪的狀態時,你也可以用它來重設終端機o ??例如不小心把二進位檔用 cat 指令進到終端機,常會有終端機不再回應鍵盤輸入 ??,或是回應一些奇怪字元的問題。此時就可以用 reset 將終端機回復至原始狀態 ??。選項說明: ??-p ??將終端機類別顯示在螢幕上,但不做設定的動作。這個命令可以用來取得目前終 ??端機的類別。 ??-e ch ??將 erase 字元設成 ch ??-i ch ??將中斷字元設成 ch ??-k ch ??將刪除一行的字元設成 ch ??-I ??不要做設定的動作,如果沒有使用選項 -Q 的話,erase、中斷及刪除字元的目前 ??值依然會送到螢幕上。 ??-Q ??不要顯示 erase、中斷及刪除字元的值到螢幕上。 ??不要顯示 erase、中斷及刪除字元的值到螢幕上。 ??-r ??將終端機類別印在螢幕上。 ??-s ??將設定 TERM 用的命令用字串的型式送到終端機中,通常在 .login 或 ??.profile 中用 ??范例: ??讓使用者輸入一個終端機型別并將終端機設到該型別的預設狀態。 ??# reset ? ??將 erase 字元設定 control-h ??# reset -e ^B ??將設定用的字串顯示在螢幕上 ??# reset -s ??Erase is control-B (^B). ??Kill is control-U (^U). ??Interrupt is control-C (^C). ??TERM=xterm; ??名稱:compress ??使用權限:所有使用者 ??使用方式:compress [-dfvcV] [-b maxbits] [file ...] ??說明: ??compress 是一個相當古老的 unix 檔案壓縮指令,壓縮后的檔案會加上一個 .Z ??延伸檔名以區別未壓縮的檔案,壓縮后的檔案可以以 uncompress 解壓。若要將 ??延伸檔名以區別未壓縮的檔案,壓縮后的檔案可以以 uncompress 解壓。若要將 ??數個檔案壓成一個壓縮檔,必須先將檔案 tar 起來再壓縮。由于 gzip 可以產生 ??更理想的壓縮比例,一般人多已改用 gzip 為檔案壓縮工具。 ??參數: ??c 輸出結果至標準輸出設備(一般指熒幕) ??f 強迫寫入檔案,若目的檔已經存在,則會被覆蓋 (force) ??v 將程式執行的訊息印在熒幕上 (verbose) ??b 設定共同字串數的上限,以位元計算,可以設定的值為 9 至 16 bits 。由于 ??值越大,能使用的共同字串就 越多,壓縮比例就越大,所以一般使用預設值 16 ??bits (bits) ??d 將壓縮檔解壓縮 ??V 列出版本訊息 ??范例: ??將 source.dat 壓縮成 source.dat.Z ,若 source.dat.Z 已經存在,內容則會 ??被壓縮檔覆蓋。 ??compress -f source.dat ??將 source.dat 壓縮成 source.dat.Z ,并列印出壓縮比例。 ??-v 與 -f 可以一起使用 ??compress -vf source.dat ??將壓縮后的資料輸出后再導入 target.dat.Z 可以改變壓縮檔名。 ??compress -c source.dat > target.dat.Z ??-b 的值越大,壓縮比例就越大,范圍是 9-16 ,預設值是 16 。 ??compress -b 12 source.dat ??compress -b 12 source.dat ??將 source.dat.Z 解壓成 source.dat ,若檔案已經存在,使用者按 y 以確定覆 ??蓋檔案,若使用 -df 程式則會自動覆蓋檔案。由于系統會自動加入 .Z 為延伸檔 ??名,所以 source.dat 會自動當作 source.dat.Z 處理。 ??compress -d source.dat ??compress -d source.dat.Z ??名稱: lpd ??使用權限: 所有使用者 ??使用方式:lpd [-l] [#port] ??lpd 是一個常駐的印表機管理程式,它會根據 /etc/printcap 的內容來管理本地 ??或遠端的印表機。/etc/printcap 中定義的每一個印表機必須在 /var/lpd 中有 ??一個相對應的目錄,目錄中以 cf 開頭的檔案表示一個等待送到適當裝置的印表 ??工作。這個檔案通常是由 lpr 所產生。 ??lpr 和 lpd 組成了一個可以離線工作的系統,當你使用 lpr 時,印表機不需要 ??能立即可用,甚至不用存在。lpd 會自動監視印表機的狀況,當印表機上線后, ??便立即將檔案送交處理。這個得所有的應用程式不必等待印表機完成前一工作。 ??參數: ??-l: 將一些除錯訊息顯示在標準輸出上。 ??#port: 一般而言,lpd 會使用 getservbyname 取得適當的 TCP/IP port,你可 ??以使用這個參數強迫 lpd 使用指定的 port。 ??范例: ??這個程式通常是由 /etc/rc.d 中的程式在系統啟始階段執行。 ??名稱 lpq ??-- 顯示列表機貯列中未完成的工作 用法 ??lpq [l] [P] [user] ??說明 ??lpq 會顯示由 lpd 所管理的列表機貯列中未完成的項目。 ??范例 ??范例 1. 顯示所有在 lp 列表機貯列中的工作 ??# lpq -PlpRank Owner Job Files Total Size1st root 238 (standard input) ??1428646 bytes ??相關函數 ??lpr,lpc,lpd ??名稱: lpr ??使用權限: 所有使用者 ??使用方式:lpr [ -P printer ] ??將檔案或是由標準輸入送進來的資料送到印表機貯列之中,印表機管理程式 lpd ??會在稍后將這個檔案送給適當的程式或裝置處理。lpr 可以用來將料資送給本地 ??或是遠端的主機來處理。 ??參數: ??-p Printer: 將資料送至指定的印表機 Printer,預設值為 lp。 ??范例: ??將 www.c 和 kkk.c 送到印表機 lp。 ??lpr -Plp www.c kkk.c ??名稱: lprm ??名稱: lprm ??-- 將一個工作由印表機貯列中移除 用法 ??/usr/bin/lprm [P] [file...] ??說明 ??尚未完成的印表機工作會被放在印表機貯列之中,這個命令可用來將常未送到印 ??表機的工作取消。由于每一個印表機都有一個獨立的貯列,你可以用 -P 這個命 ??令設定想要作用的印列機。如果沒有設定的話,會使用系統預設的印表機。 ??這個命令會檢查使用者是否有足夠的權限刪除指定的檔案,一般而言,只有檔案 ??的擁有者或是系統管理員才有這個權限。 ??范例 ??將印表機 hpprinter 中的第 1123 號工作移除 ??lprm -Phpprinter 1123 ??將第 1011 號工作由預設印表機中移除 ??lprm 1011 ??名稱: fdformat ??使用權限: 所有使用者 ??使用方式:fdformat [-n] device ??使用說明 : ??對指定的軟碟機裝置進行低階格式化。使用這個指令對軟碟格式化的時候,最好 ??指定像是下面的裝置: ??/dev/fd0d360 磁碟機 A: ,磁片為 360KB 磁碟 ??/dev/fd0h1440 磁碟機 A: ,磁片為 1.4MB 磁碟 ??/dev/fd1h1200 磁碟機 B: ,磁片為 1.2MB 磁碟 ??/dev/fd1h1200 磁碟機 B: ,磁片為 1.2MB 磁碟 ??如果使用像是 /dev/fd0 之類的裝置,如果里面的磁碟不是標準容量,格式化可 ??能會失敗。在這種情況之下,使用者可以用 setfdprm 指令先行指定必要參數。 ??參數: ??-n 關閉確認功能。這個選項會關閉格式化之后的確認步驟。 ??范例: ??fdformat -n /dev/fd0h1440 ??將磁碟機 A 的磁片格式化成 1.4MB 的磁片。并且省略確認的步驟。 ??名稱: mformat ??使用權限: 所有使用者 ??使用方式: ??mformat [-t cylinders] [-h heads] [-s sectors] [-l volume_label] [-F] ??[-I fsVer-sion] [-S sizecode] [-2 sectors_on_track_0] [-M ??software_sector_size] [-a] [-X] [-C] [-H hidden_sectors] [-r ??root_sectors] [-B boot_sector] [-0 rate_on_track_0] [-A ??rate_on_other_tracks] [-1] [-k] drive: ??在已經做過低階格式化的磁片上建立 DOS 檔案系統。如果在編譯 mtools 的時候 ??把 USE_2M 的參數打開,部分與 2M 格式相關的參數就會發生作用。否則這些參 ??數(像是 S,2,1,M)不會發生作用。 ??參數: ??-t 磁柱(synlider)數 ??-h 磁頭(head)數 ??-s 每一磁軌的磁區數 ??-s 每一磁軌的磁區數 ??-l 標簽 ??-F 將磁碟格式化為 FAT32 格式,不過這個參數還在實驗中。 ??-I 設定 FAT32 中的版本號。這當然也還在實驗中。 ??-S 磁區大小代碼,計算方式為 sector = 2^(大小代碼+7) ??-c 磁叢(cluster)的磁區數。如果所給定的數字會導致磁叢數超過 FAT 表的限 ??制,mformat 會自動放大磁區數。 ??-s ??-M 軟體磁區大小。這個數字就是系統回報的磁區大小。通常是和實際的大小相同 ??。 ??-a 如果加上這個參數,mformat 會產生一組 Atari 系統的序號給這塊軟碟。 ??-X 將軟碟格式化成 XDF 格式。使用前必須先用 xdfcopy 指令對軟碟作低階格式 ??化的動作。 ??-C 產生一個可以安裝 MS-DOS 檔案系統的磁碟影像檔(disk image)。當然對一 ??個實體磁碟機下這個參數是沒有意義的。 ??-H 隱藏磁區的數目。這通常適用在格式化硬碟的分割區時,因為通常一個分割區 ??的前面還有分割表。這個參數未經測試,能不用就不用。 ??-n 磁碟序號 ??-r 根目錄的大小,單位是磁區數。這個參數只對 FAT12 和 FAT16 有效。 ??-B 使用所指定的檔案或是設備的開機磁區做為這片磁片或分割區的開機磁區。當 ??然當中的硬體參數會隨之更動。 ??-k 盡量保持原有的開機磁區。 ??-0 第 0 軌的資料傳輸率 ??-0 第 0 軌的資料傳輸率 ??-A 第 0 軌以外的資料傳輸率 ??-2 使用 2m 格式 ??-1 不使用 2m 格式 ??范例: ??mformat a: ??這樣會用預設值把 a: (就是 /dev/fd0)里的磁碟片格式化。 s? ?名稱: mkdosfs ??使用權限: 所有使用者 ??使用方式: mkdosfs [ -c | -l filename ] ??[ -f number_of_FATs ] ??[ -F FAT_size ] ??[ -i volume_id ] ??[ -m message_file ] ??[ -n volume_name ] ??[ -r root_dir_entry ] ??[ -s sector_per_cluster ] ??[ -v ] ??device ??[ block_count ] ??說明: 建立 DOS 檔案系統。 device 指你想要建立 DOS 檔案系統的裝置代號。 ??像是 /dev/hda1 等等。 block_count 則是你希望配置的區塊數。如果 ??block_count 沒有指定則系統會自動替你計算符合該裝置大小的區塊數。 ??block_count 沒有指定則系統會自動替你計算符合該裝置大小的區塊數。 ??參數: ??-c 建立檔案系統之前先檢查是否有壞軌。 ??-l 從得定的檔案中讀取壞軌記錄。 ??-f 指定檔案配置表(FAT , File Allocation Table)的數量。預設值為 2 。目 ??前 Linux 的 FAT 檔案系統不支援超過 2 個 FAT 表。通常這個不需要改。 ??-F 指定 FAT 表的大小,通常是 12 或是 16 個位元組。12 位元組通常用于磁碟 ??片,16 位元組用于一般硬碟的分割區,也就是所謂的 FAT16 格式。這個值通常 ??系統會自己選定適當的值。在磁碟片上用 FAT16 通常不會發生作用,反之在硬碟 ??上用 FAT12 亦然。 ??-i 指定 Volume ID。一般是一個 4 個位元組的數字,像是 2e203a47 。如果不 ??給系統會自己產生。 ??-m 當使用者試圖用這片磁片或是分割區開機,而上面沒有作業系統時,系統會給 ??使用者一段警告訊息。這個參數就是用來變更這個訊息的。你可以先用檔案編輯 ??好,然后用這個參數指定,或是用 ??-m - ??這樣系統會要求你直接輸入這段文字。要特別注意的是,檔案里的字串長度不要 ??超過 418 個字,包括展開的跳欄符號(TAB)和換行符號(換行符號在 DOS 底下 ??算兩個字元!) ??-n 指定 Volume Name,就是磁碟標簽。如同在 DOS 底下的 format 指令一樣, ??給不給都可以。沒有預設值。 ??-r 指定根目錄底下的最大檔案數。這里所謂的檔案數包括目錄。預設值是在軟碟 ??上是 112 或是 224 ,在硬碟上是 512。沒事不要改這個數字。 ??好,然后用這個參數指定,或是用 ??-s 每一個磁叢(cluster)的磁區數。必須是 2 的次方數。不過除非你知道你在 ??作什么,這個值不要亂給。 ??-v 提供額外的訊息 ??范例: ??mkdosfs -n Tester /dev/fd0 將 A 槽里的磁碟片格式化為 DOS 格式,并將標簽 ??設為 Tester |
|
||
Linux下硬盤分區基礎 什么是硬盤分區,分區用來做什么? 分區就是硬盤的“段落”。Windows分區有自己的盤符(C:,D:等等),這些分區看起來都好像是一個獨立的硬盤。 最簡單的情況下就是將整個硬盤作為一個唯一的分區。如果您購買了一臺已經預裝了window的機器,基本上都是這種情況。 如果您希望在機器上安裝更多的操作系統,將需要更多的分區。您更不能在這個單獨的分區里面再安裝linux。如果您要同時安裝Windows ME和 Windows2000,那么您將需要兩個分區。原因是不用的操作系統原則上采用不同的文件系統。如果幾個操作系統都支持相同的文件系統,通常為了避免在一個分區下有相同的系統目錄,也將他們安裝在不同的磁盤分區。 在Linux下是不同的情況,它本身又有更多的分區--比如,根分區 “/” 和交換分區“swap”。 提示:說的更清楚一點:您在安裝Linux時考慮的并不是windows分區下還有多少空間,因為windows分區下的空間Linux不能使用。您需要在Windows分區外建立新的分區。 分區類型 硬盤分區一共有三種:主分區,擴展分區和邏輯分區。 在一塊硬盤上最多只能有四個主分區。您可以另外建立一個擴展分區來代替四個主分區的其中一個,然后在擴展分區下您可以建立更多的邏輯分區。 擴展分區只不過是邏輯分區的“容器”。實際上只有主分區和邏輯分區進行數據存儲。 提示:Windows9x/ME下自帶的分區程序fdisk只能定義一個主分區。也就是說,在Windows9x/ME下您只能定義最多一個主分區,一個擴展分區和擴展分區下更多的邏輯分區。如果你想要使用更多的主分區,必須在Linux下進行分區。 分區和格式化 每個操作系統下都有自己的用來改變硬盤分區的工Windows9x/M下是非常有名的FDISK,在Windows NT/2000/XP中帶有一個非常方便的圖形界面的工具,他的位置在不同的Windows版本下也稍微有所不同(比如在2000下 控制面板—管理工具—計算機管理—磁盤管理)。在Linux下進行分區既可以使用FDISK,或者一個相同功能的圖形界面程序。 每個主分區和邏輯分區都回被存儲一個識別文件系統的附加信息。操作系統(Windows或者Linux等等)能通過這些信息非常容易的識別和確認,應該使用哪個分區。不能識別的操作系統分區將會被忽略。 通過分區當然不能產生任何文件系統。在分區之后只是對硬盤上的磁盤空間進行了保留,還不能直接使用。在此之后分區必須要進行格式化。在Windows下可以通過資源管理器下的文件菜單或者FOMATE程序來執行,在Linux下大多數情況下由mke2fs來完成。 提示:Linux支持不同的文件系統。應用最廣泛的是ext2。ext2就是有我們上面提到的mke2fs程序來建立的。Linux當然也支持reiserfs文件系統 注意:進行任何磁盤分區或大小的改動工作,都會丟失以前的數據。一次在分區直前一定要對數據進行備份。 Dos/Windows下的分區名稱 在Windows下操作系統使用的分區將用盤符來表示。A:和B:為軟驅保留,其他應盤上的主分區和邏輯分區將從C:開始依次排列。(擴展分區沒有任何盤符,而且是看不到的。在我indowsx下同樣也看不到Linux分區) 如果一臺機器有很多的硬盤,光驅,軟驅等,磁盤分區的命名將產生混亂。在這種情況下,第一塊硬盤上的主分區和邏輯分區將首先得到命名盤符;然后是第二塊,第三塊等等。比如您有三塊硬盤,每一快硬盤上同時又有一個主分區和兩個邏輯分區,那么第一塊硬盤的命名將是C:,F:,G:,第二塊為D:,H:,I:,第三塊為E:,J:,K:。 在WindowsNT/2000/XP下可以改變這些系統自動命名的名稱。比如你可以將一個光驅命名為X,這樣在添加新的分區的時候他的名稱就不會改變了。 陌生文件系統的分區將不會被命名,在大多數程序里面(比如資源管理器)是看不到的。、這些分區將只能在磁盤分區工具(Windows9x/ME下的FDISK,Win2000下的計算機管理-命令解釋器)下面顯示。 Linux下的分區名稱 Linux下的分區命名比Windows下面將更加清晰詳細,但是由此而來的名稱不容易記住。不同于Windows下的盤符,Linux通常采用設備-名稱(device-name)。一般的硬盤(比如IDE硬盤)將采用/dev/hdxy來命名。X表示硬盤(a是第一塊硬盤,b是第二塊硬盤,依次類推),y是分區的號碼(從0開始,1,2,3等等)。SCSI硬盤將用/dev/sdxy來命名。光驅(不管是IDE類型或者SCSI)將和硬盤一樣來命名。 提示:IDE(集成電路設備)和SCSI(小型計算機系統接口)是兩個目前最流行的連接計算機硬盤,光驅或者軟驅的系統。SCSI比IDE速度要快,但是同樣價錢也要貴一些。SCSI通常可以用于文件服務器和數據庫服務器。Linux支持這兩種系統(當然可以同時在一臺機器上擁有IDE和SCSI設備) IDE硬盤和光驅設備將由內部連接來區分區定。/dev/hda表示第一個IDE信道的第一個設備(master),/dev/hdb表示第一個IDE信道的第二個設備(slave)。按照這個原則,/dev/hdc和/dev/hdd為第二個IDE信道的master和slave設備。被命名為/dev/had和/dev/hdc的兩個設備在理論上是同樣可以的,在這里不使用/dev/hdb。(這種情況下,設備被作為master連接在第一和第二個IDE信道上) SCSI硬盤或者光驅設備依賴于設備的ID號碼,不考慮遺漏的ID號碼。比如三個SCSI設備的ID號碼分別是0,2,5,設備名稱分別是/dev/sda,/dev/sdb,/dev/sdc。如果現在再添加一個ID號碼為3的設備,那么這個設備將被以/dev/sdc來命名,ID號碼為5的設備將被稱為/dev/sdd。 分區的號碼不依賴于IDE或者SCSI設備的命名,號碼1到4位主分區或者擴展分區保留,從5開始才用來為邏輯分區命名。由于這個原因,經常會有號碼漏洞。(比如1,2,5,6,在這里3和4就是號碼漏洞)比如:第一塊硬盤的主分區為hda1,擴展分區為hda2,擴展分區下的一個邏輯分區為hda5。 下面還有一些例子幫助大家來理解 /dev/hda? ?? ?? ? 表示整個IDE硬盤 /dev/hda1? ?? ?? ?表示第一塊IDE硬盤的第一個主分區 /dev/hda2? ?? ?? ?表示第一塊IDE硬盤的擴展分區 /dev/hda5? ?? ?? ?表示第一塊IDE硬盤的第一個邏輯分區 /dev/hda8? ?? ?? ?表示第一塊IDE硬盤的第四個邏輯分區 /dev/hdb? ?? ?? ? 表示第二個IDE硬盤 /dev/hdb1? ?? ?? ?表示第二塊IDE硬盤的第一個主分區 /dev/sda? ?? ?? ???表示第一個SCSI硬盤 /dev/sda1? ?? ?? ? 表示第一個SCSI硬盤的第一個主分區 /dev/sdd3? ?? ?? ? 表示第四個SCSI硬盤的第三個主分區 |
|
||
本文介紹了Linux操作系統應用過程中12則經典技巧,合理應用這些技巧可以更好的使用Linux系統。 1、處理特殊的文件名 假設Linux系統中有一個文件名叫“-ee”,如果我們想對它進行操作,例如要刪除它,按照一般的刪除方法在命令行中輸入rm -ee命令,界面會提示我們是“無效選項”(invalid option),原來由于文件名的第一個字符為“-”,Linux把文件名當作選項了,我們可以使用“--”符號來解決這個問題,輸入“rm -- -ee”命令便可順利刪除名為“-ee”的文件。如果是其他特殊字符的話可以在特殊字符前加一個“”符號,或者用雙引號把整個文件名括起來。 2、直接進行Linux的安裝工作 在安裝Linux操作系統時,可以利用該系統光盤中的一個名為“loadlin.exe”的軟件,將Linux核心直接調入內存,由Linux核心代替當前操作系統來接管計算機,并進入Linux的安裝界面。在安裝Linux時,我們只要在運行對話框中輸入“loadlin E:imagesvmlinuz root=/dev/ram initrd=E:imagesinitrd.img”這個命令就可以直接安裝Linux了;其中“E:imagesvmlinuz”為Linux的核心名。 3、消除Xwindows下的死機現象 我們可以用兩個常用的方法來消除這種現象:第一,用鍵盤上的復合鍵“Ctrl+Alt+Backspace”來關閉當前正在運行的任務;第二,首先按住鍵盤上的“Ctrl+Alt+F2”復合鍵,讓系統切換到另一個操作臺,然后登錄到系統,再執行“#ps -ax/grep startx”命令,這將會列出你的Xserver的進程標識,接著在命令行中輸入如下命令就能消除Xwindows下的死機現象:#kill -9 PID_Number,最后通過“Alt+F1”復合鍵返回到原來的平臺。 4、快速關閉Linux系統 最新版本的Linux/UNIX系統借鑒了大型機的技術,采用了抗掉電的日志式文件系統,可以自動跟蹤保存用戶數據,自動同步刷新文件系統,用戶完全可以隨手關閉電源,從而達到快速關閉系統的目的。 5、巧妙使用“rm”命令 我們可以使用帶“-r”參數的“rm”命令來刪除一個非空目錄,例如我們在命令行中輸入“rm -r bbb”這樣的命令,表示系統將把bbb目錄中包含的所有文件和子目錄全部刪除掉。 6、巧妙使用“Tab”鍵 大家知道在Linux字符界面中輸入命令時,有時需要輸入很多字符,如果經常這樣逐個地輸入字符,比較麻煩。假設鍵入的字符足以確定該目錄下一個惟一的文件時,我們只需按鍵盤上的“Tab”鍵就可以自動補齊該文件名的剩下部分,例如要把目錄/ccc下的文件“ddddddd-1.2.3.tar.gz”解包時,當我們在命令行中鍵入到“tar xvfz /ccc/d”時,如果該文件是該目錄下惟一以“d”打頭的文件的話就可以直接按下“Tab”鍵,這時命令會被自動補齊為:tar xvfz /ccc/ddddddd-1.2.3.tar.gz ,從而提高了輸入效率。 7、多用鼠標拷貝與粘貼來提高操作速度 Linux系統安裝后,每次啟動到字符界面時都會自動運行一個叫“gpm”的程序,該程序運行后就可以用鼠標來拷貝與粘貼了。具體做法是按住鼠標左鍵拖動使要拷貝的地方突出顯示,這時突出顯示的區域已經被拷貝,再按鼠標右鍵拷貝的內容就會被粘貼在光標所在位置了。如果我們在Xwindow下運行Linux系統,拷貝與粘貼的操作與在Windows 9x系統下一樣。 8、快速啟動Linux系統 在DOS下,有一種簡單快速啟動Linux的方法,那就是load Linux。loadlin.exe是DOS下的可執行程序,它可以在純DOS環境下迅速啟動Linux,而且無需重啟計算機,通常我們可以在光盤的“/kernels”目錄下找到這個程序。如果不知這個程序被放置于安裝盤的何處,可以使用“find -name loadlin*”命令來尋找。找到之后將其復制到DOS分區中,同時還需要復制一份你所使用的Linux內核文件。可以通過Windows直接從光盤復制,也可在Linux環境下使用“mcopy”命令將文件復制到DOS分區;接著再編寫一個名為“Linux.bat”的批處理文件,文件內容如下:c:loadlin c:vmlinuz root=/dev/hda1 ro(我們假設loadlin.exe和vmlinuz這兩個內核文件都在c盤根目錄下,“root”為Linux的根設備,而且Linux處于硬盤第一分區,所以設備名為“/dev/hda1”,“ro”意為readonly)。以后在DOS下要啟動Linux時,運行“Linux.bat”就可以了。 9、增加虛擬緩存 使用命令:mkswap /dev/hda(假設Linux的驅動器是/dev/hda),swapon /dev/hda;要自動啟動Swap,可以把新的分區加入到etc/fstab中去,照著原來swap的寫就行了。用"free"檢查swap的大小,Linux支持最多16個交換分區,每個交換分區最大128M,沒有空閑 分區的時候,可以用個大文件來建立。 下面是執行的一系列命令: #dd if=/dev/zero of=swapfile bs=1024 count=8192 #mkswap swapfile 8192 #sync #swapon swapfile 10、巧妙使用Tab鍵 大家知道在Linux字符界面中輸入命令時,有時需要輸入很多字符,如果經常這樣逐個逐個地輸入字符,比較煩瑣。假設鍵入的字符足以確定目錄下一個唯一的文件時,我們只須按鍵盤上的Tab 鍵就可以自動補齊該文件名的剩下部分,例如要把目錄/ccc 下的文件ddddddd-1.2.3.tar.gz 解包時,當我們在命令行中鍵入到tar xvfz /ccc/d時,如果該文件是該目錄下唯一以d起頭的文件的話就可以直接按下鍵盤上的Tab鍵,這時命令會被自動補齊為:tar xvfz /ccc/ddddddd-1.2.3.tar.gz,從而提高了輸入效率。 11、多用拷貝與粘貼來提高操作速度 Linux系統安裝后,每次啟動到字符界面時都會自動運行一個叫gpm的程序,該程序運行后就可以用鼠標來拷貝與粘貼了。具體做法是按住鼠標左鍵拖動讓要拷貝的地方突出顯示,這時突出顯示的區域已經被拷貝, 再按鼠標右鍵拷貝的內容就會被粘貼在光標所在位置了。如果我們在Xwindow下運行Linux系統,拷貝與粘貼的操作與在普通的Win9x系統下一樣。 12、提高讀盤速度 在Linux下進行一些設置,讓Linux在32位輸入輸出方式和DMA通道方式下進行工作。設置時,在Linux命令界面中輸入命令/sbin/hdparm -cl /dev/hda來打開32bit傳輸方式,輸入命令/sbin/hdparm -dl /dev/hda來打開DMA傳輸方式,接著再輸入命令/sbin/hdparm -kl /dev/hda來使硬盤在Reset之后仍然保持上述的設置,通過這些設置,我們就能提高Linux的讀盤速度到1倍以上。?? |
|
||
? ?關于優化 ? ? 說起優化,其實最好的優化就是提升硬件的配置,例如提高cpu的運算能力,提高內存的容量,個人認為如果你考慮升級硬件的話,建議優先提高內存的容量,因為一般服務器應用,對內存的消耗使用要求是最高的。當然這都是題外話了。 ? ? 這里我們首要討論的,是在同等硬件配置下(同一臺服務器,不提升硬件的情況下)對你的系統進行優化。 ? ? 作為系統管理員,我認為,首先我們要明確一個觀點:在服務器上作任何操作,升級和修改任何配置文件或軟件,都必須首要考慮安全性,不是越新的東西就越好,這也是為什么linux管理感覺上和windows有所不同的地方,windows首先推薦大家去使用它的最新版本軟件和操作系統,其實我個人認為這是一種商業行為,作為從系統管理上來講,這是很不好的,使用新的軟件和系統可能帶來新的問題,有些甚至是致命的。 ? ? 因此,作為管理,我們還是應該考慮穩定的長期使用的軟件版本來作為我們的版本,具體的好處我就不多說了。相信作為管理員的你應該知道的。 ? ? 其實個人使用的linux最直接的一個優化就是升級內核,自己編譯的內核是根據自己的系統編譯而來,將得到最大的性能和最小的內核。 ? ? 但是,服務器就不太一樣了,當然我們也希望每一臺服務器都是自己手工編譯的內核,高效而精巧。但是實際和愿望是有差距的,試想一下,如果你管理100來臺linux主機,而每一臺也許配置都不一樣,那編譯內核的一個過程將是一個浩大工程,而且從實際考慮,工作量大得難以想象。我想你也不會愿意做這種事情吧。因此,個人建議,采用官方發布的內核升級包是很好的選擇。 ? ? 首先,我們對新安裝的系統,將做一系列升級,包括軟件和內核,這是很重要的步驟,(這方面的詳細情況歡迎察看我另一篇關于升級方面的文章)。 ? ? 在升級好所有軟件后,基本的_blank">防火墻和配置都做好以后,我們開始優化一些細節配置,如果你是老系統,那么在作本問題及的一些操作和優化你系統之前,務必被備份所有數據到其他介質。 ? ? 1、虛擬內存優化 ? ? 首先查看虛擬內存的使用情況,使用命令 # free ? ? 查看當前系統的內存使用情況。 ? ? 一般來說,linux的物理內存幾乎是完全used。這個和windows非常大的區別,它的內存管理機制將系統內存充分利用,并非windows無論多大的內存都要去使用一些虛擬內存一樣。這點需要注意。 ? ? Linux下面虛擬內存的默認配置通過命令 # cat /proc/sys/vm/freepages ? ? 可以查看,顯示的三個數字是當前系統的:最小內存空白頁、最低內存空白頁和最高內存空白。 ? ? 注意,這里系統使用虛擬內存的原則是:如果空白頁數目低于最高空白頁設置,則使用磁盤交換空間。當達到最低空白頁設置時,使用內存交換(注:這個是我查看一些資料得來的,具體應用時還需要自己觀察一下,不過這個不影響我們配置新的虛擬內存參數)。 ? ? 內存一般以每頁4k字節分配。最小內存空白頁設置是系統中內存數量的2倍;最低內存空白頁設置是內存數量的4倍;最高內存空白頁設置是系統內存的6倍。這些值在系統啟動時決定。 ? ? 一般來講在配置系統分配的虛擬內存配置上,我個人認為增大最高內存空白頁是一種比較好的配置方式,以1G的內存配置為例: ? ? 可將原來的配置比例修改為: 2048 4096 6444 ? ? 通過命令 # echo "2048 4096 6444" > /proc/sys/vm/freepages ? ? 因為增加了最高空白頁配置,那么可以使內存更有效的利用。 ? ? 2、硬盤優化 ? ? 如果你是scsi硬盤或者是ide陣列,可以跳過這一節,這節介紹的參數調整只針對使用ide硬盤的服務器。 ? ? 我們通過hdparm程序來設置IDE硬盤, ? ? 使用DMA和32位傳輸可以大幅提升系統性能。使用命令如下: # /sbin/hdparm -c 1 /dev/hda ? ? 此命令將第一個IDE硬盤的PCI總線指定為32位,使用 -c 0參數來禁用32位傳輸。 ? ? 在硬盤上使用DMA,使用命令: # /sbin/hdparm -d 1 /dev/hda ? ? 關閉DMA可以使用 -d 0的參數。 ? ? 更改完成后,可以使用hdparm來檢查修改后的結果,使用命令: # /sbin/hdparm -t /dev/had ? ? 為了確保設置的結果不變,使用命令:# /sbin/hdparm -k 1 /dev/hda ? ? Hdparm命令的一些常用的其他參數功能 ? ?? ?-g 顯示硬盤的磁軌,磁頭,磁區等參數。 ? ?? ?-i 顯示硬盤的硬件規格信息,這些信息是在開機時由硬盤本身所提供。 ? ?? ?-I 直接讀取硬盤所提供的硬件規格信息。 ? ?? ?-p 設定硬盤的PIO模式。 ? ?? ?-Tt 評估硬盤的讀取效率和硬盤快取的讀取效率。 ? ?? ?-u <0或1> 在硬盤存取時,允許其他中斷要求同時執行。 ? ?? ?-v 顯示硬盤的相關設定。 ? ? 3、其他優化 ? ? 關閉不需要的服務,關于系統自動啟動的服務,網上有很多資料,在此我就不贅述了; ? ? 關于安全 ? ? 1、安全檢查 ? ? 作為一個系統管理員來說,定期對系統作一次全面的安全檢查很重要的,最近遇到一些朋友來信說出現了一些莫名其妙的問題,例如最大的一個問題就是明顯感覺網絡服務緩慢,這極有可能是被攻擊的現象。 ? ? 實踐證明,無論是那種系統,默認安裝都是不安全的,實際不管你用windows也好,linux,bsd或其他什么系統,默認安裝的都有很多漏洞,那怎么才能成為安全的系統呢,這正是我們系統管理人員需要做的事情。配置配置再配置。 ? ? 任何系統,只要細心的配置,堵住已知的漏洞,可以說這個系統是安全的,其實并非很多朋友說的那樣,安裝了系統,配置了_blank">防火墻,安裝了殺毒軟件,那么就安全了,其實如果對系統不作任何安全設置,那就等于向黑客敞開一扇紙做的大門,數十分鐘就能完全控制! ? ? 這并非駭人聽聞。 ? ? 作為linux系統,同樣存在很多漏洞,黑可能利用這些漏洞控制你的整個系統,要防止這些問題,我們需要做以下步驟: ? ? 1、 升級系統中所有軟件包的最新版本; ? ? 2、 設置較為強壯的_blank">防火墻; ? ? 3、 定期檢查關鍵記錄文件,配置殺毒軟件 ? ? 4、 多關心一下發布安全信息警告的網站,掌握一些最新的病毒和黑客程序的特點,這些都利于系統的正常運作。 ? ? 這篇文章主要以優化為主,為了配合這一主題,安全部分我們只討論一下日常的一些維護工作。 ? ? 除了上面列出的4條是管理員必修之課外,對一些linux系統細節的維護也很重要。 ? ? 包括: ? ? 1、 配置日志輪訓工具,定期下載備份日志,是個非常好的習慣,這樣不但能減少日志的消耗的磁盤空間,提高系統效率,更能及時發現問題,linux下有些很好的系統日志分析器,能直接提取日志中的特殊項目,省去了閱讀日志的煩惱; ? ? 2、 使用命令lsof –i ,netstat –a ,ps –e等命令,定期檢查系統服務端口監聽等情況,也可制作一個定期執行的腳本,將這些命令定期執行后發到郵箱中; ? ? 3、 定期檢查root用戶的history列表,last列表,vipw用戶列表是否正常; ? ? 4、 定期備份文件,用tar命令就能很好的備份了,當然需要下載這些備份并轉移介質; ? ? 如一點發現有任何特別的沒見過的情況或端口,那么要引起足夠的重視,切勿因小失大。 ? ? 以上是我對linux系統安全和優化的一些淺顯認識,希望大家都能安全高效的使用linux為你的工作生活帶來方便。?? |
|
||
每一種操作系統都是由成千上萬個不同種類的文件所組成的。其中有系統本身自帶的文件,用戶自己的文件,還有共享文件等等。我們有時候經常忘記某份文件放在硬盤中的哪個地方。 在微軟的Windows操作系統中要查找一份文件是相當簡單的事情,只要在桌面上點擊“開始”-“搜索”中就能按照各種方式在本地硬盤上,局域網絡,甚至在INTERNET上查找各種文件,文檔。 可是使用Linux的用戶就沒有那么幸運了,在Linux上查找某個文件確實是一件比較麻煩的事情。畢竟在Linux中需要我們使用專用的“查找”命令來尋找在硬盤上的文件。Linux下的文件表達格式非常復雜,不象Windows,DOS下都是統一的AAAAAAA.BBB格式那么方便查找,在Windows中,只要知道要查找的文件的文件名或者后綴就非常容易查找到。Linux中查找文件的命令通常為“find”命令,“find”命令能幫助我們在使用,管理Linux的日常事務中方便的查找出我們需要的文件。對于Linux新手來說,“find”命令也是了解和學習Linux文件特點的方法。因為Linux發行版本繁多,版本升級很快,在Linux書籍上往往寫明某個配置文件的所在位置,往往Linux新手按圖索驥還是不能找到。比如說REDHAT Linux 7.O和REDHAT Linux 7.1中有些重要的配置文件所在的硬盤位置和文件目錄就有了很大的改變,如果不學會使用“find”命令,那么在成千上萬的Linux文件中要找到其中的一個配置文件是相當困難的,筆者在沒有精通“find”命令之前就吃過這樣的苦頭。好,下面就詳細為大家介紹強大的“find”命令的全部使用方法和用途。 通過文件名查找法: 這個方法說起來就和在WINDOWS下查找文件一樣容易理解了。如果你把這個文件放在單個的文件夾里面,只要使用常見的“ls"命令就能方便的查找出來,那么使用“find”命令來查找它就不能給你留下深刻的印象,畢竟“find”命令的強大功能不止這個。如果知道了某個文件的文件名,而不知道這個文件放到哪個文件夾,甚至是層層套嵌的文件夾里。舉例說明,假設你忘記了httpd.conf這個文件在系統的哪個目錄下,甚至在系統的某個地方也不知道,則這是可以使用如下命令: find / -name httpd.conf 這個命令語法看起來很容易就明白了,就是直接在find后面寫上 -name,表明要求系統按照文件名查找,最后寫上httpd.conf這個目標文件名即可。稍等一會系統會在計算機屏幕上顯示出查找結果列表: etc/httpd/conf/httpd.conf 這就是httpd.conf這個文件在Linux系統中的完整路徑。查找成功。 如果輸入以上查找命令后系統并沒有顯示出結果,那么不要以為系統沒有執行find/ -name httpd.conf命令,而可能是你的系統中沒有安裝Apache服務器,這時只要你安裝了Apache Web服務器,然后再使用find / -name httpd.conf就能找到這個配置文件了。 無錯誤查找技巧: 在Linux系統中“find”命令是大多數系統用戶都可以使用的命令,并不是ROOT系統管理員的專利。但是普通用戶使用“find”命令時也有可能遇到這樣的問題,那就是Linux系統中系統管理員ROOT可以把某些文件目錄設置成禁止訪問模式。這樣普通用戶就沒有權限用“find”命令來查詢這些目錄或者文件。當普通用戶使用“find”命令來查詢這些文件目錄是,往往會出現"Permissiondenied."(禁止訪問)字樣。系統將無法查詢到你想要的文件。為了避免這樣的錯誤,我們可是使用轉移錯誤提示的方法嘗試著查找文件,輸入 find / -name access_log 2>/dev/null 這個方法是把查找錯誤提示轉移到特定的目錄中去。系統執行這個命令后,遇到錯誤的信息就直接輸送到stderrstream 2 中,access_log 2就是表明系統將把錯誤信息輸送到stderrstream 2中,/dev/null是一個特殊的文件,表明空的或者錯誤的信息,這樣查詢到的錯誤信息將被轉移了,不會再顯示了。 在Linux系統查找文件也會遇到這樣一個實際問題。如果我們在整個硬盤,這個系統中查找某個文件就要花費相當長的一段時間,特別是大型Linux系統和容量較大的硬盤,文件放在套嵌很深的目錄中的時候。如果我們知道了這個文件存放在某個大的目錄中,那么只要在這個目錄中往下找就能節省很多時間了。使用find /etc -name httpd.conf 就可以解決這個問題。上面的命令就是表示在etc目錄中查詢httpd.conf這個文件。這里再說明一下“/ ”這個函數符號的含義,如果輸入 “find/ ”就是表示要求Linux系統在整個ROOT目錄下查找文件,也就是在整個硬盤上查找文件,而“find/etc”就是只在 etc目錄下查找文件。因為“find/etc”表示只在etc目錄下查找文件,所以查找的速度就相應要快很多了。 根據部分文件名查找方法: 這個方法和在WINDOWS中查找已知的文件名方法是一樣的。不過在Linux中根據部分文件名查找文件的方法要比在WINDOWS中的同類查找方法要強大得多。例如我們知道某個文件包含有srm這3個字母,那么要找到系統中所有包含有這3個字母的文件是可以實現的,輸入: find /etc -name *srm* 這個命令表明了Linux系統將在/etc整個目錄中查找所有的包含有srm這3個字母的文件,比如 absrmyz, tibc.srm等等符合條件的文件都能顯示出來。如果你還知道這個文件是由srm 這3個字母打頭的,那么我們還可以省略最前面的星號,命令如下: find/etc -name srm* 這是只有像srmyz 這樣的文件才被查找出來,象absrmyz或者 absrm這樣的文件都不符合要求,不被顯示,這樣查找文件的效率和可靠性就大大增強了。 根據文件的特征查詢方法: 如果只知道某個文件的大小,修改日期等特征也可以使用“find”命令查找出來,這和WINDOWS系統中的"搜索"功能是基本相同的。在微軟的"搜索"中WINDOWS中的"搜索助理"使得搜索文件和文件夾、打印機、用戶以及網絡中的其他計算機更加容易。它甚至使在Internet 上搜索更加容易。"搜索助理"還包括一個索引服務,該服務維護了計算機中所有文件的索引,使得搜索速度更快。使用"搜索助理"時,用戶可以指定多個搜索標準。例如,用戶可以按名稱、類型及大小搜索文件和文件夾。用戶甚至可以搜索包含特定文本的文件。如果用戶正使用 Active Directory,這時還可以搜索帶有特定名稱或位置的打印機。 例如我們知道一個Linux文件大小為1,500 bytes,那么我們可是使用如下命令來查詢find / -size 1500c,字符 c 表明這個要查找的文件的大小是以bytes為單位。如果我們連這個文件的具體大小都不知道,那么在Linux中還可以進行模糊查找方式來解決。例如我們輸入find/ -size +10000000c 這個命令,則標明我們指定系統在根目錄中查找出大于10000000字節的文件并顯示出來。命令中的“+”是表示要求系統只列出大于指定大小的文件,而使用“-”則表示要求系統列出小于指定大小的文件。下面的列表就是在Linux使用不同“ find"命令后系統所要作出的查找動作,從中我們很容易看出在Linux中使用“find"命令的方式是很多的,“ find"命令查找文件只要靈活應用,絲毫不必在WINDOWS中查找能力差。 find / -amin -10 # 查找在系統中最后10分鐘訪問的文件 find / -atime -2 # 查找在系統中最后48小時訪問的文件 find / -empty # 查找在系統中為空的文件或者文件夾 find / -group cat # 查找在系統中屬于 groupcat的文件 find / -mmin -5 # 查找在系統中最后5分鐘里修改過的文件 find / -mtime -1 #查找在系統中最后24小時里修改過的文件 find / -nouser #查找在系統中屬于作廢用戶的文件 find / -user fred #查找在系統中屬于FRED這個用戶的文件 下面的列表就是對find命令所可以指定文件的特征進行查找的部分條件。在這里并沒有列舉所有的查找條件,參考有關Linux有關書籍可以知道所有find命令的查找函數。 -amin n 查找系統中最后N分鐘訪問的文件 -atime n 查找系統中最后n*24小時訪問的文件 -cmin n 查找系統中最后N分鐘被改變狀態的文件 -ctime n 查找系統中最后n*24小時被改變狀態的文件 -empty 查找系統中空白的文件,或空白的文件目錄,或目錄中沒有子目錄的文件夾 -false 查找系統中總是錯誤的文件 -fstype type 查找系統中存在于指定文件系統的文件,例如:ext2 . -gid n 查找系統中文件數字組 ID 為 n的文件 -group gname 查找系統中文件屬于gnam文件組,并且指定組和ID的文件 Find命令的控制選項說明: Find命令也提供給用戶一些特有的選項來控制查找操作。下表就是我們總結出的最基本,最常用的find命令的控制選項及其用法。 選項 用途描述 -daystart 測試系統從今天開始24小時以內的文件,用法類似-amin -depth 使用深度級別的查找過程方式,在某層指定目錄中優先查找文件內容 -follow 遵循通配符鏈接方式查找; 另外,也可忽略通配符鏈接方式查詢 -help 顯示命令摘要 -maxdepth levels 在某個層次的目錄中按照遞減方法查找 -mount 不在文件系統目錄中查找, 用法類似 -xdev. -noleaf 禁止在非UNUX文件系統,MS-DOS系統,CD-ROM文件系統中進行最優化查找 -version 打印版本數字 使用-follow選項后,find命令則遵循通配符鏈接方式進行查找,除非你指定這個選項,否則一般情況下find命令將忽略通配符鏈接方式進行文件查找。 -maxdepth選項的作用就是限制find命令在目錄中按照遞減方式查找文件的時候搜索文件超過某個級別或者搜索過多的目錄,這樣導致查找速度變慢,查找花費的時間過多。例如,我們要在當前(.)目錄技巧子目錄中查找一個名叫fred的文件,我們可以使用如下命令 find . -maxdepth 2 -name fred 假如這個fred文件在./sub1/fred目錄中,那么這個命令就會直接定位這個文件,查找很容易成功。假如,這個文件在./sub1/sub2/fred目錄中,那么這個命令就無法查找到。因為前面已經給find命令在目錄中最大的查詢目錄級別為2,只能查找2層目錄下的文件。這樣做的目的就是為了讓find命令更加精確的定位文件,如果你已經知道了某個文件大概所在的文件目錄級數,那么加入-maxdepth n 就很快的能在指定目錄中查找成功。 使用混合查找方式查找文件 find命令可以使用混合查找的方法,例如我們想在/tmp目錄中查找大于100000000字節并且在48小時內修改的某個文件,我們可以使用-and 來把兩個查找選項鏈接起來組合成一個混合的查找方式。 find /tmp -size +10000000c -and -mtime +2 學習過計算機語言的朋友都知道,在計算機語言里,使用and ,or 分別表示“與”和“或”的關系。在Linux系統的查找命令中一樣通用。 還有這樣的例子, find / -user fred -or -user george 我們可以解釋為在/tmp目錄中查找屬于fred或者george這兩個用戶的文件。 在find命令中還可以使用“非”的關系來查找文件,如果我們要在/tmp目錄中查找所有不屬于panda的文件,使用一個簡單的 find /tmp ! -user panda 命令就可以解決了。很簡單。 查找并顯示文件的方法 查找到某個文件是我們的目的,我們更想知道查找到的文件的詳細信息和屬性,如果我們采取現查找文件,在使用LS命令來查看文件信息是相當繁瑣的,現在我們也可以把這兩個命令結合起來使用。 find / -name "httpd.conf" -ls 系統查找到httpd.conf文件后立即在屏幕上顯示httpd.conf文件信息。 12063 34 -rw-r--r-- 1 root root 33545 Dec 30 15:36 /etc/httpd/conf/httpd.conf 下面的表格就是一些常用的查找文件并顯示文件信息的參數和使用方法 選項 用途描述 -exec command 查找并執行命令 -fprint file 打印文件完整文件名 -fprint0 file 打印文件完整文件名包括空的文件 -fprintf file format 打印文件格式 -ok command 給用戶命令執行操作,根據用戶的Y 確認輸入執行 -printf format 打印文件格式 -ls 打印同種文件格式的文件 總結:到這里為止我們已經學習了這名多關于find命令的使用方法,也列出了很多常用的find命令的選項,如果我們能熟練掌握在Linux中find命令的使用方法,那么在Linux中查找文件也不是一件困難的事情。 |
|
||
隱藏技術在計算機系統安全中應用十分廣泛,尤其是在網絡攻擊中,當攻擊者成功侵入一個系統后,有效隱藏攻擊者的文件、進程及其加載的模塊變得尤為重要。本文將討論Linux系統中文件、進程及模塊的高級隱藏技術,這些技術有的已經被廣泛應用到各種后門或安全檢測程序之中,而有一些則剛剛起步,仍然處在討論階段,應用很少。 1.隱藏技術 1.1.Linux下的中斷控制及系統調用 Intel x86系列微機支持256種中斷,為了使處理器比較容易地識別每種中斷源,把它們從0~256編號,即賦予一個中斷類型碼n,Intel把它稱作中斷向量。 Linux用一個中斷向量(128或者0x80)來實現系統調用,所有的系統調用都通過唯一的入口system_call來進入內核,當用戶動態進程執行一條int 0x80匯編指令時,CPU就切換到內核態,并開始執行system_call函數,system_call函數再通過系統調用表sys_call_table來取得相應系統調用的地址進行執行。系統調用表sys_call_table中存放所有系統調用函數的地址,每個地址可以用系統調用號來進行索引,例如sys_call_table[NR_fork]索引到的就是系統調用sys_fork()的地址。 Linux用中斷描述符(8字節)來表示每個中斷的相關信息,其格式如下: 偏移量31….16 一些標志、類型碼及保留位 段選擇符 偏移量15….0 所有的中斷描述符存放在一片連續的地址空間中,這個連續的地址空間稱作中斷描述符表(IDT),其起始地址存放在中斷描述符表寄存器(IDTR)中,其格式如下: 32位基址值 界限 其中各個結構的相應聯系可以如下表示: 通過上面的說明可以得出通過IDTR寄存器來找到system_call函數地址的方法:根據IDTR寄存器找到中斷描述符表,中斷描述符表的第0x80項即是system_call函數的地址,這個地址將在后面的討論中應用到。 1.2.Linux 的LKM(可裝載內核模塊)技術 為了使內核保持較小的體積并能夠方便的進行功能擴展,Linux系統提供了模塊機制。模塊是內核的一部分,但并沒有被編譯進內核,它們被編譯成目標文件,在運行過程中根據需要動態的插入內核或者從內核中移除。由于模塊在插入后是作為Linux內核的一部分來運行的,所以模塊編程實際上就是內核編程,因此可以在模塊中使用一些由內核導出的資源,例如Linux2.4.18版以前的內核導出系統調用表(sys_call_table)的地址,這樣就可以根據該地址直接修改系統調用的入口,從而改變系統調用。在模塊編程中必須存在初始化函數及清除函數,一般情況下,這兩個函數默認為init_module()以及clearup_module(),從2.3.13內核版本開始,用戶也可以給這兩個函數重新命名,初始化函數在模塊被插入系統時調用,在其中可以進行一些函數及符號的注冊工作,清除函數則在模塊移除系統時進行調用,一些恢復工作通常在該函數中完成。 1.3.Linux下的內存映像 /dev/kmem是一個字符設備,是計算機主存的映像,通過它可以測試甚至修改系統,當內核不導出sys_call_table地址或者不允許插入模塊時可以通過該映像修改系統調用,從而實現隱藏文件、進程或者模塊的目的。 1.4.proc 文件系統 proc文件系統是一個虛擬的文件系統,它通過文件系統的接口實現,用于輸出系統運行狀態。它以文件系統的形式,為操作系統本身和應用進程之間的通信提供了一個界面,使應用程序能夠安全、方便地獲得系統當前的運行狀況何內核的內部數據信息,并可以修改某些系統的配置信息。由于proc以文件系統的接口實現,因此可以象訪問普通文件一樣訪問它,但它只存在于內存之中。 2.技術分析 2.1 隱藏文件 Linux系統中用來查詢文件信息的系統調用是sys_getdents,這一點可以通過strace來觀察到,例如strace ls 將列出命令ls用到的系統調用,從中可以發現ls是通過sys_getedents來執行操作的。當查詢文件或者目錄的相關信息時,Linux系統用sys_getedents來執行相應的查詢操作,并把得到的信息傳遞給用戶空間運行的程序,所以如果修改該系統調用,去掉結果中與某些特定文件的相關信息,那么所有利用該系統調用的程序將看不見該文件,從而達到了隱藏的目的。首先介紹一下原來的系統調用,其原型為: int sys_getdents(unsigned int fd, struct dirent *dirp,unsigned int count) 其中fd為指向目錄文件的文件描述符,該函數根據fd所指向的目錄文件讀取相應dirent結構,并放入dirp中,其中count為dirp中返回的數據量,正確時該函數返回值為填充到dirp的字節數。下圖是修改后的系統調用hacked_getdents執行流程。 圖中的hacked_getdents函數實際上就是先調用原來的系統調用,然后從得到的dirent結構中去除與特定文件名相關的文件信息,從而應用程序從該系統調用返回后將看不到該文件的存在。 應該注意的是,一些較新的版本中是通過sys_getdents64來查詢文件信息的,但其實現原理與sys_getdents基本相同,所以在這些版本中仍然可以用與上面類似的方法來修改該系統調用,隱藏文件。 2.2 隱藏模塊 上面分析了如何修改系統調用以隱藏特定名字的文件,在實際的處理中,經常會用模塊來達到修改系統調用的目的,但是當插入一個模塊時,若不采取任何隱藏措施,很容易被對方發現,一旦對方發現并卸載了所插入的模塊,那么所有利用該模塊來隱藏的文件就暴露了,所以應繼續分析如何來隱藏特定名字的模塊。Linux中用來查詢模塊信息的系統調用是sys_query_module,所以可以通過修改該系統調用達到隱藏特定模塊的目的。首先解釋一下原來的系統調用,原來系統調用的原型為: int sys_query_module(const char *name, int which, void *buf, size_t bufsize , size_t *ret) 如果參數name不空,則訪問特定的模塊,否則訪問的是內核模塊,參數which說明查詢的類型,當which=QM_MODULES時,返回所有當前已插入的模塊名稱,存入buff, 并且在ret中存放模塊的個數,buffsize是buf緩沖區的大小。在模塊隱藏的過程中只需要對which=QM_MODULES的情況進行處理就可以達到目的。修改后的系統調用工作過程如下: 1)調用原來的系統調用,出錯則返回錯誤代碼; 2)如果which不等于QM_MODULES,則不需要處理,直接返回。 3)從buf的開始位置進行處理,如果存在特定的名字,則將后面的模塊名稱向前覆蓋該名字。 4)重復3),直到處理處理完所有的名字,正確返回。 |