标签 命令行 下的文章

有时我与一些害怕使用命令行的朋友交谈,我感到自己给不出好的建议(我已经使用命令行太长时间了),因此我向一些 Mastodon 上的人提出了以下问题:

如果在过去一到三年内,你刚刚不再害怕使用命令行了,是什么帮助了你?

(如果你不记得,或者你已经使用命令行舒适地工作了 15 年,则无需回答——这个问题不适用于你 ?)

这个列表还不如我希望的那么长,但我希望通过发布它来收集更多的答案。显然,并没有一个单一的方法适用于所有人,不同的人会选择不同的路径。

我认为舒适使用命令行有三个方面:减少风险动机资源。我将先谈谈减少风险,然后是一些动机,并列出一些资源。

减少风险的方式

很多人(没错!)对在命令行上意外执行了一些无法撤销的破坏性操作感到担心。

以下是一些人们提到的帮助他们减少风险的策略:

  • 定期备份(有人提到他们在上周的一个命令行错误中意外删除了整个家目录,但很幸运他们有备份)。
  • 对于代码,尽可能多地使用 git
  • rm 设置为类似 safe-rmrmtrash 这样的工具的别名,这样你就不会意外删除不应删除的内容(或者就设置别名到 rm -i)。
  • 尽量避免使用通配符,使用制表符键补全代替(我的 Shell 会使用 TAB 键补全 rm *.txt 并显示我将要删除的内容)。
  • 使用精美的终端提示符,可以显示当前目录、计算机名称、git 分支和你是否具有 root 权限。
  • 如果你计划对文件运行未经测试或危险的命令,先备份文件副本。
  • 拥有一台专用的测试机器(如便宜的旧 Linux 计算机或树莓派)进行特别危险的测试,例如测试备份软件或分区。
  • 对于危险命令,如果有的话,使用 --dry-run 选项来查看执行结果而不实际执行操作。
  • 在你的 Shell 脚本中构建自己的 --dry-run 选项。

这些策略有助于降低在命令行上引发不可逆操作的风险。

杀手级应用程序

一些人提到了一个“杀手级命令行应用程序”,这激励他们开始花更多时间在命令行上。例如:

  • ripgrep
  • jq
  • wget / curl
  • git(一些人发现他们更喜欢使用 git 命令行界面而不是使用图形界面)
  • ffmpeg(用于视频处理)
  • yt-dlp
  • 硬盘数据恢复工具(来自 这个精彩的故事

还有一些人提到他们对图形界面工具感到失望(例如使用了所有内存,并使计算机崩溃的重型集成开发环境),并因此有动机用更轻量级的命令行工具替代它们。

激发人们的命令行技巧

有人提到被其他人在命令行上展示的酷炫功能所激励,例如:

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 '' | fzf --preview "sed {q} YOURFILE"
  • 自动预览 awk 的输出(echo '' | fzf --preview "awk {q} YOURFILE"

你可以参考这个思路。

通常,人们会为 fzf 的使用定义别名,比如输入 gcb 或其他命令,以快速选择要检出的 git 分支。

树莓派

一些人开始使用树莓派,这样可以更安全地进行实验,而不必担心损坏计算机(只需擦除 SD 卡然后重新开始即可!)。

漂亮的 Shell 环境

很多人说,当他们开始使用像 oh-my-zshFish 这样更用户友好的 Shell 环境时,他们在命令行上感到更舒适。我非常同意这一点 – 我已经使用 Fish 十年了,我非常喜欢它。

在这里还有一些其他的事情可以做:

  • 有些人说,让他们的终端更漂亮可以帮助他们感到更舒适(“让它变成粉色!”)。
  • 设置一个漂亮的 Shell 提示符来提供更多信息(例如,当命令失败时,可以将提示符设置为红色)。特别是 transient prompts(在当前命令设置一个非常花哨的提示符,但在之前的命令中设置一个简单得多的提示符)看起来非常好。

一些用于美化终端的工具:

  • 我使用 base16-shell
  • powerlevel10k 是一个流行的漂亮的 Zsh 主题,具有 transient prompts
  • starship 是一个漂亮的提示符工具
  • 在 Mac 上,我认为 iTerm2 比默认的终端更容易自定义。

漂亮的文件管理器

一些人提到了像 rangernnn 这样的漂亮的终端文件管理器,这是我之前没有听说过的。

一个有帮助的朋友或同事

一个可以回答初学者问题并给你指点的人是无价的。

通过肩并肩地观察学习

有人提到观察更有经验的人使用终端 - 有很多经验丰富的用户甚至没有意识到自己在做什么,你可以从中学到很多小技巧。

别名

很多人说,为常用任务创建自己的别名或脚本就像是一个神奇的“灵光一现”时刻,因为:

  • 他们不必记住语法
  • 然后他们就有了一份自己常用命令的列表,可以轻松调用

查找示例的备忘单

很多手册页没有示例,例如 openssl s\_client 的手册页就没有示例。这使得起步变得更加困难!

人们提到了一些备忘单工具,比如:

  • tldr.sh
  • cheat(还可以进行编辑 - 你可以添加自己的命令以供以后参考)
  • um(一个非常精简的需要自己构建的系统)

例如,openssl 的备忘单 非常棒 - 我认为它几乎包含了我在实际中使用 openssl 时用过的所有内容(除了 openssl s_client-servername 选项)。

有人说他们配置了他们的 .bash_profile,这样每次登录时都会打印出一张备忘单。

不要试图背诵

一些人说他们需要改变自己的方法 - 他们意识到不需要试图记住所有的命令,只需按需查找命令,随着时间的推移,他们会自然而然地记住最常用的命令。

(我最近对学习阅读 x86 汇编有了完全相同的体会 - 我正在上一门课程,讲师说“是的,刚开始时可以每次都查找,最终你会记住最常见的指令。”)

还有一些人说相反的观点 - 他们使用间隔重复应用程序(如 Anki)来记忆常用的命令。

Vim

有人提到他们开始在命令行上使用 Vim 编辑文件,一旦他们开始使用终端文本编辑器,使用命令行处理其他事情也变得更自然。

此外,显然有一个名为 micro 的新编辑器,像是更好的 pico/nano,适用于那些不想学习 Emacs 或 Vim 的人。

桌面上使用 Linux

有人说他们开始使用 Linux 作为他们的日常主力系统,而需要修复 Linux 问题可以帮助他们学习。这也是我在大约 2004 年熟悉命令行的方式(我非常喜欢安装各种不同的 Linux 发行版,以找到我最喜欢的那个),但我猜这不是如今最受欢迎的策略。

被迫仅使用终端

有些人说他们参加了一门大学课程,教授让他们在终端上做所有事情,或者他们自己制定了一个规则,一段时间内必须在终端上完成所有工作。

工作坊

有几个人说像 Software Carpentry 这样的工作坊(面向科学家的命令行、Git 和 Python/R 编程简介)帮助他们更熟悉命令行。

你可以在这里查看 Software Carpentry 课程

书籍和文章

一些提到的材料:

文章:

书籍:

视频:

(题图:MJ/c0dc082a-a477-434b-b826-77a42c8f61c3)


via: https://jvns.ca/blog/2023/08/08/what-helps-people-get-comfortable-on-the-command-line-/

作者:Julia Evans 选题:lujun9972 译者:ChatGPT 校对:wxy

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

使用 Python 中的 scaffoldclick 库,你可以将一个简单的实用程序升级为一个成熟的命令行界面工具。

Python 吉祥物和 Linux 的吉祥物企鹅

在我的职业生涯中,我写过、用过和看到过很多随意的脚本。一些人需要半自动化完成任务,于是它们诞生了。一段时间后,它们变得越来越大。它们在一生中可能转手很多次。我常常希望这些脚本提供更多的命令行工具式的感觉。但是,从一次性脚本到合适的工具,真正提高质量水平有多难呢?事实证明这在 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 创建应用程序

首先,你需要安装 scaffoldclicktox 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,所以你可以将其上传到一个仓库并从那里安装它。
  • 文档: 你的项目现在有了一个完整的文档文件夹层次结构,它基于 Sphinx,包括一个 readthedocs.org 构建器。
  • 测试: 你的项目现在可以与 tox 一起使用,测试文件夹包含运行基于 pytest 的测试所需的所有样板文件。
  • 依赖管理: 打包和测试基础结构都需要一种管理依赖关系的方法。setup.cfg 文件解决了这个问题,它包含所有依赖项。
  • 预提交钩子: 包括 Python 源代码格式工具 black 和 Python 风格检查器 flake8。

查看测试文件夹并在项目目录中运行 tox 命令,它会立即输出一个错误:打包基础设施无法找到相关库。

现在创建一个 Git 标记(例如 v0.2),此工具会将其识别为可安装版本。在提交更改之前,浏览一下自动生成的 setup.cfg 并根据需要编辑它。对于此示例,你可以修改 LICENSE 和项目描述,将这些更改添加到 Git 的暂存区,我必须禁用预提交钩子,然后提交它们。否则,我会遇到错误,因为 Python 风格检查器 flake8 会抱怨糟糕的格式。

$ PRE_COMMIT_ALLOW_NO_CONFIG=1 git commit

如果这个脚本有一个入口点,用户可以从命令行调用,那就更好了。现在,你只能通过找 .py 文件并手动执行它来运行。幸运的是,Python 的打包基础设施有一个很好的“罐装”方式,可以轻松地进行配置更改。将以下内容添加到 setup.cfgoptions.entry_points 部分:

console_scripts =
    roto = rotoscope.rotoscope:rotoscope

这个更改会创建一个名为 roto 的 shell 命令,你可以使用它来调用 rotoscope 脚本,使用 pip 安装 rotoscope 后,可以使用 roto 命令。

就是这样,你可以从 Pyscaffold 免费获得所有打包、测试和文档设置。你还获得了一个预提交钩子来保证(大部分情况下)你按照设定规则提交。

CLI 工具化

现在,一些值会硬编码到脚本中,它们作为命令 参数 会更方便。例如,将 INCOMING 常量作为命令行参数会更好。

首先,导入 click 库,使用 Click 提供的命令装饰器对 rotoscope() 方法进行装饰,并添加一个 Click 传递给 rotoscope 函数的参数。Click 提供了一组验证器,因此要向参数添加一个路径验证器。Click 还方便地使用函数的内嵌字符串作为命令行文档的一部分。所以你最终会得到以下方法签名:

@click.command()
@click.argument('incoming', type=click.Path(exists=True))
def rotoscope(incoming):
    """
    Rotoscope 0.4 - Bleep, blooop.
    Simple sample that move files.
    """

主函数会调用 rotoscope(),它现在是一个 Click 命令,不需要传递任何参数。

选项也可以使用 环境变量 自动填充。例如,将 ARCHIVE 常量改为一个选项:

@click.option('archive', '--archive', default='/Users/mark/archive', envvar='ROTO_ARCHIVE', type=click.Path())

使用相同的路径验证器。这一次,让 Click 填充环境变量,如果环境变量没有提供任何内容,则默认为旧常量的值。

Click 可以做更多的事情,它有彩色的控制台输出、提示和子命令,可以让你构建复杂的 CLI 工具。浏览 Click 文档会发现它的更多功能。

现在添加一些测试。

测试

Click 对使用 CLI 运行器 运行端到端测试 提供了一些建议。你可以用它来实现一个完整的测试(在 示例项目 中,测试在 tests 文件夹中。)

测试位于测试类的一个方法中。大多数约定与我在其他 Python 项目中使用的非常接近,但有一些细节,因为 rotoscope 使用 click。在 test 方法中,我创建了一个 CliRunner。测试使用它在一个隔离的文件系统中运行此命令。然后测试在隔离的文件系统中创建 incomingarchive 目录和一个虚拟的 incoming/test.txt 文件,然后它调用 CliRunner,就像你调用命令行应用程序一样。运行完成后,测试会检查隔离的文件系统,并验证 incoming 为空,并且 archive 包含两个文件(最新链接和存档文件)。

from os import listdir, mkdir
from click.testing import CliRunner
from rotoscope.rotoscope import rotoscope

class TestRotoscope:
    def test_roto_good(self, tmp_path):
        runner = CliRunner()

        with runner.isolated_filesystem(temp_dir=tmp_path) as td:
            mkdir("incoming")
            mkdir("archive")
            with open("incoming/test.txt", "w") as f:
                f.write("hello")

            result = runner.invoke(rotoscope, ["incoming", "--archive", "archive"])
            assert result.exit_code == 0

            print(td)
            incoming_f = listdir("incoming")
            archive_f = listdir("archive")
            assert len(incoming_f) == 0
            assert len(archive_f) == 2

要在控制台上执行这些测试,在项目的根目录中运行 tox

在执行测试期间,我在代码中发现了一个错误。当我进行 Click 转换时,rotoscope 只是取消了最新文件的链接,无论它是否存在。测试从一个新的文件系统(不是我的主文件夹)开始,很快就失败了。我可以通过在一个很好的隔离和自动化测试环境中运行来防止这种错误。这将避免很多“它在我的机器上正常工作”的问题。

搭建骨架脚本和模块

本文到此结束,我们可以使用 scaffoldclick 完成一些高级操作。有很多方法可以升级一个普通的 Python 脚本,甚至可以将你的简单实用程序变成成熟的 CLI 工具。


via: https://opensource.com/article/22/7/bootstrap-python-command-line-application

作者:Mark Meyer 选题:lkxed 译者:MjSeven 校对:wxy

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

我们并不是每天都会谈论 Linux 的命令行。但正如一些读者指出的那样,你们也想学习一些命令行的技巧。

因此,我整理了一份基本的 Linux 网络命令清单,这些命令在我的大学时代帮助了我,让我对如何在网络方面使用 Linux 有了坚定的认识。

这些命令将帮助你设置网络,以及解决你在 Linux 系统中可能遇到的各种网络问题。

Linux 中的基本网络命令

这个汇编包括了 CLI 实用程序,它们将帮助你排除网络问题、监控数据包和连接的设备,以及更多。

在我展示这些命令的一些细节之前,让我分享一下我今天要讨论的所有命令的简要概述。

命令说明
ip操纵路由来分配和配置网络参数
traceroute识别数据包到达主机的路径
tracepath在追踪网络主机的路径时,获取最大传输单元
ping通常用于检查主机和服务器之间的连接情况
ss获得有关网络套接字的详细信息
dig给出所有关于 DNS 名称服务器的必要信息
host输出特定域和主机的 IP 地址
hostname主要用于输出和更改主机名
curl在网络上通过各种协议传输数据
mtrpingtraceroute 的组合,用于诊断网络
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 address

同样,你也可以使用 ip 命令来持续监控设备的状态,请使用 monitor 参数而不是我们之前用来获取 IP 地址的 address 参数:

ip monitor

ip monitor

2、traceroute

使用 traceroute 命令,你可以确定数据包到达主机的路线。而且,当你想询问数据包的传输情况和数据包所走的跳数时,它可能相当有用。

默认情况下,你的系统可能没有安装 traceroute,如果你使用的是 Debian 及派生的发行版(包括 Ubuntu),安装时只需使用一个命令:

sudo apt install traceroute

例如,追踪到 google.com 的数据包:

traceroute google.com

traceroute google.com

默认情况下,traceroute 会使用 IPv4,但是你可以通过使用 -6 选项来改变这一行为,该选项将指示 traceroute 使用 IPv6。让我告诉你怎么做:

traceroute -6 google.com

3、tracepath

tracepath 命令用于发现 MTU(最大传输单元),同时追踪到网络主机的路径。它与我上面讨论的 traceroute 很相似,但它不需要 sudo 权限,而且也没有像它那么多功能。

但是,首先什么是 MTU?

MTU 就是可以在网络上传输或接收的最大帧或数据包。

现在,让我们看一下 google.comtracepath 的基本例子:

tracepath google.com

tracepath google.com

同样,你可以使用 -b 选项同时打印出 IP 地址和主机名。

tracepath -b google.com

tracepath -b google.com

4、ping

ping 命令 数据包网络飞龙探云手 Packet Internet Groper ?) 可以说是在排除网络故障时最重要的命令之一,因为它是检查主机和服务器之间连接情况的最常用方法。

例如,我 ping 谷歌:

ping google.com

ping google.com

这里,最后一行(min/avg/max)表示从指定的服务器获得响应的时间。

如果你得到一个错误提示 bash: ping: command not found (LCTT 译注:不会吧?),你可以查看我们的指南 如何在 Ubuntu 上安装 Ping

5、ss

ss 套接字统计 socket statistics )命令用于详细了解网络套接字(在网络上发送和接收数据的端点)。

要列出所有监听和非监听的 TCP 连接,你必须使用 -at 选项,如下所示:

ss -at

ss -at

同样,你可以使用 -au 选项对 UDP 端口进行同样的操作:

ss -au

ss -au

6、dig

dig 命令 域信息龙爪手 Domain Information Groper ?)用于获取有关域名的所有必要信息。

要在基于 Ubuntu 的发行版上安装 dig 工具,请按照给出的命令进行:

sudo apt install dnsutils

现在,让我告诉你如何获取一个特定主机的信息,在这个例子中,我将获取 itsfoss.com 的信息:

dig itsfoss.com

dig itsfoss.com

7、host

host 命令主要用于获取一个特定主机的 IP 地址,或者你可以从一个特定的 IP 地址获取主机名。换句话说,它是一个 DNS 查询工具。

要找到主机的 IP,你只需要在 host 命令中附加主机名。让我告诉你怎么做:

host itsfoss.com

host itsfoss.com

同样,你可以用一个 IP 地址来获取主机名:

host 8.8.4.4

host 8.8.4.4

8、hostname

如果你已经使用了一段时间的 Linux,你一定很熟悉这个命令,因为这主要是用来 改变你的系统的主机名 和 NIS(网络信息系统)的主机名。

当不使用任何选项时,它可以得到系统当前的主机名。

hostname

hostname

从包含所需主机名的文件中改变主机名是这个工具的另一个有趣的功能:

sudo hostname -F <filename>

sudo hostname -F hostname.txt

9、curl

curl 客户端 URL Client URL )命令主要用于在网络上传输数据,支持各种协议,包括 HTTP、FTP、IMAP 和许多其他协议。

这个工具是首选的自动化工具,因为它是在没有任何人类互动的情况下工作的,也可以用于端点测试、调试和错误记录。

curl 工具没有预装,如果你在任何 Debian 及其派生发行版上,你只需要使用以下命令进行安装:

sudo apt install curl

使用 curl 命令 下载文件 非常容易,你只需在 URL 中使用 -O 选项,就可以开始了。

curl -O [URL]

curl -o url

在下载大文件时,进度条会很方便,你可以用 curl-# 选项来显示进度条。

curl -# -O

10、mtr

它是 pingtraceroute 工具的组合,主要用于网络诊断,并提供网络响应和连接的实时情况。

使用 mtr 的最简单方法是用它跟上一个主机名或 IP 地址,它将给出一个实时的 traceroute 报告。

mtr [URL/IP]

mtr google.com

如果你想让 mtr 同时显示主机名和 IP 地址,你可以把它和 -b 选项配对,如下图:

mtr -b [URL]

mtr -b

11、whois

whois 可以帮助你找到有关注册的域名、IP 地址、名称服务器等信息,因为它是 whois 目录服务的客户端。

这个工具可能没有预装在你的设备上,要在基于 Debian/Ubuntu 的发行版上安装,你可以使用给出的命令:

sudo apt install whois

一般来说,whois 命令是与给出的域名配对使用的:

whois [DomainName]

whois google.com

另外,你也可以用一个 IP 地址来代替域名,你会得到同样的细节。

12、ifplugstatus

ifplugstatus 是一个最基本的,但也是最有用的工具,足以在基本水平上排除连接问题。它用于检测本地以太网的链接状态,其工作方式与 mii-diagmii-toolethtool 类似,支持所有三个 API。

在基于 Debian/Ubuntu 的发行版上安装,你可以按照给出的命令进行:

sudo apt install ifplugd

这个工具没有任何花哨的选项,经常不需要与任何配对选项而使用:

ifplugstatus

ifplugstatus

13、iftop

iftop 接口的 top Interface TOP )经常被管理员用来监控与带宽有关的统计数据,当你遇到网络问题时,也可以作为诊断工具使用。

这个工具需要手动安装,可以通过给出的命令在运行 Debian/Ubuntu 的机器上轻松安装。

sudo apt install iftop

iftop 在没有任何选项的情况下使用时,它会显示默认接口的带宽统计。

sudo iftop

iftop

你也可以通过在设备名称后面加上 -i 选项来指定网络设备。

sudo iftop -i <DeviceName>.

在我的例子中,是 enp1s0,所以我的输出将是如下:

sudo iftop -i enp1s0

14、tcpdump

tcpdump 是一个数据包嗅探和分析工具,用于捕获、分析和过滤网络流量。它也可以作为一个安全工具使用,因为它将捕获的数据保存在可以 通过 Wireshark 访问 的 pcap 文件中。

像许多其他工具一样,tcpdump 没有预装,如果你是在Debian/Ubuntu 上,你可以按照下面的命令进行安装:

sudo apt install tcpdump

一旦你完成了安装,你可以获得当前接口的捕获数据包,如下所示:

sudo tcpdump

sudo tcpdump

那么如何将捕获的数据包保存在 pcap 文件中呢?让我告诉你怎么做:

sudo tcpdump -w Captured_Packets.cap -i < networkdevice >

sudo tcpdump -w

要访问保存的文件,你需要使用 -r 选项加上文件名。

sudo tcpdump -r Captured_Packets.pcap

sudo tcpdump -r filename

15、ethtool

顾名思义,ethtool 工具主要涉及管理以太网设备。使用这个工具,你可以调整网卡速度、自动协商特性等。

但它可能没有预装在你的机器上,可以通过利用给出的命令安装在 Debian/Ubuntu 机器上:

sudo apt install ethtool

要获取接口的详细信息,你只需在命令后面加上设备名称,如下所示:

sudo ethtool <InterfaceName>

sudo ethtool enp1s0

16、nmcli

作为一个简单而强大的网络故障排除工具,它是任何系统管理员在排除网络故障时首先使用的工具之一,也可以在脚本中使用。

你可以使用 nmcli 命令来监控设备的连接状态:

nmcli dev status

nmcli dev status

当不使用任何选项时,它将带来你系统中所有现有设备的信息:

nmcli

nmcli

17、nmap

nmap 是一个探索和审计网络安全的工具。它经常被黑客和安全爱好者使用,因为它允许你获得网络的实时信息、连接到你的网络的 IP 的详细信息、端口扫描,以及更多。

要在基于 Debian/Ubuntu 的发行版上安装 nmap 工具,请使用给出的命令:

sudo apt install nmap

让我们开始扫描主机名:

nmap itsfoss.com

nmap itsfoss.com

18、bmon

bmon 是一个开源的工具,用于监测实时带宽和调试问题,以更人性化的方式呈现统计数据。这个工具最好的部分是图形显示,甚至可以在 HTML 中得到你的输出!

安装非常简单,因为 bmon 存在于流行的 Linux 发行版的默认仓库中,这也包括 Debian/Ubuntu。

sudo apt install bmon

现在,你只需要启动 bmon,就可以用眼睛愉快地监控带宽了:

bmon

bmon

19、firewalld

管理防火墙可以说是网络安全的核心部分,这个工具允许你添加、配置和删除防火墙的规则。

但是 firewalld 需要手动安装,如果你使用的是基于 Debian/Ubuntu 的发行版,你可以利用给出的命令进行安装:

sudo apt install firewalld

例如,我将向你展示,如何为公共区域永久地打开 80 端口:

sudo firewall-cmd --permanent --zone=public --add-port=80/tcp

sudo firewall-cmd --permanent --zone=public

同样,要删除最近添加的规则,你必须使用 -remove 选项,如下所示:

sudo firewall-cmd --zone=public --remove-port=80/tcp

sudo firewall-cmd --zone=public --remove

20、iperf

iperf 是一个用 C 语言编写的开源工具,允许用户进行网络性能测量和调整。

这个工具存在于 Debian/Ubuntu 的默认资源库中,可以通过给出的命令安装:

sudo apt install iperf

要开始监控网络,用户必须通过给出的命令在服务器上启动这个客户端:

iperf -s -u

其中,-s 选项表示服务器,-u 选项为 UDP 格式。

iperf -s -u

现在,你可以通过提供首选协议的 IP 地址有效载荷连接到你的服务器(使用 -c 选项表示客户端)。在这个例子中,我选择了 UDP(使用 -u 选项),有效载荷为 100:

iperf -c 10.0.2.15 -u 100

iperf -c

21、speedtest-cli

顾名思义,这是 speedtest.net 网站的 CLI 工具。这个在 Apache 2.0 许可下发布的开源工具,当你想从 CLI 获得一个可靠的 检查网速 的来源时,会有很大帮助。

安装非常简单,如果你是在 Debian/Ubuntu 上,可以利用给出的命令轻松安装:

sudo apt install speedtest-cli

一旦你完成了安装部分,你只需要使用一行命令即可测试你的速度:

speedtest-cli

speedtest-cli

22、vnstat

vnstat 工具主要被系统管理员用来监控网络流量和带宽消耗(大部分情况下),因为这个工具可以监控你系统的网络接口的流量。

和其他网络工具一样,你可以在默认的软件库中找到 vnstat,如果你在 Debian/Ubuntu 上,可以通过给出的命令进行安装:

sudo apt install vnstat

你可以使用 vnstat 命令,不需要任何选项,它将带来你系统所有可用接口的基本统计信息:

vnstat

vnstat

对于实时监控,你可以将 vnstat 命令与 -l 选项配对。

vnstat -l

一个长长的清单,对吗?

这个汇编连冰山一角都算不上,只是分享了每个命令的目的和基本例子,因为增加更多的命令会使这个清单变得更长。

流行的但 已废弃的 Linux 命令,如 ipconfig,已被故意排除在这个列表之外。

如果你很好奇,你可以学习 如何最大限度地利用手册页,这将教会你如何使用任何实用程序的最大潜力。

如果我忘了提到任何你喜欢的东西,请在评论中告诉我。


via: https://itsfoss.com/basic-linux-networking-commands/

作者:Sagar Sharma 选题:lkxed 译者:wxy 校对:wxy

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

如果你更喜欢用终端与系统交互,请了解一下我最喜欢的管理文件的命令。

在如 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 选项,能以 GMK 为单位显示文件大小。

$ 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

这些文件是什么?我不知道,幸运的是该目录中有一个 readme.txt 文件,我猜它包含了这个项目目录中文件的描述。如果该文件不是很长,那我可以使用 cat 命令查看它:

$ cat docs/readme.txt 
This is the workbook for the C programming self-paced
video series. The main file is the workbook.tex file,
which includes the other chapters.

如果这个文件很长,则可以使用 head 命令查看文件的前几行。该命令通常显示前 10 行的内容,不过你也可以使用 -n 或者 --lines 选项来指定行数。例如,使用这两个 head 命令的选项查看 lorem.txt 文件的前三行:

$ head -n 3 docs/lorem.txt 
Lorem ipsum dolor sit amet, consectetur adipiscing
elit. Nullam at ligula eget nunc feugiat pharetra. Nullam
nec vulputate augue. Suspendisse tincidunt aliquet

$ head --lines=3 docs/lorem.txt 
Lorem ipsum dolor sit amet, consectetur adipiscing
elit. Nullam at ligula eget nunc feugiat pharetra. Nullam
nec vulputate augue. Suspendisse tincidunt aliquet

如果我想要查看文件的最后几行的内容,可以以相同方式使用 tail 命令。同样,这两个 tail 命令分别显示 lorem.txt 文件的最后三行:

$ tail -n 3 docs/lorem.txt 
egestas sodales. Vivamus tincidunt ex sed tellus tincidunt
varius. Nunc commodo volutpat risus, vitae luctus lacus
malesuada tempor. Nulla facilisi.

