Linux中yum和vim介绍 #114

Open
opened 2024-09-21 17:39:51 +08:00 by 11553092953cs · 0 comments

一、Linux软件包管理器yum

Linux中我们要进行工具/指令/程序的安装、检查、卸载等,需要使用yum软件包管理器。

安装软件的方式:

  • 源代码安装---交叉编译的工具
  • rpm包直接安装
  • yum/apt-get

yum是我们Linux预装的一个指令,用于搜索、下载、安装对应的软件,相当于Linux的应用商店。

yum指令:

  • yum list | grep command(查看软件包)
  • yum install [-y] command(安装) //需要sudo或root权限
  • yum remove command(卸载) //需要sudo或root权限

二、Linux开发工具

1. vim的基本概念

vim是一个多模式的编辑器,主要有命令模式、插入模式和底行模式三种模式。

2. vim的基本操作

  • 正常/命令模式:控制屏幕光标的移动,字符,字或行的删除。
  • 插入模式:文字输入,按ESC键可回到命令模式。
  • 底行模式:文件保存或退出,文件替换,列出行号等,在命令模式下shift+:进入底行模式。

3. vim命令模式命令集

移动光标

  • 使用小写英文字母「h」、「j」、「k」、「l」控制光标左、下、上、右移一格。
  • 按「G」:移动到文章的最后。
  • 按「$」:移动到光标所在行的“行尾”。
  • 按「^」:移动到光标所在行的“行首”。
  • 按「w」:光标跳到下个字的开头。
  • 按「e」:光标跳到下个字的字尾。
  • 按「b」:光标回到上个字的开头。
  • 按「#l」:光标移到该行的第#个位置,如:5l,56l。
  • 按「gg」:进入到文本开始。
  • 按「shift+g」:进入文本末端。
  • 按「ctrl」+「b」:屏幕往“后”移动一页。
  • 按「ctrl」+「f」:屏幕往“前”移动一页。
  • 按「ctrl」+「u」:屏幕往“后”移动半页。
  • 按「ctrl」+「d」:屏幕往“前”移动半页。

删除文字

  • 「x」:删除光标所在位置的一个字符。
  • 「#x」:删除光标所在位置的“后面(包含自己在内)”#个字符。
  • 「X」:删除光标所在位置的“前面”一个字符。
  • 「#X」:删除光标所在位置的“前面”#个字符。
  • 「dd」:删除光标所在行。
  • 「#dd」:从光标所在行开始删除#行。

复制

  • 「yw」:将光标所在之处到字尾的字符复制到缓冲区中。
  • 「#yw」:复制#个字到缓冲区。
  • 「yy」:复制光标所在行到缓冲区。
  • 「#yy」:拷贝从光标所在的该行“往下数”#行文字。
  • 「p」:将缓冲区内的字符贴到光标所在位置。

替换

  • 「r」:替换光标所在处的字符。
  • 「R」:替换光标所到之处的字符,直到按下「ESC」键为止。

撤销

  • 「u」:回到上一个操作。
  • 「ctrl + r」: 撤销的恢复。

更改

  • 「cw」:更改光标所在处的字到字尾处。
  • 「c#w」:例如,「c3w」表示更改3个字。

跳行

  • 「ctrl」+「g」列出光标所在行的行号。
  • 「#G」:例如,「15G」,表示移动光标至文章的第15行行首。
    1

4. vim底行模式命令集

列出行号

  • 「set nu」: 会在文件中的每一行前面列出行号。

跳到文件的某一行

  • 「#」: 在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字15,再回车,就会跳到文章的第15行。

查找字符

  • 「/关键字」: 先按「/」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往后寻找到您要的关键字为止。
  • 「?关键字」:先按「?」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往前寻找到您要的关键字为止。

保存文件

  • 「w」: 将文件保存起来。

离开vim

  • 「q」:退出,如果无法离开vim,可以在「q」后跟一个「!」强制离开vim。
  • 「wq」:在退出的时候还可以保存文件。

5. 简单vim配置

/etc/目录下面有个名为vimrc的文件,这是vim的配置文件。常用配置选项:

  • 设置语法高亮: syntax on
  • 显示行号: set nu
  • 设置缩进的空格数为4: set shiftwidth=4

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

1. gcc

格式

gcc [选项] 要编译的文件 [选项] [目标文件]

预处理(进行宏替换)

  • 预处理功能主要包括宏定义,文件包含,条件编译,去注释等。
  • 预处理指令时以#开头的代码行。
  • gcc -E test.c -o test.i
  • 选项-E的作用是gcc在预处理结束后后停止编译过程。
  • 选项-o是指目标文件,i文件为已经预处理过的原始程序。

