Vì vậy, tôi thiết lập một số mã để xem tệp cấu hình cho các chỉnh sửa, hoạt động cho đến khi tôi sử dụng VIM để chỉnh sửa tệp, sau đó tôi cũng phải xem thư mục để đổi tên và tạo. Sau đó, tôi phát hiện ra rằng không bắt được đổi tên cao hơn trong hệ thống phân cấp đường dẫn. Sau đó, tôi nhìn vào symlinks ... gaaahhhh!Sử dụng INotify để xem tệp có nhiều liên kết tượng trưng
thiết lập đầu tiên một tạo thành ví dụ cho thấy một (nhiều) kịch bản liên kết tượng trưng phức tạp:
mkdir config1
touch config1/config
ln -s config1 machine1
mkdir config2
touch config2/config
ln -s config2 machine2
ln -s machine1 active
Bây giờ, cho một tên tập tin như hoạt động/config mà tôi muốn xem, tôi có thể xem làm thế nào để có được một inotify xem bộ mô tả cho:
config1/ -> watch active/ follow symlinks (watches inode for config1)
active/ -> watch active/ dont follow symlinks (watches inode for active symlink
active/config -> watch active/config (watches inode for config1/config)
Làm cách nào để thêm đồng hồ trên liên kết tượng trưng machine1? Tôi có cần phải tìm cách nào đó để tự đi từng liên kết tượng trưng để thêm đồng hồ cho mỗi đường đi không? Làm sao?
Mục đích là để cho phép:
mkdir config3
touch config3/config
ln -s -f -n config3 machine1
Và có inotify cảnh báo rằng hoạt động/config đã được chuyển hướng. Tại thời điểm này, có vẻ như tôi sẽ phải thêm đồng hồ cho:
- target file inode
- every directory inode leading to the file (to detect moves/renames of directories)
- every symlink inode involved in reaching any of the above
Phải có cách dễ dàng hơn để chỉ xem một tệp? Tôi đã lạc lối khỏi con đường hay đây thực sự là con đường?
Bạn không xem "một tệp" - bạn đang xem toàn bộ đường dẫn, tệp được bao gồm. Điều đó, cộng với 'inotify' không được đệ quy, bao gồm 2 điểm đầu tiên. Sự tồn tại của các liên kết tượng trưng bắt buộc điểm cuối cùng của bạn. – tucuxi
Có, tôi hiểu rằng INotify phải được thiết lập để xem tất cả các inode liên quan đến việc truy cập tệp quan tâm, nhưng tôi không rõ trường hợp sử dụng là gì * không * yêu cầu thực hiện những gì tôi đã mô tả? Nó phức tạp (thậm chí tôi không đề cập đến '..' và symlink), dễ dàng xoay xở (tham chiếu đếm nhiều thư mục và liên kết tượng trưng), có nhiều điều kiện chủng tộc (xem một liên kết trong khi ai đó đang thay đổi nó?), Và mọi người dường như cần nó. Nhưng không có thư viện nào làm điều đó? Huh. – Speed8ump
Với tất cả những thiếu sót của nó, inotify vẫn còn tốt hơn rất nhiều so với dnotify nó thay thế (xem, ví dụ, http://lwn.net/Articles/604686/). Đối với thiếu thư viện, bạn không đề cập đến bạn đang tìm kiếm chúng; libinotiftytools có thể đơn giản hóa công việc của bạn (nó làm syscalls cho bạn), nhưng tôi không thể tìm thấy bất cứ điều gì mà bao gồm trường hợp sử dụng chính xác của bạn. – tucuxi