爆 肝 300 小 时 整 理 的 Linux 工 具 秘 籍!从 安 装 到 编 译,一 篇 吃 透 yum/vim/gcc/make,小 白 秒 变 大 神,操 作 猛 如 虎!
本文介绍了Linux系统中yum软件包管理工具和vim编辑器的使用技巧。主要内容包括:1)yum的基本操作,如安装/卸载软件(需root权限)、处理依赖关系,推荐安装rzsz、sl、cowsay等实用工具;2)vim的多模式操作,详细说明命令模式的光标定位(gg/G/nG)、复制粘贴(yy/p)、撤销(u)等快捷键,以及插入模式和底行模式的切换方法。文章通过具体指令和图示,帮助Linux初学者快速
文 章 目 录
💻作 者 简 介:曾 与 你 一 样 迷 茫,现 以 经 验 助 你 入 门 Linux。
💡个 人 主 页:@笑口常开xpr 的 个 人 主 页
📚系 列 专 栏:Linux 探 索 之 旅:从 命 令 行 到 系 统 内 核
✨代 码 趣 语:make/Makefile 像 个 记 性 好 的 厨 师:食 谱(规 则)写 一 次,下 次 做 饭(编 译)不 用 再 想 步 骤,原 料(源 文 件)没 变 就 不 动 手,变 了 才 重 新 做 - - - 效 率 高 到 像 有 预 知 能 力。
💪代 码 千 行,始 于 坚 持,每 日 敲 码,进 阶 编 程 之 路。
📦gitee 链 接:gitee
刚 碰 Linux 时,你 是 否 也 被 yum 依 赖、vim 模 式、gcc 选 项、make 构 建 搞 得 头 大?本 文 拆 解 这 些 核 心 工 具 的 使 用 逻 辑,一 步 一 图 带 你 打 通 “安 装 - - -> 编 辑 - - -> 编 译 - - -> 构 建” 全 流 程,让 操 作 从 生 涩 变 流 畅。
安 装 软 件
- 下 载 到 程 序 的 源 代 码,并 进 行 编 译,得 到 可 执 行 程 序。
- 在 Linux 系 统 中,rpm 是 用 于 管 理 RPM 格 式 软 件 包 的 命 令 行 工 具。
- yum 是 基 于 RPM 包 管 理 的 前 端 工 具,它 的 核 心 优 势 是 自 动 处 理 软 件 依 赖 关 系,无 需 手 动 安 装 依 赖 包,极 大 简 化 了 软 件 安 装 流 程。
yum
yum 类 似 于 应 用 商 店。
关 于 yum 的 所 有 操 作 必 须 保 证 主 机(虚 拟 机)网 络 畅 通!!!
使 用 ping 指 令 ping www.baidu.com
验 证
rzsz
在 Linux 系 统 中,rzsz 是 一 套 用 于 通 过 SSH 终 端 传 输 文 件 的 工 具(rz 用 于 上 传 文 件 到 服 务 器,sz 用 于 从 服 务 器 下 载 文 件 到 本 地),非 常 适 合 小 文 件 的 快 速 传 输。
安 装
- 用 户 先 切 换 到 root 中。
- 输 入 指 令
yum list | grep lrzsz
来 查 看 需 要 的 软 件 包。
通 过 yum list 命 令 可 以 罗 列 出 当 前 一 共 有 哪 些 软 件 包。由 于 包 的 数 目 非 常 多,这 里 我 们 需 要 使 用 grep 命 令 只 筛 选 出 我 们 需 要 的 包。 - 输 入
yum install + 软 件 名 称 及 版 本
安 装,需 要 输 入 y / N 表 示 安 装。 - 软 件 卸 载 ,输 入 指 令
yum remove + 软 件 名 称
,需 要 输 入 y / N 表 示 卸 载。
yum 的 存 储 文 件
官 方 yum 源
扩 展 源yum install -y epel-release
推 荐 的 软 件yum install -y sl
-y:安 装 时 不 需 要 输 入 y / N 直 接 安 装。
yum install -y cowsay
虚 拟 机:一 般 Linux 操 作 系 统,默 认 配 置 的 yum 源 都 是 国 外 的,有 可 能 访 问 yum 源 比 较 慢,需 要 更 新 yum 源,即 替 换 yum 源 文 件。
云 服 务 器:一 般 已 经 替 换 了。
vim 编 辑 器
定 义
vim 是 一 个 多 模 式 的 编 辑 器,主 要 有 命 令 模 式(默 认 模 式),插 入 模 式 和 底 行 模 式。
命 令 模 式
用 户 所 有 的 输 入 都 会 被 当 做 命 令,一 般 不 会 作 为 文 本 输 入。
- 输 入
vim + 文 件
进 入 vim 编 辑 器。 - 刚 进 入 vim 为 命 令 模 式,此 时 不 能 编 辑 文 件。
- 输 入 i 后 进 入 插 入 模 式,如 下 图 所 示,页 面 最 下 面 出 现 INSERT。
- 输 入 完 成 后,按 键 盘 左 上 角 的 Esc,然 后 输 入
:
进 入 底 行 模 式,接 着 输 入wq
即 可 保 存 文 件 并 退 出。
光 标 定 位
开 头
输 入 gg
,光 标 会 移 动 到 文 本 的 第 1 行 的 开 头。
结 尾shift + g
或 者 直 接 输 入 G
光 标 移 动 到 文 件 的 结 尾。
第 n 行
输 入 n + shift + g
或 者 nG
,n 为 行 数。
输 入 3G
复 制yy
复 制 光 标 所 在 行。
粘 贴p
粘 贴 到 光 标 所 在 行 的 下 一 行。yy n p
,复 制 粘 贴 光 标 所 在 行 n 次。n 为 要 复 制 多 少 行。
撤 销u
剪 贴dd
- - - 剪 贴 或 者 按 照 行 删 除。
yy10p
定 位shift + $
定 位 光 标 到 当 前 行 结 尾。shift + ^
定 位 光 标 到 当 前 行 开 始。
移 动w
光 标 以 单 词 为 单 位 向 后 移 动。b
光 标 以 单 词 为 单 位 向 前 移 动。nw
光 标 以 单 词 为 单 位 向 后 移 动 n 个 单 词。nb
光 标 以 单 词 为 单 位 向 前 移 动 n 个 单 词。h
光 标 以 1 个 字 符 为 单 位 向 左 移 动。j
光 标 以 1 个 字 符 为 单 位 向 下 移 动。k
光 标 以 1 个 字 符 为 单 位 向 上 移 动。l
光 标 以 1 个 字 符 为 单 位 向 右 移 动。
也 可 以 使 用 键 盘 上 的 上 下 左 右 键。
巧 记 h j k l
h(左):键 盘 的 最 左 边
l(右):键 盘 的 最 右 边
j(下):jump 向 下 跳
k(上):King 国 王,高 高 在 上
shift + ~
:大 小 写 转 换。r + 字 符
:修 改 单 个 字 符。n + r + 字 符
:对 光 标 之 后 的 n 个 字 符 进 行 批 量 化 替 换。shift + r + 输 入 字 符
:输 入 字 符 进 行 替 换,即 批 量 替 换 模 式,对 内 容 整 体 进 行 替 换,按 Esc 退 出。x
:对 光 标 之 后 的 字 符 进 行 删 除。ctrl + r
:撤 销 之 前 的 撤 销。
分 屏
- 底 行 中 输 入
:vs + 文 件 名
可 以 实 现 分 屏 操 作。 - 输 入
ctrl + w + w
可 以 切 换 光 标 所 在 位 置。 - 输 入 指 令
n yy
可 以 复 制 多 少 行,这 里 我 输 入12yy
,即 复 制 12 行。然 后 输 入ctrl + w + w
使 光 标 切 换 到 左 边,输 入p
即 可 完 成 粘 贴。
光 标 在 哪 一 个 窗 口 里 面,就 对 哪 一 个 窗 口 进 行 操 作。
底 行 模 式
先 输 入 :
进 入 底 行。
vim 在 保 存 并 退 出(wq) 会 形 成 新 的 文 件,如 果 直 接 退 出(q) 没 有 形 成 新 的 文 件。
wq:保 存 文 件 并 退 出,w 为 保 存 文 件,q 为 退 出 vim
w!:强 制 保 存
q!:强 制 退 出
wq!:强 制 保 存 并 退 出
不 退 出 vim 可 以 执 行 外 部 的 命 令,输 入 完 成 后 可 以 按 Enter
返 回 vim。:! + 命 令
调 出 行 号set nu
或 者 set number
去 掉 行 号set nonu
或 者 set nonumber
批 量 化 注 释
-
移 动 光 标 到 需 要 注 释 的 第 一 行 的 行 首(命 令 模 式)。
-
按 Ctrl + v 进 入 可 视 块 模 式(左 下 角 会 显 示 - - - VISUAL BLOCK --)。
-
按 j 键 向 下 移 动 光 标,选 中 需 要 注 释 的 所 有 行(选 中 的 是 每 行 的 相 同 列 位 置,通 常 是 行 首)。
-
按 大 写 i (shift + i)进 入 块 插 入 模 式(此 时 光 标 会 跳 到 选 中 块 的 第 一 行)。
-
输 入 注 释 符 号(如 // 或 #)。
-
按 Esc 退 回 命 令 模 式,所 有 选 中 行 的 行 首 会 自 动 添 加 注 释 符 号。
取 消 多 行 注 释
- 移 动 光 标 到 注 释 符 号 所 在 的 第 一 行 的 第 一 个 注 释 字 符(如 // 的 第 一 个 /)。
- 按 Ctrl + v 进 入 可 视 块 模 式。
- 按 j 和 l 向 下 和 向 右 选 中 所 有 需 要 取 消 注 释 的 行,确 保 选 中 的 是 注 释 符 号 所 在 的 列(如 // 占 两 列,就 选 中 这 两 列)。
- 按 d 键 删 除 选 中 的 注 释 符 号,完 成 批 量 取 消 注 释。
vim 配 置
自 动 配 置
手 动 配 置
- 输 入
cd ~
进 入 用 户 家 目 录。可 以 使 用 pwd 来 查 看 目 录,格 式 为 - 在 用 户 家 目 录 下 创 建 隐 藏 文 件
.vimrc
,这 就 是 vim 的 配 置 文 件。 - 使 用 vim 打 开 文 件,并 输 入
set nu
,然 后 保 存 并 退 出。打 开 vim 不 用 输 入 指 令 也 可 以 看 见 行 号。
一 个 用 户 一 个 vim 配 置 文 件,不 会 互 相 影 响。
一 般 不 建 议 给 root 配 置,给 普 通 用 户 就 可 以。
sudo 无 法 使 用
如 图 所 示,sudo 在 普 通 用 户 不 能 使 用。
解 决 方 法
- sudoers 的 文 件 夹 在 /etc/sudoers,想 要 改 变 文 件 内 容 必 须 切 换 到 root 用 户 中。
如 果 是 普 通 用 户 无 法 访 问 文 件。 - 使 用 vim 打 开 文 件 后,在 底 行 模 式 输 入
:set nu
显 示 出 行 号,下 拉 到 100 行 左 右 的 样 子 - 找 到 如 下 图 所 示 的 2 行,和 root 一 行 类 似,添 加 用 户 名,添 加 完 成 后 保 存 并 退 出 即 可。
注 意
因 为 这 个 文 件 为 只 读 属 性,所 以 需 要 输 入 :wq!
用 来 强 制 保 存 并 退 出。
5. 保 存 完 成 之 后,就 可 以 使 用 sudo。
Linux 编 译 器 - gcc/g++ 使 用
背 景 知 识
- 预 处 理(进 行 宏 替 换,去 注 释,展 开 头 文 件,条 件 编 译)
- 编 译(生 成 汇 编)
- 汇 编(生 成 机 器 可 识 别 代 码)
- 连 接(生 成 可 执 行 文 件 或 库 文 件)
格 式
gcc [选项] 要编译的文件 [选项] [目标文件]
gcc 选 项
-E:只 激 活 预 处 理,这 个 不 生 成 文 件,你 需 要 把 它 重 定 向 到 一 个 输 出 文 件 里 面。
-S:编 译 到 汇 编 语 言 不 进 行 汇 编 和 链 接。
-c:编 译 到 目 标 代 码。
-o:文 件 输 出 到 文 件,即 重 命 名。
-static:此 选 项 对 生 成 的 文 件 采 用 静 态 链 接。
-g:生 成 调 试 信 息。GNU 调 试 器 可 利 用 该 信 息。
-shared:此 选 项 将 尽 量 使 用 动 态 库,所 以 生 成 文 件 比 较 小,但 是 需 要 系 统 由 动 态 库 -O0、-O1、-O2、-O3 编 译 器 的 优 化 选 项 的 4 个 级 别,-O0 表 示 没 有 优 化,-O1 为 缺 省 值,-O3 优 化 级 别 最 高。
-w:不 生 成 任 何 警 告 信 息。
-Wall:生 成 所 有 警 告 信 息。
代 码 执 行
- 使 用 编 辑 器 创 建 并 编 写 程 序 文 件。
- 编 译 程 序 文 件。
- 链 接 并 执 行 程 序 文 件。
如 果 是 C 语 言 文 件 使 用 gcc,如 果 是 C++ 文 件 使 用 g++ 编 译,C 语 言 文 件 也 可 以 使 用 g++ 编 译。
.\ 可 以 告 诉 系 统 可 执 行 程 序 的 位 置。
函 数 库
为 什 么 能 够 在 windows 或 者 linux 上 进 行 C/C++ 或 者 其 他 形 式 的 开 发 呢?
因 为 系 统 一 定 要 提 前 或 者 后 续 安 装 上 C/C++ 开 发 的 相 关 头 文 件 或 者 库 文 件。如 下 图,linux 的 头 文 件 在 /usr/include 的 文 件 夹 中。
动 静 态 库
函 数 库 一 般 分 为 静 态 库 和 动 态 库 两 种。
Linux :.so(动 态 库).a(静 态 库)
windows :.dll(动 态 库).lib(静 态 库)
静 态 库 是 指 编 译 链 接 时,把 库 文 件 的 代 码 全 部 加 入 到 可 执 行 文 件 中,因 此 生 成 的 文 件 比 较 大,但 在 运 行 时 也 就 不 再 需 要 库 文 件 了。其 后 缀 名 一 般 为 “.a”。
动 态 库 与 之 相 反,在 编 译 链 接 时 并 没 有 把 库 文 件 的 代 码 加 入 到 可 执 行 文 件 中,而 是 在 程 序 执 行 时 由 运 行 时 链 接 文 件 加 载 库,这 样 可 以 节 省 系 统 的 开 销。动 态 库 一 般 后 缀 名 为 “.so”。
gcc 在 编 译 时 默 认 使 用 动 态 库。完 成 了 链 接 之 后,gcc 就 可 以 生 成 可 执 行 文 件,如 下 所 示。gcc 默 认 生 成 的 二 进 制 程 序,是 动 态 链 接 的。
可 执 行 程 序 = 头 文 件 提 供 方 法 的 声 明 + 库 文 件 提 供 方 法 的 实 现 + 代 码
在 编 译 器 使 用 静 态 库 进 行 静 态 连 接 的 时 候,会 将 自 己 的 方 法 拷 贝 到 目 标 程 序 中,程 序 以 后 不 用 再 依 赖 静 态 库。
在 Linux 中,编 译 形 成 的 可 执 行 程 序,默 认 采 用 的 是 动 态 链 接,即 需 要 提 供 动 态 库。如 果 按 照 静 态 链 接 的 方 式,进 行 形 成 可 执 行 程 序,需 要 添 加 -static 选 项,需 要 提 供 静 态 库。
linux 下 安 装 C 语 言 静 态 库sudo yum install -y glibc-static
linux 下 安 装 C++ 静 态 库sudo yum install -y libstdc++-static
如 果 没 有 静 态 库,不 能 使 用 -static,如 果 没 有 动 态 库,只 有 静 态 库 并 且 gcc 能 找 到,可 以 编 译 链 接。gcc 默 认 优 先 动 态 链 接,可 执 行 程 序 不 一 定 全 是 动 态 链 接 或 者 静 态 链 接,可 能 是 混 合 的。-static 的 本 质 是 改 变 优 先 级,即 将 所 有 的 链 接 换 成 静 态 链 接。
动 静 态 库 区 别
动 态 库 是 共 享 库,有 效 的 节 省 资 源,占 用 的 体 积 小,节 省 磁 盘 空 间、内 存 空 间 和 网 络 空 间。
动 态 库 不 能 缺 失,一 旦 对 应 的 动 态 库 缺 失,影 响 的 不 止 一 个 程 序,可 能 导 致 很 多 程 序 无 法 正 常 运 行。
静 态 库 不 依 赖 动 态 库,程 序 可 以 独 立 运 行。体 积 较 大,比 较 消 耗 资 源。
debug
debug 是 开 发 者 模 式,可 以 被 追 踪 调 试,形 成 可 执 行 程 序 的 时 候 添 加 了 debug 信 息,可 执 行 程 序 形 成 的 时 候,不 是 无 序 的 二 进 制 构 成,有 自 己 的 二 进 制 格 式,即 ELF 格 式。
Linux 项 目 自 动 化 构 建 工 具 -make/Makefile
make 是 一 条 指 令,makefile 是 一 个 当 前 目 录 下 的 文 件。会 不 会 写 makefile,从 一 个 侧 面 说 明 了 一 个 人 是 否 具 备 完 成 大型 工 程 的 能 力。
一 个 工 程 中 的 源 文 件 不 计 数,其 按 类 型、功 能、模 块 分 别 放 在 若 干 个 目 录 中,makefile 定 义 了 一 系 列 的 规 则 来 指 定,哪 些 文 件 需 要 先 编 译,哪 些 文 件 需 要 后 编 译,哪 些 文 件 需 要 重 新 编 译,甚 至 于 进 行 更 复 杂 的 功 能 操 作。
makefile 带 来 的 好 处 就 是 - - - “自 动 化 编 译”,一 旦 写 好,只 需 要 一 个 make 命 令,整 个 工 程 完 全 自 动 编 译,极 大 的 提 高 了 软 件 开 发 的 效 率。
make 是 一 个 命 令 工 具,是 一 个 解 释 makefile 中 指 令 的 命 令 工 具 ,一 般 来 说,大 多 数 的 IDE 都 有 这 个 命 令。makefile 是 一 个 文 件,两 个 搭 配 使 用,完 成 项 目 自 动 化 构 建。
- 创 建 makefile 文 件,并 编 写 指 令。
- 输 入 make 可 以 编 译 代 码 文 件。
- 执 行 可 执 行 程 序。
4. 清 理 可 执 行 程 序。
依 赖 关 系 和 依 赖 方 法
make 通 过 依 赖 关 系 执 行 依 赖 方 法 中 的 内 容。make 会 自 动 推 导 makefile 中 的 依 赖 关 系,是 一 种 栈 式 结 构。
make 会 通 过 递 归 一 层 又 一 层 地 去 找 文 件 的 依 赖 关 系,直 到 最 终 编 译 出 第 一 个 目 标 文 件。
在 找 寻 的 过 程 中,如 果 出 现 错 误,比 如 最 后 被 依 赖 的 文 件 找 不 到,那 么 make 就 会 直 接 退 出,并 报 错,而 对 于 所 定 义 的 命 令 的 错 误,或 是 编 译 不 成 功,make 根 本 不 理。
make 只 管 文 件 的 依 赖 性,如 果 在 我 找 了 依 赖 关 系 之 后,冒 号 后 面 的 文 件 还 是 不 在,那 么 对 不 起,我 就 不 工 作 啦。
使 用 make 时,make 会 自 顶 向 下 扫 描 makefile 文 件,将 第 一 个 依 赖 关 系 作 为 默 认 的 目 标 文 件,使 用 时 可 以 直 接 写 make。建 议 不 要 将 清 理 放 在 最 前 面,而 将 编 译 放 在 最 前 面。
清 理
当 第 1 次 编 译 成 功 后,如 果 没 有 修 改 程 序 文 件 或 者 清 理,就 不 能 进 行 编 译。这 是 因 为 不 需 要 编 译,因 为 编 译 还 是 同 样 的 文 件,主 要 是 为 了 提 高 编 译 效 率。
原 因
一 定 是 源 文 件 形 成 可 执 行 程 序,先 有 源 文 件,才 有 可 执 行 程 序,一 般 而 言,源 文 件 的 最 近 修 改 时 间 比 可 执 行 程 序 早。如 果 更 改 了 源 文 件,历 史 上 还 有 可 执 行 程 序,那 么 源 文 件 的 修 改 时 间 比 可 执 行 程 序 新。只 需 要 比 较 源 文 件 和 可 执 行 程 序 的 最 近 修 改 时 间 即 可。
stat
查 看 文 件 时 间。
空 文 件 在 磁 盘 中 也 占 空 间。文 件 = 文 件 内 容 + 属 性
文 件 时 间
- 创 建 时 间(Creation Time):文 件 被 首 次 创 建(生 成)的 时 间,即 文 件 在 存 储 设 备 上 被 建 立 的 时 刻。
- 修 改 时 间(Modification Time):文 件 内 容 最 后 一 次 被 修 改(如 编 辑、写 入 数 据)的 时 间。
- 访 问 时 间(Access Time):文 件 最 后 一 次 被 “访 问”(如 打 开 查 看、读 取 内 容)的 时 间。
- 状 态 改 变 时 间(Change Time):文 件 的 属 性 最 后 一 次 被 修 改 的 时 间。
Modify 改 变 会 引 起 change 改 变,change 改 变 不 一 定 会 引 起 Modify 改 变。
在 实 际 中 访 问 时 间 是 最 频 繁 的 更 改,过 高 频 率 更 新 Access 会 使 磁 盘 卡 顿。为 了 防 止 这 种 情 况,系 统 会 根 据 Change 和 Modific 的 修 改 来 更 改 Access。
touch
可 以 更 改 文 件 所 有 的 时 间 为 最 新 时 间。touch -m 文 件
:更 改 Modify 的 时 间。touch -a 文 件
:更 改 Acess 的 时 间。
如 图 所 示,因 为 源 文 件 的 修 改 时 间 比 可 执 行 程 序 的 时 间 早,所 以 不 允 许 编 译。make 会 根 据 源 文 件 和 目 标 文 件 的 新 旧,判 断 是 否 需 要 重 新 执 行 依 赖 关 系 进 行 编 译。
可 以 设 置 为 伪 目 标,用 .PHONY
修 饰,即 让 命 令 总 是 被 执 行 的。
makefile 文 件 中 的 gcc test.c -o mytest
这 条 指 令 可 以 使 用 gcc -o $@ $^
来 代 替,$@
表 示 :左 边 的 内 容,$^
表 示:右 边 的 内 容。
指 令 前 面 加 上 @
使 用 时 不 会 显 示 出 来。
all
可 以 同 时 执 行 多 个 依 赖 关 系。
mytest.c
#include<stdio.h>
int main()
{
printf("hello linux\n");
return 0;
}
mytest.cpp
#include<iostream>
using namespace std;
int main()
{
cout << "hello world\n" << endl;
return 0;
}
makefile
.PHONY:all
all:mytestcpp mytestc
mytestcpp:mytest.cpp
g++ mytest.cpp -o mytestcpp -std=c++11
mytestc:mytest.c
gcc mytest.c -o mytestc -std=c99
.PHONY:clean
clean:
rm -rf mytestcpp mytestc
使 用 all 可 以 同 时 执 行 all 后 面 的 文 件。
总 结
yum 管 安 装、vim 管 编 辑、gcc 管 编 译、make 管 构 建 - - - 这 些 工 具 是 Linux 开 发 的 基 础 齿 轮。多 敲 命 令、多 试 项 目,你 会 发 现 它 们 从 “复 杂” 变 “顺 手”。入 门 不 难,动 手 就 是 捷 径。
更多推荐
所有评论(0)