溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Linux下服務(wù)器端開發(fā)流程是什么

發(fā)布時間:2021-11-24 16:35:07 來源:億速云 閱讀:147 作者:iii 欄目:服務(wù)器

這篇文章主要介紹“Linux下服務(wù)器端開發(fā)流程是什么”,在日常操作中,相信很多人在Linux下服務(wù)器端開發(fā)流程是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Linux下服務(wù)器端開發(fā)流程是什么”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

熟悉Linux操作

任務(wù)管理

有時候你在命令行里執(zhí)行拷貝大文件的命令,這個命令很耗時,會獨占終端,此時可以先使用 Ctrl+z  命令讓當(dāng)前任務(wù)(job)掛起,此時可以輸入命令了,然后使用 bg 命令讓當(dāng)前掛起的任務(wù)去后臺(background)運行。

利用 jobs 命令可以查看當(dāng)前在后臺運行的程序及job-id,然后想讓它到前臺來運行,可以執(zhí)行 fg [%job-id] 來讓它恢復(fù)到前臺執(zhí)行

如果想kill掉當(dāng)前在后臺運行的某個任務(wù)怎么辦?使用 kill %job-id

開發(fā)環(huán)境搭建

我們這邊操作系統(tǒng)都是Red Hat Enterprise Linux 5,機器都是X86架構(gòu),64位機器。這邊代碼文件默認(rèn)都用GBK的編碼

  1. 登錄機器的配置集團的跳板機,ssh的配置是會在一段時間不操作之后自動斷掉的,而且每次登錄上去都需要輸入密碼+token,利用ssh的ControlMaster,就可以解決,方法見我的ssh配置在linux下,有很多窗口管理器,可以在一個窗口里進行多個獨立的會話[不需要開多個終端],進行會話恢復(fù)[即使網(wǎng)絡(luò)連接中斷,用戶也不會失去對已經(jīng)打開的命令行會話的控制],推薦screen默認(rèn)的screen配置有些蹩腳,而且跟shell快捷鍵有些沖突。配置好了之后界面顯示就很強大了,可以參考我的screen配置對應(yīng)上述配置的screen快捷鍵:  Ctrl+j,c 創(chuàng)建新會話Ctrl+j,d detach

  2. GNU工具鏈在刻的操作系統(tǒng)里已經(jīng)有了,常用的是:* GNU make: 編譯(compile)和構(gòu)建(build)的自動化工具* GNU  編譯器集合:GCC* GNU 二進制工具:包含鏈接器(linker),匯編器(assembler)和其他工具

  3. 代碼編輯我一開始使用的vim,基本不安裝什么插件,后來投入了emacs的懷抱,主要是emacs,eshell和gdb搭配起來,不僅能夠滿足我的日常需求,而且讓我感覺效率大大提升,而且emacs環(huán)境安裝也比較簡單。但是在咋們公司的服務(wù)器上,vim是標(biāo)配,emacs需要自己裝。用習(xí)慣了emacs,再切回到vim時,好多快捷鍵都忘了,十分痛苦!Vim新手入門資料和一些Vim實用小技巧Linux環(huán)境下shell和vim中亂碼原因及消除辦法  新手經(jīng)常被亂碼問題困擾,這篇文章探究了一下shell和vim中亂碼原因及解決辦法emacs安裝及使用  ,現(xiàn)在這里挖個坑吧,后續(xù)有時間再寫如果在Windows下看代碼,推薦Source Insight,非常好用,誰用誰知道。

代碼版本管理

目前直通車這邊代碼版本管理使用svn常用命令:

  • 查看本地代碼做了哪些改動svn st -q

  • 提交代碼svn ci filepath/ -m "svn comments"

  • 查看兩個版本之間的改動有哪些svn diff -r r1:r2 svn diff -r r1:r1 --summarize  #此命令是摘要模式,只展示哪些文件改動,不展示具體的文件內(nèi)容diff

  • 創(chuàng)建分支svn cp http://destpath/trunk http://destpath/branches/my-branch/ -m  "create branche for xxx"

  • 合并分支代碼到主干svn merge -r 14829:HEAD my/branch  http://path/to/trunk上述命令表示把本地的my/branch所代表的svn路徑的14829到最新版本的代碼,merge到http://path/to/trunk路徑下。如果是正常拉出來的分支,也可以不加版本參數(shù),svn能自動計算出分支的起始版本號新人合并代碼的時候一定要注意一下,提交之前再確認(rèn)下合并的代碼是否OK,如果有不明白的地方,多請教師兄

  • 查看某段代碼最后是誰改的svn blame filename

  • 更新指定文件到某個指定的版本 svn up -r rev file

  • 撤銷某文件本地的改動svn revert file #這條命令要謹(jǐn)慎使用,使用之后自己的改動就找不回來了

  • 解決沖突的命令如果svn merger后提示:local add, incoming add upon merge用如下命令來采納本地的修改來解決:svn  resolve --accept working -R [--recursive]

