蚊章汇 - Vivek Gite
type: channel
link: https://linuxcn.bwsl.wang/author/216/
description: Vivek Gite
items: Linux 下如何避免重复性压迫损伤（RSI）
items: 学习 Linux/*BSD/Unix 的 30 个最佳在线文档
items: Bash 脚本中如何使用 here 文档将数据写入文件
items: 如何在 FreeBSD 上设置 PF 防火墙来保护 Web 服务器
items: 如何在 Ubuntu Linux 上使用 KVM 云镜像
items: 如何记录 Linux 的系统运行时间的统计信息
items: 如何在 Linux 里使用 nmcli 添加网桥
items: 10 个增加 UNIX/Linux Shell 脚本趣味的工具
items: 命令行乐趣：嘲讽输错 Bash 命令的用户
items: 如何在 Debian Linux 上设置和配置网桥

Linux 下如何避免重复性压迫损伤（RSI）
type: item
date: 2019-02-02T06:43:00+08:00
description: 重复性压迫损伤 Repetitive Strain Injury （RSI）是职业性损伤综合症，非特异性手臂疼痛或工作引起的上肢障碍。RSI 是由于过度使用双手从事重复性任务导致的，如打字、书写和使用鼠标. 不幸的是，大部分人不了解什么是 RSI 以及它的危害有多大。你可以使用名叫 Workrave 的开源软件轻松的预防 RSI。RSI 有哪些症状？我从这个页面引用过来的，看看哪些你被说中了：疲惫缺乏忍耐力？手掌及上肢乏力疼痛麻木甚至失去知觉？沉重：你有没有感觉手很沉？笨拙: 你有没有感觉抓不紧东西？你有没有感觉手上无力？很难打开罐子或切菜无力？缺乏协调和控制？手总是冰凉的？健康意识有待提高？稍不注意身体就发现有毛病了。是否过敏？频繁的自我按摩（潜意识的）？共鸣的疼痛？当别人在谈论手痛的时候，你是否也感觉到了手疼？如何减少发展为 RSI 的风险使用计算机的时候每隔 30 分钟间隔休息一下。借助软件如 workrave 预防 RSI。有规律的锻炼可以预防各种损伤，包括 RSI。使用合理的姿势。调整你的电脑桌和椅子使身体保持一个肌肉放松状态。WorkraveWorkrave 是一款预防计算机用户发展为 RSI 或近视的自由开源软件。软件会定期锁屏为一个动画： “Workrave 小姐”，引导用户做各种伸展运动并敦促其休息一下。这个软件经常提醒你暂停休息一下，并限制你每天的限度。程序可以运行在 MS-Window、Linux 以及类 UNIX 操作系统下。安装 workrave在 Debian/Ubuntu Linux 系统运行以下 apt 命令/apt-get 命令：$ sudo apt-get install workraveFedora Linux 发行版用户运行以下 dnf 命令：$ sudo dnf install workraveRHEL/CentOS Linux 用户可以启动 EPEL 仓库并用 yum 命令安装：### [ **在CentOS/RHEL 7.x 及衍生版本上测试** ] ### $ sudo yum install epel-release $ sudo yum install https://rpms.remirepo.net/enterprise/remi-release-7.rpm $ sudo yum install workraveArch Linux 用户运行以下 pacman 命令来安装：$ sudo pacman -S workraveFreeBSD 用户可用以下 pkg 命令安装：# pkg install workraveOpenBSD 用户可用以下 pkg\_add 命令安装：$ doas pkg_add workrave如何配置 workraveWorkrave 以一个小程序运行，它的用户界面位于面板中。你可以为 workrave 增加一个面板来控制软件的动作和外观。增加一个新 workrave 对象到面板：在面板空白区域右键，打开面板弹出菜单选择新增到面板新增面板对话框打开，在加载器顶部，可以看到可用的面板对象按照字母排列。选中 workrave 程序并单击新增。图 01：新增 workrave 对象到面板如果修改 workrave 对象的属性，执行以下步骤：右键 workrave 对象打开面板对象弹出选中偏好。使用属性对话框修改对应属性图 02：修改 Workrave 对象属性Workrave 运行展示主窗口显示下一次提醒休息的剩余时间，这个窗口可以关闭，时间提示窗口会显示在面板上。图 03：时间计数器图 04：Workrave 小姐 - 引导你做伸展运动的动画休息提示窗口，请求你暂停一下工作：图 05：休息提示倒计时图 06：你可以跳过休息参考链接:Workrave 项目 主页pokoy 防止 RSI 和其他计算机压力的轻量级守护进程GNOME3 下的 Pomodoro 计数器RSI 的维基百科关于作者作者是 nixCraft 创始人，经验丰富的系统管理员，同时也是一个 Linux/Unix 系统下的 shell 脚本培训师。他曾服务于全球客户，并与多个行业合作包括 IT、教育、国防和航天研究，以及非盈利机构。可以在 Twitter、Facebook、Google+ 上关注他。via: https://www.cyberciti.biz/tips/repetitive-strain-injury-prevention-software.html作者：Vivek Gite 译者：guevaraya 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出

学习 Linux/*BSD/Unix 的 30 个最佳在线文档
type: item
date: 2018-12-05T02:39:00+08:00
description: 手册页（man）是由系统管理员和 IT 技术开发人员写的，更多的是为了作为参考而不是教你如何使用。手册页对于已经熟悉使用 Linux、Unix 和 BSD 操作系统的人来说是非常有用的。如果你仅仅需要知道某个命令或者某个配置文件的格式那么你可以使用手册页，但是手册页对于 Linux 新手来说并没有太大的帮助。想要通过使用手册页来学习一些新东西不是一个好的选择。这里有将提供 30 个学习 Linux 和 Unix 操作系统的最佳在线网页文档。值得一提的是，相对于 Linux，BSD 的手册页更好。1：Red Hat Enterprise Linux（RHEL）RHEL 是由红帽公司开发的面向商业市场的 Linux 发行版。红帽的文档是最好的文档之一，涵盖从 RHEL 的基础到一些高级主题比如安全、SELinux、虚拟化、目录服务器、服务器集群、JBOSS 应用程序服务器、高性能计算（HPC）等。红帽的文档已经被翻译成 22 种语言，发布成多页面 HTML、单页面 HTML、PDF、EPUB 等文件格式。好消息同样的文档你可以用于 Centos 和 Scientific Linux（社区企业发行版）。这些文档随操作系统一起下载提供，也就是说当你没有网络的时候，你也可以使用它们。RHEL 的文档涵盖从安装到配置器群的所有内容。唯一的缺点是你需要成为付费用户。当然这对于企业公司来说是一件完美的事。RHEL 文档：HTML/PDF格式（LCTT 译注：此链接需要付费用户才可以访问）是否支持论坛：只能通过红帽公司的用户网站提交支持案例。关于 CentOS Wiki 和论坛的说明CentOS（ 社区企业操作系统 Community ENTerprise Operating System ）是由 RHEL 提供的自由源码包免费重建的。它为个人电脑或其它用途提供了可靠的、免费的企业级 Linux。你可以不用付出任何支持和认证费用就可以获得 RHEL 的稳定性。CentOS的 wiki 分为 Howto、技巧等等部分，链接如下：文档：wiki 格式是否支持论坛：是2：Arch 的 Wiki 和论坛Arch linux 是一个独立开发的 Linux 操作系统，它有基于 wiki 网站形式的非常不错的文档。它是由 Arch 社区的一些用户共同协作开发出来的，并且允许任何用户添加或修改内容。这些文档教程被分为几类比如说优化、软件包管理、系统管理、X window 系统还有获取安装 Arch Linux 等。它的官方论坛在解决许多问题的时候也非常有用。它有总共 4 万多个注册用户、超过 1 百万个帖子。 该 wiki 包含一些 其它 Linux 发行版也适用的通用信息。Arch 社区文档：Wiki 格式是否支持论坛：是3：Gentoo Linux Wiki 和论坛Gentoo Linux 基于 Portage 包管理系统。Gentoo Linux 用户根据它们选择的配置在本地编译源代码。多数 Gentoo Linux 用户都会定制自己独有的程序集。 Gentoo Linux 的文档会给你一些有关 Gentoo Linux 操作系统的说明和一些有关安装、软件包、网络和其它等主要出现的问题的解决方法。Gentoo 有对你来说 非常有用的论坛，论坛中有超过 13 万 4 千的用户，总共发了有 5442416 个文章。Gentoo 社区文档：手册 和 Wiki 格式是否支持论坛：是4：Ubuntu Wiki 和文档Ubuntu 是领先的台式机和笔记本电脑发行版之一。其官方文档由 Ubuntu 文档工程开发维护。你可以在从官方文档中查看大量的信息，比如如何开始使用 Ubuntu 的教程。最好的是，此处包含的这些信息也可用于基于 Debian 的其它系统。你可能会找到由 Ubuntu 的用户们创建的社区文档，这是一份有关 Ubuntu 的使用教程和技巧等。Ubuntu Linux 有着网络上最大的 Linux 社区的操作系统，它对新用户和有经验的用户均有助益。Ubuntu 社区文档：wiki 格式Ubuntu 官方文档：wiki 格式是否支持论坛：是5：IBM Developer WorksIBM Developer Works 为 Linux 程序员和系统管理员提供技术资源，其中包含数以百计的文章、教程和技巧来协助 Linux 程序员的编程工作和应用开发还有系统管理员的日常工作。IBM 开发者项目文档：HTML 格式是否支持论坛：是6：FreeBSD 文档和手册FreeBSD 的手册是由 FreeBSD 文档项目 FreeBSD Documentation Project 所创建的，它介绍了 FreeBSD 操作系统的安装、管理和一些日常使用技巧等内容。FreeB…

Bash 脚本中如何使用 here 文档将数据写入文件
type: item
date: 2018-11-12T17:51:20+08:00
description: here 文档 here document （LCTT 译注：here 文档又称作 heredoc ）不是什么特殊的东西，只是一种 I/O 重定向方式，它告诉 bash shell 从当前源读取输入，直到读取到只有分隔符的行。这对于向 ftp、cat、echo、ssh 和许多其他有用的 Linux/Unix 命令提供指令很有用。 此功能适用于 bash 也适用于 Bourne、Korn、POSIX 这三种 shell。here 文档语法语法是：command <<EOF cmd1 cmd2 arg1 EOF或者允许 shell 脚本中的 here 文档使用 EOF<<- 以自然的方式缩进：command <<-EOF msg1 msg2 $var on line EOF或者command <<'EOF' cmd1 cmd2 arg1 $var won't expand as parameter substitution turned off by single quoting EOF或者 重定向并将其覆盖 到名为 my_output_file.txt 的文件中：command <<EOF > my_output_file.txt mesg1 msg2 msg3 $var on $foo EOF或重定向并将其追加到名为 my_output_file.txt 的文件中：command <<EOF >> my_output_file.txt mesg1 msg2 msg3 $var on $foo EOF示例以下脚本将所需内容写入名为 /tmp/output.txt 的文件中：#!/bin/bash OUT=/tmp/output.txt echo "Starting my script..." echo "Doing something..." cat <<EOF >$OUT Status of backup as on $(date) Backing up files $HOME and /etc/ EOF echo "Starting backup using rsync..."你可以使用cat命令查看/tmp/output.txt文件：$ cat /tmp/output.txt示例输出： Status of backup as on Thu Nov 16 17:00:21 IST 2017 Backing up files /home/vivek and /etc/禁用路径名/参数/变量扩展、命令替换、算术扩展像 $HOME 这类变量和像 $(date) 这类命令在脚本中会被解释为替换。 要禁用它，请使用带有 'EOF' 这样带有单引号的形式，如下所示：#!/bin/bash OUT=/tmp/output.txt echo "Starting my script..." echo "Doing something..." # No parameter and variable expansion, command substitution, arithmetic expansion, or pathname expansion is performed on word. # If any part of word is quoted, the delimiter is the result of quote removal on word, and the lines in the here-document # are not expanded. So EOF is quoted as follows cat <<'EOF' >$OUT Status of backup as on $(date) Backing up files $HOME and /etc/ EOF echo "Starting backup using rsync..."你可以使用 cat 命令查看 /tmp/output.txt 文件：$ cat /tmp/output.txt示例输出： Status of backup as on $(date) Backing up files $HOME and /etc/ 关于 tee 命令的使用语法是：tee /tmp/filename <<EOF >/dev/null line 1 line 2 line 3 $(cmd) $var on $foo EOF或者通过在单引号中引用 EOF 来禁用变量替换和命令替换：tee /tmp/filename <<'EOF' >/dev/null line 1 line 2 line 3 $(cmd) $var on $foo EOF这是我更新的脚本：#!/bin…

如何在 FreeBSD 上设置 PF 防火墙来保护 Web 服务器
type: item
date: 2018-09-16T06:39:00+08:00
description: 我是从 Linux 迁移过来的 FreeBSD 新用户，Linux 中使用的是 netfilter 防火墙框架（LCTT 译注：netfilter 是由 Rusty Russell 提出的 Linux 2.4 内核防火墙框架）。那么在 FreeBSD 上，我该如何设置 PF 防火墙，来保护只有一个公共 IP 地址和端口的 web 服务器呢？PF 是 包过滤器 packet filter 的简称。它是为 OpenBSD 开发的，但是已经被移植到了 FreeBSD 以及其它操作系统上。PF 是一个包状态过滤引擎。在这篇教程中，我将向你展示如何在 FreeBSD 10.x 以及 11.x 中设置 PF 防火墙，从而来保护 web 服务器。第一步：开启 PF 防火墙你需要把下面这几行内容添加到文件 /etc/rc.conf 文件中：# echo 'pf_enable="YES"' >> /etc/rc.conf # echo 'pf_rules="/usr/local/etc/pf.conf"' >> /etc/rc.conf # echo 'pflog_enable="YES"' >> /etc/rc.conf # echo 'pflog_logfile="/var/log/pflog"' >> /etc/rc.conf在这里：pf_enable="YES" - 开启 PF 服务pf_rules="/usr/local/etc/pf.conf" - 从文件 /usr/local/etc/pf.conf 中读取 PF 规则pflog_enable="YES" - 为 PF 服务打开日志支持pflog_logfile="/var/log/pflog" - 存储日志的文件，即日志存于文件 /var/log/pflog 中第二步：在 /usr/local/etc/pf.conf 文件中创建防火墙规则输入下面这个命令打开文件（超级用户模式下）：# vi /usr/local/etc/pf.conf在文件中添加下面这些 PF 规则集：# vim: set ft=pf # /usr/local/etc/pf.conf ## 设置公共端口 ## ext_if="vtnet0" ## 设置服务器公共 IP 地址 ## ext_if_ip="172.xxx.yyy.zzz" ## 设置并删除下面这些公共端口上的 IP 范围 ## martians = "{ 127.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, \ 10.0.0.0/8, 169.254.0.0/16, 192.0.2.0/24, \ 0.0.0.0/8, 240.0.0.0/4 }" ## 设置 http(80)/https (443) 端口 ## webports = "{http, https}" ## 启用下面这些服务 ## int_tcp_services = "{domain, ntp, smtp, www, https, ftp, ssh}" int_udp_services = "{domain, ntp}" ## 跳过回环端口 - 跳过端口上的所有 PF 处理 ## set skip on lo ## 设置 PF 应该统计的端口信息，如发送/接收字节数，通过/禁止的包的数目 ## set loginterface $ext_if ## 设置默认策略 ## block return in log all block out all # 基于 IP 分片的错误处理来防御攻击 scrub in all # 删除所有不可达路由地址 block drop in quick on $ext_if from $martians to any block drop out quick on $ext_if from any to $martians ## 禁止欺骗包 antispoof quick for $ext_if # 打开 SSH 端口，SSH 服务仅从 VPN IP 139.xx.yy.zz 监听 22 号端口 # 出于安全原因，我不允许/接收 SSH 流量 pass in quick on $ext_if inet proto tcp from 139.xxx.yyy.zzz to $ext_if_ip port = ssh flags S/SA keep state label "USER_RULE: Allow SSH from 139.xxx.yyy.zzz" ## 使用下面这些规则来为所有来自任何 IP 地址的用户开启 SSH 服务 # ## pass in inet proto tcp to $ext_if port ssh ##…

如何在 Ubuntu Linux 上使用 KVM 云镜像
type: item
date: 2018-04-07T19:37:26+08:00
description: 如何下载并使用运行在 Ubuntu Linux 服务器上的 KVM 云镜像？如何在 Ubuntu Linux 16.04 LTS 服务器上无需完整安装即可创建虚拟机？如何在 Ubuntu Linux 上使用 KVM 云镜像？基于内核的虚拟机（KVM）是 Linux 内核的虚拟化模块，可将其转变为虚拟机管理程序。你可以在命令行使用 Ubuntu 为 libvirt 和 KVM 提供的虚拟化前端通过 KVM 创建 Ubuntu 云镜像。这个快速教程展示了如何安装和使用 uvtool，它为 Ubuntu 云镜像下载，libvirt 和 clout\_int 提供了统一的集成虚拟机前端。步骤 1 - 安装 KVM你必须安装并配置 KVM。使用 apt 命令/apt-get 命令，如下所示：$ sudo apt install qemu-kvm libvirt-bin virtinst bridge-utils cpu-checker $ kvm-ok ## [configure bridged networking as described here][3] $ sudo vi /etc/network/interfaces $ sudo systemctl restart networking $ sudo brctl show 参阅如何在 Ubuntu 16.04 LTS Headless 服务器上安装 KVM 以获得更多信息。（LCTT 译注：Headless 服务器是指没有本地接口的计算设备，专用于向其他计算机及其用户提供服务。）步骤 2 - 安装 uvtool键入以下 apt 命令/apt-get 命令：$ sudo apt install uvtool 示例输出：[sudo] password for vivek: Reading package lists... Done Building dependency tree Reading state information... Done The following packages were automatically installed and are no longer required: gksu libgksu2-0 libqt5designer5 libqt5help5 libqt5printsupport5 libqt5sql5 libqt5sql5-sqlite libqt5xml5 python3-dbus.mainloop.pyqt5 python3-notify2 python3-pyqt5 python3-sip Use 'sudo apt autoremove' to remove them. The following additional packages will be installed: cloud-image-utils distro-info python-boto python-pyinotify python-simplestreams socat ubuntu-cloudimage-keyring uvtool-libvirt Suggested packages: cloud-utils-euca shunit2 python-pyinotify-doc The following NEW packages will be installed: cloud-image-utils distro-info python-boto python-pyinotify python-simplestreams socat ubuntu-cloudimage-keyring uvtool uvtool-libvirt 0 upgraded, 9 newly installed, 0 to remove and 0 not upgraded. Need to get 1,211 kB of archives. After this operation, 6,876 kB of additional disk space will be used. Get:1 http://in.archive.ubuntu.com/ubuntu artful/main amd64 distro-info amd64 0.17 [20.3 kB] Get:2 http://in.archive.ubuntu.com/ubuntu artful/universe amd64 python-boto all 2.44.0-1ubuntu2 [740 kB] Get:3 http://in.archive.ubuntu.com/ubuntu artful/ma…

如何记录 Linux 的系统运行时间的统计信息
type: item
date: 2018-04-06T06:57:56+08:00
description: Linux/Unix 系统管理员对服务器的系统运行时间有一种奇怪的痴迷。这里有一个关于这个主题的 xkcd 漫画，一个好的系统管理员是一股不可阻挡的力量，他伫立在你家猫咪博客的服务器之前，对抗黑暗势力。我们可以使用 uptime 命令或 w 命令 或 top 命令来判断 Linux 系统运行了多久。我可以使用 tuptime 工具保留每次重新启动的运行时间，以获得系统运行时间的历史和统计报告。这就像 uptime 命令一样，但输出结果更令人印象深刻。最近我发现了另一种称为 uptimed 的工具，用于记录关于机器的系统运行时间和统计信息。让我们看看如何使用 Linux 操作系统上的 uptimed 和 uprecords 来获得运行时间的记录统计信息。查找系统运行时间非常简单，只需在基于 Linux 的系统上键入以下命令即可：$ uptime -p up 2 weeks, 4 days, 7 hours, 28 minutes 要保留有关 uptime 的历史统计信息，请使用 tuptime 或 uptimed 工具。安装 uptimed安装 uptimed 的最简单的方式是通过你的软件包管理器，比如 apt/apt-get/yum 这些你的 Linux 发行版的朋友。在 Debian/Ubuntu Linux 上安装 uptimed键入以下 apt 命令/apt-get 命令：$ sudo apt-get install uptimed 示例输出：Reading package lists... Done Building dependency tree Reading state information... Done The following additional packages will be installed: libuptimed0 The following NEW packages will be installed: libuptimed0 uptimed 0 upgraded, 2 newly installed, 0 to remove and 3 not upgraded. Need to get 40.7 kB of archives. After this operation, 228 kB of additional disk space will be used. Do you want to continue? [Y/n] y Get:1 http://mirrors.linode.com/ubuntu xenial/universe amd64 libuptimed0 amd64 1:0.3.17-4 [9,050 B] Get:2 http://mirrors.linode.com/ubuntu xenial/universe amd64 uptimed amd64 1:0.3.17-4 [31.6 kB] Fetched 40.7 kB in 0s (2,738 kB/s) Preconfiguring packages ... Selecting previously unselected package libuptimed0. (Reading database ... 39163 files and directories currently installed.) Preparing to unpack .../libuptimed0_1%3a0.3.17-4_amd64.deb ... Unpacking libuptimed0 (1:0.3.17-4) ... Selecting previously unselected package uptimed. Preparing to unpack .../uptimed_1%3a0.3.17-4_amd64.deb ... Unpacking uptimed (1:0.3.17-4) ... Processing triggers for systemd (229-4ubuntu21) ... Processing triggers for ureadahead (0.100.0-19) ... Processing triggers for man-db (2.7.5-1) ... Setting up libuptimed0 (1:0.3.17-4) ... Setting up uptimed (1:0.3.17-4) ... Processing triggers for libc-bin (2.23-0ubuntu9) ... Processing triggers for systemd (229-4ubu…

如何在 Linux 里使用 nmcli 添加网桥
type: item
date: 2018-04-05T04:26:40+08:00
description: Q：我正在电脑上使用 Debian Linux 9 “stretch”。 我想用 NetworkManager 来建网桥。但是根本就没有添加 br0的选项。我该如何在 Linux 里使用 nmcli 来为 NetworkManager 创建或者添加网桥呢？网桥没什么特别的，只是把两个网络连在一起。它工作在数据链路层，即 OSI 模型的第二层。网桥经常用在虚拟机或别的一些软件中。为了使用网桥而关闭桌面 Linux 上的 NetworkManager 显然是不明智的。nmcli 可以创建一个永久的网桥而不需要编辑任何文件。本文将展示如何使用 NetworkManager 的命令行工具 nmcli 来创建网桥。如何使用 nmcli 来创建/添加网桥使用 NetworkManager 在 Linux 上添加网桥接口的步骤如下：打开终端获取当前连接状态： nmcli con show添加新的网桥： nmcli con add type bridge ifname br0创建子网卡： nmcli con add type bridge-slave ifname eno1 master br0打开 br0： nmcli con up br0让我们从细节层面看看如何创建一个名为 br0 的网桥。获取当前网络配置你可以通过 NetworkManager 的 GUI 来了解本机的网络连接：也可以使用如下命令行来查看：$ nmcli con show $ nmcli connection show --active 我有一个使用网卡 eno1 的 “有线连接”。我的系统还有一个 VPN 接口。我将要创建一个名为 br0 的网桥，并连接到 eno1。如何创建一个名为 br0 的网桥$ sudo nmcli con add ifname br0 type bridge con-name br0 $ sudo nmcli con add type bridge-slave ifname eno1 master br0 $ nmcli connection show 你也可以禁用 STP：$ sudo nmcli con modify br0 bridge.stp no $ nmcli con show $ nmcli -f bridge con show br0 最后一条命令展示了禁用 STP 后的网桥参数：bridge.mac-address: -- bridge.stp: no bridge.priority: 32768 bridge.forward-delay: 15 bridge.hello-time: 2 bridge.max-age: 20 bridge.ageing-time: 300 bridge.multicast-snooping: yes 如何打开网桥你必须先关闭 Wired connection 1 ，然后打开 br0：$ sudo nmcli con down "Wired connection 1" $ sudo nmcli con up br0 $ nmcli con show 使用 ip 命令 来查看 IP 信息：$ ip a s $ ip a s br0 附录: 如何在 KVM 上使用 br0现在你可以使用 KVM/VirtualBox/VMware workstation 创建的 VM（虚拟机）来直接连接网络而非通过 NAT。使用 vi 或者 cat 命令为虚拟机创建一个名为 br0.xml 的文件：$ cat /tmp/br0.xml 添加以下代码：<network> <name>br0</name> <forward mode="bridge"/> <bridge name="br0" /> </network> 如下所示运行 virsh命令：# virsh net-define /tmp/br0.xml # virsh net-start br0 # virsh net-autostart br0 # virsh net-list --all 输出： Name State Autostart Persistent ---------------------------------------------------------- br0 active yes yes default inactive no yes 阅读 man 页面获取更多信息：$ man ip $ man nmcli 关于作者作者是 nixCraft 的创建者、老练的系统管理员和一个 Linux/Unix shell 脚本编程培训师。他为全球客户和各种公司工作，包括 IT，教育，国防，空间研究以及非营利组织。 他的联系方式 Twitter、 …

10 个增加 UNIX/Linux Shell 脚本趣味的工具
type: item
date: 2018-04-04T01:48:27+08:00
description: 有些误解认为 shell 脚本仅用于 CLI 环境。实际上在 KDE 或 Gnome 桌面下，你可以有效的使用各种工具编写 GUI 或者网络（socket）脚本。shell 脚本可以使用一些 GUI 组件（菜单、警告框、进度条等），你可以控制终端输出、光标位置以及各种输出效果等等。利用下面的工具，你可以构建强壮的、可交互的、对用户友好的 UNIX/Linux bash 脚本。制作 GUI 应用不是一项困难的任务，但需要时间和耐心。幸运的是，UNIX 和 Linux 都带有大量编写漂亮 GUI 脚本的工具。以下工具是基于 FreeBSD 和 Linux 操作系统做的测试，而且也适用于其他类 UNIX 操作系统。1、notify-send 命令notify-send 命令允许你借助通知守护进程发送桌面通知给用户。这种避免打扰用户的方式，对于通知桌面用户一个事件或显示一些信息是有用的。在 Debian 或 Ubuntu 上，你需要使用 apt 命令 或 apt-get 命令 安装的包：sudo apt-get install libnotify-bin CentOS/RHEL 用户使用下面的 yum 命令：sudo yum install libnotify Fedora Linux 用户使用下面的 dnf 命令：`$ sudo dnf install libnotify` In this example, send simple desktop notification from the command line, enter: ### 发送一些通知 ### notify-send "rsnapshot done :)" 示例输出：下面是另一个附加选项的代码：... alert=18000 live=$(lynx --dump http://money.rediff.com/ | grep 'BSE LIVE' | awk '{ print $5}' | sed 's/,//g;s/\.[0-9]*//g') [ $notify_counter -eq 0 ] && [ $live -ge $alert ] && { notify-send -t 5000 -u low -i "BSE Sensex touched 18k"; notify_counter=1; } ... 示例输出：这里：-t 5000：指定超时时间（毫秒） （5000 毫秒 = 5 秒）-u low： 设置紧急等级 （如：低、普通、紧急）-i gtk-dialog-info： 设置要显示的图标名称或者指定的图标（你可以设置路径为：-i /path/to/your-icon.png）关于更多使用 notify-send 功能的信息，请参考 man 手册。在命令行下输入 man notify-send 即可看见：man notify-send 2、tput 命令tput 命令用于设置终端特性。通过 tput 你可以设置：在屏幕上移动光标。获取终端信息。设置颜色（背景和前景）。设置加粗模式。设置反转模式等等。下面有一段示例代码：#!/bin/bash # clear the screen tput clear # Move cursor to screen location X,Y (top left is 0,0) tput cup 3 15 # Set a foreground colour using ANSI escape tput setaf 3 echo "XYX Corp LTD." tput sgr0 tput cup 5 17 # Set reverse video mode tput rev echo "M A I N - M E N U" tput sgr0 tput cup 7 15 echo "1. User Management" tput cup 8 15 echo "2. Service Management" tput cup 9 15 echo "3. Process Management" tput cup 10 15 echo "4. Backup" # Set bold mode tput bold tput cup 12 15 read -p "Enter your choice [1-4] " choice tput clear tput sgr0 tput rc 示例输出：关于 tput 命令的详细信息，参见手册：man 5 terminfo man tput 3、setleds 命令setleds 命令允许你设置键盘灯。下面是打开数字键灯的示例：setleds -D +num 关闭数字键灯，输入：setleds -D…

