Tin tức và phân tích của tất cả các thiết bị di động

Cách tìm và xóa các liên kết tượng trưng bị hỏng trong Linux

Liên kết tượng trưng trên Linux là một tính năng tuyệt vời, nhưng chúng có thể bị hỏng và chẳng để lại gì. Đây là cách xác định vị trí các liên kết tượng trưng bị hỏng, xem xét chúng và xóa chúng khỏi hệ thống của bạn nếu cần.

Kết nối tượng trưng 101

Liên kết tượng trưng, ​​còn được gọi là “liên kết mềm” và “liên kết tượng trưng”, là một dạng lối tắt có thể trỏ đến tệp và thư mục. Liên kết tượng trưng trông giống như một tệp hoặc thư mục thông thường trong cửa sổ trình quản lý tệp. Nó cũng xuất hiện dưới dạng một mục trong danh sách tệp trong cửa sổ đầu cuối. Tệp hoặc thư mục mà một liên kết tượng trưng trỏ tới có thể ở bất kỳ đâu trong cây hệ thống tệp.

Ví dụ: giả sử bạn có một liên kết tượng trưng trong thư mục chính của mình có tên là “dave-link” trỏ đến một tệp có tên “text-file.txt” nằm ở nơi khác trong cây hệ thống tệp. Các lệnh được sử dụng trên một liên kết tượng trưng sẽ tự động được áp dụng cho tệp mà nó trỏ tới. Nếu bạn cố gắng sử dụng cat hoặc ít hơn trong một liên kết tượng trưng, ​​bạn sẽ thực sự thấy nội dung của tệp “text-file.txt”.

Một bản cài đặt Linux tiêu chuẩn bao gồm nhiều liên kết tượng trưng. Ngay cả khi bạn không tự tạo chúng, hệ điều hành sẽ sử dụng chúng. Các thủ tục cài đặt ứng dụng thường sử dụng các liên kết tượng trưng để trỏ đến các tệp thực thi. Khi phần mềm được cập nhật, tệp nhị phân được thay thế bằng phiên bản mới và tất cả các liên kết tượng trưng hoạt động như trước, miễn là tên của tệp mới giống với tên cũ.

Chúng ta có thể dễ dàng thấy một số liên kết tượng trưng bằng cách sử dụng ls trong thư mục gốc. Một số mục được hiển thị bằng màu khác – trên máy thử nghiệm Ubuntu 20.10 của chúng tôi, chúng được hiển thị bằng màu xanh lam nhạt.

Chúng tôi nhập:

ls /

Chúng ta có thể xem xét kỹ hơn bằng tùy chọn -l (danh sách dài). Chúng tôi gõ lệnh sau để đi qua tất cả các mục “lib” và mục “bin” duy nhất:

ls -l /lib* /bin

ls -l /lib */bin trong cửa sổ đầu cuối.

Có một chữ “l” ở đầu mỗi dòng, có nghĩa là mục này là một liên kết tượng trưng. Văn bản sau “->” hiển thị liên kết tượng trưng đang trỏ đến. Trong ví dụ của chúng tôi, tất cả các thư mục được nhắm mục tiêu.

Quyền được liệt kê là đọc, viết và thực thi cho chủ sở hữu, nhóm và những người khác. Đây là những mục giả mạo mặc định. Chúng không phản ánh các quyền đối tượng thực tế mà các liên kết tượng trưng trỏ tới. Đó là quyền của tệp hoặc thư mục đích được ưu tiên và được hệ thống tệp tôn trọng.

Liên kết tượng trưng bị hỏng

Một liên kết tượng trưng bị hỏng (hoặc bị treo) khi tệp mà nó trỏ tới bị xóa hoặc di chuyển đến một vị trí khác. Nếu quy trình gỡ cài đặt ứng dụng không hoạt động bình thường hoặc bị hủy bỏ trước khi hoàn tất, bạn có thể để lại các liên kết tượng trưng bị hỏng.

