ºìÁªLinuxÃÅ»§
Linux°ïÖú

Linux lsof toolѧϰ±Ê¼Ç

·¢²¼Ê±¼ä:2014-06-22 10:20:37À´Ô´:ºìÁª×÷Õß:velcbo
1. lsofÊÇʲô£¿

lsofÊÇLinuxÏÂÃæÒ»¸ötool£¬ÓÃÀ´Áгöµ±Ç°ÏµÍ³ÖÐËù´ò¿ªµÄÎļþ£¬ÕâЩÎļþ°üÀ¨Õý¹æÎļþ¡¢Ä¿Â¼¡¢¹ÜµÀ¡¢×Ö·ûÉ豸¡¢¿éÉ豸¡¢unix socketµÈµÈ¡£

2. ÄÇlsofÓÐʲô×÷ÓÃÄØ£¿

(1)ÄãµÄ³ÌÐòÓÐûÓгöÏÖ¹ýopenÎļþʧ°ÜµÄÇé¿ö£¿ÄÇÎÒÃÇ¿ÉÒÔͨ¹ýlsofÀ´²é¿´ÏµÍ³ÖÐÒѾ­openÁ˶àÉÙÎļþ£¬»á²»»á¸úÕâÓйØÏµ¡£

´ÓÒÔϵĽá¹ûÄã¿ÉÒÔ¿´µ½ÏµÍ³Ô¤ÉèµÄ×î´óopen filesÊÇ1024¸ö£¬ËùÒÔÈç¹ûÄãÒѾ­´ò¿ªÁË1024¸öÎļþÁË£¬ÄǾͻáopenʧ°ÜÁË¡£

ͨ³£·¢Éú´ËÎÊÌâµÄÔ­Òò¶¼ÊdzÌÐòÖе÷ÓÃÁËopen£¬µ«ÊÇÓÃÍêÎļþÖ®ºóȴûÓÐÈ¥close¡£

sh-# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 2293
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 2293
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited

ÎÒÃÇ×ö¸öÊÔÑ飬¹ÊÒ⽫open filesÊýÄ¿¸ÄΪ1£¬Äã»á·¢Ïֺܶàlinux commandÒѾ­ÎÞ·¨ÔËÐÐÁË¡£

sh-# ulimit -n 1
sh-# ls
ls: error while loading shared libraries: librt.so.1: cannot open shared object file: Error 24
sh-# busybox which
busybox: error while loading shared libraries: libm.so.6: cannot open shared object file: Error 24

(2)´ÓlsofµÄÖ´Ðнá¹û£¬ÎÒÃÇÒ²¿ÉÒÔ¿´µ½ÓÐÄÄЩuserÕýÔÚʹÓõ±Ç°µÄfile system£»»òÕßÊǵ±Ç°file systemÖÐÓÐÄÄЩÒѾ­±»´ò¿ªµÄÎļþ¡£

sh-# umount /mnt/sda1/
umount: /mnt/usb/sda1: device is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))

µ±unmountÒ»¸öfile systemʧ°Üʱ£¬¿ÉÒÔʹÓÃlsofÀ´²é¿´ÄãµÄfile systemÊÇ·ñÈÔÈ»ÓÐÕýÔÚopen×ŵÄÎļþ¡£

sh-# ./lsof /mnt/sda1/
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ooxx 537 root 46r REG 8,1 6 45 /mnt/sda1/test.txt

¿ÉÒÔ¿´µ½ÓÐÒ»¸ötest.txtÊÇ´ò¿ªµÄ£¬ËùÒÔÐèÒªÏÈcloseÕâ¸öÎļþÔÙÈ¥unmount²ÅÄܳɹ¦¡£

(3)ÓÐʱºòÎÒÃÇÄܹ»Ê¹ÓÃlsofÀ´»Ö¸´ÄÇЩÒѾ­É¾³ýµô(±ÈÈç˵Îóɾ)µÄµµ°¸£¬ÎªÊ²Ã´ÄÜ×öµ½£¿

ÕâÊÇÒòΪÕâЩopenµÄÎļþÔÚRAMÖж¼ÓжÔÓ¦µÄÓ³Ïñ£¬ËùÒÔÎÒÃǾͿÉÒÔÓÃ/procÕâ¸öÌØÊâµÄfile systemÀ´»Ö¸´£¬¾ßÌå²½ÖèÊÇ£º

a. ʹÓÃlsof²éµ½Äĸöprocess´ò¿ªÁËÕâ¸öµµ°¸£¬ÒÔ¼°Õâ¸ö±»´ò¿ªµµ°¸µÄfile descriptor£º
sh-3# ./lsof | grep test.txt
process_name 747 root 46r REG 8,1 6 45 /mnt/sda1/test.txt (deleted)
process_name 747 541 root 46r REG 8,1 6 45 /mnt/sda1/test.txt (deleted)

b. ½ÓÏÂÀ´Äã»á·¢ÏÖÕâ¹ûÈ»¾ÍÊÇÄã֮ǰɾµôµÄÎļþµÄÄÚÈÝ£º

sh-# cat /proc/747/fd/46
dfdfd

c. ½«Õâ¸öÎóɾµÄµµ°¸Ð¡ÐÄÒíÒíµÄ´æ»ØÈ¥£º

sh-3.2# cat /proc/537/fd/46 > /mnt/usb/sda1/restore.txt
sh-3.2# cat /mnt/usb/sda1/restore.txt
dfdfd

ÒÔÉÏÊǸöÈËѧϰ¹ý³ÌÖеÄһЩÐĵúÍÓ¦Óã¬Êµ¼ÊÉÏlsofÕâ¸ötoolµÄ¹¦ÄÜÊǷdz£·Ç³£µÄÇ¿´ó¡£

ºóÃæÈç¹ûÓÐеÄÓ¦Ó㬻áÔÙ·ÖÏí³öÀ´£»Èç¹ûÓÐÈκÎÎÊÌ⣬·Ç³£»¶Ó­Ìá³öÀ´ÌÖÂÛ£¬Ð»Ð»¡£

×÷Õߣºboyxulin1986
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 0 ÌõÆÀÂÛ