$ tail --lines=3 docs/lorem.txt 
egestas sodales. Vivamus tincidunt ex sed tellus tincidunt
varius. Nunc commodo volutpat risus, vitae luctus lacus
malesuada tempor. Nulla facilisi.

使用 headtail 命令在服务器中查看日志文件十分有用。我有一个小型 Web 服务器运行在家庭网络,用于在网站上线前的测试。最近我发现 Web 服务器的日志很长,我好奇它存在多久了。使用 head 命令,我只打印第一行,可以看到该日志文件是在 2020 年 12 月创建的:

$ ls -l --human-readable /var/log/httpd
total 13M
-rw-r--r--. 1 root root 13M Jun 25 16:23 access_log
-rw-r--r--. 1 root root 45K Jun  2 00:00 error_log

$ sudo head -n 1 /var/log/httpd/access_log
10.0.0.177 - - [05/Dec/2020:14:58:35 -0600] "GET / HTTP/1.1" 403 5564 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"

使用 rm 命令删除文件

rm

在包含示例文本文件的目录中,lorem.txt 文件中包含 “ 乱数假文 Lorem Ipsum ” 文本。这只是印刷行业中使用的虚拟文本,因此 lorem.txt 文件并不属于该项目。让我们用 rm 命令删除这样的文件:

$ 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

$ rm docs/lorem.txt 

$ ls docs
chapter1.tex  chapter4.tex  chapter7.tex  readme.txt
chapter2.tex  chapter5.tex  chapter8.tex  workbook.tex
chapter3.tex  chapter6.tex  chapter9.tex

由于用 rm 命令删除的文件会直接删除,而不会放入回收站,因此它很危险。安装 trash 命令比较安全,例如 trashytrash-cli 命令。这样你可以在文件永久删除前,将其放入暂存区。

$ rm docs/lorem.txt

只需很少的命令即可在命令行中管理文件。使用 ls 命令显示目录中的文件,使用 catheadtail 命令查看文件中的内容。使用 rm 或者安全的 trash 命令将不需要的文件删除。这五个命令足以帮你在 Linux 中管理文件。想要了解更多,可以使用 --help 选项来查看如何使用这些命令。例如使用 ls --help 查看 ls 命令如何使用。


via: https://opensource.com/article/22/7/manage-files-linux-command-line

作者:Jim Hall 选题:lkxed 译者:Donkey 校对:wxy

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

要好好利用无所不能的 Linux 命令行提供的所有功能

 title=

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 工具和命令,包括 filenmstringshexdump

《可用于 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 命令行以生产力强而闻名。它也是一个可以获得一些乐趣的地方!

 title=

去年 11 月,我们分享了一篇文章《7 个好玩的 Linux 命令》,并请读者们告诉我们推荐的“好玩”的 Linux 命令是什么,以及为什么?

一些读者在下面分享了他们的最爱:


这是我的最爱:

  • 当然得有 cowsay
  • fortune,我最喜欢的 “黑科技” 是让用户连接时的 motd 成为一个幽默的格言。
  • sl,在你的终端上的蒸汽机车。
  • xsnow,另一个 XWindow 黑科技,这个命令可以在你的工作区降雪,并堆积在打开的窗口上。
  • GNOME 复活节彩蛋,在 GNOME 2 中,按下 Alt+F2(打开运行对话框)并输入 free the fish,就可以在你的根窗口中释放 “Wanda the Fish”。如果你点击 Wanda,它就会四处游荡,窜来窜去(一段时间)。

~Dave Neary


我的一天从这些开始:

fortunecowsaylolcat

 title=

紧接着是 curl wttr.in

 title=

现在我们可以喝咖啡了 ;-)

~Tomasz Waraksa


cmatrix ,因为每当这个时候,你就会觉得自己被插入了机器。

~Gary Smith


telnet towel.blinkenlights.nl

这并不完全是 Linux 特有的,但它还挺棒的。

~John 'Warthog9' Hawley


Xroach 是 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 Byrum

Jim 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中国 荣誉推出