Vi编辑器命令

Vi 编辑器是 Linux 和 Unix 上最基本的文本编辑器,她工作在命令行模式下。在 Linux 的中,熟练的牢记这些命令很重要,你可以完全摆脱鼠标。网上其实有很多关于 Vi 编辑器的命令参考,但是我试过有些并不起作用,或者有些讲解是错误的。我最近在看一本关于 Linux 的英文书籍,其中很全面的讲到了关于 Vi 编辑器的命令,所以索性自己整理出来,以供参考。

命令 说明
h 向左移动一个字符
l 向右移动一个字符
k 向上移动一行
j 向下移动一行
CTRL-F 向下翻屏
CTRL-B 向上翻屏
Input 使用户进入输入模式,按 ESC 键退出
a 在光标后开始输入
i 在光标前开始输入
o 在光标下一行开始输入,并插入新行
O 在光标前一行开始输入,并插入新行
文本选择 说明
v 可视模式;移动光标以选择文本(可用上面的移动光标移动命令)。选中后,按以下键执行相应操作:c 改变(剪切选中文本,并进入输入模式),d 删除,y 复制,: 进入命令行模式,J join lines(这个我不明白什么意思),U 转换为大写,u 转换为小写
V 可视模式;移动光标以选择文本行
删除 效果
x 删除光标上的字符
dd 删除光标所在行
改变 除替换命令 r 以外,所有的改变命令都将在删除文本后进入输入模式
cw 删除光标所在的单词并进入输入模式
r 替换光标上的字符。按下 r 后,输入新字符。这个改变不会进入输入模式
R 首先进入输入模式,输入的字符将覆盖原有字符。
移动 首先删除要移动的文本,然后将光标移动至将要插入的位置,按 p 键(文本被删除时,将自动保至指定寄存器)
p 在字符或当前行后插入删除或复制的文本
P 在字符或当前行前插入删除或复制的文本
yy 复制光标所在行
搜索 这两个搜索命令,将在屏幕底部显示要搜索的表达式(pattern),按 ENTER 键开始搜索
/pattern 向文件尾部搜索
?pattern 向文件顶部搜索
n 重复上一个搜索命令
命令行模式 效果
w 保存文件
q 退出编辑器。q! 不保存退出

这里只列出了一些常用的命令,其中还会有组合或其他大小写不同的情况,详细请参考 Vim 官方网站

Linux 终端(命令行)快捷键

在维护 Linux 时,会经常使用 SSH 来管理远程服务器,这时熟练的记住这些快捷键就变得尤为重要了。我在这里列举中常用到的快捷键,以便查阅。

光标移动类 说明
CTRL-F 或 右方向键 向前移动一个字符
CTRL-B 或 左方向键 向后移动一个字符
CTRL-A 或 HOME键 移动至行首
CTRL-E 或 END键 移动至行末
ALT-F 向前移动一个单词
ALT-B 向后移动一个单词
CTRL-L 清屏,将所在行滚动至屏幕顶部
编辑类 说明
CTRL-D 或 DEL键 删除光标上的一个字符
CTRL-H 或 BACKSPACE键 删除光标后的一个字符
CTRL-K 剪切光标上的一个字符
CTRL-U 剪切光标后至行首的字符
CTRL-W 剪切光标后的一个单词
ALT-D 剪切光标前的一个单词
CTRL-Y 粘贴
ALT-T 替换当前和上一个单词的位置,并移动光标至单词末
ALT-L 将当前光标的一个单词转换为小写,并移动光标至单词末
ALT-U 将当前光标的一个单词转换为大写,并移动光标至单词末
CTRL-SHIFT-_ 恢复上一步操作

翻译水平有限,供自己参考,也希望可能帮助到需要的朋友。

Linux 文件结构简记

最近在抽时间看 Linux 相关的书籍,在这里记录一下,以便加深记忆和以后使用。翻译水平很有限,如有错误,还望指出,非常感谢!

/
系统顶层目录,被称为 root

/home
包含所有用户的主目录

/bin
存放所有基本命令和实用程序

/usr
存放系统使用的文件和命令;这个目录划分为多个子目录

/usr/bin
存放面向用户的命令和实用程序

/usr/sbin
存放系统管理命令

/usr/lib
存放程序语言库

/usr/share/doc
存放 Linux 文档

/usr/share/man
存放 Man 文件

/var/spool
存放后台文件,由打印任务和网络传输产生的

/sbin
存放引导开机的系统命令

/var
存放变化的文件,如电子邮件

/dev
存放设备接口文件,如终端和打印机等设备(动态生成的,不可编辑)

/etc
存放系统配置文件和其他系统文件

MySQL 通过命令导出查询结果

近期由于工作原因,接触到了 Linux 的一些操作,也接触到数据库中有很多结果集时的一些处理。

经常会做的就是将数据库中上亿的数据通过 MySQL 的查询导出,通过 phpMyAdmin 和 SQLyog 等一些数据库管理工具处理起来就不方便了,会经常因为查询太大而丢失数据库链接,所以就只能通过服务器端执行 MySQL 命令的方式来导出了。由于是本地命令行操作,所以数据量再大也不会丢失链接。

在 MySQL 的官方有关于此命令的详细说明,我这里主要记录了我常用到的“SELECT … OUTFILE …”的示例。

关于此命令的说明:

后面的设置项是可以省略的,默认情况:
字段之间用“制表符(\t)”,无字段包括符,每行之间用“换行符(\n)”。

执行成功后,便会在 OUTFILE 后面设置的文件路径中找到导出的文件。

Android TextView 显示网络图片,点击放大

最近在做一个 android app 的应用,一个很简单的应用。

要在 TextView 中显示从网络上获取的内容,内容是HTML格式,在网上查了资料,发现用“Html.fromHtml()”方法可以生成一个支持HTML的文本对象,在这个方法中可以实现“ImageGetter”接口来处理图片,在 TextView 中显示网络图片,网上有很多讲解,但我想要让 TextView 中的图片可以点击放大,再查询网络,发现“TagHandler”接口可以处理HTML标签,通过重写这个方法,可以实现对自订标签的支持和点击事件。

但不知道如何获取标签中的内容,后来通过不断的查询资料,得知从 Editable 中获取一个 Span 对象数组,然后可以通过相应的 Span 来获取相应的资料。有了思路,马上写代码测试,完全可行。

TextView 中监听图片点击事件,实现图片点击放大,我在网上找过很多资料,有很多地方说不可以实现,我就通过反编译QQ的APP来查看,发现也是通过 TextView 来实现的,因此才继续找相关的代码示例。最终在一个示例中处理URL的事件看到一个“UrlSpan”,我才会去想是不是也有一个“ImageSpan”呢,在 Eclipse 中输入“ImageSpan”,果然有这个类,最终才解决这个问题。

在这里贴出示例代码(点击下载:TextView-TEST),希望可以帮到也同样遇到此问题的朋友。

图片未加载完前的显示。图片加载完成后显示。

无耻的中国联通

内地用户都知道,Facebook, Youtube 等这些国外的社交分享网站,内地是无法访问的。而在最近,访问 Facebook 或 Youtube 时会被跳转到所谓的“联通服务提示”(以前叫做“域名纠错系统”)的地址,我们姑且认为这是联通为了广告创收。

也有的朋友会访问任何不存在地址都被会强行跳转至“联通服务提示”的页面,解决方法就是修改 DNS 服务器,将 DNS 服务器改为“8.8.4.4”或“8.8.8.8”,这2个地址是 Google 免费提供的 DNS 服务器,这样就不会跳转到那个恶心的页面了。

DNS 服务器配置

可尽管如此,有时候还会被无耻的联通所劫持。

