./
ฉันใช้อูบุนตูและผมสังเกตหลายสคริปต์ที่ทำงานได้ฉันจะไม่ทำงานจนกว่าฉันนำหน้าโดยธีม
ตัวอย่างเช่นหากฉันมีสคริปต์ 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
?