Nếu ai đó xóa một tệp theo cách thủ công mà không biết rằng các liên kết tượng trưng trỏ đến tệp đó, các liên kết tượng trưng đó sẽ không còn hoạt động. Chúng sẽ giống như những bảng chỉ đường chỉ đến một thành phố bị phá hủy.

Chúng ta có thể dễ dàng thấy hành vi này bằng cách sử dụng một liên kết tượng trưng có tên “xin chào” trong thư mục hiện tại. Chúng tôi gõ như sau sử dụng ls để xem nó:

ls -l

Nó trỏ đến chương trình có tên “htg” trong thư mục có tên “bin”. Nếu chúng tôi “chạy” liên kết tượng trưng, ​​​​nó sẽ thực thi chương trình cho chúng tôi:

./hello

Bây giờ chúng tôi có thể xác minh rằng đây là trường hợp bằng cách chạy chương trình trực tiếp:

../bin/htg

Như mong đợi, chúng tôi nhận được câu trả lời tương tự. Hãy xóa tệp chương trình:

rm ../bin/htg

Bây giờ khi chúng ta nhìn vào liên kết tượng trưng, ​​chúng ta thấy rằng nó được liệt kê bằng màu đỏ vì Linux biết nó đã bị hỏng. Nó cũng cho bạn biết nó trỏ tới cái gì, vì vậy chúng tôi có thể thay thế tệp, biên dịch lại chương trình hoặc làm bất cứ điều gì cần thiết để sửa liên kết tượng trưng.

Lưu ý rằng nếu chúng tôi cố gắng chạy một liên kết tượng trưng, ​​lỗi mà chúng tôi nhận được đề cập đến tên của liên kết tượng trưng, ​​không phải tên của chương trình mà liên kết tượng trưng trỏ tới.

Chúng tôi nhập:

./hello

ls -l trong cửa sổ đầu cuối.

Tìm các liên kết tượng trưng bị hỏng

Hầu hết các phiên bản tìm kiếm hiện đại đều có tùy chọn xtype (loại mở rộng), giúp tìm các liên kết tượng trưng bị hỏng dễ dàng hơn. Chúng ta sẽ sử dụng cờ lz xtype để yêu cầu nó tìm liên kết. Sử dụng find và xtype như sau, không có bất kỳ cờ loại nào khác, buộc xtype trả về các liên kết bị hỏng:

find . -xtype l

tìm -xtype l trong cửa sổ đầu cuối.

Chạy lệnh trong thư mục chính thử nghiệm của chúng tôi sẽ tìm thấy một số liên kết tượng trưng bị hỏng. Lưu ý rằng tìm kiếm theo mặc định là đệ quy, vì vậy nó sẽ tự động tìm kiếm tất cả các thư mục con.

Đúng như dự đoán, liên kết tượng trưng “xin chào” đã được liệt kê mà chúng tôi đã cố tình phá vỡ. Một trong những liên kết tượng trưng khác có liên quan đến Firefox và những liên kết khác có liên quan đến việc chụp nhanh.

Nếu chúng tôi xuất qua wc với tùy chọn -l (dòng), chúng tôi có thể đếm các dòng, giống như đếm các liên kết tượng trưng bị hỏng.

Chúng tôi nhập:

find . -xtype l | wc -l

tìm thấy.  -xtype l |  wc -l trong cửa sổ đầu cuối.

Chúng tôi đã được thông báo rằng chúng tôi có 24 liên kết tượng trưng bị hỏng không dẫn đến điều gì.

Tìm, xem lại, sau đó Xóa

Trước khi bạn vội vàng xóa tất cả các liên kết tượng trưng bị hỏng, hãy xem lại kết quả của lệnh find. Kiểm tra xem có lý do hợp lệ nào cho bất kỳ liên kết tượng trưng nào bị hỏng không.

Đôi khi, liên kết tượng trưng chứ không phải tệp đích có thể là vấn đề. Nếu liên kết tượng trưng được tạo không chính xác, nó có thể không trỏ đến bất kỳ thứ gì, nhưng mục tiêu thực tế thì có mặt. Trong trường hợp này, cách khắc phục là tạo lại liên kết tượng trưng.

