Linux 學習概述

Cacra發表於2018-07-29

根據慕課網 Linux Guide for Developers和菜鳥課程筆記,主要是Linux知識的概述,看完主要能對Linux基本操作有個概念。

我們對於Linux到底要掌握多少知識呢?

我覺得你只要弄清楚基本檔案操作,許可權管理,程式管理,網路管理,linux的環境相關,vim的使用,軟體包安裝的使用應該就可以滿足你日常的開發了。如果你是做後端開發,那麼除了在以上我覺得你還要會一些服務,比如iptables,lamp,nginx,我覺得深入學習下web模型會比較好,比如弄清楚nginx 哪裡比apache好,瞭解下什麼是代理,有哪些快取軟體,dns,還有資料庫,常用的指令碼工具,如fabric ,supervisor 等等,如果你是做後端開發應該比我懂,因為這些軟體都是圍繞web和app來的。有時間就多瞭解下,部署的時候也能用到的。

1.概述

  • 終端配置
  • 使用者許可權
  • 重定向
  • 軟體安裝
  • 搜尋
  • 程式
  • 網路操作
  • 指令碼

2.終端配置

Linux命令列裡面提示符:

這裡寫圖片描述

終端使用手冊檢視命令列使用方法:

man 命令列
# 例子
man rm

3.檔案系統

cd ..          返回上一級目錄
cd ~ 或者 cd   返回使用者家(根)目錄
cd -           返回根目錄之後,想返回之前的目錄,可以用這個命令
cd ../ ..      返回上上級目錄
cd /xx/xx     (例如cd /yangyang/home)以絕對路徑方式切換到指定資料夾

pwd            列印當前所在檔案位置

Linux掛載分割槽解析圖:

這裡寫圖片描述

Linux絕對路徑和相對路徑:

絕對路徑 start with “/”
相對路徑 start with “.”or”..”

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

附註:/root是叫根目錄,但是真正的根目錄是/root和/home上面的資料夾../..,這才是根目錄。

4.操作檔案和目錄

檔案和資料夾的基礎操作:

touch a.txt   建立檔案
mkdir test    建立資料夾
echo hello >a.txt 寫入資料到檔案
vim a.txt     編輯檔案
cat a.txt     檢視檔案
less a.txt    檢視檔案(分頁檢視)

file a.txt    檢視檔案型別
rm a.txt      刪除檔案  
rm -r test    刪除資料夾

cp file1 file2   複製檔案或目錄
mv file1 file2   移動或者重新命名檔案

這裡寫圖片描述

檔案的解壓與打包:

uzip zip

# .tar.gz格式 的解壓縮與壓縮
tar -zxvf 
tar -zcvf

# .tar.bz2格式 的解壓縮與壓縮
tar -jxvf
tar -jcvf

檔案操作:

# 下載網頁檔案(下載的檔案是index.html)
wget http://imooc.com

# less 分頁檢視檔案
less index.html

# head 輸出檔案第一部分

# tail 輸出檔案最後一部分

# j向下一行滾屏 k向上一行滾屏

# 在:後輸出/字元,就可以找到該檔案內所有該字元所在位置

# gg 到檔案頭 G 到檔案尾

# q 退出

5.重定向

重定向:

# 重定向 覆蓋 >
date >output.txt

# 重定向 追加 >>
date >>output.txt

# 管道符 | (檢視之後找出特定檔案)
ls /bin|grep less   #就可以找出所有檔案中包含less關鍵字的檔案了

# 上面的管道還可以這麼些
ls /bin >bin.txt
grep less <bin.txt

在Linux系統中有一個習慣——把所有的東西都視為檔案,檔案、資料夾、裝置等等都是檔案。

有三類檔案是一直開啟的,stdin標準輸入/stdout標準輸出/stderr標準錯誤。

這裡寫圖片描述

# 標準錯誤輸出 重定向
ls shit 2>out.txt
# cat 合併檔案(把兩個檔案內容合併到重定向的檔案內)
cat file1 file2 >file

# uniq 報告或刪除檔案中的重複的行
cat files.txt
    d.txt
    a.txt
    f.html
    b.txt
    b.txt
cat files.txt|uniq
    d.txt
    a.txt
    f.html
    b.txt

# grep 列印匹配行
cat files.txt|uniq|grep txt
    d.txt
    a.txt
    b.txt

# sort 排序檔案
cat files.txt|uniq|grep txt|sort
    a.txt
    b.txt
    d.txt

6.使用者和檔案許可權

# 檢視使用者許可權命令(下面兩個命令都可以)
ls -l 資料夾/檔案
ll 資料夾/檔案

Linux系統是一個多使用者多工的分時作業系統,任何一個要使用系統資源得使用者,都必須首先向系統管理員申請一個賬號,然後以這個賬號的身份進入系統。

