Linux開發工具相關問題
在Linux的系統設定問題上,學會使用文字編輯器來編輯Linux引數配置檔案是一項很重要的能力。Linux環境下的文字編輯器有很多,重點掌握VIM卻是很有必要的。VIM是VI的升級版,很多軟體的編輯介面會主動呼叫VI,而VIM已經不僅僅可以作為一個文字編輯器,也可以作為程式開發工具,供程式開發者使用。
一、 vim的配置
一些簡單配置Linux的命令有:
set nu // 在左側行號 set tabstop=4 //tab 長度設定為 4 set nobackup //覆蓋檔案時不備份 set cursorline //突出顯示當前行 set ruler //在右下角顯示游標位置的狀態行 set autoindent //自動縮排 set mouse=a //允許使用滑鼠移動游標 set showmode //顯示左下角狀態行 set hlsearch //搜尋時關鍵字高亮反白 set showcmd
配置vim的檔案在目錄/etc下面,有個名為vimrc的檔案,這就是系統中公共的vim配置檔案,對所有使用者都開放。而在每個使用者的主目錄下,都可以自己建立私有的配置檔案,命名為:”.vimrc”。用vim開啟.vimrc鍵入上述命令儲存即可。
二、常用的編輯器, 以及這些編輯器之間的區別和優缺點.
Linux中強大的編輯器列表
-
VI 編輯器是一個基於命令列的、功能強大的文字編輯器,最早為 Unix 系統開發,後來也被移植到許多的 Unix 和 Linux 發行版上。 VIM(也被稱作 VI IMproved)——VI 編輯器的高階版本,在 VI 已經很強的功能上添加了更多的功能,這些功能有:
- 支援更多 Linux 發行版,
- 支援多種程式語言,包括 python、c++、perl 等語言的程式碼塊摺疊,語法高亮,
- 支援通過多種網路協議,包括 http、ssh 等編輯檔案,
- 支援編輯壓縮歸檔中的檔案,
-
Emacs:著名的整合開發環境和文字編輯器。Emacs和Vim對於 Linux 桌面上進行文字編輯是重量級的,Emacs演化出了眾多分支,其中使用最廣泛的兩種是:1984年由Richard Stallman發起的GNU Emacs,以及1991年發起的XEmacs。XEmacs是GNU Emacs的分支,至今仍保持著相當的相容性。最新的的GNU EMACS的功能包括:
- 內容感知編輯模式,包括許多檔案型別的語法著色。
- 完整的內建文件,包括新使用者教程。
- 幾乎所有人類指令碼都支援 完全Unicode。
- 高度可定製,使用Emacs Lisp程式碼或圖形介面。
- 超越文字編輯,包括功能的整個生態系統的專案策劃人,郵件和新聞閱讀器,偵錯程式介面, 日曆,和更多。
- 用於下載和安裝擴充套件的包裝系統等等
- 內容感知編輯模式,包括許多檔案型別的語法著色。
詳情點選:GNU
-
Eclipse:Eclipse 是一個開放原始碼的、基於Java的可擴充套件開發平臺。就其本身而言,它只是一個框架和一組服務,用於通過外掛元件構建開發環境。幸運的是,Eclipse 附帶了一個標準的外掛集,包括Java開發工具(Java Development Kit,JDK)。最初主要用來Java語言開發,但是目前亦有人通過外掛使其作為其他計算機語言比如C++和Python的開發工具。
- 在Eclipse中,完全勝任以下程式語言的工作——Python, R, Ruby, JavaScript, Natural, Lasso, C, C++, COBOL, Scheme, Clojure, Groovy等等
-
Brackets:Adobe公司釋出了Brackets 1.0,一款針對Web設計人員的免費開源文字編輯器,內建HTML,CSS和JavaScript,方便開發者進行HTML,CSS和JavaScript程式設計。Brackets 1.0適用於Windows,Mac和Linux作業系統,為Web設計人員和開發人員提供針對性的功能,如:
- 實時預覽,在瀏覽器檢視和原始碼之間輕鬆切換,
- 在特定的程式碼位進行內聯編輯工作,而無需彈出式視窗或其他選項卡。
- 下載和使用擴充套件,新增功能以幫助他們的工作流程,如Git整合和JSHint支援
- 摘要預覽,自動從PSD獲取設計資訊,
- Brackets作為一個開源專案,對於想要自定義文字編輯器的使用者,可以從Github上Brackets專案頁面下載原始碼並修改程式碼進行編譯,來適合自己的需求。
-
LightTable是一個免費開放原始碼的編輯器,該編輯器有一個非常乾淨的介面,並有大量擴充套件。它與Windows、Mac和Linux都相容,是高度可定製的。使用Light Table,開發者只需開啟一個瀏覽器視窗即可實時檢視更改,並且支援不同的嵌入。
- 更改: 我們從 NW.js 切換到了 Electron
- 更改: Light Table 的發行與自更新程序完全地公開在github上
- 增加: Light Table 可以用提供的指令碼在各個支援的平臺上從原始碼構建
- 增加: Light Table 大部分的 node 程式碼庫將通過 npm 依賴來安裝,以取代以前採用分叉庫的方式
- 增加: 有效文件。更多詳情內容見下面
- 修復: 版本號 >= OSX 10.10的系統下的主要的可用性問題
- 更改: 官方不再提供 32位 Linux 軟體包下載,不過仍然支援從原始碼構建
- 修復: ClojureScript eval 支援 ClojureScript 的現代版本
-
Chocolat:Chocolat本身是Mac OS 的最佳程式碼編輯器。該編輯器旨在與OS無縫整合,Chocolat為JS、Python和HTML提供拖放功能、拆分編輯、程式碼摺疊和程式碼完成,兼具原生的Cocoa及強大的文字編輯功能。Chocolat支援很多種程式語言的關鍵字高亮顯示、視窗分割、標籤頁、色彩主題等功能。介面和MacVim非常相似。
-
Sublime Text:Sublime Text 是一個輕量、簡潔、高效、跨平臺的編輯器。
- 支援多游標操作:它能讓你對文字中的多個地方同時做修改,你可以看到多個地方在你輸入的時候同時發生變化,
- command palette能夠讓你輕鬆的做任何操作,勉去了記憶眾多快捷鍵的痛苦。你只需要開啟command palette ,輸入幾個字母,Sublime Text會用模糊查詢給你提供建議和選項。跟直接使用快捷鍵幾乎沒區別
- 編輯檔案的同時你可以啟動編譯,看到輸出結果,這種互動能讓你快速發現編譯錯誤
- 擴充套件性很好,它使用了Python式的外掛系統。
三、 常用的編譯器(不限制程式語言, 不限制平臺)
這些編譯器有:
- MSVC:是指微軟的VC編譯器,隨著微軟釋出基於Clang / C2,MSVC與Clang / C2並行,繼 Google Chrome 宣佈棄用微軟 C++ 編譯器(MSVC)Windows 版 Chrome 改用 Clang 之後,Mozilla 的 Firefox 瀏覽器也宣佈開始使用 Clang 編譯器編譯其 Windows 版本。
- Clang:Clang 是一個 C++ 編寫、基於 LLVM、釋出於 LLVM BSD 許可證下的 C/C++/Objective C/Objective C++ 編譯器,其目標(之一)就是超越 GCC。Clang 的特性有:
- 快:通過編譯 OS X 上幾乎包含了所有 C 標頭檔案的 carbon.h 的測試,包括預處理 (Preprocess),語法 (lex),解析 (parse),語義分析 (Semantic Analysis),抽象語法樹生成 (Abstract Syntax Tree) 的時間,Clang 是 Apple GCC 4.0 的 2.5x 快。
- 記憶體佔用小:Clang 記憶體佔用是原始碼的 130%,Apple GCC 則超過 10x。
- 診斷資訊可讀性強:我不會排版。其中錯誤的語法不但有原始碼提示,還會在錯誤的呼叫和相關上下文的下方有~~~~~和^的提示。
- GCC 相容性。
- 設計清晰簡單,容易理解,易於擴充套件增強。與程式碼基礎古老的 GCC 相比,學習曲線平緩。
- 基於庫的模組化設計,易於 IDE 整合及其他用途的重用。由於歷史原因,GCC 是一個單一的可執行程式編譯器,其內部完成了從預處理到最後程式碼生成的全部過程,中間諸多資訊都無法被其他程式重用。Clang 將編譯過程分成彼此分離的幾個階段,AST 資訊可序列化。通過庫的支援,程式能夠獲取到 AST 級別的資訊,將大大增強對於程式碼的操控能力。對於 IDE 而言,程式碼補全、重構是重要的功能,然而如果沒有底層的支援,只使用 tags 分析或是正則表示式匹配是很難達成的。
- GCC/G++:gcc和g++都是GNU(組織)的一個編譯器。gcc 是c的編譯器,g++是c++的編譯器。
- ICC:全稱Intel C++ Compiler,是Intel開發的C/C++/Fortran編譯器套裝,適用於Linux、Microsoft和Mac OS X作業系統,沒有非IA指令集版本(就是說僅供x86架構CPU使用)。ICC廣泛應用於高效能運算、分散式計算等商業計算領域,其向量化和並行化效能是業界的標杆,能夠充分發揮現代處理器的特性。
ICC官方網站:ICC
- IBM XL C++:IBM® XL C/C++ 是一種編譯器,有助於為 IBM Power Systems™ 建立和維護使用 C/C++ 編寫的應用,能最大限度地提高硬體利用率。缺點則是在編譯時間上往往過長。對C++標準的支援、開源軟體的支援、錯誤資訊的提示上都不夠友好,但隨著13.2開始結合Clang正在進行優化。
四、為什麼除錯的時候需要編譯選項中新增 -g. 介紹readelf命令.
1 .除錯的時候加上 -g 是為了生成除錯資訊,以便於GNU偵錯程式利用該資訊,
2.readelf命令用來顯示一個或者多個elf格式的目標檔案的資訊,可以通過它的選項來控制顯示哪些資訊。這裡的elf-file(s)就表示那些被檢查的檔案。可以支援32位,64位的elf格式檔案,也支援包含elf檔案的文件(這裡一般指的是使用ar命令將一些elf檔案打包之後生成的例如lib*.a之類的“靜態庫”檔案)。(ELF檔案, 其實就是Executable & Linkable Format, 是一種檔案格式, 我們常見的目標檔案、動態庫和可執行檔案, 都屬於這個型別。)
五、 在Linux下實現進度條程式. 通過makefile進行編譯. 以及實現全綵色的進度條.
1.緩衝區概念 緩衝區(buffer)這個中文譯意源自當計算機的高速部件與低速部件通訊時,必須將高速部件的輸出暫存到某處,以保證高速部件與低速部件相吻合. 後來這個意思被擴充套件了,成為”臨時存貯區”的意思。 緩衝區分為:無緩衝、行緩衝、全緩衝。 無緩衝:表示的是沒有緩衝,可以將資訊立馬顯現出來,典型代表是標準錯誤流stderr。 行緩衝:表示的是輸入輸出遇到換行才執行真正的I/O操作。典型的代表是鍵盤的操作。 全緩衝:表示的是輸入輸出寫滿緩衝區才執行I/O操作。典型的代表是磁碟的讀寫。 fflush: fflush,函式名, 清除讀寫緩衝區,需要立即把輸出緩衝區的資料進行物理寫入時。 fflush(stdin)重新整理標準輸入緩衝區,把輸入緩衝區裡的東西丟棄[非標準] fflush(stdout)重新整理標準輸出緩衝區,把輸出緩衝區裡的東西列印到標準輸出裝置上
本文來自 Important_ 的CSDN 部落格 ,全文地址請點選:Linux下實現進度條
2.進度條程式碼 prograss_bar.c
#include<stdio.h>
#include<string.h>
#include<unistd.h>
int main()
{
int i = 0;
char bar[102] = { 0 };
const char* lable = "|/-\\";
while(i <= 100)
{
printf("[%-100s][%d%%][%c]\r",bar, i, lable[i%4]);//緩衝區未重新整理
fflush(stdout);//重新整理緩衝區
bar[i++] = '#';
usleep(100000);//沉睡100ms
}
printf("\n");
return 0;
}
Makefile
prograss_bar:prograss_bar.o
gcc prograss_bar.c -o prograss_bar
prograss_bar.o:prograss_bar.s
gcc -c prograss_bar.s -o prograss_bar.o
prograss_bar.s:prograss_bar.i
gcc -S prograss_bar.i -o prograss_bar.s
prograss_bar.i:prograss_bar.c
gcc -E prograss_bar.c -o prograss_bar.i
.PHONE:clean
clean:
rm -f prograss_bar.i prograss_bar.s prograss_bar.o prograss_bar
3.彩色進度條 prograss_bar.c
#include<stdio.h>
#include<string.h>
#include<unistd.h>
int main()
{
int i = 0;
char bar[102] = { 0 };
const char* lable = "|/-\\";
while(i <= 100)
{
printf("\e[34m[%-100s][%d%%][%c]\r\e[0m",bar, i, lable[i%4]);
fflush(stdout);
bar[i++] = '#';
usleep(100000);
}
printf("\n");
return 0;
}
4.當出現下面的情況時可以試下調整字型大小(Ctrl + ‘-’ 和 Ctrl + Shift+ ‘+’)或者是解析度。
六、 Linux下軟體安裝的幾種方式(原始碼安裝, rpm安裝, yum安裝).
一、原始碼安裝:
步驟: 編譯原始碼,然後安裝 1.1安裝準備: a、 首先用yum安裝gcc,用於編譯原始碼 b、管網下載原始碼包 c、winSCP windows與Linux傳輸檔案(若直接用安裝軟體的linux電腦下載就不用傳輸了)
1.2 安裝過程 a、解壓 b、進入解壓後的目錄配置檔案 ./configure # 大多數情況下原始碼包都會帶configure這樣一個配置工具,具體使用方法可以vim檢視其內容 c、make #編譯原始碼包 如果報錯了 make clean 清除快取重新make d、make install # 安裝 然後刪除原始碼包軟體和安裝目錄
二、rpm安裝:
rpm安裝:安裝別人編譯好的軟體包
rpm即Redhat Package Manager,Redhat的軟體包管方式,適用rpm install 命令
rpm不僅已經把軟體原始碼編譯成二進位制檔案,而且對軟體包依賴的檔案,系統環境等做了統計副檔名:rpm
還有一種SRPM:沒有編譯成二進位制檔案,但是也包含rpm的特性
三、yum安裝:
用rpm方式安裝軟體,如果依賴的軟體沒有事先安裝,軟體無法安裝成功。
為了解決這個問題,推出yum方式。
既然依賴的軟體沒有安裝在機器上,那麼就先安裝依賴檔案,再安裝我需要安裝的軟體。
因此yum在安裝軟體同時安裝依賴檔案。
因此需要一個yum源來放依賴的軟體源,對比被安裝機器上rpm軟體庫歸根到底,yum也是基於rpm的。