Linux 新手救命指南!软件安装 + vim 操作 + gcc 编译,一篇搞定基础应用链----《Hello Linux!》(4)

前言

刚上手 Linux 时,你是不是也陷入过这些 “手足无措” 的瞬间?想装个软件,分不清该用源码编译还是 yum,搜教程越看越乱;用 vim 打开文件,半天找不到 “退出” 按钮,只能强行关窗口;用 gcc 编译代码,只知道生成 a.out,遇到 “链接错误” 就慌了神;别人说 “动态链接省空间”,你却连 “动态库和静态库有啥区别” 都搞不清……

其实 Linux 基础工具的核心逻辑一点都不复杂 —— 难的是没人把 “软件安装→文件传输→代码编辑→编译链接” 这一套流程串起来,讲清每个步骤的 “为什么” 和 “避坑点”。

这篇文章就是给新手的 “保姆级工具手册”:从软件安装的 3 种方式(yum 最省心、rpm 需手动、源码要编译)讲起,教你用 rz/sz 传文件(附 lrzsz 安装方法);再拆透 vim 的 3 大模式(命令 / 插入 / 底行)和必背快捷键(批量注释、光标跳转、撤销恢复);最后带你走通 gcc 编译的 4 个步骤(预处理→编译→汇编→链接),搞懂动静态链接的区别(为什么静态链接程序大却不依赖库)。

每个操作都附具体命令(比如 yum install -y lrzsz、gcc text.c -o text),每个易踩的坑都标红提醒(比如 vim 模式不能直接切换、yum 要联网、静态库需单独装)。不管你是刚学 Linux 的学生,还是需要用 Linux 做开发的新人,跟着走一遍,就能摆脱 “遇事就搜” 的困境,把基础工具用得顺手又扎实。

Linux安装软件的几种方法

Linux安装软件的几种方法:

1.源代码安装 2.rpm安装 3.yum安装-这个就相当于windows的应用商城(自己一般用这个)

rz和sz指令

rz :从本地上传文件到远程 Linux 服务器(拖拽方式)

但是rz一般用的 rz -E这样进行转义字符处理

sz:从远程 Linux 服务器下载文件到本地计算机

这俩的使用前提:Linux要安装lrzsz

yum指令

在使用yum时要保证虚拟机网络畅通

可以用这个命令检验下:ping www.baidu.com
如果持续收到 64 bytes from... 这类回复,说明网络能连通到目标服务器
但是自己买的那种服务器一般没问题

在这里插入图片描述

看yum能安装啥软件:yum list 通常用管道去筛选自己需要的包

eg: yum list | grep lrzsz

在这里插入图片描述

“x86_64” 后缀表示64位系统的安装包

0.12.20-36表示软件的版本

“el7” 表示操作系统发行版的版本 --centos7

, base 表示的是 “软件源” 的名称 --比如:华为应用商店

yum下载和卸载软件

下载的话用yum install [-y] 要下载的东西eg:lrzsz.x86_64

-y的话就不会再次问你要不要下载了

当然 输 yum install -y lrzsz也行

卸载的话是yum remove [-y] 要卸载的东西

注意:1.yum安装软件只能一个装完了再装另一个,但是卸载可以同时卸载

2.yum要root权限或者sudo放权才行

引申:1.ls /etc/yum.repos.d/可以看yum有啥下载链接

2.扩展yum源的安装yum install -y epel-release

在这里插入图片描述

yum源的概念:一个存放各种软件包的 “仓库”

引申:一般Linux操作系统,默认配置的yum源是国外的,访问会比较慢–如果是虚拟机的话,需要自己替换成国内的yum源,但是服务器的话,一般厂商会替换好了的

vim指令

Vim是个多模式的编译器

输入vim 文件名后就会就进入vim全屏幕编辑画面

这里的文件如果不存在的话,vim会创建一个空的出来用,但是如果出去都没保存的话,最后会连空文件都没有

