MAGESH MARUTHAMUTHU 发布的文章

你知道在 Linux 中我们使用什么工具检修和监控实时的磁盘活动吗?如果 Linux 系统性能变慢,我们会用 top 命令 来查看系统性能。它被用来检查是什么进程在服务器上占有如此高的使用率,对于大多数 Linux 系统管理员来说很常见,现实世界中被 Linux 系统管理员广泛采用。

如果在进程输出中你没有看到很大的不同,你仍然有选择查看其他东西。我会建议你在 top 输出中检查 wa 状态,因为大多数时间里服务器性能由于在硬盘上的高 I/O 读和写降低了性能。如果它很高或者波动,很可能就是它造成的。因此,我们需要检查硬盘上的 I/O 活动。

我们可以在 Linux 中使用 iotopiostat 命令监控所有的磁盘和文件系统的磁盘 I/O 统计。

什么是 iotop?

iotop 是一个类似 top 的工具,用来显示实时的磁盘活动。

iotop 监控 Linux 内核输出的 I/O 使用信息,并且显示一个系统中进程或线程的当前 I/O 使用情况。

它显示每个进程/线程读写 I/O 带宽。它同样显示当等待换入和等待 I/O 的线程/进程花费的时间的百分比。

Total DISK READTotal DISK WRITE 的值一方面表示了进程和内核线程之间的总的读写带宽,另一方面也表示内核块设备子系统的。

Actual DISK READActual DISK WRITE 的值表示在内核块设备子系统和下面硬件(HDD、SSD 等等)对应的实际磁盘 I/O 带宽。

如何在 Linux 中安装 iotop ?

我们可以轻松在包管理器的帮助下安装,因为该软件包在所有的 Linux 发行版仓库中都可以获得。

对于 Fedora 系统,使用 DNF 命令 来安装 iotop

$ sudo dnf install iotop

对于 Debian/Ubuntu 系统,使用 API-GET 命令 或者 APT 命令 来安装 iotop

$ sudo apt install iotop

对于基于 Arch Linux 的系统,使用 Pacman Command 来安装 iotop

$ sudo pacman -S iotop

对于 RHEL/CentOS 的系统,使用 YUM Command 来安装 iotop

$ sudo yum install iotop

对于使用 openSUSE Leap 的系统,使用 Zypper Command 来安装 iotop

$ sudo zypper install iotop

在 Linux 中如何使用 iotop 命令来监控磁盘 I/O 活动/统计?

iotop 命令有很多参数来检查关于磁盘 I/O 的变化:

# iotop

10

如果你想检查那个进程实际在做 I/O,那么运行 iotop 命令加上 -o 或者 --only 参数。

# iotop --only

11

细节:

  • IO:它显示每个进程的 I/O 利用率,包含磁盘和交换。
  • SWAPIN: 它只显示每个进程的交换使用率。

什么是 iostat?

iostat 被用来报告中央处理单元(CPU)的统计和设备与分区的输出/输出的统计。

iostat 命令通过观察与它们平均传输率相关的设备活跃时间来监控系统输入/输出设备负载。

iostat 命令生成的报告可以被用来改变系统配置来更好的平衡物理磁盘之间的输入/输出负载。

所有的统计都在 iostat 命令每次运行时被报告。该报告包含一个 CPU 头部,后面是一行 CPU 统计。

在多处理器系统中,CPU 统计被计算为系统层面的所有处理器的平均值。设备头行后紧跟显示每个配置的设备一行的统计。

iostat 命令生成两种类型的报告,CPU 利用率报告和设备利用率报告。

在 Linux 中怎样安装 iostat?

iostat 工具是 sysstat 包的一部分,所以我们可以轻松地在包管理器地帮助下安装,因为在所有的 Linux 发行版的仓库都是可以获得的。

对于 Fedora 系统,使用 DNF Command 来安装 sysstat

$ sudo dnf install sysstat

对于 Debian/Ubuntu 系统,使用 APT-GET Command 或者 APT Command 来安装 sysstat

$ sudo apt install sysstat

对于基于 Arch Linux 的系统,使用 Pacman Command 来安装 sysstat

$ sudo pacman -S sysstat

对于 RHEL/CentOS 系统,使用 YUM Command 来安装 sysstat

$ sudo yum install sysstat

对于 openSUSE Leap 系统,使用 Zypper Command 来安装 sysstat

$ sudo zypper install sysstat

在 Linux 中如何使用 sysstat 命令监控磁盘 I/O 活动/统计?

iostat 命令中有很多参数来检查关于 I/O 和 CPU 的变化统计信息。

不加参数运行 iostat 命令会看到完整的系统统计。

# iostat

Linux 4.19.32-1-MANJARO (daygeek-Y700)  Thursday 18 April 2019  _x86_64_    (8 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          29.45    0.02   16.47    0.12    0.00   53.94

Device             tps    kB_read/s    kB_wrtn/s    kB_dscd/s    kB_read    kB_wrtn    kB_dscd
nvme0n1           6.68       126.95       124.97         0.00   58420014   57507206          0
sda               0.18         6.77        80.24         0.00    3115036   36924764          0
loop0             0.00         0.00         0.00         0.00       2160          0          0
loop1             0.00         0.00         0.00         0.00       1093          0          0
loop2             0.00         0.00         0.00         0.00       1077          0          0

运行 iostat 命令加上 -d 参数查看所有设备的 I/O 统计。

# iostat -d

Linux 4.19.32-1-MANJARO (daygeek-Y700)  Thursday 18 April 2019  _x86_64_    (8 CPU)

Device             tps    kB_read/s    kB_wrtn/s    kB_dscd/s    kB_read    kB_wrtn    kB_dscd
nvme0n1           6.68       126.95       124.97         0.00   58420030   57509090          0
sda               0.18         6.77        80.24         0.00    3115292   36924764          0
loop0             0.00         0.00         0.00         0.00       2160          0          0
loop1             0.00         0.00         0.00         0.00       1093          0          0
loop2             0.00         0.00         0.00         0.00       1077          0          0

运行 iostat 命令加上 -p 参数查看所有的设备和分区的 I/O 统计。

# iostat -p

Linux 4.19.32-1-MANJARO (daygeek-Y700)  Thursday 18 April 2019  _x86_64_    (8 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          29.42    0.02   16.45    0.12    0.00   53.99

Device             tps    kB_read/s    kB_wrtn/s    kB_dscd/s    kB_read    kB_wrtn    kB_dscd
nvme0n1           6.68       126.94       124.96         0.00   58420062   57512278          0
nvme0n1p1         6.40       124.46       118.36         0.00   57279753   54474898          0
nvme0n1p2         0.27         2.47         6.60         0.00    1138069    3037380          0
sda               0.18         6.77        80.23         0.00    3116060   36924764          0
sda1              0.00         0.01         0.00         0.00       3224          0          0
sda2              0.18         6.76        80.23         0.00    3111508   36924764          0
loop0             0.00         0.00         0.00         0.00       2160          0          0
loop1             0.00         0.00         0.00         0.00       1093          0          0
loop2             0.00         0.00         0.00         0.00       1077          0          0

运行 iostat 命令加上 -x 参数显示所有设备的详细的 I/O 统计信息。

# iostat -x

Linux 4.19.32-1-MANJARO (daygeek-Y700)  Thursday 18 April 2019  _x86_64_    (8 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          29.41    0.02   16.45    0.12    0.00   54.00

Device            r/s     rkB/s   rrqm/s  %rrqm r_await rareq-sz     w/s     wkB/s   wrqm/s  %wrqm w_await wareq-sz     d/s     dkB/s   drqm/s  %drqm d_await dareq-sz  aqu-sz  %util
nvme0n1          2.45    126.93     0.60  19.74    0.40    51.74    4.23    124.96     5.12  54.76    3.16    29.54    0.00      0.00     0.00   0.00    0.00     0.00    0.31  30.28
sda              0.06      6.77     0.00   0.00    8.34   119.20    0.12     80.23    19.94  99.40   31.84   670.73    0.00      0.00     0.00   0.00    0.00     0.00    0.00   0.13
loop0            0.00      0.00     0.00   0.00    0.08    19.64    0.00      0.00     0.00   0.00    0.00     0.00    0.00      0.00     0.00   0.00    0.00     0.00    0.00   0.00
loop1            0.00      0.00     0.00   0.00    0.40    12.86    0.00      0.00     0.00   0.00    0.00     0.00    0.00      0.00     0.00   0.00    0.00     0.00    0.00   0.00
loop2            0.00      0.00     0.00   0.00    0.38    19.58    0.00      0.00     0.00   0.00    0.00     0.00    0.00      0.00     0.00   0.00    0.00     0.00    0.00   0.00

运行 iostat 命令加上 -d [设备名] 参数查看具体设备和它的分区的 I/O 统计信息。

# iostat -p [Device_Name]

# iostat -p sda

Linux 4.19.32-1-MANJARO (daygeek-Y700)  Thursday 18 April 2019  _x86_64_    (8 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          29.38    0.02   16.43    0.12    0.00   54.05

Device             tps    kB_read/s    kB_wrtn/s    kB_dscd/s    kB_read    kB_wrtn    kB_dscd
sda               0.18         6.77        80.21         0.00    3117468   36924764          0
sda2              0.18         6.76        80.21         0.00    3112916   36924764          0
sda1              0.00         0.01         0.00         0.00       3224          0          0

运行 iostat 命令加上 -m 参数以 MB 为单位而不是 KB 查看所有设备的统计。默认以 KB 显示输出。

# iostat -m

Linux 4.19.32-1-MANJARO (daygeek-Y700)  Thursday 18 April 2019  _x86_64_    (8 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          29.36    0.02   16.41    0.12    0.00   54.09

Device             tps    MB_read/s    MB_wrtn/s    MB_dscd/s    MB_read    MB_wrtn    MB_dscd
nvme0n1           6.68         0.12         0.12         0.00      57050      56176          0
sda               0.18         0.01         0.08         0.00       3045      36059          0
loop0             0.00         0.00         0.00         0.00          2          0          0
loop1             0.00         0.00         0.00         0.00          1          0          0
loop2             0.00         0.00         0.00         0.00          1          0          0

运行 iostat 命令使用特定的间隔使用如下的格式。在这个例子中,我们打算以 5 秒捕获的间隔捕获两个报告。

# iostat [Interval] [Number Of Reports]

# iostat 5 2

Linux 4.19.32-1-MANJARO (daygeek-Y700)  Thursday 18 April 2019  _x86_64_    (8 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          29.35    0.02   16.41    0.12    0.00   54.10

Device             tps    kB_read/s    kB_wrtn/s    kB_dscd/s    kB_read    kB_wrtn    kB_dscd
nvme0n1           6.68       126.89       124.95         0.00   58420116   57525344          0
sda               0.18         6.77        80.20         0.00    3118492   36924764          0
loop0             0.00         0.00         0.00         0.00       2160          0          0
loop1             0.00         0.00         0.00         0.00       1093          0          0
loop2             0.00         0.00         0.00         0.00       1077          0          0

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           3.71    0.00    2.51    0.05    0.00   93.73

Device             tps    kB_read/s    kB_wrtn/s    kB_dscd/s    kB_read    kB_wrtn    kB_dscd
nvme0n1          19.00         0.20       311.40         0.00          1       1557          0
sda               0.20        25.60         0.00         0.00        128          0          0
loop0             0.00         0.00         0.00         0.00          0          0          0
loop1             0.00         0.00         0.00         0.00          0          0          0
loop2             0.00         0.00         0.00         0.00          0          0          0

运行 iostat 命令与 -N 参数来查看 LVM 磁盘 I/O 统计报告。

# iostat -N

Linux 4.15.0-47-generic (Ubuntu18.2daygeek.com)     Thursday 18 April 2019  _x86_64_    (2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.38    0.07    0.18    0.26    0.00   99.12

Device             tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               3.60        57.07        69.06     968729    1172340
sdb               0.02         0.33         0.00       5680          0
sdc               0.01         0.12         0.00       2108          0
2g-2gvol1         0.00         0.07         0.00       1204          0

运行 nfsiostat 命令来查看 Network File System(NFS)的 I/O 统计。

# nfsiostat

via: https://www.2daygeek.com/check-monitor-disk-io-in-linux-using-iotop-iostat-command/

作者:Magesh Maruthamuthu 选题:lujun9972 译者:warmfrog 校对:wxy

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

你也许听说过这个词很多次或者你可能已经在使用它了。在这篇文章中我将会清晰的告诉你 NTP 服务器和客户端的安装。

之后我们将会了解 Chrony NTP 客户端的安装

什么是 NTP 服务?

NTP 意即 网络时间协议 Network Time Protocol 。它是通过网络在计算机系统之间进行时钟同步的网络协议。换言之,它可以让那些通过 NTP 或者 Chrony 客户端连接到 NTP 服务器的系统保持时间上的一致(它能保持一个精确的时间)。

NTP 在公共互联网上通常能够保持时间延迟在几十毫秒以内的精度,并在理想条件下,它能在局域网下达到低于一毫秒的延迟精度。

它使用用户数据报协议(UDP)在端口 123 上发送和接受时间戳。它是个 C/S 架构的应用程序。

NTP 客户端

NTP 客户端将其时钟与网络时间服务器同步。

Chrony 客户端

Chrony 是 NTP 客户端的替代品。它能以更精确的时间更快的同步系统时钟,并且它对于那些不总是在线的系统很有用。

为什么我们需要 NTP 服务?

为了使你组织中的所有服务器与基于时间的作业保持精确的时间同步。

为了说明这点,我将告诉你一个场景。比如说,我们有两个服务器(服务器 1 和服务器 2)。服务器 1 通常在 10:55 完成离线作业,然后服务器 2 在 11:00 需要基于服务器 1 完成的作业报告去运行其他作业。

如果两个服务器正在使用不同的时间(如果服务器 2 时间比服务器 1 提前,服务器 1 的时间就落后于服务器 2),然后我们就不能去执行这个作业。为了达到时间一致,我们应该安装 NTP。

希望上述能清除你对于 NTP 的疑惑。

在这篇文章中,我们将使用下列设置去测试。

  • NTP 服务器: 主机名:CentOS7.2daygeek.com,IP:192.168.1.8,OS:CentOS 7
  • NTP 客户端: 主机名:Ubuntu18.2daygeek.com,IP:192.168.1.5,OS:Ubuntu 18.04

NTP 服务器端:如何在 Linux 上安装 NTP?

因为它是 C/S 架构,所以 NTP 服务器端和客户端的安装包没有什么不同。在发行版的官方仓库中都有 NTP 安装包,因此可以使用发行版的包管理器安装它。

对于 Fedora 系统,使用 DNF 命令 去安装 ntp。

$ sudo dnf install ntp

对于 Debian/Ubuntu 系统,使用 APT-GET 命令 或者 APT 命令 去安装 ntp。

$ sudo apt install ntp

对基于 Arch Linux 的系统,使用 Pacman 命令 去安装 ntp。

$ sudo pacman -S ntp

对 RHEL/CentOS 系统,使用 YUM 命令 去安装 ntp。

$ sudo yum install ntp

对于 openSUSE Leap 系统,使用 Zypper 命令 去安装 ntp。

$ sudo zypper install ntp

如何在 Linux 上配置 NTP 服务器?

安装 NTP 软件包后,请确保在服务器端的 /etc/ntp.conf 文件中取消以下配置的注释。

默认情况下,NTP 服务器配置依赖于 X.distribution_name.pool.ntp.org。 如果有必要,可以使用默认配置,也可以访问https://www.ntppool.org/zone/@站点,根据你所在的位置(特定国家/地区)进行更改。

比如说如果你在印度,然后你的 NTP 服务器将是 0.in.pool.ntp.org,并且这个地址适用于大多数国家。

# vi /etc/ntp.conf

restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
restrict 127.0.0.1
restrict -6 ::1
server 0.asia.pool.ntp.org
server 1.asia.pool.ntp.org
server 2.asia.pool.ntp.org
server 3.asia.pool.ntp.org
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
driftfile /var/lib/ntp/drift
keys /etc/ntp/keys

我们仅允许 192.168.1.0/24 子网的客户端访问这个 NTP 服务器。

由于默认情况下基于 RHEL7 的发行版的防火墙是打开的,因此要允许 ntp 服务通过。

# firewall-cmd --add-service=ntp --permanent
# firewall-cmd --reload

更新配置后要重启服务:

对于 sysvinit 系统。基于 Debian 的系统需要去运行 ntp 而不是 ntpd

# service ntpd restart
# chkconfig ntpd on

对于 systemctl 系统。基于 Debian 的需要去运行 ntpntpd

# systemctl restart ntpd
# systemctl enable ntpd

NTP 客户端:如何在 Linux 上安装 NTP 客户端?

正如我在这篇文章中前面所说的。NTP 服务器端和客户端的安装包没有什么不同。因此在客户端上也安装同样的软件包。

对于 Fedora 系统,使用 DNF 命令 去安装 ntp。

$ sudo dnf install ntp

对于 Debian/Ubuntu 系统,使用 APT-GET 命令 或者 APT 命令 去安装 ntp。

$ sudo apt install ntp

对基于 Arch Linux 的系统,使用 Pacman 命令 去安装 ntp。

$ sudo pacman -S ntp

对 RHEL/CentOS 系统,使用 YUM 命令 去安装 ntp。

$ sudo yum install ntp

对于 openSUSE Leap 系统,使用 Zypper 命令 去安装 ntp。

$ sudo zypper install ntp

我已经在 CentOS7.2daygeek.com` 这台主机上安装和配置了 NTP 服务器,因此将其附加到所有的客户端机器上。

# vi /etc/ntp.conf
restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
restrict 127.0.0.1
restrict -6 ::1
server CentOS7.2daygeek.com prefer iburst
driftfile /var/lib/ntp/drift
keys /etc/ntp/keys

更新配置后重启服务:

对于 sysvinit 系统。基于 Debian 的系统需要去运行 ntp 而不是 ntpd

# service ntpd restart
# chkconfig ntpd on

对于 systemctl 系统。基于 Debian 的需要去运行 ntpntpd

# systemctl restart ntpd
# systemctl enable ntpd

重新启动 NTP 服务后等待几分钟以便从 NTP 服务器获取同步的时间。

在 Linux 上运行下列命令去验证 NTP 服务的同步状态。

# ntpq –p
或
# ntpq -pn

     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*CentOS7.2daygee 133.243.238.163  2 u   14   64   37    0.686    0.151  16.432

运行下列命令去得到 ntpd 的当前状态。

# ntpstat
synchronised to NTP server (192.168.1.8) at stratum 3
   time correct to within 508 ms
   polling server every 64 s

最后运行 date 命令。

# date
Tue Mar 26 23:17:05 CDT 2019

如果你观察到 NTP 中输出的时间偏移很大。运行下列命令从 NTP 服务器手动同步时钟。当你执行下列命令的时候,确保你的 NTP 客户端应该为未活动状态。(LCTT 译注:当时间偏差很大时,客户端的自动校正需要花费很长时间才能逐步追上,因此应该手动运行以更新)

# ntpdate –uv CentOS7.2daygeek.com

via: https://www.2daygeek.com/install-configure-ntp-server-ntp-client-in-linux/

作者:Magesh Maruthamuthu 选题:lujun9972 译者:arrowfeng 校对:wxy

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

你应该意识到你的默认网关是你的路由器的 IP 地址。一般这是在安装过程中由操作系统自动检测的,如果没有,你可能需要改变它。如果你的系统不能 ping 自身,那么很可能是一个网关问题,你必须修复它。在网络中,当你有多个网络适配器或路由器时,这种情况可能会发生。

网关是一个扮演着入口点角色的路由器,可以从一个网络传递网络数据到另一个网络。

下面是一些可能帮助你收集到与该话题相似的一些信息。

这可以通过下面的四个命令完成。

  • route 命令:被用来显示和操作 IP 路由表。
  • ip 命令:类似于 ifconfig,常用于设置静态 IP 地址、路由 & 默认网关,等等。
  • netstat 命令:是一个命令行工具,用来显示网络连接相关的信息(包括入站和出站的),例如路由表、伪装连接、多播成员和网络接口。
  • routel 命令:被用来以好看的输出格式列出路由。

1)在 Linux 中如何使用 route 命令检查默认的网关或者路由 IP 地址?

route 命令被用来显示和操作 IP 路由表。

它主要用于通过一个已经配置的接口给特定的主机或者网络设置静态的路由。

当使用 add 或者 del 选项时,route 修改路由表。没有这些选项,route 显示路由表的当前内容。

# route
或
# route -n

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         www.routerlogin 0.0.0.0         UG    600    0        0 wlp8s0
192.168.1.0     0.0.0.0         255.255.255.0   U     600    0        0 wlp8s0

2)如何在 Linux 中使用 ip 命令检查默认网关或者路由 IP 地址?

IP 命令 类似于 ifconfig,常用于配置静态 IP 地址、路由 & 默认网关,等等。

ifconfig 命令因为多年没有维护而被遗弃了,即使它仍然在大多数 Linux 发行版上可获得。

ifconfig 命令已经被 ip 命令替代了,ip 命令是非常强大的,只要一个命令就能执行几个网络管理任务。

ip 命令工具附带在 iproute2 包中。在主要的 Linux 发行版中都默认预装了 iproute2 。

如果没有,你可以在你的终端中在包管理器的帮助下通过指定 iproute2 来安装它。

# ip r
或
# ip route
或
# ip route show

default via 192.168.1.1 dev wlp8s0 proto dhcp metric 600
192.168.1.0/24 dev wlp8s0 proto kernel scope link src 192.168.1.6 metric 600

3)如何在 Linux 中使用 netstat 命令检查默认网关或者路由 IP 地址?

netstat 代表 Network Statistics,是一个用来显示网络连接相关的信息(包括入站和出站)的命令行工具,例如路由表、伪装连接,多播成员和网络接口。

它列出所有的 tcp、udp 套接字连接和 unix 套接字连接。

它在网络中被用来诊断网络问题并判断网络中的流量总量来作为性能测量指标。

# netstat -r

Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
default         www.routerlogin 0.0.0.0         UG        0 0          0 wlp8s0
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 wlp8s0

4)如何在 Linux 中使用 routel 命令检查默认网关或者路由 IP 地址?

它用来以好看的输出格式列出路由信息。这些程序是一系列你可以用来替代 iproute2 的帮助脚本(routelroutef)。

routel 脚本以一种被认为更容易解释并且等价于 route 输出列表的格式来输出路由信息。

如果 routef 脚本不加任何参数,将仅仅简单的将路由表清空。小心!这意味着删除所有的路由,让你的网络不再可用。

# routel
         target            gateway          source    proto    scope    dev tbl
        default        192.168.1.1                     dhcp          wlp8s0
   192.168.1.0/ 24                     192.168.1.6   kernel     link wlp8s0
      127.0.0.0          broadcast       127.0.0.1   kernel     link     lo local
     127.0.0.0/ 8            local       127.0.0.1   kernel     host     lo local
      127.0.0.1              local       127.0.0.1   kernel     host     lo local
127.255.255.255          broadcast       127.0.0.1   kernel     link     lo local
    192.168.1.0          broadcast     192.168.1.6   kernel     link wlp8s0 local
    192.168.1.6              local     192.168.1.6   kernel     host wlp8s0 local
  192.168.1.255          broadcast     192.168.1.6   kernel     link wlp8s0 local
            ::1                                      kernel              lo
        fe80::/ 64                                   kernel          wlp8s0
            ::1              local                   kernel              lo local
fe80::ad00:2f7e:d882:5add              local                   kernel          wlp8s0 local
        ff00::/ 8                                                    wlp8s0 local

如果你只想打印默认的网关那么使用下面的格式。

# routel | grep default
        default        192.168.1.1                     dhcp          wlp8s0

via: https://www.2daygeek.com/check-find-default-gateway-or-router-ip-address-in-linux/

作者:Magesh Maruthamuthu 选题:lujun9972 译者:warmfrog 校对:wxy

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

Linux 组是用于管理 Linux 中用户帐户的组织单位。对于 Linux 系统中的每一个用户和组,它都有惟一的数字标识号。它被称为 用户 ID(UID)和组 ID(GID)。组的主要目的是为组的成员定义一组特权。它们都可以执行特定的操作,但不能执行其他操作。

Linux 中有两种类型的默认组。每个用户应该只有一个 主要组 primary group 和任意数量的 次要组 secondary group

  • 主要组: 创建用户帐户时,已将主要组添加到用户。它通常是用户的名称。在执行诸如创建新文件(或目录)、修改文件或执行命令等任何操作时,主要组将应用于用户。用户的主要组信息存储在 /etc/passwd 文件中。
  • 次要组: 它被称为次要组。它允许用户组在同一组成员文件中执行特定操作。例如,如果你希望允许少数用户运行 Apache(httpd)服务命令,那么它将非常适合。

你可能对以下与用户管理相关的文章感兴趣。

可以使用以下四种方法实现。

  • usermod:修改系统帐户文件,以反映在命令行中指定的更改。
  • gpasswd:用于管理 /etc/group/etc/gshadow。每个组都可以有管理员、成员和密码。
  • Shell 脚本:可以让管理员自动执行所需的任务。
  • 手动方式:我们可以通过编辑 /etc/group 文件手动将用户添加到任何组中。

我假设你已经拥有此操作所需的组和用户。在本例中,我们将使用以下用户和组:user1user2user3,另外的组是 mygroupmygroup1

在进行更改之前,我希望检查一下用户和组信息。详见下文。

我可以看到下面的用户与他们自己的组关联,而不是与其他组关联。

# id user1
uid=1008(user1) gid=1008(user1) groups=1008(user1)

# id user2
uid=1009(user2) gid=1009(user2) groups=1009(user2)

# id user3
uid=1010(user3) gid=1010(user3) groups=1010(user3)

我可以看到这个组中没有关联的用户。

# getent group mygroup
mygroup:x:1012:

# getent group mygroup1
mygroup1:x:1013:

方法 1:使用 usermod 命令

usermod 命令修改系统帐户文件,以反映命令行上指定的更改。

如何使用 usermod 命令将现有的用户添加到次要组或附加组?

要将现有用户添加到辅助组,请使用带有 -G 选项和组名称的 usermod 命令。

语法:

# usermod [-G] [GroupName] [UserName]

如果系统中不存在给定的用户或组,你将收到一条错误消息。如果没有得到任何错误,那么用户已经被添加到相应的组中。

# usermod -a -G mygroup user1

让我使用 id 命令查看输出。是的,添加成功。

# id user1
uid=1008(user1) gid=1008(user1) groups=1008(user1),1012(mygroup)

如何使用 usermod 命令将现有的用户添加到多个次要组或附加组?

要将现有用户添加到多个次要组中,请使用带有 -G 选项的 usermod 命令和带有逗号分隔的组名称。

语法:

# usermod [-G] [GroupName1,GroupName2] [UserName]

在本例中,我们将把 user2 添加到 mygroupmygroup1 中。

# usermod -a -G mygroup,mygroup1 user2

让我使用 id 命令查看输出。是的,user2 已成功添加到 myGroupmyGroup1 中。

# id user2
uid=1009(user2) gid=1009(user2) groups=1009(user2),1012(mygroup),1013(mygroup1)

如何改变用户的主要组?

要更改用户的主要组,请使用带有 -g 选项和组名称的 usermod 命令。

语法:

# usermod [-g] [GroupName] [UserName]

我们必须使用 -g 改变用户的主要组。

# usermod -g mygroup user3

让我们看看输出。是的,已成功更改。现在,显示user3 主要组是 mygroup 而不是 user3

# id user3
uid=1010(user3) gid=1012(mygroup) groups=1012(mygroup)

方法 2:使用 gpasswd 命令

gpasswd 命令用于管理 /etc/group/etc/gshadow。每个组都可以有管理员、成员和密码。

如何使用 gpasswd 命令将现有用户添加到次要组或者附加组?

要将现有用户添加到次要组,请使用带有 -M 选项和组名称的 gpasswd 命令。

语法:

# gpasswd [-M] [UserName] [GroupName]

在本例中,我们将把 user1 添加到 mygroup 中。

# gpasswd -M user1 mygroup

让我使用 id 命令查看输出。是的,user1 已成功添加到 mygroup 中。

# id  user1
uid=1008(user1) gid=1008(user1) groups=1008(user1),1012(mygroup)

如何使用 gpasswd 命令添加多个用户到次要组或附加组中?

要将多个用户添加到辅助组中,请使用带有 -M 选项和组名称的 gpasswd 命令。

语法:

# gpasswd [-M] [UserName1,UserName2] [GroupName]

在本例中,我们将把 user2user3 添加到 mygroup1 中。

# gpasswd -M user2,user3 mygroup1

让我使用 getent 命令查看输出。是的,user2user3 已成功添加到 myGroup1 中。

# getent group mygroup1
mygroup1:x:1013:user2,user3

如何使用 gpasswd 命令从组中删除一个用户?

要从组中删除用户,请使用带有 -d 选项的 gpasswd 命令以及用户和组的名称。

语法:

# gpasswd [-d] [UserName] [GroupName]

在本例中,我们将从 mygroup 中删除 user1

# gpasswd -d user1 mygroup
Removing user user1 from group mygroup

方法 3:使用 Shell 脚本

基于上面的例子,我知道 usermod 命令没有能力将多个用户添加到组中,可以通过 gpasswd 命令完成。但是,它将覆盖当前与组关联的现有用户。

例如,user1 已经与 mygroup 关联。如果要使用 gpasswd 命令将 user2user3 添加到 mygroup 中,它将不会按预期生效,而是对组进行修改。

如果要将多个用户添加到多个组中,解决方案是什么?

两个命令中都没有默认选项来实现这一点。

因此,我们需要编写一个小的 shell 脚本来实现这一点。

如何使用 gpasswd 命令将多个用户添加到次要组或附加组?

如果要使用 gpasswd 命令将多个用户添加到次要组或附加组,请创建以下 shell 脚本。

创建用户列表。每个用户应该在单独的行中。

$ cat user-lists.txt
user1
user2
user3

使用以下 shell 脚本将多个用户添加到单个次要组。

vi group-update.sh

#!/bin/bash
for user in `cat user-lists.txt`
do
usermod -a -G mygroup $user
done

设置 group-update.sh 文件的可执行权限。

# chmod + group-update.sh

最后运行脚本来实现它。

# sh group-update.sh

让我看看使用 getent 命令的输出。 是的,user1user2user3 已成功添加到 mygroup 中。

# getent group mygroup
mygroup:x:1012:user1,user2,user3

如何使用 gpasswd 命令将多个用户添加到多个次要组或附加组?

如果要使用 gpasswd 命令将多个用户添加到多个次要组或附加组中,请创建以下 shell 脚本。

创建用户列表。每个用户应该在单独的行中。

$ cat user-lists.txt
user1
user2
user3

创建组列表。每组应在单独的行中。

$ cat group-lists.txt
mygroup
mygroup1

使用以下 shell 脚本将多个用户添加到多个次要组。

#!/bin/sh
for user in `more user-lists.txt`
do
for group in `more group-lists.txt`
do
usermod -a -G $group $user
done

设置 group-update-1.sh 文件的可执行权限。

# chmod +x group-update-1.sh

最后运行脚本来实现它。

# sh group-update-1.sh

让我看看使用 getent 命令的输出。 是的,user1user2user3 已成功添加到 mygroup 中。

# getent group mygroup
mygroup:x:1012:user1,user2,user3

此外,user1user2user3 已成功添加到 mygroup1 中。

# getent group mygroup1
mygroup1:x:1013:user1,user2,user3

方法 4:在 Linux 中将用户添加到组中的手动方法

我们可以通过编辑 /etc/group 文件手动将用户添加到任何组中。

打开 /etc/group 文件并搜索要更新用户的组名。最后将用户更新到相应的组中。

# vi /etc/group

via: https://www.2daygeek.com/linux-add-user-to-group-primary-secondary-group-usermod-gpasswd/

作者:Magesh Maruthamuthu 选题:lujun9972 译者:NeverKnowsTomorrow 校对:wxy

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

我们最近写了一篇文章关于如何检查远程 Linux 服务器是否打开指定端口。它能帮助你检查单个服务器。

如果要检查五个服务器有没有问题,可以使用以下任何一个命令,如 nc(netcat)、nmaptelnet。但是如果想检查 50 多台服务器,那么你的解决方案是什么?

要检查所有服务器并不容易,如果你一个一个这样做,完全没有必要,因为这样你将会浪费大量的时间。为了解决这种情况,我使用 nc 命令编写了一个 shell 小脚本,它将允许我们扫描任意数量服务器给定的端口。

如果你要查找单个服务器扫描,你有多个选择,你只需阅读 检查远程 Linux 系统上的端口是否打开? 了解更多信息。

本教程中提供了两个脚本,这两个脚本都很有用。这两个脚本都用于不同的目的,你可以通过阅读标题轻松理解其用途。

在你阅读这篇文章之前,我会问你几个问题,如果你不知道答案你可以通过阅读这篇文章来获得答案。

如何检查一个远程 Linux 服务器上指定的端口是否打开?

如何检查多个远程 Linux 服务器上指定的端口是否打开?

如何检查多个远程 Linux 服务器上是否打开了多个指定的端口?

什么是 nc(netcat)命令?

nc 即 netcat。它是一个简单实用的 Unix 程序,它使用 TCP 或 UDP 协议进行跨网络连接进行数据读取和写入。

它被设计成一个可靠的 “后端” 工具,我们可以直接使用或由其他程序和脚本轻松驱动它。

同时,它也是一个功能丰富的网络调试和探索工具,因为它可以创建你需要的几乎任何类型的连接,并具有几个有趣的内置功能。

netcat 有三个主要的模式。分别是连接模式,监听模式和隧道模式。

nc(netcat)的通用语法:

$ nc [-options] [HostName or IP] [PortNumber]

如何检查多个远程 Linux 服务器上的端口是否打开?

如果要检查多个远程 Linux 服务器上给定端口是否打开,请使用以下 shell 脚本。

在我的例子中,我们将检查端口 22 是否在以下远程服务器中打开,确保你已经更新文件中的服务器列表而不是使用我的服务器列表。

你必须确保已经更新服务器列表 :server-list.txt 。每个服务器(IP)应该在单独的行中。

# cat server-list.txt
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5
192.168.1.6
192.168.1.7

使用以下脚本可以达到此目的。

# vi port_scan.sh

#!/bin/sh
for server in `more server-list.txt`
do
  #echo $i
  nc -zvw3 $server 22
done

设置 port_scan.sh 文件的可执行权限。

$ chmod +x port_scan.sh

最后运行脚本来达到此目的。

# sh port_scan.sh

Connection to 192.168.1.2 22 port [tcp/ssh] succeeded!
Connection to 192.168.1.3 22 port [tcp/ssh] succeeded!
Connection to 192.168.1.4 22 port [tcp/ssh] succeeded!
Connection to 192.168.1.5 22 port [tcp/ssh] succeeded!
Connection to 192.168.1.6 22 port [tcp/ssh] succeeded!
Connection to 192.168.1.7 22 port [tcp/ssh] succeeded!

如何检查多个远程 Linux 服务器上是否打开多个端口?

如果要检查多个服务器中的多个端口,请使用下面的脚本。

在我的例子中,我们将检查给定服务器的 22 和 80 端口是否打开。确保你必须替换所需的端口和服务器名称而不使用是我的。

你必须确保已经将要检查的端口写入 port-list.txt 文件中。每个端口应该在一个单独的行中。

# cat port-list.txt
22
80

你必须确保已经将要检查的服务器(IP 地址)写入 server-list.txt 到文件中。每个服务器(IP) 应该在单独的行中。

# cat server-list.txt
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5
192.168.1.6
192.168.1.7

使用以下脚本来达成此目的。

# vi multiple_port_scan.sh

#!/bin/sh
for server in `more server-list.txt`
do
  for port in `more port-list.txt`
  do
    #echo $server
    nc -zvw3 $server $port
    echo ""
  done
done

设置 multiple_port_scan.sh 文件的可执行权限。

$ chmod +x multiple_port_scan.sh

最后运行脚本来实现这一目的。

# sh multiple_port_scan.sh
Connection to 192.168.1.2 22 port [tcp/ssh] succeeded!
Connection to 192.168.1.2 80 port [tcp/http] succeeded!

Connection to 192.168.1.3 22 port [tcp/ssh] succeeded!
Connection to 192.168.1.3 80 port [tcp/http] succeeded!

Connection to 192.168.1.4 22 port [tcp/ssh] succeeded!
Connection to 192.168.1.4 80 port [tcp/http] succeeded!

Connection to 192.168.1.5 22 port [tcp/ssh] succeeded!
Connection to 192.168.1.5 80 port [tcp/http] succeeded!

Connection to 192.168.1.6 22 port [tcp/ssh] succeeded!
Connection to 192.168.1.6 80 port [tcp/http] succeeded!

Connection to 192.168.1.7 22 port [tcp/ssh] succeeded!
Connection to 192.168.1.7 80 port [tcp/http] succeeded!

via: https://www.2daygeek.com/check-a-open-port-on-multiple-remote-linux-server-using-nc-command/

作者:Magesh Maruthamuthu 选题:lujun9972 译者:zero-MK 校对:wxy

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

大多数时间我们会使用 curl 命令或是 wget 命令下载文件或者做其他事。

我们以前曾写过 最佳命令行下载管理器 的文章。你可以点击相应的 URL 连接来浏览这些文章。

今天我们将讨论同样的话题。这个实用程序名为 HTTPie。

它是现代命令行 http 客户端,也是 curlwget 命令的最佳替代品。

什么是 HTTPie?

HTTPie (发音是 aitch-tee-tee-pie) 是一个 HTTP 命令行客户端。

HTTPie 工具是现代的 HTTP 命令行客户端,它能通过命令行界面与 Web 服务进行交互。

它提供一个简单的 http 命令,允许使用简单而自然的语法发送任意的 HTTP 请求,并会显示彩色的输出。

HTTPie 能用于测试、调试及与 HTTP 服务器交互。

主要特点

  • 具表达力的和直观语法
  • 格式化的及彩色化的终端输出
  • 内置 JSON 支持
  • 表单和文件上传
  • HTTPS、代理和认证
  • 任意请求数据
  • 自定义头部
  • 持久化会话
  • 类似 wget 的下载
  • 支持 Python 2.7 和 3.x

在 Linux 下如何安装 HTTPie

大部分 Linux 发行版都提供了系统包管理器,可以用它来安装。

Fedora 系统,使用 DNF 命令 来安装 httpie:

$ sudo dnf install httpie

Debian/Ubuntu 系统,使用 APT-GET 命令APT 命令 来安装 HTTPie。

$ sudo apt install httpie

基于 Arch Linux 的系统,使用 Pacman 命令 来安装 HTTPie。

$ sudo pacman -S httpie

RHEL/CentOS 的系统,使用 YUM 命令 来安装 HTTPie。

$ sudo yum install httpie

openSUSE Leap 系统,使用 Zypper 命令 来安装 HTTPie。

$ sudo zypper install httpie

用法

如何使用 HTTPie 请求 URL?

HTTPie 的基本用法是将网站的 URL 作为参数。

# http 2daygeek.com
HTTP/1.1 301 Moved Permanently
CF-RAY: 4c4a618d0c02ce6d-LHR
Cache-Control: max-age=3600
Connection: keep-alive
Date: Tue, 09 Apr 2019 06:21:28 GMT
Expires: Tue, 09 Apr 2019 07:21:28 GMT
Location: https://2daygeek.com/
Server: cloudflare
Transfer-Encoding: chunked
Vary: Accept-Encoding

如何使用 HTTPie 下载文件

你可以使用带 --download 参数的 HTTPie 命令下载文件。类似于 wget 命令。

# http --download https://www.2daygeek.com/wp-content/uploads/2019/04/Anbox-Easy-Way-To-Run-Android-Apps-On-Linux.png
HTTP/1.1 200 OK
Accept-Ranges: bytes
CF-Cache-Status: HIT
CF-RAY: 4c4a65d5ca360a66-LHR
Cache-Control: public, max-age=7200
Connection: keep-alive
Content-Length: 32066
Content-Type: image/png
Date: Tue, 09 Apr 2019 06:24:23 GMT
Expect-CT: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
Expires: Tue, 09 Apr 2019 08:24:23 GMT
Last-Modified: Mon, 08 Apr 2019 04:54:25 GMT
Server: cloudflare
Set-Cookie: __cfduid=dd2034b2f95ae42047e082f59f2b964f71554791063; expires=Wed, 08-Apr-20 06:24:23 GMT; path=/; domain=.2daygeek.com; HttpOnly; Secure
Vary: Accept-Encoding

Downloading 31.31 kB to "Anbox-Easy-Way-To-Run-Android-Apps-On-Linux.png"
Done. 31.31 kB in 0.01187s (2.58 MB/s)

你还可以使用 -o 参数用不同的名称保存输出文件。

# http --download https://www.2daygeek.com/wp-content/uploads/2019/04/Anbox-Easy-Way-To-Run-Android-Apps-On-Linux.png -o Anbox-1.png
HTTP/1.1 200 OK
Accept-Ranges: bytes
CF-Cache-Status: HIT
CF-RAY: 4c4a68194daa0a66-LHR
Cache-Control: public, max-age=7200
Connection: keep-alive
Content-Length: 32066
Content-Type: image/png
Date: Tue, 09 Apr 2019 06:25:56 GMT
Expect-CT: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
Expires: Tue, 09 Apr 2019 08:25:56 GMT
Last-Modified: Mon, 08 Apr 2019 04:54:25 GMT
Server: cloudflare
Set-Cookie: __cfduid=d3eea753081690f9a2d36495a74407dd71554791156; expires=Wed, 08-Apr-20 06:25:56 GMT; path=/; domain=.2daygeek.com; HttpOnly; Secure
Vary: Accept-Encoding

Downloading 31.31 kB to "Anbox-1.png"
Done. 31.31 kB in 0.01551s (1.97 MB/s)

如何使用 HTTPie 恢复部分下载?

你可以使用带 -c 参数的 HTTPie 继续下载。

# http --download --continue https://speed.hetzner.de/100MB.bin -o 100MB.bin
HTTP/1.1 206 Partial Content
Connection: keep-alive
Content-Length: 100442112
Content-Range: bytes 4415488-104857599/104857600
Content-Type: application/octet-stream
Date: Tue, 09 Apr 2019 06:32:52 GMT
ETag: "5253f0fd-6400000"
Last-Modified: Tue, 08 Oct 2013 11:48:13 GMT
Server: nginx
Strict-Transport-Security: max-age=15768000; includeSubDomains

Downloading 100.00 MB to "100MB.bin"
 |  24.14 %   24.14 MB    1.12 MB/s  0:01:07 ETA^C

你根据下面的输出验证是否同一个文件:

[email protected]:/var/log# ls -lhtr 100MB.bin
-rw-r--r-- 1 root root 25M Apr  9 01:33 100MB.bin

如何使用 HTTPie 上传文件?

你可以通过使用带有小于号 < 的 HTTPie 命令上传文件

$ http https://transfer.sh < Anbox-1.png

如何使用带有重定向符号 > 下载文件?

你可以使用带有重定向 > 符号的 HTTPie 命令下载文件。

# http https://www.2daygeek.com/wp-content/uploads/2019/03/How-To-Install-And-Enable-Flatpak-Support-On-Linux-1.png > Flatpak.png

# ls -ltrh Flatpak.png
-rw-r--r-- 1 root root 47K Apr  9 01:44 Flatpak.png

发送一个 HTTP GET 请求?

您可以在请求中发送 HTTP GET 方法。GET 方法会使用给定的 URI,从给定服务器检索信息。

# http GET httpie.org
HTTP/1.1 301 Moved Permanently
CF-RAY: 4c4a83a3f90dcbe6-SIN
Cache-Control: max-age=3600
Connection: keep-alive
Date: Tue, 09 Apr 2019 06:44:44 GMT
Expires: Tue, 09 Apr 2019 07:44:44 GMT
Location: https://httpie.org/
Server: cloudflare
Transfer-Encoding: chunked
Vary: Accept-Encoding

提交表单?

使用以下格式提交表单。POST 请求用于向服务器发送数据,例如客户信息、文件上传等。要使用 HTML 表单。

# http -f POST Ubuntu18.2daygeek.com hello='World'
HTTP/1.1 200 OK
Accept-Ranges: bytes
Connection: Keep-Alive
Content-Encoding: gzip
Content-Length: 3138
Content-Type: text/html
Date: Tue, 09 Apr 2019 06:48:12 GMT
ETag: "2aa6-5844bf1b047fc-gzip"
Keep-Alive: timeout=5, max=100
Last-Modified: Sun, 17 Mar 2019 15:29:55 GMT
Server: Apache/2.4.29 (Ubuntu)
Vary: Accept-Encoding

运行下面的指令以查看正在发送的请求。

# http -v Ubuntu18.2daygeek.com
GET / HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Host: ubuntu18.2daygeek.com
User-Agent: HTTPie/0.9.8

hello=World

HTTP/1.1 200 OK
Accept-Ranges: bytes
Connection: Keep-Alive
Content-Encoding: gzip
Content-Length: 3138
Content-Type: text/html
Date: Tue, 09 Apr 2019 06:48:30 GMT
ETag: "2aa6-5844bf1b047fc-gzip"
Keep-Alive: timeout=5, max=100
Last-Modified: Sun, 17 Mar 2019 15:29:55 GMT
Server: Apache/2.4.29 (Ubuntu)
Vary: Accept-Encoding

HTTP 认证?

当前支持的身份验证认证方案是基本认证(Basic)和摘要验证(Digest)。

基本认证:

$ http -a username:password example.org

摘要验证:

$ http -A digest -a username:password example.org

提示输入密码:

$ http -a username example.org

via: https://www.2daygeek.com/httpie-curl-wget-alternative-http-client-linux/

作者:Magesh Maruthamuthu 选题:lujun9972 译者:zgj1024 校对:wxy

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