编译(生成汇编)

  • gcc检查代码的规范性,语法错误,确定代码实际要做的工作,然后将代码翻译为汇编语言。
  • -S选项值进行编译不进行汇编,生成汇编代码。
  • gcc -S test.i -o test.s

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

  • 汇编是将编译阶段的.s文件转换为目标文件。
  • -c选项可看到汇编代码转化为.o的二进制目标代码。
  • gcc -c test.s -o test.o

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

  • 编译成功后进入链接阶段
  • gcc test.o -o test

条件编译

  • 条件编译是一种在程序源代码中根据特定条件选择性地编译一部分代码的技术。
  • 在C和C++等语言中,条件编译通常使用预处理器指令来实现,例如#ifdef#ifndef#if#elif#endif等。

gcc选项

  • -E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面
  • -S 编译到汇编语言不进行汇编和链接
  • -c 编译到目标代码
  • -o 文件输出到 文件
  • -static 此选项对生成的文件采用静态链接
  • -g 生成调试信息。GNU 调试器可利用该信息。
  • -shared 此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库.
  • -O0 -O1 -O2 -O3 编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高
  • -w 不生成任何警告信息。
  • -Wall 生成所有警告信息。

函数库

  • 函数库分为静态库和动态库,静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,后缀名为.a。
  • 动态库是在程序执行时由运行时链接文件加载库,这样可以节省系统开销,后缀名.so,gcc在编译时默认使用动态库,gcc默认生成的二进制程序,是动态链接的。

四、Linux调试器-gdb使用

Linux gcc出来的二进制程序默认是release模式,要使用gdb调试,必须在源代码生成二进制程序时加上-g选项。

使用

  • 启动gdbgdb 文件名
  • 退出ctrl+dquit

调试命令

  • list/l 行号:显示源代码,接着上次的位置往下列,每次列10行。
  • list/l 函数名:列出某个函数的源代码。
  • r或run:运行程序。
  • n 或 next:单条执行。
  • s或step:进入函数调用。
  • break(b) 行号:在某一行设置断点。
  • break 函数名:在某个函数开头设置断点。
  • info break:查看断点信息。
  • finish:执行到当前函数返回,然后停下来等待命令。
  • print(p):打印表达式的值,通过表达式可以修改变量的值或者调用函数。
  • set var:修改变量的值。
  • continue(或c):从当前位置开始连续而非单步执行程序。
  • run(或r):从开始连续而非单步执行程序。
  • delete breakpoints:删除所有断点。
  • delete breakpoints n:删除序号为n的断点。
  • disable breakpoints:禁用断点。
  • enable breakpoints:启用断点。
  • info(或i) breakpoints:查看当前设置了哪些断点。
  • display 变量名:跟踪查看一个变量,每次停下来都显示它的值。
  • undisplay:取消对先前设置的那些变量的跟踪。
  • until X行号:跳至X行。
  • breaktrace(或bt):查看各级函数调用及参数。
  • info(i) locals:查看当前栈帧局部变量的值。
  • quit:退出gdb。

五、Linux项目自动化构建工具-make/makefile

make是一个命令,makefile是一个文件。

基本概念

第一行为依赖关系,冒号左侧是目标文件,右侧是依赖文件列表,第二行是依赖方法。

工作流程

  1. make会在当前目录下找名字叫“Makefile”或“makefile”的文件。
  2. 如果找到,它会找文件中的第一个目标文件,如“test”,并把这个文件作为最终的目标文件。
  3. 如果test文件不存在,或是test所依赖的后面的test.o文件的文件修改时间要比test这个文件新,那么,他就会执行后面所定义的命令来生成test这个文件。
  4. 如果test所依赖的test.o文件不存在,那么make会在当前文件中找目标为test.o文件的依赖性,如果找到则再根据那一个规则生成hello.o文件。
  5. 你的C文件和H文件是存在的,于是make会生成 test.o文件,然后再用test.o 文件声明 make的终极任务,也就是执行文件test。
  6. 这就是整个make的依赖性,make会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件。
  7. 在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make就会直接退出,并报错。对于所定义的命令的错误,或是编译不成功,make根本不理。
  8. make只管文件的依赖性,即,如果在我找了依赖关系之后,冒号后面的文件还是不在,那么对不起,我就不工作啦。

伪目标

  • 我们这种clean的目标文件,我们将它设置为伪目标,用.PHONY修饰。
  • 伪目标的特性是,总是被执行的。
  • $@$^分别替换了目标文件和依赖文件列表。

## 一、Linux软件包管理器yum Linux中我们要进行工具/指令/程序的安装、检查、卸载等,需要使用yum软件包管理器。 ### 安装软件的方式: - 源代码安装---交叉编译的工具 - rpm包直接安装 - yum/apt-get yum是我们Linux预装的一个指令,用于搜索、下载、安装对应的软件,相当于Linux的应用商店。 ### yum指令: - `yum list | grep command`(查看软件包) - `yum install [-y] command`(安装) //需要sudo或root权限 - `yum remove command`(卸载) //需要sudo或root权限 ## 二、Linux开发工具 ### 1. vim的基本概念 vim是一个多模式的编辑器,主要有命令模式、插入模式和底行模式三种模式。 ### 2. vim的基本操作 - 正常/命令模式:控制屏幕光标的移动,字符,字或行的删除。 - 插入模式:文字输入,按ESC键可回到命令模式。 - 底行模式:文件保存或退出,文件替换,列出行号等,在命令模式下shift+:进入底行模式。 ### 3. vim命令模式命令集 #### 移动光标 - 使用小写英文字母「h」、「j」、「k」、「l」控制光标左、下、上、右移一格。 - 按「G」:移动到文章的最后。 - 按「$」:移动到光标所在行的“行尾”。 - 按「^」:移动到光标所在行的“行首”。 - 按「w」:光标跳到下个字的开头。 - 按「e」:光标跳到下个字的字尾。 - 按「b」:光标回到上个字的开头。 - 按「#l」:光标移到该行的第#个位置,如:5l,56l。 - 按「gg」:进入到文本开始。 - 按「shift+g」:进入文本末端。 - 按「ctrl」+「b」:屏幕往“后”移动一页。 - 按「ctrl」+「f」:屏幕往“前”移动一页。 - 按「ctrl」+「u」:屏幕往“后”移动半页。 - 按「ctrl」+「d」:屏幕往“前”移动半页。 #### 删除文字 - 「x」:删除光标所在位置的一个字符。 - 「#x」:删除光标所在位置的“后面(包含自己在内)”#个字符。 - 「X」:删除光标所在位置的“前面”一个字符。 - 「#X」:删除光标所在位置的“前面”#个字符。 - 「dd」:删除光标所在行。 - 「#dd」:从光标所在行开始删除#行。 #### 复制 - 「yw」:将光标所在之处到字尾的字符复制到缓冲区中。 - 「#yw」:复制#个字到缓冲区。 - 「yy」:复制光标所在行到缓冲区。 - 「#yy」:拷贝从光标所在的该行“往下数”#行文字。 - 「p」:将缓冲区内的字符贴到光标所在位置。 #### 替换 - 「r」:替换光标所在处的字符。 - 「R」:替换光标所到之处的字符,直到按下「ESC」键为止。 #### 撤销 - 「u」:回到上一个操作。 - 「ctrl + r」: 撤销的恢复。 #### 更改 - 「cw」:更改光标所在处的字到字尾处。 - 「c#w」:例如,「c3w」表示更改3个字。 #### 跳行 - 「ctrl」+「g」列出光标所在行的行号。 - 「#G」:例如,「15G」,表示移动光标至文章的第15行行首。 ![1](/attachments/aaf23be4-e2d5-4ca4-af57-4b2c0aa706d5) ### 4. vim底行模式命令集 #### 列出行号 - 「set nu」: 会在文件中的每一行前面列出行号。 #### 跳到文件的某一行 - 「#」: 在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字15,再回车,就会跳到文章的第15行。 #### 查找字符 - 「/关键字」: 先按「/」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往后寻找到您要的关键字为止。 - 「?关键字」:先按「?」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往前寻找到您要的关键字为止。 #### 保存文件 - 「w」: 将文件保存起来。 #### 离开vim - 「q」:退出,如果无法离开vim,可以在「q」后跟一个「!」强制离开vim。 - 「wq」:在退出的时候还可以保存文件。 ### 5. 简单vim配置 在`/etc/`目录下面有个名为`vimrc`的文件,这是vim的配置文件。常用配置选项: - 设置语法高亮: `syntax on` - 显示行号: `set nu` - 设置缩进的空格数为4: `set shiftwidth=4` ## 三、Linux编译器-gcc/g++使用 ### 1. gcc #### 格式 `gcc [选项] 要编译的文件 [选项] [目标文件]` #### 预处理(进行宏替换) - 预处理功能主要包括宏定义,文件包含,条件编译,去注释等。 - 预处理指令时以#开头的代码行。 - `gcc -E test.c -o test.i` - 选项-E的作用是gcc在预处理结束后后停止编译过程。 - 选项-o是指目标文件,i文件为已经预处理过的原始程序。 #### 编译(生成汇编) - gcc检查代码的规范性,语法错误,确定代码实际要做的工作,然后将代码翻译为汇编语言。 - `-S`选项值进行编译不进行汇编,生成汇编代码。 - `gcc -S test.i -o test.s` #### 汇编(生成机器可识别代码) - 汇编是将编译阶段的.s文件转换为目标文件。 - `-c`选项可看到汇编代码转化为.o的二进制目标代码。 - `gcc -c test.s -o test.o` #### 链接(生成可执行文件或库文件) - 编译成功后进入链接阶段 - `gcc test.o -o test` #### 条件编译 - 条件编译是一种在程序源代码中根据特定条件选择性地编译一部分代码的技术。 - 在C和C++等语言中,条件编译通常使用预处理器指令来实现,例如`#ifdef`、`#ifndef`、`#if`、`#elif`和`#endif`等。 #### gcc选项 - `-E` 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面 - `-S` 编译到汇编语言不进行汇编和链接 - `-c` 编译到目标代码 - `-o` 文件输出到 文件 - `-static` 此选项对生成的文件采用静态链接 - `-g` 生成调试信息。GNU 调试器可利用该信息。 - `-shared` 此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库. - `-O0` `-O1` `-O2` `-O3` 编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高 - `-w` 不生成任何警告信息。 - `-Wall` 生成所有警告信息。 #### 函数库 - 函数库分为静态库和动态库,静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,后缀名为.a。 - 动态库是在程序执行时由运行时链接文件加载库,这样可以节省系统开销,后缀名.so,gcc在编译时默认使用动态库,gcc默认生成的二进制程序,是动态链接的。 ## 四、Linux调试器-gdb使用 Linux gcc出来的二进制程序默认是release模式,要使用gdb调试,必须在源代码生成二进制程序时加上`-g`选项。 ### 使用 - **启动gdb**:`gdb 文件名` - **退出**:`ctrl+d`或`quit` ### 调试命令 - `list/l 行号`:显示源代码,接着上次的位置往下列,每次列10行。 - `list/l 函数名`:列出某个函数的源代码。 - `r或run`:运行程序。 - `n 或 next`:单条执行。 - `s或step`:进入函数调用。 - `break(b) 行号`:在某一行设置断点。 - `break 函数名`:在某个函数开头设置断点。 - `info break`:查看断点信息。 - `finish`:执行到当前函数返回,然后停下来等待命令。 - `print(p)`:打印表达式的值,通过表达式可以修改变量的值或者调用函数。 - `set var`:修改变量的值。 - `continue(或c)`:从当前位置开始连续而非单步执行程序。 - `run(或r)`:从开始连续而非单步执行程序。 - `delete breakpoints`:删除所有断点。 - `delete breakpoints n`:删除序号为n的断点。 - `disable breakpoints`:禁用断点。 - `enable breakpoints`:启用断点。 - `info(或i) breakpoints`:查看当前设置了哪些断点。 - `display 变量名`:跟踪查看一个变量,每次停下来都显示它的值。 - `undisplay`:取消对先前设置的那些变量的跟踪。 - `until X行号`:跳至X行。 - `breaktrace(或bt)`:查看各级函数调用及参数。 - `info(i) locals`:查看当前栈帧局部变量的值。 - `quit`:退出gdb。 ## 五、Linux项目自动化构建工具-make/makefile make是一个命令,makefile是一个文件。 ### 基本概念 第一行为依赖关系,冒号左侧是目标文件,右侧是依赖文件列表,第二行是依赖方法。 ### 工作流程 1. make会在当前目录下找名字叫“Makefile”或“makefile”的文件。 2. 如果找到,它会找文件中的第一个目标文件,如“test”,并把这个文件作为最终的目标文件。 3. 如果test文件不存在,或是test所依赖的后面的test.o文件的文件修改时间要比test这个文件新,那么,他就会执行后面所定义的命令来生成test这个文件。 4. 如果test所依赖的test.o文件不存在,那么make会在当前文件中找目标为test.o文件的依赖性,如果找到则再根据那一个规则生成hello.o文件。 5. 你的C文件和H文件是存在的,于是make会生成 test.o文件,然后再用test.o 文件声明 make的终极任务,也就是执行文件test。 6. 这就是整个make的依赖性,make会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件。 7. 在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make就会直接退出,并报错。对于所定义的命令的错误,或是编译不成功,make根本不理。 8. make只管文件的依赖性,即,如果在我找了依赖关系之后,冒号后面的文件还是不在,那么对不起,我就不工作啦。 ### 伪目标 - 我们这种clean的目标文件,我们将它设置为伪目标,用`.PHONY`修饰。 - 伪目标的特性是,总是被执行的。 - `$@`和`$^`分别替换了目标文件和依赖文件列表。 ---
31 KiB
58 KiB
52 KiB
Sign in to join this conversation.
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: HswOAuth/llm_course#114
No description provided.