蚊章汇 - 命令行
type: channel
link: https://linuxcn.bwsl.wang/tag/%E5%91%BD%E4%BB%A4%E8%A1%8C/
items: 如何在命令行上舒适地生存？
items: 将你的 Python 脚本转换为命令行程序
items: 你应该知道的 22 个基本的 Linux 网络命令
items: 在 Linux 中如何使用命令行管理文件
items: 分享 8 篇使用 Linux 命令行的技巧
items: 我们最喜欢的好玩的 Linux 命令
items: 如何用 JavaScript 构建命令行应用
items: 使用 commons-cli 解析 Java 中的命令行选项
items: 一些命令行小技巧：wc、sort、sed 和 tr
items: 5 个用命令行操作 LibreOffice 的技巧

如何在命令行上舒适地生存？
type: item
date: 2023-08-12T18:18:28+08:00
description: 有时我与一些害怕使用命令行的朋友交谈，我感到自己给不出好的建议（我已经使用命令行太长时间了），因此我向一些 Mastodon 上的人提出了以下问题：如果在过去一到三年内，你刚刚不再害怕使用命令行了，是什么帮助了你？（如果你不记得，或者你已经使用命令行舒适地工作了 15 年，则无需回答——这个问题不适用于你 ?）这个列表还不如我希望的那么长，但我希望通过发布它来收集更多的答案。显然，并没有一个单一的方法适用于所有人，不同的人会选择不同的路径。我认为舒适使用命令行有三个方面：减少风险、动机和资源。我将先谈谈减少风险，然后是一些动机，并列出一些资源。减少风险的方式很多人（没错！）对在命令行上意外执行了一些无法撤销的破坏性操作感到担心。以下是一些人们提到的帮助他们减少风险的策略：定期备份（有人提到他们在上周的一个命令行错误中意外删除了整个家目录，但很幸运他们有备份）。对于代码，尽可能多地使用 git。将 rm 设置为类似 safe-rm 或 rmtrash 这样的工具的别名，这样你就不会意外删除不应删除的内容（或者就设置别名到 rm -i）。尽量避免使用通配符，使用制表符键补全代替（我的 Shell 会使用 TAB 键补全 rm *.txt 并显示我将要删除的内容）。使用精美的终端提示符，可以显示当前目录、计算机名称、git 分支和你是否具有 root 权限。如果你计划对文件运行未经测试或危险的命令，先备份文件副本。拥有一台专用的测试机器（如便宜的旧 Linux 计算机或树莓派）进行特别危险的测试，例如测试备份软件或分区。对于危险命令，如果有的话，使用 --dry-run 选项来查看执行结果而不实际执行操作。在你的 Shell 脚本中构建自己的 --dry-run 选项。这些策略有助于降低在命令行上引发不可逆操作的风险。杀手级应用程序一些人提到了一个“杀手级命令行应用程序”，这激励他们开始花更多时间在命令行上。例如：ripgrepjqwget / curlgit（一些人发现他们更喜欢使用 git 命令行界面而不是使用图形界面）ffmpeg（用于视频处理）yt-dlp硬盘数据恢复工具（来自 这个精彩的故事）还有一些人提到他们对图形界面工具感到失望（例如使用了所有内存，并使计算机崩溃的重型集成开发环境），并因此有动机用更轻量级的命令行工具替代它们。激发人们的命令行技巧有人提到被其他人在命令行上展示的酷炫功能所激励，例如：命令行工具可以比你的 Hadoop 集群快 235 倍Gary Bernhardt 的这个“命令行链锯”演讲explainshell有几个人提到了 explainshell，它可以让你粘贴任何命令行指令，并将其分解成不同的部分解释。命令历史、制表符补全等等有很多小技巧和窍门可以使在命令行上工作更容易，例如：使用向上箭头查看先前的命令使用 Ctrl+R 搜索你的 Bash 历史记录使用快捷键在行内导航：Ctrl+w （删除一个单词）、Ctrl+a（跳转到行首）、Ctrl+e（跳转到行尾），以及 Ctrl+left arrow / Ctrl+right arrow（向前/向后跳转一个单词）将 Bash 历史记录设置为无限制使用 cd - 返回上一个目录文件名和命令名的制表符自动补全学习如何使用像 less 这样的分页工具阅读手册页或其他大型文本文件（如搜索、滚动等）在 macOS 上使用 pbcopy/pbpaste 将剪贴板内容复制/粘贴到 stdout/stdin在编辑配置文件之前备份它们fzf很多人提到使用 fzf 作为模糊搜索 Shell 历史记录的更好方法。除了作为更好的模糊搜索 Shell 历史记录的工具，人们还提到了一些其他用途：选择 git 分支（git checkout $(git for-each-ref --format='%(refname:short)' refs/heads/ | fzf)）快速查找要编辑的文件（nvim $(fzf)）切换 Kubernetes 上下文（kubectl config use-context $(kubectl config get-contexts -o name | fzf --height=10 --prompt="Kubernetes Context> ")）从测试套件中选择要运行的特定测试一般的模式是使用 fzf 来选择某个对象（文件、git 分支、命令行参数），fzf 将所选对象输出到标准输出，然后将其插入作为另一个命令的命令行参数。你还可以将 fzf 用作工具，自动预览输出并快速迭代，例如：自动预览 jq 的输出（echo '' | fzf --preview "jq {q} < YOURFILE.json"）自动预览 sed 的输出（echo '' |…

