蚊章汇 - Ricardo Gerardi
type: channel
link: https://linuxcn.bwsl.wang/author/1066/
description: Ricardo Gerardi
items: 8 个让我更有效率的 Git 别名
items: 5 个好用的开发者 Vim 插件
items: i3 窗口管理器使 Linux 更美好
items: 在 Linux 命令行中使用 tcpdump 抓包
items: 用 zsh 提高生产力的 5 个技巧
items: i3 窗口管理器入门

8 个让我更有效率的 Git 别名
type: item
date: 2020-12-10T04:23:10+08:00
description: 使用别名为你最常用或复杂的 Git 命令创建快捷方式。这篇出色的文章《改变我使用 Git 工作方式的七个技巧》启发了我写下另一个对我在命令行上使用 Git 的经验有重大影响的 Git 特性：别名。定义 Git 的别名来替代命令有两大好处。它简化了有许多选项的长命令，使它们更短，更容易记住。缩短了经常使用的命令，使你的工作更有效率。如何定义和使用别名要定义 Git 的别名，请使用 git config 命令，加上别名和要替换的命令。例如，要为 git push 创建别名 p：$ git config --global alias.p 'push' 你可以通过将别名作为 git 的参数来使用别名，就像其他命令一样：$ git p 要查看所有的别名，用 git config 列出你的配置：$ git config --global -l user.name=ricardo user.email=ricardo@example.com alias.p=push 你也可以用你喜欢的 shell 来定义别名，比如 Bash 或 Zsh。不过，用 Git 定义别名有几个功能是用 shell 无法实现的。首先，它允许你在不同的 shell 中使用别名，而无需额外配置。此外，它还集成了 Git 的自动更正功能，所以当你输入错误的命令时，Git 可以建议你正确的别名。最后，Git 还会将别名保存在用户配置文件中，你可以通过复制一个文件将别名转移到其他机器上。无论使用哪种方法，定义别名都能改善你使用 Git 的整体体验。更多关于定义 Git 别名的信息，请看《Git Book》。8 个有用的 Git 别名现在你知道如何创建和使用别名了，来看看一些有用的别名。1、Git 状态Git 命令行用户经常使用 status 命令来查看已更改或未跟踪的文件。默认情况下，这个命令提供了很多行的冗长输出，你可能不想要或不需要。你可以使用一个别名来处理这两个组件。定义别名 st 来缩短命令，并使用选项 -sb 来输出一个不那么啰嗦的状态和分支信息。$ git config --global alias.st 'status -sb' 如果你在一个干净的分支上使用这个别名，你的输出就像这样：$ git st ## master 在一个带有已更改和未跟踪文件的分支上使用它，会产生这样的输出：$ git st ## master M test2 ?? test3 2、Git 单行日志创建一个别名，以单行方式显示你的提交，使输出更紧凑：$ git config --global alias.ll 'log --oneline' 使用这个别名可以提供所有提交的简短列表：$ git ll 33559c5 (HEAD -> master) Another commit 17646c1 test1 3、Git 的最近一次提交这将显示你最近一次提交的详细信息。这是扩展了《Git Book》中 别名 一章的例子：$ git config --global alias.last 'log -1 HEAD --stat' 用它来查看最后的提交：$ git last commit f3dddcbaabb928f84f45131ea5be88dcf0692783 (HEAD -> branch1) Author: ricardo <ricardo@example.com> Date: Tue Nov 3 00:19:52 2020 +0000 Commit to branch1 test2 | 1 + test3 | 0 2 files changed, 1 insertion(+) 4、Git 提交当你对 Git 仓库进行修改时，你会经常使用 git commit。使用 cm 别名使 git commit -m 命令更有效率：$ git config --global alias.cm 'commit -m' 因为 Git 别名扩展了命令，所以你可以在执行过程中提供额外的参数：$ git cm "A nice commit message" [branch1 0baa729] A nice commit message 1 file changed, 2 insertions(+) 5、Git 远程仓库git remote -v 命令列出了所有配置的远程仓库。用别名 rv 将其缩短：$ git config --global alias.rv 'remote -v' 6、Git 差异git diff 命令可以显示不同提交的文件之间的差异，或者提交和工作树之间的差异。用 d 别名来简化它：$ git config --global alias.d 'diff' 标准的 git diff 命令对…

