(三)基本概念及操作

一、桌面環境

1.1 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 系統本身或者你正準備學習的某一門技術之上,這門實驗課后面的內容和實驗樓的其它課程便是為了幫助你實現以上兩個目標。

1.2 Linux 桌面環境的使用

有興趣的用戶可以在自己的計算機中安裝完整的 Linux 發行版或其 Live CD 體驗。

二、linux終端

2.1 終端的概念

通常我們在使用 Linux 時,并不是直接與系統打交道,而是通過一個叫做 Shell 的中間程序來完成的,在圖形界面下為了實現讓我們在一個窗口中完成用戶輸入和顯示輸出,Linux 系統還提供了一個叫做終端模擬器的程序(Terminal),下面是幾個比較常見的終端模擬器: gnome-terminal,Konsole,xterm,rxvt,kvt,nxterm 和 eterm 。不過要注意的是這里所說的終端(Terminal)和控制臺(Console)是有區別的。

作者:2lppsctk
鏈接:https://www.zhihu.com/question/21711307/answer/56056972
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

在UNIX的術語中,最簡單的回答是:
終端(terminal)=tty=文本的輸入輸出環境
控制臺(console)=物理終端
shell=命令行解釋器

控制臺,終端和tty是密切相關的。原本它們都表示一臺可以和計算機交互的設備:在UNIX的早期階段,此類設備大多指電傳機器(像一臺打字機一樣),這種設備有時也叫做電傳打字機,縮寫為TTY?!敖K端”(terminal)這個名字是從電子的觀點來看的,而“控制臺”是從設備的角度來看的。在UNIX歷史的極早期階段,電子鍵盤和顯示器就已經是一種規范的終端。在UNIX術語中,tty是一種特殊的設備文件,它在read和write之外還實現了一些特殊的命令(ioctls)。
通常意義上terminal是tty的代名詞。有的tty由(軟件)內核來代替硬件設備,比如從鍵盤發送過來的input,以及發送到文本模式的屏幕上的output,或者在串行線上傳輸的input/output流。

還有一種tty——有時候叫做偽tty(pseudo-ttys)的,它是由叫做”終端模擬器“的程序提供的(通過一個中間層),這種tty例如Xterm(運行在X window系統上),Screen(在一個程序和另一個終端之間提供了中間層),SSH(在另一臺電腦上,通過程序連接另一臺點奧上的終端),Expect(用腳本和終端交互)之類。

"terminal"這個詞通常也有一個更加傳統的意思,表示一臺能夠用來和電腦交互的設備——通常有顯示器和鍵盤。比如一個X terminal(一種瘦客戶機——一種特殊用途的計算機),它唯一的作用就是驅動鍵盤,顯示器,鼠標,(偶爾還有)別的外圍交互設備;而實際上程序是泡在另外一臺更加強大的計算機上的。

Console通常的物理意義上是通過一些手段直接連到機器上的主終端(primary teminal),在一些操作系統(比如Linux和FreeBSD)上console一般有好幾個tty(用特定的組合鍵能夠在這些tty之間切換)。有時候這些命名讓人混亂,比如操作系統可能把那些tty叫做”console“ ”virtual console“ ”virtual terminal“之類的。

那么,既然說一個虛擬終端是”虛擬(virtual)”的,什么又是“真的”終端?

shell,作為用戶登錄系統時看到的主界面,它主要的用處就是啟動別的程序。(我不確定原來的比喻義是指shell是用戶的home環境,還是說shell是其他程序在里面跑的環境)在UNIX圈里,shell 特指命令行shell(并且圍繞這這樣的描述:  “輸入你想要運行的應用的額名字,后面跟著文件或者其他的、應用程序應該據此作出調整的東西(翻譯:就是參數啦) ,并按回車鍵。”) 其他類型的環境并不使用“shell”這個詞,比如說窗口系統涉及了”窗口管理器“(window managers) 和”桌面環境“(desktop environments),但并不使用”shell“這個詞。UNIX shell有很多,比較流行的交互式shell包括bash(大多數Linux發行版的默認選擇) zsh(重視功能和可定制性) 還有fish(以簡單為主旨)。命令行shell包括了用來組合命令的流程控制結構。除了在交互式提示符下輸入命令外,用戶還可以編寫腳本。大多數shell都有一套共同的語法(基于Bourne shell)。當我們討論”shell編程”時,shell幾乎都指Bourne風格的shell。有的shell經常用來運行腳本,但缺少足夠的交互功能(比如說Korn shell——ksh,以及ash的許多變種)。 幾乎所有的UNIX-like操作系統都有一個Bourne風格的shell(路徑一般是/bin/sh)——而且 不是ash ksh 就是bash。在UNIX系統管理中,一個用戶的shell是那個在登錄的時候被調用的程序。普通用戶賬戶也擁有命令行shell,受限的用戶(比如僅用于傳輸文件的賬戶)可能擁有一個受限的shell,或者只能運行特定命令的shell。

