| ÄúµÄλÖãºÊ×Ò³ > Îĵµ > ±à³Ì¼¼Êõ > |
ÎÄÕ·ÖÀàÈÈÃÅÎÄÕ |
Unix±à³Ì/Ó¦ÓÃÎÊ´ðÖÐÎİ洴½¨£º2005-10-26 16:54:02 ×÷ÕߣºUnlinux À´×Ô: http://www.Unlinux.com Ãû³Æ -- Unix±à³Ì/Ó¦ÓÃÎÊ´ðÖÐÎÄ°æ °æ±¾ -- 0.03 ( 2002-03-06 Íâ·¢°æ ) ά»¤ -- СËÄ <scz@nsfocus.com> Ö÷Ò³ -- http://www.nsfocus.com ´´½¨ -- 2001-02-05 13:49 ¸üР-- 2002-03-03 17:42 ¸Ðл -- ¸ÐлCÓïÑԵķ¢Ã÷Õß¡¢Unix²Ù×÷ϵͳµÄ·¢Ã÷Õß¡¢¸ÐлȫÊÀ½çC³ÌÐòÔ±´´ÔìµÄUnix¹² Ïí´«Í³ÎÄ»¯È¦£¬ËýÊÇÈç´ËÇ¿´ó¡¢³äÂú½û¼É¡¢¶øÓÖ÷ÈÁ¦ËÄÉä¡£ ¸ÐлÎÒµÄÅóÓÑ£¬deepin <deepin@nsfocus.com>£¬ÔÚÕû¸öά»¤¹ý³ÌÖеÄÖ§³Ö¡¢°ï ÖúºÍ¹ÄÀø¡£¸ÐлÎÒËùÓеÄNSFocus°²È«Ñо¿Ð¡×éµÄÅóÓÑ(tt¡¢yuange¡¢security@ nsfocus.com ... ...)£¬ÊÇËûÃÇÈÝÈÌÎÒÔÚÕâ¸ö·ÇÕýÒµÉÏ»¨·Ñʱ¼ä¡£ Ö÷ÒªÖ§³ÖÈËÔ±(×Öĸ˳Ðò) -- Andrew Gierth <andrew@erlenstar.demon.co.uk> backend <backend@nsfocus.com> Casper Dik <Casper.Dik@Holland.Sun.COM> deepin <deepin@nsfocus.com> scz <scz@nsfocus.com> suxm <suxm@gnuchina.org> tt <warning3@nsfocus.com> ¼ò½é -- Õâ·ÝÎĵµ²»ÊÇFAQ(Frequently Answered Question)£¬²»ÉÙÎÊÌâÊôÓÚFUQ(Freque- ntly Unanswered Question)¡£»»¾ä»°Ëµ£¬²»Ò»¶¨ÊÇ×î³£¼ûµÄ±à³Ì¡¢Ó¦ÓÃÎÊ´ð£¬ºÜ¿É ÄÜÆäÖеĴð°¸ÉÐÊÇÒ»¸ö¹¹Ë¼£¬»¹Ã»ÓгÉΪÏÖʵ£¬ÓÖ»òÕ߸ù±¾ÊǸö´íÎóµÄ˼Ïë»ð»¨¡£µ« ÊÇ£¬ËýµÄÈ·ÔÚÊÔͼ»Ø´ðһЩºÜÓÐÒâÒåµÄÎÊÌ⣬Èøü¶àµÄUnix/C³ÌÐòÔ±¡¢ÏµÍ³¹ÜÀíÔ±¹² Ïí±Ë´ËµÄÖǻۣ¬ÄÇÊÇÈýÊ®ÄêǰÎÞÊýǰ±²¾«Ó¢×öµ½¹ýµÄ£¬Ò²ÊÇÎÒÃÇÕýÊÔͼ×öµ½µÄ¡£ Q -- Question A -- Answer D -- Discuss ÉùÃ÷ -- ÓÀ¾Ã¾Ü¾øÈκÎÉÌÒµÐÔÖʵÄ×ªÔØ¡¢ÕªÂ¼¡¢ÒýÓá£ÔÚ²»¶ÔËùÓÐÎÄ×Ö×öÈκÎÐÞÕýµÄǰÌá Ï£¬ÔÊÐíÒ»ÇнÌÓýÐÔÖʵÄ×ªÔØ¡¢ÕªÂ¼¡¢ÒýÓã¬ÎÞÐëÌáǰ֪»áά»¤Õß(¾ÍÊÇme£¬faint)¡£ Ò»µ©³öÏÖÐèÒªÐÞÕýÎÄ×ÖµÄÇé¿ö£¬Ö»ÄÜͨ¹ýά»¤ÕßÐÞÕý¡£Î¬»¤Õß»áÔÚÏÂÒ»´Î°æ±¾Éý¼¶¹ý ³ÌÖÐÕýʽÔö¼ÓÕâÖÖÐÞÕý£¬±£ÁôÌṩÐÞÕýÕßÓ¦ÓÐÐÅÏ¢¡£Í¬Ê±Òâζ×ÅÌṩÐÞÕýÕßÓÀ¾Ã×ÔÔ¸ ·ÅÆúÉÌÒµÐÔÖʵÄËùÓÐÈ¨Òæ¡£²»½ÓÊÜÕâÖÖÌõ¼þµÄÌṩÐÞÕýÕߣ¬Îñ±ØÌáǰ֪»áά»¤Õߣ¬´Ë ÀàÐÞÕý½«²»³öÏÖÔÚÏÂÒ»´Î°æ±¾Éý¼¶ÖС£ ÎÄÖÐËù¸½¸÷ÖÖÔ´´úÂ룬ÔÚÑϸñÒâÒåÉÏ¿ÉÄÜ´æÔÚ°æÈ¨ÎÊÌ⣬ËùÒÔÊÂʵÉÏÕâ·ÝÎĵµ´ø ÓÐ"°ëµØÏÂ"ÐÔÖÊ£¬Ê¹ÓÃÕßÎñ±Ø×Ô¼ºÐ¡ÐľíÈë´ËÀà¾À·×¡£ ÎÄÖм¼Êõ¿ÉÄÜÉæ¼°Î´¹«¿ªµÄ¡¢Î´Îĵµ»¯µÄ¡¢·Ç¹æ·¶µÄ±à³Ì¡¢Ó¦Óýӿڣ¬ÎĵµÌṩ µÄÖØÔÚ˼Ï룬¶ø²»±£Ö¤ÊÇÕýÈ·¡¢¸ßЧ¡¢Î¨Ò»µÄ½â´ð¡£ ά»¤Õß²»¶ÔÎÄÖÐÈκμ¼ÊõÒýÆðµÄÈκÎÔÖÄÑÐÔºó¹û¸ºÈκη¨ÂÉÉϵġ¢µÀÒåÉϵÄÔðÈΡ£ Ok, Let's go. ¸¨Öú˵Ã÷ -- 2002-03-06 12:14 ¸¨Öú˵Ã÷Ö»ÔÚ"Íâ·¢°æ"ÖдæÔÚ£¬ÉÔ΢½âÊÍһϡ£ һֱûÓе¥¶À³öÒ»·ÝÍêÕûµÄ£¬ÔÒòºÜ¶à¡£Èç¹û¸éÔÚ1995/1996/1997ʱµÄCERNET£¬ ÕâЩÔÒò¶¼²»³ÉΪÔÒò£¬ÏÖÔÚ³ÉΪÔÒò¡£²»Ïë¶à˵Ϊʲô£¬Ã÷°×µÄ×ÔÈ»Ã÷°×£¬²» Ã÷°×µÄµ±ÎҰ׳պÃÁË£¬·´Õý±ðÎÊÎÒ¡£ ³öÓÚ"ÉùÃ÷"ÖеÄijЩÀíÓÉ£¬²»ÄÜÔÚµ¥·ÝÍêÕûÎĵµÖи½´ø¿ÉÄÜ»á´øÀ´Âé·³µÄÎÄ×Ö¡¢ ´úÂ룬±ÈÈçSolaris libproc±à³Ì½Ó¿Ú¡£µ«ÊÇ£¬ÔÚɢƪÖÐÄãÄÜÕÒµ½ËüÃÇ¡£Èç¹ûÄã Ô¸Ò⣬¿ÉÒÔ×Ô¼º½«É¢ÆªÊջص½¸ÃÎĵµÖУ¬Õ⽫ÓëÎÒÎ޹ء£Ò»ÇÐË÷Òª²Ðȱ²¿·ÖµÄÓÊ ¼þ¸Ç²»»Ø¸´¡£ ±¾·ÝÎĵµµÄ¾ø´ó¶àÊýÄÚÈÝÔÚ"Öйú½ÌÓý¿ÆÑÐÍø»ªÄϵØÇøÍøÂçÖÐÐÄBBS"(bbs.gznet. edu.cn)µÄSolaris°æ·¢²¼¹ýÁË£¬°üÀ¨ÏÂÃæ´¦ÀíµôµÄĿ¼ÁÐ±í¡£ÊǸðæÇ°°æÖ÷CPU ʦÐÖµ±ÄêµÄ·ç·¶´ÙʹÎÒ¿ªÊ¼ÕûÀíÕâ·ÝÎĵµµÄ£¬µ±»¹ÎôÈÕÖ¸½ÌÖ®ÇéÒê¡£ ¸Ã·ÝÎĵµ"ÔÊÐíÒ»ÇнÌÓýÐÔÖʵÄ×ÔÓÉ×ªÔØ¡¢ÕªÂ¼¡¢ÒýÓã¬ÎÞÐëÌáǰ֪»áά»¤Õß"¡£ ÎÒÒ²Ö»ÊÇÒåÎñά»¤Ò»Ï£¬²»¶Ô±¾ÎĵµÓµÓÐÈκÎÈ¨Òæ¡£Èç¹û²»ÐÒDZÔÚÓµÓжø¼ṳ̀ÁË Ä³ÖÖÐÅÄÔÚÄã¿´µ½¸Ã¸¨Öú˵Ã÷µÄͬʱ£¬ÎÒ½«×Ô¶¯·ÅÆúÕâÖÖDZÔÚ¿ÉÄÜÓµÓеÄÈ¨Òæ¡£ ͬʱÒâζ×ÅÒ»ÇÐÒò±¾Îĵµ´øÀ´µÄÂé·³£¬½«ÓÉÄã¸öÈ˳е£¡£ ¼ÈÈ»À´×ÔUnix¹²Ïí´«Í³ÎÄ»¯È¦£¬¾ÍÈÃËü³¹µ×»Øµ½Unix¹²Ïí´«Í³ÎÄ»¯È¦ÖÐÈ¥°É¡£ »¶ÓÒ»Çн¨ÉèÐԵġ¢·ÇË÷ÒªÐÔÖʵÄEmail½»Á÷¡£ -------------------------------------------------------------------------- Ŀ¼ 0. Unix/C´«ÆæÎÊÌâ 0.1 Dennis Ritchie ºÍ Ken Thompson 0.2 W. Richard Stevens Ö®ËÀ 1. ϵͳ¹ÜÀíÅäÖÃÎÊÌâ 1.1 ÈçºÎ¸øSUN¹¤×÷Õ¾Ôö¼ÓeepromÓ²¼þ¿ÚÁî±£»¤ 1.2 ÈçºÎÔö¼Ó½»»»¿Õ¼ä 1.3 ΪʲôÎÒ²»ÄÜÔÚ/homeĿ¼Ï´´½¨×ÓĿ¼ 1.4 ÈçºÎ¸Ä±äһ̨Ö÷»úµÄlocale 1.5 Solaris 7×Ô¶¯×¢Ïú 1.6 Ò»¸öĿ¼ӵÓÐsetgidÉèÖã¬ÔõôÀí½â 1.7 ·ÇSun ConsoleÉÏÓÐÎ޵ȼÛStop-AµÄ°´¼ü 1.8 ÈçºÎÈÃÒ»¸öÓû§Ö»ÄÜftp¶øÎÞ·¨telnet 1.9 1.10 ΪʲôSun¹¤×÷Õ¾·ÇÒªÊäÈëbootÃüÁî²ÅÄÜÆô¶¯ 1.11 ÈçºÎÈÃSolarisʶ±ðÐÂÔö¼ÓµÄÓ²¼þ 1.12 2. ¶ÑÕ»Ïà¹ØÎÊÌâ 2.1 ÈçºÎÀí½âpstackµÄÊä³öÐÅÏ¢ 2.2 2.3 SolarisÖÐÈçºÎ»ñȡһ¸öC³ÌÐòµÄµ÷ÓÃÕ»»ØËÝ 2.4 ÈçºÎ±à³Ì»ñȡջµ×µØÖ· 2.5 ÈçºÎµÃµ½Ò»¸öÔËÐÐÖнø³ÌµÄÄÚ´æÓ³Ïñ 2.6 µ÷ÊÔÆ÷ÈçºÎ¹¤×÷µÄ 2.7 x86/LinuxÉÏÈçºÎ´¦ÀíSIGFPEÐźŠ3. -lelf¡¢-lkvm¡¢-lkstatÏà¹ØÎÊÌâ 3.1 ÈçºÎÅжϿÉÖ´ÐÐÎļþÊÇ·ñЯ´øÁ˵÷ÊÔÐÅÏ¢ 3.2 mprotectÈçºÎÓà 3.3 mmapÈçºÎÓà 3.4 getrusageÈçºÎÓà 3.5 setitimerÈçºÎÓà 4. ϵͳ×ÊÔ´Ïà¹ØÎÊÌâ 4.1 Ö÷Á÷Unix²Ù×÷ϵͳÉÏÈçºÎ±à³Ì»ñÈ¡½ø³ÌµÄÄÚ´æ¡¢CPUÀûÓÃ×´¿ö 4.2 SolarisÏÂÈçºÎ»ñÖªCPUËÙÂÊ 4.3 ÈçºÎ±à³Ì»ñÈ¡Solarisϵͳµ±Ç°ÄÚ´æ´óС 5. ¿éÉ豸Ïà¹ØÎÊÌâ 5.1 CDROMÉ豸¾¿¾¹ÔÚÄÄÀï 5.2 ÈçºÎµ¯³ö¹âÇý 5.3 ÈçºÎÀûÓ󬼶¿é½øÐлָ´¹¤×÷ 5.4 Solaris Root¿ÚÁîÍü¼ÇÁË 5.5 ÈçºÎʹÓÃfmthard 5.6 ÈçºÎ´Ó¹âÅָ̻´Solaris 7µÄÒýµ¼ÉÈÇø 5.7 SolarisÖ§³ÖÀàËÆÎ¢Èíautorun.infÎļþµÄ¹¦ÄÜÂð 5.8 ÈçºÎÐÞ¸Ä/dev/nullµÄÊôÐÔ 5.9 5.10 ÈçºÎ×Ô¼ºÖÆ×÷SolarisÆô¶¯ÈíÅÌ 5.11 x86/SolarisÈçºÎ·ÃÎÊFAT32·ÖÇø 6. /etc/system¿Éµ÷×ÊÔ´ÏÞÖÆ 6.1 SolarisÏÂÈçºÎÏÞÖÆÃ¿¸öÓû§¿ÉÓµÓеÄ×î´ó½ø³ÌÊý 6.2 ÈçºÎÅäÖÃϵͳʹ֧֮³Ö¸ü¶àµÄαÖÕ¶Ë 6.3 ÈçºÎÔö¼Óÿ¸ö½ø³Ì¿É´ò¿ªÎļþ¾ä±úÊý 6.4 6.5 ×öÁËsetuid()ÕâÀàµ÷ÓõijÌÐòÈçºÎ²úÉúcore dump 6.6 ÏûÏ¢¶ÓÁе÷Õû 7. DNSÏà¹ØÎÊÌâ 7.1 ÈçºÎ½øÐÐDNSÇø´«Êä 7.2 ÈçºÎ»ñ֪ȨÍþÃû×Ö·þÎñÆ÷ 7.3 ÈçºÎÅäÖÃDNSµÄίÍнâÎö 7.4 ÈçºÎ»ñÖªBINDµÄ°æ±¾ºÅ 7.5 Solaris/FreeBSD/LinuxÈçºÎÖ¸¶¨ÓòÃû½âÎöµÄ˳Ðò 8. SolarisÄں˱à³ÌÏà¹ØÎÊÌâ 8.1 SolarisÄÚºËÄ£¿éÖÐÈçºÎgetcwd 8.2 8.3 ÈçºÎ±ÜÃâÒ»¸öÌ×½Ó×Ö½øÈëTIME_WAIT״̬ 8.4 ½á¹¹ÔÚÓÅ»¯±àÒëÖÐµÄ¶ÔÆëÎÊÌâ 8.5 8.6 ÈçºÎµÃµ½·Ç¾Ö²¿±äÁ¿Áбí 8.7 8.8 ÈçºÎµ¥¶À»ñµÃSolaris±àÒë»·¾³ 8.9 ÈçºÎ»ñÈ¡SolarisÄں˿ɵ÷²ÎÊýÁбí 8.10 8.11 ÈçºÎÒ³±ß½ç¶ÔÆëʽ·ÖÅäÄÚ´æ 8.12 8.13 compile()ºÍstep()ÔõôÓà 8.14 8.15 8.16 8.17 9. ͼÐνçÃæÏà¹ØÎÊÌâ 9.1 ÈçºÎ±ÜÃâ½øÈëSolarisµÄͼÐνçÃæ 9.2 Solaris 7µÄËøÆÁ 9.3 ÈçºÎµ÷Õû¼üÅÌÖØ¸´ÂÊ 9.4 ÈçºÎ°Îµô¼üÅ̼ÌÐøÔËÐÐSolaris 9.5 SolarisÏÂÈçºÎÉèÖÃÏÔ¿¨·Ö±æÂÊ 9.6 SolarisÏÂÈçºÎÉèÖÃÏÔʾˢÐÂÂÊ 10. Íø¿¨Ïà¹ØÎÊÌâ 10.1 ÈçºÎÔÚ³ÌÐòÖлñÈ¡±¾»úMACµØÖ· 10.2 ÈçºÎÔÚSun¹¤×÷Õ¾Éϰ²×°3¿éÍø¿¨ 10.3 ÈçºÎÔÚSolaris x86Éϰ²×°Íø¿¨Çý¶¯ 10.4 Solaris µ¥Íø¿¨¶àIP(ÒÔÌ«Íø¿¨±ðÃû) 10.5 ÈçºÎÐÞ¸ÄÖ÷»úÃû(hostname) 10.6 SPARC/Solaris 2.5/2.6/7/8ÏÂÈçºÎÉèÖÃÍø¿¨100Mbȫ˫¹¤ 10.7 Unix/Linux/BSDÈçºÎ¶Ô¿¹ARPÆÛƹ¥»÷ 10.8 10.9 10.10 10.11 x86/SolarisÈçºÎÇ¿ÖÆÉè¶¨Íø¿¨ËÙÂÊ 10.12 Solaris/FreeBSD/LinuxÈçºÎÈ·¶¨Íø¿¨Capability/Speed 10.13 10.14 tracerouteÊÇÔõôʵÏÖµÄ 11. packageÏà¹ØÎÊÌâ 11.1 SolarisÏÂÈçºÎ½«¶þ½øÖÆÈí¼þ°ü°²×°µ½Ö¸¶¨Ä¿±ê·¾¶Ï 11.2 SolarisÏÂÈçºÎ×Ô¼º¶¨Öƶþ½øÖư²×°°ü 11.3 ÈçºÎ»Ö¸´/usr/bin/suµÄȱʡ°²×°ÊôÐÔ 11.4 ÈçºÎ»ñÖªÖ¸¶¨°üÓëÆäËû°üÖ®¼äµÄÒÀÀµ¹ØÏµ 11.5 LinuxÖÐÈçºÎÖªµÀifconfigÊôÓÚÄĸö°ü 11.6 SolarisÏÂÈçºÎÖªµÀij°üÖÐÓÐÄÄЩÎļþ 12. ÈÕÖ¾Ïà¹ØÎÊÌâ 12.1 12.2 12.3 ÈçºÎ¹Ø±ÕcronµÄÈÕÖ¾ 12.4 13. ½ø³ÌÏà¹ØÎÊÌâ 13.1 ÈçºÎ¸ù¾Ý½ø³ÌÃû»ñµÃPID 13.2 13.3 13.4 Solaris 7/8ÏÂpsÊä³öÖеÄÎʺŠ13.5 13.6 13.7 ¸ø¶¨Ò»¸öPID£¬ÈçºÎÖªµÀËü¶ÔÓ¦Ò»¸öÔËÐÐÖеĽø³Ì 13.8 Unix/Linux±à³ÌÖÐËùν"½©Ê¬½ø³Ì"ָʲô 13.9 x86/FreeBSD 4.3-RELEASEµÄptrace(2)ÊÖ²áÒ³ 13.10 SolarisÏÂÈçºÎÖªµÀÄĸö½ø³ÌʹÓÃÁËÄĸö¶Ë¿Ú 13.11 x86/FreeBSDÈçºÎ¿ìËÙ»ñȡָ¶¨Óû§ÓµÓеĽø³ÌÊý 14. һЩС¹¤¾ßµÄʹÓà 14.1 14.2 14.3 Ö»ÔÚ±¾µØÎļþϵͳÉϲéÕÒ 14.4 15. 32-bit/64-bitÏà¹ØÎÊÌâ 15.1 SolarisÏÂÈçºÎʶ±ðµ±Ç°Äں˰汾 15.2 ÈçºÎÆô¶¯Solaris 32-bit/64-bitÄÚºË 15.3 gccÖ§³Ö64-bit±àÒëÂð 15.4 SolarisÆô¶¯Ê±ÄÚºËÎļþÕÒ²»µ½ÁË 15.5 64-bitÇý¶¯³ÌÐòÎÞ·¨ÔÚ8ϹØÁª£¬µ«ÔÚ7Ϲ¤×÷Õý³£ 16. ¿âÏà¹ØÎÊÌâ 16.1 ÔÚSolaris 7ϱàÐ´ÍøÂç³ÌÐòÐèÒªÁ´½ÓÄÄЩ¿â 16.2 16.3 Á´½Ó¹ý³ÌÖпâµÄ˳Ðò 16.4 16.5 16.6 /usr/lib/ld.so.1Ë𻵻ò¶ªÊ§ 16.7 16.8 16.9 Solaris 8ÏÂÈçºÎÅäÖÃÔËÐÐʱÁ´½Ó»·¾³ 17. Îļþ²é¿´ÎÊÌâ 17.1 ÈçºÎÖ±½Ó²é¿´manÎļþ 17.2 .texÎļþÔõô¶Á 17.3 SolarisÏÂÔõô¿´.psÎļþ 18. ²¹¶¡Ïà¹ØÎÊÌâ 18.1 ÈçºÎ¸ù¾Ý²¹¶¡ºÅ´ÓSunÖ÷Õ¾ÏÂÔØ²¹¶¡ 18.2 18.3 18.4 ¸øSolaris 2.6°²×°ÍƼö²¹¶¡¼¯ 18.5 ÒÑÖª²¹¶¡ºÅ£¬ÈçºÎ×î¿ìÅжÏϵͳÖÐÊÇ·ñÒѾ°²×°¸Ã²¹¶¡ 18.6 ÈçºÎ°²×°²¹¶¡ 19. ÖÕ¶ËÏà¹ØÎÊÌâ 19.1 ÈçºÎʹBackspace¼ü×öɾ³ý²Ù×÷£¬¶ø²»ÊÇÏÔʾ^H 19.2 19.3 ÈçºÎÇå¿ÕstdinµÄ»º³å 19.4 Linux ConsoleÏÂÒ»°´´í¼ü¾Í½Ð£¬Ôõô¹Ø 20. shell scriptÎÊÌâ 20.1 ÈçºÎ»ñȡһ¸ö×Ö·û´®µÄ³¤¶È 20.2 ¶Á³¬Ê±×Ô¶¯Ê¹ÓÃȱʡֵ 20.3 20.4 BASHÖÐÈçºÎµÃµ½Ò»¸ö×Ö·û´®µÄ×Ó´® 20.5 20.6 20.7 20.8 ʹÓÃtrÃüÁî¼ÓÃÜÎļþ 20.9 ÓÐÄÄЩÃüÁîÓÃÓÚ²éÕÒ¶¨Î» 20.10 20.11 ÈçºÎ½«´óдÎļþÃûת»»ÎªÐ¡Ð´ÎļþÃû 21. FreeBSDÏà¹ØÎÊÌâ 21.1 21.2 ÈçºÎ½«Ò»¸ö512×Ö½ÚµÄÎļþдÈëÖ÷Òýµ¼ÉÈÇø 21.3 21.4 21.5 21.6 x86/FreeBSD 4.xϲ»ÄÜcp¸²¸Ç/kernel 21.7 x86/FreeBSDÏÂÈçºÎÉèÖ÷ÓÉ 21.8 21.9 ʲôÊÇlocale 21.10 ÓÃcvsup°²×°vim 21.11 FreeBSDÏÂviÊäÈëÖÐÎÄ»áÏÔʾx??x?? 21.12 21.13 21.14 21.15 UDMA ICRC errorÊÇʲôÒâ˼ 21.16 Limiting closed port RST responseʲôÒâ˼ 21.17 21.18 21.19 21.20 22. Linux Kernel Programming 22.1 Ö±½Ó·ÃÎÊÄÚ´æ[ÏÔ´æ]µØÖ· 22.2 23. LinuxÏà¹ØÎÊÌâ 23.1 -------------------------------------------------------------------------- 0. Unix/C´«ÆæÎÊÌâ 0.1 Dennis Ritchie ºÍ Ken Thompson Q: ÎÒÏëÖªµÀËûÃÇ£¬ÎªÊ²Ã´´ó¼Ò²»¶ÏÌáµ½ÕâÁ½¸öÃû×Ö£¿ A: All of Unix Programmers ÎÒÃÇÒ²ÏëÖªµÀ£¬:-P 1969ÄêDennis Ritchie ºÍ Ken ThompsonÔÚ±´¶ûʵÑéÊÒ´´ÔìÐԵط¢Ã÷ÁËUnix²Ù×÷ϵͳ£¬ Ϊ´Ë1983ÄêËûÃÇ»ñµÃÁËͼÁé½±¡£ ¾¡¹ÜRitchieÊÇC³ÌÐòÉè¼ÆÓïÑԵķ¢Ã÷Õߣ¬µ«ÊÇËû×îϲ»¶µÄ±à³ÌÓïÑÔÊÇAlef¡£¶ø ThompsonÊÇÒ»ÃûÒµÓà·ÉÐÐÔ±£¬Ôøµ½ÄªË¹¿Æ¼ÝÊ»¹ýÃ׸ñ-29¡£ »¶Ó·ÃÎÊ http://cm.bell-labs.com/who/dmr/ http://cm.bell-labs.com/who/ken/ 0.2 W. Richard Stevens Ö®ËÀ Q: David Johns <odin@gte.net> ÎÒÊÇËûµÄ³ç°ÝÕߣ¬ÓÃwww.google.comËÑË÷ËûµÄ¸¼¸æ£¬µ«Õâ·Ý¸¼¸æÃ»ÓÐÌá¼°ËÀÒò£¬ÓÐÈË ÖªµÀÂð£¿ ÕæµØ½ö½öÊÇÓ¢ÄêÔçÊÅÂ𣿠A: Nithyanandham <m.nithyanandham@blr.spcnl.co.in> ËûËÀÓÚ1999/09/01£¬¼ÒÈ˲»ÏëÈñðÈËÖªµÀËÀÒò¡£¸¼¸æÎ»ÓÚ http://www.azstarnet.com/clips/richard_stevens.html A: joe broz <jbroz@transarc.ibm.com> ËÆºõÊÇÒ»³¡ÅÊÑÒʹʣ¬»òÕß»¬Ñ©Ê¹ʣ¬ÎÒ²»È·ÈÏ¡£ 1. ϵͳ¹ÜÀíÅäÖÃÎÊÌâ 1.1 ÈçºÎ¸øSUN¹¤×÷Õ¾Ôö¼ÓeepromÓ²¼þ¿ÚÁî±£»¤ A: scz <scz@nsfocus.com> man -s 1M eepromÁ˽âϸ½Ú£¬ÒªÇóµ±Ç°ÊÇrootÉí·Ý # /usr/sbin/eeprom (ÏÔʾµ±Ç°eepromÅäÖÃ) # /usr/sbin/eeprom security-mode=full ( ¿ÉÑ¡µÄÓÐcommand, full, none) ´Ëʱ½øÈë½»»¥Ê½ÉèÖÿÚÁî¹ý³Ì£¬×ܹ²ÊäÈëÁ½´Î£¬Èç¹ûÁ½´Î¿ÚÁîÊäÈë²»Ò»Ö£¬Ôò±¾´ÎÉè ÖÃ×÷·Ï¡£³É¹¦ÉèÖÃÖ®ºó³ýÁËgoÃüÁîÖ®ÍâµÄÆäËûok״̬ÏÂÃüÁî¾ùÐèÒª¿ÚÁ°üÀ¨bootÃü Áî¡£ ÉèÖóÉcommandʱ£¬Í¬Ñù½øÈë½»»¥Ê½¿ÚÁîÊäÈë¹ý³Ì¡£´Ëʱ£¬³ýÁËbootºÍgoÃüÁîÖ®ÍâµÄ ÆäËûok״̬ÏÂÃüÁî¾ùÐèÒª¿ÚÁî¡£×¢Ò⣬Èç¹û½ö½öÊäÈëbootÃüÁ²»ÐèÒª¿ÚÁһµ© bootÃüÁîºóÃæ´øÁ˲ÎÊý£¬±ÈÈçboot cdrom -s£¬Í¬ÑùÐèÒªÊäÈë¿ÚÁî¡£ Èç¹ûÉèÖóÉnone(ȱʡÉèÖÃ)£¬±íʾȥµôÕâÖÖ¿ÚÁî±£»¤¡£ # /usr/sbin/eeprom security-password= (µÈºÅºóÃæÎÞÆäËû×Ö·û£¬Ö±½Ó»Ø³µ) Èç¹ûÏë¸Ä±äÇ°ÃæÉèÖõĿÚÁÓÃÕâÌõÃüÁͬÑùÊǽ»»¥Ê½ÊäÈë¹ý³Ì¡£ # /usr/sbin/eeprom security-#badlogins=3 (ȱʡÊÇ0) ÉèÖÿÚÁîÊäÈë³¢ÊÔ´ÎÊý¡£ ¾¯¸æ£ºÈç¹ûÉèÖÃÁËeepromÓ²¼þ±£»¤¿ÚÁî¶øÓÖÍü¼Ç£¬»á´øÀ´ºÜ¶àÂé·³£¬Îñ±ØÐ¡ÐÄ¡£ Ò»¸ö¿ÉÐеÄÉèÖð취ÊÇ£¬°²È«Ä£Ê½ÉèÖõ½command¶ø²»ÊÇfull£¬ÕâÑùÖÁÉÙ¿ÉÒÔÕý³£Æô ¶¯ÏµÍ³¡£ÓÚÊÇÖ»Òª¼ÇµÃroot¿ÚÁî»òÕß»¹ÓÐÆäËû»ú»á»ñµÃrootȨÏÞ(»º³åÇøÒç³ö£¿)£¬¾Í ¿ÉÒÔͨ¹ýÉèÖð²È«Ä£Ê½Îªnone¶øÍì¾È»ØÀ´¡£ µ«ÊÇÈç¹ûÉèÖóÉfullģʽȴÍü¼ÇÁËeeprom¿ÚÁÎÒÏëÊ×ÏÈÓ¦¸Ã´òµç»°¸øSUNµÄ¼¼ÊõÖ§ ³Ö¡£Èç¹û³öÓÚijÖÖÀíÓÉÄã²»ÏëÕâÑù×ö£¬ÎÒ²»È·ÈÏeepromÊÇ·ñ¿ÉÒÔÈȲå°Î£¬ÏÈÓÃÒ»¸öÎÞ ¿ÚÁî±£»¤µÄeepromÆô¶¯ÏµÍ³£¬È»ºóÈȲå°Î»»ÉÏÄǸöÓпÚÁî±£»¤µÄeeprom£¬È»ºóÓÃroot ȨÏÞĨȥeeprom¿ÚÁî¡£ 1.2 ÈçºÎÔö¼Ó½»»»¿Õ¼ä A: WT <wt@server.domain.top> ÄãÎÞ·¨¸Ä±ä·ÖÇø´óС£¬µ«ÊÇ¿ÉÒÔÔö¼Ó/ɾ³ý½»»»Îļþ£¬Ð§¹ûÀàËÆ½»»»·ÖÇø¡£ÏÂÁÐÃüÁî ÔÚ¸ùĿ¼Ï´´½¨Ò»¸ö500MBµÄ½»»»Îļþ£¬ÃûΪswapfile # mkfile 500m /swapfile ÏÂÁÐÃüÁʹ֮ÉúЧ # swap -a /swapfile ÏÖÔÚÄãÓÐÁ˶îÍâµÄ500MB½»»»¿Õ¼ä£¬ÎªÁËÿ´ÎÖØÆôºóÒÀ¾ÉÓÐЧ£¬±à¼/etc/vfstabÎļþ Ôö¼ÓÈçÏÂÐÐ /swapfile - - swap - no - # swap -l ÕâÀï"-l"Òâζ×Å"list"£¬ÏÔʾËùÓн»»»¿Õ¼ä¡£×ÐϸÔĶÁ"swap"ºÍ"mkfile"µÄÊÖ²áÒ³¡£ 1.3 ΪʲôÎÒ²»ÄÜÔÚ/homeĿ¼Ï´´½¨×ÓĿ¼ Q: Solaris 7Ï£¬rootÉí·Ý£¬µ±ÎÒÊÔͼÔÚ/homeĿ¼Ï´´½¨×ÓĿ¼ʱ£¬ÏµÍ³¾Ü¾ø£¬Îª ʲô£¿ A: mohansundarraj Èç¹û/etc/rc2.d/S74autofs½Å±¾ÖÐautomount(1M)ÊØ»¤½ø³ÌÒѾmountÁË/home£¬¾ÍÊÇ ÕâÖÖÏÖÏ󣬶øÕ⻹ÊÇȱʡ°²×°ºóµÄÇéÐΡ£¿ÉÒÔ # /etc/init.d/autofs stop # umount /home È»ºóÄã¾Í¿ÉÒÔÓÃrootÉí·ÝÔÚ/homeÏ´´½¨×ÓĿ¼£¬Ôö¼ÓÎļþÁË¡£ÎªÁËÓÀ¾ÃÈ¡Ïûautofs ÌØÐÔ£¬¿ÉÒÔ½«/etc/rc2.d/S74autofs½Å±¾¸ÄÃû£¬²¢×¢Ê͵ô/etc/auto_home¡¢ /etc/auto_masterÁ½¸öÎļþÖеÄÈë¿Úµã¡£ SPARC/SolarisµÄȱʡÓû§Ö÷Ŀ¼ÊÇ/export/home£¬¶ø²»ÊÇ/home¡£ 1.4 ÈçºÎ¸Ä±äһ̨Ö÷»úµÄlocale Q: һ̨SPARC/Solaris 8ÔËÐÐÔÚUS locale»·¾³ÖУ¬ÏÖÔÚÎÒÃÇÏëÈÃËüÔËÐÐÔÚ IE(Ireland) locale»·¾³ÖУ¬ÒÔ±ã¿ÉÒÔʹÓÃÅ·ÖÞÈÕÆÚ¸ñʽ£¬Ôõô°ì£¿ A: Sharad Ramachandran <estancio@hotmail.com> ÔËÐÐsys-unconfig£¬ÔÚ´Ë֮ǰÇëman -s 1M sys-unconfig£¬:-) A: chad schrock <chad@radix.net> Ìì°¡£¬ÎªÁËÅÄËÀÒ»Ö»²ÔÓ¬£¬ÄãÒªÒý±¬Ô×Óµ¯Â𣿠ֻÐèÒª×öÈçϲÙ×÷£¬ÔÚÄãµÄ.cshrc/.profile/.bashrcµÈÆô¶¯½Å±¾ÖÐÉèÖÃ$LANG»·¾³±ä Á¿µÄֵΪen_UK£¬×¢Ïú£¬ÖØÐµÇ¼¼´¿É¡£ÎªÁËʹÕâ¸öÉèÖÃÈ«¾ÖÓÐЧ£¬ÐÞ¸Ä /etc/default/initÎļþ£¬LANG=en_UK£¬ÖØÆô¶¯¡£ -------------------------------------------------------------------------- # @(#)init.dfl 1.2 92/11/26 # # This file is /etc/default/init. /etc/TIMEZONE is a symlink to this file. # This file looks like a shell script, but it is not. To maintain # compatibility with old versions of /etc/TIMEZONE, some shell constructs # (i.e., export commands) are allowed in this file, but are ignored. # # Lines of this file should be of the form VAR=value, where VAR is one of # TZ, LANG, or any of the LC_* environment variables. # TZ=GMT+8 LANG=zh.GBK -------------------------------------------------------------------------- ²Î¿´locale(1)ºÍlocale(5)£¬Á˽â¸ü¶à¹ØÓÚlocaleµÄÐÅÏ¢¡£ÔËÐÐ"locale -a"£¬²é¿´ µ±Ç°ÏµÍ³ËùÖ§³ÖµÄËùÓÐlocale¡£ A: Sun Microsystems 2001-06-12 ÓÐÈýÖÖ·½Ê½¸Ä±älocale¡£Ê×ÏÈÓÃ"locale -a"ÃüÁîÈ·ÈÏϵͳÖÐÒѰ²×°µÄlocale 1) ´ÓCDEµÇ¼ÆÁÄ»ÉÏÐÞ¸Älocale Ñ¡Ôñ options -> languages -> choose the new locale ×¢Ò⣬Èç¹ûµÇ¼Óû§µÄ³õʼ»¯ÎļþÖÐÓв»Í¬µÄlocaleÉèÖ㬽«ÓÅÏÈÓÚϵͳȫ¾Ölocale ÉèÖᣠ2) ÁÙʱÉèÖÃlocale(shellÏà¹ØµÄ) ksh : LANG=<locale> sh : LANG=<locale> export LANG csh : setenv LANG <locale> bash: export LANG=en_US(zh.GBK) 3) vi /etc/default/init Ôö¼ÓÈçÏÂÄÚÈÝ LANG=<locale> LC_ALL=<locale> ÖØÆôϵͳ¡£ ÔËÐÐ"locale"ÃüÁîÈ·ÈϸıäÉúЧ¡£ Èç¹ûÄãÏ£ÍûʹÓõÄlocale²¢Î´°²×°£¬²Î¿´ÈçÏÂÎĵµ°²×°locale Solaris 8 : <<International Language Environments Guide>> Solaris 7 : <<Solaris Internationalization Guide For Developers>> Solaris 2.6: <<Solaris Internationalization Guide for Developers>> D: scz <scz@nsfocus.com> 1998-08 SPARC/Solaris 2.5Ï£¬ÎªÁËÔÚviÖÐÕýÈ·¿´µ½ÖÐÎÄÐèÒªÉèÖû·¾³±äÁ¿ sh LANG=C;export LANG LC_CTYPE=iso_8859_1;export LC_CTYPE csh setenv LANG zh ¹ØÓÚÉèÖÃLANGÕâ¸ö»·¾³±äÁ¿Éæ¼°µ½/usr/lib/localeϵÄĿ¼ȨÏÞ¡£ 1.5 Solaris 7×Ô¶¯×¢Ïú Q: ÔõÑùÉèÖòÅÄÜ30Ãëºó×Ô¶¯×¢Ïú A: shridhara ²»ÐÒµÄÊÇ£¬Solaris¶Ô´ËûÓÐʲôºÃµÄÖ§³Ö¡£Èç¹ûÕýÔÚʹÓÃtelnet»á»°£¬»òÐí¿ÉÒÔ¿¼ ÂÇ"logout"±äÁ¿£¬²Î¿´telnetµÄÊÖ²áÒ³¡£Ò»¸ö±äͨµÄ°ì·¨£¬Ê¹ÓÃK-Shell£¬ËüÖ§³Ö TMOUT±äÁ¿£¬ÓÃÓÚÖ¸¶¨·Ç»î¶¯Ê±ÏÞ(ÒÔÃëΪµ¥Î»)¡£±ÈÈ磬Èç¹ûÒ»¸öshell»á»°3·ÖÖÓÄÚ ²»»î¶¯£¬ÔòÖÕÖ¹Õâ¸öshell»á»° $ TMOUT=180;export TMOUT ¿ÉÒÔÔÚÓû§µÄ.profileÎļþÖзÅÖøÃÐС£È±µãÊÇÄãÖ»ÄÜʹÓÃksh¡£ D: scz <scz@nsfocus.com> vi /etc/default/login # TIMEOUT sets the number of seconds (between 0 and 900) to wait before # abandoning a login session. # TIMEOUT=180 ÕâÀïµÄ³¬Ê±ÉèÖÃÕë¶ÔµÇ¼¹ý³Ì£¬¶ø²»ÊǵǼ³É¹¦ºóµÄshell»á»°³¬Ê±ÉèÖᣠ1.6 Ò»¸öĿ¼ӵÓÐsetgidÉèÖã¬ÔõôÀí½â Q: ¶ÔÒ»¸öĿ¼×öÁËsetgidÉèÖ㬿ÉÎÒ²¢Ã»Óз¢ÏÖÕâºÍÕý³£Çé¿öÓÐÊ²Ã´Çø±ð A: John Riddoch <jr@scms.rgu.ac.uk> ÔÚÕâÖÖĿ¼Ï´´½¨ÐÂÎļþʱ½«²ÉÓÃsetgidÉèÖöÔÓ¦µÄÊô×飬±ÈÈç $ ls -ld b drwxrws--- 2 jr group 512 Mar 14 17:13 b/ $ touch b/a $ ls -l b/a -rw------- 1 jr group 0 Mar 14 17:13 b/a $ id uid=178(jr) gid=10(staff) jrµÄȱʡ×éÊÇstaff£¬¶øÏÖÔÚb/aÎļþÊô×éÊÇgroup¡£ D: СËÄ <scz@nsfocus.com> SPARC/Solaris 7ϲâÊÔ Èç¹ûĿ¼ӵÓÐSGIDÉèÖã¬ÄÇô¸ÃĿ¼ÏÂд´½¨µÄÎļþ½«¼Ì³Ð¸ÃĿ¼µÄÊô×飬¶ø²»ÊÇ´´ ½¨ÕßËù¶ÔÓ¦µÄGID¡£ [root@ /export/home/scz]> id uid=0(root) gid=1(other) <-- ×¢Ò⵱ǰÓû§µÄÊô×é [root@ /export/home/scz]> mkdir groupsgid [root@ /export/home/scz]> ls -ld groupsgid drwxr-xr-x root other groupsgid/ [root@ /export/home/scz]> chown scz:users groupsgid [root@ /export/home/scz]> chmod g+s groupsgid [root@ /export/home/scz]> ls -ld groupsgid drwxr-sr-x scz users groupsgid/ <-- Ŀ¼ӵÓÐSGIDÉèÖà [root@ /export/home/scz]> cd groupsgid/ [root@ /export/home/scz/groupsgid]> touch scz_0 [root@ /export/home/scz/groupsgid]> ls -l scz_0 -rw-r--r-- root users scz_0 <-- ×¢ÒâÊô×é±ä»¯ [root@ /export/home/scz/groupsgid]> chmod g-s ../groupsgid/ [root@ /export/home/scz/groupsgid]> ls -ld ../groupsgid/ drwxr-xr-x scz users ../groupsgid/ [root@ /export/home/scz/groupsgid]> touch scz_1 [root@ /export/home/scz/groupsgid]> ls -l scz_1 -rw-r--r-- root other scz_1 <-- ×¢ÒâÊô×é±ä»¯ [root@ /export/home/scz/groupsgid]> 1.7 ·ÇSun ConsoleÉÏÓÐÎ޵ȼÛStop-AµÄ°´¼ü A: neomilev Èç¹ûÊDZãЯ»ú£¬³¢ÊÔalt/break »òÕß ctrl/break¡£Èç¹ûÊÇvt100ÖÕ¶Ë£¬³¢ÊÔF11 »òÕß break 1.8 ÈçºÎÈÃÒ»¸öÓû§Ö»ÄÜftp¶øÎÞ·¨telnet A: СËÄ <scz@nsfocus.com> Ð޸ĸÃÓû§ÔÚ/etc/passwdÖеÄshellΪ/bin/false£¬ÔÚ/etc/shellsÎļþÖÐÔö¼Ó /bin/false£¬´Ëʱ£¬¸ÃÓû§Ö»ÄÜftp£¬telnetʧ°Ü¡£ 1.10 ΪʲôSun¹¤×÷Õ¾·ÇÒªÊäÈëbootÃüÁî²ÅÄÜÆô¶¯ Q: ÎÒÓÐ̨Sun¹¤×÷Õ¾£¬Ã¿´Î¿ª»úºóÍ£ÔÚok״̬Ï£¬ÐèÒªÊÖ¹¤ÊäÈëbootÃüÁî²ÅÄÜÆô¶¯£¬ ÏÖÔÚÏë±ÜÃâÕâÖÖЧ¹û£¬Ôõô°ì A: /usr/sbin/eeprom auto-boot?=true /usr/sbin/eeprom auto-boot? <-- ²éѯ A: dengdai@SMTH ½øÈëOBP״̬ ok setenv auto-boot? true ok setenv boot-device disk ·´Ö® ok setenv auto-boot? false 1.11 ÈçºÎÈÃSolarisʶ±ðÐÂÔö¼ÓµÄÓ²¼þ Q: ±ÈÈçÐÂÔö¼ÓÁËÍø¿¨¡¢Ó²ÅÌ¡¢¹âÇýʲôµÄ£¬ÈçºÎÈÃSolarisÒâʶµ½ÕâÖÖÔö¼Ó A: spp(µÍÒôÅÚ) & suxm <suxm@gnuchina.org> ÓÐÈýÖÖ°ì·¨ a. Stop-A½øÈëOBP״̬£¬ÊäÈëboot -r b. sync(ÖØ¸´);reboot -- -r c. touch /reconfigure;sync(ÖØ¸´);reboot ²Î¿´reboot(1M)¡¢boot(1M)¡¢eeprom(1M)¡¢kernel(1M)¡¢cfgadm(1M)¡¢psradm(1M)ÊÖ ²áÒ³ Q: ÎÒÐÂÔö¼ÓÁËÒ»¿éÓ²ÅÌ£¬²»Ïëboot -r¶øÁ¢¼´ÉúЧ£¬Ôõô°ì A: ÀÏ´ó <willxu@public.cs.hn.cn> 2001-12-04 16:51 Ö±½Ó½«µÚ¶þ¿éÓ²Å̽ÓÉÏÈ¥£¬È»ºó˳ÐòÖ´ÐÐÈçÏÂÃüÁ²»ÓÃÖØÐÂÆô¶¯»úÆ÷ modunload -i 0 drvconfig(1M) devlinks(1M) disks(1M) Èç¹ûÐèÒªÖØÐ¸ñʽ»¯¡¢·ÖÇø¡¢´´½¨Îļþϵͳ£¬¾Í¼ÌÐøÖ´ÐÐ format(1M) newfs(1M) 2. ¶ÑÕ»Ïà¹ØÎÊÌâ 2.1 ÈçºÎÀí½âpstackµÄÊä³öÐÅÏ¢ Q: 080603a7 main (1, 80479b8, 80479c0) + d53 ½áβµÄd53ÊÇʲô A: Roger A. Faulkner <raf@sunraf.Sun.COM> ÔÚ´úÂë¶Î¾ø¶ÔµØÖ·0x080603a7´¦£¬main()µ÷ÓÃÁËÒ»¸öº¯Êý£¬0x080603a7ÕýÊÇ main + 0xd53£¬»»¾ä»°Ëµ£¬´Ómain()º¯Êý¿ªÊ¼µÄ0xd53Æ«ÒÆ´¦¡£ 2.3 SolarisÖÐÈçºÎ»ñȡһ¸öC³ÌÐòµÄµ÷ÓÃÕ»»ØËÝ Q: ÎÒÏëÔÚSolaris 2.6¼«ÆäºóÐø°æ±¾ÉÏ»ñȡһ¸öC³ÌÐòµÄµ÷ÓÃÕ»»ØËÝ£¬ÀàËÆÈçÏÂÊä³ö (10) 0x00045e08 integ + 0x408 [./two_brn.e] (11) 0x0006468c trajcem + 0x128 [./two_brn.e] (12) 0x00055490 fly_traj + 0xf58 [./two_brn.e] (13) 0x0004052c top_level + 0x14 [./two_brn.e] (14) 0x000567e4 _start + 0x34 [./two_brn.e] ÕâÑùÎҾͿÉÒÔÖªµÀµ±³ÌÐò±ÀÀ£¡¢ËÀËøµÄʱºò´úÂëÖ´Ðе½Á˺δ¦¡£ÔÚHP-UXºÍIRIXÉÏ ¿ÉÒÔÀûÓÃU_STACK_TRACE()ºÍtrace_back_stack_and_print()£¬SolarisÉÏÄØ£¿ Q: ÓÐûÓа취ÏÔʾµ±Ç°¶ÑÕ»ÖеÄÊý¾Ý(GNU/Linuxϵͳ)£¿ÎÒÏ£Íû×Ô¼ºµÄÒì³£´¦Àí³ÌÐò ÔÚ½ø³Ì½áÊøÇ°dumpÕû¸öÕ»Çø(stack)£¬ÒÔ±ã¹Û²ìµ½Õ»¶¥ÊÇʲôº¯Êý¡£¶ÔÓÚµ÷ÊÔÒâÏë ²»µ½µÄÔËÐÐʱ´íÎó¶øÑÔ£¬ÕâºÜÖØÒª¡£ A: Bjorn Reese <breese@mail1.stofanet.dk> ÓÃ/usr/proc/bin/pstack [-F] <pid ...> ²Î¿´Õâ¸öÀý×Ó´úÂ룬http://home1.stofanet.dk/breese/debug/debug.tar.gz Q: is there a way to access call stack information at run time from within a program? i've been maintaining my own crude stack using __FUNCTION__ and linked lists but can't help but think there's gotta be a better way... A: Nate Eldredge <neldredge@hmc.edu> ÕâÒÀÀµÓÚÄãµÄϵͳ£¬Èç¹ûʹÓÃglibc 2.1»ò¸üа汾£¬¿ÉÒÔʹÓÃbacktrace()º¯Êý£¬ ²Î¿´<execinfo.h>£¬ÆäËûϵͳ¿ÉÄÜÓв»Í¬µÄ¼¼ÊõÖ§³Ö¡£ ×¢Ò⣬ÄãËùʹÓõİ취¿ÉÄÜÊÇΨһÄܹ»±£Ö¤¿çƽ̨ʹÓÃµÄ A: Andrew Gabriel <andrew@cucumber.demon.co.uk> Consultant Software Engineer ÏÂÃæÊÇÒ»¸öbacktrace()µÄÓ¦ÓþÙÀý£¬Èç¹ûÄãʹÓÃSolaris 2.4¼°ÆäºóÐø°æ±¾£¬ÄÇ Ã´Õâ¸öÀý×Ó¿ÉÒԺܺõŤ×÷¡£ºÜ¿ÉÄÜÎÞ·¨¹¤×÷ÔÚ64-bitģʽÏ£¬ÎÒûÓг¢ÊÔ¹ý£¬ ºÃÏñSolaris 7ÒѾÌṩÁËÒ»¸öÀàËÆµÄÑÝʾ³ÌÐò¡£»¹¿ÉÒÔÔö¼ÓijЩ¹¦ÄÜ£¬ÎÒûÓÐʱ ¼äÁË¡£ /* * Produce a stack trace for Solaris systems. * * Copyright (C) 1995-1998 Andrew Gabriel <andrew@cucumber.demon.co.uk> * Parts derived from Usenet postings of Bart Smaalders and Casper Dik. * */ /* ......................................................................... */ #include <setjmp.h> #include <sys/types.h> #include <sys/reg.h> #include <sys/frame.h> #include <dlfcn.h> #include <errno.h> #include <unistd.h> #include <stdio.h> #if defined(sparc) || defined(__sparc) #define FLUSHWIN() asm("ta 3"); #define FRAME_PTR_INDEX 1 #define SKIP_FRAMES 0 #endif #if defined(i386) || defined(__i386) #define FLUSHWIN() #define FRAME_PTR_INDEX 3 #define SKIP_FRAMES 1 #endif #if defined(ppc) || defined(__ppc) #define FLUSHWIN() #define FRAME_PTR_INDEX 0 #define SKIP_FRAMES 2 #endif /* ......................................................................... */ static void print_address ( void * pc ) { Dl_info info; if ( dladdr( pc, &info ) == 0 ) { /* not found */ fprintf( stderr, "*** %s:0x%xn", "??", ( unsigned int )pc ); } else { /* found */ fprintf( stderr, "*** %s:%s+0x%xn", info.dli_fname, info.dli_sname, ( unsigned int )pc - ( unsigned int )info.dli_saddr ); } return; } /* end of print_address */ /* ......................................................................... */ static int validaddr ( void * addr ) { static long pagemask = -1; char c; if ( pagemask == -1 ) { pagemask = ~( sysconf( _SC_PAGESIZE ) - 1 ); } addr = ( void * )( ( long )addr & pagemask ); if ( mincore( ( char * )addr, 1, &c ) == -1 && errno == ENOMEM ) { return 0; /* invalid */ } else { return 1; /* valid */ } } /* end of validaddr */ /* ......................................................................... */ /* * this function walks up call stack, calling print_addess * once for each stack frame, passing the pc as the argument. */ static void print_stack ( void ) { struct frame * sp; jmp_buf env; int i; int * iptr; FLUSHWIN(); setjmp( env ); iptr = ( int * )env; sp = ( struct frame * )iptr[ FRAME_PTR_INDEX ]; for ( i = 0; i < SKIP_FRAMES && sp; i++ ) { if ( !validaddr( sp ) || !validaddr( &sp->fr_savpc ) ) { fprintf( stderr, "***[stack pointer corrupt]n" ); return; } sp = ( struct frame * )sp->fr_savfp; } i = 100; /* looping check */ while ( validaddr( sp ) && validaddr( &sp->fr_savpc ) && sp->fr_savpc && --i ) { print_address( ( void * )sp->fr_savpc ); sp = ( struct frame * )sp->fr_savfp; } } /* end of print_stack */ /* ......................................................................... */ void backtrace( void ) { fprintf( stderr, "***backtrace...n" ); print_stack(); fprintf( stderr, "***backtrace endsn" ); } /* ......................................................................... */ 2.4 ÈçºÎ±à³Ì»ñȡջµ×µØÖ· Q: ËäÈ»ºÜ¶à²Ù×÷ϵͳµÄÓû§½ø³ÌÕ»µ×µØÖ·¹Ì¶¨£¬µ«ÊÇÎÒÐèҪдһ¸ö¿É¹ã·ºÒÆÖ²C³ÌÐò »ñÈ¡Õâ¸öÕ»µ×µØÖ·¡£ A: tt <warning3@nsfocus.com> 2001-06-02 19:40 ¼ÙÉè¶ÑÕ»(stack)ÏòµÍµØÖ··½ÏòÔö³¤£¬ÔòËùνջµ×Ö¸¶ÑÕ»(stack)×î¸ßµØÖ· x86/Linux Õ»µ×ÊÇ0xc0000000( Õ»µ×ÍùµÍµØÖ·µÄ4¸ö×Ö½Ú×ÜÊÇÁã ) SPARC/Solaris 7/8 Õ»µ×ÊÇ0xffbf0000( Õ»µ×ÍùµÍµØÖ·µÄ4¸ö×Ö½Ú×ÜÊÇÁã ) SPARC/Solaris 2.6 Õ»µ×ÊÇ0xf0000000( Õ»µ×ÍùµÍµØÖ·µÄ4¸ö×Ö½Ú×ÜÊÇÁã ) x86/FreeBSD Õ»µ×ÊÇ0xbfc00000( Õ»µ×ÍùµÍµØÖ·µÄ4¸ö×Ö½Ú×ÜÊÇÁã ) x86/NetBSD 1.5 Õ»µ×ÊÇ0xbfbfe000 x86/OpenBSD 2.8 Õ»µ×ÊÇ0xdfbfe000 D: jonah ¶ÔÓÚNetBSD 1.5£¬Õ»µ×ÊÇ0xbfc00000¡£¸ù¾ÝÔ´Â룬×î¸ßÓû§µØÖ·ÊÇ0xbfbfe000£¬ÒòΪ ×îºó4MB(2^22)µÄ×îºóÁ½Ò³(0x2000×Ö½Ú£¬Ò»Ò³4096×Ö½Ú)±£ÁôÓÃ×öUÇø£¬µ«ÊÇĿǰ²»Ô٠ʹÓÃÕâ¿éÄÚ´æ¡£Òò´Ë£¬0xbfbfe000²ÅÊÇÕæÕýµÄÕ»µ×¡£ ttÔÚOpenBSD 2.8ÉϲâÊÔ½á¹û£¬Õ»µ×ÊÇ0xdfbfe000£¬×¢ÒâºÍNetBSD 1.5Ïà²îºÜ´ó¡£ A: tt <warning3@nsfocus.com> -------------------------------------------------------------------------- /* * gcc -Wall -O3 -o gstack gstack.c * * A simple example to get the current stack bottom address * warning3 <warning3@nsfocus.com> * 2001-06-01 * * Modified by scz <scz@nsfocus.com> * 2001-06-02 */ #include <stdio.h> #include <stdlib.h> #include <signal.h> #include <unistd.h> #include <setjmp.h> typedef void Sigfunc ( int ); /* for signal handlers */ Sigfunc * signal ( int signo, Sigfunc * func ); static Sigfunc * Signal ( int signo, Sigfunc * func ); static char * get_stack_bottom ( void ); static void segfault ( int signo ); static sigjmp_buf jmpbuf; static volatile sig_atomic_t canjump = 0; static Sigfunc *seg_handler; static Sigfunc *bus_handler; /* for xxxBSD */ Sigfunc * signal ( int signo, Sigfunc * func ) { struct sigaction act, oact; act.sa_handler = func; sigemptyset( &act.sa_mask ); act.sa_flags = 0; if ( sigaction( signo, &act, &oact ) < 0 ) { return( SIG_ERR ); } return( oact.sa_handler ); } /* end of signal */ static Sigfunc * Signal ( int signo, Sigfunc * func ) /* for our signal() function */ { Sigfunc * sigfunc; if ( ( sigfunc = signal( signo, func ) ) == SIG_ERR ) { exit( EXIT_FAILURE ); } return( sigfunc ); } /* end of Signal */ static char * get_stack_bottom ( void ) { volatile char *c; /* for autovar, must be volatile */ seg_handler = Signal( SIGSEGV, segfault ); bus_handler = Signal( SIGBUS, segfault ); c = ( char * )&c; if ( sigsetjmp( jmpbuf, 1 ) != 0 ) { Signal( SIGSEGV, seg_handler ); Signal( SIGBUS, bus_handler ); return( ( char * )c ); } canjump = 1; /* now sigsetjump() is OK */ while ( 1 ) { *c = *c; c++; } return( NULL ); } /* end of get_stack_bottom */ static void segfault ( int signo ) { if ( canjump == 0 ) { return; /* unexpected signal, ignore */ } canjump = 0; siglongjmp( jmpbuf, signo ); /* jump back to main, don't return */ } /* end of segfault */ int main ( int argc, char * argv[] ) { fprintf( stderr, "Current stack bottom is at 0x%pn", get_stack_bottom() ); return( EXIT_SUCCESS ); } /* end of main */ -------------------------------------------------------------------------- D: scz <scz@nsfocus.com> 2001-06-03 00:38 W. Richard StevensÔÚ<<Advanced Programming in the UNIX Environment>>ÖÐÏêϸ ½éÉÜÁËsetjmp/longjmpÒÔ¼°sigsetjmp/siglongjmpº¯Êý¡£ Õâ¸ö³ÌÐòµÄÔÀíºÜ¼òµ¥£¬²»¶ÏÏòÕ»µ×·½Ïòȡֵ£¬Ô½¹ýÕ»µ×µÄµØÖ··ÃÎʻᵼÖÂSIGSEGV Ðźţ¬È»ºóÀûÓó¤Ìø×ª»Øµ½Ö÷Á÷³Ì±¨¸æµ±Ç°cÖµ£¬×ÔÈ»¶ÔÓ¦Õ»µ×¡£ tt²âÊÔ±íÃ÷£¬ÔÚx86/FreeBSDÖе¼ÖÂSIGBUSÐźš£¾Ýjonah±¨¸æ£¬²»½ö½öÊÇFreeBSD£¬ NetBSD ÒÔ¼° OpenBSD ϵͳÖÐÉÏÊö³ÌÐòÔ½½ç·ÃÎÊÒ²µ¼ÖÂSIGBUSÐźţ¬¶ø²»ÊÇSIGSEGV Ðźš£ ·Ç¾Ö²¿×ªÒÆ£¬±ÈÈ纯Êý¼ä×ªÒÆµÄʱºò¿¼ÂÇʹÓÃsetjmp/longjmp¡£µ«ÊÇÈç¹ûÉæ¼°µ½ÐźŠ¾ä±úÓëÖ÷Á÷³ÌÖ®¼äµÄ×ªÒÆ£¬¾Í²»ÄÜʹÓÃlongjmpÁË¡£µ±²¶×½µ½ÐźŽøÈëÐźžä±ú£¬´Ë ʱµ±Ç°Ðźű»×Ô¶¯¼ÓÈë½ø³ÌµÄÐÅºÅÆÁ±Î×ÖÖУ¬×èÖ¹ºóÀ´²úÉúµÄÕâÖÖÐźŸÉÈÅ´ËÐÅºÅ¾ä ±ú¡£Èç¹ûÓÃlongjmpÌø³öÐźžä±ú£¬´Ëʱ½ø³ÌµÄÐÅºÅÆÁ±Î×Ö״̬δ֪£¬ÓÐЩϵͳ×öÁË ±£´æ»Ö¸´£¬ÓÐЩϵͳûÓÐ×ö¡£¸ù¾ÝPOSIX.1£¬´ËʱӦ¸ÃʹÓÃsigsetjmp/siglongjmpº¯ Êý¡£ÏÂÃæÀ´×ÔSPARC/Solaris 7µÄsetjmp(3C) -------------------------------------------------------------------------- #include <setjmp.h> int setjmp ( jmp_buf env ); int sigsetjmp ( sigjmp_buf env, int savemask ); void longjmp ( jmp_buf env, int val ); void siglongjmp ( sigjmp_buf env, int val ); -------------------------------------------------------------------------- Èç¹ûsavemask·Ç0£¬sigsetjmpÔÚenvÖб£´æ½ø³Ìµ±Ç°ÐÅºÅÆÁ±Î×Ö£¬ÏàÓ¦siglongjmp»Ø À´µÄʱºò´ÓenvÖлָ´ÐÅºÅÆÁ±Î×Ö¡£ Êý¾ÝÀàÐÍsig_atomic_tÓÉANSI C¶¨Ò壬ÔÚдʱ²»»á±»Öжϡ£ËüÒâζ×ÅÕâÖÖ±äÁ¿ÔÚ¾ßÓÐ Ðé´æµÄϵͳÉϲ»»á¿çÔ½Ò³±ß½ç£¬¿ÉÒÔÓÃÒ»Ìõ»úÆ÷Ö¸Áî¶ÔÆä´æÈ¡¡£ÕâÖÖÀàÐ͵ıäÁ¿×ÜÊÇ ÓëANSIÀàÐÍÐÞÊηûvolatileÒ»²¢³öÏÖ£¬·ÀÖ¹±àÒëÆ÷ÓÅ»¯´øÀ´µÄ²»È·¶¨×´Ì¬¡£ ÔÚlongjmp/siglongjmpÖУ¬È«¾Ö¡¢¾²Ì¬±äÁ¿±£³Ö²»±ä£¬ÉùÃ÷ΪvolatileµÄ×Ô¶¯±äÁ¿Ò² ±£³Ö²»±ä¡£ ÎÞÂÛÊÇ·ñʹÓÃÁ˱àÒëÓÅ»¯¿ª¹Ø£¬ÎªÁ˱£Ö¤¹ã·º¼æÈÝÐÔ£¬¶¼Ó¦¸ÃÔÚget_stack_bottom() ÖÐÉùÃ÷cΪvolatile±äÁ¿¡£ ×¢ÒâÕâÀ±ØÐëʹÓó¤Ìø×ª£¬¶ø²»ÄÜ´ÓÐźžä±úÖÐÖ±½Ó·µ»Ø¡£ÒòΪµ¼ÖÂÐźÅSIGSEGV¡¢ SIGBUS·Ö·¢µÄÓï¾äʼÖÕ´æÔÚ£¬Ö±½Ó´ÓÐźžä±úÖзµ»ØÖ÷Á÷³Ì£¬½«»Øµ½Òý·¢ÐźŵÄÔÖ¸ Áî´¦£¬¶ø²»ÊÇÏÂÒ»ÌõÖ¸Áî(°ÑÕâÖÖÇé¿öÀí½â³ÉÒì³££¬¶ø²»ÊÇÖжÏ)£¬ÓÚÊÇÁ¢¼´µ¼ÖÂÏÂÒ» ´ÎÐźŷַ¢£¬³öÏÖ¹ãÒåÉϵÄËÀÑ»·£¬Ëùν³ÌÐò½©×¡¡£¿ÉÒÔ¼òµ¥ÐÞ¸ÄÉÏÊö³ÌÐò£¬²»ÀûÓà ³¤Ìø×ª£¬¼òµ¥¶ÔÒ»¸öÈ«¾Ö±äÁ¿×öÅжϾö¶¨ÊÇ·ñ¼ÌÐøÑ»·µÝÔöc£¬³ÌÐò×îÖÕ½©×¡£»Èç¹û ÔÚÐźžä±úÖÐÊä³öµ÷ÊÔÐÅÏ¢£¬ºÜÈÝÒ×·¢ÏÖÕâ¸ö¹ãÒåÉϵÄÎÞÏÞÑ»·¡£ D: scz <scz@nsfocus.com> 2001-06-03 00:40 ÔÚx86/LinuxϵͳÖÐÓÃÈçÏÂÃüÁî¿ÉÒÔÈ·¶¨Õ»ÇøËùÔÚ # cat /proc/1/maps <-- ¹Û²ì1ºÅ½ø³Ìinit ... ... bfffe000-c0000000 rwxp fffff000 00:00 0 # ÔÚSPARC/Solaris 7ÖÐÓÃ/usr/proc/bin/pmapÃüÁîÈ·¶¨Õ»ÇøËùÔÚ # /usr/proc/bin/pmap 1 <-- ¹Û²ì1ºÅ½ø³Ìinit ... ... FFBEC000 16K read/write/exec [ stack ] # 16KB == 0x4000£¬0xFFBEC000 + 0x4000 == 0xFFBF0000 ÓëÇ°Ãætt½éÉÜµÄ SPARC/Solaris 7/8 Õ»µ×ÊÇ0xffbf0000( Õ»µ×ÍùµÍµØÖ·µÄ4¸ö×Ö½Ú×ÜÊÇÁã ) Ïà·ûºÏ¡£ ´ËÍ⣬ÔÚSPARC/Solaris 7Ï£¬¿ÉÒÔÕâÑùÑéÖ¤Ö® # /usr/ccs/bin/nm -nx /dev/ksyms | grep "|_userlimit" [7015] |0x0000100546f8|0x000000000008|OBJT |GLOB |0 |ABS |_userlimit [8051] |0x000010054700|0x000000000008|OBJT |GLOB |0 |ABS |_userlimit32 # echo "_userlimit /J" | adb -k /dev/ksyms /dev/mem physmem 3b72 _userlimit: _userlimit: ffffffff80000000 # skd64 0x000010054700 8 byteArray [ 8 bytes ] ----> 0000000000000000 00 00 00 00 FF BF 00 00 # ~~~~~~~~~~~ ¶ÔÓÚ32-bitÓ¦ÓóÌÐòÀ´Ëµ£¬ÕâÊÇÓû§ ¿Õ¼äÉÏÏÞ Èç¹û±àÒë64-bitÓ¦ÓóÌÐò£¬Óû§¿Õ¼äÉÏÏÞÊÇ_userlimit£¬Ò²¾ÍÊÇ0xffffffff80000000 # /opt/SUNWspro/SC5.0/bin/cc -xarch=v9 -O -o gstack gstack.c # ./gstack Current stack bottom is at 0xffffffff80000000 # ¶ÔÓÚSPARC/Solaris 2.6 32-bit kernel mode # echo "_userlimit /X" | adb -k /dev/ksyms /dev/mem physmem 3d24 _userlimit: _userlimit: f0000000 # 2.5 ÈçºÎµÃµ½Ò»¸öÔËÐÐÖнø³ÌµÄÄÚ´æÓ³Ïñ A: Sun Microsystems 1998-03-30 ÓÐЩʱºò±ØÐëµÃµ½Ò»¸öÔËÐÐÖнø³ÌµÄÄÚ´æÓ³Ïñ¶ø²»ÄÜÍ£Ö¹¸Ã½ø³Ì£¬SolarisϵͳÁËÕâ ÑùµÄ¹¤¾ß£¬gcoreΪÔËÐÐÖнø³Ì´´½¨Ò»¸öcoreÎļþ¡£¼ÙÉèÎÒµÄbash½ø³ÌºÅÊÇ5347 # gcore 5347 gcore: core.5347 dumped # file core.5347 core.5347: ELF 32-λ MSB coreÎļþ SPARC °æ±¾ 1£¬À´×Ô'bash' # ×¢Ò⣬ֻÄÜ»ñÈ¡ÊôÖ÷ÊÇÄã×Ô¼ºµÄ½ø³ÌµÄÄÚ´æÓ³Ïñ£¬³ý·ÇÄãÊÇroot¡£ 2.6 µ÷ÊÔÆ÷ÈçºÎ¹¤×÷µÄ Q: ÎÒÏëÔÚÒ»¸ö×Ô¼º±àдµÄ³ÌÐòÖе¥²½ÔËÐÐÁíÍâÒ»¸ö³ÌÐò£¬»»¾ä»°Ëµ£¬ÄÇÊÇÒ»¸öµ÷ÊÔ Æ÷£¬¸ÃÈçºÎ×ö£¿ A: Erik de Castro Lopo <nospam@mega-nerd.com> ÕâÊÇÒ»¸ö²Ù×÷ϵͳÏà¹ØµÄÎÊÌâ¡£×îÒ»°ãµÄ»Ø´ðÊÇʹÓÃptrace()ϵͳµ÷Ó㬾¡¹ÜÎÒ ²»È·ÈϾ¿¾¹ÕâÓжàôÆÕ±é¡£Linux manÊÖ²áÉÏ˵SVr4¡¢SVID EXT¡¢AT&T¡¢X/OPEN ºÍBSD 4.3¶¼Ö§³ÖËü¡£ ΪÁËʹÓÃptrace()£¬ÄãµÄ³ÌÐòÓ¦¸Ãµ÷ÓÃfork()£¬È»ºóÔÚ×Ó½ø³ÌÖÐ×öÈçϵ÷Ó㺠ptrace( PTRACE_TRACEME, 0, 0, 0 ); ½ÓÏÂÀ´µ÷ÓÃexec()¼Ò×åµÄº¯ÊýÖ´ÐÐÄã×îÖÕÆóͼ¸ú×ٵijÌÐò¡£ ΪÁ˵¥²½½øÈë×Ó½ø³Ì£¬ÔÚ¸¸½ø³ÌÖе÷Ó㺠ptrace( PTRACE_SINGLESTEP, 0, 0, 0 ); »¹ÓÐһЩÆäËûº¯Êý×ö»Ö¸´/ÉèÖüĴæÆ÷¡¢ÄÚ´æ±äÁ¿Ò»ÀàµÄ¹¤×÷¡£ GDBµÄÔ´´úÂë×ãÒԻشðÕâ¸öÎÊÌâ¡£ 2.7 x86/LinuxÉÏÈçºÎ´¦ÀíSIGFPEÐźŠQ: ²Î¿´ÈçϳÌÐò -------------------------------------------------------------------------- /* * gcc -Wall -pipe -O3 -o sigfpe_test_0 sigfpe_test_0.c * * ×¢ÒâÓëÏÂÃæµÄ±àÒëЧ¹û½øÐжԱȣ¬È¥µôÓÅ»¯¿ª¹Ø-O3 * * gcc -Wall -pipe -o sigfpe_test_0 sigfpe_test_0.c */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <signal.h> #include <unistd.h> #include <setjmp.h> /* * for signal handlers */ typedef void Sigfunc ( int ); Sigfunc * signal ( int signo, Sigfunc *func ); static Sigfunc * Signal ( int signo, Sigfunc *func ); static void on_fpe ( int signo ); Sigfunc * signal ( int signo, Sigfunc *func ) { struct sigaction act, oact; act.sa_handler = func; sigemptyset( &act.sa_mask ); act.sa_flags = 0; if ( signo == SIGALRM ) { #ifdef SA_INTERRUPT act.sa_flags |= SA_INTERRUPT; /* SunOS 4.x */ #endif } else { #ifdef SA_RESTART act.sa_flags |= SA_RESTART; /* SVR4, 44BSD */ #endif } if ( sigaction( signo, &act, &oact ) < 0 ) { return( SIG_ERR ); } return( oact.sa_handler ); } /* end of signal */ static Sigfunc * Signal ( int signo, Sigfunc *func ) { Sigfunc *sigfunc; if ( ( sigfunc = signal( signo, func ) ) == SIG_ERR ) { perror( "signal" ); exit( EXIT_FAILURE ); } return( sigfunc ); } /* end of Signal */ static void on_fpe ( int signo ) { fprintf( stderr, "here is on_fpen" ); return; } /* end of on_fpe */ int main ( int argc, char * argv[] ) { unsigned int i; Signal( SIGFPE, on_fpe ); i = 51211314 / 0; /* * ÁíÍ⣬Ôö¼ÓÕâÐкó£¬ÔٴζԱÈÓÐ-O3ºÍÎÞ-O3µÄЧ¹û * * fprintf( stderr, "i = %#Xn", i ); */ return( EXIT_SUCCESS ); } /* end of main */ -------------------------------------------------------------------------- ÓÐ-O3¡¢ÎÞ-O3£¬ÒÔ¼°ÓÐÎÞ×îºóÄÇÌõfprintf()Óï¾ä£¬Ð§¹ûÉÏÓвî±ð£¬×ÔÐжԱȡ£Èç¹û Êä³ö"here is on_fpe"£¬Ôò»á·¢ÏÖÓÀ²»Í£Ö¹¡£ D: СËÄ <scz@nsfocus.com> 2001-12-14 18:25 ΪÁ˱ãÓÚÌÖÂÛ£¬Ô¼¶¨Á½¸öÃû´Ê£¬ÖжϺÍÒì³£¡£ÕâÀïÖжÏÖ¸×î³£¹æµÄÖжϣ¬±ÈÈçintÖ¸ Áî´øÀ´µÄÈíÖжϡ£Òì³£µÄµäÐÍ´ú±íÓгý0´í¡£Çø±ðÔÚÓÚ£¬·¢ÉúÒ쳣ʱ£¬x86¼Ü¹¹ÉÏCPU ½«µ±Ç°EIP(Ö¸ÏòÒý·¢Òì³£µÄÖ¸Áî)ѹջ£¬·¢ÉúÖжÏʱ£¬x86¼Ü¹¹ÉÏCPU½«µ±Ç°EIPµÄºóÒ» ¸öµØÖ·(Ö¸ÏòÒý·¢ÖжϵÄÖ¸ÁîµÄºóÒ»ÌõÖ¸Áî)ѹջ¡£ÔÚÒì³£´¦Àí´úÂëÖУ¬Èç¹ûÈÏΪÄܹ» ´ÓÔÖÄÑÖлָ´£¬¿ÉÒÔ²»Ð޸ı»Ñ¹Õ»µÄEIP£¬´Ó¶ø·µ»Øµ½Òý·¢Òì³£µÄÖ¸Áî´¦¡£¸ü¶àϸ½Ú Çë²é¿´IntelÊֲᡣ ÕâЩÊÇ´ÓǰDOSϲÐÁôµÄ»ã±à֪ʶ£¬²»¹ýÒ²¿ìÍü¹âÁË£¬¸Õ²ÅÓÖÕÒÔª±¦±¦È·ÈÏÁËһϡ£ ÔÚÉÏÊö´úÂëÖУ¬on_fpe()Ö±½Ó·µ»ØÁË£¬µ¼ÖÂÔٴδ¥·¢Òì³££¬ËùÒÔÎÞÐÝÖ¹Êä³ö¡£ÊÂʵÉÏ ÔÚËùÓеļÆËãÆ÷´¦Àí³ÌÐòÖУ¬¶¼»á¶ÔSIGFPEÐźÅ×öÏàÓ¦´¦Àí£¬Ç°Ð©ÈÕ×Ó¿´yacc/lexµÄ ʱºòÓÖÅöÉϹý¡£ÕýÈ·µÄ×ö·¨ÊÇ£¬ÀûÓÃÔ¶Ìø×ª×ªÒÆ£¬ÈÿªÒý·¢Òì³£µÄÖ¸Áî¡£ ´úÂëÐÞ¸ÄÈçÏ -------------------------------------------------------------------------- /* * gcc -Wall -pipe -O3 -o sigfpe_test_1 sigfpe_test_1.c * * ×¢ÒâÓëÏÂÃæµÄ±àÒëЧ¹û½øÐжԱȣ¬È¥µôÓÅ»¯¿ª¹Ø-O3 * * gcc -Wall -pipe -o sigfpe_test_1 sigfpe_test_1.c */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <signal.h> #include <unistd.h> #include <setjmp.h> /* * for signal handlers */ typedef void Sigfunc ( int ); Sigfunc * signal ( int signo, Sigfunc *func ); static Sigfunc * Signal ( int signo, Sigfunc *func ); static void on_fpe ( int signo ); static sigjmp_buf jmpbuf; static volatile sig_atomic_t canjump = 0; Sigfunc * signal ( int signo, Sigfunc *func ) { struct sigaction act, oact; act.sa_handler = func; sigemptyset( &act.sa_mask ); act.sa_flags = 0; if ( signo == SIGALRM ) { #ifdef SA_INTERRUPT act.sa_flags |= SA_INTERRUPT; /* SunOS 4.x */ #endif } else { #ifdef SA_RESTART act.sa_flags |= SA_RESTART; /* SVR4, 44BSD */ #endif } if ( sigaction( signo, &act, &oact ) < 0 ) { return( SIG_ERR ); } return( oact.sa_handler ); } /* end of signal */ static Sigfunc * Signal ( int signo, Sigfunc *func ) { Sigfunc *sigfunc; if ( ( sigfunc = signal( signo, func ) ) == SIG_ERR ) { perror( "signal" ); exit( EXIT_FAILURE ); } return( sigfunc ); } /* end of Signal */ static void on_fpe ( int signo ) { if ( canjump == 0 ) { return; /* unexpected signal, ignore */ } canjump = 0; fprintf( stderr, "here is on_fpen" ); siglongjmp( jmpbuf, signo ); /* jump back to main, don't return */ return; } /* end of on_fpe */ int main ( int argc, char * argv[] ) { unsigned int i; if ( sigsetjmp( jmpbuf, 1 ) != 0 ) { fprintf( stderr, "c u latern" ); return( EXIT_SUCCESS ); } /* * now sigsetjump() is OK */ canjump = 1; Signal( SIGFPE, on_fpe ); i = 51211314 / 0; /* * ÁíÍ⣬Ôö¼ÓÕâÐкó£¬ÔٴζԱÈÓÐ-O3ºÍÎÞ-O3µÄЧ¹û * * fprintf( stderr, "i = %#Xn", i ); */ return( EXIT_SUCCESS ); } /* end of main */ -------------------------------------------------------------------------- ¹ØÓÚ-O3µÄÌÖÂÛ£¬¶Ôgcc±àÒëÆ÷ÊìϤµÄÅóÓÑÇë¼ÌÐø£¬ºÇ£¬ÎÒ¶ÔLinuxϵÄÕâ´Ë¶«Î÷£¬Êµ ÔÚȱ·¦ÐËȤ¡£ 3. -lelf¡¢-lkvm¡¢-lkstatÏà¹ØÎÊÌâ 3.1 ÈçºÎÅжϿÉÖ´ÐÐÎļþÊÇ·ñЯ´øÁ˵÷ÊÔÐÅÏ¢ Q: ijЩʱºòÐèÒªÖªµÀ±àÒë¿ÉÖ´ÐÐÎļþʱÊÇ·ñЯ´øÁ˵÷ÊÔÐÅÏ¢(±ÈÈçÊÇ·ñÖ¸¶¨ÁË-g±àÒë Ñ¡Ïî)¡£¼ì²é¿ÉÖ´ÐÐÎļþÖÐÊÇ·ñ°üº¬".stab" elf section£¬".stab" sectionÓÃÓÚ ±£´æÏà¹Øµ÷ÊÔÐÅÏ¢¡£ A: Sun Microsystems 2000-05-15 ÏÂÃæÕâ¸ö½Å±¾ÑÝʾÈçºÎÅжϿÉÖ´ÐÐÎļþÊÇ·ñЯ´øµ÷ÊÔÐÅÏ¢ -------------------------------------------------------------------------- #! /bin/sh # # Script that test whether or not a given file has been built for # debug (-g option specified in the compilation) if [ $# -le 0 ] then echo "Usage: $1 filename" exit 1 fi if [ ! -f $1 ] then echo "File $1 does not exist" exit 1 fi /usr/ccs/bin/dump -hv $1 | /bin/egrep -s '.stab$' if [ $? -eq 0 ] then echo "File '$1' has been built for debug" exit 0 else echo "File '$1' has not been built for debug" exit 1 fi -------------------------------------------------------------------------- Èç¹û¶ÔELFÎļþ¸ñʽ²»ÊìϤ£¬Àí½âÉÏÊö´úÂë¿ÉÄÜÓеãÀ§ÄÑ£¬²Î¿´ http://www.digibel.org/~tompy/hacking/elf.txt£¬ÕâÊÇ1.1°æµÄELFÎļþ¸ñʽ¹æ·¶¡£ 3.2 mprotectÈçºÎÓà A: СËÄ <scz@nsfocus.com> # truss prtconf 2>&1 | grep sysconf sysconfig(_CONFIG_PAGESIZE) = 8192 sysconfig(_CONFIG_PHYS_PAGES) = 16384 # ÓÉ´Ë¿ÉÖªµ±Ç°ÏµÍ³Ò³³ß´çÊÇ8192×Ö½Ú¡£ -------------------------------------------------------------------------- /* * gcc -Wall -g -ggdb -static -o mtest mtest.c */ #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <sys/mman.h> int main ( int argc, char * argv[] ) { char *buf; char c; /* * ·ÖÅäÒ»¿éÄڴ棬ӵÓÐȱʡµÄrw-±£»¤ */ buf = ( char * )malloc( 1024 + 8191 ); if ( !buf ) { perror( "malloc" ); exit( errno ); } /* * Align to a multiple of PAGESIZE, assumed to be a power of two */ buf = ( char * )( ( ( unsigned int )buf + 8191 ) & ~8191 ); c = buf[77]; buf[77] = c; printf( "okn" ); /* * Mark the buffer read-only. * * ±ØÐë±£Ö¤ÕâÀïbufλÓÚÒ³±ß½çÉÏ£¬·ñÔòmprotect()ʧ°Ü£¬±¨¸æÎÞЧ²ÎÊý */ if ( mprotect( buf, 1024, PROT_READ ) ) { perror( "nmprotect" ); exit( errno ); } c = buf[77]; /* * Write error, program dies on SIGSEGV */ buf[77] = c; exit( 0 ); } /* end of main */ -------------------------------------------------------------------------- $ ./mtest ok ¶Î´íÎó (core dumped) <-- ÄÚ´æ±£»¤Æð×÷ÓÃÁË $ 3.3 mmapÈçºÎÓà A: СËÄ <scz@nsfocus.com> ÏÂÃæÐ´Ò»¸öÍê³ÉÎļþ¸´Öƹ¦ÄܵÄС³ÌÐò£¬ÀûÓÃmmap(2)£¬¶ø²»ÊDZê×¼ÎļþI/O½Ó¿Ú¡£ -------------------------------------------------------------------------- /* * gcc -Wall -O3 -o copy_mmap copy_mmap.c */ #include <stdio.h> #include <stdlib.h> #include <string.h> /* for memcpy */ #include <strings.h> #include <sys/mman.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #define PERMS 0600 int main ( int argc, char * argv[] ) { int src, dst; void *sm, *dm; struct stat statbuf; if ( argc != 3 ) { fprintf( stderr, " Usage: %s <source> <target>n", argv[0] ); exit( EXIT_FAILURE ); } if ( ( src = open( argv[1], O_RDONLY ) ) < 0 ) { perror( "open source" ); exit( EXIT_FAILURE ); } /* ΪÁËÍê³É¸´ÖÆ£¬±ØÐë°üº¬¶Á´ò¿ª£¬·ñÔòmmap()ʧ°Ü */ if ( ( dst = open( argv[2], O_RDWR | O_CREAT | O_TRUNC, PERMS ) ) < 0 ) { perror( "open target" ); exit( EXIT_FAILURE ); } if ( fstat( src, &statbuf ) < 0 ) { perror( "fstat source" ); exit( EXIT_FAILURE ); } /* * ²Î¿´Ç°ÃæmanÊÖ²áÖеÄ˵Ã÷£¬mmap()²»ÄÜÓÃÓÚÀ©Õ¹Îļþ³¤¶È¡£ËùÒÔÕâÀï±ØÐëÊ * ÏÈÀ©´óÄ¿±êÎļþ³¤¶È£¬×¼±¸Ò»¸ö¿Õ¼Ü×ӵȴý¸´ÖÆ¡£ */ if ( lseek( dst, statbuf.st_size - 1, SEEK_SET ) < 0 ) { perror( "lseek target" ); exit( EXIT_FAILURE ); } if ( write( dst, &statbuf, 1 ) != 1 ) { perror( "write target" ); exit( EXIT_FAILURE ); } /* ¶ÁµÄʱºòÖ¸¶¨ MAP_PRIVATE ¼´¿É */ sm = mmap( 0, ( size_t )statbuf.st_size, PROT_READ, MAP_PRIVATE | MAP_NORESERVE, src, 0 ); if ( MAP_FAILED == sm ) { perror( "mmap source" ); exit( EXIT_FAILURE ); } /* ÕâÀï±ØÐëÖ¸¶¨ MAP_SHARED ²Å¿ÉÄÜÕæÕý¸Ä±ä¾²Ì¬Îļþ */ dm = mmap( 0, ( size_t )statbuf.st_size, PROT_WRITE, MAP_SHARED, dst, 0 ); if ( MAP_FAILED == dm ) { perror( "mmap target" ); exit( EXIT_FAILURE ); } memcpy( dm, sm, ( size_t )statbuf.st_size ); /* * ¿ÉÒÔ²»ÒªÕâÐдúÂë * * msync( dm, ( size_t )statbuf.st_size, MS_SYNC ); */ return( EXIT_SUCCESS ); } /* end of main */ -------------------------------------------------------------------------- mmap()ºÃ´¦ÊÇ´¦Àí´óÎļþʱËÙ¶ÈÃ÷ÏÔ¿ìÓÚ±ê×¼ÎļþI/O£¬ÎÞÂÛ¶Áд£¬¶¼ÉÙÁËÒ»´ÎÓû§ ¿Õ¼äÓëÄں˿ռäÖ®¼äµÄ¸´Öƹý³Ì¡£²Ù×÷Äڴ滹±ãÓÚÉè¼Æ¡¢ÓÅ»¯Ëã·¨¡£ ÎļþI/O²Ù×÷/proc/self/mem²»´æÔÚÒ³±ß½ç¶ÔÆëµÄÎÊÌâ¡£ÖÁÉÙLinuxµÄmmap()µÄ×îºóÒ» ¸öÐβÎoffset²¢Î´Ç¿ÖÆÒªÇóÒ³±ß½ç¶ÔÆë£¬Èç¹ûÌṩµÄֵδ¶ÔÆë£¬ÏµÍ³×Ô¶¯ÏòÉÏÉáÈëµ½ Ò³±ß½çÉÏ¡£ malloc()·ÖÅäµÃµ½µÄµØÖ·²»¼ûµÃ¶ÔÆëÔÚÒ³±ß½çÉÏ /proc/self/memºÍ/dev/kmem²»Í¬¡£rootÓû§´ò¿ª/dev/kmem¾Í¿ÉÒÔÔÚÓû§¿Õ¼ä·ÃÎʵ½ Äں˿ռäµÄÊý¾Ý£¬°üÀ¨Æ«ÒÆ0´¦µÄÊý¾Ý£¬ÏµÍ³ÌṩÁËÕâÑùµÄÖ§³Ö¡£ ÏÔÈ»´úÂë¶Î¾¹ý/proc/self/mem¿ÉдӳÉäºóÒѾ¿Éд£¬ÎÞÐëmprotect()½éÈë¡£ D: scz <scz@nsfocus.com> Solaris 2.6ϲο´getpagesize(3C)ÊÖ²áÒ³£¬¹ØÓÚÈçºÎ»ñȡҳ´óС£¬Ò»°ãÊÇ8192¡£ Linuxϲο´getpagesize(2)ÊÖ²áÒ³£¬Ò»°ãÊÇ4096¡£ 3.4 getrusageÈçºÎÓà A: СËÄ <scz@nsfocus.com> ÔÚSPARC/Solaris 2.6/7ϽáÂÛÒ»Ö£¬Ö»Ö§³ÖÁËru_utimeºÍru_stime³ÉÔ±£¬ÆäËû³ÉÔ± ±»ÉèÖóÉ0¡£ÐÞ¸ÄÍ·ÎļþºóÔÚFreeBSD 4.3-RELEASEÉϲâÊÔ£¬Ôò²»Ö»Ö§³Öru_utimeºÍ ru_stime³ÉÔ±¡£´ÓFreeBSDµÄgetrusage(2)ÊÖ²áÒ³¿ÉÒÔ¿´µ½£¬Õâ¸öº¯ÊýÔ´×Ô4.2 BSD¡£ Èç´ËÀ´Ëµ£¬ÖÁÉÙ¶ÔÓÚSPARC/Solaris 2.6/7£¬getrusage(3C)²¢ÎÞ¶à´óÒâÒå¡£ 3.5 setitimerÈçºÎÓà D: scz <scz@nsfocus.com> ΪʲôҪѧϰʹÓÃsetitimer(2)£¬ÒòΪalarm(3)ÊôÓÚ±»ÌÔ̵Ķ¨Ê±Æ÷¼¼Êõ¡£ A: СËÄ <scz@nsfocus.com> ÏÂÃæÊǸöx86/FreeBSD 4.3-RELEASEϵÄÀý×Ó -------------------------------------------------------------------------- /* * File : timer_sample.c * Author : Unknown (Don't ask me anything about this program) * Complie : gcc -Wall -pipe -O3 -o timer_sample timer_sample.c * Platform : x86/FreeBSD 4.3-RELEASE * Date : 2001-09-18 15:18 */ /************************************************************************ * * * Head File * * * ************************************************************************/ #include <stdio.h> #include <stdlib.h> #include <sys/time.h> #include <signal.h> /************************************************************************ * * * Macro * * * ************************************************************************/ typedef void Sigfunc ( int ); /* for signal handlers */ /************************************************************************ * * * Function Prototype * * * ************************************************************************/ static void Atexit ( void ( *func ) ( void ) ); static void init_signal ( void ); static void init_timer ( void ); static void on_alarm ( int signo ); static void on_terminate ( int signo ); static int Setitimer ( int which, const struct itimerval *value, struct itimerval *ovalue ); Sigfunc * signal ( int signo, Sigfunc *func ); static Sigfunc * Signal ( int signo, Sigfunc *func ); static void terminate ( void ); /************************************************************************ * * * Static Global Var * * * ************************************************************************/ /************************************************************************/ static void Atexit ( void ( *func ) ( void ) ) { if ( atexit( func ) != 0 ) { perror( "atexit" ); exit( EXIT_FAILURE ); } return; } /* end of Atexit */ /* * ³õʼ»¯Ðźžä±ú */ static void init_signal ( void ) { int i; Atexit( terminate ); for ( i = 1; i < 9; i++ ) { Signal( i, on_terminate ); } Signal( SIGTERM, on_terminate ); Signal( SIGALRM, on_alarm ); return; } /* end of init_signal */ static void init_timer ( void ) { struct itimerval value; value.it_value.tv_sec = 1; value.it_value.tv_usec = 0; value.it_interval = value.it_value; Setitimer( ITIMER_REAL, &value, NULL ); } /* end of init_timer */ static void on_alarm ( int signo ) { static int count = 0; /* * ÑÝʾÓã¬ÕâºÜΣÏÕ */ fprintf( stderr, "count = %un", count++ ); return; } static void on_terminate ( int signo ) { /* * Õâ´ÎÎÒÃÇʹÓÃatexit()º¯Êý */ exit( EXIT_SUCCESS ); } /* end of on_terminate */ static int Setitimer ( int which, const struct itimerval *value, struct itimerval *ovalue ) { int ret; if ( ( ret = setitimer( which, value, ovalue ) ) < 0 ) { perror( "setitimer" ); exit( EXIT_FAILURE ); } return( ret ); } /* end of Setitimer */ Sigfunc * signal ( int signo, Sigfunc *func ) { struct sigaction act, oact; act.sa_handler = func; sigemptyset( &act.sa_mask ); act.sa_flags = 0; if ( signo == SIGALRM ) { #ifdef SA_INTERRUPT act.sa_flags |= SA_INTERRUPT; /* SunOS 4.x */ #endif } else { #ifdef SA_RESTART act.sa_flags |= SA_RESTART; /* SVR4, 44BSD */ #endif } if ( sigaction( signo, &act, &oact ) < 0 ) { return( SIG_ERR ); } return( oact.sa_handler ); } /* end of signal */ static Sigfunc * Signal ( int signo, Sigfunc *func ) { Sigfunc *sigfunc; if ( ( sigfunc = signal( signo, func ) ) == SIG_ERR ) { perror( "signal" ); exit( EXIT_FAILURE ); } return( sigfunc ); } /* end of Signal */ static void terminate ( void ) { fprintf( stderr, "n" ); return; } /* end of terminate */ int main ( int arg, char * argv[] ) { init_signal(); init_timer(); while ( 1 ) { /* * ÐγÉ×èÈû£¬½µµÍCPUÕ¼ÓÃÂÊ */ getchar(); } return( EXIT_SUCCESS ); } /* end of main */ /************************************************************************/ -------------------------------------------------------------------------- D: scz <scz@nsfocus.com> ÌÖÂÛÒ»¸öÎÊÌâ¡£getchar()µÄ×÷ÓÃÊǽµµÍCPUÕ¼ÓÃÂÊ£¬¿ÉÓÃtopÃüÁî²é¿´¡£ timer_sample.cÖл»ÓÃITIMER_PROF/SIGPROFºó£¬Äã»á·¢ÏÖÉÏÊö³ÌÐòÎÞÊä³ö£¬ÎÒ¾Ý´Ë ÈÏΪgetchar()ÐγɵÄ×èÈû²»¼ÆËãÔÚ½ø³ÌÐéÄâʱÖÓÖУ¬Ò²²»ÈÏΪϵͳÕýÔÚΪ½ø³ÌÀûÒæ ¶øÔËÐС£ Èç¹û½øÒ»²½½«getchar()È¥µô£¬Ö±½ÓÒ»¸öwhile()ÎÞÏÞÑ»·£¬¼´Ê¹»»Óà ITIMER_PROF/SIGPROF£¬³ÌÐò»¹ÊÇÓÐÊä³ö¡£²»¹ýtopÃüÁî²é¿´µÄ½á¹ûÈÃÄãÍÂѪ£¬CPU¼¸ ºõÎÞ¿ÕÏС£ D: scz <scz@nsfocus.com> setitimer( ITIMER_REAL, &value, NULL )µ¼Ö·ַ¢SIGALRMÐźţ¬Èç¹ûͬʱʹÓà alarm()£¬ÊƱÏÔì³É³åÍ»¡£´ËÍâ×¢Òâsleep()¡¢pause()µÈº¯Êý´øÀ´µÄ³åÍ»¡£ 4. ϵͳ×ÊÔ´Ïà¹ØÎÊÌâ 4.1 Ö÷Á÷Unix²Ù×÷ϵͳÉÏÈçºÎ±à³Ì»ñÈ¡½ø³ÌµÄÄÚ´æ¡¢CPUÀûÓÃ×´¿ö Q: SolarisÏÂÈçºÎ±à³Ì»ñÖªCPUÕ¼ÓÃÂʺÍÄÚ´æÕ¼ÓÃÐÅÏ¢ÄØ£¬¿ÉÒÆÖ²Â𣿠Q: ÎÒÏëд¸ö³ÌÐò±éÀúµ±Ç°ÔËÐÐÖеĻ½ø³Ì£¬SolarisÌṩÏàӦϵͳµ÷ÓÃÁËÂð A: Nicholas Dronen <ndronen@io.frii.com> ²»¿ÉÒÆÖ²¡£man -s 4 proc£¬man -s 3k kstat Èç¹û²»ÊDZà³Ì£¬¿ÉÒÔÓÃtop¡¢mpstat¡¢vmstat¡¢sar(1)µÈµÈ£¬»¹ÓÐ /usr/ucb/ps -aux£¬¶ÔÓÚSolarisÀ´Ëµ£¬ºóÕ߸üÖ±½Ó¾«Á¶£¬top²»ÊDZê×¼ÅäÖᣠ# /usr/bin/prstat (Solaris 8 prstat(1M)ÊÖ²áÒ³) # /usr/ucb/ps -aux | head (Solaris 2.x) Q: Ö÷Á÷Unix²Ù×÷ϵͳÉÏÈçºÎ±à³Ì»ñÈ¡½ø³ÌµÄÄÚ´æ¡¢CPUÀûÓÃ×´¿ö£¬AIX¡¢HP¡¢SUN process memory usage process cpu time usage A: Nate Eldredge <neldredge@hmc.edu> man -s 3C getrusage D: СËÄ <scz@nsfocus.com> ÔÚSPARC/Solaris 2.6/7ϽáÂÛÒ»Ö£¬Ö»Ö§³ÖÁËru_utimeºÍru_stime³ÉÔ±£¬ÆäËû³ÉÔ± ±»ÉèÖóÉ0¡£FreeBSD 4.3-RELEASEÉϲâÊÔ£¬Ôò²»Ö»Ö§³Öru_utimeºÍru_stime³ÉÔ±¡£´Ó FreeBSDµÄgetrusage(2)ÊÖ²áÒ³¿ÉÒÔ¿´µ½£¬Õâ¸öº¯ÊýÔ´×Ô4.2 BSD¡£ ÖÁÉÙ¶ÔÓÚSPARC/Solaris 2.6/7£¬getrusage(3C)²¢ÎÞ¶à´óÒâÒå¡£ A: Robert Owen Thomas <robt@cymru.com> ¶ÔÓÚSolaris£¬¿ÉÒÔÀûÓÃprocfs½Ó¿Ú£¬ÏÂÃæµÄÀý×Ó»ñȡָ¶¨½ø³ÌµÄÄÚ´æÕ¼ÓÃÇé¿ö -------------------------------------------------------------------------- /* * @(#)memlook.c 1.0 10 Nov 1997 * Robert Owen Thomas robt@cymru.com * memlook.c -- A process memory utilization reporting tool. * * gcc -Wall -O3 -o memlook memlook.c */ #pragma ident "@(#)memlook.c 1.0 10 Nov 1997 Robert Owen Thomas robt@cymru.com" #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/signal.h> #include <sys/syscall.h> #include <sys/procfs.h> #include <sys/param.h> #include <unistd.h> #include <fcntl.h> int counter = 10; int showUsage ( const char * ); void getInfo ( int, int ); int main ( int argc, char * argv[] ) { int fd, pid, timeloop = 0; char pidpath[BUFSIZ]; /* /usr/include/stdio.h: #define BUFSIZ 1024 */ switch ( argc ) { case 2: break; case 3: timeloop = atoi( argv[2] ); break; default: showUsage( argv[0] ); break; } /* end of switch */ pid = atoi( argv[1] ); sprintf( pidpath, "/proc/%-d", pid ); /* -±íʾÏò×ó¿¿ */ /* * /proc/1/ÊÇĿ¼£¬µ«ÔÚÕâÖÖÓ÷¨ÖУ¬¾ÍÊÇÖ±½Ó´ò¿ªÄ¿Â¼£¬²»ÊÇ´ò¿ªÎļþ */ if ( ( fd = open( pidpath, O_RDONLY ) ) < 0 ) { perror( pidpath ); exit( 1 ); } if ( 0 < timeloop ) { for ( ; ; ) { getInfo( fd, pid ); sleep( timeloop ); } } getInfo( fd, pid ); close( fd ); exit( 0 ); } /* end of main */ int showUsage ( const char * progname ) { fprintf( stderr, "%s: usage: %s < PID > [time delay]n", progname, progname ); exit( 3 ); } /* end of showUsage */ void getInfo ( int fd, int pid ) { prpsinfo_t prp; prstatus_t prs; if ( ioctl( fd, PIOCPSINFO, &prp ) < 0 ) { perror( "ioctl" ); exit( 5 ); } if ( ioctl( fd, PIOCSTATUS, &prs ) < 0 ) { perror( "ioctl" ); exit( 7 ); } if ( counter > 9 ) { fprintf( stdout, "PIDtIMAGEttRSSttHEAPttSTACKn" ); counter = 0; } fprintf( stdout, "%ut%-9ut%-9ut%-15ut%-15un", pid, ( unsigned int )prp.pr_bysize, ( unsigned int )prp.pr_byrssize, ( unsigned int )prs.pr_brksize, ( unsigned int )prs.pr_stksize ); counter++; } /* end of getInfo */ -------------------------------------------------------------------------- 4.2 SolarisÏÂÈçºÎ»ñÖªCPUËÙÂÊ A: Philip Brown <phil+s3@bolthole.no-bots.com> psrinfo -v psrinfo | grep on-line | wc -l ¼òµ¥¸ø³öCPUÊýÄ¿ A: scz <scz@nsfocus.com> # /usr/platform/`uname -i`/sbin/prtdiag -v # /usr/platform/`uname -m`/sbin/prtdiag -v # /usr/bin/netstat -k cpu_info0 A: Tony Walton <tony.walton@uk.sun.com> Èç¹ûÄã×°ÁËSun Workshop£¬»¹¿ÉÒÔ³¢ÊÔfpversionÃüÁî # /opt/SUNWspro/bin/fpversion A SPARC-based CPU is available. CPU's clock rate appears to be approximately 266.1 MHz. Kernel says CPU's clock rate is 270.0 MHz. Kernel says main memory's clock rate is 90.0 MHz. Sun-4 floating-point controller version 0 found. An UltraSPARC chip is available. FPU's frequency appears to be approximately 277.1 MHz. Use "-xtarget=ultra2i -xcache=16/32/1:256/64/1" code-generation option. Hostid = 0x80BC3CB3. # 4.3 ÈçºÎ±à³Ì»ñÈ¡Solarisϵͳµ±Ç°ÄÚ´æ´óС Q: ÈçºÎ±à³Ì(»òÕßÓÐʲôÏÖ³ÉÃüÁî)»ñÈ¡Solarisϵͳµ±Ç°ÄÚ´æ´óС£¿ A: Nithyanandham <m.nithyanandham@blr.spcnl.co.in> ¼¸¸öÏÖ³ÉÃüÁî /usr/platform/`uname -m`/sbin/prtdiag -v | grep Memory prtconf -v | grep Memory Èç¹û×°ÁËGNU top£¬Ò²¿ÉÒÔÖ±½ÓÓÃtopÃüÁî¿´µ½¡£ D: scz <scz@nsfocus.com> truss prtconfµÄÊä³öÖÐÓÐÈçÏÂÄÚÈÝ sysconfig(_CONFIG_PAGESIZE) = 8192 sysconfig(_CONFIG_PHYS_PAGES) = 16384 Memory size: 128 Megabytes # /usr/ccs/bin/nm -nx /dev/ksyms | grep "|sysconfig$" 10626] |0x0000100ec110|0x0000000001bc|FUNC |GLOB |0 |ABS |sysconfig # find /usr/include -type f -name "*.h" | xargs grep -l _CONFIG_PAGESIZE /usr/include/sys/sysconfig.h # vi -R /usr/include/sys/sysconfig.h /* * cmd values for _sysconfig system call. * WARNING: This is an undocumented system call, * therefore future compatibility can not * guaranteed. */ #define _CONFIG_PAGESIZE 6 /* system page size */ #define _CONFIG_PHYS_PAGES 26 /* phys mem installed in pages */ ²Î¿´sysconf(3C)ÊÖ²áÒ³¡£ _SC_PAGESIZE _SC_PAGE_SIZE _SC_PHYS_PAGES A: Casper Dik <Casper.Dik@Holland.Sun.COM> -------------------------------------------------------------------------- /* * Program to determine the size installed physical memory on Suns. * * Casper Dik. */ #define MEGABYTE 0x00100000 #define MAXMEM 0x7ff00000 #define THEMEM "/dev/mem" #include <stdio.h> #include <fcntl.h> #include <sys/types.h> #include <unistd.h> int main ( int argc, char * argv[] ) { int fd = open( THEMEM, O_RDONLY ); char c; unsigned long pos, mapstart = 0; int totmb = 0; if ( fd == -1 ) { perror( THEMEM ); exit( 1 ); } for ( pos = 0; pos < MAXMEM; pos += MEGABYTE ) { if (lseek( fd, pos, 0 ) == -1 ) { perror( "lseek" ); exit( 1 ); } if ( read( fd, &c, 1 ) == -1 ) { int size = ( pos - mapstart ) / MEGABYTE; if ( size != 0 ) { printf( "found %3d MB starting at 0x%pn", size, ( void * )mapstart ); totmb += size; } mapstart = pos + MEGABYTE; /* start of next possible mapping */ } } printf( "Total memory size: %d MBn", totmb ); exit( 0 ); } -------------------------------------------------------------------------- ÓÉÓÚÐèÒª¶Á·ÃÎÊ/dev/mem£¬ÆÕͨÓû§Óû§ÎÞ·¨Ê¹ÓøóÌÐò¡£ 5. ¿éÉ豸Ïà¹ØÎÊÌâ 5.1 CDROMÉ豸¾¿¾¹ÔÚÄÄÀï Q: ΪÁËmount¹âÇý£¬ÐèÒªÄÄЩ°ü A: SUNWvolr SUNWcstl SUNWcstlx D: Dennis Clarke <dclarke@blastwave.com> 1) su - root 2) /etc/init.d/volmgt stop 3) ls -1 /dev/dsk/c*s2 4) mount -F hsfs -o ro /dev/dsk/c0t6d0s2 /cdrom »òÕß 1) /etc/init.d/volmgt stop 2) /etc/init.d/volmgt start 3) volcheck 4) eject ¹Û²ì/etc/vold.conf Q: ÈçºÎ²ÅÄÜÖªµÀÄĸöÉ豸Îļþ¶ÔÓ¦CDROM(c0t2d0s0?)¡£Èç¹ûÓÐÒ»ÕŹâÅÌÔÚCDROMÀ ¿ÉÒÔÓÃdfÃüÁî¿´µ½¶ÔÓ¦µÄÉ豸Îļþ£¬µ«ÊÇûÓйâÅÌÔÚ¹âÇýÀïµÄʱºòÄØ£¿ A: /dev/sr0 ÊÇÒ»¸öÖ¸Ïò×îÖÕÉ豸ÎļþµÄ·ûºÅÁ´½Ó£¬½ö¶ÔSPARCÓÐЧ£¬²»°üÀ¨x86 A: Logan Shaw <logan@cs.utexas.edu> $ uname -sri SunOS 5.8 i86pc $ ls -l /dev/sr* lrwxrwxrwx /dev/sr0 -> dsk/c1t0d0s2 $ ÎÒÏëx86ÏÂÊÇÒ»ÑùµÄ Q: E420R£¬Solaris 7 11/99£¬ÎÒ´Óhttp://sunsolve.sun.com»ñµÃһЩ²¹¶¡²¢°²×°ÁË£¬ ½á¹ûÏÖÔÚÎҵĹâÇý³öÎÊÌâÁË¡£Ëƺõmount³É¹¦ÁË£¬µ«ÊÇÕÒ²»µ½Îļþ£¬/etc/mnttab ÖÐûÓÐÈκÎÓйعâÇýµÄÐÅÏ¢£¬²åÈëÒ»ÕŹâÅ̻ᵯ³öÒ»¸öÎļþ¹ÜÀíÆ÷´°¿Ú£¬µ«ÊÇû ÓÐÎļþ¡£ A: Danny Mann <dma@wwa.com> ¼ì²éÊÇ·ñ´òÁËÈçÏÂSolaris 7Äں˲¹¶¡106541-13ºÍ -14¡£ÕâÁ½¸ö²¹¶¡ÓÐÎÊÌâ¡£½â ¾ö°ì·¨ÊǽûÖ¹vold£¬ÊÖ¹¤mount¹âÇý¡£ A: rschicht@my-deja.com <rschicht@my-deja.com> ÊÔÊÔvolrmmount -dÃüÁî¡£ÓÃpatchadd -p¼ì²éÊÇ·ñ°²×°Á˲¹¶¡106541-14£¬·ÃÎÊÈç ÏÂÁ´½Ó http://sunsolve.Sun.COM/pub-cgi/show.pl?target=patches/patch-access »ñÈ¡²¹¶¡106541-14µÄ˵Ã÷£¬ÔĶÁNOTE 15¡£ A: ²¹¶¡106541-14µÄ˵Ã÷£¬NOTE 15 1. Ê×ÏȽûÖ¹µôvoldÊØ»¤½ø³Ì # /etc/init.d/volmgt stop 2. ÊÖ¹¤mount¹âÇý(É豸ÎļþÃû¿ÉÄܲ»Í¬) # /etc/mount -F hsfs -o ro /dev/dsk/c0t2d0s0 /cdrom ²é¿´/etc/vfstab¡¢/dev/dskÈ·ÈϹâÇýËùÔÚÉ豸ÎļþÃû¡£ 5.2 ÈçºÎµ¯³ö¹âÇý Q: ÔÚ°²×°Oracle 8iʱ£¬ÏµÍ³Ìáʾ²åÈëµÚ¶þÕŹâÅÌ£¬µ«ÊÇ´ËʱÎÞ·¨³É¹¦ejectµÚÒ»ÕÅ ¹âÅÌ£¬ÖÕ¶Ë¹ÒÆð£¬É±µôOracle 8iµÄ°²×°½ø³ÌÒ²ÎÞ¼ÃÓÚÊ¡£Î¨Ò»µÄ°ì·¨ÊÇreset¡£ A: Sergey Kurganov <mmerfi@home.com> ÏÂÃæµÄ²Ù×÷»òÐíÓÐËù°ïÖú 1) ÖÕÖ¹¾í¹ÜÀíÆ÷ # /etc/init.d/volmgt stop 2) unmount¹âÇý£¬ÊÖ¶¯eject 3) ÖØÆô¾í¹ÜÀíÆ÷ # /etc/init.d/volmgt start D: plane@smth.org 2002-02-26 01:03 ×°Oracle 9µÄʱºò£¬°²×°ÎĵµÌØÒâÌáÐÑÒªÓþø¶Ô·¾¶²ÅÄÜ»»ÅÌ¡£ 5.3 ÈçºÎÀûÓ󬼶¿é½øÐлָ´¹¤×÷ Q: Sun¹¤×÷Õ¾ÔÚrebootʱµôµçÁË£¬Óð²×°¹âÅÌÆô¶¯½øÈëµ¥Óû§Ä£Ê½£¬Ö´ÐÐfsckÃüÁîʱ ±¨´í Stop-A ok boot cdrom -s INIT: SINGLE USER MODE # fsck -o b=32 /dev/rdsk/c0t5d0s* Alternate super block location: 32. ** /dev/rdsk/c0t5d0s0 BAD SUPER BLOCK: MAGIC NUMBER WRONG USE AN ALTERNATE SUPER-BLOCK TO SUPPLY NEEDED INFORMATION; eg. fsck [-F ufs] -o b=# [special ...] where # is the alternate super block. SEE fsck_ufs(1M). Alternate super block location: 32. ** /dev/rdsk/c0t5d0s1 BAD SUPER BLOCK: MAGIC NUMBER WRONG USE AN ALTERNATE SUPER-BLOCK TO SUPPLY NEEDED INFORMATION; eg. fsck [-F ufs] -o b=# [special ...] where # is the alternate super block. SEE fsck_ufs(1M). Alternate super block location: 32. ** /dev/rdsk/c0t5d0s2 BAD SUPER BLOCK: MAGIC NUMBER WRONG USE AN ALTERNATE SUPER-BLOCK TO SUPPLY NEEDED INFORMATION; eg. fsck [-F ufs] -o b=# [special ...] where # is the alternate super block. SEE fsck_ufs(1M). Alternate super block location: 32. A: Sree Mokkapati <sree@broadcom.com> ÕýÈ·µÄÓ÷¨¾ÍÔÚ´íÎóÌáʾÐÅÏ¢ÀÄãÓ¦¸ÃʹÓÃÁíÍâµÄ³¬¼¶¿é½øÐлָ´¹¤×÷£¬32½ö ½öÊdz£Óñ¸·Ý³¬¼¶¿éÖ®Ò»¡£ fsck -F ufs -o b=32 device_name ´ËÍâÈç¹ûÏëÖªµÀ»¹ÓÐÄÄЩ±¸·Ý³¬¼¶¿é¿ÉÓã¬Ö´ÐÐ newfs -Nv device_name ÏÈÓÃdfµÈÃüÁîÈ·ÈÏÔʼdevice_name¡£ D: scz <scz@nsfocus.com> 2001-10-12 17:01 ÐÞ¶© SPARC/SolarisµÄÓ²ÅÌË𻵶à°ëÊÇÎļþϵͳ¸ùÇø±»ÆÆ»µ£¬²¢²»ÐèÒª²ðжӲÅ̵½ÆäËû »úÆ÷ÉÏmountºófsck£¬ÕÒÒ»ÕÅSolaris°²×°¹âÅÌ Stop-A½øÈëOBP״̬£¬ÔÚokÌáʾ·ûÏÂÊäÈë ok> boot cdrom -s ½øÈëµ¥Óû§Ä£Ê½¡£´ËʱÔÓиùÎļþϵͳ²¢Î´mountÉÏÀ´£¬Ò²²»ÐèÒªmountÔÓиùÎÄ ¼þϵͳ£¬Ö±½Ó newfs -Nv /dev/rdsk/c0t0d0s0 ÕÒ³öÔ¸ùÎļþϵͳËùÓб¸·Ý³¬¼¶¿éºÅ fsck -y -F ufs -o b=<ÈÎÒ»±¸·Ý³¬¼¶¿éºÅ> /dev/rdsk/c0t0d0s0 ÕâÀï¼ÙÉèÔ¸ùÎļþϵͳµÄÔʼÉ豸ÃûÊÇ/dev/rdsk/c0t0d0s0¡£ÆäËûÎļþϵͳµÄÔ Ê¼É豸Ãû¿ÉÒÔÔÚϵͳÍêºÃʱ df -k »ñÈ¡£¬»òÕß´Ó/etc/vfstabÖлñÈ¡ÐÅÏ¢¡£±ÈÈç /dev/rdsk/c0t0d0s0 / /dev/rdsk/c0t0d0s6 /usr /dev/rdsk/c0t0d0s7 /export/home vfstab(4)½âÊ͵úÜÄ£ºý£¬»ØÍ·ÎÒÉÏwww.google.comÈ¥ÕÒÕÒÆäËû×ÊÁÏ¡£ The fsck pass value of 2 means that the file system will be checked, but not sequentially 5.4 Solaris Root¿ÚÁîÍü¼ÇÁË Q: Íü¼ÇÁËroot¿ÚÁÔõô°ì A: Steve Menard <opsmaster@yahoo.com> Æô¶¯Ê±°´Stop-A½øÈëokÌáʾ·û ok boot cdrom -s (·ÅÈëÆô¶¯°²×°¹âÅÌ) mount /dev/dsk/c0t0d0s0 /mnt (ÕâÀïÖ¸¶¨Ô¸ùÇø¶ÔÓ¦µÄÔʼÉ豸Ãû) TERM=vt100;export TERM vi /mnt/etc/shadow ɾ³ýroot¿ÚÁî¼ÓÃÜ´®£¬±ÈÈç root:WxzL460hohWsU:10724:::::: ɾ³ýWxzL460hohWsU£¬È·ÈÏÄ㻹ÓÐ8¸öðºÅ£¬ÖØÆô¶¯ »òÕß /usr/sbin/reboot -- "cdrom -s" A: Philip Brown <phil+s3@bolthole.no-bots.com> ʹÓÃviÓкܶàÂé·³µÄµØ·½£¬¿ÉÒÔ¿¼ÂÇsed mount /dev/dsk/c0t0d0s0 /mnt sed 's/:WxzL460hohWsU:/::/' /mnt/etc/shadow > s mv s /mnt/etc/shadow »òÕßʹÓÃed mount /dev/dsk/c0t0d0s0 /mnt ed /mnt/etc/shadow 1s/root:[^:]*:/root::/ (×¢Òâ£¬Ç°ÃæÊÇ1£¬²»ÊÇl) w q 5.5 ÈçºÎʹÓÃfmthard A: Se¨¢n Boran <sean@boran.com> Èç¹ûÏ£Íû¶ÔµÚ¶þ¿éÎïÀíÓ²Å̵ķÖÇøÓëµÚÒ»¿éÎïÀíÓ²ÅÌÒ»Ñù£¬¿¼ÂÇfmthardºÍprtvtocµÄ ½áºÏʹÓã¬Òª±ÈÊÖ¹¤format¿ìµÃ¶à¡£±ÈÈ磬µÚÒ»¿éÎïÀíÓ²ÅÌÊÇtarget 3£¬µÚ¶þ¿éÎïÀí Ó²ÅÌÊÇtarget 1£¬ÎÒÃÇÏ£ÍûµÚ¶þ¿éÎïÀíÓ²ÅÌ´ÅÅ̾í±êÊÇ"mirror"£¬×öÈçϲÙ×÷£º /usr/sbin/prtvtoc /dev/rdsk/c0t3d0s2 | /usr/sbin/fmthard -n mirror -s - /dev/rdsk/c0t1d0s2 man -s 1M fmthardÁ˽â¸ü¶àϸ½Ú¡£ 5.6 ÈçºÎ´Ó¹âÅָ̻´Solaris 7µÄÒýµ¼ÉÈÇø A: paranoid@bbs.tsinghua.edu.cn ÔÚ°²×°ÅÌÀïÓÐÒ»¸ötoolsĿ¼£¬½øÈ¥ºóÓÐÒ»¸öÃüÁî½Ð×öinstallboot A: melonm@bbs.tsinghua.edu.cn ±ÈÈç installboot /usr/platform/`uname -i`/lib/fs/ufs/bootblk /dev/rdsk/c0t1d0s0 5.7 SolarisÖ§³ÖÀàËÆÎ¢Èíautorun.infÎļþµÄ¹¦ÄÜÂð Q: ÎÒ×Ô¼ºÖÆ×÷ÁËÒ»ÕŹâÅÌ£¬Í¬Ê±ÓÃÓÚSolarisºÍWindows¡£ÔÚWindows»·¾³Ï£¬¿ÉÒÔÀû ÓÃautorun¹¦ÄÜ£¬µ±²åÈë¹âÅ̵Äʱºò×Ô¶¯µ÷ÓÃϲ°®µÄä¯ÀÀÆ÷´ò¿ªÒ»¸öÎļþ¡£²»ÖªµÀ Solaris 7/8ÏÂÊÇ·ñ´æÔÚÀàËÆ¹¦ÄÜ¡£ A: hakteng Êǵ쬴ÓSolaris 8(CDE version 1.4)¿ªÊ¼Ö§³ÖÀàËÆ¹¦ÄÜÁË o ´´½¨Ò»¸öÃûΪ"volstart"µÄ½Å±¾Îļþ£¬±ÈÈç -------------------------------------------------------------------------- #! /bin/ksh # # This is a CD volume start script. This start script is designed # to be automatically run when the CD is inserted into a Solaris # system's CDrom drive. # # Note: not all Solaris systems have an auto volstart ability. If this # CD is inserted into a CDrom drive of a Solaris system without the # volstart ability, volstart can also be run manually by executing it # from either the desktop's file manager or from a Unix command line. full_name=$0 dir_name=`/usr/bin/dirname $full_name` if [[ -x /usr/dt/bin/dtaction ]]; then # Run the CDrom's installer program /usr/dt/bin/dtaction Run $dir_name/installer fi -------------------------------------------------------------------------- o ½«"volstart"Îļþ·ÅÔÚ¹âÅ̸ùĿ¼Ï o /usr/dt/bin/sdtvolcheck½Å±¾ÖдæÔÚÈçÏÂÓï¾ä if [[ -x $mountPt/volstart ]];then exec $mountPt/volstart; ÓÚÊÇ£¬µ±²åÈë¹âÅ̵Äʱºòvolstart½Å±¾±»Ö´ÐУ¬¶ÔÓÚÉÏÀý£¬×îÖÕµ¼ÖÂinstaller±» Ö´ÐÐ 5.8 ÈçºÎÐÞ¸Ä/dev/nullµÄÊôÐÔ Q: /devices/pseudo/mm@0:nullµÄÊôÐÔÊÇ0620 root tty£¬ÎÒÏë chmod 666 /devices/pseudo/mm@0:null £¬µ«ÊǼ¸·ÖÖÓºó£¬ÊôÐÔ±»ÐÞ¸Ä»Ø 0620 root tty£¬Ôõô°ì A: Markus Mayer <mmayer@iname.com> ²é¿´/etc/minor_permÎļþ£¬ # grep -s null /etc/minor_perm mm:null 0620 root tty Ð޸ĸÃÎļþÖеÄÕâÒ»ÐгÉ"mm:null 0666 root sys"¼´¿É¡£ 5.10 ÈçºÎ×Ô¼ºÖÆ×÷SolarisÆô¶¯ÈíÅÌ Q: ÎÒÖªµÀ¿ÉÒÔÈ¥ http://soldc.sun.com/support/drivers/dca_diskettes/ ÏÂÔØÆô¶¯ÈíÅ̵ÄÓ³ÏóÎļþ£¬¿ÉÎÒ»¹ÏëÖªµÀËü×î³õÊÇÈçºÎÖÆ×÷³öÀ´µÄ A: СËÄ <scz@nsfocus.com> 1) ÓÃfdformt¸ñʽ»¯ÈíÅÌ 2) ÓÃnewfsÔÚÈíÅÌÉÏ´´½¨ÐµÄÎļþϵͳ 3) ½«ÈíÅÌmountÉÏÀ´ 4) ÓÃcpÃüÁî¸´ÖÆthe second-level disk booter(boot»òÕßufsboot)µ½ÈíÅÌ£¬±ÈÈç /platform/sun4u/ufsboot¡£²Î¿´installboot(1M)¡¢boot(1M)ÊÖ²áÒ³ 5) ÓÃinstallbootÃüÁî°²×°boot blockµ½ÈíÅÌ£¬±ÈÈç installboot /usr/platform/`uname -i`/lib/fs/ufs/bootblk /dev/rdsk/c1t0d0s0 6) ÓÃcpÃüÁî¸´ÖÆ±ØÒªµÄ¹¤¾ßÎļþµ½ÈíÅÌ 7) unmountÈíÅÌ 8) ÓÃejectÃüÁ³öÈíÅÌ 5.11 x86/SolarisÈçºÎ·ÃÎÊFAT32·ÖÇø A: Dan Anderson <dan@drydog.com> mount -F pcfs /dev/dsk/c0t0d0p0:1 /mnt/<...> # SCSI mount -F pcfs /dev/dsk/c0d0p0:1 /mnt/<...> # ATAPI c0 ¿ØÖÆÆ÷ID t0 SCSI ID (¶ÔÓÚATAPIÊ¡ÂÔ) d0 ¶ÔÓÚSCSI×ÜÊÇ0£¬¶ÔÓÚATAPIÊÇÓ²Å̺Šp0 p0¶ÔÓ¦µÚÒ»¸öÖ÷·ÖÇø±íÏî :1 ¶ÔÓ¦Âß¼Çý¶¯Æ÷(c - z »ò 1 - 24) ÓÐЩ±¨¸æËµÈç¹ûFAT32·ÖÇø²»¶ÔÓ¦µÚÒ»¸öÖ÷·ÖÇø±íÏmountʧ°Ü£¬¸Ð¾õx86/Solaris ¶ÔpcfsÖ§³Ö»ìÂÒ¡£ A: spp(µÍÒôÅÚ) ÔÚSPARC/Solaris 7ÉÏdf -k # df -k /dev/dsk/c0t0d0s0 / /dev/dsk/c0t0d0s6 /usr /dev/dsk/c0t0d0s7 /export/home ÔÚx86/Solaris 8ÉÏdf -k # df -k /dev/dsk/c0d0s0 / /dev/dsk/c0d0s7 /export/home c Ó²ÅÌ¿ØÖÆÆ÷µÄλÖ㬱ÈÈçÖ÷°åµÚ¶þ¸öIDE½Ó¿ÚÉϵĵÚÒ»¸öÓ²ÅÌ(Ö÷ÅÌ)¶ÔÓ¦c1d0 t Ö»SPARCÓУ¬SCSI ID d ijһȷ¶¨Ó²ÅÌ¿ØÖÆÆ÷(c²ÎÊý¾ö¶¨)ÉÏÓ²ÅÌλÖà p Ö»x86ÓУ¬¶ÔÓ¦MSϵͳµÄPartition¸ÅÄî s sliceºÅ£¬SolarisϵͳµÄ¸ÅÄ²»Ì«ºÃ½âÊÍ£¬Èç¹ûºÍpÒ»Æð³öÏÖ£¬¿ÉÒÔÀí½â³ÉÀàËÆ MSÂß¼Çý¶¯Æ÷µÄ¸ÅÄî ¼ÙÉèx86¼Ü¹¹ÉÏijӲÅÌÔÚÖ÷Òýµ¼ÉÈÇøÓÐÁ½¸öÖ÷·ÖÇø±íÏµÚÒ»¸öΪFAT32·ÖÇø£¬µÚ¶þ¸ö ΪSolaris·ÖÇø£¬Solaris·ÖÇøÉÏ»®·ÖÁËÁ½¸öslice£¬Ò»¸öΪ¸ùÎļþϵͳ/¡¢Ò»¸öΪswap Çø£¬Ôò·Ö±ð±íʾΪ/dev/dsk/c1d0p0:1(FAT32)¡¢/dev/dsk/c1d0p1s0(/)¡¢ /dev/dsk/c1d0p1s1(swap) ÔÚmount FAT32· ×ªÔØ×Ô£ºhttp://www.unlinux.com/doc/program/20051026/2426.html ¡¾ÆÀÂÛ¡¿ ¡¾¼ÓÈëÊղؼС¿ ¡¾´ó ÖРС¡¿ ¡¾´òÓ¡¡¿ ¡¾¹Ø±Õ¡¿ ¡ù Ïà¹ØÁ´½Ó
|