作者:林海枫
网址:http://blog.csdn.net/linyt/archive/2008/09/16/2938122.aspx
[注]:本文版权由作者拥有,欢迎转载,但请完整转载,请匆用于商业用途
对于一个从window走过来的入门者,只使用命令来操作是一件很无聊的事情。因为刚开始不太可能就接触linux下的C编程或者脚本,又没有工作的需要,确实不知刚学什么命令,而且也不知学来做什么。所以学习linux第一步是要找到方向和动力!为了加速大家的动力,我先写几个命令让大家看看linux对于程序员或酷爱技术的朋友感受一下linux的好处!
1.记当读大三的时候,找一本OS实验的书,上面有一个用C语言的代码,用于读取硬盘的分区表;然而在linux只需一个命令就可以了:
dd if =/dev/hda of=/tmp/mbr bs=512 count=1
运行完成后,文件/tmp/mbr是硬盘主引导记录,为512字节,前446是OS代码,后64字节包含分区表信息,最后2字节标识是MBR. 然后用od命令就可以查看/tmp/mbr文件是第447到510字节的内容了,它就是分区表的内容。
2.你喜欢在C语言程序吗?
我们就来一个吧
用vi来编辑一个叫test_malloc.c的文件,内容如下:
你想知道它生成对应的汇编吗?
ylin@ylin:~/program/c$ gcc -S test_malloc.c <---这个命令从test_malloc.c生成对应的汇编文件test_malloc.s
ylin@ylin:~/program/c$ cat test_malloc.s <--汇编如下,这个中AT&T格式的编程,而不是我们所学的Masm格式,但对应的指令都一样
的!
ylin@ylin:~/program/c/test$ cat test_malloc.s
看了上面的代码,你会担心,如果malloc函数不成功(返回NULL)会如何呢?或许无论你运行多少次,可能找不到上面malloc返回NULL的情况!
你想知道上面返回NULL后出现什么情况吗? Linux下有一个优秀的调试器可以帮你模拟这些情况的出现。让我们来看看吧。
1).先生成一个可调试文件
ylin@ylin:~/program/c/test$ gcc -Wall -g -o test_malloc test_malloc.c
2). 使用gdb进行调试
ylin@ylin:~/program/c/test$ gdb ./test_malloc -q
Using host libthread_db library "/lib/tls/i686/cmov/libthread_db.so.1".
(gdb) l <---这个是list命令的缩写,用于边调试边查看源代码
1 #include <stdlib.h>
2
3 int main()
4 {
5 int *ptr = NULL;
6
7 ptr = (int *)malloc(sizeof(int));
8 *ptr = 5;
9
10 free(ptr);
(gdb) l <-------同上
11
12 return 0;
13 }
(gdb) break main <-----在main函上设置断点,当执行到main函数时会停止
Breakpoint 1 at 0x80483c5: file test_malloc.c, line 5.
(gdb) r <-----先让程序运行起来
Starting program: /home/ylin/program/c/test/test_malloc
Breakpoint 1, main () at test_malloc.c:5 <------系统提示,执行到main断点了
5 int *ptr = NULL;
(gdb) n <------next命令的缩写,单步执行,即执行int *ptr = NULL;这个语句, ptr = (int *)malloc(sizeof(int));下一条要执行的句
7 ptr = (int *)malloc(sizeof(int));
(gdb) n <-----单步执行
8 *ptr = 5;
(gdb) print ptr <------查看ptr的值,以及它指向的内存单元
$1 = (int *) 0x804a008
(gdb) call free(ptr) <------在调试器中调用库函数free
$2 = 0
(gdb) set var ptr = 0 <------设置变量ptr的值为NULL,这两步是模拟malloc函数返回NULL的情况
(gdb) n <------单步执行
Program received signal SIGSEGV, Segmentation fault. <-----调试器提示:程序访问非法内容,这里是访问为0内容,在linux里非法访存会产生一个SIGSEGV信号。
0x080483de in main () at test_malloc.c:8
8 *ptr = 5;
(gdb) <---由于非法访存,程序运行结束了
3.定时关机
当你正在运行一些重要程序还未结束时,不巧你有急事要走开。那linux的关机程序可以帮你完成定时关机的任务,让你放心去做更重要的事情,用法相当简单:
1)Shutdown –h 12:30
2)shutdown –h +30
3)shutdown –h now
1.是把关机时间定在12:30
2.是把关机时间定在30分钟之后
3.是马上关机,显然这不是定时关机,不过你可以试一下这种关机方式
4.批量运行任务
你身边有没有同学(事)或朋友在写php/jsp/asp的数据库应用程呢?有的话,你可以和他开个小小的玩笑,让他的IIS/tomcat/apache工作失效。在Linux的世界里,这是最容易不过的事情了。假设你朋友的机器IP为192.168.1.1, web服务的端口为80, 访问数据库量最大的网页是sreach.jsp。这样我们采用一个称为wget的小工具就可以。输入下面的命令:
While [ 1 ]; do wget http://192.168.1.1/sreach.jsp; done
这样就可以不停地向他的机器访问sreach.jsp网页了,如果他机器性很好,那么你就要加多力量,让wget并行起来。与上面的命令类,只不过复杂了点:
for I in `seq 1 1000`; do (while [ 1]; do wget http://192.168.1.1/sreash.jsp; done)& done
这就可以并发1000个用户来访问该面页,并且每个用户都是不停地访问的。
如果对上面的用法产生兴趣,那linux正是可以为你提供优质服务的操作系统,linux团队期待您的参与。
网址:http://blog.csdn.net/linyt/archive/2008/09/16/2938122.aspx
[注]:本文版权由作者拥有,欢迎转载,但请完整转载,请匆用于商业用途
对于一个从window走过来的入门者,只使用命令来操作是一件很无聊的事情。因为刚开始不太可能就接触linux下的C编程或者脚本,又没有工作的需要,确实不知刚学什么命令,而且也不知学来做什么。所以学习linux第一步是要找到方向和动力!为了加速大家的动力,我先写几个命令让大家看看linux对于程序员或酷爱技术的朋友感受一下linux的好处!
1.记当读大三的时候,找一本OS实验的书,上面有一个用C语言的代码,用于读取硬盘的分区表;然而在linux只需一个命令就可以了:
dd if =/dev/hda of=/tmp/mbr bs=512 count=1
运行完成后,文件/tmp/mbr是硬盘主引导记录,为512字节,前446是OS代码,后64字节包含分区表信息,最后2字节标识是MBR. 然后用od命令就可以查看/tmp/mbr文件是第447到510字节的内容了,它就是分区表的内容。
2.你喜欢在C语言程序吗?
我们就来一个吧
用vi来编辑一个叫test_malloc.c的文件,内容如下:
- #include <stdlib.h>
- int main()
- {
- int *ptr = NULL;
- ptr = (int *)malloc(sizeof(int));
- *ptr = 5;
- free(ptr);
- return 0;
- }
ylin@ylin:~/program/c$ gcc -S test_malloc.c <---这个命令从test_malloc.c生成对应的汇编文件test_malloc.s
ylin@ylin:~/program/c$ cat test_malloc.s <--汇编如下,这个中AT&T格式的编程,而不是我们所学的Masm格式,但对应的指令都一样
的!
ylin@ylin:~/program/c/test$ cat test_malloc.s
- .file "test_malloc.c"
- .text
- .globl main
- .type main, @function
- main:
- leal 4(%esp), %ecx
- andl $-16, %esp
- pushl -4(%ecx)
- pushl %ebp
- movl %esp, %ebp
- pushl %ecx
- subl $20, %esp
- movl $0, -8(%ebp)
- movl $4, (%esp)
- call malloc
- movl %eax, -8(%ebp)
- movl -8(%ebp), %eax
- movl $5, (%eax)
- movl -8(%ebp), %eax
- movl %eax, (%esp)
- call free
- movl $0, %eax
- addl $20, %esp
- popl %ecx
- popl %ebp
- leal -4(%ecx), %esp
- ret
- .size main, .-main
- .ident "GCC: (GNU) 4.1.2 (Ubuntu 4.1.2-0ubuntu4)"
- .section .note.GNU-stack,"",@progbits
你想知道上面返回NULL后出现什么情况吗? Linux下有一个优秀的调试器可以帮你模拟这些情况的出现。让我们来看看吧。
1).先生成一个可调试文件
ylin@ylin:~/program/c/test$ gcc -Wall -g -o test_malloc test_malloc.c
2). 使用gdb进行调试
ylin@ylin:~/program/c/test$ gdb ./test_malloc -q
Using host libthread_db library "/lib/tls/i686/cmov/libthread_db.so.1".
(gdb) l <---这个是list命令的缩写,用于边调试边查看源代码
1 #include <stdlib.h>
2
3 int main()
4 {
5 int *ptr = NULL;
6
7 ptr = (int *)malloc(sizeof(int));
8 *ptr = 5;
9
10 free(ptr);
(gdb) l <-------同上
11
12 return 0;
13 }
(gdb) break main <-----在main函上设置断点,当执行到main函数时会停止
Breakpoint 1 at 0x80483c5: file test_malloc.c, line 5.
(gdb) r <-----先让程序运行起来
Starting program: /home/ylin/program/c/test/test_malloc
Breakpoint 1, main () at test_malloc.c:5 <------系统提示,执行到main断点了
5 int *ptr = NULL;
(gdb) n <------next命令的缩写,单步执行,即执行int *ptr = NULL;这个语句, ptr = (int *)malloc(sizeof(int));下一条要执行的句
7 ptr = (int *)malloc(sizeof(int));
(gdb) n <-----单步执行
8 *ptr = 5;
(gdb) print ptr <------查看ptr的值,以及它指向的内存单元
$1 = (int *) 0x804a008
(gdb) call free(ptr) <------在调试器中调用库函数free
$2 = 0
(gdb) set var ptr = 0 <------设置变量ptr的值为NULL,这两步是模拟malloc函数返回NULL的情况
(gdb) n <------单步执行
Program received signal SIGSEGV, Segmentation fault. <-----调试器提示:程序访问非法内容,这里是访问为0内容,在linux里非法访存会产生一个SIGSEGV信号。
0x080483de in main () at test_malloc.c:8
8 *ptr = 5;
(gdb) <---由于非法访存,程序运行结束了
3.定时关机
当你正在运行一些重要程序还未结束时,不巧你有急事要走开。那linux的关机程序可以帮你完成定时关机的任务,让你放心去做更重要的事情,用法相当简单:
1)Shutdown –h 12:30
2)shutdown –h +30
3)shutdown –h now
1.是把关机时间定在12:30
2.是把关机时间定在30分钟之后
3.是马上关机,显然这不是定时关机,不过你可以试一下这种关机方式
4.批量运行任务
你身边有没有同学(事)或朋友在写php/jsp/asp的数据库应用程呢?有的话,你可以和他开个小小的玩笑,让他的IIS/tomcat/apache工作失效。在Linux的世界里,这是最容易不过的事情了。假设你朋友的机器IP为192.168.1.1, web服务的端口为80, 访问数据库量最大的网页是sreach.jsp。这样我们采用一个称为wget的小工具就可以。输入下面的命令:
While [ 1 ]; do wget http://192.168.1.1/sreach.jsp; done
这样就可以不停地向他的机器访问sreach.jsp网页了,如果他机器性很好,那么你就要加多力量,让wget并行起来。与上面的命令类,只不过复杂了点:
for I in `seq 1 1000`; do (while [ 1]; do wget http://192.168.1.1/sreash.jsp; done)& done
这就可以并发1000个用户来访问该面页,并且每个用户都是不停地访问的。
如果对上面的用法产生兴趣,那linux正是可以为你提供优质服务的操作系统,linux团队期待您的参与。