線上日誌查看基礎
查看線上機器的一些信息和基礎命令:
- 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` 向前滾動一行 `空格鍵` 滾動一行 `回車鍵` 滾動一頁 `[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"\t"$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.*prodetail.*etype%2522%253A0.*eid.*theme_prodetail.*vs_theme' | awk '{match($5,/.*uc_name%2522%253A%2522(.*)%2522%252C%2522etype.*/,a); print a[1]}' | sort | uniq -c | wc -l
-
cat
查看某一天的日誌文件,訪問日誌一般文件一天記錄一份 -
grep
查看符合需求的訪問日誌,本實例使用正則匹配-E
來篩選出符合要求的詳情頁訪問日誌,輸出 -
awk
分析符合要求的詳情頁訪問日誌,把每行詳情頁訪問日誌中$5
【空格分割的第五個字符串,本實例就是以/log?
開頭的字符串】去匹配一個正則.*uc_name%2522%253A%2522(.*)%2522%252C%2522etype.*
,並把結果放到變量a
中【a[0]是全匹配,a[1]是第一個字表達式】,然後把匹配成功符合結果的a[1]
輸出 -
sort
將上述結果排序 [一定要排序,不然去重無效,只會去除相鄰的重複項] -
uniq -c
將上述結果去重 -
wc -l
查看總共結果數量