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


109

ตัวอย่างเช่นฉันได้gitติดตั้งบนระบบของฉัน แต่ฉันจำไม่ได้ว่าติดตั้งไว้ที่ใดดังนั้นคำสั่งใดเหมาะสมที่จะค้นหาคำตอบนี้


45
Heh, heh " whichcommand" แน่นอน :)
Tikhon Jelvis

คำตอบ:


123

ถ้ามันอยู่ในเส้นทางของคุณแล้วคุณสามารถเรียกใช้อย่างใดอย่างหนึ่งหรือtype git คำสั่งได้มีปัญหาในการเส้นทางที่เหมาะสม (สับสนระหว่างสภาพแวดล้อมและไฟล์ dot) สำหรับคุณจะได้รับเพียงเส้นทางที่มีการโต้แย้งwhich gitwhichtype-p

ถ้ามันไม่ได้อยู่ในเส้นทางของคุณแล้วมันจะเป็นการดีที่สุดที่จะมองหามันด้วยlocate -b git มันจะพบสิ่งที่ชื่อว่า 'git' locate -b git | fgrep -w binมันจะเป็นรายการยาวดังนั้นอาจจะดีที่จะมีสิทธิ์ด้วย


10
ฉันใช้งานlocateไม่สิ้นสุด (มันเร็วมาก) แต่สำหรับผู้ที่ไม่รู้ตัวมันlocateเป็นแค่ข้อมูลล่าสุดในการอัพเดทฐานข้อมูลล่าสุดซึ่งจะทำงานโดยอัตโนมัติทุกวันบน Ubuntu ของฉัน รีเฟรชคำสั่งsudo updatedb... นอกจากนี้locateได้สร้างความสามารถในการ regex ดังนั้นคำสั่งเช่นนี้การทำงาน: locate -br "^git$"... วิธี -b` จำกัด การค้นหาเพื่อเพียงbasename ... หรือไม่มี-bจะค้นหาชื่อพา ธ เต็ม .. นอกจากนี้ จะค้นหาเฉพาะเส้นทางที่คุณกำหนดค่าให้ค้นหา .. ไม่มีการควบคุมบรรทัดคำสั่งของตัวกรอง regex อื่น ๆ
Peter.O

7
ต้องการที่จะtype ได้อย่างง่ายดายได้รับสับสน whichwhich
Gilles

@Gilles มันเป็นเรื่องตลกสำหรับฉันพฤติกรรมเป็นสิ่งที่ตรงกันข้าม: typeเป็น shell builtin ที่บอกนามแฝงและเช่นนั้นและwhichเป็นโปรแกรมภายนอกที่แสดงเส้นทางให้ฉันไปสู่การปฏิบัติการ ... แม้ว่าจะมี builtin ที่เข้ามา วิธีที่ปฏิบัติการไม่ได้ถูกเรียก
quodlibetor

@quodlibetor ปัญหาที่เกิดขึ้นwhichคือมันไม่รู้เกี่ยวกับเชลล์ในตัวและฟังก์ชั่นของเชลล์ (ซึ่งเกี่ยวข้องเมื่อคุณสงสัยว่าการพิมพ์คำสั่งจะทำอะไร) และมันใช้ระบบที่แตกต่างกัน$PATHในบางระบบ
Gilles

48

มาตรฐาน POSIXcommand -v gitวิธีที่จะทำเช่นนี้คือ ระบบเหมือน UNIX ทั้งหมดควรสนับสนุนสิ่งนี้


4
ฉันรู้ว่านี่อายุเกินหนึ่งปี แต่นี่เป็นสิ่งที่ฉันต้องการอย่างแน่นอน แปลกใจที่นี่ไม่ใช่คำตอบที่ยอมรับ
Akoi Meexx

13

whereis git และคุณได้รับเส้นทางไปยังคำสั่ง

นั่นคือถ้า git อยู่ในตัวแปร PATH ของคุณในกรณีที่คุณติดตั้งมันไม่ผ่านตัวจัดการแพคเกจของคุณมันมีความซับซ้อนมากขึ้นและคุณควรใช้findหรือlocateคำสั่ง


1
การใช้งานwhichยังได้รับการสนับสนุน
Nikhil Mulley

5
@Nikhil ค่อนข้างไม่type whichดูวิธีใช้whichกับคำสั่ง aliased
Gilles

13

คำตอบอื่น ๆ ที่นี่ดูเหมือนจะมุ่งไปทางส่วนใหญ่เป็นรุ่นที่ทันสมัยของ Linux ดังนั้นหากคุณเกิดขึ้นที่จะใช้gitในระบบปฏิบัติการที่ไม่ได้มีlocate, whereis, whichหรือapropos(เช่น Solaris, HPUX ฯลฯ ) findแล้วมีอยู่เสมอสแตนด์บายเก่า

find / -name git 

หนึ่งบางรุ่นเก่าของระบบดังกล่าวข้างต้นคุณอาจจำเป็นต้องมีตัวเลือกที่จ่ายให้กับ-printfind

find / -name git -print

และถ้าคุณใช้locateให้แน่ใจว่าคุณเรียกใช้updatedbเป็นระยะ ( locate.updatedbบนอนุพันธ์ BSD บางส่วน)


8
สำหรับโปรแกรมในพา ธ ให้ใช้type ; มันน่าเชื่อถือและพกพาได้ (ยกเว้นระบบเก่า 30 ปี)
Gilles

ขอบคุณ @Gilles typeฉันไม่เคยรู้เกี่ยวกับ :) นั่นคือรายการเพลงที่แน่นอน!
ทิมเคนเนดี

อาจเป็นการชี้ให้เห็นว่าคุ้มค่าที่findจะทำการค้นหาในระดับลึกครั้งแรกของระบบไฟล์โดยเริ่มจากทุกที่ที่คุณรูท ดังนั้นfind / -name gitจะข้ามทั้งระบบของคุณ หากคุณรู้ว่าโปรแกรมนั้นอยู่บนเส้นทางของคุณคุณก็สามารถทำได้IFS=":"; path=$PATH; set $path; for dir in $path; do find $dir -name git; doneแม้ว่าระบบไฟล์ Unix จะได้รับอนุญาตมากพอที่จะทำให้เกิดความPATHเสียหายได้หลายวิธีหากมีอักขระแปลก ๆ อยู่ในตัว
quodlibetor

อันที่จริงคำสั่งฉันให้ก่อนหน้านี้จะทำลายคุณPATH, สิ่งที่ถูกต้อง (ที่มีคำเตือนเช่นเดียวกับก่อน) IFS=":"; for dir in $PATH; do find "$dir" -name git; doneเป็น นอกจากนี้เพื่อย้ำคำตอบนี้ควรใช้โดยผู้ที่ไม่สามารถเข้าถึงtypeหรือwhich หรือ locateเกือบจะไม่มีใคร คำตอบของ @ Arcege ถูกต้อง
quodlibetor

5

เพื่อให้ได้เส้นทางที่จะติดตั้งโปรแกรมที่คุณใช้งานทั้งหรือwhereis whichหากคุณเกิดขึ้นที่จะลืมมันเป็นชื่อที่คุณสามารถใช้aproposกับคำพ้องความหมายหรือคำอธิบายของยูทิลิตี้ของคุณเช่นจะได้พบกับapropos "version control" gitต่อไปนี้เป็นหลักสูตรwhatisคำสั่งสรุปสั้น ๆ ฟังก์ชั่นของโปรแกรม อย่างไรก็ตามสิ่งนี้ไม่ได้ใช้กับโปรแกรมและฟังก์ชั่นทั้งหมดในระบบของคุณ whatis "the meaning of life, universe and everything"ลองยกตัวอย่างเช่น


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