Kjennskap skaper ennui Bash har en haug med innebygde kommandoer, og noen av dem er strippet ned versjoner av sine eksterne GNU coreutils søskenbarn . Så hvorfor bruke dem? Du har sannsynligvis allerede gjør, på grunn av rekkefølgen på kommando kjøres i Bash: Så når du kjører ekko, drepe, printf, pwd, eller test mest sannsynlig du bruker bash builtins stedet GNU coreutils kommandoer. Hvordan vet du? Ved å bruke en av de Bash builtins å fortelle deg, kommandoen kommando: De Bash builtins ikke har man-sidene, men de har en baklengs hjelpe innebygd kommando som viser syntaks og alternativer: Jeg kaller det bakover fordi de fleste Linux-kommandoer bruker en syntaks for kommando --help, der hjelp er en kommando alternativ i stedet for en kommando Den type kommando ser mye som kommandoen innebygd, men det gjør mer. Den type verktøyet identifiserer builtin kommandoer, funksjoner, aliaser, søkeord (også kalt reserverte ord), og også binære kjør og skript, som det kaller file Poenget med denne lille øvelsen er slik at du vet hva du er virkelig hjelp når du skriver en kommando i Bash skallet, og slik at du vet hvordan det ser ut til Bash. Det er én mer overlapp Bash innebygd, og det er tiden stikkord: Så hvorfor skulle du ønske å bruke Bash builtins i stedet for deres GNU søskenbarn? Builtins kan utføre litt raskere enn de eksterne kommandoer, fordi eksterne kommandoer må punge en ekstra prosess. Jeg tviler på dette er mye av et problem på moderne datamaskiner fordi vi har hestekrefter å brenne, i motsetning til de gamle dager når alt vi hadde var bitte liten nanohertzes, men når du tilpasse ytelsen det er én ting å se på. Når du ønsker å bruke GNU kommandoen i stedet for Bash innebygd bruke sin helhet banen, som du kan finne kommandoen, type, eller den gode gamle ikke-Bash kommandoen som følger: Kjør erklærer -F for å se en liste over Bash sin builtin funksjonsnavn. erklære -f skriver ut de komplette funksjoner, og erklærer -f [funksjonsnavn] skriver den oppgitte funksjonen. typen vil ikke finne listefunksjonene, men når du vet et funksjonsnavn vil det også skrive det: Dette fungerer selv for dine egne funksjoner som du oppretter, som dette enkelt eksempel testfunc som gjør én ting: endringer i /etc katalogen: Nå kan du bruke olle og skriv for å liste opp og vise den nye funksjonen akkurat som builtins. Ikke la deg lure av Bash er rolig, lydig utvendig, fordi det er i stand til å drepe. Det har vært mange endringer i hvordan Linux styrer prosesser, i noen tilfeller gjør dem vanskeligere å stoppe, så vet hvordan å drepe rømte prosesser er fortsatt en viktig bit av kunnskap. Heldigvis, til tross for alt dette nymotens "fremskritt" pålitelige gamle drapsmennene fortsatt arbeide Jeg har hatt noen problemer med bleeding-edge versjoner av KMail.; det henger og ønsker ikke å lukke på normal måte. Den gyter en enkelt prosess, som vi kan se med kommandoen ps: Du kan starte forsiktig og prøv dette: Dette sender standard SIGTERM (signal avslutte) signal, som er lik den SIGINT (signal interrupt) sendes fra tastaturet med Ctrl + c. Så hva hvis dette ikke fungerer? Deretter kan du piffe opp bremsekraft og bruke SIGKILL, som dette: Dette er den kjernefysiske alternativet, og det vil fungere. Som den relevante delen av GNU C manuelle sier: "The SIGKILL signal brukes til å føre til umiddelbar program oppsigelse Det kan ikke håndteres eller ignorert, og er derfor alltid dødelig Det er heller ikke mulig å blokkere dette signalet..." Dette er forskjellig fra SIGTERM og SIGINT og andre signaler som høflig ber prosesser for å avslutte. De kan være fanget og håndtert på ulike måter, og selv blokkert, slik at responsen du får en SIGTERM avhenger av hvordan programmet du prøver å drepe er programmert til å håndtere signaler. I en ideell verden til et program reagerer på SIGTERM ved rydding før du går ut, som etterbehandling disk skriver og slette midlertidige filer. SIGKILL banker det ut og ikke gi det en sjanse til å gjøre noen opprydding. (Se man 7 signal for en fullstendig beskrivelse av alle signaler.) Så hva er spesielt med Bash drepe i løpet av GNU /bin /drepe? Min favoritt er hvordan det ser ut når du starter hjelpen oppsummering: En annen fordel er at det kan bruke jobbkontrollnummer i tillegg til PID'er. I denne moderne æra av tabbed terminalemulatorer jobbkontroll er ikke så farlig det pleide å være, men muligheten er der hvis du ønsker det. Den største fordelen er at du kan drepe prosesser, selv om de har gått berserk og maxed ut systemets prosess nummer grense, noe som vil hindre deg fra å lansere /bin /kill. Ja, det er en grense, og du kan se hva det er ved å spørre /proc: Med Bash drepe det finnes flere måter å angi hvilke signalisere at du ønsker å bruke. Disse er alle det samme. drepe -l lister alle støttede signaler Hvis du bruker litt kvalitetstid med mannen bash og GNU Bash Manual Jeg daresay du vil lære mer verdifulle oppgaver som Bash kan gjøre for deg.
, og selv om Bash er standard Linux kommandoskall brukes daglig av horder av fornøyde brukere, den inneholder et vell av interessante og nyttige funksjoner som don ' t får mye oppmerksomhet. I dag skal vi lære om Bash builtins og drepe potensial.
Bash builtins
Bash aliaser
Bash søkeord
Bash funksjoner
Bash builtins
Scripts og kjørbare programmer som er i din PATH
$ kommando -V echoecho er et skall innebygd $ kommando -V Pingping er /bin /ping
$ hjelp echoecho: echo [-neE] [arg ...] Skriv argumenter til standard ut. Vise args til standard output etterfulgt av et linjeskift. Alternativer: -n ikke legge en ny linje -e aktiver tolkning av følgende backslash rømming [...]
$ typen -a catcat er /bin /cat $ typen -t catfile $ typen llll er aliaser til `ls -alF '$ typen -a echoecho er et skall builtinecho er /bin /echo $ typen -t grepalias
. På dette punktet, hvis du er som meg, er du brummende "Hva med å vise meg en liste over de darned ting." Jeg hører og adlyder, for du finner disse herlig dokumentert i GNU Bash Reference Manual indekser. Ikke vær redd, fordi i motsetning til de fleste programvare documention dette ikke er en skremmende mytisk skapning som Sasquatch, men en ekte live fullstendig kommando referanse.
$ typen -t timekeyword
$ som ekko /bin /echo $ som som /usr /bin /hvilke
Bash funksjoner
$ typen quotequote er en functionquote () {echo \\ '$ {1 //\\' /\\ '\\ \\\\ '\\'} \\ '}
$ funksjon testfunc> {> cd /etc>}
Bash voldelige Side
ps AXF | grep kmail 2489? Sl 01:44 /usr /bin /kmail -caption KMail
$ drepe 2 489
$ kill -9 2489
$ hjelp kill
$ cat /proc /sys /kernel /tråder-max61985
$ drepe 2489 $ drepe -s TERM 2489 $ drepe -s SIGTERM 2489 $ drepe -n 15 2489