commit 737d2d7df5d6e2f40a41b74abf47d1704cc0649c Author: Jack-Benny Persson Date: Sat Jan 8 21:40:00 2022 +0100 Initial commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..fab51bc --- /dev/null +++ b/README.md @@ -0,0 +1,40 @@ +# Linux systemadministration från grunden +Här finner du all exempelkod för *Linux systemadministration från grunden* +(ISBN: 978-91-983300-3-8). + +Boken går att köpa från [CyberInfo Sverige](https://www.cyberinfo.se/bocker/), +[Bokus](https://www.bokus.com/bok/9789198330038/linux-systemadministration-fran-grunden/) +och +[Adlibris](https://www.adlibris.com/se/bok/linux-systemadministration-fran-grunden-9789198330038). + +Är du nyfiken på boken så titta gärna i [innehållsförteckningen](https://www.cyberinfo.se/dokument/linux-systemadministration_innehallsforteckning.html). + +## Baksidetexten +**Linux systemadministration från grunden** lär dig allt du behöver för att +komma igång att administrera Linuxdatorer, vare sig det är servrar på internet +eller bärbara datorer. Eller varför inte en Raspberry Pi för mätningar? + +Linux är viktigare och större än någonsin. Det finns överallt. På servrarna som +tillhandahåller många av de webbsidor du surfar på. Det finns i stora +beräkningskluster, telefoner, bilar och underhållningssystem. + +I början av boken får du grundläggande kunskaper om hur du arbetar med Linux. +Här lär du dig bland annat hur Linux är uppbyggt, användbara kommandon, +filsystemets uppbyggnad och hur du redigerar filer i både Nano och Vi. Därefter +lär du dig att skapa nya användare och grupper i systemet. Du lär dig också hur +du sätter filrättigheter i Linux. + +Mot mitten av boken lär du dig mer avancerade ämnen, så som textbearbetning, +att skriva egna skalskript, administrera tjänster, processhantering, +nätverkskonfiguration och mycket mer. + +Boken fungerar för de flesta Linuxutgåvor. Men bland annat kapitlen om +pakethantering och nätverkskonfiguration har skrivits speciellt för Red Hat, +CentOS, Fedora, Debian och Ubuntu. + +Till varje kapitel finns det övningsuppgifter så att du själv kan träna på det +du lärt dig. En del av övningsuppgifterna går utanför boken, och du måste då +själv leta upp rätt kommandon i den inbyggda manualen. + +## Framsidan +![Linux systemadministration från grunden](linux-systemadministration.png) diff --git a/kapitel10/sidan_157_ex1.awk b/kapitel10/sidan_157_ex1.awk new file mode 100644 index 0000000..a395052 --- /dev/null +++ b/kapitel10/sidan_157_ex1.awk @@ -0,0 +1,12 @@ +BEGIN { + printf "Namn\tSkal\n" + printf "----\t----\n" +} + +{ +print $1 "\t" $7 +} + +END { + printf "\nSlut på data\n" +} diff --git a/kapitel11/sidan_176_ex1.sh b/kapitel11/sidan_176_ex1.sh new file mode 100644 index 0000000..b05005f --- /dev/null +++ b/kapitel11/sidan_176_ex1.sh @@ -0,0 +1,2 @@ +#!/bin/bash +echo "Dag $(date +%j) på året" diff --git a/kapitel11/sidan_177_ex1.sh b/kapitel11/sidan_177_ex1.sh new file mode 100644 index 0000000..abcb019 --- /dev/null +++ b/kapitel11/sidan_177_ex1.sh @@ -0,0 +1,3 @@ +#!/bin/bash +dag=$(date +%j) +echo "Dag $dag på året" diff --git a/kapitel11/sidan_185_ex1.sh b/kapitel11/sidan_185_ex1.sh new file mode 100644 index 0000000..3dddf38 --- /dev/null +++ b/kapitel11/sidan_185_ex1.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +wget -q www.google.se -O /dev/null +if [ $? -eq 0 ]; then + echo "Internet verkar fungera" +fi diff --git a/kapitel11/sidan_186_ex1.sh b/kapitel11/sidan_186_ex1.sh new file mode 100644 index 0000000..54c8b00 --- /dev/null +++ b/kapitel11/sidan_186_ex1.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +wget -q www.google.se -O /dev/null +if [ $? -eq 0 ]; then + echo "Internet verkar fungera" +else + echo "Internet verkar varar nere..." +fi diff --git a/kapitel11/sidan_186_ex2.sh b/kapitel11/sidan_186_ex2.sh new file mode 100644 index 0000000..f34266a --- /dev/null +++ b/kapitel11/sidan_186_ex2.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +tal=3 + +if [ $tal -gt 10 ]; then + echo "$tal är större än 10" +elif [ $tal -lt 5 ]; then + echo "$tal är mindre än 5" +else + echo "$tal ligger mellan 5 och 10" +fi diff --git a/kapitel11/sidan_188_ex1.sh b/kapitel11/sidan_188_ex1.sh new file mode 100644 index 0000000..96fb1ed --- /dev/null +++ b/kapitel11/sidan_188_ex1.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +filnamn="/etc/passwd" +if [ -w $filnamn ]; then + echo "Du har skrivrättigheter till passwd-filen" + echo "Då är du förmodligen root..." +else + echo "Du har inte skrivrättigheter till passwd-filen" +fi diff --git a/kapitel11/sidan_188_ex2.sh b/kapitel11/sidan_188_ex2.sh new file mode 100644 index 0000000..9bc1ab1 --- /dev/null +++ b/kapitel11/sidan_188_ex2.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +filnamn="/etc/passwd" +if [ ! -w $filnamn ]; then + echo "Du har INTE skrivrättigheter till passwd-filen" +fi diff --git a/kapitel11/sidan_189_ex1.sh b/kapitel11/sidan_189_ex1.sh new file mode 100644 index 0000000..d6fd099 --- /dev/null +++ b/kapitel11/sidan_189_ex1.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +filnamn="/home/kalle" +if [ -d $filnamn ]; then + echo "$filnamn finns och är en katalog" +else + echo "$filnamn finns inte, eller är inte en katalog" +fi diff --git a/kapitel11/sidan_190_ex1.sh b/kapitel11/sidan_190_ex1.sh new file mode 100644 index 0000000..ba8ffef --- /dev/null +++ b/kapitel11/sidan_190_ex1.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +if [ "$USER" == "jake" ]; then + if [ $(date '+%H') -le 6 ]; then + echo "God morgon Jack-Benny!" + elif [ $(date '+%H') -le 16 ]; then + echo "God dag Jack-Benny" + else + echo "God kväll Jack-Benny, hoppas din dag varit bra" + fi + echo "Klockan är $(date '+%H:%M') och du är i $PWD" +elif [ "$USER" == "lisa" ]; then + echo "Välkommen tillbaks till systemet Lisa!" + echo "Din nuvarande terminal är en $TERM" +elif [ $UID -eq 0 ]; then + echo "Du är root - du är allsmäktig" +else + echo "Hej och välkommen till systemet" +fi diff --git a/kapitel11/sidan_193_ex1.sh b/kapitel11/sidan_193_ex1.sh new file mode 100644 index 0000000..d4bc584 --- /dev/null +++ b/kapitel11/sidan_193_ex1.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +if [ "hej" == "nej" ]; then + echo "hej och nej matchar" +else + echo "hej och nej matchar INTE" +fi + +if [ "hej" \> "katt" ]; then + echo "hej är 'större än' katt" +else + echo "Nej du, katt är allt 'större än' hej" +fi + +if [ "#" \> "!" ]; then + echo "# är 'störe än' !" +fi + +if [ "hej" != "nej" ]; then + echo "Jag sa ju det, hej och nej matchar inte" +fi diff --git a/kapitel11/sidan_194_ex1.sh b/kapitel11/sidan_194_ex1.sh new file mode 100644 index 0000000..bdbdcc0 --- /dev/null +++ b/kapitel11/sidan_194_ex1.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +manad=$(date '+%m') + +case $manad in + 12) + echo "Det är vinter" + ;; + 0[1-2]) + echo "Det är vinter" + ;; + 0[3-5]) + echo "Det är vår" + ;; + 0[6-8]) + echo "Det är sommar" + ;; + 09) + echo "Det är höst" + ;; + 1[0-1]) + echo "Det är höst" + ;; + *) + echo "Nånting konstigt har hänt...?" + ;; +esac diff --git a/kapitel11/sidan_196_ex1.sh b/kapitel11/sidan_196_ex1.sh new file mode 100644 index 0000000..8bbc51b --- /dev/null +++ b/kapitel11/sidan_196_ex1.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +for s in $(cat namn.txt); do + echo "Hej $s, hur är läget?" +done diff --git a/kapitel11/sidan_197_ex1.sh b/kapitel11/sidan_197_ex1.sh new file mode 100644 index 0000000..feb68d7 --- /dev/null +++ b/kapitel11/sidan_197_ex1.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +for fil in $(ls); do + if [ -d $fil ]; then + echo "$fil är en katalog" + fi +done diff --git a/kapitel11/sidan_198_ex1.sh b/kapitel11/sidan_198_ex1.sh new file mode 100644 index 0000000..dd0626d --- /dev/null +++ b/kapitel11/sidan_198_ex1.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +lista=(9 55 10 99) + +for i in ${lista[@]}; do + echo "$i * 10" | bc +done diff --git a/kapitel11/sidan_198_ex2.sh b/kapitel11/sidan_198_ex2.sh new file mode 100644 index 0000000..2dca827 --- /dev/null +++ b/kapitel11/sidan_198_ex2.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +lista=(9 55 10 99) + +for i in ${lista[@]}; do + printf "$i" +done diff --git a/kapitel11/sidan_199_ex1.sh b/kapitel11/sidan_199_ex1.sh new file mode 100644 index 0000000..7d63c43 --- /dev/null +++ b/kapitel11/sidan_199_ex1.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +lista=(9 55 10 99) + +for i in ${lista[@]}; do + printf "$i " +done +printf "\n" diff --git a/kapitel11/sidan_200_ex1.sh b/kapitel11/sidan_200_ex1.sh new file mode 100644 index 0000000..5b7e66c --- /dev/null +++ b/kapitel11/sidan_200_ex1.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +lista=( "Hej svejs" "Tjo ho" "Jag kodar" "Det gör Lisa också" ) + +echo "" + +printf "Exempel med [*] och dubbelcitat:\n" +for i in "${lista[*]}"; do + echo "$i" +done + +printf "\nExempel med [@] och dubbelcitat:\n" +for i in "${lista[@]}"; do + echo "$i" +done + +printf "\nExempel med [*] utan citat:\n" +for i in ${lista[*]}; do + echo "$i" +done + +printf "\nExempel med [@] utan citat:\n" +for i in ${lista[@]}; do + echo "$i" +done diff --git a/kapitel11/sidan_202_ex1.sh b/kapitel11/sidan_202_ex1.sh new file mode 100644 index 0000000..84a528a --- /dev/null +++ b/kapitel11/sidan_202_ex1.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +tal=0 + +while [ $tal -lt 10 ]; do + echo "Talet är $tal" + let tal=tal+1 +done diff --git a/kapitel11/sidan_203_ex1.sh b/kapitel11/sidan_203_ex1.sh new file mode 100644 index 0000000..be1daa6 --- /dev/null +++ b/kapitel11/sidan_203_ex1.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +tal=0 + +until [ $tal -gt 10 ]; do + echo "Talet är $tal" + let tal=tal+1 +done diff --git a/kapitel11/sidan_204_ex1.sh b/kapitel11/sidan_204_ex1.sh new file mode 100644 index 0000000..9ddd5b3 --- /dev/null +++ b/kapitel11/sidan_204_ex1.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +function halsa +{ + echo "Hejsan Jack-Benny" +} + +if [ $UID -eq 1000 ]; then + halsa +fi diff --git a/kapitel11/sidan_204_ex2.sh b/kapitel11/sidan_204_ex2.sh new file mode 100644 index 0000000..ff452ca --- /dev/null +++ b/kapitel11/sidan_204_ex2.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +function halsa +{ + echo "Hejsan $1, hur är läget?" +} + +halsa $USER diff --git a/kapitel11/sidan_205_ex1.sh b/kapitel11/sidan_205_ex1.sh new file mode 100644 index 0000000..e7db887 --- /dev/null +++ b/kapitel11/sidan_205_ex1.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +function halsa +{ + echo "Hejsan $1, hur är läget?" + echo "Ditt UID är $2" + echo "Din favoritfärg är $3" +} + +halsa $USER $UID "blå" diff --git a/kapitel11/sidan_206_ex1.sh b/kapitel11/sidan_206_ex1.sh new file mode 100644 index 0000000..5f47615 --- /dev/null +++ b/kapitel11/sidan_206_ex1.sh @@ -0,0 +1,48 @@ +#!/bin/bash + +function hjalp +{ + echo "Ange tre argument, med mellanslag mellan dem!" + echo "Exempelvis: 4.5 x 9" + echo "" + echo "Giltiga operatorer är: + - x /" + echo "x motsvarar här multiplikation" + exit 1 # Avsluta skriptet om något gick fel +} + +# Kontrollera så att användaren angett tre argument +if [ $# -ne 3 ]; then + hjalp +fi + +# Kontrollera så att operatorn antingen är + - / eller x +echo $2 | egrep '[+/x-]' &> /dev/null +if [ $? -ne 0 ]; then + hjalp +fi + +# Kontrollera så att talen endast är heltal eller flyttal +echo $1 | egrep '^[+-]?[0-9]+\.?[0-9]*$' &> /dev/null +if [ $? -ne 0 ]; then + hjalp +fi + +echo $3 | egrep '^[+-]?[0-9]+\.?[0-9]*$' &> /dev/null +if [ $? -ne 0 ]; then + hjalp +fi + +# Gör om 'x' till '*', och spara ner operatorn i +# en egen variabel (även för övriga operatorer) +if [ "$2" == "x" ]; then + operator="*" +else + operator="$2" +fi + +# Spara ner operanderna i egna variabler +operandEtt="$1" +operandTva="$3" + +# Utför beräkningen +echo "scale=3; $operandEtt $operator $operandTva" | bc diff --git a/kapitel12/dummy.service b/kapitel12/dummy.service new file mode 100644 index 0000000..7345559 --- /dev/null +++ b/kapitel12/dummy.service @@ -0,0 +1,6 @@ +[Unit] +Description=Vår egna tjänst +[Service] +ExecStart=/usr/sbin/dummy.sh +[Install] +WantedBy=multi-user.target diff --git a/kapitel12/dummy.sh b/kapitel12/dummy.sh new file mode 100644 index 0000000..d5477bc --- /dev/null +++ b/kapitel12/dummy.sh @@ -0,0 +1,7 @@ +#!/bin/bash +PATH="/bin:/sbin:/usr/bin:/usr/sbin" +while true # Skapar en oändlig loop +do + echo "UNIX-tid $(date +%s)" # Skriver ut UNIX-tid + sleep 10 # Pausa 10 sekunder +done diff --git a/kapitel15/sidan_294_ex1.sh b/kapitel15/sidan_294_ex1.sh new file mode 100644 index 0000000..f1fcf82 --- /dev/null +++ b/kapitel15/sidan_294_ex1.sh @@ -0,0 +1,11 @@ +#!/bin/bash +PATH="/bin:/sbin:/usr/bin:/usr/sbin" + +today=$(date '+%Y%m%d') +folderToBackup="/home/kalle" +targetFolder="/backups" +backupname="kalle" +backupLog="/root/backup-$today.log" + +tar cvf ${targetFolder}/${backupname}-${today}.tar \ + ${folderToBackup} &> ${backupLog} diff --git a/linux-systemadministration.png b/linux-systemadministration.png new file mode 100644 index 0000000..438c938 Binary files /dev/null and b/linux-systemadministration.png differ