線上日誌檢視基礎
檢視線上機器的一些資訊和基礎命令:
- du、df檢視大小相關
- cat、zcat、less、tail、head檢視檔案內容
- grep、awk處理檔案內容
- sort、uniq、wc統計
- scp檔案傳輸
du、df檢視大小相關
-
df 檢視系統掛載磁碟大小
-
df [選項]... [FILE]...
檔案-a
, –all 包含所有的具有 0 Blocks 的檔案系統
檔案--block-size={SIZE}
使用 {SIZE} 大小的 Blocks
檔案-h
, –human-readable 使用人類可讀的格式(預設值是不加這個選項的…)
檔案-H
, –si 很像 -h, 但是用 1000 為單位而不是用 1024
檔案-i
, –inodes 列出 inode 資訊,不列出已使用 block
檔案-k
, –kilobytes 就像是 –block-size=1024
檔案-l
, –local 限制列出的檔案結構
檔案-m
, –megabytes 就像 –block-size=1048576
檔案--no-sync
取得資訊前不 sync (預設值)
檔案-P
, –portability 使用 POSIX 輸出格式
檔案--sync
在取得資訊前 sync
檔案-t
, –type=TYPE 限制列出檔案系統的 TYPE
檔案-T
, –print-type 顯示檔案系統的形式
檔案-x
, –exclude-type=TYPE 限制列出檔案系統不要顯示 TYPE
檔案-v
(忽略)常見使用例項:
df -h
-
-
du會顯示指定的目錄或檔案所佔用的磁碟空間
-
du [-abcDhHklmsSx][-L <符號連線>][-X <檔案>][--block-size][--exclude=<目錄或檔案>][--max-depth=<目錄層數>][--help][--version][目錄或檔案]
引數說明:-a或-all
顯示目錄中個別檔案的大小。-b或-bytes
顯示目錄或檔案大小時,以byte為單位。-c或--total
除了顯示個別目錄或檔案的大小外,同時也顯示所有目錄或檔案的總和。-D或--dereference-args
顯示指定符號連線的原始檔大小。-h或--human-readable
以K,M,G為單位,提高資訊的可讀性。-H或--si
與-h引數相同,但是K,M,G是以1000為換算單位。-k或--kilobytes
以1024 bytes為單位。-l或--count-links
重複計算硬體連線的檔案。-L<符號連線>或--dereference<符號連線>
顯示選項中所指定符號連線的原始檔大小。-m或--megabytes
以1MB為單位。-s或--summarize
僅顯示總計。-S或--separate-dirs
顯示個別目錄的大小時,並不含其子目錄的大小。-x或--one-file-xystem
以一開始處理時的檔案系統為準,若遇上其它不同的檔案系統目錄則略過。-X<檔案>或--exclude-from=<檔案>
在<檔案>指定目錄或檔案。--exclude=<目錄或檔案>
略過指定的目錄或檔案。--max-depth=<目錄層數>
超過指定層數的目錄後,予以忽略。
使用例項:檢視當前資料夾的一級內容大小du -h --max-depth=1
-
cat、zcat、less、tail、head檢視檔案內容
-
cat
命令用於連線檔案並列印到標準輸出裝置上-
cat [-AbeEnstTuv] [--help] [--version] fileName
`-n 或 --number`:由 1 開始對所有輸出的行數編號。 `-b 或 --number-nonblank`:和 -n 相似,只不過對於空白行不編號。 `-s 或 --squeeze-blank`:當遇到有連續兩行以上的空白行,就代換為一行的空白行。 `-v 或 --show-nonprinting`:使用 ^ 和 M- 符號,除了 LFD 和 TAB 之外。 `-E 或 --show-ends` : 在每行結束處顯示 $。 `-T 或 --show-tabs`: 將 TAB 字元顯示為 ^I。 `-A, --show-all`:等價於 -vET。 `-e`:等價於`"-vE"`選項; `-t`:等價於`"-vT"`選項;
-
-
zcat
t命令用於不真正解壓縮檔案,就能顯示壓縮包中檔案的內容的場合。 -
head
顯示檔案的開頭至標準輸出中,預設head命令列印其相應檔案的開頭10行-
head [引數]... [檔案]...
`-q` 隱藏檔名 `-v` 顯示檔名 `-c<位元組>` 顯示位元組數 `-n<行數>` 顯示的行數
-
-
tail
用於檢視檔案的內容,有一個常用的引數-f
常用於查閱正在改變的日誌檔案-
tail[必要引數][選擇引數][檔案]
`-f` 迴圈讀取 `-q` 不顯示處理資訊 `-v` 顯示詳細的處理資訊 `-c<數目>` 顯示的位元組數 `-n<行數>` 顯示行數 `--pid=PID 與-f合用`,表示在程式ID,PID死掉之後結束. `-q, --quiet, --silent` 從不輸出給出檔名的首部 `-s, --sleep-interval=S 與-f合用`,表示在每次反覆的間隔休眠S秒
-
-
less
可以隨意瀏覽檔案-
less [引數] 檔案
`-b <緩衝區大小>` 設定緩衝區的大小 `-e` 當檔案顯示結束後,自動離開 `-f` 強迫開啟特殊檔案,例如外圍裝置代號、目錄和二進位制檔案 `-g` 只標誌最後搜尋的關鍵詞 `-i` 忽略搜尋時的大小寫 `-m` 顯示類似more命令的百分比 `-N` 顯示每行的行號 `-o <檔名>` 將less 輸出的內容在指定檔案中儲存起來 `-Q` 不使用警告音 `-s` 顯示連續空行為一行 `-S` 行過長時間將超出部分捨棄 `-x <數字>` 將“tab”鍵顯示為規定的數字空格 `/字串`:向下搜尋“字串”的功能 `?字串`:向上搜尋“字串”的功能 `n`:重複前一個搜尋(與 / 或 ? 有關) `N`:反向重複前一個搜尋(與 / 或 ? 有關) `b` 向後翻一頁 `d` 向後翻半頁 `h` 顯示幫助介面 `Q` 退出less 命令 `u` 向前滾動半頁 `y` 向前滾動一行 `空格鍵` 滾動一行 `Enter鍵` 滾動一頁 `[pagedown]`: 向下翻動一頁 `[pageup]`: 向上翻動一頁
-
grep、awk處理檔案內容
-
grep
用於查詢檔案裡符合條件的字串。-
grep [-abcEFGhHilLnqrsvVwxy][-A<顯示列數>][-B<顯示列數>][-C<顯示列數>][-d<進行動作>][-e<範本樣式>][-f<範本檔案>][--help][範本樣式][檔案或目錄...]
-a 或 --text
: 不要忽略二進位制的資料。-A<顯示行數> 或 --after-context=<顯示行數>
: 除了顯示符合範本樣式的那一列之外,並顯示該行之後的內容。-b 或 --byte-offset
: 在顯示符合樣式的那一行之前,標示出該行第一個字元的編號。-B<顯示行數> 或 --before-context=<顯示行數>
: 除了顯示符合樣式的那一行之外,並顯示該行之前的內容。-c 或 --count
: 計算符合樣式的列數。-C<顯示行數> 或 --context=<顯示行數>或-<顯示行數>
: 除了顯示符合樣式的那一行之外,並顯示該行之前後的內容。-d <動作> 或 --directories=<動作>
: 當指定要查詢的是目錄而非檔案時,必須使用這項引數,否則grep指令將回報資訊並停止動作。-e<範本樣式> 或 --regexp=<範本樣式>
: 指定字串做為查詢檔案內容的樣式。-E 或 --extended-regexp
: 將樣式為延伸的普通表示法來使用。-f<規則檔案> 或 --file=<規則檔案>
: 指定規則檔案,其內容含有一個或多個規則樣式,讓grep查詢符合規則條件的檔案內容,格式為每行一個規則樣式。-F 或 --fixed-regexp
: 將樣式視為固定字串的列表。-G 或 --basic-regexp
: 將樣式視為普通的表示法來使用。-h 或 --no-filename
: 在顯示符合樣式的那一行之前,不標示該行所屬的檔名稱。-H 或 --with-filename
: 在顯示符合樣式的那一行之前,表示該行所屬的檔名稱。-i 或 --ignore-case
: 忽略字元大小寫的差別。-l 或 --file-with-matches
: 列出檔案內容符合指定的樣式的檔名稱。-L 或 --files-without-match
: 列出檔案內容不符合指定的樣式的檔名稱。-n 或 --line-number
: 在顯示符合樣式的那一行之前,標示出該行的列數編號。-q 或 --quiet或--silent
: 不顯示任何資訊。-r 或 --recursive
: 此引數的效果和指定”-d recurse”引數相同。-s 或 --no-messages
: 不顯示錯誤資訊。-v 或 --revert-match
: 顯示不包含匹配文字的所有行。-V 或 --version
: 顯示版本資訊。-w 或 --word-regexp
: 只顯示全字元合的列。-x --line-regexp
: 只顯示全列符合的列。-y
: 此引數的效果和指定”-i”引數相同。
-
-
awk處理文字檔案的語言,是一個強大的文字分析工具。
-
awk `{pattern + action}` {filenames}
或者awk [-F field-separator] `commands` input-file(s)
-
awk -F, `$2 ~ /test/ {print $2" "$4}` log.txt
使用-F,
的作用是每行按照,
分割,$1
–$2
–$n
就是分割的結果的對應順序的值$2 ~ /th/
就是需要分割的第二個資料需要和test
匹配的上{print $2$4}
輸出分割結果的第二個和第四個
處理的資訊是log.txt
-
awk -F `[:=]` `{match($5,/.*uc_name=(.*)&extend=test.*/,a); print a[1]}` log.txt
-F `[:=]`
使用多個分隔符,先使用:
分割,然後在對分割結果使用=
二次分割。`{match($5,/.*uc_name=(.*)&extend=test.*/,a); print a[1]}`
對分割後的第五個結果處理,需要能夠匹配上其中的正則,並把匹配結果放到陣列a
中,其中a
陣列的結果a[0]
是全匹配的結果,a[1]
是正則匹配的子表示式結果,並輸出子表示式。
-
sort、uniq、wc統計
-
sort
用於將文字檔案內容加以排序。-
sort [-bcdfimMnr][-o<輸出檔案>][-t<分隔字元>][+<起始欄位>-<結束欄位>][--help][--verison][檔案]
-b
忽略每行前面開始出的空格字元。-c
檢查檔案是否已經按照順序排序。-d
排序時,處理英文字母、數字及空格字元外,忽略其他的字元。-f
排序時,將小寫字母視為大寫字母。-i
排序時,除了040至176之間的ASCII字元外,忽略其他的字元。-m
將幾個排序好的檔案進行合併。-M
將前面3個字母依照月份的縮寫進行排序。-n
依照數值的大小排序。-o<輸出檔案>
將排序後的結果存入指定的檔案。-r
以相反的順序來排序。-t<分隔字元>
指定排序時所用的欄位分隔字元。+<起始欄位>-<結束欄位>
以指定的欄位來排序,範圍由起始欄位到結束欄位的前一欄位。
-
-
uniq
用於檢查及刪除文字檔案中重複出現的行列,需要與 sort 命令結合使用[一定要排序,不然去重無效,只會去除相鄰的重複項]-
uniq [-cdu][-f<欄位>][-s<字元位置>][-w<字元位置>][--help][--version][輸入檔案][輸出檔案]
-c或--count
在每列旁邊顯示該行重複出現的次數。-d或--repeated
僅顯示重複出現的行列。-f<欄位>或--skip-fields=<欄位>
忽略比較指定的欄位。-s<字元位置>或--skip-chars=<字元位置>
忽略比較指定的字元。-u或--unique
僅顯示出一次的行列。-w<字元位置>或--check-chars=<字元位置>
指定要比較的字元。
-
-
wc
計算檔案的Byte數、字數、或是列數,若不指定檔名稱、或是所給予的檔名為”-“,則wc指令會從標準輸入裝置讀取資料。-
uniq [-cdu][-f<欄位>][-s<字元位置>][-w<字元位置>][--help][--version][輸入檔案][輸出檔案]
-c或--bytes或--chars
只顯示Bytes數。-l或--lines
只顯示行數。-w或--words
只顯示字數。
-
scp檔案傳輸
-
scp
是linux
系統下基於ssh登陸進行安全的遠端檔案拷貝命令[需要配置ssh登入,密碼或者公鑰免密
]-
scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file] [-l limit] [-o ssh_option] [-P port] [-S program] [[user@]host1:]file1 [...] [[user@]host2:]file2
-1
: 強制scp命令使用協議ssh1-2
: 強制scp命令使用協議ssh2-4
: 強制scp命令只使用IPv4定址-6
: 強制scp命令只使用IPv6定址-B
: 使用批處理模式(傳輸過程中不詢問傳輸口令或短語)-C
: 允許壓縮。(將-C標誌傳遞給ssh,從而開啟壓縮功能)-p
:保留原檔案的修改時間,訪問時間和訪問許可權。-q
: 不顯示傳輸進度條。-r
: 遞迴複製整個目錄。-v
:詳細方式顯示輸出。scp和ssh(1)會顯示出整個過程的除錯資訊。這些資訊用於除錯連線,驗證和配置問題。-c cipher
: 以cipher將資料傳輸進行加密,這個選項將直接傳遞給ssh。-F ssh_config
: 指定一個替代的ssh配置檔案,此引數直接傳遞給ssh。-i identity_file
: 從指定檔案中讀取傳輸時使用的金鑰檔案,此引數直接傳遞給ssh。-l limit
: 限定使用者所能使用的頻寬,以Kbit/s為單位。-o ssh_option
: 如果習慣於使用ssh_config(5)中的引數傳遞方式,-P port
:注意是大寫的P, port是指定資料傳輸用到的埠號-S program
: 指定加密傳輸時所使用的程式。此程式必須能夠理解ssh(1)的選項。
-
實踐
線上日誌結構:
183.250.223.158 [16/Dec/2018:23:57:15 +0800] "GET /log?skdata=sdadadad111%22username%33%3ftestets%22fsfdsfssadadasd%34fdsfs%34 HTTP/1.0" 200 2 "-" "testiPhone/d64556" "120.188.90.136" "jsdgajdsad" "dasdadd" "test" "ceshi"
分析資料命令:
cat /home/logs/2018/12/access.2018-12-16.log | grep -E `skdata.*username` | awk `{match($5,/.*username%33%3f(.*)%22fsfdsfssadadasd.*/,a); print a[1]}` | sort | uniq -c | wc -l
-
cat
檢視某一天的日誌檔案,訪問日誌一般檔案一天記錄一份 -
grep
檢視符合需求的訪問日誌,本例項使用正則匹配-E
來篩選出符合要求的詳情頁訪問日誌,輸出 -
awk
分析符合要求的詳情頁訪問日誌,把每行詳情頁訪問日誌中$5
【空格分割的第五個字串,本例項就是以/log?
開頭的字串】去匹配一個正則.*username%33%3f(.*)%22fsfdsfssadadasd.*
,並把結果放到變數a
中【a[0]是全匹配,a[1]是第一個字表示式】,然後把匹配成功符合結果的a[1]
輸出 -
sort
將上述結果排序 [一定要排序,不然去重無效,只會去除相鄰的重複項] -
uniq -c
將上述結果去重 -
wc -l
檢視總共結果數量