Làm thế nào tôi có thể sử dụng sudo để kiểm tra nếu một tập tin tồn tại?


13

Tôi muốn kiểm tra nếu một tập tin tồn tại như vậy

[ -f /path/to/file/ ]

Tuy nhiên tôi đang chạy lệnh này như một người dùng thông thường và tệp được sở hữu bởi root. Làm thế nào tôi có thể sử dụng sudo để thực hiện điều này.

sudo [ -f /path/to/file/ ] không hoạt động.


2
Nó không hoạt động trên hệ thống của tôi. Các triệu chứng như thế nào ? Bạn có chắc chắn muốn sử dụng -f, không -e?
b0fh

Câu trả lời:


11

Những gì bạn mô tả sẽ hoạt động tốt - miễn là bạn đang sử dụng các đường dẫn tuyệt đối và -f ("Tệp tồn tại và là một tệp thông thường") thực sự là thử nghiệm bạn muốn thực hiện.

Tôi thấy một dấu vết /trong những gì bạn đã đăng trong câu hỏi của bạn - Bạn đang thử nghiệm cho một thư mục? Điều đó nên -d, hoặc đơn giản -e("Một cái gì đó tồn tại với tên đó - bất kể loại nào")

Cũng lưu ý rằng trừ khi một cái gì đó trên đường đi là không thể đọc được test( [) sẽ có thể cho bạn biết nếu một tập tin sở hữu bởi root tồn tại hay không (ví dụ như [ -f /root/.ssh/known_hosts ]có thể sẽ thất bại, vì thư mục /root/.ssh không (hoặc ít nhất shouldn Người dùng bình thường có thể đọc được. [ -f /etc/crontab ]nên thành công).


4
Có một vấn đề có thể xảy ra: nếu sudolệnh thất bại (mật khẩu xấu, không được phép trong / etc / sudoers, v.v.), nó sẽ cho kết quả tương tự như khi tệp không tồn tại.
Gordon Davisson

1
@Gordon - true: Câu trả lời của tôi được xác định dựa trên sudophần làm việc :)
voretaq7

13
if sudo test -f "/path/to/file"; then
    echo "FILE EXISTS"
else
    echo "FILE DOESN'T EXIST"
fi

trang thử nghiệm

Để hoàn thành mọi thứ, ở phía đối diện, nếu bạn muốn kiểm tra từ root nếu một tập tin hoặc thư mục có thể đọc được cho một người dùng nhất định, bạn có thể sử dụng

if sudo -u username test -f "/path/to/file"; then
    echo "FILE EXISTS"
else
    echo "FILE DOESN'T EXIST"
fi

Câu trả lời của Luca Borrione đã làm việc hoàn hảo cho tôi. Tôi cần kiểm tra sự tồn tại của các tập tin nằm sâu bên trong các thư mục chỉ có thể đọc được bằng root.
wallheater

1

Thêm vào các câu trả lời khác, việc phân biệt giữa kiểm tra hoặc xác thực không thành công có thể được thực hiện bằng cách chạy đầu tiên sudo true . Hầu hết các triển khai sudo mà tôi biết sẽ không yêu cầu xác thực lại trong một khoảng thời gian ngắn.

Ví dụ:

if sudo true; then
    if sudo test -f "/path/to/file"; then
        echo "FILE EXISTS"
    else
        echo "FILE DOESN'T EXIST"
    fi
else
    echo "SUDO AUTHENTICATION FAILED"
fi
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.