寫給前端工程師的Linux實戰教程【持續更新】

俊寧發表於2020-03-30

筆者使用的是 AliYun 伺服器 ECS,映象選擇的是 Ubuntu,Ubuntu的詳細版本資訊是:Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-91-generic x86_64),如何購買雲伺服器不在本文討論範圍內,如果只是學習,那你完全可以使用 virtualbox 安裝 Ubuntu。

# 連線伺服器
$ ssh <username>@<hostname>
# 更新系統源
$ apt update
# 升級系統源
$ apt upgrade
複製程式碼

必備環境及應用

Git

# 安裝 git
$ apt install git
複製程式碼

命令列配置

# 1、初始化設定
$ git config --global user.name 'youngjuning'
$ git config --global user.email 'youngjuning@aliyun.com'
# 2、將 `color.ui` 設定為 `auto` 可以讓命令的輸出擁有更高的可讀性。
$ git config --global color.ui auto
# 3、git 記住使用者名稱和密碼
$ git config --global credential.helper store
# 4、core.autocrlf
$ git config --global core.autocrlf input
複製程式碼

Linux或Mac系統使用LF作為行結束符,因此你不想 Git 在簽出檔案時進行自動的轉換;當一個以 CRLF 為行結束符的檔案不小心被引入時你肯定想進行修正,把 core.autocrlf 設定成 input 來告訴 Git 在提交時把 CRLF 轉換成 LF,簽出時不轉換: 這樣會在 Windows 系統上的簽出檔案中保留 CRLF,會在 Mac 和 Linux 系統上,包括倉庫中保留 LF

Java

# 安裝 jre、jdk
$ apt install openjdk-8-jre-headless openjdk-8-jdk-headless
複製程式碼

Node

Node.js 是一個基於 Chrome V8 引擎的 JavaScript 執行時。我們使用 n 模組來維護 Node 的版本:

$ apt install nodejs npm build-essential
$ sudo npm install -g npm n
# 安裝最新版
$ sudo n latest
## 其他命令##
# 安裝指定版本
$ sudo n 10.16.0
# 安裝最新的穩定版
$ sudo n lts
# 刪除指定版本
$ n rm 12.10.0
# 除去當前版本以外的所有快取版本
$ n prune
複製程式碼

oh-my-zsh

修改 ~/.zshrc 之後都需要執行 source ~/.zshrc 命令使之立即生效

echo $SHLL 可以檢視當前 Shell

  • apt install zsh
  • git clone https://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh
  • `cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc
  • nano ~/.zshrc
  • 找到 ZSH_THEME="robbyrussell" ,把 robbyrussell 替換為 ys
  • 修改預設Shell:chsh -s /bin/zsh
  • 命令高亮
    • git clone https://github.com/zsh-users/zsh-syntax-highlighting.git "$HOME/.zsh-syntax-highlighting" --depth 1
    • echo "source $HOME/.zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" >> "$HOME/.zshrc"
  • 重新開啟命令列
  • echo "export EDITOR=nano" >> ~/.zshrc

vim

建議使用:github.com/amix/vimrc

$ git clone --depth=1 https://github.com/amix/vimrc.git ~/.vim_runtime
$ sh ~/.vim_runtime/install_awesome_vimrc.sh
$ echo "set number" >> ~/.vimrc
$ echo "set showcmd" >> ~/.vimrc
$ source ~/.vimrc
複製程式碼

目錄

  • /
    • bin:包含了會被所有使用者使用的可執行程式
    • boot:包含與 Linux 啟動密切相關的檔案
    • dev:包含外設。它裡面的子目錄,每一個對應一個外設
    • etc:包含系統的配置檔案
    • home:使用者的私人目錄
    • lib:包含被程式所呼叫的庫檔案,例如.so結尾的檔案
    • media:可移動的外設(USB盤,SD卡,DVD,光碟,等等)插入電腦時
    • mnt:用於臨時掛載一些裝置
    • opt:可選的應用軟體包,用於安裝多數第三方軟體和外掛
    • root:超級使用者 root 的家目錄
    • sbin:用於包含系統級的重要可執行程式
    • srv:包含一些網路服務啟動之後所需要取用的資料
    • tmp:普通使用者和程式存放臨時檔案的地方
    • usr:Unix Software Resource,安裝了大部分使用者要呼叫的程式
    • var:通常包含程式的資料,比如 log(日誌)檔案

常用命令

Linux命令搜尋引擎:git.io/linux

  • reboot:重新啟動正在執行的Linux作業系統
  • halt:關閉系統
  • shutdown:用來系統關機命令。shutdown指令可以關閉所有程式,並依使用者的需要,進行重新開機或關機的動作。
  • poweroff:直接執行即可關機
  • history:用於顯示歷史命令
  • whice:查詢並顯示給定命令的絕對路徑
  • pwd:顯示當前工作目錄。(Print Working Directory)
  • source:在當前Shell環境中從指定檔案讀取和執行命令,讓檔案修改立即生效。
  • updatedb:建立或更新locate命令所必需的資料庫檔案
  • uname -a:顯示全部Linux系統資訊
  • cat /proc/version:顯示Linux資訊
  • cat /etc/lsb-release:檢視發行版資訊
  • echo $SHELL:當前的shell
  • service <service> force-reload|reload|restart|start|status|stop
  • systemctl start|stop|restart|status|reload
    • enable:開機自動啟動服務
    • disable:開機不自動啟動服務
    • is-enabled:檢視服務是否開機自動啟動
    • list-unit-files --type=service:檢視各個級別下服務的啟動和禁用情況

檔案管理

檔案目錄操作

  • ls:顯示目錄內容列表

    • -a:列出所有檔案,包括以 "." 開頭的隱含檔案。
    • -l:除每個檔名外,增加顯示檔案型別、許可權、硬連結數、所有者名、組名、大小(byte)及時間資訊(如未指明是其它時間即指修改時間),可以用 ll 代替
  • du:顯示每個檔案和目錄的磁碟使用空間(Disk Usage)

    • -a-all:顯示目錄中個別檔案的大小。
    • -h--human-readable:以K,M,G為單位,提高資訊的可讀性。
    • -s--summarize:僅顯示總計,只列出最後加總的值。
  • cat -N:連線多個檔案並列印到標準輸出。(concatenate)

  • less -N

    • 空格鍵:前進一頁(一個螢幕)
    • b鍵:後退一頁(一個螢幕)
    • d鍵:前進半頁(半個螢幕)
    • u鍵:後退半頁(半個螢幕)
    • Enter鍵/e鍵/下箭頭:前進一行
    • y鍵/上箭頭:後退一行
    • q鍵:停止讀取檔案,中止 less 命令
    • =鍵:顯示你在檔案中的什麼位置
    • /鍵:進入搜尋模式
      • n鍵:跳轉到下一個匹配項
      • shift+n:跳轉到上一個匹配項
  • head:顯示檔案的開頭部分

  • tail:在螢幕上顯示指定檔案的末尾若干行

    • -f:顯示檔案最新追加的內容。
    • -s<秒數>:與-f選項連用,指定監視檔案變化時間隔的秒數,預設1秒
  • touch:建立新的空檔案

  • mkdir:用來建立目錄

    • -p--parents:若所要建立目錄的上層目錄目前尚未建立,則會一併建立上層目錄
  • cp:將原始檔或目錄複製到目標檔案或目錄中

    • -r-R:遞迴處理,將指定目錄下的所有檔案與子目錄一併處理,recursive
  • mv:用來對檔案或目錄重新命名

  • rm:用於刪除給定的檔案和目錄

    • -r-R:遞迴處理,將指定目錄下的所有檔案與子目錄一併處理,recursive
    • -f:強制刪除檔案或目錄
  • ln:用來為檔案建立連結

    • 硬連結缺陷:一般情況下,只能建立指向檔案的硬連結,不能建立指向目錄的
    • 硬連結指的是使用了同一個inode號,但是檔名不一樣
    • ls -i:顯示inode
    • -s, --symbolic:對原始檔建立符號連結,而非硬連結
  • locate:比 find 好用的檔案查詢工具,需要配合 updatedb 使用

  • find:在指定目錄下查詢檔案

    find [何處] <何物> [做什麼]

    • -name <範本樣式>:指定字串作為尋找檔案或目錄的範本樣式

    • -size <檔案大小>:查詢符合指定的檔案大小的檔案

    • -type <檔案型別>:只尋找符合指定的檔案型別的檔案;

      • f 普通檔案
      • l 符號連線
      • d 目錄
      • c 字元裝置
      • b 塊裝置
      • s 套接字
      • p Fifo
    • -atime <24小時數>:查詢在指定時間曾被存取過的檔案或目錄,單位以24小時計算;

    • -exec <執行指令>:假設find指令的回傳值為True,就執行該指令

      find . -name *.txt -exec chmod 600 {} \;

      可以換成-ok,ok 會讓你確認操作

許可權管理

  • sudo su:切換 root 身份,substitute do

  • useradd -m:建立的新的系統使用者自動建立使用者的家目錄

  • passwd:用於讓使用者可以更改自己的密碼

  • `userdel -r:用於刪除給定的使用者以及與使用者相關的檔案

  • users:顯示當前登入系統的所有使用者

  • usermod:用於修改使用者的基本資訊

    • -l:對使用者重新命名。/home 中的使用者家目錄名不改變,需要手動修改
    • -g:修改使用者所在群組
    • -G:將使用者新增到多個群組,多個群組用,分割
    • -aG-ag:不離開原來的群組進入新的群組
  • groupadd:用於建立一個新的工作組

  • groups:用來列印指定使用者所屬的工作組

  • chown:用來變更檔案或目錄的擁有者或所屬群組

    chown <username>[:gruop] <file|dir>

    • -R:遞迴處理,將指定目錄下的所有檔案及子目錄一併處理
  • chgrp:用來變更檔案或目錄的所屬群組

  • chmod:用來變更檔案或目錄的許可權

    寫給前端工程師的Linux實戰教程【持續更新】

    一共有10位,第1位代表檔案型別,第2-4位表示所有者的讀、寫和執行許可權,第5-7位表示同組使用者的讀、寫和執行許可權,第8-10位表示其他使用者的讀、寫和執行許可權。如果沒有許可權用-佔位。如果開啟 SELinux,則第11位會多一個.

    • 檔案型別
      • d:英語 directory 的縮寫,表示目錄
      • l:英文 link 的縮寫,表示連結
      • -:檔案
    • r:英語 read 的縮寫,表示
    • w:英文 write 的縮寫,表示
    • x:英語 execute 的縮寫,表示執行/執行。可以執行這個檔案
    • .:SELinux 的安全標籤,如果第11位有.,表示啟用了 SELinux
    • 用數字來分配許可權

      • 沒有許可權:0
      • 執行許可權:1
      • 寫許可權:2
      • 寫執行許可權:3
      • 讀許可權:4
      • 讀執行許可權:5
      • 讀寫許可權:6
      • 讀寫執行許可權:7
    • 用字母來分配許可權

      • u:user 的縮寫,是英語使用者的意思。表示所有者
      • g:group的縮寫,是英語群組的意思。表示群組使用者
      • o:other的縮寫,是英語其他的意思。表示其他使用者
      • a:all的縮寫,是英語所有的意思。表示所有使用者
      • +:加號,表示新增許可權
      • -:減號,表示去除許可權
      • =:等號,表示分配許可權

      chmod u+rx file:檔案 file 的所有者增加讀和執行的許可權

      chmod g+r file:檔案 file 的群組其他使用者增加讀的許可權

      chmod o-r file:檔案 file 的其他使用者移除讀的許可權

      chmod g+r o-r file:檔案 file 的群組其他使用者增加讀的許可權,其他使用者移除讀的許可權

      chmod go-r file:檔案 file 的群組其他使用者和其他使用者均移除讀的許可權

      chmod +x file:檔案 file 的所有使用者增加執行的許可權

      chmod u=rwx,g=r,0=- file:檔案 file 的所有者分配讀,寫和執行的許可權;群組其他使用者分配讀的許可權,不能寫或執行;其他使用者沒有任何許可權

正規表示式和資料操作

grep: 篩選資料

grep (global search regular expression(RE) and print out the line,全面搜尋正規表示式並把行列印出來)是一種強大的文字搜尋工具,它能使用正規表示式搜尋文字,並把匹配的行列印出來。用於過濾/搜尋的特定字元。可使用正規表示式能多種命令配合使用,使用上十分靈活。

  • -i --ignore-case:忽略字元大小寫的差別。
  • -n --line-number:在顯示符合範本樣式的那一列之前,標示出該列的編號。
  • -v --revert-match:反轉查詢。
  • -R/-r --recursive:在所有子目錄和子檔案中查詢,可以用 rgrep 替代
  • -E --extended-regexp:將範本樣式為延伸的普通表示法來使用,意味著使用能使用擴充套件正規表示式。可以用 egrep 代替
    • grep -E ^p /etc/profile
    • grep -E [at] /etc/profile
    • grep -E [0-4] /etc/profile
    • grep -E [a-zA-Z] /etc/profile

規則表示式

^    # 錨定行的開始 如:'^grep'匹配所有以grep開頭的行。
$    # 錨定行的結束 如:'grep$' 匹配所有以grep結尾的行。
.    # 匹配一個非換行符的字元 如:'gr.p'匹配gr後接一個任意字元,然後是p。
*    # 匹配零個或多個先前字元 如:'*grep'匹配所有一個或多個空格後緊跟grep的行。
.*   # 一起用代表任意字元。
[]   # 匹配一個指定範圍內的字元,如'[Gg]rep'匹配Grep和grep。
[^]  # 匹配一個不在指定範圍內的字元,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一個字母開頭,緊跟rep的行。
\(..\)  # 標記匹配字元,如'\(love\)',love被標記為1。
\<      # 錨定單詞的開始,如:'\<grep'匹配包含以grep開頭的單詞的行。
\>      # 錨定單詞的結束,如'grep\>'匹配包含以grep結尾的單詞的行。
x\{m\}  # 重複字元x,m次,如:'0\{5\}'匹配包含5個o的行。
x\{m,\}   # 重複字元x,至少m次,如:'o\{5,\}'匹配至少有5個o的行。
x\{m,n\}  # 重複字元x,至少m次,不多於n次,如:'o\{5,10\}'匹配5--10個o的行。
\w    # 匹配文字和數字字元,也就是[A-Za-z0-9],如:'G\w*p'匹配以G後跟零個或多個文字或數字字元,然後是p。
\W    # \w的反置形式,匹配一個或多個非單詞字元,如點號句號等。
\b    # 單詞鎖定符,如: '\bgrep\b'只匹配grep。
複製程式碼

sort 檔案排序

對文字檔案中所有行進行排序。

  • -o, --output=FILE:將結果寫入FILE而不是標準輸出。sort -o name.txt name_sorted.txt
  • -r, --reverse:將結果倒序排列。
  • -R--random-sort 隨機排序,但分組相同的行。
  • -n, --numeric-sort:根據數字排序。

主要用途

  • 將所有輸入檔案的內容排序後並輸出。
  • 當沒有檔案或檔案為-時,讀取標準輸入。

wc 檔案統計

統計檔案的行數、字數、位元組數

wc命令 統計指定檔案中的位元組數、字數、行數,並將統計結果顯示輸出。利用wc指令我們可以計算檔案的Byte數、字數或是列數,若不指定檔名稱,或是所給予的檔名為“-”,則wc指令會從標準輸入裝置讀取資料。wc同時也給出所指定檔案的總統計數。

  • -c: 統計位元組數,或--bytes--chars:只顯示Bytes數
  • -l:統計行數,或--lines:只顯示列數
  • -m:統計字元數。這個標誌不能與 -c 標誌一起使用
  • -w:統計字數,或--words:只顯示字數。一個字被定義為由空白、跳格或換行字元分隔的字串
  • -L:列印最長行的長度

uniq: 刪除檔案中的重複內容

顯示或忽略重複的行。uniq 命令有點”呆“,只能將連續的重複行變為一行

  • -c, --count:在每行開頭增加重複次數
  • -d, --repeated:只顯示重複行的值

主要用途

  • 將輸入檔案(或標準輸入)中鄰近的重複行寫入到輸出檔案(或標準輸出)中。
  • 當沒有選項時,鄰近的重複行將合併為一個。

cut: 剪下檔案的一部分內容

連線檔案並列印到標準輸出裝置上

  • -c:僅顯示行中指定範圍的字元,cut -c 2-4 file
  • -d:指定欄位的分隔符,預設的欄位分隔符為“TAB”。
  • -f:顯示指定欄位的內容。cut -d , -f 1,3 notes.csvcut -d , -f 2- notes.csv

輸出重定向

黑洞檔案 /dev/null,此檔案具有唯一的屬性,它總是空的。它能使傳送到 /dev/null 的任何資料作廢

> 重定向到檔案

  • 如果此檔案不存在,則新建一個檔案
  • 如果此檔案已經存在,那就會把檔案內容覆蓋掉,而且不會徵求使用者同意

>> 重定向到檔案末尾

>>的作用與>是類似的,不過它不會像>那麼危險。它會將重定向的內容寫入到檔案末尾,起到追加的作用。如果檔案不存在,則建立檔案

2>2>>重定向到標準錯誤輸出

$ cat not_exist_file.csv > results.txt 2> errors.log
複製程式碼

2>&1 組合符合

  • 將標準錯誤輸出重定向到與標準輸出相同的地方
  • 覆蓋:cat not_exist_file_csv > results.txt 2>&1
  • 末尾追加:cat not_exist_file_csv >> results.txt 2>&1

stdin、stdout、stderr

  • 從鍵盤向終端輸入資料,這是標準輸入,也就是 stdin
  • 終端接收鍵盤輸入的命令,會產生兩種輸出
    • 標準輸出:stdout。指終端輸出的資訊(不包括錯誤資訊)
    • 標準錯誤輸出:stderr。指終端輸出的錯誤資訊