将你的 Python 脚本转换为命令行程序
type: item
date: 2022-09-23T17:34:00+08:00
description: 使用 Python 中的 scaffold 和 click 库，你可以将一个简单的实用程序升级为一个成熟的命令行界面工具。在我的职业生涯中，我写过、用过和看到过很多随意的脚本。一些人需要半自动化完成任务，于是它们诞生了。一段时间后，它们变得越来越大。它们在一生中可能转手很多次。我常常希望这些脚本提供更多的命令行工具式的感觉。但是，从一次性脚本到合适的工具，真正提高质量水平有多难呢？事实证明这在 Python 中并不难。搭建骨架脚本在本文中，我将从一小段 Python 代码开始。我将把它应用到 scaffold 模块中，并使用 click 库扩展它以接受命令行参数。#!/usr/bin/python from glob import glob from os.path import join, basename from shutil import move from datetime import datetime from os import link, unlink LATEST = 'latest.txt' ARCHIVE = '/Users/mark/archive' INCOMING = '/Users/mark/incoming' TPATTERN = '%Y-%m-%d' def transmogrify_filename(fname): bname = basename(fname) ts = datetime.now().strftime(TPATTERN) return '-'.join([ts, bname]) def set_current_latest(file): latest = join(ARCHIVE, LATEST) try: unlink(latest) except: pass link(file, latest) def rotate_file(source): target = join(ARCHIVE, transmogrify_filename(source)) move(source, target) set_current_latest(target) def rotoscope(): file_no = 0 folder = join(INCOMING, '*.txt') print(f'Looking in {INCOMING}') for file in glob(folder): rotate_file(file) print(f'Rotated: {file}') file_no = file_no + 1 print(f'Total files rotated: {file_no}') if __name__ == '__main__': print('This is rotoscope 0.4.1. Bleep, bloop.') rotoscope() 本文所有没有在这里插入显示的代码示例，你都可以在 https://codeberg.org/ofosos/rotoscope 中找到特定版本的代码。该仓库中的每个提交都描述了本文操作过程中一些有意义的步骤。这个片段做了几件事：检查 INCOMING 指定的路径中是否有文本文件如果存在，则使用当前时间戳创建一个新文件名，并将其移动到 ARCHIVE删除当前的 ARCHIVE/latest.txt 链接，并创建一个指向刚刚添加文件的新链接作为一个示例，它很简单，但它会让你理解这个过程。使用 Pyscaffold 创建应用程序首先，你需要安装 scaffold、click 和 tox Python 库。$ python3 -m pip install scaffold click tox 安装 scaffold 后，切换到示例的 rotoscope 项目所在的目录，然后执行以下命令：$ putup rotoscope -p rotoscope \ --force --no-skeleton -n rotoscope \ -d 'Move some files around.' -l GLWT \ -u http://codeberg.org/ofosos/rotoscope \ --save-config --pre-commit --markdown Pyscaffold 会重写我的 README.md，所以从 Git 恢复它：$ git checkout README.md Pyscaffold 在文档中说明了如何设置一个完整的示例项目，我不会在这里介绍，你之后可以探索。除此之外，Pyscaffold 还可以在项目中为你提供持续集成（CI）模板：打包: 你的项目现在启用了 PyPi，所以你可以将其上传到一个仓库并…

