Quick Start
1. 何为 Linux
严格意义上,Linux 是内核,其本身并不是一个操作系统。但是,在流行用法中,Linux 通常表示围绕 Linux 内核构建的操作系统,实际上使用 GNU/Linux 更为准确,GNU 系统是由 GNU corelibs、shell 工具组和主要系统部件组成的、向上兼容 Unix 的、符合 POSIX 定义的完整操作系统,而 GNU/Linux 表示此系统的内核为 Linux。同时,存在众多 GNU/Linux 发行版,比如 Ubuntu、CentOS 等等。
关键词:Unix、POSIX、GNU、Linux、GNU/Linux、发行版
- 1969 年,贝尔实验室(所属 AT&T 公司)的 Ken Thompson、Dennis Ritchie 和 Douglas McIlroy 开发了 UNIX 操作系统。初期,UNIX 发展动力源于科研与兴趣,在研究机构与大学中流传。然而,在 20 世纪 70 年代,AT&T 公司开始注意到 UNIX 所带来的商业价值并开始寻找一些手段来保护 UNIX ,包括通过许可证方式教学使用 UNIX 的源码。在 20 世纪 80 年代,UNIX 发展为有两个最主要的版本线,加州大学伯克利分校的 BSD(Berkeley Software Distribution) UNIX 和 AT&T 的 UNIX。
- 由于各版本的 UNIX 各自发展,呈现的差异越来越大,以至于相同的源代码无法在不同的 UNIX 上编译成功。因此,IEEE 于 1985 年牵头设立了 “可移植操作系统接口”标准(Portable Operating System Interface,POSIX,后面的 X 是为了表明其对 UNIX API 的传承),此标准的目的保证软件系统接口规范的一致性,从而保障程序代码的兼容性。由此,各个版本的 UNIX 为了兼容性纷纷加入对 POSIX 的支持。
- Richard Matthew Stallman 因不满意 UNIX 系统的封闭源码,于 1984 年发起了 GNU 计划(GNU is Not Unix,首字母递归缩写),以开发一个完全兼容 UNIX 的操作系统 GNU,其中 Hurd 为系统内核,为此专门成立了自由软件基金会(Free Software Foundation,FSF)。FSF开发出了很多极其优秀的软件,名字和UNIX下的都相似甚至相同,从而保持软件一致性、降低用户学习成本,尤其是 bash、Emacs文本编辑器、gcc编译套件、各种开发库等更让很多程序员爱不释手。但是 Hurd 内核却进展缓慢,直到 GNU软件完成计划的 90% 以上,Hurd 还是没什么起色。
- 1991 年,Linus Torvalds 在学习老师的 Minix 系统时(UNIX 的变种版本,一般仅用于计算机教学),对其禁止用于商业目的十分不满,便开发了自己的操作系统内核 Linux,此内核支持 POSIX 标准,完全兼容 UNIX。
- 1992 年,Linux Torvalds 在 GPL 协议(GNU General Public License )下发布新版 Linux。Linux 需要与 GNU 共同使用(使用 gcc 编译器、bash 等等),并且 GNU 缺少可用内核,两者便在一起打包发布,即 GNU/Linux。
- Linux 发行版是一个由 Linux 内核、GNU 工具、附加软件和软件包管理器组成的操作系统,它也可能包括显示服务器和桌面环境,以用作常规的桌面操作系统。主流 Linux 发行版有 Ubuntu、RedHat、CentOS 等等。
2. 获取 Linux
获取 Linux 有以下方式:
- 实体机安装
- 虚拟机安装
- 云服务器
上述三种方式在网上皆有诸多教程,便不再赘述。在实体机 / 虚拟机安装需要提前准备好系统镜像,可去各发行版官网获取,比如 Ubuntu 下载地址:https://cn.ubuntu.com/download。
远程登录 Linux 是日常常用功能,具体操作见此文章:Linux - 1. 远程登录。
3. 何为 Shell
3.1. Shell 程序
在操作系统中,真正能控制计算机硬件(CPU、内存、显示器等)的只有内核(Kernel)。但是,由于安全、复杂、繁琐等原因,用户不能直接接触内核(也没有必要),需要另外再开发一个程序,让用户直接使用这个程序间接操控内核。该程序的作用就是接收用户的操作,并进行简单的处理,然后再传递给内核,这样用户就能间接地使用内核了。在 Linux 中,Shell 就是这个应用程序。
Shell 是一个用户与操作系统之间交互的命令解释器,它连接了用户与 Linux 内核,会去调用内核暴露的接口(即函数)来使用内核,让用户能够更加高效、安全、低成本地使用 Linux 内核。注意,Shell 不属于内核,是在内核基础上编写的应用程序。
Linux 中有以下几种常见 Shell,Linux 发行版的默认 Shell 一般为 bash。
Shell | 路径 | root 用户提示符 | 非 root 用户提示符 |
---|---|---|---|
Bourne shell (sh) | /bin/sh and /sbin/sh | # | $ |
GNU Bourne-Again shell (bash) | /bin/bash | bash-VersionNumber# | bash-VersionNumber$ |
C shell (csh) | /bin/csh | # | % |
Korn shell (ksh) | /bin/ksh | # | $ |
Z Shell (zsh) | /bin/zsh | # | % |
使用echo $SHELL
可查看所使用的 shell 是什么。
3.2. Shell 脚本
Shell 脚本(shell script),是一种为 Shell 编写的脚本程序,因此 Shell 还指 Shell 脚本语言。
关于 Shell 编程可见此文章:Linux - 3. Shell编程。
4. 使用 Shell
4.1. 内置命令与外部命令
用户通过命令使用 Shell,在 Shell 中使用的命令分为内置命令与外部命令。
4.1.1. 内置命令
- Shell 自带的命令称为内置命令,实质上就是 Shell 程序内部的一个函数。
- 当 Shell 启动后,内置命令对应代码(即函数代码)就加载到内存中,因此使用内置命令执行。但是,内置命令不宜过多,过多的内置命令会导致 Shell 程序本身体积膨胀,运行 Shell 程序后就会占用更多的内存。Shell 是一个常驻内存的程序,占用过多内存会影响其它的程序。
- 查看内置命令:
help
4.1.2. 外部命令
- 外部命令实质上是外部应用程序,一个命令对应一个应用程序,命令名与程序执行文件名相同。
- 执行外部命令会触发磁盘 I/O,还需要 fork 出一个单独的进程来执行,执行完成后再退出,因此外部命令执行速度慢。
- 外部应用程序的执行文件路径会存储在名为 PATH 的环境变量中,不同的路径之间以
:
分隔,Shell 会从中查找外部命令,然后执行,如果未在其中找到,便会报错。执行外部命令时不但。 - 查看 PATH 环境变量值:
echo $PATH
- 使用
type
命令可以查看命令类型,内部命令会返回XXX is a shell builtin
,外部命令会指明其执行文件路径:XXX is /xxx/xxx/xxx
。
4.2. 命令选项与参数
命令后可跟选项与参数,使用空格进行分隔,使用-
或--
标志选项,如命令名 -选项1 参数1 -选项2 参数2
。
内置命令后面附带的所有数据(所有选项和参数)最终都以参数的形式传递给了函数,外部命令后面附带的所有数据(所有选项和参数)最终都以参数的形式传递给了应用程序中的入口函数**int main(int argc, char *argv[])**
。因此,不管是内置命令还是外部命令,它后面附带的数据最终都以参数的形式传递给了函数。实现一个命令的一项重要工作就是解析传递给函数的参数。
注意,命令后面附带的数据并不是被合并在一起,作为一个参数传递给函数的;这些数据是由空格分隔的,它们被分隔成了几份,就会转换成几个参数。例如命令名 -选项1 参数1 -选项2 参数2
要向函数传递 4 个参数,命令名 -选项1 参数1
要向函数中传递 2 个参数。同时,-
也会传入作为参数的一部分传入函数,其可用来区分该参数是否是命令的选项。
4.3. 使用帮助
Linux 中有诸多命令,可以通过以下方式获取各命令的使用帮助。
help 命令名
:对于内置命令,可以使用此方式查看帮助。命令名 --help
:对于外置命令,可以使用此方式查看帮助。man 命令名
:内置命令和外部命令都可以使用此方式查看帮助,且帮助内容更多。
4.4. 命令大全
5. 开机、关机与重启
5.1. 开机
Linux 开机过程如下所示:
- 硬件启动:加载 BIOS,读取 MBR;
- Boot Loader 阶段:加载 Boot Loader;
- Kernel 阶段:加载并启动 Kernel;
- init 阶段:执行 init 程序;
- 启动终端,用户登录。
在开机时,Linux 需要启动诸多程序,即守护进程(daemon),init 进程的一大任务就是运行守护进程。但是,不同的场合需要启动不同的程序,比如用作服务器时,需要启动 Apache,用作桌面就不需要。Linux 允许为不同的场合,分配不同的开机启动程序,这就叫做运行级别(runlevel)。也就是说,启动时根据运行级别,确定要运行哪些程序。
运行级别在 init 阶段通过读取 /etc/inttab 文件获取,Linux 的运行级别设定如下:
- 0:关机
- 1:单用户模式
- 2:无网络支持的多用户模式
- 3:有网络支持的多用户模式
- 4:保留,未使用
- 5:有网络支持有X-Window支持的多用户模式
- 6:重新引导系统,即重启
5.2. 关机与重启
当关机或者重启时,都应该先执行sync
命令,此命令把内存的数据写入磁盘,防止数据丢失。
还有以下关于关机、重启的命令:
shutdown
:关机reboot
:重启halt
:关闭系统(不会关闭电源)poweroff
:关机
6. 文件管理
6.1. 一切皆文件
在 Linux 中,一切皆文件,即所有、任意、一切东西(比如进程、硬件设备等等)都被抽象成了文件,可以通过文件的方式访问、管理它们。
6.1.1. 树状目录结构
在 Linux 中,文件系统采用级层式的树状目录结构,所有的文件和目录都被组织成以一个根节点开始的倒置的树状结构。
文件系统的最顶层是由根目录开始的,系统使用 **/**
来表示根目录。在根目录之下的既可以是目录,也可以是文件,而每一个目录中又可以包含子目录文件。如此反复就可以构成一个庞大的文件系统。
在Linux文件系统中有两个特殊的目录:
- 当前目录:一个用户所在的工作目录,也叫当前目录,可以使用
.
来表示,也可以使用./
来表示。 - 父目录:当前目录的上一级目录,也叫父目录,可以使用
..
来表示,也可以../
来代表。
相对路径与绝对路径:
- 绝对路径:路径的写法,由根目录
/
写起,例如:/usr/share/doc
这个目录。 - 相对路径:路径的写法,不是由
/
写起,例如由/usr/share/doc
要到/usr/share/man
底下时,可以写成:cd ../man
,这就是相对路径的写法。
6.1.2. 隐藏目录或文件
如果一个目录或文件名以一个点 .
开始,表示这个目录或文件是一个隐藏目录或文件(如:.bashrc)。即以默认方式查找时,不显示该目录或文件。
6.1.3. 索引结点、软连接、硬链接
索引结点(index node,inode)是用于存储文件或目录元信息的数据结构称,包含以下信息:
- 文件类型,权限,UID,GID
- 链接数(指向这个文件名路径名称个数)
- 该文件的大小和不同的时间戳
- 指向磁盘上文件的数据块指针
- 有关文件的其他数据
Linux 链接分两种:
- 硬链接(Hard Link),指向索引结点。在 Linux 中,多个文件名指向同一索引节点是存在的。比如:A 是 B 的硬链接(A 和 B 都是文件名),则 A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号相同,即一个 inode 节点对应两个不同的文件名,两个文件名指向同一个文件,A 和 B 对文件系统来说是完全平等的。删除其中任何一个都不会影响另外一个的访问。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。
- 软连接(Soft Link),又称符号链接(Symbolic Link),指向硬链接。软链接文件有类似于 Windows 的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。比如:A 是 B 的软链接(A 和 B 都是文件名),A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号不相同,A 和 B 指向的是两个不同的 inode,继而指向两块不同的数据块。但是 A 的数据块中存放的只是 B 的路径名(可以根据这个找到 B 的目录项)。A 和 B 之间是“主从”关系,如果 B 被删除了,A 仍然存在(因为两个是不同的文件),但指向的是一个无效的链接。
6.2. 文件基本属性
上图的第1列为10个字符,含义如下:
- 第 0 位表示文件类型
- 当为 d 则是目录
- 当为 - 则是文件;
- 若是 l 则表示为链接文档(Link file);
- 若是 b 则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
- 若是 c 则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
- 第 1-3 位表示**属主(User)**拥有该文件的权限。
- 第 4-6 位表示**属组(Group)**拥有该文件的权限。
- 第 7-9 位表示**其他用户(Other)**拥有该文件的权限。
第3列为文件属主,即文件所属用户,第4列为文件属组,即文件所属用户组。一般文件的创建用户为该文件的所属用户,而创建用户所属的用户组就是文件所属用户组。
6.3. 常用命令
管理目录
- ls(list file):列出文件
- cd(change direcory):变更目录
- pwd (print work directory):显示出当前工作目录的绝对路径
- mkdir(make directory):新建目录
- rmdir(remove directory):删除目录
- cp(copy file):复制文件
- rm(remove):删除文件
- mv(move):移动文件
创建文件
- touch:修改文件或目录的时间属性,若文件不存在,则创建文件
- ln(link):创建链接
查看文件内容
- cat(concatenate ):接文件并打印到标准输出设备
- tac:
- more:
- less:
- head :
- tail:
更改文件属性
- chown(change owner):更改文件或目录所属用户
- chgrp(change group):更改文件或目录所属用户组
- chmod(change mode):控制用户对文件的权限
文本文件编辑器
7. 用户管理
7.1. 用户与用户组
Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。不同的用户是拥有各自不同的权限的,Linux通过权限的划分和管理来实现多用户、多任务的运行机制。
7.1.1. 用户
用户账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。
Linux 用户拥有以下属性:
- 用户名。每个用户拥有唯一的用户名。
- 口令。每个用户拥有各自的口令。
- 用户标识号(UserID,UID)。UID 的作用是标识用户,范围为 0- 65535。操作系统实际读取的是UID,而非用户名。
- 组标识号(Group ID,GID)。每个用户可以同时属于一个主组,以及一个或多个附加组,一个用户最多有 31 个附加组。
- 主目录。每个用户账号都有一个属于自己的主目录,一般与登录名同名。成功登录后会进入主目录。
- 登录 Shell。每个可登录用户拥有一个指定的 Shell 环境
- 注释型描述。
Linux 中有以下三种类型的用户:
- 超级用户(管理员):享有最高权限,具备系统中的所有权限(一般为root),UID 为 0
- 普通用户:有权限限制,只能对自己目录下的文件进行操作,可以登录系统,UID 为 [500, 65535]
- 系统用户:别称“伪用户”,无法登录系统,一般系统默认持有如 bin、nobody 等,其主要作用是支撑系统运行,方便系统管理,UID为 [1, 499]
7.1.2. 用户组
用户组是具有相同特征用户的逻辑集合,用于批量管理用户。从用户角度,用户组可以分为主组(Primary Group)与附加组(Supplemental Group)。
在创建用户时,如果没有指定用户所属用户组,就会自动的创建一个同名的用户组,这个用户组则是一种私有用户组,当有其他用户加入这个组时,私有用户组就会变成普通用户组。
用户和用户组的关系可以分为一对一、一对多、多对一、多对多。
- 一对一:一个用户可以只位于一个用户组中(只要是个用户,肯定有归属的用户组)。
- 一对多:一个用户可以归属于多个不同的用户组。
- 多对一:多个用户可以归属于同一个用户组(最常见)。
- 多对多:多个用户可以归属多个不同的用户组。
7.2. 与用户相关的系统文件
- /etc/passwd 文件为用户的配置文件,记录用户的各种信息。/etc/passwd 中一行记录对应着一个用户,每行记录又被冒号
:
分隔为7个字段,其格式和具体含义如下:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
。 - /etc/shadow 文件用于存放用户加密后的口令及相关信息。/etc/shadow 中的记录行与 /etc/passwd 中的一一对应,它由 pwconv 命令根据 /etc/passwd 中的数据自动产。记录格式:
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
。 - /etc/group 文件存放用户组的所有信息。记录格式:
组名:口令:组标识号:组内用户列表
。 - /etc/gshdow 文件存放用户组加密后的口令及相关信息。记录格式:
群组名称:群组密码:组管理员列表:以当前组为附加组的用户列表
。 - /etc/default/useradd 文件保存了用于
useradd
命令的默认值。 - /etc/login.defs 是设置用户账号限制的文件。用于在创建用户时,对用户的一些基本属性做默认设置,例如指定用户 UID 和 GID 的范围,用户的过期时间,密码的最大长度,等等。需要注意的是,该文件的用户默认配置对 root 用户无效。并且,当此文件中的配置与 /etc/passwd 和 /etc/shadow 文件中的用户信息有冲突时,系统以 /etc/passwd 和 /etc/shadow 为准。
7.3. 常用命令
用户
- logout:退出系统
- exit:退出系统
- useradd:增加用户
- userdel:删除用户
- usermod:修改用户
- id:查询用户信息
- passwd:更改用户密码及停用或启用账户
- su(switch user):切换用户
用户组
- groupadd:增加用户组
- groupdel:删除用户组
- groupmod:修改用户组
- newgrp:登入另一个用户组
8. 进程管理
8.1. 进程与服务
- 进程:正在执行的程序。
- 每一个进程都拥有一个进程识别号:PID。
- 每一个进程都对应一个父进程,这个父进程可以复制多个子进程。
- 每个进程都可能以两种方式存在:前台与后台。
- 前台进程即用户可在目前的屏幕上进行操作的进程。
- 后台进程即无法在屏幕上看到,通常使用后台方式执行。
- 服务(service) 本质就是进程,通常都会监听某个端口,等待其它程序的请求,因此又称为守护进程(daemon)。一般情况下,系统的服务都是以后台进程的方式存在,而且都会常驻在系统中,直到关机才结束。
- 每个进程以一个用户身份运行,该用户可对进程拥有资源控制权限。
8.2. 常用命令
- ps(process status):显示进程信息
- pstree(process status tree):以树状图显示所有进程
- kill:向进程发送信号,默认发送终止信号,通过 PID 指定进程
- killall:向进程发送信号,默认发送终止信号,通过名字指定进程
- top:实时系统监控工具。它提供了一个动态的、交互式的实时视图,显示系统的整体性能信息以及正在运行的进程的相关信息。
- service:查看管理服务
- chkconifg(check config):见哈设置服务
- systemctl(system control):管理系统
9. 磁盘管理
9.1. 挂载与卸载
由于在 Linux 系统中硬件设备被当作文件对待,拥有自己的一套文件系统(文件目录结构),因此,当在 Linux 系统中使用这些硬件设备时,只有将 Linux 本身的文件目录与硬件设备的文件目录合二为一,硬件设备才能使用。合二为一的过程称为挂载(mount),相反的过程为卸载(umount)。
挂载,将设备文件中的顶级目录连接到 Linux 根目录下的某一目录(最好是空目录),访问此目录就等同于访问设备文件。不是根目录下任何一个目录都可以作为挂载点。由于挂载操作会使得原有目录中文件被隐藏,因此根目录以及系统原有目录都不要作为挂载点,会造成系统异常甚至崩溃,挂载点最好是新建的空目录。
如果不挂载,通过 Linux 系统中的图形界面系统可以查看找到硬件设备,但命令行方式无法找到。
9.2. 常用命令
- lsblk(list block):展示块设备(block devices)的信息,包括磁盘、分区和挂载点等
- df(disk free):显示磁盘可用空间数目信息及空间结点信息
- du(disk usage):显示指定的目录或文件所占用的磁盘空间
- tree:以树状图列出目录的内容
10. 安装软件
10.1. 包管理器
A Beginners Introduction To Linux Package managers: apt, yum, dpkg & rpm
Linux内核和与内核一起工作的软件包为我们提供了一个完整的操作系统。这些软件包可以是文本编辑器、文字处理器等应用软件,也可以是 bash、cron、dd 等 GNU 实用程序,也可以是与硬件通信的设备驱动程序。 在 Linux 中,除内核之外的所有东西都是一个软件包。
在 Linux 早期,软件都是以源代码方式进行发布的,需要将源码编译后再将一系列文件放到合适的目录下,整个过程繁琐耗时,并且存在以下问题:
- 依赖问题
- 包验证问题
- 卸载问题
- 软件包更新问题
- 获取软件包信息问题
- 架构问题
基于上述背景,便诞生了软件包管理器。软件包管理器提供了一个集中的软件包管理机制,利用包管理器可以方便快捷地实现程序包的安装、卸载、查询、升级和校验等管理操作。而软件通常以包的形式存储在仓库中,对软件包的使用和管理被称为包管理。包管理器提供以下功能:
- 通过跟踪使软件包工作所需的软件来自动解决依赖关系
- 在安装包之前验证包的完整性
- 轻松卸载和更新
- 验证架构兼容性
- 跟踪系统中安装的所有包,以便系统管理员可以轻松获取有关存在的包、安装时间、运行的版本等信息
包管理器管理的软件包内容涉及以下 4 个主要部分:
- 二进制文件或可执行程序
- 包含版本、依赖、签名和其他相关信息的元数据文件
- 文档和手册
- 配置文件
通常使用的包管理器是多级,而初期的包管理器只有一个层级。Debian 开发了 dpkg,又在基础上构建了前端工具 apt-get、apt、aptitude。RedHat 开发了 rpm,在其基础上构建了前端工具 yum、dnf。这意味着真正的软件包管理工具实质上是 dpkg、rpm,其余软件是在两者基础上的封装、加工。但是,dpkg、rpm 不能很好的处理依赖关系,且无法从远程仓库获取软件包,前端工具做了包括但不限于此的优化,给用户带来更好的体验。
使用软件包管理工具安装软件后,常见的安装位置如下图所示
10.2. dpkg(apt-get、apt、aptitude)
dkpg(Debian Packager)由 Debian 开发,其软件包格式为 .deb,其上层工具(前端工具)有 apt-get、apt(Advance Package Tool)、aptitude。默认使用 dpkg 的 Linux 发行版有 Debian、Ubuntu,、Mint 等。
deb软件包的命名遵循以下约定:Filename-Version-Reversion.Architecture.deb
- 软件名称 Filename
- 软件版本 Version
- 修订版本 Reversion
- 体系架构 Architecture
dpkg -i <package> # 安装一个存在本地的Deb软件包
dpgk -r <package> # 移除一个已经安装的软件包
dpkg -P <package> # 移除已安装软件包及配置文件
dpkg -L <package> # 列出安装的软件包清单
dpkg -s <package> # 显出软件包的安装状态
apt install <package> # 安装指定软件包
apt install <package_1> <package_1> <package_1> # 安装多个软件包
apt reinstall <package> # 重新安装指定软件包
apt remove <package> # 删除软件包
apt autoremove # 自动删除不再使用的依赖和库文件
apt update # 列出所有可更新的软件包
apt upgrade # 通过安装或升级软件包更新系统
apt full-upgrade # 通过安装、升级、删除软件包更新系统
apt satisfy <package> # 满足包的依赖关系
apt list <package> # 基于软件包名列出包
apt list --installed # 列出所有已安装的包
apt list --all-versions # 列出所有已安装的包的版本信息
apt list --upgradeable # 列出可安装的包及版本信息
apt search <keyword> # 在软件包描述中查找
apt show <package> # 展示软件具体信息
apt edit-sources # 编辑软件包源的信息文件,可用来更换软件包源
10.3. rpm(yum、dnf)
rpm(RedHat Package Manager,后更名为 RPM Package Manager)由 RedHat 开发,其上层工具(前端工具)有 yum(Yellowdog Updater Modified)、dnf。默认使用 rpm 的 Linux 发行版有 RHEL、CentOS、Fedora 等。
rpm软件包的命名遵循以下约定:Filename-Version-Reversion.OS.Architecture.rpm
- 软件名称 Filename
- 软件版本 Version
- 修订版本 Reversion
- 操作系统 OS
- 体系架构 Architecture
rpm -q <package> # 使用查询模式
rpm -a <package> # 查询所有信息
rpm -l <package> # 显示软件包的安装目录列表
rpm -f <absolute_file_path> # 显示文件所属软件包
rpm -i <package> # 安装指定软件包
rpm -u <package> # 升级指定软件包
rpm -v <package> # 显示指令执行过程
rpm -h <package> # 显示进度条
rpm -e <package> # 卸载软件
rpm -e --nodeps <package> # 强制卸载软件
yum install <package_name> # 安装指定的软件
yum install <package_name> # 安装多个软件
yum update <package_1> <package_2> <package_3> # 更新所有软件
yum update <package_name> # 更新指定的软件
yum remove <package_name> # 删除软件包命令
yum search <keyword> # 查找软件包命令
yum list # 列出所有可安裝的软件清单
yum check-update # 列出所有可更新的软件清单
yum clean packages # 清除缓存目录下的软件包
yum clean headers # 清除缓存目录下的 headers
yum clean oldheaders # 清除缓存目录下旧的 headers
yum clean
yum clean all # 清除缓存目录下的软件包及旧的 headers
10.4. 源代码
使用 Make 工具。
11. 其它常用命令
授权
sudo
(superuser do):允许用户以超级用户(root)用户或其他用户身份执行命令
内置命令
echo
:打印文本到标准输出设备clear
:清屏history
:显示或操作历史命令清单alias
:定义或显示别名(为命令起的别名)
网络
netstat
(net status):打印网络状态(网络连接,路由表,接口统计、伪装连接和多播成员关系)ifconfig
(interface config):查看、配置网络接口ping
:向某个网络主机发送 ICMP ECHO_REQUEST,以测试接通情况
日期时间
date
:显示日期、时间cal
(calendar):查看日历
压缩解压
gzip
/gunzip
zip
/unzip
tar
(tape archive):打包备份文件(.tar),可对备份文件压缩
查找文件
locate
:查找符合条件的文档find
:在指定目录下查找文件和目录
处理文本
awk
(Aho Weiberger and Kernighan):处理文本文件sed
(stream editor):利用脚本来处理文本文件grep
(global regular expression):依据指定规则在文件中搜索内容zgrep
:依据指定规则在压缩包中搜索内容sort
:将文本文件内容加以排序
重定向
>
:输出重定向,覆盖文件内容>>
:输出重定向,在文件内容尾部追加
管道(pipe)
|
:连接多个命令,上一个命令输出作为下一个命令的输入