輸入重定向

< 從檔案中讀取

  • cat notes.csv

    • cat 命令接受的輸入是 notes.csv 這個檔名
    • 那麼它要先開啟 notes.csv 檔案
    • 然後列印出檔案內容
  • cat < notes.csv

    • cat 命令接受的輸入直接是 notes.csv 這個檔案的內容
    • cat 命令只負責將其內容列印
    • 開啟檔案並將檔案內容傳遞給 cat 命令的工作則交給終端完成

<< 從鍵盤讀取

  • << 符號的作用是將鍵盤的輸入重定向為某個命令的輸入
  • sort -n << END

| 管道符號

將一個命令的輸出作為另一個命令的輸入

  • 傳說中的 ”管道符號“:|
  • |符號既然被稱為”管道符“,其作用就是”建立命令管道“
  • 管道也算是重定向流的一種
  • cut -d , -f 1 notes.csv | sort > sorted_names.txt
  • du -h | sort -n | head
  • sudo grep log -Ir /var/log | cut -d : -f 1 | sort | uniq
    • -I:排除二進位制檔案
    • -r:用於遞迴遍歷

程式和系統監測

  • w:顯示目前登入系統的使用者資訊

  • uptime:檢視Linux系統負載資訊

    能夠列印系統總共執行了多長時間和系統的平均負載。uptime命令可以顯示的資訊顯示依次為:現在時間、系統已經執行了多長時間、目前有多少登陸使用者、系統在過去的1分鐘、5分鐘和15分鐘內的平均負載。

  • tload:顯示系統負載狀況

    以圖形化的方式輸出當前系統的平均負載到指定的終端。假設不給予終端機編號,則會在執行tload指令的終端機顯示負載情形

  • who:顯示目前登入系統的使用者資訊

    顯示目前登入系統的使用者資訊。執行who命令可得知目前有那些使用者登入系統,單獨執行who命令會列出登入帳號,使用的終端機,登入時間以及從何處登入或正在使用哪個X顯示器。

  • ps:報告當前系統的程式狀態 process status

    • 輸出
      • UID:執行程式的使用者
      • PID:程式號,process identifier,每個程式有唯一的程式號
      • PPID:程式的父程式號,parent process ID
      • TTY:程式執行所在的終端
      • TIME:程式執行的時間
      • CMD:產生這個程式的程式名
    • 實踐
      • -ef:列出所有使用者在所有終端的所有程式,可以配合管道方便檢視 ps -ef | less
      • -efH:按照喬木狀列出程式
      • -u:列出此使用者執行的程式
      • -aux:通過CPU和記憶體使用來過濾程式
        • ps -aux --sort -pcpu | less:根據CPU使用率降序排列
        • ps -aux --sort -pmem | less:根據記憶體使用率降序排列
      • ps -axjfpstree:以樹形結構顯示程式

    用於報告當前系統的程式狀態。可以搭配kill指令隨時中斷、刪除不必要的程式。ps命令是最基本同時也是非常強大的程式檢視命令,使用該命令可以確定有哪些程式正在執行和執行的狀態、程式是否結束、程式有沒有僵死、哪些程式佔用了過多的資源等等,總之大部分資訊都是可以通過執行該命令得到的。

  • top:顯示或管理執行中的程式

    • q鍵:退出
    • h鍵:顯示幫助文件
    • B鍵:加粗某些資訊
    • f/F鍵:在程式列表中新增或刪除某些列
    • u鍵:依照使用者來過濾顯示
    • k鍵:結束某個程式
    • s鍵:改變重新整理頁面的時間,預設地頁面每個3秒重新整理一次
  • kill:根據程式號結束一個程式

    • -9:強制結束程式
  • killall:根據程式名結束所有程式,可以結合find

glances

$ apt install glances -y
複製程式碼
寫給前端工程師的Linux實戰教程【持續更新】

htop

$ apt install htop -y
複製程式碼
寫給前端工程師的Linux實戰教程【持續更新】

管理前後臺程式

寫給前端工程師的Linux實戰教程【持續更新】

& 符號:後臺執行程式

  • cp file.txt file-copy.txt &
  • find / -name "*log" > output_find 2>&1 &

nohup: 使程式與終端分離

無論是否將 nohup 命令的輸出重定向到終端,輸出都將附加到當前目錄的 nohup.out 檔案中。hangup,掛起

如果當前目錄的 nohup.out 檔案不可寫,輸出重定向到$HOME/nohup.out檔案中。如果沒有檔案能建立或開啟以用於追加,那麼 command 引數指定的命令不可呼叫。如果標準錯誤是一個終端,那麼把指定的命令寫給標準錯誤的所有輸出作為標準輸出重定向到相同的檔案描述符。