命令行乐趣：嘲讽输错 Bash 命令的用户
type: item
date: 2018-03-30T18:26:59+08:00
description: 你可以通过配置 sudo 命令去嘲讽输入错误密码的用户。但是现在，当用户在 shell 输错命令时，就能嘲讽他了（滥用？）。你好 bash-insulter来自 Github 页面：当用户键入错误命令，随机嘲讽。它使用了一个 bash4.x. 版本的全新内置错误处理函数，叫 command_not_found_handle。安装键入下列 git 命令克隆一个仓库：git clone https://github.com/hkbakke/bash-insulter.git bash-insulter 示例输出：Cloning into 'bash-insulter'... remote: Counting objects: 52, done. remote: Compressing objects: 100% (49/49), done. remote: Total 52 (delta 12), reused 12 (delta 2), pack-reused 0 Unpacking objects: 100% (52/52), done. 用文本编辑器，比如说使用 vi，编辑你的 ~/.bashrc 或者 /etc/bash.bashrc 文件：$ vi ~/.bashrc 在其后追加这一行（具体了解请查看 if..else..fi 声明 和 source 命令）：if [ -f $HOME/bash-insulter/src/bash.command-not-found ]; then source $HOME/bash-insulter/src/bash.command-not-found fi 保存并关闭文件。重新登录，如果不想退出账号也可以手动运行它：$ . $HOME/bash-insulter/src/bash.command-not-found 如何使用它？尝试键入一些无效命令：$ ifconfigs $ dates 示例输出:自定义你需要编辑 $HOME/bash-insulter/src/bash.command-not-found：$ vi $HOME/bash-insulter/src/bash.command-not-found 示例代码：command_not_found_handle () { local INSULTS=( "Boooo!" "Don't you know anything?" "RTFM!" "Hahaha, n00b!" "Wow! That was impressively wrong!" "What are you doing??" "Pathetic" "...and this is the best you can do??" "The worst one today!" "n00b alert!" "Your application for reduced salary has been sent!" "lol" "u suk" "lol... plz" "plz uninstall" "And the Darwin Award goes to.... ${USER}!" "ERROR_INCOMPETENT_USER" "Incompetence is also competence" "Bad." "Fake it till you make it!" "What is this...? Amateur hour!?" "Come on! You can do it!" "Nice try." "What if... you type an actual command the next time!" "What if I told you... it is possible to type valid commands." "Y u no speak computer???" "This is not Windows" "Perhaps you should leave the command line alone..." "Please step away from the keyboard!" "error code: 1D10T" "ACHTUNG! ALLES TURISTEN UND NONTEKNISCHEN LOOKENPEEPERS! DAS KOMPUTERMASCHINE IST NICHT FÜR DER GEFINGERPOKEN UND MITTENGRABEN! ODERWISE IST EASY TO SCHNAPPEN DER SPRINGENWERK, BLOWENFUSEN UND POPPENCORKEN MIT SPITZ…

