linux下如何退出vi/vim 文本编辑器

当你用vi/vim 文本编辑器打开一个文件的时候,并且对文件做了更改,之后如何来退出vi编辑器呢? 退出vi/vim 编辑器又分为以下几种:不保存退出vi/vim 编辑器,保存退出vi/vim 编辑器,只保存不退出vi/vim编辑器,没有更改直接退出vi/vim编辑器。下面我们分别来说以下这四种退出vi/vim的方法:
vi/vim 
#1不保存退出vi/vim 编辑器
这个我们在之前的文章中讲过如何不保存退出vi/vim编辑器,简单的说就是从输入模式返回到命令模式,然后输入“”,在输入”q!“,回车后,就可以不保存退出vi/vim编辑器
 
#2保存退出vi/vim 编辑器
在linux vi/vim 文本编辑器里,保存并退出vi/vim编辑器的方法有多种:
1)在末行模式下,输入”:“后,再输入”wq“,回车就可以保存退出vi/vim文本编辑器。
2)在命令模式下,输入两次大写字母”z“,如果当前编辑的文件被更改过,那么会保存文件并退出vi/vim 编辑器,如果没有编辑修改过,那么会直接退出vi/vim编辑器。
3)在末行模式下,输入”“后,再输入”x“,回车后即可保存并退出vi/vim编辑器。
 
#3只保存不退出vi/vim编辑器
如果想对当前编辑的文件,只做保存操作,但并不退出vi/vim编辑器(在编辑文档的时候要记得保存,否则可能会因为系统宕机引起文件更改丢失或不保存),进入末行模式,输入”:”后,再输入“w”,回车,就可以随时保存当前文件更改。
 
#4 没有更改直接退出vi/vim编辑器
如果使用vi/vim 文本编辑器打开了文件,但并没有对文件做任何的更改,可以直接退出,进入末行模式,输入”:”,再输入”q”,回车后就可以退出vi/vim编辑器,返回shell。
 
以上是总结的关于linux下退出 vi/vim 编辑器的几种情况和退出方法。
更多参考:
1. Linux 下 vi/vim 文本编辑器超详细使用指南
2. Linux/Ubuntu:在命令行下安装vim文本编辑器
3. linux vi/vim man 帮助文档

Linux 下 vi/vim 文本编辑器超详细使用指南

Linux下的编辑器最常用的就是vim或者vi文本编辑。vi 和vim 编辑器的区别是vim是vi的改进版本,在vi 编辑器的基础上上扩展了很多实用的功能。 大多数的linux/unix 发行版本中都使用 vim 代替了原来的 vi 文本编辑器。 如果是centos或者redhat系统,当系统安装完毕后,vi/vim 文本编辑器默认情况下就已经被安装了。如果是debian/ubuntu系统下,默认情况下,vim编辑器是不会被安装的。你需要在ubuntu系统下手动安装vim编辑
vi/vim文本编辑器是我们在linux系统下工作可以说是必须会使用的一个工具,因为linux系统的设计理念是一切皆文件,也就是说,你在linux里的任何操作都是对文件的操作,所以会经常去操作文件,更改文件,保存文件,退出并保存文件。那么在linux下,如何使用vim/vi 文本编辑器来新建文件,编辑文件,保存文件呢? 如何使用vim/vi文本编辑器的查找命令来查找特定的文本呢? 如何使用vim/vi 文本编辑器中的查找并替换命令来对文本做批量更改呢?
本文将会给大家详细讲述如何在linux操作系统下使用vi/vim 文本编辑器。
 
