Linux筆記總結

標籤: Linux

1. 庫

 庫是一種可執行代碼的二進制形式,能夠被操做系統載入內存執行。庫有兩種:靜態庫(.a、.lib)和動態庫(.so、.dll)。html

a. 靜態庫
  之因此稱爲【靜態庫】,是由於在連接階段,會將彙編生成的目標文件.o與引用到的庫一塊兒連接打包到可執行文件中。所以對應的連接方式稱爲靜態連接。首先,靜態庫對函數庫的連接是放在編譯時期完成的。其次,程序在運行時與函數庫再無瓜葛,移植方便。靜態庫也有缺點以下圖所示,形成空間內存浪費;node

靜態庫的示例程序

b. 動態庫
  動態庫在程序編譯時並不會被鏈接到目標代碼中,而是在程序運行是才被載入。不一樣的應用程序若是調用相同的庫,那麼在內存裏只須要有一份該共享庫的實例,規避了空間浪費問題。動態庫在程序運行時才被載入,也解決了靜態庫對程序的更新、部署和發佈頁會帶來麻煩。用戶只須要更新動態庫便可,增量更新。linux

2. LIBRARY_PATH和LD_LIBRARY_PATH環境變量

  1. LIBRARY_PATH環境變量用於在程序編譯期間查找動態連接庫時指定查找共享庫的路徑。
  2. LD_LIBRARY_PATH環境變量用於在程序加載運行期間查找動態連接庫時指定除了系統默認路徑以外的其餘路徑,

3. Linux的根文件系統

Linux目錄結構

/bin/usr/bin 該目錄爲命令文件目錄,也稱爲二進制目錄。包含了供系統管理員及普通用戶使用的重要的linux命令和二進制(可執行)文件,包含shell解釋器等。c++

/boot 該目錄中存放系統的內核文件和引導裝載程序文件,/boot/vmlinuz爲linux的內核文件,以及/boot/gurb。建議單獨分區,分區大小100M便可。shell

/dev 存放設備文件的目錄,存放linux系統下的設備文件,訪問該目錄下某個文件,至關於訪問某個設備,存放鏈接到計算機上的設備(終端、磁盤驅動器、光驅及網卡等)的對應文件,包括字符設備和塊設備等,經常使用的是掛載光驅mount /dev/cdrom/mnt。編程

/etc 存放系統管理和配置文件的目錄,系統配置文件存放的目錄,該目錄存放系統的大部分配置文件和子目錄。重要的配置文件有/etc/inittab、/etc/fstab、/etc/init.d、/etc/X11(X Window系統有關)、/etc/sysconfig(與網絡有關)、/etc/xinetd.d修改配置文件以前記得備份。該目錄下的文件由系統管理員來使用,普通用戶對大部分文件有隻讀權限。windows

/home 用戶主目錄,好比用戶user的主目錄就是/home/user,能夠用~user表示數組

/lib/usr/lib/usr/local/lib存放動態連接共享庫的目錄瀏覽器

/sbin,/usr/sbin/usr/local/sbin 放置系統管理員使用的可執行命令,如fdisk、shutdown、mount等。與/bin不一樣的是,這幾個目錄是給系統管理員root使用的命令,通常用戶只能"查看"而不能設置和使用。安全

/tmp 通常用戶或正在執行的程序臨時存放文件的目錄,任何人均可以訪問,重要數據不可放置在此目錄下。

/root 系統管理員的主目錄

/mnt 系統提供這個目錄是讓用戶臨時掛載其餘的文件系統。關於掛載的理解:

linux系統中每一個分區都是一個文件系統,都有本身的目錄層次結構。linux會將這些分屬不一樣分區的、單獨的文件系統按必定的方式造成一個系統的總的目錄層次結構;這裏所說「按必定方式」就是指的掛載,
通俗的說,將一個文件系統的頂層目錄掛到另外一個文件系統的子目錄上,使它們成爲一個總體,稱爲掛載;咱們把這個子目錄叫「掛載點」

不一樣的是WINDOWS是把分區映射到一個盤符,而LINUX下是映射到一個目錄。

/proc 此目錄的數據都在內存中,如系統核心,外部設備,網絡狀態,因爲數據都存放於內存中,因此不佔用磁盤空間,

