摘要:是下非常常用的一種包管理器主要應(yīng)用在等發(fā)行版上一個服務(wù)器同一時刻只能讓一個進(jìn)行安裝,不能同時安裝多個軟件。例如,,表示移動光標(biāo)至文章的第行行首。
安裝軟件一般有三種方法:
1.源碼
2.rpm包。有點像windows下載的安裝包
3.yum命令行
在Linux下安裝軟件, 一個通常的辦法是下載到程序的源代碼, 并進(jìn)行編譯, 得到可執(zhí)行程序.但是這樣太麻煩了, 于是有些人把一些常用的軟件提前編譯好, 做成軟件包(可以理解成windows上的安裝程序)放在一個服務(wù)器上, 通過包管理器可以很方便的獲取到這個編譯好的軟件包, 直接進(jìn)行安裝.軟件包和軟件包管理器, 就好比 “App” 和 “應(yīng)用商店” 。yum(Yellow dog Updater, Modified)是Linux下非常常用的一種包管理器. 主要應(yīng)用在Fedora, RedHat, Centos等發(fā)行版上.
一個服務(wù)器同一時刻只能讓一個yum進(jìn)行安裝,不能同時安裝多個軟件。
yum是從服務(wù)器上下載rpm包,關(guān)于 yum 的所有操作必須保證主機(虛擬機)網(wǎng)絡(luò)暢通,可以通過 ping 指令驗證。例如:
[ymz@VM-16-9-centos ~]$ yum list
通過 yum list 命令可以羅列出當(dāng)前一共有哪些軟件包. 由于包的數(shù)目可能非常之多, 這里我們需要使用 grep 命令只篩選出我們關(guān)注的包. 例如:
[ymz@VM-16-9-centos ~]$ yum list | grep lrzsz
(lrzsz可以將Windows中的文件上傳到Linux中,也可以將Linux中的文件下載到Windows中,實現(xiàn)云服務(wù)器和本地機器之間信息互傳)
通過 yum, 我們可以通過很簡單的一條命令完成 gcc 的安裝.
[ymz@VM-16-9-centos ~]$ sudo yum install lrzsz
yum 會自動找到都有哪些軟件包需要下載, 這時候敲 “y” 確認(rèn)安裝.出現(xiàn) “complete” 字樣, 說明安裝完成.
[ymz@VM-16-9-centos ~]$ sudo yum remove lrzsz
vi/vim的區(qū)別簡單點來說,它們都是多模式編輯器,不同的是vim是vi的升級版本,它不僅兼容vi的所有指令,而且還有一些新的特性在里面。例如語法加亮,可視化操作不僅可以在終端運行,也可以運行于x window、 mac os、windows。
vim本質(zhì)上是一個多模式的文本編輯器,這里主要介紹三種模式:命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode)
1.正常/普通/命令模式(Normal mode)
控制屏幕光標(biāo)的移動,字符、字或行的刪除,移動復(fù)制某區(qū)段及進(jìn)入Insert mode下,或者到 last line mode。
2.插入模式(Insert mode)
只有在Insert mode下,才可以做文字輸入,按「ESC」鍵可回到命令行模式。該模式是我們后面用的最頻繁的編輯模式。
3.底行模式(Command mode)
文件保存或退出,也可以進(jìn)行文件替換,找字符串,列出行號等操作。 在命令模式下,shift+: 即可進(jìn)入該模式。要查看你的所有模式:打開vim,底行模式直接輸入:help vim-modes
進(jìn)入vim,在系統(tǒng)提示符號輸入vim及文件名稱后,就進(jìn)入vim全屏幕編輯畫面
[ymz@VM-16-9-centos ~]$ vim test.c
[正常模式]切換至[插入模式]
輸入a:在當(dāng)前光標(biāo)的后一位置進(jìn)入插入模式
輸入i:在當(dāng)前光標(biāo)處進(jìn)入插入模式
輸入o:在當(dāng)前光標(biāo)處新起一行進(jìn)入插入模式
[插入模式]/[底行模式]切換至[正常模式]
按[Esc]鍵即可
[正常模式]切換至[末行模式]
「shift + ;」, 其實就是輸入「:」
退出vim及保存文件,在[正常模式]下,按一下「:」冒號鍵進(jìn)入「底行模式」,例如:
:w 保存當(dāng)前文件
:wq 存盤并退出vim
:q! 輸入q!,不存盤強制退出vim
移動光標(biāo)
vim可以直接用鍵盤上的光標(biāo)來上下左右移動,但正規(guī)的vim是用小寫英文字母「h」、「j」、「k」、
「l」,分別控制光標(biāo)左、下、上、右移一格
按「G」:移動到文章的最后
按「 $ 」:移動到光標(biāo)所在行的“行尾”
按「^」:移動到光標(biāo)所在行的“行首”
按「w」:光標(biāo)跳到下個字的開頭
按「e」:光標(biāo)跳到下個字的字尾
按「b」:光標(biāo)回到上個字的開頭
按「nl」:光標(biāo)移到該行的第n個位置,如:5l,56l
按[gg]:進(jìn)入到文本開始
按[shift+g]:進(jìn)入文本末端
按「ctrl」+「b」:屏幕往“后”移動一頁
按「ctrl」+「f」:屏幕往“前”移動一頁
按「ctrl」+「u」:屏幕往“后”移動半頁
按「ctrl」+「d」:屏幕往“前”移動半頁
刪除文字
「x」 :每按一次,刪除光標(biāo)所在位置的一個字符
「nx」:例如,「6x」表示刪除光標(biāo)所在位置的“后面(包含自己在內(nèi))”6個字符
「X」:大寫的X,每按一次,刪除光標(biāo)所在位置的“前面”一個字符
「nX」:例如,「20X」表示刪除光標(biāo)所在位置的“前面”20個字符
「dd」:刪除光標(biāo)所在行
「ndd」:從光標(biāo)所在行開始刪除n行
復(fù)制
「yw」:將光標(biāo)所在之處到字尾的字符復(fù)制到緩沖區(qū)中。
「nyw」:復(fù)制n個字到緩沖區(qū)
「yy」:復(fù)制光標(biāo)所在行到緩沖區(qū)。
「nyy」:例如,「6yy」表示拷貝從光標(biāo)所在的該行“往下數(shù)”6行文字。
「p」:將緩沖區(qū)內(nèi)的字符貼到光標(biāo)所在位置。注意:所有與“y”有關(guān)的復(fù)制命令都必須與“p”配合才能完成復(fù)制與粘貼功能。
替換
「r」:替換光標(biāo)所在處的字符。
「R」:替換光標(biāo)所到之處的字符,直到按下「ESC」鍵為止。
撤銷上一次操作
「u」:如果您誤執(zhí)行一個命令,可以馬上按下「u」,回到上一個操作。按多次“u”可以執(zhí)行多次回復(fù)。
「ctrl + r」: 撤銷的恢復(fù)
更改
「cw」:更改光標(biāo)所在處的字到字尾處
「c#w」:例如,「c3w」表示更改3個字
跳至指定的行
「ctrl」+「g」列出光標(biāo)所在行的行號。
「#G」:例如,「15G」,表示移動光標(biāo)至文章的第15行行首。
在使用末行模式之前,請記住先按「ESC」鍵確定已經(jīng)處于正常模式,再按「:」冒號即可進(jìn)入末行模式。
配置文件的位置:
su
,進(jìn)入自己的主工作目錄,執(zhí)行cd ~
預(yù)處理(進(jìn)行宏替換)
gcc –E hello.c –o hello.i
編譯(生成匯編)
gcc –S hello.i –o hello.s
匯編(生成機器可識別代碼)
gcc -c hello.s -o hello.o
鏈接(生成可執(zhí)行文件或庫文件)
gcc hello.o –o hello
函數(shù)庫
我們的C程序中,并沒有定義“printf”的函數(shù)實現(xiàn),且在預(yù)編譯中包含的“stdio.h”中也只有該函數(shù)的聲明,而沒有定義函數(shù)的實現(xiàn),那么,是在哪里實現(xiàn)“printf”函數(shù)的呢?
最后的答案是:系統(tǒng)把這些函數(shù)實現(xiàn)都被做到名為 libc.so.6 的庫文件中去了,在沒有特別指定時,gcc 會到系統(tǒng)默認(rèn)的搜索路徑“/usr/lib”下進(jìn)行查找,也就是鏈接到 libc.so.6 庫函數(shù)中去,這樣就能實現(xiàn)函數(shù)“printf”了,而這也就是鏈接的作用。
函數(shù)庫一般分為靜態(tài)庫和動態(tài)庫兩種
1.靜態(tài)庫是指編譯鏈接時,把庫文件的代碼全部加入到可執(zhí)行文件中,因此生成的文件比較大,但在運行時也就不再需要庫文件了。其后綴名一般為“.a”
2.動態(tài)庫與之相反,在編譯鏈接時并沒有把庫文件的代碼加入到可執(zhí)行文件中,而是在程序執(zhí)行時由運行時鏈接文件加載庫,這樣可以節(jié)省系統(tǒng)的開銷。動態(tài)庫一般后綴名為“.so”,如前面所述的 libc.so.6 就是動態(tài)庫。gcc 在編譯時默認(rèn)使用動態(tài)庫。完成了鏈接之后,gcc 就可以生成可執(zhí)行文件,如下所示。 gcc hello.o –o hello
3.gcc默認(rèn)生成的二進(jìn)制程序,是動態(tài)鏈接的,這點可以通過 file 命令驗證。
gcc選項
_
程序的發(fā)布方式有兩種,debug模式和release模式。
Linux gcc/g++出來的二進(jìn)制程序,默認(rèn)是release模式。且是動態(tài)鏈接,使用動態(tài)庫。
要使用gdb調(diào)試,必須在源代碼生成二進(jìn)制程序的時候, 加上 -g 選項(發(fā)布以debug方式)。
可以看到debug版本文件大小比release大一些,因為debug版本多了一些調(diào)試信息(debuginfo):
用readelf可以查看到release版本沒有調(diào)試信息,而debug版本有
進(jìn)入調(diào)試:gdb binFile
退出:quit
或ctrl+d
調(diào)試命令:
一個工程中的源文件不計數(shù),其按類型、功能、模塊分別放在若干個目錄中,makefile定義了一系列的規(guī)則來指定,哪些文件需要先編譯,哪些文件需要后編譯,哪些文件需要重新編譯,甚至于進(jìn)行更復(fù)雜的功能操作。
makefile帶來的好處就是——“自動化編譯”,一旦寫好,只需要一個make命令,整個工程完全自動編譯,極大的提高了軟件開發(fā)的效率。
make是一個命令工具,是一個解釋makefile中指令的命令工具,一般來說,大多數(shù)的IDE都有這個命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可見,makefile都成為了一
種在工程方面的編譯方法。
make是一條命令,makefile是一個文件,兩個搭配使用,完成項目自動化構(gòu)建。
touch Makefile/makefile
在Makefile中,.PHONY后面的target表示的也是一個偽造的target, 而不是真實存在的文件target,注意Makefile的target默認(rèn)是文件。Makefile拒絕了執(zhí)行第二次執(zhí)行make(第一條), 因為文件mytest存在。而Makefile卻總是執(zhí)行clean后面的規(guī)則。由此可見,.PHONY:clean發(fā)揮了作用。
依賴關(guān)系
下面的文件mytest依賴mytest.o
而mytest.o依賴mytest.s
mytest.s依賴mytest.i
mytest.i依賴mytest.c
依賴方法
原理
make是如何工作的,在默認(rèn)的方式下,也就是我們只輸入make命令。那么:
項目清理
像clean這種沒有被第一個目標(biāo)文件直接或間接關(guān)聯(lián),那么它后面所定義的命令將不會被自動執(zhí)行,不過,我們可以顯示要make執(zhí)行。即命令——“make clean”,以此來清除所有的目標(biāo)文件,以便重編
譯。
但是一般我們這種clean的目標(biāo)文件,我們將它設(shè)置為偽目標(biāo),用 .PHONY 修飾,偽目標(biāo)的特性是,總是被執(zhí)行的。
/r&&/n
換行:在原來行的位置換到下一行
回車:不換到下一行,直接回到該行的起始位置
回車換行:換行并回車
/n就是回車換行
/r是只回車不換行
看以下代碼:
printf("hello");sleep(5);
執(zhí)行該代碼,hello在5s后才會顯示出來。
可以肯定的是,printf是先執(zhí)行的,但printf已經(jīng)執(zhí)行完了,不代表字符串就得顯示出來。在sleep期間,字符串在緩沖區(qū)。
緩沖區(qū)的本質(zhì)就是一段內(nèi)存空間,暫存臨時數(shù)據(jù),在合適的時候刷新出去。
刷新策略:1.直接刷新不緩存。2.緩沖區(qū)寫滿再刷新,全緩沖。3.碰到/n就刷新,行刷新(顯示器)。4.強制刷新。把數(shù)據(jù)真正寫入磁盤、文件、顯示器、網(wǎng)絡(luò)等設(shè)備或文件。
任何一個C程序,啟動的時候,會默認(rèn)打開三個輸入輸出流(文件)
stdin、stdout、stderr
倒計時代碼:
1 #include"mytest.h" 2 #include<unistd.h> 3 4 int main() 5 { 6 int count = 9; 7 while(count>=0){ 8 printf("%d/r",count); 9 fflush(stdout); 10 sleep(1); 11 count--; 12 } 13 14 return 0; 15 }
進(jìn)度條代碼:
1 #include<stdio.h> 2 #include<unistd.h> 3 #include<string.h> 4 5 #define NUM 100 6 7 int main() 8 { 9 char bar[NUM+2]; 10 memset(bar,0,sizeof(bar)); 11 12 const char* lable="|/-//"; 13 int i=0; 14 15 while(i<=NUM){ 16 bar[i]="="; 17 bar[i+1]=">"; 18 printf("[%-101s][%d%%][%c]/r",bar,i,lable[i%4]); 19 fflush(stdout); 20 usleep(100000); 21 i++; 22 } 23 printf("/n"); 24 25 return 0; 26 }}
查看是否安裝
在gitee創(chuàng)建好項目后,復(fù)制項目鏈接
下載項目到本地:
git clone [url]
可以看到項目已被下載到本地:
三板斧第一招: git add
將代碼放到剛才下載好的目錄中
git add [文件名]
將需要用 git 管理的文件告知 git
三板斧第二招: git commit
提交改動到本地
git commit .
最后的 “.” 表示當(dāng)前目錄
提交的時候應(yīng)該注明提交日志, 描述改動的詳細(xì)內(nèi)容.
三板斧第三招: git push
git push
需要填入用戶名密碼. 同步成功后, 刷新 Github 頁面就能看到代碼改動了.
查看提交記錄:git log
查看提交狀態(tài):git status
在windows中,也可以按Windows+x鍵,打開Windows PowerShell輸入命令
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/124035.html
摘要:是系統(tǒng)提供的容器化技術(shù),簡稱,它結(jié)合和技術(shù)為用戶提供了更易用的接口來實現(xiàn)容器化。公司結(jié)合和以下列出的技術(shù)實現(xiàn)了容器引擎,相比于,具備更加全面的資源控制能力,是一種應(yīng)用級別的容器引擎。 showImg(https://segmentfault.com/img/bVbtPbG?w=749&h=192); 題外話 最近對Docker和Kubernetes進(jìn)行了一番學(xué)習(xí),前兩天做了一次技術(shù)...
摘要:環(huán)境基礎(chǔ)開發(fā)工具使用軟件包管理器的三板斧查看軟件包安裝軟件卸載軟件和互傳文件的三種模式的轉(zhuǎn)換命令模式插入模式底行模式編譯器使用函數(shù)庫調(diào)試器使用項目自動化構(gòu)建工具軟件包管理器軟件包和軟件包管理器就好比手機上的和應(yīng)用 ...
摘要:函數(shù)名列出某個函數(shù)的源代碼,含函數(shù)名上下各五行類比調(diào)試或從開始連續(xù)而非單步執(zhí)行程序遇到斷點停下。相當(dāng)于中的或單條執(zhí)行。 目錄 一、調(diào)試器gdb 1、可以使用gdb的可執(zhí)行文件生成 2、使用命令 1、開始調(diào)試和退出調(diào)試 2、list 3、類比vs調(diào)試 4、代碼調(diào)試三劍客 5、變量 6、斷點 二...
閱讀 1297·2021-11-22 09:34
閱讀 2160·2021-10-08 10:18
閱讀 1724·2021-09-29 09:35
閱讀 2452·2019-08-29 17:20
閱讀 2136·2019-08-29 15:36
閱讀 3397·2019-08-29 13:52
閱讀 775·2019-08-29 12:29
閱讀 1182·2019-08-28 18:10