Pages

2011年12月28日 星期三

Unix-like Command

Join
範例一
$ cat a
3 aa
5 uu
4 bb
7 38
2 oo

$ cat b
uu test
38 abc
oo def

$ sort -k 2 a | sed "s/ /:/" > a.sorted  # 將主 key 做排序, 並將空白變成 ":"
7:38
3:aa
4:bb
2:oo
5:uu

$ sort b | sed "s/ /:/" > b.sorted  # 將主 key 做排序, 並將空白變成 ":"
38:abc
oo:def
uu:test

join -t ":" -1 2 a.sorted -2 1 b.sorted  # 或 join -t: -1 2 a.sorted -2 1 b.sorted 皆可
38:7:abc
oo:2:def
uu:5:test

解釋上述 join 命令的意思:
-t: 或 -t ":" : 依照 ":" 做切割欄位
-1 2 a.sorted : 第一個檔案 a.sorted, 要拿他的第二欄出來
-2 1 b.sorted : 第二個檔案 b.sorted, 要拿他的第一欄出來
這樣子就會把這兩個檔案抽出來的欄位做 match(join), 就會是結果。

cut
用來將檔案每一行的內容切掉部份,只留下關切的部份。
-d:分割方式,如 -d ':' 代表以分號來做切割。
-f+數字:取第幾個欄位,如 -f1 代表切割出來的 token 只要第一個。


範例一
cut -d ':' -f1 /etc/passwd
--
root
daemon
bin
sys
sync
games
man
...

範例二
ls -l | cut -c 1-10
--
total 201
drwxr-xr-x
drwxr-xr-x
-rw-r--r--
-rw-r--r--

netstat

用來列舉出目前系統啟動的網路服務
netstat -utln


pgrep
取得 process 某項屬性,例如以下例子就是取得 Dualview-Daemon 這個程式的 pid,而 -x 參數代表要 match 程式名稱,在此指 Dualview-Daemon。

pgrep -x Dualview-Daemon
--
10327


echo
X="12345"; echo ${X:0:1} 
--
1

sed
sed -e '12d' xxx # 將第 12 行清掉
sed -e '1,5d' xxx # 將第 1 ~ 5 行清掉
sed -e '1,5d' -e 's/test/check/' # 第 1 ~ 5 行清掉, 並將 test 取代成 check

awk
範例一
awk -F: -v 'OFS=:' '{ print $1, $5}' /etc/passwd
(-v 是設 OFS變數, OFS=中間間隔要用何種符號秀出來)

範例二
awk '!(NR>=1 && NR<=5){print $0}' xxx # 將第 1 ~ 5 行清掉

範例三
cat access.log | awk '{sum += $10} END {print sum}

find
範例一
find . -name '*.tmp' -exec rm {} \;


範例二 ( -a = AND)
find / \( -type d -a -user leslie \)

範例三 ( -o = OR)
find / \( -name a.out -o -name '*.o' \) -atime +7 -exec rm {} \; 

範例四 找出特定檔案中的特定片段
find ~/linux/kernel/ -name '*.c' -exec grep -H 'printk' {} \;
mount

範例一 掛載映像檔 (如有修改 image 的內容,記得要 umount)
mount -o loop system.img /media/mydir

範例二
mount -o remount,rw /system

[註] yaffs2 的映像檔格式無法 mount;ext2, ext3 可以。

gzip
範例一 (解開)
make tmp
cd tmp
cat ../ramdisk.img | gzip -cd - | cpio -id

範例二 (封裝)
find . | cpio -H newc -o | gzip > ../new_ramdisk.img 

ps
ps -aux | grep 'apache' | awk '{print $2}'

dd
mkisofs -o -r /output_dir/filename.iso /input_dir/
或者
dd if=/dev/dvd of=output_dir/filename.iso
dd if=/dev/cdrom of=output_dir/filename.iso

沒有留言:

 
Blogger Templates