Linux基礎知識
- 1. Linux軟體包管理器yum
- 1.1什么是軟體包
- 1.2 如何安裝軟體
- 2. Linux編輯器-vim的使用
- 2.1 vim的基本概念
- 2.2 vim的基本操作
- 2.3 vim正常模式的命令集
- 2.4 vim末行模式命令集
- 3. Linux編譯器-gcc/g++使用
- 3.1 背景知識
- 3.2 gcc如何完成
- 3.3 函式庫
- 4. Linux除錯器-gdb使用
- 4.1背景
- 4.2 使用
1. Linux軟體包管理器yum
1.1什么是軟體包
- 在Linux下安裝軟體, 一個通常的辦法是下載到程式的源代碼, 并進行編譯, 得到可執行程式.
- 但是這樣太麻煩了,于是有些人把一些常用的軟體提前編譯好, 做成軟體包(可以理解成windows上的安裝程式)放在一個服務器上,通過包管理器可以很方便的獲取到這個編譯好的軟體包, 直接進行安裝.
- 軟體包和軟體包管理器, 就好比 “App” 和 "應用商店"這樣的關
- yum(Yellow dog Updater, Modi?ed)是Linux下非常常用的一種包管理器,主要應用在Fedora, RedHat, Centos等發行版上.
注意事項:
關于 yum 的所有操作必須保證主機(虛擬機)網路暢通!!!
可以通過 ping 指令驗證 ping www.baidu.com
查看軟體包:
通過 yum list 命令可以羅列出當前一共有哪些軟體包. 由于包的數目可能非常之多, 這里我們需要使用 grep 命令只 篩選出我們關注的包. 例如:yum list | grep lrzsz
結果如下:

注意事項:
- 軟體包名稱: 主版本號.次版本號.源程式發行號-軟體包的發行號.主機平臺.cpu架構.
- “x86_64” 后綴表示64位系統的安裝包, “i686” 后綴表示32位系統安裝包. 選擇包時要和系統匹配. “el7” 表示作業系統發行版的版本.
- “el7” 表示的是 centos7/redhat7. “el6” 表示 centos6/redhat6. 后一列,
- .最后一列, base 表示的是 “軟體源” 的名稱,類似于 “小米應用商店”, “華為應用商店” 這樣的概念.
1.2 如何安裝軟體
通過 yum, 我們可以通過很簡單的一條命令完成 gcc 的安裝.
sudo yum install lrzsz
這里可以安裝許多有趣且好玩的命令,鏈接: link.
2. Linux編輯器-vim的使用
2.1 vim的基本概念
講解vim的三種模式(其實有好多模式,目前掌握這3種即可),分別是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能區分如下:
①正常/普通/命令模式(Normal mode)
控制螢屏游標的移動,字符、字或行的洗掉,移動復制某區段及進入Insert mode下,或者到 last line mode
②插入模式(Insert mode)
只有在Insert mode下,才可以做文字輸入,按「ESC」鍵可回到命令列模式,該模式是我們后面用的頻繁的編輯模式,
③末行模式(last line mode)
檔案保存或退出,也可以進行檔案替換,找字串,列出行號等操作, 在命令模式下,shift+: 即可進入該模式,要查看你的所有模式:打開vim,底行模式直接輸入
④:help vim-modes (幫助查看都有哪些模式的指令)
我這里一共有12種模式:six BASIC modes和six ADDITIONAL modes.
2.2 vim的基本操作
1.進入vim,在系統提示符號輸入vim及檔案名稱后,就進入vim全螢屏編輯畫面:
$ vim test.c- 不過有一點要特別注意,就是你進入vim之后,是處于[正常模式],你要切換到[插入模式]才能夠輸入文字,
2.[正常模式]切換至[插入模式]
- 輸入a (跳到游標所顯示的下一個位置)
- 輸入i(游標在當前所顯示的位置)
- 輸入o(跳到游標所顯示的下一行)
3.[插入模式]切換至[正常模式]
目前處于[插入模式],就只能一直輸入文字,如果發現輸錯了字,想用游標鍵往回移動,將該字洗掉,可以先按一下「ESC」鍵轉到[正常模式]再洗掉文字,當然,也可以直接洗掉,
4.[正常模式]切換至[末行模式]
「shift + ;」, 其實就是輸入「:」
5.退出vim及保存檔案,在[正常模式]下,按一下「:」冒號鍵進入「Last line mode」,例如:
- w (保存當前檔案)
- wq (輸入「wq」,存盤并退出vim)
- q! (輸入q!,不存盤強制退出vim)
2.3 vim正常模式的命令集
1.插入模式
- 按「i」切換進入插入模式「insert mode」,按“i”進入插入模式后是從游標當前位置開始輸入檔案;
- 按「a」進入插入模式后,是從目前游標所在位置的下一個位置開始輸入文字;
- 按「o」進入插入模式后,是插入新的一行,從行首開始輸入文字
2.從插入模式切換為命令模式
按「ESC」鍵
3.移動游標
- vim可以直接用鍵盤上的游標來上下左右移動,但正規的vim是用小寫英文字母「h」、「j」、「k」、「l」,分別控制游標左、下、上、右移一格
- 按「G」:移動到文章的最后
- 按「 $ 」:移動到游標所在行的“行尾”
- 按「^」:移動到游標所在行的“行首”
- 按「w」:游標跳到下個字的開頭
- 按「e」:游標跳到下個字的字尾
- 按「b」:游標回到上個字的開頭
- 按「#l」:游標移到該行的第#個位置,如:5l,56l
- 按[gg]:進入到文本開始
- 按[shift+g]:進入文本末端
- 按「ctrl」+「b」:螢屏往“后”移動一頁
- 按「ctrl」+「f」:螢屏往“前”移動一頁
- 按「ctrl」+「u」:螢屏往“后”移動半頁
- 按「ctrl」+「d」:螢屏往“前”移動半頁
4.洗掉文字
- 「x」:每按一次,洗掉游標所在位置的一個字符
- 「#x」:例如,「6x」表示洗掉游標所在位置的“后面(包含自己在內)”6個字符
- 「X」:大寫的X,每按一次,洗掉游標所在位置的“前面”一個字
- 「#X」:例如,「20X」表示洗掉游標所在位置的“前面”20個字
- 「dd」:洗掉游標所在行
- 「#dd」:從游標所在行開始洗掉#行
5.復制
- 「yw」:將游標所在之處到字尾的字符復制到緩沖區中,
- 「#yw」:復制#個字到緩沖區
- 「yy」:復制游標所在行到緩沖區,
- 「#yy」:例如,「6yy」表示拷貝從游標所在的該行“往下數”6行文字,
- 「p」:將緩沖區內的字符貼到游標所在位置,注意:所有與“y”有關的復制命令都必須與“p”配合才能完 成復制與粘貼功能,
6.替換
- 「r」:替換游標所在處的字符,
- 「R」:替換游標所到之處的字符,直到按下「ESC」鍵為止
7.撤銷上一次操作
- 「u」:如果您誤執行一個命令,可以馬上按下「u」,回到上一個操作,按多次“u”可以執行多次恢復,
- 「ctrl + r」: 撤銷的恢復
8.更改
- 「cw」:更改游標所在處的字到字尾處
- 「c#w」:例如,「c3w」表示更改3個字
9.跳至指定的行
- 「ctrl」+「g」列出游標所在行的行號,
- 「#G」:例如,「15G」,表示移動游標至文章的第15行行首,
2.4 vim末行模式命令集
在使用末行模式之前,請記住先按「ESC」鍵確定您已經處于正常模式,再按「:」冒號即可進入末行模式,
1.列出行號
「set nu」: 輸入「set nu」后,會在檔案中的每一行前面列出行
2.跳到檔案中的某一行
「#」:「#」號表示一個數字,在冒號后輸入一個數字,再按回車鍵就會跳到該行了,如輸入數字15, 再回車,就會跳到文章的第15行,
3.查找字符
- 「/關鍵字」: 先按「/」鍵,再輸入您想尋找的字符,如果第一次找的關鍵字不是您想要的,可以一直按 「n」會往后尋找到您要的關鍵字為止,
- 「?關鍵字」:先按「?」鍵,再輸入您想尋找的字符,如果第一次找的關鍵字不是您想要的,可以一直 按「n」會往前尋找到您要的關鍵字為止,
4.保存檔案
「w」: 在冒號輸入字母「w」就可以將檔案保存起來 離開vim
5.離開vim
- 「q」:按「q」就是退出,如果無法離開vim,可以在「q」后跟一個「!」強制離開vim,
- 「wq」:一般建議離開時,搭配「w」一起使用,這樣在退出的時候還可以保存檔案
3. Linux編譯器-gcc/g++使用
3.1 背景知識
- 預處理(進行宏替換)
- 編譯(生成匯編)
- 匯編(生成機器可識別代碼)
- 連接(生成可執行檔案或庫檔案)
3.2 gcc如何完成
格式 gcc [選項] 要編譯的檔案 [選項] [目標檔案]
①預處理(進行宏替換)
- 預處理功能主要包括宏定義,檔案包含,條件編譯,去注釋等,
- 預處理指令是以#號開頭的代碼行, 實體:
gcc –E hello.c –o hello.i- 選項“-E”,該選項的作用是讓 gcc 在預處理結束后停止編譯程序,
- 選項“-o”是指目標檔案,“.i”檔案為已經過預處理的C原始程式
②編譯(生成匯編)
- 在這個階段中,gcc 首先要檢查代碼的規范性、是否有語法錯誤等,以確定代碼的實際要做的作業,在檢查 無誤后,gcc把代碼翻譯成匯編語言,
- 用戶可以使用“-S”選項來進行查看,該選項只進行編譯而不進行匯編,生成匯編代碼,
- 實體:
gcc –S hello.i –o hello.s
③匯編(生成機器可識別代碼)
- 匯編階段是把編譯階段生成的“.s”檔案轉成目標檔案
- 讀者在此可使用選項“-c”就可看到匯編代碼已轉化為“.o”的二進制目標代碼了
- 實體:
gcc –c hello.s –o hello.o
④連接(生成可執行檔案或庫檔案)
- 在成功編譯之后,就進入了鏈接階段,
- 實體: gcc hello.o –o hello
3.3 函式庫
- 我們的C程式中,并沒有定義“printf”的函式實作,且在預編譯中包含的“stdio.h”中也只有該函式的宣告,而沒有定義函式的實作,那么,是在哪里實“printf”函式的呢?
- 最后的答案是:系統把這些函式實作都被做到名為 libc.so.6的庫檔案中去了,在沒有特別指定時,gcc會到系統默認的搜索路徑“/usr/lib”下進行查找,也就是鏈接到 libc.so.6庫函式中去,這樣就能實作函 數“printf”了,而這也就是鏈接的作用
函式庫一般分為靜態庫和動態庫兩種,
- 靜態庫是指編譯鏈接時,把庫檔案的代碼全部加入到可執行檔案中,因此生成的檔案比較大,但在運行時也就不再需要庫檔案了,其后綴名一般為“.a”
- 動態庫與之相反,在編譯鏈接時并沒有把庫檔案的代碼加入到可執行檔案中,而是在程式執行時由運行時 鏈接檔案加載庫,這樣可以節省系統的開銷,動態庫一般后綴名為“.so”,如前面所述的 libc.so.6 就是動態庫,gcc在編譯時默認使用動態庫,完成了鏈接之后,gcc 就可以生成可執行檔案,如下所示,
gcc hello.o –o hello- gcc默認生成的二進制程式,是動態鏈接的,這點可以通過 file 命令驗證
gcc選項
- -E 只激活預處理,這個不生成檔案,你需要把它重定向到一個輸出檔案里面
- -S 編譯到匯編語言不進行匯編和鏈接
- -c 編譯到目標代碼
- -o 檔案輸出到 檔案
- -static 此選項對生成的檔案采用靜態鏈接
- -g 生成除錯資訊,GNU 除錯器可利用該資訊,
- -shared 此選項將盡量使用動態庫,所以生成檔案比較小,但是需要系統由動態庫.
- -O0
- -O1
- -O2
- -O3 編譯器的優化選項的4個級別,-O0表示沒有優化,-O1為預設值,-O3優化級別高
- -w 不生成任何警告資訊,
- -Wall 生成所有警告資訊
4. Linux除錯器-gdb使用
4.1背景
- 程式的發布方式有兩種,debug模式和release模式
- Linux gcc/g++出來的二進制程式,默認是release模式
- 要使用gdb除錯,必須在源代碼生成二進制程式的時候, 加上 -g 選項
4.2 使用
gdb binFile 退出: ctrl + d 或 quit 除錯命令
- list/l 行號:顯示binFile源代碼,接著上次的位置往下列,每次列10行
- list/l 函式名:列出某個函式的源代碼,
- r或run:運行程式,
- n 或 next:單條執行,
- s或step:進入函式呼叫
- break(b) 行號:在某一行設定斷點
- break 函式名:在某個函式開頭設定斷點 info break :查看斷點資訊,
- ?nish:執行到當前函式回傳,然后挺下來等待命令
- print§:列印運算式的值,通過運算式可以修改變數的值或者呼叫函式
- p 變數:列印變數值,
- set var:修改變數的值
- continue(或c):從當前位置開始連續而非單步執行程式
- run(或r):從開始連續而非單步執行程式
- delete breakpoints:洗掉所有斷點
- delete breakpoints n:洗掉序號為n的斷點
- disable breakpoints:禁用斷點
- enable breakpoints:啟用斷點
- info(或i) breakpoints:參看當前設定了哪些斷點
- display 變數名:跟蹤查看一個變數,每次停下來都顯示它的值
- undisplay:取消對先前設定的那些變數的跟蹤
- until X行號:跳至X行
- breaktrace(或bt):查看各級函式呼叫及引數
- info(i) locals:查看當前堆疊幀區域變數的值
- quit:退出gdb
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/257204.html
標籤:其他