Ctrl + Z、bg 程式轉為後臺執行

jobs:顯示後臺程式狀態

fg:使程式轉為前臺執行

檔案的解壓和壓縮

  • tar:Linux下的歸檔使用工具,用來打包和備份
    • -cvf:建立一個 tar 歸檔,tar -cvf a.tar a/
      • c:create 的縮寫,表示建立
      • v:verbose 的縮寫,表示冗餘。會顯示操作細節
      • f:file 的縮寫,表示檔案,指定歸檔檔案
    • -tf:顯示歸檔裡的內容,並不解開歸
    • -xvf:解開歸檔
      • x:extract 的縮寫,表示”提取,取出“
    • -zcvf:歸檔,然後用 gzip 來壓縮歸檔
    • -zxvf:解gzip壓縮,然後解開歸檔
    • -jcvf:歸檔,然後用 bzip2 來壓縮歸檔
    • -jxvf:解bzip2壓縮,然後解開歸檔
  • zcatzmorezless
  • bzcatbzmorebzless
  • unzipunrarapt install zip

定時和延時執行

date:顯示或設定系統時間與日期

  • date +"%H":11
  • date +"%H:%M:%S":11:15:51
  • date +"%Y-%m-%d":2020-03-29
  • date +"%Y-%m-%d %H:%M:%S":2020-03-29 11:15:51
  • 修改系統時間:date 10121430

at:在指定時間執行一個任務

at命令 用於在指定時間執行命令。at允許使用一套相當複雜的指定時間的方法。它能夠接受在當天的hh:mm(小時:分鐘)式的時間指定。假如該時間已過去,那麼就放在第二天執行。當然也能夠使用midnight(深夜),noon(中午),teatime(飲茶時間,一般是下午4點)等比較模糊的詞語來指定時間。使用者還能夠採用12小時計時制,即在時間後面加上AM(上午)或PM(下午)來說明是上午還是下午。 也能夠指定命令執行的具體日期,指定格式為month day(月 日)mm/dd/yy(月/日/年)dd.mm.yy(日.月.年)。指定的日期必須跟在指定時間的後面。

上面介紹的都是絕對計時法,其實還能夠使用相對計時法,這對於安排不久就要執行的命令是很有好處的。指定格式為:now + count time-unitsnow就是當前時間,time-units 是時間單位,這裡能夠是minutes(分鐘)、hours(小時)、days(天)、weeks(星期)。count是時間的數量,究竟是幾天,還是幾小時,等等。 更有一種計時方法就是直接使用today(今天)、tomorrow(明天)來指定完成命令的時間。

  • at 22:10,會提示讓輸入命令,以<EOT>結束輸入
  • at 22:10 tomorrow:明天 22:10 執行
  • at 22:10 03/30/2020:在 2020年3月20號22:10執行
  • at now +10 minutes:10分鐘之後執行

atq:列出當前使用者的at任務列表

  • q是英語 queue 的首字母,表示“佇列”

atq命令 顯示系統中待執行的任務列表,也就是列出當前使用者的at任務列表。

atrm:刪除待執行任務佇列中的指定任務

atrm命令 用於刪除待執行任務佇列中的指定任務。

sleep:將目前動作延遲一段時間

  • touch file.txt;sleep 10;rm file.txt

&&||;

  • &&&& 號前的命令執行成功,才會執行後面的命令
  • |||| 號前的命令執行失敗,才會執行後面的命令
  • ;:不論分號前的命令執行成功與否,都執行分號後的命令

crontab 提交和管理使用者的需要週期性執行的任務

crontab命令 被用來提交和管理使用者的需要週期性執行的任務,與windows下的計劃任務類似,當安裝完成作業系統後,預設會安裝此服務工具,並且會自動啟動crond程式,crond程式每分鐘會定期檢查是否有要執行的任務,如果有要執行的任務,則自動執行該任務。

  • -e:編輯該使用者的計時器設定;
  • -l:列出該使用者的計時器設定;
  • -r:刪除該使用者的計時器設定;
  • -u <使用者名稱稱>:指定要設定計時器的使用者名稱稱。

m h dom mon dow command

  • 順序口訣:分 時 日 月 周

  • m:minute 的縮寫,表示”分鐘“(0~59)

  • h:hour 的縮寫,表示“小時”(0~23)

  • dom:day of month 的縮寫,表示“一個月的哪一天”(0~31)

  • mon:month 的縮寫,表示”月份“(1~12)

  • dow:day of week 的縮寫,表示“星期幾”(0~6,星期日是0)

  • command:英語“命令”的意思,表示需要定時執行的命令

