linux-grep-tail-find
如果在只是想匹配模式的上下幾行,grep可以實現。
$grep -5 'parttern' inputfile //列印匹配行的前後5行
$grep -C 5 'parttern' inputfile //列印匹配行的前後5行
$grep -A 5 'parttern' inputfile //列印匹配行的後5行
$grep -B 5 'parttern' inputfile //列印匹配行的前5行
檢視mysql慢日誌中ip地址為192.168.0.10傳送過來的SQL語句的後面三行
- tail -50 /usr/local/mysql/data/sql-slow.log |grep -3 '192.168.0.10'
匹配php錯誤日誌中某一個欄位
2,tail -100 /data/logs/php/php_error_5.3.log | grep "Memcache::get()";
檢視某一個檔案第5行和第10行
sed -n '5,10p' filename 這樣你就可以只檢視檔案的第5行到第10行。
========================================================================================
1、tail -f filename
說明:監視filename檔案的尾部內容(預設10行,相當於增加引數 -n 10),重新整理顯示在螢幕上。退出,按下CTRL+C。
2、tail -n 20 filename
說明:顯示filename最後20行。
3、tail -r -n 10 filename
說明:逆序顯示filename最後10行
========================================================================================
對日誌記錄做多次grep過濾輸出,格式如下:
tail -f log | grep xxx | grep yyy
發現grep失效,無法做正確輸出。google研究了一下,原因如下:
管道 | 是全緩衝的,一般來說buffer_size為4096,有些是8192。不管具體值多少,只有buffer_size滿了,才會看到輸出。
在操作裡 >>file 這個操作也是全緩衝的。調整如下
tail -f log | grep --line-buffer xxx | grep --line-buffer yyy
結果輸出正常。
grep當帶上了 --line-buffer 的時候,每輸出一行,就重新整理一次。
在unix裡,塊裝置和普通檔案,以及管道都是全緩衝的。
對日誌分析告警和實時監控可以考慮如下形式:
tail -f $LOGF | while read var
do
case "$var" in
...
...
esac
done
========================================================================================
標準unix/linux下的grep通過下面引數控制上下文
grep -C 5 foo file 顯示file檔案裡匹配foo字串那行以及上下5行
grep -B 5 foo file 顯示foo及前5行
grep -A 5 foo file 顯示foo及後5行
檢視grep版本號的方法是
grep -V
========================================================================================
grep 後面帶上-A -B -C 引數可以多顯示幾行內容
grep -A 5 可以顯示匹配內容以及後面的5行內容
grep -B 5 可以顯示匹配內容以及前面的5行內容
grep -C 5 可以顯示匹配內容以及前後面的5行內容
$ cat size.txt
b124230
b034325
a081016
m7187998
m7282064
a022021
a061048
m9324822
b103303
a013386
b044525
m8987131
B081016
M45678
B103303
BADc2345
$ cat size.txt | grep 'a022021'
a022021
$ cat size.txt | grep 'a022021' -C 2
m7187998
m7282064
a022021
a061048
m9324822
$ cat size.txt | grep 'a022021' -B 2
m7187998
m7282064
a022021
$ cat size.txt | grep 'a022021' -A 2
a022021
a061048
m9324822
========================================================================================
1.目錄操作:
(1)cd (切換目錄)
cd ~ 回到主目錄
cd 回到主目錄
cd .. 回到上層目錄
cd - 回到剛才的目錄
cd /var/spool/mail 絕對路徑
cd ../mqueue 相對路徑(由/var/spool/mail 轉到/var/spool/mqueue這樣寫)
(2)pwd (顯示當前目錄)
pwd 顯示當前目錄
pwd -P 顯示當前目錄(不以連線檔案的資料顯示,而是顯示正確的完整路徑)
(3)mkdir (新建一個新目錄)
mkdir -p test1/test2/test3 建立多層目錄
mkdir -m 777 test2 新建許可權777的目錄
(4)rmdir (刪除一個空目錄)
rmdir test 刪除空資料夾test
rmdir -p test1/test2/test3 刪除test1/test2/test3
2.檔案與目錄管理
(1)檢視檔案目錄(ls)
ls -a 列出全部檔案,包括隱藏檔案
ls -A 列出全部檔案,包括隱藏檔案,不包括.與..兩個目錄
ls -d 僅列出目錄本身,不包括其中檔案資料
ls -l 列出長串資料,包含檔案屬性與許可權
ls -R 按檔案容量大小排序
ls -t 按時間排序
ls --color=never 不顯示顏色(always顯示顏色,auto自動判斷)
ls --full-time 以完整時間模式輸出
(2)複製、刪除與移動(cp,rm,mv)
cp -a /var/log/wtmp wtmp_test 將檔案所有特性複製過去
cp /var/log/wtmp . 複製到當前目錄
cp -i 若目標檔案存在,則覆蓋時先詢問操作的進行
cp -p 連同檔案屬性一起復制
cp -r 目錄的複製
cp -d 若原始檔作為連線檔案的屬性,則複製連線檔案屬性而非連線檔案本身
cp -s 複製成為符號連線檔案
rm -i 互動模式,刪除前詢問使用者是否操作
rm -f 忽略不存在的檔案,不會出現警告資訊
rm -r 遞迴刪除
mv -f 如果目標檔案存在,不會詢問而直接覆蓋
mv -i 如果目標檔案存在,則詢問是否覆蓋
mv -u 如果目標檔案存在,且source比較新,則覆蓋
(3)取得路徑檔名與目錄名稱
basename /etc/systemd/network 取得最後的檔名(network)
dirname /etc/systemd/network 取得目錄名(/etc/systemd)
3.檔案內容查閱
(1)直接檢視檔案內容
cat 由第一行開始顯示內容
cat -A 完整顯示,包含特殊字元
cat -b 列出行號(空白行不標行號)
cat -n 打印出行號(包括空白行)
tac 反向顯示,與cat相反
nl 新增行號列印
nl -b a 打印出行號(包括空白行),類似cat -n
nl -b t 如果有空行,空的那行不列出行號
nl -n ln 行號在螢幕坐方顯示
nl -n rn 行號在欄位右方顯示,不加0
nl -n rz 行號在欄位右方顯示,加0
nl -w 3 行號預設欄位改為3位
(2)可翻頁檢視
more /etc/manpath.config 檢視檔案資訊(空格翻頁,enter鍵向下滾動一行,/字串向下查詢,:f立刻顯示檔名及目前顯示行數,b往回翻頁,q離開)
less /etc/manpath.config 檢視檔案資訊(空格/pageup上翻,pagedown下翻,/字串向下查詢,?字串向上查詢,n重複查詢,N反向重複,q離開)
(3)資料選取
head -n 10 /etc/manpath.config 顯示前10行(不加-n 10也是預設顯示前10行)
head -n -10 /etc/manpath.config 顯示前面所有行數,不包括後10行
tail -n 20 /etc/manpath.config 顯示最後20行
tail -n +20 /etc/manpath.config 顯示後面所有行數,不包括前20行
tail -f 持續檢測行數,直到按下ctrl+c
(4)非文字檔案
od -t a 預設字元輸出
od -t c ASCII字元輸出
od -t d 十進位制輸出(f浮點數,o八進位制,x十六進位制)
od -t oCc /etc/issue 八進位制列出儲存值與ASCII對照表
(5)修改檔案時間或者建立新檔案
touch test 新建一個新檔案test
touch -a 修改訪問時間
touch -c 僅修改檔案時間,若檔案不存在則不建立新檔案
touch -m 修改mtime
touch -d "2 days ago" test test檔案日期調整為兩天前
touch -t 1503151820 test test檔案時間調整為2015.3.15 18:20
4.預設許可權與隱藏許可權
umask 002 預設許可權去除的是其他人許可權的w許可權
chattr +i test 設定test檔案的隱藏屬性(不能被刪除、改名、寫入新增資料,僅root使用者可設定)
chattr +a test 設定test檔案的隱藏屬性(只能新增資料,不能刪除、修改,僅root使用者可設定)
chattr -a test 取消test檔案的隱藏屬性
lsattr test 顯示test檔案隱藏屬性
file test 檢視檔案型別
5.命令與檔案的查詢
which ifconfig 找出ifconfig命令的完整檔名
whereis ifconfig 尋找ifconfig這個檔案
locate ifconfig 尋找與ifconfig相關的檔案
find /etc -mtime 3 3天前的一天之內改過的檔案
find /etc -mtime -3 3天之內改過的檔案(不包括第3天)
find /etc -mtime +3 3天之前改過的檔案(不包括第3天)
find /etc -newer /etc/passwd 尋找/etc下比passwd日期新的檔案並列出
find / -nouser 尋找系統中不屬於任何人的檔案
find /home -user root 尋找/home下屬於root的檔案
find /etc -name test 尋找/etc下名為test的檔案
find / -size +100k 尋找系統中大於100k的檔案
find / -size +100k -exec ls -l {} \; 將上面找到的檔案用ls -l列出來