本文是快乐学习Linux的第五篇,是基于Windows的Linux子系统(WSL)进行操作的。
适用于学习Linux系统中shell环境和vi相关内容的读者。
shell环境
shell在shell会话中保存着大量的信息,这些信息被称为shell环境。
一般程序都是通过获取环境中的数据(环境变量)或配置文件来存储程序的设置,所以我们可以调整环境变量或配置文件来改变程序的行为。
在shell环境中,一般存储两种基本类型的数据,一种是环境变量,一种是shell变量(bash存放的少量数据)。
- printenv:可以显示环境变量,看到的是环境变量及其对应的数值。
- set:可以显示环境变量、shell变量和自定义的shell函数,并且按照首字母排序。
shell启动文件
登录系统之后会启动bash程序,读取一些列称为启动文件的配置脚本,之后再读取用户home目录的启动文件,这两个启动文件分别定义了全局和个人的shell环境。其中的启动顺序根据shell会话类型来决定。
登录shell会话
会提示用户输入用户名和密码,读取一个或多个启动文件。
首先是应用于所有用户的全局配置文件:
/etc/profile
,然后是用户个人的启动文件:在WSL下使用的是:~/.profile
,其他的Linux版本可能是~/.bash_profile
和~/.bash_login
。非登录shell会话
一般是在GUI下启动终端会话时出现,读取全局配置文件:
/etc/bash.bashrc
,以及个人配置文件:~/.bashrc
。并会集成父进程的环境设置(一般是一个登录shell进程)。
修改配置文件
修改配置文件的时候,可以使用文本编辑器打开文件,例如使用下面会提到的vi进行修改。
修改之前可以对文件进行备份,通常使用扩展名.bak
、.sav
、.old
等方式来备份:
1 | cp .bashrc .bashrc.bak |
然后修改.bashrc
文件,遇到麻烦的时候可以再利用备份文件进行还原。
修改之后使用source来激活配置:
1 | source .bashrc |
一般来说,添加目录到PATH变量或定义额外的环境变量,需要把修改
.profile
文件(或替代文件.bash_profile
),对于其他的修改则放在.bashrc
文件中。
vi
在很多Linux系统都预装了vi程序,并且存在另一个高级替代版vim(vi improved),之后我们使用是vi实际上就是vim。vi具有轻量且快速的特点,相比于一些其他并不会在Linux上都预装的文本编辑器,在远程服务器上进行文本修改的时候,vi就显得相当方便了。
最重要的是:不会的话会被其他Linux使用者嘲笑!所以加油吧👊!
打开和退出
首先最重要的是学会如何打开vi,并关闭它。
WSL已经预装了vim,我们在命令行输入vi或vim命令即可进入:
1 | vi |
会发现显示VIM - Vi IMproved
等内容,但实际上这些并不是打开了任何文件的内容,因为在vi中,行编辑最左侧出现了波浪号~
说明该行内容为空。此时不要按下键盘上的任何键,因为我们此时处于vi的命令模式,如果我们需要退出的话,输入:q
并按下回车就可以退出(出现在屏幕左下角,并且冒号是命令的一部分)。
命令模式分为普通命令模式和ex模式,ex模式就是有冒号的命令,普通命令模式就是正常的命令,需要注意区分,在下文中,出现冒号的就是ex命令,否则就是普通命令。
移动光标
在vi的命令模式下,存在大量的移动命令:
按键 | 移动效果 |
---|---|
k j h l或Alt+方向键 | 上下左右(方向)移动一个字符 |
0 | 移动到当前行的行首 |
^ | 当前行第一个非空字符 |
$ | 当前行末尾 |
b w或Shift+方向键 | 移动到上/下一个单词或标点的开头 |
B W或Ctrl+方向键 | 移动到上/下一个单词的开头 |
G | 文件末尾 |
并且可以使用数字和命令来控制移动多少个字符或行,例如5h
向左移动5个字符。
编辑文本
我们使用vi可以直接创建一个新的或打开一个已经存在的文件:
1 | vi foo.txt |
执行命令会出现空白界面,我们需要知道的是:vi是一个模式编辑器,此时进入的vi的命令模式,按下的每一个键都是命令,所以千万不要乱来!
我们按下i
键,在左下角会出现-- INSERT --
,表示进入了插入模式。此时可以输入一些文本。输入文本之后需要返回,需要使用Esc
重新进入命令模式,如果需要保存修改则使用:w
或保存并退出:wq
,如果不需要保存则使用:q!
。
当我们想要撤回的时候,可以使用u
来撤回对文本的最后一次修改,注意和word中只撤回几个字不一样,这是撤回最后一次修改。
当我们再一次进入foo.txt文件时,光标会出现在上次退出的地方,当我们想要在行尾进行插入的时候,发现i
只能出现在最后一个字符之前,所以我们使用a
进行插入,同样会出现-- INSERT --
,表示进入编辑模式,或者A
直接到达编辑行的行尾。
当我们需要插入空白行的时候,可以使用命令o
在光标下方插入一行,使用命令O
在光标上方插入一行。
删除、剪切、复制和粘贴
这些操作的命令和移动光标类似
按键 | 效果 |
---|---|
[number]x | 删除当前字符,及其后面number-1个字符 |
[number]dd | 剪切当前行,及其后面number-1行 |
d+移动光标的命令 | 移动光标决定剪切内容 |
[number]yy | 复制当前行,及其后面number-1行 |
y+移动光标的命令 | 移动光标决定复制内容 |
P/p | 粘贴到光标前/后 |
查找和替换
使用/
命令来查找匹配的字符。例如/line
找到所有line开头的字符,使用n命令重复查询操作(可循环查找)。
替换操作则略显复杂,例如将文本所有的line都替换为Line,需要输入命令:
1 | :%s/line/Line/gc |
%表示行数,省略则是执行当前行;s表示替换;/line/Line是查找与替换的文本;g是全局匹配,省略则是每行第一个匹配的进行替换;c是增加用户确认。
多文件操作
当我们需要进行多文件编辑的时候,就可以使用vi同时打开多个文本,例如:
1 | vi foo.txt ls-output.txt |
此时屏幕显示第一个文件,使用:n
切换到下一个文件,使用:N
切换到上一个文件。也可以使用:buffers
来查看打开的文件列表,使用:buffer 编号
就可以切换编辑的文件。
当前文件修改而未保存的时候,vi会阻止我们进行跳转,在命令后添加感叹号可以强制跳转。
在打开的文件中,使用:e 文件地址
就可以打开新的文件。
个人收获
一些可以直接使用echo显得是命令原来就是shell环境中的变量,像path就和Windows中修改环境变量类似,影响着一些程序的运行,需要在安装一些程序的时候进行修改,例如安装WSL显示GUI界面,需要安装xlaunch,并且之后需要在.bashrc文件中进行一定的配置才能正常运行。
在vi编辑器方便则是学会基本的编辑操作和保存,有一定的认知即可,毕竟学习成本较高,正常情况下本人还是比较喜欢直接在Windows下使用交互式编辑器进行快速编辑。