-- 简书作者 谢恩铭 转载请注明出处
内容简介
- 第二部分第六课:Nano文本编辑器和终端配置
- 第二部分第七课预告:软件安装,如虎添翼
Nano,初学者的文本编辑器
上一课 Linux探索之旅 | 第二部分第五课:用户和权限,有权就任性 中,我们学习了不少知识点,估计大家都比较辛苦。
这一课比较简单,没有什么太难的概念。不过这一课会讲如何配置终端噢。
大家可以 泡个泡面,烤只烤鸡;剥个卤蛋,慢慢来看。
之前的课程中,我们已经学会了在终端中用多种不同的方式来查看文件的内容,但是我们还不知道如何在终端中修改文件的内容。
为什么我们把文本编辑器推迟到现在来说呢?因为这是终端可以提供的强大功能之一。
在Linux终端的文本编辑器当中,比较著名的有:Nano,Vim,Emacs,等等。其他文本编辑器还有Gedit,Sublime等等。当然了,我们不可能列举所有的文本编辑器,太多了。
在这些文本编辑器当中,Nano是比较适合初学者上手的。之所以称其为初学者的文本编辑器,绝没有贬低Nano的意思,Nano的功能很强大,只是比较容易入门。
之后的课程我们会用专门的一课来学习Vim,要入门Vim可能需要下点功夫。然后也会聊聊Emacs。
小编写过一篇关于Emacs的文章:程序员小助手 | Emacs,最强编辑器,没有之一
Nano初体验
说起nano这个英语单词,很多人可能不陌生。
nano是“毫微”的意思,也就是10的-9次方。
著名的纳米科技的“纳米”就是nanometer,由nano和meter组成,nano是“十亿分之一”,meter是“米”。
所以纳米就是十亿分之一米。
「一米」与「一纳米」的大小相比較,相当于地球的直径和地球上的一颗玻璃弹珠之间的差距。
我们这个文本编辑器叫做nano,应该是取其“短小精悍”的寓意吧。“麻雀虽小,五脏俱全”。
Nano相比Vim或Emacs,确实小巧简单很多,不及后两者复杂和强大。但是对于入门文本编辑器还是很合适的。
Nano是一个文本编辑器,不是文本处理器
你真知道什么是文本编辑器吗?它和文本处理器又有什么区别呢?
文本编辑器:是这样一种软件,它可以编辑和查看文本文件,但是不能对文字做格式处理(例如:加粗,斜体,改变颜色,改变字体大小,添加超链接等等)。
常见的有Windows下的记事本,Mac OS X下的文本编辑,Linux下的vi、emacs、gedit,DOS下的edit等。在Linux下,默认系统中至少安装了一种文本编辑器。当然,在Mac OS X下,nano也是默认安装的。文本处理器:也是一种软件,又叫文档编辑器,不仅可以编辑和查看文档,而且可以对其文字进行格式处理(加下划线,设为标题,插入图片等等)。这些软件只能在图形界面下使用。
常见的有Windows下的Word,Mac OS X下的Pages,Linux下的OpenOffice Writer等。
文本编辑器处理的文件格式和文本处理器的文件格式一般也不同。
那么什么时候我们需要用到文本编辑器呢?
我们可以用文本编辑器来编辑纯文本文件。纯文本格式,就是没有任何文本修饰的,没有任何粗体,下划线,斜体,图形,符号或特殊字符及特殊打印格式的文本。只保存文本,不保存其格式设置。
在Windows下,我们比较熟悉的纯文本文件就是.txt结尾的文本文档了。在Linux和Mac OS下,后缀名没那么重要,不少纯文本文件是没有后缀名的。
文本编辑器对于程序员来说又是必不可少的。它可以让我们编辑各种编程语言的代码程序:.c(C语言代码文件),.cpp(C++代码文件),.py(Python代码文件),.php(PHP代码文件),.java(Java代码文件),.xml(XML代码文件)等等。
总之,如果你“不幸”成为了一个程序员,那么文本编辑器的学习是逃不了的,这是你的吃饭家伙。
即使你不是程序员,不需要写代码,但是很多系统的配置文件也需要用文本编辑器来编辑。
在学习了如何使用Nano之后,我们会学习如何修改两个配置文件:.nanorc和.bashrc。这两个文件能让我们分别配置nano和终端。
揭开Nano的面纱
Nano的全称其实是GNU Nano。还记得我们的老朋友GNU么?
是的,就是那个我们提过的GNU项目,在Linux探索之旅 | 开宗明义+第一部分第一课:什么是Linux?中讲过。
GNU还有个基金会,由Richard Stallman(理查德·斯托曼)于1985年10月创建,叫自由软件基金会(英语:Free Software Foundation,FSF)是一个致力于推广自由软件的美国民间非营利性组织。其主要工作是执行GNU计划,开发更多的自由软件。
GNU计划(英语:GNU Project),又译为“革奴计划”,一个自由软件集体协作项目,1983年9月27日由理查德·斯托曼在麻省理工学院公开发起。它的目标是创建一套完全自由的操作系统,称为GNU。理查德·斯托曼最早在net.unix-wizards新闻组上公布该消息,并附带一份《GNU宣言》等解释为何发起该计划的文章,其中一个理由就是要“重现当年软件界合作互助的团结精神”。 GNU是“GNU is Not Unix”(意思是“GNU不是Unix”)的递归缩写。为避免与单词gnu(非洲牛羚,发音与“new”相同)混淆,斯托曼宣布GNU发音应为“Guh-NOO”(/ˈgnuː/ ),与“canoe”发音相似。其中,Emacs就是由这个计划孵化而出。
我们的Linux的全称也是GNU Linux。因为Linus Torvalds基本只是开发了LInux的内核,Linux的外部程序都是来自世界各地的GNU社区程序员编写。
Nano的设计灵感来自于一个叫Pico的文本编辑器,pico是“10的-12次方”,万亿分之一,比nano还要小1000倍。我们平时说的皮米picometer(由pico和meter(英语“米”)连结而成),就是万亿分之一米。
当然了,nano其实也是 Nano is ANOther editor(意思是“nano是另一种编辑器”)的递归缩写。
有趣的老外最爱在编程里用递归来命名了。比如Linux是Linux is not Unix(意思是“Linux不是Unix”)的递归缩写。
启动nano
因为Ubuntu预装了nano,因此要启动nano,只需要在终端中输入
nano复制代码
回车,就打开了nano文本编辑器:
如上图所见,我们的Nano文本编辑器就是长这样的,是不是很简洁?
而你现在就可以在里面输入文字了,如下图:
看到了吗,我输入了两句英语。
Hello, how are you ? (Hello,你好吗?)
I am typing in nano, it is wonderful... (我正在nano里打字,棒极了...)复制代码
Nano就是这么方便,因为并不是所有文本编辑器都可以一上来就输入文字的。比如Vim,要输入文字还得先做其他操作,以后的课会学到。
如果你有使用Emacs的经验,那你可能觉得这一点和Emacs还挺像的,Emacs也是一上来就可以输入文字。
Nano中的键盘快捷键
在上图中的终端下部,我们可以看到有两行帮助文档,如下图:
^ 这个符号表示键盘的Ctrl键,所以这些都是Nano的快捷键组合。比如,^X标明的是Exit,那么就是退出Nano,因为exit是英语“退出”的意思。
这些快捷键组合中虽然字母都是大写,但其实就是键盘上对应的字母键,并不需要用Shift键来将其变为大写。
以下给出一些常用的Nano组合快捷键:
Ctrl+G:显示帮助文档
Ctrl+O:保存文件
Ctrl+R:打开其他文件
Ctrl+Y:上一个屏幕
Ctrl+V:下一个屏幕
Ctrl+K:剪切当前一行
Ctrl+X:退出
Ctrl+W:查找
Ctrl+U:黏贴刚剪切的内容
Ctrl+/:替换
Ctrl+F:向前移动一格光标
Ctrl+B:向后移动一格光标
Ctrl+P:向上移动一行
Ctrl+N:向下移动一行
其他还有不少快捷键,一般Nano都会在你操作的屏幕上提醒。所以很方便。但是再论学好英语对编程的帮助,看到这些提示了吗?都是英语写的。对于程序员, 为什么英语比数学更重要? 如何学习
当然了,我们用键盘上的方向键(上,下,左,右)也可以控制光标移动。PaUp和PaDn也分别与Ctrl+Y和Ctrl+V功能一样。
如果你比较熟悉这些快捷键组合之后,你觉得nano下方的帮助文档有点碍眼,那你也可以让它消失,只要先按Esc键,再按X键,帮助文档就没了。如果要重新调出帮助文档,则同样操作。
Nano的参数
刚才我们打开nano时,是单独用了nano这个命令。当然,nano命令也可以带参数的。
最常用的参数当然就是要打开的文件名咯,例如:
nano file.txt复制代码
就会用nano打开file.txt,如果你对file.txt有写的权限,那你就可以用nano来修改这个文件了。
如果file.txt文件不存在,那么就会创建一个空文件,名字叫做file.txt,并用nano打开。
nano的其他参数有不少,不过小编挑了三个个人觉得比较实用的:
-m:激活鼠标。如果没有-m参数,那么鼠标在nano里是不起作用的,加了-m参数鼠标可以通过点击来控制光标的位置。
-i:激活自动缩进的功能。这对于程序员写代码太有用了。
-A:激活智能Home键的功能。通常状况下,我们按下键盘的Home键,我们的光标会立即跳到一行的最开始,如果用了-A这个参数,那么按下Home键它会智能地判断,如果一行的开始处有缩进,那么它会使光标跳转到紧跟在缩进之后,而不是一行的最开始。
如果我们要同时激活三个属性,只需要这样用:
nano -miA file.txt复制代码
通过.nanorc来配置Nano
现在,既然我们已经初步了解了如何使用nano(当然了,要熟练使用还需要多实践咯)。
我们也看到,nano实在很易用,只需要熟悉一些常用的键盘快捷键组合就可以了。
在今天这课的开始处,我们说了要学习用文本编辑器修改一些配置文件。
Nano也有一个配置文件,用于设置nano的一些选项。这个文件叫做 .nanorc
注意,.nanorc的最前面有一个点,表明这是一个隐藏文件。
像这样的配置文件,如果用ls -l命令是列不出来的,需要用ls -a来列出。
一般Linux中的配置文件大多以点开头,而且多以rc结尾。比如vim的配置文件 .vimrc,bash shell的配置文件.bashrc,等等。
那这个rc是什么意思呢?当然了,不理解rc什么意思没有关系,不过我们来满足一下自己的好奇心:
Linux或Unix的许多程序在启动时,都需要“rc”后缀的初始文件或配置文件。
“rc”,它是“runcomm”的缩写――即“run command”(运行命令)的简写。 "rc" 是取自 "runcom", 来自麻省理工学院在 1965 年发展的 CTSS系统。相关文献曾记载这一段话:"具有从档案中取出一系列命令来执行的功能;这称为 "run commands" 又称为 "runcom",而这种档案又称为一个 runcom (a runcom)。
" rc”是很多脚本类文件的后缀,这些脚本通常在程序的启动阶段被调用,通常是Linux系统启动时。如/etc/rc(连接到/etc/rc.d/rc)是Linux启动的主脚本,而.bashrc是当Linux的bash shell启动后所运行的脚本。
每个Linux的用户都可以在自己的家目录创建.nanorc这个文件,在每次nano启动前,它会读取此配置文件。
在小编的情况,因为我的用户名是oscar,所以我的.nanorc文件应该是 /home/oscar/.nanorc
但是,我查找了,在我的家目录中,并没有.nanorc这个文件。在你的情况,可能有,也可能没有。但是不要紧。因为如果在你的家目录没有.nanorc,那么nano会用全局的配置文件。
创建.nanorc
如果你的家目录里也没有.nanorc,那么你可以创建一个。怎么创建呢?很简单:
nano .nanorc复制代码
在这个.nanorc文件中,你可以输入你的配置信息。
每一行一句配置语句,配置语句是以set(用于激活。set是英语“放置,设置”的意思)或unset(用于关闭)开头,后接你要配置的项目。例如:
set mouse复制代码
这句话就用于激活鼠标(mouse是英语“鼠标”的意思)。有了这句话,那么每次nano启动时都会激活鼠标操作了,我们启动nano就不必写-m这个参数了,是不是很方便?
我们也可如法炮制,使得我们不用每次启动nano都加上-i和-A参数:
set autoindent复制代码
这句是用于激活自动缩进,相当于-i参数的作用。
set smarthome复制代码
这句用于激活智能Home键。
如下图所示:
如果要保存文件,只要按下Ctrl+O,它会提示你文件名是.nanorc。因为我们已经指定了文件名,直接按下回车,这三行就写入到了.nanorc中。可以看到终端提示:[Wrote 3 lines],表示“写入了3行”。
如果你完成了配置,那么可以按下Ctrl+X来退出nano。
下次你再启动nano的时候,你会发现:鼠标被激活了,自动缩进也激活了,智能Home键也激活了。
配置文件可以大大提高我们的工作效率。
全局的nanorc和语法高亮
在每个用户的家目录中的.nanorc这个文件非常实用,因为它可以帮助你设置自己的nano选项。
但是,如果你的Linux系统中有几十个用户,你想要为所有这些用户都激活nano的鼠标操作,难道你要登录每一个用户的账户,然后在他们各自的.nanorc中添加 set mouse这句话么?那上百个用户呢?岂不是要累坏了。
Linux系统的开发者早就想到了这一点。事实上,nano有一个全局的配置文件,是为系统上所有用户所公共调用的,也叫nanorc,但是在/etc中,是/etc/nanorc。这回nanorc前面没有点了。
这个全局的nano配置文件只能被root用户修改,因为是在系统文件夹/etc中。
在我们以前的课程Linux探索之旅 | 第二部分第三课:文件和目录,组织不会亏待你中,我们介绍过/etc这个目录,它里面存放系统的配置文件。一般为所有用户共用。
因此,如果我们要修改这个文件,建议用sudo命令。
sudo nano /etc/nanorc复制代码
输入你的用户密码,就打开了这个配置文件,如下图:
可以看到这个配置文件内容就很多了,当然也有很多是注释,也就是以#开头的。你可以向下滚动这个文件,会发现有300行(小编的情况)。
在这个配置文件里,有所有可以放置在你自己的.nanorc中的语句。比如 set autoindent。但是这些配置语句都是以#开头,就是说默认是注释掉的,也就是说在全局说来,这些配置语句不生效。如果你在/etc/nanorc中把那些配置语句前面的#去掉,就会对全局用户生效了。
在这个/etc/nanorc文件的结尾处,你会看到有一块专门设置语法高亮(就是文本会有颜色之分)的区域,如下图:
比如,有C/C++代码的语法高亮,nanorc文件的语法高亮,CSS文件的语法高亮,下面还有很多类型的文件的语法高亮。
在小编的情况,这些include前面并没有#,就是说语法高亮对所有用户都是开启的,但你的情况也许每个include语句前面有#号,表示没有开启全局的语法高亮,建议删除那个#,来开启。
按Ctrl+O来保存修改,然后Ctrl+X退出。当然,也可以直接Ctrl+X,它问你是否保存修改,输入y(表示yes,“是”)或n(表示no,“不是”)或Ctrl+C取消。
通过.bashrc配置终端
对于nano,我们有一个配置文件叫.nanorc。其实对于我们的终端,也有一个配置文件,叫做.bashrc,这是用户个人的终端配置文件。在小编的情况,位于 /home/oscar/.bashrc
这个文件一般来说是默认存在的。不像我们的.nanorc可能还要自己创建。
我们打开家目录下的终端配置文件看看,只要输入以下命令:
nano ~/.bashrc复制代码
.bashrc文件比较复杂,初看可能会有点眼花缭乱的感觉。我们暂时不会深入学习它的语法,因为其实bash是一种shell。
我们以后的课程会重点来学习shell。暂时只要理解了解shell是外壳程序(shell是英语“外壳”的意思),是用于解释我们输入终端的各种命令的。
Shell是一个用户跟操作系统之间的一个命令解释器,也就是用户与Linux操作系统之间沟通的桥梁。
bash是最常用的一种shell程序,Ubuntu和大部分常见的Linux发行版默认的shell程序就是bash。
.bashrc就是bash这个shell程序的配置文件。
所以bashrc本身的语法也是bash的语法,是一种脚本语言。我们以后会学到,暂时不需要理解。
我们在之前的课程Linux探索之旅 | 第二部分第二课:命令行,世界尽在掌握中讲过,我们可以通过配置文件来修改我们的命令行提示符:
oscar@oscar-laptop:~$复制代码
你的情况肯定和我不一样,我们在以前的课程中也解释过命令行提示符的各个部分的含义。
在.bashrc文件中,我们可以修改命令行提示符的样式,如果你觉得目前的命令行提示符太繁琐太长了,你可以把它改短一些,简洁一些。
把我们的.bashrc文件向下拉,可以看到有好几行类似这样的:
上图中,我们看到有PS1开头的行。这个就是设置命令行提示符的样式的。
\u表示用户名(例如小编的用户名是oscar),\h是电脑的名称(小编的情况是oscar-laptop),@就是分割用户名和电脑名的那个@号。等等。
如果你学过shell语法,那么你可以试着修改。
这里我们不带大家修改了,因为比较复杂,对于初学者来说,不要把.bashrc文件搞乱了为好。
不过我们来学习一下如何将命令行提示符设为高亮(就是不再是白色的了,而是彩色的)。
看到有一行是#force_color_prompt=yes 了吗?
去掉 #force_color_prompt=yes 最前面那个分号之后,保存退出,再启动一个新的终端,可以看到我们的命令行提示符已经高亮显示了,有颜色了,是不是感觉颜值瞬间提高了很多?嗯嗯。
创建别名
别名是这样一些命令,在你运行时会转换为其他命令。就好比我的英文名是oscar,那别人呼叫oscar的时候,我知道其实是叫我。
别名的英语是alias。如果我们向下查找我们的.bashrc文件,会发现有alias开头的行,如下所示:
也不难理解:
当我们在终端输入比如ll(两个小写的L),其实就是等同于 ls -alF
当我们在终端输入比如la,其实就是等同于 ls -A
等等。
所以说,别名设置得好,可以降低我们的工作量,因为输入ll总比输入ll -alF简单吧。
在.bashrc中创建别名的语法是这样的:
alias name='command'复制代码
name就是别名的名字,而command就是替换别名的实际的终端命令。
全局的bashrc
之前的nano有全局的配置文件:/etc/nanorc
我们的终端所有的bash也有它的全局配置文件:/etc/bash.bashrc
对于每个用户来说,家目录下的.bashrc文件的优先级比系统的/etc/bash.bashrc文件高。
例如同样的配置选项,如果.bashrc和/etc/bash.bashrc不同,那么以.bashrc的为准。
profile配置文件
在我们的家目录下,其实还有一个.profile文件,而且它也有对应的全局profile文件,是 /etc/profile
profile在英语中是“外观,轮廓”的意思。那么这个profile文件和bashrc有什么区别呢?
简单来说是这样的:
profile这个配置文件是用户登录的终端的配置文件,也就是我们以前学过的tty1~tty6这6个命令行终端(没有图形界面的,分别通过Ctrl+Alt+F1~F6进入)。profile是这些需要登录的,非图形界面的终端的配置文件。
bashrc这个配置文件是不用用户登录的终端,也就是我们一直在使用的终端形式,图形化的终端的情况。这种终端是读取.bashrc为配置文件的。
有一点需要记住:profile文件会调用.bashrc,所以其实我们修改了.bashrc,也就是间接修改了profile文件。因为profile文件会用profile本身的配置再加上.bashrc的配置。
可以用下图帮助理解:
在我们修改了.bashrc和profile文件后,默认是在用户下次登录系统时才能生效。但是我们可以用source命令来使改动立即生效:
source .bashrc复制代码
source .profile复制代码
总结
文本编辑器也是一种程序,它可以打开文本文件(比如说Windows中的记事本就是一种文本编辑器),也可以用于修改文件内容(如果有写的权限的话)。我们程序员经常用文本编辑器来编写代码,也会用它来修改配置文件。
有一些文本编辑器功能非常完善,可以做很多事情,例如Vim和Emacs。
Nano是最容易上手的文本编辑器之一,所以我们初学Linux的时候才会用它来做例子。
在Nano中我们可以用很多键盘快捷键来帮助我们:Ctrl+w用于查找;Ctrl+x用于退出;Ctrl+o用于保存,等等。
我们可以用Nano来修改.bashrc这个终端的配置文件,也可以修改.nanorc这个nano的配置文件。这样我们就可以定制我们的软件了。
第二部分第七课预告
今天的课就到这里,一起加油吧!
下一课我们学习:Linux探索之旅 | 第二部分第七课:软件安装,如虎添翼
微信公众号「程序员联盟」ProgrammerLeague
我是谢恩铭,在巴黎奋斗的软件工程师。
我的简介
我的经历
热爱生活,喜欢游泳,略懂烹饪。
人生格言:“向着标杆直跑”