2015年1月

这里,我们将展示如何在一台Ubuntu 14.04或CentOS 6.5/7上安装Bugzilla。Bugzilla是一款基于web,用来记录跟踪缺陷数据库的bug跟踪软件,它同时是一款免费及开源软件(FOSS),它的bug跟踪系统允许个人和开发团体有效地记录下他们产品的一些突出问题。尽管是"免费"的,Bugzilla依然有很多其它同类产品所没有的“珍贵”特性。因此,Bugzilla很快就变成了全球范围内数以千计的组织最喜欢的bug管理工具。

Bugzilla对于不同使用场景的适应能力非常强。如今它们应用在各个不同的IT领域,如系统管理中的部署管理、芯片设计及部署的问题跟踪(制造前期和后期),还有为那些诸如Redhat,NASA,Linux-Mandrake和VA Systems这些著名公司提供软硬件bug跟踪。

1. 安装依赖程序

安装Bugzilla相当简单。这篇文章特别针对Ubuntu 14.04和CentOS 6.5两个版本(不过也适用于更老的版本)。

为了获取并能在Ubuntu或CentOS系统中运行Bugzilla,我们要安装Apache网络服务器(启用SSL),MySQL数据库服务器和一些需要来安装并配置Bugzilla的工具。

要在你的服务器上安装使用Bugzilla,你需要安装好以下程序:

  • Perl(5.8.1 或以上)
  • MySQL
  • Apache2
  • Bugzilla
  • Perl模块
  • 使用apache的Bugzilla

正如我们所提到的本文会阐述Ubuntu 14.04和CentOS 6.5/7两种发行版的安装过程,为此我们会分成两部分来表示。

以下就是在你的Ubuntu 14.04 LTS和CentOS 7机器安装Bugzilla的步骤:

准备所需的依赖包:

你需要运行以下命令来安装些必要的包:

Ubuntu版本:

$ sudo apt-get install apache2 mysql-server libapache2-mod-perl2 libapache2-mod-perl2-dev libapache2-mod-perl2-doc perl postfix make gcc g++

CentOS版本:

$ sudo yum install httpd mod_ssl mysql-server mysql php-mysql gcc perl* mod_perl-devel

注意:请在shell或者终端下运行所有的命令并且确保你用root用户(sudo)操作机器。

2. 启动Apache服务

你已经按照以上步骤安装好了apache服务,那么我们现在需要配置apache服务并运行它。我们需要用sodo或root来敲命令去完成它,我们先切换到root连接。

$ sudo -s

我们需要在防火墙中打开80端口并保存改动。

# iptables -I INPUT -p tcp --dport 80 -j ACCEPT
# service iptables save

现在,我们需要启动服务:

CentOS版本:

# service httpd start

我们来确保Apache会在每次你重启机器的时候一并启动起来:

# /sbin/chkconfig httpd on

Ubuntu版本:

# service apache2 start

现在,由于我们已经启动了我们apache的http服务,我们就能在默认的127.0.0.1地址下打开apache服务了。

3. 配置MySQL服务器

现在我们需要启动我们的MySQL服务:

CentOS版本:

# chkconfig mysqld on
# service start mysqld

Ubuntu版本:

# service mysql-server start

mysql

用root用户登录连接MySQL并给Bugzilla创建一个数据库,把你的mysql密码更改成你想要的,稍后配置Bugzilla的时候会用到它。

CentOS 6.5和Ubuntu 14.04 Trusty两个版本:

# mysql -u root -p

# password: (You'll need to enter your password)

# mysql > create database bugs;

# mysql > grant all on bugs.* to root@localhost identified by "mypassword";

#mysql > quit

注意:请记住数据库名和mysql的密码,我们稍后会用到它们。

4. 安装并配置Bugzilla

现在,我们所有需要的包已经设置完毕并运行起来了,我们就要配置我们的Bugzilla。

那么,首先我们要下载最新版的Bugzilla包,这里我下载的是4.5.2版本。

使用wget工具在shell或终端上下载:

wget http://ftp.mozilla.org/pub/mozilla.org/webtools/bugzilla-4.5.2.tar.gz

你也可以从官方网站进行下载。http://www.bugzilla.org/download/

从下载下来的bugzilla压缩包中提取文件并重命名:

# tar zxvf bugzilla-4.5.2.tar.gz -C /var/www/html/

# cd /var/www/html/

# mv -v bugzilla-4.5.2 bugzilla

注意:这里,/var/www/html/bugzilla/就是Bugzilla主目录.

现在,我们来配置buzilla:

# cd /var/www/html/bugzilla/

./checksetup.pl --check-modules

bugzilla-check-module

检查完成之后,我们会发现缺少了一些组件,我们需要安装它们,用以下命令即可实现:

# cd /var/www/html/bugzilla
# perl install-module.pl --all

这一步会花掉一点时间去下载安装所有依赖程序,然后再次运行checksetup.pl --check-modules命令来验证有没有漏装什么。

现在我们需要运行以下这条命令,它会在/var/www/html/bugzilla路径下自动生成一个名为localconfig的文件。

# ./checksetup.pl

确认一下你刚才在localconfig文件中所输入的数据库名、用户和密码是否正确。

# nano ./localconfig

# checksetup.pl

bugzilla-success

如果一切正常,checksetup.pl现在应该就成功地配置Bugzilla了。

现在我们需要添加Bugzilla至我们的Apache配置文件中。那么,我们需要用文本编辑器打开 /etc/httpd/conf/httpd.conf 文件(CentOS版本)或者 /etc/apache2/apache2.conf 文件(Ubuntu版本):

CentOS版本:

# nano /etc/httpd/conf/httpd.conf

Ubuntu版本:

# nano etc/apache2/apache2.conf

现在,我们需要配置Apache服务器,我们要把以下配置添加到配置文件里:

<VirtualHost *:80>
     DocumentRoot /var/www/html/bugzilla/
</VirtualHost>

<Directory /var/www/html/bugzilla>
     AddHandler cgi-script .cgi
     Options +Indexes +ExecCGI
     DirectoryIndex index.cgi
     AllowOverride Limit FileInfo Indexes
</Directory>

接着,我们需要编辑 .htaccess 文件并用“#”注释掉顶部“Options -Indexes”这一行。

让我们重启我们的apache服务并测试下我们的安装情况。

CentOS版本:

# service httpd restart

Ubuntu版本:

# service apache2 restart

bugzilla-install-success

这样,我们的Bugzilla就准备好在我们的Ubuntu 14.04 LTS和CentOS 6.5上获取bug报告了,你就可以通过本地回环地址或你网页浏览器上的IP地址来浏览bugzilla了。


via: http://linoxide.com/tools/install-bugzilla-ubuntu-centos/

作者:Arun Pyasi 译者:ZTinoZ 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

我目前已从 chroot(译者注:chroot可以构建类似沙盒的环境,建议各位同学先了解chroot) 迁移到 systemd-nspawn,同时我写了一篇快速指南。简单的说,我强烈建议正在使用 systemd 的用户从 chroot 转为 systemd-nspawn,因为只要你的内核配置正确的话,它几乎没有什么缺点。

想必在各大发行版中的用户对 chroot 都不陌生,而且我猜想 Gentoo 用户要时不时的使用它。

chroot 面临的挑战

大多数交互环境下,仅运行chroot还不够。通常还要挂载 /proc, /sys,另外为了确保不会出现类似“丢失 ptys”之类的错误,我们还得 bind(译者注:bind 是 mount 的一个选项) 挂载 /dev。如果你使用 tmpfs,你可能想要以 tmpfs 类型挂载新的 tmp、 var/tmp。接下来你可能还想将其他的挂载点 bind 到 chroot 中。这些都不是特别难,但是一般情况下要写一个脚本来管理它。

现在我按照日常计划执行备份操作,当然有一些不必备份的数据如 tmp 目录,或任何 bind 挂载的内容。当我配置了一个新的 chroot 后就意味着我要更新我的备份配置了,但我经常忘记这点,因为大多数时间里 chroot 挂载点并没有运行。当这些挂载点仍然存在的情况下执行备份的话,那么备份中会多出很多不需要的内容。

当 bind 挂载点包含其他挂载点时(比如挂载时使用 -rbind 选项),这种情况下 systemd 的默认处理方式略有不同。在 bind 挂载中卸载一些东西时,systemd 会将处于 bind 另一边的目录也卸载掉。想像一下,如果我卸载了 chroot 中以 bind 挂载 /dev 的某个目录后,发现主机上的 /dev/pts 与 /dev/shm 也不见了,我肯定会很吃惊。不过好像有其他方法可以避免,但是这不是我们此次讨论的重点。

Systemd-nspawn 优点

Systemd-nspawn 用于启动一个容器,并且它的最简模式就可以像 chroot 那样运行。默认情况下,它自动配置容器所需的开销如 /dev, /tmp 等等。通过配合一些选项它也可配置其他的 bind 挂载点。当容器退出后,所有的挂载点都会被清除。

容器运行时,从外部看上去没什么变化。事实上,可以从同一个 chroot 产生5个不同的 systemd-nspawn 容器实例,并且除了文件系统(不包括 /dev, /tmp等,只有 /usr,/etc 的改变会传递)外它们之间没有任何联系。你的备份将会忽略 bind 挂载点、tmpfs 及任何挂载在容器中的内容。

它同时具有其它优秀容器的优点,比如 containment - 可以杀死容器内的所有活动但不影响外部,等等。它的安全性并不是无懈可击的-它的作用仅仅是防止意外的错误。

如果你使用的是兼容的 sysvinit(它包含了 systemd,openrc),你可以启动容器。这意味着,你可以在容器中使用 fstab 添加挂载点,运行守护进程等。只需要一个 chroot 的开销,几乎就可以获得虚拟化的所有好处(不需要构建内核等)。在一个看起来像 chroot 的容器中运行systemctl poweroff 看起来很奇怪,但这条命令能够起作用。

注意,如果不做额外配置的话那么容器就会共享主机的网络,所以主机上的容器不要运行 sshd。运行一个分离的网络 namespace 不是太难,为了新的实例可以使用DHCP,分离之后记得绑定接口。

操作步骤

让它工作起来是此次讨论中最简短的部分了。

首先系统内核要支持 namespaces 与 devpts:

CONFIG_UTS_NS=y
CONFIG_IPC_NS=y
CONFIG_USER_NS=y
CONFIG_PID_NS=y
CONFIG_NET_NS=y
CONFIG_DEVPTS_MULTIPLE_INSTANCES=y

像 chroot 那样启动 namespace 是非常简单的:

systemd-nspawn -D .

也可以像 chroot 那样退出。在内部可以运行 mount 并且可以看到默认它已将 /dev 与 /tmp 准备好了。 ”.“就是 chroot 的路径,也就是当前路径。在它内部运行的是 bash。

如果要添加一些 bind 挂载点也非常简便:

systemd-nspawn -D . --bind /usr/portage

现在,容器中的 /usr/portage 就与主机的对应目录绑定起来了,我们无需 sync /etc。如果想要绑定到指定的路径,只要在原路径后添加 ”:dest“,相当于 chroot 的 root(--bind foo 与 --bind foo:foo是一样的)。

如果容器具有 init 功能并且可以在内部运行,可以通过添加 -b 选项启动它:

systemd-nspawn -D . --bind /usr/portage -b

可以观察到 init 的运作。关闭容器会自动退出。

如果容器内运行了 systemd ,你可以使用 -h 选项将它的日志重定向到主机的systemd日志:

systemd-nspawn -D . --bind /usr/portage -j -b

使用 nspawn 注册容器以便它能够在 machinectl 中显示。如此可以方便的在主机上对它进行操作,如启动新的 getty, ssh 连接,关机等。

如果你正在使用 systemd 那么甩开 chroot 拥抱 nspawn 吧。


via: http://rich0gentoo.wordpress.com/2014/07/14/quick-systemd-nspawn-guide/

作者:rich0 译者:SPccman 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

问题: 我需要要从 ISO 映像中获取某些文件,为此我想要使用 7zip 程序。那么我应该如何安装 7zip 软件呢,[在 Linux 发布版本上完全安装]?

7zip 是一款开源的归档应用程序,开始是为 Windows 系统而开发的。它能对多种格式的档案文件进行打包或解包处理,除了支持其原生的 7z 格式的文档外,还支持包括 XZ、GZIP、TAR、ZIP 和 BZIP2 等这些格式。 通常,7zip 也用来解压 RAR、DEB、RPM 和 ISO 等格式的文件。除了简单的归档功能,7zip 还具有支持 AES-256 算法加密以及自解压和建立多卷存档功能。在支持 POSIX 标准的系统上(Linux、Unix、BSD),原生的 7zip 程序被移植过来并被命名为 p7zip(“POSIX 7zip” 的简称)。

下面介绍如何在 Linux 中安装 7zip (或 p7zip)。

在 Debian、Ubuntu 或 Linux Mint 系统中安装 7zip

在基于的 Debian 的发布系统中存在有三种 7zip 的软件包。

  • p7zip: 包含 7zr(最小的 7zip 归档工具),仅仅只能处理原生的 7z 格式。
  • p7zip-full: 包含 7z ,支持 7z、LZMA2、XZ、ZIP、CAB、GZIP、BZIP2、ARJ、TAR、CPIO、RPM、ISO 和 DEB 格式。
  • p7zip-rar: 包含一个能解压 RAR 文件的插件。

建议安装 p7zip-full 包(不是 p7zip),因为这是最完全的 7zip 程序包,它支持很多归档格式。此外,如果您想处理 RAR 文件话,还需要安装 p7zip-rar 包,做成一个独立的插件包的原因是因为 RAR 是一种专有格式。

$ sudo apt-get install p7zip-full p7zip-rar 

在 Fedora 或 CentOS/RHEL 系统中安装 7zip

基于红帽的发布系统上提供了两个 7zip 的软件包。

  • p7zip: 包含 7za 命令,支持 7z、ZIP、GZIP、CAB、ARJ、BZIP2、TAR、CPIO、RPM 和 DEB 格式。
  • p7zip-plugins: 包含 7z 命令,额外的插件,它扩展了 7za 命令(例如支持 ISO 格式的抽取)。

在 CentOS/RHEL 系统中,在运行下面命令前您需要确保 EPEL 资源库 可用,但在 Fedora 系统中就不需要额外的资源库了。

$ sudo yum install p7zip p7zip-plugins 

注意,跟基于 Debian 的发布系统不同的是,基于红帽的发布系统没有提供 RAR 插件,所以您不能使用 7z 命令来抽取解压 RAR 文件。

使用 7z 创建或提取归档文件

一旦安装好 7zip 软件后,就可以使用 7z 命令来打包解包各式各样的归档文件了。7z 命令会使用不同的插件来辅助处理对应格式的归档文件。

使用 “a” 选项就可以创建一个归档文件,它可以创建 7z、XZ、GZIP、TAR、 ZIP 和 BZIP2 这几种格式的文件。如果指定的归档文件已经存在的话,它会把文件“附加”到存在的归档中,而不是覆盖原有归档文件。

$ 7z a <archive-filename> <list-of-files> 

