Script

Her kan det være greit å bytte ut -cJf med -uJf om man bare skal oppdatere backup.tgx code find $HOME -type f -mtime 365 -size +10k | xargs tar -cJf backup.tgx code For å ikke ta med visse filtyper kan vi bruke //tar --exclude=FILTYPE// (settes etter tar -cJf backup.tgx) Evt i find; find -not -iname "*.zip"
 * Hente filer i hjemmemappe som er eldre enn 1 år, ikke mindre enn 10k og lage tar med LZMA2 komprimering**

Skulle det finnes en fil med samme navn i destination folder, så vil denne filen ikke overskrives, og den andre blir liggende
 * Her henter vi mp3 filene som ligger i en mappe, sjekker at destination folder eksisterer og flytter filene dit.**

code if [ ! -d $HOME/tmp/mp3] ; then mkdir -p $HOME/tmp/mp3 ; fi
 * 1) !/bin/sh

find $HOME/musikk -name "*.mp3" -type f -exec mv -n {} $HOME/tmp/mp3 \; code code find /home -type f -iname "*.jpg*" > liste.txt
 * JPG sjekk:**
 * 1) !/bin/bash

while read line do JPGDIR=`dirname $line`/jpg temp=`dirname $line` TISS=`find $temp -name "jpg" -type d -maxdepth 1`

echo $JPGDIR | grep "jpg/jpg">/dev/null if [ $? -eq 1 ] then if [ ! -d jpg/ ] then mkdir $JPGDIR fi fi
 * 1) Sjekk om det trengs å lages et jpg folder

echo $TISS | grep "jpg">/dev/null if [ $? -eq 0 ] then if [ $TISS != $temp ] then mv $line $TISS fi fi
 * 1) Ikke flytt jpgs som alt ligger i jpg/ folder

done < "liste.txt" rm liste.txt

echo "ferdig" code

Oppgave 3: -Script som finner .txt filer, og tilføyer ".kopi" til filendelsen. "~/testemappe" kan bare byttes ut med /home etc for å søke etter .txt filer der isteden.

lager et script som heter makeCopy.sh code
 * 1) !/bin/sh

find ~/testemappe -name "*.txt" | xargs -I {} mv {} {}.kopi

code Her blir filendelsen tilført ".kopi"


 * Hvordan ` og ` fungerer**

code echo Jeg heter `whoami` code Her vil whoami bli kjørt og verdien av den blir satt inn istedet for kommandoen I mitt tilfelle vil dette vises i terminal: Jeg heter cizu

code MASKINNAVN=`hostname` code Her får variabelen MASKINNAVN, verdien av hostname kommandoen code `which ls` code Her skulle man jo tro at man fikk /bin/ls som svar, men dette skjer ikke. output blir en ls uten formatering til terminal code `echo ls -la` code Her får vi opp outputen av ls -la, også uten formatering

En mer nyttig kommando kan være en som denne: code kill `pgrep et-program-med-mange-PID's` code Her bruker vi pgrep til å finne PID'ene til programmet, får så å drepe denne (kommandoen kill kan gis alle parametere)


 * Bruk av sudo**

Brukeren cizu skal ha tilgang til å bruke vim til å redigere /etc/fstab Som //root// starter du //visudo// (en liten terskel for å lære seg vi her, så "man vi" først) code cizu   ALL=/usr/bin/vim,/etc/fstab code Her kunne vi brukt "cizu ALL= NOPASSWD: /usr/bin/vim,/etc/fstab" om brukeren skulle slippe passord

Brukeren kan også få kjøre prosesser under en annen brukers ID eller en annen gruppe code peter ALL=(accounts) /bin/kill, /usr/bin/kill, /usr/bin/pkill code Brukeren kan da drepe en prosess som brukeren accounts med følgende: code [peter@bigboy peter]# sudo -u accounts pkill prosess code Hvis da denne brukeren skulle få lov til å spawne //bash// eller //sh// som brukeren //accounts//, ville han også få tilgang til //accounts// filer


 * Bruk av crontab**

Som //root// start //crontab -e// code code //killall quake// hvert 2. min mellom 8-16 og mellom man-lør Tillater quake mellom 12-13 og utenom arbeidstid Vi bruker hele timer her for å gjøre det lettere. Hvis man trenger større kompleksitet, kan man installere fcron og bruke dette.
 * 1) Minute   Hour   Day of Month       Month          Day of Week        Command
 * 2) (0-59)  (0-23)     (1-31)    (1-12 or Jan-Dec)  (0-6 or Sun-Sat)
 * /2 8-12,13-16 * * 1-6 /usr/bin/killall quake


 * Script for opprettelse av MANGE brukere**

Her er Helge Haftings forslag code useradd $1 -p `mkpasswd x$1x` -G ansatt mkdir /home/$1 chown $1:ansatt /home/$1 cp -a /etc/skel/.[a-z]* /home/$1 chown $1:ansatt /home/$1/.[a-z]* code Denne er någet for mye og kan gjøres enklere code useradd $1 -p `mkpasswd x$1x` -g $2 -m code Her angis da henholdsvis //brukernavn// og //gruppe// etter ./script Vi bruker her liten -g og ikke -G for at brukeren bare skal tilhøre angitt gruppe By default når man bruker -m switchen vil innhold i /etc/skel kopieres over til brukerens hjemmemappe. Dette kan overstyres med -k switchen, hvor man spesifiserer dette selv

Videre kommer et script som kan hente brukere fra en liste på denne formen: bruker1 bruker2 bruker3 code for x in $(cat nyebrukere.txt); do useradd ${x} -p `mkpasswd x${x}` -g ingen -m ; done code Med litt vidreutvikling kan man få dette på formen ./script liste gruppe code for x in $(cat $1); do useradd ${x} -p `mkpasswd x${x}` -g $2 -m ; done code Done!
 * 1) !/bin/sh