使用者的賬號一方面可以幫助系統管理員對使用系統的使用者進行跟蹤,並控制他們對系統資源的訪問;另一方面也可以幫助使用者組織檔案,併為使用者提供安全性保護。

實現使用者賬號的管理,要完成的工作主要有如下幾個方面:

  • 使用者賬號的新增、刪除與修改。
  • 使用者口令的管理。
  • 使用者組的管理。

Linux系統使用者組的管理:

每個使用者都有一個使用者組,系統可以對一個使用者組中的所有使用者進行集中管理。不同Linux 系統對使用者組的規定有所不同,如Linux下的使用者屬於與它同名的使用者組,這個使用者組在建立使用者時同時建立。

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

附註:上面 - 是指檔案的型別(可以是file、sym link、directory型別),1 是代表應用連線的數目(link number)、第一個peter是指所屬使用者、第二個peter是指所屬的使用者組、0 是代表檔案大小、時間 是指最後修改時間。

附註:r w x對於檔案和資料夾含義還不一樣。

# 1. r (r對於資料夾來說可以讀取資料夾內容,對於檔案就是檢視檔案內容)
ls mydir            (檔案)
cat file            (資料夾)

# 2. w (w對於檔案是可以編輯檔案內容,w對於資料夾是可以建立/刪除重新命名資料夾裡面的檔案)
edit file                        (檔案)
create/delete/rename files in it (資料夾,w是隻能對資料夾內的檔案有相關操作)

# 3. x (x對於檔案是指可以執行該檔案,對於資料夾是可以cd進該目錄)
. /a.sh         (檔案)
cd mydir        (資料夾)

修改許可權chmod:

chmod 666 a.txt

另一種方式

chmod [-cfvR] [--help] [--version] mode file...

引數說明:

  • -c 若該檔案許可權確實已經更改,才顯示其更改動作
  • -f 若該檔案許可權無法被更改也不要顯示錯誤訊息
  • -v 顯示許可權變更的詳細資料
  • -R 對目前目錄下的所有檔案和子目錄進行相同的許可權變更(即以遞迴的方式逐個變更)
  • –help 顯示輔助說明
  • –version 顯示版本

mode:許可權設定字串,格式如下:

[ugoa...] [[+-=] [rwxX]...] [,...]]

其中:

  • u表示該檔案的擁有者,g表示與該檔案的擁有者屬於同一個群體(group)者,o表示其他以為的人,a表示這三者皆是。
  • +表示增加許可權,-表示取消許可權,=表示唯一設定許可權。
  • r表示可讀取,w表示可寫入,x表示可執行,X表示只有當該檔案是個子目錄或者該檔案已經被設定過為可執行。

    例項:

將檔案file1.txt設為所有人皆可讀取:

chmod ugo+r file1.txt
# 或者
chmo a+r file1.txt

將檔案file1.txt與file.txt設為該檔案擁有者,於其所屬同一個群體者可寫入,但其他以為所有的人則不可寫入:

chmod ug+w,o-w file1.txt file2.txt

將ex1.py 設定為只有該檔案擁有者可以執行:

chmod u+x ex1.py

將目前目錄下的所有檔案與子目錄設為任何人可讀取:

chmod -R a+r *

7.程式

Linux ps命令用於顯示當前程式(process)的狀態。

ps [options] [--help]

引數:

  • -A 列出所有的行程
  • -w 顯示加寬可以顯示較多的資訊
  • -au 顯示較詳細的諮詢
  • -aux 顯示所有包含其他使用者的行程
# aux輸出格式:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
  • USER 行程擁有者
  • PID pid
  • %CPU 佔用的CPU使用率
  • %MEM 佔用的記憶體大小
  • VSZ 佔用的虛擬記憶體大小
  • RSS 佔用的記憶體大小
  • TTY 終端的次要裝置號碼
  • STAT 該行程的狀態(D、R、S、T、Z、W、<、N、L)
  • START 行程開始時間
  • TIME 執行的時間
  • COMMAND 所執行的指令

例項:

# 1.顯示程式資訊
ps -A

# 2.顯示root程式使用者資訊
ps -u root

# 3.顯示所有命令,連帶命令列
ps -ef

結束程式:

查出PID之後,就可以使用kill pid就可以結束對應程式。

後臺執行:

fg、bg、jobs、&、ctrl+z都是根系統任務有關的。

# 1.& 這個放在一個命令的最後,可以把這個命令放到後臺執行
firefox &

# 2.crtl + z 可以將一個正在前臺執行的命令放到後臺,並且暫停
ctrl + z

# 3.jobs 檢視當前有多少在後臺執行的命令

