touch: ไม่สามารถสัมผัส `foo ': ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว


21

สิ่งที่อาจทำให้เกิดการสัมผัสล้มเหลวพร้อมกับข้อความแสดงข้อผิดพลาดนี้?

touch: cannot touch `foo': No such file or directory

โปรดทราบว่าข้อผิดพลาดเนื่องจากการอนุญาตที่ไม่ถูกต้องมีลักษณะแตกต่างกัน:

touch: cannot touch `foo': Permission denied

คำตอบ:


21

ลำดับต่อไปนี้ทำให้เกิดข้อผิดพลาดนี้:

$ mkdir foo
$ cd foo

ในเทอร์มินัลอื่น:

$ rm -r foo

ในเทอร์มินัลก่อนหน้า:

$ touch x
touch: cannot touch `x': No such file or directory

แน่นอนว่าเหตุการณ์อื่น ๆ ที่ทำให้ไดเรกทอรีการทำงานปัจจุบัน (CWD) ของกระบวนการที่พยายามสร้างไฟล์นั้นมีผลทำให้ข้อความแสดงข้อผิดพลาดนี้เสียหาย


2
ในกรณีของฉันมันเกิดขึ้นเนื่องจากจุดเมานต์ GlusterFS ที่กำหนดค่าผิดพลาด แต่ฉันอยากรู้เกี่ยวกับกรณีทั่วไปที่จะทำให้สิ่งนี้เกิดขึ้น คำถามประเภทนี้เป็นปัญหาการบ้านในชั้นเรียนจริงหรือ
Lorin Hochstein

3
กรณีทั่วไปคือไดเรกทอรีปัจจุบันที่ไม่มีอยู่ นอกเหนือจากที่ถูกลบไปแล้วในตัวอย่างของ maxschlepzig สิ่งนี้สามารถเกิดขึ้นได้ในสถานการณ์แปลก ๆ เช่นระบบไฟล์ที่ทำงานผิดปกติ (กรณีของคุณ) หรืออาจเป็นกลไกความปลอดภัยอย่าง SELinux ที่ทำให้ไดเรกทอรีมองไม่เห็น (ฉันไม่รู้ว่า SELinux สามารถผลิตได้จริงหรือ ผลกระทบนี้)
Gilles 'หยุดชั่วร้าย'

@llorin: ในหลักสูตรแนะนำ Unix ในมหาวิทยาลัยเราถามคำถามแบบนั้นเป็นส่วนหนึ่งของการบ้าน (เนื่องจากปัญหาของ NFS อาจปรากฏในข้อความแสดงข้อผิดพลาดที่คล้ายกัน) เพียงแค่ได้ถามจากความอยากรู้ ...
maxschlepzig

3
ในคำตอบเดิมไม่จำเป็นต้องมีเทอร์มินัลอื่น: rmdir ../fooในเทอร์มินัลเดียวกันควรใช้งานได้ เป็นไปได้อีกโดยไม่ต้องทำงานไม่ ln -s directory-that-doesnt-exist/foo foo; touch foofilesystems:
ephemient

ฉันรู้สึกว่าคุณควรแก้ไข "หืมคำถามการบ้าน?" จากคำตอบ .... มันน่ารังเกียจอย่างมาก ฉันอยู่ที่หน้านี้เพราะสิ่งนี้เกิดขึ้นจริงในคอมพิวเตอร์ของฉัน แต่คำตอบนี้ไม่ได้แก้ปัญหาเลย มันเป็นปัญหาของ NFS ที่การรีบูตเครื่องได้รับการแก้ไข แต่ฉันต้องการสาเหตุที่สำคัญ
codetaku

4

สำหรับฉันแล้วฉันพยายามเขียนถึง symlink ที่ชี้ไปยังไฟล์ที่ไม่มีอยู่อีกต่อไป:

$ ln -s ~/doomed/file ~/mysymlink
$ rm ~/doomed/file
$ touch ~/mysymlink
$ touch: cannot touch `mysymlink': No such file or directory

นั่นมัน !! รู้สึกโง่ตอนนี้! เพียงแค่ทำ "ls -la" ในไดเรกทอรีไฟล์ควรจะแสดงทันที มันคือ "resolv.conf" ซึ่งชี้ไปยังสถานที่เนื่องจากการอัปเดตที่ล้มเหลวไม่ได้อยู่ที่นั่น ..
stolsvik

1

อีกวิธีที่ง่ายกว่าในการทริกเกอร์ข้อความ:

$ mkdir foo
$ touch foo/bar/baz.txt
touch: cannot touch 'foo/bar/baz.txt': No such file or directory

โดยทั่วไปพยายามสร้างไฟล์ในโฟลเดอร์ที่ไม่มีอยู่จริง


0

บางทีนี่อาจช่วยคนในอนาคต:

git rmผมได้รับปัญหาเดียวกันนี้เมื่อฉันออกเฉพาะไฟล์ที่มีอยู่ในโฟลเดอร์ของฉันด้วย คอมไพล์จึงลบโฟลเดอร์ที่ฉันเป็นอยู่และความพยายามใด ๆ ในการสร้างไฟล์จะทำให้เกิดข้อผิดพลาดนี้เนื่องจากโฟลเดอร์นั้นไม่มีอยู่อีกต่อไป ดังนั้นฉันต้องสร้างโฟลเดอร์ใหม่ด้วยตนเองเข้าไปในนั้นและรันtouchคำสั่งได้สำเร็จ

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