Score:18

ฉันจะค้นหาแหล่งที่มาของการดำเนินการบรรทัดคำสั่งได้อย่างไร

ธง ng

สมมติว่าฉันพิมพ์ได้ เอบีซี ในบรรทัดคำสั่งและจะทำงาน (ดังนั้นเชลล์จะไม่พูดว่า "abc: command not found")

ฉันจะรู้ได้อย่างไรว่า เอบีซี เป็นหรือไม่? มันเป็นสคริปต์หรือไม่? โปรแกรม? นามแฝง?

cn flag
Can you share more details? If you type `abc` and the shell returns `command not found`, then there is no script, program, or alias on your system that can answer the given question
Peter Cordes avatar
fr flag
@NicoHaase: I read it that way initially, but it seems the intended meaning was "running `abc` does not produce "command not found". Instead it does something, anything." Having the only quoted output in the question be "command not found" makes that part really stand out, and the phrasing is arguably ambiguous with meanings like "abc is supposed to do something, but instead ot returns command not found". So yeah, the question could use an edit to rephrase. I submitted an edit to clarify, since there has already been 1 comment and 1 answer based on the wrong interpretation.
Score:26
ธง hr

คุณสามารถใช้ พิมพ์ คำสั่ง เช่น พิมพ์ abc. ตัวอย่างเช่น ใน bash shell:

พิมพ์ $ ในขณะที่ cd ls gcc apt
ในขณะที่เป็นคำหลักของเชลล์
cd เป็นเชลล์ในตัว
ls มีชื่อแทนว่า `ls --color=auto'
gcc คือ /usr/bin/gcc
apt ถูกแฮช (/usr/bin/apt)

ที่ราบ พิมพ์ คำสั่งจะแสดงผลลัพธ์แรกเท่านั้น หากมีหลายเวอร์ชันของ เอบีซี ในตำแหน่งต่างๆ บนตัวคุณ เส้นทาง, หรือ เอบีซี มีให้เป็นทั้งคีย์เวิร์ดของเชลล์และไฟล์เรียกทำงานภายนอก หรือหากต้องการดูคำสั่งทั้งเวอร์ชันนามแฝงและไม่ใช่นามแฝง คุณสามารถใช้ พิมพ์ -a เพื่อแสดงรายการทั้งหมด เช่น:

$ ประเภท -a ครั้ง
เวลาเป็นคำหลักของเชลล์
เวลาคือ /usr/bin/time

$ ประเภท -a ls
ls มีชื่อแทนว่า `ls --color=auto'
ls คือ /bin/ls

$ ประเภท -a datamash
datamash คือ /usr/local/bin/datamash
datamash คือ /usr/bin/datamash

ในการทุบตี พิมพ์ ตัวเองเป็นเปลือกในตัว หอยอื่นๆเช่น zsh และ ครับ และ เส้นประ (ซึ่งให้ /ถัง/sh ใน Ubuntu) มีฟังก์ชันการทำงานที่คล้ายกัน (แม้ว่า เส้นประ ไม่ได้ให้บริการในขณะนี้ พิมพ์ -a). ใน tcshเทียบเท่าที่ใกล้ที่สุดคือในตัว ที่ คำสั่ง - เพื่อไม่ให้สับสนกับภายนอก ที่ คำสั่ง - ดู ทำไมไม่ใช้ â whichâ แล้วจะใช้อะไร?

สำหรับคำสั่งที่ระบุว่าเป็นโปรแกรมภายนอก (เช่น มีเส้นทาง เช่น /usr/bin/gcc) คุณสามารถใช้ ไฟล์ คำสั่งเพื่อค้นหาประเภทของโปรแกรม:

$ ไฟล์ /bin/ls /usr/bin/gcc /usr/sbin/adduser
/bin/ls: ELF วัตถุที่ใช้ร่วมกัน LSB 64 บิต, x86-64, เวอร์ชัน 1 (SYSV), เชื่อมโยงแบบไดนามิก, ตัวแปล /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=2f15ad836be3339dec0e2e6a3c637e08e48aacbd สำหรับ GNU/Linux 3.2.0 ถูกถอดออก
/usr/bin/gcc: ลิงก์สัญลักษณ์ไปยัง gcc-9
/usr/sbin/adduser: ข้อความสคริปต์ Perl สามารถเรียกใช้งานได้
ilkkachu avatar
co flag
และสำหรับฟังก์ชั่นเชลล์ใน Bash `type func` จะพิมพ์คำจำกัดความของฟังก์ชั่นด้วยใน Zsh ไม่มี แต่คุณสามารถเรียกใช้ `typeset -p -f func` เพื่อดูได้
Score:6
ธง zw

สำหรับคำสั่งที่ติดตั้งแล้วให้ใช้คำตอบของ steeldriver

สำหรับคำสั่งที่ไม่ได้ติดตั้งให้อ่านด้านล่าง

มีแพ็คเกจพิเศษชื่อ ไม่พบคำสั่ง. จุดประสงค์คือ

แนะนำการติดตั้งแพ็คเกจในเซสชันทุบตีแบบโต้ตอบ

เมื่อติดตั้งแล้ว แพ็คเกจนี้จะทำงานของมัน และแนะนำให้คุณติดตั้ง deb-package ด้วยชื่อปฏิบัติการที่รู้จัก


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

  • ท้องถิ่น apt-ไฟล์ โดย

    sudo apt-get install apt-file
    อัปเดต sudo apt-file
    apt-file ค้นหาไฟล์ / htop
    

    เพื่อให้ได้สิ่งที่ต้องการ

    htop: /usr/bin/htop
    
  • ออนไลน์โดยใช้การค้นหาเนื้อหาแพ็คเกจบน https://packages.ubuntu.com - ดูผลงานได้ที่ ลิงค์นี้.

Score:3
ธง cn

มีความเป็นไปได้อีกสองสามอย่าง:

อักษรย่อตัวใด

จะคืนตำแหน่งของโปรแกรม abc ในระบบของคุณ

ตัวอย่างเช่น,

แมวตัวไหน
/ถังขยะ/แมว

หากโปรแกรม abc ของคุณมาพร้อมกับเอกสารประกอบ คุณสามารถค้นหาเพิ่มเติมได้โดยเรียกใช้

ผู้ชาย abc

นี่จะแสดงหน้าคู่มือถ้ามีสำหรับโปรแกรมนี้ คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับการใช้งาน ตัวเลือกบรรทัดคำสั่ง และพารามิเตอร์ คุณอาจพบตัวอย่างวิธีใช้ abc หรือหน้าเว็บที่ผู้ดูแลให้โปรแกรมทำงานต่อไป

อีกทางเลือกหนึ่งสำหรับหน้าคนหรือหน้าคู่มือคือยูทิลิตี้ที่เรียกว่าข้อมูล ผู้ดูแลโปรแกรมบางคนต้องการให้เนื้อหาที่เหมือนกันหรือคล้ายกันแก่คุณในหน้าคนโดยใช้ข้อมูลแทน

ข้อมูล abc

ตัวอย่างเช่น จะแสดงให้คุณเห็นว่าอาจเสนอความช่วยเหลืออะไรบ้าง

เนื่องจากคุณกล่าวถึงนามแฝง คุณอาจแสดงนามแฝงและคำจำกัดความด้วยคำสั่งนามแฝง

นามแฝง

นี่คือตัวอย่างเอาต์พุตบนเครื่อง Ubuntu 20.04 ของฉัน

นามแฝง alert='notify-send --urgency=low -i "$([ $? = 0 ] && echoterminal || echo error)" "$(history|tail -n1|sed -e '\''s/^ \s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
นามแฝง egrep='egrep --color=auto'
นามแฝง fgrep='fgrep --color=auto'
นามแฝง grep='grep --color=auto'
นามแฝง l='ls -CF'
นามแฝง la='ls -A'
นามแฝง ll='ls -alF'
นามแฝง ls='ls --color=auto'
dave58 avatar
tr flag
:-) วิธีการที่ฉันใช้...
mondotofu avatar
cn flag
เทคนิคเหล่านี้สามารถถ่ายโอนไปยัง Unix / Linux ได้หลายรสชาติเช่นกัน
ilkkachu avatar
co flag
สิ่งนี้จะพลาดฟังก์ชั่นเชลล์และเช่น เชลล์บิวด์อินโดยทั่วไปไม่มีหน้าคนหรือหน้าข้อมูลของตัวเอง
dave58 avatar
tr flag
@ilkkachu: ในกรณีใด (ฟังก์ชันเชลล์ในตัว) วิธีการที่กล่าวถึงในคำตอบหลักด้านบน 'ประเภท' ในตัวให้ผลลัพธ์ที่เหมาะสม คุณควรทราบว่าคำตอบของ mondotofu เป็นการขยายคำตอบก่อนหน้านี้... [ เช่น "มีความเป็นไปได้อื่นๆ อีก 2-3 อย่าง:" ]
ilkkachu avatar
co flag
@ dave58 ในกรณีนั้น มันน่าจะอ้างอิงถึงคำตอบและวิธีแก้ไขอื่น ๆ ที่นั่น และหารือเกี่ยวกับข้อจำกัดของวิธีแก้ไขที่นำเสนอที่นี่ "ความเป็นไปได้อื่นๆ" ดูเหมือนว่าจะเป็นทางเลือก ไม่ใช่แค่ข้อมูลเสริม แต่นั่นอาจเป็นฉันเอง
Score:-1
ธง br

ฉันถือว่าเรากำลังพูดถึง ทุบตี เปลือกหอย (หรืออาจจะ zsh ถ้าใกล้เคียงกันก็พอ) นี่...

คำสั่งเช่น ที่ และ อยู่ไหนซึ่งคำตอบอื่นๆ ได้กล่าวถึง ให้ค้นหาไฟล์ที่ตรงกันในไดเร็กทอรีที่แสดงรายการใน เส้นทาง ตัวแปรสภาพแวดล้อม ดังนั้นคุณสามารถตรวจสอบคำสั่งที่เรียกได้ เอบีซี ในไดเร็กทอรีเหล่านั้นด้วยตนเอง เดอะ อยู่ไหน คำสั่งทำอีกเล็กน้อย ตรวจสอบตำแหน่งที่แสดงในตัวแปรสภาพแวดล้อมอื่น ค้นหาไฟล์ที่ตรงกับชื่อที่กำหนดด้วยนามสกุลมาตรฐาน ฯลฯ ... นอกจากนี้ ถ้า เอบีซี พบได้ในหลายสถานที่ ที่ แสดงเฉพาะรายการที่จะเรียกใช้ในขณะที่ อยู่ไหน แสดงทั้งหมด

เชลล์อาจทำแผนที่ด้วย เอบีซี ไปยังนามแฝงของเชลล์หรือฟังก์ชันเชลล์ สามารถแสดงนามแฝงได้ด้วย นามแฝง คำสั่งในตัวและพวกมันค่อนข้างตรงไปตรงมา

สามารถแสดงชื่อฟังก์ชันเชลล์ได้ด้วย เรียงพิมพ์ -Fเพื่อให้คุณสามารถค้นหาผลลัพธ์จากคำสั่งนั้นเพื่อค้นหา เอบีซี. หากคุณต้องการกำหนดรหัสที่เกี่ยวข้องกับฟังก์ชั่นเชลล์ที่กำหนดคุณสามารถใช้ พิมพ์ abc.

Score:-3
ธง st

สมมติว่าฉันพิมพ์ได้ เอบีซี ในบรรทัดคำสั่งและทำ อะไรก็ตาม แต่กลับ

abc: ไม่พบคำสั่ง

ฉันจะรู้ได้อย่างไรว่า เอบีซี เป็นหรือไม่? มันเป็นสคริปต์? โปรแกรม? นามแฝง?

ไม่มีข้อใดกล่าวข้างต้น ถ้าไม่เจอก็ไม่เป็นอะไร คุณสามารถสร้างหรือติดตั้ง (หรือเพิ่มในเส้นทางการค้นหา) สคริปต์หรือโปรแกรมหรือนามแฝงที่ตั้งชื่อได้ เอบีซีจากนั้นจะเป็นสคริปต์หรือโปรแกรมหรือนามแฝง แต่ในขณะนี้ไม่เป็นอะไร

ng flag
คำถามระบุว่าการพิมพ์ `abc` ไม่ *ไม่* ส่งคืน "ไม่พบคำสั่ง"
ilkkachu avatar
co flag
ถ้าบางสิ่งเป็น "อะไรก็ได้ยกเว้น X" แสดงว่าไม่ใช่ X อย่างแน่นอน ซึ่งน่าจะตรงกันข้าม ฉันไม่มีอะไรนอกจากความร่าเริงในตอนเช้าก่อนที่ฉันจะดื่มกาแฟ และควรมีความชัดเจนในที่นี้ว่าเจตนาคือการถามเกี่ยวกับสถานการณ์ที่คำสั่งทำบางสิ่ง อะไรก็ได้ _นอกเหนือจาก_ ทำให้เกิดข้อผิดพลาดนั้น

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา