午夜亚洲国产精品福利,亚洲精品乱码久久久久久中文字幕,亚洲高清国产拍精品26Uhttp://m.tkk7.com/jlin/category/20578.htmlzh-cnMon, 05 Jun 2017 11:20:14 GMTMon, 05 Jun 2017 11:20:14 GMT60grep命令http://m.tkk7.com/jlin/articles/432583.htmlflyflySun, 04 Jun 2017 07:01:00 GMThttp://m.tkk7.com/jlin/articles/432583.html 

grep
-c :計算找到 '搜尋字符串' 的次數: grep  transRouterService-cost -c fdgs.log
-v :反向選擇,亦即顯示出沒有 '搜尋字符串' 內容的那一行!
--color=auto :可以將找到的關鍵詞部分加上顏色的顯示喔!
grep -l -r ‘energywise’ *   #在當前目錄及其子目錄下搜索'energywise'行的文件,但是不顯示匹配的行,只顯示匹配

的文件
任意一個字節 . 與重復字節 *
. (小數點):代表『一定有一個任意字節』的意思;
* (星號):代表『重復前一個字符, 0 到無窮多次』的意思,為組合形態
grep -n 'g..d' regular_express.txt
如果我想要找出 g 開頭與 g 結尾的行,當中的字符可有可無
grep -n 'g.*g' regular_express.txt
grep 'bizcode..4005.*' fdgs.log

grep '"bizcode":"123","code":"123".*' demo.log| more
--查找:以"fundcode":"123"中間有n個其他字符"bizcode":"123","mcode":"123"的字符串
grep '"fundcode":"123".*"bizcode":"123","mcode":"123"' demo.log| more
--查找:以"fundcode":"123"中間有n個其他字符"bizcode":"123","mcode":"123"后面n個其他字符'的字符串
grep '"fundcode":"123".*"bizcode":"123","mcode":"123".*' demo.log| more

 



fly 2017-06-04 15:01 發表評論
]]>
輕松安裝、卸載Linux軟件http://m.tkk7.com/jlin/articles/104873.htmlflyflyTue, 20 Mar 2007 01:39:00 GMThttp://m.tkk7.com/jlin/articles/104873.htmlhttp://m.tkk7.com/jlin/comments/104873.htmlhttp://m.tkk7.com/jlin/articles/104873.html#Feedback0http://m.tkk7.com/jlin/comments/commentRss/104873.htmlhttp://m.tkk7.com/jlin/services/trackbacks/104873.html
軟件的安裝
Linux下軟件的安裝主要有兩種不同的形式。第一種安裝文件名為xxx.tar.gz;另一種安裝文件名為xxx.i386.rpm。以第一種方式發行的軟件多為以源碼形式發送的;第二種方式則是直接以二進制形式發送的。

對于第一種,安裝方法如下:

1.首先,將安裝文件拷貝至你的目錄中。例如,如果你是以root身份登錄上的,就將軟件拷貝至/root中。

#cp xxx.tar.gz /root

2.由于該文件是被壓縮并打包的,應對其解壓縮。命令為:

#tar xvzf filename.tar.gz

3.執行該命令后,安裝文件按路徑,解壓縮在當前目錄下。用ls命令可以看到解壓縮后的文件。通常在解壓縮后產生的文件中,有“Install”的文件。該文件為純文本文件,詳細講述了該軟件包的安裝方法。

4.執行解壓縮后產生的一個名為configure的可執行腳本程序。它是用于檢查系統是否有編譯時所需的庫,以及庫的版本是否滿足編譯的需要等安裝所需要的系統信息。為隨后的編譯工作做準備。命令為:#./configure。

5.檢查通過后,將生成用于編譯的MakeFile文件。此時,可以開始進行編譯了。編譯的過程視軟件的規模和計算機性能的不同,所耗費的時間也不同。命令為:#make。

6.成功編譯后,鍵入如下的命令開始安裝:

#make install

7.安裝完畢,應清除編譯過程中產生的臨時文件和配置過程中產生的文件。鍵入如下命令:

#make clean
#make distclean

至此,軟件的安裝結束。

對于第二種,其安裝方法要簡單得多。

同第一種方式一樣,將安裝文件拷貝至你的目錄中。然后使用rpm來安裝該文件。命令如下:

#rpm -i filename.i386.rpm

rpm將自動將安裝文件解包,并將軟件安裝到缺省的目錄下。并將軟件的安裝信息注冊到rpm的數據庫中。參數i的作用是使rpm進入安裝模式。

軟件的卸載
1.軟件的卸載主要是使用rpm來進行的。卸載軟件首先要知道軟件包在系統中注冊的名稱。鍵入命令:

#rpm -q -a

即可查詢到當前系統中安裝的所有的軟件包。

2.確定了要卸載的軟件的名稱,就可以開始實際卸載該軟件了。鍵入如下命令即可卸載軟件:

#rpm -e [package name]

參數e的作用是使rpm進入卸載模式。對名為[package name]的軟件包進行卸載。由于系統中各個軟件包之間相互有依賴關系。如果因存在依賴關系而不能卸載,rpm將給予提示并停止卸載。你可以使用如下的命令來忽略依賴關系,直接開始卸載:

#rpm -e [package name] -nodeps

忽略依賴關系的卸載可能會導致系統中其它的一些軟件無法使用。
自:
http://www0.ccidnet.com/tech/os/2001/07/26/58_2787.html

fly 2007-03-20 09:39 發表評論
]]>
GCC編譯器常識(轉)http://m.tkk7.com/jlin/articles/104254.htmlflyflyFri, 16 Mar 2007 07:01:00 GMThttp://m.tkk7.com/jlin/articles/104254.htmlhttp://m.tkk7.com/jlin/comments/104254.htmlhttp://m.tkk7.com/jlin/articles/104254.html#Feedback0http://m.tkk7.com/jlin/comments/commentRss/104254.htmlhttp://m.tkk7.com/jlin/services/trackbacks/104254.html 在為Linux開發應用程序時,絕大多數情況下使用的都是C語言,因此幾乎每一位Linux程序員面臨的首要問題都是如何靈活運用C編譯器。目前Linux下最常用的C語言編譯器是GCC(GNU Compiler Collection),它是GNU項目中符合ANSI C標準的編譯系統,能夠編譯用C、C++和Object C等語言編寫的程序。GCC不僅功能非常強大,結構也異常靈活。最值得稱道的一點就是它可以通過不同的前端模塊來支持各種語言,如Java、Fortran、Pascal、Modula-3和Ada等。

開放、自由和靈活是Linux的魅力所在,而這一點在GCC上的體現就是程序員通過它能夠更好地控制整個編譯過程。在使用GCC編譯程序時,編譯過程可以被細分為四個階段:

◆ 預處理(Pre-Processing)

◆ 編譯(Compiling)

◆ 匯編(Assembling)

◆ 鏈接(Linking)

Linux程序員可以根據自己的需要讓GCC在編譯的任何階段結束,以便檢查或使用編譯器在該階段的輸出信息,或者對最后生成的二進制文件進行控制,以便通過加入不同數量和種類的調試代碼來為今后的調試做好準備。和其它常用的編譯器一樣,GCC也提供了靈活而強大的代碼優化功能,利用它可以生成執行效率更高的代碼。

GCC提供了30多條警告信息和三個警告級別,使用它們有助于增強程序的穩定性和可移植性。此外,GCC還對標準的C和C++語言進行了大量的擴展,提高程序的執行效率,有助于編譯器進行代碼優化,能夠減輕編程的工作量。

GCC起步

在學習使用GCC之前,下面的這個例子能夠幫助用戶迅速理解GCC的工作原理,并將其立即運用到實際的項目開發中去。首先用熟悉的編輯器輸入清單1所示的代碼:

清單1:hello.c

#include <stdio.h>int main(void){	printf ("Hello world, Linux programming!\n");	return 0;}


然后執行下面的命令編譯和運行這段程序:

# gcc hello.c -o hello# ./helloHello world, Linux programming!


從程序員的角度看,只需簡單地執行一條GCC命令就可以了,但從編譯器的角度來看,卻需要完成一系列非常繁雜的工作。首先,GCC需要調用預處理程序cpp,由它負責展開在源文件中定義的宏,并向其中插入“#include”語句所包含的內容;接著,GCC會調用ccl和as將處理后的源代碼編譯成目標代碼;最后,GCC會調用鏈接程序ld,把生成的目標代碼鏈接成一個可執行程序。

為了更好地理解GCC的工作過程,可以把上述編譯過程分成幾個步驟單獨進行,并觀察每步的運行結果。第一步是進行預編譯,使用-E參數可以讓GCC在預處理結束后停止編譯過程:

#  gcc -E hello.c -o hello.i


此時若查看hello.cpp文件中的內容,會發現stdio.h的內容確實都插到文件里去了,而其它應當被預處理的宏定義也都做了相應的處理。下一步是將hello.i編譯為目標代碼,這可以通過使用-c參數來完成:

#  gcc -c hello.i -o hello.o


GCC默認將.i文件看成是預處理后的C語言源代碼,因此上述命令將自動跳過預處理步驟而開始執行編譯過程,也可以使用-x參數讓GCC從指定的步驟開始編譯。最后一步是將生成的目標文件鏈接成可執行文件:

#  gcc hello.o -o hello


在采用模塊化的設計思想進行軟件開發時,通常整個程序是由多個源文件組成的,相應地也就形成了多個編譯單元,使用GCC能夠很好地管理這些編譯單元。假設有一個由foo1.c和foo2.c兩個源文件組成的程序,為了對它們進行編譯,并最終生成可執行程序foo,可以使用下面這條命令:

#  gcc foo1.c foo2.c -o foo


如果同時處理的文件不止一個,GCC仍然會按照預處理、編譯和鏈接的過程依次進行。如果深究起來,上面這條命令大致相當于依次執行如下三條命令:

# gcc -c foo1.c -o foo1.o# gcc -c foo2.c -o foo2.o# gcc foo1.o foo2.o -o foo


在編譯一個包含許多源文件的工程時,若只用一條GCC命令來完成編譯是非常浪費時間的。假設項目中有100個源文件需要編譯,并且每個源文件中都包含10000行代碼,如果像上面那樣僅用一條GCC命令來完成編譯工作,那么GCC需要將每個源文件都重新編譯一遍,然后再全部連接起來。很顯然,這樣浪費的時間相當多,尤其是當用戶只是修改了其中某一個文件的時候,完全沒有必要將每個文件都重新編譯一遍,因為很多已經生成的目標文件是不會改變的。要解決這個問題,關鍵是要靈活運用GCC,同時還要借助像Make這樣的工具。

警告提示功能

GCC包含完整的出錯檢查和警告提示功能,它們可以幫助Linux程序員寫出更加專業和優美的代碼。先來讀讀清單2所示的程序,這段代碼寫得很糟糕,仔細檢查一下不難挑出很多毛病:

◆main函數的返回值被聲明為void,但實際上應該是int;

◆使用了GNU語法擴展,即使用long long來聲明64位整數,不符合ANSI/ISO C語言標準;

◆main函數在終止前沒有調用return語句。

清單2:illcode.c

#include <stdio.h>void main(void){  long long int var = 1;  printf("It is not standard C code!\n");}


下面來看看GCC是如何幫助程序員來發現這些錯誤的。當GCC在編譯不符合ANSI/ISO C語言標準的源代碼時,如果加上了-pedantic選項,那么使用了擴展語法的地方將產生相應的警告信息:

# gcc -pedantic illcode.c -o illcodeillcode.c: In function `main':illcode.c:9: ISO C89 does not support `long long'illcode.c:8: return type of `main' is not `int'


需要注意的是,-pedantic編譯選項并不能保證被編譯程序與ANSI/ISO C標準的完全兼容,它僅僅只能用來幫助Linux程序員離這個目標越來越近。或者換句話說,-pedantic選項能夠幫助程序員發現一些不符合ANSI/ISO C標準的代碼,但不是全部,事實上只有ANSI/ISO C語言標準中要求進行編譯器診斷的那些情況,才有可能被GCC發現并提出警告。

除了-pedantic之外,GCC還有一些其它編譯選項也能夠產生有用的警告信息。這些選項大多以-W開頭,其中最有價值的當數-Wall了,使用它能夠使GCC產生盡可能多的警告信息:

# gcc -Wall illcode.c -o illcodeillcode.c:8: warning: return type of `main' is not `int'illcode.c: In function `main':illcode.c:9: warning: unused variable `var'


GCC給出的警告信息雖然從嚴格意義上說不能算作是錯誤,但卻很可能成為錯誤的棲身之所。一個優秀的Linux程序員應該盡量避免產生警告信息,使自己的代碼始終保持簡潔、優美和健壯的特性。

在處理警告方面,另一個常用的編譯選項是-Werror,它要求GCC將所有的警告當成錯誤進行處理,這在使用自動編譯工具(如Make等)時非常有用。如果編譯時帶上-Werror選項,那么GCC會在所有產生警告的地方停止編譯,迫使程序員對自己的代碼進行修改。只有當相應的警告信息消除時,才可能將編譯過程繼續朝前推進。執行情況如下:

# gcc -Wall -Werror illcode.c -o illcodecc1: warnings being treated as errorsillcode.c:8: warning: return type of `main' is not `int'illcode.c: In function `main':illcode.c:9: warning: unused variable `var'


對Linux程序員來講,GCC給出的警告信息是很有價值的,它們不僅可以幫助程序員寫出更加健壯的程序,而且還是跟蹤和調試程序的有力工具。建議在用GCC編譯源代碼時始終帶上-Wall選項,并把它逐漸培養成為一種習慣,這對找出常見的隱式編程錯誤很有幫助。

庫依賴

在Linux下開發軟件時,完全不使用第三方函數庫的情況是比較少見的,通常來講都需要借助一個或多個函數庫的支持才能夠完成相應的功能。從程序員的角度看,函數庫實際上就是一些頭文件(.h)和庫文件(.so或者.a)的集合。雖然Linux下的大多數函數都默認將頭文件放到/usr/include/目錄下,而庫文件則放到/usr/lib/目錄下,但并不是所有的情況都是這樣。正因如此,GCC在編譯時必須有自己的辦法來查找所需要的頭文件和庫文件。

GCC采用搜索目錄的辦法來查找所需要的文件,-I選項可以向GCC的頭文件搜索路徑中添加新的目錄。例如,如果在/home/xiaowp/include/目錄下有編譯時所需要的頭文件,為了讓GCC能夠順利地找到它們,就可以使用-I選項:

# gcc foo.c -I /home/xiaowp/include -o foo


同樣,如果使用了不在標準位置的庫文件,那么可以通過-L選項向GCC的庫文件搜索路徑中添加新的目錄。例如,如果在/home/xiaowp/lib/目錄下有鏈接時所需要的庫文件libfoo.so,為了讓GCC能夠順利地找到它,可以使用下面的命令:

# gcc foo.c -L /home/xiaowp/lib -lfoo -o foo


值得好好解釋一下的是-l選項,它指示GCC去連接庫文件libfoo.so。Linux下的庫文件在命名時有一個約定,那就是應該以lib三個字母開頭,由于所有的庫文件都遵循了同樣的規范,因此在用-l選項指定鏈接的庫文件名時可以省去lib三個字母,也就是說GCC在對-lfoo進行處理時,會自動去鏈接名為libfoo.so的文件。

Linux下的庫文件分為兩大類分別是動態鏈接庫(通常以.so結尾)和靜態鏈接庫(通常以.a結尾),兩者的差別僅在程序執行時所需的代碼是在運行時動態加載的,還是在編譯時靜態加載的。默認情況下,GCC在鏈接時優先使用動態鏈接庫,只有當動態鏈接庫不存在時才考慮使用靜態鏈接庫,如果需要的話可以在編譯時加上-static選項,強制使用靜態鏈接庫。例如,如果在/home/xiaowp/lib/目錄下有鏈接時所需要的庫文件libfoo.so和libfoo.a,為了讓GCC在鏈接時只用到靜態鏈接庫,可以使用下面的命令:

# gcc foo.c -L /home/xiaowp/lib -static -lfoo -o foo

代碼優化

代碼優化指的是編譯器通過分析源代碼,找出其中尚未達到最優的部分,然后對其重新進行組合,目的是改善程序的執行性能。GCC提供的代碼優化功能非常強大,它通過編譯選項-On來控制優化代碼的生成,其中n是一個代表優化級別的整數。對于不同版本的GCC來講,n的取值范圍及其對應的優化效果可能并不完全相同,比較典型的范圍是從0變化到2或3。

編譯時使用選項-O可以告訴GCC同時減小代碼的長度和執行時間,其效果等價于-O1。在這一級別上能夠進行的優化類型雖然取決于目標處理器,但一般都會包括線程跳轉(Thread Jump)和延遲退棧(Deferred Stack Pops)兩種優化。選項-O2告訴GCC除了完成所有-O1級別的優化之外,同時還要進行一些額外的調整工作,如處理器指令調度等。選項-O3則除了完成所有-O2級別的優化之外,還包括循環展開和其它一些與處理器特性相關的優化工作。通常來說,數字越大優化的等級越高,同時也就意味著程序的運行速度越快。許多Linux程序員都喜歡使用-O2選項,因為它在優化長度、編譯時間和代碼大小之間,取得了一個比較理想的平衡點。

下面通過具體實例來感受一下GCC的代碼優化功能,所用程序如清單3所示。

清單3:optimize.c

#include <stdio.h> int main(void){  double counter;  double result;  double temp;  for (counter = 0;    counter < 2000.0 * 2000.0 * 2000.0  / 20.0 + 2020;    counter += (5 - 1) / 4) {    temp = counter / 1979;    result  = counter;      }  printf("Result is %lf\n", result);  return 0;}


首先不加任何優化選項進行編譯:

# gcc -Wall optimize.c -o optimize


借助Linux提供的time命令,可以大致統計出該程序在運行時所需要的時間:

# time ./optimizeResult is 400002019.000000real    0m14.942suser    0m14.940ssys     0m0.000s


接下去使用優化選項來對代碼進行優化處理:

# gcc -Wall -O optimize.c -o optimize


在同樣的條件下再次測試一下運行時間:

# time ./optimizeResult is 400002019.000000real    0m3.256suser    0m3.240ssys     0m0.000s


對比兩次執行的輸出結果不難看出,程序的性能的確得到了很大幅度的改善,由原來的14秒縮短到了3秒。這個例子是專門針對GCC的優化功能而設計的,因此優化前后程序的執行速度發生了很大的改變。盡管GCC的代碼優化功能非常強大,但作為一名優秀的Linux程序員,首先還是要力求能夠手工編寫出高質量的代碼。如果編寫的代碼簡短,并且邏輯性強,編譯器就不會做更多的工作,甚至根本用不著優化。

優化雖然能夠給程序帶來更好的執行性能,但在如下一些場合中應該避免優化代碼:

◆ 程序開發的時候 優化等級越高,消耗在編譯上的時間就越長,因此在開發的時候最好不要使用優化選項,只有到軟件發行或開發結束的時候,才考慮對最終生成的代碼進行優化。

◆ 資源受限的時候 一些優化選項會增加可執行代碼的體積,如果程序在運行時能夠申請到的內存資源非常緊張(如一些實時嵌入式設備),那就不要對代碼進行優化,因為由這帶來的負面影響可能會產生非常嚴重的后果。

◆ 跟蹤調試的時候 在對代碼進行優化的時候,某些代碼可能會被刪除或改寫,或者為了取得更佳的性能而進行重組,從而使跟蹤和調試變得異常困難。

調試

一個功能強大的調試器不僅為程序員提供了跟蹤程序執行的手段,而且還可以幫助程序員找到解決問題的方法。對于Linux程序員來講,GDB(GNU Debugger)通過與GCC的配合使用,為基于Linux的軟件開發提供了一個完善的調試環境。

默認情況下,GCC在編譯時不會將調試符號插入到生成的二進制代碼中,因為這樣會增加可執行文件的大小。如果需要在編譯時生成調試符號信息,可以使用GCC的-g或者-ggdb選項。GCC在產生調試符號時,同樣采用了分級的思路,開發人員可以通過在-g選項后附加數字1、2或3來指定在代碼中加入調試信息的多少。默認的級別是2(-g2),此時產生的調試信息包括擴展的符號表、行號、局部或外部變量信息。級別3(-g3)包含級別2中的所有調試信息,以及源代碼中定義的宏。級別1(-g1)不包含局部變量和與行號有關的調試信息,因此只能夠用于回溯跟蹤和堆棧轉儲之用。回溯跟蹤指的是監視程序在運行過程中的函數調用歷史,堆棧轉儲則是一種以原始的十六進制格式保存程序執行環境的方法,兩者都是經常用到的調試手段。

GCC產生的調試符號具有普遍的適應性,可以被許多調試器加以利用,但如果使用的是GDB,那么還可以通過-ggdb選項在生成的二進制代碼中包含GDB專用的調試信息。這種做法的優點是可以方便GDB的調試工作,但缺點是可能導致其它調試器(如DBX)無法進行正常的調試。選項-ggdb能夠接受的調試級別和-g是完全一樣的,它們對輸出的調試符號有著相同的影響。

需要注意的是,使用任何一個調試選項都會使最終生成的二進制文件的大小急劇增加,同時增加程序在執行時的開銷,因此調試選項通常僅在軟件的開發和調試階段使用。調試選項對生成代碼大小的影響從下面的對比過程中可以看出來:

# gcc optimize.c -o optimize# ls optimize -l-rwxrwxr-x  1 xiaowp   xiaowp  11649 Nov 20 08:53 optimize  (未加調試選項)# gcc -g optimize.c -o optimize# ls optimize -l-rwxrwxr-x  1 xiaowp   xiaowp  15889 Nov 20 08:54 optimize  (加入調試選項)


雖然調試選項會增加文件的大小,但事實上Linux中的許多軟件在測試版本甚至最終發行版本中仍然使用了調試選項來進行編譯,這樣做的目的是鼓勵用戶在發現問題時自己動手解決,是Linux的一個顯著特色。

下面還是通過一個具體的實例說明如何利用調試符號來分析錯誤,所用程序見清單4所示。

清單4:crash.c

#include <stdio.h> int main(void){  int input =0;  printf("Input an integer:");  scanf("%d", input);  printf("The integer you input is %d\n", input);  return 0;}


編譯并運行上述代碼,會產生一個嚴重的段錯誤(Segmentation fault)如下:

# gcc -g crash.c -o crash# ./crashInput an integer:10Segmentation fault


為了更快速地發現錯誤所在,可以使用GDB進行跟蹤調試,方法如下:

# gdb crashGNU gdb Red Hat Linux (5.3post-0.20021129.18rh)……(gdb)


當GDB提示符出現的時候,表明GDB已經做好準備進行調試了,現在可以通過run命令讓程序開始在GDB的監控下運行:

(gdb) runStarting program: /home/xiaowp/thesis/gcc/code/crashInput an integer:10Program received signal SIGSEGV, Segmentation fault.0x4008576b in _IO_vfscanf_internal () from /lib/libc.so.6


仔細分析一下GDB給出的輸出結果不難看出,程序是由于段錯誤而導致異常中止的,說明內存操作出了問題,具體發生問題的地方是在調用_IO_vfscanf_internal ( )的時候。為了得到更加有價值的信息,可以使用GDB提供的回溯跟蹤命令backtrace,執行結果如下:

(gdb) backtrace#0  0x4008576b in _IO_vfscanf_internal () from /lib/libc.so.6#1  0xbffff0c0 in ?? ()#2  0x4008e0ba in scanf () from /lib/libc.so.6#3  0x08048393 in main () at crash.c:11#4  0x40042917 in __libc_start_main () from /lib/libc.so.6


跳過輸出結果中的前面三行,從輸出結果的第四行中不難看出,GDB已經將錯誤定位到crash.c中的第11行了。現在仔細檢查一下:

(gdb) frame 3#3  0x08048393 in main () at crash.c:1111       scanf("%d", input);


使用GDB提供的frame命令可以定位到發生錯誤的代碼段,該命令后面跟著的數值可以在backtrace命令輸出結果中的行首找到。現在已經發現錯誤所在了,應該將

scanf("%d", input);改為scanf("%d", &input);


完成后就可以退出GDB了,命令如下:

(gdb) quit


GDB的功能遠遠不止如此,它還可以單步跟蹤程序、檢查內存變量和設置斷點等。

調試時可能會需要用到編譯器產生的中間結果,這時可以使用-save-temps選項,讓GCC將預處理代碼、匯編代碼和目標代碼都作為文件保存起來。如果想檢查生成的代碼是否能夠通過手工調整的辦法來提高執行性能,在編譯過程中生成的中間文件將會很有幫助,具體情況如下:

# gcc -save-temps foo.c -o foo# ls foo*foo  foo.c  foo.i  foo.s


GCC支持的其它調試選項還包括-p和-pg,它們會將剖析(Profiling)信息加入到最終生成的二進制代碼中。剖析信息對于找出程序的性能瓶頸很有幫助,是協助Linux程序員開發出高性能程序的有力工具。在編譯時加入-p選項會在生成的代碼中加入通用剖析工具(Prof)能夠識別的統計信息,而-pg選項則生成只有GNU剖析工具(Gprof)才能識別的統計信息。

最后提醒一點,雖然GCC允許在優化的同時加入調試符號信息,但優化后的代碼對于調試本身而言將是一個很大的挑戰。代碼在經過優化之后,在源程序中聲明和使用的變量很可能不再使用,控制流也可能會突然跳轉到意外的地方,循環語句有可能因為循環展開而變得到處都有,所有這些對調試來講都將是一場噩夢。建議在調試的時候最好不使用任何優化選項,只有當程序在最終發行的時候才考慮對其進行優化。
上次的培訓園地中介紹了GCC的編譯過程、警告提示功能、庫依賴、代碼優化和程序調試六個方面的內容。這期是最后的一部分內容。

加速

在將源代碼變成可執行文件的過程中,需要經過許多中間步驟,包含預處理、編譯、匯編和連接。這些過程實際上是由不同的程序負責完成的。大多數情況下GCC可以為Linux程序員完成所有的后臺工作,自動調用相應程序進行處理。

這樣做有一個很明顯的缺點,就是GCC在處理每一個源文件時,最終都需要生成好幾個臨時文件才能完成相應的工作,從而無形中導致處理速度變慢。例如,GCC在處理一個源文件時,可能需要一個臨時文件來保存預處理的輸出、一個臨時文件來保存編譯器的輸出、一個臨時文件來保存匯編器的輸出,而讀寫這些臨時文件顯然需要耗費一定的時間。當軟件項目變得非常龐大的時候,花費在這上面的代價可能會變得很沉重。

解決的辦法是,使用Linux提供的一種更加高效的通信方式—管道。它可以用來同時連接兩個程序,其中一個程序的輸出將被直接作為另一個程序的輸入,這樣就可以避免使用臨時文件,但編譯時卻需要消耗更多的內存。

在編譯過程中使用管道是由GCC的-pipe選項決定的。下面的這條命令就是借助GCC的管道功能來提高編譯速度的:

# gcc -pipe foo.c -o foo


在編譯小型工程時使用管道,編譯時間上的差異可能還不是很明顯,但在源代碼非常多的大型工程中,差異將變得非常明顯。

文件擴展名

在使用GCC的過程中,用戶對一些常用的擴展名一定要熟悉,并知道其含義。為了方便大家學習使用GCC,在此將這些擴展名羅列如下:

.c C原始程序;

.C C++原始程序;

.cc C++原始程序;

.cxx C++原始程序;

.m Objective-C原始程序;

.i 已經過預處理的C原始程序;

.ii 已經過預處理之C++原始程序;

.s 組合語言原始程序;

.S 組合語言原始程序;

.h 預處理文件(標頭文件);

.o 目標文件;

.a 存檔文件。

GCC常用選項

GCC作為Linux下C/C++重要的編譯環境,功能強大,編譯選項繁多。為了方便大家日后編譯方便,在此將常用的選項及說明羅列出來如下:

-c 通知GCC取消鏈接步驟,即編譯源碼并在最后生成目標文件;

-Dmacro 定義指定的宏,使它能夠通過源碼中的#ifdef進行檢驗;

-E 不經過編譯預處理程序的輸出而輸送至標準輸出;

-g3 獲得有關調試程序的詳細信息,它不能與-o選項聯合使用;

-Idirectory 在包含文件搜索路徑的起點處添加指定目錄;

-llibrary 提示鏈接程序在創建最終可執行文件時包含指定的庫;

-O、-O2、-O3 將優化狀態打開,該選項不能與-g選項聯合使用;

-S 要求編譯程序生成來自源代碼的匯編程序輸出;

-v 啟動所有警報;

-Wall 在發生警報時取消編譯操作,即將警報看作是錯誤;

-Werror 在發生警報時取消編譯操作,即把報警當作是錯誤;

-w 禁止所有的報警。

小結

GCC是在Linux下開發程序時必須掌握的工具之一。本文對GCC做了一個簡要的介紹,主要講述了如何使用GCC編譯程序、產生警告信息、調試程序和加快GCC的編譯速度。對所有希望早日跨入Linux開發者行列的人來說,GCC就是成為一名優秀的Linux程序員的起跑線。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=952641