最近访问到有“Facebook Like box”的页面,都会莫名其妙的跳转至域名为 nfdnserror17.wo.com.cn 的地址,使的这些嵌入”Facebook Like box”的网站无法进行正常测试。

通过分析发现,在访问 Facebook 时我这里会返回一个 302 的 HTTP 响应代码,而转向的地址为IP “218.26.132.68”的地址,而这个地址又会跳转到 nfdnserror17.wo.com.cn 这个地址。

我向联通投诉过,但得到的答复是把责任都推给了 Facebook 这样的网站方,说是他们进行了跳转,与联通无关。投诉无门,只好自己来解决了(如果我是律师,我一定会将联通告上法庭)

我们还是说修改方法吧,对于联通这样无耻的公司,实在是没办法。

修改方法很简单,只需要修改 Host 文件,在 Windows 操作系统中的地址为“C:\Windows\System32\drivers\etc\hosts”文件(C指系统安装所在的磁盘),在其中添加一行为:

这样,访问带有 Facebook Like box 或 Youtube Video 的页面就不会出现跳转的情况了。

Chrome扩展:谷歌搜索本地化

之前在 Chrome 的应用商店安装过一个这样功能的扩展,但是对于搜索结果中的“网页链接”结构就不起作用了。

在使用 www.google.com.hk 进行搜索时,搜索结果中的 URL 会以“http://www.google.com.hk/url?url=”这样的方式对网站结果进行链接,这种方式直接导致了中国内地用户使用 Google 完全无法搜索,而这个扩展就能解决这个问题,使搜索结果中以最终的 URL 来进行链接。但这个扩展生效的前提是要关闭搜索设置中的“Google 即搜即得”功能(见下图)

这只是一个简单的扩展,运用 JS 将搜索结果中的 a 标签进行了修改。

我之前试着放弃谷歌而转向百度,但发现很多关于技术的问题在百度的搜索结果无法找到满意的答案,尽管谷歌搜索中有些问题会指向百度知道,而且用户体验也很好,但百度搜索结果的体验却不尽人意。

下载谷歌搜索本地化的压缩包,解压后将里面的“Google search localization.crx”文件拖到 Chrome 浏览器中安装即可,如果想要了解扩展如何工作的朋友,可以查看里面的源码。

安装需要打开 Chrome 的“扩展程序”,然后才能拖动到“扩展程序”的页面进行安装。

为你的博客加入“丰富网页摘要”

什么是“丰富网页摘要”?我想可能还有一些站长朋友并不了解,但如果经常使用谷歌搜索引擎(尤其是英文版)的朋友,应该会注意到一些网页在自然搜索结果中会显示非常友好的信息(图1),其中可能会包括作者信息、评论数、评分情况、页面导航等信息。

丰富网页摘要示例
图1

这种显示效果不仅非常友好,而且还可以在自然搜索结果中“脱颖而出”,增加用户的关注度,也可以方便谷歌搜索引擎对网页的内容进行分析。当然,并不是加入丰富网页摘要标记,在搜索结果中就一定会显示,但我认为加入标记有百利而无一害。

谷歌的帮助文档中对“丰富网页摘要”做了很详细的说明,类型包括:

我在这里对“评论(hReview)”中的“单条评论”这个类型的标记进行说明。评论分为“单条评论”和“汇总评论”,如果页面中只有单条评论则使用“单条评论”的格式,如果页面中含有多条评论则使用“汇总评论的格式”。如果网页中包含这2种评论格式的标记,Google 会使用汇总评论标记来显示。

“单条评论”的属性有“item(评论项), rating(评分), reviewer(评论者),dtreviewed(评论日期), description(评论正文), summary(评论摘要)”,其中粗体为必需项,注意dtreviewed属性,应该采用 ISO日期格式

这个示例是采用了“微格式”的标记方法,除了这种方法以外还有“微数据”和“RDFa”,这3种方法都可以被 Google 很好的识别。

音乐、产品、人物等这些摘要标记,站长朋友们可以在 Google 推出的“丰富网页摘要标记”专题获取帮助。

