分类 工具 下的文章

vi的基本编辑总结

一个文本文件,里面拥有的无非是字符和行这两类东西。
我们首先来看看如何添加行+字符:Enter, o(O)
添加字符:i, a(A)

然后我们来看看怎么删除字符:x
删除该行行末换行符:J
删除行:dd
注意,这两种方式都可以加量词来批量删除。
但是在很多情况下,我们可能会需要借助一些特别的光标定位符进行删除。
d0(d^), d$
dw(dW), db(dB)
dG(可加量词)

因为vi中,删除会把删除掉的字符和行存储在一个buffer里面,所以删除可以理解为一个剪切操作,类比于其他编辑器,也应该有一个复制的功能。
vi中复制的功能类似于删除,请看下列表:
y0(y^), y$
yw(yW), yb(WB)
yG(可加量词)

既然有了剪切和复制,那么肯定有粘贴的功能,粘贴命令:
粘贴在当前位置之后:p
粘贴在当前位置之前:P

搜索,我们先看一下vi特有的行搜索:
f(后面加字符) //搜索结果切换使用;
我们再来看一下全文搜索:
/(?) //搜索结果切换使用n和N

替换,vi继承了ex行编辑器的替换实现,这是一种古老但实用的实现。
类似于退出vi的:q命令,vi的替换也是需要输入:的,vi的替换因此和前面几类命令有较大区别。命令格式类似下方:
:%s/Line/line/g
介绍一下这个ex命令:

  1. : 这是一个ex命令的开始标志
  2. % 这是一个范围选择符,代表从开头到结尾
  3. s 这是一个substitution(搜索并替换)命令
  4. /Line/line 这是一个命令的主体,意思是把Line替换成line
  5. g 这是一个substitution命令的参数(global),这个还有其他的参数c(check)

vi的移动光标总结

个人的学习方法就是不断的总结,而绝不可以仅依赖经验进行判断。
这次就来总结一下vi常用的移动光标的命令(所谓的命令,就是vi的命令行界面的快捷键)。

字符层次的:left(j),right(l)
单词层次:w(W),b(B)
行内层次:0(^),$
行间层次:down(j),up(k),G,gg
一些命令可以加量词。

这里不包括所有的命令,只是包括了常见的命令。除了移动光标类的命令之外,还有一种翻屏类的命令。

比如屏幕翻页:ctrl+f, ctrl+b等等。

Linux中的login shell和non-login shell

Linux中的shell分两种,一种是login shell,一种是non-login shell。
login shell,顾名思义,提供登录功能的shell,应该都能理解。
non-login shell,无须登录的shell,一般出现在图形界面或者bash命令。

理解起来没有什么问题的话,我们来看一下这两个shell所接触到的变量。
login shell不会有什么问题,直接从startup文件里面(比如/etc/profile,~/.profile文件)解析出来。
但是non-login shell的话,按理说是从父shell继承过来,但是实际上,non-login shell还会解析某些特定的startup文件(比如/etc/bash.bashrc, ~/.bashrc文件)来的变量。

我们来举个例子,我们修改/etc/bash.bashrc文件,添加一个变量:
testvar="1"
然后我们输入bash,进入第一个non-login shell,先输出一下变量:
echo $testvar //输出为1

1、不尝试修改变量,输入bash,进入第二个non-login shell,输出变量:
echo $testvar //输出为2

2、我们可以尝试修改这个变量:
testvar="2"
尝试输出一下:
echo $testvar //输出为2
此时,我们输入bash,进入第二个non-login shell,输出变量:
echo $testvar //输出为1

这是因为本来继承了父shell的testvar变量为2,但是重新读取了一下bash.bashrc文件,把testvar变量重置为1。

Linux的环境变量

一直对set,export,printenv等几个命令比较晕,最近在看Linux相关的书籍,就整理一下。

首先是先要强调一下,什么是环境变量,和普通的变量有什么区别?
百度百科:环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数。
这个定义是不是很书面化,所以所以这就是为啥读书很累的原因了。
所以,我们先来了解一下环境变量和普通的变量有什么区别。

1、在.bashrc文件中添加一个环境变量和一个普通变量
'
export envvar='envvar';//这就是环境变量,export命令把普通变量转换成环境变量
nonenvvar='nonenvvar';//这就是普通变量
'

2、写一个test.sh文件(注意修改为可执行文件),内容如下
`
#/bin/bash

echo "环境变量:$envvar";
echo "非环境变量:$nonenvvar";
`

3、使用如下命令执行这个文件
./test.sh

结果是环境变量输出了,非环境变量没有输出。

所以环境变量和非环境变量最大的区别是它们可以被程序给读取到。
使用和命令行echo或env命令不会区分变量是否是环境变量,所以要查看变量是否环境变量请使用printenv命令。

Ubuntu 14.04 启动项

最近了解了一下Linux的pstree命令,发现Ubuntu 14.04 LTS的启动项和书中讲的不一样-不仅仅是/etc/rc*.d/下面的启动项(System V风格)。
然后就在网上查了一下相关的内容,但是中文互联网的搜索结果的质量大家都懂,只好慢慢斟酌英文关键字了。
最后根据“Ubuntu inittab”关键字搜出来了(其实和这个无关哈哈):where is inittab file?
这个回答说了man inittab就会发现现在的启动项都在/etc/init/下面。根据提示,我继续查到相关的命令initctl。
initctl是用来管理Upstart风格的daemon文件,也就是/etc/init下面的启动项,类似于System V风格的daemon文件管理用的chkconfig命令。

但是,Ubuntu貌似不只是用Startup风格的启动项,System V风格的启动项也是支持的。
比如我在/etc/rc.d/下面有一个apache2的启动项,而在/etc/init里面不存在同名的启动项文件,最后apache2服务启动了。
上述的情况充分说明了,现在的Ubuntu 14.04采用的是/etc/init下面的启动项,但是也兼容/etc/rc
.d/下面的启动项。