你应该知道的 22 个基本的 Linux 网络命令
type: item
date: 2022-09-09T23:17:00+08:00
description: 我们并不是每天都会谈论 Linux 的命令行。但正如一些读者指出的那样，你们也想学习一些命令行的技巧。因此，我整理了一份基本的 Linux 网络命令清单，这些命令在我的大学时代帮助了我，让我对如何在网络方面使用 Linux 有了坚定的认识。这些命令将帮助你设置网络，以及解决你在 Linux 系统中可能遇到的各种网络问题。Linux 中的基本网络命令这个汇编包括了 CLI 实用程序，它们将帮助你排除网络问题、监控数据包和连接的设备，以及更多。在我展示这些命令的一些细节之前，让我分享一下我今天要讨论的所有命令的简要概述。命令说明ip操纵路由来分配和配置网络参数traceroute识别数据包到达主机的路径tracepath在追踪网络主机的路径时，获取最大传输单元ping通常用于检查主机和服务器之间的连接情况ss获得有关网络套接字的详细信息dig给出所有关于 DNS 名称服务器的必要信息host输出特定域和主机的 IP 地址hostname主要用于输出和更改主机名curl在网络上通过各种协议传输数据mtrping 和 traceroute 的组合，用于诊断网络whois获取有关注册的域名、IP 地址、名称服务器等信息ifplugstatus检测本地以太网设备的链接状态iftop监视与带宽有关的统计信息tcpdump数据包嗅探和分析工具，用于捕获、分析和过滤网络流量ethtool允许用户配置以太网设备nmcli用于网络连接的故障排除工具nmap主要用于审计网络安全bmon开源工具，用于监控实时带宽firewalld配置防火墙规则的 CLI 工具iperf测量网络性能和调整的工具speedtest-clispeedtest.net 的 CLI 工具，用于检查网速vnstat主要用于监控网络流量和带宽消耗现在，让我们用例子和更深入的方式讨论它们。请注意，并不是所有的命令都会预装。我已经添加了针对 Debian/Ubuntu 的说明。对于其他发行版，请使用你的软件包管理器进行安装。1、ip 命令ip 命令是最基本的，但也是最重要的，你会发现系统管理员经常使用它，其用于从操纵路由到分配和配置网络参数。虽然用例可能无穷无尽，但让我向你展示 ip 命令的最基本用例（寻找 IP 地址）。ip address 同样，你也可以使用 ip 命令来持续监控设备的状态，请使用 monitor 参数而不是我们之前用来获取 IP 地址的 address 参数：ip monitor 2、traceroute使用 traceroute 命令，你可以确定数据包到达主机的路线。而且，当你想询问数据包的传输情况和数据包所走的跳数时，它可能相当有用。默认情况下，你的系统可能没有安装 traceroute，如果你使用的是 Debian 及派生的发行版（包括 Ubuntu），安装时只需使用一个命令：sudo apt install traceroute 例如，追踪到 google.com 的数据包：traceroute google.com 默认情况下，traceroute 会使用 IPv4，但是你可以通过使用 -6 选项来改变这一行为，该选项将指示 traceroute 使用 IPv6。让我告诉你怎么做：3、tracepathtracepath 命令用于发现 MTU（最大传输单元），同时追踪到网络主机的路径。它与我上面讨论的 traceroute 很相似，但它不需要 sudo 权限，而且也没有像它那么多功能。但是，首先什么是 MTU？MTU 就是可以在网络上传输或接收的最大帧或数据包。现在，让我们看一下 google.com 的 tracepath 的基本例子：tracepath google.com 同样，你可以使用 -b 选项同时打印出 IP 地址和主机名。tracepath -b google.com 4、pingping 命令（ 数据包网络飞龙探云手 Packet Internet Groper ?） 可以说是在排除网络故障时最重要的命令之一，因为它是检查主机和服务器之间连接情况的最常用方法。例如，我 ping 谷歌：ping google.com 这里，最后一行（min/avg/max）表示从指定的服务器获得响应的时间。如果你得到一个错误提示 bash: ping: command not found （LCTT 译注：不会吧？），你可以查看我们的指南 如何在 Ubuntu 上安装 Ping。5、ssss（ 套接字统计 socket statistics ）命令用于详细了解网络套接字（在网络上发送和接收数据的端点）。要列出所有监听和非监听的 TCP 连接，你必须使用 -at 选项，如下所示：ss -at 同样，你可以使用 -au 选项对 UDP 端口进行同样的操作：s…

在 Linux 中如何使用命令行管理文件
type: item
date: 2022-08-15T01:26:07+08:00
description: 如果你更喜欢用终端与系统交互，请了解一下我最喜欢的管理文件的命令。在如 GNOME 或 KDE 等图形桌面中使用鼠标点击管理文件。你点击文件的图标，将它移动到另一个文件夹中，或者移动到回收站里。图形交互使得桌面计算机便于使用。但是在 Linux 中，我们并不总是与图形界面交互。如果你在服务器上工作，那么你可能需要使用命令行来解决问题。即使像我这样使用桌面的用户，可能也更喜欢使用终端和命令行和系统交互。我倾向于通过命令行运行命令来管理我的文件：使用 ls 显示文件ls 对任何使用命令行的人来说，如果不知道有什么文件，工作将很难进行下去。ls 命令 会罗列出文件夹中的文件。例如，要查看 Web 服务器的文档根目录 /var/www/html 中的内容，你可以键入：ls /var/www/html 大多数情况，我使用 ls 命令查看当前文件夹内的文件。只需要输入 ls 即可查看所有文件。例如，当我在我的网页项目的根目录时，输入 ls 后可以看到这些：$ ls about fontawesome fonts index.php styles docs fontawesome.zip images prism ls 命令包含 60 种选项，可以以任意方式显示文件和目录。-l 是一个很有用的选项，可以详细的显示文件，包含权限、文件大小以及所有者等信息。$ ls -l total 6252 drwxrwxr-x. 2 jhall jhall 4096 Jun 22 16:18 about drwxr-xr-x. 2 jhall jhall 4096 Jun 25 16:35 docs drwxr-xr-x. 2 jhall jhall 4096 Jun 7 00:00 fontawesome -rw-r--r--. 1 jhall jhall 6365962 Jun 2 16:26 fontawesome.zip drwxrwxr-x. 2 jhall jhall 4096 Jun 22 16:17 fonts drwxr-xr-x. 2 jhall jhall 4096 Jun 25 13:03 images -rw-rw-r--. 1 jhall jhall 327 Jun 22 16:38 index.php drwxrwxr-x. 2 jhall jhall 4096 Jun 22 16:18 prism drwxrwxr-x. 2 jhall jhall 4096 Jun 22 16:17 styles 上方的文件大小是以字节为单位，或许看起来有点吃力。想要以方便我们阅读的格式查看文件大小，只需要添加 -h 或 --human-readable 选项，能以 G 、M 、K 为单位显示文件大小。$ ls -l --human-readable total 6.2M drwxrwxr-x. 2 jhall jhall 4.0K Jun 22 16:18 about drwxr-xr-x. 2 jhall jhall 4.0K Jun 25 16:35 docs drwxr-xr-x. 2 jhall jhall 4.0K Jun 7 00:00 fontawesome -rw-r--r--. 1 jhall jhall 6.1M Jun 2 16:26 fontawesome.zip drwxrwxr-x. 2 jhall jhall 4.0K Jun 22 16:17 fonts drwxr-xr-x. 2 jhall jhall 4.0K Jun 25 13:03 images -rw-rw-r--. 1 jhall jhall 327 Jun 22 16:38 index.php drwxrwxr-x. 2 jhall jhall 4.0K Jun 22 16:18 prism drwxrwxr-x. 2 jhall jhall 4.0K Jun 22 16:17 styles 现在，ls 将 zip 文件显示为 6.1M 或刚刚超过 6 MB 的文件大小，而不是 6365962。使用 cat、head 和 tail 命令查看文件cat head tail 当显示出文件后，需要检查文件夹中的内容。使用很少几个命令即可做到。以我的 Web 服务器中的 docs 文件夹为例：$ ls docs chapter1.tex chapter4.tex chapter7.tex lorem.txt chapter2.tex chapter5.tex chapter8.tex readme.txt chapter3.tex chapter6.tex chapter9.tex workbook.tex 这些文件是什么？我不知道，幸运的是该目录中…