特殊字元:

  • 星號(*):代表所有可能的值,例如month欄位如果是星號,則表示在滿足其它欄位的制約條件後每月都執行該命令操作。
  • 逗號(,):可以用逗號隔開的值指定一個列表範圍,例如,“1,2,5,7,8,9”
  • 中槓(-):可以用整數之間的中槓表示一個整數範圍,例如“2-6”表示“2,3,4,5,6”
  • 正斜線(/):可以用正斜線指定時間的間隔頻率,例如“0-23/2”表示每兩小時執行一次。同時正斜線可以和星號一起使用,例如*/10,如果用在minute欄位,表示每十分鐘執行一次。

例項

一定要換行,不換行不會生效的 重啟 cron 服務:systemctl cron.service restart

每1分鐘執行一次command

* * * * * command

複製程式碼

每小時的第3和第15分鐘執行

3,15 * * * * command

複製程式碼

在上午8點到11點的第3和第15分鐘執行

3,15 8-11 * * * command

複製程式碼

每隔兩天的上午8點到11點的第3和第15分鐘執行

3,15 8-11 */2 * * command

複製程式碼

每個星期一的上午8點到11點的第3和第15分鐘執行

3,15 8-11 * * 1 command

複製程式碼

每晚的21:30重啟smb

30 21 * * * /etc/init.d/smb restart

複製程式碼

每月1、10、22日的4 : 45重啟smb

45 4 1,10,22 * * /etc/init.d/smb restart

複製程式碼

每週六、週日的1:10重啟smb

10 1 * * 6,0 /etc/init.d/smb restart

複製程式碼

每天18 : 00至23 : 00之間每隔30分鐘重啟smb

*/30 18-23 * * * /etc/init.d/smb restart

複製程式碼

每星期六的晚上11:00 pm重啟smb

0 23 * * 6 /etc/init.d/smb restart

複製程式碼

每一小時重啟smb

* */1 * * * /etc/init.d/smb restart

複製程式碼

晚上11點到早上7點之間,每隔一小時重啟smb

* 23-7/1 * * * /etc/init.d/smb restart

複製程式碼

每月的4號與每週一到週三的11點重啟smb

0 11 4 * mon-wed /etc/init.d/smb restart

複製程式碼

一月一號的4點重啟smb

0 4 1 jan * /etc/init.d/smb restart

複製程式碼

每小時執行/etc/cron.hourly目錄內的指令碼

01 * * * * root run-parts /etc/cron.hourly

複製程式碼

SSH

  • 全域性 SSH 客戶端的配置:/etc/ssh/ssh_config
  • 使用者 SSH 客戶端的配置:~/.ssh/config
    • 如果 ~/.ssh 不存在,執行 ssh localhost
    • nano config 進行編輯
  • SSH 服務端的配置:/etc/ssh/sshd_config

服務端 config 檔案的常用配置引數

  • Port:sshd 服務埠號(預設是22)
  • PermitRootLogin:是否允許以 root 使用者身份登入(預設是可以)
  • PasswordAuthentication:是否允許密碼驗證登入(預設是可以)
  • PubkeyAuthentication:是否允許公鑰驗證登入(預設是可以)
  • PermitEmptyPasswords:是否允許空密碼登入(不安全。預設不可以)

客戶端 config 檔案的配置

$ nano ~/.ssh/config
複製程式碼
Host aliyun
  HostName 47.98.152.68
  Port 22
  User root
複製程式碼
$ ssh aliyun
複製程式碼

配置免密碼登入

  1. 在客戶機中生成金鑰對(公鑰和私鑰)

    ssh-keygen -t rsa -C "youngjuning@aliyun.com"

    • ~/.ssh/ 目錄下,會新生成兩個檔案

      • id_rsa:私鑰
      • id_rsa.pub:公鑰
  2. ssh-copy-id:把本地的 ssh 公鑰檔案安裝到遠端主機對應的賬戶下

    $ ssh-copy-id -i ~/.ssh/id_rsa.pub root@47.98.152.68
    複製程式碼

    ssh-copy-id命令 可以把本地主機的公鑰複製到遠端主機的authorized_keys檔案上,ssh-copy-id 命令也會給遠端主機的使用者主目錄(home)和~/.ssh, 和~/.ssh/authorized_keys設定合適的許可權。

    • -i:指定公鑰檔案

設定免密碼後仍想使用密碼登入:

$ ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no root@47.98.152.68
複製程式碼

