Linux

直接檢視檔案內容(cat)

由第一行開始顯示內容

cat filename

  1. 顯示行號 -n
  2. 空白行不給行號 -b
  3. 完整的顯示(包含特殊字元) -A

例行性工作排程

at

僅處理一次便結束排程 使用at 需要 atd 這個服務支援 atd在CentOS預設為啟動 其他的有可能無啟動

crontab

crontab所設定之工作會一直循環的進行下去,時間可為分鐘、小時、每週、每月、每年等等 除了指令執行外 可編輯/etc/crontab來支援.需要crond此服務來生效

指令

  1. 查詢自己的crontab內容
    crontab -l

  2. 查看指定使用者的 crontab
    sudo crontab -u 使用者 -l

  3. 編輯自己的crontab
    crontab -e

  4. 編輯制定使用者的crontab
    sudo crontab -u 使用者 -e

  5. 刪除crontab內容
    crontab -r

時間形式

分 時 日 月 星期幾 path/to/command

個人設定檔:MIN HOUR DOM MON DOW CMD
系統設定檔:MIN HOUR DOM MON DOW USER CMD

可使用特殊字元

星號*:代表任意時間
逗號,:分隔多個不同時間
減號一:代表區間
斜線加數字(/n):代表每隔n時間

一般排程範例:

30 08 * * * 每天早上8.30
30 18 * * 0 每週日下午18.30
30 18 * * Sun 每週日下午18.30
30 08 10 06 * 每年六月十號早上8.30
30 21 1,15,29 * * 每月1,15,19號晚上21.30
*/10 * * * * 每隔十分鐘
00 09-18 * * * 從早上9到晚上18 必須為整點

特殊排程(以@開頭)範例:

@reboot 每次重新開機執行一次
@yearly(@annually) 每年執行一次等同0011*
@monthly 每月執行一次 001**
@weekly 每週執行一次 00**0
@daily 每天執行一次 00***
@hourly 每小時執行一次 0****

Curl

透過HTTP Protocol(HTTP HyperText Transfer Protocol)定義取得網路資源的協定 使用client/server模式來取得

基本格式

  • curl [option][URL]

在終端機輸入 curl 網址 即可獲得該網址的response HTML,JSON,XML等格式

  • curl URL

下載圖片 只要加上-o以及檔名

  • curl -o XXX.jpg URL

若是要直接使用下載網址的檔案檔名 則使用-O不用加上檔名 網址後需有明確檔名
可利用迴圈多次下載

  • curl -O URL
  • curl -O URLduck[1-5].jpg

下載中斷要從中斷處繼續的話使用-C

  • curl -C - [option]URL

跟隨網址redirect 使用-L

  • curl -L URL

追蹤curl過程 將結果存入txt 使用 trace-ascii,可使用cat 來顯示該txt儲存之過程

  • curl trace-ascii XXX.txt URL
  • cat XXX.txt

HTTP請求方法

-X/request [GET|POST|PUT|DELETE|PATCH] 使用指定的 http method 來發出 http request
-H/header 設定 request 裡所攜帶的 header
-i/include 在 output 顯示 response 的 header
-d/data 攜帶 HTTP POST Data
-v/verbose 輸出更多的訊息方便 debug
-u/user 攜帶使用者帳號、密碼
-b/cookie 攜帶 cookie(可以是參數或是檔案位置)

  1. GET 網址可以攜帶query string參數
  1. 同一指令輸入多個URL

curl URL 空格 URL

  1. 若遇到Form表單
    由於Form Post 是使用 application/x-www-form-urlencoded Content-Type 所以需要編碼

範例:curl -X POST data "email=test@example.com&press=%20OK%20" URL

  1. 若有涉及到上傳檔案的表單(enctype='multipart/form-data')

curl -X POST -F 'file=@./[file]' URL

  1. GET 單一或全部資源

curl -X GET "URL"

  1. JSON資料

curl -X [request] -H "Content-Type:application/json -d '{json內容}' "URL"

輸入COOKIE

指令中輸入cookie

範例:curl cookie "name=Jack" URL

從檔案讀取cookie

curl cookie stored_cookies_file_path URL

攜帶User Agent

curl useragent "Mozilla/<version> (<system-information>) <platform> (<platform-details>) <extensions>" URL

若存取之網頁有使用Basic Authentication

curl -i user username:password URL

查閱文件內容(tail)

基本格式

tail [parameter][file]
預設10行

常用參數

-f 持續顯示最尾部的內容
-q 不顯示處理訊息
-v 顯示詳細處理訊息
-c數字 顯示從尾部數來幾字元
-n數字 顯示從尾部數來幾行

檔案的壓縮與打包(tar)

常用指令

-c 打包一個tar檔案
-x 解開一個tar檔案
-t 檢視一個tar檔案

-z 使用gzip壓縮
-v 顯示建立tar的過程
-P 使用絕對路徑
-f 指定tar檔案名稱 通常放參數的最後

