很多朋友第一次接触 Linux,不是在笔记本电脑上装了个发行版,而是租了一台云服务器、买了一块 Jetson Nano 开发板,或者在虚拟机里装了 Linux 系统。装好之后,面对黑乎乎的终端,第一个让人崩溃的问题往往不是“怎么执行命令”,而是“我到底怎么在命令行里改文件”。图形界面的编辑器没了,Windows 下的记事本、VS Code 也都用不上,这时候最友好的救命稻草,就是 Nano。
Nano 是 Linux 下最简单的命令行文本编辑器,没有之一。它不像 vim 那样需要背一堆模式切换命令,打开就能打字,屏幕底部永远有快捷键提示,堪称“小白友好”这个词的最佳代言。这篇文章我打算把 Nano 从入门到常用的操作完整梳理一遍,包括安装、打开文件、编辑、保存退出、复制粘贴、搜索替换、个性化配置,以及我这些年实际用下来踩过的坑。无论你是刚接触 Linux 的纯新手,还是准备在 Jetson 系列板子上做嵌入式开发、部署模型的老手,只要你需要在命令行里和文本文件打交道,这篇教程都能让你少走弯路。
1. 为什么选 Nano,而不是 vim 或 emacs
1.1 新手最容易卡住的“编辑器门槛”
先聊一个很现实的问题:为什么很多人学了三天 Linux,最后还是放弃了?我见过太多初学者抱着“一定要学 vim”的心态打开终端,结果在 vim 的 Normal 模式和 Insert 模式之间反复横跳,不小心按到某个键屏幕上全是乱码,最后连退出都退不出去。这种挫败感是毁灭性的。
Nano 最大的优势是全屏只有一个模式,不需要“切换模式”这种概念。你打开文件,光标停在那儿,直接敲键盘就能写字;屏幕底部两行快捷键提示(如 ^X Exit、^O Write Out)永远摆在那里,忘了就看一眼,非常直观。加上它默认在绝大多数 Linux 发行版里都预装了,临时登录一台没装图形界面的服务器时,Nano 就是你最稳定的帮手。
如果你非要我做个对比:
| 编辑器 | 学习曲线 | 适用人群 | 默认是否常见 |
|---|---|---|---|
| nano | 极低,打开即用 | 新手、日常修改配置、快速编辑 | Debian/Ubuntu 系默认自带 |
| vim | 陡峭,需要记忆模式和命令 | 长期在终端里重度编辑的人 | 一般也自带 |
| emacs | 陡峭且按键复杂 | 愿意深度定制的人 | 非默认,需安装 |
这不是说 vim 不好。vim 功能确实强大,但对你只是“临时改一下 nginx 配置”“看一个模型训练脚本”来说,你需要的并不是最强大的编辑器,而是最不容易出错的那一个。坦白说,我用过的很多云服务器上,绝大多数时候需要做的事就是改一个 IP、加一条配置、把某一行注释掉,Nano 三十秒搞定,用 vim 反而要想半天命令。
1.2 Nano 在嵌入式设备上的地位
除了服务器,Nano 在嵌入式 Linux 开发中也非常普及,尤其是 Jetson Nano、Jetson Orin Nano 这类开发板。这类板子虽然性能不弱,但作为嵌入式设备,很多时候跑的是命令行环境,或者你远程 SSH 进去调试,根本不可能开图形界面去编辑文件。Nano 这种极轻量、零依赖的编辑器优势就体现出来了:它几乎不占 CPU 和内存,系统资源可以全部留给深度学习推理、模型部署。
我之前在 Jetson 板子上部署 YOLOv8 人形检测模型时,频繁需要修改 conda 环境配置、清理脚本、onnx 模型加载路径,绝大多数操作就是通过nano直接改文件。相比用 vim 在板子上摸索,Nano 让我和周围朋友都能快速上手,也不容易误操作。对于入门嵌入式 Linux 的人来说,先学会 Nano,比硬啃 vim 要明智得多。
2. 安装与环境准备
2.1 先确认系统里有没有 Nano
大多数情况下,Nano 已经躺在你的系统里了。你可以打开终端,输入下面这条命令确认:
which nano如果返回了类似/usr/bin/nano的路径,说明已经安装了。想看看版本号,可以执行:
nano --version如果which nano没有任何输出,说明系统里没装,这时就需要用包管理器补上。不同的 Linux 发行版安装命令不一样,我这里整理了一个速查表:
| 发行版/系统 | 安装命令 |
|---|---|
| Debian / Ubuntu / Linux Mint | sudo apt install nano |
| CentOS / RHEL / Fedora | sudo yum install nano(Fedora 较新版本用sudo dnf install nano) |
| Arch Linux / Manjaro | sudo pacman -S nano |
| openSUSE | sudo zypper install nano |
| 国产 Linux 发行版(如统信 UOS、麒麟等) | 多为 Debian 系,使用sudo apt install nano即可 |
如果你用的发行版特别冷门,包管理器装不上,也可以去 GNU 官网下源码编译。但这一步对绝大多数用户来说没必要,命令行软件装起来最省事的方式永远是系统自己的包管理器。
2.2 本地终端、虚拟机和远程服务器都能用
Nano 是纯命令行软件,不依赖图形环境。这意味着你可以在本地 Linux 电脑的终端里使用,可以在虚拟机里装的 Linux 系统上使用,也可以通过 SSH 远程登录服务器后使用,规则完全一样。
很多新手在 Windows 上装了虚拟机,里面跑着 Ubuntu,打开终端却发现复制粘贴跟 Windows 不太一样。这里提醒一句:在虚拟机终端里,向 Nano 中粘贴文本通常用Ctrl+Shift+V,这和 Windows 的Ctrl+V不太一样;鼠标右键粘贴也可能有效,取决于终端软件设置。后面我会专门讲粘贴相关的问题。
另外,如果你登录的是远程服务器,注意一点:执行nano修改系统文件(比如/etc/nginx/nginx.conf、/etc/ssh/sshd_config)时,普通用户没有写权限,必须要用sudo nano。这个细节看着简单,却是我见过新手最容易卡住的地方——开了 nano 改半天,一按保存提示权限不足,前面的操作全白费。
3. 把 Nano 用起来:打开、编辑、保存、退出
3.1 打开或新建一个文件
Nano 的用法很简单,命令格式是:
nano [选项] 文件路径比如我想新建一个叫test.txt的文件,直接输入:
nano test.txt如果当前目录下不存在这个文件,Nano 会新建一个;如果文件已经存在,那就直接打开。你还可以带上绝对路径:
nano /etc/nginx/nginx.confNano 打开后会进入全屏编辑界面。界面最上方一行显示文件名和文件状态;中间区域就是编辑区;最下方两行是快捷键提示栏,里面会显示^G Help、^O Write Out、^X Exit等。这里的^符号代表 Ctrl 键,比如^X就是按住 Ctrl 再按 X。搞不清快捷键的时候,按Ctrl+G打开完整的帮助信息,这招对新手特别有用。
顺便提一个技巧:如果你只是想打开某个文件并自动定位到指定行,可以用nano +行号 文件路径,例如nano +120 /var/log/syslog。不过日志文件一般用 tail 更方便,这个技巧更适合改配置时想定位到某一段。
3.2 最优先记牢的四个操作
Nano 的快捷键很多,但刚开始训练营阶段,你只需要死记这四组:
Ctrl+O:保存文件(WriteOut)。按完它会询问要写入的文件名,通常直接回车确认即可。Ctrl+X:退出 Nano。如果文件有修改,会提示你是否保存,按 Y 保存并退出,按 N 不保存直接退出。Ctrl+W:搜索文本。按完输入关键词,回车后光标会跳到第一个匹配位置。Ctrl+G:打开帮助菜单,里面是所有快捷键说明,忘了就查。
这里我强烈建议你把Ctrl+O养成习惯。在 Nano 里,修改内容后必须手动保存,Ctrl+X退出时它也只会问一句“要不要保存”,如果你手滑按了 N,这段时间的修改就全丢了,没有回收站。我以前给一个朋友远程指导时,他辛辛苦苦打了几十行配置,退出时按错键,全部白写,那种欲哭无泪的滋味我自己也尝过。
3.3 一次完整的操作演练
我来带你把流程完整走一遍。打开终端,输入:
nano mynote.txt在打开的界面里,随便打几行字,比如:
Hello, Nano! This is my first file.然后按Ctrl+O,底部提示File Name to Write: mynote.txt,直接按回车。屏幕底栏会显示写入成功的提示。接着按Ctrl+X退出,回到终端,输入cat mynote.txt就能看到刚才保存的内容。
如果你不想保存,直接在编辑状态下按Ctrl+X,它会问Save modified buffer?,这时按 N,就会不保存直接退出。如果你本来不想改这个文件,但误开了 nano 导致它认为有修改,可以用这个方式安全退出,不会污染原文件。
4. 高效编辑:光标移动、复制粘贴、撤销重做
4.1 让光标跑得更快
在 Nano 里,方向键当然可以移动光标,但只靠方向键效率太低了。下面这几个移动快捷键非常常用:
Ctrl+A:跳到当前行行首。Ctrl+E:跳到当前行行尾。Ctrl+Y:向上翻页。Ctrl+V:向下翻页。Ctrl+_:跳到指定行号,输入数字后回车。Alt+\:跳到文件开头。Alt+/:跳到文件末尾。
我实际使用中发现,Ctrl+A和Ctrl+E是最高频的两个操作,改配置文件时需要快速到行首加注释或到行尾删掉分号,比按住方向键猛敲舒服太多。Ctrl+_也很实用,比如运行一段 Python 脚本报错在第 233 行,直接用nano打开文件,按Ctrl+_输入 233,光标马上到位,不用拖滚动条。
4.2 Nano 命令能复制吗?这是被问得最多的问题
很多人第一次用 Nano 时的灵魂拷问就是:“Nano 命令能复制嘛?”答案是能,而且操作并不复杂。先记住三个基础快捷键:
Alt+6:复制光标所在的那一行。Ctrl+K:剪切光标所在的那一行(也可以理解为删除一整行)。Ctrl+U:粘贴,同时也用于取消剪切恢复文本。
只要你把光标放在某一行上,按Alt+6,这一行就被复制了,然后移动到目标位置按Ctrl+U,就能粘贴出来。Ctrl+K剪切整行,再按Ctrl+U粘贴到别处,这就是“移动整行”的标准操作。
如果你只想复制某一段文字,而不是整行,也有办法:先把光标放到要复制的起始位置,按Alt+A开始标记,然后用方向键移动光标选中文本,这时被选中的文字会反白显示,再按Alt+6复制,最后到目标位置按Ctrl+U粘贴。如果标记中途发现选多了,再按一次Alt+A取消标记重新选。
这里补充一个终端层面的技巧:如果在远程终端或虚拟机里想粘贴外部文字(比如从浏览器复制的命令),一般使用Ctrl+Shift+V而不是Ctrl+V。有些终端还支持鼠标右键粘贴,看具体软件设置。这个不是 Nano 自己的快捷键,但新手经常混淆。
4.3 撤销、重做与误删恢复
Nano 从 2.8 版本开始支持撤销和重做,快捷键是:
Alt+U:撤销上一步操作。Alt+E:重做上一步操作。
这两个按键组合有时候会在某些 SSH 终端中被拦截,因为部分终端模拟器可能把 Alt 键当成菜单键。遇到这种情况,可以按两次 Esc 代替 Alt,也就是先按Esc再按Esc,然后按U,效果等同于Alt+U。这个“Esc Esc”替代 Alt 的方式是 Nano 的老传统,很多老教程里也会提到。
另外,误删的时候还有个心态拯救技巧:如果你不小心剪切了不想删的内容,马上按Ctrl+U把它粘贴回来。因为Ctrl+K的本质是“剪切到剪贴板”,只要没有再剪切别的内容,就可以用Ctrl+U恢复。长按Ctrl+K连续删几行,再按一次Ctrl+U就能把这几行整体粘贴到别处,用来移动代码块非常方便。
5. 搜索与替换:改配置文件时的高频操作
5.1 搜索关键词
在文件内容比较长的时候,肉眼找某个关键词太痛苦了。Nano 的搜索快捷键是Ctrl+W。按下去之后,屏幕底部会提示搜索:输入关键词并回车,光标就会跳到第一个匹配的位置。想查找下一个匹配,按Alt+W(注意不是Ctrl+W)。
搜索时还能附加一些选项,在搜索输入状态下:
Alt+C:切换是否区分大小写。Alt+R:切换正则表达式模式,这里说的正则不是基础正则,而是 GNU 风格的正则。
举个例子,你想在一个配置文件中搜索“Listen”,但又不想匹配“listen”,就按Ctrl+W,再按Alt+C切换成区分大小写,输入Listen回车,匹配结果就精确了。
这里有个容易踩的坑:如果你在搜索时输入了词语但按了 F3 或 F6 之类的功能键,行为可能会变成其他操作。Nano 的界面提示已经写明,搜索框内的快捷键尽量只用组合键,不要乱按单键,避免触发奇怪的动作。
5.2 替换文本
替换功能的快捷键是Ctrl+\(注意是反斜杠,在有些键盘布局上是Ctrl+Shift+\)。操作流程大概是:
- 按
Ctrl+\,底部提示输入要查找的文本,输入后回车。 - 再提示输入替换后的文本,输入后回车。
- 光标定位到第一处匹配,底部提示是否替换。按 Y 替换当前这一处并跳到下一处;按 N 跳过并继续下一处;按 A 是替换全部剩余匹配。
我曾经需要把一套服务器配置文件里的所有旧 IP 地址改成新 IP,打开文件后按Ctrl+\,输入旧 IP,再输入新 IP,然后直接按 A 全部替换,一瞬间搞定。这个功能在批量修改路径、端口、IP 时极其高效。
需要提醒的是,使用“全部替换”时,一定要确认你的查找词没有对不上的歧义。比如你想把文件里所有port替换成PORT,但文件里有个变量叫port_num,按 A 之后port_num也会被改成PORT_num,这就会出问题。这时候最好逐个确认,或者把替换词写得精确一点。
5.3 定位到具体行号
Ctrl+_跳转到指定行号,配合报错信息非常方便。比如 Python 或 Shell 脚本运行时报错提示第 37 行有问题,你打开文件后按Ctrl+_,输入 37,回车,光标立刻跳到那一行。日志文件排查、代码调错时这个功能是救命级别的。
顺便提一句,如果你希望一打开文件就跳到指定行,也可以不加-l之类选项,直接使用nano +37 文件名,打开后就会定位到 37 行。这个用法适合你明确知道问题行号的场景。
6. 让 Nano 更顺手:个性化配置
6.1 配置文件在哪
Nano 有个全局配置文件/etc/nanorc,修改后会影响到系统里所有用户;还有个人配置文件~/.nanorc,只对当前用户生效。大多数情况下,我们只需要在个人配置里加内容。如果这个文件不存在,直接创建就行。
修改个人配置的方法也很简单,就是打开文件往里加参数:
nano ~/.nanorc改完保存退出后,重新打开 nano 才会生效。因为配置文件是在 nano 启动时读取的。
6.2 我常用的几个配置项
下面这些是我自己在~/.nanorc里必开的功能,每一项都有明确的使用场景:
set numbers set mouse set autoindent set tabsize 4 set tabstospaces解释一下:
set numbers:开启行号显示。写代码、改配置时没有行号就像看一页没有页码的书,很不方便。set mouse:允许鼠标点击移动光标。虽然命令行操作用多了会习惯键盘,但对新手过渡期很有帮助。set autoindent:自动缩进。换行后会自动在新行开头加上与前一行相同的缩进,写脚本时特别实用。set tabsize 4:Tab 键宽度设为 4 个字符。这是 Python 社区和大多数配置文件常用的缩进量。set tabstospaces:Tab 键输入为空格。这样就不会出现混用 Tab 和空格引发的 Python 缩进报错。
如果你不喜欢屏幕底部两行快捷键提示占空间,也可以加一行set nohelp把它隐藏起来。但这个选项因人而异,新手阶段我反而不建议隐藏,快捷键提示本身就是 Nano 最大的优势。
6.3 打开语法高亮
Nano 支持语法高亮,只是某些发行版默认没有启用。启用方法是在~/.nanorc里加上 include 语句,把系统自带的语法高亮文件加载进来。比如在 Debian/Ubuntu 系统上,可以加:
include /usr/share/nano/*.nanorc保存后重新打开 nano,编辑 Python、Shell、JSON、YAML 等文件时,关键字、字符串、注释都会有颜色区分,眼睛轻松一大截。
不同的发行版语法文件路径可能略有差别,常见的位置有/usr/share/nano/、/usr/share/nano-syntax/。如果不确定,可以用find /usr/share/nano -name "*.nanorc"查一下你系统里的实际路径。我之前帮朋友在 CentOS 上配置时,路径是/usr/share/nano/下面的文件比较少,需要额外安装nano-syntax-enhanced这类软件包才能得到更多语言的语法高亮。
7. 多文件与进阶实用技巧
7.1 同时打开多个文件
Nano 也支持一次打开多个文件,只是它不会像图形编辑器那样并排显示,而是在同一窗口内用“缓冲区”切换。命令格式是:
nano -M file1.txt file2.txt加上-M参数后,每个文件会被加载到独立的缓冲区中,然后使用这两个快捷键在文件间切换:
Alt+,:切换到上一个缓冲区。Alt+.:切换到下一个缓冲区。
多文件切换这种操作,实际使用频率不算高。如果你的需求是“同时看两个文件的内容”,我更建议开两个终端窗口,或者使用tail -f观察日志,比在 Nano 内部切换缓冲区更直观。多文件缓冲更多是当你确认只想在同一个 Nano 进程里临时对比两段内容时使用。
7.2 只读模式:防止手滑改坏文件
Nano 支持以只读方式打开文件,命令是:
nano -v 文件名用这种方式打开后,你可以查看文件内容,但无法修改保存,屏幕底部会出现[ Read Only ]的提示。这个功能在你检查系统配置文件、查看别人写的脚本时非常好用,能避免“本来只想看看,结果不小心按到键盘把内容改了”的尴尬。
不过要说明一点:只读模式并不是绝对安全,如果你拥有文件写权限且系统允许,仍然有可能通过其他方式绕过。所以真正关键的配置文件修改前,更稳妥的做法是先备份一份:cp 文件 文件.bak,这条习惯在服务器运维中非常重要。
7.3 挂起 Nano:临时回到终端
假设你正在 Nano 里编辑文件,突然想到要执行一条命令查看结果,又不想退出编辑器,可以按Ctrl+Z把 Nano 挂起到后台。它会回到 shell,你就能执行命令,等看完想继续编辑时,在终端输入fg并回车,Nano 就会重新回到前台。
这个操作之所以好用,是因为它不丢失编辑状态,还能让你在编辑过程中随时验证文件内容。比如你在改一个 Shell 脚本,想确认某个服务的端口号,直接挂起,执行ss -tlnp,看完再fg回来继续改,无缝衔接。
需要特别提醒的是:在远程 SSH 会话中,如果你挂起了 Nano 但直接关闭了终端窗口,Nano 进程可能还会残留在服务器上,造成后台进程堆积。所以挂起后记得要么用完fg恢复,要么用exit退出 SSH 前先确认没有挂起的编辑器进程。
7.4 打开文件并定位到指定行
前面提过这个用法,我再展开一下。命令格式:
nano +行号 文件路径比如:
nano +50 /etc/nginx/nginx.conf这会在打开文件后直接将光标定位到第 50 行。实际工作中,我在看完日志报错后,经常把行号复制下来,再用一条命令直达问题行,比打开文件后滚动查找快太多。
8. 常见问题与避坑实录
8.1 粘贴代码或日志时缩进全乱了
这可能是刚接触 Nano 时最容易遇到的现象:你从浏览器或 Windows 的记事本复制了一段代码,按Ctrl+Shift+V粘贴进 Nano,结果每一行前面都多出了乱七八糟的空格或 Tab,缩进完全变形。
原因在于 Nano 的自动缩进功能和终端的粘贴协议在配合时会产生叠加。解决方法是粘贴前临时关闭自动缩进,快捷键是Alt+I(切换自动缩进开关),粘贴完成后再按一次Alt+I恢复。如果问题依然存在,可以试试先粘贴到终端窗口里,再复制一次纯文本,有些终端自身的格式化会把多余缩进吃掉。
此外,较新版本的 Nano 和多数现代终端已经支持“括号粘贴协议”,正常情况下粘贴不会乱缩进。如果你还遇到这个问题,建议检查一下 SSH 终端软件版本和 Nano 版本,过旧版本尽量升级。
8.2 保存文件提示 Permission Denied
前面说过,修改/etc/下的系统文件时,普通用户没有写权限。表现就是你编辑了半天,按Ctrl+O保存,底部提示类似[ Error writing /etc/nginx/nginx.conf: Permission denied ]。
正确做法是编辑前就使用sudo nano 文件路径,以 root 权限启动 Nano。如果已经用普通用户打开了文件,这时退出会丢失修改,所以要养成习惯:改系统文件前先确认自己的权限。
还有一种更隐性的情况:你开着一个文件没保存,然后 SSH 超时断开,重新登录后想保存,发现文件锁已被进程占用。这种情况往往需要先杀掉残留的 nano 进程或用pgrep nano查一下,再做处理。
8.3 退出时把“是否保存”选错了
Ctrl+X退出时,如果文件有修改,Nano 会问Save modified buffer?,这时按 Y 是保存,按 N 是不保存。新手容易在犹豫中按错,尤其是不小心按了回车(在某些场景下回车的默认值会让你保存)。
如果你按了 Y,但后来发现其实不想保存,还有补救机会:下一步会询问文件名,此时按Ctrl+C可以取消保存,回到编辑器。记住这一步很关键,它能救回一次误操作。
8.4 中文显示乱码
Nano 本身对 UTF-8 编码支持很好,但如果你在服务器上看到中文乱码,大多数原因是系统的 locale 不是 UTF-8。可以在终端执行locale查看当前的字符集,如果LANG不是类似zh_CN.UTF-8或en_US.UTF-8,可以尝试执行:
export LANG=en_US.UTF-8再重新打开 nano。如果系统里没有安装对应 locale,可能需要安装并重新生成语言包,这类问题在我的经验中更多出现在最小化安装的服务器上。
另外要注意:如果文件本身是 GBK 编码,在 nano 里直接显示会乱码,但保存时 nano 不会主动转换编码,仍然按原编码保存。如果你确实需要转码,可以用iconv等命令处理,不要指望 nano 帮你自动转换。
8.5 Tab 键到底该用空格还是制表符
写 Python 时,Tab 和空格混用会直接报TabError: inconsistent use of tabs and spaces in indentation,非常折磨人。Nano 默认按 Tab 键插入的是制表符,如果你希望 Tab 键插入空格,就在配置文件~/.nanorc里加上set tabstospaces。我在实际写脚本时基本都会开启这个选项,配合set tabsize 4,让缩进视觉上和其他编辑器保持一致。
如果你只想临时切换,也可以在 Nano 里按Alt+Q之类快捷键调整,但不同版本差异很大,最稳妥的方式仍是写进配置文件。
再多说一句我在实际使用中的体会:如果你发现自己由于某些错误在 Nano 里反复修改同一个文件,不妨先把文件备份出来,在本地用编辑器处理好再传上去,或者直接装一个支持远程编辑的图形 IDE。选择工具永远是为了解决问题,而不是为了证明某个编辑器更“高级”。但当你只是想在服务器上快速改一行配置、写一个启动脚本时,Nano 的轻快、直观、零学习成本,真的是我踩了很多次坑之后最顺手的选择。希望这份教程能帮你跨过命令行编辑这道坎,少走几步弯路。