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