Linux 故障排除指南
在 Linux 系统的使用过程中,我们可能会遇到各种各样的问题,如软件包无法下载、网络连接故障、服务无法访问以及性能下降等。本文将详细介绍这些常见问题的原因及解决方法。
软件包管理问题
在 Linux 系统中,软件包的管理是一项常见任务。有时候,我们可能需要移除一些不再需要的软件包及其依赖项。手动移除这些软件包可能会花费很长时间,但使用
apt autoremove
命令可以一次性完成这个任务。
# apt autoremove
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
kde-cli-tools kde-cli-tools-data libfakekey0 libkf5su-bin libkf5su-data
libkf5su5 sshfs
0 upgraded, 0 newly installed, 7 to remove and 9 not upgraded.
After this operation, 5,385 kB disk space will be freed.
Do you want to continue? [Y/n]
此外,有时候软件包可能无法下载,你可能会看到 “E: Unable to locate package package-name” 这样的错误信息。以下是一些常见的原因及解决方法:
1.
本地仓库数据库未更新
:你可能有一段时间没有更新本地仓库数据库了(对于新安装的 Ubuntu 系统,可能从未更新过)。可以运行
apt update
命令,然后再次尝试安装软件包。
2.
软件包名称拼写错误
:这是一个常见的问题,即使是经验丰富的用户也可能会犯。请仔细检查软件包名称的拼写。
3.
软件包不适用于当前 Ubuntu 版本
:该软件包可能存在,但不适用于你当前使用的 Ubuntu 版本。可以使用
apt search package-name
命令搜索该软件包。
4.
软件包所在仓库未启用
:确保该软件包所在的仓库已经在
/etc/apt
目录下的某个源文件中启用。
网络故障排除
如今,我们日常使用的大部分信息、图像、视频和其他内容都存储在本地计算机之外,因此几乎每个计算机系统都需要一个正常工作的网络连接。如果你的网络连接中断或无法访问你想要通信的系统,Linux 系统提供了许多工具来帮助你排查问题。
排查出站连接问题
假设你打开了网页浏览器,但无法访问任何网站,你可能怀疑自己没有连接到网络。问题可能出在名称解析上,也可能是本地网络之外的连接出现了问题。
为了检查你的出站网络连接是否正常,你可以使用许多在网络管理中常用的命令。以下是一些具体的排查步骤:
1.
查看网络接口状态
:使用
ip
命令可以查看网络接口的状态。例如:
# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 state DOWN qlen 1000
link/ether f0:de:f1:28:46:d9 brd ff:ff:ff:ff:ff:ff
上述输出显示,回环接口(lo)处于启用状态(因此你可以在本地系统上运行网络命令),但 eth0(你的第一个有线网卡)处于关闭状态(状态为 DOWN)。如果接口处于启用状态,
inet
行将显示该接口的 IP 地址。在这个例子中,只有回环接口有一个
inet
地址(127.0.0.1)。
默认情况下,网络接口现在根据它们与物理硬件的连接方式进行命名。例如,你可能会看到一个名为
enp11s0
的网络接口,这表示该网卡是一个有线以太网网卡(
en
),位于 PCI 板 11(
p11
)的插槽 0(
s0
)上。无线网卡的名称通常以
wl
开头。这样做的目的是使网卡名称更具可预测性,因为当系统重启时,操作系统并不保证会将哪些接口命名为
eth0
、
eth1
等。
-
检查物理连接 :
-
有线连接
:确保你的计算机已插入网络交换机的端口。如果你有多个网卡,请确保电缆插入了正确的网卡。如果你知道某个网络接口的名称(如
eth0、p4p1等),可以在命令行中输入ethtool -p eth0,然后查看计算机后面哪个网卡在闪烁(按Ctrl+C停止闪烁),将电缆插入正确的端口。你可能需要安装ethtool软件包才能使用此功能。如果看到 “Cannot identify NIC: Operation not supported” 错误消息,可能意味着你的网络适配器不支持此操作。 - 无线连接 :如果你点击 NetworkManager 图标但没有看到可用的无线接口,可能是无线网卡在 BIOS 中被禁用了。对于笔记本电脑,还需要检查是否有一个小开关关闭了无线网卡。有时候,人们会花费大量时间排查网络配置问题,最后才发现是笔记本电脑前面或侧面的小开关被关闭了。
-
有线连接
:确保你的计算机已插入网络交换机的端口。如果你有多个网卡,请确保电缆插入了正确的网卡。如果你知道某个网络接口的名称(如
-
检查路由 :
-
查看默认路由
:如果你的网络接口已启用,但仍然无法访问你想要的主机,可以尝试检查到该主机的路由。首先检查你的默认路由,然后尝试访问本地网络的网关设备,最后尝试 ping 一个互联网上的系统。可以使用
ip route show命令查看路由信息。例如:
-
查看默认路由
:如果你的网络接口已启用,但仍然无法访问你想要的主机,可以尝试检查到该主机的路由。首先检查你的默认路由,然后尝试访问本地网络的网关设备,最后尝试 ping 一个互联网上的系统。可以使用
$ ip route show
default via 192.168.122.1 dev ens3 proto dhcp metric 100
192.168.122.0/24 dev ens3 proto kernel scope link src 192.168.122.194
metric 100
上述输出显示,默认网关的地址是 192.168.122.1,可以通过
ens3
网卡访问该地址。由于这里只有
ens3
接口,并且只显示了到 192.168.122.0 网络的路由,因此所有不是发往 192.168.122.0/24 网络上主机的通信都将通过默认网关(192.168.122.1)发送。默认网关通常也被称为路由器。
-
ping 路由器
:为了确保你可以访问路由器,可以尝试 ping 它。例如:
# ping -c 2 192.168.122.1
PING 192.168.122.1 (192.168.122.1) 56(84) bytes of data.
64 bytes from 192.168.122.1: icmp_seq=1 ttl=64 time=0.757 ms
64 bytes from 192.168.122.1: icmp_seq=2 ttl=64 time=0.538 ms
--- 192.168.122.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 65ms
rtt min/avg/max/mdev = 0.538/0.647/0.757/0.112 ms
如果收到 “Destination Host Unreachable” 消息,说明路由器可能已关闭或没有与你物理连接(例如,路由器可能没有连接到你共享的交换机)。如果 ping 成功并且可以访问路由器,下一步是尝试访问路由器之外的地址。
-
ping 公共 IP 地址
:尝试 ping 一个广泛可用的 IP 地址,例如 Google 公共 DNS 服务器的 IP 地址 8.8.8.8。如果 ping 成功,说明你的网络可能正常,很可能是主机名到地址的解析出现了问题。
-
使用 traceroute 命令
:如果你可以访问远程系统,但连接速度非常慢,可以使用
traceroute
命令跟踪到远程主机的路由。例如:
$ traceroute google.com
traceroute to google.com (172.217.1.14), 30 hops max, 60 byte packets
1 ControlPanel.Home (192.168.1.1) 411.607 ms 412.686 ms 413.813 ms
2 dsl-173-206-32-1.tor.primus.ca (173.206.32.1) 429.830 ms
432.166 ms 438.998 ms
3 10.201.117.2 (10.201.117.2) 450.030 ms 450.417 ms 450.796 ms
4 74.125.48.46 (74.125.48.46) 451.044 ms 470.842 ms 472.093 ms
5 108.170.250.241 (108.170.250.241) 472.412 ms 108.170.250.225
(108.170.250.225) 472.407 ms 481.666 ms
6 216.239.35.233 (216.239.35.233) 484.464 ms 407.747 ms 407.604 ms
7 iad23s25-in-f14.1e100.net (172.217.1.14) 406.466 ms 586.899 ms
354.843 ms
上述输出显示了到达 Google 网站的每一跳所花费的时间。
-
检查主机名解析
:
- 判断主机名解析是否有问题 :如果你无法通过主机名访问远程主机,但可以通过 ping IP 地址访问,说明你的系统可能存在主机名解析问题。连接到互联网的系统通过与域名系统(DNS)服务器通信来进行名称到地址的解析,DNS 服务器可以提供请求主机的 IP 地址。
-
查看 DNS 服务器配置
:你的系统使用的 DNS 服务器地址可以手动输入,也可以在启动网络接口时从动态主机配置协议(DHCP)服务器自动获取。无论哪种方式,一个或多个 DNS 服务器的名称和 IP 地址最终都会存储在
/etc/resolv.conf文件中。以下是一个示例:
search example.com
nameserver 192.168.0.254
nameserver 192.168.0.253
当你请求连接到一个主机名时,系统会先搜索
/etc/hosts
文件,然后按照
resolv.conf
文件中出现的顺序查询名称服务器条目。以下是一些调试名称到地址解析的方法:
-
检查 DNS 服务器是否可达
:知道 DNS 服务器的地址后,可以尝试 ping 每个 DNS 服务器的 IP 地址,查看是否可以访问。例如:
ping -c 2 192.168.0.254
。如果可以访问该 IP 地址,可能是你被分配了错误的 DNS 服务器地址,或者该 DNS 服务器当前已关闭。
-
检查 DNS 服务器是否正常工作
:可以使用
host
或
dig
命令具体测试每个 DNS 服务器。例如,使用以下命令查看 192.168.0.254 这个 DNS 服务器是否可以将主机名
www.google.com
解析为 IP 地址:
# host google.com 192.168.0.254
Using domain server:
Name: 192.168.0.254
Address: 192.168.0.254#53
Aliases:
www.google.com has address 172.217.13.228
www.google.com has IPv6 address 2607:f8b0:4004:809::2004
# dig @192.168.0.254 www.google.com
...
;; QUESTION SECTION:
;www.google.com. IN A
;; ANSWER SECTION:
www.google.com. 67 IN A 172.217.13.228
...
重复上述步骤,直到找到可以正常工作的 DNS 服务器。
-
修正 DNS 服务器配置
:如果你确定为 DNS 服务器设置的 IP 地址有误,更改这些地址可能会有点棘手。可以在
/var/log/syslog
或
journalctl
的输出中搜索 DNS 服务器的 IP 地址。如果使用 NetworkManager 启动网络并连接到 DHCP 服务器,你应该会看到分配 IP 地址的名称服务器行。如果地址错误,你可以覆盖它们。
如果你使用 Netplan 管理网络设备,可以编辑
/etc/netplan/01-network-manager-all.yaml
文件(或类似的文件)。假设你的 DNS 服务器地址是 8.8.8.8 和 8.8.4.4,新的条目应该如下所示:
nameservers:
addresses: [8.8.8.8,8.8.4.4]
完成编辑后,不要忘记运行
sudo netplan apply
命令使更改生效。
上述检查出站网络连接的步骤适用于任何类型的系统,无论是笔记本电脑、台式机还是服务器。对于笔记本电脑和台式机来说,入站连接通常不是问题,因为大多数请求都会被拒绝。然而,对于服务器来说,如果客户端在访问你提供的服务时遇到问题,下面将介绍一些使服务器可访问的方法。
排查入站连接问题
在排查服务器的网络接口问题时,与台式机系统有不同的考虑因素。由于大多数 Linux 系统都被配置为服务器,你应该知道如何排查那些试图访问你的 Linux 服务器的用户所遇到的问题。
假设你的 Linux 系统上运行着一个 Apache 网络服务器,但出于某种原因,没有任何 Web 客户端可以访问它。以下是一些可以尝试的排查步骤:
1.
检查客户端是否可以访问你的系统
:
-
确保主机名可解析
:要成为一个公共服务器,你的系统主机名应该可以被解析,以便互联网上的任何客户端都可以访问它。这意味着你需要将系统锁定到一个特定的公共 IP 地址,并将该地址注册到一个公共 DNS 服务器。你可以使用域名注册商(如
www.networksolutions.com
或 Amazon 的 Route 53)来完成此操作。
-
使用命令排查连接问题
:当客户端无法通过主机名从他们的 Web 浏览器访问你的网站时,如果客户端是 Linux 系统,你可以使用
ping
、
host
、
traceroute
等命令来跟踪连接问题。Windows 系统也有自己版本的
ping
命令可供使用。
-
检查服务可用性
:如果名称到地址的解析正常,并且你可以从外部 ping 到你的服务器,下一步是检查服务的可用性。
2.
检查服务是否对客户端可用
:
-
使用 nmap 命令
:从 Linux 客户端,你可以使用
nmap
命令检查你正在寻找的服务(在这个例子中是 Apache)是否可以从服务器访问。
nmap
命令是系统管理员检查网络上各种信息的常用工具,但它也是黑客常用的工具,因为它可以扫描服务器,查找潜在的漏洞。因此,使用
nmap
扫描你自己的系统来检查问题是可以的,但要知道在其他系统上使用
nmap
就像检查别人房子的门窗是否可以进入一样,会让人觉得你像个入侵者。
-
扫描服务器端口
:安装
nmap
软件包(
apt install nmap
)后,使用你的系统主机名或 IP 地址来扫描你的系统,查看哪些常用端口上正在运行服务。例如:
# nmap 192.168.0.119
Starting Nmap 6.40 ( http://nmap.org ) at 2019-12-08 13:28 EST
Nmap scan report for spike (192.168.0.119)
Host is up (0.0037s latency).
Not shown: 995 filtered ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
80/tcp open http
443/tcp open https
631/tcp open ipp
MAC Address: 00:1B:21:0A:E8:5E (Intel Corporate)
Nmap done: 1 IP address (1 host up) scanned in 4.77 seconds
上述输出显示,TCP 端口 80(HTTP)和 443(HTTPS)是开放的,这意味着这些端口上有服务正在监听。如果你看到状态为
open
,说明服务正在监听该端口。如果到了这一步,说明你的网络连接正常,你应该将排查重点放在服务本身的配置上(例如,你可以查看
/etc/apache2/sites-available
文件,看是否允许或拒绝特定主机的访问)。
-
处理端口未显示或关闭的情况
:如果 TCP 端口 80 和/或 443 未显示,说明它们可能被过滤了。你需要检查防火墙是否阻止了这些端口的数据包。如果端口没有被过滤,但状态为
closed
,说明 Apache 服务可能没有运行或没有监听这些端口。下一步是登录到服务器并检查这些问题。同时,你可以检查任何活动的防火墙,看它们是否阻止了你的请求。
3.
检查服务器上的服务
:
-
检查服务是否运行
:如果似乎没有任何东西阻止客户端通过提供服务的实际端口访问你的服务器,那么是时候检查服务本身了。假设服务正在运行(可以使用
systemctl status apache2
命令检查),下一步是检查它是否在正确的端口和网络接口上监听。
-
使用 netstat 命令
:
netstat
命令是检查网络服务的一个很好的通用工具。以下命令列出了所有正在监听 TCP(t)和 UDP(u)服务的进程的名称和进程 ID(p),以及它们正在监听的端口号(n)。命令行过滤掉了所有与
apache2
进程无关的行:
# netstat -tupln | grep apache2
tcp 0 0 :::80 :::* LISTEN 2567/apache2
tcp 0 0 :::443 :::* LISTEN 2567/apache2
上述示例显示,
apache2
进程正在所有接口的端口 80 和 443 上监听。Apache 也有可能只在选定的接口上监听。例如,如果
apache2
进程只在本地接口(127.0.0.1)上监听 HTTP 请求(端口 80),条目将如下所示:
tcp 0 0 127.0.0.1:80 :::* LISTEN 2567/apache2
对于 Apache 以及其他在网络接口上监听请求的网络服务,你可以编辑服务的主配置文件(在这个例子中是
/etc/apache2/apache2.conf
),告诉它在端口 80 上监听所有地址(
Listen 80
)或特定地址(
Listen 192.168.0.100:80
)。
内存故障排除
排查计算机的性能问题是你将面临的最重要但往往难以捉摸的任务之一。也许你的系统原本运行正常,但后来开始变慢,甚至几乎无法使用。也许应用程序无缘无故地崩溃。找到并解决这些问题可能需要一些调查工作。
Linux 系统提供了许多工具来监控系统活动并了解正在发生的事情。使用各种 Linux 实用程序,你可以找出哪些进程正在消耗大量内存,或者对处理器、磁盘或网络带宽提出了很高的要求。解决性能问题的方法包括:
1.
增加容量
:你的计算机可能正在尽力完成你要求的任务,但由于内存、处理能力、磁盘空间或网络容量不足,可能会出现故障。即使接近资源耗尽的边界也可能导致性能问题。提高计算机硬件容量通常是解决性能问题的最简单方法。
2.
调整系统
:Linux 系统有一些默认设置,这些设置定义了它如何在内部保存数据、移动数据和保护数据。系统可调参数可以根据你的需求进行调整,以优化系统性能。
综上所述,通过以上介绍的方法,你可以更好地排查和解决 Linux 系统中常见的软件包管理、网络连接、服务访问和性能等方面的问题。希望这些信息对你有所帮助。
Linux 故障排除指南
常见问题及解决方法总结
为了方便大家快速查阅,下面以表格形式总结上述提到的常见问题及解决方法:
|问题类型|具体问题|解决方法|
| ---- | ---- | ---- |
|软件包管理|软件包无法下载|1. 运行
apt update
后再次尝试安装;2. 检查软件包名称拼写;3. 使用
apt search package-name
搜索软件包;4. 确保软件包所在仓库在
/etc/apt
源文件中启用|
|软件包管理|移除不再需要的软件包及其依赖项|使用
apt autoremove
命令|
|网络连接(出站)|无法访问网站|1. 使用
ip addr show
查看网络接口状态;2. 检查物理连接(有线检查电缆插入,无线检查 BIOS 和开关);3. 使用
ip route show
查看路由,
ping
路由器和公共 IP 地址,
traceroute
跟踪路由;4. 检查主机名解析,查看
/etc/resolv.conf
文件,
ping
DNS 服务器,使用
host
或
dig
测试 DNS 服务器,必要时修改 DNS 配置|
|网络连接(入站)|Apache 服务器无法被客户端访问|1. 确保主机名可解析,使用域名注册商注册公共 IP 地址到 DNS 服务器;2. 使用
ping
、
host
、
traceroute
等命令排查连接问题;3. 使用
nmap
检查服务端口是否开放;4. 检查防火墙是否阻止端口;5. 检查服务是否运行,使用
netstat
查看服务监听端口和接口,必要时修改服务配置文件|
|性能问题|系统变慢或应用程序崩溃|1. 增加硬件容量(内存、处理能力、磁盘空间、网络容量);2. 调整系统可调参数|
故障排查流程图
graph TD;
A[遇到问题] --> B{问题类型};
B -->|软件包管理| C{具体问题};
C -->|无法下载| D[更新本地仓库数据库并再次尝试安装];
C -->|移除依赖项| E[使用 apt autoremove 命令];
B -->|网络连接| F{出站还是入站};
F -->|出站| G{具体症状};
G -->|无法访问网站| H[查看网络接口状态];
H --> I[检查物理连接];
I --> J[检查路由和主机名解析];
F -->|入站| K{服务类型};
K -->|Apache 服务器| L[检查主机名解析和连接];
L --> M[使用 nmap 检查端口];
M --> N[检查防火墙和服务配置];
B -->|性能问题| O{具体表现};
O -->|系统变慢或崩溃| P[增加硬件容量或调整系统参数];
深入探讨网络故障排查
在网络故障排查中,除了上述提到的基本方法,还有一些更深入的技巧。
网络流量监控
有时候,网络连接问题可能是由于网络流量过大导致的。可以使用
iftop
或
nethogs
工具来监控网络流量。
-
iftop
:用于实时显示网络接口的带宽使用情况。安装命令:
apt install iftop,使用命令:iftop -i eth0(eth0为要监控的网络接口)。 -
nethogs
:用于按进程显示网络带宽使用情况。安装命令:
apt install nethogs,使用命令:nethogs eth0。
防火墙规则检查
防火墙可能会阻止网络连接,因此需要仔细检查防火墙规则。常见的 Linux 防火墙有
iptables
和
ufw
。
-
iptables
:是 Linux 内核自带的防火墙工具。查看规则命令:
iptables -L -n -v,如果发现规则阻止了所需的端口或服务,可以使用iptables -D命令删除相应规则。 -
ufw
:是一个简化版的防火墙配置工具。查看状态命令:
sudo ufw status,允许端口命令:sudo ufw allow 80/tcp(允许 TCP 80 端口)。
性能优化实践
在进行性能优化时,除了增加硬件容量和调整系统参数,还可以采取以下实践。
进程管理
使用
top
或
htop
工具查看系统中占用资源较多的进程。
top
是 Linux 系统自带的进程监控工具,
htop
是一个更直观的替代工具。安装
htop
命令:
apt install htop
,使用
htop
可以方便地查看每个进程的 CPU、内存使用情况,还可以通过按
F9
键选择终止占用资源过多的进程。
磁盘 I/O 优化
如果磁盘 I/O 成为系统瓶颈,可以使用
iostat
工具查看磁盘 I/O 情况。安装命令:
apt install sysstat
,使用命令:
iostat -x 1
(每秒显示一次磁盘 I/O 详细信息)。对于机械硬盘,可以考虑调整磁盘调度算法,例如使用
noop
或
deadline
算法,修改
/sys/block/sda/queue/scheduler
文件(
sda
为磁盘名称)。
总结与展望
通过本文的介绍,我们详细了解了 Linux 系统中常见的故障类型及相应的排查和解决方法。从软件包管理到网络连接,再到性能优化,每个方面都有其独特的问题和解决方案。
在实际使用中,我们可能会遇到更加复杂的问题,需要综合运用多种工具和方法进行排查。同时,随着技术的不断发展,Linux 系统也在不断更新和完善,新的故障类型和解决方法也会不断涌现。因此,我们需要持续学习和积累经验,以更好地应对各种挑战。
希望本文能够帮助大家在 Linux 系统的使用过程中更加得心应手,快速解决遇到的问题,让 Linux 系统发挥出最佳性能。
超级会员免费看
1994

被折叠的 条评论
为什么被折叠?