終端和shell之間的分工并不是很明顯,下面是它們的主要工作:   
輸入:終端把鍵盤操作轉換成控制序列(比如Left 轉換為 \e[D)。
shell再轉換控制序列成為命令(比如\e[D 轉換為后退字符)。在行編輯(line editon)中,輸入歷史和輸入補全功能是shell提供的。終端有時候會在它自己的行編輯功能中提供輸入歷史和輸入補全功能,并且在命令要執行時通過line發送到shell中。唯一這樣做的主流terminal就是Emacs里的M-x。輸出:shell發出指令,比如說“display 某某” “切換前景色位綠色” “把光標移動到下一行”之類。而終端就響應這些指令。命令提示符是純粹的shell概念。shell永遠開不到它所運行的命令的輸出(除非重定向),輸出歷史(回滾)僅僅是個終端上的概念。應用程序之間的復制粘貼是由終端提供的(通常用鼠標,或者組合鍵,比如Ctrl+SHift+V 或Shift+Insert)。 Shell可能有它自己的內部復制粘貼機制(比如Meta+Y,Ctrl+Y)。作業控制(在后臺啟動程序,并且管理這些程序)主要是由shell執行。不過,是由終端來處理組合鍵的(比如Ctrl+C 殺死前臺程序,或者Ctrl+Z終止任務運行)。

終端本質上是對應著 Linux 上的/dev/tty 設備,Linux 的多用戶登陸就是通過不同的 /dev/tty 設備完成的,Linux 默認提供了 6 個純命令行界面的 “terminal”(準確的說這里應該是 6 個 virtual consoles)來讓用戶登錄。在物理機系統上你可以通過使用[Ctrl]+[Alt]+[F1]~[F6]進行切換。當你切換到其中一個終端后想要切換回圖形界面,你可以按下[Ctrl]+[Alt]+[F7]來完成。

2.2 Shell

通常在圖形界面中對實際體驗帶來差異的不是上述的不同發行版的各種終端模擬器,而是這個 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)。

2.3命令行操作體驗

2.3.1 寫在前面

在linux中,最最重要的就是命令,這就包含了2個過程,輸入和輸出

輸入

輸入當然就是打開終端,然后按鍵盤輸入,然后按回車,輸入格式一般就是這類的

#創建一個名為 file 的文件,touch是一個命令
touch file 
#進入一個目錄,cd是一個命令
cd /etc/
#查看當前所在目錄
pwd
輸出

輸出會返回你想要的結果,比如你要看什么文件,就會返回文件的內容。如果只是執行,執行失敗會告訴你哪里錯了,如果施行成功那么會沒有輸出,因為linux的哲學就是:沒有結果就是最好的結果

開始

雙擊桌面上的 Xfce 終端 圖標打開終端后系統會自動運行 Shell 程序,然后我們就可以輸入命令讓系統來執行了:

1) 重要快捷鍵:

真正學習命令行之前,你先要掌握幾個十分有用、必需掌握的小技巧:

[Tab]

使用Tab鍵來進行命令補全,Tab鍵一般是在字母Q旁邊,這個技巧給你帶來的最大的好處就是當你忘記某個命令的全稱時可以只輸入它的開頭的一部分,然后按下Tab鍵就可以得到提示或者幫助完成,當然不止補全命令,補全目錄、補全命令參數都是沒問題的

[Ctrl+c]

想想你有沒有遇到過這種情況,當你在 Linux 命令行中無意輸入了一個不知道的命令,或者錯誤地使用了一個命令,導致在終端里出現了你無法預料的情況,比如,屏幕上只有光標在閃爍卻無法繼續輸入命令,或者不停地輸出一大堆你不想要的結果。你想要立即停止并恢復到你可控的狀態,那該怎么辦呢?這時候你就可以使用Ctrl+c鍵來強行終止當前程序(你可以放心它并不會使終端退出)。

