Linux 開發工具(1)

從開始講Linux,我們的目標絕不止于寫幾個命令這么簡單。我們的目的是在Linux系統上做開發。因此學習Linux的開發工具也是必不可少的。本章將重點講解:包管理器apt(CentOS叫yum,這里用ubuntu舉例),vim編輯器

一.包管理器apt

1.安裝軟件的工具

在Linux中,安裝軟件主要有以下三種方式:

1.源碼安裝

2.軟件包安裝rpm

3.包管理器apt

前面兩種方式現在我們已經基本不再使用,因為我們面臨一個重要問題——軟件依賴。

2.軟件依賴

在用源碼安裝或者軟件包安裝時,我們常會發現一個問題:即使將這個軟件“完整下載”下來,也照樣無法使用,這是因為軟件并非我們想的那么簡單,除了軟件本身,可能還附帶許多依賴庫。例如安裝ls命令,還需要附帶lib.c依賴庫

不僅一個軟件需要多個依賴庫,甚至可以說,世界上的軟件都并非孤島狀態,他們的依賴庫很有可能是相互依賴相互包含的。

我們下載安裝的只是軟件這一種東西,而依賴我們幾乎可以說一個都沒下載下來,需要自己手動下載。為了讓用戶更方便地即下即用,因此誕生了包管理器的方式進行軟件的下載安裝。

3.包管理器apt

軟件的下載安裝即網絡下載+系統安裝(拷貝)。安裝即拷貝,而拷貝一般不會拷到某個用戶的家目錄下,因此軟件的下載安裝往往需要root權限。

wujiahao@VM-12-14-ubuntu:/$ sudo apt install sl
[sudo] password for wujiahao: 

不過不必擔心,即便安裝的軟件擁有者為root,但往往會對other提供r和x權限,也就是說對于系統中任意成員都可以使用這個命令。

現在有幾個問題:

問題1:包管理器apt干了什么?

回答2:包管理器會自動解決依賴問題。簡單來說:軟件包可以看作app,而包管理器就是應用商店。

之前我們就講過打包和解壓這個命令。而打包的目的就是防止一些重要文件的缺失,apt這樣的包管理器為我們提供的軟件全是這樣完整打包封裝的,下載下來一般就能直接使用。

那么又引起了另一個問題:

問題2:Linux的軟件由誰提供?

回答2:由社區提供。

操作系統背后的配套軟件也是生態的一環,而對于操作系統來說,生態可以說是比提供的技術支持更重要的東西。一款操作系統要想被更廣大用戶使用,開發者們就會提供各種配套軟件完善生態。

我們的操作系統和社區是如何聯系的?

首先,我們可以直接訪問社區(這里用Ubuntu舉例):www.ubuntu.org

用戶依賴社區的軟件和生態,就自然有人愿意捐款維持項目開發和服務器維護。在社區中的軟件,主要有base(穩定軟件)和epel(擴展軟件源)等組成,只有一個軟件足夠穩定,暴露的問題足夠少才能被遷移為base版。

問題3:那么我們自己的機器,是如何知道軟件的下載鏈接呢?

回答3:我們自己的操作系統都是從社區下載的,當然內部是有內置鏈接的。

root@VM-12-14-ubuntu:/etc/apt# cat /etc/apt/sources.list
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://mirrors.tencentyun.com/ubuntu jammy main restricted
# deb-src http://mirrors.tencentyun.com/ubuntu jammy main restricted## Major bug fix updates produced after the final release of the
## distribution.
deb http://mirrors.tencentyun.com/ubuntu jammy-updates main restricted
# deb-src http://mirrors.tencentyun.com/ubuntu jammy-updates main restricted## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
deb http://mirrors.tencentyun.com/ubuntu jammy universe
# deb-src http://mirrors.tencentyun.com/ubuntu jammy universe
deb http://mirrors.tencentyun.com/ubuntu jammy-updates universe
# deb-src http://mirrors.tencentyun.com/ubuntu jammy-updates universe## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team, and may not be under a free licence. Please satisfy yourself as to
## your rights to use the software. Also, please note that software in
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
deb http://mirrors.tencentyun.com/ubuntu jammy multiverse
# deb-src http://mirrors.tencentyun.com/ubuntu jammy multiverse
deb http://mirrors.tencentyun.com/ubuntu jammy-updates multiverse
# deb-src http://mirrors.tencentyun.com/ubuntu jammy-updates multiverse## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
#deb http://mirrors.tencentyun.com/ubuntu jammy-backports main restricted universe multiverse
# deb-src http://mirrors.tencentyun.com/ubuntu jammy-backports main restricted universe multiversedeb http://mirrors.tencentyun.com/ubuntu jammy-security main restricted
# deb-src http://mirrors.tencentyun.com/ubuntu jammy-security main restricted
deb http://mirrors.tencentyun.com/ubuntu jammy-security universe
# deb-src http://mirrors.tencentyun.com/ubuntu jammy-security universe
deb http://mirrors.tencentyun.com/ubuntu jammy-security multiverse
# deb-src http://mirrors.tencentyun.com/ubuntu jammy-security multiverse

其實從這個文件內容來看,我使用的是騰訊的鏡像源。那么為什么需要鏡像源呢?

這些OS也好,生態也好基本都是外國人開發的,所以我們要訪問是需要一點手段的。而我們國人建立了一套國外的鏡像文件,同時更改鏈接(切換鏡像源),便于國人使用。

我們可以查看包含sl關鍵字的指令。顯示的信息依次為軟件名——版本號——提供者

root@VM-12-14-ubuntu:/# apt list|grep slWARNING: apt does not have a stable CLI interface. Use with caution in scripts.aisleriot/jammy 1:3.22.22-1 amd64
android-libboringssl-dev/jammy 10.0.0+r36-1 amd64
android-libboringssl/jammy 10.0.0+r36-1 amd64
apache2-ssl-dev/jammy-updates,jammy-security 2.4.52-1ubuntu4.16 amd64
apertium-eval-translator/jammy 1.2.1-2 all
apertium-hbs-slv/jammy 0.5.1-1 all
apertium-isl-eng/jammy 0.1.0~r66083-3 all
apertium-isl/jammy 0.1.0~r65494-2.1 all
asl-doc/jammy 0.1.7-4 all
asl-tools/jammy 0.1.7-4 amd64
aspell-sl/jammy 0.60-4 all
atomicparsley/jammy 20210715.151551.e7ad03a-1 amd64
bruteforce-salted-openssl/jammy 1.4.2-3build1

二.vim編輯器

1.歷史發展與Vi的區別


起源與演進
Vi(1976年) :由Bill Joy開發,嵌入BSD Unix系統,是首個面向屏幕的文本編輯器,但功能有限(如無多級撤銷)。
Vim(1991年) :Bram Moolenaar基于Amiga系統的Stevie編輯器重寫,命名為"Vi IMproved"(Vim),1992年發布首個公開版本。


關鍵升級:
多級撤銷(Vi僅支持單次撤銷)
跨平臺支持(Windows/Linux/macOS)
語法高亮、代碼補全、插件擴展。


Vim的核心優勢
效率設計:鍵盤為中心的操作減少鼠標依賴,降低重復操作疲勞。
可擴展性:支持Vimscript/Lua/Python等腳本語言。
生態豐富:2023年GitHub超3萬插件(如NERDTree)

2.Vim的12種模式


Vim官方定義7種基礎模式+5種派生模式,以下聚焦5種核心模式:

1. 命令模式(Command Mode)


進入方式:啟動Vim時的默認模式,或從其他模式按Esc返回。
核心功能:導航、文本操作、模式切換。
命令示例:


1. 光標移動
命令功能示例
h/j/k/l左/下/上/右移動6j:下移6行
gg跳至文件首行快速返回文件開頭
G跳至文件末行查看日志結尾
$跳至行尾行尾添加分號?;
^跳至行首行首插入注釋?#
w下一單詞開頭快速跳過參數
e下一單詞結尾修改函數名
b上一單詞開頭回退修正拼寫
nl移至該行第n個字符對齊表格數據
Ctrl+f向下翻頁瀏覽長文件
Ctrl+b向上翻頁回看代碼

我們可以對vim進行分屏操作:

  • :vsp config.yml?(垂直分屏并打開?config.yml)

  • :sp src/main.c?(水平分屏并打開?main.c)