如何在 Debian Linux 上设置和配置网桥
type: item
date: 2018-03-29T18:52:00+08:00
description: Q：我是一个新 Debian Linux 用户，我想为 Debian Linux 上运行的虚拟化环境（KVM）设置网桥。那么我该如何在 Debian Linux 9.x 服务器上的 /etc/network/interfaces 中设置桥接网络呢？如何你想为你的虚拟机分配 IP 地址并使其可从你的局域网访问，则需要设置网络桥接器。默认情况下，虚拟机使用 KVM 创建的专用网桥。但你需要手动设置接口，避免与网络管理员发生冲突。怎样安装 brctl输入以下 apt-get 命令：$ sudo apt install bridge-utils 怎样在 Debian Linux 上设置网桥你需要编辑 /etc/network/interface 文件。不过，我建议在 /etc/network/interface.d/ 目录下放置一个全新的配置。在 Debian Linux 配置网桥的过程如下：步骤 1 - 找出你的物理接口使用 ip 命令：$ ip -f inet a s 示例输出如下：2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 inet 192.168.2.23/24 brd 192.168.2.255 scope global eno1 valid_lft forever preferred_lft forever eno1 是我的物理网卡。步骤 2 - 更新 /etc/network/interface 文件确保只有 lo（loopback 在 /etc/network/interface 中处于活动状态）。（LCTT 译注：loopback 指本地环回接口，也称为回送地址）删除与 eno1 相关的任何配置。这是我使用 cat 命令 打印的配置文件：$ cat /etc/network/interface # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). source /etc/network/interfaces.d/* # The loopback network interface auto lo iface lo inet loopback 步骤 3 - 在 /etc/network/interfaces.d/br0 中配置网桥（br0）使用文本编辑器创建一个文本文件，比如 vi 命令：$ sudo vi /etc/network/interfaces.d/br0 在其中添加配置：## static ip config file for br0 ## auto br0 iface br0 inet static address 192.168.2.23 broadcast 192.168.2.255 netmask 255.255.255.0 gateway 192.168.2.254 # If the resolvconf package is installed, you should not edit # the resolv.conf configuration file manually. Set name server here #dns-nameservers 192.168.2.254 # If you have muliple interfaces such as eth0 and eth1 # bridge_ports eth0 eth1 bridge_ports eno1 bridge_stp off # disable Spanning Tree Protocol bridge_waitport 0 # no delay before a port becomes available bridge_fd 0 # no forwarding delay 如果你想使用 DHCP 来获得 IP 地址：## DHCP ip config file for br0 ## auto br0 # Bridge setup iface br0 inet dhcp bridge_ports eno1 在 vi/vim 中保存并关闭文件。步骤 4 - 重新启动网络服务在重新启动网络服务之前，请确保防火墙已关闭。防火墙可能会引用较老的接口，例如 eno1。一旦服务重新启动，你必须更新 br0 接口的防火墙规则。键入以下命令重新启动防火墙：…