【Linux操作系統】簡學深悟啟示錄:Linux環境基礎開發工具使用

文章目錄

  • 1.軟件包管理器yum
  • 2.Linux編輯器vim
    • 2.1 三模式切換
    • 2.2 正常模式
    • 2.3 底行模式
    • 2.4 可視化模式
    • 2.5 vim 配置
  • 3.Linux編譯器gcc/g++
    • 3.1 預處理
    • 3.2 編譯
    • 3.3 匯編
    • 3.4 連接
    • 3.5 函數庫
  • 4.Linux自動化構建工具Makefile
  • 5.Linux調試器gdb
  • 希望讀者們多多三連支持
  • 小編會繼續更新
  • 你們的鼓勵就是我前進的動力!

本文將介紹關于 Linux 系統常用的工具包,便于后續的代碼操作

1.軟件包管理器yum

對于 Linux 系統來說,下載軟件是必不可少的,就像平常使用手機下載軟件一樣滿足我們的日常需求,一般 Linux 有三種下載方式:

  • 源代碼下載: 從官網下載代碼自行配置,雖說可以充分利用代碼自行調配,但是上手使用難度太高
  • rpm下載: 使用命令獲取文件安裝,但是會涉及該安裝包依賴于其他安裝包等問題,需要手動解決,過程繁瑣
  • yum下載: 也是使用命令獲取文件安裝,能夠自動分析軟件包的依賴關系,并從 yum 源中下載并安裝所需的依賴包,大大簡化了軟件安裝過程,雖說安裝的版本可能不是最新的,但是簡單易上手,通常來說是夠用的

因此我們主要使用 yum

🤔那么yum是如何下載的呢?

其實也沒那么復雜,就拿手機來舉例,跟 Linux 系統一樣都叫做客戶端,yum 就相當于是手機里的應用市場,是一個軟件的倉庫地址,告訴 yum 去哪里找軟件,然后通過網絡在服務器里找到對應的軟件源來下載軟件包,軟件源又分為官方和第三方的


通常我們通過 yum list 查看可安裝軟件列表,或者 yum search 軟件名 進行軟件搜索

以rz、sz命令的下載為例

[zzh_test@hcss-ecs-6aa4 ~]$ yum list | grep rzsz
lrzsz.x86_64                             0.12.20-36.el7                @base    

我們查詢到該命令的安裝包為 lrzsz

yum install -y 軟件包名

下載的命令通常如上所示,-y 表示省略輸入是否同意安裝的步驟

在這里插入圖片描述

對于該紅框的信息可以解釋為:

軟件包名稱: 主版本號,次版本號,源程序發行號-軟件包的發行號,主機平臺,cpu架構

x86_64 后綴表示 64 位系統的安裝包,i686 后綴表示 32 位系統安裝包,選擇包時要和系統匹配,el7 表示操作系統發行版的版本,el7 表示的是 centos7/redhat7el6 表示 centos6/redhat6,最后一列,base 表示的是 “軟件源” 的名稱,類似于 “小米應用商店”,“華為應用商店” 這樣的概念

順便一提,rz 命令用于從 Windows 上傳文件到 Linuxsz 命令用于從 Linux 下載文件到 Windows,輸入命令后會彈出文件選擇對話框,選擇要上傳的文件即可,在本地直接拖動文件到窗口也是一樣的

yum remove 軟件包名

想要刪除可以輸入以上命令

🔥值得注意的是:

  • 安裝軟件時由于需要向系統目錄中寫入內容,一般需要 sudo 或者切到 root 賬戶下才能完成
  • yum 安裝軟件只能一個裝完了再裝另一個,正在 yum 安裝一個軟件的過程中, 如果再嘗試用 yum 安裝另外一個軟件,yum 會報錯

2.Linux編輯器vim

在這里插入圖片描述

vim 文件名 進入編輯界面,可以理解為記事本,初始狀態下是命令模式

2.1 三模式切換

在這里插入圖片描述
通常最常用的三個模式:

  • 命令模式: i 切換到插入模式,:(shift + ;) 切換到底行模式
  • 插入模式: esc 回到命令模式
  • 底行模式: esc 回到命令模式

命令模式就是使用命令控制屏幕光標的移動,字符、字或行的刪除,一般不做文本輸入;插入模式就是允許編輯的模式,是我們后面用的最頻繁的編輯模式;底行模式用于文件保存或退出,也可以進行文件替換,找字符串,列出行號等操作

2.2 正常模式

