Linux,interesting and enjoyable

來源:互聯網
上載者:User
作者:林海楓
網址: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的檔案,內容如下:

  1. #include <stdlib.h>
  2. int main()
  3. {
  4.     int *ptr = NULL;
  5.     ptr = (int *)malloc(sizeof(int));
  6.     *ptr = 5;
  7.     free(ptr);
  8.     return 0;
  9. }

你想知道它產生對應的彙編嗎?

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

  1.         .file   "test_malloc.c"
  2.         .text
  3. .globl main
  4.         .type   main, @function
  5. main:
  6.         leal    4(%esp), %ecx
  7.         andl    $-16, %esp
  8.         pushl   -4(%ecx)
  9.         pushl   %ebp
  10.         movl    %esp, %ebp
  11.         pushl   %ecx
  12.         subl    $20, %esp
  13.         movl    $0, -8(%ebp)
  14.         movl    $4, (%esp)
  15.         call    malloc
  16.         movl    %eax, -8(%ebp)
  17.         movl    -8(%ebp), %eax
  18.         movl    $5, (%eax)
  19.         movl    -8(%ebp), %eax
  20.         movl    %eax, (%esp)
  21.         call    free
  22.         movl    $0, %eax
  23.         addl    $20, %esp
  24.         popl    %ecx
  25.         popl    %ebp
  26.         leal    -4(%ecx), %esp
  27.         ret
  28.         .size   main, .-main
  29.         .ident  "GCC: (GNU) 4.1.2 (Ubuntu 4.1.2-0ubuntu4)"
  30.         .section        .note.GNU-stack,"",@progbits

看了上面的代碼,你會擔心,如果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團隊期待您的參與。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.