5 个好用的开发者 Vim 插件
type: item
date: 2019-02-23T19:11:55+08:00
description: 通过这 5 个插件扩展 Vim 功能来提升你的编码效率。我用 Vim 已经超过 20 年了，两年前我决定把它作为我的首要文本编辑器。我用 Vim 来编写代码、配置文件、博客文章及其它任意可以用纯文本表达的东西。Vim 有很多超级棒的功能，一旦你适合了它，你的工作会变得非常高效。在日常编辑工作中，我更倾向于使用 Vim 稳定的原生功能，但开源社区对 Vim 开发了大量的插件，可以扩展 Vim 的功能、改进你的工作流程和提升工作效率。以下列举 5 个非常好用的可以用于编写任意编程语言的插件。1、Auto PairsAuto Pairs 插件可以帮助你插入和删除成对的文字，如花括号、圆括号或引号。这在编写代码时非常有用，因为很多编程语言都有成对标记的语法，就像圆括号用于函数调用，或引号用于字符串定义。Auto Pairs 最基本的功能是在你输入一个左括号时会自动补全对应的另一半括号。比如，你输入了一个 [，它会自动帮你补充另一半 ]。相反，如果你用退格键删除开头的一半括号，Auto Pairs 会删除另一半。如果你设置了自动缩进，当你按下回车键时 Auto Pairs 会在恰当的缩进位置补全另一半括号，这比你找到放置另一半的位置并选择一个正确的括号要省劲多了。例如下面这段代码：package main import "fmt" func main() { x := true items := []string{"tv", "pc", "tablet"} if x { for _, i := range items } }在 items 后面输入一个左花括号按下回车会产生下面的结果：package main import "fmt" func main() { x := true items := []string{"tv", "pc", "tablet"} if x { for _, i := range items { | (cursor here) } } }Auto Pairs 提供了大量其它选项（你可以在 GitHub 上找到），但最基本的功能已经很让人省时间了。2、NERD CommenterNERD Commenter 插件给 Vim 增加了代码注释的功能，类似在 IDE integrated development environment 中注释功能。有了这个插件，你可以一键注释单行或多行代码。NERD Commenter 可以与标准的 Vim filetype 插件配合，所以它能理解一些编程语言并使用合适的方式来注释代码。最易上手的方法是按 Leader+Space 组合键来切换注释当前行。Vim 默认的 Leader 键是 \。在 可视化模式 Visual mode 中，你可以选择多行一并注释。NERD Commenter 也可以按计数注释，所以你可以加个数量 n 来注释 n 行。还有个有用的特性 “Sexy Comment” 可以用 Leader+cs 来触发，它的块注释风格更漂亮一些。例如下面这段代码：package main import "fmt" func main() { x := true items := []string{"tv", "pc", "tablet"} if x { for _, i := range items { fmt.Println(i) } } }选择 main 函数中的所有行然后按下 Leader+cs 会出来以下注释效果：package main import "fmt" func main() { /* * x := true * items := []string{"tv", "pc", "tablet"} * * if x { * for _, i := range items { * fmt.Println(i) * } * } */ }因为这些行都是在一个块中注释的，你可以用 Leader+Space 组合键一次去掉这里所有的注释。NERD Commenter 是任何使用 Vim 写代码的开发者都必装的插件。3、VIM SurroundVim Surround 插件可以帮你“环绕”现有文本插入成对的符号（如括号或双引号）或标签（如 HTML 或 XML 标签）。它和 Auto Pairs 有点儿类似，但是用于处理已有文本，在编辑文本时更有用。比如你有以下一个句子："Vim plugins are awesome !"当你的光标处于引起来的句中任何位置时，你可以用 ds" 组合键删除句子两端的双引号。Vim plugins are awesome !你也可以用 cs"' 把双端的双引号换成单引号：'Vim plugins are awesome !'或者再用 cs…

