一、實用命令
1、crontab(定時任務)
(1)基本概念
crontab 是用來管理定時任務的命令,
系統啟動后,將會自動呼叫 crontab,如果存在任務,則根據相關定義去執行,
(2)常用場景
系統周期性執行的作業,比如:系統資料備份,定期清理快取等,
個人定期執行的作業,比如:每隔幾分鐘檢查郵件服務器是否存在新郵件,
(3)語法規則
【語法:】 crontab [options] crontab [options] file 【options:】 -u <user> 指定某用戶的定時任務, -e 編輯當前用戶的任務,進入 vi 文字編輯器, -l 查看當前用戶的任務 -r 洗掉當前用戶的任務 【定時任務格式:】 f1 f2 f3 f4 f5 command 說明: f1 表示分鐘(0 - 59) f2 表示小時(0 - 23) f3 表示天數(1 - 31) f4 表示月數(1 - 12) f5 表示星期幾(0 - 6, 0 表示 星期天,1 表示星期一...) command 表示待執行的命令 即:(通過 cat /etc/crontab 可以查看) # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | .---- command to be executed # * * * * * command 注: f1 為 * 時,表示每分鐘執行,f2...f5 類似, f1 為 a-b 時,表示從第 a 分鐘到第 b 分鐘時間段內,每分鐘執行一次,f2...f5 類似, f1 為 */n 時,表示每隔 n 分鐘執行一次,f2...f5 類似, f1 為 a,b,c 時,表示第 a、b、c 分鐘執行一次,f2...f5 類似,
(4)相關命令
【查看 crontab:】 cat /etc/crontab 【編輯 crontab:】 crontab -e 注: 不同的用戶創建的任務,最終出現在 /var/spool/cron 下,檔案名為 用戶名, 比如:root 用戶創建的任務最終存盤在 /var/spool/cron/root 檔案中, 【查看 crontab:】 crontab -l cat /var/spool/cron/root # 查看 root 用戶的定時任務 【洗掉所有 crontab:】 crontab -r 【查看、啟動、重啟、停止 crontab 服務:】 service crond status service crond start/stop/restart 【查看日志:】 tail -f /var/log/cron
(5)舉例:
【每分鐘執行一次 echo:】 * * * * * echo 11 >> /root/test/text.txt 注: 若腳本中命令不生效,將命令換成 絕對路徑 試一下, 通過 which 可以查找 命令所在的 絕對路徑,比如: which echo 輸出為 /usr/bin/echo 替換絕對路徑,比如: * * * * * /usr/bin/echo 11 >> /root/test/text.txt 【每個月 1 號、15 號 執行一次 echo:】 0 0 1,15 * * echo 11 >> /root/test/text.txt
2、sh、source、exec(執行腳本)
(1)基本概念
【sh:】 使用 sh script.sh 執行腳本時,當前 shell 是父行程,生成一個子 shell 行程,在子 shell 中執行腳本, 腳本執行完畢,退出子 shell,回到當前 shell, ./script.sh 與 sh script.sh 等效 注: echo $$ # 輸出當前 shell 的行程號 【source:】 使用 source script.sh 方式,在當前背景關系中執行腳本,不會生成新的行程, 腳本執行完畢,回到當前 shell, . script.sh(. 與 script.sh 之間有一個空格) 與 source script.sh 等效, 【exec:】 使用 exec command 方式,一般用于腳本內部,會用 command 行程替換當前 shell 行程,并且保持 PID 不變, 執行完畢,直接退出,不回到之前的 shell 環境,
(2)問題一:sh、source 區別
【sh、source 區別:】
使用 sh 和 source 方式下,腳本執行完畢,都會回到之前的 shell 中,
通過 sh 執行腳本時,修改的背景關系(比如:環境變數)不會影響當前 shell,
通過 source 執行腳本時,修改的背景關系(比如:環境變數)會影響當前 shell,
(3)問題二:修改 PATH 變數,不重啟使其生效
【修改 PATH 變數,不重啟使其生效:】 Step1: 在 /etc/profile 檔案末尾追加 PATH 設定, 比如: echo 'export MAVEN_HOME=/usr/local/maven/apache-maven-3.6.1' >> /etc/profile echo 'export PATH=$MAVEN_HOME/bin:$PATH' >> /etc/profile Step2: 執行 source /etc/profile 使其生效
(4)問題三:在腳本中執行 source /etc/profile 不生效
【在腳本中執行 source /etc/profile 不生效:】 方式一: 可以直接使用 source 腳本名 直接去呼叫,不需要在腳本中寫 source /etc/profile 方式二: 在腳本執行 source /etc/profile 后,追加 exec 陳述句, 通過 exec bash -l 或者 exec /bin/bash -l 或者 exec $SHELL -l 去打開一個新行程, 注: exec 會導致 exec 之后的陳述句不執行,exec 一般放于腳本末尾,
3、jq(json 決議工具)
(1)基本概念
jq 是一款在使用命令列處理 JSON 資料的工具,可用于處理 標準輸入、管道、檔案 傳遞的 JSON 資料,經過一系列 過濾器、運算式 后,提取成需要的資料 并輸出到 標準輸出中,
(2)相關地址
jq 官網地址: https://stedolan.github.io/jq/
jq 檔案: https://github.com/stedolan/jq/wiki
jq 檔案: https://stedolan.github.io/jq/manual/
(3)安裝
【centos:】 yum install -y epel-release yum install -y jq 【其余方式參考官網提供方式:】 https://stedolan.github.io/jq/download/
(4)語法規則
【語法:】 jq [options] <jq filter> [file...] 【options: 】 -c 緊湊輸出(默認為 樹形結構,緊湊輸出將樹形結構轉為一行輸出) -r 輸出原始字串,不在結果上加雙引號 -R 讀取原始字串,在結果上加上雙引號 -C 字串著色 -M 字串不著色 --tab 使用 tab 替換縮進符 -s 將結果使用陣列保存 --arg a v 將變數 $a 設定為值 v 注: 對于待決議的資料,其所有的屬性名必須是以雙引號包括的字串,否則可能會決議失敗, 資料不存在時,回傳 null , 【jq filter -- 基本規則: 】 jq 根據語法規則決議 jq filter,并將其應用在 JSON 資料上,從而決議出想要的結果, . 是最基本的過濾器,僅用 . 作為過濾器時,表示對整個 JSON 資料的參考,結果是格式化輸出 JSON 資料, '' 單引號可以不使用,但是若組合了多個過濾器,需要使用單引號包裹, "" 雙引號用于包裹特殊字符,比如: ."key$" 或者 .["key$"] , 用于輸出多個過濾器結果,比如: .key1,.key2 表示過濾 key1 key2 的資料 | jq filter 支持串行化操作,一個復雜的 filter 可以由多個簡單的 filter 通過 管道符 "|" 連接組成,每個 filter 均以 前一個 filter 的結果作為輸入資料進行處理, .. 遞回輸出每個值, [] 將結果構造為一個陣列,比如: '[.key1,.key2]' {} 將結果構造為一個物件,比如: '{"result": .key1}', 比如: {"key1":{"key11":"value11","key12":"value12"}}, 可以通過 '.key1 | .key11' 去決議 key11 的值, echo '{"key1":{"key11":"value11","key12":"value12"}}' | jq '.key1 | .key11' 【jq filter -- 物件操作: 】 jq 使用類似于 '.key' 的方式過濾 JSON 物件,當資料不存在時,回傳 null, 過濾單個物件: '.key1' 等價于 .'["key1"]' 過濾多個物件 '.key1, .key2' 等價于 .'["key1", "key2"]' 過濾物件的物件: '.key1.key2' 等價于 '.key1 | .key2' 【jq filter -- 陣列操作: 】 jq 使用類似于 '.[index]' 的方式過濾 JSON 陣列, 過濾單個陣列元素: '.[index]' index 從 0 開始,正序輸出,若為負數,反序輸出(0 表示第一個元素, -1 表示最后一個元素), 過濾多個陣列元素: '.[index, index2]' 過濾所有陣列元素: '.[]' 過濾陣列某個范圍的資料: '.[startIndex:endIndex]' 包含 startIndex ,但不包含 endIndex
(5)舉例(簡單)
【vi test.json 編輯 json 資料】 { "key1": "value1", "key2": "value2" } 【cat test.json | jq 格式化輸出資料】 { "key1": "value1", "key2": "value2" } 【cat test.json | jq -c 輸出緊湊的資料】 {"key1":"value1","key2":"value2"} 【cat test.json | jq -R 輸出結果會加上雙引號】 "{" " \"key1\": \"value1\", \"key2\": \"value2\"" "}" 【cat test.json | jq -s 結果使用陣列形式保存】 [ { "key1": "value1", "key2": "value2" } ] 【cat test.json | jq --arg name jarry '{name: $name}' 將變數 $a 設定為值 v】 { "name": "jarry" }
(6)舉例(決議物件 Object)
【vi test.json 編輯 json 資料】 { "key1": { "key11": "value11", "key12": "value12" }, "key2": "value2" } 【cat test.json | jq .key1 獲取 key1 對應的 value】 { "key11": "value11", "key12": "value12" } 【cat test.json | jq .'["key1"]' 獲取 key1 對應的 value】 { "key11": "value11", "key12": "value12" } 【cat test.json | jq .key1,.key2 獲取 key1,key2 對應的 value】 { "key11": "value11", "key12": "value12" } "value2" 【cat test.json | jq .'["key1", "key2"]' 獲取 key1,key2 對應的 value】 { "key11": "value11", "key12": "value12" } "value2" 【cat test.json | jq .[] 獲取所有的 value】 { "key11": "value11", "key12": "value12" } "value2" 【cat test.json | jq .key1.key11 獲取 key11 對應的 value】 "value11" 【cat test.json | jq -r .key1.key11 獲取 key11 對應的 value】 value11 【cat test.json | jq keys 獲取所有 key 組成的陣列】 [ "key1", "key2" ] 【cat test.json | jq [.[]] 獲取所有的 value 組成的陣列】 [ { "key11": "value11", "key12": "value12" }, "value2" ]
(7)舉例(決議陣列 Array)
【vi test.json 編輯 json 資料】 [ { "key1": ["value1"], "key2": "value2" }, ["value3", "value4"] ] 【cat test.json | jq .[] 獲取陣列所有的元素】 { "key1": [ "value1" ], "key2": "value2" } [ "value3", "value4" ] 【cat test.json | jq .[0] 獲取陣列的第一個元素】 { "key1": [ "value1" ], "key2": "value2" } 【cat test.json | jq .[1] 獲取陣列的第二個元素】 [ "value3", "value4" ] 【cat test.json | jq .[0:2] 獲取陣列 第一個元素 到 第三個元素】 [ { "key1": [ "value1" ], "key2": "value2" }, [ "value3", "value4" ] ] 【cat test.json | jq .[0].key1 獲取 Object 物件的 value 值】 [ "value1" ] 【cat test.json | jq '.[0] | .key1' 獲取 Object 物件的 value 值】 [ "value1" ] 【cat test.json | jq .[0].key1,.[0].key2】 [ "value1" ] "value2" 【cat test.json | jq .[1][0] 獲取 陣列元素 】 "value3" 【cat test.json | jq '.[1] | .[0]'】 "value3" 【cat test.json | jq [.[0].key2]】 [ "value2" ] 【cat test.json | jq [.[1][0]]】 [ "value3" ]
4、logrotate(管理日志檔案)
(1)基本概念
logrotate 是 Linux 上的一個日志檔案管理工具, 可以洗掉 舊的日志檔案,并創建新的日志檔案,這個程序可以稱為 “日志輪替”, 可以根據 日志檔案的大小、以及 日志檔案 的存放天數 來進行處理,一般通過 cron 程式來執行, crontab 會每天執行一次 /etc/cron.daily 目錄下的腳本,該目錄下存在一個 /etc/cron.daily/logrotate 檔案,內部執行 logrotate 命令, 若 logrotate 配置在其他目錄下,比如: /etc/cron.daily/,/etc/cron.weekly/,/etc/cron.monthly/,/etc/cron.hourly/,則可能 每天、每周、每月、每小時 執行一次, 一般情況下,logrotate 每天由 crontab 執行一次,可以手動執行 logrotate 命令(-f 強制執行),或者 自定義定時任務,
(2)語法規則
【語法:】 logrotate [options] <configfile> 【options:】 -d, --debug 顯示指令執行程序,不進行實際操作 -v, --verbose 顯示指令執行程序,進行實際操作 -f, --force 強制執行 -s, --state=statefile 指定日志更新狀態,形如:"/var/log/yum.log" 2021-4-1-10:54:26 【logrotate 基本格式:】 日志檔案路徑 + {} 組成,{} 內部每行表示一個規則, 若配置多個檔案,檔案名獨立成行, *.log { rule1 rule2 ... } xxx.log xxx.log2 { rule1 rule2 ... } 【logrotate 基本規則引數:】 compress 使用 gzip 壓縮日志檔案, nocompress 不壓縮日志檔案, copytruncate 先復制日志檔案,再清空,復制與清空之間存在時間差,可能丟失部分日志資料, create mode owner group 創建空檔案,并指定權限、用戶名、組名,比如: create 0600 root root, nocreate 不創建新的空檔案, daily 指定 日志輪替 周期為 每天, weekly 指定 日志輪替 周期為 每周, monthly 指定 日志輪替 周期為 每月, delaycompress 延遲壓縮程序到 下一次 進行 日志輪替 時進行,與 compress 配合使用,即當前日志檔案 需要等待下一次 日志輪替 時才進行 壓縮, ifempty 即使日志檔案為空,也進行 日志輪替, notifempty 日志檔案為空,則不作 日志輪替, missingok 如果日志檔案不存在,仍可以繼續處理,不會出錯, nomissingok 如果日志檔案不存在,則會出錯(顯示出錯資訊), noolddir 日志存盤在同一個目錄下, olddir [目錄名] 指定日志存盤目錄, rotate [數量] 指定日志檔案備份數量,執行一次日志輪替,就生成一次備份檔案,超過后,備份檔案內容將清空,若未配置,則直接修改原檔案, size [大小] 當日志檔案超過指定的檔案大小時進行日志輪替,默認單位為 byte,可以為 K、M、G,比如: size 10M sharedscripts 對多個日志檔案 執行 postrotate 或者 prerotate 命令, dateext 使檔案以日期為后綴,默認為 xxx.log.1,xxx.log.2 等,以日期結尾,比如:xx.log.2020-04-20 dateformat -%Y%m%d%H.%s 配合 dateext 使用,改變日期后綴的格式, prerotate~endscript 預操作,在執行 日志輪替前 先執行 prerotate~endscript 之間的命令, postrotate~endscript 后操作,在執行 日志輪替后 執行 postrotate~endscript 之間的命令,
(3)相關檔案
【cat /etc/cron.daily/logrotate】 #!/bin/sh /usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf EXITVALUE=https://www.cnblogs.com/l-y-h/p/$? if [ $EXITVALUE != 0 ]; then /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]" fi exit 0 【cat /etc/logrotate.conf】 # see "man logrotate" for details 通過 man logrotate 指令可以查看 logrotate 詳情 # rotate log files weekly 每周進行一次 日志輪替 weekly # keep 4 weeks worth of backlogs 保留最近 4 周的日志 rotate 4 # create new (empty) log files after rotating old ones 創建一個空的新檔案 在 日志輪替 老檔案后 create # use date as a suffix of the rotated file 使檔案以日期為后綴 dateext # uncomment this if you want your log files compressed compress 表示壓縮日志檔案 #compress # RPM packages drop log rotation information into this directory 存放 rpm 安裝的軟體的日志輪替規則,自定義日志輪替 include /etc/logrotate.d # no packages own wtmp and btmp -- we'll rotate them here 配置 wtmp、btmp 日志輪替規則 /var/log/wtmp { monthly create 0664 root utmp minsize 1M rotate 1 } /var/log/btmp { missingok monthly create 0600 root utmp rotate 1 } # system-specific logs may be also be configured here 可以在此處配置系統日志輪替規則
(4)配置 logrotate 的方式
【方式一:】 直接在 /etc/logrotate.conf 檔案中進行配置, 一般用于配置非 rpm 安裝的軟體的系統檔案, 【方式二:】 在 /etc/logrotate.d 檔案夾下 新建一個組態檔, 一般 rpm 安裝的軟體 會自動生成一個組態檔,比如:/etc/logrotate.d/yum 【cat /etc/logrotate.d/yum】 /var/log/yum.log { missingok notifempty maxsize 30k yearly create 0600 root root }
5、sed(修改文本)
(1)基本概念
【基本概念:】 sed 是一個過濾和轉換文本的流編輯器(非互動式), 用于處理 檔案 或者 管道符 傳遞的文本資料,可以對資料行進行替換、洗掉、新增、選取等特定作業,簡化對檔案的反復操作, 默認情況下,sed 逐行處理 輸入資料,會將修改結果輸出,不會修改源檔案, 【處理流程:】 1、將正在處理的行 保存在一個臨時快取區(模式空間)中. 2、處理臨時快取區中的資料,將結果輸出,處理完一行,就將其從臨時快取區洗掉, 3、重復 1-2 部署,直至資料處理完成,
(2)語法規則
【語法:】 sed [options] 'command' fileName1 [fileName2] # sed 命令格式 sed [options] -f scriptFile fileName(s) # sed 腳本模式(根據 scriptFile 中的 sed 命令對 fileName 表示的檔案進行操作) 【options:】 -i 直接修改源檔案內容,不輸出, -e 默認選項,不修改源檔案(可以進行重定向覆寫源檔案), -n 禁止默認輸出行為(輸出所有內容),僅顯示模糊匹配的行,不修改源檔案, 【command:】 command 定義如何處理檔案,默認處理所有行,可以通過 數字、字符、正則運算式 組合形式過濾檔案, 【command -- 數字(從 1 開始,1 表示第一行):】 單個數字表示第幾行 $ 表示最后一行 使用 , 連接,表示 第幾行 到 第幾行 使用 ~ 連接,表示從 第幾行 開始,每隔 幾行 取一行 比如: 2 表示第 2 行, $ 表示最后一行, 2,4 表示第 2 行 到 第 4 行, 2~3 表示從第 2 行開始,每隔 3 行取一行, 2,+4 表示從第 2 行到 第 2+4 行, 【command -- 字符:】 a\ 表示在當前行后面插入一行 或 多行,追加多行時,除最后一行,每行需要以 \ 結尾(表示換行), i\ 表示在當前行之前插入一行 或 多行,追加多行時,除最后一行,每行需要以 \ 結尾(表示換行), c\ 表示使用新文本替換當前行,追加多行時,除最后一行,每行需要以 \ 結尾(表示換行), d 表示洗掉選擇的行, h 把模式空間里的內容復制到暫存緩沖區. H 把模式空間里的內容追加到暫存緩沖區 g 把暫存緩沖區里的內容復制到模式空間,覆寫原有的內容 G 把暫存緩沖區的內容追加到模式空間里,追加在原有內容的后面 x 交換暫存緩沖區 與 模式空間的內容, n 讀取下一個輸入行到模式空間, N 追加下一個輸入行到模式空間, p 顯示每行的內容,若與 options 中的 -n 使用時,可以僅輸出 選定的 內容, P 僅顯示第一行, q 結束 sed 操作 ! 非,表示對非選中行進行操作, = 輸出當前行號, 【command -- 正則運算式:】 s/regexp/replacement/ 根據 regexp 匹配到指定字串,然后使用 replacement 進行替換, /regexp/ regexp: ^ 行首定位符,匹配 xx 開頭的行, /^xx/ $ 行位定位符,匹配 xx 結尾的行. /xx$/ . 匹配單個字符(除換行符外), /x..x/ * 匹配 0個 或 多個 字符(不能用于首字母), /x*x/ [] 匹配指定字符組的任一個字符, /[Xx]xx/ [^] 匹配不在指定字符組內的任一字符, /[^Xx]xx/ \(..\) 匹配拆分子串,下標從 1 開始,在替換字串中使用 \1、\2 對其進行參考, s/\(love\)able/\1rs -> lovers & 保存查找串,在替換字串中使用 & 進行參考, s/my/**&**/ -> **my** \< 詞首定位符,匹配 xx 開頭的詞, /\<xx/ \> 詞尾定位符,匹配 xx 結尾的詞, /xx\>/ x\{m\} 匹配重復 x 行 m 次的行, /x\{5\}/ x\{m,\} 匹配重復 x 行至少 m 次的行, /x\{5,\}/ x\{m,n\} 匹配重復 x 行至少 m 次,但是少于 n 次的行, /x\{5,10\}/
(3)舉例(數字)
【vi test.txt】 java javascript python c++ go 【sed -n '2p' test.txt 僅輸出 test.txt 第二行內容】 javascript 【sed -n '3,$p' test.txt 輸出第 3 行 到最后一行的內容】 python c++ go 【sed -n '2,+2p' test.txt 輸出第 2 行開始,到第 4 行(2+2=4)的內容】 javascript python c++ 【sed -n '2~3p' test.txt 輸出從第 2 行開始,每隔 3 行的內容】 javascript go
(4)舉例(字符)
【vi test.txt】 java javascript python c++ go 【sed -e '2a\hello' test.txt 在 第二行 與 第三行 之間 插入新的一行 hello,此時 hello 作為新的第三行單獨存在】 java javascript hello python c++ go 【sed -e '3c\helloworld' test.txt 使用 helloworld 替換 第三行】 java javascript helloworld python c++ go 【sed -e '3i\world' test.txt 在 第三行 之前插入 新的一行 world】 java javascript world helloworld python c++ go 【sed -e '3,4d' test.txt 洗掉第三行、第四行】 java javascript python c++ go
(5)舉例(正則運算式)
【vi test.txt】 java javascript python c++ go 【sed -n '/^java/p' test.txt 輸出所有以 java 開頭的行】 java javascript 【sed -n '/.*va/p' test.txt 輸出包含 va 的行,若寫成 /*va/ 的形式,可能匹配不到資料】 java javascript 【sed -n '/\<ja/p' test.txt 輸出包含 ja 開頭的詞的行】 java javascript 【sed -n '/\>++/p' test.txt 輸出包含 ++ 結尾的詞的行】 c++ 【sed -e 's/c++/c--/' test.txt 替換 c++ 為 c--】 java javascript python c-- go 【sed -e 's/\(c\)\(++\)/\1--/' test.txt 替換字串,\1 用于替代 \(c\),最終效果為 c++ -> c--】 java javascript python c-- go 【sed -e 's/c++/--&&--/' test.txt & 用于替代查找串,此處 & 等同于 c++】 java javascript python --c++c++-- go
二、網路相關
1、netstat(顯示網路狀態)
(1)基本概念
netstat 命令用于顯示網路狀態,
通過 netstat 可以知道整個 Linux 系統的網路情況,
(2)語法規則
【語法:】 netstat [options] 【options:】 -a, --all 顯示所有的網路狀態(包括 監聽、非監聽的 Socket) -l, --listening 只顯示正在監聽的 Socket -c, --continuous 持續的列出網路狀態 -C, --cache 顯示路由緩沖中的路由資訊 -e, --extend 顯示網路其他相關資訊 -F, --fib 顯示路由緩沖資訊 -n, --numeric 顯示 ip 地址而不是去決議域名獲取 主機、埠或用戶名, -o, --timers 顯示與網路定時器有關的資訊, -p, --program 顯示 Socket 所屬行程的 PID 和名稱, -t, --tcp 顯示 TCP 傳輸協議的連線狀況, -u, --udp 顯示 UDP 傳輸協議的連線狀況, -i, --interfaces 顯示網路界面資訊表單(網卡資訊),
(3)舉例
【顯示網卡相關資訊:】 netstat -i 【顯示 tcp 連接情況:】 netstat -nltp
2、telnet(連接遠程機器,確認機器埠是否開放)
(1)基本概念
telnet 命令用于使用 TELNET 協議與另一個主機進行互動通信,
可以對另一主機進行遠程登錄、管理操作(有些 linux 服務器不支持 telnet,使用 ssh),
可以通過 telnet 來確認遠程主機的某個埠是否開放,也是日常網路故障排錯的重要一部分,
(2)安裝
【centos7: 】 yum -y install telnet-server yum -y install telnet
(3)語法規則
【語法:】
telnet [options] [ip] [port]
【options:】
此處省略,通過 man telnet 可以查看語法規則,
(4)舉例
【連接遠程主機:】 telnet 192.168.210.157 【確認遠程主機上某個埠是否可用:】 telnet 192.168.210.157 8080 注: 輸出中出現 "Escape character is '^]'" 即表示埠開放,
3、nslookup(查詢域名服務器)
(1)基本概念
nslookup 是一個查詢 Intelnet 域名服務器的程式,有兩種模式: 互動式、非互動式,
互動模式允許 用戶查詢名稱服務器 以獲取有關 各種主機 和 域的資訊 或 輸出域中的主機串列,
非互動模式僅用于輸出主機 或 域的名稱 等資訊,
(2)語法規則
【語法:】 nslookup [options] domain [DNS-Server] 【options:】 此處省略,通過 man nslookup 可以查看語法規則,
(3)舉例:
【查詢百度域名情況:】 nslookup www.baidu.com Server: 192.168.157.2 Address: 192.168.157.2#53 Non-authoritative answer: www.baidu.com canonical name = www.a.shifen.com. Name: www.a.shifen.com Address: 14.215.177.38 Name: www.a.shifen.com Address: 14.215.177.39 【指定域名服務器進行查詢:】 nslookup www.baidu.com 8.8.8.8 Server: 8.8.8.8 Address: 8.8.8.8#53 Non-authoritative answer: www.baidu.com canonical name = www.a.shifen.com. Name: www.a.shifen.com Address: 14.215.177.38 Name: www.a.shifen.com Address: 14.215.177.39 【反向 DNS 決議:】 nslookup -ty=ptr 8.8.8.8 Server: 127.0.0.53 Address: 127.0.0.53#53 Non-authoritative answer: 8.8.8.8.in-addr.arpa name = dns.google. Authoritative answers can be found from:
三、系統記憶體、磁盤相關
1、free(顯示記憶體使用情況)
(1)基本概念
顯示機器記憶體使用情況(包括已用和未用的記憶體空間),
顯示 系統中 已用和未用的 物理記憶體和交換記憶體, 共享記憶體和 內核使用的 緩沖區的 總和,
(2)語法規則
【語法:】 free [options] 【options:】 -b, --bytes 以 B 為單位顯示記憶體 -k, --kilo 以 KB 為單位顯示記憶體(默認) -m, --mega 以 MB 為單位顯示記憶體 -g, --giga 以 GB 為單位顯示記憶體 -h, --human 優化輸出,資料顯示帶單位 -t, --total 額外增加一個 total 行,顯示總和 -s N, --seconds N 每隔 N 秒輸出一次 -c N, --count N 輸出 N 次后退出
(3)舉例
【free -h】 total used free shared buff/cache available Mem: 1.8G 763M 256M 20M 799M 852M Swap: 2.0G 776K 2.0G 【free -h -s 2 -c 3】 total used free shared buff/cache available Mem: 1.8G 762M 257M 20M 799M 853M Swap: 2.0G 776K 2.0G total used free shared buff/cache available Mem: 1.8G 762M 257M 20M 799M 853M Swap: 2.0G 776K 2.0G total used free shared buff/cache available Mem: 1.8G 762M 257M 20M 799M 853M Swap: 2.0G 776K 2.0G
2、df(顯示磁盤使用情況)
(1)基本概念
顯示目前在 Linux 系統上的檔案系統磁盤使用情況統計,
(2)語法規則
【語法:】 df [options] [file] 【options:】 -a, --all 列出所有的檔案系統 -h,--huma-readable 以易讀的方式列出,帶單位 -H, --si 與 -h 類似,但是計數單位為 1000,不是 1024 -T, --print-type 輸出每個檔案的型別 --type=TYPE 只顯示指定型別的檔案系統 --exclude-type=TYPE 只顯示指定型別以外的檔案系統
(3)舉例
【df -Th】 檔案系統 型別 容量 已用 可用 已用% 掛載點 devtmpfs devtmpfs 894M 0 894M 0% /dev tmpfs tmpfs 910M 0 910M 0% /dev/shm tmpfs tmpfs 910M 19M 892M 3% /run tmpfs tmpfs 910M 0 910M 0% /sys/fs/cgroup /dev/mapper/centos-root xfs 17G 13G 4.2G 76% / /dev/sda1 xfs 1014M 184M 831M 19% /boot tmpfs tmpfs 182M 12K 182M 1% /run/user/42 tmpfs tmpfs 182M 0 182M 0% /run/user/0 【df --exclude-type=xfs -hT】 檔案系統 型別 容量 已用 可用 已用% 掛載點 devtmpfs devtmpfs 894M 0 894M 0% /dev tmpfs tmpfs 910M 0 910M 0% /dev/shm tmpfs tmpfs 910M 19M 892M 3% /run tmpfs tmpfs 910M 0 910M 0% /sys/fs/cgroup tmpfs tmpfs 182M 12K 182M 1% /run/user/42 tmpfs tmpfs 182M 0 182M 0% /run/user/0
3、du(顯示檔案占用磁盤空間)
(1)基本概念
顯示指定的目錄或檔案所占用的磁盤空間,
默認為當前目錄,
(2)語法規則
【語法:】 du [options] [file] 【options:】 -a, --all 顯示對所有檔案的統計,而不只是包含子目錄, -b, --bytes 輸出以位元組為單位的大小,替代預設時1024位元組的計數單位, -c, --total 在處理完所有引數后給出所有這些引數的總計,即用于統計指定的一組檔案或目錄使用的空間的總和, -h, --human-readable 以易讀的方式輸出,帶單位 -s或--summarize 只顯示指定目錄占用磁盤空間的總和(不與 a 連用),
(3)舉例
【ls -lh】 總用量 11M drwxr-xr-x. 9 root root 220 3月 19 2021 apache-tomcat-9.0.44 -rw-r--r--. 1 root root 11M 3月 19 2021 apache-tomcat-9.0.44.tar.gz 【du -shc *】 17M apache-tomcat-9.0.44 11M apache-tomcat-9.0.44.tar.gz 28M 總用量
4、mount(掛載檔案系統)
(1)基本概念
用于掛載檔案系統,
(2)語法規則
【語法:】 mount [-lhV] mount -a [-frvw] [-t vfstype] [-O optlist] mount [-frvw] [-o option[,option]...] device|dir mount [-frvw] [-t vfstype] [-o options] device dir 【options:】 -a, --all 掛載 /etc/fstab 中的定義的所有檔案系統 -t, --types <串列> 限制檔案系統型別集合 -T, --fstab <路徑> /etc/fstab 的替代檔案 -v, --verbose 列印當前進行的操作 -o, --options <串列> 掛載選項串列,以英文逗號分隔 -f, --fake 模擬 mount 動作,并未真正執行,通常與 -v 連用 -r, --read-only 以只讀方式掛載檔案系統(同 -o ro) -w, --rw, --read-write 以讀寫方式掛載檔案系統(默認)
(3)舉例
【掛載型別為 cifs 的目錄】 mount -t cifs --verbose -o vers=3.0,sec=ntlmsspi,cred=/home/ec2-user/creds.txt,rsize=130048,wsize=130048,cache=none //172.24.14.0/share /mnt/fsx 【掛載 /etc/fstab 定義的檔案系統】 mount -a 【cat /etc/fstab】 /dev/mapper/centos-root / xfs defaults 0 0 UUID=2a32db5c-0484-4f80-b574-74fd01ff36e0 /boot xfs defaults 0 0 /dev/mapper/centos-swap swap swap defaults 0 0
四、其他命令
1、nohup(后臺運行程式)
(1)基本概念
nohup 即 no hang up(不掛起),即使關閉連接終端也不會終止程式的運行,
默認情況下,會在當前目錄下生成一個名為 nohup.out 的檔案,
(2)語法規則
【語法規則:】 nohup Command [ & ] 注: Command 為要執行的命令 & 表示命令在后臺執行,終端退出后命令仍舊執行, nohup 與 & 連用,可以讓程式在后臺執行,且退出用戶終端也不會停止,
(3)舉例
【后臺啟動 helloworld.jar 】 nohup java -jar helloworld.jar & 【要殺死行程:】 ps -aux | grep "helloworld" # 先找到后臺行程 kill -9 PID # 再根據行程號殺死行程
2、wget(網路檔案下載工具)
(1)基本概念
wget 是一款非互動式的網路檔案下載工具,
(2)安裝
【centos7:】
yum install -y wget
(3)語法規則
【語法:】 wget [options] [url] 【options:】 -r, --recursive 遞回下載 -q, --quiet 安靜下載,無資訊輸出 -v, --verbose 輸出詳細資訊(默認) 注: 通過 wget --help 可以查看詳細描述,此處省略
(4)舉例
【獲取 git 資料】
wget https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip
3、curl(發送請求、下載檔案)
(1)基本概念
curl 一般用于向服務器發送請求,默認發送 Get 請求,
當與 -o 或 -O 引數連用時,可以用于下載檔案,
(2)安裝
【centos7:】
yum install -y curl
(3)語法規則
【語法:】 curl [options] [url] 【options:】 -b xxx 向服務器發送 cookie 資料 -c xxx 將服務器回傳的 cookie 資料寫入本地檔案 -d xxx 發送 POST 的資料體,可以省略 -X POST -o xxx 將服務器回應保存為檔案,功能等同于 wget -O 無需指定檔案名,默認使用 URL 最后部分作為檔案名 注: 通過 man curl 或者 curl --help 可以查看詳細描述,此處省略
(4)舉例
【向服務器發送 cookie 資料】 curl -b 'foo1=bar;foo2=bar2' https://www.baidu.com/ curl -b cookies.txt https://www.baidu.com/ 【將服務器回傳的 cookie 資料寫入檔案】 curl -c cookies.txt https://www.baidu.com/ 【向服務器發送 POST 資料體】 curl -d'login=emma&password=123'-X POST https://baidu.com 【將回應資料保存在 test 中】 curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" 【默認檔案名為 blog.git】 curl -O "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip"
五、設定開機自動啟動腳本(CentOS7)
1、方式一:crontab 定時任務
crontab 開機自啟動,通過 crontab 執行命令,可以間接的實作 開機自啟動腳本,
crontab 用法見 https://www.cnblogs.com/l-y-h/p/15379861.html#_label0_0
2、方式二:修改腳本 (/etc/rc.local、/etc/rc.d/rc.local)
(1)基本認識
/etc/rc.local 是 /etc/rc.d/rc.local 的軟連接,linux 機器重啟的時候會去加載 這個檔案,
將待執行的命令 寫入 /etc/rc.d/rc.local 檔案中,并給其可執行權限(默認沒有執行權限),
chomd +x /etc/rc.d/rc.local
重啟機器后會加載 /etc/rc.d/rc.local 中的命令,
(2)cat /etc/rc.d/rc.local
#!/bin/bash # THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES # # It is highly advisable to create own systemd services or udev rules # to run scripts during boot instead of using this file. # # In contrast to previous versions due to parallel execution during boot # this script will NOT be run after all other services. # # Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure # that this script will be executed during boot. touch /var/lock/subsys/local
3、方式三:注冊系統服務(chkconfig)
(1)基本認識
【linux 系統啟動級別:】 級別有0-6共7個級別, 運行級別0:系統關機狀態,默認級別不能設為 0,否則不能正常啟動(一啟動就關機), 運行級別1:單用戶作業狀態,用于系統維護、找回 root 密碼等,禁止遠程登錄,只能在當前計算機上操作, 運行級別2:多用戶狀態(無網路服務), 運行級別3:多用戶狀態(有網路服務), 運行級別4:作為保留級別,未使用, 運行級別5:圖形界面狀態, 運行級別6:系統重啟狀態,默認級別不能設為 6,否則不能正常啟動(一啟動就重啟), 【chkconfig:】 chkconfig 用于更新和查詢系統服務的運行級別資訊, chkconfig 提供了一個簡單的命令列工具,用于維護 /etc/rc[0-6].d 目錄層次結構,免除了系統管理員直接操作這些系統中大量符號鏈接的任務目錄, chkconfig 不是立即自動禁止或激活一個服務,它只是簡單的改變了符號連接,
(2)語法規則
【語法:】 chkconfig [--list] [--type <type>] [name] chkconfig --add <name> chkconfig --del <name> chkconfig --override <name> chkconfig [--level <levels>] [--type <type>] <name> <on|off|reset|resetpriorities> 【引數說明:】 -–add 增加所指定的系統服務,讓 chkconfig 指令得以管理它,并同時在系統啟動的敘述檔案內增加相關資料, -–del 洗掉所指定的系統服務,不再由 chkconfig 指令管理,并同時在系統啟動的敘述檔案內洗掉相關資料, -–level 指定系統級別(0-6),表示服務在哪個級別啟動、關閉, --list 列出服務資訊, 【on、off、reset 說明:】 如果在服務名后面指定了 on,off 或者 reset,那么 chkconfig 會改變指定服務的啟動資訊, on 和 off 分別指服務被啟動和停止,reset 指重置服務的啟動資訊, 對于 on 和 off,系統默認只對運行級 2,3,4,5 有效,reset 對所有級別均有效,
(3)如何新增一個服務
【步驟:】 Step1:服務腳本必須存放在/etc/init.d/目錄下,編輯腳本, Step2:使用 chkconfig --add 添加服務, 注: 假設服務名為myservice, 當我們運行添加服務的命令時候,會出現 "service myservice does not support chkconfig", 一般在腳本開頭加入 "#chkconfig: 2345 10 90" 即可: 其中: 2345 是系統啟動級別,10是啟動優先級,90是停止優先級,優先級范圍是0-100,數字越大,優先級越低, 執行 --add 后,會在 /etc/rc[0-6].d 中創建軟鏈接,
(4)舉例:
【chkconfig --list】 netconsole 0:關 1:關 2:關 3:關 4:關 5:關 6:關 network 0:關 1:關 2:開 3:開 4:開 5:開 6:關 【vi /etc/init.d/autoStartUp.sh】 #!/bin/bash # chkconfig: 2345 20 90 # description: autoStartUp 【chkconfig --add /etc/init.d/autoStartUp.sh】 【ls -lh /etc/rc0.d/ /etc/rc2.d/】 /etc/rc0.d/: 總用量 0 lrwxrwxrwx. 1 root root 20 10月 8 21:42 K50netconsole -> ../init.d/netconsole lrwxrwxrwx. 1 root root 24 10月 11 22:11 K90autoStartUp.sh -> ../init.d/autoStartUp.sh lrwxrwxrwx. 1 root root 17 10月 8 21:42 K90network -> ../init.d/network /etc/rc2.d/: 總用量 0 lrwxrwxrwx. 1 root root 20 10月 8 21:42 K50netconsole -> ../init.d/netconsole lrwxrwxrwx. 1 root root 17 10月 8 21:42 S10network -> ../init.d/network lrwxrwxrwx. 1 root root 24 10月 11 22:11 S20autoStartUp.sh -> ../init.d/autoStartUp.sh 【chkconfig --list】 autoStartUp.sh 0:關 1:關 2:開 3:開 4:開 5:開 6:關 netconsole 0:關 1:關 2:關 3:關 4:關 5:關 6:關 network 0:關 1:關 2:開 3:開 4:開 5:開 6:關 【chkconfig --del /etc/init.d/autoStartUp.sh】 netconsole 0:關 1:關 2:關 3:關 4:關 5:關 6:關 network 0:關 1:關 2:開 3:開 4:開 5:開 6:關
4、方式四:注冊系統服務(systemctl )
(1)基本認識
【systemd 與 systemctl】 systemctl 是 CentOS7 采用的 用于 Linux 啟動處理和系統管理的機制,可以理解為 systemd 的管理工具, systemd 是 CentOS7 完成引導程式進入作業系統后啟動的第一個行程,可用于管理 服務 的啟動順序, chkconfig 是 CentOS6 使用的, 【linux 啟動流程】 在電源打開時啟動 BIOS 從 BIOS 呼叫引導加載程式 引導加載程式引導 Linux 內核 Linux 內核啟動 init 行程 (PID 1) Systemd 是 init 行程,
(2)語法規則
【語法:】 systemctl [OPTIONS...] [COMMAND] 【options:】 list-unit-files 列出所有可用單元 list-units 列出所有運行中的單元 list-unit-files --type=service 列出指定型別的單元 enable、disable 開啟、禁用 服務 status/start/restart/stop 查看、啟動、重啟、關閉 服務 daemon-reload 重新加載 systemd 管理器配置 【常用命令:】 systemctl list-unit-files systemctl list-units systemctl list-unit-files --type=mount systemctl enable/disable xxx systemctl status/start/restart/stop xxx systemctl daemon-reload
(3)如何新增一個服務
【步驟:】 Step1:服務腳本必須存放在 /etc/systemd/system 目錄下, Step2:創建后綴名為[.service]的檔案,并進行編輯, Step3:使用 systemctl daemon-reload 重新加載 systemd 管理器配置, 注意: xx.service 有具體格式寫法,不能亂寫, 【xx.service 檔案格式說明:】 [Unit] Description: 描述Unit的說明和依賴關系等 Before:此服務啟動于右側配置的組件之前 After:此服務啟動于右側配置的組件之后 [Service] Type: 服務程序啟動完成的判定方法(默認為simple) PIDFile: 主行程PID檔案 KillSignal: Systemctl stop命令發送哪個信號 TimeoutStopSec: 在停止結束前待機的時間 ExecStart: 服務的啟動命令 ExexReload: 服務的多載命令 ExecStop: 服務的停止命令 ExecStartPre: 服務啟動前的附加命令 ExecStartPost: 服務啟動后的附加命令 ExecStopPost: 服務停止后執行的命令 Restart: 服務行程停止時的重啟條件 PrivateTmp: 是否準備 /tmp 和 /var/tmp 專用于這個服務 KillMode: 如何使用未停止的行程 [Install] WantedBy: 啟用時在此單元的 .wants 目錄中創建鏈接 Requiredby: 啟用時在此單元的 .required 目錄中創建鏈接 【注意:(獲取環境變數)】 systemd 的執行時不會加載用戶 Shell 里的環境變數,如果需要從環境變數中取值,需要 service 中配置 Environment, Environment= EnvironmentFile= 【注意:(Type=forking)】 Type 指定了在 ExecStart 中指定的命令啟動服務行程時如何判斷啟動完成, 例如: 對于在 foie gras 中繼續運行的命令, 使用 Type = simple, 表示執行命令時,判斷啟動完成, 或者: fork子行程并把它放在后臺,如果第一個命令本身就是結束的型別, 設定 Type = forking, 在這種情況下,當執行的命令完成時,判斷啟動完成,
(4)舉例
【vi /etc/systemd/system/test.service】 [Unit] Description=Test Service Server After=network.target remote-fs.target nss-lookup.target [Service] Type=simple PIDFile=/run/nginx.pid ExecStartPre=/usr/bin/rm -f /run/nginx.pid ExecStart=/usr/sbin/nginx ExecReload=/bin/kill -s HUP $MAINPID KillSignal=SIGQUIT TimeoutStopSec=5 Restart=always WorkingDirectory=/usr/local/test ExecStart=/usr/local/test/test.sh KillMode=process [Install] WantedBy=multi-user.target 【systemctl daemon-reload】 【systemctl list-unit-files | grep test】 test.service disabled
別把自己太當回事,也別太把自己不當回事!Life is Fantastic!!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/309378.html
標籤:Linux
下一篇:Qt usb通訊
