夕口技術錄

專業上的小常識,備而用之~

Category Archives: Linux

[Linux][find] – 用法

●找 /根目錄下的某 檔名
# find / -name ooxx

●找出檔案大於 1G 的檔案後,交由 rm -rf 處理後結束
# find / -size +1000M -exec rm -rf {} \;
-exec:-exec 一直到 \; 是關鍵字,代表 find 額外動作的開始 (-exec) 到結束 (\;) ,例上 rm -rf 就是額外動作
; :在 bash 環境下是有特殊意義的,因此利用反斜線來跳脫 \;。
{}:『由 find 找到的內容』,結果會被放置到 {} 位置中

●搜尋 /home 底下屬於 vbird 的檔案
# find /home -user siko

●搜尋系統中不屬於任何人的檔案
# find / -nouser

●找出 /var 目錄下,檔案類型為 Socket 的檔名有哪些?
# find /var -type s
搜尋檔案的類型為 TYPE 的,
類型主要有:一般正規檔案 (f), 裝置檔案 (b, c), 目錄 (d), 連結檔 (l), socket (s), FIFO (p) 等屬性。

[Linux][pid] – 用 pid 反查是誰開啟的

問題:大部份都是用 ps 或 pidof 去查 程式 所執行的pid為何,但如要反向查詢呢?

# ps ax | grep snort
28180 ?        S      0:01 /usr/local/eqit/netsecure/bin/snortc -l /usr/local/eqit/netsecure/log

解答:

方式1 ->
# ps -p 28180
PID TTY          TIME CMD
28180 ?        00:00:01 snortc


方式2->
# ps ax | grep ‘^13241’
13241 pts/3    S      0:00 /usr/local/eqit/foundation/bin/sflowtool -p 6342 -t

閱讀全文

[dd] – 用 dd 做塞爆硬碟測試

測試硬碟滿載的方式,
常用一些東西來塞爆
或改用 dd 來達成

作用: 製造一個 file(filename: hugefile), 內容都塞 0, 塞到 470Mb 為止, 語法如下

dd if=/dev/zero of=/hugefile count=470M obs=4096

of: filename
count: 塞 470MB
obs: 每個 black 要 4096 bytes

dd if=/dev/zero of=/hugefile count=470m obs=4096

[Linux][zip] – 加解密 指命

檔案:
zip -e -p test.zip test.txt 

