Cách kiểm tra nếu / Proc / được gắn kết


7

Làm thế nào tôi có thể kiểm tra nếu / Proc / được gắn kết?

  • Sử dụng / etc / mtab không được khuyến khích vì nó có thể không nhất quán.

  • Sử dụng / Proc / mounts cũng không phải là một tùy chọn vì có thể không tồn tại nếu / Proc / không được gắn kết (mặc dù việc kiểm tra sự tồn tại của nó có thể là một cách để thực hiện kiểm tra này.

Cách tốt nhất để làm kiểm tra này là gì?

Câu trả lời:


8

Bạn có thể chạy mountmà không có bất kỳ đối số nào để có được danh sách các mount hiện tại. Các /etc/mtabtập tin nên có dữ liệu tương tự, nhưng như bạn nói nó có thể cho điều này không phù hợp với những gì đang thực sự gắn kết trong trường hợp các /etchệ thống tập tin là điều sai lầm, không ghi được, hoặc một chương trình khác đã sai lầm với nó. Bạn có thể nhận thông tin cụ thể về các giá treo bằng cách yêu cầu mountliệt kê tất cả các loại gắn kết procnhư thế này:

mount -l -t proc

Chỉnh sửa: Có vẻ như bạn có thể sử dụng statđể so sánh thiết bị của /procthư mục với thiết bị /để nói ít nhất nếu SOMETHING được gắn ở đó ngoài hệ thống tệp gốc:

[[ $(stat -c %d%D /proc) != $(stat -c %d%D /) ]] && echo "Something is mounted at /proc"

Đây thực sự là một cách để làm điều đó. Rủi ro ở đây là việc chạy lệnh mount có thể bị kẹt trên các mount khác nhau có vấn đề như các cổ phiếu NFS / CIFS bị ngắt kết nối.
freddie

1
@freddie: Nó có thực sự bị kẹt nếu bạn yêu cầu nó liệt kê các kiểu gắn kết như tôi đã trình bày không? Tôi không có trường hợp nào tôi có thể kiểm tra ngay bây giờ, nhưng nếu nó được triển khai một cách dứt khoát thì tôi không hiểu tại sao nó lại bị treo khi quét trạng thái của các mount nfs nếu được yêu cầu chỉ liệt kê các mount mount. Lưu ý rằng tôi KHÔNG khuyên bạn nên chạy mount | grep procvì lý do đó.
Caleb

Tôi sẽ cần phải kiểm tra nó, nhưng tôi đồng ý, nếu nó được thực hiện đúng cách, mount -l sẽ không bị kẹt và trong trường hợp đó đây là một giải pháp tốt. Mặc dù, mount -l trả về mã trả về 0 nếu nó tìm thấy điểm gắn kết (hoặc hơn) hoặc nếu nó không tìm thấy nó. Vì vậy, việc kiểm tra phức tạp hơn bằng cách sử dụng mount -l -t Proc | wc -l và kiểm tra xem có bao nhiêu hệ thống tập tin được trả về :(
freddie

@freddie: xem chỉnh sửa của tôi cho một giải pháp khác. Ngoài ra, bạn có thể sử dụng kiểm tra chuỗi trên mount mà không cần chạy wc:[[ -n $(mount -l -t proc) ]]
Caleb

3

Kiểm tra sự tồn tại của /proc/mounts. Chạy mountlà không tốt vì nếu /prockhông được gắn kết, nó sẽ trả về dữ liệu có thể bị lỗi thời /etc.

Về lý thuyết có thể có một cái gì đó khác tại /proc. Nhưng điều này cực kỳ khó xảy ra trong thực tế: nếu /proc/mountstồn tại và /prockhông phải là prochệ thống tập tin, bạn không thể tin bất cứ điều gì về môi trường của mình. Nếu bạn thực sự lo lắng, bạn có thể kiểm tra xem loại hệ thống tệp là proc: df -PT /proc | awk 'NR==2 && $2=="proc" {print 1}'(yêu cầu các tiện ích Linux df, không có tùy chọn tương ứng trong Busybox). Ngược lại, về lý thuyết, có thể có một hệ thống tập tin Proc được gắn ở một nơi khác; không có cách nào dễ dàng để tìm thấy điều này với các lệnh shell ( dfđọc /proc/mountsđể liệt kê các hệ thống tập tin). Trong thực tế, chỉ cần kiểm tra /proc/mounts.


2

Nếu bạn muốn đảm bảo (nhiều hơn hoặc ít hơn) rằng hệ thống tập tin trên / Proc trên thực tế là Proc thay vì một số hệ thống tập tin khác hoặc cấu trúc thư mục được tạo để trông giống như nó, bạn có thể gọi statfs()và kiểm tra loại, 0x9fa0là giá trị cho Proc.


0

Có một công cụ gọi là có sẵn mountpointtrên nhiều cài đặt linux. Mã thoát là 0 nếu đối số đầu tiên là điểm gắn kết.

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.