使用 “e” 选项可以抽取一个归档文件,抽取出的文件会放在当前目录。抽取支持的格式比创建时支持的格式要多的多,包括 7z、XZ、GZIP、TAR、ZIP、BZIP2、LZMA2、CAB、ARJ、CPIO、RPM、ISO 和 DEB 这些格式。

$ 7z e <archive-filename>

解包的另外一种方式是使用 “x” 选项。和 “e” 选项不同的是,它使用的是全路径来抽取归档的内容。

$ 7z x <archive-filename>

要查看归档的文件列表,使用 “l” 选项。

$ 7z l <archive-filename>

要更新或删除归档文件,分别使用 “u” 和 “d” 选项。

$ 7z u <archive-filename> <list-of-files-to-update>
$ 7z d <archive-filename> <list-of-files-to-delete>

要测试归档的完整性,使用:

$ 7z t <archive-filename> 

via:http://ask.xmodulo.com/install-7zip-linux.html

译者:runningwater 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

如果你想要使用多个Linux发行版,你没有那么多的选择。你要么安装到你的物理机或虚拟机中,要么以live模式从ISO文件启动。第二个选择,对硬盘空间需求较小,只是有点麻烦,因为你需要将ISO文件写入到U盘或CD/DVD中来启动。不过,这里还有另外一个可选的折中方案:把ISO镜像放在硬盘中,然后以live模式来启动。该方案比完全安装更省空间,而且功能也完备,这对于缓慢的虚拟机而言是个不错的替代方案。下面我将介绍怎样使用流行的Grub启动加载器来实现该方案。

很明显,你将需要使用到Grub,这是几乎所有现代Linux发行版都使用的。你也需要你所想用的Linux版本的ISO文件,将它下载到本地磁盘。最后,你需要知道启动分区在哪里,并怎样在Grub中描述。对于此,请使用以下命令:

# fdisk -l 

带有‘*’的就是启动分区。对于我,就是/dev/sda1,用Grub语言描述就是(hd0,1)。

作为参考,sda2就是(hd0,2),sdb1就是(hd1,1),以此类推。(你明白了吧。)

我们需要编辑什么?

首先,打开/etc/default/grub并检查以下行:

#GRUB_HIDDEN_TIMEOUT=0

需要在此行前添加‘#’进行注释。

保存,然后打开/etc/grub.d/40\_custom。

在该文件中,你将添加启动到ISO的参数。结构如下:

menuentry "[Entry's title in the grub screen]" { 
set isofile="[path to ISO file]" 
loopback loop [boot partition in Grub language]$isofile 
[some specific] arguments
}

例如,如果你想要从ISO文件启动Ubuntu,那么你就是想要添加如下行到40\_custom文件:

menuentry "Ubuntu 14.04 (LTS) Live Desktop amd64" { 
set isofile="/boot/ubuntu-14.04-desktop-amd64.iso" 
loopback loop (hd0,1)$isofile 
linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=${isofile} quiet splash 
initrd (loop)/casper/initrd.lz 
}

如果你想要启动Gparted:

menuentry "GParted Live amd64" { 
set isofile="/boot/gparted-live-0.18.0-2-amd64.iso" 
loopback loop (hd0,1)$isofile 
loopback loop $isofile 
linux (loop)/live/vmlinuz boot=live config union=aufs noswap noprompt ip=frommedia toram=filesystem.squashfs findiso=${isofile} 
initrd (loop)/live/initrd.img 
}

或者甚至是Fedora:

menuentry "Fedora 20 Live Desktop x86_64" { 
set isofile="/boot/Fedora-Live-Desktop-x86_64-20-1.iso" 
loopback loop (hd0,1)$isofile 
loopback loop $isofile 
linux (loop)/isolinux/vmlinuz0 root=live:CDLABEL=Fedora-Live-Desktop-x86_64-20-1 rootfstype=auto ro rd.live.image quiet rhgb rd.luks=0 rd.md=0 rd.dm=0 iso-scan/filename=${isofile} 
initrd (loop)/isolinux/initrd0.img 
}

注意,参数可根据发行版进行修改。幸运的是,有许多地方你可以查阅到。我喜欢这个发行版,但是还有很多其它的发行版你可以启动。同时,请注意你放置ISO文件的地方。如果你的家目录被加密或者无法被访问到,你可能更喜欢将这些文件放到像例子中的启动分区。但是,请首先确保启动分区有足够的空间。

最后,不要忘了保存40\_custom文件并使用以下命令来更新grub:

# sudo update-grub 

以便在下次启动时看到修改。

接下来做什么?

想要更多东西?好吧,那就修改下参数来玩玩。你可以启动一个ISO文件,并让它持续做一些事情。例如,如果你是个彻头彻尾的妄想症患者,想要有个可以快速清除硬盘的选项,那么可以使用DBAN来进行一些设置。现在,真的要当心啊,因为此设置会清除你的硬盘,而且在启动时也没有恢复选项:

menuentry "Darik's Boot and Nuke" { 
set isofile="/boot/dban.iso" 
loopback loop (hd0,1)$isofile 
linux (loop)/dban.bzi nuke="dwipe" silent 
}

