当前位置: 首页 > backend >正文

四、Linux核心工具:Vim, 文件链接与SSH

作者:IvanCodes
日期:2025年7月29日
专栏:Linux教程

思维导图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

一、高效文本编辑:Vim 编辑器

1.1 Vim 简介与核心模式

Vim 是一个功能极其强大文本编辑器,以其高效的快捷键操作独特的模式设计而闻名。掌握 Vim 的核心在于理解不同的工作模式

  • 正常模式: 默认模式。用于移动光标、删除、复制、粘贴文本。所有操作都通过快捷键完成。
  • 插入模式: 用于输入和编辑文本,类似普通记事本
  • 命令行模式: 在屏幕底部以冒号 : 开始,用于执行保存、退出、搜索、替换扩展命令
  • 可视模式: 用于选择文本块,以便进行批量操作

1.2 Vim 基础操作

进入与退出

# 打开或创建一个名为 filename 的文件
vim filename
  • 进入插入模式: 在正常模式下按 i (在光标前插入), a (在光标后追加), o (在当前行下方新建一行并插入)。
  • 返回正常模式: 在任何其他模式下按 Esc 键。

正常模式下的光标移动

h, j, k, l: 左、下、上、右移动光标。
w: 移动到下一个单词的开头。
b: 移动到上一个单词的开头。
^0: 移动到行首
$: 移动到行尾
gg: 移动到文件第一行
G: 移动到文件最后一行

正常模式下的编辑操作

x: 删除光标所在的单个字符
dw: 删除从光标开始到单词结尾的内容。
dd: 删除 (剪切) 整行
yy: 复制 (yank) 整行
p: 粘贴 (put) 已删除或复制的内容到光标之后
u: 撤销上一步操作 (undo)。
Ctrl + r: 重做 (redo) 已撤销的操作。

命令行模式下的常用命令
文件操作

:w: 保存 (write) 文件。
:q: 退出 (quit) 编辑器。如果文件有未保存的修改,会提示错误
:q!: 强制退出不保存任何修改。
:wq: 保存并退出
:x: 保存并退出 (仅当文件被修改时才写入)。
:w new_filename: 另存为 new_filename
:r filename: 读入 (read) filename 文件的内容并插入到当前光标后。
:! command: 执行外部 shell 命令。例如 :! ls -l
:r ! command: 导入 (import) 外部命令的执行结果到当前光标后。

行号与跳转

:set nu:set number: 显示行号
:set nonu:set nonumber: 隐藏行号
:set nu!:set number!: 切换显示/隐藏行号。
:n: 跳转到第 n 行 (例如 :10 跳转到第10行)。

查找与替换

:/pattern: 向下查找 pattern。按 n 查找下一个,N 查找上一个。
:?pattern: 向上查找 pattern。按 n 查找下一个 (方向与 ? 相反),N 查找上一个。
:s/old/new: 替换当前行第一个 oldnew
:s/old/new/g: 替换当前行所有 oldnew
:%s/old/new/g: 替换整个文件所有 oldnew (% 代表所有行)。
:%s/old/new/gc: 替换整个文件,但每次替换前都会提示确认

二、文件链接:硬链接与软链接

2.1 硬链接

硬链接可以看作是一个文件多个有效文件名。它们都指向同一个物理存储位置 (同一个inode)。

特性:

  • 删除源文件或任何一个硬链接,文件内容依然存在,直到最后一个链接被删除。
  • 不能目录创建硬链接。
  • 不能跨越不同的文件系统 (分区)。

语法结构: ln 源文件 目标链接名
代码示例:

# 创建一个名为 original_file.txt 的文件
echo "This is the original file." > original_file.txt# 为 original_file.txt 创建一个硬链接 hard_link.txt
ln original_file.txt hard_link.txt# 查看它们的 inode 号,会发现它们是相同的
ls -i original_file.txt hard_link.txt

2.2 软链接

软链接是一个特殊的文件,其内容另一个文件路径。它类似于Windows快捷方式

特性:

  • 拥有自己独立inode
  • 可以目录创建软链接。
  • 可以跨越不同的文件系统
  • 如果源文件被删除,软链接会失效 (变成“悬空链接”或“死链接”)。

语法结构: ln -s 源文件或目录 目标链接名
代码示例:

# 为 original_file.txt 创建一个软链接 soft_link.txt
ln -s original_file.txt soft_link.txt# 为 /var/log 目录创建一个名为 logs_shortcut 的软链接
ln -s /var/log logs_shortcut# 查看它们的 inode 号,会发现是不同的
ls -i original_file.txt soft_link.txt

2.3 硬链接 vs. 软链接 核心区别

特性硬链接 (Hard Link)软链接 (Symbolic Link)
Inode与源文件相同独立的新 inode
类型文件的一个别名指向路径的指针文件
跨文件系统不可以可以
链接到目录不可以可以
删除源文件链接依然有效链接失效 (悬空)

三、远程连接与文件传输 (SSH)

3.1 SSH 远程登录

SSH (Secure Shell) 是一个加密的网络协议,用于在不安全的网络安全地执行远程命令管理服务器

语法结构: ssh [用户名]@[主机名或IP地址]
代码示例:

# 使用用户 auser 登录到主机 192.168.121.151
ssh auser@192.168.121.151# 如果本地用户名与远程用户名相同,可以省略用户名
# 假设本地用户也是 auser
ssh 192.168.121.151# 登录到指定端口 2222 的服务器
ssh -p 2222 auser@remote.server.com

3.2 SCP 安全文件传输

scp (Secure Copy) 是一个基于SSH文件传输工具

语法结构:

  • 上传: scp [选项] 本地文件 用户@主机:远程路径
  • 下载: scp [选项] 用户@主机:远程文件 本地路径
    常用选项:
    -r: 递归复制整个目录。

代码示例:

# 上传本地文件 local_file.txt 到远程主机的 /home/auser/ 目录下
scp local_file.txt auser@192.168.121.151:/home/auser/# 下载远程主机的 /var/log/syslog 文件到当前目录
scp auser@192.168.121.151:/var/log/syslog .# 上传整个本地目录 local_dir/ 到远程主机的 /tmp/ 目录下
scp -r local_dir/ auser@192.168.121.151:/tmp/# 下载远程主机的 /etc/nginx/ 目录到本地的 nginx_backup/ 目录
scp -r auser@192.168.121.151:/etc/nginx/ nginx_backup/

3.3 SSH 密钥对免密登录

通过设置SSH密钥对 (公钥和私钥),可以实现无需输入密码安全登录,这对于自动化脚本提高效率至关重要。

设置步骤:

  1. 在客户端生成密钥对 (ssh-keygen)
    你的本地机器 (客户端) 上执行。
ssh-keygen -t rsa
# 按照提示,可以一直按回车使用默认设置
# 会在 ~/.ssh/ 目录下生成 id_rsa (私钥) 和 id_rsa.pub (公钥)
  1. 将公钥复制到服务器 (ssh-copy-id)
    这是最推荐的方法,它会自动处理服务器端的文件和权限问题。
ssh-copy-id auser@192.168.121.151
# 输入一次 auser 的密码
# 该命令会将本地的 id_rsa.pub 内容追加到远程主机的 ~/.ssh/authorized_keys 文件中
  1. 测试免密登录
ssh auser@192.168.121.151
# 如果设置成功,这次将不再提示输入密码,直接登录

四、总结

本章深入探讨了Linux系统中三个至关重要的工具:Vim编辑器文件链接机制以及SSH远程管理。Vim是高效文本处理利器;理解软硬链接区别有助于灵活地组织文件系统;而SSH及其相关工具现代系统运维和远程协作基石。熟练掌握这些命令和概念,将使您在Linux环境中的操作更加专业、高效和安全


练习题

请在您的Linux环境中完成以下操作,并写出所使用的命令。

题目:

  1. 使用 Vim 打开一个名为 my_script.sh 的新文件。
  2. my_script.sh 中,进入插入模式并输入 #!/bin/bashecho "Script is running" 两行内容。
  3. 不退出 Vim,使用命令行模式保存 my_script.sh 文件。
  4. my_script.sh 中,使用命令行模式显示行号。
  5. my_script.sh 中,使用命令行模式将 running 替换为 working
  6. my_script.sh 中,使用命令行模式将 /etc/hosts 文件的内容读入 (导入) 到文件末尾。
  7. 创建一个名为 data_file.txt 的文件,并为它创建一个名为 data_hardlink 的硬链接。
  8. data_file.txt 文件创建一个名为 data_softlink 的软链接。
  9. 删除 data_file.txt,然后分别使用 ls -l 命令检查 data_hardlinkdata_softlink 的状态。
  10. 在你的家目录下创建一个名为 app 的目录,然后为这个目录创建一个名为 app_link 的软链接。
  11. 使用 ssh 命令以用户 admin 的身份登录到 IP 地址为 10.0.0.10 的远程服务器,并使用非标准的端口 22022
  12. 将你本地家目录下的 my_script.sh 文件上传到 10.0.0.10 服务器上 admin/opt/scripts/ 目录中。
  13. 10.0.0.10 服务器上的 /var/log/ 整个目录下载到你本地的 server_logs/ 目录 (假设本地 server_logs 已存在)。
  14. 在你的本地机器上生成一对新的 SSH 密钥对,并将其安全地复制到 10.0.0.10 服务器的 admin 账户,以实现免密登录。
  15. 在 Vim 中,不退出文件,如何快速跳转到文件的最后一行?