vi/vim模式介绍
在linux vi/vim 文本编辑器里有三种模式:命令模式输入模式末行模式。这三者模式的区别是什么呢?
命令模式是vi/vim 编辑器进入后的默认模式,从命令模式可以切换到输入模式和末行模式,如果当你进入另外的两种模式后,可以使用“ESC”键退回到命令模式。在命令模式下,可以输入一些文本编辑器特有的命令,比如说你想编辑文件,那么就需要输入“i”,让当前模式变为插入模式或者输入模式,这样你就可以编辑这个文本了。
输入模式顾名思义就是要对本文做输入的操作,也就是说可以对文件做出更改操作。否则,你在命令模式下,vi/vim 文本编辑器是只读模式,你无法对文本做出更改。
末行模式是是命令模式下输入”:”,当你在输入模式下,对文件做了更改,那么需要先退回到命令命令,再进入末行模式,并输入”wq”后,即可保存并退出 vi/vim 文本编辑器。如果想不保存退出 vi/vim 文本编辑器,那么直接输入”q!”,即可。
 
在linux系统下运行 vi/vim 文本编辑器
在linux命令行下,输入 vi 或者vim 命令:

1
vi

或者

1
vim

linux vi vim 文本编辑器
 
linux 下 vim/vi 文本编辑器常用命令
#1 进入vi/vim文本编辑器的命令
vi filename:打开或新建文件,并将光标置于第一行行首的位置
vi +n filename: 打开文件,并将光标置于第n行的位置
vi + filename: 打开文件,并将光标置于最后一行的位置
vi +/pattern filename: 打开文件,并将光标置于第一个与pattern匹配的行首
vi -r filename: 在上次征用vim 文本编辑器的时候发生系统奔溃后,恢复filename 文件
vi filename1…filenamen: linux vi/vim 文本编辑器可以通过打开多个文件,依次进行编辑
#2 linux vi/vim 文本编辑器下移动光标的命令
H: 光标移到屏幕顶行
M: 光标移到屏幕中间行
L: 光标移到屏幕最后行
0: 光标移到当前行首
$: 光标移到当前行尾
#3 linux vi/vim 文本编辑器下屏幕翻滚类命令
Ctrl+F:向前翻整页
Ctrl+U:向前翻半页
Ctrl+B:向后翻整页
Ctrl+D:向后翻半页
#4 Linux vi/vim 文本编辑器插入文本类命令
i: 在光标前
I:在当前行行首
a: 在光标后
A: 在当前行尾
o: 在当前行之下新开一行
O: 在当前行之前新开一行
#5 Linux vi/vim 文本编辑器删除命令
do:删至行首
d$: 删至行尾
dd: 删除光标所在行
ndd: 删除当前航及其后n-1行
D: 删除当前光标到行尾的内容
Ctrl+u: 删除输入方式下输入的所有文本
#6 Linux vi/vim 文本编辑器搜索及替换命令
/pattern: 从光标开始处向文件尾搜索pattern模式
?pattern: 从光标开始处向文件首搜索pattern 模式
:s/p1/p2/g : 将当前行中所有p1替换成p2
:n1,n2s/p1/p2/g:将第n1行到n2行中所有的p1替换成p2
:g/p1/s//p2/g:将文件中所有的p1替换成p2
#7 Linux vi/vim 文本编辑器拷贝和粘贴命令
在vi/vim文本编辑器中”y”表示拷贝,”d”表示删除, “p”表示粘贴,通常与光标移动命令结合使用
y$: 表示拷贝从当前光标处到行尾的内容
d$: 表示删除从当前光标到行尾的内容
yy: 表示拷贝光标所在行
#8 Linux vi/vim 文本编辑器撤销操作命令
u:取消最近一次的操作
U:取消所有的操作
#9 vi/vim 编辑器末行模式下的命令
n1,n2 d: 将n1行到n2行之间的内容删除
:w 保存当前文件
:e filename 打开文件filename进行编辑
:x 保存当前文件并推出
:q 退出 vi/vim 编辑器
:q! 不保存并退出vi/vim编辑器
以上是linux 下vi/vim 文本编辑器里最常用的命令集合。更多关于vi/vim编辑器的使用,可以参考官方帮助文档。
更多参考:
1.linux vi/vim man 帮助文档
2. Linux/Ubuntu:在命令行下安装vim文本编辑器
3. vi/vim里如何退出不保存?