PS,谷歌中文网站站长小组和谷歌中文搜索质量团队在12月14日分别举行“在线互动活动”和“网站诊断活动”,欢迎站长朋友们参加。

ubuyibuy 的一个 Bug

ubuyibuy 是一个香港的团购网站,不知道是不是属于 Groupon 旗下,只是看到在网站的 Logo 上标注的“Power By Groupon”。

发现这个Bug时,我第一时间通过邮件通知了 ubuyibuy,本打算是等到对方修正后才公布出来,但已经过了半个月,对方仍然没有修正。虽然这个Bug现在还存在,但还是劝大家不要去非法利用。

其实这个Bug非常简单,大概是因为程序在设计时没有全面的考虑到安全认证的问题。

打开 ubuyibuy 的网站,点击首页的“立即购买”按钮,填写对应的信息后点击“前往付款”,这时可以看到一个“清单确认”的页面,这个时候,不要去点击“前往付款”,而是点击“更新”。

这里注意看地址栏中的URL,在URL中会包含此次订单的编号。

带有订单编号的url

上面截图中的高亮部分“287759”就是此次订单的编号。

将这个编号改一下,我这里改为“257759”,然后在地址栏中打开修改后的URL,此时页面中就会显示 ubuyibuy 中相应订单的客户信息。

相应订单的客户信息

在“电邮地址确认”中输入与“电邮地址”相同的值,“密码”和“确认密码”我们就可以自己随便设置了,全部填写完成后,再一次点击“前往付款”,此时你的设置的密码就生效了。

接下来,你就可以使用之前出现的“电邮地址”和你输入的新密码来进行登陆了。

理论上这个网站中的所有注册会员都可以窃取,再进嘱咐大家,不要进行非法利用,由于此漏洞产生的一切责任与本文作者无关。

解决Win7刚开机svchost.exe进程CPU占用率100%的方法

Windows 7 操作系统在刚开机时,CPU 使用率高达 100%,持续将近 2 分钟左右,2 分钟的等待是漫长的。

Windows 7 可以说是“新一代的 Windows 操作系统”,其中有很多以前想都不敢去想的效果和功能,所以不论从速度还是性能方面,应该都会比 Windows XP 好很多,不然仅仅靠优美的水晶外观很难征服用户。

但 Win 7 刚开机时 CPU 使用率一直在 100%,大概持续将近 2 分钟之长,这就很不正常了。

中毒的情况在我身上可以排除,从我接触电脑以来,无论是公司还是个人,我使用的电脑从来没有中过病毒。那究竟什么样的程序会抢占 2 分钟之长的时间才可以完成加载呢?打开“任务管理器”发现有两个名为 svchost.exe 的进程,分别把 100% 的资源用尽了。

网上有的资料说是因为 Windows Updates 服务,是由于 Windows Update 服务下载/安装失败而导致更新服务反复重试造成的。我也试过这样做,但是没有任何改观。不过这个解决方法给了我很大的启示:svchost.exe 进程简单的说就是一个提供网络连接的接口,可能是由于很多个服务同时去试着连接网络而使得 CPUT 使用率增高到 100%。

那就从 Windows 的服务中入手吧,要想找到进行所对应的服务很简单。只需要打开“Windows 任务管理器”转到“进程”选项卡,选中需要查看服务的进程,然后点击鼠标右键,选择最下面的“转到服务(S)”,便会转到“服务”选项卡,并且默认选中 svchost.exe 进程所使用的服务。(见下图)

通过Windows 任务管理器来查看进行所使用的服务

通过Windows 任务管理器来查看进行所使用的服务

此时,你便可以根据“Windows 任务管理器”中的分析情况,把服务设置为“手动启动”,这样开机 CPU 占用 100% 的问题便可以解决了。

注意,执行服务的设置时,仔细看“服务管理器”中对服务的详细描述,一定要谨慎操作。