fly 2007-03-16 15:01 發表評論
]]>
寫得蠻好的linux學習筆記(轉)http://m.tkk7.com/jlin/articles/103306.htmlflyflyMon, 12 Mar 2007 06:06:00 GMThttp://m.tkk7.com/jlin/articles/103306.htmlhttp://m.tkk7.com/jlin/comments/103306.htmlhttp://m.tkk7.com/jlin/articles/103306.html#Feedback0http://m.tkk7.com/jlin/comments/commentRss/103306.htmlhttp://m.tkk7.com/jlin/services/trackbacks/103306.htmllinux目錄架構
/?? 根目錄
/bin??? 常用的命令 binary file 的目錄
/boot?? 存放系統啟動時必須讀取的檔案,包括核心 (kernel) 在內
???? /boot/grub/menu.lst?? GRUB設置
???? /boot/vmlinuz?? 內核
???? /boot/initrd???? 核心解壓縮所需 RAM Disk
/dev??? 系統周邊設備????
/etc??? 系統相關設定文件
???? /etc/DIR_COLORS?? 設定顏色
???? /etc/HOSTNAME?? 設定用戶的節點名
???? /etc/NETWORKING?? 只有YES標明網絡存在
???? /etc/host.conf 文件說明用戶的系統如何查詢節點名
???? /etc/hosts 設定用戶自已的IP與名字的對應表
???? /etc/hosts.allow 設置允許使用inetd的機器使用
???? /etc/hosts.deny 設置不允許使用inetd的機器使用
???? /etc/hosts.equiv 設置遠端機不用密碼
???? /etc/inetd.conf 設定系統網絡守護進程inetd的配置
???? /etc/gateways 設定路由器
???? /etc/protocols 設定系統支持的協議
???? /etc/named.boot 設定本機為名字服務器的配置文件
???? /etc/sysconfig/network-scripts/ifcfg-eth0?? 設置IP
???? /etc/resolv.conf??? 設置DNS?
???? /etc/X11? X Window的配置文件,xorg.conf 或 XF86Config 這兩個 X Server 的設定檔
???? /etc/fstab??? 記錄開機要mount的文件系統
???? /etc/inittab 設定系統啟動時init進程將把系統設置成什么樣的runlevel
???? /etc/issue 記錄用戶登錄前顯示的信息
???? /etc/group 設定用戶的組名與相關信息
???? /etc/passwd 帳號信息
???? /etc/shadow 密碼信息
???? /etc/sudoers 可以sudo命令的配置文件
???? /etc/securetty 設定哪些終端可以讓root登錄
???? /etc/login.defs 所有用戶登錄時的缺省配置
???? /etc/exports 設定NFS系統用的
???? /etc/init.d/?? 所有服務的預設啟動 script 都是放在這裡的,例如要啟動或者關閉
???? /etc/xinetd.d/? 這就是所謂的 super daemon 管理的各項服務的設定檔目錄
???? /etc/modprobe.conf?? 內核模塊額外參數設定
???? /etc/syslog.conf?? 日志設置文件
/home?? 使用者家目錄
/lib??? 系統會使用到的函數庫
???? /lib/modules?? kernel 的相關模塊
???? /var/lib/rpm?? rpm套件安裝處
/lost+found??? 系統不正常產生錯誤時,會將一些遺失的片段放置於此目錄下
/mnt???? 外設的掛載點
/media?? 與/mnt類似
/opt???? 主機額外安裝的軟件
/proc??? 虛擬目錄,是內存的映射
????? /proc/version?? 內核版本
?????? /proc/sys/kernel?? 系統內核功能
/root??? 系統管理員的家目錄
/sbin??? 系統管理員才能執行的指令
/srv???? 一些服務啟動之後,這些服務所需要取用的資料目錄
/tmp???? 一般使用者或者是正在執行的程序暫時放置檔案的地方
/usr???? 最大的目錄,存許應用程序和文件
??? /usr/X11R6:?? X-Window目錄
??? /usr/src:??? Linux源代碼
??? /usr/include:系統頭文件
??? /usr/openwin 存放SUN的OpenWin
??? /usr/man 在線使用手冊
??? /usr/bin?????????? 使用者可執行的 binary file 的目錄
??? /usr/local/bin???? 使用者可執行的 binary file 的目錄
??? /usr/lib?????????? 系統會使用到的函數庫
??? /usr/local/lib???? 系統會使用到的函數庫
??? /usr/sbin????????? 系統管理員才能執行的指令
??? /usr/local/sbin??? 系統管理員才能執行的指令
/var?? 日志文件
??? /var/log/secure??? 記錄登入系統存取資料的檔案,例如 pop3, ssh, telnet, ftp 等都會記錄在此檔案中
??? /var/log/wtmp????? 記錄登入者的訊息資料, last
??? /var/log/messages? 幾乎系統發生的錯誤訊息
??? /var/log/boot.log? 記錄開機或者是一些服務啟動的時候,所顯示的啟動或關閉訊息
??? /var/log/maillog?? 紀錄郵件存取或往來( sendmail 與 pop3 )的使用者記錄
??? /var/log/cron????? 記錄 crontab 這個例行性服務的內容
??? /var/log/httpd, /var/log/news, /var/log/mysqld.log, /var/log/samba, /var/log/procmail.log:
??? 分別是幾個不同的網路服務的記錄檔
--------------------------------------------------------------------------------------------------------------
一些常用的基本命令:
uname -a??? 查看內核版本??????
ls -al??? 顯示所有文件的屬性
pwd???????? 顯示當前路徑???????
cd -??? 返回上一次目錄???? cd ~??? 返回主目錄
date s????? 設置時間、日期?????????
cal????? 顯示日歷???? cal 2006
bc????????? 計算器具??????????????
man? & info???? 幫助手冊
locale???? 顯示當前字體???? locale -a??? 所有可用字體???? /etc/sysconfig/i18n設置文件
LANG=en??? 使用英文字體???????????
sync?????? 將數據同步寫入硬盤???????
shutdonw -h now & half & poweroff? 關機
reboot???? 重啟??????????????????
startx? &? init 5?? 進入圖形介面
/work? & ?work??? 向上、下查找文檔內容
chgrp????? 改變檔案群組? chgrp testing install.log???
chown???? 改變所屬人?? chown root:root install.log
chmod????? 改變屬性???? chmod 777 install.log???? read=4? write=2? execute=1
cp?? 復制?? cp filename
rm?? 刪除文件? rm -rf filename?? 強制刪除文件
rmdir?? 刪除文件夾
mv? 移動??? mv 123.txt 222.txt? 重命名
mkdir???? 創建文件夾
touch???? 創建文件? 更新當前時間
cat?????? 由第一行開始顯示???? cat |more? 分頁
nl??????? 在內容前加行號
more? &? less?? 一面一面翻動
head -n filename?? 顯示第N行內容
tail -n filename? 顯示后N行內容
od??????? 顯示非純文檔
df -h 顯示分區空間
du? 顯示目錄或文件的大小
fdisk?? 分區設置??? fdisk -l /dev/hda? 顯示硬盤分區狀態
mkfs??? 建立各種文件系統? mkfs -t ext3? /dev/ram15??
fsck??? 檢查和修復LINUX檔案
ln????? 硬鏈接?? ln -s? 軟件鏈接
whereis?? 查找命令
locate??? 查找
find????? 查找?? find / -name "***.***"
which???? 查看工具
whoami??? 顯示當前用戶
gcc -v??? 查看GCC版本
chattr +i filename? 禁止刪除?? chattr -i filename? 取消禁止
lsattr??? 顯示隱藏檔屬性
updatedb? 更新資料庫
mke2fs??? 格式化?? mkfs -t ext3
dd if=/etc/passwd of=/tmp/passwd.bak??? 備份
mount???? 列出系統所有的分區
mount -t iso9660 /dev/cdrom /mnt/cdrom?? 掛載光盤
mount -t vfat /dev/fd0 /mnt/floppy?????? 掛載軟盤
mount -t vfat -o iocharset=utf8,umask=000 /dev/hda2 /mnt/hda2?? 掛載fat32分區
mount -t ntfs -o nls=utf8,umask=000 /dev/hda3 /mnt/hda3???????? 掛載ntfs分區
Linux-NTFS Project: http://linux-ntfs.sourceforge.net/
umount /mnt/hda3? 缷載
ifconfig?? 顯示或設置網絡設備
service network restart?? 重啟網卡?
ifdown eth0? 關閉網卡
ifup eth0??? 開啟網卡
clear??? 清屏
history??? 歷史記錄?????? !55? 執行第55個指令
stty?? 設置終端??? stty -a
fdisk /mbr?? 刪除GRUB
at???? 僅進行一次的工作排程
crontab?? 循環執行的例行性命令??? [e]編輯,[l]顯示,[r]刪除任務
&?????? 后臺運行程序??? tar -zxvf 123.tar.gz & --------->后臺運行
jobs??? 觀看后臺暫停的程序?? jobs -l
fg????? 將后臺程序調到前臺?? fg n ------>n是數字,可以指定進行那個程序
bg????? 讓工作在后臺運行
kill??? 結束進程??? kill -9 PID???? [9]強制結束,[15]正常結束,[l]列出可用的kill信號
ps aux? 查看后臺程序??
top???? 查看后臺程序?? top -d 2??? 每兩秒更新一次??????? top -d 2 -p10604?? 觀看某個PID
??????? top -b -n 2 > /tmp/top.txt ----->將 top 的資訊進行 2 次,然後將結果輸出到 /tmp/top.txt???
pstree?? 以樹狀圖顯示程序??? [A]以 ASCII 來連接, [u]列出PID, [p]列出帳號
killall?? 要刪除某個服務??? killall -9 httpd
free????? 顯示內存狀態???? free -m? -------->以M為單位顯示
uptime??? 顯示目前系統開機時間
netstat?? 顯示網絡狀態??? netstat -tulnp------>找出目前系統上已在監聽的網路連線及其 PID
dmesg???? 顯示開機信息??? demsg | more
nice????? 設置優先權????? nice -n -5 vi & ----->用 root 給一個 nice 植為 -5 ,用於執行 vi
renice??? 調整已存在優先權
runlevel? 顯示目前的runlevel
depmod??? 分析可載入模塊的相依性
lsmod???? 顯示已載入系統的模塊
modinfo?? 顯示kernel模塊的信息
insmod??? 載入模塊
modprobe?? 自動處理可載入模塊
rmmod???? 刪除模塊
chkconfig?? 檢查,設置系統的各種服務???? chkconfig --list ----->列出各項服務狀態
ntsysv???? 設置系統的各種服務
cpio????? 備份文件
------------------------------------------------------------------------------------------------------
壓縮命令:
?*.Z????? compress 程式壓縮的檔案;
?*.bz2??? bzip2 程式壓縮的檔案;
?*.gz???? gzip 程式壓縮的檔案;
?*.tar??? tar 程式打包的資料,並沒有壓縮過;
?*.tar.gz tar 程式打包的檔案,其中並且經過 gzip 的壓縮
compress filename? 壓縮文件? 加[-d]解壓? uncompress
gzip filename?? 壓縮? 加[-d]解壓? zcat 123.gz 查看壓縮文件內容
bzip2 -z filename? 壓縮? 加[-d]解壓?? bzcat filename.bz2? 查看壓縮文件內容
tar -cvf /home/123.tar /etc? 打包,不壓縮
tar -xvf 123.tar?? 解開包
tar -zxvf /home/123.tar.gz? 以gzip解壓
tar -jxvf /home/123.tar.bz2? 以bzip2解壓
tar -ztvf /tmp/etc.tar.gz?? 查看tar內容
cpio -covB? > [file|device]?? 份份
cpio -icduv < [file|device]?? 還原
?
vi一般用法
一般模式????????????? 編輯模式????????????????? 指令模式
h 左?????????????? a,i,r,o,A,I,R,O???????????? :w 保存
j 下??????????????? 進入編輯模式??????????????? :w! 強制保存
k 上??????????????? dd 刪除光標當前行?????????? :q! 不保存離開
l 右??????????????? ndd 刪除n行???????????????? :wq! 保存后離開
0 移動到行首??????? yy 復制當前行??????????????? :e! 還原原始檔
$ 移動到行尾??????? nyy 復制n行????????????????? :w filename 另存為
H 屏幕最上????????? p,P 粘貼???????????????????? :set nu 設置行號
M 屏幕中央????????? u? 撤消????????????????????? :set nonu 取消行號
L 屏幕最下????????? [Ctrl]+r 重做上一個動作?????? ZZ 保存離開
G 檔案最后一行????? [ctrl]+z 暫停退出??????????? :set nohlsearch?? 永久地關閉高亮顯示
/work 向下搜索?????????????????????????????????? :sp 同時打開兩個文檔
?work 向上搜索?????????????????????????????????? [Ctrl]+w 兩個文檔設換
gg 移動到檔案第一行????????????????????????????? :nohlsearch??? 暫時關閉高亮顯示
?
認識SHELL
alias??? 顯示當前所有的命令別名????? alias lm="ls -al"?? 命令別名??? unalias lm 取消命令別名
type????? 類似which
exprot??? 設置或顯示環境變量
exprot PATH="$PATH":/sbin? 添加/sbin入PATH路徑
echo $PATH??? 顯示PATH路徑
bash????? 進入子程序
name=yang???? 設定變量
unset name??? 取消變量
echo $name??? 顯示變量的內容
myname="$name its me"?? &?? myname='$name its me'???? 單引號時$name失去變量內容
ciw=/etc/sysconfig/network-scripts/???? 設置路徑
env????? 列出所有環境變量
echo $RANDOM??? 顯示隨意產生的數
set????? 設置SHELL
PS1='[\u@\h \w \A #\#]\$ '???? 提示字元的設定
?? [root@linux ~]# read [-pt] variable???? -----------讀取鍵盤輸入的變量
?? 參數:
?? -p? :後面可以接提示字元!
?? -t? :後面可以接等待的『秒數!』
declare??? 聲明 shell 變量
ulimit -a?? 顯示所有限制資料
?ls /tmp/yang && echo "exist" || echo "not exist"
?意思是說,當 ls /tmp/yang 執行後,若正確,就執行echo "exist" ,若有問題,就執行echo "not exist"
?echo $PATH | cut -d ':' -f 5?????? 以:為分隔符,讀取第5段內容
?export | cut -c 10-20????? 讀取第10到20個字節的內容
?last | grep 'root'??? 搜索有root的一行,加[-v]反向搜索
?cat /etc/passwd | sort??? 排序顯示
?cat /etc/passwd | wc????? 顯示『行、字數、字節數』
正規表示法
[root@test root]# grep [-acinv] '搜尋字串' filename
?????? 參數說明:
?????? -a :將 binary 檔案以 text 檔案的方式搜尋資料
?????? -c :計算找到 '搜尋字串' 的次數
?????? -i :忽略大小寫的不同,所以大小寫視為相同
?????? -n :順便輸出行號
?????? -v :反向選擇,亦即顯示出沒有 '搜尋字串' 內容的那一行!
?grep -n 'the' 123.txt???? 搜索the字符 -----------搜尋特定字串??????
?grep -n 't[ea]st' 123.txt??? 搜索test或taste兩個字符---------利用 [] 來搜尋集合字元
?grep -n '[^g]oo' 123.txt???? 搜索前面不為g的oo-----------向選擇 [^]
?grep -n '[0-9]' 123.txt? 搜索有0-9的數字
?grep -n '^the' 123.txt 搜索以the為行首-----------行首搜索^
?grep -n '^[^a-zA-Z]' 123.txt? 搜索不以英文字母開頭
?grep -n '[a-z]$' 123.txt??? 搜索以a-z結尾的行---------- 行尾搜索$
?grep -n 'g..d' 123.txt???? 搜索開頭g結尾d字符----------任意一個字元 .
?grep -n 'ooo*' 123.txt???? 搜索至少有兩個oo的字符---------重複字元 *
sed??? 文本流編輯器??? 利用腳本命令來處理文本文件
awd??? 模式掃描和處理語言
?nl 123.txt | sed '2,5d'?? 刪除第二到第五行的內容
diff???? 比較文件的差異
cmp????? 比較兩個文件是否有差異
patch??? 修補文件
pr?????? 要打印的文件格式化
----------------------------------------------------------------------------------------------------------
帳號管理
/etc/passwd??? 系統帳號信息
/etc/shadow??? 帳號密碼信息??? 經MD5 32位加密
???? 在密碼欄前面加『 * 』『 ! 』禁止使用某帳號
/etc/group???? 系統群組信息
/etc/gshadow
newgrp??? 改變登陸組
useradd? &? adduser??? 建立新用戶? ---------> useradd -m test? 自動建立用戶的登入目錄
????????? useradd -m -g pgroup test --------->指定所屬級
/etc/default/useradd?? 相關設定
/etc/login.defs?????? UID/GID 有關的設定
passwd??? 更改密碼 -----------> passwd test
usermod?? 修改用戶帳號
userdel?? 刪除帳號 ----------->userdel -r test
chsh????? 更換登陸系統時使用的SHELL?? [-l]顯示可用的SHELL;[-s]修改自己的SHELL
chfn????? 改變finger指令顯示的信息
finger??? 查找并顯示用戶信息
id??????? 顯示用戶的ID ----------->? id test
groupadd?? 添加組
groupmod?? 與usermod類似
groupdel?? 刪除組
su test??? 更改用戶?? su -??? 進入root,且使用root的環境變量
sudo?????? 以其他身份來執行指令
visudo???? 編輯/etc/sudoers????? 加入一行『 test ALL=(ALL) ALL 』
?????????? %wheel ALL = (ALL) ALL?????????????? 系統里所有wheel群組的用戶都可用sudo
?????????? %wheel ALL = (ALL) NOPASSWD: ALL???? wheel群組所有用戶都不用密碼NOPASSWD
?????? User_Alias ADMPW = vbird, dmtsai, vbird1, vbird3???????? 加入ADMPW組
?????? ADMPW ALL = NOPASSWD: !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, \
?????? !/usr/bin/passwd root????? 可以更改使用者密碼,但不能更改root密碼 (在指令前面加入 ! 代表不可)
PAM (Pluggable Authentication Modules, 嵌入式模組)
who & w???? 看誰在線????????????????????
last??????? 最近登陸主機的信息
lastlog???? 最近登入的時間??? 讀取 /var/log/lastlog
talk??????? 與其他用戶交談
write?????? 發送信息??? write test?? [ctrl]+d 發送
mesg??????? 設置終端機的寫入權限??? mesg n 禁止接收???? mesg y
wall??????? 向所有用戶發送信息??? wall this is q test
mail??????? 寫mail??
/etc/default/useradd??? 家目錄默認設置
quota????? 顯示磁盤已使用的空間與限制???? quota -guvs ----->秀出目前 root 自己的 quota 限制值
?????????? quota -vu?? 查詢
quotacheck?? 檢查磁盤的使用空間與限制???? quotacheck -avug? ----->將所有的在 /etc/mtab 內,含有 quota 支援的 partition 進行掃瞄
???????????? [-m] 強制掃描?
???? quota一定要是獨立的分區,要有quota.user和quota.group兩件文件,在/etc/fstab添加一句:
???? /dev/hda3 /home ext3 defaults,usrquota,grpquota 1 2
???? chmod 600 quota*???????? 設置完成,重啟生效
edquota??? 編輯用戶或群組的quota? [u]用戶,[g]群組,[p]復制,[t]設置寬限期限
?????????? edquota -a yang?????? edquota -p yang -u young ----->復制???
quotaon??? 開啟磁盤空間限制???? quotaon -auvg -------->啟動所有的具有 quota 的 filesystem
quotaoff?? 關閉磁盤空間限制???? quotaoff -a? -------->關閉了 quota 的限制
repquota -av???? 查閱系統內所有的具有 quota 的 filesystem 的限值狀態
Quota 從開始準備 filesystem 的支援到整個設定結束的主要的步驟大概是:
1、設定 partition 的 filesystem 支援 quota 參數:
由於 quota 必須要讓 partition 上面的 filesystem 支援才行,一般來說, 支援度最好的是 ext2/ext3 ,
其他的 filesystem 類型鳥哥我是沒有試過啦! 啟動 filesystem 支援 quota 最簡單就是編輯 /etc/fstab ,
使得準備要開放的 quota 磁碟可以支援 quota 囉;
2、建立 quota 記錄檔:
剛剛前面講過,整個 quota 進行磁碟限制值記錄的檔案是 aquota.user/aquota.group,
要建立這兩個檔案就必須要先利用 quotacheck 掃瞄才行喔!
3、編輯 quota 限制值資料:
再來就是使用 edquota 來編輯每個使用者或群組的可使用空間囉;
4、重新掃瞄與啟動 quota :
設定好 quota 之後,建議可以再進行一次 quotacheck ,然後再以 quotaon 來啟動吧!