CentOS/RHEL:如何配置点对点的VPN 服务器

一个传统的 VPN(如 OpenVPN、PPTP)由一个 VPN 服务器和一个或多个连接到这台服务器的客户端组成。当任意两个 VPN 客户端彼此通信时,VPN 服务器需要中继它们之间的 VPN 数据流量。这样一个中心辐射型的 VPN 拓扑结构存在的问题是,当连接的客户端增多以后,VPN 服务器很容易成为一个性能上的瓶颈。从某种意义上来说,中心化的 VPN 服务器也同样成为一个单点故障的来源,也就是当 VPN 服务器出现故障的时候,整个 VPN 都将无法被任何 VPN 客户端访问。
centos vpn
点对点 VPN(又称 P2P VPN)是另一个 VPN 模型,它能解决传统的基于服务器-客户端模型的 VPN 存在的这些问题。一个 P2P VPN 中不再有一个中心的 VPN 服务器,任何拥有一个公开 IP 地址的节点都能引导其他节点进入 VPN。当连接到一个 VPN 之后,每一个节点都能与 VPN 中的任何其他节点直接通信,而不需要经过一个中间的服务器节点。当然任何节点出现故障时,VPN 中的剩余节点不会受到影响。节点中的延迟、带宽以及 VPN 扩展性在这样的设定中都有自然的提升,当你想要使用 VPN 进行多人游戏或者与许多朋友分享文件时,这都是十分理想的。
开源的 P2P VPN 实现已经有几个了,比如 Tinc、peerVPN,以及 n2n。在本教程中,我将会展示如何在 Linux 上用 n2n 配置点对点 VPN。
n2n 是一个开源(GPLv3)软件,它允许你在用户间构建一个加密的 2/3 层点对点 VPN。由 n2n 构建的 VPN 是“对 NAT 友好”的,也就是说,不同 NAT 路由器后方的两个用户可以通过 VPN 直接与对方通信。n2n 支持对称的 NAT 类型,这是 NAT 中限制最多的一种。因此,n2n 的 VPN 数据流量是用 UDP 封装的。
一个 n2n VPN 由两类节点组成:边缘(edge)节点和超级(super)节点。一个边缘节点是一台连接到 VPN 的电脑,它可能在一个 NAT 路由器后方。一个超级节点则是拥有一个可以公共访问的 IP 地址的电脑,它将会帮助 NAT 后方的边缘节点进行初始通信。想要在用户中创建一个 P2P VPN 的话,我们需要至少一个超级节点。
centos vpn
准备工作
在这篇教程中,我将会创建一个拥有 3 个节点的 P2P VPN:一个超级节点和两个边缘节点。唯一的要求是,边缘节点需要能够 ping 通超级节点的 IP 地址,而它们是否在 NAT 路由器之后则没有什么关系。
在 Linux 上安装 n2n
若想用 n2n 构建一个 P2P VPN,你需要在每个节点上安装 n2n,包括超级节点。
由于它非常精简的依赖需求,在大多数 Linux 平台上 n2n 都能被轻松编译。
在基于 Debian 的系统上安装 n2n:

1
2
3
4
5
$ sudo apt-get install subversion build-essential libssl-dev
$ svn co https://svn.ntop.org/svn/ntop/trunk/n2n
$ cd n2n/n2n_v2
$ make
$ sudo make install

在基于 Red Hat 的系统上安装 n2n:

1
2
3
4
5
$ sudo yum install subversion gcc-c++ openssl-devel
$ svn co https://svn.ntop.org/svn/ntop/trunk/n2n
$ cd n2n/n2n_v2
$ make
$ sudo make install