答案与解析:

  1. 打开 Vim:
vim my_script.sh

解析: vim 命令后跟文件名,如果文件不存在则会创建一个新的缓冲区。

  1. 进入插入模式并输入:

    1. i (或 a, o) 进入插入模式。
    2. 输入内容。
    3. Esc 返回正常模式。
      解析: i 是进入插入模式最常用的按键之一。
  2. 保存文件:

:w

解析: 在正常模式下输入 : 进入命令行模式,w 表示保存 (write)。

  1. 显示行号:
:set nu

解析: set nuset number 的缩写,用于显示行号。

  1. 替换文本:
:%s/running/working/g

解析: : 进入命令行模式。% 表示整个文件,s 表示替换,/old/new/ 是替换格式,g 表示全局 (global),即替换行内所有匹配项。

  1. 读入文件内容:

    1. G 跳转到文件末尾。
    2. o 新建一行并进入插入模式,再按 Esc 返回正常模式 (可选,确保插入位置正确)。
    3. 输入 :r /etc/hosts
      解析: :r filename 命令会将指定文件的内容读入并插入到当前光标所在行的下方。
  2. 创建硬链接:

touch data_file.txt
ln data_file.txt data_hardlink

解析: ln 命令默认创建硬链接。

  1. 创建软链接:
ln -s data_file.txt data_softlink

解析: ln-s 选项表示创建符号链接 (soft link)。

  1. 检查链接状态:
rm data_file.txt
ls -l data_hardlink     # 正常显示,链接数减少
ls -l data_softlink     # 会看到链接名标红,指向一个不存在的路径

解析: 删除源文件后,硬链接因指向相同的 inode 而不受影响。软链接因其指向的路径已失效而变成悬空链接。

  1. 为目录创建软链接:
mkdir ~/app
ln -s ~/app ~/app_link

解析: 软链接可以指向目录,这是硬链接无法做到的。

  1. SSH 指定端口登录:
ssh -p 22022 admin@10.0.0.10

解析: ssh-p 选项用于指定非默认的端口号。

  1. SCP 上传到指定目录:
scp ~/my_script.sh admin@10.0.0.10:/opt/scripts/

解析: scp 的目标路径是 user@host:path,这里的 path 是服务器上的绝对或相对路径。

  1. SCP 下载目录:
scp -r admin@10.0.0.10:/var/log/ server_logs/

解析: -r 选项用于递归复制整个目录。

  1. 生成并复制公钥:
    • 生成:
ssh-keygen
  • 复制:
ssh-copy-id admin@10.0.0.10

解析: ssh-keygen 生成密钥对,ssh-copy-id 是最安全、最便捷的复制公钥的方法。

  1. Vim 跳转到最后一行:
    在正常模式下,按 G (大写)。
    解析: G 是Vim中跳转到文件最后一行的快捷键。gg 则是跳转到第一行。
http://www.xdnf.cn/news/16539.html

相关文章:

  • 永磁同步电机无速度算法--静态补偿电压模型Harnefors观测器
  • 人工智能技术革命:AI工具与大模型如何重塑开发者工作模式与行业格局
  • Linux 完整删除 Systemd 服务的步骤
  • redis得到shell的几种方法
  • 如何使用Spring AI框架开发mcp接口并发布成微服务
  • 31.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--单体转微服务--财务服务--收支分类
  • 解决IDEA拉取GitLab项目报错:必须为访问令牌授予作用域[api, read user]
  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段(11):文法+单词
  • tcp通讯学习数据传输
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 微博文章数据可视化分析-文章评论量分析实现
  • Web3 网络安全漏洞的预防措施
  • 面向对象系统的单元测试层次
  • 算法思维进阶 力扣 375.猜数字大小 II 暴力递归 记忆化搜索 DFS C++详细算法解析 每日一题
  • K8s集群两者不同的对外暴露服务的方式
  • React--》实现 PDF 文件的预览操作
  • [2025CVPR-图象分类]ProAPO:视觉分类的渐进式自动提示优化
  • ubuntu22.04 安装 petalinux 2021.1
  • B+树高效实现与优化技巧
  • 微信小程序私密消息
  • 聚铭安全管家平台2.0实战解码 | 安服篇(三):配置保障 自动核查
  • yolov11的简单实例
  • 【密码学】4. 分组密码
  • 关闭 UniGetUI 自动 Pip 更新,有效避免 Anaconda 环境冲突教程
  • Python Pandas.merge函数解析与实战教程
  • 软件测试之功能测试
  • Ubuntu系统完整配置教程
  • unbuntn 22.04 coreutils文件系统故障
  • RabbitMQ快速入门
  • 基于FPGA和DDS原理的任意波形发生器(含仿真)
  • 【Unity】Application类常见路径一览表