OS - 2021/22 - 1. domača naloga¶
DN1a¶
Skripta prejme en argument: DN1a.sh imenik
Skripta preveri v podanem imeniku koliko imamo navadnih datotek, koliko skritih datotek, koliko mehkih povezav, koliko datotek, ki imajo več kot eno trdo povezavo, koliko cevovodov in koliko imenikov.
Resitev
#!/bin/bash
set -euo pipefail
echo datoteke: $(ls -Ald $1/?* | grep '^-' | wc -l)
echo skrite: $(ls -pA $1 | grep '^\..*[^/]$' | wc -l)
echo mehke povezave: $(ls -Al $1/. | grep '^l' | wc -l)
echo trde povezave: $(ls -Ald $1/?* | grep '^-' | awk '{ print $2}' | grep -v 1 | wc -l)
echo cevovodi: $(find $1 -type p | wc -l)
echo imeniki: $(ls -Ap $1 | grep '/$' | wc -l)
DN1b¶
Skripta prejme dva ali več argumentov: DN1b.sh datoteka uporabnik [uporabnik]...
Skripta kot prvi argument prejme pot do datoteke, od drugega argumenta naprej pa dobi seznam uporabnikov. Vsem podanim uporabnikom s pomočjo ACL (Access Control List) dodeli možnost branja in poganjanja datoteke (tudi če niso lastniki datoteke ali člani skupine datoteke; pri čemer pa vsi ostali uporabniki sistema teh dveh pravic ne dobijo). Namig: poiščite ukaz za spreminjanje ACL za datoteko.
DN1c¶
Skripta prejme tri argumente: DN1c.sh imenik končnica niz
V podanem imeniku rekurzivno poiščite vse datoteke s končnico končnica, ki vsebujejo iskani niz. Izpišite najdeno datoteko, številko vrstice, kjer se niz nahaja in vsebino vrstice z označenim iskanim nizom.
Če izvedemo skripto ./DN1c.sh /home/student py "import torch"
kot rezultat dobimo:
/home/student/preprocess/crop.py : 2 : import torch
/home/student/preprocess/crop.py : 3 : import torch.backends.cudnn as cudnn
Resitev
DN1d¶
Skripta nima argumentov:
DN1d.sh
Skripta izpiše seznam vseh uporabnikov in velikost njihovega domačega imenika urejenega po velikosti od tistega, ki zasede največ prostora do najmanj. Velikost izpišite v MB in samo za tiste uporabnike, ki imajo velikost večjo od 1MB.
Resitev
DN1e¶
Skripta prejme dva argumenta: DN1e.sh imenik1 imenik2
Skripta naredi "pametno" kopijo datotek iz imenik1
v imenik2
. Kopirajo se samo tiste datoteke, ki so nove. Se pravi, da še niso v imenik2
ali se je njihova vsebina spremnila. Na koncu program napiše koliko datotek se je uspešno skopiralo.
> ./DN1e.sh imenik1 imenik2
Uspešno kopiranih 12 datotek.
> ./DN1e.sh imenik1 imenik2
Ni novih datotek.
> touch imenik1/dat.txt
> ./DN1e.sh imenik1 imenik2
Uspešno kopirana 1 datoteka.
> echo "nova vsebina" >imenik1/dat.txt
> ./DN1e.sh imenik1 imenik2
Uspešno kopirana 1 datoteka.
Resitev
#!/bin/bash
# set -euo pipefail
to=$(rsync -ari "$1/" "$2" | grep -v '/$' | wc -l)
if [[ $to = "0" ]]; then echo "Ni novih datotek."
elif [[ $to =~ ^1$|01$ ]]; then echo "Uspešno kopirana $to datoteka."
elif [[ $to =~ ^2$|02$ ]]; then echo "Uspešno kopirani $to datoteki."
elif [[ $to =~ ^[34]$|0[34]$ ]]; then echo "Uspešno kopirane $to datoteke."
else echo "Uspešno kopiranih $to datotek."
fi