date 顯示當前時間和日期 cal 顯示當前月份的日歷 df 查看磁盤剩余空間的數量 free 顯示空閑內存的數量 pwd 打印當前工作目錄 cd 切換目錄 ls 列出文件夾內容 絕對路徑:開始於根目錄 相對路徑:開始於工作目錄 .工作目錄 ..工作目錄的父目錄 cd - 更改目錄到先前的工作目錄 cd ~ 切換到家目錄 ls -l 結果以長模式輸出 -t 選項按文件的修改時間的先后來排序 --reverse 結果會以相反的順序輸出 -h 更友好的方式顯示 -a 列出所有文件包括隱藏文件 file filename 打印文件內容的簡單描述 less filename 查看文件的內容,可以前后滾動,按q可退出 目錄 評論 / 根目錄,萬物起源。 /bin 包含系統啟動和運行所必須的二進制程序。 /boot 包含 Linux 內核、初始 RAM 磁盤映像(用於啟動時所需的驅動)和 啟動加載程序。 有趣的文件: /boot/grub/grub.conf or menu.lst, 被用來配置啟動加載程序。 /boot/vmlinuz,Linux 內核。 /dev 這是一個包含設備結點的特殊目錄。“一切都是文件”,也適用於設備。 在這個目錄里,內核維護着所有設備的列表。 /etc 這個目錄包含所有系統層面的配置文件。 它也包含一系列的 shell 腳本, 在系統啟動時,這些腳本會開啟每個系統服務。這個目錄中的任何文件應該是可讀的文本文件。 有趣的文件:雖然/etc 目錄中的任何文件都有趣,但這里只列出了一些我一直喜歡的文件: /etc/crontab, 定義自動運行的任務。 /etc/fstab,包含存儲設備的列表,以及與他們相關的掛載點。 /etc/passwd,包含用戶帳號列表。 /home 在通常的配置環境下,系統會在/home 下,給每個用戶分配一個目錄。普通用戶只能 在自己的目錄下寫文件。這個限制保護系統免受錯誤的用戶活動破壞。 /lib 包含核心系統程序所使用的共享庫文件。這些文件與 Windows 中的動態鏈接庫相似。 /lost+found 每個使用 Linux 文件系統的格式化分區或設備,例如 ext3文件系統, 都會有這個目錄。當部分恢復一個損壞的文件系統時,會用到這個目錄。除非文件系統 真正的損壞了,那么這個目錄會是個空目錄。 /media 在現在的 Linux 系統中,/media 目錄會包含可移動介質的掛載點, 例如 USB 驅動器,CD-ROMs 等等。這些介質連接到計算機之后,會自動地掛載到這個目錄結點下。 /mnt 在早些的 Linux 系統中,/mnt 目錄包含可移動介質的掛載點。 /opt 這個/opt 目錄被用來安裝“可選的”軟件。這個主要用來存儲可能 安裝在系統中的商業軟件產品。 /proc 這個/proc 目錄很特殊。從存儲在硬盤上的文件的意義上說,它不是真正的文件系統。 相反,它是一個由 Linux 內核維護的虛擬文件系統。它所包含的文件是內核的窺視孔。這些文件是可讀的, 它們會告訴你內核是怎樣監管計算機的。 /root root 帳戶的家目錄。 /sbin 這個目錄包含“系統”二進制文件。它們是完成重大系統任務的程序,通常為超級用戶保留。 /tmp 這個/tmp 目錄,是用來存儲由各種程序創建的臨時文件的地方。一些配置導致系統每次 重新啟動時,都會清空這個目錄。 /usr 在 Linux 系統中,/usr 目錄可能是最大的一個。它包含普通用戶所需要的所有程序和文件。 /usr/bin /usr/bin 目錄包含系統安裝的可執行程序。通常,這個目錄會包含許多程序。 /usr/lib 包含由/usr/bin 目錄中的程序所用的共享庫。 /usr/local 這個/usr/local 目錄,是非系統發行版自帶,卻打算讓系統使用的程序的安裝目錄。 通常,由源碼編譯的程序會安裝在/usr/local/bin 目錄下。新安裝的 Linux 系統中,會存在這個目錄, 但卻是空目錄,直到系統管理員放些東西到它里面。 /usr/sbin 包含許多系統管理程序。 /usr/share /usr/share 目錄包含許多由/usr/bin 目錄中的程序使用的共享數據。 其中包括像默認的配置文件、圖標、桌面背景、音頻文件等等。 /usr/share/doc 大多數安裝在系統中的軟件包會包含一些文檔。在/usr/share/doc 目錄下, 我們可以找到按照軟件包分類的文檔。 /var 除了/tmp 和/home 目錄之外,相對來說,目前我們看到的目錄是靜態的,這是說, 它們的內容不會改變。/var 目錄是可能需要改動的文件存儲的地方。各種數據庫,假脫機文件, 用戶郵件等等,都位於在這里。 /var/log 這個/var/log 目錄包含日志文件、各種系統活動的記錄。這些文件非常重要,並且 應該時時監測它們。其中最重要的一個文件是/var/log/messages。注意,為了系統安全,在一些系統中, 你必須是超級用戶才能查看這些日志文件。 通配符 * 匹配任意多個字符(包括零個或一個) ? 匹配任意一個字符(不包括零個) [characters] 匹配任意一個屬於字符集中的字符 [!characters] 匹配任意一個不是字符集中的字符 [[:class:]] 匹配任意一個屬於指定字符類中的字符 常用字符類別: [:alnum:] 匹配任意一個字母或數字 [:alpha:] 匹配任意一個字母 [:digit:] 匹配任意一個數字 [:lower:] 匹配任意一個小寫字母 [:upper:] 匹配任意一個大寫字母 mkdir directory 創建目錄 mkdir dir1 dir2 dir3 創建三個目錄 cp file1 file2 復制文件 file1 內容到文件 file2。 如果 file2 已經存在, file2 的內容會被 file1 的內容重寫。如果 file2 不存在,則會創建 file2。 cp -i file1 file2 這條命令和上面的命令一樣,除了如果文件 file2 存在的話,在文件 file2 被重寫之前, 會提示用戶確認信息。 cp file1 file2 dir1 復制文件 file1 和文件 file2 到目錄 dir1。目錄 dir1 必須存在。 cp dir1/* dir2 使用一個通配符,在目錄 dir1 中的所有文件都被復制到目錄 dir2 中。 dir2 必須已經存在。 cp -r dir1 dir2 復制目錄 dir1 中的內容到目錄 dir2。如果目錄 dir2 不存在, 創建目錄 dir2,操作完成后,目錄 dir2 中的內容和 dir1 中的一樣。 如果目錄 dir2 存在,則目錄 dir1 (和目錄中的內容)將會被復制到 dir2 中。 mv file1 file2 移動 file1 到 file2。 如果 file2 存在,它的內容會被 file1 的內容重寫。 如果 file2 不存在,則創建 file2。 每種情況下,file1 不再存在。 mv -i file1 file2 除了如果 file2 存在的話,在 file2 被重寫之前,用戶會得到 提示信息外,這個和上面的選項一樣。 mv file1 file2 dir1 移動 file1 和 file2 到目錄 dir1 中。dir1 必須已經存在。 mv dir1 dir2 如果目錄 dir2 不存在,創建目錄 dir2,並且移動目錄 dir1 的內容到 目錄 dir2 中,同時刪除目錄 dir1。 如果目錄 dir2 存在,移動目錄 dir1(及它的內容)到目錄 dir2。 rm file1 默默地刪除文件 rm -i file1 除了在刪除文件之前,提示用戶確認信息之外,和上面的命令作用一樣。 rm -r file1 dir1 刪除文件 file1, 目錄 dir1,及 dir1 中的內容。 rm -rf file1 dir1 同上,除了如果文件 file1,或目錄 dir1 不存在的話,rm 仍會繼續執行。 ln — 創建硬鏈接和符號鏈接 ln file link 創建硬鏈接 ln -s file line 創建軟鏈接 硬鏈接與更加現代的符號鏈接相比,硬鏈接是最初 Unix 創建鏈接的方式。每個文件默認會有一個硬鏈接, 這個硬鏈接給予文件名字。我們每創建一個硬鏈接,就為一個文件創建了一個額外的目錄項。 硬鏈接有兩個重要局限性: 1、一個硬鏈接不能關聯它所在文件系統之外的文件。這是說一個鏈接不能關聯 與鏈接本身不在同一個磁盤分區上的文件。 2、一個硬鏈接不能關聯一個目錄。 當一個硬鏈接被刪除時,這個鏈接 被刪除,但是文件本身的內容仍然存在。 符號鏈接類似於windows的快捷方式,如果你往一個符號鏈接里面寫入東西,那么相關聯的文件也被寫入。 然而, 當你刪除一個符號鏈接時,只有這個鏈接被刪除,而不是文件自身。 如果先於符號鏈接 刪除文件,這個鏈接仍然存在,但是不指向任何東西。在這種情況下,這個鏈接被稱為壞鏈接。 type command 顯示命令的類型 which command 顯示一個可執行程序的位置 ls --help --help 選項,這個選項是顯示命令所支持的語法和選項說明 man command 查看命令的參考手冊 whatis command 顯示非常簡潔的命令說明 info command info info文件是樹型結構,分化為各個結點,每一個包含一個題目。 whatis command 顯示非常簡潔的命令說明 alias name='command string' 給命令取別名 ls -l /usr/bin > ls-output.txt 重定向輸出 less ls-output.txt 查看輸出的內容 ls -l /usr/bin >> ls-output.txt 使用”>>“重定向符,追加內容 一個程序可以在幾個編號的文件流中的任一個上產生輸出。 雖然我們已經將這些文件流的前 三個稱作標准輸入、輸出和錯誤,shell 內部分別將其稱為文件描述符0、1和2。 shell 使用文件描述符提供 了一種表示法來重定向文件。因為標准錯誤和文件描述符2一樣,我們用這種 表示法來重定向標准錯誤: cat movie.mpeg.0* > movie.mpeg 追加連接符合條件的文件 ls -l /usr/bin | less 命令從標准輸入讀取數據並輸送到標准輸出的能力被一個稱為管道線的shell特性所利用。 管道中添加過濾器 sort ls /bin /usr/bin | sort | less wc(字計數)命令是用來顯示文件所包含的行數、字數和字節數。 例如: wc ls-output.txt 7902 64566 503634 ls-output.txt grep pattern [file...] 找到匹配的文本 ls /bin /usr/bin | sort | uniq | grep zip 區分大小寫 ls /bin /usr/bin | sort | uniq | grep -i zip 忽略大小寫 grep “standard” standard.txt > grep.out 2>&1 在文件standard.txt中查找standard這個字符串,如果找到則將查找結果重定向到grep.out,如果找不到,則把錯誤信息重定向到grep.out中。 head -n 5 ls-output.txt 查看開頭五行內容 tail -n 5 ls-output.txt 查看結尾五行內容 波浪線字符(“~”)有特殊的含義。 當它用在 一個單詞的開頭時,它會展開成指定用戶的家目錄名。 如果沒有指定用戶名,則展開成當前用戶的家目錄。 [me@linuxbox ~]$ echo ~foo /home/foo 算術表達式展開使用這種格式: $((expression)) [me@linuxbox ~]$ echo $((2 + 2)) 4 在算術表達式中空格並不重要,並且表達式可以嵌套。 [me@linuxbox ~] echo $(($((5**2)) * 3)) 75 通過它,你可以從一個包含花括號的模式中 創建多個文本字符串。 [me@linuxbox ~]$ echo Front-{A,B,C}-Back Front-A-Back Front-B-Back Front-C-Back [me@linuxbox ~]$ echo Number_{1..5} Number_1 Number_2 Number_3 Number_4 Number_5 [me@linuxbox ~]$ echo {Z..A} Z Y X W V U T S R Q P O N M L K J I H G F E D C B A 花括號嵌套: [me@linuxbox ~]$ echo a{A{1,2},B{3,4}}b aA1b aA2b aB3b aB4b 批量創建以數值”年-月”形式命名的目錄 [me@linuxbox ~]$ mkdir Pics [me@linuxbox ~]$ cd Pics [me@linuxbox Pics]$ mkdir {2007..2009}-0{1..9} {2007..2009}-{10..12} [me@linuxbox Pics]$ ls 2007-01 2007-07 2008-01 2008-07 2009-01 2009-07 2007-02 2007-08 2008-02 2008-08 2009-02 2009-08 2007-03 2007-09 2008-03 2008-09 2009-03 2009-09 2007-04 2007-10 2008-04 2008-10 2009-04 2009-10 2007-05 2007-11 2008-05 2008-11 2009-05 2009-11 2007-06 2007-12 2008-06 2008-12 2009-06 2009-12 命令替換允許我們把一個命令的輸出作為一個展開模式來使用: [me@linuxbox ~]$ echo $(ls) Desktop Documents ls-output.txt Music Pictures Public Templates Videos bash 也支持這種語法。它使用倒引號來代替美元符號和括號: [me@linuxbox ~]$ ls -l `which cp` -rwxr-xr-x 1 root root 71516 2007-12-05 08:58 /bin/cp 記住,在雙引號中,參數展開、算術表達式展開和命令替換仍然有效: [me@linuxbox ~]$ echo "$USER $((2+2)) $(cal)" me 4 February 2008 Su Mo Tu We Th Fr Sa 以下例子是無引用,雙引號,和單引號的比較結果: [me@linuxbox ~]$ echo text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER text /home/me/ls-output.txt a b foo 4 me [me@linuxbox ~]$ echo "text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER" text ~/*.txt {a,b} foo 4 me [me@linuxbox ~]$ echo 'text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER' text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER 反斜杠轉義符 [me@linuxbox ~]$ mv bad\&filename good_filename 查看歷史信息 history | less 歷史命令執行 !! 重復最后一次執行的命令。可能按下上箭頭按鍵和 enter 鍵更容易些。 !number 重復歷史列表中第 number 行的命令。 !string 重復最近歷史列表中,以這個字符串開頭的命令。 !?string 重復最近歷史列表中,包含這個字符串的命令。 ps – 報告當前進程快照 top – 顯示任務 jobs – 列出活躍的任務 bg – 把一個任務放到后台執行 fg – 把一個任務放到前台執行 kill – 給一個進程發送信號 killall – 殺死指定名字的進程 shutdown – 關機或重啟系統 進程狀態: R 運行中。這意味着,進程正在運行或准備運行。 S 正在睡眠。進程沒有運行,而是,正在等待一個事件, 比如說,一個按鍵或者網絡分組。 D 不可中斷睡眠。進程正在等待 I/O,比方說,一個磁盤驅動器的 I/O。 T 已停止. 已經指示進程停止運行。稍后介紹更多。 Z 一個死進程或“僵屍”進程。這是一個已經終止的子進程,但是它的父進程還沒有清空它。 (父進程沒有把子進程從進程表中刪除) < 一個高優先級進程。這可能會授予一個進程更多重要的資源,給它更多的 CPU 時間。 進程的這種屬性叫做 niceness。 具有高優先級的進程據說是不好的(less nice), 因為它占用了比較多的 CPU 時間,這樣就給其它進程留下很少時間。 N 低優先級進程。 一個低優先級進程(一個“好”進程)只有當其它高優先級進程被服務了之后,才會得到處理器時間。 另一個流行的選項組合是 “aux”(不帶開頭的”-“字符)。這會給我們更多信息: [me@linuxbox ~]$ ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 2136 644 ? Ss Mar05 0:31 init root 2 0.0 0.0 0 0 ? S< Mar05 0:00 [kt] 用 top 命令動態查看進程 后台執行:在程序命令之后,加上”&”字符 [me@linuxbox ~]$ xlogo & [1] 28236 后台命令對與鍵盤輸入免疫,無法中斷,使用fg將命令轉到前端。 fg 命令之后,跟隨着一個百分號和任務序號(叫做 jobspec)就可以。 [me@linuxbox ~]$ jobs [1]+ Running xlogo & [me@linuxbox ~]$ fg %1 xlogo