Systemy operacyjne – pracowanie z bashem
02 Cze, 2007
Kolokwium z sysopów i moje przykładowe rozwiązania do niektórych zadań… Mile widziane alternatywne toki rozumowania i rozwiązania. :-)
Polecenie 1.
Korzystając z polecenia mkdir i konstrukcji pomocniczej (man bash) stwórz strukturę katalogów:
kat1 kat2 kat3 kat4 ... kat15
kat4 kat6 kat8 ... kat30
kat9 kat12 ... kat45
... ... kat225
Polecenie 2.
Zapisz linię polecenia, która przeniesie wszystkie pliki w katalogu bieżącym zawierające w nazwie ciąg znaków kpn do katalogu KPN w Twoim katalogu domowym.
Polecenie 3.
Stwórz listę plików o rozmiarze większym niż 3MB w Twoim katalogu domowym w pliku bydlaki.lista.
Polecenie 4.
Zapisz linię polecenia, które w przypadku gdy liczba plików w aktualnym katalogu jest parzysta wyświetli nazwy 6 plików w największym rozmiarze bez pliku największego.
Polecenie 5.
Zapisz linię polecenia, która zmieni nazwy wszystkich plików w katalogu bieżącym z rozszerzeniem exe na starą nazwę z rozszerzeniem executable.
Polecenie 6.
Zapisz polecenie, które wykona statystykę słów pliku, którego nazwa zostanie pobrana z klawiatury (read). Wyniki mogą być w postaci słowo liczba_wystapien
Polecenie 7.
Napisz skryt "zegara konsolowego", który jako argument przyjmie parametr określający format wyświetlanego czasu (12- lub 24-godzinny). Ponadto za każdym razem, kiedy użytkownik wciśnie klawisz Ctrl-| (SIGQUIT) program zmieni format wyświetlania.
Komentarze do wpisu "Systemy operacyjne – pracowanie z bashem":
1.
Jiobel napisał(a):
02 Cze 2007, 02:03:53
Zad 2.
mv -f ./*kpn* ~/KPN 2> /dev/null || echo Brak plikow...Zad 3.
find -size +3M > ~/bydlaki.listaZad 5.
find *.exe -exec mv {} {}cutable \; 2> /dev/null || echo Brak plikow *.exe!Zad 4.
( [ `expr \`ls -l | wc -l\` % 2` -eq 0 ] && ls -lS | head -n 8 | tail -n 6 ) || echo Nieparzysta ilosc plikow...2.
Michał Górny napisał(a):
02 Cze 2007, 09:49:17
Zad. 1) Brak objaśnienia „diagramu”, nie wiem, jak to tak naprawdę ma być ułożone.
Zad. 2) mkdir -p ~/KPN; mv ./*kpn* ~/KPN/
Zad. 3) find -size +3M -fprint ~/bydlaki.lista
Zad. 4) (znów niesprecyzowana końcówka — czy ma być wyświetlone 6-1, czyli 7-1)
PLIKI=`find -maxdepth 1 -type f -printf „%s\t%P\n” | sort -n -r`
expr `echo „$PLIKI” | wc -l` % 2 || ( echo „$PLIKI” | head -6 | tail -5 | sed -e „s/^[0-9]*\t//g”
Zad. 5) rename .exe .executable *.exe
3.
Jiobel napisał(a):
02 Cze 2007, 13:05:47
W
kat1ma znajdować siękat2,kat3,kat4aż dokat15. Wkat2ma byćkat4. Wkat3powinny byćkat6ikat9. I tak dalej, rozumiesz?W Twoim zadaniu 2. oddzielasz dwie komendy „;” i w związku z tym moje pytanie – to jest to samo, jak wrzuciłbym to w potok (czyli w moim rozumowaniu oddzielił je „|”)?
Zadanie 4. i Twoje wątpliwości… Zupełnie nie wiem, o co Ci chodzi, więc nie pomogę.
A zadanie 5. i Twoje rozwiązanie – się podoba, zwłaszcza jeśli porównać do mojego… :-)
4.
Michał Górny napisał(a):
02 Cze 2007, 13:16:36
Ad. 1) (nie sprawdzałem, mogłem popełnić błąd, zwłaszcza z ((…)) )
mkdir kat1; cd kat1
for (( N = 2 ; N <= 15 ; N++ )); do
mkdir kat$N; cd kat$N
for (( M = 2 ; M <= N ; M++ )); do
mkdir kat`expr $M * $N`
done
cd ..
done
Ad. 2) Hm… tak samo to nie jest, ale w tym przypadku nie zrobi różnicy. Średnik jest równoznaczny z nową linią.
Ad. 4) „wyświetli nazwy 6 plików w największym rozmiarze bez pliku największego.” — tzn. ma wybrać 6 i pierwszy odrzucić, wypisując 5, czy wybrać 6, licząc od drugiego z kolei?
A tak swoją drogą, preferuję użycie „find” zamiast „ls” w skryptach. Nie mam żadnych dowodów, ale odnoszę wrażenie, że niezawsze „ls” może dawać tak samo sformatowany wynik. A w przypadku „find” masz pełną kontrolę.
PS. Dalsze też chcesz?
5.
Jiobel napisał(a):
02 Cze 2007, 18:21:32
Ad4 – wybrać 6 od drugie z kolei.
Ad2 – racja, racja…
W tym 1. się walnąłeś na czymś (mi krzyczy, że przy
expr)Jeśli chodzi o dalsze – już są zrobione, później dopisze ale… jak Ci się chce, możesz też to zrobić. :-)
A jeśli chodzi o
lsvs.find– co masz na myśli mówiąc, żelsnie daje tego czasem, czego moglibyśmy się spodziewać?6.
Michał Górny napisał(a):
02 Cze 2007, 19:34:10
Ad. 1) Wyeskejpuj gwiazdkę, bo bash podstawia wszystkie pliki.
A odnośnie ls: nie mówię, że nie daje — mam wątpliwości, czy zawsze i wszędzie będzie dawać. ‘find’ ma na pewno bardziej ujednolicony output.
7.
Michał Górny napisał(a):
02 Cze 2007, 22:02:16
Ad. 7) Takie coś może być(?):
8.
GiM napisał(a):
09 Cze 2007, 19:42:14
jiobel: spróbuj stworzyć plik, który ma w nazwie ‘\n’ to zobaczysz o co peresowi biegało z find vs ls
edycja: btw: czyta się dziobel czy z polskiego jiobel :)
Dodaj komentarz: