在 linux 服务器上管理和导航的能力是一项基本技能,它永远不会完全过时。即使您尝试完全转向“无服务器”世界,也总会有一台实际的服务器在运行代码。那台服务器很可能也在运行 Linux,因为超过 90% 的生产服务器都在使用它。
了解如何操作 Linux 服务器将使您能够更快地排除问题并更全面地了解软件生命周期。这确实是一组基本技能,使构建软件(特别是后端)变得更加容易。
在本文中,我们将介绍一些基本的 Linux 命令,您需要掌握这些命令才能成功。
ip命令是一种高度灵活的网络工具。仅使用此命令就可以在系统上完成很多工作。您可以添加新路由以将流量发送到不同的接口。您可以禁用或启用整个网络堆栈。或者您可以只获取基本的IP地址信息。
ip命令是超级灵活的。
让我们看几个基本的使用示例。这是您查找系统上每个连接的网络接口的IP地址信息的方法:
linuxmi@linuxmi:~/www.linuxmi.com$ ip ad
这是完整的ip地址命令的简写。这将显示类似于以下内容的内容:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
.NET 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:24:32:63 brd ff:ff:ff:ff:ff:ff
altname enp2s1
inet 192.168.174.132/24 brd 192.168.174.255 scope global dynamic noprefixroute ens33
valid_lft 1665sec preferred_lft 1665sec
inet6 fe80::36fe:8da1:1b6b:a2c3/64 scope link noprefixroute
valid_lft forever preferred_lft forever
正如你在上面的输出中所看到的,这台机器只有两个网络接口。一个是回环接口,另一个是主接口,分配了一个IP地址。主接口分配了192.168.174.132的IP地址,并具有一个/24子网。
这个命令对于诊断IP地址问题或仅弄清楚哪个接口是哪个非常有帮助。
现在,让我们看看如何使用ip做出一些路由决策。在这个例子中,我们正在向路由表中添加一个新的静态路由:
ip route add 1.2.3.4/31 dev eth0
在这里,我们使用ip route add命令添加了一个新路由。这个命令接受许多参数,具体形式取决于您想如何路由流量。在这种情况下,我们选择将任何目标地址为1.2.3.4/32的流量路由到整个网络设备。在这种情况下,设备是网络接口eth0。现在,当发送到1.2.3.4的任何数据包时,它们将使用eth0。
如果您只想查看现有的路由表,可以运行:
linuxmi@linuxmi:~/www.linuxmi.com$ ip route
ip route 在处理复杂网络时,这是非常重要的命令。如果您需要从您的主机路由流量到远程网络上的另一个主机或通过VPN,您可能需要开始添加一些静态路由。
ip命令在内部提供了更多功能。查看完整的手册页以了解它所提供的所有功能。
tail 命令可能看起来过于简单,但不要忽视它。在处理大文本文件时,tail 命令非常重要。这些文件可以是日志、交易记录或任何产生文本行的东西。
使用 tail,我们不仅可以查看巨大文件的余下部分,还可以实时跟踪它的新添加内容。使用以下命令,您可以打开一个文件并按其发生的顺序进行跟踪:
tail /path/to/log/file
这对于监视访问或错误日志非常有用。对于 Web 服务器尤其如此。如果您在访问某个路径时正在寻找特定的错误,跟踪错误日志的输出可能会更快地解决您的问题。
如果您想减少冗长,还可以从文件末尾返回特定数量的行。使用 -n 标志可以指定要在输出中接收多少行。
tail 还有一些更智能的选项,如 PID 跟踪和定界符调整。查看完整的 man 页面获取更多信息。
nc 或者称为 Netcat 工具是一款简单而实用的故障排除工具。使用此程序,您可以打开套接字,建立网络连接并通过网络发送数据。它非常易于使用。
假设您想在特定端口上侦听一些传入的流量。您只需要使用以下命令运行 nc 来处理 TCP 或 UDP 协议:
# TCP
nc -l 50000
# UDP
nc -u -l 50000
这将在您指定的端口上打开一个监听服务器。在这种情况下,我们选择了端口 50000。一旦服务器启动,您就不会看到任何内容,但可以使用…没错,更多的 nc 命令来测试它。
保持监听运行,并在另一个窗口使用以下命令向其发送一些数据:
# TCP
echo "hello,www.linuxmi.com" | nc localhost 50000
# UDP
echo "hello,www.linuxmi.com" | nc -u localhost 50000
你应该会在监听窗口看到一个漂亮的“hello,www.linuxmi.com”。如下图:
说明它工作了!
但这有什么用处呢?非常多。你可以解决套接字连接问题,调查原始传入流量中的负载,或者只是在网络上发送基本数据和对象。
Netcat 甚至支持使用 TLS 建立安全连接。你可以指定各种额外的证书参数。如果你正在处理任何类型的网络协议,熟悉 nc 肯定会节省你一些麻烦。
官方 Netcat 页面在这里。
相关:在 Linux 中使用 netcat 命令扫描端口 https://www.linuxmi.com/linux-netcat.html
服务器通常表现良好,但有时会安装不应该安装的东西。它可能是其他用户、配置管理软件或者你在键盘上出错,但错误的东西确实被安装了。这意味着需要查找确切位置,但有时候这并不容易。
谢天谢地,在 Linux 中我们有 which 工具。这有助于我们确定正在运行的程序的“which”版本。是不是一个聪明的名字?
假设您安装了多个不同版本的相同程序或语言。您不确定它是从哪个位置运行的。它可能在 /usr/bin 中,也可能在 /usr/local/bin 中。不要浪费时间手动查找,只需使用 which 找出它:
linuxmi@linuxmi:~/www.linuxmi.com$ which echo
/usr/bin/echo
正如你所看到的,我们询问了正在使用的 echo 版本,并得到了该可执行文件的当前路径。当然,我们不太可能“安装”不同版本的 echo,但是对于诸如编程语言和解释器之类的东西来说,这样做可能非常有用。在某些服务器上,通常会使用多个版本。
使用 which 快速弄清楚,然后回到使用正确的版本。
DNS 有时可能是一个大救星,有时也可能是个麻烦的小鬼。由于 DNS 问题造成了很多广泛的停机,很难相信这样一个看似简单的服务会造成如此多的破坏,但这种情况时常发生。
了解 DNS 记录背后的内容非常重要。更重要的是,要知道如何跟踪错误的记录。幸运的是,在 Linux 上有一个非常好的工具。它就是 dig 程序。
使用dig,你可以以多种方式查询DNS服务器获取各种类型的记录。你还可以看到DNS请求通过DNS记录和服务器的层次结构到达你的全路径。
让我们尝试使用microsoft.com这个简单的例子。这将说明单个记录并不总是看起来那么简单:
linuxmi@linuxmi:~/www.linuxmi.com$ dig microsoft.com
让我们看看我们得到了什么:
在这里,我们可以看到 dig 提供给我们的丰富信息。我们可以快速地看到不止一个 A 记录,而是有 4 个!这意味着每次我们访问 microsoft.com时,实际上要从不同的IP地址列表中选择。公司通常这样做来平衡多个主机之间的请求,或者有 CDN 参与时。
我们还可以检查基本的响应时间和返回的任何其他选项的统计信息。如果你想深入了解 DNS 的情况,你就得挖下去。