正常模式就是命令模式,通常使用命令進行一些簡單的操作

移動:

  • gg:定位光標到開頭行第一位
  • G(shift + g):定位到結尾行第一位
  • n + shift + g :定位到第 n 行文本第一位
  • $(shift + 4):定位到當前行的文本最后一位
  • ^(shift + 6):定位到當前行的文本第一位
  • w、b:光標按照單詞進行行內、跨行移動
  • h、j、k、l:左下上右移動光標

復制粘貼:

  • (n)yy:復制光標所在(n)行
  • (n)dd:刪除(n)行
  • (n)p:粘貼 n
  • u:撤回
  • ctrl + r:撤回之前的撤回

轉換:

  • ~:大小寫轉換
  • (n)r:對光標字符之后的所有字符進行批量化替換
  • R(shirf + r):進入替換模式,對內容整體替換
  • (n)x:對光標字符之后的字符進行刪除

2.3 底行模式

在使用底行模式之前,請記住先按 esc 鍵確定您已經處于正常模式,再按 : 冒號即可進入底行模式

跳到文件中的某一行:

  • ## 號表示一個數字,在冒號后輸入一個數字,再按回車鍵就會跳到該行了,如輸入數字 15,再回車,就會跳到文章的第15行

查找字符:

  • / + 關鍵字:先按 / 鍵,再輸入您想尋找的字符,如果第一次找的關鍵字不是您想要的,可以一直按 n 會往后尋找到您要的關鍵字為止,從當前光標位置向下(往后) 查找

  • ? + 關鍵字:先按 ? 鍵,再輸入您想尋找的字符,如果第一次找的關鍵字不是您想要的,可以一直按 n 會往前尋找到您要的關鍵字為止,從當前光標位置向上(往前) 查找

保存文件:

  • w:在冒號輸入字母 w 就可以將文件保存起來離開 vim
  • q:按 q 就是退出,如果無法離開 vim,可以在 q 后跟一個 ! 強制離開 vim
  • wq:一般建議離開時,搭配 w 一起使用,這樣在退出的時候還可以保存文件

2.4 可視化模式

可視化模式一般用于批量操作,比如批量加注釋:

批量注釋:

在正常模式下按 ctrl + v ,進入 V-BLOCK 模式,按 J 鍵 或 K 鍵選擇要注釋的內容,J 向上 K 向下,按住 shift + i 進入插入模式,輸入 //,點擊 esc 鍵,完成注釋

批量取消注釋:

在正常模式下按 ctrl + v ,進入 V-BLOCK 模式,然后按兩下 L 鍵(右移兩格),選中注釋的符號,按 J 鍵或 K 鍵選擇要取消注釋的內容,按 d 鍵完成批量取消注釋

2.5 vim 配置

vim 可以通過在自己用戶下添加 .vimrc 的文件進行功能、風格等配置,為了能夠像在VS
、IDEA中那樣使用方便,可以自行上網進行配置搜索,這里我推薦一個配置項目

傳送門:VimForCpp

3.Linux編譯器gcc/g++

gcc/g++ [選項] 要編譯的文件 [選項] [目標文件]

gcc/g++ 是一款語言編譯器,相當于 Linux 系統的 VSgcc 專門編譯 C 語言,g++ 既可以編譯 C 語言,也可以編譯 C++

生成可執行文件直接 ./目標文件 執行即可

3.1 預處理

[zzh_test@hcss-ecs-6aa4 progressbar]$ ls
main.c  makefile  processBar.c  processBar.h
[zzh_test@hcss-ecs-6aa4 progressbar]$ gcc -E processBar.c -o processBar.i
[zzh_test@hcss-ecs-6aa4 progressbar]$ ls
main.c  makefile  processBar.c  processBar.h  processBar.i

預處理功能主要包括宏定義,文件包含,條件編譯,去注釋等

-E 表示讓 gcc 在預處理結束后停止編譯過程,-o 后面一定是接目標文件,源頭文件放哪兒無所謂

3.2 編譯

[zzh_test@hcss-ecs-6aa4 progressbar]$ ls
main.c  makefile  processBar.c  processBar.h  processBar.i
[zzh_test@hcss-ecs-6aa4 progressbar]$ gcc -S processBar.i -o processBar.s
[zzh_test@hcss-ecs-6aa4 progressbar]$ ls
main.c  makefile  processBar  processBar.c  processBar.h  processBar.i  processBar.s

編譯主要檢查代碼的規范性、是否有語法錯誤等,以確定代碼的實際要做的工作,在檢查無誤后, gcc 把代碼翻譯成匯編語言

-S 表示讓 gcc 在編譯結束后停止編譯過程,生成匯編代碼

3.3 匯編

[zzh_test@hcss-ecs-6aa4 progressbar]$ ls
main.c  makefile  processBar  processBar.c  processBar.h  processBar.i  processBar.s
[zzh_test@hcss-ecs-6aa4 progressbar]$ gcc -c processBar.s -o processBar.o
[zzh_test@hcss-ecs-6aa4 progressbar]$ ls
main.c  makefile  processBar.c  processBar.h  processBar.i  processBar.o  processBar.s

匯編主要生成機器可識別代碼

-c 表示讓 gcc 在匯編結束后停止編譯過程,生成二進制代碼

3.4 連接

[zzh_test@hcss-ecs-6aa4 progressbar]$ ls
main.c  makefile  processBar.c  processBar.h  processBar.i  processBar.o  processBar.s
[zzh_test@hcss-ecs-6aa4 progressbar]$ gcc processBar.o -o processBar
[zzh_test@hcss-ecs-6aa4 progressbar]$ ls
main.c  makefile  processBar  processBar.c  processBar.h  processBar.i  processBar.o  processBar.s

連接表示連接函數庫生成可執行文件

3.5 函數庫

函數庫分為兩種類型的庫:

靜態庫:

靜態庫就是將需要展開的函數在函數定義的地方直接展開,把庫文件的代碼全部加入到可執行文件中,因此生成的文件比較大,但在運行時也就不再需要庫文件了,其后綴名一般為 .a

動態庫:

動態庫與之相反,在編譯鏈接時并沒有把庫文件的代碼加入到可執行文件中,而是在程序執行時由運行時鏈接文件加載庫,這樣可以節省系統的開銷。所以動態庫也叫共享庫,動態庫一般后綴名為 .so,如前面所述的 libc.so.6 就是動態庫,gcc 在編譯時默認使用動態庫

4.Linux自動化構建工具Makefile

make 是一條命令,makefile 是一個文件,兩個搭配使用,完成項目自動化構建

通常我們需要不斷的進行 gcc / g++ 編譯、rm 刪除執行文件等等指令,如果有大量文件需要多次重復以上操作的話,那么每次都手動輸入一大長串必然是麻煩的,因此就需要編寫 Makefilemakefile 也行,大小寫無所謂)文件自動化使用指令

在這里插入圖片描述

如圖所示可解釋為:

processBar 可執行文件依賴于 processBar.c、main.c$^ 表示 : 后面的文件,$@ 表示 : 前面的文件,直接寫文件名也可以,不過用符號比較方便就是了,下面的 clean 同理,: 后面是空的表示不依賴于任何文件就可以執行

[zzh_test@hcss-ecs-6aa4 progressbar]$ ls
main.c  makefile  processBar.c  processBar.h[zzh_test@hcss-ecs-6aa4 progressbar]$ make processBar
gcc processBar.c main.c -o processBar 
[zzh_test@hcss-ecs-6aa4 progressbar]$ ls
main.c  makefile  processBar  processBar.c  processBar.h[zzh_test@hcss-ecs-6aa4 progressbar]$ make clean
rm -rf processBar
[zzh_test@hcss-ecs-6aa4 progressbar]$ ls
main.c  makefile  processBar.c  processBar.h

通常使用 make+冒號前的依賴名 的方式執行自動化,如果只輸入 make 指令的話默認執行第一條自動化指令,被依賴的文件總會更新,所以要多次執行 make processBar 的指令

make 的默認行為是:基于時間戳判斷更新,檢查目標是否是一個已存在的文件,如果文件存在且沒有更新(即依賴項未變化),則跳過該目標的命令。像 clean 這種沒有具體依賴目標的叫做 偽目標

但有些場景下,目標并不是實際文件(比如常見的 cleanallinstall 等),若目錄中恰好有與這些目標同名的文件(比如名為 clean 的文件),make 會誤將其當作 “已完成的目標文件”,認為無需執行,從而跳過本應運行的命令(如 rm -f *.o),導致清理、構建等預期操作失敗

因此需要用 .PHONY 聲明偽目標 —— 強制 make 忽略同名文件,始終執行命令

🔥值得注意的是:

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