開機流程簡介
1、載入 BIOS 的硬體資訊,並取得第一個開機裝置的代號;
2、讀取第一個開機裝置的 MBR 的 boot Loader (亦即是 lilo, grub, spfdisk 等等) 的開機資訊;
3、載入 Kernel 作業系統核心資訊, Kernel 開始解壓縮,並且嘗試驅動所有硬體裝置;
4、Kernel 執行 init 程式並取得 run-level 資訊;
5、init 執行 /etc/rc.d/rc.sysinit 檔案;
6、啟動核心的外掛模組 (/etc/modprobe.conf);
7、init 執行 run-level 的各個批次檔( Scripts );
8、init 執行 /etc/rc.d/rc.local 檔案;
9、執行 /bin/login 程式,並等待使用者登入;
10、登入之後開始以 Shell 控管主機。
在/etc/rc.d/rc3.d內,以S開頭的為開機啟動,以K開頭的為關閉,接著的數字代表執行順序
GRUB vga設定
彩度\解析度? 640x480? 800x600? 1024x768? 1280x1024?? bit
??? 256??????? 769????? 771????? 773?????? 775????? 8 bit
?? 32768?????? 784????? 787????? 790?????? 793???? 15 bit
?? 65536?????? 785????? 788????? 791?????? 794???? 16 bit
?? 16.8M?????? 786????? 789????? 792?????? 795???? 32 bit

