Puncte:18

Cum găsesc sursa unei operații în linia de comandă?

drapel ng

Să presupunem că sunt capabil să tast abc în linia de comandă și va rula (deci shell-ul nu spune „abc: command not found”).

Cum pot afla ce abc este sau face? Este un scenariu? Program? Alias?

drapel cn
Puteți împărtăși mai multe detalii? Dacă tastați `abc` și shell-ul returnează `command not found`, atunci nu există niciun script, program sau alias pe sistemul dvs. care să poată răspunde la întrebarea dată
Peter Cordes avatar
drapel fr
@NicoHaase: Am citit inițial așa, dar se pare că sensul intenționat a fost „rularea `abc` nu produce „comanda nu a fost găsită”. În schimb, face ceva, orice.” Având singura ieșire citată în întrebarea „comanda nu a fost găsită” face ca acea parte să iasă cu adevărat în evidență, iar formularea este, fără îndoială, ambiguă, cu semnificații precum „abc ar trebui să facă ceva, dar în schimb returnează comanda negăsită”. Deci da, întrebarea ar putea folosi o modificare pentru a reformula. Am trimis o modificare pentru a clarifica, deoarece a existat deja 1 comentariu și 1 răspuns bazat pe o interpretare greșită.
Puncte:26
drapel hr

Puteți folosi tip comanda, ex. tastați abc. De exemplu, într-un shell bash:

$ type în timp ce cd ls gcc apt
while este un cuvânt cheie shell
cd este un shell încorporat
ls este alias cu `ls --color=auto'
gcc este /usr/bin/gcc
apt are hash (/usr/bin/apt)

Câmpia tip comanda arată doar primul rezultat. Dacă există mai multe versiuni ale abc în diferite locații de pe dvs CALE, sau abc este furnizat atât ca un cuvânt cheie shell, cât și ca un executabil extern sau pentru a vedea atât versiunile aliasate, cât și cele fără alias ale unei comenzi, puteți utiliza tip -a pentru a le enumera pe toate ex.:

$ tip -o dată
timpul este un cuvânt cheie shell
timpul este /usr/bin/time

$ tip -a ls
ls este alias cu `ls --color=auto'
ls este /bin/ls

$ tip -a datamash
datamash este /usr/local/bin/datamash
datamash este /usr/bin/datamash

In bash, tip în sine este un shell încorporat. Alte scoici precum zsh și ksh și liniuță (care furnizeaza /bin/sh în Ubuntu) oferă funcționalități similare (deși liniuță nu oferă momentan tip -a). În tcsh, cel mai apropiat echivalent este builtin care comanda - a nu se confunda cu cea externă care comanda – vezi De ce să nu folosiți âcare...? Ce să folosești atunci?

Pentru comenzile care sunt identificate ca programe externe (adică au o cale, cum ar fi /usr/bin/gcc) puteți folosi fişier comandă pentru a afla ce fel de program:

$ fișier /bin/ls /usr/bin/gcc /usr/sbin/adduser
/bin/ls: obiect partajat LSB ELF pe 64 de biți, x86-64, versiunea 1 (SYSV), legat dinamic, interpret /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=2f15ad836be3339dec0e2e6a3c637eacbde, for GNU/Linux 3.2.0, eliminat
/usr/bin/gcc: legătură simbolică către gcc-9
/usr/sbin/adduser: executabil text de script Perl
ilkkachu avatar
drapel co
iar pentru funcțiile shell, în Bash, `type func` ar tipări și definiția funcției.În Zsh nu, dar puteți rula `typeset -p -f func` pentru a-l vedea
Puncte:6
drapel zw

Pentru comenzile deja instalate, utilizați răspunsul Steeldriver.

Pentru comenzile neinstalate citiți mai jos.

Există un pachet special numit comanda nu a fost găsită. Scopul său este

Sugerați instalarea pachetelor în sesiuni interactive bash

Odată instalat, acest pachet își va face treaba și vă sugerează instalarea pachetului deb cu nume executabil cunoscut.


Dacă cunoașteți numele executabilului și/sau o parte a căii fișierului acestuia, atunci puteți găsi pachetul său folosind una dintre cele două opțiuni:

  • local apt-file de

    sudo apt-get install apt-file
    actualizare sudo apt-file
    apt-file search bin/htop
    

    pentru a obține ceva de genul

    htop: /usr/bin/htop
    
  • online folosind căutarea conținutului pachetului https://packages.ubuntu.com - vezi rezultatele la acest link.

