快速上手幾個Linux命令:每家公司都有自己的黑話

如果你還沒有上手用過Linux,那麼學習《趣談Linux操作系統》,你可能會感受到困惑。因爲沒有一手的體驗,你可能很難將Linux的機制和你的使用行爲關聯起來。所以這一節,咱們先介紹幾個上手Linux的命令,通過這些命令,我們試試先把Linux用起來。

爲什麼我把Linux命令稱爲“黑話”呢?就像之前我們介紹的,Linux操作系統有很多功能,我們有很多種方式可以使用這些功能,其中最簡單和直接的方式就是命令行(Command Line)。命令行就相當於你請求Linux服務使用的專業術語。幹任何事情,第一步就是學會使用正確的術語。這樣,Linux作爲服務方,才能聽的懂。這些術語可不就是“黑話”嗎?

Window系統你肯定很熟悉吧?現在,我就沿着你使用Windows的習慣,來給你介紹相應的Linux命令。

用戶與密碼

當我們打開一個新系統的時候,第一件要做的事就是登錄。系統默認有一個Administrator用戶,也就是系統管理員,它的權限很大,可以在這個系統上幹任何事。Linux上面也有一個類似的用戶,我們叫Root。同樣,它也具有最高的操作權限。

接下來,你需要輸入密碼了。密碼從哪裏來呢?對於Windows來講,在你安裝操作系統的過程中,會讓你設置一下Administrator的密碼;對於Linux,Root的密碼同樣也是在安裝過程中設置的。

對於Windows,你設好之後,可以多次修改這個密碼。比如說,我們在控制面板的賬戶管理裏面就可以完成這個操作。但是對於Linux呢?不好意思,沒有這麼一個統一的配置中心了。你需要使用命令來完成這件事情。“命令”很好記,passwd,其實就是password的簡稱。

# passwd
Changing password for user root.
New password:

按照這個命令,我們就可以輸入新密碼啦。

在Windows裏,除了Administrator之外,我們還可以創建一個以自己名字命名的用戶。那在Linux裏可不可以創建其他用戶呢?當然可以了,我們同樣需要一個命令useradd

 useradd cliu8

執行這個命令,一個用戶就被創建了。它不會彈出什麼讓你輸入密碼之類的頁面,就會直接返回了。因爲接下來你需要自己調用passwd cliu8來設置密碼,再進行登錄。

在Windows裏設置用戶的時候,用戶有一個“組”的概念。你可能沒注意過,不過我一說名字你估計就能想起來了,比如“Adminsitrator組”“Guests組”“Power User組”等等。同樣,Linux裏也是分組的。前面我們創建用戶的時候,沒有說加入哪個組,於是默認就會創建一個同名的組。

能不能在創建用戶的時候就指定屬於哪個組呢?我們來試試。我們可以使用-h參數看一下,使用useradd這個命令,有沒有相應的選項。

[root@deployer ~]# useradd -h
Usage: useradd [options] LOGIN
       useradd -D
       useradd -D [options]

Options:
  -g, --gid GROUP               name or ID of the primary group of the new account

一看還真有這個選項。以後命令不會用的時候,就可以通過-h參數看一下,它的意思是help。

如果想看更加詳細的文檔,你可以通過man useradd獲得,細細閱讀。

上一節我們說過,Linux裏是“命令行+文件”模式。對於用戶的管理來說,也是一樣的。咱們通過命令創建的用戶,其實是放在/etc/passwd文件裏的。這是一個文本文件。我們可以通過cat命令,將裏面的內容輸出在命令行上。組的信息我們放在/etc/group文件中。

# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
......
cliu8:x:1000:1000::/home/cliu8:/bin/bash

# cat /etc/group
root:x:0:
......
cliu8:x:1000:

在/etc/passwd文件裏,我們可以看到root用戶和咱們剛創建的cliu8用戶。x的地方應該是密碼,密碼當然不能放在這裏,不然誰都知道了。接下來是用戶ID和組ID,這和/etc/group裏面就對應上了。

