127 lines
4.6 KiB
Markdown
127 lines
4.6 KiB
Markdown
# Laborationsrapport 1 #
|
||
|
||
## Syfte ##
|
||
|
||
Grunderna i Bash. Att efter genomförd laboration få praktisk erfarenhet av att
|
||
skräddarsy. Bashmiljön. Förstå hur Wildcards och Braces fungerar i praktiken.
|
||
Kunna navigera i bashmiljön och förstå vad Bash’s olika konfigurationsfiler gör.
|
||
Notera att laborationens uppgifter både finns inbakade i texten och under
|
||
frågesektionen.
|
||
|
||
## Tillvägagångsssätt ##
|
||
|
||
### Test och experiment ###
|
||
|
||
Tillsammans med [daemonicus666](https://github.com/daemonicus666) gjorde vi
|
||
ett litet script med awk som tog uptime kommandot och filtrerade ut så endast
|
||
uptimen visades på skärmen.
|
||
Scriptet finns på [uptime.sh](https://github.com/jackbenny/scripts_grundkurs/blob/master/Labb1/uptime.sh)
|
||
|
||
### Frågor och uppgifter ###
|
||
|
||
1. Vad kommer att listas vid följande kommando?
|
||
* `ls -la [a]*[!e]`
|
||
|
||
Listar alla filer som börjar på __a__ och innehåller ett fritt antal
|
||
tecken och som inte slutar på ett __e__.
|
||
* `ls -la *[f-i]?`
|
||
|
||
Listar alla filer som börjar på ett fritt antal tecken och sedan
|
||
innehåller __f__ till __i__ och sedan bara ett enda tecken. T.ex.
|
||
filen __aagl__ kommer visas, men inte __aaaglll__.
|
||
* `ls -la ????.[co]`
|
||
|
||
Listar alla filer som innehåller fyra tecken, en punkt, och sedan ett __c__ eller ett __o__.
|
||
|
||
2. Om du vill lista alla filer som börjar på a och slutar på .c, vilken
|
||
wildcard använder du då?
|
||
```bash
|
||
ls a*.c
|
||
```
|
||
|
||
3. Om du skriver `ls -la >> /test/test`, vad händer då?
|
||
|
||
Den skriver alla ut en fillista till filet /test/test. Körs raden igen
|
||
kommer den skriva fylla på med listan efter den förra listan i
|
||
samma fil.
|
||
|
||
4. Lista alla filer i hela filsystemet till en fil som heter ls-laR.gz, den ska
|
||
alltså också vara komprimerad, eventuella felmeddelanden ska hamna i
|
||
ls-laR-errors.txt.
|
||
```bash
|
||
ls -laR | gzip > ls-laR.gz 2> ls-laR-errors.txt
|
||
```
|
||
|
||
5. Vad är miljövariabeln PATH för något? Hur lägger du till katalogen ~/bin
|
||
till PATH? Hur gör du så att denna ändring sker vid varje inloggning?
|
||
|
||
PATH håller reda på binärer i systemet. För att lägga till ~/bin i min
|
||
egen PATH redigerar jag min ~/.profile och lägger till följande innehåll
|
||
```bash
|
||
if [ -d "$HOME/bin" ] ; then
|
||
PATH="$HOME/bin:$PATH"
|
||
fi
|
||
```
|
||
|
||
6. Vad händer om du skriver `top` i .bash\_logout?
|
||
|
||
Top körs vid utloggning, dock bara om man är i ett login-shell, d.v.s.
|
||
om man loggar in via en riktig terminal, typ CTRL+ALT+F2.
|
||
|
||
7. Hur använder du mekanismen `pushd`, `popd` och `dirs`?
|
||
|
||
Pushd används för att lägga in kataloger i dir-stacken samt byta till
|
||
katalogen man anger. Popd används för att byta tillbaks till katalogerna
|
||
från dir-stacken, en i taget. När man använder popd försvinner katalogen
|
||
en efter en från dir-stacken. Dirs kommandot används för att lista
|
||
katalogerna i dir-stacken.
|
||
|
||
8. Vad är ett "null kommando" och varför finns det?
|
||
|
||
Kolon (":") är ett null kommando och returnerar alltid 0 från $?
|
||
(värdet från senaste körda kommandot). D.v.s det är ett kommando som
|
||
faktiskt körs men inte gör något, men returnerar 0 i exit status. T.ex.
|
||
kan man använda detta istället för ett faktiskt kommando om man måste
|
||
ha ett sant returvärde från något. Exempelvis i en while-stats i script.
|
||
Eller bara rakt upp och ner vid prompten för att testa ett script man
|
||
gjort som är beroende av ett sant returvärde.
|
||
|
||
## Reflektion ##
|
||
|
||
Det var en lärorik första laboration med tanke på att där var en hel del nytt
|
||
att lära sig, bland annat null-kommandot och pushd, popd, dirs. Det är aldrig
|
||
fel att gå tillbaks till grunderna för att få en stabilare grund att stå på när
|
||
det gäller scripting.
|
||
Dessa tre kommandon kan också snabba upp navigeringen väsentligt när man arbetar
|
||
mycket i CLI-läge. De flesta känner säkert till att `cd ~` tar en tillbaks till
|
||
ens hemkatalog. Man kan använda dir-stacken på liknande sätt. Låt oss ta några
|
||
exempel på detta.
|
||
```bash
|
||
jake@olivia:~$ dirs
|
||
~
|
||
jake@olivia:~$ pushd scripts_grundkurs/
|
||
~/scripts_grundkurs ~
|
||
jake@olivia:~/scripts_grundkurs$ # Vi vill nu fixa lite i /etc
|
||
jake@olivia:~/scripts_grundkurs$ pushd /etc
|
||
/etc ~/scripts_grundkurs ~
|
||
jake@olivia:/etc$ # Fixar lite... nu vill vi tillbaks till scriptingen
|
||
jake@olivia:/etc$ dirs -v
|
||
0 /etc
|
||
1 ~/scripts_grundkurs
|
||
2 ~
|
||
jake@olivia:/etc$ # Notera att scripts_grundkurs är nr 1 på listan
|
||
jake@olivia:/etc$ pushd +1
|
||
~/scripts_grundkurs ~ /etc
|
||
jake@olivia:~/scripts_grundkurs$ # Tada, man kan även går såhär:
|
||
jake@olivia:~/scripts_grundkurs$ dirs -v
|
||
0 ~/scripts_grundkurs
|
||
1 ~
|
||
2 /etc
|
||
jake@olivia:~/scripts_grundkurs$ cd ~2
|
||
jake@olivia:/etc$ dirs -v
|
||
0 /etc
|
||
1 ~
|
||
2 /etc
|
||
jake@olivia:/etc$ # Dock försvann då scripts_grundkurs från dir-stacken
|
||
```
|