ไฟล์โปรแกรมมีอยู่ใน / usr / bin แต่ไม่สามารถใช้งานได้


15

เห็นได้ชัดว่าไฟล์ของฉันมีอยู่ใน /usr/bin

$ ls /usr/bin/ngrok
/usr/bin/ngrok

อย่างไรก็ตามเมื่อฉันพยายามchownฉันได้รับข้อผิดพลาด

$ sudo chown my_user:users /usr/bin/ngrok
chown: cannot dereference '/usr/bin/ngrok': No such file or directory

ความพยายามเพิ่มเติมในการเรียกใช้ยังล้มเหลว!

$ ngrok
bash: ngrok: command not found
$ sudo /usr/bin/ngrok
sudo: /usr/bin/ngrok: command not found

เกิดอะไรขึ้นที่นี่


จุดที่สามอาจเกิดขึ้นได้เช่นกันหาก '/ usr / bin /' ไม่ได้อยู่ใน PATH ของคุณ คุณควรจะได้ทดสอบกับที่จะเป็นสมมาตรสมบูรณ์ของกรณีต่อไปนี้ด้วย/usr/bin/ngrok sudo
Patrick Mevzek

คำตอบ:


52

/usr/bin/ngrokจะเป็น symlink ที่ชี้ไปที่ไหนเลย (หรือมากกว่าไฟล์ที่ไม่มีอยู่) ls -lตรวจสอบกับ


13
ข้อผิดพลาด "ไม่สามารถปฏิเสธได้" เป็นของแถมที่นี่ คุณไม่ได้ "อ้างอิง" ไฟล์ปกติคุณเปิด
เควิน

1
หรือreadlink -f /usr/bin/ngrokเพื่อค้นหาลิงก์ควรชี้ไปที่ใด
Eric Duminil

หรือnamei -l /usr/bin/ngrok
hanshenrik

4

เมื่อพิจารณาถึงchownข้อผิดพลาดความเป็นไปได้ที่เป็นไปได้มากที่สุดคือมันเป็น symlink ตามคำตอบของ Svenคำตอบจากสเวนอย่างไรก็ตามสำหรับการอ้างอิงในกรณีที่ใครบางคนจบลงที่นี่สำหรับกรณีที่มีไฟล์อยู่และไม่ใช่ลิงก์ แต่ให้ข้อผิดพลาดที่ไม่พบ / ไม่พบไฟล์มีความเป็นไปได้อีกอย่างหนึ่งคือความสามารถในการปฏิบัติการเชื่อมโยงแบบไดนามิกและ ด้วยเหตุผลบางอย่างมันไม่สามารถโหลดไลบรารี่ได้:

  • ห้องสมุดที่ขาดหายไป (เรียกใช้ lddบนไบนารีเพื่อดูเหล่านั้น)
  • ตัวโหลดขาดหายไป
  • AppArmorปฏิเสธการเข้าถึงไลบรารีหรือตัวโหลด
  • ...

นอกจากนี้สำหรับสคริปต์หากล่ามใน shebang ไม่สามารถดำเนินการด้วยเหตุผลที่คล้ายกันคุณจะได้รับข้อผิดพลาดเดียวกัน


ยิ่งทำให้สับสนมากขึ้นสิ่งนี้อาจส่งผลให้เกิดปริศนา "ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว"
rackandboneman

0

คุณยังมีตัวเลือกในการเปลี่ยนความเป็นเจ้าของ symlink ด้วย

chown -h my_user:users /usr/bin/ngrok

หากคุณไม่ต้องการ (หรือมีสิทธิ์) ในการเปลี่ยนความเป็นเจ้าของไฟล์เป้าหมาย


2
ฉันไม่แน่ใจว่าสิ่งนี้ตอบคำถามได้อย่างไร - คำถามคือ "เกิดอะไรขึ้นที่นี่" และปัญหาคือไฟล์เป้าหมายไม่มีอยู่ นี่ไม่ได้แก้ปัญหาและไม่ตอบคำถาม
wizzwizz4

1
@ wizzwizz4 ฉันคิดว่าคุณสามารถตีความคำถามว่า "ไฟล์นั้นมีอยู่ (symlink เป็นไฟล์) ทำไมมันบอกฉันเป็นอย่างอื่นและทำไมฉันไม่สามารถเปลี่ยนความเป็นเจ้าของได้หรือไม่" คำตอบนี้ครอบคลุมการตีความนั้น Sven เป็นเพียงสมมติ (อาจถูกต้อง) OP ต้องการทำงานกับไฟล์เป้าหมาย
JoL

1
@muru นี้ไม่สามารถใช้ได้กับระบบ Linux ซึ่งไม่มีสิทธิ์สำหรับ symlink ที่จริงแล้วลินุกซ์เป็นหนึ่งในไม่กี่คน (เป็นคนเดียว?) ของระบบปฏิบัติการ POSIX ครอบครัวที่ไม่ได้มีความสามารถในการเป็นเจ้าของชุด symlink / กลุ่ม ดูลินุกซ์หน้าคนchown(1) เหตุผลที่เป็นไปได้นี้จะทำสิ่งที่ลินุกซ์พูดคุยกันที่unix.stackexchange.com/questions/33180/…
Andrew Henle

2
@AndrewHenle และช่วยได้อย่างไร การเปลี่ยนเจ้าของ / กลุ่มสำหรับ symlink ไม่แตกต่างกันที่นี่เนื่องจากสิทธิ์ที่ใช้เมื่อเรียกใช้งานจะเป็นไฟล์เป้าหมายเสมอ ดังนั้นคุณสามารถมีลิงค์เป็นของใครก็ได้ แต่การเปลี่ยนความเป็นเจ้าของในลิงค์นั้นไม่ได้มีความแตกต่างอย่างสิ้นเชิงกับสิทธิ์ที่พิจารณาเมื่อดำเนินการ
muru

1
@muru และนั่นช่วยได้อย่างไร อ่านคำถามที่ฉันได้ทำการเชื่อมโยงไปแล้วเนื่องจากมันถามเป็นพิเศษ: "ใน linux เป็นไปได้ที่จะเปลี่ยนเจ้าของหรือเจ้าของกลุ่มของสัญลักษณ์ลิงค์ (symlink) ฉันสงสัยว่าทำไมบางคนต้องการทำเช่นนั้นเนื่องจากสิทธิ์ของ symlink ไม่ใช่ ใช้เมื่อเข้าถึงไฟล์ผ่านมัน "
Andrew Henle
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.