Linux 操作系統(tǒng)有很多功能,我們有很多種方式可以使用這些功能,其中最簡單和直接的方式就是命令行(Command Line)。命令行就相當(dāng)于你請求服務(wù)使用的專業(yè)術(shù)語。干任何事情,第一步就是學(xué)會使用正確的術(shù)語。這樣,Linux 作為服務(wù)方,才能聽懂。
用戶與密碼
Root 是 Linux 下的系統(tǒng)管理員,有最高的操作權(quán)限。對應(yīng)的密碼是在安裝操作系統(tǒng)的過程中設(shè)置的;假如要修改密碼,使用 passwd 命令;
Linux 下創(chuàng)建其他用戶用 useradd 命令
useradd Leooel
創(chuàng)建后需要自己調(diào)用 passwd Leooel 來設(shè)置密碼,再進(jìn)行登錄。
和 Windows 下一樣,Linux 里用戶也是分組的,前面我們創(chuàng)建用戶的時候沒有說加入哪個組,會默認(rèn)創(chuàng)建一個同名的組。能不能在創(chuàng)建用戶的時候就指定屬于哪個組呢?這個時候你可以使用 -h 參數(shù)獲取幫助。
Linux 里是“命令行 + 文件”模式。對于用戶管理來說,也是一樣的。通過命令創(chuàng)建的用戶,其實是放在 /etc/passwd 文件里的。組的信息我們放在 /etc/group 文件中。
用戶文件里包含該用戶的名稱、密碼、用戶 ID、組 ID、用戶主目錄以及用于配置登錄后的默認(rèn)交互命令行的 /bin/bash。
瀏覽文件
Linux 的文件系統(tǒng)也是用文件夾把文件組織起來形成一個樹形的結(jié)構(gòu)。
cd:切換目錄,即 change directory
cd .:切換到當(dāng)前目錄
cd..:切換到上一級目錄
ls:列出當(dāng)前目錄下的文件(相當(dāng)于dos下的dir)
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 個字符是模式,其實就是權(quán)限位,3 個一組,每一組 rwx 表示 讀(read)、寫(write)、執(zhí)行(execute),是字母,就說明有這個權(quán)限;如果是橫線,就是沒有這個權(quán)限。這三組分別表示文件所屬的用戶權(quán)限、文件所屬的組權(quán)限以及其他用戶的權(quán)限。如果想改變權(quán)限,可以使用命令 chmod。
第二個字段是硬鏈接(hard link)數(shù)目,這個比較復(fù)雜,講文件的時候我會詳細(xì)說。
第三個字段是所屬用戶,第四個字段是所屬組。第五個字段是文件的大小,第六個字段是文件被修改的日期,最后是文件名。可以通過命令chown改變所屬用戶,chgrp改變所屬組。
安裝軟件
rpm 或 deb 是 Linux 下面的安裝包,為什么有兩種呢?因為 Linux 現(xiàn)在常用有兩大體系,CentOS 體系用 rpm,Ubuntu 體系用 deb。
CentOS 下面使用 rpm -i jdk-XXX_linux-x64_bin.rpm進(jìn)行安裝
Ubuntu 下面使用 dpkg -i jdk-XXX_linux-x64_bin.deb。其中 -i 就是 install 的意思。
在 Linux 下面,憑借rpm -qa和dpkg -l就可以查看安裝的軟件列表,-q 就是 query,a 就是 all,-l 就是list。
如果真的去運行的話,你會發(fā)現(xiàn)這個列表很長很長,很難找到你想找的東西,你可以用一個很好用的搜索工具 grep,通過關(guān)鍵詞進(jìn)行搜索。
rpm -qa | grep jdk,這個命令是將列出來的所有軟件形成一個輸出。| 是管道,用于連接兩個程序,前面 rpm -qa 的輸出就放進(jìn)管道里面,然后作為 grep 的輸入,grep 將在里面進(jìn)行搜索帶關(guān)鍵詞 jdk 的行,并且輸出出來。grep 支持正則表達(dá)式,因此搜索的時候很靈活,再加上管道,這是一個很常用的模式。同理dpkg -l | grep jdk也是能夠找到的。
如果你不知道關(guān)鍵詞,可以使用rpm -qa | more和rpm -qa | less這兩個命令,它們可以將很長的結(jié)果分頁展示出來。這樣你就可以一個個來找了。
我們還是利用管道的機制。more 是分頁后只能往后翻頁,翻到最后一頁自動結(jié)束返回命令行,less 是往前往后都能翻頁,需要輸入 q 返回命令行,q 就是 quit。
如果要刪除,可以用rpm -e和dpkg -r。-e 就是 erase,-r 就是 remove。
Linux 也有自己的軟件管家,CentOS 下面是 yum,Ubuntu 下面是 apt-get。
你可以根據(jù)關(guān)鍵詞搜索,例如搜索jdk,yum search jdk和apt-cache search jdk,可以搜索出很多可以安裝的 jdk 版本。如果數(shù)目太多,你可以通過管道 grep、more、less 來進(jìn)行過濾。
選中一個之后,我們就可以進(jìn)行安裝了。你可以用yum install java-11-openjdk.x86_64和apt-get install openjdk-9-jdk來進(jìn)行安裝。
安裝以后,如何卸載呢?我們可以使用yum erase java-11-openjdk.x86_64和apt-get purge openjdk-9-jdk。
Linux 允許我們配置從哪里下載這些軟件的,地點就在配置文件里面。
對于 CentOS 來講,配置文件在/etc/yum.repos.d/CentOS-Base.repo里。
對于 Ubuntu 來講,配置文件在/etc/apt/sources.list里。
其實無論是先下載再安裝,還是通過軟件管家進(jìn)行安裝,都是下載一些文件,然后將這些文件放在某個路徑下,然后在相應(yīng)的配置文件中配置一下。
對應(yīng) Linux,主執(zhí)行文件會放在 /usr/bin 或者 /usr/sbin 下面,其他的庫文件會放在 /var 下面,配置文件會放在 /etc 下面。
所以其實還有一種簡單粗暴的方法,就是將安裝好的路徑直接下載下來,然后解壓縮成為一個整的路徑。如何下載呢?Linux 上面有一個工具 wget,后面加上鏈接,就能從網(wǎng)上下載了。下載下來后,我們就可以進(jìn)行解壓縮了。Windows 下可以有 winzip 之類的解壓縮程序,Linux 下面默認(rèn)會有 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 就可以解壓縮了。
在 Linux 下以下載壓縮包的方式安裝 jdk 的時候,通過 tar 解壓縮之后,也需要配置環(huán)境變量,可以通過 export 命令來配置。
export JAVA_HOME=/root/jdk-XXX_linux-x64
export PATH=$JAVA_HOME/bin:$PATH
export 命令僅在當(dāng)前命令行的會話中管用,一旦退出重新登錄進(jìn)來,就不管用了。有沒有一個地方可以像 Windows 里面可以配置永遠(yuǎn)管用呢?
在當(dāng)前用戶的默認(rèn)工作目錄,例如 /root 或者 /home/cliu8 下面,有一個.bashrc 文件,這個文件是以點開頭的,這個文件默認(rèn)看不到,需要 ls -la 才能看到,每次登錄的時候,這個文件都會運行,因而把它放在這里,這樣登錄進(jìn)來就會自動執(zhí)行。當(dāng)然也可以通過 source .bashrc 手動執(zhí)行。
要編輯.bashrc 文件,可以使用文本編輯器 vi,也可以使用更加友好的 vim。如果默認(rèn)沒有安裝,可以通過 yum install vim 及 apt-get install vim 進(jìn)行安裝。
vim 就像 Windows 里面的 notepad 一樣,是我們第一個要學(xué)會的工具。vim 是一個很復(fù)雜的工具,剛上手的時候,你只需要記住幾個命令就行了。
vim hello:打開名為 hello 的文件,沒有則創(chuàng)建;
i:insert,進(jìn)入編輯模式,可插入、刪除字符;
要想保存編輯的文本,可以先按 esc 鍵退出編輯模式,然后輸入":",然后輸入命令 w,即write,這樣就可以保存文本,如果冒號后面輸入 q,即 quit,就會退出 vim。如果編輯了,還沒保存,不想要了,可以輸入 q!。
通過 vim .bashrc,將 export 的兩行加入后,輸入:wq,寫入并且退出,這樣就編輯好了。
運行程序
Linux 不是根據(jù)后綴名來執(zhí)行的。它的執(zhí)行條件是這樣的:只要文件有 x 執(zhí)行權(quán)限,都能到文件所在的目錄下,通過./filename運行這個程序。當(dāng)然,如果放在 PATH 里設(shè)置的路徑下面,就不用./ 了,直接輸入文件名就可以運行了,Linux 會幫你找。
這是Linux 執(zhí)行程序最常用的一種方式,通過 shell 在交互命令行里面運行。這種模式的缺點是,一旦當(dāng)前的交互命令行退出,程序就停止運行了,不能用來運行那些需要“永遠(yuǎn)“在線的程序,適合運行一些簡單的命令。
Linux 運行程序的第二種方式,后臺運行。
這個時候,我們往往使用 nohup 命令。這個命令的意思是 no hang up(不掛起),也就是說,當(dāng)前交互命令行退出的時候,程序還要在。當(dāng)然這個時候,程序不能霸占交互命令行,而是應(yīng)該在后臺運行。最后加一個 &,就表示后臺運行。后臺運行過程中的輸出要輸出到文件。
最終命令的一般形式為nohup command >out.file 2>&1 &。這里面,“1”表示文件描述符 1,表示標(biāo)準(zhǔn)輸出,“2”表示文件描述符 2,意思是標(biāo)準(zhǔn)錯誤輸出,“2>&1”表示標(biāo)準(zhǔn)輸出和錯誤輸出合并了。合并到哪里去呢?到 out.file 里。
那這個進(jìn)程如何關(guān)閉呢?我們假設(shè)啟動的程序包含某個關(guān)鍵字,那就可以使用下面的命令:
ps -ef |grep 關(guān)鍵字 |awk '{print $2}'|xargs kill -9
從這個命令中,我們多少能看出 shell 的靈活性和精巧組合。
其中 ps -ef 可以單獨執(zhí)行,列出所有正在運行的程序,grep 上面我們介紹過了,通過關(guān)鍵字找到咱們剛才啟動的程序。
awk 工具可以很靈活地對文本進(jìn)行處理,這里的 awk '{print $2}'是指第二列的內(nèi)容,是運行的程序 ID。我們可以通過 xargs 傳遞給 kill -9,也就是發(fā)給這個運行的程序一個信號,讓它關(guān)閉。如果你已經(jīng)知道運行的程序 ID,可以直接使用 kill 關(guān)閉運行的程序。
程序運行的第三種方式,以服務(wù)的方式運行。例如常用的數(shù)據(jù)庫 Mysql 就是以這種方式運行。
例如在 Ubuntu 中,我們可以通過 apt-get install mysql-server 的方式安裝 MySQL,然后通過命令systemctl start mysql啟動 MySQL,通過systemctl enable mysql 設(shè)置開機啟動。之所以成為服務(wù)并且能夠開機啟動,是因為在 /lib/systemd/system 目錄下會創(chuàng)建一個 XXX.service 的配置文件,里面定義了如何啟動、如何關(guān)閉。
在 CentOS 里有些特殊,MySQL 被 Oracle 收購后,因為擔(dān)心授權(quán)問題,改為使用 MariaDB,它是 MySQL 的一個分支。通過命令 yum install mariadb-server mariadb 進(jìn)行安裝,命令 systemctl start mariadb 啟動,命令 systemctl enable mariadb 設(shè)置開機啟動。同理,會在 /usr/lib/systemd/system 目錄下,創(chuàng)建一個 XXX.service 的配置文件,從而成為一個服務(wù)。
shutdown -h now 現(xiàn)在就關(guān)機,reboot 是重啟。

課后練習(xí)
動手搭建一個基于 Java + MySQL 的服務(wù)端應(yīng)用。