分享 8 篇使用 Linux 命令行的技巧
type: item
date: 2022-05-10T16:48:33+08:00
description: 要好好利用无所不能的 Linux 命令行提供的所有功能Linux 命令行是极其灵活的。无论你是管理服务器还是在桌面系统上启动终端窗口，都可以通过命令行无所不包的工具包来更新文件、调整系统性能或者管理进程。命令行里发生的事情是非常有趣的。我们发布了许多关于如何充分利用系统的优秀文章，证明了命令行的流行。以下是 8 篇关于 Linux 命令阅读量最高的文章：《使用这些技巧让 Bash 命令历史更加有用》文章地址Bash 是大多数 Linux 系统上的默认命令行 Shell。Seth Kenlon 编写了该指南，用于帮助你了解 Bash 命令历史。修改 Bash 命令历史通常没有听起来那么危险，特别是当你带有目的地修改它的时候。告诉 Bash 你希望它记住什么，甚至还可以直接通过删除你不想要或不需要的条目来重写命令历史。根据需要使用你的历史会话，明智地行使你对命令历史的权力。《如何在 Linux 终端中兼顾特性和性能》文章地址Ricardo Gerardi 非常喜欢命令行应用程序，他花了很多时间在终端上工作。Ricardo 投入了一些时间，把命令行变成了一个令人愉快的工作环境。你可以通过了解如何自定义终端应用程序、主题和提示符，来创建一个功能丰富、易于使用系统资源的终端。《放弃 Bash 转投拥有更优美配置的 fish》文章地址Matt Broberg 最近放弃了默认的命令行解释器 —— Bash，转而支持 fish。fish 自豪地宣称自己是 “90 年代的命令行 shell”。这个以鱼为主题的 “友好的交互式 shell” 为命令行创造了更愉快的体验。阅读 Matt 的文章来进一步了解如何充分利用 fish。如果你不想再对你的终端修修补补，换一个更漂亮的默认 shell，把更多精力放在代码上，不妨试一试 fish。《分析 Linux 里二进制文件的 10 种方式》文章地址我们每天都在和二进制文件打交道，但我们对它们的了解甚少。Linux 提供了一组丰富的工具，使分析二进制文件变得轻而易举！这些简单的命令和工具可以帮助你顺利完成分析二进制文件的任务。无论你的工作角色是什么，了解这些工具的基本知识将帮助你更好地了解你的 Linux 系统。Gaurav Kamathe 介绍了一些最流行的用于管理二进制文件的 Linux 工具和命令，包括 file、nm、strings 和 hexdump。《可用于 Linux 命令行的 4 种 Markdown 工具》文章地址当涉及使用 Markdown 格式的文件时，命令行工具占据了主导地位。它们轻巧、快速、强大而又灵活，其中大多数遵循 Unix “把一件事情做好”的哲学。Scott Nesbitt 回顾了 4 种命令行实用工具，它们可以帮助你更高效地处理 Markdown 文件。《禁用 atime 来提高 Linux 系统性能》文章地址每当我在为家里的电脑升级 Linux 时，我都会把我通常要做的任务列出来。这些年来，它们已经成为了习惯：备份文件、还原系统、重新安装、恢复文件，然后重新安装额外的我最喜欢的应用程序。我还会对系统进行了一些调整。其中一个调整就是 atime，它是 Linux 里每个文件的三个时间戳之一。关掉 atime 是一种简单但有效的提升系统性能的方法。下面是关于 atime` 的介绍，以及为什么它会有影响。《使用 fstrim 延长固态硬盘的寿命》文章地址在过去的十年中，固态硬盘（SSD）带来了一种全新的管理存储的方式。相比传统的机械硬盘，固态硬盘具有一些优点，比如安静、更酷的操作和更快的接口规格。当然，新技术带来了新的维护和管理方法。Alan Formy-Duval 写了一个新的 systemd 服务让你更容易管理固态硬盘。《Linux 命令行工具的 5 种新式替代品》文章地址在我们日常使用的 Linux 或 Unix 系统中，我们会使用许多命令行工具来完成我们的工作，并帮助我们更好地了解和管理我们的系统。多年来，这些工具已经现代化并移植到了不同的系统中。然而，总的来讲，它们仍然保持着最初的想法、外观和感觉。近年来，开源社区已经开发出了提供额外好处的替代工具。Ricardo Gerardi 向我们展示了如何通过这 5 种新的替代品改进旧的命令行工具来获得新的好处。总结把这些文章作为跳板，寻找你自己关于命令行的技巧和花招吧！这份清单里还缺少什么吗？请在下方评论，或者提交一篇你自己的文章！via: https://opensource.com/article/21/1/linux-commands作者：Jim Hall 选题：lujun9972 译者：FYJNEVERFOLLOWS 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出

我们最喜欢的好玩的 Linux 命令
type: item
date: 2022-01-30T18:46:00+08:00
description: Linux 命令行以生产力强而闻名。它也是一个可以获得一些乐趣的地方！去年 11 月，我们分享了一篇文章《7 个好玩的 Linux 命令》，并请读者们告诉我们推荐的“好玩”的 Linux 命令是什么，以及为什么？一些读者在下面分享了他们的最爱：这是我的最爱：当然得有 cowsay！fortune，我最喜欢的 “黑科技” 是让用户连接时的 motd 成为一个幽默的格言。sl，在你的终端上的蒸汽机车。xsnow，另一个 XWindow 黑科技，这个命令可以在你的工作区降雪，并堆积在打开的窗口上。GNOME 复活节彩蛋，在 GNOME 2 中，按下 Alt+F2（打开运行对话框）并输入 free the fish，就可以在你的根窗口中释放 “Wanda the Fish”。如果你点击 Wanda，它就会四处游荡，窜来窜去（一段时间）。~Dave Neary我的一天从这些开始:fortune、cowsay、lolcat紧接着是 curl wttr.in。现在我们可以喝咖啡了 ;-）~Tomasz Waraksacmatrix ，因为每当这个时候，你就会觉得自己被插入了机器。~Gary Smithtelnet towel.blinkenlights.nl 这并不完全是 Linux 特有的，但它还挺棒的。~John 'Warthog9' HawleyXroach 是 20 世纪 90 年代你的窗口管理器的一个很酷的附加功能。当时它与 Tab Window Manager （TWM）和 F Virtual Window Manager （FVWM）一起使用时非常有趣，但我已经多年没有使用它了。当你运行 Xroach 时，它添加了小蟑螂并“住”在你的窗口下。当你移动一个窗口或关闭它时，蟑螂就会窜到另一个窗口下躲起来或跑出屏幕。这只是其中一种使桌面更有趣的小方法。看起来有一个 Xroach 的现代移植，我得找个时间试试。~Jim Hall我在 90 年代末担任过计算机科学的助教，我们的计算机实验室里有 Sun Sparc 工作站。有时学生会在实验室时间里走开而不锁屏。每隔一段时间，我就会在他们不注意的时候在终端上执行 xroach &; clear。XRoach 是个好东西。蟑螂躲在窗口下，在屏幕上窜来窜去，当你移动一个窗口时，又躲在另一个窗口下。~Ann Marie Fred我最喜欢的一个是 hollywood，在 这里 了解下。只需运行它并开始随意按键，你就会让星巴克的每个人都相信你正在摧毁美国。~Clint ByrumJim Hall 对此回应道：这真是太棒了! 这让我想起了 Hacker Typer。它是一个网站而不是一个终端程序。只要调出网站，然后敲击键盘。不管你输入什么，Hacker Typer 的输出都似乎是真正的工作。:-）为了回应 Clint Byrum（和 Jim Hall 的回应）带来的乐趣：这两个我都喜欢! 请欣赏这篇关于 Hollywood 黑科技的 博文。我最爱之一。~Greg Scott你最喜欢的“有趣的” Linux 命令是什么？请在下面的评论中分享你的。via: https://opensource.com/article/22/1/fun-linux-commands作者：Opensource.com 选题：lujun9972 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出

如何用 JavaScript 构建命令行应用
type: item
date: 2021-11-16T19:45:06+08:00
description: 为你的用户提供选项是任何应用的一个重要功能，而 Commander.js 使它变得容易做到。你最喜欢的 JavaScript 命令行构建器是什么？JavaScript 是一种为 Web 开发的语言，但它的用处已经远远超出了互联网的范畴。由于 Node.js 和 Electron 这样的项目，JavaScript 既是一种通用的脚本语言，也是一种浏览器组件。有专门设计的 JavaScript 库来构建命令行界面。是的，你可以在你的终端中运行 JavaScript。现在，当你在终端中输入一个命令时，一般都有 选项，也叫 开关 或 标志，你可以用来修改命令的运行方式。这是由 POSIX 规范 定义的一个有用的惯例，所以作为一个程序员，知道如何检测和解析这些选项是很有帮助的。要从 JavaScript 获得此功能，使用旨在简化构建命令行界面的库很有用。我最喜欢的是 Commander.js。它很简单，很灵活，而且很直观。安装 node要使用 Commander.js 库，你必须安装 Node.js。在 Linux 上，你可以用你的包管理器安装 Node。例如，在 Fedora、CentOS、Mageia 和其他系统上：$ sudo dnf install nodejs 在 Windows 和 macOS 上，你可以 从 nodejs.org 网站下载安装程序。安装 Commander.js要安装 Commander.js，请使用 npm 命令：$ npm install commander 在你的 JavaScript 代码中添加一个库在 JavaScript 中，你可以使用 require 关键字在你的代码中包含（或者导入，如果你习惯于 Python）一个库。创建一个名为 example.js 的文件，并在你喜欢的文本编辑器中打开它。在顶部添加这一行，以包括 Commander.js 库：const { program } = require('commander'); JavaScript 中的选项解析要解析选项，你必须做的第一件事是定义你的应用可以接受的有效选项。Commander.js 库可以让你定义短选项和长选项，同时还有一个有用的信息来澄清每个选项的目的。program .description('A sample application to parse options') .option('-a, --alpha', 'Alpha') .option('-b, --beta <VALUE>', 'Specify a VALUE', 'Foo'); 第一个选项，我称之为 --alpha（简写 -a），是一个布尔型开关：它要么存在，要么不存在。它不需要任何参数。第二个选项，我称之为 --beta（简写 -b），接受一个参数，甚至在你没有提供任何参数的情况下指定一个默认值。访问命令行数据当你定义了有效的选项，你就可以使用长的选项名称来引用这些值：program.parse(); const options = program.opts(); console.log('Options detected:'); if (options.alpha) console.log('alpha'); const beta = !options.beta ? 'no' : options.beta; console.log('beta is: %s', beta); 运行应用试着用 node 命令来运行它，首先不使用选项：$ node ./example.js Options detected: beta is: Foo 在用户没有覆盖的情况下，beta 的默认值被使用。再次运行它，这次使用选项：$ node ./example.js --beta hello --alpha Options detected: alpha beta is: hello 这次，测试脚本成功检测到了选项 --alpha，以及用户提供的 --beta 选项的值。选项解析下面是完整的演示代码供你参考：const { program } = require('commander'); program .description('A sample application to parse options') .option('-a, --alpha', 'Alpha') .option('-b, --beta <VALUE>', 'Specify a VALUE', 'Foo'); program.parse(); const options = program.opts(); console.log('Options detected:'); console.lo…

使用 commons-cli 解析 Java 中的命令行选项
type: item
date: 2021-08-19T19:59:15+08:00
description: 让用户用命令行选项调整你的 Java 应用程序运行方式。通常向终端中输入命令时，无论是启动 GUI 应用程序还是仅启动终端应用程序，都可以使用 命令行选项 options or switches or flags （以下简称选项）来修改应用程序的运行方式。这是 POSIX 规范 设定的标准，因此能够检测和解析选项对 Java 程序员而言是很有用的技能。Java 中有若干种解析选项的方法，其中我最喜欢用的是 Apache Commons CLI 库，简称 commons-cli。安装 commons-cli如果你使用类似 Maven 之类的项目管理系统以及 集成开发环境 Integrated Development Environment （简称 IDE），可以在项目属性（比如 pom.xml 配置文件或者 Eclipse 和 NetBeans 的配置选项卡）中安装 Apache Commons CLI 库。而如果你采用手动方式管理库，则可以从 Apache 网站下载 该库的最新版本。下载到本地的是几个捆绑在一起的 JAR 文件，你只需要其中的一个文件 commons-cli-X.Y.jar（其中 X 和 Y 代指最新版本号）。把这个 JAR 文件或手动或使用 IDE 添加到项目，就可以在代码中使用了。将库导入至 Java 代码在使用 commons-cli 库之前，必须首先导入它。对于本次选项解析的简单示例而言，可以先在 Main.java 文件中简单写入以下标准代码：package com.opensource.myoptparser; import org.apache.commons.cli.*; public class Main { public static void main(String[] args) { // code } } 至此在 Java 中解析选项的准备工作已经做好了。在 Java 中定义布尔选项要实现解析选项，首先要定义应用程序可接收的有效选项。使用 Option（注意是单数）类来创建选项对象，使用 Options（注意是复数）类来追踪项目中创建的所有选项。首先为选项创建一个组，按照惯例命名为 options： //code Options options = new Options(); 接下来，通过列出短选项（即选项名简写）、长选项（即全写）、默认布尔值（LCTT 译注：设置是否需要选项参数，指定为 false 时此选项不带参，即为布尔选项）和帮助信息来定义选项，然后设置该选项是否为必需项（LCTT 译注：下方创建 alpha 对象的代码中未手动设置此项），最后将该选项添加到包含所有选项的 options 组对象中。在下面几行代码中，我只创建了一个选项，命名为 alpha： //define options Option alpha = new Option("a", "alpha", false, "Activate feature alpha"); options.addOption(alpha); 在 Java 中定义带参选项有时用户需要通过选项提供 true 或 false 以外的信息，比如给出配置文件、输入文件或诸如日期、颜色这样的设置项值。这种情况可以使用 builder 方法，根据选项名简写为其创建属性（例如，-c 是短选项，--config 是长选项）。完成定义后，再将定义好的选项添加到 options 组中： Option config = Option.builder("c").longOpt("config") .argName("config") .hasArg() .required(true) .desc("set config file").build(); options.addOption(config); builder 函数可以用来设置短选项、长选项、是否为必需项（本段代码中必需项设置为 true，也就意味着用户启动程序时必须提供此选项，否则应用程序无法运行）、帮助信息等。使用 Java 解析选项定义并添加所有可能用到的选项后，需要对用户提供的参数进行迭代处理，检测是否有参数同预设的有效短选项列表中的内容相匹配。为此要创建命令行 CommandLine 本身的一个实例，其中包含用户提供的所有参数（包含有效选项和无效选项）。为了处理这些参数，还要创建一个 CommandLineParser 对象，我在代码中将其命名为 parser。最后，还可以创建一个 HelpFormatter 对象（我将其命名为 helper），当参数中缺少某些必需项或者用户使用 --help 或 -h 选项时，此对象可以自动向用户提供一些有用的信息。 // define parser …

一些命令行小技巧：wc、sort、sed 和 tr
type: item
date: 2021-08-10T16:57:26+08:00
description: Linux 发行版十分好用，而且它们有一些用户可能不知道的技巧。让我们来看看一些命令行实用工具，当你热衷于终端而不是 GUI 时，它们可能更顺手。我们都知道在一个系统上使用终端会更高效。当你编辑和排版一个文本文件时，终端会让你确切的感受到，生活如此简单。本文将向你介绍 wc、sort、tr 和 sed 命令。wcwc 是一个实用工具，全称是 “word count”。顾名思义，它可以用来统计任何文件的行数、单词数和字节数。让我们来看看它是如何工作的：$ wc filename lines words characters filename 输出的是文件的行数、单词数、字符数和文件名。想获得特定的输出，我们必须使用选项：-c 打印字节总数-l 打印行数-w 打印单词总数-m 打印字符总数wc 示例让我们来看看它的运行结果。让我们从一个文本文件 lormipsm.txt 开始。首先，我们通过 cat 查看文件内容，然后使用 wc：$ cat loremipsm.txt Linux is the best-known and most-used open source operating system. As an operating system, Linux is software that sits underneath all of the other software on a computer, receiving requests from those programs and replaying these requests to the computer's hardware. $ wc loremipsm.txt 3 41 268 loremipsm.txt 假设我只想查看文件的字节数：$ wc -c loremipsm.txt 268 loremipsm.txt 查看文件的行数：$ wc -l loremipsm.txt 3 loremipsm.txt 查看文件的单词数：$ wc -w loremipsm.txt 41 loremipsm.txt 现在只查看文件的字符数：$ wc -m loremipsm.txt 268 loremipsm.txt sortsort 命令是最有用的工具之一。它会对文件的数据进行排序。可以根据字符或数字进行升序或降序排列。它也可以用来对文件中的行进行排序和随机化。使用 sort 非常简单。我们需要做的仅仅是提供一个文件名：$ sort filename 默认的是按照字母顺序对数据进行排序。需要注意的是 sort 命令仅仅是对数据进行排序展示。它并不会改写文件。使用 sort 命令的一些有用的选项：-r 将文件中的行按倒序进行排序-R 将文件中的行打乱为随机顺序-o 将输出保存到另一个文件中-k 按照特定列进行排序-t 使用指定的分隔符，而不使用空格-n 根据数值对数据进行排序sort 示例让我们看看 sort 的几个简单示例。我们有一个 list.txt 的文件，包含逗号分隔的名称和数值。首先让我们打印出文件内容并简单排序：$ cat list.txt Cieran Wilks, 9 Adelina Rowland, 4 Hayden Mcfarlnd, 1 Ananya Lamb, 5 Shyam Head, 2 Lauryn Fuents, 8 Kristian Felix, 10 Ruden Dyer, 3 Greyson Meyers, 6 Luther Cooke, 7 $ sort list.txt Adelina Rowland, 4 Ananya Lamb, 5 Cieran Wilks, 9 Greyson Meyers, 6 Hayden Mcfarlnd, 1 Kristian Felix, 10 Lauryn Fuents, 8 Luther Cooke, 7 Ruden Dyer, 3 Shyam Head, 2 现在对数据进行倒序排序：$ sort -r list.txt Shyam Head, 2 Ruden Dyer, 3 Luther Cooke, 7 Lauryn Fuents, 8 Kristian Felix, 10 Hayden Mcfarlnd, 1 Greyson Meyers, 6 Cieran Wilks, 9 Ananya Lamb, 5 Adelina Rowland, 4 让我们打乱数据：$ sort -R list.txt Cieran Wilks, 9 Greyson Meyers, 6 Adelina Rowland, 4 Kristian Felix, 10 Luther Cooke, 7 Ruden Dyer, 3…

5 个用命令行操作 LibreOffice 的技巧
type: item
date: 2021-03-20T19:02:11+08:00
description: 直接在命令行中对文件进行转换、打印、保护等操作。LibreOffice 拥有所有你想要的办公软件套件的生产力功能，使其成为微软 Office 或谷歌套件的流行的开源替代品。LibreOffice 的能力之一是可以从命令行操作。例如，Seth Kenlon 最近解释了如何使用 LibreOffice 用全局 命令行选项将多个文件 从 DOCX 转换为 EPUB。他的文章启发我分享一些其他 LibreOffice 命令行技巧和窍门。在查看 LibreOffice 命令的一些隐藏功能之前，你需要了解如何使用应用选项。并不是所有的应用都接受选项（除了像 --help 选项这样的基本选项，它在大多数 Linux 应用中都可以使用）。$ libreoffice --help 这将返回 LibreOffice 接受的其他选项的描述。有些应用没有太多选项，但 LibreOffice 好几页有用的选项，所以有很多东西可以玩。就是说，你可以在终端上使用 LibreOffice 进行以下五项有用的操作，来让使软件更加有用。1、自定义你的启动选项你可以修改你启动 LibreOffice 的方式。例如，如果你想只打开 LibreOffice 的文字处理器组件：$ libreoffice --writer # 启动文字处理器 你可以类似地打开它的其他组件：$ libreoffice --calc # 启动一个空的电子表格 $ libreoffice --draw # 启动一个空的绘图文档 $ libreoffice --web # 启动一个空的 HTML 文档 你也可以从命令行访问特定的帮助文件：$ libreoffice --helpwriter 或者如果你需要电子表格应用方面的帮助：$ libreoffice --helpcalc 你可以在不显示启动屏幕的情况下启动 LibreOffice：$ libreoffice --writer --nologo 你甚至可以在你完成当前窗口的工作时，让它在后台最小化启动：$ libreoffice --writer --minimized 2、以只读模式打开一个文件你可以使用 --view 以只读模式打开文件，以防止意外地对重要文件进行修改和保存：$ libreoffice --view example.odt 3、打开一个模板文档你是否曾经创建过用作信头或发票表格的文档？LibreOffice 具有丰富的内置模板系统，但是你可以使用 -n 选项将任何文档作为模板：$ libreoffice --writer -n example.odt 你的文档将在 LibreOffice 中打开，你可以对其进行修改，但保存时不会覆盖原始文件。4、转换文档当你需要做一个小任务，比如将一个文件转换为新的格式时，应用启动的时间可能与完成任务的时间一样长。解决办法是 --headless 选项，它可以在不启动图形用户界面的情况下执行 LibreOffice 进程。例如，在 LibreOffic 中，将一个文档转换为 EPUB 是一个非常简单的任务，但使用 libreoffice 命令就更容易：$ libreoffice --headless --convert-to epub example.odt 使用通配符意味着你可以一次转换几十个文档：$ libreoffice --headless --convert-to epub *.odt 你可以将文件转换为多种格式，包括 PDF、HTML、DOC、DOCX、EPUB、纯文本等。5、从终端打印你可以从命令行打印 LibreOffice 文档，而无需打开应用：$ libreoffice --headless -p example.odt 这个选项不需要打开 LibreOffice 就可以使用默认打印机打印，它只是将文档发送到你的打印机。要打印一个目录中的所有文件：$ libreoffice -p *.odt （我不止一次执行了这个命令，然后用完了纸，所以在你开始之前，确保你的打印机里有足够的纸张。）你也可以把文件输出成 PDF。通常这和使用 --convert-to-pdf 选项没有什么区别，但是很容易记住：$ libreoffice --print-to-file example.odt --headless 额外技巧：Flatpak 和命令选项如果你是使用 Flatpak 安装的 LibreOffice，所有这些命令选项都可以使用，但你必须通过 Flatpak 传递。下面是一个例子：$ flatpak run org.libreoffice.LibreOffice --writer 它比本地安装要麻烦得多，所以你可能会受到启发 写一个 Bash 别名 来使它更容易直接与 Libre…