測試Github是否正確配置免密碼登入:

ssh -T git@github.com

Linux 網路

wget:Linux系統下載檔案工具

wget命令 用來從指定的URL下載檔案。wget非常穩定,它在頻寬很窄的情況下和不穩定網路中有很強的適應性,如果是由於網路的原因下載失敗,wget會不斷的嘗試,直到整個檔案下載完畢。如果是伺服器打斷下載過程,它會再次聯到伺服器上從停止的地方繼續下載。這對從那些限定了連結時間的伺服器上下載大檔案非常有用。

wget支援HTTP,HTTPS和FTP協議,可以使用HTTP代理。所謂的自動下載是指,wget可以在使用者退出系統的之後在後臺執行。這意味這你可以登入系統,啟動一個wget下載任務,然後退出系統,wget將在後臺執行直到任務完成,相對於其它大部分瀏覽器在下載大量資料時需要使用者一直的參與,這省去了極大的麻煩。

用於從網路上下載資源,沒有指定目錄,下載資源回預設為當前目錄。wget雖然功能強大,但是使用起來還是比較簡單:

  1. 支援斷點下傳功能 這一點,也是網路螞蟻和FlashGet當年最大的賣點,現在,Wget也可以使用此功能,那些網路不是太好的使用者可以放心了;
  2. 同時支援FTP和HTTP下載方式 儘管現在大部分軟體可以使用HTTP方式下載,但是,有些時候,仍然需要使用FTP方式下載軟體;
  3. 支援代理伺服器 對安全強度很高的系統而言,一般不會將自己的系統直接暴露在網際網路上,所以,支援代理是下載軟體必須有的功能;
  4. 設定方便簡單 可能,習慣圖形介面的使用者已經不是太習慣命令列了,但是,命令列在設定上其實有更多的優點,最少,滑鼠可以少點很多次,也不要擔心是否錯點滑鼠;
  5. 程式小,完全免費 程式小可以考慮不計,因為現在的硬碟實在太大了;完全免費就不得不考慮了,即使網路上有很多所謂的免費軟體,但是,這些軟體的廣告卻不是我們喜歡的。

scp:加密的方式在本地主機和遠端主機之間複製檔案

scp命令 用於在Linux下進行遠端拷貝檔案的命令,和它類似的命令有cp,不過cp只是在本機進行拷貝不能跨伺服器,而且scp傳輸是加密的。可能會稍微影響一下速度。當你伺服器硬碟變為只讀read only system時,用scp可以幫你把檔案移出來。另外,scp還非常不佔資源,不會提高多少系統負荷,在這一點上,rsync就遠遠不及它了。雖然 rsync比scp會快一點,但當小檔案眾多的情況下,rsync會導致硬碟I/O非常高,而scp基本不影響系統正常使用。

$ scp file.txt root@192.168.2.195
複製程式碼

netstat -ntulp | grep 9001

檢視埠占用情況

rsync:遠端資料同步工具

rsync命令 是一個遠端資料同步工具,可通過LAN/WAN快速同步多臺主機間的檔案。rsync使用所謂的“rsync演算法”來使本地和遠端兩個主機之間的檔案達到同步,這個演算法只傳送兩個檔案的不同部分,而不是每次都整份傳送,因此速度相當快。 rsync是一個功能非常強大的工具,其命令也有很多功能特色選項,我們下面就對它的選項一一進行分析說明。

  • 預設地,rsync 在同步時並不會刪除目標目錄的檔案。例如,你的源目錄(被同步目錄)中刪除了一個檔案,但是用 rsync 同步時,它並不會刪除同步目錄中的相同檔案。rsync -arv --delete 可以刪除

用 rsync 備份到同一臺電腦的其他目錄:

$ rsync -arv Images/ backups
複製程式碼
  • -a:保留檔案的所有資訊,包括許可權,修改日期,等等。a 是 archive 的縮寫,是歸檔的意思
  • -r:遞迴呼叫。表示子目錄的所有檔案也都包括。r 是 recursive 的縮寫,是遞迴的意思
  • -v :冗餘模式。輸出詳細操作資訊。v 是 verbose 的縮寫,是冗餘的意思

用 rsync 備份到同步本地檔案到伺服器:

$ rsync -arvz --progress --delete ~/Desktop/blog root@47.98.152.68:/home/yangjunning/
複製程式碼

聯絡作者

作者微信 知識星球 讚賞作者
寫給前端工程師的Linux實戰教程【持續更新】 寫給前端工程師的Linux實戰教程【持續更新】 寫給前端工程師的Linux實戰教程【持續更新】

相關文章