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

筆者使用的是 AliYun 服務器 ECS,鏡像選擇的是 Ubuntu,Ubuntu的詳細版本信息是:Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-91-generic x86_64),如何購買雲服務器不在本文討論範圍內,若是隻是學習,那你徹底可使用 virtualbox 安裝 Ubuntu。node

# 鏈接服務器
$ ssh <username>@<hostname>
# 更新系統源
$ apt update
# 升級系統源
$ apt upgrade
複製代碼

必備環境及應用

Git

# 安裝 git
$ apt install git
複製代碼

命令行配置

# 一、初始化設置
$ git config --global user.name 'youngjuning'
$ git config --global user.email 'youngjuning@aliyun.com'
# 二、將 `color.ui` 設置爲 `auto` 可讓命令的輸出擁有更高的可讀性。
$ git config --global color.ui auto
# 三、git 記住用戶名和密碼
$ git config --global credential.helper store
# 四、core.autocrlf
$ git config --global core.autocrlf input
複製代碼

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

Java

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

Node

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

$ 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 命令使之當即生效github

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/linuxshell

  • 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)express

    • -a-all:顯示目錄中個別文件的大小。
    • -h--human-readable:以K,M,G爲單位,提升信息的可讀性。
    • -s--summarize:僅顯示總計,只列出最後加總的值。
  • cat -N:鏈接多個文件並打印到標準輸出。(concatenate)npm

  • less -N

    • 空格鍵:前進一頁(一個屏幕)
    • b鍵:後退一頁(一個屏幕)
    • d鍵:前進半頁(半個屏幕)
    • u鍵:後退半頁(半個屏幕)
    • 回車鍵/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:用來變動文件或目錄的權限

    一共有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
複製代碼

htop

$ apt install htop -y
複製代碼

管理先後臺進程

& 符號:後臺運行進程

  • 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

複製代碼

每個月一、十、22日的4 : 45重啓smb

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

複製代碼

每週6、週日的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/
複製代碼

聯繫做者

做者微信 知識星球 讚揚做者
相關文章
相關標籤/搜索