ลิงก์สัญลักษณ์และ sudo


10

ฉันสร้างลิงค์สัญลักษณ์:

ln -s /tmp/folder1 /tmp/folder2

จากนั้นฉันไปที่ / tmp / folder2 และเรียกใช้pwd:

$ cd /tmp/folder2/
$ pwd
/tmp/folder2
$ sudo pwd
/tmp/folder1 # <-- This is the odd part

ทำไมpwdมีsudoให้ไดเรกทอรีเดิม? ฉันกำลังเขียนสคริปต์ทุบตีและต้องการเส้นทางที่แน่นอนของไดเรกทอรีปัจจุบัน ด้วย sudo ฉันไม่สามารถรับไดเรกทอรีดั้งเดิมได้


เป้าหมายของคุณคือให้ pwd ส่งคืนฟิสิคัล (/ tmp / folder1) พา ธ หรือโลจิคัล (/ tmp / folder2) พา ธ สำหรับทั้งคู่หรือไม่
user9517

เป้าหมายคือส่งคืนโลจิคัลพา ธ เมื่อใช้ sudo
iDev247

คำตอบ:


14

pwdคำสั่งเป็นทั้งเปลือก builtin และ / bin / รหัสผ่าน ภายใต้สถานการณ์ปกติ builtin จะถูกเรียกใช้ในการตั้งค่า / bin / pwd คำสั่ง pwd สามารถถูกเรียกใช้เป็นpwd -Lหรือpwd -Pทั้งสองเป็นค่าเริ่มต้น builtin และ / bin / pwd pwd -Lจากหน้า man

-L, - ใช้ PWD เชิงตรรกะจากสภาพแวดล้อมแม้ว่าจะมี symlinks

ดังนั้นเมื่อคุณเรียกใช้ pwd คุณจะเรียกใช้ pwd -L ซึ่งมีผลต่อการพิมพ์ $ PWD (ถ้ามี) เมื่อคุณเรียกใช้sudo pwdsudo จะจัดเตรียมตัวแปรสภาพแวดล้อมที่ได้รับคำสั่งให้ส่งผ่านenv_keepคำสั่งเท่านั้น PWD ไม่ปกติในรายการนี้ดังนั้น sudo pwd ต้องหาว่ามันอยู่ที่ไหนและมีผลอย่างไรpwd -P

-P, - หลีกเลี่ยงการเชื่อมโยงทางกายภาพทั้งหมด

วิธีการแก้ปัญหาคือการใช้pwd -Pหากคุณต้องการเส้นทางไดเรกทอรีทางกายภาพหรือ (ตามที่ @Felix พูดว่า) เพื่อเพิ่ม PWD ลงในรายการตัวแปรสภาพแวดล้อมเพื่อให้ผ่านคำสั่ง env_keep ใน sudoers

env_keep += "PWD"  

Works! หลังจากเพิ่ม PWD ไปยัง env_keep ฉันต้องทำsudo pwd -Lเพื่อให้ได้เส้นทางโลจิคัล sudo pwdส่งคืนเส้นทางกายภาพ
iDev247

6

ในทุบตีpwdคือ builtin /bin/pwdให้ผลเช่นเดียวกับsudo pwdอัตราผลตอบแทนมีลักษณะเดียวกันกับ

คุณจะต้องการ

  1. ใช้ sudo pwd -Lซึ่งใช้ได้ผลถ้าคุณ
  2. รวมDefaults env_keep=PWDไว้ในsudoersไฟล์ของคุณ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.