【Linux游记】基础指令篇

​​​​​​

枫の个人主页

你不能改变过去,但你可以改变未来

算法/C++/数据结构/C/Linux

Hello,这里是小枫。C语言与数据结构和算法初阶两个板块都更新完毕,我们继续来学习C++,C++更新的同时我也会更新Linux。Linux操作系统是很经典的操作系统,因此学习起来注定枯燥无味,西游记大家都看过吧~,我希望能带着大家一起跨过九九八十一难,降伏各类难题,学会Linux,我会尽我所能,以通俗易懂、幽默风趣的方式带给大家形象生动的知识,也希望大家遇到困难不退缩,遇到难题不放弃,学习师徒四人的精神!!!故此得名【Linux游记
话不多说,让我们一起进入今天的学习吧~~~

一、软件包管理器

1.1 什么是软件包

在 Linux 下安装软件,通常的办法是下载源代码并编译得到可执行程序,但这种方式比较麻烦。于是有人将常用软件提前编译好,做成软件包(类似 Windows 上的安装程序)放在服务器上,通过包管理器可方便地获取并直接安装。

软件包和软件包管理器的关系,就好比 "App" 和 "应用商店"。其中,yum(Yellow dog Updater, Modified)是 Linux 下常用的包管理器,主要应用在 Fedora、RedHat、Centos 等发行版;Ubuntu 则主要使用 apt(Advanced Package Tool),它同样能自动解决依赖关系,实现软件包的下载和安装。

1.2 Linux 软件生态

Linux 下载软件时,用户通过包管理器(yum/apt)向软件包服务器发送查找、下载请求,服务器返回软件包,包管理器负责解决依赖关系并完成下载、安装、卸载等操作。

评估操作系统的好坏,生态是重要因素,包括社区论坛、官网文档、软件体系、维护更新速度、操作系统自身及针对性客户群体等。

软件包可能存在依赖问题,一个软件可能依赖多个库文件,如某软件可能依赖 libc.sossl.so 等。为提高下载速度,可使用国内镜像源,以下是一些国内 Linux 软件安装源的官方链接:

1.3 yum 具体操作

1.3.1 查看软件包

使用yum list命令可列出所有软件包,结合grep命令可筛选关注的包,例如:

cpp 复制代码
# Centos
$ yum list | grep lrzsz 
Lrzsz.x86_64 0.12.20-36.el7 @base

# Ubuntu
$ apt search lrzsz
# 输出省略

注意事项:

  • 软件包名称格式为:主版本号。次版本号。源程序发行号 - 软件包的发行号。主机平台.cpu 架构。
  • "x86_64" 表示 64 位系统安装包,"i686" 表示 32 位系统安装包,需与系统匹配。
  • "el7" 表示 centos7/redhat7,"el6" 表示 centos6/redhat6。
  • 最后一列的 base 表示 "软件源" 名称。
1.3.2 安装软件

通过简单命令即可安装软件,例如安装 lrzsz:

cpp 复制代码
# Centos
$ sudo yum install -y lrzsz

# Ubuntu
$ sudo apt install -y lrzsz

出现 "complete" 字样或无报错说明安装完成。

注意事项:

  • 安装软件需向系统目录写入内容,一般需要 sudo 或切换到 root 账户。
  • yum/apt 需逐个安装软件,同时安装多个会报错。
1.3.3 卸载软件

卸载软件命令如下:

cpp 复制代码
# Centos
sudo yum remove [-y] lrzsz

# Ubuntu
sudo apt remove [-y] lrzsz
1.3.4 注意事项

yum/apt 的所有操作需保证主机网络畅通,可通过ping www.baidu.com验证。

1.4 安装源

Centos 安装源路径:

cpp 复制代码
$ ll /etc/yum.repos.d/
# 显示CentOS-Base.repo(标准源)和epel.repo(扩展源)等

可安装扩展源:sudo yum install -y epel-release

Ubuntu 安装源路径:

复制代码
$ cat /etc/apt/sources.list # 标准源
$ ll /etc/apt/sources.list.d/ # 扩展源

二、编辑器 Vim

2.1 vi 与 vim 的区别

vi 和 vim 都是多模式编辑器,vim 是 vi 的升级版本,兼容 vi 的所有指令,还具有语法加亮、可视化操作等新特性,可在终端、x window、mac os、windows 等环境运行。

2.2 vim 的基本概念

课堂主要讲解三种模式:命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode):

  • 命令模式:控制光标移动,可进行删除、复制等操作,能进入插入模式或底行模式。
  • 插入模式:可进行文字输入,按 ESC 键回到命令模式。
  • 底行模式:可进行文件保存、退出等操作,在命令模式下按 shift+:进入。

2.3 vim 的基本操作

进入 vim:$ vim test.c,默认处于命令模式,需切换到插入模式才能输入文字。

模式切换:

  • 命令模式→插入模式:输入 a、i 或 o。
  • 插入模式→命令模式:按 ESC 键。
  • 命令模式→底行模式:按 shift+;(即输入:)。

退出与保存:在底行模式下,w保存,wq存盘并退出,q!不存盘强制退出。

2.4 vim 正常模式命令集

  • 插入相关:i(从光标处输入)、a(从光标下一位输入)、o(插入新行并从行首输入)。
  • 光标移动:h(左)、j(下)、k(上)、l(右);G(到文尾)、$(到行尾)、^(到行首)等。
  • 删除操作:x(删除光标处字符)、#x(删除光标后 #个字符)、dd(删除当前行)等。
  • 复制粘贴:yw(复制到字尾)、yy(复制当前行)、p(粘贴)。
  • 替换操作:r(替换光标处字符)、R(持续替换至 ESC)。
  • 撤销操作:u(撤销)、ctrl + r(恢复撤销)。

