Linux学习技巧

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库的符号表,其他同上。

 

你可能感兴趣的:(Linux学习技巧)