/var 若是/usr是安裝時會佔用較大硬盤容量的目錄,那麼/var就是在系統運做後纔會漸漸佔用硬盤容量的目錄。 放置系統執行過程當中常常變化的文件,如隨時更改的日誌文件 /var/log。

/usr(最龐大的目錄,要用到的應用程序和文件幾乎都在這個目錄),它不是user的縮寫,其實usr是Unix Software Resource的縮寫,也就是Unix操做系統軟件資源所放置的目錄,都會放置到/usr底下,所以這個目錄有點相似Windows系統的C:\Windows + C:\Program files\這兩個目錄的綜合體,系統剛安裝完畢時,這個目錄會佔用最多的硬盤容量。

/usr/bin/  #絕大部分的用戶可以使用指令都放在這裏  
/usr/lib/ #應用軟件的函式庫、目標文件(object file),以及不被通常使用者慣用的執行檔或腳本(script)。 某些軟件會提供一些特殊的指令來進行服務器的設定,這些指令也不會常常被系統管理員操做, 那就會被擺放到這個目錄下啦。要注意的是,若是你使用的是X86_64的Linux系統, 那可能會有/usr/lib64/目錄產生  
/usr/local/ #本地安裝的軟件和其餘文件放在這裏,/usr/local/bin存放本地增長的命令,/usr/local/include存放本地增長的庫文件。

4. 不一樣用戶使用不一樣版本gcc(5.3)的方法

  1. 安裝gcc須要GMP、MPFR、MPC這三個庫,因爲MPFR依賴GMP,而MPC依賴GMP和MPFR,因此要先安裝GMP,其次MPFR,最後纔是MPC(下載地址) .將他們解壓後放在一個文件夾下。
  2. 安裝gmp4.3.2
    進入gmp4.3.2的安裝目錄執行。(注意:prefix指定編譯的時候用來指定程序存放路徑 。

    ./configure --prefix=/home/gqx/new_gcc/gmp-4.3.2
    make
    make install
  3. 安裝mpfr2.4.2
    進入gmp4.3.2的安裝目錄執行(注意:配置的時候要把依賴關係選項加進去

    ./configure --prefix=/home/gqx/new_gcc/mpfr-2.4.2   --with-gmp=/home/gqx/new_gcc/gmp-4.3.2
      make 
      make install
  4. 安裝mpc0.8.1
    進入安裝目錄

    ./configure --prefix=/home/gqx/new_gcc/mpc-0.8.1 --with-gmp=/home/gqx/new_gcc/gmp-4.3.2 --with-mpfr=/home/gqx/new_gcc/mpfr-2.4.2
      make
      make install
  5. 添加環境變量
    修改~/.bashrc文件,添加以下內容:

    LD_LIBRARY_PATH=LD_LIBRARY_PATH:=/home/gqx/new_gcc/mpc-0.8.1/lib:=/home/gqx/new_gcc/gmp-4.3.2/lib=/home/gqx/new_gcc/mpfr-2.4.2/lib:=/home/gqx/new_gcc/gcc-5.3/lib 
        export D_LIBRARY_PATH
  6. 安裝gcc
    下載gcc-5.3安裝包
    gcc各版本瀏覽地址:http://ftp.gnu.org/gnu/gcc/
    gcc-5.3下載地址:http://ftp.gnu.org/gnu/gcc/gcc-5.3/gcc-5.3.tar.bz2
    進入安裝目錄,編譯安裝指令以下:

    ./configure --prefix/home/gqx/new_gcc/gcc-5.3/

    該過程須要一部分時間,接下來,編譯

    make
     make insatll
  7. 創建一個bin目錄,作好軟連接

    mkdir bin
     ln -s /home/gqx/new_gcc/gcc-5.3/bin/gcc ./bin/gcc 
      ln -s /home/gqx/new_gcc/gcc-5.3/bin/g++ ./bin/g++
    查看軟連接是否成功:ls ./bin -l;注意,這裏的bin目錄是在/home/目錄下建的。
  8. 添加環境變量
    修改~/.bashrc文件,添加以下內容:

    export PATH=$PATH:~/bin
    #CC:用來指定C編譯器
    export CC=/home/gqx/new_gcc/gcc-5.3/bin/gcc
    #CXX: 用來制定CXX編譯器
    export CXX=/home/gqx/new_gcc/gcc-5.3/bin/gcc

    保存生效後,查看便可。

    gcc -v

5. GNU、GCC與G++的區別

  1. GNU

GNU不是一個公司名,而是一個軟件項目名。它開發了許多應用程序。

  1. GCC

GCC全稱是 GNU C Compiler, 最先的時候就是一個c編譯器。可是後來由於這個項目裏邊集成了更多其餘不一樣語言的編譯器,GCC就表明 the GNU Compiler Collection,因此表示一堆編譯器的合集。

  1. G++

G++則是GCC的c++編譯器

6. configure和make

  1. configure
     這一步通常用來生成 Makefile,爲下一步的編譯作準備,你能夠經過在 configure 後加上參數來對安裝進行控制,好比代碼:

    ./configure --prefix=/usr
    上面的意思是將該軟件安裝在 /usr 下面,執行文件就會安裝在 /usr/bin (而不是默認的 /usr/local/bin),資源文件就會安裝在 /usr/share(而不是默認的/usr/local/share)。
     同時一些軟件的配置文件你能夠經過指定--sys-config=參數進行設定。有一些軟件還能夠加上--with、--enable、--without、--disable等等參數對編譯加以控制,你能夠經過容許 ./configure --help察看詳細的說明幫助。
  2. make
      make 的做用是開始進行源代碼編譯,以及一些功能的提供,這些功能由他的 Makefile 設置文件提供相關的功能,好比 make install 通常表示進行安裝,make uninstall 是卸載,不加參數就是默認的進行源代碼編譯。

7.管道命令

 管道是一種通訊機制,一般用於進程間的通訊(也可經過socket進行網絡通訊),它表現出來的形式將前面每個進程的輸出(stdout)直接做爲下一個進程的輸入(stdin)

  管道命令使用|做爲界定符號,管道命令與上面說的連續執行命令不同。以下案例:

command1 | command2 | command3;

管道命令的處理圖

經常使用的管道命令以下:

  1. 選取命令:cut

    cut -d '分隔字符' -f field // 用於分隔字符
    cut -c 字符範圍
    [參數說明]
    -d : 後面接分隔字符,一般與 -f 一塊兒使用
    -f : 根據-d 將信息分隔成數段,-f 後接數字 表示取出第幾段
    -c : 以字符爲單位取出固定字符區間的信息
  2. grep
    分析一行信息,若是其中有咱們須要的信息,就將該行拿出來

    grep [-acinv] [--color=auto] '查找字符串' filename
    [參數說明]
    -a : 將binary文件以text文件的方式查找數據
    -c : 計算找到 '查找字符串'的次數
    -i : 忽略大小寫的不一樣
    -n : 輸出行號
    -v : 反向選擇,顯示沒有查找內容的行
    --color=auto : 將找到的關鍵字部分加上顏色顯示
  3. 排序命令sort,wc,uniq

    sort [-fbMnrtuk] [file or stdin]
    [參數說明]
    -f :忽略大小寫的差別,例如A 與a 視爲編碼相同
    -b :忽略最前面的空格部分
    -M :以月份的名字來排序,例如JAN, DEC 等等的排序方法
    -n :使用『純數字』進行排序默認是以文字型態來排序的)
    -r :反向排序
    -u :就是uniq ,相同的資料中,僅出現一行表明
    -t :分隔符號,預設是用[tab] 鍵來分隔
    -k :以那個區間(field) 來進行排序的意思
    uniq [-ic]
    [參數說明]
    -i :忽略大小寫的不一樣
    -c :進行計數
    wc [-lwm]
    [參數說明]
    -l :僅列出行
    -w :僅列出多少字(英文單字)
    -m :多少字符

    利用管道命令能夠幫助解決不少問題,經常使用的一條命令是根據進程名字刪除殺死進程,以下:

    #殺死名爲routerserver的進程
    ps aux|grep routerserver|grep -v grep | awk '{print $2}'|xargs kill -9

    關於ps相關參數的說明:

    -a  顯示現行終端機下的全部進程,包括其餘用戶的進程。
    -u  以用戶爲主的格式來顯示程序情況
    -x  顯示全部程序,不以終端機來區分。

    還有就是根據端口號殺死進程:

    netstat -tunlp|grep 端口號 #獲取進程號
    kill -9 進程號

    關於netstat的參數說明:

    -t或--tcp:顯示TCP傳輸協議的連線情況;
    -u或--udp:顯示UDP傳輸協議的連線情況;
    -n或--numeric:直接使用ip地址,而不經過域名服務器; 
    -l或--listening:顯示監控中的服務器的Socket;
    -p或--programs:顯示正在使用Socket的程序識別碼和程序名稱;

8. 連接

目標文件有三種類型:

可重定位的目標文件:包含二進制數據和代碼,其形式能夠在編譯時與其餘可重定位合併起來,建立一個可執行的目標文件

可執行的目標文件:包含二進制和代碼,能夠直接複製到內存並執行

共享目標文件:一類特殊的可重定位目標文件,能夠在加載或者運行時被動態的加載到內存執行。

 上面提到的三種對象文件有統一的格式(ELF文件),包含幾個重要的部分,以下圖:

  • [ ] ELF文件文件格式
ELF文件文件格式

下面分別介紹一下主要部分:

.text section  
代碼部分
.rodata section
只讀數據部分,例如跳轉表
.data section
初始化的全局變量
.bss section
未初始化的全局變量
.symtab section
包含 symbol table, procudure 和 static variable names 以及 section names 和 location
.rel.txt section
.text section 的重定位信息
.rel.data section
.data section 的重定位信息

連接器實際上會處理三種不一樣的符號,對應於代碼中不一樣寫法的部分:
全局符號 Global symbols
在當前模塊中定義,且能夠被其餘代碼引用的符號,例如非靜態 C 函數和非靜態全局變量。
外部符號 External symbols
一樣是全局符號,可是是在其餘模塊(也就是其餘的源代碼)中定義的,可是能夠在當前模塊中引用。
本地符號 Local symbols
在當前模塊中定義,只能被當前模塊引用的符號,例如靜態函數和靜態全局變量。
注意,Local linker symbol 並非 local program variables

連接過程

第一步 符號解析 Symbol resolution
 符號解析會將每一個符號引用恰好和一個符號定義聯繫起來。彙編器生成可重定位目標文件後,內部符號都已被正確地符號解析, 外部符號可能會引用了非本模塊的符號定義,彙編器沒法找到符號定義,所以沒法解析。 彙編器把外部符號放入」符號表「.symtab,同時把如何解析該符號的方法放入」重定位表「。連接器只知道非靜態的全局變量/函數,而對於局部變量一無所知,局部非靜態變量和局部靜態變量的區別:

局部非靜態變量會保存在棧中
局部靜態變量會保存在 .bss 或 .data 中

連接器符號解析時會用到符號表:

強符號與弱符號: 函數和初始化的全局變量叫強符號, 未初始化的全局變量叫弱符號。(extern int a是一個弱符號定義, int a 也是弱符號)

符號解析規則:

1.(定義多個強符號) 當引用符號時,該符號的符號定義有不止一個強符號定義時,會出現符號重定義錯誤。

2.(定義一個強符號和一個或者多個弱符號)當引用符號時, 該符號的符號定義有個強符號定義和一個和多個弱符號定義, 使用強符號定義。

3.(定義多個弱符號)當引用符號時, 該符號的符號定義都是弱符號時, 選擇任意一個定義。

第二步 重定位 Relocation
 就是把不一樣可重定位對象文件拼成可執行對象文件,有三步,以下:

1.合併可重定位目標文件中相同的節。

2.重定位節和符號定義,修改符號表。爲節和符號定義分配虛擬地址。修改符號表中符號定義的值爲剛分配的虛擬地址。

3.重定位節中的符號引用,修改代碼段和數據段符號引用。使用重定位表.rel.text .rel.data, 修改text,data中符號引用的地址。

例以下圖,多個可重定位對象文件合併成可執行文件的過程所示:

簡述爲, 合併節, 重定位符號定義(修改符號表),重定位符號引用(修改數據段代碼段)。

 更多的詳細內容能夠參考該文章中的PPT:符號及符號解析

處理目標文件的一些工具,以下:

AR :建立靜態庫,插入、刪除、列出和提取成員。

NM :列出一個目標文件的符號表中定義的符號。

LDD :列出一個可執行程序文件在運行時所需的共享庫。

9. linux中gdb的使用

a. 斷點
 在代碼的指定位置中斷,使程序在此中斷。

break <function>    在進入指定函數時停住
break <linenum>    在指定行號停住。
break +/-offset    在當前行號的前面或後面的offset行停住。offiset爲天然數。
break filename:linenum    在源文件filename的linenum行處停住。
break ... if <condition>    ...能夠是上述的參數,condition表示條件,在條件成立時停住。好比在循環境體中,能夠設置break if i=100,表示當i爲100時停住程序。

b. 查看變量
 最經常使用的查看變量的方法是

(gdb) print {變量名}

若是打印數組,因爲默認的設置,可能打印的數組尾部部分沒有顯示,能夠經過以下的命令設置打印數組的最大長度

(gdb) set print elements 300

c. 調試中查看代碼

list function   如list main:顯示main函數附近的代碼
list file:function   如list main.c:main:顯示main.c中的main函數附近的代碼
list n1,n2   如list 10,20,顯示當前文件的10到20行

也能夠用以下命令:

gdb -tui 項目名 
或者在啓動gdb後, 輸入命令focus。

d. 恢復程序運行和單步調試
 在gdb中,和調試步進相關的命令主要有以下幾條:

continue    繼續運行程序直到下一個斷點(相似於VS裏的F5)
next        逐過程步進,不會進入子函數(相似VS裏的F10)
step        逐語句步進,會進入子函數(相似VS裏的F11)
until        運行至當前語句塊結束
finish    運行至函數結束並跳出,並打印函數的返回值(相似VS的Shift+F11)

e. GDB backtrace bt 查看程序crash堆棧信息
 當程序被停住了,須要作的第一件事就是查看程序是在哪裏停住的。當你程序調用了一個函數,函數的地址,函數參數,函數內的局部變量都會被壓入「棧」(Stack)中。能夠用bt命令來查看當前的棧中的信息。

10. 解壓和壓縮命令

a. tar
 tar 包文件的命令一般都是以 .tar 結尾的。生成 tar 包後,就能夠用其它的程序來進行壓縮了,例如:

tar -cf all.tar *.jpg  #將全部 .jpg 的文件打成一個名爲 all.tar 的包。-c 是表示產生新的包,-f 指定包的文件名。
tar -rf all.tar *.gif  #將全部 .gif 的文件增長到 all.tar 的包裏面去,-r 是表示增長文件的意思。

關於後綴的說明:

-c: 創建壓縮檔案   
-x:解壓   
-t:查看內容   
-r:向壓縮歸檔文件末尾追加文件   
-u:更新原壓縮包中的文件

-z:有gzip屬性的 
-j:有bz2屬性的 
-Z:有compress屬性的 
-v:顯示全部過程 
-O:將文件解開到標準輸出

(1). 調用gzip
gzip 是 GNU 組織開發的一個壓縮程序,.gz 結尾的文件就是 gzip 壓縮的結果。與 gzip 相對的解壓程序是 gunzip。tar 中使用 -z 這個參數來調用gzip。

tar -czf all.tar.gz *.jpg  #將全部 .jpg 的文件打成一個

(2). tar 調用 bzip2
.bz2 結尾的文件就是 bzip2 壓縮的結果。與 bzip2 相對的解壓程序是 bunzip2。tar 中使用 -j 這個參數來調用 gzip

tar -cjf all.tar.bz2 *.jpg  #將全部 .jpg 的文件打成一個 tar 包,而且將其用 bzip2 壓縮,生成一個 bzip2 壓縮過的包,包名爲 all.tar.bz2

相應的解壓命令以下:

tar -xjf all.tar.bz2

(3). 對於zip
zip 是壓縮程序,unzip 是解壓程序。

zip all.zip *.jpg
unzip all.zip

(4). 總結

一、*.tar 用 tar –xvf 解壓
二、*.gz 用 gzip -d或者gunzip 解壓
三、*.tar.gz和*.tgz 用 tar –xzf 解壓
四、*.bz2 用 bzip2 -d或者用bunzip2 解壓
五、*.tar.bz2用tar –xjf 解壓
六、*.Z 用 uncompress 解壓
七、*.tar.Z 用tar –xZf 解壓
八、*.rar 用 unrar e解壓
九、*.zip 用 unzip 解壓

11. Linux軟連接硬連接的區別

 ln功能是爲某一個文件在另一個位置創建一個同步的連接.當咱們須要在不一樣的目錄,用到相同的文件時,咱們不須要在每個須要的目錄下都放一個必須相同的文件,咱們只要在某個固定的目錄,放上該文件,而後在其它的目錄下用ln命令連接(link)它就能夠,沒必要重複的佔用磁盤空間。

必要參數:

-b 刪除,覆蓋之前創建的連接
-d 容許超級用戶製做目錄的硬連接
-f 強制執行
-i 交互模式,文件存在則提示用戶是否覆蓋
-n 把符號連接視爲通常目錄
-s 軟連接(符號連接)
-v 顯示詳細的處理過程

軟鏈接
命令:
 ln -s 原文件 目標文件
特徵:

1.至關於windows的快捷方式
2.只是一個符號鏈接,因此軟鏈接文件大小都很小
3.當運行軟鏈接的時候,會根據鏈接指向找到真正的文件,而後執行
4.全部軟鏈接文件的權限是777,而真正的權限是由指向的那個文件決定的
5.原文件丟失,軟鏈接沒法訪問,會報找不到的錯誤
6.ls -al之後,軟鏈接後面箭頭指向的是原文件

硬鏈接
命令:
ln 原文件 目標文件
特徵:

1.原文件和鏈接文件的屬性徹底同樣
2.鏈接文件和原文件的關係相似於:複製+同步更新
3.當原文件丟失,硬鏈接文件還能夠訪問
4.不能跨分區,不能針對目錄使用
5.原文件和硬連接文件的i節點號是相同的(ls -i),1個文件名對應一個i節點,1個i節點能夠經過多個文件名訪問,因此,他們的屬性徹底相同,而且修改了其中一個的內容另外一個也會跟着修改

補充:
Linux 目前使用的是 ext4 文件系統。若是用一張示意圖來描述 ext4 文件系統,則能夠以下圖。

ext4 文件系統

 ext4 文件系統會把分區主要分爲兩大部分(暫時不提超級塊):小部分用於保存文件的 inode (i 節點)信息;剩餘的大部分用於保存 block 信息。
 inode 的默認大小爲 128 Byte,用來記錄文件的權限(r、w、x)、文件的全部者和屬組、文件的大小、文件的狀態改變時間(ctime)、文件的最近一次讀取時間(atime)、文件的最近一次修改時間(mtime)、文件的數據真正保存的 block 編號。每一個文件須要佔用一個 inode。你們若是仔細查看,就會發現 inode 中是不記錄文件名的,那是由於文件名記錄在文件所在目錄的 block 中。
 block 的大小能夠是 1KB、2KB、4KB,默認爲 4KB。block 用於實際的數據存儲,若是一個 block 放不下數據,則能夠佔用多個 block。例如,有一個 10KB 的文件須要存儲,則會佔用 3 個 block,雖然最後一個 block 不能佔滿,但也不能再放入其餘文件的數據。這 3 個 block 有多是連續的,也有多是分散的。

12. 軟件安裝

a. 使用tar打包的應用軟件
b. 使用rpm打包的應用軟件
 安裝
 只需簡單的一句話語句去執行:

rpm –ivh rpm軟件包名

更高級的,請見下表:

rpm參數 參數說明
 -i     安裝軟件
 -t     測試安裝,不是真的安裝
 -p     顯示安裝進度
 -f     忽略任何錯誤
 -U     升級安裝
 -v     檢測套件是否正確安裝
 ...

 卸載:
 一樣只需執行:

rpm –e 軟件名

不過要注意的是,後面使用的是軟件名,而不是軟件包名。例如,要安裝software-1.2.3-1.i386.rpm這個包時,應執行:

rpm –ivh software-1.2.3-1.i386.rpm

而當卸載時,則應執行:

rpm –e software

*** c.使用deb打包的應用程序 ***
 安裝

dpkg –i deb軟件包名
如:dpkg –i software-1.2.3-1.deb

 卸載:

dpkg –e 軟件名
如:dpkg –e software

通常來講著名的linux系統基本上分兩大類:
RedHat系列:Redhat、Centos、Fedora等
Debian系列:Debian、Ubuntu等

Debian系列
常見的安裝包格式 deb包,安裝deb包的命令是「dpkg -參數」
包管理工具 apt-get

apt-get能夠用於運做deb包,例如在Ubuntu系統上對某個軟件的管理:
安裝:apt-get install
卸載:apt-get remove
更新:apt-get update

支持tar包

yum能夠用於運做rpm包

安裝:yum install
卸載:yum remove
更新:yum update

13. 環境變量的設置

Linux下環境變量設置的三種方法:

  1. 只對當前的shell 起做用的環境變量
    在shell的命令行下直接使用export 變量名=變量值定義變量,該變量只在當前的shell(BASH)或其子shell(BASH)下是有效的,shell關閉了,變量也就失效了,再打開新shell時就沒有這個變量,須要使用的話還須要從新定義。

  2. 對單一用戶生效(永久的)
    用VI在用戶目錄下的~/.bashrc文件中增長變量,改變量僅會對當前用戶有效,而且是「永久的」。修改文件後要想立刻生效還要運行source ~/.bashrc否則只能在下次重進此用戶時生效。
  3. 對全部用戶生效(永久的)
    用VI在文件/etc/profile文件中增長變量,該變量將會對Linux下全部用戶有效,而且是「永久的」。注:修改文件後要想立刻生效還要運行source /etc/profile 。否則只能在下次重進此用戶時生效。

14. Makefile.am相關

 Makefile.am是一種比Makefile更高層次的編譯規則,能夠和configure.in文件一塊兒經過調用automake命令,生成Makefile.in文件,再調用./configure的時候,就將Makefile.in文件自動生成Makefile文件了。因此Makefile.am文件是比Makefile文件更高的抽象。
用以下Makefile.am文件爲例做說明:

AUTOMAKE_OPTIONS=foreign subdir-objects
bin_PROGRAMS = client  
  
client_SOURCES = key.c connect.c client.c main.c session.c hash.c  
client_CPPFLAGS = -DCONFIG_DIR=\"$(sysconfdir)\" -DLIBRARY_DIR=\"$(pkglibdir)\"  
client_LDFLAGS = -export-dynamic -lmemcached  
noinst_HEADERS = client.h  
  
INCLUDES = -I/usr/local/libmemcached/include/  
  
client_LDADD = $(top_builddir)/sx/libsession.la \  
            $(top_builddir)/util/libutil.la

AUTOMAKE_OPTIONS:這個是用來設定automake的選項。automake主要是幫助開發GNU軟件的人員維護軟件套件,通常在執行automake時會檢查目錄下是否存在標準GNU套件中應具有的文件檔案,例如NEWS、AUTHOR、ChangeLog等,設成foreign時,automake會改用通常軟件套件標準來檢查,而gnu是缺省設置,該級別下將盡量地檢查包是否服從GNU標準,gnits是嚴格標準,不推薦。
bin_PROGRAMS:表示指定要生成的可執行應用程序文件,這表示可執行文件在安裝時須要被安裝到系統中,若是隻是想編譯。不想被安裝到系統中,能夠用noinst_PROGRAMS來代替。
bin_PROGRAMS=client這一行表示什麼意思?解釋以下:

PROGRAMS 知道這是一個可執行文件。  
client 表示編譯的目標文件。  
bin表示目錄文件被安裝到系統的目錄。

client_SOURCES:表示生成可執行應用程序所用的源文件,這裏注意,client_是由前面的bin_PROGRAMS指定的,若是前面是生成example,那麼這裏就是example_SOURCES,其它的相似標識也是同樣。
client_CPPFLAGS:這和Makefile文件中同樣,表示C語言預處理器參數,這裏指定了DCONFIG_DIR,之後在程序中,就能夠直接使用CONFIG_DIR,不要把這個和另外一個CFLAGS混淆,後者表示編譯器參數。
client_LDFLAGS:這個表示在鏈接時所須要的庫文件選項標識。這個也就是對應一些如-l,-shared等選項。
INCLUDES:鏈接時所須要的頭文件。
Makefile.am提供的一些全局變量

15. 網絡服務

a. 服務的管理

管理命令 命令 含義
service 服務名 start 啓動服務
service 服務名 stop 中止服務
service 服務名 restart 從新啓動服務

舉例說明

/etc/init.d/服務名  start  #啓動服務
/etc/init.d/服務名  stop   #中止服務
/etc/init.d/服務名  restart  #從新啓動服務
/etc/init.d/network restart  #重啓network服務,讀入配置文件

b. 用ifconfig查看設備信息

eth0      Link encap:Ethernet  HWaddr 00:0C:29:7A:E4:0E  
          inet addr:192.168.1.110  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe7a:e40e/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1709 errors:0 dropped:0 overruns:0 frame:0
          TX packets:783 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:175347 (171.2 KiB)  TX bytes:100454 (98.0 KiB)
          Interrupt:19 Base address:0x2000 
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          ...

eth0 表示第一塊網卡, 其中 HWaddr 表示網卡的物理地址,能夠看到目前這個網卡的物理地址(MAC地址)是 00:0C:29:7A:E4:0E

inet addr 用來表示網卡的IP地址,此網卡的 IP地址是 192.168.1.110,廣播地址Bcast:192.168.1.255 ,掩碼地址Mask:255.255.255.0 。

lo 是表示主機的回壞地址,這個通常是用來測試一個網絡程序,但又不想讓局域網或外網的用戶可以查看,只能在此臺主機上運行和查看所用的網絡接口。好比把 HTTPD服務器的指定到回壞地址,在瀏覽器輸入 127.0.0.1 就能看到你所架WEB網站了。但只是您能看獲得,局域網的其它主機或用戶無從知道。

第一行:鏈接類型:Ethernet(以太網)HWaddr(硬件mac地址)

第二行:網卡的IP地址、子網、掩碼

第三行:UP(表明網卡開啓狀態)RUNNING(表明網卡的網線被接上)MULTICAST(支持組播)MTU:1500(最大傳輸單元):1500字節 。

第4、五行:接收、發送數據包狀況統計

第七行:接收、發送數據字節數統計信息。

c. Linux網絡服務管理命令

查看指定的服務是否開啓

netstat | grep ssh | grep -v grep

telnet協議是TCP/IP協議簇中的一員,是Intenet遠程登陸服務的標準協議

#示例1:登陸遠程主機192.168.78.20
telnet 192.168.78.20
#示例2:以賬戶hadoop遠程登陸主機192.168.78.20
telnet -l hadoop 192.168.78.20
#示例3:登陸遠程主機bbs.uestc.edu.cn
telnet bbs.uestc.edu.cn

文件傳輸命令
FTP文件傳送協議是一個用於從一臺主機到另外一臺主機傳送協議。

#利用登陸帳戶登陸到FTP服務器
ftp 192.168.16.1
登陸成功後能夠進行一些操做
下載一個文件:get 文件名 指定目錄
刪除一個文件:delete 文件名
上傳一個文件:put 文件名

安全的主機間複製文件——scp

scp user1@ada.org:./test test 保存地址

16. 磁盤管理

a. Linux df命令用於顯示目前在Linux系統上的文件系統的磁盤使用狀況統計。

gqx@gqx-Lenovo-Product:~$ df -lh
# -h, --human-readable 使用人類可讀的格式(預設值是不加這個選項的...)  
# -l, --local 限制列出的文件結構  
文件系統        容量  已用  可用 已用% 掛載點
udev            7.8G     0  7.8G    0% /dev
tmpfs           1.6G   34M  1.6G    3% /run
/dev/sda3        74G   11G   60G   15% /
tmpfs           7.9G  2.7G  5.2G   35% /dev/shm
tmpfs           5.0M  4.0K  5.0M    1% /run/lock
tmpfs           7.9G     0  7.9G    0% /sys/fs/cgroup
/dev/sda8       360M  210M  128M   63% /boot
/dev/sda4       122G   40G   76G   35% /home
tmpfs           1.6G   96K  1.6G    1% /run/user/1000

從上信息能夠看出系統安裝在/dev/sda3上,掛載在/home目錄下的磁盤分區/dev/sda4大小是122G。

b. Linux du命令是顯示每一個文件和目錄的磁盤使用空間。可是與df命令不一樣的是Linux du命令是對文件和目錄磁盤使用的空間的查看。

-a或-all  顯示目錄中個別文件的大小。   
-s或--summarize  僅顯示總計,只列出最後加總的值。
-h或--human-readable  以K,M,G爲單位,提升信息的可讀性。

17. 後續補充

引用連接:

  1. 多用戶使用不一樣的gcc
  2. gcc安裝
  3. 靜態庫與動態庫的區別
  4. linux管道流命令
  5. Linux編程基礎——GDB(設置斷點)
  6. Linux tar.gz、tar、bz二、zip 等解壓縮、壓縮命令詳解
  7. Linux ln命令:在文件之間創建連接(硬連接和軟連接)詳解版
  8. 不周山之讀薄 CSAPP
  9. 符號及符號解析
  10. Makefile.am文件配置
  11. Linux文件目錄結構詳解
  12. linux系統網絡服務命令
相關文章
相關標籤/搜索