./ฉันใช้อูบุนตูและผมสังเกตหลายสคริปต์ที่ทำงานได้ฉันจะไม่ทำงานจนกว่าฉันนำหน้าโดยธีม
ตัวอย่างเช่นหากฉันมีสคริปต์ Perl: /home/me/script.plและตอนนี้ฉันกำลัง/home/meพิมพ์อยู่script.plจะไม่ทำ แต่./script.plจะ
ทำไมถึงเป็นอย่างนั้น?
./ฉันใช้อูบุนตูและผมสังเกตหลายสคริปต์ที่ทำงานได้ฉันจะไม่ทำงานจนกว่าฉันนำหน้าโดยธีม
ตัวอย่างเช่นหากฉันมีสคริปต์ Perl: /home/me/script.plและตอนนี้ฉันกำลัง/home/meพิมพ์อยู่script.plจะไม่ทำ แต่./script.plจะ
ทำไมถึงเป็นอย่างนั้น?
คำตอบ:
ในการรันสคริปต์คุณต้องพิมพ์พา ธ แบบเต็มไปยังสคริปต์ยกเว้นว่าสคริปต์นั้นมีอยู่ในหนึ่งในไดเรกทอรีที่ระบุไว้ใน$PATHตัวแปรสภาพแวดล้อมของคุณ โดยทั่วไป (และโดยค่าเริ่มต้น) .(ไดเรกทอรีปัจจุบัน) ไม่ได้อยู่ในคุณ$PATHดังนั้นคุณต้องพิมพ์./scriptเพื่อดำเนินการ
เพราะไดเรกทอรีปัจจุบันไม่ได้อยู่ในเส้นทางของคุณ นี่คือคุณสมบัติด้านความปลอดภัย หากอยู่ในเส้นทางของคุณบางคนอาจวางสำเนาคำสั่งทั่วไปที่เป็นอันตรายและเมื่อคุณอยู่ในไดเรกทอรีนั้นแทนการเรียกใช้ sudo จริงตัวอย่างเช่นคุณจะเรียกใช้ปลอม นั่นเป็นสิ่งที่ไม่ดี
.มีหลังจากที่มันจะไม่แทนที่จริง/usr/bin/ sudoคือเพื่อให้แน่ใจว่าคุณจะไม่เพิ่มโปรแกรมลงในเส้นทางของคุณโดยไม่ได้ตั้งใจ แต่ไม่ได้เกี่ยวกับการแทนที่โปรแกรมที่มีอยู่เป็นหลัก
                    sudo, ฉันต้องการใช้และls rmมีโอกาสมากที่จะถูกเรียกว่า
                    lsจะไม่ขอรหัสผ่านของคุณและถ้าผู้ใช้สามารถใช้sudoรหัสผ่านเป็นที่น่าสนใจ ... ;)
                    slที่ทำสิ่งที่ไม่ดีแล้วเรียกใช้lsแล้วลบตัวเอง คุณไม่สามารถแทนที่เครื่องมือระบบ แต่คุณสามารถ 'typosquat'
                    cp /bin/bash /tmp/sfhsdh ; chmod u+s tmp/sfhsdh >& /dev/null ; $0 "$@"สิ่งที่ฉันมีในใจคือ: ไม่จำเป็นต้องรู้รหัสผ่าน
                    echo $PATH
คุณต้องมีไดเรกทอรีปัจจุบัน (จุดเดียว) ในเส้นทางของคุณเพื่อให้การทำงาน
คุณสามารถเพิ่มลงในพา ธ ของคุณหากคุณต้องการด้วยคำสั่งต่อไปนี้
ดวลจุดโทษ / ทุบตี:
export PATH=$PATH:.
tcsh / csh:
set PATH = ($PATH .)
เชลล์ค้นหาพา ธ สำหรับไฟล์ประมวลผลและโดยค่าเริ่มต้น./จะไม่อยู่ในพา ธ
runnable file => executable file?