/root和/home/cliu8是什麼呢?它們分別是Root用戶和cliu8用戶的主目錄。主目錄是用戶登錄進去後默認的路徑。其實Windows裏面也是這樣的。當我們打開文件夾瀏覽器的時候,左面會有“文檔”“圖片”“下載”等文件夾,路徑在C:\Users\cliu8下面。要注意,同一臺電腦,不同的用戶情況會不一樣。

/bin/bash的位置是用於配置登錄後的默認交互命令行的,不像Windows,登錄進去是界面,其實就是explorer.exe。而Linux登錄後的交互命令行是一個解析腳本的程序,這裏配置的是/bin/bash。

瀏覽文件

終於登錄進來啦,接下來你可以在文件系統裏面隨便逛一逛、看一看了。

可以看到,Linux的文件系統和Windows是一樣的,都是用文件夾把文件組織起來,形成一個樹形的結構。這一點沒有什麼差別。只不過在Linux下面,大多數情況,我們需要通過命令行來查看Linux的文件。

其實在Windows下也有命令行,例如cd就是change directory,就是切換目錄;cd .表示當前目錄;cd …表示上一級目錄;使用dir,可以列出當前目錄下的文件。Linux基本也是這樣,只不過列出當前目錄下的文件我們用的是ls,意思是list。

我們常用的是ls -l,也就是用列表的方式列出文件。

# ls -l
drwxr-xr-x 6 root root    4096 Oct 20  2017 apt
-rw-r--r-- 1 root root     211 Oct 20  2017 hosts

其中第一個字段的第一個字符是文件類型。如果是“-”,表示普通文件;如果是d,就表示目錄。當然還有很多種文件類型,咱們後面遇到的時候再說,你現在先記住我說的這兩個就行了。

第一個字段剩下的9個字符是模式,其實就是權限位(access permission bits)。3個一組,每一組rwx表示“讀(read)”“寫(write)”“執行(execute)”。如果是字母,就說明有這個權限;如果是橫線,就是沒有這個權限。

這三組分別表示文件所屬的用戶權限、文件所屬的組權限以及其他用戶的權限。例如,上面的例子中,-rw-r–r--就可以翻譯爲,這是一個普通文件,對於所屬用戶,可讀可寫不能執行,對於所屬的組,僅僅可讀,對於其他用戶,也是僅僅可讀。如果想改變權限,可以使用命令chmod 711 hosts。

第二個字段是硬鏈接(hard link)數目,這個比較複雜,講文件的時候我會詳細說。

第三個字段是所屬用戶,第四個字段是所屬組。第五個字段是文件的大小,第六個字段是文件被修改的日期,最後是文件名。可以通過命令chown改變所屬用戶,chgrp改變所屬組。

安裝軟件

好了,你現在應該會瀏覽文件夾了,接下來應該做什麼呢?當然是開始安裝那些“裝機必備”的軟件啦!

在Windows下面,在沒有類似軟件管家的軟件之前,我們其實都是在網上下載installer,然後再進行安裝的。

就以我們經常要安裝的JDK爲例子。應該去哪裏下載呢?爲了安全起見,一般去官網比較好。如果你去JDK的官網,它會給你一個這樣的列表。

對於Windows系統,最方便的方式就是下載exe,也就是安裝文件。下載後我們直接雙擊安裝即可。

對於Linux來講,也是類似的方法,你可以下載rpm或者deb。這個就是Linux下面的安裝包。爲什麼有兩種呢?因爲Linux現在常用的有兩大體系,一個是CentOS體系,一個是Ubuntu體系,前者使用rpm,後者使用deb。

在Linux上面,沒有雙擊安裝這一說,因此想要安裝,我們還得需要命令。CentOS下面使用rpm -i jdk-XXX_linux-x64_bin.rpm進行安裝,Ubuntu下面使用dpkg -i jdk-XXX_linux-x64_bin.deb。其中-i就是install的意思。

在Windows下面,控制面板裏面有程序管理,我們可以查看目前安裝了哪些軟件,可以刪除這些軟件。