用 n2n 配置一个 P2P VPN
如前文所述,我们需要至少一个超级节点,它将会作为一个初始化引导服务器。我们假设这个超级节点的 IP 地址是 1.1.1.1。
超级节点:
在一个作为超级节点的电脑上运行下面的命令。其中“-l <端口>”指定超级节点的监听端口。运行 supernode 并不需要 root 权限。

1
$ supernode -l 5000

边缘节点:
在每个边缘节点上,使用下面的命令来连接到一个 P2P VPN。edge 守护程序将会在后台运行。
边缘节点 #1:

1
$ sudo edge -d edge0 -a 10.0.0.10 -c mynetwork -u 1000 -g 1000 -k password -l 1.1.1.1:5000 -m ae:e0:4f:e7:47:5b

边缘节点 #2:

1
$ sudo edge -d edge0 -a 10.0.0.11 -c mynetwork -u 1000 -g 1000 -k password -l 1.1.1.1:5000 -m ae:e0:4f:e7:47:5c

下面是对命令行的一些解释:
“-d <接口名>”选项指定了由 edge 命令创建的 TAP 接口的名字。
“-a ”选项(静态地)指定了分配给 TAP 接口的 VPN 的 IP 地址。如果你想要使用 DHCP,你需要在其中一台边缘节点上配置一台 DHCP 服务器,然后使用“-a dhcp:0.0.0.0”选项来代替。
“-c <组名>”选项指定了 VPN 组的名字(最大长度为 16 个字节)。这个选项可以被用来在同样一组节点中创建多个 VPN。
“-u”和“-g”选项被用来在创建一个 TAP 接口后降权放弃 root 权限。edge 守护进程将会作为指定的用户/组 ID 运行。
“-k <密钥>”选项指定了一个由 twofish 加密的密钥来使用。如果你想要将密钥从命令行中隐藏,你可以使用 N2N_KEY 环境变量。
“-l ”选项指定了超级节点的监听 IP 地址和端口号。为了冗余,你可以指定最多两个不同的超级节点(比如 -l <超级节点 A> -l <超级节点 B>)。
“-m ”给 TAP 接口分配了一个静态的 MAC 地址。不使用这个参数的话,edge 命令将会随机生成一个 MAC 地址。事实上,为一个 VPN 接口强制指定一个静态的 MAC 地址是被强烈推荐的做法。否则,比如当你在一个节点上重启了 edge 守护程序的时候,其它节点的 ARP 缓存将会由于新生成的 MAC 地址而遭到污染,它们将不能向这个节点发送数据,直到被污染的 ARP 记录被消除。
centos vpn
至此,你应该能够从一个边缘节点用 VPN IP 地址 ping 通另一个边缘节点了。
故障排除
1.在调用 edge 守护程序的时候得到了如下错误。

1
 n2n[4405]: ERROR: ioctl() [Operation not permitted][-1]

注意 edge 守护进程需要超级用户权限来创建一个 TAP 接口。因此需要确定用 root 权限来执行,或者对 edge 命令设置 SUID。之后你总是可以使用“-u”和“-g”选项来降权放弃 root 权限。
总结
n2n 可以成为对你来说非常实用的免费 VPN 解决方案。你可以轻松地配置一个超级节点,无论是用你自己家里的网络,还是从云主机提供商购买一个可以公共访问的 VPS 实例。你不再需要把敏感的凭据和密钥放在第三方 VPN 提供商的手里,使用 n2n,你可以在你的朋友中配置你自己的低延迟、高带宽、可扩展的 P2P VPN。
你对 n2n 有什么想法吗?请在评论中分享你的观点。
原文:Linux中国

CentOS/Linux:如何配置SSH无密码登录

当你在搭建集群或者在配置hadoop大数据集群环境的时候,都需要配置节点之间的无密码访问。本文将会讲述如何来设置ssh无密码登录。
ssh 无密码登录要使用公钥与私钥。linux下可以用用ssh-keygen生成公钥/私钥对,以CentOS为例。
有机器A,B。现想A通过ssh免密码登录到B。
1.在A机下生成公钥/私钥对。

