0%

快乐Linux学习(五)

本文是快乐学习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下使用交互式编辑器进行快速编辑。

------ 本文结束------