目錄:
zip -e -r -p aaa.zip /home/aaa/*

-r     将指定的目录下的所有子目录以及文件一起处理

解密:
unzip aaa.zip

[Linux][SSH] – 登錄慢(卡很久)問題

# vi /etc/ssh/sshd_config
UseDNS no
GSSAPIAuthentication no

有時會在某主機發現 ssh 登錄系統慢

原因在於 ssh-server端設置了UseDNS yes GSSAPIAuthentication yes (認證),當DNS(/etc/resolv.conf)有問題時,導致登錄過程緩慢。

[Linux][pcap.h] – error: pcap.h: No such file or directory

在 rebuild 套件時遇到這個錯誤
error: pcap.h: No such file or directory

解決方式
#yum -y install libpcap-devel //安裝 libpcap-devel 套件 (/usr/include/pcap.h)
#rpm -ql libpcap-devel //列出此套件安裝了哪些檔案
/usr/include/pcap-bpf.h
/usr/include/pcap-namedb.h
/usr/include/pcap.h
/usr/lib/libpcap.a
/usr/lib/libpcap.so

[Linux] – 查詢已開啟檔案或已執行程序開啟之檔案

fuser:藉由檔案(或檔案系統)找出正在使用該檔案的程序
[root@www ~]# fuser [-umv] [-k [i] [-signal]] file/dir
選項與參數:
-u  :除了程序的 PID 之外,同時列出該程序的擁有者;
-m  :後面接的那個檔名會主動的上提到該檔案系統的最頂層,對 umount 不成功很有效!
-v  :可以列出每個檔案與程序還有指令的完整相關性!
-k  :找出使用該檔案/目錄的 PID ,並試圖以 SIGKILL 這個訊號給予該 PID;
-i  :必須與 -k 配合,在刪除 PID 之前會先詢問使用者意願!
-signal:例如 -1 -15 等等,若不加的話,預設是 SIGKILL (-9) 囉!

範例一:找出目前所在目錄的使用 PID/所屬帳號/權限 為何?
[root@www ~]# fuser -uv .
                     USER        PID ACCESS COMMAND
.:                   root      20639 ..c.. (root)bash

範例:
直接將 /usr/local/server/bin/httpd 依找出的PID kill -9
[root@serverX64 data]# fuser -k /usr/local/server/bin/httpd
/usr/local/server/bin/httpd: 17717e 17796e 17797e 17798e 17852e
將 /usr/local/server/bin/httpd 找出PID 經由詢問後才 kill -9
[root@seerverX64 data]# fuser -ki /usr/local/server/bin/httpd
/usr/local/server/bin/httpd: 13397e 13399e 13400e 13402e 13404e 13406e
Kill process 13397 ? (y/N) n
Kill process 13399 ? (y/N) n
Kill process 13400 ? (y/N) n
Kill process 13402 ? (y/N) n
Kill process 13404 ? (y/N) n
Kill process 13406 ? (y/N) n

lsof :列出被程序所開啟的檔案檔名
相對於 fuser 是由檔案或者裝置去找出使用該檔案或裝置的程序,反過來說, 如何查出某個程序開啟或者使用的檔案與裝置呢?就是使用 lsof

[root@www ~]# lsof [-aUu] [+d]
選項與參數:
-a  :多項資料需要『同時成立』才顯示出結果時!
-U  :僅列出 Unix like 系統的 socket 檔案類型;
-u  :後面接 username,列出該使用者相關程序所開啟的檔案;
+d  :後面接目錄,亦即找出某個目錄底下已經被開啟的檔案!

範例一:列出目前系統上面所有已經被開啟的檔案與裝置:
[root@www ~]# lsof
COMMAND PID  USER   FD  TYPE  DEVICE   SIZE     NODE NAME
init      1  root  cwd   DIR     3,2   4096        2 /
init      1  root  rtd   DIR     3,2   4096        2 /
init      1  root  txt   REG     3,2  38620  1426405 /sbin/init
....(底下省略)....
# 注意到了嗎?是的,在預設的情況下, lsof 會將目前系統上面已經開啟的
# 檔案全部列出來~所以,畫面多的嚇人啊!您可以注意到,第一個檔案 init 執行的
# 地方就在根目錄,而根目錄,嘿嘿!所在的 inode 也有顯示出來喔!

範例二:僅列出關於 root 的所有程序開啟的 socket 檔案
[root@www ~]# lsof -u root -a -U
COMMAND     PID USER   FD   TYPE     DEVICE SIZE   NODE NAME
udevd       400 root    3u  unix 0xedd4cd40        1445 socket
auditd     4256 root    7u  unix 0xedd4c380        9081 socket
audispd    4258 root    0u  unix 0xedd4c1e0        9080 socket
# 注意到那個 -a 吧!如果你分別輸入 lsof -u root 及 lsof -U ,會有啥資訊?
# 使用 lsof -u root -U 及 lsof -u root -a -U ,呵呵!都不同啦!
# -a 的用途就是在解決同時需要兩個項目都成立時啊! ^_^

範例三:請列出目前系統上面所有的被啟動的周邊裝置
[root@www ~]# lsof +d /dev
COMMAND     PID      USER   FD   TYPE     DEVICE SIZE  NODE NAME
init          1      root   10u  FIFO       0,16       1147 /dev/initctl
udevd       400      root    0u   CHR        1,3       1420 /dev/null
udevd       400      root    1u   CHR        1,3       1420 /dev/null
udevd       400      root    2u   CHR        1,3       1420 /dev/null
# 看吧!因為裝置都在 /dev 裡面嘛!所以囉,使用搜尋目錄即可啊!

範例四:秀出屬於 root 的 bash 這支程式所開啟的檔案
[root@www ~]# lsof -u root | grep bash
bash   20639 root  cwd    DIR    3,2    4096    648321 /root
bash   20639 root  rtd    DIR    3,2    4096         2 /
bash   20639 root  txt    REG    3,2  735004   1199424 /bin/bash
bash   20639 root  mem    REG    3,2   46680     64873 /lib/libnss_files-2.5.so
....(底下省略)....

pidof :找出某支正在執行的程式的 PID

[root@www ~]# pidof [-sx] program_name
選項與參數:
-s  :僅列出一個 PID 而不列出所有的 PID
-x  :同時列出該 program name 可能的 PPID 那個程序的 PID

範例一:列出目前系統上面 init 以及 syslogd 這兩個程式的 PID
[root@www ~]# pidof init syslogd
1 4286
# 理論上,應該會有兩個 PID 才對。上面的顯示也是出現了兩個 PID 喔。
# 分別是 init 及 syslogd 這兩支程式的 PID 啦。

[Linux][shell][grep][[xargs]][sed] – 多檔案一次置換取代字元指令

基本找尋 txt-02 字串指令
[root@X64 smarty]# grep -rl “txt-02″ *
snort/view.htm
snort/add.htm
adgroup/view.htm

找尋 txt-02 字串 + 多檔案一次置換取代字元指令
# grep -rl “txt-06″ * | xargs sed -i ‘s/txt-06/txt-02/g’

sed -i 使用充補 :直接修改檔案內容(危險動作)

sed 可以直接修改檔案的內容!
而不必使用管線命令或資料流重導向!
不過,由於這個動作會直接修改到原始的檔案,
所以請你千萬不要隨便拿系統設定檔來測試喔!

範例六:利用 sed 將 regular_express.txt 內每一行結尾若為 . 則換成 !
[root@www ~]# sed -i 's/\.$/\!/g' regular_express.txt
# 上頭的 -i 選項可以讓你的 sed 直接去修改後面接的檔案內容而不是由螢幕輸出喔!
# 這個範例是用在取代!請您自行 cat 該檔案去查閱結果囉!

範例七:利用 sed 直接在 regular_express.txt 最後一行加入『# This is a test』
[root@www ~]# sed -i '$a # This is a test' regular_express.txt
# 由於 $ 代表的是最後一行,而 a 的動作是新增,因此該檔案最後新增囉!

sed 的『 -i 』選項可以直接修改檔案內容
舉例來說,如有一個 100 萬行的檔案,要在第 100 行加某些文字,此時使用 vim 可能會瘋掉!因為檔案太大了!這時就可利用 sed 透過 sed 直接修改/取代的功能!

參考資料:鳥哥 – sed 工具

[Linux][while] – shell while loop commend

# while :; do free -m; sleep 1; done

紫色:要 查看 的指令集

ex.

  • while :; do ps -eo pid,ni,pri,pcpu,psr,comm | grep ‘apache’; sleep 1; done # 看 Aaache
  • while :; do ps -eo pid,ni,pri,pcpu,psr,comm | grep ‘mysql’; sleep 1; done # 看 MySQL

[Linux][while] – shell while loop commend

# while :; do free -m; sleep 1; done

紫色:要 查看 的指令集

ex.

  • while :; do ps -eo pid,ni,pri,pcpu,psr,comm | grep ‘apache’; sleep 1; done # 看 Aaache
  • while :; do ps -eo pid,ni,pri,pcpu,psr,comm | grep ‘mysql’; sleep 1; done # 看 MySQL