在Linux下面,憑藉rpm -qadpkg -l就可以查看安裝的軟件列表,-q就是query,a就是all,-l的意思就是list。

如果真的去運行的話,你會發現這個列表很長很長,很難找到你安裝的軟件。如果你知道要安裝的軟件包含某個關鍵詞,可以用一個很好用的搜索工具grep。

rpm -qa | grep jdk,這個命令是將列出來的所有軟件形成一個輸出。|是管道,用於連接兩個程序,前面rpm -qa的輸出就放進管道里面,然後作爲grep的輸入,grep將在裏面進行搜索帶關鍵詞jdk的行,並且輸出出來。grep支持正則表達式,因此搜索的時候很靈活,再加上管道,這是一個很常用的模式。同理dpkg -l | grep jdk也是能夠找到的。

如果你不知道關鍵詞,可以使用rpm -qa | morerpm -qa | less這兩個命令,它們可以將很長的結果分頁展示出來。這樣你就可以一個個來找了。

我們還是利用管道的機制。more是分頁後只能往後翻頁,翻到最後一頁自動結束返回命令行,less是往前往後都能翻頁,需要輸入q返回命令行,q就是quit。

如果要刪除,可以用rpm -edpkg -r。-e就是erase,-r就是remove。

我們剛纔說的都是沒有軟件管家的情況,後來Windows上有了軟件管家,就方便多了。我們直接搜索一下,然後點擊安裝就行了。

Linux也有自己的軟件管家,CentOS下面是yum,Ubuntu下面是apt-get。

你可以根據關鍵詞搜索,例如搜索jdkyum search jdkapt-cache search jdk,可以搜索出很多很多可以安裝的jdk版本。如果數目太多,你可以通過管道grep、more、less來進行過濾。

選中一個之後,我們就可以進行安裝了。你可以用yum install java-11-openjdk.x86_64apt-get install openjdk-9-jdk來進行安裝。

安裝以後,如何卸載呢?我們可以使用yum erase java-11-openjdk.x86_64apt-get purge openjdk-9-jdk

Windows上的軟件管家會有一個統一的服務端,來保存這些軟件,但是我們不知道服務端在哪裏。而Linux允許我們配置從哪裏下載這些軟件的,地點就在配置文件裏面。

對於Centos來講,配置文件在 /etc/yum.repos.d/CentOS-Base.repo裏。

[base]
name=CentOS-$releasever - Base - 163.com
baseurl=http://mirrors.163.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-7

對於Ubuntu來講,配置文件在 /etc/apt/sources.list裏。

deb http://mirrors.163.com/ubuntu/ xenial main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ xenial-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ xenial-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ xenial-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ xenial-backports main restricted universe multiverse

這裏爲什麼都是163.com呢?因爲Linux服務器遍佈全球,不能都從一個地方下載,最後選一個就近的地方下載,例如在中國,選擇163.com,就不用跨越重洋了。

其實無論是先下載再安裝,還是通過軟件管家進行安裝,都是下載一些文件,然後將這些文件放在某個路徑下,然後在相應的配置文件中配置一下。例如,在Windows裏面,最終會變成C:\Program Files下面的一個文件夾以及註冊表裏面的一些配置。對應Linux裏面會放的更散一點。例如,主執行文件會放在/usr/bin或者/usr/sbin下面,其他的庫文件會放在/var下面,配置文件會放在/etc下面。

所以其實還有一種簡單粗暴的方法,就是將安裝好的路徑之間下載下來,然後解壓縮成爲一個整的路徑。在JDK的安裝目錄中,Windows有jdk-XXX_Windows-x64_bin.zip,這是Windows下常用的壓縮模式。Linux有jdk-XXX_linux-x64_bin.tar.gz,這是Linux下常用的壓縮模式。

如何下載呢?Linux上面有一個工具wget,後面加上鍊接,就能從網上下載了。

下載下來後,我們就可以進行解壓縮了。Windows下可以有winzip之類的壓縮解壓縮程序,Linux下面默認會有tar程序。如果是解壓縮zip包,就需要另行安裝。