另外一个选择

menuentry "Darik's Boot and Nuke" {
set isofile="/boot/dban.iso"
loopback loop (hd0,1)$isofile
linux (loop)/dban.bzi
}

可以显示DBAN选项,让你选择清除驱动器。当心,因为它仍然十分危险

小结一下,对于ISO文件和Grub有很多事情可做:从快速live会话到一键毁灭,都可以满足你。之后,你也可以试试启动一些针对隐私方面的发行版,如Tails

你认为从Grub启动一个ISO这个主意怎样?这是不是你想要做的呢?为什么呢?请在下面留言。


via: http://xmodulo.com/boot-iso-image-from-grub.html

作者:Adrien Brochard 译者:GOLinux 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

如果我的关于这个话题的最新帖子没有提醒到你的话,那我明确地说,我是一个 Vim 的粉丝。所以在你们中的某些人向我扔石头之前,我先向你们展示一系列“鲜为人知的 Vim 命令”。我的意思是,一些你可能以前没有碰到过的命令,但可能对你来说很有用。作为第二免责声明,我不知道哪些命令是你可能知道的,以及哪些是对你来说有用的。因此这些命令实际上是一些相对少见,但很可能很有用的 Vim 命令。

保存文件并退出

说起来有些惭愧,我也是最近才学到这个命令

:x

和下面的命令是等价的:

:wq

都是保存当前文件并退出。

(译者注:这两个命令实际上并不完全等价,当文件被修改时两个命令时相同的。但如果未被修改,使用 :x 不会更改文件的修改时间,而使用 :wq 会改变文件的修改时间。)

基本计算器

在插入模式下,你可以使用 Ctrl+r 键然后输入 =,再输入一个简单的算式。按 Enter 键,计算结果就会插入到文件中。例如,尝试输入:

Ctrl+r '=2+2' ENTER

然后计算结果“4 ”会被插入到文件中。

查找重复的连续的单词

当你很快地打字时,很有可能会连续输入同一个单词两次,就像 this this。这种错误可能骗过任何一个人,即使是你自己重新阅读一遍也不可避免。幸运的是,有一个简单的正则表达式可以用来预防这个错误。使用搜索命令(默认时 /)然后输入:

\(\<\w\+\>\)\_s*\1

这会显示所有重复的单词。要达到最好的效果,不要忘记把下面的命令:

set hlsearch

放到你的 .vimrc 文件中高亮所有的匹配。

缩写

一个很可能是最令人印象深刻的窍门是你可以在 Vim 中定义缩写,它可以实时地把你输入的东西替换为另外的东西。语法格式如下:

:ab [缩写] [要替换的文字]

一个通用的例子是:

:ab asap as soon as possible

会把你输入的 “asap” 替换为 “as soon as possible”。

在你忘记用 root 方式打开文件时的文件保存

这可能是一个在论坛中一直受欢迎的命令。每当你打开一个你没有写入权限的文件(比如系统配置文件)并做了一些修改,Vim 无法通过普通的 “:w” 命令来保存。

你不需要重新以 root 方式打开文件再进行修改,只需要运行:

:w !sudo tee %

这会直接以 root 方式保存。

实时加密文本

如果你不想让别人看懂你的屏幕上的内容,你可以使用一个内置的选项,通过下面的命令使用 ROT13 来对文本进行编码:

ggVGg?

gg 把光标移动到 Vim 缓冲区的第一行,V 进入可视模式,G 把光标移动到缓冲区的最后一行。因此,ggVG 使可视模式覆盖这个当前缓冲区。最后 g? 使用 ROT13 对整个区域进行编码。

注意它可以被映射到一个最常使用的键。它对字母符号也可以很好地工作。要对它进行撤销,最好的方法就是使用撤销命令:u。

自动补全

这是另外一个令我感到惭愧的功能,但我发现周围很多人并不知道。Vim 默认有自动补全的功能。的确这个功能是很基本的,并且可以通过插件来增强,但它也很有帮助。方法很简单。Vim 尝试通过已经输入的单词来预测单词的结尾。比如当你在同一个文件中第二次输入 “compiler” 时,仅仅输入 “com” 然后保持在插入模式,按 Ctrl+n 键就可以看到 Vim 为你补全了单词。很简单,但也很有用。

比较两个文件的不同

你们中的大多数很可能都知道 vimdiff 命令,它可以使用分离模式打开 Vim 并比较两个文件的不同。语法如下:

$ vimdiff [文件1] [文件2]

但同样的结果也可以通过下面的 Vim 命令来获得:

:diffthis

首先在 Vim 中打开原始文件。然后使用分离模式带来第二个文件:

:vsp [文件2]

最后在第一个缓冲区里输入:

:diffthis

通过 Ctrl+w 来切换缓冲区并再次输入:

:diffthis

这样两个文件中不同的部分就会被高亮。

(译者注:可以直接在一个缓冲区里使用命令 :windo diffthis,而不用输入 :diffthis 两次)

要停止比较,使用:

:diffoff

按时间回退文件

Vim 会记录文件的更改,你很容易可以回退到之前某个时间。该命令是相当直观的。比如:

:earlier 1m

会把文件回退到 1 分钟以前的状态。

注意,你可以使用下面的命令进行相反的转换:

:later

删除标记内部的文字

当我开始使用 Vim 时,一件我总是想很方便做的事情是如何轻松的删除方括号或圆括号里的内容。转到开始的标记,然后使用下面的语法:

di[标记]

比如,把光标放在开始的圆括号上,使用下面的命令来删除圆括号内的文字:

di(

如果是方括号或者是引号,则使用:

di{

和:

di"

删除指定标记前的内容

和删除标记内部有些相似,但目的不同。命令如下:

dt[标记]

会删除所有光标和标记之间的内容(保持标记不动),如果在同一行有这个标记的话。例如

dt.

会删除至句子的末尾,但保持 ‘.’ 不动。

把 Vim 变为十六进制编辑器

这不是我最喜欢的窍门,但有时会很有趣。你可以把 Vim 和 xxd 功能连起来来把文件转换为十六进制模式。命令如下:

:%!xxd

类似的,你可以通过下面的命令恢复原来的状态:

:%!xxd -r

把光标下的文字置于屏幕中央

我们所要做的事情如标题所示。如果你想强制滚动屏幕来把光标下的文字置于屏幕的中央,在可视模式中使用命令(译者注:在普通模式中也可以):

zz

跳到上一个/下一个位置

当你编辑一个很大的文件时,经常要做的事是在某处进行修改,然后跳到另外一处。如果你想跳回之前修改的地方,使用命令:

Ctrl+o

来回到之前修改的地方

类似的:

Ctrl+i

会回退上面的跳动。

把当前文件转化为网页

这会生成一个 HTML 文件来显示文本,并在分开的窗口显示源代码:

:%TOhtml

(译者注:原文是 :%Tohtml,但在我的电脑上是 :%TOhtml)

很基本但很不错。

总的来说,这一系列命令是在我读了许多论坛主题和 Vim Tips wiki(如果你想学习更多关于编辑器的知识,我非常推荐这篇文章) 之后收集起来的。

如果你还知道哪些非常有用但你认为大多数人并不知道的命令,可以随意在评论中分享出来。就像引言中所说的,一个“鲜为人知但很有用的”命令也许只是你自己的看法,但分享出来总是好的。


via: http://xmodulo.com/useful-vim-commands.html

作者:Adrien Brochard 译者:wangjiezhe 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

这款游戏非常容易让你上瘾。你可能需要花费一生的时间来掌握它。许多人玩了几十年也没有通关。欢迎来到 NetHack 的世界...

不管你信不信,在 NetHack 里你见到字母 D 的时候你会被吓着。但是当你看见一个 % 的时候,你将会欣喜若狂。(忘了说 ^,你看见它将会更激动)在你寻思我们的脑子是不是烧坏了并准备关闭浏览器标签之前,请给我们一点时间解释:这些符号分别代表龙、食物以及陷阱。欢迎来到 NetHack 的世界,在这里你的想象力需要发挥巨大的作用。

如你所见,NetHack 是一款文字模式的游戏:它仅仅使用标准终端字符集来刻画玩家、敌人、物品还有环境。游戏的图形版是存在的,不过 NetHack 的骨灰级玩家们都倾向于不去使用它们,问题在于假如你使用图形界面,当你通过 SSH 登录到你的古董级的运行着 NetBSD 的 Amiga 3000 上时,你还能进行游戏吗?在某些方面,NetHack 和 Vi 非常相似 - 几乎被移植到了现存的所有的操作系统上,并且依赖都非常少。

那么问题来了,和现代游戏相比如此简陋的画面,是什么造就了 NetHack 如此巨大的吸引力的呢? 事实上,这款地牢探险类神作有着令人难以置信的丰富细节。有太多的东西等着你去发掘:法术释放、怪物战斗以及技巧学习 - 以及随机生成的地牢。有太多的东西等着你去探索,几乎没有哪两局游戏会是完全一样的。许多人玩了几十年也没有通关,每次游戏依然能发现一些以前不知道的秘密。

接下来,我们会向你讲述 NetHack 的历史,给你地牢探险的基本指导,再告诉你一些技巧。免责: 在你继续阅读本文之前,视为你已经自动同意了当你沉溺于 NetHack 以致影响到你的现实生活时,你不会起诉我们。

NetHack 界面

NetHack 界面

也许是最古老的仍在开发的游戏里

名非其实,NetHack 并不是一款网络游戏。它只不过是基于一款出现较早的名为 Hack 的地牢探险类游戏开发出来的,而这款 Hack 游戏是 1980 年的游戏 Rogue 的后代。NetHack 在 1987 年发布了第一个版本,并于 2003 年发布了 3.4.3 版本,尽管在这期间一直没有加入新的功能,但各种补丁、插件,以及衍生作品还是在网络上疯狂流传。这使得它可以说是最古老的、拥有众多对游戏乐此不疲的粉丝的游戏。当你访问 www.reddit.com/r/nethack 之后,你就会了解我们的意思了 - 骨灰级的 NetHack 的玩家们仍然聚集在一起讨论新的策略、发现和技巧。偶尔你也可以发现 NetHack 的元老级玩家在历经千辛万苦终于通关之后发出的欢呼。

但怎样才能通关呢?首先,NetHack 被设定在既大又深的地牢中。游戏开始时你在最顶层 - 第 1 层 - 你的目标是不断往下深入直到你找到一个非常宝贵的物品,护身符 Yendor。通常来说 Yendor 在 第 20 层或者更深的地方,但它是可以变化的。随着你在地牢的不断深入,你会遇到各种各样的怪物、陷阱以及 NPC;有些会试图杀掉你,有些会挡在你前进的路上,还有些... 总而言之,在你靠近 TA 们之前你永远不知道 TA 们会怎样。

要学习的有太多太多,绝大多数物品只有在和其他物品同时使用的情况下才会发挥最好的效果。

使 NetHack 如此引人入胜的原因是游戏中所加入的大量物品。武器、盔甲、附魔书、戒指、宝石 - 要学习的有太多太多,绝大多数物品只有在和其他物品同时使用的情况下才会发挥最好的效果。怪物在死亡后经常会掉落一些有用的物品,以及某些物品如果你不正确使用的话会产生及其不良的作用。你可以在地牢找到商店,里面有许多看似平凡实则非常有用的物品,不过别指望店主能给你详细的描述。你只能靠自己的经验来了解各个物品的用途。有些物品确实没有太大用处,NetHack 中有很多的恶搞元素 - 比如你可以把一块奶油砸到自己的脸上。

不过在你踏入地牢之前,NetHack 会询问你要选择哪种角色进行游戏。你可以为你接下来的地牢之行选择骑士、修道士、巫师,或者卑微的旅者,还有许多其他的角色类型。每种角色都有其独特的优势与弱点,NetHack 的重度玩家喜欢选择那些相对较弱的角色来挑战游戏。你懂的,这样可以向其他玩家炫耀自己的实力。

情报不会降低游戏的乐趣

用 NetHack 的说法来讲,“情报员”给指其他玩家提供关于怪物、物品、武器和盔甲信息的玩家。理论上来说,完全可以不借助任何外来信息而通关,但几乎没有几个玩家能做到,游戏实在是太难了。因此使用情报并不会被视为一件糟糕的事情 - 但是一开始由你自己来探索游戏和解决难题,这样才会获得更多的乐趣,只有当你遇到瓶颈的时候再去使用那些情报。

在这里给出一个比较有名的情报站点 www.statslab.cam.ac.uk/~eva/nethack/spoilerlist.html,其中的情报被分为了不同的类别。游戏中随机发生的事,比如在喷泉旁饮水可能导致的不同结果,从这里你可以得知已确定的不同结果的发生概率。

你的首次地牢之行

NetHack 几乎可以在所有的主流操作系统以及 Linux 发行版上运行,因此你可以通过 "apt-get install nethack" 或者 "yum install nethack" 等适合你用的发行版的命令来安装游戏。安装完毕后,在一个命令行窗口中键入 "nethack" 就可以开始游戏了。游戏开始时系统会询问是否为你随机挑选一位角色 - 但作为一个新手,你最好自己从里面挑选一位比较强的角色。所以,你应该点 "n",然后点 "v" 以选取女武神(Valkyrie),而点 "d" 会选择成为侏儒(dwarf)。

接着 NetHack 上会显示出剧情,说你的神正在寻找护身符 Yendor,你的目标就是找到它并将它带给神。阅读完毕后点击空格键(其他任何时候当你见到屏幕上的 "-More-" 时都可以这样)。接着就让我们出发 - 开始地牢之行吧!

先前已经介绍过了,你的角色用 @ 来表示。你可以看见角色所出房间周围的墙壁,房间里显示“点”的那些地方是你可以移动的空间。首先,你得明白怎样移动角色:h、j、k 以及 l。(是的,和 Vim 中移动光标的操作相同)这些操作分别会使角色向向左、向下、向上以及向右移动。你也可以通过 y、u、b 和 n 来使角色斜向移动。在你熟悉如何控制角色移动前你最好在房间里来回移动你的角色。

NetHack 采用了回合制,因此即使你不进行任何动作,游戏仍然在进行。这是你可以提前计划你的行动。你可以看见一个 "d" 字符或者 "f" 字符在房间里来回移动:这是你的宠物狗/猫,(通常情况下)它们不会伤害你而是帮助你击杀怪物。但是宠物也会被惹怒 - 它们偶尔也会抢在你接近食物或者怪物尸体之前吃掉它们。

点击 “i” 列出你当前携带的物品清单

点击 “i” 列出你当前携带的物品清单

门后有什么?

接下来,让我们离开房间。房间四周的墙壁某处会有缝隙,可能是 "+" 号。"+" 号表示一扇关闭的门,这时你应该靠近它然后点击 "o" 来开门。接着系统会询问你开门的方向,假如门在你的左方,就点击 "h"。(如果门被卡住了,就多试几次)然后你就可以看见门后的走廊了,它们由 "#" 号表示,沿着走廊前进直到你找到另一个房间。

地牢之行中你会见到各种各样的物品。某些物品,比如金币(由 "$" 号表示)会被自动捡起来;至于另一些物品,你只能站在上面按下逗号键手动拾起。如果同一位置有多个物品,系统会给你显示一个列表,你只要通过合适的按键选择列表中你想要的物品最后按下 "Enter" 键即可。任何时间你都可以点击 "i" 键在屏幕上列出你当前携带的物品清单。

如果看见了怪物该怎么办?在游戏早期,你可能会遇到的怪物会用符号 "d"、"x" 和 ":" 表示。想要攻击的话,只要简单地朝怪物的方向移动即可。系统会在屏幕顶部通过信息显示来告诉你攻击是否成功 - 以及怪物做出了何种反应。早期的怪物很容易击杀,所以你可以毫不费力地打败他们,但请留意底部状态栏里显示的角色的 HP 值。

早期的怪物很容易击杀,但请留意角色的 HP 值。

如果怪物死后掉落了一具尸体("%"),你可以点击逗号进行拾取,并点击 "e" 来食用。(在任何时候系统提示你选择一件物品,你都可以从物品列表中点击相应的按键,或者点击 "?" 来查询迷你菜单。)注意!有些尸体是有毒的,这些知识你将在日后的冒险中逐渐学会掌握。

如果你在走廊里行进时遇到了死胡同,你可以点击 "s" 进行搜寻直到找到一扇门。这会花费时间,但是你可以这样加速游戏进程:输入 "10" 并点击 "s" 你将一下搜索 10 次。这将花费游戏中进行 10 次动作的时间,不过如果你正在饥饿状态,你将有可能会被饿死!

通常你可以在地牢顶部找到 "{"(喷泉)以及 "!"(药水)。当你找到喷泉的时候,你可以站在上面并点击 "q" 键开始 “畅饮(quaff)” - 引用后会得到从振奋的到致命的多种效果。当你找到药水的时候,将其拾起并点击 "q" 来饮用。如果你找到一个商店,你可以拾取其中的物品并在离开前点击 "p" 键进行支付。当你负重过大时,你可以点击 "d" 键丢掉一些东西。

现在已经有带音效的 3D 版 Nethack 了,如:Falcon’s Eye

现在已经有带音效的 3D 版 Nethack 了,如:Falcon’s Eye

愚蠢的死法

在 NetHack 玩家中流行着一个缩写词 "YASD" - 又一种愚蠢的死法(Yet Another Stupid Death)。这个缩写词表示了玩家由于自身的的愚蠢或者粗心大意导致了角色的死亡。我们搜集了很多这类死法,但我们最喜欢的是下面这种死法:

我们正在商店浏览商品,这时一条蛇突然从药剂后面跳了出来。在杀死蛇之后,系统弹出一条信息提醒我们角色饥饿值过低了,因此我们顺手食用了蛇的尸体。坏事了!这使得我们的角色失明,导致我们的角色再也不能看见商店里的其他角色及地上的商品了。我们试图离开商店,但在慌乱中却撞在了店主身上并攻击了他。这种做法激怒了店主:他立即向我们的角色使用了火球术。我们试图逃到商店外的走廊上,但却在逃亡的过程中被烧死。

如果你有类似的死法,一定要来我们的论坛告诉我们。不要担心 - 没有人会嘲笑你。经历这样的死法也是你在 NetHack 的世界里不断成长的一部分。哈哈。

武装自己

地牢里,尤其是在你击杀怪物后,你可能会发现武器或盔甲。在这里再说一次,点击逗号把它们拾起,接着点击 "w"(小写的)来使用武器或者点击 "W"(大写的)来穿上盔甲。你可以用 "T" 来脱掉盔甲或者 "t" 来取下武器 - 如果你陷入了困境,请确保你总是在使用最好的装备。

在靠近掉在地下的装备之前最好检查一下身上的东西。点击 ";"(分号)后,"Pick an object"(选择一样物品)选项将出现在屏幕顶部。选择该选项,使用移动键直到选中你想要检查的物品,然后点击 ":"(冒号)。接着屏幕顶部将出现这件物品的描述。

因为你的目标是不断深入地牢直到找到护身符 Yendor,所以请随时留意周围的 "<" 和 ">" 符号。这两个符号分别表示向上和向下的楼梯,你可以用与之对应的按键来上楼或下楼。注意!如果你想让宠物跟随你进入下/上一层地牢,下/上楼前请确保你的宠物在你邻近的方格内。若果你想退出,点击 "S"(大写的)来保存进度,输入 #quit 退出游戏。当你再次运行 NetHack 时,系统将会自动读取你上次退出时的游戏进度。

我们就不继续剧透了,地牢深处还有更多的神秘细节、陌生的 NPC 以及不为人知的秘密等着你去发掘。那么,我们再给你点建议:当你遇到了让你困惑不已的物品时,你可以尝试去 NetHack 维基 http://nethack.wikia.com 进行搜索。你也可以在 www.nethack.org/v343/Guidebook.html 找到一本非常不错(尽管很长)的指导手册。最后,祝游戏愉快!


via: http://www.linuxvoice.com/nethack/

作者:Mike Saunders 译者:Stevearzh 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出