并使用shift+ww移動分屏之間的光標,這會直接影響到我們當前在對哪個分屏做操作。

2. 文本編輯

刪除操作

x      # 刪除光標處字符(如刪錯括號)
3x     # 刪除光標后3字符(刪多余空格)
dd     # 刪除整行(清理空行)
5dd    # 刪除5行(移除廢棄代碼塊)

復制粘貼

yy     # 復制當前行
3yy    # 復制3行(復制函數)
p      # 粘貼到光標后(復用代碼)

替換與撤銷

r      # 替換單個字符(修正拼寫)
R      # 進入替換模式(覆蓋舊變量名)
u      # 撤銷(救回誤刪代碼)
Ctrl+r # 重做(恢復撤銷操作)

高效修改

cw     # 修改當前單詞(重命名變量)
c3w    # 修改3個單詞(重構參數列表)
3. 行號與跳轉
Ctrl+g  # 顯示當前行號(調試定位)
20G     # 跳至第20行(快速定位錯誤)

2.插入模式(Insert Mode)

  • 進入方式:命令模式下按?i(光標前插入)、a(光標后插入)、o(下方新行插入)。
  • 核心功能:自由輸入文本,類似常規文本編輯器。
  • 切換意義:脫離命令式操作,直接編輯內容。
快捷鍵進入位置場景示例
i光標當前位置插入在單詞中間補充字符
a光標下一位置插入在行尾逗號后追加內容
o下方新開一行插入在當前代碼塊下新增空行

切換命令模式:ESC

3. 底行模式(Last Line Mode)

  • 進入方式:命令模式下按?:
  • 核心功能:文件操作、全局命令、配置設置。
命令功能示例
:set nu顯示行號便于代碼定位
:15跳至第15行快速修復指定行BUG
:/include向下搜索"include"查找頭文件引用
:?printf向上搜索"printf"回溯打印語句
:w保存文件及時保存進度
:q!強制退出不保存放棄臨時修改
:wq保存并退出完成編輯
:!command在不退出vim編輯器的情況下進行編譯等操作完成test.c的代碼編寫后直接輸入指令編譯
:%s/dst/src/在dst處用src替換多行注釋或者輸入輸出內容批量替換

示例:

4. 視圖模式(Visual Mode)

  • 進入方式:命令模式下按?v(字符選擇)、V(行選擇)、Ctrl+v(塊選擇)。
  • 核心功能:高亮選擇文本區域進行批量操作。
y              # 復制選中內容
d              # 刪除選中內容
>              # 向右縮進選中塊

