思维导图
一、高效文本编辑: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
: 替换当前行的第一个old
为new
。
:s/old/new/g
: 替换当前行的所有old
为new
。
:%s/old/new/g
: 替换整个文件的所有old
为new
(%
代表所有行)。
:%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密钥对 (公钥和私钥),可以实现无需输入密码的安全登录,这对于自动化脚本和提高效率至关重要。
设置步骤:
- 在客户端生成密钥对 (
ssh-keygen
)
在你的本地机器 (客户端) 上执行。
ssh-keygen -t rsa
# 按照提示,可以一直按回车使用默认设置
# 会在 ~/.ssh/ 目录下生成 id_rsa (私钥) 和 id_rsa.pub (公钥)
- 将公钥复制到服务器 (
ssh-copy-id
)
这是最推荐的方法,它会自动处理服务器端的文件和权限问题。
ssh-copy-id auser@192.168.121.151
# 输入一次 auser 的密码
# 该命令会将本地的 id_rsa.pub 内容追加到远程主机的 ~/.ssh/authorized_keys 文件中
- 测试免密登录
ssh auser@192.168.121.151
# 如果设置成功,这次将不再提示输入密码,直接登录
四、总结
本章深入探讨了Linux系统中三个至关重要的工具:Vim编辑器、文件链接机制以及SSH远程管理。Vim是高效文本处理的利器;理解软硬链接的区别有助于灵活地组织文件系统;而SSH及其相关工具是现代系统运维和远程协作的基石。熟练掌握这些命令和概念,将使您在Linux环境中的操作更加专业、高效和安全。
练习题
请在您的Linux环境中完成以下操作,并写出所使用的命令。
题目:
- 使用 Vim 打开一个名为
my_script.sh
的新文件。 - 在
my_script.sh
中,进入插入模式并输入#!/bin/bash
和echo "Script is running"
两行内容。 - 不退出 Vim,使用命令行模式保存
my_script.sh
文件。 - 在
my_script.sh
中,使用命令行模式显示行号。 - 在
my_script.sh
中,使用命令行模式将running
替换为working
。 - 在
my_script.sh
中,使用命令行模式将/etc/hosts
文件的内容读入 (导入) 到文件末尾。 - 创建一个名为
data_file.txt
的文件,并为它创建一个名为data_hardlink
的硬链接。 - 为
data_file.txt
文件创建一个名为data_softlink
的软链接。 - 删除
data_file.txt
,然后分别使用ls -l
命令检查data_hardlink
和data_softlink
的状态。 - 在你的家目录下创建一个名为
app
的目录,然后为这个目录创建一个名为app_link
的软链接。 - 使用
ssh
命令以用户admin
的身份登录到 IP 地址为10.0.0.10
的远程服务器,并使用非标准的端口22022
。 - 将你本地家目录下的
my_script.sh
文件上传到10.0.0.10
服务器上admin
的/opt/scripts/
目录中。 - 将
10.0.0.10
服务器上的/var/log/
整个目录下载到你本地的server_logs/
目录 (假设本地server_logs
已存在)。 - 在你的本地机器上生成一对新的 SSH 密钥对,并将其安全地复制到
10.0.0.10
服务器的admin
账户,以实现免密登录。 - 在 Vim 中,不退出文件,如何快速跳转到文件的最后一行?
答案与解析:
- 打开 Vim:
vim my_script.sh
解析: vim
命令后跟文件名,如果文件不存在则会创建一个新的缓冲区。
进入插入模式并输入:
- 按
i
(或a
,o
) 进入插入模式。 - 输入内容。
- 按
Esc
返回正常模式。
解析:i
是进入插入模式最常用的按键之一。
- 按
保存文件:
:w
解析: 在正常模式下输入 :
进入命令行模式,w
表示保存 (write)。
- 显示行号:
:set nu
解析: set nu
是 set number
的缩写,用于显示行号。
- 替换文本:
:%s/running/working/g
解析: :
进入命令行模式。%
表示整个文件,s
表示替换,/old/new/
是替换格式,g
表示全局 (global),即替换行内所有匹配项。
读入文件内容:
- 按
G
跳转到文件末尾。 - 按
o
新建一行并进入插入模式,再按Esc
返回正常模式 (可选,确保插入位置正确)。 - 输入
:r /etc/hosts
。
解析::r filename
命令会将指定文件的内容读入并插入到当前光标所在行的下方。
- 按
创建硬链接:
touch data_file.txt
ln data_file.txt data_hardlink
解析: ln
命令默认创建硬链接。
- 创建软链接:
ln -s data_file.txt data_softlink
解析: ln
的 -s
选项表示创建符号链接 (soft link)。
- 检查链接状态:
rm data_file.txt
ls -l data_hardlink # 正常显示,链接数减少
ls -l data_softlink # 会看到链接名标红,指向一个不存在的路径
解析: 删除源文件后,硬链接因指向相同的 inode 而不受影响。软链接因其指向的路径已失效而变成悬空链接。
- 为目录创建软链接:
mkdir ~/app
ln -s ~/app ~/app_link
解析: 软链接可以指向目录,这是硬链接无法做到的。
- SSH 指定端口登录:
ssh -p 22022 admin@10.0.0.10
解析: ssh
的 -p
选项用于指定非默认的端口号。
- SCP 上传到指定目录:
scp ~/my_script.sh admin@10.0.0.10:/opt/scripts/
解析: scp
的目标路径是 user@host:path
,这里的 path
是服务器上的绝对或相对路径。
- SCP 下载目录:
scp -r admin@10.0.0.10:/var/log/ server_logs/
解析: -r
选项用于递归复制整个目录。
- 生成并复制公钥:
- 生成:
ssh-keygen
- 复制:
ssh-copy-id admin@10.0.0.10
解析: ssh-keygen
生成密钥对,ssh-copy-id
是最安全、最便捷的复制公钥的方法。
- Vim 跳转到最后一行:
在正常模式下,按G
(大写)。
解析:G
是Vim中跳转到文件最后一行的快捷键。gg
则是跳转到第一行。