1
[osetc@A ~]$ ssh -keygen -t rsa -P ''

-P表示密码,-P ” 就表示空密码,也可以不用-P参数,这样就要三车回车,用-P就一次回车。
它在登录用户的家目录下生成.ssh目录,.ssh下有id_rsa和id_rsa.pub。
2.把A机下的id_rsa.pub复制到B机下,在B机的.ssh/authorized_keys文件里,我用scp复制。

1
[test@A ~]$ scp .ssh/id_rsa.pub test@B:/home/chenlb/id_rsa.pub test@B's password: id_rsa.pub                                    100%  223     0.2KB/s   00:00

由于还没有免密码登录的,所以要输入密码。
3.B机把从A机复制的id_rsa.pub添加到.ssh/authorzied_keys文件里,如果没有.ssh/authorzied_keys,就新建一个。

1
[test@B ~]$ cat id_rsa.pub >> .ssh/authorized_keys [test@B ~]$ chmod 600 .ssh/authorized_keys

authorized_keys的权限要是600。
这样A机就可以登录B机了。

1
2
3
4
5
[test@A ~]$ ssh B
 The authenticity of host 'B (B)' can't be established. RSA key fingerprint is 00:a6:a8:87:eb:c7:40:10:39:cc:a0:eb:50:d9:6a:5b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '
B' (RSA) to the list of known hosts.
Last login: Thu Jul  3 09:53:18 2008 from test

第一次登录是时要你输入yes
登录的机子可有私钥,被登录的机子要有登录机子的公钥。这个公钥/私钥对一般在私钥宿主机产生。上面是用rsa算法的公钥/私钥对,当然也可以用dsa(对应的文件是id_dsa,id_dsa.pub)
想让A,B机无密码互登录,那B机以上面同样的方式配置即可。

vi/vim里如何退出不保存?

对于刚开始使用vi/vim文本编辑器的新手来说,如何在不保存更改而退出vi/vim 文本编辑器呢? 当你使用linux vi/vim 文本编辑器对linux下某个配置文件做编辑操作,当你更改完之后,可以保存退出文件,也可以不保存退出vi/vim 编辑器,也就是说更改的所有操作都不会保存。
本来将会讲述如何来不保存并退出当前的vi/vim编辑器。
首先,当你通过vi/vim更改文件之后,按“Esc“键,退出”insert“模式,然后输入冒号(),紧接着输入下面的命令:q!
vi-vim-quit
更多参考:
1. Linux 下 vi/vim 文本编辑器超详细使用指南
2. Linux/Ubuntu:在命令行下安装vim文本编辑器
3. linux vi/vim man 帮助文档

Linux:让所有人退出当前登录的系统

所有的linux系统都可以通过root用户去登陆,如果需要安装新的kernel或者新硬件,那么首先要让所有的当前通过SSH 或telnet登陆的用户退出登陆, 我们怎么来做呢?最好的注销远程用户的方法是什么呢?
你可以通过下面的几个命令来实现:
1. who 或 w 命令 –显示当前的登陆用户以及他们在干什么
2. pkill 命令– 杀掉用户会话以及强制用户退出系统
3.shutdown命令 — 关闭系统
示例
使用who命令列出当前登陆的用户列表

1
#w

1
#who

命令输出:

1
root pts/0 2013-08-23 23:57 (111.194.207.192)

强制root用户退出当前系统:

1
#pkill -KILL -u root

如果有多个用户的话,我们需要通过脚本的方式去处理,否则会耗费很多时间:

1
who | awk '$1 !~ /root/{ cmd="/sbin/pkill -KILL -u " $1; system(cmd)}'

最后,我们可以通过shutdown命令来关闭系统,而不用一次kill每个用户。

1
#shutdown -h +5 “系统将在5分钟后关闭,请保存好数据并退出当前系统”