具體操作方式:可以通過hjkl進行批量的行,列選擇;接著shift+i進入插入模式,直接輸入想要進行注釋的字符(這里用#示范),然后ESC進入命令模式即可。效果如下:

若要撤銷操作直接按u即可。

5. 替換模式(Replace Mode)

  • 進入方式:命令模式下按?R
  • 核心功能:直接覆蓋現有文本,無需逐字刪除。
  • 典型場景:修改代碼變量名時保留原格式。

其他模式:

模式進入快捷鍵功能
Ex模式Q批處理命令(如:g/pattern/d)
終端模式:term嵌入終端操作
選擇模式gh圖形界面文本選擇

模式切換設計哲學:減少誤操作,提升專注度。各模式各司其職。

3.Vim工作流

1.基礎工作流:

#打開文件
vim test.c #進入編輯模式,編輯后ESC進入命令模式
i ->編輯模式->ESC#進入底行模式,保存并退出
:wq!

2.高效技巧:

跨文件操作::vs file2 分屏編輯。做法:在命令模式下Ctrl+w+w
會話管理::mksession 保存窗口布局。
宏錄制:qa 開始錄制 → 操作 → q 停止 → @a 重復。


3.減少模式切換:

插入模式只做輸入,其他操作用命令模式完成
熟練使用 w/e/b 替代方向鍵移動光標


4.組合命令:

d$ = 刪除至行尾(等效于 D)
yG = 復制到文件末尾


5.避免重復:

數字前綴:5dd 代替5次 dd
搜索替代手動查找::/error > 手動翻頁

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/97778.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/97778.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/97778.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

redis面試點記錄

1、主從復制psync-> runid->runid是?則是全量->返回fullresync和runid和復制進度->bgsave命令準備RDB文件->之后的命令寫入replication_buffer->發送RDB->發送replication_buffer的信息repl_backlog_buffer環型緩沖區,主節點只有一…

Elastic APM 與 Elasticsearch 集成:構建完整可觀測性棧

引言 Elastic APM 深度依賴 Elasticsearch 作為數據后端,但正確集成可以解鎖更強大的功能,如自定義查詢、聚合分析和與其它 Elastic 工具的協同。本文探討 APM 與 Elasticsearch 的集成細節,包括數據流、索引管理以及高級用例,幫助…

開源模型應用落地-基于DPO的Qwen3-4B意圖理解精準對齊實踐(二十)

一、前言 在大模型技術蓬勃發展的今天,如何讓AI真正“理解”用戶意圖,而非僅僅生成流暢文本,已成為落地應用的核心瓶頸。尤其是在客服、搜索、智能助手等場景中,模型對用戶query的深層語義解析能力,直接決定了交互體驗的成敗。然而,經過標準SFT(監督微調)訓練的模型,往…

23種設計模式案例

一、創建型模式 1. 單例模式 (Singleton Pattern) 應用場景: 全局狀態管理、全局配置、共享資源訪問 // 全局狀態管理器 class Store {constructor() {if (Store.instance) return Store.instance;this.state {};Store.instance this;}getState(key) { return this.state[key…

ctfshow_web13-----------文件上傳.user.ini

打開題目發現是一個文件上傳題掃描后發現存在upload.php.bak.bak是備份文件拿到源碼正則過濾了php&#xff0c;文件大小<24,文件名小于9經嘗試&#xff0c;改后綴php5,ptml均不行&#xff0c;使用.htaccess文件也不成功上傳上傳.user.ini&#xff0c;在文件中寫上auto_prepe…

圖像拼接案例,摳圖案例

目錄 一.圖像拼接案例 1.圖像拼接項目介紹 2.核心步驟 ①計算圖片特征點及描述符 ②匹配特征點&#xff0c;使用暴力匹配器 ③篩選有效匹配 ④計算透視變換矩陣 ⑤應用變換和拼接 二.摳圖案例 1.縮放旋轉處理 2.轉化為灰度圖并二值化 3.找出所有輪廓&#xff0c;并在…

【左程云算法筆記016】雙端隊列-雙鏈表和固定數組實現

目錄 1&#xff09;雙端隊列的介紹 2&#xff09;雙端隊列用雙鏈表的實現代碼演示 3&#xff09;雙端隊列用固定數組的實現 代碼演示 視頻 【算法講解016【入門】雙端隊列-雙鏈表和固定數組實現】 Leecode leecode641 設計循環雙端隊列 1&#xff09;雙端隊列的介紹 可以…

ffplay視頻輸出和尺寸變換

視頻輸出模塊 視頻輸出初始化的主要流程 我們開始分析視頻&#xff08;圖像&#xff09;的顯示。 因為使?了SDL&#xff0c;?video的顯示也依賴SDL的窗?顯示系統&#xff0c;所以先從main函數的SDL初始化看起&#xff08;節選&#xff09;&#xff1a; int main(int argc, c…

協議_https協議

http http協議是將數據以明文的形式在網絡上傳輸。若是傳輸的數據中包含一些敏感信息比如銀行卡信息等可能會被有心人攻擊造成信息泄露或被篡改。 總結&#xff1a;http協議進行數據傳輸難以保證數據的隱私性以及數據完整性&#xff0c;為了保證數據的準確定引入了https這一協…

阿里云 騰訊云 API 自動化查詢指南

文章目錄一、核心思路與架構建議二、經驗與核心建議三、技術方案選型建議四、API使用詳解4.1 阿里云4.2 騰訊云五、進階&#xff1a;與內部系統聯動免費個人運維知識庫&#xff0c;歡迎您的訂閱&#xff1a;literator_ray.flowus.cn 一、核心思路與架構建議 自動化流程可以概括…

【Unity 性能優化之路——概述(0)】

Unity性能優化概述性能優化不是某個環節的極致壓榨&#xff0c;而是所有模塊的協同共進。本文將為你建立完整的Unity性能優化知識體系。很多Unity開發者一提到性能優化&#xff0c;首先想到的就是Draw Call、Batches這些渲染指標。這沒錯&#xff0c;但它們只是性能優化中的一部…

靈碼產品演示:軟件工程架構分析

作者&#xff1a;了哥 演示目的演示靈碼對于整個復雜軟件工程項目的架構分析能力&#xff0c;輸出項目的軟件系統架構圖。演示文檔接口生成能力。演示準備 克隆工程地址到本地&#xff08;需提前安裝好 git 工具&#xff0c; 建議本地配置 brew&#xff09;&#xff1a; git cl…

銀河麒麟部署mysql8.0并連接應用

?客戶需在國產化銀河麒麟系統中部署軟件應用&#xff0c;使用mysql8.0數據庫。機器放置了兩三年&#xff0c;里面命令工具和依賴都不太全。而且客戶環境不聯網&#xff0c;只能采用離線部署的方式。部署過程中踩了很多坑&#xff0c;也用到很多資源&#xff0c;記錄一下。 過…

GitAgent-面壁智能聯合清華大學發布的大模型智能體應用框架

本文轉載自&#xff1a;https://www.hello123.com/gitagent ** 一、&#x1f50d; GitAgent 框架&#xff1a;大模型智能體的工具箱革命 GitAgent 是由面壁智能與清華大學自然語言處理實驗室聯合研發的創新型框架&#xff0c;旨在解決大模型智能體在復雜任務中的工具擴展瓶頸…

靈碼產品演示:Maven 示例工程生成

作者&#xff1a;輕眉 演示主題&#xff1a;由 AI 自動生成 0 到 1 的電商訂單 Java 項目 演示目的 面向 Java 零基礎的用戶&#xff0c;通過靈碼的產品能力&#xff08;如提示詞、編碼智能體、項目 Rules 和 SQLite MCP 服務、單元測試&#xff09;自動生成 0 到 1 的電商訂單…

AI編程從0-1開發一個小程序

小伙伴們&#xff0c;今天我們利用AI實現從0到1開發一個小程序&#xff01;需求交給AI&#xff1a; 我們只要說出自己的開發思路&#xff0c;具體需求交給AI完成&#xff01;輸入提示詞&#xff1a;個人開發的小程序 能開發哪些好備案&#xff0c;用戶喜歡使用的 AI給出…

DDoS高防IP是什么? DDoS攻擊會暴露IP嗎?

DDoS高防IP是什么&#xff1f;高防IP是指一種網絡安全服務&#xff0c;主要用于防御DDoS攻擊。隨著技術的發展&#xff0c;黑客進行網絡攻擊的強度也在加大&#xff0c;所以我們要做好網絡防護&#xff0c;及時預防DDoS攻擊。DDoS高防IP是什么&#xff1f;DDoS高防IP是指基于IP…

k8s事件驅動運維利器 shell operator

Shell-Operator 概述 Shell-Operator 是 Kubernetes 的一個工具&#xff0c;用于通過 shell 腳本擴展集群功能。它允許用戶編寫簡單的腳本&#xff08;Bash、Python 等&#xff09;來響應 Kubernetes 事件&#xff08;如資源變更、定時任務&#xff09;&#xff0c;無需編譯復…

(二)文件管理-文件權限-chmod命令的使用

文章目錄1. 命令格式2. 基本用法2.1 符號模式2.2 八進制數字模式3. 高級用法3.1 遞歸操作3.2 參考權限3.3 特殊權限位(Setuid, Setgid, Sticky Bit)3.4 X 特殊執行權限4. 注意事項4.1權限與所有權4.2 Root 權限4.3 安全風險4.4 -R 的風險4.5 目錄的執行權限1. 命令格式 chmod …

醫院預約掛號腳本

醫院預約掛號腳本 功能介紹 本腳本是一個用 Python 編寫的醫院預約掛號程序&#xff0c;支持以下功能&#xff1a; 自動預約&#xff1a;通過api交互選擇醫院、科室、醫生和時間段。自動監控&#xff1a;持續檢查指定醫生的號源狀態&#xff0c;發現可預約時段時自動嘗試預約。…