Làm thế nào để tôi tìm thấy các liên kết tượng trưng tròn?


12

Tôi đang làm việc trên hệ thống HP-UX và tôi muốn tìm xem có bất kỳ liên kết tượng trưng tròn nào không.

Cho đến nay tôi đang sử dụng lệnh:

ls -lrt  `find ./ -follow -type l`

Nhưng nó chỉ làm ls -lrt trên thư mục hiện tại.

Tôi nên sử dụng lệnh nào để tìm tất cả các liên kết tượng trưng tròn trong một hệ thống?


1) Bạn đang nhận được thư mục hiện tại vì findlệnh này chỉ in .hoặc không in bất cứ thứ gì (vì vậy bạn chỉ đang chạy ls -lrthoặc ls -lrt .) Không biết đủ về HP-UX findđể cho bạn biết cách khắc phục điều này (có thể nó yêu cầu rõ ràng -print? ). 2) "Thông tư" nghĩa là gì? ./a -> ./b./b -> ./a? Thế còn /home/foo/a -> /home? Hay /home/foo/a -> /home/bar/home/bar/b -> /home/foo?
DerfK

Theo thông tư tôi có nghĩa là bất kỳ loại liên kết nào có thể tạo ra một vòng lặp để tất cả các bên trên. Tôi đang thử với -print ngay bây giờ.
Vladimir

Ngoài ra, tại sao không bao gồm -followthực sự cung cấp cho tôi một số liên kết thực sự là kết quả?
Vladimir

Không có -follow, findkiểm tra chính liên kết, không phải tập tin nó trỏ đến. Vì vậy, find . -type lin những thứ là liên kết (vì chúng là -type l) mà thậm chí không nhìn thấy những gì chúng trỏ đến (đó sẽ là tệp hoặc thư mục hoặc các liên kết khác trỏ đến tệp hoặc thư mục).
DerfK

Câu trả lời:


18

Trang chủ của GNU find nói rằng tất cả các tìm kiếm POSIX được cho là phát hiện các vòng lặp của hệ thống tệp và phát ra các thông báo lỗi trong các trường hợp này và tôi đã thử nghiệm

find . -follow -printf ""

trên GNU find, có thể tìm thấy các vòng lặp của biểu mẫu ./a -> ./b./b -> ./ain lỗi

find: `./a': Too many levels of symbolic links
find: `./b': Too many levels of symbolic links

(điều này cũng làm việc trên a->b->c->a)

Tương tự, các vòng lặp của biểu mẫu ./foo/x -> .../foo/a -> ./bar+ ./bar/b -> ./fooin các lỗi

find: File system loop detected; `./foo/a/b' is part of the same file system loop as `./foo'.
find: File system loop detected; `./bar/b/a' is part of the same file system loop as `./bar'.
find: File system loop detected; `./foo/x' is part of the same file system loop as `.'.

Nếu bạn muốn làm một cái gì đó với đầu ra ngoài việc đọc nó, bạn sẽ cần chuyển hướng nó từ thiết bị xuất chuẩn sang thiết bị xuất chuẩn và chuyển nó sang một số tập lệnh có thể phân tích các thông báo lỗi.


Điều này có nghĩa là nếu có bất kỳ vòng lặp nào, một thông báo lỗi sẽ xuất hiện?
Vladimir

Với GNU tìm và -follow, vâng.
DerfK

Ok, nhưng làm thế nào mà giải thích chỉ nhận được một lsthay vì nhận được liên kết thực tế khi không sử dụng -follow?
Vladimir

1
Đó là cách vỏ hoạt động. Bạn yêu cầu nó chạy lslệnh bằng cách sử dụng đầu ra của findlệnh. findLệnh của bạn không in bất cứ thứ gì, vì vậy shell của bạn thực thi lskhông có gì, liệt kê thư mục hiện tại.
DerfK

Giải pháp của DerfK cũng tìm thấy các chu kỳ trong Windows 7 bằng cách gọi nó từ trình bao Cygwin.
Don Gateley
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.