ฉันต้องการตรวจสอบว่ามีไฟล์อยู่หรือไม่
[ -f /path/to/file/ ]
อย่างไรก็ตามฉันใช้คำสั่งนี้ในฐานะผู้ใช้ทั่วไปและไฟล์เป็นของ root ฉันจะใช้ sudo เพื่อทำสิ่งนี้ได้อย่างไร
sudo [ -f /path/to/file/ ]
ไม่ทำงาน, ไม่เป็นผล.
ฉันต้องการตรวจสอบว่ามีไฟล์อยู่หรือไม่
[ -f /path/to/file/ ]
อย่างไรก็ตามฉันใช้คำสั่งนี้ในฐานะผู้ใช้ทั่วไปและไฟล์เป็นของ root ฉันจะใช้ sudo เพื่อทำสิ่งนี้ได้อย่างไร
sudo [ -f /path/to/file/ ]
ไม่ทำงาน, ไม่เป็นผล.
คำตอบ:
สิ่งที่คุณอธิบายควรใช้งานได้ดี - ตราบใดที่คุณใช้พา ธ สัมบูรณ์และ-f
("ไฟล์มีอยู่และเป็นไฟล์ปกติ") เป็นการทดสอบที่คุณต้องการทำจริงๆ
ฉันเห็นส่วนต่อท้าย/
ในสิ่งที่คุณโพสต์ในคำถามของคุณ - คุณกำลังทดสอบไดเรกทอรีหรือไม่ ที่ควรจะเป็น-d
หรือเพียงแค่-e
("มีบางอย่างที่มีชื่อนั้น - ไม่คำนึงถึงประเภท")
นอกจากนี้โปรดทราบว่าหากบางสิ่งระหว่างทางไม่สามารถอ่านได้test
( [
) ควรจะสามารถบอกคุณได้ว่ามีไฟล์ของ root อยู่หรือไม่ (เช่น[ -f /root/.ssh/known_hosts ]
อาจจะล้มเหลวเนื่องจากไดเรกทอรี /root/.ssh ไม่ได้ (หรืออย่างน้อยควรจะเป็น) ไม่สามารถอ่านได้โดยผู้ใช้ปกติ [ -f /etc/crontab ]
ควรจะสำเร็จ)
sudo
คำสั่งล้มเหลว (รหัสผ่านไม่ดี, ไม่ได้รับอนุญาตใน / etc / sudoers ฯลฯ ) มันจะให้ผลลัพธ์แบบเดียวกับที่ไฟล์นั้นไม่มีอยู่
sudo
การทำงานส่วน :)
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
การเพิ่มคำตอบอื่น ๆ , ความแตกต่างระหว่างการทดสอบหรือ 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