Linux學習技巧

來源:互聯網
上載者:User

1、學習使用Linux,先記住一個自助式命令: man
   man -f [command]
   man -k [command]
   man X [command] (其中'X'為數字,代表man -f [command]查詢結果中,提示該command處於Mannual的第幾部分部分)

2、學習使用DOS,先記住一個自助式命令: ?
   [command] /?  (查詢該命令的使用方法)

3、學習使用gdb,先記住一個自助式命令: help
   help [topic]
   比如,你想知道如何打斷點breakpoint,就在gdb的提示符後面輸入 > help breakpoint;
   還有幾個常用的命令: [s]tepinto(相當於VC裡的F11),[f]inish(相當於VC裡的stepout),
   Linux下gdb調試,還可以在某一個具體的記憶體打斷點:[b]reakpoint *[addr](addr代表你的記憶體位址),這個在定位記憶體泄露或者踩記憶體(coredump)等問題時頗為有用。

4、學習設定VIM的萬能命令—— :set all
   :set all 可以列出VIM中可供使用者佈建的所有選項,你在裡面找那個和你想要設定的功能相關,試著設定一下,就OK了。如果還是不起作用,在網上搜尋一下:set all中可能有效選項如何使用,在努力一把。
   今天碰到一個問題,:set noshiftround,不起作用。後來發現是:set cindent在作怪。當你設定了cindent時,從其他地方copy的代碼,通過p命令粘貼到你的VIM編輯器時,會不斷的indent,搞的代碼和 樓梯似的,亂成馬列。先:set noautoindent,再:set noexpandtab,不起作用;retry,:set shiftwidth=1,起作用了,但還是樓梯狀,不過indent=1;tritry,:set noshiftround,還不如:set shiftwidth=1呢,又indent=8了。最終發現是cindent在作怪,關閉之便好,方法:set nocindent。

5.Although the present Windows Sockets specification defines the sockets abstraction for TCP/IP, any network protocol can comply with
Windows Sockets by supplying its own version of the dynamic link library (DLL) that implements Windows Sockets.
                                                                                                                                 –From: Windows Sockets: Background, MSDN Library
 Window的socket是一個抽象的概念,目前支援TCP/IP協議族,你可以編寫新的DLL來滿足新的網路通訊協定的需要,比如SCTP等新的通訊協議。(萬劍歸宗)

6. MIT 麻省理工學院 開放課程
   http://ocw.mit.edu/OcwWeb/web/home/home/index.htm

7. Computer Organization and Architecture [Student Course]
   http://www.williamstallings.com/COA6e.html

8. 學習記憶體管理,就不得不學習malloc和free,那麼你知道malloc和free是如何?的嗎?接著問自己:free函數的入參是一塊記憶體的頭指 針,free怎麼知道釋放多大的位址範圍?釋放後這些記憶體交給了誰管理?有時候明明釋放了,可是top看到的記憶體資訊還是沒有釋放?這是為什嗎?是記憶體泄 露?還是其他原因?
        現在的電腦系統越來越複雜,從硬體到我們啟動並執行程式(進程),記憶體管理被分為不同的幾個層次,不同的作業系統,其設計各有特色。大致上,可以分為以下幾個層次:[硬體] –> [虛擬記憶體系統] –> [系統級的Heap管理] –> [進程級的Heap管理(libc)] –> [我們的進程malloc/free]
        對於偏左的幾個層次,我們可以暫時不瞭解, 但看看 libc 中 malloc/free 的實現,還是很有意思的,不過現在的系統(硬體/作業系統)都無比複雜,直接閱讀最新的代碼,一頭紮入最複雜的邏輯中,對我們理解其基本原理,實在沒有益 處。
        去繁就簡,我們看看早期 BSD 的一個實現。參看最早的一個版本 v1.1http://www.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/stdlib/malloc.c
        實現很漂亮,代碼很少,但可以看到一個 allocator 看得見摸得找的"高效"實現,裡面的技巧,SGI STL allocator 也在使用。
        總結:學習疑難技術的方法:尋找切入點(比如這裡的free/malloc),再學習其發展曆程,最好從它最簡單最原始的階段開始抽絲剝見。(侯捷解剖MFC時使用的便是此法)
        學習本質的利器:FreeBSD的早期實現版本的原始碼(學習Revision Tree中的最早版本)
        –From: http://www.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/stdlib/malloc.c

9. 編譯成功,但連結時報錯:unreferenced symbol: #####. 說明你連結時使用的靜態庫不存在,或者該靜態庫版本不正確。
    診斷方法:
             Windows平台: 使用dumpbin /SYMBOLS XXX.lib /OUT:XXXlibsymbol.txt,產生靜態庫的符號表,在產生的XXXlibsymbol.txt中尋找#####,如果找不到,則您需要拿到正確版本的靜態lib庫先。
             Linux平台: 使用nm/objdump工具,產生靜態.a庫的符號表,其他同上。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.