make 會一層又一層地去找文件的依賴關系,直到最終編譯出第一個目標文件,在找尋的過程中,如果出現錯誤,比如最后被依賴的文件找不到,那么 make 就會直接退出,并報錯,而對于所定義的命令的錯誤,或是編譯不成功,make 根本不理,make 只管文件的依賴性,即如果在我找了依賴關系之后,冒號后面的文件還是不在,那么對不起,我就不工作啦

5.Linux調試器gdb

Linux 系統中,程序的發布默認是 release 版本,無法直接發布,所以調試的前提是處于 debug 版本,那么在 gcc / g++ 編譯時要加上 -g 使文件以 debug 版本輸出

gdb 是用來調試可執行文件或者目標文件的,所以用 gdb 目標文件 指令啟動調試器

以下是 gdb 代碼調試時的指令

在這里插入圖片描述
一般我們還是在 VS 里調試比較方便,因此 gdb 的調試就不過多敘述


希望讀者們多多三連支持

小編會繼續更新

你們的鼓勵就是我前進的動力!

請添加圖片描述

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

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

相關文章

八大神經網絡的區別

神經網絡名稱全稱/修正名稱主要作用核心特點典型應用場景CINICNN(卷積神經網絡)處理圖像、視頻等空間數據,提取局部特征。使用卷積核、池化操作;擅長平移不變性。圖像分類、目標檢測、人臉識別。RINIRNN(循環神經網絡&…

從 SQL Server 到 KingbaseES V9R4C12,一次“無痛”遷移與深度兼容體驗實錄

#數據庫平替用金倉 #金倉產品體驗官 摘要:本文以體驗項目案例為主線,從下載安裝、數據類型、T-SQL、JDBC、性能基準、踩坑回退六大維度,全景驗證 KingbaseES V9R4C12 對 SQL Server 的“零改造”兼容承諾;并給出 TPCH 100G 性能對…

EasyPlayer播放器系列開發計劃2025

EasyPlayer系列產品發展至今,已經超過10年,從最早的EasyPlayer RTSP播放器,到如今維護的3條線:EasyPlayer-RTSP播放器:Windows、Android、iOS;EasyPlayerPro播放器:Windows、Android、iOS&#…

通信名詞解釋:I2C、USART、SPI、RS232、RS485、CAN、TCP/IP、SOCKET、modbus等

以下內容參考AI生成內容1. I2C(Inter-Integrated Circuit,集成電路間總線)定義:由飛利浦(現恩智浦)開發的短距離串行通信總線,用于芯片級設備間的低速數據傳輸。工作原理:采用兩根信…

bash的特性-常見的快捷鍵

一、前言在 Linux Shell 編程和日常使用中,Bash 快捷鍵 是提升命令行操作效率的利器。熟練掌握這些快捷鍵,不僅可以節省大量輸入時間,還能顯著提升你在終端環境下的操作流暢度。本文將帶你全面了解 Bash 中常用的快捷鍵,包括&…

【Java Web實戰】從零到一打造企業級網上購書網站系統 | 完整開發實錄(三)

🎨 核心功能設計 👤 用戶管理系統 用戶管理是整個系統的基礎,我設計了完整的用戶生命周期管理: 🔐 用戶注冊流程 #mermaid-svg-D0eUHWissjNhkqlB {font-family:"trebuchet ms",verdana,arial,sans-serif;fon…

uniapp input 聚焦時鍵盤彈起滾動到對應的部分

實現效果代碼如下<template><view idapp><view class"aa"></view><iconfont name"left"></iconfont>姓氏&#xff1a;<input style"background-color: antiquewhite;" type"text" v-model&quo…

【基礎篇三】WebSocket:實時通信的革命

目錄 一、傳統HTTP的"痛點"分析 1.1 HTTP的單向通信模式 1.2 "實時"效果的痛苦嘗試 ?編輯 1.3 性能對比分析 二、WebSocket 協議詳解 2.1 WebSocket是什么&#xff1f; ?編輯 2.2 WebSocket的核心特性 2.2.1 全雙工通信&#xff08;Full-Duple…

設計模式(十八)行為型:中介者模式詳解

設計模式&#xff08;十八&#xff09;行為型&#xff1a;中介者模式詳解中介者模式&#xff08;Mediator Pattern&#xff09;是 GoF 23 種設計模式中的行為型模式之一&#xff0c;其核心價值在于通過引入一個中介者對象來封裝一組對象之間的交互&#xff0c;從而降低對象間的…

Upload-Labs通關全攻略詳細版

前端校驗繞過:pass 01 兩種思路:1.通過抓包,修改后綴 2.前端禁用js繞過前端后綴檢驗 首先寫一個木馬,改為圖片格式GIF89a<?php eval($_POST[cmd])?>抓包之后改為PHP格式: 使用蟻劍連接木馬,第一次嘗試一直是返回數據為空,原因是沒有鏈接到木馬,于是尋找木馬地址…

C#觀察者模式示例代碼

using System; using System.Collections.Generic; using System.Threading;namespace RefactoringGuru.DesignPatterns.Observer.Conceptual {// Observer觀察者 也可以叫做訂閱者 subscriberspublic interface IObserver{// Receive update from subject// 接收來自主題的更新…

電子電子架構 --- 軟件項目的開端:裁剪

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 簡單,單純,喜歡獨處,獨來獨往,不易合同頻過著接地氣的生活,除了生存溫飽問題之外,沒有什么過多的欲望,表面看起來很高冷,內心熱情,如果你身…

Open CV圖像基本操作可莉版

Open CV圖像基本操作一、處理單個像素值訪問像素值修改像素值二、處理單個ROI區域&#xff08;自選區域&#xff09;提取 ROI修改 ROI三、 處理圖像通道通道分離通道合并四、處理整體圖像縮放圖像旋轉圖像平移圖像翻轉一、處理單個像素值 圖像是由像素組成的矩陣&#xff0c;每…

k8s:將打包好的 Kubernetes 集群鏡像推送到Harbor私有鏡像倉庫

本文介紹了在離線環境中部署Harbor鏡像倉庫的完整流程。首先通過腳本創建多個Harbor項目&#xff0c;然后使用KubeKey工具將預打包的Kubernetes鏡像(kubesphere.tar.gz)推送到Harbor倉庫。接著配置containerd以支持從私有倉庫拉取鏡像&#xff0c;包括設置TLS證書和鏡像倉庫端點…

IntelliJ IDEA中管理多版本Git子模塊的完整指南

1.背景介紹項目是父子工程。父工程XXX-ZZZ-CCC。子模塊XXX-api在線上git網站管理,有多個分支版本。現在需要接收別人代碼&#xff0c;導入到本機管理。可以實現本機切換&#xff0c;修改&#xff0c;上傳。2.創建本地倉庫并拉取所有版本2.1.創建目錄在D:\ideaworkspace\midend-…

Android ADB命令之內存統計與分析

一、核心命令總覽工具 / 命令用途示例adb shell dumpsys meminfo查看設備全局內存狀態adb shell dumpsys meminfoadb shell dumpsys meminfo <package>獲取應用詳細內存分類統計adb shell dumpsys meminfo com.example.appadb shell top動態查看進程內存和 CPU 占用adb s…

算法思維進階 力扣 300.最長遞增子序列 暴力搜索 記憶化搜索 DFS 動態規劃 C++詳細算法解析 每日一題

目錄零、題目描述一、為什么這道題值得你深入理解&#xff1f;二、題目拆解&#xff1a;提取核心關鍵點三、明確思路&#xff1a;從暴力到優化的完整進化3. 進一步優化&#xff1a;動態規劃&#xff08;自底向上遞推&#xff09;4. 終極優化&#xff1a;貪心 二分查找&#xf…

圖解網絡-小林coding筆記(持續更新)

大綱 #mermaid-svg-trl6Q4B1uDO1z05w {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-trl6Q4B1uDO1z05w .error-icon{fill:#552222;}#mermaid-svg-trl6Q4B1uDO1z05w .error-text{fill:#552222;stroke:#552222;}#merm…

安寶特案例丨AR+AI+SOP?3大技術融合革新軍工航天領域

軍工、航空、航天領域存在 “小批量、多品種、依賴人工經驗裝配”的特性&#xff0c;這長期制約著生產效率與產品質量的提升。 技術融合應用案例 1 Arbigtec 裝配效率提升類&#xff1a; 某型導彈制導系統裝配&#xff1a;采用 AR 眼鏡與 AI 視覺引導系統&#xff0c;200 精…

ip link show 查看/配置網絡接口

ip link show&#xff08;或簡寫為 ip link&#xff09;是 Linux 系統中用于查看和配置網絡接口&#xff08;網卡、虛擬接口等&#xff09;的命令&#xff0c;屬于 iproute2 工具集的一部分。它是現代 Linux 系統中替代傳統 ifconfig 命令的更強大工具。命令詳解 基本語法 ip l…