Puncte:3
drapel cn

Există alte câteva posibilități:

care abc

va returna locația programului abc în sistemul dvs.

De exemplu,

care pisica
/bin/cat

Dacă programul abc a venit cu o documentație, este posibil să aflați mai multe despre el rulând

om abc

Aceasta vă va arăta pagina de manual, dacă există, pentru acest program. Puteți afla mult mai multe despre utilizarea, opțiunile și parametrii din linia de comandă. S-ar putea chiar să găsiți exemple despre cum să utilizați abc sau o pagină web în care întreținerii mențin programul.

O alternativă la paginile manual sau manual este un utilitar numit info. Unii întreținători de programe doresc să vă ofere același conținut sau similar unei pagini de manual folosind în schimb informații.

info abc

de exemplu, vă va arăta ce ajutor poate fi oferit.

Deoarece ați menționat aliasuri, puteți afișa alias-urile și definițiile lor cu comanda alias

alias

Iată exemplul de ieșire pe mașina mea Ubuntu 20.04

alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echoterminal || eroare ecou)" "$(istory|tail -n1|sed -e '\''s/^ \s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
dave58 avatar
drapel tr
:-) Metodele pe care le folosesc...
mondotofu avatar
drapel cn
Aceste tehnici sunt transferabile și în multe variante Unix / Linux.
ilkkachu avatar
drapel co
Acest lucru ar lipsi funcțiile shell și, de ex. shell-urile încorporate nu au, în general, pagini de manual sau de informații proprii.
dave58 avatar
drapel tr
@ilkkachu : În acest caz (funcția shell încorporată), metoda discutată în răspunsul principal de mai sus, „tipul” încorporat, oferă rezultate adecvate. Ar trebui să rețineți că răspunsul lui mondotofu a fost o extindere a răspunsurilor anterioare... [ de ex. „Există alte câteva posibilități:”]
ilkkachu avatar
drapel co
@dave58, în acest caz, ar trebui probabil să se refere la celelalte răspunsuri și soluții de acolo și să discute limitele soluțiilor prezentate aici. „alte posibilități”, de asemenea, sună ca și cum ar fi alternative și nu doar informații suplimentare, dar asta ar putea fi doar eu.
Puncte:-1
drapel br

Presupun că vorbim despre bash scoici (sau poate zsh daca este destul de asemanator) aici...

Comenzi ca care și unde este, pe care le-au menționat alte răspunsuri, caută fișiere care se potrivesc în directoarele enumerate în CALE variabilă de mediu. Deci, puteți, de asemenea, să verificați o comandă numită abc în acele directoare manual. The unde este comanda face ceva mai mult, verificând locurile enumerate în alte variabile de mediu, căutând fișiere care se potrivesc cu numele dat cu unele extensii standard, etc... De asemenea, dacă abc se găsește în mai multe locații, care arată doar pe cel care ar fi rulat în timp ce unde este le arata pe toate.

Shell ar putea, de asemenea, mapa abc la un alias shell sau la o funcție shell. Aliasurile pot fi listate cu alias comandă încorporată și sunt destul de simple.

Numele funcțiilor Shell pot fi listate cu tipărit -F, astfel încât să puteți căuta rezultatul din acea comandă abc. Dacă doriți să setați ce cod este asociat cu o funcție shell dată, puteți utiliza tastați abc.

Puncte:-3
drapel st

Să presupunem că sunt capabil să tast abc în linia de comandă și o face orice dar întoarce-te

abc: comanda nu a fost găsită

Cum pot afla ce abc este sau face? Este un scenariu? Program? Alias?

Nici una dintre cele de mai sus. Dacă nu a fost găsit, atunci nu este nimic. Puteți crea sau instala (sau adăuga la calea de căutare) un script sau un program sau un alias numit abc, atunci va fi un script sau un program sau un alias. Dar momentan, nu este nimic.

drapel ng
Întrebarea spune că tastarea „abc” *nu* returnează „comanda nu a fost găsită”.
ilkkachu avatar
drapel co
dacă ceva este „orice în afară de X”, înseamnă că cu siguranță nu este X, probabil exact opusul. Sunt orice altceva decât vesel dimineața înainte de a-mi lua cafeaua și ar trebui să fie clar aici că intenția este să întreb despre o situație în care comanda face ceva, orice, _altul decât_ produce acea eroare.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.