I årevis har bashskallet [1] vært en integrert del av mange Linux -distribusjoner. I begynnelsen ble Bash valgt som det offisielle GNU-skallet fordi det var kjent, ganske stabilt og tilbød et anstendig sett med funksjoner.
I dag er situasjonen noe annerledes - bash er fremdeles til stede overalt som en programvarepakke, men har blitt erstattet av alternativer i standardinstallasjonen. Disse inkluderer for eksempel Debian Almquist Shell (Dash) [2] (for Debian Gnu/Linux) eller Zsh [3] (for GRML [5]). I de kjente distribusjonene Ubuntu, Fedora, Arch Linux og Linux Mint, har Bash så langt forblitt Standard Shell.
Det er ganske nyttig å forstå Bash -oppstart og å vite hvordan du konfigurerer dette riktig. Dette inkluderer tilpasning av skallmiljøet ditt, for eksempel å stille inn $ banevariabelen, justere utseendet til skallet og lage aliaser. Vi vil også se på de to filene .Bashrc og .bash_profile som leses ved oppstart. Den tilsvarende kunnskapen testes i eksamen 1 av Linux Professional Institute -sertifisering [4].
Sammenligning av et interaktivt innloggings- og ikke-interaktiv batch-skall
Generelt har et skall to driftsmåter. Det kan kjøres som et interaktivt påloggingsskall og som et ikke-interaktivt batchskall. Operasjonsmodusen definerer bashoppstarten og hvilke konfigurasjonsfiler som leses [7]. Operasjonsmodusen kan differensieres som følger [6]-interaktivt påloggingsskall, interaktivt ikke-login-skall, ikke-interaktivt påloggingsskall og ikke-interaktiv (batch) ikke-login-skall.
For å si det enkelt, leser et interaktivt skall og skriver til en brukers terminal. I kontrast er et ikke-interaktivt skall ikke assosiert med en terminal, som når du utfører et batch-skallskript. Et interaktivt skall kan være enten pålogging eller et ikke-loginskall.
Interaktiv innloggingsskall
Denne modusen refererer til å logge inn på datamaskinen din på en lokal maskin ved hjelp av en terminal som spenner fra TTY1 til TTY4 (avhenger av installasjonen din - det kan være mer eller mindre terminaler). Denne modusen dekker også eksternt logge på en datamaskin, for eksempel via et sikkert skall (SSH) som følger:
$ ssh user@fjernsystem
$ ssh user@ekstern-system fjernkommando
Den første kommandoen kobles til det eksterne systemet og åpner bare et interaktivt skall. Derimot kobler den andre kommandoen til det eksterne systemet, utfører den gitte kommandoen i et ikke-interaktivt påloggingsskall, og avslutter SSH-tilkoblingen. Eksemplet nedenfor viser dette mer detaljert:
$ ssh localhost oppetid
Bruker@localhosts passord:
11:58:49 opp 23 dager, 11:41, 6 brukere, belastningsgjennomsnitt: 0,10, 0,14, 0,20
$
For å finne ut om du er logget inn på datamaskinen din ved å bruke et påloggingsskall, skriver du inn følgende Echo -kommando i terminalen din:
$ ekko $ 0
-bash
$
For et påloggingsskall starter utgangen med en "-" etterfulgt av navnet på skallet, noe som resulterer i "-bash" i vårt tilfelle. For et ikke-loginskall er utgangen bare navnet på skallet. Eksemplet nedenfor viser dette for de to kommandoene ekko $ 0, og oppetid er gitt til SSH som en strengparameter:
$ ssh localhost "ekko $ 0; oppetid"
Bruker@localhosts passord:
bash
11:58:49 opp 23 dager, 11:41, 6 brukere, belastningsgjennomsnitt: 0,10, 0,14, 0,20
$
Som et alternativ, bruk den innebygde Shopt-kommandoen [8] som følger:
$ Shopt Login_shell
Login_shell av
$
For et ikke-loginskall returnerer kommandoen "av", og for et påloggingsskall, "ON".
Når det gjelder konfigurasjonen for denne typen skall, tas tre filer med i betraktningen. Disse er/etc/profil, ~/.profil, og ~/.bash_profile. Se nedenfor for en detaljert beskrivelse av disse filene.
Interaktiv ikke-loginskall
Denne modusen beskriver åpning av en ny terminal, for eksempel XTERM- eller GNOME -terminal, og utfører et skall i den. I denne modusen er de to filene/etc/Bashrc og ~/.Bashrc leses. Se nedenfor for en detaljert beskrivelse av disse filene.
Ikke-interaktiv ikke-loginskall
Denne modusen er i bruk når du utfører et skallskript. Skallskriptet kjører i sitt eget underskall. Det er klassifisert som ikke-interaktiv med mindre den ber om brukerinngang. Skallet åpnes bare for å utføre skriptet og lukker det umiddelbart når skriptet er avsluttet.
./Lokal-Script.sh
Ikke-interaktiv innloggingsskall
Denne modusen dekker logging på en datamaskin fra en fjernkontroll, for eksempel via Secure Shell (SSH). Shell-skriptet Lokal-Script.SH kjøres lokalt, først, og utgangen brukes som inngang av SSH.
./Lokal-Script.sh | SSH User@Remote-System
Å starte SSH uten ytterligere kommando starter et påloggingsskall på det eksterne systemet. I tilfelle inngangsenheten (STDIN) til SSH ikke er terminal, starter SSH et ikke-interaktivt skall og tolker utgangen fra skriptet som kommandoer som skal utføres på det eksterne systemet. Eksemplet nedenfor kjører oppetidskommandoen på det eksterne systemet:
$ ECHO "UPTIME" | ssh localhost
Pseudo-terminal vil ikke bli tildelt fordi stdin ikke er en terminal.
Frank@localhosts passord:
Programmene som er inkludert i Debian GNU/Linux -systemet er gratis programvare;
De nøyaktige distribusjonsbetingelsene for hvert program er beskrevet i
Individuelle filer i/usr/share/doc/*/copyright.
Debian Gnu/Linux kommer med absolutt ingen garanti, i den grad
tillatt i gjeldende lov.
Du har ny post.
11:58:49 opp 23 dager, 11:41, 6 brukere, belastningsgjennomsnitt: 0,10, 0,14, 0,20
$
Interessant nok klager SSH over at STDIN ikke er en terminal og viser dagens melding (MOTD) som er lagret i den globale konfigurasjonsfilen /etc /MOTD. For å forkorte terminalutgangen, legg til "SH" -alternativet som en parameter for SSH -kommandoen, som vist nedenfor. Resultatet er at et skall åpnes først, og de to kommandoene kjøres uten å vise MOTD, først.
$ ECHO "UPTIME" | ssh localhost sh
Frank@localhosts passord:
12:03:39 opp 23 dager, 11:46, 6 brukere, belastningsgjennomsnitt: 0,07, 0,09, 0,16
$$
Deretter vil vi se på de forskjellige konfigurasjonsfilene for bash.
Bash oppstartsfiler
De forskjellige bash -modusene som definerer hvilke konfigurasjonsfiler som leses ved oppstart:
Det kan være nyttig å se dette som en graf. Under forskningen fant vi bildet nedenfor, som vi liker veldig godt [9].
bilde: Config-Path.png
tekst: Evalueringsprosess for bash -konfigurasjon
De forskjellige konfigurasjonsfilene forklarte
For filene som er forklart nedenfor, er det ingen generelle regelsett for hvilket alternativ du skal lagre i hvilken fil (bortsett fra globale alternativer vs. lokale alternativer). Videre er rekkefølgen konfigurasjonsfilene leses designet med fleksibilitet i tankene, slik at en endring av skallet du bruker sikrer at du fremdeles kan bruke Linux -systemet. Derfor er flere filer i bruk som konfigurerer det samme.
/etc/profil
Denne filen brukes av Bourne Shell (SH) samt Bourne -kompatible skjell som Bash, Ash og Ksh. Den inneholder standardoppføringene for miljøvariablene for alle brukere som logger inn interaktivt. For eksempel påvirker dette $ banen og den raske designen for vanlige brukere, så vel som brukeren som heter "root". Eksemplet nedenfor viser en del av/etc/profil fra Debian Gnu/Linux.
setUserPath ()
# Vanlige kataloger til kjørbare filer for alle brukere
Path = "/usr/local/bin:/usr/bin:/bin"
# Test for rotbruker å legge til for systemadministrasjonsprogrammer
hvis ["'id -u'" -eq 0]; deretter
Path = "/usr/local/sbin:/usr/sbin:/sbin: $ path"
ellers
Path = "/usr/local/games:/usr/games: $ path"
fi
Eksportvei
setUserPath ()
# PS1 er den primære ledetekststrengen
hvis ["$ ps1"]; deretter
if ["$ bash"] && ["$ bash" != "/bin/sh"]; deretter
# Filbasen.Bashrc angir allerede standard PS1.
# Ps1 = "\ h: \ w \ $"
hvis [-f /etc /bash.Bashrc]; deretter
. /etc/bash.Bashrc
fi
ellers
hvis ["'id -u'" -eq 0]; deretter
Ps1 = '#'
ellers
PS1 = '$'
fi
fi
fi
Ytterligere konfigurasjonsfiler kan lagres i katalogen /etc /profil.d. De er hentet inn i bash -konfigurasjonen så snart /etc /profil er lest.
~/.bash_profile
Denne lokale konfigurasjonsfilen blir lest og utført når bash påberopes som et interaktivt påloggingsskall. Den inneholder kommandoer som bare skal kjøres en gang, for eksempel å tilpasse $ bane miljøvariable.
Det er ganske vanlig å fylle ~/.bash_profile bare med linjer som under den kilden .Bashrc -fil. Dette betyr at hver gang du logger deg på terminalen, leses innholdet i din lokale bash -konfigurasjon.
hvis [-f ~/.Bashrc]; deretter
. ~/.Bashrc
fi
Hvis filen ~/.bash_profile eksisterer, så vil bash hoppe over lesing fra ~/.bash_login (eller ~/.profil).
~/.BASH_LOGIN
De to filene ~/.bash_profile og ~/.Bash_login er analoge.
~/.profil
De fleste Linux -distribusjoner bruker denne filen i stedet for ~/.bash_profile. Den brukes til å lokalisere den lokale filen .Bashrc og for å utvide $ banevariabelen.
# Hvis du kjører bash
hvis [-n "$ bash_version"]; deretter
# inkluderer .Bashrc hvis det eksisterer
hvis [-f "$ hjem/.Bashrc "]; da
. "$ Hjem/.Bashrc "
fi
fi
# sett banen slik at den inkluderer brukerens private søppel hvis den eksisterer
if [-d "$ home/bin"]; deretter
Path = "$ Hjem/bin: $ bane"
fi
Generelt, ~/.Profilen leses av alle skjell. Hvis enten ~/.bash_profile eller ~/.bash_login eksisterer, Bash vil ikke lese denne filen.
/etc/bash.Bashrc og ~/.Bashrc
Denne filen inneholder bash -konfigurasjonen og håndterer lokale aliaser, historiegrenser som er lagret i .bash_history (se nedenfor), og fullføring av bash.
# Ikke legg dupliserte linjer eller linjer som starter med plass i historien.
# Se bash (1) for flere alternativer
HistControl = Ignoreboth
# Legg til historiefilen, ikke overskrive den
Shopt -s histappend
# For å sette historiens lengde, se Histsize og histfilesize i bash (1)
HistSize = 1000
Histfilesize = 2000
Hva du skal konfigurere i hvilken fil
Som du har lært så langt, er det ikke en eneste fil, men en gruppe filer for å konfigurere bash. Disse filene eksisterer bare av historiske grunner - spesielt måten de forskjellige skjellene utviklet seg og lånte nyttige funksjoner fra hverandre. Det er heller ingen strenge regler kjent
Definer hvilken fil som er ment for å oppbevare en viss del av oppsettet. Dette er anbefalingene vi har for deg (basert på TLDP [10]):
Husk også at Linux er designet for å være veldig fleksibel: Hvis noen av oppstartsfilene nevnt ovenfor ikke er til stede på systemet ditt, kan du opprette det.
Lenker og referanser
Takk skal du ha
Forfatteren vil takke Gerold Rupprecht for hans råd mens han skrev denne artikkelen.