i3 窗口管理器使 Linux 更美好
type: item
date: 2018-11-28T19:47:44+08:00
description: 通过键盘操作的 i3 平铺窗口管理器使用 Linux 桌面。Linux（和一般的开源软件）最美好的一点是自由 —— 可以在不同的替代方案中进行选择以满足我们的需求。我使用 Linux 已经很长时间了，但我从来没有对可选用的桌面环境完全满意过。直到去年，Xfce 还是我认为在功能和性能之间的平和最接近满意的一个桌面环境。然后我发现了 i3，这是一个改变了我的生活的惊人的软件。i3 是一个平铺窗口管理器。窗口管理器的目标是控制窗口系统中窗口的外观和位置。窗口管理器通常用作功能齐全的桌面环境 (如 GONME 或 Xfce ) 的一部分，但也有一些可以用作独立的应用程序。平铺式窗口管理器会自动排列窗口，以不重叠的方式占据整个屏幕。其他流行的平铺式窗口管理器还有 wmii 和 xmonad 。带有三个的 i3 屏幕截图为了获得更好的 Linux 桌面体验，以下是我使用和推荐 i3 窗口管理器的五个首要原因。1、极简艺术i3 速度很快。它既不冗杂、也不花哨。它的设计简单而高效。作为开发人员，我重视这些功能，因为我可以使用更多的功能以丰富我最喜欢的开发工具，或者使用容器或虚拟机在本地测试内容。此外， i3 是一个窗口管理器，与功能齐全的桌面环境不同，它并不规定您应该使用的应用程序。您是否想使用 Xfce 的 Thunar 作为文件管理器？GNOME 的 gedit 去编辑文本? i3 并不在乎。选择对您的工作流最有意义的工具，i3 将以相同的方式管理它们。2、屏幕实际使用面积作为平铺式窗口管理器，i3 将自动 “平铺”，以不重叠的方式定位窗口，类似于在墙上放置瓷砖。因为您不需要担心窗口定位，i3 一般会更好地利用您的屏幕空间。它还可以让您更快地找到您需要的东西。对于这种情况有很多有用的例子。例如，系统管理员可以打开多个终端来同时监视或在不同的远程系统上工作；开发人员可以使用他们最喜欢的 IDE 或编辑器和几个终端来测试他们的程序。此外，i3 具有灵活性。如果您需要为特定窗口提供更多空间，请启用全屏模式或切换到其他布局，如堆叠或选项卡式（标签式）。3、键盘式工作流程i3 广泛使用键盘快捷键来控制环境的不同方面。其中包括打开终端和其他程序、调整大小和定位窗口、更改布局，甚至退出 i3。当您开始使用 i3 时，您需要记住其中的一些快捷方式才能使用，随着时间的推移，您会使用更多的快捷方式。主要好处是，您不需要经常在键盘和鼠标之间切换。通过练习，您将提高工作流程的速度和效率。例如， 要打开新的终端，请按 <SUPER>+<ENTER>。由于窗口是自动定位的，您可以立即开始键入命令。结合一个很好的终端文本编辑器（如 Vim）和一个以面向键盘的浏览器，形成一个完全由键盘驱动的工作流程。在 i3 中，您可以为所有内容定义快捷方式。下面是一些示例：打开终端打开浏览器更改布局调整窗口大小控制音乐播放器切换工作区现在我已经习惯了这个工作形式，我已无法回到了常规的桌面环境。4、灵活i3 力求极简，使用很少的系统资源，但这并不意味着它不能变漂亮。i3 是灵活且可通过多种方式进行自定义以改善视觉体验。因为 i3 是一个窗口管理器，所以它没有提供启用自定义的工具，你需要外部工具来实现这一点。一些例子：用 feh 定义桌面的背景图片。使用合成器管理器，如 compton 以启用窗口淡入淡出和透明度等效果。用 dmenu 或 rofi 以启用可从键盘快捷方式启动的可自定义菜单。用 dunst 用于桌面通知。i3 是可完全配置的，您可以通过更新默认配置文件来控制它的各个方面。从更改所有键盘快捷键，到重新定义工作区的名称，再到修改状态栏，您都可以使 i3 以任何最适合您需要的方式运行。i3 与 rofi 菜单和 dunst 桌面通知。最后，对于更高级的用户，i3 提供了完整的进程间通信（IPC）接口，允许您使用偏好的语言来开发脚本或程序，以实现更多的自定义选项。5、工作空间在 i3 中，工作区是对窗口进行分组的一种简单方法。您可以根据您的工作流以不同的方式对它们进行分组。例如，您可以将浏览器放在一个工作区上，终端放在另一个工作区上，将电子邮件客户端放在第三个工作区上等等。您甚至可以更改 i3 的配置，以便始终将特定应用程序分配给它们自己的工作区。切换工作区既快速又简单。像 i3 中的惯例，使用键盘快捷方式执行此操作。按 <SUPER>+num 切换到工作区 num 。如果您养成了始终将应用程序组的窗口分配到同一个工作区的习惯，则可以在它们之间快速切换，这使得工作区成为非常有用的功能。此外，还可以使用工作区来控制多监视器环境，其中每个监视器都有个初始工作区。如果切换到该工作区，则切换到该监视器，而无需让手离开键盘。最后，i3 中还有另一种特殊类型的工作空间：the scratc…

