赞
踩
上次也是结束了权限相关的知识:Linux:权限相关知识详解
yum
-管理软件包的工具Yum(Yellowdog Updater Modified):
Yum是Linux系统中用于管理软件包的工具,类似于手机上的应用商店。是基于 RPM(Red Hat Package Manager)的系统,用于管理 RPM 软件包 ,它提供了一种方便的方式来搜索、下载、安装和卸载软件包,使得软件的管理变得简单而高效。
安装软件的方式:
源代码安装:需要手动下载源代码并进行编译安装,比较繁琐,需要处理依赖关系。
RPM包直接安装:可以直接使用RPM包进行安装,但是需要手动处理依赖关系,不够方便。
Yum(或apt-get):Yum是Linux系统预装的一个命令,也可以通过apt-get在Debian系列的系统中使用。它们提供了一个类似应用商店的方式,通过简单的命令即可搜索、下载、安装和卸载软件包,而且会自动处理依赖关系,非常方便。
注意:
yum
在安装软件时需要从服务器上下载RPM包,并且在同一时刻只能允许一个yum
进程进行安装操作。这是因为yum
在安装过程中可能会修改系统的配置和文件,如果同时有多个yum
进程进行操作,可能会导致不可预测的结果和系统不稳定性。
另外,yum
需要通过网络访问软件源来下载安装软件包
+--------------------------+ +----------------------+
| | | |
| 软件包服务器(软件源) | ---------> | 本地系统、云服务器 |
| | 下载软件包 | |
+--------------------------+ +----------------------+
我们删除,下载时是需要有root权限的。
选项:
-y
或--assumeyes
:在提示时自动回答"yes"。-q
或--quiet
:安静模式,减少输出信息
以下是使用yum的常用操作(这里只介绍部分了):
更新软件包列表:
sudo yum update
这将更新可用软件包的列表,以确保您系统上的所有软件包都是最新的。
搜索软件包:
yum search package_name
使用此命令搜索特定软件包。例如,如果要搜索Apache软件包,可以使用yum search apache
。
安装软件包:
sudo yum install package_name
使用此命令安装特定的软件包。例如,要安装Apache服务器,可以使用yum install httpd
。
更新软件包:
sudo yum update package_name
使用此命令更新特定的软件包。例如,要更新Apache服务器,可以使用yum update httpd
。
删除软件包:
sudo yum remove package_name
使用此命令删除特定的软件包。例如,要删除Apache服务器,可以使用yum remove httpd
。
列出已安装的软件包:
yum list installed
使用此命令列出所有已安装的软件包。
清理缓存:
sudo yum clean all
使用此命令清理Yum缓存,以释放磁盘空间。
各种各样的软件和包服务器由不同的组织、个人或机构提供。这些服务器可以分为两类:基础软件源和拓展软件源。
- 基础软件源:
- 基础软件源通常由Linux发行版的官方团队或相关组织提供,如Red Hat、CentOS、Debian、Ubuntu等。
- 这些软件源提供了操作系统的核心组件、常用工具和基本服务所需的软件包。
- 它们通常包含了操作系统的核心组件、常用工具和基本服务所需的软件包,以确保系统的稳定性和安全性。
- 拓展软件源:
- 拓展软件源是由第三方组织或社区提供的,如EPEL、RPM Fusion等。
- 这些软件源提供了一些官方软件源中没有的软件包,或者提供了更新版本的软件包,以满足用户更多的需求。
- 它们提供了更多的软件选择和功能扩展,如多媒体编解码器、图形界面工具、开发工具等。
我们可以通过:来安装拓展软件源
yum install -y epel-release
使用:yum list | grep vim
该命令用于在 yum 软件包列表中查找包含 “vim” 关键字的软件包。这样做可以过滤出与 Vim 相关的软件包信息,使结果更易于阅读和理解。
yum list
:列出所有可用的软件包。|
:管道符号,将 yum list
的输出作为 grep
命令的输入。grep vim
:使用 grep 工具搜索包含 “vim” 关键字的行。第一列:
软件包名称: 主版本号.次版本号.源程序发行号-软件包的发行号.主机平台.cpu架构.
x86_64
后缀表示64位系统的安装包, “i686” 后缀表示32位系统安装包. 选择包时要和系统匹配第二列:软件包的版本号
第三列:软件包的存储库来源
vim
-多模式的文本编辑器vim(Vi IMproved)是一个功能强大的文本编辑器,常用于在终端中编辑文本文件。它是 Unix 系统下的一个经典编辑器,具有丰富的功能和灵活的配置选项
vim 提供了多种编辑模式,包括普通模式、插入模式、命令行模式(进入默认这个)等,让用户可以高效地进行编辑操作
我们使用: vim 文件名 即可直接进入到文件中
w (保存当前文件)
wq(保存并退出)
当前处于什么模式,在进入vim后,左下角能看到
三种模式之间的切换
在 Vim 中,命令模式(Normal Mode)是默认的模式,在这个模式下你可以执行各种编辑文本的操作。
以下是一些常用的命令模式下的操作:
这些操作都是在 Vim 的命令模式(Normal Mode)下使用的。在命令模式下,你可以通过按下不同的键来执行各种编辑文本的操作。这里详细说明一下你提到的一些常用操作:
进入插入模式(Insert Mode):
i
键进入插入模式,光标将定位到当前位置之前,可以开始插入文字。a
键进入插入模式,光标将定位到当前位置之后,可以开始插入文字。o
键进入插入模式,在当前行的下方插入一个新的空行,光标将定位到新行的起始位置。移动光标:
h
、j
、k
、l
分别向左、下、上、右移动光标。w
和 b
分别跳到下一个单词的开头和上一个单词的开头。^
跳到当前行的第一个非空字符处。$
跳到当前行的最后一个字符处。gg
跳到文件的开头,G
跳到文件的末尾。删除文字:
x
删除光标所在位置的字符,X
删除光标前一个字符。dd
删除当前行,ndd
删除当前行及其后的 n-1 行。复制和粘贴:
yw
复制光标所在位置到单词末尾的内容,yy
复制整行。p
粘贴已经复制或删除的内容到光标位置后。替换:
r
替换光标所在位置的字符。撤销和重做:
u
撤销上一步操作,Ctrl + r
重做上一步操作的撤销。更改:
cw
更改光标所在位置到单词末尾的内容,c#w
更改指定数量的单词。跳转至指定行:
:n
跳转至第 n 行,例如 :15
跳转至第 15 行。在 Vim 编辑器中,插入模式(Insert Mode)是用于输入和编辑文本的模式。在插入模式下,你可以直接在文本中插入、编辑和删除字符,就像在普通的文本编辑器中一样。
在插入模式下,你可以自由地编辑文本,直到按下 Esc
键退出插入模式,回到普通模式(Normal Mode)为止。插入模式是 Vim 编辑器中最常用的模式之一,能够有效地提高文本编辑的效率。
在使用末行模式之前,请确保您已经处于正常模式,按下「ESC」键,然后按下冒号「:」键即可进入末行模式。
要在文件中的每一行前面显示行号,可以使用以下命令:
:set nu
执行上述命令后,编辑器会在每一行前面显示行号。
要跳到文件的特定行,可以在冒号后输入行号,然后按回车键。例如,要跳到第 15 行,可以执行以下命令:
:15
执行上述命令后,编辑器会跳到文件的第 15 行。
Vim 提供了两种查找字符的方式:
/
进行向后查找。?
进行向前查找。例如,要向后查找某个关键字,可以执行以下命令:
/关键字
执行上述命令后,编辑器会开始向后查找包含指定关键字的文本。
如果要向前查找关键字,可以执行以下命令:
?关键字
执行上述命令后,编辑器会开始向前查找包含指定关键字的文本。
要保存文件,可以执行以下命令:
:w
执行上述命令后,编辑器会将文件保存到磁盘上,但不会退出编辑器。
要退出 Vim 编辑器,可以执行以下命令:
:q
执行上述命令后,如果文件未做过修改,编辑器会立即退出。如果文件已经做过修改,编辑器会提示保存文件或者放弃修改。
如果要强制退出而不保存修改,可以执行以下命令:
:q!
执行上述命令后,编辑器会立即退出,且不会保存任何修改。
如果想在退出之前保存文件,可以执行以下命令:
:wq
执行上述命令后,编辑器会保存文件并退出。
这些是一些常用的末行命令,可以帮助您更有效地编辑和管理文件。
批量注释:
- 按下
Ctrl + v
进入可视块模式。- 使用
hjkl
键选择要注释的区域,按j
键向下移动选择。- 按下
Shift + i
进入插入模式,并按下=
符号添加注释符号。- 输入注释符号
//
(或其他符号),然后按下Esc
键退出插入模式。批量去注释:
- 按下
Ctrl + v
进入可视块模式。- 使用
hjkl
键选择已注释的区域。- 按下
d
键删除选择的注释行。- 按下
Esc
键退出可视块模式。
- 按下
Ctrl + v
进入可视块模式。- 使用
hjkl
键选择要注释的区域,按j
键向下移动选择。- 按下
d
就可删除选中的区域
gcc/g++
–Linux编译器gcc和g++是在Linux系统中常用的编译器,用于编译C和C++程序。
- gcc: GNU Compiler Collection(GNU编译器套件),用于编译C程序。
- g++: GNU C++ Compiler(GNU C++编译器),用于编译C++程序。
这两个编译器提供了丰富的功能和选项,可以将源代码文件编译成可执行文件。编译器可以处理多个源文件,并生成相应的目标文件,最后将目标文件链接在一起生成可执行文件。
这里二者用法几乎一样,我举例子用gcc
举例
格式: gcc [选项] 要编译的文件 [选项] [目标文件]
常用的选项:
- -E: 只激活预处理,不生成文件,需要将其重定向到一个输出文件中。
- -S: 将源代码编译成汇编语言文件,但不进行汇编和链接。
- -c: 编译源代码到目标代码,生成目标文件而不进行链接。
- -o: 指定输出文件的名称(重命名生成文件),后面跟着输出文件的路径和名称。
- -static: 采用静态链接,生成的文件使用静态库链接。(自动默认是动态链接)
- -g: 生成调试信息,方便调试器进行调试。
- -shared: 尽量使用动态库,生成文件较小,但需要系统支持动态库。
- -O0, -O1, -O2, -O3: 编译器的优化级别,分别表示没有优化、默认优化级别、优化级别2和优化级别3。
- -w: 不生成任何警告信息
编译过程通常包括以下四个阶段:
预处理(Preprocessing):
#include
)、宏替换(#define
)、条件编译(#ifdef
、#ifndef
等)等。所谓的头文件展开,本质是在预处理的时候,将头文件内容拷贝至源文件
gcc –E hello.c –o hello.i
- 1
选项
-E
,该选项的作用是让 gcc 在预处理结束后停止编译过程。选项
-o
是指目标文件,.i
文件为已经过预处理的C原始程序
编译(Compiling):
gcc –S hello.i –o hello.s
- 1
选项
-S
进行编译而不进行汇编,生成汇编代码
汇编(Assembling):
gcc –c hello.s –o hello.o
- 1
选项
-c
就可看到汇编代码已转化为.o
的二进制目标代码了
连接(Linking):
gcc hello.o –o hello
- 1
注意这里是
hello.o
的二进制代码文件
本质都是文件
定义:静态库是一组已编译的目标文件(通常以.a
为后缀),其中包含了函数和数据,可以被多个程序使用。
特点:
使用方法:在编译时,通过链接器将静态库与目标文件链接成一个可执行文件。
定义:动态库是一组已编译的目标文件(通常以.so
为后缀),其中包含了函数和数据,可以被多个程序使用。
特点:
使用方法:在编译时,通过链接器将动态库与目标文件链接成一个可执行文件,并在程序运行时由动态链接器动态加载。
在Linux里,gcc默认是进行动态链接的,使用动态库。想要使用静态链接,可以用:
gcc test.c -static
- 1
make
是一个用于自动化构建项目的工具,通常配合一个名为 Makefile
的文件使用。Makefile
文件包含了一系列规则和命令,描述了项目中各个文件之间的依赖关系以及如何构建和编译项目。
以下是 Makefile
文件的基本结构:
target: dependencies
command
target
是一个需要构建的目标文件名,可以是可执行文件、目标文件或者是伪目标(如 clean
等)。dependencies
是构建 target
所依赖的文件列表。command
是构建 target
所执行的命令。例如,下面是一个简单的 Makefile
文件示例:
test_make:test.c
gcc -o test_make test.c
clean:
rm -f test_make
在Makefile中,依赖关系表示目标文件依赖于哪些其他文件,而依赖方法表示如何生成目标文件
依赖关系:
依赖方法:
上面的例子里:
在这个简单的Makefile中,存在一个目标文件
test_make
和一个伪目标文件clean
。下面是它们的依赖关系和依赖方法的解释:
- 依赖关系:
- 目标文件
test_make
的依赖关系是源文件test.c
。这意味着在生成test_make
目标文件之前,必须先生成test.c
文件。- 由于
test_make
是一个可执行文件,它依赖于test.c
文件的存在和正确性。如果test.c
发生了变化(例如,被修改或重命名),则需要重新生成test_make
。
- 依赖方法:
- 对于目标文件
test_make
,依赖方法是通过gcc
编译器将test.c
源文件编译为可执行文件test_make
。
- clean目标:
- 伪目标
clean
并没有实际的依赖关系,因此它不会触发任何依赖方法。- 依赖方法
rm -f test_make
是用来清理目标文件的命令。当执行make clean
命令时,它将删除名为test_make
的文件。
- Makefile的扫描:
- Makefile 是用来指导
make
工具构建目标文件的文件。当你执行make
命令时,make
工具会查找当前目录下的名为Makefile
或makefile
的文件,并按顺序执行其中定义的目标。- 在默认情况下,
make
工具会从上到下扫描Makefile文件,并构建第一个目标。这意味着,如果你在Makefile中定义了多个目标,只有第一个目标会被构建。
- 如何确定目标文件是否最新:
- 当你执行
make
命令时,make
工具会比较每个目标文件和它所依赖的源文件的修改时间。如果源文件的修改时间比目标文件的修改时间更晚,或者目标文件不存在,make
工具会执行构建该目标文件的命令。否则,如果目标文件的修改时间比源文件的修改时间更晚,make
工具认为该目标文件是最新的,不需要重新构建。- 对于可执行文件来说,
make
工具也会比较可执行文件和它所依赖的源文件的修改时间。如果可执行文件的修改时间比源文件的修改时间更晚,或者源文件的修改时间比最新的可执行文件的修改时间更晚,那么make
工具会重新构建可执行文件。
伪目标是 Makefile
中的一种特殊类型的目标,它不表示一个真实的文件,而是表示一个命令序列或操作。使用伪目标可以告诉 make
工具,该目标不对应任何实际文件,因此总是需要执行其后定义的命令。这在执行一些通用操作,比如清理、打包等情况下非常有用。
在 Makefile
中,使用 .PHONY
来声明一个目标为伪目标。这样,当 make
命令执行时,就会忽略目标对应文件的存在与否,直接执行后续定义的命令。
.PHONY: clean
clean:
rm -f *.o
clean
是一个伪目标,它不代表任何实际文件。无论是否存在名为clean
的文件,执行make clean
命令时,都会执行rm -f *.o
命令来清理所有.o
文件。
$@
和 $^
是 make
中的自动化变量,用于表示目标和依赖的列表。具体含义如下:
$@
表示目标文件的名称。$^
表示所有依赖文件的列表。这些自动化变量通常用于构建命令中,以方便地引用目标和依赖文件。例如:
test: test.c
gcc -o $@ $^
$@
会被替换为目标文件test
,$^
会被替换为所有依赖文件列表,即test.c
。因此,执行make test
命令时,相当于执行gcc -o test test.c
,将test.c
编译成可执行文件test
。
当你输入 make
命令时,make
工具会在当前目录下查找名为 Makefile
或 makefile
的文件。
如果找到了 Makefile
文件,make
将会查找文件中的第一个目标(target),并把它作为最终的目标文件。
如果该目标文件不存在,或是其依赖的文件比目标文件的修改时间新(包括依赖的文件和目标文件本身),那么 make
将会执行后面定义的命令来生成目标文件。
如果目标文件的依赖文件也不存在,那么 make
将会在当前文件中查找目标文件的依赖性,并根据规则生成缺失的依赖文件。
当所有依赖关系都得到满足后,make
会按照依赖关系逐层构建,直到生成最终的目标文件。
如果在查找依赖关系的过程中遇到错误,比如某个被依赖的文件找不到,make
会直接退出并报。但对于生成目标文件时出现的错误,或编译不成功的情况,make
不会立即退出,而是继续执行后续的规则。
make
工具只关心文件之间的依赖关系,如果依赖关系满足,就会执行后续的命令来生成目标文件。如果依赖关系不满足,make
将不会进行后续操作。
好啦这次就先到这里了,下次会给大家带来进程相关的知识啦!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。