./configure??? 檢查系統信息?????? ./configure --help | more? 幫助信息
make clean???? 清除之前留下的文件
make?????????? 編譯
make install?? 安裝
rpm -q? ----->查詢是否安裝???????????? rpm -ql ------>查詢該套件所有的目錄
rpm -qi ----->查詢套件的說明資料?????? rpm -qc[d] ----->設定檔與說明檔
rpm -ivh? ---->安裝??????????????????? rpm -V? -------->查看套件有否更動過
rpm -e? ------>刪除??????????????????? rpm -Uvh ------->升級安裝?
--nodeps ----->強行安裝??????????????? --test ----->測試安裝
http://blog.chinaunix.net/u/30619/showart.php?id=249558



fly 2007-03-12 14:06 發表評論
]]>
Linux應用問答http://m.tkk7.com/jlin/articles/103303.htmlflyflyMon, 12 Mar 2007 06:02:00 GMThttp://m.tkk7.com/jlin/articles/103303.htmlhttp://m.tkk7.com/jlin/comments/103303.htmlhttp://m.tkk7.com/jlin/articles/103303.html#Feedback0http://m.tkk7.com/jlin/comments/commentRss/103303.htmlhttp://m.tkk7.com/jlin/services/trackbacks/103303.html問:為什么我的Linux能夠顯示中文,但是無法輸入中文?我應該如何解決Linux下中文輸入問題?

答:如果你是在 Shell 下不能輸入中文,就必須修改兩個地方:一個是在Shell中增加 locale 的設定,另一個是在Home Directory中增加關于輸入的設定,使 Linux 系統可以接受中文的輸出與輸入。具體修改如下:

1.Bash Shell: 請在 /etc/profile或者$HOME/.profile文件里增加下面的內容:

stty cs8 -istrip
stty pass8
export LANG=C
export LC_CTYPE=iso-8859-1

?

2.在$HOME/.inputrc中增加下面的內容:

set convert -meta off
set output -meta on

?

問:我的計算機中原來安裝有Windows NT和Red Hat 6.2,最近又安裝了Windows 2000 Server。但是,安裝后發現LILO沒有了。我如何解決這個問題?

答:解決這個問題可以使用兩種方法恢復:

1.如果原本將LILO安裝在主引導分區上,則用啟動軟盤啟動Linux,在 boot: 行寫上:

Boot: mount root=/dev/hd_your_root_dev

?

然后執行/sbin/lilo,重新在主引導區建立LILO。

2.使用安裝光盤啟動Linux,選擇升級系統選項,重新建立LILO。

問:我安裝了Red Hat 5.1后,發現聲卡無法正常工作。請問如何才能使聲卡工作呢?

答:出現這種現象很可能是Linux內核無法將你的聲卡檢測出來,需要重新安裝這種聲卡的驅動。Red Hat Linux中帶有sndconfig來配置聲卡,你可以使用它將聲卡重新配置一遍。具體做法如下:

1.用root登錄系統,運行/usr/sbin/sndconfig;

2.從聲卡選擇列表中選擇你的聲卡類型,設置聲卡的IO地址和IRQ中斷號;

3.設置完成按OK結束。

