Ubuntu的發音
Ubuntu,源於非洲祖魯人和科薩人的語言,發作 oo-boon-too 的音。了解發音是有意義的,您不是第一個為此困惑的人,當然,也不會是最後一個:)
大多數的美國人讀 ubuntu 時,將 u 作為元音發音,類似單詞 who 或者 boo ,重音在第二個音節即 u'buntu ,oo-boon-too 。
如果您喜歡撒哈拉,喜歡它令人窒息的溫柔、夢幻般的寂寥還有張揚恣肆的曠遠,您大可在第一個 u,後面帶些嗡嗡聲: oom-boon-too。
Ubuntu的中文發音大約為: 烏班圖
Ubuntu的涵義
Ubuntu這個單詞源自非洲,意謂“班圖精神”────誰都不是一座孤島,自成一體。每個人都包孕於人類,因他人存在而存在,因他人幸福而幸福。
Ubuntu當前版本
Ubuntu Linux v6.06 LTS (Dapper Drake)
LTS:Long Term Support
Dapper Drake:當前版本的開發代號
Ubuntu的特點
Ubuntu 完全基於 Linux 操作系統, 可以免費得到社區及專業機構的支持。龐大的社區是它成長的沃土,請向這片動人的熱忱敞開心扉。
Ubuntu 社區恪守 Ubuntu 理念:自由!軟件應是自由的,應尊重人類的自由意志,它與人類之間不應有任何隔膜。本地語種,功能限制,自主改進的權利……都不應成為使用的障礙或負擔。
自由,讓 Ubuntu 與傳統的私有軟件從根本上不同: 免費不能用來遮羞,您有權修正它,直到滿意為止。
Ubuntu 適合桌面和服務器。當前 Ubuntu 發布版支持 PC (Intel x86), 64-bit PC (AMD64) 和 PowerPC (Apple iBook 和 Powerbook, G4 和 G5) 架構。
Ubuntu 包涵了超過 16,000 種軟件, 核心的桌面系統卻只有一張光盤, Ubuntu 覆蓋了所有的桌面應用程序,
從文字處理,電子表格到 web 服務器和開發設計環境一應俱全。 詳情查看 Ubuntu 桌面 和 Ubuntu 服務器的介紹。
Ubuntu相對其它Linux發行版的主要特點
基於Debian/Linux,使用 APT 包管理系統。
相對於Fedora Code: APT 包管理系統優雅地解決了依賴問題,並且可以從容的在線安裝升級
相對於Debian:軟件更新積極,而Debian較保守。
相對於Gentoo:基本無需編譯,省力、省時、省心。
進入系統
在登錄界面中輸入您的用戶名,然後系統將提問您的密碼
輸入您的密碼後,回車,稍事等待,您便可以進入Ubuntu系統
點擊桌面左上角的圖標,您可以打開一個菜單(或者使用 Alt+F1 組合鍵)
如果您想退出系統,可以點擊該圖標
在桌面上方啟動欄中,包含了一些常用程序的啟動圖標這些圖標也可以在開始菜單中找到
現在點擊FireFox圖標,您便可以使用FireFox浏覽器沖浪
或者按下 Alt+F2 組合鍵,彈出一個運行命令對話框。輸入 firefox 後回車,同樣可以啟動FireFox
在菜單中找到 終端
點擊它便開啟了一個終端窗口,您可以在終端窗口中運行命令
也可以在控制台中輸入命令。使用 Ctrl+Alt+[F1~F6] ,您可以切換到1~6號控制台
使用 Ctrl+Alt+F7 可以返回圖形界面(您可以使用 Ctrl+Alt+BackSpace 將圖形界面關閉)
命令行提示符
user@ubuntu:~$ 為命令提示符, @ 之前的部分為當前用戶ID, @ 與 : 之間的部分,為您的主機名稱, : 與 $ 之間的部分,為當前的路徑。
退出系統
您可以點擊這一個圖標來退出系統
也可以在終端或者控制台中輸入命令
sudo halt
系統會提問您密碼,輸入正確密碼,便可以退出系統
在以後的章節中,如果我們提示您輸入命令,那麼您即可以在終端中輸入,也可以在控制台中輸入。如果只是啟動應用程序,還可以使用 Alt+F2 組合鍵。
分區概念
首先我們需要知道,硬盤分區的存在,是由硬盤的物理特性決定的,並不會因為不同的操作系統而有所改變。(源碼網教程下載,http://hovertree.com/)
請您把一塊硬盤想象為一本書……即便您不喜歡讀書,您也一定非常熟悉它,所有的書都是相同的,包括我們使用的課本……您肯定非常熟悉
一本完整的書,通常包括書名、索引和正文。
如果您需要Linux,您首先需要找到一本書名為《linux》的書,書名相當於硬盤中的MBR,也就是主引導紀錄。不同的是,MBR可以是幾個書名合在一起,類似於《XX合訂本》。這部分內容暫時還沒有什麼實用價值,您只需要大概的了解。
而正文,就是硬盤中紀錄的數據,這也非常容易理解,且對於安裝系統並沒有什麼影響,所以現在我們來了解索引
索引相當於硬盤中的分區表,書中的每一個章節,相當於硬盤中的一個分區,它起始和結束的頁次,都可以在索引中找到。試想,如果閱讀一本撕掉索引的書,您將很難找到您想閱讀的部分。同樣,如果沒有分區表,操作系統也不能夠在硬盤上定位數據的位置。
由於歷史的原因,硬盤中的分區表大小受到了限制,最多只可以容納四個分區(主分區)。如果一本書,它的索引最多只能有四個章節,那不是太可怕了麼?很多書的內容遠遠不止四個章節啊!
於是聰明的人們想到了一個變通的辦法,就是利用其中的一個章節,來存儲其它部分的索引。比如第一章是前言,第二章是其它部分的索引,我們翻到第二
章,呵呵,這裡是第二個索引,因為只有第一個索引受四個章節的限制,所以這個索引的內容可以非常的詳盡。第二個索引就是分區表中的擴展分區了,其中定義的
章節,就是硬盤中的邏輯分區,不是很難理解吧?
明白了這一點,我們來看看Linux和Windows對於分區不同的表示方法:
可能您已經很熟悉Windows了,它使用盤符來表示分區,比如 C: D: E:
,每一個分區使用一個盤符來標識,而且順序可以顛倒, D:
並不一定就是您系統中的第二個分區。(如果您給第二個分區分配最後一個硬盤盤符,把所有的盤符按順序排列好,並且重裝一次系統,您就會理解什麼叫作“頭
疼”了:)
而在Linux中,分區是這樣表示的
/dev/hda /dev/hda1 /dev/hda2 /dev/hda5/ dev/sdb1
以 /dev/hda5 為例:
因為在Linux中,每一個設備都是用 /dev/ 文件夾下的一個文件來表示,所以 /dev/hda5 中, /dev/ 表示的是根目錄下的dev目錄,我們來看剩下的部分 hda5 。
前兩位的字母 hd 表示這是一塊IDE硬盤,如果是 sd ,則代表SATA硬盤,或者閃存等外設。
第三位的字母 a 表示這是該類型接口上的第一個設備。同理, b、c、d…… 分別代表該類型接口上的第二三四……個設備。例如 hdc 表示第二個IDE接口上的主硬盤(每個IDE接口上允許一個主設備和一個從設備)。
第四位的數字 5,並不表示這是該硬盤中的第5個分區,而是第一個邏輯分區。因為在Linux中,為了避免不必要的混亂,分區的順序是不能改變的,分區標識則由它們在硬盤中的位置決定。系統又要為所有可能的主分區預留標識,所以 1-4 一定不會是邏輯分區, 5 則是第一個邏輯分區,以此類推。
安裝中的注意事項
在Ubuntu系統的安裝過程中,您需要選擇系統目錄的掛載點。
我們知道,安裝Windows時,我們可以選擇把系統安裝在哪一個分區,把系統掛載到分區上。而在buntu/Linux中則相反,我們要把分區掛載到系統中。當我們使用Windows的安裝方式,把系統掛載到分區上,我們就不可能把Windows目錄放在C盤,而把MyDocuments目錄放到其它分區。您或者出於習慣,或者出於數據安全方面的考慮,通常把文檔放到其它分區中。但是Windows下很多軟件保存文件的默認目錄就是MyDocument目錄,這就比較不方便。
在系統安裝完成後,我們還是可以將MyDocuments目錄轉移到其它分區中,不過有點麻煩,可能許多朋友還不知道怎麼去作……而任何一種Linux系統時,當然包括Ubuntu,我們可以在系統安裝時就把分區掛載到目錄下, /home 目錄相當於Windows的MyDocuments ,我們可以把 /dev/hda5 掛載到此目錄下,這樣我們往 /home目錄裡存東西的時候,其實保存在第一個擴展分區中。如果再一次安裝系統,只要把這個分區掛載到 /home目錄下,那麼進入新系統就像回家一樣,真是太棒了。
理論上來講,您可以將分區掛載到任何目錄下面,您可以自定義掛載的路徑。但是我們並不推薦您這麼作,因為那沒有任何意義。系統安裝程序向您建議的掛載目錄,通常也是我們向您建議的,現在我們來了解一下,這些目錄通常都是用來作什麼的:
/ 根目錄,唯一必須掛載的目錄。不要有任何的猶豫,選一個分區,掛載它!(在絕大多數情況下,有2G的容量應該是夠用了。當然了,很多東西都是多多益善的:)
Swap 交換分區,可能不是必須的,不過按照傳統,並且照顧到您的安全感,還是掛載它吧。它的容量只要大於您的物理內存就可以了,如果超過了您物理內存兩倍的容量,那絕對是一種浪費。
/home 前面已經介紹過了,這是您的家目錄,通常您自己創建的文件,都保存在這裡,您最好給它分配一個分區
/usr 應用程序目錄。大部分的軟件都安裝在這裡。如果您計劃安裝許多軟件,建議您也給它分配一個分區
/var 如果您要作一些服務器方面的應用,可以考慮給它分配一個較大的分區
/boot 如果您的硬盤不支持LBA模式(我想那不太可能:),您最好掛載它,如果掛載硬盤的第一個分區,應該比較穩妥。一般來說,掛載的分區只要100M大小就足夠了
在文件系統這一環節中,我們建議您選擇: ReiserFS
也許您注意到了,Windows中,盤符既用於表示硬件(硬盤上的分區),又用於表示系統中的路徑。而Linux中,硬件就是硬件,路徑就是路徑,不會混淆在一起,簡單直接!
Shell
可能您早已能夠熟練的使用GUI(圖形用戶界面),例如您可以使用鼠標雙擊一個圖標,來打開或者執行它。
我們來看這個過程: 您使用鼠標定位桌面上的一個程序圖標,按下左鍵兩次。系統讀取鼠標指針的位置,並且判斷該位置下圖標的涵義,根據預設的雙擊動作,運行程序或者打開文件。
這一套GUI系統,便是一種Shell,它的作用是實現人機交互。如果我們不能夠控制電腦,那麼電腦還不如電視機好玩,不是麼?電視機也可以選擇頻道(電視機的遙控器,也是一種人機交互的界面,不過相對於電腦,確實是相當簡單了:)
易於上手、界面直觀是GUI的優點,但是GUI為不意味著簡單!或許您有類似經歷: 桌面上有幾十個程序的啟動圖標,也知道它們的名字,但是翻出一個來,並不是一件輕松的事情。
我的Windows系統中,桌面上擺滿了各種圖標,每當啟動一個程序的時候,我都很是困擾。後來嘗試了 音速啟動 這類的程序啟動管理器,效果還是差強人意。
在我的不懈努力下,這個難道最終得到了解決: 將快捷方式名稱簡化,放到特定目錄下,使用 Win+R 組合鍵呼出 運行對話框,鍵入快捷方式的名稱來運行該程序。比如 反恐精英 的快捷方式為 cs ,我把它放在 Windows 目錄下; 運行 cs命令,就可以去維護世界和平了。
這麼多快捷方式,統統放到 Windows 目錄下,非常混亂。因此,我在D盤建立了一個名為 path的目錄,並把它的路徑加入到環境變量的 path 項中,快捷方式放在 D:\path目錄中。即便重裝系統,只要在環境變量中重新加入此路徑,原來的程序大多可以直接以命令來運行……我的許多朋友強烈要示我幫他們設定這種啟動方式,因為這確實很方便:)
其實在Linux下,所有的程序都可以通過命令運行。雖然Linux也有GUI,但是它並不比Windows的GUI更優秀!上面只是簡單的介紹了CLI(命令行界面)相對GUI的優越之處,使用CLI還有更多的好處,您會慢慢體會到的。
當然了,在您的印象中,CLI一定非常的不友善,缺少親和力,冷漠而拒人於千裡之外……您和CLI之間甚至有代溝的存在:)
命令
坦白的說,冷不丁見到那麼老長的一串命令,誰都會毛骨悚然。
也許您使用過DOS,留下這種印象:命令先放一邊,光是正確的輸入目錄、文件名都夠瞧的。而且DOS不區分大小寫,要是像Linux一樣區分大小寫,那多恐怖啊!!!
其實Linux命令行具有補全功能,非常實用。假設有這樣一個命令:
command path/file
如果只有一個以 c 起始的命令,鍵入 c ,再按一次 tab 鍵,系統將自動補全該命令余下的部分。 只要 c tab 兩次按鍵,就可以完成 command 的輸入。
如果不只一個 c 起始的命令,那麼您可以按兩次 tab 鍵,系統會列出所有符合條件的選項,也就是以 c 起始的所有命令。進一步輸入 o ,如果只有一個以 co 起始的命令(一直輸入,直到項符合條件的選項唯一),再按一次 tab ,命令就被補全完整。
路徑和文件名也可以通過 tab 鍵來補全。還有一種 遍歷補全 的方式,如果您的文件名是中文,而您不想切換輸入法;甚至您的文件名中出現亂碼,無法輸入,這時 遍歷補全 就可以大顯身手了。這部分內容我們稍後再談:)
現在我們來了解命令的語法結構,這一部分相當重要,您可得看仔細。
我們知道,任何語言都有特定的語法結構,以我們的中文為例:
我們鄭重地推薦您Ubuntu/Linux!
這個句子的語法盡管簡單,卻是大部分的命令行采用的句型。讓我們看一下,這個句子裡都有些什麼:
我們
主語,Linux命令的執行者只有一個,所以主語一概省略。
推薦
一個動詞,作為謂語而存在。Linux命令中,這一部分是必須的。這一部分也是不同命令之間最根本的區別方式,所以它通常作為命令名,寫在最前面。鍵入 date 命令,您可以查看當前的時間日期。( 應用程序->附件->終端 )
鄭重的
狀語,用來修飾謂語。與之相對應,Linux命令可以使用參數來精細調節程序的行為。為了與命令的操作對象相區別,參數前通常要加 - 或者 -- 符號。原則上,在命令名之後,參數的位置可以隨意,但是為了養成一個良好的習慣,我們建議您在命令名後直接跟參數。
您 Ubuntu/linux
這兩個部分都是賓語,它們是命令的操作對象。大部分的命令只有一個操作對象,也有一些命令是雙賓語結構的,具有一個直接賓語和一個間接賓語。比如 拷貝 這個命令 cp (copy)
分隔符
我們的漢語是象形文字,沒有分隔符。但是所有的拼音文字中都有分隔符,來分隔單詞。Linux命令中同樣使用空格作分隔符。
cp a /home 表示把當前目錄下的 a 文件,拷貝到 /home 目錄下。(命令的不同部分使用空格分隔,連續的空格視為一個空格)
上面的那句話,翻譯成Linux的命令,應該是這個樣子的:
推薦 --鄭重的 您 Ubuntu/Linux (按照傳統,“-”後跟簡寫為單個字母的參數,“--”後跟完整單詞的參數。不過也有例外:)
哈,Linux的命令也蠻簡單吧?
Linux程序、進程
或許您會這樣想,Linux命令的句型確實不難,但是那麼多命令,我怎麼知道它們都是作什麼的呢?而且不同的系統中,可以使用的命令似乎也不太一樣,這真讓人困惑……
其實Linux的命令,運行的是Linux系統中的程序。只要您已安裝了程序,您就可以通過命令來運行它,並且可以使用參數來精細的調整它的運行狀態。也可以通過點擊啟動圖標來運行,不過啟動圖標不能夠方便的調整參數,並不是很方便。
舉一個例子:
mplayer -shuffle -loop 3 -playlist mymp3.list
可能您運行上面命令,系統會提示您 無法找到命令,那是因為您沒有安裝mplayer這個程序。mplayer是我見過的支持格式最多的播放器,幾乎任何已知格式的多媒體文件,都可以使用mplayer來播放。它包含一個圖形界面的前端,您可以在菜單中找到它,鼠標點擊運行;也可以通過執行命令來運行它的命令行版本。
如果您的系統中沒有mplayer播放器,我們建議您安裝一個。關於程序的安裝,請參閱 軟件安裝 。
上面命令中, mplayer 調用了mplayer播放器程序。參數 -shuffle 表示隨機播放, -loop 表示循環播放,後面的3 為循環的次數,如果為 0 ,則一直播放。 -playlist 表示播放列表中的曲目。我們可以把mp3的路徑放到 mymp3.list文件中,讓mplayer來播放它們。
進程 為運行中的程序,是程序在內存中的鏡像。
好了,現在您已經了解了 Shell 、 命令 、 程序 、 進程 的概念,您基本上也就了解了Linux(Linux系統真是非常簡潔,而且容易理解:)。
但只知道這些,您並不能順暢使用。接下來的章節中,我們來進一步介紹它的細節。
路徑
路徑分為絕對路徑和相對路徑。
絕對路徑的起始點為根目錄 / ,例如 /usr/local/bin 就是絕對路徑,它指向系統中一個絕對的位置,不受其它因素影響。
相對路徑的起始點為當前目錄,如果您現在位於 /usr 目錄,那麼相對路徑 local/bin 所指示的位置為 /usr/local/bin
也就是說,相對路徑所指示的位置,除了相對路徑本身,還受到當前位置的影響。例如Linux系統中常見的目錄 /bin 、 /usr/bin、 /usr/local/bin ,如果只有一個相對路徑 bin,那麼它指示的位置可能上面三個目錄中的任意一個,也可能是其它目錄。
如果我告訴您到 bin 目錄尋找一個文件,您可能搞不清楚是哪一個 bin 目錄。只有當前位置確定,相對路徑指示的位置才能夠確定。
現在我說, /usr/local 目錄下,它的相對路徑 bin 中有某個文件,這樣就比較明確了。
在相對路徑中 . 表示當前目錄, .. 表示當前目錄的上一級目錄。
假設您安裝了一個程序,它的主程序沒有被放置到上面三個 bin 目錄中的任何一個,或者其它系統能夠找到的地方,您就得告訴系統,它的可執行文件在哪裡。
可以使用絕對路徑,例如: /home/user/bin/可執行文件
或者定位到 /home/user/bin 目錄,使用相對目錄來定位它 ./可執行文件
如果您定位到了它的子目錄,比如 /home/user/bin/gui,您可以使用 .. 來表示它的上級目錄 ../可執行文件
路徑相關命令
cd (change directory) 更改目錄。
pwd (print working directory)顯示當前路徑。
ls (list) 顯示當前目錄中的文件列表。
請嘗試以下操作:
cd /etc 進入“/etc”目錄,這裡使用的是絕對路徑
pwd 顯示當前路徑,這個命令返回結果“/etc”
cd init.d 進入“/etc”目錄的子目錄“init.d”,這裡使用的是相對路徑
cd .. 進入上一級目錄“/etc”
cd ../home “/etc” 目錄的上一級目錄為“/”,它的子目錄“home”為“/home”
cd - 回到上一次的目錄,我們在“/etc”目錄跳轉到“/home”目錄,所以這次是回到“/etc”目錄
cd ~ “~”代表當前用戶的“$HOME”目錄,也就是“/home/{用戶名}”目錄。
ls 在任何時候,您都可以使用“ls”命令,來了解當前目錄下都有哪些文件。
遠程路徑:
遠程路徑的表示方法為 協議://用戶名:密碼@位置/路徑:端口
大多數的遠程路徑可以使用默認端口匿名訪問,由此用戶名、密碼、端口通常不需要填寫。例如:
http://hovertree.com/menu/ubuntu/.../index.html
要求身份驗證的遠程路徑,您可以使用下面的方式訪問:
ftp://user:[email protected]:21
軟件
Linux中沒有注冊表這個概念。安裝軟件,理論上講,只要拷貝所有相關文件,並運行它的主程序就可以了。
按照傳統,一個軟件通常分別拷貝到同級目錄下的 bin、etc、lib、share等文件夾。
Bin 可執行文件,程序的可執行文件通常在這個目錄下。在環境變量中設定搜索路徑,就可以直接執行,而不需要定位其路徑。
Etc 配置文件,大部分系統程序的配置文件保存於 /etc 目錄,便於集中修改。
Lib 庫文件,集中在一起,方便共享給不同程序。相較不同的軟件單獨保存庫文件,能夠節約一些磁盤空間。
Share 程序運行所需要的其它資源,例如圖標、文本。這部分文件是專有的,不需要共享;而且目錄結構相對復雜,混放在一起比較混亂,所以單獨存放。
還有一些軟件,占用一個單獨的目錄,所有的資源都在這個目錄中。類似於Windows下的綠色軟件,不推薦在Linux系統下這樣作。
* 執行時,系統找不到可執行文件(搜索所有路徑,資源開銷過大,是不現實的),需要定位其位置,像這樣 /home/user/bin/可執行文件 ,不夠方便。
* 許多系統軟件需要協作運行,配置文件分別保存,定位它們非常麻煩
* 如果程序使用的庫文件,像圖形庫文件,都單獨存放,那麼磁盤空間的浪費會非常嚴重。
有一些大型軟件,或者您布署的重要應用,您可以將它們單獨安裝在一個文件夾下。(通常源碼安裝支持這種方式,將在 軟件安裝 部分介紹)
配置方式
Linux下沒有類似 注冊表 的系統,系統和軟件都可以通過純文本的配置文件進行設置。
事實上,圖形界面的配置工具,通常就是以圖形界面的方式修改配置文件,適合設置一些比較簡單的程序。如果軟件有幾千個可以配置的選項,全部作成菜單,想象一下……開始發抖吧……
圖形界面的配置工具,可以看作特定配置文件專用編輯器。您一樣可以使用通用文本編輯器來編輯配置文件,比如 Nano、Gedit、Knote、Vim或者Emacs等等。不考慮閱讀、修改配置文本占用的時間,直接修改配置文件甚至更迅速。
如果只是要修改某一常用選項,而且時常修改,比如主機的IP地址。使用文本編輯器,您要找到相應的配置文件,還要在配置文件中找到相應的選項,會浪費掉您的時間和耐性。
圖形配置工具經常會受各種因素制約,比如網絡服務器中不提供圖形服務,圖形界面不夠穩定……這時,您可以使用命令行的配置工具來完成這些工作。
例如: 修改主機IP地址,可以使用ifconfig這個程序,執行下面的命令:
ifconfig eth0 192.168.0.1
在以後的章節中,如果我們提示您修改某一文件,例如 /etc/fstab ,您可以使用任何順手的文本編輯器打開它。
隱藏文件
Linux下,名稱中第一個字符為 . 的文件或者文件夾,系統默認情況下將它們隱藏起來,
您可以嘗試以下操作:
cd ~ 進入您的用戶目錄
ls 查看當前目錄下的文件列表
ls -a 查看所有文件的文件列表(包括隱藏文件)。
現在,您可以看到許多文件名以 . 起始的文件或者文件夾了吧?使用 ls 命令無法顯示它們
* 如果您只想查看隱藏文件,而不包括這兩個特殊目錄,您可以使用 ls 命令的參數 -A (ls -A)
* 每個目錄下都包含兩個特殊目錄 . 和 .. 。您也許猜到了, . 代表當前目錄, .. 代表上一級目錄。目錄是一種特殊類型的文件!
文件類型
Linux系統主要根據文件頭信息來判斷文件類型,擴展名並非決定因素。
現在使用 ls -l 命令,查看詳細信息格式的文件列表,您將會看到如下內容:
total 5
drwxr-x--- 4 user group 4096 Mar 10 00:37 filename
drwxr-xr-x 21 user group 4096 Mar 10 20:16 文件名
-rw------- 1 user group 524 Mar 10 00:40 a
-rw-r--r-- 1 user group 24 Jun 11 2000 b
drwx------ 2 user group 4096 Mar 9 11:06 c
共顯示了七列信息,從左至右依次為:權限、文件數、歸屬用戶、歸屬群組、文件大小、創建日期、文件名稱
其中要特別留意的是第一列:
drwxr-xr-x
一共有10個位置,可以分為4組:
d rwx r-x r-x
第一組只有一個字符:
* d 文件夾 * - 普通文件 * l 鏈接 * b 塊設備文件 * c 字符設備文件。
剩下的3組分別為歸屬用戶、歸屬群組、其它用戶或群組對於該文件的權限。我們看它的格式
rwx rwx rwx
* r 可讀 * w 可寫 * x 可執行
它們的順便不能顛倒,某一位置為空(-),則表示不具有相應的權限。
說明:Linux下的可執行文件並不是由擴展名(例如 .exe )決定的,而是由其可執行權限位決定。
權限
我們已經知道了,文件的權限分為 r (可讀)、 w (可寫)、 x (可執行)三種類型,而一個文件可以針對歸屬用戶,歸屬群組,其它用戶用戶或群組分別設定權限。
這種權限管理的方式靈活、簡單、嚴密、明晰。盡管如此,在最初的階段,可能會有一點小小的不適。因為它無所不在,而您習慣了的Windows的權限管理卻不是這樣(非常混亂,大多數時間形同虛設,偶爾用到卻讓人傷透腦筋)。
使用 chmod 命令更改文件的權限,使用 chown 來更改文件的歸屬。例如:
chmod 755 xxx
chmod a+x xxx
chown user:group xxx 用來更改文件的歸屬用戶,也可以同時更改其歸屬群組
chgrp group xxx 用來更改文件的歸屬群組
上面命令中的 755 和 a+x 是兩種類型的表達式
我們將後面章節中詳細介紹 權限管理 用戶管理
執行命令的權限
有一些命令,普通用戶也可以執行,但是只有root用戶才能執行成功,這是為什麼呢?
例如在系統中增加一個新用戶 useradd
ls -l /usr/sbin/useradd
可以看到:
-rwxr-xr-x 1 root root 56156 2006-04-03 21:37 /usr/sbin/useradd
明明所有的用戶都可以執行嘛?
這是因為, useradd 命令是修改 /etc/passwd 文件的一個工具,來看看這個文件:
ls -l /etc/passwd
-rw-r--r-- 1 root root 1835 2006-06-24 17:58 /etc/passwd
原來只有root用戶才能寫入修改結果,非root用戶執行 useradd 命令當然不會有結果。
執行命令的身份
默認情況下,您的命令提示符末位為 $ ,這表示您將以普通用戶的身份執行命令。
您可以使用 su (switch user)這個命令來切換其它用戶。
例如 su root ,切換到root用戶,如果 su 命令後面沒有切換目標,那麼這個命令默認切換到root用戶。
現在您執行 su 這個命令,系統會提示您輸入密碼,請輸入管理員的密碼。這個時候,您會發現命令提示符末位變成了 # ,您將以root用戶的身份執行命令。
Ubuntu系統默認會隨機設定系統的root密碼,這樣會更安全一些,這個時候您可以執行“sudo”命令,輸入當前用戶密碼後,暫時以root
用戶的身份執行命令。(前提是sudoer列表中要包含您的ID。您在安裝Ubuntu系統時創建的用戶,默認具有“sudo”權限)
如果您能夠執行“sudo”命令,那麼您也就擁有了root權限。在後面的章節中,如果我們提到了“root權限”,那麼您可以通過以上兩種方式來實現
Shell、Console、Terminal
在前面的章節中,我們曾提到,電視機的遙控器,也是一種人機交互的界面,算是一種Shell。
但是這個概念並不准確,遙控器只是向Shell發送指令的工具,Shell接收到遙控器發出指令後,將指令轉換為系統命令,由系統來執行。
例如我們按的遙控器上的 數字鍵1 ,遙控器將 切換為1頻道 的指令發送到Shell,Shell將指令轉換為系統可以識別的 頻道1 ,系統執行它,您就可以觀看1頻道的電視節目了。
通常每台電視機只有一種Shell,比如有的電視機系統具有“畫中畫”的功能,那麼Shell中便有相應的功能定義,您可以通過遙控器上的“畫中畫”功能鍵來開啟它。假設您的電視機沒有此功能,Shell中也就沒有相應的功能定義。擁有一個帶“畫中畫”功能控制鍵的遙控器,即便信號兼容,您還是不能夠使用這一功能:)
不用遙控器也可以控制電視機,假設您的遙控器丟了,您還可以走到電視機前,使用機身上的控制面板來控制它(相當於使用Linux的控制台)。但是您一定不喜歡這種方式,除非您想鍛煉身體:)
在Linux系統中,由於圖形界面和控制台的分辨率通常不一致,所以切換時要有一個延時。對於我們中文用戶來講,控制台下中文的顯示也比較麻煩。而且控制台顯示內容通常不如終端顯示的全面。
所以我們推薦您使用終端來執行命令,它使用起來感覺很像遙控器:)
rxvt-unicode
通常情況下,您買一台電視機,只能獲得一個遙控器。雖然它為您的電視機量身定作,能夠最大限度發揮電視機的能力,但您卻不一定喜歡它。說不定這個遙控器體形太大,持握不方便;或者它體形太小,容易失蹤;又或者它的按鍵要麼太硬,要麼太軟;它的鍵盤要麼太大,要麼太小……您一般也可以容忍,畢竟遙控器使用頻率並不算高:)
如果您的終端有些地方不討您喜歡,比如說響應太慢,或者不能正常顯示中文……那就難以忍受了,您應該換一個其它的試試。
在前面的章節,我們介紹您使用的終端為Gnome-Termianl,它是系統默認使用的終端,顯示中文不錯,不過響應比較慢,您可能已經處於水深火熱之中了。。。
我們推薦您使用urxvt(mlterm也是不錯的選擇)
您可以使用 sudo apt-get install rxvt-unicode 命令來安裝它。
urxvt 啟動它 (urxvt不支持控制台,您得在圖形界面下啟動它。終端、Alt+F2,建議您在啟動欄裡新建一個啟動圖標)
rxvt-unicode還支持“服務器/客戶端”的運行模式:
urxvtd 啟動一個守護進程daemon(支持控制台)
urxvtc 啟動客戶端client。多個客戶端可以同時連接到一個urxvtd,以達到節省系統資源的目的。
或許您對rxvt的默認設置不滿意,您可以修改用戶配置文件 ~/.Xresources 來設定它。修改全局配置文件 /etc/X11/Xresources/Xresources ,則對所有用戶生效,只有root才可以修改此文件。
這裡有一些簡單的選項:(以 ! 起始的行是注釋,您可以直接拷貝此文件的內容)
!!=============================================================================
!! RXVT-unicode setting
!!=============================================================================
!設置字體分辨率
Xft.dpi:96
!窗口大小
Rxvt.geometry: 80x40+80+80
!顏色
Rxvt.background:#333333
Rxvt.foreground:antiquewhite
Rxvt.inheritPixmap:False
Rxvt.colorBD:yellow
Rxvt.colorUL:antiquewhite
!滾動條
Rxvt.scrollBar:True
Rxvt.scrollBar_left:True
Rxvt.scrollBar_floating:False
Rxvt.scrollstyle:next
Rxvt.scrollColor:#999999
!屏幕緩沖
Rxvt.saveLines:30000
Rxvt.color12:DodgerBlue
Rxvt.font:7x14,xft:AR PL New Sung
!輸入法一般設置為xim
!inputMethod:xim;Scim除外
!輸入法樣式可選:Root(置底) OverTheSpot(跟隨) OffTheSpot OnTheSpot,後兩種不是所有的都支持
Rxvt.preeditType:Root
Tip:右鍵點擊啟動欄, 添加自啟動器 , 自定義程序 ,便可以在添加自己的啟動圖標。
在線幫助系統
您可以使用命令 man 或者 info 來閱讀Linux命令的在線文檔。命令的格式非常簡單:
man xxx
大部分命令手冊為英文版,如果您的英文不太好,或許有些困難。在後面的 系統管理 章節中,我們會盡力向您介紹命令的使用方法。
說明:在使用“man”浏覽器的時候,一些快捷鍵您可能會用到:
Ctrl+f(orward) 向下翻一頁 Ctrl+d(own) 向下翻半頁
Ctrl+b(ackward) 向上翻一頁 Ctrl+u(p) 向上翻半頁
/ 查找 q(uit) 退出
以上為VI風格的鍵綁定。您也可以使用Emacs風格的鍵綁定
bash
好了,現在我們換了一個遙控器,感覺順手多了。現在來操練一下,下載一首mp3:
我們使用 wget 這個程序,它非常可靠,完全值得您信賴。
首先找到一個可以下載的地址,復制鏈接,在終端窗口內點擊鼠標中鍵,把它粘貼進去。
現在終端中大概是這種情形:
http://hwq2.com/xxx.mp3
按下 Ctrl+a 組合鍵,我們發現光標移動到了行首。輸入 wget 和 空格
wget http://hwq2.com/xxx.mp3
回車後,終端中出現一些信息,不一會兒工夫,mp3便下載完成。
使用 Ctrl+a 組合鍵,我們就不需要使用方向鍵來移動光標,方向鍵每次只能移動一個字符,沒有效率
您還可以使用 Ctrl+f 向前移動光標, Ctrl+b 向後移動光標, Ctrl+e 將光標移動到行末……………… (鍵綁定)
Note
Linux的圖形界面中,鼠標中鍵通常執行“粘貼”的操作,如果您的鼠標沒有中鍵,您可以左右鍵同時按下。
中止正在運行的程序
如果一個命令持續時間很長,以致於不能夠進行其它操作,可以使用 Ctrl+c 來強行中止它。
Ctrl+s
出於意外,有時您會按下 Ctrl+s 這個組合鍵,Shell便被凍結。嘗試使用 Ctrl+q 組合鍵,看能否恢復正常。
鍵綁定
等等,有必要記這麼多快捷鍵麼?都這麼復雜!
我們強烈建議您記住,以大幅度的提高操作效率。而且這是readline控件的鍵綁定,在任何使用readline控件的程序中,您都可以使用它們。例如bash、lftp、gdb等程序;同時,Linux下最著名的Emacs編輯器,也是這種風格的鍵綁定(其實是readline使用了Emacs風格的鍵綁定才對),甚至FireFox中,也可以使用類似風格的快捷鍵!(Linux下主要有兩種風格的鍵綁定,一種是VI風格,另一種是Emacs風格,我們會在 簡明VIM教程中介紹)
現在列舉一些ReadLine的鍵綁定,您可以自行嘗試。(運行 man readline 命令,來查看ReadLine手冊)
先來了解一些約定:
\C-a 表示 Ctrl+a
\M-a 表示 Meta+a Meta鍵在PC中通常為ALT鍵
A 表示 Shift+a
(下面括號中的\A代表Alt,\S代表Shift)
移動命令:
\C-a 移動到行首 Aheah \C-e 移動到行末 End \C-f 向前移動一個字符 Forward
\C-b 向後移動一個字符 Backward \M-f 向前移動一個單詞 \M-b 向後移動一個單詞
\C-l 清空屏幕 cLear 這兩個命令也可以理解為移動命令 \C-p 上翻,前一條命令 Previous
\C-n 下翻,後一條命令 Next 編輯命令:
\C-d 刪除光標後的一個字符 \M-d 刪除光標後的一個單詞 Delete
\BackSpace 刪除光標前的一個字符 \M-BackSpace 刪除光標前的一個單詞
\C-k 刪除光標至行末的部分 Kill \C-u 刪除光標至行首的部分 Unix-line-discard
\C-w 刪除光標前的一個單詞 Word \C-y 粘貼(最後刪除的對象) Yank \C-- 撤消
搜索歷史紀錄:
\C-r 連續使用 ``C-r`` 可以查找下一個 \M-p \M-n
補全:
\Tab 使用頻率最高的功能! \C-o 遍歷補全 (未定義)
\M-? M-= 列出所有可能選項,相當於按兩次Tab鍵(M-? 實際按鍵為\A+\S+/)
\M-# 注釋掉當前命令,用於將當前命令暫存於歷史紀錄列表(\A+\S+3)
\M-! 補全命令,通常用來補全子命令,例如 ``sudo`` 的子命令(\A+\S+1)
\M-~ 補全用戶名(\A+\S+`) \M-@ 補全主機名(\A+\S+2)
\M-$ 補全變量(\A+\S+4) \M-_ 補全歷史紀錄中的紀錄(\A+\S+-)
\M-* 將所有可能選項放到命令行中(\A+\S+8)
自定義鍵綁定
通過修改 /etc/inputrc 文件,可以更改鍵綁定。建議您使用默認的鍵綁定,以避免不必要的煩惱。當然了,Emacs風格的鍵綁定是通用的,隨時都有可能用到。
在文件中添加該行,可以將ReadLine的鍵綁定設為VI風格。(Bash、Lftp等使用ReadLine的軟件同時生效)
set editing-mode vi
找到這一行:
$if mode=emacs
在它的下面添加如下內容
"\C-o": menu-complete
###這兩行不是必須的,視情況而定###
"\c-p": non-incremental-reverse-search-history
"\c-n": non-incremental-forward-search-history
重新登錄Shell,您就可以使用 \C-o (Ctrl+o)來遍歷補全。假如您的文件名為中文,或者出現亂碼時,您可以使用 \M-*
將所有文件名放入命令行,再刪除多余的,這真是麻煩極了!所以您可以使用 \C-o 遍歷補全,將所有可能的選項輪流放入命令行。
或者使用Vim編輯器編輯 /etc/inputrc 文件,在插入模式下使用 Ctrl+v 組合鍵。按下 Ctrl+o ,這時編輯區新增一個 ^O 字符,等價於 \C-o
通配符
使用 ? 代表任意單個字符。例如 ???lo ,表示 lo 前有三個字符,它可以匹配 Hello
使用 * 代表隨意幾個任意字符。例如 *.iso ,代表所有iso格式的文件。
說明:您可以將遍歷補全和通配符結合使用,以提高效率。
例如:
cd */ 則遍歷補全只補全文件夾
chmview *.chm 則遍歷補全只補全chm文件
任務管理
&--------------------------------在命令的末尾加上一個 & 符號,表示背景任務,例如:
wget http://hwq2.com/xxx/mp3 &
;----------------------------------使用 ; 將多個命令連結起來,則表示任務按順序執行
&&------------------------------使用 && 將多個命令連結起來,則表示只有前面的命令執行成功,後面的命令才能得以執行
``-----------------------------------`<命令>` ,如果一個命令中包含以 `` (Esc鍵下方的按鍵)括起來的子命令,那麼子命令將被優先執行,執行結果被代入上一級命令繼續執行,例如創建一個以當前時間命名的文件:
touch `date +%m.%d_%H:%M:%S`
touch 命令能夠創建一個文件,它的操作對象,為 date +%m%d%H%M%S 命令的輸出 06.06_06:06:60
這樣,我們創建了一個名為 06.06_06:06:60 的文件(六月六日六時六分剛過六十秒-_-!)
Ctrl+z
將當前Shell中的任務掛起
這個時候任務的狀態為
[1]+ Stopped xxx
Bg-------------------------------------------------將掛起的任務背景運行。這時它的狀態為[1]+ xxx &
Fg-------------------------------------------------將背景任務調到前台執行jobs
方括號中的數字為命令的任務編號,您可以使用 jobs 命令來查看所有背景任務
如果後台運行多個任務,您可以在 bg 或者 fg 後跟任務編號,作為操作對象,例如:bg 2
管道、重定向
>-----------------------重定向符號,它的作用是將命令的輸出重定向到一個文件中。比如我們想把命令 ls 的結果保存為 FileList 文件,作一個清單,我們可以使用重定向符號來完成它:
ls -l > FileList
>>----------------------作用與 > 基本相同,不同點在於, >> 以追加的方式,將命令的輸出寫入文件的末尾。
<-----------------------是從文件到命令的重定向,將文件的內容作為命令的輸入。
|------------------------為管道符號,它的作用是將前一個命令的輸出,作為下一個命令的輸入。假設一個目錄下的文件太多,使用 ls命令不能夠在屏幕中完全顯示,這個時候您可以將 ls 命令的輸出,通過管道符號,作為浏覽器 less 的輸入。就可以使用浏覽器的功能翻頁、查找:ls -al | less
說明: less 浏覽器的鍵綁定幾乎與 man 相同,請參閱 在線幫助系統
脫字符
Shell中的一些功能是通過特殊符號作為控制字符來實現的,上面已經介紹了很多了。這產生一個問題,如果一個文件名中,剛好包含了這些字符,比如 ; ,就很難對它進行操作。使用 less 浏覽這個文件
less ;xxx
less 會很快返回一個錯誤信息,因為並沒有一個文件名作為操作對象。接著,Shell會報告,系統中沒有 xxx 這個命令。
這是因為Shell將文件名中的 ; 解析為按順序執行命令。
或者您的文件名以空白起始,而在Shell中,無論多少個空格,都將被解析為一個分隔符。您甚至不是使用命令重命名此文件。
這個時候就要用到脫字符 \ 了,它能夠將一個具有特殊涵義的字符轉換普通字符。上面的兩個任務,可以在文件名中每個特殊字符前加一個 \ ,像這樣
less \;xxx
less \ \xxx
less \;\ \&\xxx
說明:也可以使用 " 將文件名括起來,例如 less "; &xxx" ,在很多情況下,這樣甚至更方便。
脫字符在Shell中也可以作為換行符,在一個命令的末尾添加一個 \ ,然後回車,在下一行繼續輸入命令剩余的部分,將一個命令拆分為多行且不影響它的執行(如果執行一個很長的命令,請將它拆分為多行以便於閱讀)
事實上換行符也符合脫字符的定義。回車鍵有兩個涵義,一個是 執行 (Enter),另一個 換行 (折線箭頭)。在Shell中它作為控制字符 執行 ,使用脫字符後,它便代表排版字符 換行 了。
Fish
the friendly interactive shell
正如它的名字,Fish是一款非常友好的Shell,大力推薦!使用命令 sudo apt-get install fish 安裝它。完成後,運行命令 fish 切換到fish, exit 返回bash。
簡單介紹一下它的優點:
1.自動補全、語法高亮
bash的自動補全默認只是補全命令、路徑,如果想補全變量、參數等,通常需要使用復雜的組合鍵(見上面bash的介紹),即便您能夠記住它們,快
速准確的按下這些組合鍵,也是一種嚴峻的考驗。而FISH的自動補全可以自動識別語法,補全正確的內容。並且具有語法高亮的功能,比如用MPLAYER放
MP3:
mpl<tab>(ayer) -l<tab>(oop) <tab>(0)
-sh<tab>(uffle) -pl<tab>(aylist) <tab>(mp3_playlist)
一陣猛按 <tab> 鍵,一個蠻長的命令就完成了。
補全結果不唯一時給出的提示中含有簡短的說明,這樣通常也不用看幫助了:)比如:
mplayer -l
<tab> 後,自動將參數補全為 -lo 然後給出提示
-{lo}adidx (Load index from file) -{lo}op (Loop playback) {花括號中為青色文字}
它的語法高亮功能十分有用,如果你輸入的命令是正確的,則用青色顯示,正確的參數用白色顯示,錯誤的則一律用紅色。
2.方便的歷史紀錄搜索
還是上面的那個命令
mplayer -loop 0 -shuffle -playlist mp3_playlist
用上翻配合下翻浏覽命令歷史,直到找到這個命令,當然那樣太慢了。
還可以輸入以上命令中的某一部分,如 uffle 只要翻一次就可以找到了
(還可以META+上翻在已輸入部分中插入某一歷史單詞)
3.文件夾歷史紀錄
dirh (dir history)就可以顯示當前會話中進入的文件夾紀錄
使用 prevd 和 nextd 跳轉
假如曾進入過1 2 3 4 5 這幾個文件夾, prevd 4 可以讓你在 5 中直接跳到 1
4.其它的功能
fish基本是兼容bash的。鍵綁定也非常的相似,少數的鍵綁定不盡一致,例如:
\C-h 刪除光標前的一個字符(bash為退格鍵,不方便)
修改 /etc/fish_inputrc 這個文件,增加以下行:
"\C-n": history-search-forward
"\C-p": history-search-backward
現在使用Ctrl+p上翻,使用Ctrl+n下翻。如果已經在命令行中輸入字符,那麼Ctrl+p就是在歷史紀錄向上查找您輸入的字符,Ctrl+n為向下查找,非常的方便。
設定您的默認Shell
如果能夠擁有root權限,可以直接修改 /etc/passwd 文件。找到您用戶ID起始的行
user:x:1000:112:user,,,:/home/user:/bin/bash
最後一個字段為登錄後的默認Shell, /bin/bash 是程序 bash 的主程序路徑。 fish 主程序的路徑通常為 /usr/bin/fish 。
/etc/shells 中列出系統中所有可用Shell( /bin/false 代表禁用Shell)
也可以使用如下命令更改您的默認Shell
chsh -s /usr/bin/fish
(需要輸入您的密碼)
Tip:可以使用 whereis xxx 命令,來查找 xxx 程序的安裝位置,詳見搜索
設定命令的搜索路徑
使用 echo $PATH ,可以顯示 $PATH 變量,輸出如下:
/usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin /usr/bin/X11 /usr/games /usr/X11R6/bin
它是一個環境變量,代表執行命令時,Shell的搜索路徑。
執行一個命令時,Shell會到 $PATH 變量定義的路徑去搜索,並運行與命令同名的可執行文件。如果程序、腳本等可執行文件並不在上面的路徑中,就必須使用絕對路徑或者相對路徑定位可執行文件。
例如:
/usr/local/mplayer -menu xxx.rmvb
/etc/init.d/powernowd start
cd /usr/local/ && ./mplayer -menu xxx.rmvb
可以修改 /etc/environment 文件來設定您的命令搜索路徑,找到 PATH 起始的行
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin"
在雙引號中添加您的自定義路徑,並以 : 分隔。
Ubuntu系統目錄結構
以下為Ubuntu目錄的主要目錄結構,您稍微了解它們都包含了哪些文件就可以了,不需要記憶。
/ 根目錄
│
├boot/ 啟動文件。所有與系統啟動有關的文件都保存在這裡
│ └grub/ Grub引導器相關的文件
│
├dev/ 設備文件
├proc/ 內核與進程鏡像
│
├mnt/ 臨時掛載
├media/ 掛載媒體設備
│
├root/ root用戶的$HOME目錄
├home/
│ ├user/ 普通用戶的$HOME目錄
│ └.../
│
├bin/ 系統程序
├sbin/ 管理員系統程序
├lib/ 系統程序庫文件
├etc/ 系統程序和大部分應用程序的全局配置文件
│ ├init.d/ SystemV風格的啟動腳本
│ ├rcX.d/ 啟動腳本的鏈接,定義運行級別
│ ├network/ 網絡配置文件
│ ├X11/ 圖形界面配置文件
├usr/
│ ├bin/ 應用程序
│ ├sbin/ 管理員應用程序
│ ├lib/ 應用程序庫文件
│ ├share/ 應用程序資源文件
│ ├src/ 應用程序源代碼
│ ├local/
│ │ ├soft/ 用戶程序
│ │ └.../ 通常使用單獨文件夾
│ ├X11R6/ 圖形界面系統
│
├var/ 動態數據
│
├temp/ 臨時文件
├lost+found/ 磁盤修復文件
啟動流程
Linux系統主要通過以下步驟啟動:
1.讀取MBR的信息,啟動Boot Manager
Windows使用NTLDR作為Boot
Manager,如果您的系統中安裝多個版本的Windows,您就需要在NTLDR中選擇您要進入的系統。
Linux通常使用功能強大,配置靈活的GRUB作為Boot Manager,我們將在啟動管理章節中向您介紹它的使用方式。
2.加載系統內核,啟動init進程
init進程是Linux的根進程,所有的系統進程都是它的子進程。
3.init進程讀取 /etc/inittab 文件中的信息,並進入預設的運行級別,按順序運行該運行級別對應文件夾下的腳本。腳本通常以 start 參數啟動,並指向一個系統中的程序。
通常情況下, /etc/rcS.d/ 目錄下的啟動腳本首先被執行,然後是 /etc/rcN.d/ 目錄。例如您設定的運行級別為3,那麼它對應的啟動目錄為 /etc/rc3.d/ 。
4.根據 /etc/rcS.d/ 文件夾中對應的腳本啟動Xwindow服務器 xorg
Xwindow為Linux下的圖形用戶界面系統。
5.啟動登錄管理器,等待用戶登錄
Ubuntu系統默認使用GDM作為登錄管理器,您在登錄管理器界面中輸入用戶名和密碼後,便可以登錄系統。(您可以在 /etc/rc3.d/ 文件夾中找到一個名為 S13gdm 的鏈接)
更改運行級別
在 /etc/inittab 文件中找到如下內容:
# The default runlevel.
id:2:initdefault:
這一行中的數字 2 ,為系統的運行級別,默認的運行級別涵義如下:
0 關機 1 單用戶維護模式 2~5 多用戶模式 6 重啟
服務管理
更改啟動服務
在運行級別對應的文件夾中,您可以看到許多文件名以 S## 和 K## 起始的啟動腳本鏈接。例如:
/etc/rcS.d/S35mountall.sh 掛載文件系統
/etc/rcS.d/S40networking 啟用網絡支持
/etc/rc2.d/S13gdm 啟動登錄管理器
/etc/rc2.d/S20makedev 創建設備文件
/etc/rc2.d/S23xinetd 啟動超級進程
init進程將以 start 為參數,按文件名順序執行所有以 S## 起始的腳本。腳本名稱中的數字越小,它將被越早執行。例如在
/etc/rc2.d/ 文件夾中, S13gdm 文件名中的數字小於 S23xinetd , S13gdm 將比 S23xinetd 先執行。
如果一個腳本鏈接,以 K## 起始,表示它將以 stop 參數被執行。如果相應服務沒有啟動,則不執行該腳本。例如:
/etc/rc2.d/K20powernowd 針對某種硬件的電源管理支持
如果您想禁止某一服務在啟動時自動運行,您可以將相應運行級別中的腳本由 S##xxx 重命名為 K##xxx 。
手動控制服務
您也可以手動運行帶有以下參數的啟動腳本,來控制系統服務。
- start 啟動 - stop 停止 - restart 重啟
例如:
/etc/rc2.d/K20powernowd start
有時您並不清楚當前運行級別,該運行級別下未必有相應腳本;而且此類腳本的前三位字符並不固定,不便於記憶。這時,可以直接使用
/etc/init.d/ 文件夾中的啟動腳本( /etc/rcX.d/ 中的啟動腳本鏈接到 /etc/init.d/
文件夾下相應腳本),這也是推薦的方式。
例如:
/etc/init.d/powernowd start
Note:以上命令的位置並沒有包含在環境變量的搜索路徑中,所以要輸入完整路徑。
常用系統服務
acpi-support 高級電源管理支持 acpid acpi守護程序.這兩個用於電源管理,非常重要
alsa 聲音子系統 alsa-utils
anacron cron的子系統,將系統關閉期間的計劃任務,在下一次系統運行時執行。
apmd acpi的擴展 atd 類似於cron的任務調度系統。建議關閉
binfmt-support 核心支持其他二進制的文件格式。建議開啟 bluez-utiles 藍牙設備支持
bootlogd 啟動日志。開啟它 cron 任務調度系統,建議開啟
cupsys 打印機子系統。 dbus 消息總線系統(message bus system)。非常重要
dns-clean 使用撥號連接時,清除dns信息。
evms 企業卷管理系統(Enterprise Volumn Management system)
fetchmail 郵件用戶代理守護進程,用於收取郵件 gdm gnome登錄和桌面管理器。
Gdomap gpm 終端中的鼠標支持。 halt 別動它。
hdparm 調整硬盤的腳本,配置文件為 /etc/hdparm.conf。 hibernate 系統休眠
hotkey-setup 筆記本功能鍵支持。支持類型包括: HP, Acer, ASUS, Sony, Dell, 和IBM
hotplug and hotplug-net 即插即用支持,比較復雜,建議不要動它
hplip HP打印機和圖形子系統 ifrename 網絡接口重命名腳本。如果您有十塊網卡,您應該開啟它
inetd 在文件 /etc/inetd.conf 中,注釋掉所有你不需要的服務。如果該文件不包含任何服務,那關閉它是很安全的。 klogd 重要。
linux-restricted-modules-common 受限模塊支持。 /lib/linux-restricted-modules/ 文件夾中的模塊為受限模塊。例如某些驅動程序,如果您沒有使用受限模塊,就不需要開啟它。
lvm 邏輯卷管理系統支持。 makedev 創建設備文件,非常重要。 mdamd 磁盤陣列
module-init-tools 從/etc/modules加載擴展模塊,建議開啟。
networking 網絡支持。按 /etc/network/interfaces 文件預設激活網絡,非常重要。
ntpdate 時間同步服務,建議關閉。 pcmcia pcmcia設備支持。 powernowd 移動CPU節能支持
ppp and ppp-dns 撥號連接 readahead 預加載庫文件。 reboot 別動它
resolvconf 自動配置DNS rmnologin 清除nologin rsync rsync守護程序
sendsigs 在重啟和關機期間發送信號 single 激活單用戶模式 ssh ssh守護程序。建議開啟
stop-bootlogd 在2,3,4,5運行級別中停止bootlogd服務 sudo 檢查sudo狀態。重要
sysklogd 系統日志 udev & udev-mab 用戶空間dev文件系統(userspace dev filesystem)。重要
umountfs 卸載文件系統 urandom 隨機數生成器 usplash 開機畫面支持
vbesave 顯卡BIOS配置工具。保存顯卡的狀態 xorg-common 設置X服務ICE socket。
adjtimex 調整核心時鐘的工具 dirmngr 證書列表管理工具,和gnupg一起工作。
hwtools irqs優化工具 libpam-devperm 系統崩潰之後,用於修理設備文件許可的守護程序。
lm-sensors 板載傳感器支持 mdadm-raid 磁盤陳列管理器
screen-cleanup 清除開機屏幕的腳本 xinetd 管理其他守護進程的一個inetd超級守護程序
重要配置文件
!無論任何情況下,修改配置文件之前,先備份它!
建議使用這個命令: sudo cp xxx xxx_`date +%y%m%d_%H:%M` 。
當然這很麻煩,您可以新建一個名為 bak 的文件,內容如下:
#!/bin/bash
sudo cp $1 $1_`date +%y%m%d_%H:%M`
把它放在您能夠記住的目錄下,比如 /home ,執行命令 sh /home/bak xxx ,就可以將當前文件夾下的文件 xxx 另存為 xxx_yymmdd_HH:MM 的格式了
全局配置文件
系統初始化
/etc/inittab 運行級別、控制台數量 /etc/timezone 時區 /etc/inetd.conf 超級進程
文件系統
/etc/fstab 開機時掛載的文件系統 /etc/mtab 當前掛載的文件系統
用戶系統
/etc/passwd 用戶信息 /etc/shadow 用戶密碼 /etc/group 群組信息
/etc/gshadow 群組密碼 /etc/sudoers Sudoer列表(請使用“visudo”命令修改此文件,而不要直接編輯)
Shell
/etc/shell 可用Shell列表 /etc/inputrc ReadLine控件設定 /etc/profile 用戶首選項
/etc/bash.bashrc bash配置文件
系統環境
/etc/environment 環境變量 /etc/updatedb.conf 文件檢索數據庫配置信息 /etc/issue 發行信息
/etc/issue.net /etc/screenrc 屏幕設定
網絡
/etc/iftab 網卡MAC地址綁定 /etc/hosts 主機列表 /etc/hostname 主機名
/etc/resolv.conf 域名解析服務器地址 /etc/network/interfaces 網卡配置文件
用戶配置文件
/etc/ 目錄下的文件,只有root用戶才有權修改。應用軟件的全局配置文件,通常普通用戶也不能夠修改,如果要通過配置軟件,來適應特殊需求,您可以修改用戶配置文件。
用戶配置文件通常為全局配置文件的同名隱藏文件,放在$HOME目錄下,例如:
/etc/inputrc /home/user/.inputrc
/etc/vim/vimrc /home/user/.vim/vimrc
也有少數例外,通常是系統程序
DPKG
Linux系統中,軟件通常以源代碼或者預編譯包的形式提供。
軟件源代碼需要編譯為二進制的機器代碼才能夠使用,安裝比較耗時,不過您可以自行調節編譯選項,決定需要的功能或組件,或者針對硬件平台作一些優化。
預編譯的軟件包,通常是由軟件的發布者進行編譯,您只要將軟件拷貝到系統中就可以了。考慮到預編譯軟件包的適用性,預編譯軟件包通常不會針對某種硬件平台優化。它所包含的功能和組件也是通用的組合。
Ubuntu系統中,軟件通常以 deb 格式的包文件發布,它是一種預編譯軟件包。deb包中除了包含已編譯的軟件,通常還包括軟件的拷貝路徑、對其它軟件包的依賴關系紀錄、比較通用的配置文件以及軟件的描述、版本、作者、類別、占用空間等信息。
deb軟件包命令遵行如下約定:
soft_ver-rev_arch.deb
soft軟件包名稱 ver軟件版本號 revUbuntu修訂版本號 arch目標架構名稱
例如: azureus_2.4.0.2-0ubuntu2_all.deb
您需要使用 dpkg 命令來管理deb軟件包:
dpkg -i | --install xxx.deb 安裝deb軟件包
dpkg -r | --remove xxx.deb 刪除軟件包
dpkg -r -P | --purge xxx.deb 連同配置文件一起刪除
dpkg -I | -info xxx.deb 查看軟件包信息
dpkg -L xxx.deb 查看包內文件
dpkg -l 查看系統中已安裝軟件包信息
dpkg-reconfigure xxx 重新配置軟件包
有些時候,您使用 dpkg 安裝一個軟件包,系統會提示您該軟件包依賴其它軟件包。這時,您先安裝其它軟件包,直到滿足依賴關系為止。或者同時安裝多個軟件包
dpkg -i aaa.deb bbb.deb ccc.deb
APT
如果一個軟件依賴關系過於復雜,使用 dpkg
來安裝它,並不是一個明智的選擇,這個時候您就需要用到APT軟件包管理系統。APT可以自動的檢查依賴關系,通過您預設的方式來獲得相關軟件包,並自動
安裝配置它。事實上,在多數情況下,我們推薦您使用APT軟件包管理系統。
APT系統需要一個軟件信息數據庫和至少一個存放著大量deb包的軟件倉庫,我們稱之為 源 。 源 可以是網絡服務器,安裝CD或者本地軟件倉庫。您需要修改 /etc/apt/sources.list 文件,使APT系統能夠連接到 源。
從以下頁面中獲得網絡安裝源的列表,並且根據您的網絡環境,選擇速度較快的源。
http://wiki.ubuntu.org.cn/%E5%BF%AB%E9%80%9F%E......%97/DapperDrake
APT系統主要包括 apt-get 和 apt-cache 等命令。通常是復合命令,包含若干個子命令。
apt-get install xxx 安裝xxx
-d 僅下載 -f 強制安裝
apt-get remove xxx 卸載xxx
apt-get update 更新軟件信息數據庫
apt-get upgrade 進行系統升級
apt-cache search 搜索軟件包
說明:建議您經常使用 sudo apt-get update 命令來更新您的軟件信息數據庫
APT系統修復
由於各種意外,APT系統可能會出現問題,使用如下命令,嘗試進行修復:apt-get -f install
源碼包
對於絕大多數軟件,我們建議您使用APT系統來安裝它。在少數情況下,例如某軟件沒有以deb包的格式發布,或者需要定制適合自己的軟件,您可以通過編譯源代碼的方式安裝它。
首先需要下載軟件的源碼包,並且將它解包為一些源代碼文件。並了便於管理,建議將下載的源碼包移動到 /usr/local/src/ 目錄下,並在這裡解包。
sudo mv xxx.tar.gz /usr/local/src 移動源碼包
cd /usr/local/src 進入“/usr/local/src/”目錄
sudo tar -xzvf xxx.tar.gz 解包源碼
cd xxx_ver/ 進行解包後的源碼目錄
源碼目錄中通常有一個 configure 腳本,用來配置即將開始的編譯過程。您可以執行它
sudo ./configure [--prefix=/usr/loca/xxx ......]
它會自動檢測軟件的編譯環境和依賴關系,並且生成 Makefile 文件。
使用帶參數的命令 ./configure --help ,或者閱讀 INSTALL 文件,查看該腳本允許的參數。例如使用
--prefix=/usr/local/xxx 參數,將軟件的安裝目錄設定為 /usr/local/xxx/
。(如果一定要將軟件安裝在單獨目錄下,建議您安裝在這裡)
現在執行 make 命令,系統會根據 Makefile 文件中的設定,通過 make 工具調用編譯器和所需資源文件,將源代碼編譯成目標文件。
sudo make
執行 make install 命令, make 工具會自動連接目標文件和庫文件,將最終生成的文件拷貝到 Makefile 文件設定的路徑中,並且完成更改文件的屬性,刪除殘留文件等活動。
sudo make install
現在,編譯安裝已經完成,為了更方便的使用它,需要給程序的可執行文件作一個符號鏈接。
sudo ln -sf /usr/local/xxx/可執行文件 /usr/local/bin/可執行文件
Tip:為了順利的進行編譯,至少需要安裝 build-essential 軟件包。
sudo apt-get install build-essential
Xwindow是工作站圖形系統的工業標准,它有多種不同的實現,Ubuntu系統中使用的為Xorg。
(比較前衛的圖形界面系統XGL,實際代替X服務器的作用,另外還有與之配套的窗口管理器)
歷史
當然,Xwindow有悠久的歷史和傳統,不過那不在我們討論的范圍。您要注意的有兩點:
* Xwindow 和 Xbox 中的“X”本意是不同的, X 只是 W 後的一個字母,差不多應該這樣理解,Xwindow 是 Window 的接班人 (注意,Window不是Windows)
* 同樣,也不要把 Xwindow 說成是 Xwindows,那是一種亵渎!一切偉大的創造,都應得到應有的理解和尊重。
架構及原理
Xwindow使用服務器-客戶端架構。無論本地圖形界面,還是遠程圖形界面,都以同樣的流程工作。這樣便不需要分別進行設計和維護,極大的提高了網絡透明性。
本地X客戶端 ┐ ┌ 鍵盤
遠程X客戶端 ┼ X協議 ─ X服務器 ─ 硬件規范 ┼ 鼠標
遠程X客戶端 ┘ └ 顯示器
Xserver
Xwindow系統服務器端,通過驅動程序(硬件規范)來管理硬件資源。
例如:當我們移動鼠標時,通過驅動程序,向 Xserver 發送信息:
“向右移動200點,向上移動100點”(向右上移動);“按下左鍵”……
Xserver作出如下響應:
1、上一次鼠標停止的坐標為600,500
2、向右200,向上100。現在鼠標位於坐標800,600
3、坐標800,600處,為窗口Firefox的“關閉”按鈕
4、根據預設動作,將 “點擊Firefox窗口的關閉按鈕” 翻譯為 “關閉窗口Firefox”
5、向X客戶端Firefox發送一個“退出”消息
6、Xserver通過顯示子系統(顯卡、顯示器),全程顯示鼠標的位置和移動
* 事實上,向程序發送“退出”信號,通常窗口管理器完成……為了描述方便,這裡暫不區分。稍後,我們將向您介紹 窗口管理器 的其它一些細節。
大多數的鼠標不需要專門的驅動程序,因為它們符合某一硬件規范,例如:有四個移動方向和三個鍵
Xclient
Xwindow系統客戶端,通過X協議,實現與Xserver 的交互。
例如:
1、Xclient (假設Firefox) 接收Xserver的消息: 輸入焦點在地址欄的范圍內,“ubuntu.org.cn”,回車
2、Firefox根據預設動作,將這些消息識別為 “打開鏈接 ubuntu.org.cn”
3、Firefox向域名服務器請求 鏈接 “ubuntu.org.cn”。域名服務器將這個請求轉換為 “http://ubuntu.org.cn/” 和 IP地址211.148.131.7,發送回 Firefox
4、Firefox將 “http://ubuntu.org.cn/”顯示在地址欄(向Xserver發送請求,在地址欄位置顯示這個地址)
5、Firefox向地址 211.148.131.7 請示顯示頁面。
6、Firefox將服務器發送回的頁面顯示在主窗口中
Xprotocol
Xwindow系統協議,Xserver和Xclient之間進行通信的規則
窗口管理器
Window Manager,一種特殊的Xclient。
使用窗口管理器時,Xserver並不直接與其它Xclient通信,而是通過WM中轉,當一些消息被定義為WM指令時,它們會被攔截。例如Alt+F4關閉窗口、拖動標題欄……
消息“打開鏈接 ubuntu.org.cn”,具體內容如下:
輸入焦點在地址欄的范圍內,“ubuntu.org.cn”,回車
Xserver並不能直接判斷焦點,而是這樣:
1、Xserver向WM發送位置和點擊的信息,WM根據當前的“焦點策略”確定激活(最上層)的窗口為Firefox
2、Xserver將Firefox顯示在最上層,高亮顯示它的標題欄
3、在窗口Firefox內點擊地址欄,或者 Ctrl+L,Xserver將位置信息發送給WM,WM再發送給Firefox
4、Firefox判斷當前焦點後,顯示一個閃動的文字輸入光標
5、Firefox將輸入光標通過WM發送給Xserver,Xserver在屏幕相應位置進行顯示
那麼,“窗口管理器”到底能作些什麼呢?其實它所作的一切都是管理窗口。例如:
1.最上層的窗口會把其它窗口擋住
2.它通常是一個“已激活窗口”,根據不同的“焦點策略”,窗口管理器確定被激活的窗口。
激活窗口標題欄高亮顯示,接收大部分的鍵盤消息和窗口內的鼠標點擊消息。
3.為了美觀和容易分辨,大多數窗口都要有標題欄和邊框。
為了方便,標題欄上還要有一些按鈕,比如:最小化,最大化,關閉(這些按鈕是窗口管理器請求的小窗口)
4.一個窗口可以在另一個窗口旁邊顯示,而不一定完全被遮擋。為了實現這一點,就要控制窗口顯示的位置
5.為了控制窗口的顯示位置,需要將整個屏幕用座標描述,最好的辦法是繪制一個填充整個屏幕的窗口,也就是根窗口。
6.因為根窗口是最大的,所以它可以嚴嚴實實的遮擋任何窗口,為了避免這一點,根窗口永遠在最底層。
這很形象的說明了為什麼它叫作“根窗口” ……root
7.根窗口不一定只有一個,大多數的窗口管理器可以使用 “工作區” ,來切換顯示多個根窗口
8.根窗口固定位置上通常放置一些其它Xclient的窗口,例如底部面板,頂部面板,側面板,程序啟動圖標
9.面板上又可以放一些其它的Xclient窗口,如任務條,啟動欄,菜單……
任務條可以以圖標顯示正在運行的任務,還可以作其它的雜活,像自動掛載USB設備……
啟動流程
我們知道 init 是linux的根進程,是所有進程的父進程。同樣, xinit是所有Xwindow進程的根進程
Startx
startx 命令可以在命令行下啟動圖形界面。執行startx 命令時,實際執行這一命令:
xinit /etc/X11/xinit/xinitrc -- /etc/X11/xinit/xserverrc
根據腳本 /etc/X11/xinit/xserverrc 啟動Xserver,同時根據腳本 /etc/X11/xinit/xinitrc 啟動指定Xclient進程,例如窗口管理器
腳本 /etc/X11/xinit/xserverrc 以預設的參數運行程序 /usr/bin/X11/X
/etc/X11/xinit/xinitrc 腳本則指向 /etc/X11/Xsession ,依次啟動 /etc/X11/Xsession.d 目錄中的腳本
* 您可以在用戶配置文件 ~/.Xsession 中定義使用的WM,它的優先級高於全局配置文件(對於GDM會話不起作用)
* startx啟動時,並不會再進行身份認證。因為它啟動的是 /etc/X11/Xsession.d/gnome-session ,而不是 GDM會話
GDM會話
Ubuntu系統啟動時自動進入圖形界面,不需要運行 startx 命令
在某些啟動級別中,包含了gdm的啟動腳本,例如 : /etc/rc2.d/S13gdm
1. 指向 /etc/gdm/gdm-cdd.conf 文件,加載預設視覺主題,啟動 /usr/lib/gdm/gdmgreeter(登錄屏幕)
2. 用戶身份認證完成後,啟動 /etc/X11/default-display-manager 這個文件中設定的默認窗口管理器 /usr/sbin/gdm
gdm在啟動時,會要求用戶名和密碼,也就是我們看到的登錄屏幕(gdmgreeter)
* /usr/share/xsessions 目錄下為所有可用登錄會話的腳本
配置文件
X服務器
X服務器的主要配置文件為 /etc/X11/xorg.conf
布局
Section "ServerLayout"
Identifier "Default Layout"
Screen "Default Screen" 0 0
InputDevice "Generic Keyboard"
InputDevice "Configured Mouse"
EndSection
* 定義了 布局標識 、 屏幕標識 、 鍵盤標識 、 鼠標標識
模塊
Section "Module"
Load "i2c"
Load "bitmap"
Load "ddc"
Load "dri"
Load "extmod"
Load "freetype"
Load "glx"
Load "int10"
Load "type1"
Load "vbe"
EndSection
X核心字體路徑
Section "Files"
FontPath "/usr/share/X11/fonts/75dpi"
FontPath "/usr/share/X11/fonts/100dpi"
FontPath "/usr/share/X11/fonts/misc"
FontPath "/usr/share/X11/fonts/cyrillic"
FontPath "/usr/share/X11/fonts/100dpi/:unscaled"
FontPath "/usr/share/X11/fonts/75dpi/:unscaled"
FontPath "/usr/share/X11/fonts/Type1"
FontPath "/usr/share/fonts/Chinese/wqy-bitmapfont"
EndSection
屏幕
Section "Screen"
Identifier "Default Screen"
Device "ATI Technologies, Inc. RV370 5B62 [Radeon X600 (PCIE)]"
Monitor "DELL E176FP"
DefaultDepth 24
SubSection "Display"
Depth 1
Modes "1280x1024" "1152x864" "1024x768" "800x600" "720x400" "640x480"
………………
EndSubSection
EndSection
* DefaultDepth 24 默認色深
* SubSection 可用色深及分辨率
顯卡
Section "Device"
Identifier "ATI Technologies, Inc. RV370 5B62 [Radeon X600 (PCIE)]"
Driver "fglrx"
Option "KernelModuleParm" "agplock=0"
VideoRam 131072
EndSection
* Identifier 顯卡標識
* Driver 顯卡驅動(如不同正常啟用圖形界面,首先嘗試"vesa")
* Option 顯卡參數
* VideoRam 顯存大小
顯示器
Section "Device"
Identifier "ATI Technologies, Inc. RV370 5B62 [Radeon X600 (PCIE)]"
Driver "fglrx"
Option "KernelModuleParm" "agplock=0"
VideoRam 131072
EndSection
配置文件內部結構
/
├/ "ServerLayout" 布局
│├ "InputDevice" keyboard 鍵盤
│├ "InputDevice" mouse 鼠標
││
│└/ "Screen" 顯示子系統
│ ├ "Monitor" 顯示器
│ ├ "Device" videocard 顯卡
│
│
├ "Files" 字體
└ "Module" 模塊
X客戶端
在 /etc/X11/Xsession 文件中可以發現下列內容
OPTIONFILE=/etc/X11/Xsession.options
SYSRESOURCES=/etc/X11/Xresources
USRRESOURCES=$HOME/.Xresources
SYSSESSIONDIR=/etc/X11/Xsession.d
USERXSESSION=$HOME/.xsession
ALTUSERXSESSION=$HOME/.Xsession
ERRFILE=$HOME/.xsession-errors
* OPTIONFILE=/etc/X11/Xsession.options 設定X進程的啟動參數。例如允許用戶進程allow-user-xsession
* Xresources X資源文件。許多程序保留了X接口,允許X服務器管理一些視覺選項,例如窗口內的字體,配色等
* xsession X進程。可以設置一些啟動時自動運行的程序,也可以用來設定自己的窗口管理器(窗口管理器和桌面環境或者登錄管理器是無關的)
字體
freetype渲染引擎
作為Xorg服務器的一個模塊,freetype的功能包括讀取Truetype字體信息,如大小、分辨率、編碼等,並以之為依據渲染字體 -
freetype2.x相對於freetype1.x 增加了抗鋸齒等功能 - ( /etc/X11/xorg/conf 的 Module
字段中,可以選擇字體渲染模塊,建議使用默認的 freetype )
freetype只負責渲染字體。而查找字體,則可以由X服務器、X客戶端或者字體服務器來完成。找到字體後,使用freetype引擎就地渲染
X核心字體
X服務器根據X客戶端的請求(字符編碼),查找字體並進行渲染,然後顯示,我們稱之為
Xft字體
X客戶端自行查找字體並進行渲染,X服務器只負責顯示
由於Xft字體的渲染在客戶端完成,所以它可以動態的加載,而不需要隨同X服務器一同啟動
字體服務器
另外還有一種字體服務器模式,例如 XFT字體:當客戶端請求字體時,X服務器將請求轉發到字體服務器,由字體服務器查找字體,並使用freetype引擎渲染,將結果傳回X服務器,X服務器進行顯示……
X核心字體
/etc/X11/xorg.conf 中可以配置X核心字體的搜索路徑
Section "Files"
FontPath "/usr/X11R6/lib/X11/fonts/misc/"
FontPath "/usr/X11R6/lib/X11/fonts/Type1/"
FontPath "/usr/X11R6/lib/X11/fonts/Speedo/"
FontPath "/usr/X11R6/lib/X11/fonts/100dpi/"
FontPath "/usr/X11R6/lib/X11/fonts/75dpi/"
EndSection
*
當X客戶端向X服務器請求顯示文字的時候,X服務器會按上面列表的先後順序查找字體
例如顯示中文時,如果第一個路徑中的字體不包含中文,則查找下面的路徑,直到發現中文字體
*
請將您偏好的字體放在靠前的位置
要使安裝的字體能夠作為X核心字體使用,將字體的安裝路徑添加到上面的列表中,使用 mkfontscale 、 mkfontdir
掃瞄文件夾中的字體,並生成索引,就可以了(建議使用 ttmkfdir 生成 fonts.scale ,將其復制為 fonts.dir )
字體的選擇及顯示風格,可以修改GTK1的配置文件,或者在Xresources文件中對程序單獨進行定義
事實上,在我們的日常應用中,X核心字體環境並不常見,使用GTK1圖形庫的程序、某些類型的終端……
* Emacs也是這樣一個老派的程序……不過Emacs23中剛剛加入了xft字體的支持
XFT字體
Xft字體相關選項在 /etc/fonts/fonts.conf 文件中配置
可以使用 fc-cache 命令,遞歸掃瞄以下目錄中的字體(包括子文件夾中的字體),建立字體緩存
/usr/share/X11/fonts
/usr/share/fonts
/usr/local/share/fonts
~/.fonts
* /etc/fonts/fonts.conf 文件的 <dir> 字段
多數支持GTK2或者Qt圖形庫的X客戶端能夠使用Xft字體渲染技術
* GTK2為Gnome使用的圖形庫,Qt為KDE使用的圖形庫。相對來說,GTK2圖形庫在程序的GUI設計中更加通用
安裝字體,只要將字體拷貝到以上任意目錄, fc-cache -fv 刷新字體緩存即可 (參數: -f 強制刷新; -v 顯示過程)
使用命令 fc-list 列出所有可用字體
字體的選擇及顯示風格,可以修改GTK2或者Qt的配置文件,建議使用圖形界面配置
* 一般情況下,桌面環境中附帶了相關程序,例如 gnome-font-properties
一些細節
Linux是大小寫敏感的系統,所有的命令、路徑、參數、變量……都區分大小寫
使用 TAB 鍵補全命令,無論任何時候,多按幾次TAB總會有所幫助
Shell的功能鍵能夠協助您更高效的編輯命令,請熟悉其鍵綁定,盡量使用它
命令由 命令名 、 分隔符 、 參數 、 操作對象 構成
命令名
標識命令的功能,例如cp(copy)、mv(move)、rm(remove)……
有些命令包含一些子命令,您可以認為它的命令名由兩個單詞構成,例如“apt”軟件包管理系統:
apt-get install 安裝一個軟件
apt-get remove 刪除一個軟件
分隔符
通常為空格,多個連續的空格視為一個空格,下面兩個命令相同:
cp a b
cp a b
有一些特殊符號也屬於分隔符,例如管道 | 、重定向 > 、 >> 、 < 、後台運行 & 、序列執行 && 、 ; 。使用這些符號時,您不需要再使用空格作為分隔符,例如:
ls -al|less
寫為以下形式,是為了讓您更容易的閱讀它:
ls -al | less
參數
精細調節命令的行為,以 - 引導,通常為參數名的首字母。許多軟件都可以使用 -h 參數來閱讀使用說明,例如:
apt-get -h
也可以使用參數的全名,一般以 -- 引導,例如:
apt-get --help
多數命令中,使用 - 引導多個字符,將會被視為多個參數,例如:
apt-get -help
系統會解讀為以下命令
apt-get -h -e -l -p
少數命令的參數,不需要以 - 引導,或者使用 - 引導參數全名,例如:
ps aux
/etc/init.d/gdm start
mplayer -loop xxx
需要對多個對象進行操作時,可以使用空格分隔符將它們隔開:
touch 1 2 3 4 5 6
使用空格分隔的多個對象,視為一個整體,作為命令的一個操作對象:
mv 1 2 3 4 5 6 /home/
這個命令把“1 2 3 4 5 6”作為一個操作對象,移動到另一個操作對象,“/home/”目錄
遞歸 表示在子層次中重復相同操作。例如遞歸復制某目錄,不但復制當前目錄及其下的所有文件;而且對當前目錄的子目錄,也進行遞歸復制的操作。
格式約定
使用 [] 表示可選項,實際輸入為方括號中的內容,例如
ls [-al]
ls是必須的,參數不需要以方括號括起來。
使用 <> 表示必需項,實際輸入為尖括號中的內容
使用 | 表示 或 ,以 | 分隔的項目不能同時使用,例如
tar [-z|j c|x vf] <歸檔文件> [源文件]
參數通常緊跟命令名,除非必要,在命令格式中,我們通常省略它們
uptime
聯機信息-時間,顯示如下
11:27pm up 9 days, 7:12, 3 user, load average: 0.07, 0.12, 0.14
當前系統時間 系統運行時間 當前在線用戶數 系統負荷 1分鐘前 5分鐘前 15分鐘前
w
聯機信息-已登錄用戶,顯示如下
01:04:10 up 1:34, 2 users, load average: 0.25, 0.16, 0.11
uptime 信息
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
user tty1 192.168.0.1 23:30 1:33 0.14s 0.12s -bash
用戶名 登錄方式 來源地址 登錄時間 發呆時間 資源占用 當前任務
Tip:w [用戶名稱] : 顯示某一用戶相關信息
who
聯機信息,常用參數
-r 運行級別
whoami
顯示當前用戶名
last
最近用戶登錄信息
-<數字> 使用數字作為參數,控制顯示條目。例如
last -10 顯示10條紀錄
uname
系統信息
-s 內核名稱(默認參數) -a 全部 -p CPU信息 -n 主機名
-r 內核發行信息(版本號) -v 內核版本信息
date
顯示、設定系統時間
-u 顯示格林尼洛時間(UTC)
MMDDhhmm[[CC]YY][.ss] 設定時間,需要管理員權限。例如: date 12292359
MM 月份 DD 天數 hh 小時 mm 分鐘 CC 年份前兩位 YY 年份後兩位 ss 秒鐘
秒鐘、年份為可選,例如: date 122923592006.59
+[%X]設定顯示格式,以下為date默認輸出格式:
date +%Y年%m月%d日%A%H:%M:%S%Z
格式控制 %n 換行 %t 制表符
小時 %H(00~23) %I(01~12) %k(0~23) %l(1~12) %p(AM|PM)
分、秒 %M分鐘(00~59) %S秒(00..61) %T(hh:mm:ss) %r(hh:mm:ss [AM|PM])
%s 從1970年1月1日00:00:00 UTC到目前為止的秒數 %X(%H:%M:%S) %Z時區
星期 %a(Sun~Sat) %A(Sunday~Saturday) %w : 一周中的第幾天 (0..6)
年份 %Y(0000~9999) %y(00~99)
月份 %m(01~12) %b %h(Jan~Dec) %B(January~December)
日期 %d(01~31) %j(001~366)
%x(本地格式mm/dd/yy) %D(mm/dd/yy) %c
一年中的第幾周
%U(00~53)以Sunday為一周的第一天 %W(00~53)以Monday為一周的第一天
cal
顯示日歷
一些細節
/ 目錄為文件系統根目錄,所有目錄都是它的子目錄
絕對路徑以 / 起始,相對路徑以當前所在目錄起始
目錄是一種特殊類型的文件,如果沒有特別指明, 文件 包括文件和目錄
.. 表示上一級目錄, . 表示當前目錄,它們是兩個特殊目錄
鏈接
為當前文件建立在其它路徑中的訪問方法。例如將系統中其它位置的可執行文件,鏈接到 /usr/local/bin 目錄下,使用命令調用。
ls [路徑]
顯示當前目錄文件列表
--color 不同屬性以不同顏色顯示(默認參數)
-a 全部顯示 -i 顯示inode值 -l 詳細信息
-F 顯示文件類型後綴 目錄/ 鏈接@ 可執行文件* 端口文件= 管道文件| >
-A 顯示隱藏文件 -R 遞歸顯示子目錄文件列表 -S 按文件大小排序
-t 按修改時間排序 -u 按訪問時間排序 -d 只顯示目錄,不遞歸顯示目錄下的文件
cd [目錄路徑] | [特殊路徑]
切換目錄
目錄路徑可以使用絕對路徑或者相對路徑特殊路徑:
~ $HOME目錄(默認值) - 上一次目錄 .. 上一級目錄 . 當前目錄
說明:您可以通過修改 /etc/environment 文件,來定義 $CDPATH 變量,設定“cd”命令的搜索路徑。
pwd
顯示當前路徑
file <文件名>
顯示文件類型
-i 顯示mime類型
du [路徑]
計算文件或目錄空間占用
-h 人性化顯示。自動以G、M、K為單位顯示占用空間大小 -l 重復計算硬鏈接文件大小
-L 計算符號鏈接文件大小 -a 顯示當前目錄子目錄中的文件 -c 顯示文件數
less <文件名>
浏覽文件,使用VI和Emacs兩種風格的鍵綁定。以下為VI風格鍵綁定
Ctrl+f(orward) 向下翻一頁 Ctrl+d(own) 向下翻半頁
Ctrl+b(ackward) 向上翻一頁 Ctrl+u(p) 向上翻半頁 / 查找 q(uit) 退出
touch <目標文件>
觸碰,在不修改文件的前提下,更改其時間屬性。通常用來創建一個空文件
mkdir <文件夾>
創建文件夾
-p <多級目錄> 按路徑創建多級目錄 -m <數字權限值> 設定權限
cp <源文件> <目標目錄|文件>
將源文件復制為目錄文件,或者將源文件復制到目標目錄。多個源文件使用空格分隔
cp <源目錄> <目標目錄>
將源目錄復制到目標目錄中,如果復制多個源目錄,需要使用 -R 參數
-a 相當於-dpr參數 -d 保留鏈接 -f 強制復制,覆蓋目標文件 -i 覆蓋時詢問用戶
-p 保留修改時間和訪問權限 -r -R 遞歸復制(目錄=>目錄) -l 創建鏈接
-v 顯示過程
rm <目標目錄|文件>
刪除
-r -R 遞歸刪除 -f 強制刪除(無需確認,直接刪除。慎用!) -i 交互式刪除(詢問用戶)
rmdir <目標目錄>
刪除目錄時,建議您使用“rm -r”命令
mv <源文件> <目標目錄|文件>
相當於cp後刪除源文件,也可以作為“重命名”使用。
mv <源目錄> <目標目錄>
-r -R 遞歸
ln <源文件> <鏈接>
鏈接
-s 符號鏈接 -f 強制鏈接,覆蓋目標文件 -i 覆蓋前詢問用戶
nano
一個簡單輕便的文本編輯器,使用Emacs風格的鍵綁定。
split <源文件> [目標文件名前綴]
將源文件按一定規則分割成若干個目標文件。默認文件名前綴為 x
-<行數> 按行數分割文件 -l <行數> 同上
-b <字節> 按大小分割文件。可以使用b、k、m作單位,不指定單位的情況下,默認單位為b
-C <字節> 按大小分割文件,並盡量保持每行的完整
示例:split -C 100k file.split x
cat <文件名>
輸出文件內容。用空格分隔多個文件名,可以將多個文件內容連接到一起輸出。使用重定向合並為一個文件
-n 在輸出中添加行號 -b 在輸出中添加行號,空行不編號
-s 將兩行或以上的空行,合並為一個空行
示例:cat xaa xab xac > file.split
sort [-o <輸出文件>] [-t <分隔字符>] [+<起始字段> - <結束字段>] [文件]
對文本內容排序
-m 合並文件 -c 檢查文件是否已按規則排序 -b 忽略行首空格字符
-u 忽略內容重復行 -f 忽略大小寫 -l 忽略非打印字符 -M 作為月份比較
-d 按字典順序排序,按照字母、數字、空格、制表符排序 -r 逆序輸出
more
查看文件內容,我們建議您使用 less
diff <文件名>
比較文件
cksum [文件名]
計算文件的CRC值。不指定文件名則從標准輸入設備讀入數據,例如:
echo xxx | cksum
md5sum [文件名] 計算文件的md5值。同上
一些細節
一個文件主要包含下列屬性, ls -l
- rwx rwx rwx user group date filename
111 101 101
其中,第一組為歸屬用戶的權限,第二組為歸屬群組的權限,第三組為其它用戶群組的權限。user為文件的歸屬用戶,group為文件的歸屬群組,date為日期信息,filename為文件名。
對於文件夾,必須擁有它的可執行權限,才能夠使用 cd 命令進入該文件夾;擁有可讀權限,才能夠使用 ls 命令查看該文件夾的文件列表。
root用戶擁有最高權限。
可以使用3位的二進制數字來描述一組權限,某一權限對應的數字為1,則表示具有該種權限,為0,則不具有該種權限。
使用二進制數字來描述一組權限,雖然非常直觀,但是3組權限需要用9位數來表示,使用不夠方便。因此我們將三組權限使用3位8進制數字來表示。它們的對應關系為:
r 100 4
w 010 2
x 001 1
將這三位8進制數字相加的結果,就可以表示該組權限的具體內容,例如:
7=4+2+1=rwx
5=4+1=rx
755=4+2+1 4+1 4+1=rwx r-x r-x
還可以使用 a 、 u 、 g 、 o 表示歸屬關系,使用 = 、 + 、 - 表示權限變化,使用 r 、 w 、 x 表示權限內容,
a 所有用戶 u 歸屬用戶 g 歸屬群組 o 其它用戶
= 具有權限 + 增加權限 - 去除權限
r 可讀權限 w 可寫權限 x 可執行權限
例如:
a+x 給所有用戶增加可執行權限
go-wx 將歸屬群組和其它用戶的可寫、可執行權限去掉
u=rwx 歸屬用戶具有可讀、可寫、可執行權限
chmod <權限表達式> <文件|目錄>
更改文件的權限。權限的表達式可以使用三位8進制數字表示,或者使用 augo +-= rxw-s 來表示
-R 遞歸
-v 顯示過程
-c 類似“-v”,僅顯示更改部分
--reference=<參考文件或目錄> 以指定文件為參考更改權限
示例:
chmod -R a+x path
chmod -Rv 755 path
chown <歸屬用戶>[:歸屬群組] <文件|目錄>
更改文件的歸屬用戶。可以使用用戶名或者UID
-R 遞歸 -v 顯示過程 -c 類似 -v ,僅顯示更改部分
--reference=<參考文件或目錄> 以指定文件為參考更改權限
示例:
chown user:admin path chown -R user.admin path chown user path
chgrp <歸屬群組> <文件|目錄>
更改文件的歸屬群組。可以使用群組名或者GID
參數同上
SUID、SGID、Sticky bit
某些情況下,需要以可執行文件歸屬用戶的身份執行該文件,可以為該文件設置SUID。同樣,設置SGID能夠以該文件歸屬群組的身份執行它。
例如:用戶自行設定密碼。出於安全方面的考慮, /etc/shadow 只能由root用戶直接修改。
-rw------- root root /etc/shadow
這個時候,可以為程序 /usr/bin/passwd
設置SUID,當普通用戶執行“passwd”命令時,便能夠以該程序歸屬用戶root的身份修改 /etc/shadow
文件。而“passwd”程序自身帶有身份驗證機制,不能通過驗證時拒絕執行,從而保證了安全。
ls -l /usr/bin/passwd
-r-s--x--x root root /usr/bin/passwd
我們發現,歸屬用戶的可執行權限位使用 s ,表示SUID。同樣,歸屬群組的可執行權限位使用 s ,表示SGID。任何用戶或群組都擁有
其它用戶 的權限,所以不需要以 其它用戶 身份執行文件,其它用戶的可執行權限位便不會出現 s 。該權限位可能出現的屬性為 t
,也就是粘著位Sticky bit。
ls -ld /tmp
drwxrwxrwt root root /tmp
粘著位表示任何用戶都可能具有寫權限,但只有該歸屬用戶或root用戶才能夠刪除
SUID、SGID、Sticky bit也可以像權限一樣,使用一個八進制數表示,如下:
4 SUID
2 SGID
1 Sticky bit
通過在“chmod”命令中使用4個八進制數的表達式,如 4755 ,用第一位表示SUID、SGID、或Sticky bit,便能夠為文件設置這些特殊權限。示例:
chmod -R 4755 path
lsattr [路徑]
查看文件的特殊屬性
-a 全部顯示 -d 只顯示目錄 -R 遞歸
特殊屬性包括:
a:僅供附加用途 b:不更新最後存取時間 c:壓縮後存放 d:排除在傾倒操作之外
i:不得任意更動文件或目錄 s:保密性刪除文件或目錄 S:即時更新文件或目錄
u:預防以外刪除
chattr +|-|=<屬性> <路徑>
更改文件特殊屬性
-R 遞歸 -V 顯示過程
tar -c|x|u|r|t[z|j][v] -f <歸檔文件> [未打包文件]
將多個文件打包為一個歸檔文件,可以在打包的同時進行壓縮。支持的格式為tar(歸檔)、gz(壓縮)、bz2(壓縮率更高,比較耗時)
-c 創建 -x 解包 -u 更新 -r 添加 -t 查看
-d 比較壓縮包內文件和文件 -A 將tar文件添加到歸檔文件中 -z 使用gz壓縮格式
-j 使用bz2壓縮格式 -v 顯示過程 -f <文件名> 歸檔文件的文件名
-C <解壓路徑> 將壓縮包中的文件解壓到指定目錄
[未打包文件] 創建、更新時必須填寫
示例:
tar -zcvf xxx.tar.gz xxx/ xxx1 xxx2 xxx3 多個待打包文件以空格分隔
tar -zcvf xxx.tar.gz /home/user/xxx/ 使用絕對路徑打包,解包也使用絕對路徑
tar -zxvf xxx.tar.gz 按相對路徑解包到當前目錄下,或按絕對路徑解包
tar -zcvf xxx.tar.gz xxx | split -b 1m 打包後,使用split分割為1m大小的多個文件
其它參數
-P 使用絕對路徑壓縮時,保留根目錄“/” -W 校驗 -p 還原文件權限
-w 詢問用戶 --totals 統計 -T <表達式> 處理符合條件的文件
-X <表達式> 排除符合條件的文件
zip [參數] <壓縮包> <源文件>
使用zip格式打包文件
-r 遞歸,將指定目錄下的所有文件和子目錄一並處理 -S 包含系統和隱藏文件
-y 直接保存符號連接,而非該連接所指向的文件 -X 不保存額外的文件屬性
-m 將文件壓縮並加入壓縮文件後,刪除源文件
-<壓縮級別> 1~9,數字越大,壓縮率越高
-F 嘗試修復已損壞的壓縮文件 -T 檢查備份文件內的每個文件是否正確無誤
-q 不顯示指令執行過程 -g 將文件壓縮後附加在既有的壓縮文件之後,而非另行建立新的壓縮文件
-u 更新壓縮包內文件
-f 更新壓縮包內文件。如果符合條件的文件沒有包含在壓縮包中,則壓縮後添加
-$ 保存第一個被壓縮文件所在磁盤的卷標 -j 只保存文件名稱及其內容
-D 壓縮文件內不建立目錄名稱 -i <表達式> 壓縮目錄時,只壓縮符合條件的文件
-x <表達式> 排除符合條件的文件 -n <文件名後綴> 排除指定文件名後綴的文件
-b <緩存路徑> 指定臨時文件目錄 -d <表達式> 從壓縮文件內刪除指定的文件
-t <日期時間> 把壓縮文件的日期設成指定的日期
-o 以壓縮文件內擁有最新更改時間的文件為准,將壓縮文件的更改時間設成和該文件相同
-A 調整可執行的自動解壓縮文件 -c 替每個被壓縮的文件加上注釋
-z 替壓縮文件加上注釋 -k 使用MS-DOS兼容格式的文件名稱。
-l 壓縮文件時,把LF字符置換成LF+CR字符。 -ll 壓縮文件時,把LF+CR字符置換成LF字符。
unzip [參數] <壓縮文件> [壓縮包中將被釋放的文件]
解壓zip壓縮包文件
-P <密碼> zip壓縮包的密碼 -d <路徑> 指定解壓路徑 -n 解壓縮時不覆蓋原有文件
-f 覆蓋原有文件 -o 不經詢問,直接覆蓋原有文件
-u 覆蓋原有文件,並將壓縮文件中的其他文件解壓縮到目錄中
-l 顯示壓縮文件內所包含的文件 -t 檢查壓縮文件是否正確 -z 顯示壓縮包注釋
-Z unzip -Z等於執行zipinfo指令 -j 不處理壓縮文件中原有的目錄路徑
-C 壓縮文件中的文件名稱區分大小寫 -L 將壓縮文件中的全部文件名改為小寫
-s 將文件名中的空格轉換下劃線 -X 解壓縮時保留文件原來的UID/GID
-q 執行時不顯示任何信息 -v 執行是時顯示詳細的信息
-c 將解壓縮的結果顯示到屏幕上,並對字符做適當的轉換
-p 與-c參數類似,會將解壓縮的結果顯示到屏幕上,但不會執行任何的轉換
-a 對文本文件進行必要的字符轉換 -b 不要對文本文件進行字符轉換
-x <表達式> 處理裡排除壓縮包中的指定文件 -M 將輸出結果送到more程序處理
7z|7za <子命令> [參數] <壓縮包> [文件]
子命令
a 添加 d 刪除 e 解壓 x 帶路徑解壓 l 列表查看 t 測試 u 更新
參數
-m<壓縮方式> -m0=<壓縮算法> 默認使用lzma -mx=<1~9> 壓縮級別
-mfb=64 number of fast bytes for LZMA = 64 -md=<字典大小> 設置字典大小,例如 -md=32m
-ms=<on|off> 是否固實壓縮 -o<輸出目錄> 設置輸出目錄 -p[密碼] 使用密碼
-r[數字] 遞歸,使用數字定義遞歸子目錄的深度 -sfx[<模塊名稱>] 使用自解壓模塊
-si 從標准輸入設備讀入數據 -so 將數據寫入標准輸出設備 -y 所有詢問均回答Yes
-w<工作目錄>
rar <子命令> [參數] <壓縮包> [文件|文件列表|路徑]
子命令
x 帶路徑解壓 e 解壓到當前目錄 a 將文件添加到壓縮包內 d 從壓縮包中刪除文件
u 更新壓縮包內文件 f 更新壓縮包內文件,並添加壓縮包內不存在的文件 m 添加並刪除源文件
r 修復 l 列表查看壓縮包內文件信息 lt 更詳細信息 lb 簡短信息 c 添加壓縮包注釋
cf <文件名> 將文件內容添加為注釋
cw <文件名> 將注釋保存為文件
t 測試壓縮包 rr 添加恢復紀錄 rv 恢復到文件
參數
-p<密碼> 設置密碼
-m<0~5> 設置壓縮級別,數字越大,壓縮級別越高
whereis <程序名稱>
查找軟件的安裝路徑
-b 只查找二進制文件 -m 只查找幫助文件 -s 只查找源代碼 -u 排除指定類型文件
-f 只顯示文件名 -B <目錄> 在指定目錄下查找二進制文件
-M <目錄> 在指定目錄下查找幫助文件 -S <目錄> 在指定目錄下查找源代碼
locate <文件名稱>
在文件索引數據庫中搜索文件
-d <數據庫路徑> 搜索指定數據庫
updatedb 更新文件索引數據庫
find [路徑] <表達式>
查找文件
-name <表達式> 根據文件名查找文件
-iname <表達式> 根據文件名查找文件,忽略大小寫
-path <表達式> 根據路徑查找文件
-ipath <表達式> 根據路徑查找文件,忽略大小寫
-amin <分鐘> 過去N分鐘內訪問過的文件
-atime <天數> 過去N天內訪問過的文件
-cmin <分鐘> 過去N分鐘內修改過的文件
-ctime <天數> 過去N天內修改過的文件
-anewer <參照文件> 比參照文件更晚被讀取過的文件
-cnewer <參照文件> 比參照文件更晚被修改過的文件
-size <大小> 根據文件大小查找文件,單位b c w k M G
-type <文件類型> 根據文件類型查找文件。b 塊設備 c 字符設備 d 目錄 p 管道文件 f 普通文件 l 鏈接 s 端口文件
-user <用戶名> 按歸屬用戶查找文件
-uid <uid> 按UID查找文件
-group <群組名> 按歸屬群組查找文件
-gid <gid> 按GID查找文件
-empty 查找空文件
grep <字符串>|"<正則表達式>" [文件名]
echo <字符串>
回顯。較復雜的字符串,可以使用 " 括起來。
-n 輸出內容不換行 -E 不解析脫字符 -e 解析脫字符
控制字符
\ 反斜線 a 警告 b 退格 n 換行 r 回車 t 水平制表符
clear
消除屏幕
alias <輸入內容> <實際內容>
別名,為命令指定一個別名,以簡化輸入。例如:
alias ls='ls --color=auto'
alias ls="l -CF"
可以將您的定義保存在 ~/.bashrc 文件中。
export <變量名稱>
將變量導出為環境變量,常寫變量賦值一同使用,例如:
export PATH="$PATH:xxx"
其中 $PATH 表示變量 PATH 原值
shutdown
關閉計算機,向根進程 init 發送信號,更改 runlevel 為 0 (halt)
-h 關閉電源 -r 重啟 -n 強行關機,不向 init進程 發送信號
-k 模擬關機,向登錄者發送關機警告 -t <秒> N秒後關機 time <時間> 定時關機
-c [說明信息] 取消關機 -f 重啟時忽略檢測文件系統 -F 重啟時強制檢測文件系統
halt
關閉計算機。 調用 shutdown -h ,結束系統進程,同步文件系統,停止內核。
-n 不同步文件系統 -w 模擬關機,寫 /var/log/wtmp 紀錄 -f 不調用 shutdown ,強行關機
-p 默認選項,關機時調用 poweroff -i 關機前斷開網絡
reboot
重新啟動計算機。參數與 halt 相似
chroot <路徑>
Change Root 更改根目錄,重新定義會話的運行環境。
一些細節
root 用戶為根用戶,也就是 系統管理員 擁有全部權限
一個用戶只能擁有一個 GID ,但是還可以歸屬於其它附加群組
用戶管理的重要配置文件:
/etc/passwd 用戶名 密碼位 UID 歸屬GID 姓名 $HOME目錄 登錄Shell
/etc/shadow 用戶名 已加密密碼 密碼改動信息 密碼策略
/etc/group 群組名 密碼位 GID 組內用戶
/etc/gshadow 群組密碼相關文件,不重要
/etc/sudoers 用戶名 權限定義 權限
可以使用 pwconv 命令創建影子密碼,將 /etc/passwd 文件中的密碼轉換到 /etc/shadow 文件
su [用戶名]
切換到其它用戶,默認切換到root用戶。提示密碼為將切換用戶密碼
-f 快速切換,忽略配置文件 -l 重新登錄 -m ,-p 不更改環境變量
-c <命令> 切換後執行命令,並退出切換
sudo [命令]
以其它用戶的身份執行命令,默認以root的身份執行。提示密碼為當前用戶密碼
-s 切換為root shell -i 切換為root shell,並初始化 -u <用戶名|UID> 執行命令的身份
-l 顯示自己的權限
passwd [用戶名]
設定用戶密碼
-d 清除密碼 -l 鎖定用戶 -e 使密碼過期,在下次登錄時更改密碼
-S 顯示密碼認證信息 -x <天數> 密碼過期,最大使用時間
-n <天數> 凍結密碼,最小使用時間 -s 更改登錄Shell -f 更改用戶信息
示例:
$passwd
Changing password for user
(current) UNIX password: 原密碼
Enter new UNIX password: 新密碼
Retype new UNIX password: 確認新密碼
chsh [-s <Shell>] [用戶名]
更改登錄Shell
usermod <用戶名>
修改用戶賬號
-d <目錄> 設定$HOME目錄 -m 設定$HOME目錄時自動建立
-s <Shell> 修改用戶登錄Shell -l <新用戶名> 修改為新用戶名
-u <UID> 修改用戶UID -g <群組名> 修改用戶歸屬群組
-G <群組名> 修改用戶歸屬附加群組 -L 鎖定帳戶 -U 解除鎖定
-e <過期時間> 設定用戶賬號過期時間 -f <緩沖天數> 設定密碼過期後多長時間關閉賬號
-c <字符串> 修改用戶備注
useradd <用戶名>
新建用戶
-d <目錄> 設定$HOME目錄 -m 自動建立$HOME目錄 -M 不自動建立$HOME目錄
-s <Shell> 修改用戶登錄Shell -l <用戶名> 修改為新用戶名 -u <UID> 修改用戶UID
-g <群組名> 修改用戶歸屬群組 -G <群組名> 修改用戶歸屬附加群組
-n 不建立以用戶名為名稱的群組 -e <過期時間> 設定用戶賬號過期時間
-f <緩沖天數> 設定密碼過期後多長時間關閉賬號 -c <字符串> 修改用戶備注
-D [表達式] 更改預設值 (預設值保存於 /etc/default/useradd 文件中)
新建用戶規則保存於 /etc/login.defs 文件中
新建用戶默認文件保存於 /etc/skel/ 目錄中。新建用戶時,系統自動拷貝此目錄下的文件至新建用戶的 $HOME 目錄
userdel <用戶名>
刪除用戶
-r 刪除用戶相關文件和目錄
id [用戶名]
顯示用戶 UID GID 歸屬附加群組
finger [用戶名]
顯示用戶信息
一些細節
進程一般分為交互進程、批處理進程和守護進程三類。
守護進程總是活躍,在系統啟動時通過腳本自動啟動,或由root啟動,通常在後台運行。
一個進程可以擁有子進程。當父進程終止時,它的子進程也隨之終止;而子進程終止時,父進程通常可以繼續運行。
init 進程為根進程,所有進程都是它的子進程
ps
顯示進程信息,參數可省略 -
aux 以BSD風格顯示進程(常用) -efH 以System V風格顯示進程
-e , -A 顯示所有進程 a 顯示終端上所有用戶的進程 x 顯示無終端進程
u 顯示詳細信息 f 樹狀顯示 w 完整顯示信息 l 顯示長列表
示例:
ps alx 另一種常用輸出格式
ps aux | less 將輸出通過管道,使用 less 查看
ps aux | grep <關鍵字> 通過關鍵字查找進程
輸出字段
USER 進程所有者 PID 進程ID PPID 父進程 %CPU CPU占用率
%MEM 內存占用率 NI 進程優先級。數值越大,占用CPU時間越少 VSZ 進程虛擬大小
RSS 頁面文件占用 TTY 終端ID STAT 進程狀態
D 不可中斷 Uninterruptible sleep (usually IO) R 正在運行,或在隊列中的進程
S 處於休眠狀態 T 停止或被追蹤 Z 僵屍進程
W 進入內存交換(從內核2.6開始無效) X 死掉的進程 < 高優先級 N 低優先級
L 有些頁被鎖進內存 s 包含子進程 + 位於後台的進程組;
l 多線程,克隆線程 multi-threaded (using CLONE_THREAD, like NPTL pthreads do)
pstree
樹狀顯示進程信息
-a 顯示完整命令及參數 -c 重復進程分別顯示 -c 顯示進程ID PID -n 按 PID 排列進程
pgrep <進程名>
顯示進程的PID
-l 顯示進程名和進程PID -o 進程起始ID -n 進程終止ID
xkill
在圖形界面中點殺進程。執行此命令後,鼠標指針變為骷髅圖案(一定看過《加勒比海盜》吧)。在窗口中點擊左鍵殺死進程,右鍵取消
pkill <進程名>
結束進程族。如果結束單個進程,請用 kill
kill [信號代碼] <進程PID>
根據PID向進程發送信號,常用來結束進程,默認信號為 -9
-l [信號數字] 顯示、翻譯信號代碼
-9 , -KILL 發送 kill 信號退出
-6 , -ABRT 發送 abort 信號退出
-15 , -TERM 發送 Termination 信號
-1 , -HUP 掛起
-2 , -INT 從鍵盤中斷,相當於 Ctrl+c
-3 , -QUIT 從鍵盤退出,相當於 Ctrl+d
-4 , -ILL 非法指令
-11 , -SEGV 內存錯誤
-13 , -PIPE 破壞管道
-14 , -ALRM
-STOP 停止進程,但不結束
-CONT 繼續運行已停止的進程
-9 -1 結束當前用戶的所有進程
renice <優先級表達式> <進程表達式>
重新設定進程優先級(無此必要)
優先級表達式:
+|-|= <nice值>
nice取值范圍: -20~19
進程表達式:
-p <PID> 通過進程ID進行設定
-g <PGID> 通過進程群組ID
-u <UID> 通過進程擁有者UID設定
top
動態、交互式進程管理器
-c 顯示進程啟動狀態,包括參數、操作對象等;而不只是進程名
-d <秒> 刷新頻率。 -d 5,表示5秒刷新一次
-n <次> 刷新次數,然後退出。 -n 5,表示刷新5次後退出;
-b 以批量模式運行,讓輸出能夠使用管道或重定向。但不能進行交互,最好和 -n <次> 參數一同使用
-i 禁止顯示空閒進程或僵屍進程;
-p PID 僅監視指定進程的ID;PID是一個數值;
-s 安全模式運行,禁用一些效互指令;
-S 累積模式,輸出每個進程的總的CPU時間,包括已死的子進程;
交互命令:
<space> 立即刷新
k 交互式殺死進程,提示輸入進程 PID (默認發送信號15)
r 設定renice,提示輸入PID和renice值
s 改變兩次刷新時間間隔,以秒為單位
n 設定顯示進程數, 0 為不作限制
i 隱藏空閒進程和僵屍進程
S 切換到累積時間模式
l 開關,在頂部顯示 uptime 信息
t 開關,在頂部顯示 進程和CPU狀態
m 開關,在頂部顯示 free 信息
c 顯示方式切換: 進程名/進程啟動狀態
A 按進程啟動順序進行排序。由新到舊
M 按內存占用排序。由大到小
N 以進程ID排序。由大到小
P 按CPU占用排序。由大到小
T 按時間/累積時間排序
f ,F 設定顯示字段。設定完成後空格退出
o,O 設定顯示字段的排序。大寫向前移動,小寫向後移動,空格退出
h,? 顯示有關安全模式和累積模式的幫助信息
W 把當前的配置寫到~/.toprc中;
nohup <命令>
將任務提交到後台,輸出附加到 ~/nohup.out 文件。即便用戶退出登錄,提交的命令仍繼續執行。
<命令> &
背景執行此命令,如果用戶退出登錄,則命令停止執行
<命令1> ; <命令2> ; ......
命令隊列,從左向右,依次執行以 ; 分隔的命令
<命令1> && <命令2> && ......
命令隊列,從左向右,依次執行以 && 分隔的命令。前一個命令執行成功,後一個命令才能執行
<命令> <Ctrl+z>
<Ctrl+z> 掛起當前Shell中的任務
jobs
顯示背景任務
bg [任務編號]
將掛起的任務背景執行
fg [任務編號]
將背景任務調到前台執行
計劃任務
一些細節
Linux中,設備用/dev/目錄下的文件表示。例如
/dev/hda1 第一塊硬盤的第一主分區
/dev/hdb5 第二塊硬盤的第一邏輯分區
/dev/sda4 第一塊SATA硬盤的第四主分區,或者擴展分區
/dev/null 黑洞設備
關於磁盤設備,詳見 分區概念
mount <設備文件> [掛載路徑]
掛載文件系統
-t 指定文件系統的類型。通常不必指定,mount自動檢測。下面是常用的格式
reiserfs ReiserFS 3.6版
jfs IBM技術
xfs SGI技術(適合高級服務器,桌面用戶慎用)
ext3 Linux傳統文件系統
vfat fat fat32
ext2 不帶日志的ext3
ntfs WINNT
iso9660 光盤
smbfs Windows文件共享
-o [選項1] [選項2] ......
loop 環設備。光盤、ISO鏡像等
ro | rw 只讀readonly;可讀寫read-write
sync | async 同步模式|異步模式。決定修改是否立即寫入文件系統
atime | noattime 讀取時是否修改訪問時間。對於寫入敏感設備,例如閃存、軟盤,建議使用 *noatime*
auto | noauto 自動掛載模式
exec | noexec 是否允許可執行權限
defaults 使用預設的選項 rw, suid, dev, exec, auto, nouser, async
iocharset=UTF-8 指定字符集,可簡寫為 utf8
codepage=936 指定代碼頁,可簡寫為 cp936 西文系統代碼頁為 437
umask=<權限掩碼> 設定權限掩碼
uid=<UID> 設定歸屬用戶
gid=<GID> 設定歸屬群組
remount 以不同選項重新掛載
-L <卷標> 將帶有特殊卷標的分區
Tip
權限掩碼
權限=777-權限掩碼(三位) | 7777-權限掩碼(四位)
假如權限掩碼為 022 ,則新建對象權限為 755 rwxr-xr-x
可以使用 umask 命令設置權限掩碼
mount -a
掛載 /etc/fstab 文件中定義的所有設備
示例:
sudo mount -t iso9660 -o loop /dev/cdrom0 /media/cdrom
sudo mount -t vfat -o remount iocharset=utf8,codepage=cp936 /dev/hda5 /media/hda5
umount <設備文件> | <掛載路徑>
卸載已掛載文件系統
df
查看已掛載文件系統的磁盤空間占用
-a 顯示所有文件系統的磁盤使用情況,包括0塊(block)的文件系統,如/proc文件系統
-T 顯示文件系統類型 -k 以k字節為單位顯示 -i 顯示i節點信息,而不是磁盤塊
-t <文件系統類型> 顯示指定類型的文件系統的磁盤空間使用情況
-x <文件系統類型> 列出不是某一指定類型文件系統的磁盤空間使用情況(與t選項相反)。
-l 只顯示本地文件系統
free
查看內存、緩沖區、交換空間的占用
-b 以字節為單位顯示數值 -k 以千字節為單位顯示數值 -m 以兆字節為單位顯示數值
-g 以吉字節為單位顯示數值 -l 顯示內存占用峰值 -o 不顯示緩沖區占用 -t 統計結果
-s <秒> 刷新頻率
sync
同步文件系統。將緩沖區中的數據寫入文件系統
fdisk <磁盤設備文件>
分區表修改工具
交互命令:
m 使用幫助 l 查看已知文件系統類型 p 顯示分區信息
n 新建分區 (p:主分區 l:擴展分區 參見 分區概念 ) d 刪除分區 t 改變分區類型
w 將改動寫入分區表 q 放棄改動並退出
* 磁盤設備名稱為整塊磁盤,而不是磁盤中的分區。例如 /dev/hda ,而不是 /dev/hda1
fdisk -l
查看所有磁盤分區信息
cfdisk
更加友善的分區表修改工具
mkfs.<文件系統類型> <分區設備文件>
將分區格式化為文件系統。 文件系統類型
示例:
sudo mkfs.reiserfs /dev/hda1
mkfs <分區設備文件>
-t <文件系統類型> 指定文件系統類型 -c 格式化前檢查磁盤
mkisofs -o <鏡像文件> [源文件目錄]
用光盤或者文件制作iso鏡像
-b 可啟動鏡像
hdparm <磁盤設備文件>
設置硬盤參數
-d <0|1> DMA模式開關 -a <0|1> 預計模式開關 -t 性能測試 -T 緩存性能測試
-c <0|1|3> 32位傳輸模式開關 -g 顯示柱面,扇區等信息 -i -I 顯示磁盤信息
ifconfig
配置網絡接口
-a 顯示所有網絡接口
ifconfig <網卡> up|down
激活|禁用網卡
示例: ::
sudo ifconfig eth0 up
ifconfig <網卡> add <IP地址> [ netmask <子網掩碼> ]
給網卡指定IP地址或子網掩碼
route
配置路由及網關
route add -net <路由地址> gw <網關地址> [ netmask <子網掩碼> ] dev <網卡>
指定路由及網關
route del -net <網關地址> gw <網關地址> [ netmask <子網掩碼> ]
刪除路由及網關
ip
配置網絡
子命令:
link 網卡配置 address 配置地址。相當於 ifconfig route 配置路由。相當於 route
參數:
show 顯示(默認) set 設置 add 添加 del 刪除
示例:
ip link show 顯示網卡配置
ip link set eth0 name xxx 重命名網絡接口
ping <IP地址>
向目標地址發送ICMP封包,常用來測試網絡
-b <廣播地址> ping整個網段 -c 發送封包次數 -s <封包大小> 默認為64字節
netstat
網絡連接狀態
-r 顯示路由表,同 route -a 所有連接 -t 只顯示TCP協議 -U 只顯示UDP協議
-l 只顯示正在監聽的端口 -p 顯示PID和進程名 -c <秒> 刷新頻率
* http/ftp/ssh…… 為應用層協議 * TCP/UDP為傳輸層協議 * IP/ICMP為網絡層協議
lspci
查看PCI總線連接的設備
lsusb
查看USB接口連接的設備
lsmod
查看已加載模塊
* /lib/modules/uname -r 目錄下為所有可用模塊
modprobe <模塊名稱>
VIM簡介
我們使用的大多數編輯器,都可以直接在編輯區輸入字符,並且能夠通過一些快捷鍵來完成一些控制功能,比如使用方向鍵移動光標,使用
BackSpack 或者 Delete 鍵刪除文字,使用 PgUp 和 PgDn 翻頁,使用 Home 和 End 來定位行首和行末……
而Vim是一個帶模式的編輯器,同樣的按鍵,在不同模式下,具有不同的功能定義。例如 h j k l 在 編輯模式 下輸入相應的字符,在 普通模式 下卻相當於方向鍵的作用。
由於需要切換模式,Vim的使用起來略顯繁瑣。不過優點也顯而易見:您只要把手安安穩穩的放在打字區就可以了,而不需要使用諸如方向鍵、排版鍵、小鍵盤等
需要挪開雙手的鍵位,從而提高了您的效率和專注程度。事實上,Vim的前身Vi誕生的時候,鍵盤上還沒有方向鍵、排版鍵和小鍵盤:)
命令
使用Vim編輯文件:
vi [文件名]
vim [文件名]
教學模式:
vimtutor [語言]
vim教程,相當於使用Vim編輯器以只讀模式打開教程文件。您無論對這個文件作了什麼,都會在退出後恢復原來的樣貌。與只讀模式的區別在於,它不會沒有眼色的提醒您,現在的狀態為只讀模式。您可以使用它作一些練習
您可以指定教程文件的語言,如果使用本地語言(ZH_cn)出現亂碼,您可以嘗試使用英語
vimtutor en
使用Vim比較文件區別
vimdiff [文件1] [文件2] [其它文件]……
配置文件
Vim的全局配置文件為 /etc/vim/vimrc ,用戶配置文件為 ~/.vimrc , " 起始的行為注釋行。我們提供的配置項,您直接加入配置文件就可以了
您可以先對Vim進行一些簡單的配置:
"設定文件編碼
set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
"開啟語法加亮
syntax on
"配色風格
colorscheme pablo
"設定行距 GUI界面中生效
set linespace=4
"設定GUI選項
"set guioptions=gmrLtT m:菜單 T:工具欄
set guioptions=gmrLt
"設定Tab鍵縮進的空格數
set tabstop=4
"設定編輯器將多少空格視為一個縮進
set shiftwidth=4
"將縮進轉換為空格
"set expandtab
"設定折疊方式
"set foldmethod=indent
"以下字符將被視為單詞的一部分 (ASCII):
"set iskeyword+=33-47,58-64,91-96,123-128
模式介紹
Vim常見的模式有: 普通模式 、 插入模式 、 命令模式 ,另外我們也會經常用到 可視模式 。
Vim啟動時進入 普通模式 ;或者在其它模式下,按下 Esc 鍵,便可以回到普通模式。
使用 vimtutor en 命令進入教程,現在是普通模式。隨便按幾下 j 、 k 、 l 、 h 鍵,您會發現光標的位置發生改變。
按下 i 鍵,編輯器底部出現了 -- 插入 -- 或者 -- insert -- ,您進入了插入模式。隨便按幾下 j 、 k 、 l、 h,您會發現相應的字符出現在編輯區,現在還可以通過方向鍵來移動光標。可能您覺得使用方向鍵移動光標不是什麼問題,但是習慣了Vim後,您會認為方向鍵太麻煩了,簡直不能容忍!好了,現在按下 Esc 鍵回到普通模式,我們又可以使用 j 、 k 、 l 、 h 來移動光標了。
在普通模式下,按下 : 鍵(也就是 Shift+; ),在編輯器底部出現了一個 : ,您進入了命令模式。在 : 後輸入一個命令 new ,回車後,編輯器被分割為上下兩欄。為了方便起見,我們在命令前加一個 : 來表示命令模式下輸入的命令,像這樣
:vnew
一個命令能夠以一些規則簡化,上面的命令也可以寫為這種形式
:vne
現在您的編輯區一定弄的四分五裂,您可以使用命令“:quit”來關閉當前欄,直接用簡寫就可以了
:q
這個命令是退出編輯器,如果編輯區被分成多欄,則是退出當前欄。
執行完一個命令(按下回車後),編輯器會自動回到普通模式。如果您想不執行當前命令,直接回到普通模式,您可以按下Esc鍵。
按下 v 鍵,您進入了可視模式,可以使用 j 、 k 、 l 、 h 移動光標,高亮選取文本 。
事實上,可視模式相當於高亮選取文本後的普通模式。
可視模式具有子模式,以行為單位進行選取的可視行模式,使用 V 鍵進入(也就是 Shift+v );和以塊為單位進行選取的可視塊模式,使用 Ctrl+v 鍵進入。
模式切換
好了,現在我們總結一下模式間切換的方法
其它模式==>普通模式
Esc
普通模式==>插入模式
i 在光標前插入 I 在行首插入 a 在光標後插入 A 在行末插入
o 在當前行之下新建行 O 在當前行之上新建行 r 替換當前字符 R 從當前字符開始替換
普通模式==>命令模式 普通模式==>可視模式 v 可視模式 V 可視塊模式
<Ctrl+v> 可視塊模式
移動
在普通模式中,您可以使用以下方式移動光標
j 向下 k 向上 l 向右 h l h 向左 j
您可以使用其它更有效率的方式移動光標
w 下一個單詞詞首 W 將特殊符號視為單詞的一部分 b 上一個單詞詞首 B 同上
e 單詞末尾 E 同上 0 行首 ^ 行首文字(行首空格之後) $ 行末
H 頁面頂部 M 頁面中部 L 頁面底部
在其它模式中,您可以使用方向鍵移動光標,不過我們不推薦您那樣作,您可以在配置文件中綁定插入模式下的功能鍵
noremap! <M-j> <Down>
noremap! <M-k> <Up>
noremap! <M-h> <left>
noremap! <M-l> <Right>
………………
<作用范圍> <鍵位> <功能>
其中,map!綁定的鍵盤映射,作用於所有模式;inoremap!綁定的映射,僅作用於插入模式。
數字參數
您也可以使用數字參數,來重復執行。例如
100j 執行100次j鍵,向下100行
或者作為跳轉的行號、百分比。見下面的浏覽部分
<行號> Ctrl+g 按行號跳轉
標記
您可以在當前光標處作一個標記,以便快速返回
m<標記名稱> 定義標記。標記名稱為一個字符
`<標記名稱> 返回標記
mx 將當前光標處定義為標記 x
`x 返回標記 x
浏覽
<Ctrl+f> 下翻一頁 <Ctrl+d> 下翻半頁 <Ctrl+b> 上翻一頁 <Ctrl+u> 上翻半頁
gg 文件首行 G 文件末行 <行號>G 按行號轉到相應行
<1~100>% 按百分比轉到相應的行數 zz 將光標所在行調整至頁面中間
<Ctrl+e> 下卷一行 <Ctrl+y> 上卷一行
說明:gg 定位到文件首行, V 進入可視行模式, G 定位到文件末行,實現類似“全選”的功能。依次按下 g g V(Shift+v) G(Shift+g)
編輯
x 剪切當前字符 dd 剪切當前行 y 復制可視模式選取字符 yy 復制當前行
p 在光標後粘貼 P 在光標前粘貼 u 撤消 <trl+r> 重做
<Ctrl+y> 逐字克隆上一行內容 <Ctrl+e> 逐字克隆下一行內容
寄存器操作
Vim可以將不同字段剪切或復制到不同寄存器中,您可以從不同寄存器中取出內容後粘貼
"<寄存器名稱> 按下“"”鍵和另一個字符鍵,便可以定義一個寄存器。例如:
"a "1
定義寄存器後直接進行操作
"ayy 將當前行復制到寄存器 a 中
"ap 將寄存器 a 中的內容粘貼到光標之後
* 通常情況下,寄存器 + ( " + Shift+= )對應X下的剪貼板。您在其它程序中復制的內容,可以使用 "+p 粘貼到Vim中;您在Vim中,可以使用 "+y 將內容復制到剪貼板,再粘貼到其它程序中
* 沒有指定寄存器時,Vim使用“無名寄存器”存儲內容
搜索和替換
按下 / 鍵,編輯器底部會出現 / 符號,接著輸入字符串,便可以進行搜索
/ 向下搜索 ? 向上搜索
n 搜索下一個
N 搜索上一個
:s/<源字符串>/<目標字符串> 將源字符串替換為目標字符串
:s/<源字符串>/<目標字符串>/g 替換當前行中所有符合條件的字符串
:<行號1>,<行號2>s/<源字符串>/<目標字符串>/g 在指定行中進行替換
:%s/<源字符串>/<目標字符串>/g 全文替換
正則表達式
在搜索和替換時,可以使用正則表達式進行匹配
宏
您可以將一系列的操作錄制為一個宏,然後執行它
q<宏名稱> 開始錄制宏。宏名稱為一個字符
q 錄制中按下“q”鍵,結束錄制
@<宏名稱> 執行宏
插入模式下的快捷鍵
<Ctrl+r><寄存器名稱> 輸入指定寄存器內容
<Ctrl+k><2個字符> 輸入二合字符
<Ctrl+v><數字> 通過數字編碼輸入字符
<Ctrl+v><鍵位> 輸入鍵位的名稱
鍵綁定、縮寫
前面我們已經向您介紹了鍵綁定,
map! <M-j> <Down>
尖括號及其中的內容,為Vim配置文件的約定,分別描述了按鍵和功能,表示將功能編寫到按鍵上。如果綁定的只是普通字符,例如:
map! xxx XXXXX
表示將 fXXXXX 綁定到 xxx 上。當您鍵入 xxx 時,編輯器會自動替換為 XXXXX 。
如果您只是想將字符串綁定為縮寫,方便輸入,我們建議您使用 iabbrev 來綁定。例如:
iabbrev ubt Ubuntu
在插入模式下鍵入 ubt ,編輯器會自動替換為 Ubuntu 。您可以將 iabbrev 命令縮寫為 iab ,例如:
iab ubt Ubuntu
以上命令,您可以直接在命令模式下輸入,臨時啟用。也可以寫入配置文件,永久啟用。
單詞補全
<Ctrl+n> 下一個匹配項
<Ctrl+p> 上一個匹配項
您可以在配置文件中定義補全的方式
"自動補全方式:(使用逗號分隔)
set complete=k,.
" . 當前文件
" b 已被裝緩沖區,但是沒有在窗口內的文件
" d 在當前的文件中定義和由#include包含進來的文件
" i 由#include包含進來的文件
" k 由dictionary選項定義的文件
" kfile 名為{file}的文件
" t 標記(tags)文件
" u 沒有載入的緩沖區
" w 在其他窗口中的文件
"設定自動補全字典 :
set dictionary=path
命令模式
前面介紹了普通模式和插入模式。我們發現,普通模式主要用來浏覽和修改文本內容,而插入模式則用來向文本中添加內容。
而命令模式則多用於操作文本文件(而不是操作文本文件的內容),例如保存文件;或者用來更改編輯器本身的狀態,例如設定多欄窗口、標簽或者退出編輯器……
w(rote) 將更改寫入文件
:w
q(uit) 退出編輯器:
:q
某些情況下,編輯器會阻止命令的執行。例如您修改了文件,而沒有保存,那麼您使用 :q 命令退出時,編輯器就不會執行這條命令,而是提醒您保存文件。
這個時候,您可以在命令末尾追加 ! 來強制執行命令
:<命令>!
例如 :q! ,即便您沒有保存已修改的文件,使用此命令,編輯器也會放棄修改而強行退出
以 ! 引導一個Shell命令,則可以從Vim臨時切換到Shell中,執行一個Shell
:!<命令>
例如 :!ls
多欄窗口
您可以使用以下命令,將當前窗口水平分為兩欄
:new
新建一欄空白窗口
:split
將當前文件分兩欄顯示
同理,您可以使用下列命令,將當前窗口垂直分為兩欄
:vnew
:vsplit
先按下 <ctrl+w> 鍵,再按下方向鍵 j 、 k 、 l 、 h ,您可以切換到其它欄;在當前欄中使用 :q 命令,可以退出當前欄,也可以使用其它命令,對當前欄作出修改
如果您希望當前命令在所有欄中生效,您可以在命令的末尾追加 all
:<命令>all
例如:
:qall
如果您希望這條命令強制執行,那麼 ! 位於命令的最末
:<命令>all!
例如:
:qall! 強行退出所有欄窗口
標簽頁
Vim在7以後的版本,開始支持標簽頁的功能
:tabnew 新建一個標簽
:tabnext 轉到下一個標簽
:tabprevious 轉到上一個標簽
多數情況下,您可以使用鼠標點擊標簽進行切換。
硬件基礎
一塊硬盤,它起始的一部分扇區為主引導扇區,包括MBR(主引導紀錄)和DPT(分區表,您可以閱讀分區概念章節中相關內容)
每個分區起始的一部分扇區,為分區引導扇區。
在分區引導扇區之後的部分,為文件系統的索引,文件系統通過它定位文件在硬盤上的位置。不同的文件系統采用不同的索引,例如FAT文件系統使用文件分配表和目錄區。
絕大多數操作系統,對硬盤的讀寫操作,通過文件系統來完成,因此引導扇區中的內容,我們不能夠在文件系統中進行操作,而需要專用軟件,比如引導管理器。
我們對文件進行修改後,操作系統會將文件系統索引中的內容同步。
系統引導流程
1.系統啟動時,首先引導至MBR,將控制權移交安裝在MBR中的引導管理器
(Windows使用NTLDR,Linux通常用Grub)
2.引導管理器讀取分區表
3.引導管理器讀取分區中的配置文件,並按配置文件中預設的參數運行
例如,Grub讀取“/boot/grub/menu.lst”文件中內容,將可引導系統通過菜單顯示
4.引導管理器根據您的選擇,可能會有如下活動
加載內核,啟動Linux系統檢查活動分區,並引導它(單一Windows系統)讀取相應分區的引導扇區,將控制權移交該扇區中的引導管理器,Ubuntu系統在安裝Grub時,會提問您安裝在MBR或者分區引導扇區中。如果將Grub安裝在分區引導紀錄中,您必須確保MBR中的引導管理器能夠正確的引導至分區引導扇區。
如果您在MBR中使用的是Windows的引導管理器NTLDR,完成這件工作會非常困難,因而我們推薦您使用Grub。
Grub介紹
Grub主要有以下功能:
菜單式選擇
命令行模式
支持開機畫面
支持大硬盤
其它的功能還有很多,就不一一介紹了。
您可以運行命令 grub 啟動它。會顯示一些版本信息和使用提示,當然還有命令提示符,如下:
GNU GRUB version 0.97 (640K lower / 3072K upper memory)
[ Minimal BASH-like line editing is supported. For
the first word, TAB lists possible command
completions. Anywhere else TAB lists the possible
completions of a device/filename. ]
grub>
您可以使用 TAB 鍵補全命令和路徑,這非常重要,因為Grub中路徑表示方式與操作系統是不同的,您可能比較陌生,所以盡量用TAB補全它,既方便,也不容易出錯。
您可以在 grub> 提示符後按 TAB 鍵,會將所有可用的命令顯示出來。
呵呵,是不是有點暈,命令可真不少啊!!!
其實我們會用到的命令只有兩個,
root
setup
Grub術語
在分區概念章節裡,我們已經介紹了Linux系統中表示分區的方法 /dev/hda5
/dev/hdMN M為a起始的小寫字母,表示硬盤序號;N為1起始的數字,表示分區序號
Grub中使用的表示方法為 hd0,1
hdX,Y X為0起始的數字,表示硬盤序號;Y為0起始的數字,表示分區序號
您得留意它們之間的區別:
N從1開始計數,X和Y從0開始計數
N為1~4,它是一個主分區;N為5或大於5,它是第(N-4)個邏輯分區。Y按分區在硬盤上排列的順序排列,無論它表示的是主分區還是邏輯分區。
舉例來說:
主 主 邏 邏 主
/dev/hdMN hda1 hda2 hda5 hda6 hda3
hdX,Y hd0,0 hd0,1 hd0,2 hd0,3 hd0,4
現在我們來看 root 和 setup 命令的使用:
grub>root (hd0,1)
這個命令將Grub的根分區定位為 “(hd0,1)”
grub>setup (hd0)
這個命令表示將Grub安裝在“(hd0)”,因為沒有指定安裝的分區,所以安裝位置為MBR
Grub的根分區 為Grub配置文件 /boot/grub/menu.lst 所在分區。假如您單獨為 /boot 目錄掛載了一個分區,那麼Grub的根分區通常為您系統中 /boot 目錄所在的分區。
搞錯了根分區,Grub就不能正確讀取配置文件,自然不能正確引導。
引導分區 ,Windows等系統的引導分區為它的安裝分區,Linux系統的引導分區為它的 /boot 目錄所在的分區
系統根目錄所在分區 ,Linux根目錄 / 的掛載分區。Linux系統的分區掛載信息保存在文件系統分配表 /etc/fstab 文件中
Grub首先讀取根分區中的 /boot/grub/menu.lst
文件,並轉到引導分區,如果是Windows等系統,則將控制權移動分區引導扇區中的啟動管理器。如果是Linux系統,則加載內核和設備,並根據
/etc/fstab 文件的內容掛載文件系統。
看這個例子:(假設Grub安裝在MBR中)
title Ubuntu
root (hd0,0)
kernel (hd0,1)/boot/vmlinuz-2.6.15-25-686 root=/dev/sda3 ro splash vga=0x31b
initrd (hd0,1)/boot/initrd.img-2.6.15-25-686
boot
Grub的安裝位置為 (hd0)
root (hd0,0) ,這一行表示Grub的根分區為第一塊硬盤的第一個分區 (hd0,0) ,它讀取該分區中的配置文件 grub/menu.lst
kernel 和 initrd 行中的 (hd0,1) ,表示當前系統的 /boot 目錄掛載到第一塊硬盤的第二個分區 (hd0,1)
kernel 行的 root=/dev/sda3 ,表示當前系統的 / 目錄掛載到第一塊硬盤的第三個分區 (hd0,2) ,內核根據該分區中的 /etc/fstab 文件來掛載文件系統
Grub配置文件
/boot/grub/menu.lst 文件,主要由一些下面這樣的塊構成的
title Ubuntu
root (hd0,2)
kernel (hd0,2)/boot/vmlinuz-2.6.15-25-686 root=/dev/sda3 ro splash vga=0x31b
initrd (hd0,2)/boot/initrd.img-2.6.15-25-686
boot
title Windows xp
root (hd0,0)
makeactive
chainloader +1
每一塊代表一個操作系統,包含下面裡幾個部分
title xxx 標題,title和分隔符後的內容為Grub菜單中顯示的條目
root (hdX,Y) 引導分區,可以留空,默認為 grub/menu.lst 所在分區(根分區),可以使用 grub>root (hdX,Y) 命令設置,或者在您安裝系統時自動設置
如果您計劃引導至分區引導扇區,如Windows或者Unix系統(Unix和Linux系統,您需要選擇將引導管理器安裝到分區中),那麼需要這樣配置
makeactive 設置活動分區,系統默認設置,可以刪除
chainloader +1 鏈式引導,不要動它。
如果以這種方式引導系統,上面 root (hdX,Y) 這一行通常需要配置, (hdX,Y) 為您的系統所在的分區。假如您的Windows在第一塊硬盤的第一個分區,則這樣寫 root (hd0,0)
如果您引導的是Linux系統(沒有在分區中安裝引導管理器,而是安裝到MBR),則需要這樣配置
kernel (hd0,2)/boot/vmlinuz-2.6.15-25-686 root=/dev/sda2 ro splash vga=0x31b
initrd (hd0,2)/boot/initrd.img-2.6.15-25-686 設備鏡像文件,與上一行保持一致
boot 不要動它
kernel 這一行最關鍵,它控制系統內核的加載。行末以 ro 起始的部分為參數(ro只讀,splash顯示啟動畫面,vga設定啟動屏幕分辨率)
之前的部分可以寫為這種形式:
kernel (hdX,Y)/boot/vmlinuz root=/dev/sdMN
(hdX,Y) 通常不是必須的,如果您安裝了多個Linux系統,或者 /boot``目錄與根目錄 ``/ 不在一個分區,則應把它寫為 /boot 目錄所在分區。而後面的 root=/dev/sdMN 為系統根目錄 / 所在的分區。
initrd 這一行的 (hdX,Y) 與上一行保持一致。
Grub安裝
上面已經向您介紹了Grub的安裝,不過更多的側重理論。現在我們來實踐一下,假設您的系統不能引導,您可以嘗試下面的方法:)
1.
1. 找一張Ubuntu的LiveCD (Knoppix也是不錯的選擇)
2. 也可以使用安裝光盤,啟動後在 boot 提示符後輸入 linux rescue ,回車進入救援模式。
2. 如果您擁有root權限,命令行提示符為 # ,如果是普通用戶,則為 $ 。
1. 在救援模式下,通常你已經具有了root權限
b. 如果是LiveCD且沒有root權限,請在終端中輸入 su
命令切換到root,會提問你root的密碼。如果不知道root密碼,可以使用這個命令 sudo su
,只要你知道自己的密碼,並且你在ID在sudoer列表中就可以了。
3. 在終端中輸入 grub ,會進入到Grub的提示符界面
a. 輸入命令 root (hd 後按 Tab 鍵,屏幕上就會列出所有可用選項。比如我的是這樣的:
Possible disks are: hd0 hd1
這表示我裝了兩塊硬盤,如果你只有一塊硬盤的話,那麼一定是hd0。
在 root(hd 後輸入 0 ,按 Tab ,會自動補上一個 , ,現在你輸入的內容成為這樣:
root(hd0,
再按 Tab 鍵,會列出所有可用選項,我的是這樣的。
Possible partitions are:
Partition num: 0, Filesystem type unknown, partition type 0x7
Partition num: 1, Filesystem type is fat, partition type 0xc
Partition num: 2, Filesystem type is reiserfs, partition type 0x83
Partition num: 4, Filesystem type is reiserfs, partition type 0x83
Partition num: 5, Filesystem type unknown, partition type 0x82
Partition num: 6, Filesystem type unknown, partition type 0x7
Partition num: 7, Filesystem type is fat, partition type 0xc
輸入你的選擇,比如為 1 , Tab 一次後,結果是這樣的:
root (hd1,1)
現在回車
2.
輸入命令
setup (hd0)
將grub安裝在mbr中
3. quit 命令退出GRUB
Grub使用
命令行
在Grub啟動菜單中,您可以選擇您要的選項,按下 e 鍵,進入到命令行模式
修改您的啟動參數,完成後回車
按 b 鍵,Grub將以您修改後的參數引導系統。
其它
在Grub啟動菜單中,按下 c 進入命令行模式
按下 d 刪除當前選中的項
我的D盤到哪裡去了?
在使用Linux最初的幾天裡,我感到有些不安。
Windows下,我可以把系統裝在C盤,軟件放在D盤,音樂放在E盤……如果系統出現問題,我只要重裝系統就可以了,大部分軟件都可以直接使用(養成使
用綠色軟件是一種好習慣:),而我辛辛苦苦收集起來的電影和音樂,我總是把它們放在一個安全的地方,以免引發失眠的嚴重後果。
其實Linux下硬盤也具有分區的概念,這一點和Windows沒有什麼不同(分區的概念是由硬盤的物理特性產生的,而不是操作系統)。不同的是,Linux可以將分區掛載到任意的目錄下,而不像Windows,您的分區只能夠在“我的電腦”裡面:)
那麼這麼作有什麼好處麼?
我們來看看Linux和Windows下路徑的表示方法:
Windows C:\Documents and Settings\Users\Documents\MyDocument
Linux /home/User/MyDocument
您一定注意到了,在Windows下面,路徑中含有盤符“C:”,它通常代表您硬盤上的第一個分區。也就是說,在使用這些文件時,您需要知道它們在硬盤上
存儲的相關物理細節。而在Linux下,您不需要知道這些,或者說,只要您設定好了分區掛載的目錄,您就不需要再去理會什麼分區。
Windows下的路徑包含有分區、目錄和文件三部分內容;而Linux下的路徑則只有目錄和文件,不包含任何分區信息,它的硬件抽象度更高!
Linux下的目錄用“/”表示,這不標准吧??
完全相反,這才是標准的體現。您只是習慣了Windows的目錄符號,但是那並不意味著它是標准的。
看看Winodws下,各種位置、路徑的表示方法:
http://hovertree.com/
ftp://192.168.0.1
c:\Windows\
file:///C:/Windows/
\127.0.0.1\$C
……………………………………………………………………
操作系統是一種非常精密的高科技產品,怎麼可能如此混亂!!!他們是怎麼作到的???
Linux下的病毒少,是因為Linux的使用者少,駭客顯然不願意浪費氣力去攻擊沒有人使用的操作系統。
您可能已經知道了,互聯網上用作重要用途的服務器,其中很大一部分是Linux系統,另外的一部分是Unix系統:)如果駭客能夠搞掉Linux系統的話,那麼整個互聯網就會陷於癱瘓!效果似乎更好一些。
當然了,您一定會想:駭客也是人,他們也喜歡上網,兔子還不吃窩邊草呢……兔子那麼笨,連烏龜都跑不過……駭客們可比兔子要聰明的多了!
是的,我承認這一點……不過他們也不一定非得把互聯網干掉。很多駭客作夢都想入侵美國軍方的服務器,美軍服務器中的絕密數據,只要1kb,應該就可以買一台頂級的個人電腦了:)
如果可以的話,駭客為什麼不去入侵美軍的服務器,而要入侵您的電腦呢?
這是一個很有意思的觀點,與之相映成趣,另一種論調也使人側目:Windows服務器占到了服務器操作系統xx%的份額。
或許這個現象可以用80:20法則來解釋:)
占服務器總數80%的Windows提供了服務總量的20%!
請您務必注意,這只是舉一個例子,Windows服務器可能永遠也不會占到服務器總數的80%!它提供的服務,以我個人的角度,我不認為可以達到20%,而且永遠不會有那一天。
軟件安裝繁瑣
或許您已經看過一些關於Linux軟件安裝的文章,但是您也不要忽略,此類文章的數量,是不能夠和同類Windows文章相比的。
當然,使用源碼包安裝軟件確實有點麻煩,但卻不一定比Windows下的某些軟件復雜。特別要提到,Ubuntu的包管理系統,為您提供了一種高效快捷的
軟件管理方式,您只要知道您需要什麼軟件就可以了,甚至不需要關心它存放在網絡上的哪一台服務器中,而且絕大多數的軟件都可以使用這種方式來安裝。
詳情請參閱 APT
如果您有如下需求,您也可以嘗試以源碼的形式安裝軟件:
您需要某些軟件的技術預覽版本
您想測試您的機器的運算能力
您找不到一種比安裝軟件更好的方式來消磨時間 | (試圖通過編譯源碼安裝來大幅提高系統性能,其結果很可能會讓您失望)
源碼保密性不強,存在安全隱患
既然Linux下軟件都開放源代碼,那麼會不會造成一些安全隱患呢?比如說一名駭客會發現其中的漏洞,並利用它?
事實剛好相反,一個軟件,即便它不開放源碼,駭客一樣可以找到其中的漏洞,雷蒙德的軟件巨頭就是最好的佐證。就像一把鎖,無論如何堅固,它總是能被撬開!它的作用無外乎“聊備一格,以防君子”:)
而這把鎖,防住的恰恰是能夠改進它的工程師!工程師知道了它的漏洞,卻不能夠去改進它;駭客知道了它的漏洞,卻可以利用它……這把鎖正是封閉源碼!
這豈不是不妙?
軟件功能不夠強
雖然您很願意使用Linux系統,但是它的軟件並不能使您滿意,甚至使您多愁善感的心靈又蒙上了一層陰影,“長太息以掩涕……”
首先您別忘了,《泰坦尼克》的特效就是在Linux系統下完成的,連業界巨頭SGI都在向Linux遷移(盡管SGI的IRIX本來就是一種Unix系統)。如果您不知道SoftImage,那麼Maya您總聽說過吧?它最初就是多平台的。
對於電影特效處理時需要的高吞吐量的數據(以TB計)和運算能力,Windows系統恐怕連崩潰的機會都沒有=_=#(最新統計資料顯示,Top500計算機中,使用Linux的占到73.4%,包括最快的前兩名。其中Linux系統367部,Unix系統98部,混合操作系統24部,AppleMacOS系統5部,BSD系統4部,Windows系統,2部)類似於大氣模擬、基因解碼等等真正的科學運算……Windows……前幾天我還在verycd.com上看到一套歐洲某天文台的天文學軟件,只有Linux版!
當然了,Linux下功能強大的軟件大多是命令行的,圖形界面的程序只能視覺上強大,外強中干!建議您多使用man這個命令來查詢各類軟件的使用方法,它排版美觀,格式工整,語法簡明,意韻流暢,實在是學習英語難得的教材。
界面不友好
如果您指的是系統的美觀程度。Gnome默認效果我認為與Windows處於同一水平線,而KDE的效果就要略好一點,很多高手用FVWM可以作出讓人眼花瞭亂的效果來……而Novell的XGL,更是可以用“驚艷”來形容。
如果您指的是操作,這屬於“易於上手難於精通”與“難於上手易於精通”兩種理念的沖撞。
當然了,我指的精通主要針對效率而言。如果您經常玩Blizzard出品的游戲,您對於“易於上手難於精通”這種理念或許相當了解,甚至非常欣賞。
不過這一理念只適用於競技游戲!競技游戲要球能夠吸引大量的玩家,所以要易於上手。但是競技游戲是為競技而生的,所以不可能人人是高手 ────事實上高手只是一小部分人!
而操作系統是給人們來用的,最好人人都成為高手,所以易於精通是很重要的……當然最好也能夠易於上手。但是考慮到效率的問題,這很難解決……
Linux怎麼占用這麼多內存?
Linux會最大程度的利用物理內存,避免使用交換空間;而不是盡量的回收內存,使用頁面文件。http://hovertree.com/menu/linux/
又因為Linux系統的內存管理非常優秀,程序退出時可以高效的回收內存,所以更加沒有必要在程序運行時就回收內存!
因此,Linux系統表面看來內存開銷很大,實際上系統運行是很穩定的──Linux不會時而流暢,時而癱瘓。事實上,在正常情況下,它運行是非常流暢的。
推薦:http://www.cnblogs.com/roucheng/p/cliunx.html
http://xxxxxx/Linuxjc/1136121.html TechArticle