Bagaimana saya bisa menggunakan sudo untuk memeriksa apakah ada file?

13

Saya ingin memeriksa apakah ada file seperti itu

[ -f /path/to/file/ ]

Namun saya menjalankan perintah ini sebagai pengguna biasa dan file tersebut dimiliki oleh root. Bagaimana saya bisa menggunakan sudo untuk mencapai ini.

sudo [ -f /path/to/file/ ] tidak bekerja.

ckliborn
sumber
2
Itu bekerja pada sistem saya. Apa gejalanya? Anda yakin ingin menggunakan -f, bukan -e?
b0fh

Jawaban:

11

Apa yang Anda gambarkan harus berfungsi dengan baik - selama Anda menggunakan jalur absolut, dan -f("File ada dan merupakan file biasa") benar-benar tes yang ingin Anda lakukan.

Saya melihat jejak /di dalam apa yang Anda posting di pertanyaan Anda - Apakah Anda menguji direktori? Itu seharusnya -d, atau hanya -e("Ada sesuatu dengan nama itu - terlepas dari jenis")

Juga perhatikan bahwa kecuali sesuatu di sepanjang jalan tidak dapat dibaca test( [) harus dapat memberi tahu Anda jika file yang dimiliki oleh root ada atau tidak (misalnya [ -f /root/.ssh/known_hosts ]mungkin akan gagal, karena direktori /root/.ssh tidak (atau setidaknya tidak seharusnya dapat dibaca oleh pengguna normal. [ -f /etc/crontab ]harus berhasil).

voretaq7
sumber
4
Ada masalah yang mungkin terjadi: jika sudoperintah gagal (kata sandi salah, tidak diizinkan di / etc / sudoers, dll), itu akan memberikan hasil yang sama seperti jika file tidak ada.
Gordon Davisson
1
@ Gordon - benar: Jawaban saya didasarkan pada sudobagian yang bekerja :)
voretaq7
13
if sudo test -f "/path/to/file"; then
    echo "FILE EXISTS"
else
    echo "FILE DOESN'T EXIST"
fi

halaman uji manual

Untuk menyelesaikan hal-hal, di sisi yang berlawanan, jika Anda ingin memeriksa dari root jika file atau direktori dapat dibaca untuk pengguna tertentu, Anda dapat menggunakan

if sudo -u username test -f "/path/to/file"; then
    echo "FILE EXISTS"
else
    echo "FILE DOESN'T EXIST"
fi
Luca Borrione
sumber
Jawaban Luca Borrione cocok untuk saya. Saya perlu menguji keberadaan file yang jauh di dalam direktori yang hanya dapat dibaca oleh root.
wallheater
1

Menambah jawaban lain, membedakan antara pengujian atau kegagalan otentikasi sudo dapat dilakukan dengan terlebih dahulu menjalankan sudo true. Sebagian besar implementasi sudo yang saya tahu tidak akan memerlukan otentikasi ulang dalam waktu singkat.

Sebagai contoh:

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
Robrecht Dewaele
sumber