建立壓縮檔範例

tar -czvfv filename.tgz 來源檔案
將來源檔案壓縮後 打包成filename.tgz的壓縮檔 來源可以是檔案或目錄

來源檔案可以使用多個 利用空白分隔

tar -czvf filename.tgz 來源1 來源2

檢視 解開

  • tar -tzvf filename.tgz
  • tar -xzvf filename.tgz

複製目錄

tar -cvf - 來源目錄 | tar - xvf -

正規表示法全域查詢並列印(grep)

grep 關鍵字 file1 file2

可搭配*搜尋多個檔案

grep 關鍵字 /etc/*.conf 在etc目錄下所有conf檔案中尋找test

篩選含有關鍵字的檔案

ls 目錄路徑 | grep 關鍵字

預設會分大小寫 若要不分大小寫必須加上-i 顯示匹配行號要加上-n

反向搜尋

除了關鍵字以外的資料加上-v 在某目錄下的所有檔案搜尋關鍵字可加上-r

特定檔案中尋找關鍵字使用-r搭配include

grep -r include="*.conf" 關鍵字 目錄

不顯示錯誤訊息 將錯誤訊息指/dev/null

grep -r 關鍵字 目錄 2>/dev/null

顯示前後幾行(ABC)

-A 代表after 後面接數字 顯示找到的關鍵字後面行數
-B before 之前行數
_C Context 前後之行數

關閉顏色標示加上 color=always 或 color=never 或 color=auto

正規表示法

grep "^a" 以a開頭
grep "b$" 以b結尾
grep "^[ab]" a或b開頭

次數指定

*代表出現0次以上

?代表0次或1次

+代表1次以上

精準篩選

範例:"<net>" network就會被排除 只會出現有net的結果

程序監測與控制(ps)

ps 參數

最常使用到ps-aux 再利用管道符號導向到grep 去查詢特定的程序

  1. a 顯示現行終端機下所有程式 包括其他使用者的程式
  2. -A 顯示所有程式
  3. c 顯示每個程式真正的指令名稱 不包含路徑引數常住服務等標示
  4. -e 與A相同
  5. e 顯示每個程式使用的環境變數
  6. f 用ASCII顯示樹狀結構 表達程式的相互關係
  7. -H 同f 不同只在於它不是使用ASCII顯示
  8. -N 顯示所有程式 除了執行ps終端機底下的程式之外
  9. s 採用程式訊號的格式顯示程式狀況
  10. S 列出程式 並且包含已經中斷的子程式資料
  11. -t 終端機編號 指定終端機編號 列出屬於該終端機的程式的狀況
  12. u 以使用者為主的格式來顯示程式狀況
  13. x 不以終端機區分 顯示所有程式

文字分析工具 (awk)

awk '條件類型1{動作1},條件類型2{動作2}'filename
cat filename | awk

處理流程

  1. 讀入第一行 並把資料填數$0,$1,$2等變數之中
  2. 依據條件類型限制 判斷是否進行後面的動作
  3. 做完所有動作與條件類型
  4. 若有後續的行 重複前面三個步驟 直至所有資料儲存完畢

變數名稱

NF : 每一行 $0 擁有的欄位總數

NR : 目前awk所處理的第幾行資料

FS : 目前的分隔字元 預設為空白鍵

利用print列印時 非變數都需要用雙引號來定義
{}中如果要多個指令時需要用enter或;分開

範例:test.txt

a b c d
c o d e
A:W:C:D
O:G:W:C
Q W E R

cat /home/harry-li/桌面/test | awk'BEGIN{FS=":"}{print $1 "\t lines:"NR"\t columns:"NF $3}'
結果:

a b c d lines:1 columns:1
C O D E lines:2 columns:1
A lines:3 columns:4C
O lines:4 columns:4W
Q W E R lines:5 columns:1

性能分析工具(top)

資訊說明:

PID — 行程id(Process ID)
USER — 該行程使用者ㄏ
PR — 行程優先順序
NI — nice值(值越小優先權優高)
VIRT — 該行程使用的虛擬記憶體總量,單位kb(VIRT=SWAP+RES)
RES — 該行程程使用的、未被使用的實體記憶體大小,單位kb(RES=CODE+DATA)
SHR — 共用記憶體大小(單位kb)
S — 行程狀態。D=不可中斷的睡眠狀態 R=運行 S=睡眠 T=跟蹤/停止 Z=僵屍進程
%CPU — 上次更新到現在的CPU時間佔用百分比
%MEM — 行程使用的實體記憶體百分比
TIME+ — 行程使用的CPU時間總計,單位1/100秒
COMMAND — 行程名稱

基本格式

top 參數

-b 只會吐出純文字內容無法按鍵互動
-d (秒,毫秒)更新時間差
-h top的參數以及版本代號
-i 顯示閒置的process
-n 刷新的次數

互動模式

進入top互動模式之後可以按下以下按鍵調整顯示模式
按下 b 開啓 highlight 模式
B 開啓 反白 highlight 模式
z 可以讓畫面變成彩色
Z 可修改彩色模式的顏色設定值
l 顯示/關閉 load avg 資訊
t 顯示/關閉 task/cpu 資訊
m 顯示/關閉 memory 資訊
f 可選擇要顯示的 column
o 調整顯示的欄位的位置 (透過連按該欄位的代號可調整位置)
F or O 選擇 排序的欄位
< or > 變換排序的欄位 < 換成當前排序的左邊一欄排序 > 換成當前排序的右邊一欄排序
R 昇序/降序 調整
x highlight 當前排序欄位 (需將highlight模式開啓)
y highlight 資源使用資訊 (需將highlight模式開啓)
u 選擇顯示某個user的所創立的process
n or # 設定只顯示幾列資訊
k 在top 視窗中kill process by pid
r 在top 視窗中調整process priority
d or s 調整更新時間
W 儲存當前的顯示模式設定 (排序,顯示欄位…等) ,之後執行top 指令就會載入該設定檔調整顯示模式
檔案將會存在 /home/<username>/.toprc
如要修改全域設定請先手動建立 /etc/toprc 檔案 再行輸入設定值h
按下 q 離開top

監測一個命令的運行結果(watch)

範例:

自動監看最新的網頁伺服器錯誤訊息 watch tail /var/log/httpd/error_log

指令

調整更新速度  -n (秒) 最低不可低於0.1秒
標示差異處    -d 
加上顏色     -c 最後加上--color
關閉標頭行   -t
監看管件串接 用引號將管線串接的指令包起來

實用範例

從網頁伺服器記錄檔篩選來自192.168.0.123的最新瀏覽紀錄

watch grep -F 192.168.0.123 /var/log/httpd/access_log

ssh(Tunnel)

安裝事項

如果只是要登陸別台機器 只需要安裝openssh-client(ubuntu有默認安裝)
若是本機要開放則要安裝openssh-server

查看是否安裝ssh指令
dpkg -l | grep ssh

安裝openssh-server
sudo apt-get install openssh-server

確認是否啟動
ps -e | grep ssh
顯示sshd 代表已啟動

登入指令

ssh 該使用者username@ip

若無法登入成功檢查被連接者的防火牆
sudo afw status 若 22 被阻擋 則 使用 sudo ufw allow 22/tcp

若使用虛擬機必須先關掉Ubuntu,在VirtualBox 檔案->主機網路管理員 建立一張網路卡 再從設定->網路->介面卡2去設定 最後抓這張卡的IP即可

[Tunnel](https://blog.gtwang.org/linux/ssh-tunnel-socks-proxy-forwarding-tutorial

chmod

控制用戶對文件的權限的命令

分成三級 : 文件持有者 (Owner),用戶組(Group),其他用戶(Other Users)
只有文件持有者及超級用戶可以修改文件或目錄的權限

語法

chmod [-cfvR] [help] [version] mode fiel

參數說明

權限設定格式如下
[ugoa][[±=][rwxX]][,]

u 表示该文件的拥有者,
g 表示与该文件的拥有者属于同一个群体(group)者,
o 表示其他以外的人,
a 表示这三者皆是。
+表示增加权限
-表示取消权限
=表示唯一设定权限。
r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。

其他参数说明:
-c : 若该文件权限确实已经更改,才显示其更改动作
-f : 若该文件权限无法被更改也不要显示错误讯息
-v : 显示权限变更的详细资料
-R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更)
help : 显示辅助说明
version : 显示版本

八進制語法

# 權限 rwx 二進制
7 讀 寫 執行 rwx 111
6 讀 寫 rw- 110
5 讀 執行 r-x 101
4 r 100
3 寫 執行 -wx 011
2 -w- 010
1 執行 x 001
0 - 000

範例

將file.txt 設為所有人皆可讀取

chmod ugo+r file.txt
chmod a+r file.txt

將file.txt 與 file2.txt設為文件擁有者 與其所屬同一團體可寫入其他人不可

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

將ex1.py 設為只有該文件擁有者可執行

chmod u+x ex1.py

將目前目錄下所有文件及子目錄都設為任何人可讀取

chmod -R a+r *

chmod abc file(chmod 777 file)

abc 各為一個數字 r=4 w=2 x=1 7=r+w+x 以此類推

其它用法

更改檔案或目錄的擁有者或群組(chown)

可以先用ls -l 查詢每個檔案與目錄的擁有者與群組

語法

更改擁有者

sudo chown 擁有者 filename

更改群組

sudo chown : 群組名 filename

同時更改

sudo chown 擁有者:群組 filename

若要輸出執行結果可加上-v 若不要回報錯誤訊息可加上-f