日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux开发

發布時間:2024/3/24 linux 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux开发 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

Linux開發工具

Linux編輯器-vim使用

1. vim的基本概念

2. vim的基本操作?

3. vim正常模式命令集

4. vim末行模式命令集?

Linux編譯器-gcc/g++使用

1. 背景知識

2. gcc如何完成

Linux調試器-gdb使用

1. 背景

2. 開始使用

3.獲取程序運行中的PID和PPID

?

Linux項目自動化構建工具-make/Makefifile

背景

理解

實例代碼

依賴關系

依賴方法

原理

項目清理

Linux第一個小程序-進度條

\r&&\n

行緩沖區概念

yum?

使用 git 命令行

安裝 git

下載項目到本地


Linux開發工具

  • IDE(集成)例子

Linux編輯器-vim使用

vi/vim的區別簡單點來說,它們都是多模式編輯器,不同的是vimvi的升級版本,它不僅兼容vi的所有指令,而且還有一些新的特性在里面。例如語法加亮,可視化操作不僅可以在終端運行,也可以運行于x window、 mac os、windows。

1. vim的基本概念

vim最基本的三種模式,分別是命令模式(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 modessix ADDITIONAL modes

?

2. vim的基本操作?

  • 進入vim,在系統提示符號輸入vim及文件名稱后,就進入vim全屏幕編輯畫面:
  • $ vim test.c
  • 不過有一點要特別注意,就是你進入vim之后,是處于[正常模式],你要切換到[插入模式]才能夠輸入文字。
  • [正常模式]切換至[插入模式]
  • 輸入a
  • 輸入i
  • 輸入o
  • [插入模式]切換至[正常模式]
  • 目前處于[插入模式],就只能一直輸入文字,如果發現輸錯了字,想用光標鍵往回移動,將該字刪除,可以先按一下「ESC」鍵轉到[正常模式]再刪除文字。當然,也可以直接刪除。
  • [正常模式]切換至[末行模式]
  • shift + ;, 其實就是輸入「:」
  • 退出vim及保存文件,[正常模式]下,按一下「:」冒號鍵進入「Last line mode,例如:
  • : w (保存當前文件)
  • : wq (輸入「wq,存盤并退出vim)
  • : q! (輸入q!,不存盤強制退出vim)

3. vim正常模式命令集

4. vim末行模式命令集?

?

Linux編譯器-gcc/g++使用

1. 背景知識

  • 預處理(進行宏替換)
  • 編譯(生成匯編)
  • 匯編(生成機器可識別代碼)
  • 連接(生成可執行文件或庫文件)
  • 2. gcc如何完成

    格式 gcc [選項] 要編譯的文件 [選項] [目標文件] 預處理(進行宏替換)
    • 預處理功能主要包括宏定義,文件包含,條件編譯,去注釋等。
    • 預處理指令是以#號開頭的代碼行。
    • 實例: gcc –E hello.c –o hello.i
    • 選項“-E”,該選項的作用是讓 gcc 在預處理結束后停止編譯過程。
    • 選項“-o”是指目標文件,“.i”文件為已經過預處理的C原始程序。
    • 預處理過后仍是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
    • 分為動態鏈接和靜態鏈接
    • 動態鏈接要動態庫
    • 動態鏈接:將庫中我要的方法的地址,填入我的可執行程序中,建立關聯!
    • 靜態鏈接要靜態庫
    • 靜態鏈接:將庫中方法的實現,真的拷貝到我們的可執行程序中

    ?在這里涉及到一個重要的概念:函數庫

    • 我們的C程序中,并沒有定義“printf”的函數實現,且在預編譯中包含的“stdio.h”中也只有該函數的聲明,而沒有定義函數的實現,那么,是在哪里實“printf”函數的呢?
    • 最后的答案是:系統把這些函數實現都被做到名為 libc.so.6 的庫文件中去了,在沒有特別指定時,gcc 會到系統默認的搜索路徑“/usr/lib”下進行查找,也就是鏈接到 libc.so.6 庫函數中去,這樣就能實現函“printf”,而這也就是鏈接的作用
    函數庫一般分為靜態庫和動態庫兩種。
    • 靜態庫是指編譯鏈接時,把庫文件的代碼全部加入到可執行文件中,因此生成的文件比較大,但在運行時也就不再需要庫文件了。其后綴名一般為“.a”
    • 動態庫與之相反,在編譯鏈接時并沒有把庫文件的代碼加入到可執行文件中,而是在程序執行時由運行時鏈接文件加載庫,這樣可以節省系統的開銷。動態庫一般后綴名為“.so”,如前面所述的 libc.so.6 就是動態庫。gcc 在編譯時默認使用動態庫。完成了鏈接之后,gcc 就可以生成可執行文件,如下所示。 gcchello.o –o hello
    • gcc默認生成的二進制程序,是動態鏈接的,這點可以通過 file 命令驗證。 ??
    gcc選項
    • -E 只激活預處理,這個不生成文件,你需要把它重定向到一個輸出文件里面
    • -S?編譯到匯編語言不進行匯編和鏈接
    • -c? 編譯到目標代碼
    • -o 文件輸出到 文件
    • -static 此選項對生成的文件采用靜態鏈接
    • -g?生成調試信息。GNU 調試器可利用該信息。
    • -shared?此選項將盡量使用動態庫,所以生成文件比較小,但是需要系統由動態庫.
    • -O0
    • -O1
    • -O2
    • -O3 編譯器的優化選項的4個級別,-O0表示沒有優化,-O1為缺省值,-O3優化級別最高
    • -w? 不生成任何警告信息。
    • -Wall 生成所有警告信息。
    gcc選項記憶 esc,iso例子

    Linux調試器-gdb使用

    1. 背景

    • 程序的發布方式有兩種,debug模式和release模式
    • Linux gcc/g++出來的二進制程序,默認是release模式
    • 要使用gdb調試,必須在源代碼生成二進制程序的時候, 加上 -g 選項
    • [hp@VM-4-9-centos lesson7]$ readelf -S mytest| grep -i debug[27] .debug_aranges PROGBITS 0000000000000000 00001061[28] .debug_info PROGBITS 0000000000000000 00001091[29] .debug_abbrev PROGBITS 0000000000000000 00001189[30] .debug_line PROGBITS 0000000000000000 00001214[31] .debug_str PROGBITS 0000000000000000 0000126a

      readelf 讀取其中文件

    2. 開始使用

    gdb binFile 退出: ctrl + d quit 調試命令:
    • listl 行號:顯示binFile源代碼,接著上次的位置往下列,每次列10行。
    • listl 函數名:列出某個函數的源代碼。
    • gdb會記錄最近一次指令,按回車可繼續執行上次指令
    • rrun:開始調試,如果沒有斷點則直接運行
    • n next:單條執行。
    • sstep:進入函數調用
    • break(b) +行號:在某一行設置斷點
    • break?函數名:在某個函數開頭設置斷點
    • info break :查看斷點信息。
    • fifinish:執行到當前函數返回,然后挺下來等待命令
    • print(p):打印表達式的值,通過表達式可以修改變量的值或者調用函數???????
    • 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):查看各級函數調用及參數
    • infoi)?locals:查看當前棧幀局部變量的值
    • quit:退出gdb

    3.獲取程序運行中的PID和PPID

    while :; do ps ajx | head -1 && ps axj | grep myproc | grep -v grep; sleep 1; echo "--------------------------------------------------"; done

    ?

    Linux項目自動化構建工具-make/Makefifile

    背景

    • 會不會寫makefifile,從一個側面說明了一個人是否具備完成大型工程的能力
    • 一個工程中的源文件不計數,其按類型、功能、模塊分別放在若干個目錄中,makefifile定義了一系列的規則來指定,哪些文件需要先編譯,哪些文件需要后編譯,哪些文件需要重新編譯,甚至于進行更復雜的功能操作
    • makefifile帶來的好處就是——“自動化編譯,一旦寫好,只需要一個make命令,整個工程完全自動編譯,極大的提高了軟件開發的效率。
    • make是一個命令工具,是一個解釋makefifile中指令的命令工具,一般來說,大多數的IDE都有這個命令,比如:DelphimakeVisual C++nmakeLinuxGNUmake。可見,makefifile都成為了一種在工程方面的編譯方法。
    • make是一條命令,makefifile是一個文件,兩個搭配使用,完成項目自動化構建。

    理解

    依賴例子

    實例代碼

    C代碼 1 #include <stdio.h> 2 int main() 3 { 4 printf("hello Makefile!\n"); 5 return 0; 6 7 } Makefifile文件 hello:hello.o gcc hello.o -o hello hello.o:hello.s gcc -c hello.s -o hello.o hello.s:hello.i gcc -S hello.i -o hello.s hello.i:hello.c gcc -E hello.c -o hello.i ???????? .PHONY:cleanclean:rm -f hello.i hello.s hello.o hello

    依賴關系

    • 上面的文件 hello ,它依賴 hell.o
    • hello.o , 它依賴 hello.s
    • hello.s , 它依賴 hello.i
    • hello.i , 它依賴 hello.c

    依賴方法

    • gcc hello.* -option hello.* ,就是與之對應的依賴關系

    原理

    • make是如何工作的,在默認的方式下,也就是我們只輸入make命令。那么,
  • make會在當前目錄下找名字叫“Makefifile”“makefifile”的文件。
  • 如果找到,它會找文件中的第一個目標文件(target),在上面的例子中,他會找到“hello”這個文件,并把這個文件作為最終的目標文件。
  • 如果hello文件不存在,或是hello所依賴的后面的hello.o文件的文件修改時間要比hello這個文件新(可以用 touch 測試),那么,他就會執行后面所定義的命令來生成hello這個文件。
  • 如果hello所依賴的hello.o文件不存在,那么make會在當前文件中找目標為hello.o文件的依賴性,如果找到則再根據那一個規則生成hello.o文件。(這有點像一個堆棧的過程)
  • 當然,你的C文件和H文件是存在的啦,于是make會生成 hello.o 文件,然后再用 hello.o 文件聲明make的終極任務,也就是執行文件hello了。
  • 這就是整個make的依賴性,make會一層又一層地去找文件的依賴關系,直到最終編譯出第一個目標文件。
  • 在找尋的過程中,如果出現錯誤,比如最后被依賴的文件找不到,那么make就會直接退出,并報錯,而對于所定義的命令的錯誤,或是編譯不成功,make根本不理。
  • make只管文件的依賴性,即,如果在我找了依賴關系之后,冒號后面的文件還是不在,那么對不起,我就不工作啦。
  • 項目清理

    ???????
    • 工程是需要被清理的
    • clean這種,沒有被第一個目標文件直接或間接關聯,那么它后面所定義的命令將不會被自動執行,不過,我們可以顯示要make執行。即命令——“make clean”,以此來清除所有的目標文件,以便重編譯。
    • 但是一般我們這種clean的目標文件,我們將它設置為偽目標,.PHONY 修飾,偽目標的特性是,總是被執行的。
    • 可以將我們的 hello 目標文件聲明成偽目標,測試一下

    ???????Linux第一個小程序-進度條

    \r&&\n

    回車概念: ????????當光標鎖定到任意位置時,采用回車光標將自動回到開頭處 換行概念:???????? 當光標鎖定某一位置,采取換行操作光標將平移到下面一行

    行緩沖區概念

    1 #include<stdio.h>2 #include<string.h>3 #include<unistd.h>4 5 #define NUM 1026 int main()7 {8 char bar[NUM];9 memset(bar,0,sizeof(bar));10 int cnt=0;11 while(cnt<=100)12 {13 printf("[%-100s][%d%%]\r",bar,cnt);14 bar[cnt++]='#';15 fflush(stdout);16 usleep(30000); 17 }18 printf("\n");19 return 0;20 }

    yum?

    使用 git 命令行

    安裝 git

    yum install git

    下載項目到本地

    創建好一個放置代碼的目錄. git clone [url] 這里的 url 就是剛剛建立好的 項目 的鏈接.

    ?三板斧第一招: git add

    將代碼放到剛才下載好的目錄中 git add [文件名] 將需要用 git 管理的文件告知 git 三板斧第二招: git commit 提交改動到本地 git commit . 最后的 "." 表示當前目錄 提交的時候應該注明提交日志, 描述改動的詳細內容. 三板斧第三招: git push 同步到遠端服務器上 git push 需要填入用戶名密碼. 同步成功后, 刷新 Github 頁面就能看到代碼改動了.

    其他情況:

  • 可能第一次使用需要你配置用戶名和郵箱?
  • 有時候無法提交,會出現提交沖突,無腦git pull
  • 。gitignore # 不想提交某些后綴的文件同步到遠端的git倉庫,就可以添加到gitignore
  • git rm 可以刪除
  • 配置免密碼提交 https://blog.csdn.net/camillezj/article/details/55103149

    總結

    以上是生活随笔為你收集整理的Linux开发的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。