Bir dosyanın olup olmadığını kontrol etmek için sudo'yu nasıl kullanabilirim?


13

Bir dosyanın böyle olup olmadığını kontrol etmek istiyorum

[ -f /path/to/file/ ]

Ancak bu komutu normal bir kullanıcı olarak çalıştırıyorum ve dosya kök aittir. Bunu başarmak için sudo'yu nasıl kullanabilirim?

sudo [ -f /path/to/file/ ] çalışmıyor.


2
Sistemim üzerinde çalışıyor. Semptomlar neler ? -E'yi değil, -f'yi kullanmak istediğinizden emin misiniz?
b0fh

Yanıtlar:


11

Açıkladığınız şey iyi çalışmalıdır - mutlak yollar kullandığınız sürece ve -f("Dosya var ve normal bir dosyadır") gerçekten yapmak istediğiniz testtir.

Sorunuzda /yayınladığınız öğenin sonunda bir iz görüyorum - Bir dizini test ediyor musunuz? Bu -dya da basitçe olmalıdır -e("Tür ne olursa olsun bu adda bir şeyler var")

Ayrıca yol boyunca bir şey okunabilir değil sürece dikkat test( [) kök ait bir dosya var ya da değil (örneğin eğer söylemek gerekir [ -f /root/.ssh/known_hosts ]/root/.ssh dizin en az değildir (ya çünkü muhtemelen başarısız olacaktır olmamalı ' ) normal bir kullanıcı tarafından okunabilir [ -f /etc/crontab ]olmalıdır.


4
Olası bir sorun var: sudokomut başarısız olursa (kötü şifre, / etc / sudoers, vb. Dosyalarda izin verilmez), dosya bulunmamış gibi aynı sonucu verir.
Gordon Davisson

1
@Gordon - true: Cevabım sudoçalışan porsiyona bağlı :)
voretaq7

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

test adam sayfası

Bir şeyleri tamamlamak için, karşı tarafta, bir dosya veya dizinin belirli bir kullanıcı için okunabilir olup olmadığını kökten kontrol etmek istiyorsanız kullanabilirsiniz

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

Luca Borrione'nin yanıtı benim için mükemmel çalıştı. Sadece kök tarafından okunabilir dizinler içinde derin dosyaların varlığını test etmek gerekiyordu.
wallheater

1

Diğer cevaplara ekleme, test veya sudo kimlik doğrulama başarısızlığı arasındaki fark ilk çalıştırma ile yapılabilir sudo true. Bildiğim sudo uygulamalarının çoğu kısa bir süre içinde yeniden kimlik doğrulaması gerektirmeyecek.

Örneğin:

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.