2.5 vim 末行模式命令集

  • 列出行号:set nu
  • 跳至某行:输入行号后回车。
  • 查找字符:/关键字(向后找)、?关键字(向前找),按 n 继续查找。
  • 保存退出:w(保存)、q(退出)、wq(保存退出)。

2.6 vim 配置

  • 系统公共配置文件:/etc/vimrc
  • 用户私有配置文件:~/.vimrc,可设置语法高亮(syntax on)、显示行号(set nu)等。
  • 可安装 TagList、WinManager 等插件增强功能。

三、编译器 gcc/g++

3.1 编译过程

gcc/g++ 编译分为四个阶段:

  1. 预处理:宏替换、去注释、头文件展开等,使用-E选项,生成.i文件。
  2. 编译:生成汇编代码,使用-S选项,生成.s文件。
  3. 汇编:生成机器码,使用-c选项,生成.o文件。
  4. 链接:生成可执行文件,无特殊选项,生成可执行程序。

3.2 动态链接与静态链接

  • 静态链接:将库代码全部加入可执行文件,文件较大,运行时无需库,但更新麻烦。
  • 动态链接:程序运行时加载库,文件较小,节省资源,更为常用。

Linux 下动态库后缀为.so,静态库为.a;Windows 下动态库为.dll,静态库为.lib

3.3 常用选项

包括-E(预处理)、-S(编译)、-c(汇编)、-o(指定输出文件)、-g(生成调试信息)等。

四、自动化构建工具 make/Makefile

4.1 基本概念

make 是命令工具,Makefile 是定义编译规则的文件,两者配合实现项目自动化构建,提高开发效率。

4.2 基本使用

例如,对于myproc.c文件,Makefile 可写为:

复制代码
myproc:myproc.c
    gcc -o myproc myproc.c
.PHONY:clean
clean:
    rm -f myproc

myproc依赖myproc.c,通过gcc命令生成;clean为伪目标,用于清理文件。

4.3 make 工作流程

  1. 在当前目录找 Makefile 或 makefile。
  2. 找到第一个目标文件作为最终目标。
  3. 若目标文件不存在或依赖文件更新时间更新,则执行命令生成目标。
  4. 递归查找依赖关系,直至生成最终目标。

五、Linux 第一个程序:进度条

5.1 相关知识

  • 回车(\r):光标回到行首;换行(\n):光标下移一行。
  • 行缓冲区:输出带\n会刷新缓冲区,否则需用fflush(stdout)手动刷新。

5.2 进度条代码

  • process.c:实现进度条逻辑,包括版本 1 和版本 2 的函数。
  • process.h:声明进度条函数。
  • main.c:调用进度条函数模拟下载过程。
  • Makefile:定义编译规则。

六、版本控制器 Git

6.1 基本概念

Git 是主流版本控制器,可管理文件历史版本,方便多人协作,支持各种格式文件,尤其适合管理源代码。

6.2 安装与使用

  • 安装:yum install git
  • 基本操作(三板斧):
    1. git add:将文件加入暂存区。
    2. git commit -m "日志":提交到本地仓库。
    3. git push:同步到远程仓库。
  • 可配置免密码提交,需设置用户信息(git config --global user.name等)。

七、调试器 gdb

7.1 基本使用

  • 程序需以 debug 模式编译(加-g选项)。
  • 常用命令:
    • gdb binFile:启动调试。
    • l:显示源代码。
    • b 行号:设置断点。
    • r:运行程序。
    • n/s:单步执行(n不进函数,s进函数)。
    • p 变量:打印变量值。
    • q:退出调试。

7.2 高级技巧

  • watch:监视变量变化,值改变时暂停程序。
  • set var:修改变量值。
  • 条件断点:b 行号 if 条件,满足条件时触发。

八、结语

今日C++到这里就结束啦,如果觉得文章还不错的话,可以三连支持一下。感兴趣的宝子们欢迎持续订阅小枫,小枫在这里谢谢宝子们啦~小枫の主页还有更多生动有趣的文章,欢迎宝子们去点评鸭~C++的学习很陡,时而巨难时而巨简单,希望宝子们和小枫一起坚持下去~你们的三连就是小枫的动力,感谢支持~

相关推荐
ypf52083 小时前
OrbStack 配置国内镜像加速
linux
Hello.Reader3 小时前
一文通关 Proto3完整语法与工程实践
java·linux·数据库·proto3
Hello.Reader3 小时前
一文吃透 Protobuf “Editions” 模式从概念、语法到迁移与实战
linux·服务器·网络·protobuf·editions
陌上花开缓缓归以3 小时前
linux ubi文件系统
linux
口嗨农民工3 小时前
exiftool 分析jpeg图片使用
linux
大明者省3 小时前
pycharm解释器使用anaconda建立的虚拟环境里面的python,无需系统里面安装python。
linux·python·pycharm
WillWolf_Wang4 小时前
Linux 编译 Android 版 QGroundControl 软件并运行到手机上
android·linux·智能手机
岚天start4 小时前
Shell脚本一键监控平台到期时间并钉钉告警推送指定人
linux·shell·钉钉告警·计划任务·监控到期·平台到期
白鹭5 小时前
MySQL主从复制进阶(GTID复制,半同步复制)
linux·运维·数据库·mysql·集群