Difference between revisions of "Bash"

From Teknologisk videncenter
Jump to: navigation, search
m (Flere omdirigeringer samtidig)
m
Line 3: Line 3:
 
Bash kaldes ofte i engelsk litteratur for en CLI - Command Line Interpreter eller kommandofortolker på dansk.
 
Bash kaldes ofte i engelsk litteratur for en CLI - Command Line Interpreter eller kommandofortolker på dansk.
  
== Filer ==
+
= Filer =
 
Selve programmet '''bash''' kan være installeret i forskellige biblioteker på forskellige systemer men findes oftest i /usr/bin biblioteket. På BSD Unix varianter findes '''bash''' ofte i /usr/local/bin. Hvis du ikke ved hvor din lokale '''bash''' findes kan den findes med ''whereis bash'' kommandoen.
 
Selve programmet '''bash''' kan være installeret i forskellige biblioteker på forskellige systemer men findes oftest i /usr/bin biblioteket. På BSD Unix varianter findes '''bash''' ofte i /usr/local/bin. Hvis du ikke ved hvor din lokale '''bash''' findes kan den findes med ''whereis bash'' kommandoen.
  
Line 25: Line 25:
 
|}
 
|}
  
== Online bash hjælp ==
+
= Online bash hjælp =
 
*On line manualen: '''man bash'''
 
*On line manualen: '''man bash'''
 
*indbygget bash hjælp: '''help'''  
 
*indbygget bash hjælp: '''help'''  
 
*hjælp til bash indbyggede kommandoer: '''help while''' (eksempel)
 
*hjælp til bash indbyggede kommandoer: '''help while''' (eksempel)
== bash tilpasning med set kommandoen ==
+
= bash tilpasning med set kommandoen =
 
Hvis du ønsker at ændre bash måde at fungere på kan '''set''' kommandoen anvendes. Dette er normalt ikke nødvendigt.
 
Hvis du ønsker at ændre bash måde at fungere på kan '''set''' kommandoen anvendes. Dette er normalt ikke nødvendigt.
 
*Kommandoer
 
*Kommandoer
 
**help set
 
**help set
=== Debugging scripts ===
+
== Debugging scripts ==
 
Det kan være svært at debugge scripts og se hvor problemet er. Her kan bash sættes i enten ''verbose'' eller '''trace''' mode. '''Verbose''' eller '''trace''' mode kan slås til og fra efter behag i dit script.
 
Det kan være svært at debugge scripts og se hvor problemet er. Her kan bash sættes i enten ''verbose'' eller '''trace''' mode. '''Verbose''' eller '''trace''' mode kan slås til og fra efter behag i dit script.
  
Line 55: Line 55:
 
</pre>
 
</pre>
  
== Variable ==
+
= Variable =
 
Der er
 
Der er
== Job kontrol ==
+
= Job kontrol =
 
Job kontrol kan anvendes til at styre flere kørende programmer samtifig. Et kørende program kan suspenderes - dvs. stoppes - og resume - dvs. fortsætte - på et senere tidspunkt. Jobs kan køre i baggrunden - det vil sige ikke med standard output på skærmen.
 
Job kontrol kan anvendes til at styre flere kørende programmer samtifig. Et kørende program kan suspenderes - dvs. stoppes - og resume - dvs. fortsætte - på et senere tidspunkt. Jobs kan køre i baggrunden - det vil sige ikke med standard output på skærmen.
 
{|border=1 ;style="margin: 0 auto; text-align: center;cellpadding="5" cellspacing="0"
 
{|border=1 ;style="margin: 0 auto; text-align: center;cellpadding="5" cellspacing="0"
Line 71: Line 71:
 
|Fortsætte stoppet program i baggrunden || bg [job-nummer ...]
 
|Fortsætte stoppet program i baggrunden || bg [job-nummer ...]
 
|}
 
|}
== bash og processer ==
+
= bash og processer =
 
Processer er de programmer der kører på maskinen og programmer du starter i '''bash'''.
 
Processer er de programmer der kører på maskinen og programmer du starter i '''bash'''.
=== Fødslen af et process ===
+
== Fødslen af et process ==
 
Når der startes en ny process vil '''bash''' starte processen med tre åbne filhåndtag. Dette er den normale situation og sker hver gang der startes et program/process.
 
Når der startes en ny process vil '''bash''' starte processen med tre åbne filhåndtag. Dette er den normale situation og sker hver gang der startes et program/process.
  