在这里插入图片描述

上面是各个模式间的切换方法(命令模式又叫正常模式)

注意:插入模式和底行模式间不能直接切换

第四种模式:shift+R:替换模式,对内容进行整体替换

(就是直接在原有的上面写,原有的直接没了)

Vim进行多文件操作的方法:

在底行模式输入vs 文件名,能把那个文件也打开(规则跟vim打开的那个一样)

然后ctrl+ww可以进行窗口光标的切换

光标显示在哪个窗口,进行的操作就是对哪个窗口的

Vim三个模式下的一些键位的功能

命令模式:

gg:定位光标到最开始行
shift+g(输大写的G一个效果):定位光标到最结尾行
n+shift+g:定位光标到第n行
shift+6(其实就是^):定位光标到当前行开头
shift+4(其实就是$):定位光标到当前行结尾
w:光标按单词为单位进行向左移动   b:光标按单词为单位进行向右移动
(如果那个东西不是单词的话,就按字符为单位移动)
h:光标按字符为单位进行向左移动    l:光标按字符为单位进行向右移动
j:光标按字符为单位进行向下移动    k:光标按字符为单位进行向上移动
(hl左右 jk上下   其实用键盘上的上下左右键也行,但是不方便)
(也不建议用鼠标的滚轮)
nyy:复制光标所在行及下面一共n行(直接yy则1行)
ndd:剪切光标所在行及下面一共n行(直接dd则1行)--也能用于删除
np:粘贴粘贴版的内容到光标的下一行及之后n次(直接p则1次)
(这个粘贴版上的必须要是Vim里面用yy和dd搞的才行)
u:撤销上一次的操作   ctrl+r:撤销上一次的撤销
shift+`:进行大小写转换--一直按住,光标移动到的地方都会变
nr"字符":对光标字符及之后的字符一共n个进行批量化替换(都替换成"字符")
nx:对光标字符及之后字符一共n个字符进行删除
!:暂时跳出 Vim,执行系统命令   比如:! man 3 printf

底行模式:

w:保存文件 q:退出文件(注意是q不是p)

wq:保存并退出文件(连着输! 在页面显示的是:wq)

后面加!(w! q! wq!)的话就是强制…

引申:Linux删除的话是删除的光标前一个的东西

    Linux写入的话是光标在的那个位置写入东西(没东西时),有东西的话也是在这个位置前插入

想对代码进行批量注释:

1.命令模式下ctrl+v,然后HJKL来选中区域(一行选中两个字符长度就行了)

2.再用shift+i切到插入模式,输入//,再切到命令模式就行了

取消批量化注释:

1.命令模式下ctrl+v,然后HJKL来选中区域(把//选中)

2.输入d就行了

Vim的配置

在目录 /etc/ 下面,有个名为vimrc的文件,这是系统中公共的vim配置文件,对所有用户都有效。

而在每个用户的主目录下,都可以自己建立私有的配置文件,命名为:.vimrc。比如: /root目录下,通常已经存在一个.vimrc文件,如果不存在,则创建之。比如:touch .vimrc

但是,建议一个用户一个vim配置文件,这样不会相互影响,还有就是不要给root做配置,很麻烦

常用的配置选项:自己还想要其他的话,就上网搜(写在.vimrc里面!)

设置语法高亮: syntax on

显示行号: set nu

设置缩进的空格数为4: set shiftwidth=4

自己比较推荐的话是gitee上HGtz2222大佬的配置

在这里插入图片描述

他的配置下的这个install.sh不建议删除,隐藏起来就行了

Linux编译器-gcc/g++使用

gcc是针对于C语言的 g++是C++和C都可以用,但是C一般用gcc

gcc和g++的用法是相同的,下面就拿gcc举例了

但是:C/C++开发环境不仅仅指的是vs,gcc、g++,更重要的是,语言本身的头文件和库文件

背景知识

一份代码成为一个可执行程序需要经历的步骤

1.预处理

2.编译(生成汇编)

3.汇编(生成机器可识别代码)

4.链接(生成可执行文件或库文件)

预处理里面要进行:

1.去注释 2.头文件展开 3.条件编译 4.宏替换

条件编译的作用举例:根据不同的编译条件,进行功能的裁剪啥的

用法

gcc的格式:gcc [选项] 要编译的文件 [选项 目标文件] [-g] [-static]

加上-static之后所有的链接都会变成静态链接

在后面还能加eg:-std=c98

默认是用release方式发布的,加了-g就是debug版本了

想一步到位的话就: eg:gcc text.c -o text (不要记其他乱七八糟的写法)

比如:   gcc text1.c text2.c -o text
引申: text1.c中的函数,全局变量想在text2.c中可以用的话常用方法是在.h文件中声明一下
(全局变量的话要用extern声明)

如果没有要求目标文件的文件名的话,默认是叫a.out

这个可执行程序的运行:eg:./a.out

引申:也就是如果要执行程序,则需要写出程序的相对路径或绝对路径

预处理:

gcc -E text.c -o text.i

到编译结束:

gcc -S text.i -o text.s
当然,也可以直接传text.c进来

到汇编结束:

gcc -c text.s -o text.o
当然,也可以直接传text.c这些进来

引申:这里的text.o文件叫做可重定位二进制文件,简称目标文件,(也就是.obj文件)

这个文件不能独立执行,需要经过连接才能执行

有可执行权限和有可执行能力是两码事!

到链接结束:(将目标文件和库进行连接形成可执行程序)

gcc text.o -o text
当然,也可以直接传text.c这些进来

引申:1.-o 是 gcc 的一个选项,作用是 指定输出文件的名称

    2.上面的简记:`ESc    iso(文件的后缀应该加啥)`

gcc的选项还有比如:-g:生成带有调试信息的可执行文件

                            `-static`:使用静态链接

动态链接和静态链接

.o文件通过动态链接和动态库相连,连接完之后对应的动态库不能缺失,不然会出问题

(通过动态链接跳转到动态库中去执行,执行完再返回代码调用处)

编译器在对.o文件使用静态库进行静态链接时,会将库的方法拷贝到目标程序中,这个程序以后就不用依赖静态库了

在Linux中,编译形成可执行程序,默认采用的就是动态链接

如果想要按照静态链接的方式,需要添加-static选项

引申:一个可执行程序里面不一定是全部动态链接或者全部静态链接

动态库(也叫共享库)和静态库

库的概念:就是把源文件(.c文件)经过一定的翻译,然后打包–只给别人库文件可以达到隐藏源文件的目的(库本质就是一个文件)

库有自己的命名规则:eg:libname.so.xxx

name那个位置的才是库的名字,xxx那个位置是其版本号,lib是Linux库文件名的固定前缀,so表示是动态库

Linux下,.so是动态库,.a是静态库

一般系统默认会把动态库安装好,静态库不会

安装静态库的方法:yum install -y glibc-static --C的静态库

                           `yum install -y libstdc++-static`--C++的静态库

如果没有静态库,但是用了-static,是不行的

如果没有动态库,只有静态库,用默认方式–是可以的

(因为gcc只是默认优先动态链接而已)

动态库vs静态库

动态库是共享库,优点:可以有效的节省资源(比如:磁盘空间,内存空间,网络空间)

                         缺点:动态库一旦缺失,会导致各个程序都无法运行

静态库:优点:不依赖库,程序可以独立运行

       缺点:体积大,比较消耗资源

debug版本和release版本

debug版本可以被追踪调试 release版本不可以,但是快

而且debug版本形成可执行程序的时候添加了debug信息,体积会大些

扩展:

可执行程序形成的时候,不是无序的二进制构成,是由自己的格式的(ELF格式)

posted on 2025-12-05 10:40  ljbguanli  阅读(7)  评论(0)    收藏  举报