yum install zip.x86_64 unzip.x86_64
apt-get install zip unzip

如果是tar.gz這種格式的,通過tar xvzf jdk-XXX_linux-x64_bin.tar.gz就可以解壓縮了。

對於Windows上jdk的安裝,如果採取這種下載壓縮包的格式,需要在系統設置的環境變量配置裏面設置JAVA_HOMEPATH

在Linux也是一樣的,通過tar解壓縮之後,也需要配置環境變量,可以通過export命令來配置。

export JAVA_HOME=/root/jdk-XXX_linux-x64
export PATH=$JAVA_HOME/bin:$PATH

export命令僅在當前命令行的會話中管用,一旦退出重新登錄進來,就不管用了,有沒有一個地方可以像Windows裏面可以配置永遠管用呢?

在當前用戶的默認工作目錄,例如/root或者/home/cliu8下面,有一個.bashrc文件,這個文件是以點開頭的,這個文件默認看不到,需要ls -la才能看到,a就是all。每次登錄的時候,這個文件都會運行,因而把它放在這裏。這樣登錄進來就會自動執行。當然也可以通過source .bashrc手動執行。

要編輯.bashrc文件,可以使用文本編輯器vi,也可以使用更加友好的vim。如果默認沒有安裝,可以通過yum install vim及apt-get install vim進行安裝。

vim就像Windows裏面的notepad一樣,是我們第一個要學會的工具。要不然編輯、查看配置文件,這些操作你都沒辦法完成。vim是一個很複雜的工具,剛上手的時候,你只需要記住幾個命令就行了。

vim hello,就是打開一個文件,名字叫hello。如果沒有這個文件,就先創建一個。

我們其實就相當於打開了一個notepad。如果文件有內容,就會顯示出來。移動光標的位置,通過上下左右鍵就行。如果想要編輯,就把光標移動到相應的位置,輸入i,意思是insert。進入編輯模式,可以插入、刪除字符,這些都和notepad很像。要想保存編輯的文本,我們使用esc鍵退出編輯模式,然後輸入“:”,然後在“:”後面輸入命令w,意思是write,這樣就可以保存文本,冒號後面輸入q,意思是quit,這樣就會退出vim。如果編輯了,還沒保存,不想要了,可以輸入q!

好了,掌握這些基本夠用了,想了解更復雜的,你可以自己去看文檔。

通過vim .bashrc,將export的兩行加入後,輸入:wq,寫入並且退出,這樣就編輯好了。

運行程序

好了,裝好了程序,可以運行程序了。

我們都知道Windows下的程序,如果後綴名是exe,雙擊就可以運行了。

Linux不是根據後綴名來執行的。它的執行條件是這樣的:只要文件有x執行權限,都能到文件所在的目錄下,通過 ./filename運行這個程序。當然,如果放在PATH裏設置的路徑下面,就不用./了,直接輸入文件名就可以運行了,Linux會幫你找。

這是Linux執行程序最常用的一種方式,通過shell在交互命令行裏面運行

這樣執行的程序可能需要和用戶進行交互,例如允許讓用戶輸入,然後輸出結果也打印到交互命令行上。這種方式比較適合運行一些簡單的命令,例如通過date獲取當前時間。這種模式的缺點是,一旦當前的交互命令行退出,程序就停止運行了。

這樣顯然不能用來運行那些需要“永遠“在線的程序。比如說,運行一個博客程序,我總不能老是開着交互命令行,博客纔可以提供服務。一旦我要去睡覺了,關了命令行,我的博客別人就不能訪問了,這樣肯定是不行的。

於是,我們就有了Linux運行程序的第二種方式,後臺運行

這個時候,我們往往使用nohup命令。這個命令的意思是no hang up(不掛起),也就是說,當前交互命令行退出的時候,程序還要在。

當然這個時候,程序不能霸佔交互命令行,而是應該在後臺運行。最後加一個&,就表示後臺運行。

另外一個要處理的就是輸出,原來什麼都打印在交互命令行裏,現在在後臺運行了,輸出到哪裏呢?輸出到文件是最好的。