Line 106: Line 106:
 
[heth@mars ~]$  
 
[heth@mars ~]$  
 
</source>
 
</source>
=== Omdirigering af standard datastrømme ===
+
== Omdirigering af standard datastrømme ==
 
{|border=1 ;style="margin: 0 auto; text-align: center;cellpadding="5" cellspacing="0"
 
{|border=1 ;style="margin: 0 auto; text-align: center;cellpadding="5" cellspacing="0"
 
|- bgcolor=lightgrey
 
|- bgcolor=lightgrey
Line 123: Line 123:
 
|2>&1 || STDOUT og STDERR || backup /home > /tmp/backup_log 2>&1 || STDERR filhåndtag 2 omdirigeres samme sted som filhåndtag 1
 
|2>&1 || STDOUT og STDERR || backup /home > /tmp/backup_log 2>&1 || STDERR filhåndtag 2 omdirigeres samme sted som filhåndtag 1
 
|}
 
|}
==== Omdirigering af STDOUT ====
+
=== Omdirigering af STDOUT ===
 
Som standard sendes STDOUT data fra processen til den aktive skærm. Det er muligt at omdirigere datastrømmen fra processens STDOUT til en fil ved at benytte omdirigeringstegnet '''>'''
 
Som standard sendes STDOUT data fra processen til den aktive skærm. Det er muligt at omdirigere datastrømmen fra processens STDOUT til en fil ved at benytte omdirigeringstegnet '''>'''
 