在 Linux 命令行中使用 tcpdump 抓包
type: item
date: 2018-11-04T08:20:35+08:00
description: tcpdump 是一款灵活、功能强大的抓包工具，能有效地帮助排查网络故障问题。以我作为管理员的经验，在网络连接中经常遇到十分难以排查的故障问题。对于这类情况，tcpdump 便能派上用场。tcpdump 是一个命令行实用工具，允许你抓取和分析经过系统的流量数据包。它通常被用作于网络故障分析工具以及安全工具。tcpdump 是一款强大的工具，支持多种选项和过滤规则，适用场景十分广泛。由于它是命令行工具，因此适用于在远程服务器或者没有图形界面的设备中收集数据包以便于事后分析。它可以在后台启动，也可以用 cron 等定时工具创建定时任务启用它。本文中，我们将讨论 tcpdump 最常用的一些功能。1、在 Linux 中安装 tcpdumptcpdump 支持多种 Linux 发行版，所以你的系统中很有可能已经安装了它。用下面的命令检查一下是否已经安装了 tcpdump：$ which tcpdump /usr/sbin/tcpdump如果还没有安装 tcpdump，你可以用软件包管理器安装它。 例如，在 CentOS 或者 Red Hat Enterprise 系统中，用如下命令安装 tcpdump：$ sudo yum install -y tcpdumptcpdump 依赖于 libpcap，该库文件用于捕获网络数据包。如果该库文件也没有安装，系统会根据依赖关系自动安装它。现在你可以开始抓包了。2、用 tcpdump 抓包使用 tcpdump 抓包，需要管理员权限，因此下面的示例中绝大多数命令都是以 sudo 开头。首先，先用 tcpdump -D 命令列出可以抓包的网络接口：$ sudo tcpdump -D 1.eth0 2.virbr0 3.eth1 4.any (Pseudo-device that captures on all interfaces) 5.lo [Loopback]如上所示，可以看到我的机器中所有可以抓包的网络接口。其中特殊接口 any 可用于抓取所有活动的网络接口的数据包。我们就用如下命令先对 any 接口进行抓包：$ sudo tcpdump -i any tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes 09:56:18.293641 IP rhel75.localdomain.ssh > 192.168.64.1.56322: Flags [P.], seq 3770820720:3770820916, ack 3503648727, win 309, options [nop,nop,TS val 76577898 ecr 510770929], length 196 09:56:18.293794 IP 192.168.64.1.56322 > rhel75.localdomain.ssh: Flags [.], ack 196, win 391, options [nop,nop,TS val 510771017 ecr 76577898], length 0 09:56:18.295058 IP rhel75.59883 > gateway.domain: 2486+ PTR? 1.64.168.192.in-addr.arpa. (43) 09:56:18.310225 IP gateway.domain > rhel75.59883: 2486 NXDomain* 0/1/0 (102) 09:56:18.312482 IP rhel75.49685 > gateway.domain: 34242+ PTR? 28.64.168.192.in-addr.arpa. (44) 09:56:18.322425 IP gateway.domain > rhel75.49685: 34242 NXDomain* 0/1/0 (103) 09:56:18.323164 IP rhel75.56631 > gateway.domain: 29904+ PTR? 1.122.168.192.in-addr.arpa. (44) 09:56:18.323342 IP rhel75.localdomain.ssh > 192.168.64.1.56322: Flags [P.], seq 196:584, ack 1, win 309, options [nop,nop,TS val 76577928 ecr 510771017], lengt…

用 zsh 提高生产力的 5 个技巧
type: item
date: 2018-09-25T23:49:44+08:00
description: zsh 提供了数之不尽的功能和特性，这里有五个可以让你在命令行效率暴增的方法。Z shell（zsh）是 Linux 和类 Unix 系统中的一个命令解析器)。 它跟 sh (Bourne shell) 家族的其它解析器（如 bash 和 ksh）有着相似的特点，但它还提供了大量的高级特性以及强大的命令行编辑功能，如增强版 Tab 补全。在这里不可能涉及到 zsh 的所有功能，描述它的特性需要好几百页。在本文中，我会列出 5 个技巧，让你通过在命令行使用 zsh 来提高你的生产力。1、主题和插件多年来，开源社区已经为 zsh 开发了数不清的主题和插件。主题是一个预定义提示符的配置，而插件则是一组常用的别名命令和函数，可以让你更方便的使用一种特定的命令或者编程语言。如果你现在想开始用 zsh 的主题和插件，那么使用一种 zsh 的配置框架是你最快的入门方式。在众多的配置框架中，最受欢迎的则是 Oh My Zsh。在默认配置中，它就已经为 zsh 启用了一些合理的配置，同时它也自带上百个主题和插件。主题会在你的命令行提示符之前添加一些有用的信息，比如你 Git 仓库的状态，或者是当前使用的 Python 虚拟环境，所以它会让你的工作更高效。只需要看到这些信息，你就不用再敲命令去重新获取它们，而且这些提示也相当酷炫。下图就是我选用的主题 Powerlevel9k：zsh 主题 Powerlevel9k除了主题，Oh my Zsh 还自带了大量常用的 zsh 插件。比如，通过启用 Git 插件，你可以用一组简便的命令别名操作 Git， 比如$ alias | grep -i git | sort -R | head -10 g=git ga='git add' gapa='git add --patch' gap='git apply' gdt='git diff-tree --no-commit-id --name-only -r' gau='git add --update' gstp='git stash pop' gbda='git branch --no-color --merged | command grep -vE "^(\*|\s*(master|develop|dev)\s*$)" | command xargs -n 1 git branch -d' gcs='git commit -S' glg='git log --stat'zsh 还有许多插件可以用于许多编程语言、打包系统和一些平时在命令行中常用的工具。以下是我 Ferdora 工作站中用到的插件表：git golang fedora docker oc sudo vi-mode virtualenvwrapper2、智能的命令别名命令别名在 zsh 中十分有用。为你常用的命令定义别名可以节省你的打字时间。Oh My Zsh 默认配置了一些常用的命令别名，包括目录导航命令别名，为常用的命令添加额外的选项，比如：ls='ls --color=tty' grep='grep --color=auto --exclude-dir={.bzr,CVS,.git,.hg,.svn}'除了命令别名以外， zsh 还自带两种额外常用的别名类型：后缀别名和全局别名。后缀别名可以让你基于文件后缀，在命令行中利用指定程序打开这个文件。比如，要用 vim 打开 YAML 文件，可以定义以下命令行别名：alias -s {yml,yaml}=vim现在，如果你在命令行中输入任何后缀名为 yml 或 yaml 文件， zsh 都会用 vim 打开这个文件。$ playbook.yml # Opens file playbook.yml using vim全局别名可以让你创建一个可在命令行的任何地方展开的别名，而不仅仅是在命令开始的时候。这个在你想替换常用文件名或者管道命令的时候就显得非常有用了。比如：alias -g G='| grep -i'要使用这个别名，只要你在想用管道命令的时候输入 G 就好了：$ ls -l G do drwxr-xr-x. 5 rgerardi rgerardi 4096 Aug 7 14:08 Documents drwxr-xr-x. 6 rgerardi rgerardi 4096 Aug 24 14:51 Downloads接着，我们就来看看 zsh 是如何导航文件系统的。3、便捷的目录导航当你使用命令行的时候，在不同的目录之间切换访问是最常见的工作了。 zsh 提供了一些十分有用的目录导航功能来简化这个操作。这些功能已经集成到 Oh My Zsh 中了， 而你可以用以下命令来启用它setopt autocd autopushd \ pushdi…

i3 窗口管理器入门
type: item
date: 2018-09-18T01:28:23+08:00
description: 本篇文章会介绍如何在 Fedora 系统中，安装、配置、使用 i3 瓦片式桌面管理器。在我的文章 i3 桌面让 Linux 更好的 5 个理由，我分享了选择 i3 桌面管理器 作为一种 Linux 桌面替代方案的最主要五个理由。在本篇文章中，我将向大家展示，如何在 Fedora 28 上安装与简单配置 i3。1、 安装首先进入 Fedora 系统中，打开一个终端。使用 dnf 来安装需要的软件包，如下：[ricardo@f28i3 ~]$ sudo dnf install -y i3 i3-ipc i3status i3lock dmenu terminator --exclude=rxvt-unicode Last metadata expiration check: 1:36:15 ago on Wed 08 Aug 2018 12:04:31 PM EDT. Dependencies resolved. ================================================================================================ Package Arch Version Repository Size ================================================================================================ Installing: dmenu x86_64 4.8-1.fc28 fedora 33 k i3 x86_64 4.15-1.fc28 fedora 323 k i3-ipc noarch 0.1.4-12.fc28 fedora 14 k i3lock x86_64 2.9.1-2.fc28 fedora 33 k i3status x86_64 2.12-1.fc28 updates 62 k terminator noarch 1.91-4.fc28 fedora 570 k Installing dependencies: dzen2 x86_64 0.8.5-21.20100104svn.fc28 fedora 60 k ... Skipping dependencies/install messages Complete! [ricardo@f28i3 ~]$注意：在这个命令中，我排除了 rxvt-unicode 这个包，因为我更喜欢 terminator 作为我的终端模拟器。据用户目前的系统状态，在命令执行过程中可能会安装很多依赖。等待所有的依赖安装完成，之后重启你的电脑。2、 首次登录与初始化在你的机器重启之后，你便可以第一次体验 i3 了。在 GNOME 显示管理器（GDM）屏幕，选择你的用户名，之后先别着急输密码，点击下方的密码输入框下方的小齿轮，之后选择 i3 而不是 GNOME，像下方这样：输入你的密码，并点击 “Sign In”。在你第一次登入之后，会先看到 i3 的配置界面：点击回车键就会在 $HOME/.config/i3 生成一个配置文件，之后你可以通过这个配置文件来定制化 i3 的一些行为。在下一屏，你需要选择你的 Mod 键。这一步很关键，因为 Mod 键通常都会作为 i3 命令快捷键的发起键。按回车会选择 Win 键作为默认的 Mod 键。如果你的键盘没有 Win 键，用 Alt 键做替代，用方向键键选择后按回车键确认。现在你就登录到了 i3 的系统中。由于 i3 是一个极简的窗口管理器，你会看到一个黑屏窗口，以及屏幕底端显示的状态栏：接下来，让我们看看 i3 的如何实际使用。3、 基本的快捷键现在你已经登录到了 i3 会话中，你需要几个基本的快捷键来应对基本的操作。大多数的 i3 快捷键都会用到之前配置的 Mod 键。在下面的例子中，当我提到 Mod 键，请根据情况使用你定义的做替换。通常使用 Win 键或者 Alt 键。首先，要打开一个终端，可以使用 Mod+ENTER。重复打开几个终端，观察 i3 是如何自动将它们在桌面中排列。默认情况下， i3 会在水平的方向分割屏幕；使用 Mod + v 来垂直分割，再按 Mod + h 会恢复水平分割模式。当需要启动其他的应用，按 Mod + d 来打开 dmenu，一个简单的文字应用菜单。默认情况下，dmenu 会呈现出所有在你 $PATH 中设置的应用。使用方向键来选择你想启动的应用，同时你可以键入应用的名称，来缩小选择的范围，之后按回车键来启动选择的应用。如果你的应用没有提供退出的方法，你可以使用 i3 来关闭对应的窗口，通过按 Mod + Shift +q。注意，你可能会丢…