作者:feng_ye 第一堂課 單元一:概述 UNIX由貝爾實驗室(Bell Labs)發明。UNIX為AT&T的注冊商標,所以其他公司開發的UNIX都有自己的名字,例如IBM的AIX,Sun的Solaris等。 UNIX中,任何事物都是文件。基於這個定理,UNIX的配置文件都儲存在文本文件中,並可以將多個程序鏈起來完成復雜的任務。 GNU Project開始於1984年,由自由軟件基金(FSF for Free Software Foundation)支持,目的是為了建立免費的UNIX系統。到1990年,建立了一套包括gcc,emac等在內的近乎完備的系統。 GPL=GNU General Public License。GPL鼓勵自由軟件,所有對遵循GPL的軟件進行的改進和修改也都必須遵循GPL。 而Linux起源於1991年有個大學畢業生Linux Torvalds建立了一個叫做"Linux"的操作系統內核。雖然該內核當時只支持gcc和bash兩個GNU產品,但它預示著組合Linux內核和GNU應用程序使得建立免費的類UNIX系統成為可能。 Linux具備的特性有: #Linux是一個類UNIX系統 #支持多任務和多用戶 #並有廣泛的硬件支持(至少是越來越廣泛) #Red Hat發行版Linux提供了相當多Red Hat推薦的、普遍使用的、有用的程序。 Red Hat Linux是Linux的一個發行版本(distribution)。它具有的特性有: #最新的系統內核 #常用的實用程序和應用軟件 #安裝和配置軟件 #提供技術支持 Red Hat Linux推薦的硬件配置 #Pentium級以上的CPU #128M內存 #600M-1.2G的硬盤空間,取決於使用目的。 #可啟動的CDROM或者軟驅 Linux在圖形用戶界面(GUI)環境上,提供標准的X Window系統:XFree86。兩種桌面環境:KDE和GNOME,分別建立在Qt和GTK+開發包上。 單元二:快速教程 Linux用戶環境組件包括: #內核(Kernel) #Shell #終端模擬器(Terminal Emulator) #X Window系統 #窗口管理器(Window Manager) #桌面環境(Desktop Environment) 本地登錄時,若是在虛擬終端中以文本界面登錄,運行級別(runlevel)為3;當在圖形界面登錄是,運行級別(runlevel)為5。可使用init來切換runlevel,如 init 3 或者 init 5。 ls命令通常用於查看文件系統,Red Hat Linux使用“彩色的”ls來區分不同的文件。命令例如: $ ls -lh 文件以KB大小列出並列出屬性等詳細信息 $ ls -a 列出所有文件(顯示隱藏的以"."開頭的文件) $ ls -al 列出所有文件及其詳細信息 $ ls -R 列出目錄下所有子目錄及文件 所有的硬件設備都是以文件形式存在的,只不過它們是特殊的文件,並存放在/dev目錄下。設備分為塊設備(block)和字符設備(character)兩種。在用ls -l命令顯示時,設備文件的類型會在屬性的第一位以"b"或者"c"分別表示。塊設備是可隨機讀寫的設備,例如硬盤;字符設備必須是順序讀寫的,比如串口。 進程(process)是一個正在執行的程序的實例(程序的一次運行),每個進程都有一個唯一的進程號PID,從1-32768取值。其中PID 1為init進程所保留。線程(thread)可以看作是一個進程內部的“小進程”,和系統中的進程有些相似。 用ps -ef和pstree可以羅列當前的進程列表。top可即時監視當前所有進程,gtop是一個圖形界面的進程監視程序。 在命令行Shell中,最常用和最著名的是bash(Bourne Again SHell),也是Linux的缺省shell。bash的全局設置文件為 /etc/profile和 /etc/bashrc。當然還有其他的shell比如csh等。 兩個以上的命令/程序的連續執行可使用分號“ ; ”。若需要連續執行命令並保證前一個命令沒有返回錯誤的前提下執行下一個命令的話,可在命令間加上“ && ”。若命令在一行打不下或想人為換行,可在行末尾加“ \ ”然後回車,繼續這個命令的後面的部分。 man命令後跟命令名可找到相應的幫助頁面,按q 退出。例如man ls 或者ls --help。info 命令後跟section_name 可找到相應部分的幫助。在/usr/share/doc/HOWTO/ 中有編譯好的HowTos可供查閱。 env 命令顯示環境變量;set命令顯示環境變量和本地shell變量。下面是一些通用變量: PATH - 可執行文件搜索路徑 PWD - 當前目錄 TERM - 登錄終端類型 SHELL - 登錄Shell的路徑 HOME - 用戶的home目錄 USER - 用戶名 DISPLAY - X顯示名 VISUAL - 可視化編輯器名 EDITOR - 缺省編輯器名 root用戶擁有對系統的完全控制,用戶號(UID)為保留的0。任何非特權用戶的UID都大於0。可以用id 命令查看當前用戶信息。用passwd 命令改變密碼,密碼長度應在6-255位之間,並且大小寫敏感。passwd [用戶名] 用來修改某特定用戶的密碼。 虛擬終端(virtual console)的設計支持非GUI的多重登錄。缺省情況下有6個虛擬終端,可通過CTRL-ALT-F[1-6] 在之間切換。在虛擬終端中可使用Shift+PageUp和Shift+PageDown卷動顯示。如果運行了X,則X用CTRL-ALT-F7 來切換。 單元三:文件與Shell基礎 命令pwd(Print Working Directory)顯示當前所在目錄的絕對路徑。cd 命令用於改變當前目錄,後跟絕對路徑或相對路徑。絕對路徑以“ / ”開始,而相對路徑通常以“.”、“..”或者下級目錄名開始。例如: $ cd /tmp/mydir $ cd .. $ cd mydir $ cd - (到前一個所在目錄) $ pwd /tmp 每個用戶都有一個home 目錄,一般在/home 目錄下。home 目錄中包含了用戶特定的配置和用戶文件。字符“ ~ ”代表當前用戶的home 目錄。例如,當前用戶為feng_ye,則他的home 目錄下的某個文件就可以這樣寫:~/text/example.txt ,即/home/feng_ye/text/example.txt 。如果feng_ye用戶可以訪問別的用戶home 目錄,則~kim/text/another.txt 代表了kim用戶home 目錄下的text/another.txt 文件,即/home/kim/text/another.txt 。 文件名可以長達255個字符,以“ . ”開頭的文件為隱藏文件,在ls 時必須加-a 顯示才能看到。文件名一般來說避免在其中使用 / , >, <, ?, *, ", ' 和控制符號(不可打印的字符)。如果想要使用特殊字符,比如空格,那麼將文件名用雙引號“ " ” 括起來,例如: $ ls -l "file name with spaces.txt" 或者 $ ls -l file\ name\ with\ spaces.txt Red Hat Linux 和大多數Linux 發行版一樣,遵循FHS(Filesystem Hierarchy Standard)。系統目錄中: /bin , /sbin , /usr 存放系統編譯後的可執行文件、命令; /var 存放日志文件,PID 文件和電子郵件; /proc 當前的進程都會在這個目錄中出現,可看作是一個通向內核的虛擬窗口; /etc 存放配置文件; /lib 存放共享庫; /dev 設備文件; /boot 內核和啟動文件; /home 用戶的home 目錄; /opt 為安裝第三方軟件包的目錄。 df 命令顯示磁盤用量,加-h 選項可以以KB、MB、GB等單位輸出,加-H 也以KB、MB、GB輸出,但是是以1000為K,而非1024。du 命令計算目錄下文件占用磁盤的大小,以KB為單位,也加-h 選項。例如du -sh 。 文件操作中,mv 命令用來移動文件或者將文件改名。注意如果mv 命令的第二個參數,也就是移動目的地是一個目錄,則源文件移動到該目錄下;若不存在第二個參數所指定的目錄,則mv 將認為第二個參數是一個文件名,並將源文件改名。cp 命令復制文件。可用-a 選項復制整個目錄及其子目錄和文件,並保持其修改時間。toUCh 命令更新文件的最後修改時間,若文件不存在則建立空文件。rm 命令刪除文件。可以用-rf 命令刪除任何文件或者目錄,及其子目錄下的文件。如果需要的話可以用-i 選項讓rm 命令具有交互功能。 目錄操作中,mkdir 命令新建目錄,rmdir 用於刪除空目錄,若需要刪除非空目錄,使用rm -r 將刪除目錄及其子目錄中所有文件。 file 命令用於獲得文件的類型,如ASCII文件或者可執行文件等。 cat 命令用於顯示整個文件的內容。-A 選項顯示所有字符,包括控制字符和不可打印的字符;-s 選項壓縮文件中的多個空行為一個空行;-b 為所有非空行加注行號。 less 命令用於在分屏顯示文件,空格向後翻頁;b 向前翻頁;/text 在文件中向前查找text;?text 在文件中向後查找text;n 重復上一次的查找;N 重復上次查找,但方向相反;q 退出。 less 的選項有 -c 在顯示前清屏;-r 顯示控制字符;-s 壓縮多個空行為一個空行。 tail 和head 命令顯示文件最後n 行和最前的n 行。n 缺省為10。 -n 或者 -n n 選項:顯示n行(例:-20 或者-n 20) -c n 選項:顯示n個字節 -f 選項為tail 所獨有,它用來實時觀察文件的末尾增加的行,在觀察系統日志時非常有用。 pico 是一個通用文本編輯器,當編輯系統配置時務必加-w 選項以防止自動換行。 文件可以用通配符 * 和 ? ,* 表示0個或者多個字符,? 表示單個字符。[a-z] 表示在范圍之內的字符,[^a-z]表示除范圍之外的字符。 技巧:echo 命令可以用來測試通配符以避免錯誤的毀滅性操作,例如rm 。 $ echo ??ee*.txt bleeding-edge.txt sheeptrix.txt kill [PID] 用來殺死進程。不易殺死的進程可用kill -9 [PID] 殺死。 單元四:用戶、組和系統信息 所有的用戶(下稱user)都有一個唯一的用戶號(unique User ID = uid)。用戶名和uid都存儲在/etc/passwd 文件中。當user 登錄時通常被連接到home 目錄和一個Shell程序。user 不能在沒有允許的情況下讀、寫、執行其他user 的文件。 user 都屬於一個組(下稱group),而group 有唯一的組號(unique Group ID = gid)。gid 存儲在/etc/group 文件中。每個user 都被賦予自己的group ,他們也能加入到其他group 中以獲取更多的訪問權限。同一group 中的user 可以共享屬於該group 的文件。 有些group 控制著硬件的訪問權限。例如想讓bob 使用軟驅,即使bob 不是坐在電腦前,那麼系統管理員可以將bob 加入到floopy group中。 每個進程(下稱process)有一個擁有者(下稱owner)並只可訪問owner 可訪問的資源。類似地,每個文件也有一個owner user,該user 和一個group 相連。 root user是一個特殊的管理帳號。不應該以root 身份登錄,除非你有充足的理由。因為root 具有對系統的完全控制權力,應該非常小心的使用。 像web 服務器或者打印服務器等服務器程序通常以非特權user 身份運行,例如daemon, mail, lp, nobody等。這樣做的原因是這樣運行程序可以限制程序可能對系統造成的傷害。系統user 和group 均擁有在1到499之間的uid 和gid。 獲取user 信息的命令有: whoami 顯示當前user; groups, id 顯示當前所屬group; who, users, w 顯示有哪些user 已登錄; last [username] 顯示user 的最後登錄時間; last -1 reboot 顯示最後重啟記錄; finger [username] 顯示某user 信息。 su - [username] 啟動一個新shell,並以另一個user 登錄。若不打username,則是以root 身份登錄。直接輸入su [username] 也可以達到同樣效果,但是不傳遞當前用戶的環境變量。 獲取系統信息的命令有: uname:顯示系統信息;例如uname -a date:顯示當前日期和時間;例如date +"Today is %A, %Y %m %d. %nThe time now is %r, %Z." cal:顯示一個ASCII日歷;例如cal 9 2002 man的使用: man -k keyWord 在whatis 數據庫中查找關鍵字; man -f keyword 同上,但keyword 為一個整字(whole word) man -a keyword 通常man 會顯示第一個找到的keyword的man page,但是若需要找到全部的man page,使用-a 選項。 man n keyword 顯示第n部分(section)的man page 1 - User commands 2 - System calls 3 - Library calls 4 - Special files 5 - File Formats 6 - Games 7 - Miscellaneous 8 - Admin commands