Cũng có thể một liên kết tượng trưng rõ ràng bị hỏng đang được sử dụng như một thứ khác, chẳng hạn như chỉ báo khóa tệp hoặc một số chỉ báo vượt qua/không vượt qua khác. Firefox làm điều đó; đây là liên kết tượng trưng đầu tiên trong danh sách của chúng tôi. Tuy nhiên, Firefox không được sử dụng trên máy thử nghiệm của chúng tôi, vì vậy chúng tôi có thể gỡ bỏ nó một cách an toàn.

Cũng có thể mục tiêu chỉ xuất hiện không liên tục và đây là hành vi được mong đợi (và mong muốn) của phần mềm cụ thể này. Có lẽ tệp mục tiêu được sao chép từ một máy hoặc đám mây khác, thực hiện công việc của nó, sau đó lại bị xóa và chỉ được thay thế bằng một chương trình khác trong chu kỳ tiếp theo.

Liên kết tượng trưng bị hỏng cũng có thể là dấu hiệu của lỗi cài đặt phần mềm. Trong trường hợp này, thay vì xóa liên kết tượng trưng, ​​bạn nên sửa nó theo cách thủ công hoặc lặp lại cài đặt.

Khi bạn đã sửa các liên kết bị hỏng mà bạn cần giữ lại, hãy lặp lại lệnh để thực hiện tìm kiếm. Khi đó, các liên kết tượng trưng vĩnh viễn sẽ không có trong kết quả tìm kiếm.

Vì lý do bảo mật, tốt nhất là hạn chế loại bỏ liên kết tượng trưng đối với các thư mục của riêng bạn. Hãy thật cẩn thận khi chạy các lệnh này với quyền root hoặc trong các thư mục hệ thống.

Loại bỏ các liên kết tượng trưng bị hỏng

Tùy chọn -exec (thực thi) chạy các lệnh trong kết quả tìm kiếm. Chúng tôi sẽ sử dụng rm để xóa mọi liên kết tượng trưng bị hỏng. {} được thay thế bằng tên của mỗi liên kết tượng trưng bị hỏng khi mỗi liên kết được phát hiện bằng cách tìm.

Chúng ta cần sử dụng dấu chấm phẩy (;) để kết thúc danh sách các lệnh mà chúng ta muốn chạy -exec. Chúng tôi sẽ sử dụng dấu gạch chéo ngược () để “thoát” dấu chấm phẩy, do đó, nó được coi là một phần của lệnh tìm kiếm, không phải là thứ mà Bash nên thực hiện.

Chúng tôi nhập:

find . -xtype l -exec rm {} ;

tìm thấy.  -xtype l -exec rm {};  trong cửa sổ đầu cuối.

Chúng tôi quay lại dòng lệnh mà không có dấu hiệu nào cho thấy đã có chuyện gì xảy ra. Để xác minh rằng các liên kết bị hỏng đã bị xóa, chúng tôi lặp lại lệnh để tìm kiếm chúng như sau:

find . -xtype l

tìm thấy.  -xtype l trong cửa sổ đầu cuối.

Không có kết quả phù hợp, có nghĩa là các liên kết tượng trưng bị hỏng đã bị xóa.

Hãy chắc chắn để duyệt đầu tiên

Một lần nữa, hãy luôn dành thời gian để xem qua danh sách các liên kết tượng trưng trước khi chạy lệnh để loại bỏ chúng. Bạn có thể tránh xóa bất kỳ thứ gì mà bạn không chắc chắn bằng cách chạy lệnh xóa chúng trong các thư mục thích hợp.

Ví dụ ở trên, chúng ta có thể chạy lệnh trong thư mục “.snap” và sau đó xóa liên kết tượng trưng “xin chào” theo cách thủ công. Điều này sẽ không ảnh hưởng đến liên kết tượng trưng khóa Firefox.