1. 程式人生 > >Linux 常用命令, SSH, 以及簡單操作

Linux 常用命令, SSH, 以及簡單操作

1. Linux Terminal 簡介

類似於windows的shell/cmd,linux的terminal可以做很多很多事。

1.1 字型顏色修改

Terminal的font,size, color甚至cursor都是可以根據個人喜好做修改 ,只需要右擊點profile-profile preferences就可以修改了

在最左邊可以看到terminal的圖示,如果需要固定,右鍵選擇”unlockfrom launcher”即可 


 1.2 常用基本命令

開啟terminal後首先看到的是我們之前設定的[email protected]想要檢視當前目錄位置,可以輸入 pwd回車 [print working directory]

快捷鍵ls 可以list該目錄下的資料夾和檔案

快捷鍵 ls -l 會列出該目錄下的檔案資料夾的詳細資訊

快捷鍵 ls -a 會列出該目錄下所有檔案(包括隱藏檔案),隱藏檔案在linux中也叫dot file/’.’ File [對應windows cmd下的h屬性]//.file 沒有意外不要去修改嗯

上面的-l和-a可以聯合起來使用,在terminal裡輸入ls-la回車,列出的就是所有的檔案資料夾的詳細內容

嘗試了基本的命令後,螢幕還是有點messy的,清理螢幕的話可以直接輸入clear回車,就會回到最初狀態了

 

通過terminal閱讀文字檔案,可以通過輸入cat + 路徑來實現。

比如在桌面新建文字命名為text, 開啟後輸入文字內容並儲存。

在terminal中輸入catDesktop/text 回車,可以看到文字內容顯示在了terminal上

2. 瀏覽和使用linux上的檔案

2.1新建, 移除, 複製檔案和目錄

在terminal裡,cd是change directory, cd 加資料夾名可以進入資料夾[和windows的shell一樣]

回到上層目錄只需輸入cd .. 即可[同windows]

如果在terminal裡想回到home,直接輸入cd回車即可

新建目錄:mkdir 加檔名

移除目錄:rmdir 加檔名 【只在目錄裡面沒有檔案時可用】

新建檔案:touch 加檔名 【如果已經有了同名的檔案則不會新建】

移除檔案:rm 加檔名

當前目錄複製檔案:cp 複製的檔名 複製後的檔名

移動檔案:mv 檔名 目標目錄【移動到其他目錄】,mv 檔名 新檔名【當前目錄下重新命名】

3. 查詢和比較文件

查詢文件中關鍵詞:

我們有一個文字文件,需要搜尋文件裡匹配的欄位,這時候可以用grep 關鍵詞

來到需要搜尋的文件的目錄下,輸入 grep 搜尋欄位名 搜尋檔名 再回車即可

比較兩個文件:

在文件所在目錄下 輸入diff文件1名 文件2名 回車即可

-         修改密碼 輸入關鍵字passwd回車 會提示先輸入原密碼,再進行修改

-         變數賦值 變數名=變數值[等號左右沒有空格]

-         關鍵詞 echo 加文字內容,表示顯示echo後面的內容;echo$變數名 表示顯示變數

-         關鍵詞 info 加命令詞 會給出該關鍵詞的資訊

-         點選鍵盤上下鍵可以迅速回顧之前已經輸入的命令


4. 將terminal顯示的結果儲存到檔案

有時候我們想儲存在terminal顯示的資訊,可以在正常輸入的命令後面加 ‘>’ 再加希望命名的檔名即可,’>’ 不僅可以建立一個新文件(如果路徑下沒有輸入的檔名),也可以重寫一個文件 (如果路徑下已經存在同名的文件)

如果想在原文件後面加上新的內容,將’>’改為’>>’即可

5. 檔案許可權

以下面路徑的檔案為例,每一行前面的內容即檔案的許可權

第一個字元如果是’-’, 代表這是一個檔案;第一個字元如果是’d’,代表這是一個目錄

r.w.x read, write, execute

可以看到每個檔案文件前面是有三組3個字元的許可權的,第一組是針對檔案所有者的許可權,第二組是針對整個小組的許可權,第三個是針對其他使用者給的許可權

U – user, g – group, o – other people 

修改許可權可以使用chmod 加希望修改許可權的組+ 修改的許可權符號 加希望修改的檔名

 

對應這些許可權,有一個偷懶的方法:

4 – read

2 – write

1 – execute

0 – no permission

7 – combining all the numbers

Chmod 777 test 表示給user,group和other讀寫加執行的許可權 

6. 使用checksum確認檔案

每當我們下載一個檔案,會對應一串SHA-1來確保這個檔案是我們所下載的沒有問題的。

如我們下載raspberry pi下面的NOOBSLITE檔案,可以看到網頁提供給我們一個SHA-1, 這時候我們可以在terminal進入下載目錄,輸入shalsum加檔名 回車,會看到出來一串的字母和數字 ,如果這串資訊和網頁提供給我們的SHA-1一致,那麼這個檔案就是我們下載的正確的檔案。

比較這兩串數字可以直接在terminal比較,在上一個命令下加入| grep 加網頁中的字串 回車,如果說結果是紅色,表示這兩個字串內容一致

 

如果說擔心網頁上提供的SHA-1是篡改過的,希望可以更加保險的話,可以換一個網路或者問問其他人得到的是否也是同樣的字串

7. 壓縮和解壓縮tar, gz檔案

壓縮檔案: 關鍵詞gzip 檔名 [注: 檔名如果有空格的,需要在空格前面加一個’\’,在terminal裡,預設空格後面出現的是一個命令]

解壓縮檔案:關鍵詞gunzip 檔名.gz

壓縮不止一個檔案:tar cvf 檔名.tar加上所有需要壓縮的檔名

[c 建立, v 終端顯示結果,f file選項]

解壓縮tar檔案:tarxvf 檔名.tar [x: extract解壓縮]

 

8. User:

Super user可以用root來管理,但root許可權運用可能操作不當引起不必要麻煩,所以慎用。除了root我們可以用sudo(super user do)

管理使用者

我們可以新建一個文件在桌面,-la檢視發現naomi出現兩次,這是因為主使用者是naomi,當有主使用者時,系統會自動給主使用者劃分到組裡,這個組的組名同主使用者名稱

加入一個user

關鍵詞:sudo useradd 新使用者名稱 回車,系統提示輸入super user的密碼,輸入後給新使用者建立密碼:sudopasswd 新使用者名稱 即可

 修改密碼

輸入passwd回車 按照提示修改即可


9. 使用APT apt-get 安裝軟體

在terminal裡可以通過關鍵詞來安裝更新軟體

如:輸入sudo apt-get update ,會自動幫我們下載更新軟體[sudo: super user do ] 

如果想在terminal看是否安裝某個軟體,可以這樣檢視

比如檢視java: 輸入java-version回車得到如下結果

 

可以看到已經安裝好了java

如果沒有安裝php5:

輸入php5 -version 可以看到下面提示沒有安裝, 可以通過sudo apt-get install php5-cli進行安裝

 

如果下載了軟體但是由於比如檔案太多不知道該如何安裝,可以先cd進入home目錄,cd安裝包名/bin 回車,輸入ls回車。 我們可以看到.sh結尾的檔案,.sh指shell script, 是可以從terminal直接執行安裝的,可以通過關鍵詞bash加檔名回車直接執行

tips: 在ubuntu上安裝中文輸入法

輸入sudo apt-get install ibus-clutter ibus-gtk ibus-gtk3 ibus-qt4 安裝,然後im-config -s ibus來啟動ibus 

在ibus裡可以選擇中文的拼音或五筆等輸入法 

10. Group

Group可以很方便的給一個組/多人設定許可權

新建group:sudo groupdadd 組名

給組加入組員: sudo usermod -a -G 組名 組員//-g和-G區別在於 每個組員都屬於組員組,如果是-G,這個組員會被加入到一個新的組,如果是-g,組員則會先從原本的組剔除,再加入新的組

刪除組員:sudo userdel 組員

 

在terminal輸入cd../.. 可以退回兩層或者回到最外層目錄,回去後輸入ls可以看到,下圖中的etc即我們的配置檔案configuration files ,進入到etc目錄,列出所有檔案可以看到所有的密碼都在這個目錄下 ,但是cat所有的password只會看見密碼都是x,因為linux會給所有的密碼做加密,我們不會真的看到密碼,X表示密碼儲存在shadow檔案裡。如果想檢視shadow,就會出現拒絕訪問:

如果行駛sudo許可權檢視密碼,會看到:

這裡面的’*’表示這個密碼並非登陸訪問密碼

其他的密碼可以看到也是加了密的

通常我們不需要去了解這些幕後的資訊,也不要去擾亂這些資訊,linux已經給我們創造了一個相對安全的環境  

11. 設定和連結SSH server [以Digital Ocean為例]

這可以讓我們和其他地方的伺服器取得聯絡,也可以讓我們更好管理自己的網站

直接使用純文字密碼來連線伺服器是很容易被破解的,但是如果用SSH,基本就很難破解了。

在此我們是用的Digital Ocean的VPS,如果有更好的其他的選擇歡分享。關於如何選擇和使用,可參考DigitalOcean的tutorial。Digital Ocean的伺服器叫droplet,註冊登陸後兩小時內會有賬號確認郵件,確認後就可以建立自己的droplet了,可以根據自己需要選擇伺服器,DO是收費的,可以選擇其他的VPS也歡迎交流。

我這邊是根據自己的簡單需要選擇了最基本的,確認資訊後就開始建立了,建立OK會收到確認郵件,包括IP地址和密碼等資訊。

現在,我們開啟terminal,輸入ssh [email protected] root是我們現在用的username,@後面是郵件裡收到的IP地址,這一步驟就是我們以root的身份去登陸提供的IP。回車後收到下面資訊,選擇繼續。

根據提示重設密碼,設定成功登陸到伺服器,進行操作看到的東西就是伺服器上的了。

 


12. SSH KEY許可權

一直以來密碼驗證總是很容易被破解的,而SSH key就安全多了

我們需要有兩個key,一個是privatekey,用於我們的個人電腦,另一個是public key,在伺服器上,每當這兩個key通過一個formula轉換後相匹配,就work了。

首先,我們要生成這兩個key,這時候不需要登陸伺服器,開啟terminal,

輸入ssh-keygen -t rsa 回車,出來自動生成key的提示並給出預設的儲存key的路徑,不需要修改路徑,直接回車即可。如果想給檔案加密可以設定密碼,回車確認。

看到下面圈出來的部分,黃色部分是生成的private key,藍色是publickey

 

儲存key的資訊可以輸入[email protected]地址 回車,根據提示輸入密碼後,提示已經將key資訊新增

 

現在我們重新開啟terminal後再次登陸server,可以看到,已經不需要再輸入密碼資訊了,電腦上的private key可以讓我們直接登陸到server了,既方便又很安全。

 

13. 關閉密碼登陸

在terminal裡登入伺服器,然後輸入nano/etc/ssh/sshd_config 回車,看到一串的配置檔案,向下找到PermitRootLogin看到顯示是Yes,在此我們將yes改為without-password,按住ctrl+x,選擇Y, 然後回車儲存,接著一行輸入reload ssh回車,這樣我們做的更改就生效了。

現在我們登陸就方便了,即使其他人知道我們的密碼也沒有辦法,因為key是在我們電腦上的,所以非常安全。

 

14. 使用SFTP向伺服器傳輸檔案

首先在桌面建立了一個網頁檔案和包含網頁的目錄檔案,做檔案上傳用。   

SFTP類似FTP,不過是用ssh來傳輸的。

開啟terminal,輸入[email protected]伺服器地址 回車,連線上伺服器

為了確保我們在伺服器的root目錄,輸入cd../.. 回車,然後輸入ls -la回車,我們可以看到裡面有很多的檔案,這裡我們上傳的是一個html檔案,為了進入html儲存路徑,輸入cdvar/www/html回車,上傳html檔案直接在html目錄下輸入putDesktop/html檔名 回車,可以看到檔案已上傳,重新整理伺服器頁面可以看到我們上傳的頁面,如果要上傳一個資料夾,同樣在html目錄下輸入put-r Desktop/資料夾名 回車,然後我們在伺服器頁面地址後面加上/資料夾名就可以看到檔案了。

接下來我們嘗試從伺服器下載檔案到桌面,以剛上傳的頁面和資料夾為例,(先刪掉桌面上的html檔案和目錄),在伺服器html目錄下輸入get頁面檔名 Desktop 回車,即可將伺服器上的網頁下載到電腦桌面上,如果想下載目錄,可以先cd ..回到上一層目錄,接著輸入get-r html Desktop, 即將html整個目錄下的所有檔案和資料夾都下載到桌面上來,至此我們就通過sftp完成了從伺服器的上傳和下載。

 

15. 利用GParted和U盤來分割槽

關於分割槽,有一個是用工具GParted, 獲取工具的方法,在terminal輸入sudoapt-get install gparted 回車,gparted就開始下載了,下載完成後執行只需要輸入sudo gparted回車即可。執行後會跳出Gparted, 我這裡插入了自己的行動硬碟,點選右上角可以看到Linux對空間的命名方式不同於Windows(C:/D:/E:/), ta是以sda, sdb 來命名的,而下面的partition裡,sda下面的區域又分為了sda1,sda2 …

我們可以用一個U盤來更好的理解,我這裡用的是空白U盤。每當我們要分出一個區來的時候,首先要設一定的空間,當設定好這部分空間了(比如8GB),接著我們要設定這部分的系統檔案,即確定好這部分割槽域的構架。

 

在GParted最上面View的下拉選單File System Support可以看到一串的system support資訊,ext3是linux常用的,如果想給自己的U盤設立好filesystem且和不同作業系統都相容,fat32, ntfs是比較好的選擇,市面上大部分的盤也都是fat32,ntfs就是了。

選擇想要檢視的磁碟,點選view-device information可以看到磁碟基本資訊,比如我的U盤filesystem就是FAT32,選中U盤,點選partition-information也可以看到U盤的基本資訊。在刪除U盤或者分割槽前,我們需要先unmount [partition-unmount],相當於先解除這塊區域的鎖定,接著我們就可以delete了。Delete完後U盤就變成了unallocated,點選上面的勾選項,確認,現在我們的U盤就是一塊未分配的區域了。

這裡我們將U盤分為兩個區域,分之前先建立分割槽表[device-create partition table], 選擇預設的msdos即可,確認。接下來我們就可以來新建分割槽了,新建分割槽可以點partition-new也可以直接點選左上角的加號鍵,輸入你希望的區域大小,選擇希望的system file型別並命名區域,確認,這樣一個新的區就分好了。

可以看到我們的硬碟是sda, U盤是sdb,U盤分割槽是sdb1, sdb2 當然有更多區也會出現sdb3等。雖然sdb1,2是一個U盤的,但在電腦看來他們是不同的區,可見這是一個很好的讓我們分開檔案擺放管理的工具。

 

16. Shell script簡介

在文件前面輸入#!/bin/sh,這一行會告訴計算機,檔案開啟執行需要在shell裡。[#後面的內容是註釋部分] 

我們在文件裡寫上簡單的命令,儲存好在桌面。


接下來執行檔案,開啟terminal,進入桌面目錄,可以看到剛剛寫的文件在桌面目錄下,現在執行剛剛寫的小程式碼,輸入bash檔名回車,即可看到,小程式碼裡的命令已經執行,列出了檔案下的檔案和目錄。

 

shell很方便也很強大,挖個坑以後再填好了。

17. Processes

在terminal裡輸入ps回車,會看到所有的程序列表

輸入ps ax回車,會看到不僅現在執行中的程序,還包括所有在後臺的程序 

執行中的程序可以看到有屬性PID即程序ID,TTY告訴我們某個程式執行的終端,TIME是指一個程式佔用的CPU時間,CMD即command。


我們執行的ls, ps等其實都是小的程式,當執行完命令,程式也就結束了。而輸入xlogo這個命令,我們看到螢幕上跳出來一個框,當框在的時候我們就沒法輸入新的命令,當我們關閉xlogo框的時候,我們就又可以輸入新的命令來控制terminal了。

所以說,每當我們通過terminal來控制的時候,只會有一個process,只有噹噹前的process結束了,我們才可以進行下一個。 然而很多時候當我們在進行一個process的時候特別是在這個process很耗時的時候我們不會願意就一直等著process一點一點完成,會希望ta在後臺默默進行,這樣至少我們自己可以去做其他事情,而不是花那麼多時間等當前程序結束。以xlogo為例,我們在執行xlogo後,可以點紅叉關閉框框,或者我們可以在terminal按住ctrl和c,這個步驟即通過command line來打擾並停止當前程序;如果我們希望ta可以在後臺默默進行的時候,我們可以輸入 程式 & 回車,下圖可以看到我們的xlogo是在執行的,同時我們可以在terminal輸入新的命令。輸入ps後可以看到xlogo是在執行的,PID即我們在讓xlogo在後臺時出現的id程式碼,前面的[1]是這個程序的job number。


如果我們不記得執行的程式的job number,可以在terminal直接輸入jobs回車,如下圖,可以看到xlogo正在執行。如果我們需要關閉這個程序,這時候ctrl加c就不管用了,因為ctrl加c只適用於正在前臺執行的程式,而對於後臺程式,我們需要先將其移到前面來,再關閉。輸入fg%1回車即可以將job number為1的程式從後臺調到前臺,接著我們再ctrl加c就可以關閉程式了。


如果我們想要暫停或者停止一個程式,按住ctrl加z,terminal就會顯示程式stopped的狀態,在這種狀態下,我們沒法直接關閉程式,即使滑鼠點選xlogo上面的紅色叉也不行,這是因為在stopped狀態下所有對該程式的操作都被暫停了,如果需要進行操作,我們只能先將其從後臺調到前臺,調回來後發現程式自動關閉了,原因是我們在stopped狀態下點選了關閉按鈕,當frozen狀態結束後程序對我們的關閉操作有了反應即自動關閉程式。


還有一個關閉後臺程式的方法是使用kill命令,當程式在後臺的時候,輸入kill加PID回車即可。

如果我們想停止/凍結一個正在後臺的程式,可以輸入kill-STOP PID回車即可。

如果我們想恢復一個已經停止/凍結的程式,輸入kill-CONT PID回車即可。

以上為Linux簡單小入門(如果算的話),Linux的terminal有太多功能,還得繼續加油學習才行。

若有疑問或意見,歡迎提出和討論。

References: 
Linux tutorial: 
https://www.youtube.com/watch?v=HjuHHI60s44&list=PL6gx4Cwl9DGCkg2uj3PxUWhMDuTw3VKjM&index=1 

Digital Ocean Tutorial: 

FTP, SFTP, FTPS Differences

 Shell script: 

https://en.wikipedia.org/wiki/Shell_script 

Raspberry NOOBS: 

https://www.raspberrypi.org/downloads/noobs/