蚊章汇 - Avishek Kumar
type: channel
link: https://linuxcn.bwsl.wang/author/48/
description: Avishek Kumar
items: 一个八年的 Linux 老用户使用 Windows 10 的体验
items: Mhddfs：将多个小分区合并成一个大的虚拟存储
items: mosh：一个基于 SSH 用于连接远程 Unix/Linux 系统的工具
items: Shilpa Nair 分享的 RedHat Linux 包管理方面的面试经验
items: Debian GNU/Linux，22 年未完的美妙旅程
items: Linux 小技巧：Chrome 小游戏，让文字说话，计划作业，重复执行命令
items: 一些 Linux 桌面小技巧
items: Autojump：一个可以在 Linux 文件系统快速导航的高级 cd 命令
items: 轻松使用“Explain Shell”脚本来理解 Shell 命令
items: 关于Linux防火墙'iptables'的面试问答

一个八年的 Linux 老用户使用 Windows 10 的体验
type: item
date: 2016-02-12T19:32:00+08:00
description: Windows 10 是2015年7月29日上市的最新一代 Windows NT 系列系统，它是 Windows 8.1 的继任者。Windows 10 支持 Intel 32位平台，AMD64 以及 ARM v7 处理器。作为一个连续使用 linux 超过8年的用户，我想要去体验一下 Windows 10 ，因为有很多关于它的消息。这篇文章是我观察力的一个重大突破。我将从一个 linux 用户的角度去看待一切，所以这篇文章可能会有些偏向于 linux。尽管如此，本文也绝对不会有任何虚假信息。1、用谷歌搜索“download Windows 10”并且点击第一个链接。搜索 Windows 10你也可以直接打开： [[https://www.microsoft.com/en\_us/software-download/Windows10[1]](https://www.microsoft.com/en_us/software-download/Windows10%5B1%5D)2、微软要求我从 Windows 10， Windows 10 KN， Windows 10 N 和 Windows 10 单语言版中选择一个版本。选择版本以下是各个版本的简略信息：Windows 10 - 包含微软提供给我们的所有软件Windows 10N - 此版本不包含媒体播放器Windows 10KN - 此版本没有媒体播放能力Windows 10 单语言版 - 仅预装一种语言3、我选择了第一个选项“Windows 10”并且单击“确认”。之后我要选择语言，我选择了“英语”。微软给我提供了两个下载链接。一个是32位版，另一个是64位版。我单击了64位版--这与我的电脑架构相同。下载 Windows 10我的带宽是15M的，下载了整整3个小时。不幸的是微软没有提供系统的种子文件，否则整个过程会更加舒畅。镜像大小为 3.8 GB（LCTT译者注：就我的10M小水管，我使用迅雷下载用时50分钟）。我找不到更小的镜像，微软并没有为 Windows 提供网络安装镜像。我也没有办法在下载完成后去校验哈希值。（LCTT 译注：你知道的，这对于 Linux 来说都是常识了）我十分惊讶，Windows 在这样的问题上居然如此漫不经心。为了验证这个镜像是否正确下载，我需要把它刻到光盘上或者复制到我的U盘上然后启动它，一直静静的看着它安装直到安装完成。首先，我用 dd 命令将 win10 的 iso 镜像刻录到U盘上。# dd if=/home/avi/Downloads/Win10_English_x64.iso of=/dev/sdb1 bs=512M; sync 这需要一点时间。在此之后我重启系统并在 UEFI（BIOS）设置中选择从我的U盘启动。系统要求升级仅支持从 Windows 7 SP1 或者 Windows 8.1 升级全新安装处理器: 1GHz 以上内存: 1GB以上(32位)，2GB以上(64位)硬盘: 16GB以上(32位)，20GB以上(64位)显卡: 支持DirectX 9或更新 + WDDM 1.0 驱动Windows 10 安装过程1、Windows 10启动成功了。他们又换了logo，但是仍然没有信息提示我它正在做什么。Windows 10 Logo2、选择安装语言，时区，键盘，输入法，点击下一步。选择语言和时区3、点击“现在安装”。安装Ｗindows 104、下一步是输入密钥，我点击了“跳过”。Windows 10 产品密钥5、从列表中选择一个系统版本。我选择了 Windows 10专业版。选择系统版本6、到了协议部分，选中"我接受"然后点击下一步。同意协议7、下一步是选择（从 Windows 的老版本）升级到 Windows 10 或者安装 Ｗindows。我搞不懂为什么微软要让我自己选择：“安装Ｗindows”被微软建议为“高级”选项。但是我还是选择了“安装Windows”。选择安装类型8、选择驱动器，点击“下一步”。选择安装盘9、安装程序开始复制文件，准备文件，安装更新，之后进行收尾。如果安装程序能在安装时输出一堆字符来表示它在做什么就更好了。安装 Windows10、在此之后 Windows 重启了。它们说要继续的话，我们需要重启。安装进程11、我看到了一个写着“正在准备 Windows”的界面。它停了整整五分多钟！仍然没有说明它正在做什么。没有输出。正在准备 Windows12、又到了输入产品密钥的时间。我点击了“以后再说”，并使用快速设置。输入产品密钥使用快速设置13、又出现了三个界面，作为 Linux 用户我认为此处应有信息来告诉我安装程序在做什么，但是我想多了。载入 Windows获取更新还是载入 Ｗindows14、安…

Mhddfs：将多个小分区合并成一个大的虚拟存储
type: item
date: 2015-09-25T21:55:55+08:00
description: 让我们假定你有30GB的电影，并且你有3个驱动器，每个的大小为20GB。那么，你会怎么来存放东西呢？很明显，你可以将你的视频分割成2个或者3个不同的卷，并将它们手工存储到驱动器上。这当然不是一个好主意，它成了一项费力的工作，它需要你手工干预，而且花费你大量时间。另外一个解决方案是创建一个 RAID磁盘阵列。然而，RAID在存储可靠性，磁盘空间可用性差等方面声名狼藉。另外一个解决方案，就是mhddfs。Mhddfs——在Linux中合并多个分区mhddfs是一个用于Linux的设备驱动，它可以将多个挂载点合并到一个虚拟磁盘中。它是一个基于FUSE的驱动，提供了一个用于大数据存储的简单解决方案。它可以将所有小文件系统合并，创建一个单一的大虚拟文件系统，该文件系统包含其成员文件系统的所有内容，包括文件和空闲空间。你为什么需要Mhddfs？你的所有存储设备会创建为一个单一的虚拟池，它可以在启动时被挂载。这个小工具可以智能地照看并处理哪个存储满了，哪个存储空着，以及将数据写到哪个存储中。当你成功创建虚拟驱动器后，你可以使用SAMBA来共享你的虚拟文件系统。你的客户端将在任何时候都看到一个巨大的驱动器和大量的空闲空间。Mhddfs特性获取文件系统属性和系统信息。设置文件系统属性。创建、读取、移除和写入目录和文件。在单一设备上支持文件锁和硬链接。mhddfs的优点mhddfs的缺点适合家庭用户mhddfs驱动没有内建在Linux内核中运行简单运行时需要大量处理能力没有明显的数据丢失没有冗余解决方案不需要分割文件不支持移动硬链接可以添加新文件到组成的虚拟文件系统 可以管理文件保存的位置 支持扩展文件属性 Linux中安装Mhddfs在Debian及其类似的移植系统中，你可以使用下面的命令来安装mhddfs包。# apt-get update && apt-get install mhddfs 安装Mhddfs到基于Debian的系统中在RHEL/CentOS Linux系统中，你需要开启epel仓库，然后执行下面的命令来安装mhddfs包。# yum install mhddfs 在Fedora 22及以上系统中，你可以通过dnf包管理来获得它，就像下面这样。# dnf install mhddfs 安装Mhddfs到Fedora如果万一mhddfs包不能从epel仓库获取到，那么你需要解决下面的依赖，然后像下面这样来编译源码并安装。FUSE头文件GCClibc6头文件uthash头文件libattr1头文件（可选）接下来，只需从下面建议的地址下载最新的源码包，然后编译。# wget http://mhddfs.uvw.ru/downloads/mhddfs_0.1.39.tar.gz # tar -zxvf mhddfs*.tar.gz # cd mhddfs-0.1.39/ # make 你应该可以在当前目录中看到mhddfs的二进制文件，以root身份将它移动到/usr/bin/和/usr/local/bin/中。# cp mhddfs /usr/bin/ # cp mhddfs /usr/local/bin/ 一切搞定，mhddfs已经可以用了。我怎么使用Mhddfs？1、 让我们看看当前所有挂载到我们系统中的硬盘。$ df -h 样例输出Filesystem Size Used Avail Use% Mounted on /dev/sda1 511M 132K 511M 1% /boot/efi /dev/sda2 451G 92G 336G 22% / /dev/sdb1 1.9T 161G 1.7T 9% /media/avi/BD9B-5FCE /dev/sdc1 555M 555M 0 100% /media/avi/Debian 8.1.0 M-A 1 注意这里的‘挂载点’名称，我们后面会使用到它们。2、 创建目录‘/mnt/virtual\_hdd’，所有这些文件系统将会在这里组织到一起。# mkdir /mnt/virtual_hdd 3、 然后，挂载所有文件系统。你可以通过root或者FUSE组中的某个用户来完成。# mhddfs /boot/efi, /, /media/avi/BD9B-5FCE/, /media/avi/Debian\ 8.1.0\ M-A\ 1/ /mnt/virtual_hdd -o allow_other 在Linux中挂载所有文件系统注意：这里我们使用了所有硬盘的挂载点名称，很明显，你的挂载点名称会有所不同。也请注意“-o allow\_other”选项可以让这个虚拟文件系统让其它所有人可见，而不仅仅是创建它的人。4、 现在，运行“df -h”来看看所有文件系统。它应该包含了你刚才创建的…

mosh：一个基于 SSH 用于连接远程 Unix/Linux 系统的工具
type: item
date: 2015-09-22T15:16:00+08:00
description: Mosh 表示 移动 Shell （ Mobile Shell ） ，是一个用于从客户端跨互联网连接远程服务器的命令行工具。它能用于 SSH 连接，但是比 Secure Shell 功能更多。它是一个类似于 SSH 而带有更多功能的应用。程序最初由 Keith Winstein 编写，用于类 Unix 的操作系统中，发布于GNU GPL v3协议下。Mosh Shell SSH 客户端Mosh的功能它是一个支持漫游的远程终端程序。在所有主流的类 Unix 版本中可用，如 Linux、FreeBSD、Solaris、Mac OS X 和 Android。支持不稳定连接支持智能的本地回显支持用户输入的行编辑响应式设计及在 wifi、3G、长距离连接下的鲁棒性在 IP 改变后保持连接。它使用 UDP 代替 TCP（在 SSH 中使用），当连接被重置或者获得新的 IP 后 TCP 会超时，但是 UDP 仍然保持连接。在很长的时候之后恢复会话时仍然保持连接。没有网络延迟。立即显示用户输入和删除而没有延迟像 SSH 那样支持一些旧的方式登录。包丢失处理机制Linux 中 mosh 的安装在 Debian、Ubuntu 和 Mint 类似的系统中，你可以很容易地用 apt-get 包管理器安装。# apt-get update # apt-get install mosh 在基于 RHEL/CentOS/Fedora 的系统中，要使用 yum 包管理器安装 mosh，你需要打开第三方的 EPEL。# yum update # yum install mosh 在 Fedora 22+的版本中，你需要使用 dnf 包管理器来安装 mosh。# dnf install mosh 我该如何使用 mosh？1、 让我们尝试使用 mosh 登录远程 Linux 服务器。$ mosh root@192.168.0.150 mosh远程连接注意：你有没有看到一个连接错误，因为我在 CentOS 7中还有打开这个端口。一个快速但是我并不建议的解决方法是：# systemctl stop firewalld [在远程服务器上] 更好的方法是打开一个端口并更新防火墙规则。接着用 mosh 连接到预定义的端口中。至于更深入的细节，也许你会对下面的文章感兴趣。如何配置 Firewalld2、 让我们假设把默认的 22 端口改到 70，这时使用 -p 选项来使用自定义端口。$ mosh -p 70 root@192.168.0.150 3、 检查 mosh 的版本$ mosh --version 检查mosh版本4、 你可以输入exit来退出 mosh 会话。$ exit 5、 mosh 支持很多选项，你可以用下面的方法看到：$ mosh --help Mosh 选项mosh 的优缺点mosh 有额外的需求，比如需要允许 UDP 直接连接，这在 SSH 不需要。动态分配的端口范围是 60000-61000。第一个打开的端口是分配好的。每个连接都需要一个端口。默认的端口分配是一个严重的安全问题，尤其是在生产环境中。支持 IPv6 连接，但是不支持 IPv6 漫游。不支持回滚不支持 X11 转发不支持 ssh-agent 转发总结mosh是一款在大多数linux发行版的仓库中可以下载的一款小工具。虽然它有一些差异尤其是安全问题和额外的需求，它的功能，比如漫游后保持连接是一个加分点。我的建议是任何一个使用ssh的linux用户都应该试试这个程序，mosh值得一试。via: http://www.tecmint.com/install-mosh-shell-ssh-client-in-linux/作者：Avishek Kumar 译者：geekpi 校对：wxy本文由 LCTT 原创翻译，Linux中国 荣誉推出

Shilpa Nair 分享的 RedHat Linux 包管理方面的面试经验
type: item
date: 2015-09-14T16:09:00+08:00
description: Shilpa Nair 刚于2015年毕业。她之后去了一家位于 Noida，Delhi 的国家新闻电视台，应聘实习生的岗位。在她去年毕业季的时候，常逛 Tecmint 寻求作业上的帮助。从那时开始，她就常去 Tecmint。有关 RPM 方面的 Linux 面试题所有的问题和回答都是 Shilpa Nair 根据回忆重写的。“大家好！我是来自 Delhi 的Shilpa Nair。我不久前才顺利毕业，正寻找一个实习的机会。在大学早期的时候，我就对 UNIX 十分喜爱，所以我也希望这个机会能适合我，满足我的兴趣。我被提问了很多问题，大部分都是关于 RedHat 包管理的基础问题。”下面就是我被问到的问题，和对应的回答。我仅贴出了与 RedHat GNU/Linux 包管理相关的，也是主要被提问的。1，Linux 里如何查找一个包安装与否？假设你需要确认 ‘nano’ 有没有安装，你怎么做？回答：为了确认 nano 软件包有没有安装，我们可以使用 rpm 命令，配合 -q 和 -a 选项来查询所有已安装的包# rpm -qa nano 或 # rpm -qa | grep -i nano nano-2.3.1-10.el7.x86_64 同时包的名字必须是完整的，不完整的包名会返回到提示符，不打印任何东西，就是说这包（包名字不全）未安装。下面的例子会更好理解些：我们通常使用 vim 替代 vi 命令。当时如果我们查找安装包 vi/vim 的时候，我们就会看到标准输出上没有任何结果。# vi # vim 尽管如此，我们仍然可以像上面一样运行 vi/vim 命令来清楚地知道包有没有安装。只是因为我们不知道它的完整包名才不能找到的。如果我们不确切知道完整的文件名，我们可以使用通配符：# rpm -qa vim* vim-minimal-7.4.160-1.el7.x86_64 通过这种方式，我们可以获得任何软件包的信息，安装与否。2. 你如何使用 rpm 命令安装 XYZ 软件包？回答：我们可以使用 rpm 命令安装任何的软件包（*.rpm），像下面这样，选项 -i（安装），-v（冗余或者显示额外的信息）和 -h（在安装过程中，打印#号显示进度）。# rpm -ivh peazip-1.11-1.el6.rf.x86_64.rpm Preparing... ################################# [100%] Updating / installing... 1:peazip-1.11-1.el6.rf ################################# [100%] 如果要升级一个早期版本的包，应加上 -U 选项，选项 -v 和 -h 可以确保我们得到用 # 号表示的冗余输出，这增加了可读性。3. 你已经安装了一个软件包（假设是 httpd），现在你想看看软件包创建并安装的所有文件和目录，你会怎么做？回答：使用选项 -l（列出所有文件）和 -q（查询）列出 httpd 软件包安装的所有文件（Linux 哲学：所有的都是文件，包括目录）。# rpm -ql httpd /etc/httpd /etc/httpd/conf /etc/httpd/conf.d ... 4. 假如你要移除一个软件包，叫 postfix。你会怎么做？回答：首先我们需要知道什么包安装了 postfix。查找安装 postfix 的包名后，使用 -e（擦除/卸载软件包）和 -v（冗余输出）两个选项来实现。# rpm -qa postfix* postfix-2.10.1-6.el7.x86_64 然后移除 postfix，如下:# rpm -ev postfix-2.10.1-6.el7.x86_64 Preparing packages... postfix-2:3.0.1-2.fc22.x86_64 5. 获得一个已安装包的具体信息，如版本，发行号，安装日期，大小，总结和一个简短的描述。回答：我们通过使用 rpm 的选项 -qi，后面接包名，可以获得关于一个已安装包的具体信息。举个例子，为了获得 openssh 包的具体信息，我需要做的就是：# rpm -qi openssh [root@tecmint tecmint]# rpm -qi openssh Name : openssh Version : 6.8p1 Release : 5.fc22 Architecture: x86_64 Install Date: Thursday 28 May 2015 12:34:50 PM IST Group : Applications/Internet Size : 1542057 License : BSD .... …

Debian GNU/Linux，22 年未完的美妙旅程
type: item
date: 2015-09-09T17:07:01+08:00
description: 在2015年8月16日， Debian项目组庆祝了 Debian 的22周年纪念日；这也是开源世界历史最悠久、热门的发行版之一。 Debian项目于1993年由Ian Murdock创立。彼时，Slackware 作为最早的 Linux 发行版已经名声在外。22岁生日快乐! Debian Linux!Ian Ashly Murdock， 一个美国职业软件工程师， 在他还是普渡大学的学生时构想出了 Debian 项目的计划。他把这个项目命名为 Debian 是由于这个名字组合了他彼时女友的名字 Debra Lynn 和他自己的名字 Ian。 他之后和 Lynn 结婚并在2008年1月离婚。Debian 创始人:Ian MurdockIan 目前是 ExactTarget 的平台与开发社区的副总裁。Debian (如同Slackware一样) 都是由于当时缺乏满足合乎标准的发行版才应运而生的。 Ian 在一次采访中说：“免费提供一流的产品会是 Debian 项目的唯一使命。 尽管过去的 Linux 发行版均不尽然可靠抑或是优秀。 我印象里...比如在不同的文件系统间移动文件， 处理大型文件经常会导致内核出错。 但是 Linux 其实是很可靠的， 自由的源代码让这个项目本质上很有前途。”"我记得过去我像其他想解决问题的人一样， 想在家里运行一个像 UNIX 的东西。 但那是不可能的， 无论是经济上还是法律上或是别的什么角度。 然后我就听闻了 GNU 内核开发项目， 以及这个项目是如何没有任何法律纷争"， Ian 补充到。 他早年在开发 Debian 时曾被自由软件基金会(FSF)资助， 这份资助帮助 Debian 取得了长足的发展； 尽管一年后由于学业原因 Ian 退出了 FSF 转而去完成他的学位。Debian开发历史Debian 0.01 – 0.09 : 发布于 1993 年八月 – 1993 年十二月。Debian 0.91 : 发布于 1994 年一月。 有了原始的包管理系统， 没有依赖管理机制。Debian 0.93 rc5 : 发布于 1995 年三月。 “现代”意义的 Debian 的第一次发布， 在基础系统安装后会使用dpkg 安装以及管理其他软件包。Debian 0.93 rc6: 发布于 1995 年十一月。 最后一次 a.out 发布， deselect 机制第一次出现， 有60位开发者在彼时维护着软件包。Debian 1.1: 发布于 1996 年六月。 项目代号 – Buzz， 软件包数量 – 474， 包管理器 dpkg， 内核版本 2.0， ELF 二进制。Debian 1.2: 发布于 1996 年十二月。 项目代号 – Rex， 软件包数量 – 848， 开发者数量 – 120。Debian 1.3: 发布于 1997 年七月。 项目代号 – Bo， 软件包数量 974， 开发者数量 – 200。Debian 2.0: 发布于 1998 年七月。 项目代号 - Hamm， 支持构架 – Intel i386 以及 Motorola 68000 系列， 软件包数量: 1500+， 开发者数量: 400+， 内置了 glibc。Debian 2.1: 发布于1999 年三月九日。 项目代号 – slink， 支持构架 - Alpha 和 Sparc， apt 包管理器开始成型， 软件包数量 – 2250。Debian 2.2: 发布于 2000 年八月十五日。 项目代号 – Potato， 支持构架 – Intel i386， Motorola 68000 系列， Alpha， SUN Sparc， PowerPC 以及 ARM 构架。 软件包数量: 3900+ (二进制) 以及 2600+ (源代码)， 开发者数量 – 450。 有一群人在那时研究并发表了一篇论文， 论文展示了自由软件是如何在被各种问题包围的情况下依然逐步成长为优秀的现代操作系统的。Debian 3.0: 发布于 2002 年七月十九日。 项目代号 – woody， 支持构架新增 – HP， PA\_RISC， IA-64， MIPS 以及 IBM， 首次以DVD的形式发布， 软件包数量 – 8500+， 开发者数量 – 900+， 支持加密。Debian 3.1: 发布于 2005 年六月六日。 项目代号 – sarge， 支持构架 – 新增 AMD64（非官方渠道发布）， 内核 – 2.4 以及 2.6 系列， 软件包数量: 15000+， 开发者数量 : 1500+， 增加了诸如 OpenOffice 套件， Firefox 浏览器， Thunderbird， Gnome 2.8， 支持: RAID， XFS， LVM， Mo…

Linux 小技巧：Chrome 小游戏，让文字说话，计划作业，重复执行命令
type: item
date: 2015-09-06T01:36:32+08:00
description: 重要的事情说两遍，我完成了一个Linux提示与彩蛋系列，让你的Linux获得更多创造和娱乐。Linux提示与彩蛋系列本文，我将会讲解Google-chrome内建小游戏，在终端中如何让文字说话，使用‘at’命令设置作业和使用watch命令重复执行命令。1. Google Chrome 浏览器小游戏彩蛋网线脱掉或者其他什么原因连不上网时，Google Chrome就会出现一个小游戏。声明，我并不是游戏玩家，因此我的电脑上并没有安装任何第三方的恶意游戏。安全是第一位。所以当Internet发生出错，会出现一个这样的界面：不能连接到互联网按下空格键来激活Google-chrome彩蛋游戏。游戏没有时间限制。并且还不需要浪费时间安装使用。不需要第三方软件的支持。同样支持Windows和Mac平台，但是我的平台是Linux，我也只谈论Linux。当然在Linux，这个游戏运行很好。游戏简单，但也很花费时间。使用空格/向上方向键来跳跃。请看下列截图：Google Chrome中玩游戏2. Linux 终端中朗读文字对于那些不能文字朗读的设备，有个小工具可以实现文字说话的转换器。用各种语言写一些东西，espeak就可以朗读给你。系统应该默认安装了Espeak，如果你的系统没有安装，你可以使用下列命令来安装：# apt-get install espeak (Debian) # yum install espeak (CentOS) # dnf install espeak (Fedora 22 及其以后) 你可以让espeak接受标准输入的交互输入并及时转换成语音朗读出来。如下：$ espeak [按回车键] 更详细的输出你可以这样做：$ espeak --stdout | aplay [按回车键][再次回车] espeak设置灵活，也可以朗读文本文件。你可以这样设置：$ espeak --stdout /path/to/text/file/file_name.txt | aplay [Hit Enter] espeak可以设置朗读速度。默认速度是160词每分钟。使用-s参数来设置。设置每分钟30词的语速：$ espeak -s 30 -f /path/to/text/file/file_name.txt | aplay 设置每分钟200词的语速：$ espeak -s 200 -f /path/to/text/file/file_name.txt | aplay 说其他语言，比如北印度语（作者母语），这样设置：$ espeak -v hindi --stdout 'टेकमिंट विश्व की एक बेहतरीन लाइंक्स आधारित वेबसाइट है|' | aplay 你可以使用各种语言，让espeak如上面说的以你选择的语言朗读。使用下列命令来获得语言列表：$ espeak --voices 3. 快速调度任务我们已经非常熟悉使用cron守护进程执行一个计划命令。Cron是一个Linux系统管理的高级命令，用于计划定时任务如备份或者指定时间或间隔的任何事情。但是，你是否知道at命令可以让你在指定时间调度一个任务或者命令？at命令可以指定时间执行指定内容。例如，你打算在早上11点2分执行uptime命令，你只需要这样做：$ at 11:02 uptime >> /home/$USER/uptime.txt Ctrl+D Linux中计划任务检查at命令是否成功设置，使用：$ at -l 浏览计划任务at支持计划多个命令，例如：$ at 12:30 Command – 1 Command – 2 … command – 50 … Ctrl + D 4. 特定时间重复执行命令有时，我们可以需要在指定时间间隔执行特定命令。例如，每3秒，想打印一次时间。查看现在时间，使用下列命令。$ date +"%H:%M:%S Linux中查看日期和时间为了每三秒查看一下这个命令的输出，我需要运行下列命令：$ watch -n 3 'date +"%H:%M:%S"' Linux中watch命令watch命令的‘-n’开关设定时间间隔。在上述命令中，我们定义了时间间隔为3秒。你可以按你的需求定义。同样watch 也支持其他命令或者脚本。至此。希望你喜欢这个系列的文章，让你的linux更有创造性，获得更多快乐。所有的建议欢迎评论。欢迎你也看看其他文章，谢谢。via: http://www.tecmint.com/text-to-speech-in-terminal-schedule-a-job-and-watch-commands-in-linux/作者：Avishek Kumar 译者：VicYu/Vic020 校对：wxy本文由 LC…

一些 Linux 桌面小技巧
type: item
date: 2015-08-17T03:07:24+08:00
description: 我已经写过 Linux 提示和技巧 系列的一篇文章。写这篇文章的目的是让你知道这些小技巧可以有效地管理你的系统/服务器。在Linux中创建 Cdrom ISO 镜像和监控用户在这篇文章中，我们将看到如何使用 CD/DVD 驱动器中载入的碟片来创建 ISO 镜像；打开随机手册页学习；看到登录用户的详细情况和查看浏览器内存使用量，而所有这些完全使用本地工具/命令，无需任何第三方应用程序/组件。让我们开始吧……用 CD 碟片创建 ISO 映像我们经常需要备份/复制 CD/DVD 的内容。如果你是在 Linux 平台上，不需要任何额外的软件。所有需要的是进入 Linux 终端。要从 CD/DVD 上创建 ISO 镜像，你需要做两件事。第一件事就是需要找到CD/DVD 驱动器的名称。要找到 CD/DVD 驱动器的名称，可以使用以下三种方法。1. 从终端/控制台上运行 lsblk 命令（列出块设备）$ lsblk 找块设备从上图可以看到，sr0 就是你的 cdrom （即 /dev/sr0 ）。2. 要查看有关 CD-ROM 的信息，可以使用以下命令$ less /proc/sys/dev/cdrom/info 检查 Cdrom 信息从上图可以看到， 设备名称是 sr0 （即 /dev/sr0）。3. 使用 dmesg 命令 也会得到相同的信息，并使用 egrep 来自定义输出。命令 ‘dmesg‘ 命令的输出/控制内核缓冲区信息。‘egrep‘ 命令输出匹配到的行。egrep 使用选项 -i 和 -color 时会忽略大小写，并高亮显示匹配的字符串。$ dmesg | egrep -i --color 'cdrom|dvd|cd/rw|writer' 查找设备信息从上图可以看到，设备名称是 sr0 （即 /dev/sr0）。一旦知道 CD/DVD 的名称后，在 Linux 上你可以用下面的命令来创建 ISO 镜像（你看，只需要 cat 即可！）。$ cat /dev/sr0 > /path/to/output/folder/iso_name.iso 这里的‘sr0‘是我的 CD/DVD 驱动器的名称。你应该用你的 CD/DVD 名称来代替。这将帮你创建 ISO 镜像并备份 CD/DVD 的内容无需任何第三方应用程序。创建 CDROM 的 ISO 映像随机打开一个手册页如果你是 Linux 新人并想学习使用命令行开关，这个技巧就是给你的。把下面的代码行添加在〜/ .bashrc文件的末尾。/use/bin/man $(ls /bin | shuf | head -1) 记得把上面一行脚本添加在用户的.bashrc文件中，而不是根目录的 .bashrc 文件。所以，当你下次登录本地或远程使用 SSH 时，你会看到一个随机打开的手册页供你阅读。对于想要学习命令行开关的新手，这被证明是有益的。下面是在终端登录两次分别看到的。LoadKeys 手册页Zgrep 手册页希望你知道如何退出手册页浏览——如果你已经厌烦了每次都看到手册页，你可以删除你添加到 .bashrc文件中的那几行。查看登录用户的状态了解其他用户正在共享服务器上做什么。一般情况下，你是共享的 Linux 服务器的用户或管理员的。如果你担心自己服务器的安全并想要查看哪些用户在做什么，你可以使用命令 w。这个命令可以让你知道是否有人在执行恶意代码或篡改服务器，让他停下或使用其他方法。'w' 是查看登录用户状态的首选方式。要查看登录的用户正在做什么，从终端运行命令“w”，最好是 root 用户。# w 检查 Linux 用户状态查看浏览器的内存使用状况最近有不少谈论关于 Google-chrome 的内存使用量。如要检查浏览器的内存使用情况，只需在地址栏输入 “about:memory”，不要带引号。我已经在 Google-Chrome 和 Mozilla 的 Firefox 网页浏览器进行了测试。你可以查看任何浏览器，如果它工作得很好，你可能会承认我们在下面的评论。你也可以杀死浏览器进程在 Linux 终端的进程/服务中。在 Google Chrome 中，在地址栏输入 about:memory，你应该得到类似下图的东西。查看 Chrome 内存使用状况在Mozilla Firefox浏览器，在地址栏输入 about:memory，你应该得到类似下图的东西。查看 Firefox 内存使用状况如果你已经了解它是什么，除了这些选项。要检查内存用量，你也可以点击最左边的 ‘Measure‘ 选项。Firefox 主进程它将通过浏览器树形展示进程内存使用量。目前为止就这样了。希望上述所有的提示将会帮助你。如果你有一个（或多个）技巧，分享给我们，将帮助 Linux 用户更有效地管理他们的 Lin…

Autojump：一个可以在 Linux 文件系统快速导航的高级 cd 命令
type: item
date: 2015-08-10T18:30:00+08:00
description: 对于那些主要通过控制台或终端使用 Linux 命令行来工作的 Linux 用户来说，他们真切地感受到了 Linux 的强大。 然而在 Linux 的分层文件系统中进行导航有时或许是一件头疼的事，尤其是对于那些新手来说。现在，有一个用 Python 写的名为 autojump 的 Linux 命令行实用程序，它是 Linux ‘cd’命令的高级版本。Autojump – Linux 文件系统导航的最快方式这个应用原本由 Joël Schaerer 编写，现在由 +William Ting 维护。Autojump 应用可以从用户那里学习并帮助用户在 Linux 命令行中进行更轻松的目录导航。与传统的 cd 命令相比，autojump 能够更加快速地导航至目的目录。autojump 的特色自由开源的应用，在 GPL V3 协议下发布。自主学习的应用，从用户的导航习惯中学习。更快速地导航。不必包含子目录的名称。对于大多数的标准 Linux 发行版本，能够在软件仓库中下载得到，它们包括 Debian (testing/unstable), Ubuntu, Mint, Arch, Gentoo, Slackware, CentOS, RedHat 和 Fedora。也能在其他平台中使用，例如 OS X(使用 Homebrew) 和 Windows (通过 Clink 来实现)使用 autojump 你可以跳至任何特定的目录或一个子目录。你还可以用文件管理器打开某个目录，并查看你在某个目录中所待时间的统计数据。前提版本号不低于 2.6 的 Python第 1 步: 做一次完整的系统升级1、 以 root 用户的身份，做一次系统更新或升级，以此保证你安装有最新版本的 Python。# apt-get update && apt-get upgrade && apt-get dist-upgrade [基于 APT 的系统] # yum update && yum upgrade [基于 YUM 的系统] # dnf update && dnf upgrade [基于 DNF 的系统] 注 : 这里特别提醒，在基于 YUM 或 DNF 的系统中，更新和升级执行相同的行动，大多数时间里它们是通用的，这点与基于 APT 的系统不同。第 2 步: 下载和安装 Autojump2、 正如前面所言，在大多数的 Linux 发行版本的软件仓库中， autojump 都可获取到。通过包管理器你就可以安装它。但若你想从源代码开始来安装它，你需要克隆源代码并执行 python 脚本，如下面所示：从源代码安装若没有安装 git，请安装它。我们需要使用它来克隆 git 仓库。# apt-get install git [基于 APT 的系统] # yum install git [基于 YUM 的系统] # dnf install git [基于 DNF 的系统] 一旦安装完 git，以普通用户身份登录，然后像下面那样来克隆 autojump：$ git clone git://github.com/joelthelion/autojump.git 接着，使用 cd 命令切换到下载目录。$ cd autojump 下载，赋予安装脚本文件可执行权限，并以 root 用户身份来运行安装脚本。# chmod 755 install.py # ./install.py 从软件仓库中安装3、 假如你不想麻烦，你可以以 root 用户身份从软件仓库中直接安装它:在 Debian, Ubuntu, Mint 及类似系统中安装 autojump :# apt-get install autojump 为了在 Fedora, CentOS, RedHat 及类似系统中安装 autojump, 你需要启用 EPEL 软件仓库。# yum install epel-release # yum install autojump 或 # dnf install autojump 第 3 步: 安装后的配置4、 在 Debian 及其衍生系统 (Ubuntu, Mint,…) 中, 激活 autojump 应用是非常重要的。为了暂时激活 autojump 应用，即直到你关闭当前会话或打开一个新的会话之前让 autojump 均有效，你需要以常规用户身份运行下面的命令:$ source /usr/share/autojump/autojump.sh on startup 为了使得 autojump 在 BASH shell 中永久有效，你需要运行下面的命令。$ echo '. /usr/share/autojump/autojump.sh' >> ~/.bashrc 第 4 步: Autojum…

轻松使用“Explain Shell”脚本来理解 Shell 命令
type: item
date: 2015-08-09T17:30:00+08:00
description: 我们在Linux上工作时，每个人都会遇到需要查找shell命令的帮助信息的时候。 尽管内置的帮助像man pages、whatis命令有所助益， 但man pages的输出非常冗长， 除非是个有linux经验的人，不然从大量的man pages中获取帮助信息是非常困难的，而whatis命令的输出很少超过一行， 这对初学者来说是不够的。在Linux Shell中解释Shell命令有一些第三方应用程序， 像我们在Linux 用户的命令行速查表提及过的'cheat'命令。cheat是个优秀的应用程序，即使计算机没有联网也能提供shell命令的帮助， 但是它仅限于预先定义好的命令。Jackson写了一小段代码，它能非常有效地在bash shell里面解释shell命令，可能最美之处就是你不需要安装第三方包了。他把包含这段代码的的文件命名为“explain.sh”。explain.sh工具的特性易嵌入代码。不需要安装第三方工具。在解释过程中输出恰到好处的信息。需要网络连接才能工作。纯命令行工具。可以解释bash shell里面的大部分shell命令。无需使用root账户。先决条件唯一的条件就是'curl'包了。 在如今大多数Linux发行版里面已经预安装了curl包， 如果没有你可以按照下面的命令来安装。# apt-get install curl [On Debian systems] # yum install curl [On CentOS systems] 在Linux上安装explain.sh工具我们要将下面这段代码插入'~/.bashrc'文件（LCTT译注: 若没有该文件可以自己新建一个）中。我们要为每个用户以及对应的'.bashrc'文件插入这段代码，但是建议你不要加在root用户下。我们注意到.bashrc文件的第一行代码以（#）开始， 这个是可选的并且只是为了区分余下的代码。explain.sh 标记代码的开始， 我们将代码插入.bashrc文件的底部。（备注：原代码有误，处理 https 时需要指定加密套件，据微信网友“高小树”同学的改进，原来的-Gs应该修改为-G --ciphers ecdhe_ecdsa_aes_128_sha。谢谢“高小树”同学。）# explain.sh begins explain () { if [ "$#" -eq 0 ]; then while read -p "Command: " cmd; do curl -G --ciphers ecdhe_ecdsa_aes_128_sha "https://www.mankier.com/api/explain/?cols="$(tput cols) --data-urlencode "q=$cmd" done echo "Bye!" elif [ "$#" -eq 1 ]; then curl -G --ciphers ecdhe_ecdsa_aes_128_sha "https://www.mankier.com/api/explain/?cols="$(tput cols) --data-urlencode "q=$1" else echo "Usage" echo "explain interactive mode." echo "explain 'cmd -o | ...' one quoted command to explain it." fi } explain.sh工具的使用在插入代码并保存之后，你必须退出当前的会话然后重新登录来使改变生效（LCTT译注：你也可以直接使用命令source ~/.bashrc 来让改变生效）。每件事情都是交由‘curl’命令处理， 它负责将需要解释的命令以及命令选项传送给mankier服务，然后将必要的信息打印到Linux命令行。不必说的就是使用这个工具你总是需要连接网络。让我们用explain.sh脚本测试几个笔者不懂的命令例子。1.我忘了‘du -h’是干嘛用的， 我只需要这样做:$ explain 'du -h' 获得du命令的帮助2.如果你忘了'tar -zxvf'的作用，你可以简单地如此做:$ explain 'tar -zxvf' Tar命令帮助3.我的一个朋友经常对'whatis'以及'whereis'命令的使用感到困惑，所以我建议他：在终端简单的地敲下explain命令进入交互模式。$ explain 然后一个接着一个地输入命令，就能在一个窗口看到他们各自的作用：Command: whatis Command: whereis Whatis/Whereis命令的帮助你只需要使用“Ctrl+c”就能退出交互模式。4. 你可以通过管道来请求解释更多的命令。$ explain '…

关于Linux防火墙'iptables'的面试问答
type: item
date: 2015-08-04T17:28:00+08:00
description: Nishita Agarwal是Tecmint的用户，她将分享关于她刚刚经历的一家公司（印度的一家私人公司Pune）的面试经验。在面试中她被问及许多不同的问题，但她是iptables方面的专家，因此她想分享这些关于iptables的问题和相应的答案给那些以后可能会进行相关面试的人。所有的问题和相应的答案都基于Nishita Agarwal的记忆并经过了重写。“嗨，朋友！我叫Nishita Agarwal。我已经取得了理学学士学位，我的专业集中在UNIX和它的变种（BSD，Linux）。它们一直深深的吸引着我。我在存储方面有1年多的经验。我正在寻求职业上的变化，并将供职于印度的Pune公司。”下面是我在面试中被问到的问题的集合。我已经把我记忆中有关iptables的问题和它们的答案记录了下来。希望这会对您未来的面试有所帮助。1. 你听说过Linux下面的iptables和Firewalld么？知不知道它们是什么，是用来干什么的？答案 : iptables和Firewalld我都知道，并且我已经使用iptables好一段时间了。iptables主要由C语言写成，并且以GNU GPL许可证发布。它是从系统管理员的角度写的，最新的稳定版是iptables 1.4.21。iptables通常被用作类UNIX系统中的防火墙，更准确的说，可以称为iptables/netfilter。管理员通过终端/GUI工具与iptables打交道，来添加和定义防火墙规则到预定义的表中。Netfilter是内核中的一个模块，它执行包过滤的任务。Firewalld是RHEL/CentOS 7（也许还有其他发行版，但我不太清楚）中最新的过滤规则的实现。它已经取代了iptables接口，并与netfilter相连接。2. 你用过一些iptables的GUI或命令行工具么？答案 : 虽然我既用过GUI工具，比如与Webmin结合的Shorewall；以及直接通过终端访问iptables，但我必须承认通过Linux终端直接访问iptables能给予用户更高级的灵活性、以及对其背后工作更好的理解的能力。GUI适合初级管理员，而终端适合有经验的管理员。3. 那么iptables和firewalld的基本区别是什么呢？答案 : iptables和firewalld都有着同样的目的（包过滤），但它们使用不同的方式。iptables与firewalld不同，在每次发生更改时都刷新整个规则集。通常iptables配置文件位于‘/etc/sysconfig/iptables‘，而firewalld的配置文件位于‘/etc/firewalld/‘。firewalld的配置文件是一组XML文件。以XML为基础进行配置的firewalld比iptables的配置更加容易，但是两者都可以完成同样的任务。例如，firewalld可以在自己的命令行界面以及基于XML的配置文件下使用iptables。4. 如果有机会的话，你会在你所有的服务器上用firewalld替换iptables么？答案 : 我对iptables很熟悉，它也工作的很好。如果没有任何需求需要firewalld的动态特性，那么没有理由把所有的配置都从iptables移动到firewalld。通常情况下，目前为止，我还没有看到iptables造成什么麻烦。IT技术的通用准则也说道“为什么要修一件没有坏的东西呢？”。上面是我自己的想法，但如果组织愿意用firewalld替换iptables的话，我不介意。5. 你看上去对iptables很有信心，巧的是，我们的服务器也在使用iptables。iptables使用的表有哪些？请简要的描述iptables使用的表以及它们所支持的链。答案 : 谢谢您的赞赏。至于您问的问题，iptables使用的表有四个，它们是：Nat 表Mangle 表Filter 表Raw 表Nat表 : Nat表主要用于网络地址转换。根据表中的每一条规则修改网络包的IP地址。流中的包仅遍历一遍Nat表。例如，如果一个通过某个接口的包被修饰（修改了IP地址），该流中其余的包将不再遍历这个表。通常不建议在这个表中进行过滤，由NAT表支持的链称为PREROUTING 链，POSTROUTING 链和OUTPUT 链。Mangle表 : 正如它的名字一样，这个表用于校正网络包。它用来对特殊的包进行修改。它能够修改不同包的头部和内容。Mangle表不能用于地址伪装。支持的链包括PREROUTING 链，OUTPUT 链，Forward 链，Input 链和POSTROUTING 链。Filter表 : Filter表是iptables中使用的默认表，它用来过滤网络包。如果没有定义任何规则，Filter表则被当作默认的表，并且…