{|
 
{|
Line 137: Line 137:
 
Aug 19 07:21:47 mars sshd[14256]: error: ssh_msg_send: write
 
Aug 19 07:21:47 mars sshd[14256]: error: ssh_msg_send: write
 
</source>
 
</source>
==== Omdirigering af STDERR ====
+
=== Omdirigering af STDERR ===
 
Som standard sendes STDERR data fra processen til den aktive skærm. Det er muligt at omdirigere datastrømmen fra processens STDERR til en fil ved at benytte omdirigeringstegnet '''2>'''.  
 
Som standard sendes STDERR data fra processen til den aktive skærm. Det er muligt at omdirigere datastrømmen fra processens STDERR til en fil ved at benytte omdirigeringstegnet '''2>'''.  
 
{|
 
{|
Line 163: Line 163:
 
File busy: /home/hdje/doc/letter3.doc
 
File busy: /home/hdje/doc/letter3.doc
 
</source>
 
</source>
==== Omdirigering af STDIN ====
+
=== Omdirigering af STDIN ===
 
Som standard modtager STDIN data fra tastaturet. Det er muligt at omdirigere datastrømmen fra tastaturet til en fil ved at benytte omdirigeringstegnet '''<'''.  
 
Som standard modtager STDIN data fra tastaturet. Det er muligt at omdirigere datastrømmen fra tastaturet til en fil ved at benytte omdirigeringstegnet '''<'''.  
 
{|
 
{|
Line 177: Line 177:
 
<notice> Mange linier her</notice>
 
<notice> Mange linier her</notice>
 
</source>
 
</source>
==== Flere omdirigeringer samtidig ====
+
=== Flere omdirigeringer samtidig ===
 
der er muligt at kombinere omdirigeringer.
 
der er muligt at kombinere omdirigeringer.
 
<source lang=cli>
 
<source lang=cli>
 
[heth@mars ~]$ <input>backup < /etc/vigtige_filer 2>> /tmp/backup_errors 1>> /tmp/backup_files </input>
 
[heth@mars ~]$ <input>backup < /etc/vigtige_filer 2>> /tmp/backup_errors 1>> /tmp/backup_files </input>
 
</source>
 
</source>
 +
== Pipes - sammenkobling af processer
 +
 
{{#css:
 
{{#css:
 
      
 
      

Revision as of 08:58, 22 August 2009

bash - eller Bourne Again Shell - er den mest benyttede shell eller kommandofortolker til Unix og Linux systemer i dag. Der findes andre shells end bash. For eksempel csh (C-Shell), ksh (Korn-Shell) og bsh (Bourne-Shell).

Bash kaldes ofte i engelsk litteratur for en CLI - Command Line Interpreter eller kommandofortolker på dansk.

Filer

Selve programmet bash kan være installeret i forskellige biblioteker på forskellige systemer men findes oftest i /usr/bin biblioteket. På BSD Unix varianter findes bash ofte i /usr/local/bin. Hvis du ikke ved hvor din lokale bash findes kan den findes med whereis bash kommandoen.


/etc/profile Opstartsfil som bash udfører for alle brugere på maskinen. Udføres før den personlige opstartsfil.
$HOME/.bash_profile Denne fil er din personlige opstartsfil og vil blive udført når du logger ind på systemet, og indeholder typisk opstartskommandoer, velkomst... Hvis .bash_profile ikke eksister i dit hjemmebibliotek vil bash kigge efter filen .bash_login og udføre den. Hvis denne heller ikke eksister kigger bash efter filen .profile og udfører kommandoerne i den. Bemærk kun en af disse filer vil blive udført i rækkefølgen: 1: .bash_profile 2: .bash_login eller 3: .profile
$HOME/.bashrc Denne fil er personlig og vil blive udført hvergang der startes en sub-shell, det vil sige hvergang bash starter en ny

bash

$HOME/.bash_logout Denne fil er din personlig afslutningsfil og udføres når der logges ud.
$HOME/.inputrc Denne fil indeholder opstartskommandoer til bash. Anvendes til for eksempel at ændre tastatur genveje.

Online bash hjælp

  • On line manualen: man bash
  • indbygget bash hjælp: help
  • hjælp til bash indbyggede kommandoer: help while (eksempel)

bash tilpasning med set kommandoen

Hvis du ønsker at ændre bash måde at fungere på kan set kommandoen anvendes. Dette er normalt ikke nødvendigt.

  • Kommandoer
    • help set

Debugging scripts

Det kan være svært at debugge scripts og se hvor problemet er. Her kan bash sættes i enten verbose eller trace mode. Verbose eller trace mode kan slås til og fra efter behag i dit script.

  • verbose mode. (Viser kommandoer som de læses fra scriptet. Som de er skrevet)
    • Brug enten set -v eller set -o verbose for at aktivere verbose mode
    • Brug enten set +v eller set +o verbose for at de-aktivere verbose mode
  • trace mode. (Viser kommandoer som de udføres i scriptet. Fx. indholdet af variablerne.
    • Brug enten set -x eller set -o xtrace for at aktivere trace mode
    • Brug enten set +x eller set +o xtrace for at de-aktivere trace mode
#!/usr/bin/bash
#Kode her er OK
...
set -x    #bash trace mode slået til og alle kommandoer udført vises på skærmen
#mistænkelig kode her
...
set +x   #bash trace mode slået fra og bash fungerer normalt
#kode her er ok
...

Variable

Der er

Job kontrol

Job kontrol kan anvendes til at styre flere kørende programmer samtifig. Et kørende program kan suspenderes - dvs. stoppes - og resume - dvs. fortsætte - på et senere tidspunkt. Jobs kan køre i baggrunden - det vil sige ikke med standard output på skærmen.

Funktion kommando
Stoppe kørende program i forgrunden <CTRL>-Z
Se stoppede programmer og jobnumre jobs
Forsætte stoppet program i forgrunden fg [job-nummer]
Fortsætte stoppet program i baggrunden bg [job-nummer ...]

bash og processer

Processer er de programmer der kører på maskinen og programmer du starter i bash.

Fødslen af et process

Når der startes en ny process vil bash starte processen med tre åbne filhåndtag. Dette er den normale situation og sker hver gang der startes et program/process.

Navn filhåndtag # Forklaring
STDIN (Standard input) 0 Standard indlæsning af data. Hentes som standard fra tastaturet
STDOUT (Standard output) 1 Standard udlæsning af data. Sendes som standard til skærmen
STDERR (Standard error) 2 Fejl beskeder fra processem. Sendes som standard til skærmen
En processes standard input/output. Der kan tastes på tastaturet til processen for eksempel vi editoren og tekst og fejlbeskeder vises på skærmen

I eksemplet herunder startes programmet grep' af bash som en process med STDIN,STDOUT og STDERR. STDIN og STDERR anvendes ikke i eksemplet. men de er der.

[heth@mars ~]$ <input>grep heth /etc/passwd</input>
heth:*:1001:1001:Henrik Thomsen:/home/heth:/usr/local/bin/bash

I eksemplet herunder - hvor der ikke angives et filnavn - vil grep anvende STDIN til at hente data som tastet på tastaturer. Linier med hvidt skrives og linier med grønt skriver bash linier med blå skriver grep

[heth@mars ~]$ <input>grep bil</input>
<input>Jeg har en cykel</input>
<input>maden er billig</input>
<notice>maden er billig</notice>
<input>der er to piller i skabet</input>
<input>min bil skal til syn</input>
<notice>min bil skal til syn</notice>
<input>^C</input>
[heth@mars ~]$

Omdirigering af standard datastrømme

Tegn Omdirigerer Eksempel Kommentar
> STDOUT grep Error /var/log/stor_logfil > /tmp/found_errors Overskriver eventuelt eksisterende fil
>> STDOUT grep Error /var/log/stor_logfil >> /tmp/found_errors Appender dvs. tilføjer til eventuelt eksisterende fil
2> STDERR backup /home 2> /tmp/backup_errors Overskriver eventuelt eksisterende fil
2>> STDERR backup /home 2>> /tmp/backup_errors Appender dvs. tilføjer til eventuelt eksisterende fil
< STDIN bc < /tmp/stort_regnestykke Filen læses linie for linie ind i STDIN
2>&1 STDOUT og STDERR backup /home > /tmp/backup_log 2>&1 STDERR filhåndtag 2 omdirigeres samme sted som filhåndtag 1

Omdirigering af STDOUT

Som standard sendes STDOUT data fra processen til den aktive skærm. Det er muligt at omdirigere datastrømmen fra processens STDOUT til en fil ved at benytte omdirigeringstegnet >

Omdirigering af STDOUT
[heth@mars ~]$ <input>grep error /var/log/stor_logfil > /tmp/errors</input>
[heth@mars ~]$ <input>cat /tmp/errors</input>
Aug 19 08:16:53 mars sshd[7359]: error: ssh_msg_send: write
Aug 19 09:12:32 mars sshd[7852]: error: ssh_msg_send: write
Aug 19 18:16:18 mars sshd[12351]: error: ssh_msg_send: write
Aug 20 03:04:16 mars sshd[13155]: error: ssh_msg_send: write
Aug 19 07:21:47 mars sshd[14256]: error: ssh_msg_send: write

Omdirigering af STDERR

Som standard sendes STDERR data fra processen til den aktive skærm. Det er muligt at omdirigere datastrømmen fra processens STDERR til en fil ved at benytte omdirigeringstegnet 2>.

Omdirigering af STDERR

Denne funktion kan for eksempel anvendes ved ikke øvervåget sikkerhedskopiering for at opsamle alle fejlbeskeder til senere analyse. Ellers ville beskederne bare rulle ovenud på skærmen.

[heth@mars ~]$ <input>date</input>
Fri Aug 21 15:26:47 CEST 2009
[heth@mars ~]$ <input>backup /home 2>/tmp/backup_log_Aug22</input>
Backing up /home/.snap
Backing up /home/heth
Backing up /home/heth/.cshrc
Backing up /home/heth/.login
Backing up /home/heth/.login_conf
Backing up /home/heth/.mailrc
Backing up /home/heth/.profile
<notice> Tusinder af linier her </notice>

Check af om backupen gik godt

[heth@mars ~]$ <input>date</input>
Mon Aug 24 08:01:47 CEST 2009
[heth@mars ~]$ <input>cat /tmp/backup_log_Aug22</input>
File busy: /home/hdje/doc/letter3.doc

Omdirigering af STDIN

Som standard modtager STDIN data fra tastaturet. Det er muligt at omdirigere datastrømmen fra tastaturet til en fil ved at benytte omdirigeringstegnet <.

Omdirigering af STDIN

Hvis der for eksempel ønskes periodisk sikkerhedskopiering af de 127 vigtigste filer og biblioteker på maskinen, laves en fil med en liste over de vigtige filer. En pr linie.

[heth@mars ~]$ <input>backup < /etc/vigtige_filer_liste </input>
Backing up /var/database/kunder
Backing up /var/database/leverandorer
Backing up /var/database/okonomi
Backing up /home/hejhr/projekt
<notice> Mange linier her</notice>

Flere omdirigeringer samtidig

der er muligt at kombinere omdirigeringer.

[heth@mars ~]$ <input>backup < /etc/vigtige_filer 2>> /tmp/backup_errors 1>> /tmp/backup_files </input>

== Pipes - sammenkobling af processer


Eksterne henvisninger