# 4.bg 將一個在後臺暫停的命令,變成繼續執行,如果後臺有多個命令,可以用bg %jobnumber 將選中的命令調出,%jobnumber是通過jobs命令查到的後臺正在執行的命令的序號(不是pid)

# 5.fg 將後臺中的命令調至前臺繼續執行,如果後臺有多個命令,可以用fg %jobnumber將選中的命令調出,%jobnumber是通過jobs命令查到的後臺正在執行的命令的序號(不是pid)

Linux top命令:

Linux top命令用於實時顯示process的動態。

top - [d/q/c/S/s/i/n/b]
  • d 改變顯示的更新速度,或是在交談式指令列(interactive command)按s
  • q 沒有任何延遲的顯示速度,如果使用者是有superuser的許可權,則top將會以最高的優先序執行
  • c 切換顯示模式
  • s 安全模式
  • i 不顯示任何閒置或者無用的行程
  • n 更新的次數,完成後將會退出top
  • b 批次檔模式,搭配”n”引數一起使用,可以用來將top的結果輸出到檔案內

例項:

# 顯示程式資訊
top

# 顯示完整命令
top -c

# 以批處理模式顯示程式資訊
top -b

# 以累積模式顯示程式資訊
top -S

# 設定資訊更新次數(表示更新兩次後終止更新顯示)
top -n 2

# 設定資訊更新時間(表示更新週期為3秒)
top -d 2

# 顯示指定的程式資訊(顯示程式號為139的程式資訊,CPU、記憶體佔用率等)
top -p 139

# 將更新顯示二次的結果輸入到名稱為top.log的檔案裡
top -n 2 -b < top.log

附註:終端裡面的複製黏貼是Ctrl+Shift+c和Ctrl+Shift+v。

8.查詢

1.locate 查詢檔案的命令是從資料庫中查詢的,所以,剛剛建立的檔案需要執行一下updatedb命令才能及時將對應的檔案資訊寫入到資料庫中,否則系統會根據預設的時間來執行的(一般是一天一次)。

locate 用於查詢系統中所有路徑中包含對應的字樣的檔案,注意,他也支援正規表示式,通過檔名查詢檔案。

locate demo
# 使用正規表示式
locate --regexp 正規表示式

2.find 在目錄層次結構中搜尋檔案

# 檢視目錄內所有檔案
find .

# 檢視.txt結尾的檔案
find .|grep .txt

# 檔案型別
find -type f

# 目錄型別
find -type d

# exec執行後續命令
find . -type f -exec ls -l '{}' ';' #找到的檔案,通過-exec引數直接執行ls命令
find . -type f -exec grep hello '{}' ';'  #-exec直接執行grep 查詢有hello內容的檔案

find . -type f -exec grep hello '{}' ';' -print #列印出查詢出的具體的檔名
find . -type f -exec grep -n hello '{}' ';' -print  #列印出查詢出的檔案出現的行數
find . -type f -exec grep -ni hello '{}' ';' -print  #不區分大小寫的查詢

3.grep 過濾字串 ,主要用於字串查詢

find .|grep .txt # find之後,再使用grep過濾,尋找.txt的檔案

9.網路操作

ssh和rsync的使用。

ssh(遠端操作工具)

rsync(資料傳輸工具)

10.安裝軟體

三種方式:手動安裝、deb包、從apt-get倉庫安裝。

deb包包括程式本身、配置檔案、安裝位置和依賴關係。

11.shell指令碼程式設計

Shell程式設計:

指定解析器:(指定用bash去解析下面的語句,也可以指定為ruby/python)
#! /usr/bin/env bash

語句即命令:(在terminal就是命令,在指令碼里面就是語句)

say_hello(){
    echo "hello" 
}

位置引數:

執行指令碼:$ peter.sh a.txt b.txt
$#:代表一共有幾個引數,這裡為2
$0:代表程式名,即peter.sh
$1:代表第一個引數,即a.txt
$2:代表第二個引數,即b.txt

指令碼不在當前shell執行:

在shell中執行指令碼,並不是在當前shell中執行,而是新開一個shell執行。如果指定在當前shell中執行指令碼,用source命令:source peter.sh。

這裡寫圖片描述

迴圈控制:

重新命名指定目錄下檔案為檔名.txt
rename指令碼:
#!/usr/bin/env bash

cd $1
echo I am in `pwd`

for file in `ls`
do
    mv $file $file.txt 
done
執行指令碼:./rename.sh mydir/

遠端執行:

ssh -t 登入資訊 執行語句
例如:ssh -t peter@happycasts.net 'touch a.txt'

確定執行:

echo -n "Want to sync? (y/n):"
read AAA
if [ "${AAA:-y}" = "y" ];then
    xxx
else
    echo Nothing done, bye.
fi

其他語言指令碼:

相關文章