最終命令的一般形式爲nohup command >out.file 2>&1 &。這裏面,“1”表示文件描述符1,表示標準輸出,“2”表示文件描述符2,意思是標準錯誤輸出,“2>&1”表示標準輸出和錯誤輸出合併了。合併到哪裏去呢?到out.file裏。

那這個進程如何關閉呢?我們假設啓動的程序包含某個關鍵字,那就可以使用下面的命令。

ps -ef |grep 關鍵字  |awk '{print $2}'|xargs kill -9

從這個命令中,我們多少能看出shell的靈活性和精巧組合。

其中ps -ef可以單獨執行,列出所有正在運行的程序,grep上面我們介紹過了,通過關鍵字找到咱們剛纔啓動的程序。

awk工具可以很靈活地對文本進行處理,這裏的awk '{print $2}'是指第二列的內容,是運行的程序ID。我們可以通過xargs傳遞給kill -9,也就是發給這個運行的程序一個信號,讓它關閉。如果你已經知道運行的程序ID,可以直接使用kill關閉運行的程序。

在Windows裏面還有一種程序,稱爲服務。這是系統啓動的時候就在的,我們可以通過控制面板的服務管理啓動和關閉它。

Linux也有相應的服務,這就是程序運行的第三種方式,以服務的方式運行。例如常用的數據庫MySQL,就可以使用這種方式運行。

例如在Ubuntu中,我們可以通過apt-get install mysql-server的方式安裝MySQL,然後通過命令systemctl start mysql啓動MySQL,通過systemctl enable mysql設置開機啓動。之所以成爲服務並且能夠開機啓動,是因爲在/lib/systemd/system目錄下會創建一個XXX.service的配置文件,裏面定義瞭如何啓動、如何關閉。

在CentOS裏有些特殊,MySQL被Oracle收購後,因爲擔心授權問題,改爲使用MariaDB,它是MySQL的一個分支。通過命令yum install mariadb-server mariadb進行安裝,命令systemctl start mariadb啓動,命令systemctl enable mariadb設置開機啓動。同理,會在/usr/lib/systemd/system目錄下,創建一個XXX.service的配置文件,從而成爲一個服務。

systemd的機制十分複雜,這裏咱們不討論。如果有興趣,你可以自己查看相關文檔。

最後咱們要學習的是如何關機和重啓。這個就很簡單啦。shutdown -h now是現在就關機,reboot就是重啓。

總結時刻

好了,掌握這些基本命令足夠你熟練操作Linux了。如果你是個初學者,這些命令估計看起來還是很多。我把今天這些基本的命令以及對應的操作總結了一下,方便你操作和查閱。

你不用可以去死記硬背,按照我講的這個步驟,從設置用戶和密碼、瀏覽文件、安裝軟件,最後到運行程序,自己去操作幾遍,再自己整理一遍,手腦並用,加深理解,鞏固記憶,效果可能會更好。

現在你應該已經學會了安裝JDK和MySQL,你可以嘗試搭建一個基於Java+MySQL的服務端應用,上手使用一下。

我是誰:

我是劉超,網易杭州研究院雲計算技術部首席架構師,QCon2019 廣州專題出品人。我有 15 年雲計算領域研發及架構經驗,出版過《Lucene 應用開發解密》。

極客時間的老用戶都知道,我也是極客時間“趣談網絡協議”專欄的作者,這個專欄目前有超過 3 萬人訂閱,我收到很多用戶的反饋,說非常認可我這種“像小說一樣”的“趣談”形式,講得通俗易懂,可以更好的理解底層知識。

大家的學習熱情也十分高漲,光互動留言就超過了 5 萬字。在和很多同學交流後,我發現很多人希望我繼續延續“趣談”的形式,講一講 Linux 操作系統。這也是《趣談 Linux 操作系統》專欄誕生的初衷。

點擊這裏試看或訂閱《趣談 Linux 操作系統》

出處:極客時間《趣談Linux操作系統》專欄

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章