本節主要介紹 Linux 的歷史,Linux 與 Windows 的區別等入門知識。若是你已經有過充分的瞭解,能夠跳過本節,直接進入下一個實驗。linux
Linux 就是一個操做系統,就像你多少已經瞭解的 Windows(xp,7,8)和 Max OS ,至於操做系統是什麼,就不用過多解釋了,若是你學習過前面的入門課程,應該會有個基本概念了,這裏簡單介紹下操做系統在整個計算機系統中的角色。nginx
咱們的 Linux 也就是系統調用和內核那兩層,固然直觀的來看,咱們使用的操做系統還包含一些在其上運行的應用程序,好比文本編輯器,瀏覽器,電子郵件。web
操做系統始於二十世紀 50 年代,當時的操做系統能運行批處理程序。批處理程序不須要用戶的交互,它從文件或者穿孔卡片讀取數據,而後輸出到另一個文件或者打印機。shell
二十世紀六十年代初,交互式操做系統開始流行。它不只僅能夠交互,還能使多個用戶從不一樣的終端同時操做主機。這樣的操做系統被稱做分時操做系統,它的出現對批處理操做系統是個極大的挑戰。許多人嘗試開發分時操做系統, 其中包括一些大學的研究項目和商業項目。當時有一個項目叫作" Multics ",它的技術在當時很創新。" Multics "項目的開發並不順利。它花費了遠超過預計的時間來完成,卻沒有在操做系統市場上佔到多少份額。而參加該項目的一個開發團體-貝爾實驗室退出了這個項目。他們在退出後開發了他們本身的一個操做系統—— UNIX。ubuntu
UNIX 最初免費發佈並所以在大學裏受到歡迎。後來,UNIX 實現了 TCP/IP 協議棧,成爲了早期工做站的操做系統的一個流行選擇。vim
1990年,UNIX 在服務器市場尤爲是大學校園成爲主流操做系統,許多校園都有 UNIX 主機,固然還包括一些研究它的計算機系的學生。這些學生都渴望能在本身的電腦上運行 UNIX 。不幸的是,從那時候開始,UNIX 開始變得商業化,它的價格也變得很是昂貴。而惟一低廉的選擇就是 MINIX ,這是一個功能有限的相似 UNIX 的操做系統,做者 Andrew Tanebaum 開發它的目的是用於教學。windows
1991 年 10 月,Linus Torvalds(Linux 之父)在赫爾辛基大學接觸 UNIX ,他但願能在本身的電腦上運行一個相似的操做系統。但是 UNIX 的商業版本很是昂貴,因而他從 MINIX 開始入手,計劃開發一個比 MINIX 性能更好的操做系統。很快他就開始了本身的開發工做。他第一次發行的版本很快吸引了一些黑客。儘管最初的 Linux 並無多少用處,但因爲一些黑客的加入使它很快就具備了許多吸引人的特性,甚至一些對操做系統開發不感興趣的人也開始關注它。centos
Linux 自己只是操做系統的內核。內核是使其餘程序可以運行的基礎。它實現了多任務和硬件管理,用戶或者系統管理員交互運行的全部程序實際上都運行在內核之上。其中有些程序是必需的,好比說,命令行解釋器(shell),它用於用戶交互和編寫 shell 腳本(.bat文件)。 Linus沒有本身去開發這些應用程序,而是使用已有的自由軟件。這減小了搭建開發環境而所需花費的工做量。實際上,他常常改寫內核,使得那些程序能更容易在 Linux 上運行。許多重要的軟件,包括 C 編譯器,都來自於自由軟件基金 GNU 項目。GNU 項目開始於 1984 年,目的是爲了開發一個徹底相似於 UNIX 的免費操做系統。爲了表揚 GNU 對 Linux 的貢獻,許多人把 Linux 稱爲GNU/Linux(GNU 有本身的內核)。瀏覽器
1992-1993 年,Linux 內核具有了挑戰 UNIX 的全部本質特性,包括 TCP/IP 網絡,圖形界面系統(X window),Linux 一樣也吸引了許多行業的關注。一些小的公司開發和發行Linux,有幾十個 Linux 用戶社區成立。1994 年,Linux 雜誌也開始發行。安全
Linux 內核 1.0 在 1994 年三月發佈,內核的發佈要經歷許多開發週期,直至到達一個穩定的版本。
下面列舉一下 Linux 誕生大事件:
1965 年,Bell 實驗室、MIT、GE(通用電氣公司)準備開發 Multics 系統,爲了同時支持 300 個終端訪問主機,可是 1969 年失敗了;
剛開始並無鼠標、鍵盤,輸入設備只有卡片機,所以若是要測試某個程序,則須要將讀卡紙插入卡片機,若是有錯誤,還須要從新來過; Multics:Multiplexed Information and Computing Service
1969 年,Ken Thompson(C語言之父)利用匯編語言開發了 FIle Server System(Unics,即 UNIX 的原型)
由於彙編語言對於硬件的依賴性,所以只能針對特定硬件; 只是爲了移植一款「太空旅遊」的遊戲;
1973 年,Dennis Ritchie 和 Ken Thompson 發明了 C 語言,然後寫出了 UNIX 的內核
將 B 語言改爲 C 語言,由此產生了 C 語言之父; 90% 的代碼是 C 語言寫的,10% 的代碼用匯編寫的,所以移植時只要修改那 10% 的代碼便可;
1977 年,Berkeley 大學的 Bill Joy 針對他的機器修改 UNIX 源碼,稱爲BSD(Berkeley Software Distribution)
Bill Joy 是 Sun 公司的創始人;
1979 年,UNIX 發佈 System V,用於我的計算機;
1984 年,由於 UNIX 規定:「不能對學生提供源碼」,Tanenbaum 老師本身編寫兼容於 UNIX 的Minix,用於教學;
1984 年,Stallman 開始 GNU(GNU's Not Unix)項目,創辦 FSF(Free Software Foundation)基金會;
產品:GCC、Emacs、Bash Shell、GLIBC; 倡導「自由軟件」; GNU 的軟件缺少一個開放的平臺運行,只能在 UNIX 上運行; 自由軟件指用戶能夠對軟件作任何修改,甚至再發行,可是始終要掛着 GPL 的版權; 自由軟件是能夠賣的,可是不能只賣軟件,而是賣服務、手冊等;
1985 年,爲了不 GNU 開發的自由軟件被其餘人用做專利軟件,所以建立 GPL(General Public License)版權聲明;
1988 年,MIT 爲了開發 GUI,成立了 XFree86 的組織;
1991 年,芬蘭赫爾辛基大學的研究生 Linus Torvalds 基於 gcc、bash 開發了針對 386 機器的 Linux 內核;
1994 年,Torvalds 發佈 Linux-v1.0;
1996 年,Torvalds 發佈 Linux-v2.0,肯定了 Linux 的吉祥物:企鵝;
UNIX進化史(UNIX你們族族譜1969-2013)
或許你以前不知道 Linux ,要知道,你以前在 Windows 使用百度,谷歌,上淘寶,聊 QQ 時,支撐這些軟件和服務的,是後臺成千上萬的 Linux 服務器主機,它們時時刻刻都在進行着忙碌的數據處理和運算,能夠說世界上大部分軟件和服務都是運行在 Linux 之上的。
明確目的:你是要用 Linux 來幹什麼,搭建服務器,作程序開發,仍是平常辦公,仍是娛樂遊戲;
面對現實:Linux 大都在命令行下操做,可否接受不用或少用圖形界面;
是學習 Linux 操做系統自己仍是某一個Linux發行版(Ubuntu,CentOS,Fedora,OpenSUSE,Debian,Mint 等等),若是你對發行版的概念或者它們之間的關係不明確的話能夠參看Linux 發行版。
大體的學習路徑以下:
相對於如今的 Windows 系統,UNIX/Linux 自己是沒有圖形界面的,咱們一般在 Unix/Linux 發行版上看到的圖形界面實際都只是運行在 Linux 系統之上的一套軟件,相似 Windows95 以前的Windows 的圖形界面實則也只是運行在 DOS 環境的一套軟件。而 Linux 上的這套軟件之前是XFree86,如今則是 xorg(X.Org),而這套軟件又是經過 X 窗口系統(X Window System,也常被稱爲X11或X)實現的,X 自己只是工具包及架構協議,而 xorg 即是 X 架構規範的一個實現體,也就是說它是實現了 X 協議規範的一個提供圖形用戶界面服務的服務器,就像實現了 http 協議提供 web 服務的 Apache。若是隻有服務器也是不能實現一個完整的桌面環境的,固然還須要一個客戶端,咱們稱爲 X Client,像以下幾個你們熟知也最流行的實現了客戶端功能的桌面環境KDE,GNOME,XFCE,LXDE,其中就有你看到的,實驗樓目前使用的 XFCE 桌面環境,部分老用戶可能能夠回想起,實驗樓以前使用的環境是 LXDE。這也意味着在 Linux 上你能夠本身選擇安裝不一樣的桌面環境,甚至能夠定製本身的專屬桌面。
這裏講這麼多,主要是爲了幫助你更好理解 Linux 的桌面環境是一個怎樣的概念,以及它跟 Windows 操做系統桌面的差別,實際它們之間是有着本質的差異的,但願清楚這些內容以後可讓你忽略那些體驗上的差別,專心把精力放到 Linux 系統自己或者你正準備學習的某一門技術之上,這門實驗課後面的內容和實驗樓的其餘課程即是爲了幫助你實現以上兩個目標的。
若是你對當前實驗桌面環境(xfce)的使用有任何困難,建議你先學習實驗樓入門基礎課程,對於其它桌面環境的使用,不在本課程的範圍之類,有興趣的用戶能夠在本身計算機中安裝完整的 Linux 發行版或其 Live CD 體驗。
關於登陸帳戶密碼的說明, 實驗樓環境中全部的默認系統用戶名均爲 shiyanlou,密碼爲 shiyanlou
一般在咱們使用 Linux 時,咱們並非直接與系統打交道,而是經過一個叫作 Shell 的中間程序來完成的,在圖形界面下爲了實現讓咱們在一個窗口中完成接受用戶輸入和顯示輸出,Linux 系統還提供了一個叫作終端模擬器的程序(Terminal),下面幾個比較常見的終端模擬器,例如 gnome-terminal,kconsole,xterm,rxvt,kvt,nxterm 和 eterm,目前咱們的實驗中的終端程序是 xfce 桌面環境自帶的 xfce-terminal。不過要注意的是這裏所說的終端(Terminal)和控制檯(Console)是有區別的。
終端本質上是對應着 Linux 上的 /dev/tty 設備,Linux 的多用戶登錄就是經過不一樣的 /dev/tty 設備完成的,Linux 默認提供了 6 個純命令行界面的 「terminal」(準確的說這裏應該是 6 個 virtual consoles)來讓用戶登陸,在物理機系統上你能夠經過使用[Ctrl]
+[Alt]
+[F1]~[F6]
進行切換,不過在咱們的在線實驗環境中可能沒法切換,由於特殊功能按鍵會被你主機系統劫持。當你切換到其中一個終端後想要切換回圖形界面,你能夠按下[Ctrl]
+[Alt]
+[F7]
來完成。
一般在圖形界面中對實際體驗帶來差別的不是上述的不一樣發行版的各類終端模擬器,而大都是這個 Shell(殼),有殼就有核,這裏的核就是指的 UNIX/Linux 內核,Shell 是指「提供給使用者使用界面」的軟件(命令解析器),相似於 DOS 下的 command(命令行)和後來的 cmd.exe。普通意義上的 Shell 就是能夠接受用戶輸入命令的程序。它之因此被稱做 Shell 是由於它隱藏了操做系統底層的細節。一樣的 Unix/Linux 下的圖形用戶界面 GNOME 和 KDE,有時也被叫作「虛擬 shell」或「圖形 shell」。
Unix/Linux 操做系統下的 Shell 既是用戶交互的界面,也是控制系統的腳本語言。固然在這點也有別於 Windows 下的命令行,雖然也提供了很簡單的控制語句。在Windows 操做系統下,可能有些用戶歷來都不會直接的使用 Shell,然而在 UNIX 系列操做系統下,Shell 仍然是控制系統啓動、X11 啓動和不少其餘實用工具的腳本解釋程序。
在 UNIX/Linux 中比較流行的常見的 Shell 有 bash,zsh,ksh,csh 等等,Ubuntu 終端默認使用的是 bash,默認的桌面環境是 GNOME 或者 Unity(基於 GNOME),但咱們的環境中使用的分別是zsh 和 xfce。
真正學習命令行以前,你先要掌握幾個十分有用,必需掌握的小技巧:
使用Tab
鍵來進行命令補全,Tab
鍵通常鍵盤是在字母Q
旁邊,這個技巧給你帶來的最大的好處就是當你忘記某個命令的全稱時你能夠只輸入它的開頭的一部分而後按下Tab
鍵就能夠獲得提示或者幫助完成:
固然不止補全命令,補全目錄,補全命令參數都是沒問題的:
想一想你有沒有遇到這種狀況,當你在 Linux 命令行中無心輸入了一個不知道的命令,或者錯誤的使用了一個命令,致使在終端裏出現了你沒法預料的狀況,好比,只有光標在閃爍沒法繼續輸入命令,或者不停地在輸出一大堆你不想要的結果。你想要當即中止並恢復到你可控的狀態,那該怎麼辦呢。這時候你就可使用Ctrl+c
鍵來強行終止當前程序(你能夠放心它並不會使終端退出)。
嘗試輸入如下命令:
$ tail
而後你會發現你接下來的輸入都沒有任何反應了,只是將你輸入的東西顯示出來,如今你可使用Ctrl+c
,來中斷這個你目前可能還不知道是什麼的程序了。(在後續課程中咱們會具體解釋這個tail
命令是什麼)
又或者輸入:
$ find /
顯然這不是你想的結果,可使用Ctrl+c
結束。
雖然這個按着很方便,但不要隨便按,由於有時候當你看到終端沒有任何反應或提示,也不能接受你的輸入,可能只是運行的程序須要你耐心的等一下,你就不要急着Ctrl+c
了。
按鍵 | 做用 |
---|---|
Ctrl+d |
鍵盤輸入結束或退出終端 |
Ctrl+s |
暫定當前程序,暫停後按下任意鍵恢復運行 |
Ctrl+z |
將當前程序放到後臺運行,恢復到前臺爲命令fg |
Ctrl+a |
將光標移至輸入行頭,至關於Home 鍵 |
Ctrl+e |
將光標移至輸入行末,至關於End 鍵 |
Ctrl+k |
刪除從光標所在位置到行末 |
Alt+Backspace |
向前刪除一個單詞 |
Shift+PgUp |
將終端顯示向上滾動 |
Shift+PgDn |
將終端顯示向下滾動 |
很簡單,你可使用鍵盤上的方向上
鍵,恢復你以前輸入過的命令,你一試便知。
通配符是一種特殊語句,主要有星號(*)和問號(?),用來對對字符串進行模糊匹配(好比文件名,參數名)。當查找文件夾時,可使用它來代替一個或多個真正字符;當不知道真正字符或者懶得輸入完整名字時,經常使用通配符代替一個或多個真正的字符。
終端裏面輸入的通配符是由 Shell 處理的,不是由所涉及到命令語句處理的,它只會出如今命令的「參數值」裏(它不用在 命令名稱裏, 命令不記得,那就用Tab
補全)。當 Shell 在「參數值」中遇到了通配符時,Shell 會將其看成路徑或文件名去在磁盤上搜尋可能的匹配:若符合要求的匹配存在,則進行代換(路徑擴展);不然就將該通配符做爲一個普通字符傳遞給「命令」,而後再由命令進行處理。總之,通配符 實際上就是一種 Shell 實現的路徑擴展功能。在 通配符被處理後, Shell 會先完成該命令的重組,而後再繼續處理重組後的命令,直至執行該命令。
先使用 touch 命令建立 2 個文件,後綴都爲 txt:
$ touch adsfasd.txt wergjlkas.txt
能夠給文件隨意命名,假如過了很長時間,你已經忘了這兩個文件的文件名,如今你想在你大堆其餘文件中找到這兩個文本文件,就可使用通配符:
$ ls *.txt
在建立文件的時候,若是須要一次性建立多個文件,好比:「love_1_linux.txt,love_2_linux.txt,... love_10_linux.txt」。在 Linux 中十分方便:
$ touch love_{1..10}_linux.txt
Shell 經常使用通配符:
字符 | 含義 |
---|---|
* |
匹配 0 或多個字符 |
? |
匹配任意一個字符 |
[list] |
匹配 list 中的任意單一字符 |
[!list] |
匹配 除list 中的任意單一字符之外的字符 |
[c1-c2] |
匹配 c1-c2 中的任意單一字符 如:[0-9] [a-z] |
{string1,string2,...} |
匹配 sring1 或 string2 (或更多)其一字符串 |
{c2..c2} |
匹配 c1-c2 中所有字符 如{1..10} |
在 Linux 環境中,若是你遇到困難,可使用man
命令,它是Manual page
的縮寫。
Manual pages 是在 UNIX 或類 UNIX 操做系統在線軟件文檔的一種廣泛的形式。 內容包括計算機程序(包括庫和系統調用),正式的標準和慣例,甚至是抽象的概念。用戶能夠經過執行 man 命令調用手冊頁。
你可使用以下方式來得到某個命令的說明和使用方式的詳細介紹:
$ man <command_name>
好比你想查看 man 命令自己的使用方式,你能夠輸入:
man man
一般狀況下,man 手冊裏面的內容都是英文的,這就要求你有必定的英文基礎。man 手冊的內容不少,涉及了 Linux 使用過程當中的方方面面,爲了便於查找,是作了分冊(分區段)處理的,在Research UNIX、BSD、OS X 和 Linux 中,手冊一般被分爲8個區段,安排以下:
區段 | 說明 |
---|---|
1 | 通常命令 |
2 | 系統調用 |
3 | 庫函數,涵蓋了C標準函數庫 |
4 | 特殊文件(一般是/dev中的設備)和驅動程序 |
5 | 文件格式和約定 |
6 | 遊戲和屏保 |
7 | 雜項 |
8 | 系統管理命令和守護進程 |
要查看相應區段的內容,就在 man 後面加上相應區段的數字便可,如:
$ man 3 printf
全部的手冊頁遵循一個常見的佈局,其爲經過簡單的 ASCII 文本展現而優化,而這種狀況下可能沒有任何形式的高亮或字體控制。通常包括如下部份內容:
NAME(名稱)
該命令或函數的名稱,接着是一行簡介。
SYNOPSIS(概要)
對於命令,正式的描述它如何運行,以及須要什麼樣的命令行參數。對於函數,介紹函數所需的參數,以及哪一個頭文件包含該函數的定義。
DESCRIPTION(說明)
命令或函數功能的文本描述。
EXAMPLES(示例)
經常使用的一些示例。
SEE ALSO(參見)
相關命令或函數的列表。
也可能存在其餘部份內容,但這些部分沒有獲得跨手冊頁的標準化。常見的例子包括:OPTIONS(選項),EXIT STATUS(退出狀態),ENVIRONMENT(環境),BUGS(程序漏洞),FILES(文件),AUTHOR(做者),REPORTING BUGS(已知漏洞),HISTORY(歷史)和COPYRIGHT(版權)。
一般 man 手冊中的內容不少,你可能不太容易找到你想要的結果,不過幸運的是你能夠在 man 中使用搜索,/<你要搜索的關鍵字>
,查找到後你可使用n
鍵切換到下一個關鍵字所在處,shift+n
爲上一個關鍵字所在處。使用Space
(空格鍵)翻頁,Enter
(回車鍵)向下滾動一行,或者使用j
,k
(vim編輯器的移動鍵)進行向前向後滾動一行。按下h
鍵爲顯示使用幫助(由於man使用less做爲閱讀器,實爲less
工具的幫助),按下q
退出。
想要得到更詳細的幫助,你還可使用info
命令,不過一般使用man
就足夠了。若是你知道某個命令的做用,只是想快速查看一些它的某個具體參數的做用,那麼你可使用--help
參數,大部分命令都會帶有這個參數,