在Mac下,推薦使用圖形界面的Meld來作為svn的merge工具,可以很方便的處理沖突,減少合錯代碼的可能性

開發(fā)[被測試戲謔為寫bug的階段]

開發(fā)之前,最好了解如下這些東東:

  • Makefile 用來完成自動化編譯的東東相關(guān)資料可以參考陳皓寫的跟我一起寫  Makefile系列,網(wǎng)上可以搜到熱心網(wǎng)友整理的pdf版本??赐昵懊?章就夠用了,后面的章節(jié)可以在遇到疑惑的時候再去查閱。可以通過以下幾個常見問題來檢驗自己有沒有理解整個工程的Makefile如何修改Makefile來編譯出帶/不帶gdb調(diào)試信息的版本如何去掉/加上編譯器優(yōu)化選項,如-O2參數(shù)新加入頭文件(一般都是.h結(jié)尾的),源文件(一般都是.cpp結(jié)尾)后,如何在Makefile中加入相應(yīng)的規(guī)則。新加入的這個文件可能最終是放到靜態(tài)庫.a里面,也可能是放到動態(tài)庫.so里面,也可能是直接生成可執(zhí)行程序的一般都不直接寫makefile,而是使用cmake(cross  platform make)來生成makefile,然后再按照make的方式構(gòu)建軟件。進階讀物:如何調(diào)試Makefile變量

  • 關(guān)于靜態(tài)庫和動態(tài)庫需要了解的東西有What: 什么是靜態(tài)庫,什么是動態(tài)庫How: 如何生成靜態(tài)庫,動態(tài)庫Why:  靜態(tài)庫和動態(tài)庫的差異,什么情況下使用靜態(tài)庫,什么情況下使用動態(tài)庫

以上問題都可以在LibraryArchives-StaticAndDynamic,shared libraries里得到解答

參考資料:

  1. 菜鳥在C語言編譯,鏈接時可能遇到的兩個問題

  2. 編程大牛云風(fēng)推薦的書 <<程序員的自我修養(yǎng)--鏈接、裝載與庫>>

  3. 編程大牛老趙推薦的書 <<深入理解計算機系統(tǒng)>>書很厚,可以挑著看自己關(guān)心的章節(jié)

  • GNU編譯工具GCC至少需要知道一些常用的選項參數(shù):定義輸出文件的名稱產(chǎn)生gdb調(diào)試的信息控制代碼優(yōu)化級別只進行預(yù)處理過程  可以幫助調(diào)試一些宏定義/頭文件包含產(chǎn)生的問題只進行編譯過程只進行鏈接過程可以通過man  gcc來獲得上述問題的答案,也可以自行g(shù)oogle,google被墻了可以用這個ask

  • GNU調(diào)試器gdb程序執(zhí)行結(jié)果錯誤怎么辦?單測過不了怎么辦?線上出Core了怎么辦?別著急,GDB來幫你忙。新手如何在gdb中存活  通過一個小例子來讓新手快速上手,搞會了里面的內(nèi)容,就基本夠用了GDB中應(yīng)該知道的幾個調(diào)試方法一些我搜刮到的gdb命令[會持續(xù)更新進來,歡迎大家回復(fù)]:查看指針數(shù)組中的內(nèi)容  p /x *address@len 以16進制方式顯示address開頭的len個元素通過gdb啟動程序后,如何調(diào)試fork出來的子進程:set  follow-fork-mode  child直通車這邊的服務(wù)基本都是多進程的模型,首先啟動一個daemon父進程,然后再fork出多個執(zhí)行業(yè)務(wù)邏輯的子進程。如果子進程掛掉,父進程會重啟一個子進程。

多線程支持

目前直通車這邊多線程機制使用的都是POSIX Theads

對于POSIX Theads,需要了解:

  1. What:什么是thread,pthread

  2. How:  如何使用pthread如何編譯多線程程序如何創(chuàng)建/結(jié)束線程如何等待子線程返回(join/detach)多線程之間如何使用互斥鎖(Mutex)來同步、加鎖、避免競爭條件的出現(xiàn)?

  3. Why: 為什么使用pthread,而不是其他

以上問題,都可以在這個美國勞倫斯利弗莫爾國家實驗室的pthead教程里面找到答案

