Bản phân phối của bạn gỡ gói, menu mất mục, và đường hầm vẫn khởi động sau lần khởi động lại tiếp theo. Một ứng dụng VPN thương mại để lại những mảnh mà trình quản lý gói chưa bao giờ theo dõi, nên gỡ sạch không giống như một máy sạch. Bốn trong số những mảnh đó giải thích gần như mọi kết nối ma: một unit, một hồ sơ kết nối, một trình trợ giúp đặc quyền và một kho của nhà cung cấp. Hãy đọc cả bốn trước khi xóa bất cứ thứ gì, rồi gỡ từng mảnh thông qua thành phần sở hữu nó.

Điều mà trình gỡ cài đặt không bao giờ ghi lại

Trình quản lý gói chỉ xóa những tệp mà chính nó đã ghi lại và không gì khác. Nó không có bản ghi về hồ sơ kết nối do ứng dụng tạo khi chạy, về một unit được bật sau khi cài đặt, hay về một trình trợ giúp tự đăng ký khi chạy với quyền cao. Mỗi thứ thuộc về một hệ con khác nhau, và mỗi thứ có thể sống lâu hơn gói qua một hoặc vài lần khởi động lại. Chính khoảng trống đó giải thích vì sao đường hầm có thể khỏe mạnh trong khi phần mềm tạo ra nó đã biến mất.

Phần còn lại luôn có chủ sở hữu, dù đó là systemd, NetworkManager, cấu hình kho hay một mục tự khởi động theo người dùng. Tìm ra chủ sở hữu trước chính là điều giữ cho việc dọn dẹp không biến máy thành nửa cấu hình. Xóa tệp trực tiếp thường hiệu quả cho đến khi chủ sở hữu tạo lại chúng, và đó là lý do các lệnh bên dưới bắt đầu bằng truy vấn.

Bốn chủ sở hữu, trước hết chỉ đọc

Hãy bắt đầu bằng truy vấn thay vì xóa, và ghi lại những tên chính xác trả về. Các nhà cung cấp thường gửi một tải trọng có phiên bản bên cạnh gói meta, nên một sản phẩm có thể xuất hiện dưới hai tên. Một tên xuất hiện trong cả hai danh sách là một sản phẩm với hai chủ sở hữu, và cả hai đều cần được gỡ. Lô đầu tiên bao quát gói và unit, nơi phần lớn phần còn lại trở nên hữu hình.

dpkg -l | grep -i acmevpn
systemctl list-unit-files | grep -i acmevpn
systemctl list-units --type=service --state=running | grep -i acmevpn

Lô thứ hai bao quát hai thành phần sống sót qua việc dọn dẹp thường xuyên nhất, cụ thể là hồ sơ kết nối và kho của nhà cung cấp. Hãy đọc cột UUID thay vì tên, vì tên trùng lặp là phổ biến và lệnh xóa cần đến mã định danh. Dòng kho đáng đọc ngay cả khi hôm nay bạn không gỡ nó, vì một máy chủ nhà cung cấp đã chết có thể phá hỏng một cài đặt không liên quan nhiều tháng sau. Không danh sách nào thay đổi điều gì, và đó chính là lý do chúng được chạy trước.

nmcli -f NAME,UUID,TYPE connection show
nmcli connection show --active
grep -ril acmevpn /etc/apt/sources.list.d/ /etc/apt/sources.list

Một tiến trình còn sống sau khi dọn dẹp là một unit đang hoạt động hoặc con của một chương trình khác. Hãy đọc bảng tiến trình và chuỗi cha của nó trước khi đổ lỗi cho một dịch vụ không còn tồn tại. Các mục tự khởi động theo người dùng cũng cần cùng một lượt kiểm tra, và chúng chỉ xuất hiện trong một shell đăng nhập mới, không phải trong phiên root.

Ba động từ không thể thay thế cho nhau

Dừng kết thúc lần chạy hiện tại, vô hiệu hóa gỡ các liên kết lúc khởi động, và che khuất trỏ unit tới /dev/null. Chỉ cách thứ ba cũng chặn kích hoạt qua socket, bộ hẹn giờ hoặc phụ thuộc, khiến nó mạnh nhất trong ba. Thứ tự quan trọng trong khi bạn vẫn đang quyết định làm gì với chiếc máy. Che khuất là trạng thái đúng trong quyết định đó, vì nó thất bại ầm ĩ thay vì khởi động lặng lẽ ở lần khởi động sau.

Hãy bỏ che khuất trước khi cài lại, nếu không gói mới sẽ trông hỏng vì một lý do không ai ghi lại. Cùng sự cẩn trọng đó áp dụng cho khác biệt về đóng gói: một bản dựng gửi một unit có thể dừng được, trong khi bản khác không để lại dịch vụ nào. Xác định bạn có kiểu đóng gói nào trước khi chọn động từ, vì đường dọn dẹp khác nhau.

Dùng ký tự đại diện là cách xóa sai hồ sơ

Xóa hồ sơ bằng UUID bạn đã ghi lại, và không bao giờ bằng ký tự đại diện. Thư mục keyfile cũng chứa mọi hồ sơ Wi-Fi và Ethernet trên máy, nên một kết hợp rộng sẽ gỡ những thứ bạn vẫn cần. Một keyfile bị xóa thủ công có thể được tạo lại bởi chính sách sở hữu nó, khiến việc xóa có vẻ vô hiệu.

nmcli connection delete uuid <uuid>

Xuất gateway và danh tính trước nếu hồ sơ đó là bản sao duy nhất bạn còn, vì xóa cục bộ không thu hồi gì trên máy chủ. Kho cũng theo quy tắc tương tự: gỡ tệp nhà cung cấp duy nhất và chùm khóa của nó, rồi làm mới danh sách gói và thử lại bản cài đặt mà bạn thực sự muốn. Để lại một mục bên thứ ba lỗi thời có thể ghim một phụ thuộc cũ hoặc không trả lời gì cả. Cả hai lần gỡ đều nhỏ, và mỗi lần đều có thể hoàn tác từ bản sao bạn giữ.

Điều gì vẫn chạy sau khi khởi động lại

Khởi động lại trước khi tuyên bố chiến thắng, rồi tìm dấu vết thay vì ứng dụng. Một giao diện đường hầm, một tuyến chia cũ và DNS cho từng liên kết do ứng dụng cũ để lại đều cần lệnh riêng. Cả ba đều có thể sống sót qua một lần dọn dẹp đã gỡ thành công mọi gói.

ip link
ip route
resolvectl status

Cũng hãy mở một shell đăng nhập mới, vì mục tự khởi động chỉ kích hoạt ở đó. Sau đó đọc /etc/NetworkManager/dispatcher.d/ để tìm một script nâng kết nối mỗi khi giao diện đổi trạng thái, điều giải thích một đường hầm quay lại mà không có dịch vụ phía sau. Nếu còn thứ gì đó gọi ra ngoài, hãy lần theo tiến trình đến cha của nó thay vì xóa tệp cho đến khi triệu chứng dừng. Dọn máy và thu hồi tài khoản vẫn là hai việc riêng, và chỉ một trong hai hoàn tất khi lần khởi động lại trông yên tĩnh.

Bài viết liên quan