如果在內核配置中找不到你的聲卡類型,我們推薦使用ALSA 聲卡驅動程序包來安裝聲卡。ALSA是Advanced Linux Sound Architecture的縮寫,是一個遵從GPL版權的通用PCI聲卡解決軟件。它專門用在Linux下驅動聲卡設備,可以支持大多數流行的聲卡。ALSA包括RPM和Tar兩種格式,可以到http://www.alsa-project.org下載該軟件安裝使用。

問:我在Slackware 3.5使用了GPM后,發現在X-Window里鼠標不起作用了。為什么會出現這種問題?如何解決?

答:實際上這個問題出現在Slackeare 3.5的GPM的R選項上。使用該選項后GPM就成為了一個鼠標轉發器,它會建立一個命名管道“/dev/gpmdata”,將物理鼠標仿真成一個MouseSystem。如果發現X-Window中鼠標不起作用了,只要將GPM的-R參數去掉就可以了。

問:我的系統原來安裝的是Windows Me,因為想學習Linux又安裝了Red Hat。但安裝完Linux后,每次啟動系統時都會出現boot提示符,然后進入Linux。我如何修改才能使系統每次啟動進入Windows呢?

答:在安裝了Red Hat后,它會自動將Linux作為缺省操作系統。如果你想每次都進入Windows,就需要將Windows改為缺省操作系統。具體做法是修改文件“/etc/lilo.conf”(LILO配置文件),把有關啟動DOS的部分放在前面,再運行一次LILO即可。

boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
image=/boot/vmlinuz-2.0.34-1
label=linux
root=/dev/hdc2
read-only
other=/dev/hda1
label=dos
table=/dev/hda

?

上面代碼行表示系統先啟動Linux,如果將啟動順序改為:

boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
other=/dev/hda1
label=dos
table=/dev/hda
image=/boot/vmlinuz-2.0.34-1
label=linux
root=/dev/hdc2
read-only

?

這樣系統每次啟動時會首先啟動Windows。此外也可以在lilo.conf的配置文件前面加上Default=dos來使系統先啟動Windows。

問:在Linux下如何恢復被刪除的文件?如何避免誤刪除?

答:要想恢復被誤刪除的文件,一個解決辦法是用MC(Midnight Commander)。它有個Undelete 功能可以找到ext2文件系統上被刪掉的i-node, 但是它無法恢復文件名。

我們可以設置Tcsh來阻止使用rm命令刪除文件。Tcsh有一個參數set rmstar,將它設置在.cshrc文件中。以后每次當使用rm命令刪除文件時,系統都會要求進行確認,這樣可以避免誤刪除操作。
問:我有一塊10MB/100MB自適應網卡,在Linux中如何設置才能將它設置為100MB?我的計算機現在連在一個局域網中,如何安裝第二塊網卡呢?

答:在/etc/lilo.conf中增加:

ether=0,0,0,0,28,eth0

?

即可將網卡設置為100MB。

為了減少啟動時可能出現的問題,Linux內核通常不會自動檢測多個網卡。這時要想在計算機中安裝第二塊網卡有兩種方法:一種方法是在Linux系統中使用配置工具netconf來完成第二塊網卡的安裝。在netconf中選擇第二塊網卡,設備名為eth1,然后選擇其驅動模塊,輸入I/O地址和IRQ中斷號,存盤退出后執行“etc/rc.d/init.d/network restart ”即可。

另一種方法是配置conf.modules文件。如果在安裝時第二塊網卡的驅動已經被編譯進內核中,只需要在/etc/lilo.conf文件中指定各個網卡的參數信息就可以了。如果安裝時第二塊網卡的驅動還沒有被編譯進內核,而是作為模塊動態載入系統,則應該在conf.modules文件中進行相應的配置。例如:

alias eth0 ne
alias eth1 ne
options ne io=0x240,0x260

?

上面表示有兩塊NE 2000網卡,它們的I/O地址分別是0x240和0x260。這樣就可以在一個系統中安裝兩塊網卡了。

問:在Linux如何使用打印機?

答:Linux系統中的打印工作并不是直接送到打印機,而是將打印文件以離線方式處理,以節省系統時間。Linux中每一臺打印機都有自己的spool區,打印內容會先處理成打印格式文件,然后存儲在spool區隊列中等待打印。

Linux中打印機的設置都存儲在設置文件“/etc/ printcap”中,設置打印機時要以root登錄系統。例如在“/etc/printcap”中添加下列命令就能夠使用打印機。

lp0: : sd=/var/spool/lpd/lp0: : mx#0: :sh:: lp=/dev/lp0:: if=/var/spool/lpd/lp0/filter:

?

問:如何將以前安裝的Linux卸載?

答:要將Linux從系統中卸載需要分成兩個方面,一是刪除Linux分區,二是刪除Linux的啟動模塊LILO。

由于DOS和Windows的Fdisk命令不能識別Linux分區類型,因此必須使用Linux的安裝盤重新進行安裝,在分區步驟中刪除分區后退出就可以了,或者使用一些專門刪除Linux分區的軟件完成操作。刪除Linux的啟動模塊LILO可以使用Windows的Fdisk命令,命令格式如下:

FDISK /MBR。

?

問:我有一塊USB盤,能不能在Linux下使用?該如何使用?

答:要在Linux下使用USB盤,首先需要在/mnt下新建一個子目錄:

mkdir usb

?

然后將USB盤連接到計算機上,用mount裝載:

mount /dev/sda/mnt/usb

?

這樣USB盤就可以使用了。使用完USB盤后需要用umount /mnt/usb進行卸載才可以拔下USB盤。

問:現在我經常從一些文章中看到Samba這個詞。請問什么是Samba?

答:Samba是基于SMB協議的一個應用程序。SMB 是一套通訊協議, 使運行Windows NT、Windows 95、Windows for Workgroups 的計算機實現文件共享和打印機共享服務。使用了Samba以后,Linux計算機“網絡鄰居”中看起來就像一臺Windows計算機一樣,Windows用戶可以登錄到Linux計算機中,Linux計算機也可以從Windows中獲取數據。在擁有大量Windows系統的局域網中,Samba是實現不同系統之間通信最有效的工具。 

Samba 服務器由smbd和nmbd兩部分組成。其中smbd是Samba的核心,用來建立對話、驗證客戶、提供文件系統和打印服務;nmbd使 Samba 服務器能夠在Windows 的“網絡鄰居”中顯示,允許用戶瀏覽可以使用的資源,同時在網絡中nmbd還可以作為一個 WINS(Windows Internet Name Service)服務器



fly 2007-03-12 14:02 發表評論
]]>
主站蜘蛛池模板: 亚洲一卡2卡4卡5卡6卡在线99| 全亚洲最新黄色特级网站 | 亚洲精品岛国片在线观看| 亚洲精品无码av片| 日韩特黄特色大片免费视频| 亚洲精品国产suv一区88| 在线观看免费为成年视频| 亚洲熟妇AV一区二区三区宅男| 午夜视频在线观看免费完整版| 欧洲 亚洲 国产图片综合| 在线观看免费a∨网站| 国产天堂亚洲精品| 亚洲女同成人AⅤ人片在线观看| 久久久WWW免费人成精品| 精品亚洲一区二区| 久久九九兔免费精品6| 亚洲一线产区二线产区精华| 四虎www成人影院免费观看| 黄色免费网址大全| 亚洲乱码国产一区三区| 最近中文字幕免费完整| 亚洲中文字幕无码mv| 亚洲高清无码专区视频| 日韩精品免费在线视频| 亚洲中文字幕AV在天堂| 亚洲精品一级无码鲁丝片| 日韩内射激情视频在线播放免费 | 亚洲国产成人综合精品| 亚洲人成网站色在线入口| 免费黄色电影在线观看| 亚洲视频无码高清在线| 亚洲人AV永久一区二区三区久久| 久久免费观看国产精品88av| 久久久久久亚洲精品影院| 亚洲综合色视频在线观看| 91精品成人免费国产片| 青娱乐在线免费观看视频| 亚洲国产高清在线| 国产小视频在线免费| 99久久人妻精品免费一区| 黄色一级视频免费观看|