查找/替換字符串/查找文件/文本處理

  • 想查找某個宏/函數(shù)的定義怎么辦?grep -r --include=*.{cpp,h} NGX_HTTP_VAR_INDEXED  src/本命令的意思是在src目錄下,以遞歸的方式在.cpp或者.h結(jié)尾的文件里查找NGX_HTTP_VAR_INDEXED這個字符串

  • 想找某個模糊記得名字的文件怎么辦?find ./ -iname  "*util.h"本命令意思是在當(dāng)前目錄下,基于忽略大小寫的文件名稱來查找文件,文件名稱是正則表達(dá)式  *util.h關(guān)于正則表達(dá)式,我只看deerchao的這個文章:正則表達(dá)式30分鐘入門教程另外有一個web應(yīng)用regexr特別好使,可以幫助我們調(diào)試正則表達(dá)式

  • 文本處理流式編輯器 sed例如替換某字符串: sed -i 's/oldvalue/newvalue/g'關(guān)于sed,可以看酷殼上的sed  簡明教程文本處理語言 awk關(guān)于sed,可以看酷殼上的AWK 簡明教程

進階讀物:

  1. 應(yīng)該知道的Linux技巧

  2. 28個Unix/Linux的命令行神器

關(guān)于單測(unit test)

單測十分重要,它能夠讓你對你的代碼更加有底氣和信心,而且能夠幫助你更早的發(fā)現(xiàn)問題,解決問題。在開發(fā)的各個階段,問題發(fā)現(xiàn)的越晚,解決問題的成本就越大。這邊C++的單測都用的Google的gtest框架,即使之前不了解gtest框架,看著別人的代碼照貓畫虎也可以寫出單測來,但是最好去看一下gtest官方文檔,去全面了解一下gtest,去拓展一下自己的思維。

寫著寫著代碼,就發(fā)現(xiàn)自己的代碼越來越復(fù)雜,不容易閱讀,設(shè)計混亂怎么辦?可以后臺私信【學(xué)習(xí)資料】 獲取資料

編譯(compile),構(gòu)建(build)

  1. 編譯之前的準(zhǔn)備工作需要把編譯依賴環(huán)境搞定,基本就是裝好編譯依賴的包就可以了??梢栽趓pm目錄下找到對應(yīng)的spec文件,然后使用 t-abs  命令[用于本地調(diào)試spec文件和自動部署編譯環(huán)境],來幫助我們裝好編譯依賴的包,即spec文件中的 BuildRequire  部分指定的包關(guān)于rpm和spec文件,可以通過閱讀這篇來了解:How to create an RPM package

  2. 編譯找到對應(yīng)工程的Makefile,然后執(zhí)行make命令,就可以編譯構(gòu)建工程了由于make本身的靈活性,而Makefile的可讀性又不強,是以文件為單元,抽象層次不夠,Google開發(fā)了分布式的構(gòu)建系統(tǒng)Bazel,能夠把程序員從make的語法和文件級別的構(gòu)建上解放出來。Bazel相關(guān)資料有:Google  Blaze原理及 Bazel的使用方法介紹

目前我們這邊目前還在用RPM來進行包的管理

平常需要用到的rpm命令有:rpm -qf file-name 來查看某個文件到底是哪個rpm包里面的rpm -qi package-name  來查看這個rpm包相關(guān)的信息,比如打包時間,svn地址等rpm -ql package-name 來查看這個rpm包中到底有哪些文件rpm -qV  package-name 來驗證這個rpm包安裝后的文件有沒有被修改過, 在懷疑rpm包的配置/腳本被人修改過的時候非常有用

代碼review

UI界面:reviewboard,提交的時候使用 rbt命令:rbt post r1 r2 來提交r1和r2這兩個版本之間的diff作為code  review提交之后可以得到一個reviewboard地址,然后需要在這個地址里填上codereview的人員和相關(guān)的描述等

持續(xù)集成CISE

CISE為用戶提供自動化的環(huán)境部署和測試服務(wù)這塊兒每個公司使用的都是不同各的

安裝包

對于構(gòu)建出來的rpm包,使用yum來安裝。

淘寶rpm包查詢UI 這里可以查看到淘寶yum源里面現(xiàn)存的各個包版本 可以從里面看到對應(yīng)包的abs地址

使用如下命令安裝:

__sudo yum install -b test t-imatch-kgb-updated __

-b 參數(shù)用來指定當(dāng)前安裝包t-imatch-kgb-updated在test分支還是current分支里面上線時候的包必須轉(zhuǎn)成current

到此,關(guān)于“Linux下服務(wù)器端開發(fā)流程是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI