linux的输出vi里的变量,Linux 入门教程——vi 与环境变量

气象家园投稿第三篇:vi 与环境变量

熟悉了 Linux 的一些基本操作以后,差不多就可以正式用它来进行工作了,那么平时主要在 Linux 上做些什么呢?根据自己的经历,我想大概有以下几点吧:

管理文件(或者说管理系统?)

编写程序(应该大多是 Fortran 语言吧)

软件使用(如 NCL、Matlab)

模式使用(多在服务器上运行)

之后几篇的内容大致也就是关于这几个方面的。先说说管理文件,可以很简单,比如我备份几个数据、归类几个文件夹,就是对我的文件进行了管理;也可以相对更为复杂,比如我查看一下系统信息的文件,修改一下配置文件,使得我的系统用起来更加符合我自己的习惯。就泛泛地说“管理”这个词,它包含的内容是很多的,对于普通用户和管理员用户,“管理”又具有不同的含义。不过我可没法聊这些,但有必要介绍下文本编辑器,因为不知道怎么编辑文件,怎么能进行管理呢(点头

vi

在 Linux 下,如果你想查看一个文本文件的内容,可以通过多种方式来实现。下面这5个命令均能查看文件内容:cat,more,less,head,tail。如:

1[N@Dell ~]$ cat readme

其中 cat 会显示所有内容,more 和 less 是分页显示(区别在于 more 只能向下滚动而 less 可以上下滚动),head 显示开头部分,tail 显示结尾部分。具体用哪个命令在于你自己,不过有个常用的用法是:

1[N@Dell Temp]$ tail -f log

tail 会显示文件结尾部分的内容,而 -f 选项(或 --follow)会实时更新文件内容。意思就是,比如你在运行一段程序,该程序将一些信息写到文件 log 里面,如果只是 tail log,则会显示到该命令为止的 log 文件中的内容,而实际上你的程序还在不断写新信息到 log 里。使用 -f 选项让你可以一直看到新的信息,而不用每隔一段时间就敲一次 tail log。

但这5个命令只是查看文本文件的内容,并不能写东西到文件。这时就需要文本编辑器了,比如 vi,Emacs,nano 等等。我想介绍一下 vi,毕竟它有着不可撼动的地位,而且我也是用 vi 用习惯了,懒得去接触其他编辑器了(憨笑

先用 vi 打开已存在的文件,或者新建文件:

1[N@Dell Temp]$ vi new

若 new 已存在,则会打开 new 这个文件,若 new 不存在,则新建一个文件名为 new 的文件。vi 一共有三种模式:一般模式、编辑模式、命令行模式。一般模式是刚打开文件后所进入的模式,可以进行移动光标、删除字符、复制粘贴等操作。在一般模式下若按下 i,o,a 等按键后将进入编辑模式,此时可以对文件内容自由编辑,按下 Esc 则退出到一般模式。在一般模式下若按下 :,/,? 等按键(: 即 shift+;),则进入到命令行模式,该模式下可以执行查找、替换、保存、退出等操作。下面简单列举下三种模式下的常用操作:

一般模式:

h,j,k,l 或 ←,↓,↑,→:光标的移动

[Ctrl]+f,[Ctrl]+b 或 [Page Down],[Page Up]:向下/向上翻页

0,$ 或 [Home],[End]:行首/行尾

n[space]:向右移动 n 个字符,[space] 为空格键

nG:移动到第 n 行,只按 G 则移动到最后一行,gg(相当于 1G)为移动到第一行

n[Enter]:向下移动 n 行

x,X:向后/向前删除一个字符

dd,ndd:删除当前行/向下删除 n 行

dw:删除当前单词

yy,nyy:复制当前行/向下复制 n 行

p,P:将已复制的内容粘贴到光标的下一行/上一行

u,[Ctrl]+r:撤销/恢复撤销

.:重复上一个操作

v,V,[Ctrl]+v:块选择,选取后用 y 和 d 来复制和删除

一般模式切换至编辑模式:

i,I:插入模式,i 从当前光标插入,I 从行首插入

a,A:插入模式,a 从当前光标前插入,A 从行尾插入

o,O:插入模式,o 从下一行插入新行,O 从上一行插入新行

r,R:替换字符,r 只替换一个字符,R 一直替换

cw:替换单词,类似于 dw+i

命令行模式:

:w,:w!:保存/强制保存

:q,:q!:退出/退出但不保存

:wq:保存且退出

:set nu,:set nonu:显示行号/不显示行号

:!command: 暂时离开 vi 执行命令 commad

:sh,[Ctrl]+d:暂时离开 vi 执行多条命令,[Ctrl]+d 则回到 vi

/word,?word:向下查找/向上查找

n,N:进行查找后,寻找下一个/上一个匹配项

:n1,n2s/word1/word2/g:在第 n1 和 n2 行间查找 word1,并替换成 word2

:n,:N,:files:打开多个文件时(如 vi file1 file2),切换或显示不同的文件,

基本上常用到的就是这些了,更多的内容可以自己找找书上的内容,我这里列举的就当作是一个快速检索页面吧。当然你也可以自己学习 Emacs,不过总归是要学好一款编辑器的,有了它才能做很多事情啊,具体使用哪个编辑器就是你的自由啦!

环境变量

相信大家应该接触过环境变量了,那就是 Windows 下安装 GrADS 时,最后需要 set path,才能正常使用。如果你还记得的话,就是在系统高级设置里面找到环境变量,然后在 Path 那个变量后面加上你装的 GrADS 的路径,这样你在 cmd 里面敲 grads 就可以运行它了。不过也许你还是不太了解什么叫环境变量?

总的来说 Linux 下的变量可分为环境变量和自定义变量。简而言之,自定义变量由用户定义,环境变量则由系统来定义。那变量有什么用呢?举个例子,当我们需要重复输入一个长路径的时候,可以通过自定义一个变量保存该路径,以达到减少输入量的目的:

1

2

3

4[N@Dell ~]$ workdir=/home/N/Temp/solve_equation

[N@Dell ~]$ cd $workdir

[N@Dell solve_equation]$ pwd

/home/N/Temp/solve_equation

这里定义了变量 workdir,调用这个变量内容时需要用到 $workdir 或者 ${workdir} 的形式。这样就不用每次输入一长串路径了。而环境变量,则是系统定义的一系列与操作环境有关的变量,在命令行敲入 env 即可查看所有环境变量:

1[N@Dell solve_equation]$ env

当你使用 Linux 时,可能神不知鬼不觉地就用到了这些环境变量。我感觉其中关注较多的是 PATH,不过像 HOME、SHELL、LANG、HISTSIZE 和 LD_LIBRARY_PATH 等等也含有重要的信息啦,但这里重点要说的还是 PATH 以及 .bashrc 文件。对了,如果你想查看某个变量的值,可以这样:

1[N@Dell ~]$ echo $PATH

PATH

Windows 下不设置 Path 将无法在命令行直接运行 grads。Linux 也一样,实际上 PATH 这个变量包含了执行文件的查找路径。当你敲入某个命令如 vi 时,系统会在 PATH 提供的路径里去找,看是否存在 vi 这个程序。如果找不到,那就无法运行 vi 咯,你可以试试这样的操作:

1[N@Dell ~]$ export PATH=

然后你会发现不能运行 vi 了,甚至连 ls、cp 等等也没用了,因为你的 PATH 没有值了,不过别急,重新打开终端就恢复了。

PS:一般设置自定义变量时直接写成 var=... 的形式,环境变量的修改则写成 export var=... 的形式。

简单来说,设置 PATH 使得你直接敲入命令名就能执行该命令,而不用敲命令的路径。前面将 PATH 设为空值以后,虽说敲 vi 没用,但你可以敲 /usr/bin/vi 啊!另一方面,你自己写了个 hello,你也可以把它的路径加到 PATH 里面,这样就能直接敲 hello 了:

1

2

3[N@Dell ~]$ export PATH=$PATH:/home/N/Temp

[N@Dell ~]$ hello

Hello world!

需要说明的是,PATH 里的路径是执行文件所在文件夹,这里我在 PATH 里加上 /home/N/Temp 后,/home/N/Temp 下的所有执行文件都可以通过直接敲入程序名的方式来执行了。你不能把路径直接写到程序名,比如这样:

1

2

3[N@Dell ~]$ export PATH=$PATH:/home/N/Temp/hello

[N@Dell ~]$ hello

bash: hello: command not found...

让我们来设想另一个情景,当我们使用服务器时,由于是多个用户在使用,服务器上装了很多的软件,但是并不是所有软件都是你需要的。实际情况是,管理员只是负责把软件装好,至于谁想用,那就把要用的软件的路径加到你的 PATH 里,这也意味着每个用户的 PATH 的内容是不同的。再比如,服务器上某个软件装了好几个版本,而你由于兼容性问题要用老版本的软件,那也得把 PATH 里面该软件的路径改为老版本的路径。

.bashrc文件

另一个要说明的就是 .bashrc 文件了, .bashrc 文件相当于是“登录时自动设置”的脚本,免去了每次登录重新设置各种变量的麻烦。该文件位于用户家目录下(如 /home/N/.bashrc),其内容大致如下:

3ac724254bebdeec8b7c7b46bfa28a58.png

上一期提到过把 hello 的路径放到这个文件里,可以由程序名来直接运行程序。实际上是将前面提到的 export PATH=$PATH:/home/N/Temp 直接写到 .bashrc 文件中,这样就能在登录时自动设置 PATH,那么登录后就可以直接敲 hello 来运行它了。

在 ~/.bashrc 文件里还可以对别名进行设置,即 alias ... 。这可是很好用的一个功能,只需要设置一个简称,就可以方便操作。在命令行下演示 alias 的用法:

1

2

3[N@Dell ~]$ alias "hello=/home/N/Temp/hello"

[N@Dell ~]$ hello

Hello world!

这里是通过设置 alias 来直接运行 hello 的,看起来设置 alias 和设置 PATH 差不多嘛!不过 alias 和 PATH 确实是两回事,起码后面的路径不相同(alias 是写出了 hello 的完整路径,PATH 里只写到文件夹),但最主要两者基本概念就不同,大家慢慢体会吧。

基本上 .bashrc 文件里就是设置 alias 和环境变量了吧,不过以后有什么特殊需求的话,也可能会在 .bashrc 里面写入其他的语句(如图中的 ulimit ...)。

对了,图里的 source 命令是啥?其实和 export 一样也是用来设置环境的,搜一下就懂咯~

有的机器上只有 .kshrc 没有 .bashrc??那就修改 .kshrc 呗!

结语

这一期的内容其实涉及到 shell 及 shell script 的学习,不过它也挺复杂的,我只能从很浅的层面稍微介绍介绍。建议有时间可以多看看 shell 与 shell script 的内容,真的很重要!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值