第一章 引言
shell 是和鍵盤打交道的,但你也可以在終端仿真器里使用鼠標。X 窗口系統(tǒng) (使 GUI 工作的底層引擎)內建了一種機制,支持快速拷貝和粘貼技巧。 如果你按下鼠標左鍵,沿著文本拖動鼠標(或者雙擊一個單詞)高亮了一些文本, 那么這些高亮的文本就被拷貝到了一個由 X 管理的緩沖區(qū)里面。然后按下鼠標中鍵, 這些文本就被粘貼到光標所在的位置。
第二章 : 什么是 shell
date 這個命令顯示系統(tǒng)當前時間和日期。
cal 它默認顯示當前月份的日歷。
df查看磁盤剩余空間的數量。
free 顯示空閑內存的數量。
要從一個虛擬控制臺轉換到另一個,按下 Ctrl-Alt-F1 到 Ctrl-Alt-F6 訪問。返回圖形桌面,按下 CtrlA-lt-F7。
第三章:文件系統(tǒng)中跳轉
pwd 打印出當前工作目錄名
cd更改目錄
ls列出目錄內容
符號 “.” 指的是工作目錄,”..” 指的是工作目錄的父目錄
cd ./bin在幾乎所有的情況下,可以省略”./”,它是隱含的輸入。如果不指定一個文件的路徑,那它被默認為在當前工作目錄下。
cd ..
當用戶以普通用戶的身份操控系統(tǒng)時,home目錄是唯一 允許用戶寫入文件的地方。
cd更改工作目錄到你的home目錄。
cd -更改工作目錄到先前的工作目錄。
cd ~user_name 更改工作目錄到用戶home目錄。例如, cd ~bob 會更改工作目錄到用戶“bob”的home目錄。
以 “.” 字符開頭的文件名是隱藏文件。這僅表示,ls 命令不能列出它們, 用ls -a命令就可以了。
第四章:探究操作系統(tǒng)
ls ~ /usr 列出多個指定目錄的內容。在這個例子中,將會列出用戶家目錄(用字符“~”代表)和/usr 目錄的內容。
ls -l 使用 ls 命令的“-l”選項,則結果以長模式輸出。
大多數命令使用的選項,是由一個中劃線加上一個字符組成,例如,“-l”,但是許多命令,包括來自于 GNU 項目的命令,也支持長選項,長選項由兩個中劃線加上一個字組成,如-a對應的長選項為--all。當然, 許多命令也允許把多個短選項串在一起使用。
ls -lt --reverse “l(fā)” 選項產生長格式輸出,“t”選項按文件修改時間的先后來排序。加上長選項 “–reverse”,則結果會以相反的順序輸出。
ls -d -l 把-d這個選項與 -l 選項結合使用,可以看到所指定目錄的詳細信息,而不是目錄中的內容。
ls -h -l 當以長格式列出時,以人們可讀的格式,而不是以字節(jié)數來顯示文件的大小。-S命令輸出結果按照文件大小來排序。 -t 按照修改時間來排序。
-rw-r--r-- 對于文件的訪問權限。第一個字符指明文件類型。在不同類型之間, 開頭的“-”說明是一個普通文件,“d”表明是一個目錄。其后三個字符是文件所有者的 訪問權限,再其后的三個字符是文件所屬組中成員的訪問權限,最后三個字符是其他所 有人的訪問權限。
file filename 確定文件類型,如file picture.jpg。
less filename 瀏覽文件內容,一旦 less 程序運行起來,我們就能瀏覽文件內容了。如果文件內容多于一頁,那么我們可以上下滾動文件。按下“q”鍵, 退出 less 程序。按下“h”鍵 顯示幫助屏幕。
在計算機中,數字可以 用來代表信息。畢竟,計算機只能理解數字,這樣所有的數據都被轉換成數值來表示,如ASCII 文本。文本只是包含 簡單的字符到數字的映射,是簡單的字符與數字之間的一對一映射。它和一些文字處理器文檔不一樣,比如說由微軟或 OpenOffice.org 文檔 編輯器創(chuàng)建的文件。這些文件,和簡單的 ASCII 文件形成鮮明對比,它們包含許多非文本元素,來描述它的結構和格式。 純 ASCII 文件只包含字符本身,和一些基本的控制符,像制表符、回車符及換行符。
符號鏈接:在大多數“類 Unix” 系統(tǒng)中, 有可能一個文件被多個文件名所指向。如 lrwxrwxrwx 1 root root 11 2007-08-11 07:34 libc.so.6 -> libc-2.6.so 第一個字符是“l(fā)”。這個符號鏈接指向一個 叫做 “l(fā)ibc-2.6.so” 的共享庫文件。這意味著,尋找文件 “l(fā)ibc.so.6” 的程序,實際上得到是文件 “l(fā)ibc-2.6.so”。比方說,我們安裝了文件 “foo” 的 2.6 版本,它的 文件名是 “foo-2.6”,然后創(chuàng)建了叫做 “foo” 的符號鏈接,這個符號鏈接指向 “foo-2.6”。 這意味著,當一個程序打開文件 “foo” 時,它實際上是打開文件 “foo-2.6”。 現在,每個人都很高興。依賴于 “foo” 文件的程序能找到這個文件,并且我們能知道安裝了哪個文件版本。 當升級到 “foo-2.7” 版本的時候,僅添加這個文件到文件系統(tǒng)中,刪除符號鏈接 “foo”, 創(chuàng)建一個指向新版本的符號鏈接。這不僅解決了版本升級問題,而且還允許在系統(tǒng)中保存兩個不同的文件版本。 假想 “foo-2.7” 有個錯誤(該死的開發(fā)者!),那我們得回到原來的版本。 一樣的操作,我們只需要刪除指向新版本的符號鏈接,然后創(chuàng)建指向舊版本的符號鏈接就可以了。
還有一種鏈接類型,叫做硬鏈接。硬鏈接同樣允許文件有多個名字, 但是硬鏈接以不同的方法來創(chuàng)建多個文件名。
第五章:操作文件和目錄
cp — 復制文件和目錄
mv— 移動/重命名文件和目錄
mkdir — 創(chuàng)建目錄
rm — 刪除文件和目錄
ln — 創(chuàng)建硬鏈接和符號鏈接
通配符
*匹配任意多個字符(包括零個或一個)
?匹配任意一個字符(不包括零個)
[characters] 匹配任意一個屬于字符集中的字符
[!characters] 匹配任意一個不是字符集中的字符
[[:class:]]匹配任意一個屬于指定字符類中的字符
最常使用的字符類:
[:alnum:] 匹配任意一個字母或數字
[:alpha:] 匹配任意一個字母
[:digit:] 匹配任意一個數字
[:lower:] 匹配任意一個小寫字母
[:upper:] 匹配任意一個大寫字母
一些類型匹配的范例:
- 所有文件
g* 文件名以“g”開頭的文件
b.txt 以"b"開頭,中間有零個或任意多個字符,并以".txt"結尾的文件
Data??? 以“Data”開頭,其后緊接著3個字符的文件
[abc] 文件名以"a","b",或"c"開頭的文件
BACKUP.[0-9][0-9][0-9] 以"BACKUP."開頭,并緊接著3個數字的文件
[[:upper:]]* 以大寫字母開頭的文件
[![:digit:]]* 不以數字開頭的文件
*[[:lower:]123] 文件名以小寫字母結尾,或以 “1”,“2”,或 “3” 結尾的文件
mkdir - 創(chuàng)建目錄
mkdir dir1 dir2 dir3會創(chuàng)建三個目錄,名為 dir1, dir2, dir3。
cp - 復制文件和目錄
cp file1 file2 dir1 復制文件 file1 和文件 file2 到目錄 dir1。目錄 dir1 必須存在。
cp dir1/* dir2 使用一個通配符,在目錄 dir1 中的所有文件都被復制到目錄 dir2 中。 dir2 必須已經存在。
cp -r dir1 dir2 復制目錄 dir1 中的內容到目錄 dir2。如果目錄 dir2 不存在, 創(chuàng)建目錄 dir2,操作完成后,目錄 dir2 中的內容和 dir1 中的一樣。 如果目錄 dir2 存在,則目錄 dir1 (和目錄中的內容)將會被復制到 dir2 中。
參數:
-a, --archive 復制文件和目錄,以及它們的屬性,包括所有權和權限。 通常,復本具有用戶所操作文件的默認屬性
-i, --interactive 在重寫已存在文件之前,提示用戶確認。如果這個選項不指定, cp 命令會默認重寫文件。
-r, --recursive 遞歸地復制目錄及目錄中的內容。當復制目錄時, 需要這個選項(或者-a 選項)。
-u, --update 當把文件從一個目錄復制到另一個目錄時,僅復制目標目錄中不存在的文件,或者是文件內容新于目標目錄中已經存在的文件。
mv - 移動和重命名文件
mv file1 file2 移動 file1 到 file2。如果 file2 存在,它的內容會被 file1 的內容重寫。 如果 file2 不存在,則創(chuàng)建 file2。 這兩種情況下,file1 都不再存在。這相當于重命名。
mv -i file1 file2 除了如果 file2 存在的話,在 file2 被重寫之前,用戶會得到 提示信息外,這個和上面的選項一樣。
mv file1 file2 dir1 移動 file1 和 file2 到目錄 dir1 中。dir1 必須已經存在。
mv dir1 dir2 如果目錄 dir2 不存在,創(chuàng)建目錄 dir2,并且移動目錄 dir1 的內容到 目錄 dir2 中,同時刪除目錄 dir1。如果目錄 dir2 存在,移動目錄 dir1(及它的內容)到目錄 dir2。
rm - 刪除文件和目錄
選項:
-i, --interactive 在刪除已存在的文件前,提示用戶確認信息。 如果不指定這個選項,rm 會默默地刪除文件
-r, --recursive 遞歸地刪除文件,這意味著,如果要刪除一個目錄,而此目錄 又包含子目錄,那么子目錄也會被刪除。要刪除一個目錄,必須指定這個選項。
-f, --force 忽視不存在的文件,不顯示提示信息。這選項覆蓋了“--interactive”選項。
-v, --verbose 在執(zhí)行 rm 命令時,顯示翔實的操作信息。
rm file1 默默地刪除文件
rm -i file1 除了在刪除文件之前,提示用戶確認信息之外,和上面的命令作用一樣。
rm -r file1 dir1 刪除文件 file1, 目錄 dir1,及 dir1 中的內容。
rm -rf file1 dir1 同上,除了如果文件 file1,或目錄 dir1 不存在的話,rm 仍會繼續(xù)執(zhí)行。
小心 rm! Linux,沒有復原命令。一旦你用 rm 刪除了一些東西, 它就消失了。
小貼士。 當你使用帶有通配符的rm命令時(除了仔細檢查輸入的內容外), 先用 ls 命令來測試通配符。這會讓你看到將要被刪除的文件是什么。然后按下上箭頭按鍵,重新調用 剛剛執(zhí)行的命令,用 rm 替換 ls。
ln — 創(chuàng)建鏈接
ln file link創(chuàng)建硬鏈接
ln -s item link創(chuàng)建符號鏈接,,”item” 可以是一個文件或是一個目錄
第六章:使用命令
type – 說明怎樣解釋一個命令名
which – 顯示會執(zhí)行哪個可執(zhí)行程序
man – 顯示命令手冊頁
apropos – 顯示一系列適合的命令
info – 顯示命令 info
whatis – 顯示一個命令的簡潔描述
alias – 創(chuàng)建命令別名
命令的類別:
- 是一個可執(zhí)行程序
- 是一個內建于 shell 自身的命令,shell 內部命令
- 是一個 shell 函數。這些是小規(guī)模的 shell 腳本,它們混合到環(huán)境變量中
- 是一個命令別名
type顯示命令的類型,如type ls。
which - 顯示一個可執(zhí)行程序的位置
只對可執(zhí)行程序有效,不包括內建命令和命令別名。
which ls
help - 得到 shell 內建命令的幫助文檔
help cd
cd: cd [-L|-P] [dir] 出現在命令語法說明中的方括號,表示可選的項目。一個豎杠字符 表示互斥選項。
--help - 顯示用法信息
mkdir --help
man - 顯示程序手冊頁
man ls
man 所顯示的參考手冊,被分成幾個章節(jié):1 用戶命令;2 程序接口內核系統(tǒng)調用;3 C 庫函數程序接口;4 特殊文件,比如說設備結點和驅動程序;5 文件格式;6 游戲娛樂,如屏幕保護程序;7 其他方面;8 系統(tǒng)管理員命令。
要查看參考手冊的特定章節(jié),從而找到我們需要的信息,可以來指定章節(jié)號,如man 5 passwd命令運行結果會顯示文件 /etc/passwd 的文件格式說明手冊。
apropos - 顯示適當的命令
基于關鍵字的匹配,搜索參考手冊列表,輸出結果每行的第一個字段是手冊頁的名字,第二個字段展示章節(jié)。注意,man 命令加上”-k”選項, 和 apropos 完成一樣的功能。如apropos floppy。
whatis - 顯示非常簡潔的命令說明
手冊頁晦澀難懂的。whatis ls`顯示匹配特定關鍵字的手冊頁的名字和一行命令說明。
info - 顯示程序 Info 條目
GNU 項目提供了一個命令程序手冊頁的替代物,稱為”info”。info 內容可通過 info 閱讀器 程序讀取。info 程序讀取 info 文件,info 文件是樹型結構,分化為各個結點,每一個包含一個題目。 info 文件包含超級鏈接,它可以讓你從一個結點跳到另一個結點。一個超級鏈接可通過 它開頭的星號來辨別出來,把光標放在它上面并按下 enter 鍵,就可以激活它。
??????????????顯示命令幫助
PgUp or Backspace ???顯示上一頁
PgDn or Space ?????顯示下一頁
n ???????????下一個 - 顯示下一個結點
p ???????????上一個 - 顯示上一個結點
u ???????????Up - 顯示當前所顯示結點的父結點,通常是個菜單
Enter ?????????激活光標位置下的超級鏈接
q ???????????退出
如info coreutils將會顯示一個包含超級鏈接的手冊頁,這些超級鏈接指向包含在 coreutils 包中的各個程序。
許多安裝在系統(tǒng)中的軟件,都有自己的文檔文件,位于/usr/share/doc 目錄下。 這些文件大多數是以文本文件的形式存儲的,可用 less 閱讀器來瀏覽。一些文件是 HTML 格式, 可用網頁瀏覽器來閱讀。我們可能遇到許多以”.gz”結尾的文件。這表示 gzip 壓縮程序 已經壓縮了這些文件。gzip 軟件包包括一個特殊的 less 版本,叫做 zless,zless 可以顯示由 gzip 壓縮的文本文件的內容。
用別名(alias)創(chuàng)建你自己的命令
可以把多個命令放在同一行上,命令之間 用”;”分開,如
cd /usr; ls; cd - 首先更改目錄到/usr,然后列出目錄 內容,最后回到原始目錄(用命令”cd -“),結束在開始的地方??梢酝ㄟ^ alias 命令 把這一串命令轉變?yōu)橐粋€命令。
我們要做的第一件事就是為我們的新命令構想一個名字。 比方說”foo”。在使用”foo”之前,查明是否”foo”命令名已經存在系統(tǒng)中,可以使用 type 命令:如type foo。
創(chuàng)建命令別名(等號前后沒有空格):alias foo='cd /usr; ls; cd -'
刪除別名,使用 unalias 命令:unalias foo
要查看所有定義在系統(tǒng)環(huán)境中的別名,使用不帶參數的 alias 命令alias
在命令行中定義別名有點兒小問題。當你的 shell 會話結束時,它們會消失。之后我們會了解怎樣把自己的別名添加到文件中去。