ฉันจะใช้ sudo เพื่อตรวจสอบว่ามีไฟล์อยู่ได้อย่างไร?


13

ฉันต้องการตรวจสอบว่ามีไฟล์อยู่หรือไม่

[ -f /path/to/file/ ]

อย่างไรก็ตามฉันใช้คำสั่งนี้ในฐานะผู้ใช้ทั่วไปและไฟล์เป็นของ root ฉันจะใช้ sudo เพื่อทำสิ่งนี้ได้อย่างไร

sudo [ -f /path/to/file/ ] ไม่ทำงาน, ไม่เป็นผล.


2
มันทำงานบนระบบของฉัน มีอาการอะไร? คุณแน่ใจหรือไม่ว่าต้องการใช้ -f ไม่ใช่ -e
b0fh

คำตอบ:


11

สิ่งที่คุณอธิบายควรใช้งานได้ดี - ตราบใดที่คุณใช้พา ธ สัมบูรณ์และ-f("ไฟล์มีอยู่และเป็นไฟล์ปกติ") เป็นการทดสอบที่คุณต้องการทำจริงๆ

ฉันเห็นส่วนต่อท้าย/ในสิ่งที่คุณโพสต์ในคำถามของคุณ - คุณกำลังทดสอบไดเรกทอรีหรือไม่ ที่ควรจะเป็น-dหรือเพียงแค่-e("มีบางอย่างที่มีชื่อนั้น - ไม่คำนึงถึงประเภท")

นอกจากนี้โปรดทราบว่าหากบางสิ่งระหว่างทางไม่สามารถอ่านได้test( [) ควรจะสามารถบอกคุณได้ว่ามีไฟล์ของ root อยู่หรือไม่ (เช่น[ -f /root/.ssh/known_hosts ]อาจจะล้มเหลวเนื่องจากไดเรกทอรี /root/.ssh ไม่ได้ (หรืออย่างน้อยควรจะเป็น) ไม่สามารถอ่านได้โดยผู้ใช้ปกติ [ -f /etc/crontab ]ควรจะสำเร็จ)


4
มีปัญหาที่เป็นไปได้: หากsudoคำสั่งล้มเหลว (รหัสผ่านไม่ดี, ไม่ได้รับอนุญาตใน / etc / sudoers ฯลฯ ) มันจะให้ผลลัพธ์แบบเดียวกับที่ไฟล์นั้นไม่มีอยู่
Gordon Davisson

1
@Gordon - จริง: คำตอบของฉันคือการบอกกล่าวในsudoการทำงานส่วน :)
voretaq7

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

หน้าทดสอบคน

ในการทำสิ่งต่าง ๆ ให้เสร็จสมบูรณ์ในทางตรงกันข้ามถ้าคุณต้องการตรวจสอบจากรูทหากไฟล์หรือไดเรกทอรีอ่านได้สำหรับผู้ใช้บางคนคุณสามารถใช้

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

คำตอบของ Luca Borrione ทำงานได้อย่างสมบูรณ์แบบสำหรับฉัน ฉันต้องการทดสอบการมีอยู่ของไฟล์ที่อยู่ลึกเข้าไปในไดเรกทอรีที่อ่านได้โดยรูทเท่านั้น
wallheater

1

การเพิ่มคำตอบอื่น ๆ , ความแตกต่างระหว่างการทดสอบหรือ sudo sudo trueการตรวจสอบความล้มเหลวอาจทำได้โดยการทำงานครั้งแรก การใช้งาน sudo ส่วนใหญ่ที่ฉันรู้ว่าไม่จำเป็นต้องมีการตรวจสอบสิทธิ์อีกครั้งภายในระยะเวลาอันสั้น

ตัวอย่างเช่น:

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.