嘗試輸入以下命令:

$ tail

然后你會發現你接下來的輸入都沒有任何反應了,只是將你輸入的東西顯示出來,現在你可以使用Ctrl+c,來中斷這個你目前可能還不知道是什么的程序(在后續課程中我們會具體解釋這個tail命令是什么)。

又或者輸入:

$ find /

顯然這不是你想的結果,可以使用Ctrl+c結束。

雖然這個按著很方便,但不要隨便按,因為有時候,當你看到終端沒有任何反應或提示,也不能接受你的輸入時,可能只是運行的程序需要你耐心等一下,就不要急著按Ctrl+c了。

其他一些常用快捷鍵

按鍵 作用

  1. Ctrl+d 鍵盤輸入結束或退出終端
  2. Ctrl+s 暫停當前程序,暫停后按下任意鍵恢復運行
  3. Ctrl+z 將當前程序放到后臺運行,恢復到前臺為命令fg
  4. Ctrl+a 將光標移至輸入行頭,相當于Home鍵
  5. Ctrl+e 將光標移至輸入行末,相當于End鍵
  6. Ctrl+k 刪除從光標所在位置到行末
  7. Alt+Backspace 向前刪除一個單詞
  8. Shift+PgUp 將終端顯示向上滾動
    9.S hift+PgDn 將終端顯示向下滾動

2) 學會利用歷史輸入命令

很簡單,你可以使用鍵盤上的方向上鍵↑,恢復你之前輸入過的命令,你一試便知。

3) 學會使用通配符

通配符是一種特殊語句,主要有星號(*)和問號(?),用來對字符串進行模糊匹配(比如文件名、參數名)。當查找文件夾時,可以使用它來代替一個或多個真正字符;當不知道真正字符或者懶得輸入完整名字時,常常使用通配符代替一個或多個真正字符。

終端里面輸入的通配符是由 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

輕松一下

apt-get install banner


Shell 常用通配符:

字符 含義

  • *匹配 0 或多個字符
  • ? 匹配任意一個字符
  • [list] 匹配 list 中的任意單一字符
  • [!list] 匹配 除list 中的任意單一字符以外的字符
  • [c1-c2] 匹配 c1-c2 中的任意單一字符 如:[0-9] [a-z]
  • {string1,string2,...} 匹配 string1 或 string2 (或更多)其一字符串
  • {c1..c2} 匹配 c1-c2 中全部字符 如{1..10}

4) 學會在命令行中獲取幫助

在 Linux 環境中,如果你遇到困難,可以使用man命令,它是Manual pages的縮寫。

Manual pages 是 UNIX 或類 UNIX 操作系統中在線軟件文檔的一種普遍的形式, 內容包括計算機程序(包括庫和系統調用)、正式的標準和慣例,甚至是抽象的概念。用戶可以通過執行man命令調用手冊頁。

你可以使用如下方式來獲得某個命令的說明和使用方式的詳細介紹:

$ man <command_name>

比如你想查看 man 命令本身的使用方式,你可以輸入:

man man

通常情況下,man 手冊里面的內容都是英文的,這就要求你有一定的英文基礎。man 手冊的內容很多,涉及了 Linux 使用過程中的方方面面。為了便于查找,man 手冊被進行了分冊(分區段)處理,在 Research UNIX、BSD、OS X 和 Linux 中,手冊通常被分為8個區段,安排如下:

區段 說明
1 一般命令
2 系統調用
3 庫函數,涵蓋了C標準函數庫
4 特殊文件(通常是/dev中的設備)和驅動程序
5 文件格式和約定
6 游戲和屏保
7 雜項
8 系統管理命令和守護進程
要查看相應區段的內容,就在 man 后面加上相應區段的數字即可,如:

$ man 1 ls

會顯示第一區段中的ls命令 man 頁面。

所有的手冊頁遵循一個常見的布局,為了通過簡單的 ASCII 文本展示而被優化,而這種情況下可能沒有任何形式的高亮或字體控制。一般包括以下部分內容:

NAME(名稱)

該命令或函數的名稱,接著是一行簡介。

SYNOPSIS(概要)

對于命令,正

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容