Linuxy 1...2...3

Forum dla studentów PB ... Nie wiesz jak zrobić jakieś zadanie ? My tym bardziej ! Ale "w kupie siła"

Nie jesteś zalogowany na forum.

Ogłoszenie

UWAGA! ZBLIŻAJĄ SIĘ EGZAMINY

Materiały wrzucajcie/możecie znaleźć w odpowiednich kategoriach w forach typu "Notatki / Materiały...". Zachęcam do dyskusji i wspólnej nauki.

Skąd pomysł na takie forum ?

Jak sama nazwa wskazuje LINUX i możliwość używania internetu na kolokwium ;) Ale po co rozwijać je aż tak ? A próbowaliście coś kiedyś znaleźć na forum grupy na FB ? Zanim się znajdzie to co nas interesuje minie trochę czasu... a tutaj chociaż jest segregacja na przedmioty.

#1 2015-06-09 00:50:21

SromotnikJadowity
Administrator
Dołączył: 2015-06-07
Liczba postów: 11
AndroidChrome 43.0.2357.92

Kolos - ogólne zagadnienia / gotowce / to co miały inne grupy

Tutaj znajdziecie rozwiązania niektórych z zadań z PS'ow . Dzięki uprzejmości dobrej duszy która się tym podzieliła ;-) 

A na dole coś więcej do nauki jeśli ktoś chce zajebiście napisać oraz to co ja miałem na kolosie i co teraz jest na CEZ'ie

==============================================
=========== PODSTAWOWE POLECENIA ============
============================================
 
1. Sprawdź własny identyfikator oraz grupy, do których należysz.
2. Wyświetl zawartość katalogu domowego.
3. Wyświetl zawartość podstawowych katalogów w systemie (np. /dev, /etc, /home, /usr).
4. Utwórz katalog kat1 w katalogu domowym.
5. W katalogu kat1 utwórz jednym poleceniem strukturę katalogów kat2/kat3/kat4.
6. Usuń jednym poleceniem cała strukturę katalogów kat3/kat4.
7. Utwórz w katalogu domowym pliki o dowolnych nazwach z rozszerzeniami .txt i .c.
8. Skopiuj jednym poleceniem wszystkie pliki z katalogu domowego z rozszerzeniem .txt do
katalogu kat1.
9. Skopiuj jednym poleceniem wszystkie pliki z katalogu domowego z rozszerzeniem .c do
katalogu kat2.
10. Skopiuj całą strukturę katalogów kat1 tworząc analogiczną strukturę o nazwie kat1b.
11. Usuń wszystkie plik z katalogu kat1/kat2.
12. Usuń jednym poleceniem całą strukturę katalogów kat1b.
13. Zmień nazwę dowolnego pliku w katalogu kat1.
14. Przenieś katalog kat1/kat2 do katalogu domowego tworząc w ten sposób katalog kat2b.
15. Korzystając z programu find znajdź wszystkie pliki, które posiadają w nazwie słowo mozilla i
znajdują się w podkatalogach katalogu /usr.
16. Korzystając z programu find znajdź wszystkie katalogi o nazwie bin, które znajdują się w
katalogu /usr.
17. Skopiuj wszystkie pliki zwykłe o rozmiarze pomiędzy 10 a 100 bajtów z katalogu /usr/bin do
katalogu kat1/kat2 (wykorzystaj polecenie find z parametrem -exec).
18. W katalogu domowym utwórz plik o nazwie plik.txt - sprawdź jakie są prawa dostępu do
niego.
19. Dla pliku plik.txt dodaj prawo zapisu dla grupy.
20. Dla pliku plik.txt odejmij prawo zapisu dla właściciela.
21. Dla pliku plik.txt dodaj prawo wykonywania dla wszystkich użytkowników.
22. Dla pliku plik.txt przywróć oryginalne prawa korzystając z notacji numerycznej.
23. Utwórz dowiązanie do pliku plik.txt o nazwie plik2.txt w katalogu domowym.
24. Utwórz dowiązanie symboliczne do katalogu kat1/kat2 o nazwie abc w katalogu domowym.
25. Przejrzyj pomoc systemową dla wszystkich poleceń zaprezentowanych podczas zajęć.
 
 
======== ROZWIĄZANIA ========
 
 
1] id
2] ls ~
3] ls /dev
   ls /etcch
   ls /home
   ls /usr
4] mkdir ~/kat1
5] mkdir -p ~/kat1/kat2/kat3/kat4
6] cd ~/kat1/kat2
   rmdir - p kat3/kat4
7] touch plik1.txt plik2.c
8] cp ~/*.txt ~/kat1
9] cp ~/*.c ~/kat1/kat2
10] cp -r ~/kat1 ~/kat1b
11] rm -f ~/kat1/kat2/*
12] rm -rf ~/kat1b
13] mv ~/kat1/plik1.txt ~/kat1/plik2.txt
14] mv ~/kat1/kat2 ~/kat2b
15] su
    Hasło: *****
    find /usr -name *mozilla*
16] (uzyskanie praw roota)
    find /usr -type d -name bin
17] find /usr/bin -type f -size -100c -a -size +10c -exec cp {} ~/kat1/kat2 \;
18] touch ~/plik.txt
    ls -l ~/plik.txt
19] chmod g+w plik.txt
20] chmod u-x plik.txt
21] chmod uo+x plik.txt
22] chmod 664 plik.txt
23] ln ~/plik.txt ~/plik2.txt
24] ln -s ~/kat1/kat2 ~/abc
 
 
 
==============================================
=========== WYRAŻENIA REGULARNE =============
============================================
 
znaki specjalne:
- w dowolnym miejscu poza nawiasami kwadratowymi:
  ^ $ * + ? . ( ) [ ] { } \
 
- w nawiasach kwadratowych
  \ ^ - ]
 
.  - dowolny znak
^  - dopasuj występujące po operatorze wyrażenie do początku wiersza      
$  - dopasuj poprzedzające wyrażenie do końca wiersza
\x  - znaki specjalne, gdzie x to znak specjalny np. \$ zastąpi znak dolara
[lista]  - zastępuje dowolny znak spośród tych wymienionych na liście, mogą to być przedziały np. [0-9] lub [a-d]
[^lista]  - wybrane zostaną znaki, które nie są na liście
\<wyraz\>  - wyrażenie jako cały wyraz
?  - jeden lub więcej
(a|b)   - dopasuje wyrażenie a lub wyrażenie b
*  - dopasuj zero lub więcej wyrażeń znaku poprzedzający operator
+  - jeden lub więcej elementów poprzedzających operator
 
Typu POSIX:
[:upper:] - wielka litera
[:lower:] - mała litera
[:alpha:] - litery
[:alnum:] - litery i cyfry
[:digit:] - cyfry
[:punct:] - znak interpunkcyjny
[:blank:] - spacja lub tabulator
[:space:] - spacja
[:word:] - litery, cyfry i znaki podkreślenia
 
Rozszerzone (grep -E lub egrep)
* - zero lub więcej
+ - jeden lub więcej
? - zero lub jeden
{3} - trzy
{3,} - trzy lub więcej
{3,5} - trzy, cztery lub pięć
 
 
==============================================
================= GREP ======================
============================================
http://pl.wikipedia.org/wiki/Grep
 
1. Znaleźć linie w liku /etc/passwd zawierające informacje o użytkownikach używających
powłoki bash (ostania kolumna zawiera informację nt. powłoki użytkownika).
2. Z pliku last.dat wypisać informację o logowaniach użytkowników spod adresu 212.33.66.26.
3. Na podstawie pliku last.dat policzyć, ile razy miały miejsce logowania dnia 16 października
4. Z pliku last.dat wypisać linie zawierające informację o logowaniach użytkownika romek
5. Z pliku lista.txt wypisać te linie, w których występuje ciąg znaków st1.
6. Z pliku lista.txt wypisać te linie, w których występuje ciąg znaków st1, pod warunkiem, że
występuje on na końcu linii.
7. Z pliku lista.txt wypisać te linie, w których występuje ciąg znaków st1, pod warunkiem, że
występuje on na początku linii.
8. Z pliku lista.txt wypisać te linie, w których występuje słowo Anna, pisane dużymi lub małymi
literami.
9. Z pliku lista.txt wypisać wszystkie linie, w których występuje co najmniej jedna cyfra.
10. Napisać polecenie, które w pliku lista.txt znajdzie wszystkie linie zawierające którykolwiek ze
znaków: „]” , „*” , „.”.
11. Z o nazwie lista.txt wypisać wszystkie niepuste linie.
12. Z pliku lista.txt wypisać wszystkie linie, w których występuje zapis postaci cyfra.cyfra.
13. Z pliku lista.txt wypisać wszystkie linie, w których nie występuje zapis postaci cyfra.cyfra.
14. W pliku ‘frog.txt’ znajdź wszystkie linie zawierające wyraz „king” lub „king’s son”.
15. Wypisz z pliku /usr/share/dict/words wszystkie słowa zawierające samogłoski „a”, „e”, „i”,
„o” i „u” dokładnie w tej kolejności
 
======== ROZWIĄZANIA ========
 
1] grep bash$ /etc/passwd
2] grep 212.33.66.26 ~/last.dat
3] grep -c "Oct 16" ~/last.dat
4] grep -w romek ~/last.dat
grep "\<romek\>" ~/last.dat (wersja alternatywna)
5] grep st1 ~/lista.txt
6] grep st1$ ~/lista.txt
7] grep ^st1 ~/lista.txt
8] grep -i anna ~/lista.txt
9] grep [[:digit:]] ~/lista.txt
10] grep [']*.'] ~/lista.txt
11] grep . ~/lista.txt
grep [^$] ~/lista.txt
grep -v ^$ ~/lista.txt
12] grep [0-9].[0-9] ~/lista.txt
13] grep -v [0-9].[0-9] ~/lista.txt
14] grep "\(king\|king's son\)" ~/frog.txt
15] grep ^[^aeiou]*a[^aeiou]*e[^aeiou]*i[^aeiou]*o[^aeiou]*u[^aeiou]*$ /usr/share/dict/words
 
 
==============================================
=========== STRUMIENIE I POTOKI =============
============================================
 
1. Posortować osoby w pliku /etc/passwd wg numeru grupy, wynik zapisać w pliku
passwd.posortowane.grupami
2. Na podstawie zawartości pliku /etc/passwd policzyć użytkowników systemu i kont specjalnych z
zablokowanym dostępem do powłoki shell
3. Wyświetl plik /etc/passwd z podziałem na strony przyjmując, że strona ma 15 linii tekstu
4. Korzystając z polecenia cat utwórz plik tekst.txt, który będzie składał się z zawartości pliku
tekst1.txt, ciągu znaków podanego ze standardowego wejścia (klawiatury) i pliku tekst2.txt.
5. Wyświetl linie o numerach 3, 4 i 5 z pliku /etc/passwd
6. Wyświetl linie o numerach 7, 6 i 5 od końca pliku /etc/passwd
7. Wyświetl zawartość pliku lista.txt w jednej linii
8. Napisać polecenie zliczające sumę znaków z pierwszych pięciu linii pliku lista.txt
9. Zapisać w pliku listals.txt listę plików z aktualnego katalogu, zamieniając wszystkie małe litery na
duże.
10. Wyświetl listę praw dostępu do plików w aktualnym katalogu, ich rozmiar i nazwę.
11. Wyświetl listę plików w aktualnym katalogu, posortowaną według rozmiaru pliku.
12. Podaj liczbę plików użytkownika w katalogu domowym (wykorzystaj polecenie find).
13. Podaj nazwy trzech najmniejszych plików zwykłych w katalogu posortowane wg nazwy.
14. Podaj pięciu użytkowników o największej liczbie uruchomionych procesów
15. Podaj statystykę używanych komend ( polecenie history).
16. Sprawdź czy któryś z użytkowników jest zalogowany w systemie więcej niż jeden raz
17. Wyświetl (tylko) łączną liczbę wyrazów znajdujących się w plikach lista.txt, last.txt i frog.txt
18. Do pliku frog_rev.txt przepisz zawartość pliku numerując wiersze malejąco (ostatni wiersz ma
mieć numer 1)
19. Wypisz 5 linię podaną ze standardowego wejścia.
 
1] sort -t ':' -n -k 4 /etc/passwd > ~/passwd.posortowane.grupami
2] grep -c /bin/false /etc/passwd
3] more -15 /etc/passwd
4] echo "Plik 1" > ~/tekst1.txt
   echo "Plik 2" > ~/tekst2.txt
   cat tekst1.txt - tekst2.txt > tekst.txt
5] head -n 5 /etc/passwd | tail -n 3
6] tail -n 7 /etc/passwd | head -n 3
7] tr '\n' ' ' < ~/lista.txt
8] head -n 5 ~/lista.txt | wc -c
9] ls | tr '[:lower:]' '[:upper:]' > listals.txt
10] ls -l | tr -s ' ' | cut -d ' ' -f 1,5,9
11] ls -l | sort -k 5 -n
12] find ~ -type f | wc -l
13] ls -l | sort -k 5 -r | head -n 3 | sort -k 9
14] ps aux | cut -d ' ' -f 1 | sort | uniq -c | sort | head -n 5 | cut -c 9-
15] history | cut -d ' ' -f 4 | sort | uniq -c | sort -n -r
16] who | cut -d ' ' -f 1 | sort | uniq -c | grep -v ^[[:blank:]]*1
17] cat lista.txt frog.txt last.dat | wc -w
18] tac -r frog.txt | cat -n | tac -r > frog_rev.txt
19] head -n 5 | tail -n 1
 
sort manual
http://www.computerhope.com/unix/usort.htm
 
==============================================
================== SED ======================
============================================
 
1. Przeczytać manual do programu. Zwrócić uwagę na polecenia, ich składnię oraz sposób
adresacji poleceń.
2. Wyświetlić plik /etc/passwd przy pomocy sed.
3. Zamienić separator - dwukropek - w pliku /etc/passwd na spację.
4. Wyświetlić tylko nazwy użytkowników zapisanych w pliku /etc/passwd
5. Wyświetlić 4, 7, 10 i 13 linię pliku /etc/passwd
6. Wyświetlić określone przedziałem od 3 do 5 linie pliku /etc/passwd.
7. Wyświetlić linie pliku /etc/passwd opisujące osoby mające login zaczynający się na 's'.
8. Wyświetlić linie pliku /etc/passwd opisujące osoby mające login zaczynający się na 'm' lub 'a'.
9. Jak przy pomocy sed zaimitować polecenie grep -v?
10. Jak zamienić w pliku wszystkie słowa root na twój login?
11. Jak zamienić słowo 'root' na twój login w pliku, ale tylko w wierszach, w których występuje
'www'? A jak tam gdzie nie występuje?
12. Jak usunąć z pliku puste linie?
13. Jak zamienić przy pomocy sed wszystkie litery 'r' na 'k'?
14. Jak przy pomocy sed powtórzyć 3 razy pierwsze dwie litery każdego wiersza w pliku?
15. Napisz polecenie sed imitujące polecenie cut -d: -f2.
16. W jaki sposób zmienić kolejność słów (np. w pliku /etc/aliases)?
17. Napisz polecenie sed imitujące cat -n
 
======== ROZWIĄZANIA ========
 
2] sed -n p /etc/passwd
3] sed -e 's/:/ /g' /etc/passwd
4] sed 's/\([^:]*\).*/\1 /' /etc/passwd
   sed -e 's/:.*$/ /g' /etc/passwd
5] sed -n -e'4p' -e'7p' -e'10p' -e'13p' /etc/passwd
6] sed -n 3,5p /etc/passwd
7] sed -n -e '/^s/p' /etc/passwd
8] sed -n -e '/^[sm]/p' /etc/passwd
9] sed -e '/guest/d' /etc/passwd
10] sed -e "s/root/`whoami`/g" /etc/passwd
11] sed -e "/www/s/data/`whoami`/g" /etc/passwd
12] sed '/^$/d' /etc/passwd
13] sed 's/r/k/g' /etc/passwd
14] sed 's/^\s*\(.\{2\}\)/\1\1\1/g' /etc/passwd
15] sed -e 's/^[^:]*://;s/:.*$/ /g' /etc/passwd
16] sed 's/\(.*\).* \(.*\).*/\2 \1/' /etc/aliases
17] sed = qwerty | sed 'N;s/\n/\t/' (qwerty to nazwa pliku)
 
 
Wiele spacji na jedną
sed 's/ \+/ /g'
 
znaczki końca linii na spacje
cat plik | tr '\n' ' '
 
znaczki końca linii na tab
cat plik | tr '\n' '\t'
 
http://nalekcje.pl/systemy_operacyjne_i … owadzenie/
http://grafaz.pl/linux/edytor-sed/
http://www.computerhope.com/unix/utr.htm
 
 
==============================================
================== FIND =====================
============================================
 
http://www.tecmint.com/35-practical-exa … d-command/
http://alvinalexander.com/unix/edu/examples/find.shtml
 
basic 'find file' commands
--------------------------
find / -name foo.txt -type f -print             # full command
find / -name foo.txt -type f                    # -print isn't necessary
find / -name foo.txt                            # don't have to specify "type==file"
find . -name foo.txt                            # search under the current dir
find . -name "foo.*"                            # wildcard
find . -name "*.txt"                            # wildcard
find /users/al -name Cookbook -type d           # search '/users/al'
 
search multiple dirs
--------------------
find /opt /usr /var -name foo.scala -type f     # search multiple dirs
 
case-insensitive searching
--------------------------
find . -iname foo                               # find foo, Foo, FOo, FOO, etc.
find . -iname foo -type d                       # same thing, but only dirs
find . -iname foo -type f                       # same thing, but only files
 
find files with different extensions
------------------------------------
find . -type f \( -name "*.c" -o -name "*.sh" \)                       # *.c and *.sh files
find . -type f \( -name "*cache" -o -name "*xml" -o -name "*html" \)   # three patterns
 
find files that don't match a pattern (-not)
--------------------------------------------
find . -type f -not -name "*.html"                                # find all files not ending in ".html"
 
find files by text in the file (find + grep)
--------------------------------------------
find . -type f -name "*.java" -exec grep -l StringBuffer {} \;    # find StringBuffer in all *.java files
find . -type f -name "*.java" -exec grep -il string {} \;         # ignore case with -i option
find . -type f -name "*.gz" -exec zgrep 'GET /foo' {} \;          # search for a string in gzip'd files
 
5 lines before, 10 lines after grep matches
-------------------------------------------
find . -type f -name "*.scala" -exec grep -B5 -A10 'null' {} \;
     (see http://alvinalexander.com/linux-unix/fi … after-...)
 
find files and act on them (find + exec)
----------------------------------------
find /usr/local -name "*.html" -type f -exec chmod 644 {} \;      # change html files to mode 644
find htdocs cgi-bin -name "*.cgi" -type f -exec chmod 755 {} \;   # change cgi files to mode 755
find . -name "*.pl" -exec ls -ld {} \;                            # run ls command on files found
 
find and copy
-------------
find . -type f -name "*.mp3" -exec cp {} /tmp/MusicFiles \;       # cp *.mp3 files to /tmp/MusicFiles
 
copy one file to many dirs
--------------------------
find dir1 dir2 dir3 dir4 -type d -exec cp header.shtml {} \;      # copy the file header.shtml to those dirs
 
find and delete
---------------
find . -type f -name "Foo*" -exec rm {} \;                        # remove all "Foo*" files under current dir
find . -type d -name CVS -exec rm -r {} \;                        # remove all subdirectories named "CVS" under current dir
 
find files by modification time
-------------------------------
find . -mtime 1               # 24 hours
find . -mtime -7              # last 7 days
find . -mtime -7 -type f      # just files
find . -mtime -7 -type d      # just dirs
 
find files by modification time using a temp file
-------------------------------------------------
touch 09301330 poop           # 1) create a temp file with a specific timestamp
find . -mnewer poop           # 2) returns a list of new files
rm poop                       # 3) rm the temp file
 
find with time: this works on mac os x
--------------------------------------
find / -newerct '1 minute ago' -print
 
find and tar
------------
find . -type f -name "*.java" | xargs tar cvf myfile.tar
find . -type f -name "*.java" | xargs tar rvf myfile.tar
     (see http://alvinalexander.com/blog/post/lin … s-tar-crea...
     for more information)
 
find, tar, and xargs
--------------------
find . -name -type f '*.mp3' -mtime -180 -print0 | xargs -0 tar rvf music.tar
     (-print0 helps handle spaces in filenames)
     (see http://alvinalexander.com/mac-os-x/mac- … -space...)
 
find and pax (instead of xargs and tar)
---------------------------------------
find . -type f -name "*html" | xargs tar cvf jw-htmlfiles.tar -
find . -type f -name "*html" | pax -w -f jw-htmlfiles.tar
     (see http://alvinalexander.com/blog/post/lin … ad-of-tar)
 
 
 
 
==============================================
================== SKRYPTY ==================
============================================
 
1. Napisać skrypt, który najpierw czyści ekran, a następnie wyświetla komunikat Podaj swoje imię. Po wczytaniu imienia
podanego przez uŜytkownika, wyświetla komunikat powitalny: Witaj Imię (w miejscu Imię ma się pojawić imię podane
przez uŜytkownika).
 
2. Napisać skrypt, który wyświetla liczbę parametrów skryptu, nazwę skryptu, wszystkie parametry skryptu, oraz bieŜąca datę.
Uwaga: skrypt ma zadziałać poprawnie, nawet jeśli uŜytkownik zmieni nazwę pliku z zawartością skryptu.
 
3. Zmodyfikować skrypt 1 w taki sposób, aby podanie imienia Janek skutkowało wyświetleniem komunikatu Nie znam
Janka (w przypadku wpisania innych imion ma być wyświetlone powitanie).
 
4. Napisać skrypt, który wyświetla plik o nazwie podanej jako pierwszy parametr. JeŜeli uŜytkownik podał więcej parametrów niŜ
trzeba, lub nie podał Ŝadnego – ma się pojawić komunikat Uzycie: nazwa_skryptu nazwa_pliku, przy czym
nazwa_skryptu to napis będący nazwą skryptu.
 
5. Zmodyfikować skrypt w taki sposób, aby na końcu pojawił się jeden z komunikatów: Plik nazwa został wyświetlony
poprawnie lub Plik nazwa nie został wyświetlony poprawnie, przy czym w miejscu nazwa ma się pojawić
nazwa podana przez uŜytkownika jako parametr skryptu.
 
6. Napisać skrypt, który sprawdza, czy podana jako pierwszy parametr liczba całkowita jest dodatnia, jest ujemna, jest zerem. W
przypadku, gdy uŜytkownik nie poda inną liczbę niŜ jeden parametrów, ma się pojawić informacja, jak uŜywać skryptu. W
przypadku, gdy uŜytkownik nie poda liczby całkowitej – teŜ ma się pojawić odpowiedni komunikat.
 
7. Napisać skrypt, który wyświetli zawartość wszystkich plików, których nazwa rozpoczyna się od sk, i do których uŜytkownik ma
prawo do czytania.
 
8. Napisać skrypt, który wyświetli nazwy plików powtarzające się w dwóch katalogach, których nazwy podane są jako pierwszy i
drugi parametr skryptu. JeŜeli uŜytkownik podał inną niŜ dwa liczbę parametrów – ma się pojawić komunikat informujący o
uŜyciu programu. JeŜeli którykolwiek z parametrów nie jest nazwą katalogu – taŜ ma się pojawić odpowiedni komunikat.
 
9. Napisać skrypt, który wyświetli tabliczkę mnoŜenia (od 1 do 10) dla liczby podanej jako parametr skryptu. NaleŜy uŜyć instrukcji
for.
 
10. Napisać skrypt, który wyświetli tabliczkę mnoŜenia (od 1 do 10) dla liczby podanej jako parametr skryptu. NaleŜy uŜyć instrukcji
while.
 
11. Napisać skrypt, który będzie pobierał od uŜytkownika liczby, do momentu wpisania liczby 0. Na koniec ma wypisać sumę oraz
liczbę wpisanych liczb (nie uwzględniamy liczby 0).
 
12. Napisać skrypt, który tworzy puste pliki. Pierwszy parametr skryptu to rdzeń nazwy pliku, drugi to liczba plików. NaleŜy
poinformować uŜytkownika o sposobie uŜycia skryptu, jeŜeli poda on niewłaściwą liczbę parametrów. NaleŜy poinformować
uŜytkownika o błędzie, jeŜeli źle poda on liczbę plików do utworzenia.
 
13. Napisać skrypt, który wyświetli część lub całość pliku podanego jako drugi parametr skryptu. Pierwszym parametrem ma być
jedna z opcji: –h, –t lub –a, oznaczająca Ŝądanie wyświetlenia odpowiednio: 10 pierwszych linii pliku, 10 ostatnich linii pliku,
lub całego pliku. Podanie przez uŜytkownika opcji innej niŜ dostępne ma skutkować pojawieniem się komunikatu: Nieznana
opcja.
 
14. Napisać skrypt, który, dla pliku o nazwie podanej jako parametr skryptu wyświetli następujące informacje o nim:
- czy jest to plik,
- czy jest to plik niepusty,
- czy jest to katalog,
- czy moŜna go czytać,
- czy moŜna do niego pisać,
- czy jest to plik wykonywalny.
 
15. Napisać skrypt, który z katalogu podanego jako pierwszy parametr wyświetla pliki o rozszerzeniu podanym jako drugi parametr.
NaleŜy poinformować uŜytkownika o sposobie uŜycia skryptu, jeŜeli poda on niewłaściwą liczbę parametrów. NaleŜy
poinformować uŜytkownika o sposobie uŜycia skryptu, jeŜeli źle poda on liczbę parametrów. NaleŜy poinformować
uŜytkownika, jeŜeli źle poda on nazwę katalogu. NaleŜy poinformować uŜytkownika, jeŜeli nie moŜna wyświetlić pliku z
powodu braku praw do jego czytania.
 
16. Napisać skrypt, który prosi w pętli o podanie nazwy katalogu i wyświetla zawartość katalogu. Podanie pustej nazwy kończy
działanie skryptu. NaleŜy poinformować uŜytkownika, jeŜeli źle poda on nazwę katalogu.
 
 
======= CZĘŚĆ II ========
1. Napisać skrypt users.sh, który poda liczbę kont w katalogu /home.
 
2. Napisać skrypt rozszerz.sh, który zmienia rozszerzenia plików z katalogu domowego z
rozszerzenia podanego jako pierwszy argument skryptu na rozszerzenie podane jako drugi
argument pliku.
 
3. Napisać skrypt sprawdzający czy użytkownik o id podanym jako parametr wejściowy jest
zalogowany w systemie więcej niż jeden raz. Dla każdego użytkownika wyświetlić jego nazwę,
identyfikator i listę terminali, na których pracuje. Można podać więcej niż jeden identyfikator
jako dane wejściowe.
 
4. Napisz skrypt, który wyświetli nazwy po jednej wszystkich pliki z katalogu domowego
większe niż 100kB. Dla każdego wyświetlonego pliku skrypt ma zapytać, czy użytkownik chce
usunąć plik, postąpić zgodnie z jego wyborem, i przejść do następnego pliku. Skrypt ma
zapisać do pliku nazwy i czas usunięcia usuniętych plików
 
 
======== ROZWIĄZANIA ========
 
1]
#!/bin/bash
clear
echo "Podaj swoje imie: "
read imie
echo "Witaj $imie"
 
 
2]
#!/bin/bash
echo "$0" | sed -e 's/^.\{2\}//'
echo "$#"
for i in $*; do
echo "$i"
done
echo "$(date)"
 
 
3]
#!/bin/bash
clear
echo "Podaj swoje imie: "
read imie
if test $imie = "Janek"
        then echo "Nie znam Janka"
else
        echo "Witaj $imie"
fi
 
 
4]
#!/bin/bash
if [ $# -eq 0 -o $# -gt 1 ]
        then echo "Uzycie: $0 nazwa_pliku"
else
        cat $1
fi
 
 
5]
#!/bin/bash
if [ $# -eq 0 -o $# -gt 1 ]
        then echo "Uzycie: $0 nazwa_pliku"
else
        if [ -r $1 -a -f $1 ]
                then cat $1
                echo "Plik $1 został wyświetlony poprawnie"
        else
                echo "Plik $1 nie został wyświetlony poprawnie"
        fi
fi
 
 
6]
#!/bin/bash
if [ $# -eq 0 -o $# -gt 1 ]
        then echo "Uzycie: $0 liczba"
elif [ $1 -eq $1 2> /dev/null ]
        then if [ $1 -eq 0 ]
                then echo "Podana liczba jest zerem"
        elif [ $1 -lt 0 ]
                then echo "Podana liczba jest ujemna"
        else
                echo "Podana liczba jest dodatnia"
        fi
else
        echo "Podany parametr nie jest liczbą całkowitą"
fi
 
6] Wersja alternatywna
#!/bin/bash
if [ $# -eq 0 -o $# -gt 1 ]
        then echo "Uzycie: $0 liczba"
else
        liczba=echo $1 | grep -v ^[+-]?[0-9]*$
        if [ ! $liczba -eq "" ]
                then echo "Podany parametr nie jest liczbą całkowitą"
        elif [$1 -eq 0 ]
                then echo "Podana liczba jest zerem"
        elif [ $1 -lt 0 ]
                then echo "Podana liczba jest ujemna"
        else
                echo "Podana liczba jest dodatnia"
        fi    
fi
 
 
7]
#!/bin/bash
declare -a myarr
myarr=($(ls -l | sed -e "s/[[:space:]]\+/ /g" | grep "^.\{2\}w" | cut -d' ' -f9 | grep ^sk))
cat ${myarr
 
 
8]
#!/bin/bash
if [ ! $# -eq 2 ]
        then echo "Uzycie: $0 katalog1 katalog2"
elif [ ! -d $1 -o ! -d $2 ]
        then echo "Podane parametry nie są katalogami"
else
        echo `ls $1` `ls $2` | tr -s [:space:] \\n | sort | uniq -d
fi  
 
 
9]
#!/bin/bash
if [ ! $# -eq 1 ]
        then echo "Uzycie: $0 liczba"
elif [ $1 -eq $1 2> /dev/null ]
        then for i in {1..10}
        do
                echo "$1 * $i = $[$1*$i]"
        done
else
        echo "Podany parametr nie jest liczbą całkowitą"
fi  
 
 
10]
#!/bin/bash
if [ ! $# -eq 1 ]
        then echo "Uzycie: $0 liczba"
elif [ $1 -eq $1 2> /dev/null ]
        then
        i=1
        while [ $i -le 10 ]
        do
                echo "$1 * $i = $[$1*$i]"
                i=$[$i+1]
        done
else
        echo "Podany parametr nie jest liczbą całkowitą"
fi  
 
 
11]
#!/bin/bash
liczba=1
suma=0
licznik=-1
 
while [ ! $liczba -eq 0 ]
do
        licznik=$[$licznik+1]
        suma=$[$suma+$liczba]
        echo "Podaj liczbe: "
        read liczba
done
suma=$[$suma-1]
echo "Wczytano $licznik liczb. Ich suma wynosi $suma"
 
 
12]
#!/bin/bash
if [ ! $# -eq 2 ]
        then echo "Uzycie: $0 nazwa_pliku liczba_plikow"
elif [ $2 -ge 1 -a $2 -eq $2 2> /dev/null ]
        then
        for (( i=1; i<=$2; i++))
        do
                touch "$1$i"
        done
else
        echo "Podano błędną liczbę plików"
fi
 
13]
#!/bin/bash
if [ ! $# -eq 2 ]
        then echo "Uzycie: $0 nazwa_pliku opcja"
elif [ $1 == "-h" ]
        then head $2
elif [ $1 == "-t" ]
        then tail $2
elif [ $1 == "-a" ]
        then cat $2
else
        echo "Nieznana opcja"
fi
 
 
14]
#!/bin/bash
if [ ! $# -eq 1 ]
        then echo "Uzycie: $0 nazwa_pliku"
else
        if [ -f $1 ]
                then echo "Plik"
        fi
        if [ -d $1 ]
                then echo "Katalog"
        fi
        if [ -s $1 ]
                then echo "Niepusty"
        fi
        if [ -r $1 ]
                then echo "Można go czytać"
        fi
        if [ -w $1 ]
                then echo "Można do niego pisać"
        fi
        if [ -x $1 ]
                then echo "Wykonywalny"
        fi
fi
 
 
15]
#!/bin/bash
if [ ! $# -eq 2 ]
        then echo "Uzycie: $0 nazwa_pliku rozszerzenie"
elif [ ! -d $1 ]
        then echo "Pierwszy parametr nie jest katologiem !"
else
        for plik in $1/*
        do
                roz=`echo $plik | grep $2$ | wc -c`
                if [ $roz -gt 0 -a -f $plik ]
                        then
                        if [ -r $plik ]
                                then echo "Plik $plik:"
                                cat $plik
                                echo
                        else
                                echo "Brak uparwnień do czytania pliku $plik"
                        fi
                fi
        done
fi
 
 
16]
#!/bin/bash
echo "Podaj nazwę katalogu"
read kat
 
if [ ! -z kat ]
        then
        if [ -d $kat ]
                then ls $kat
        else
                echo "Nie znaleziono katalogu $kat"
        fi
fi
 
 
 
 
 
========== Część II ===============
1]
#!/bin/bash
ls /home | wc -w
 
 
2]
#!/bin/bash
if [ ! $# -eq 2 ]
        then echo "Uzycie: $0 rozszerzenie1 rozszerzenie2"
else
        for plik in ~/*
        do
                a=`echo $plik | grep $1$`
                if [ ! -z $a ]
                        then
                        b=`echo ${a/$1}$2`
                        mv $plik $b
                fi
        done
fi
 
 
3]
#!/bin/bash
for i in $*
do
        username=`getent passwd "$i" | cut -d: -f1`
        counter=`who | grep $username | wc -l`
 
        if [ $counter -gt 1 ]
                then echo -e "USERNAME=$username \nID=$i"
                echo TERMINALS: `who | sed 's/ \+/ /g' | cut -d' ' -f2`
        fi
done
 
 
4]
#!/bin/bash
for plik in ~/*
do
        rozmiar=`stat $plik | sed -e 's/^ *//' | grep ^rozmiar | cut -d' ' -f2`
        if [ $rozmiar -gt 5000 ]
                then
                echo "Plik $plik"
                tn="?"
                while [ $tn == "?" ]
                do
                        echo "Czy usunąć? [T/N]: "
                        read tn
                        if [ $tn == "T" -o $tn == "t" ]
                                then
                                rm $plik
                                echo "Plik został usunięty"
                                echo -e "$plik \t $(date)" >> deleted_files
                        elif [ $tn == "N" -o $tn == "n" ]
                                then echo "Plik nie został usunięty"
                        else
                                tn="?"
                        fi
                done
                echo
        fi
done

Wiadomość dodana po 21 min 35 s:
1. FILMIK W MIARE OPISUJĄCY GREP'A (nie pamiętam czy coś rozjaśnia czy nie ale może komuś pomoże)
https://youtu.be/QEpip5Ja1ac

2. Shell Scripting Tutorials: (Dobre jesli ktoś nie ogarnia podstaw i skryptów)
http://www.youtube.com/playlist?list=PL7B7FA4E693D8E790



Ja miałem na II kolosie za wszelkie błędy w treści przepraszam
1. Skopiować jednym poleceniem pliki z rozszerzeniem .net z folderu etc do katalogu domowego używając ścieżek bezwzględnych i nie używając polecenia FIND
2. Przyjmij początkowe prawa dostępu ...bla bla bla (nie bede kłamał co tu było bo nie pamiętam) jednym poleceniem wykonaj:
a) DOdaj prawa do wykonania dla pozostałych i grup
b) Odejmij prawo do odczytu dla pozostałych
3.  Napisz skrypt który wyświetli 5 ostatnich linii plików podanych jako argumenty wywołania.
4. Napisz polecenie które wypisze te linie w pliku które zawierają TYLKO liczbę rzeczywistą.
5. Znajdując się w *jakimś dzikim folderze systemowym* usuń plik z folderu domowego używając ścieżki bezwzględnej.

ODP:  (raczej dobre ponieważ poprawa była tylko na 3 nie jestem pewien, ale na 99% dobrze bo testowałem jak pisałem)

1. cp /etc/*.net /home/student/

2. chmod 651 a.txt

3.
#!/bin/bash
tail -n 5 $@

4. grep -w [0-9] nazwa_pliku_z_ktorego_czytamy

5. rm /home/student/0001.txt



A to treści zadań które wiszą teraz na CEZ'ie:
1. Napisz skrypt, który będzie wczytywał liczby do momentu, aż ich suma nie będzie większa od argumentu wywołania skryptu.
2. Podaj polecenie kasujące następującą strukturę katalogów w twoim katalogu domowym: 'sroda/PS4/kolokwium/'. Załóż, że katalogi są puste, a ty znajdujesz się w katalogu ‘/etc’.
3. Dla pliku ‘test’ za pomocą jednego polecenia:
a. nadaj prawa do wykonywania dla pozostałych oraz grupy
b. odejmij prawa do odczytu dla właściciela.
Użyj zapisu numerycznego. Załóż, że pierwotne prawa do pliku to rw-r-----.
4. Podaj polecenie liczące, na podstawie pliku ‘/etc/passwd’ użytkowników posiadających czteroznakowe nazwy.
5. Wyszukaj niepuste pliki zwykłe  w twoim katalogu domowym (bez podkatalogów), które mają rozszerzenie '.txt' – ważna wielkość liter, rozmiar większy niż 10B, z czasem ostatniego dostępu mniejszym od 2 dni, wyniki usuń za pomocą przełącznika 'find -exec'.



KOLEJNA PORCJA GOTOWCA(poprawne to?) ! :

1. Napisz skrypt, który dla każdego z plików podanych jako argumenty wywołania wyświetli jego 10 pierwszych linii (polecenie head).

2. Podaj polecenie kasujące z katalogu domowym niepusty katalog o nazwie ‘kat1’, Obecnie znajdujemy się w katalogu ‘/etc’. Ścieżkę dostępu do katalogu podaj w postaci względnej.

3. Wyszukaj niepuste pliki zwykłe w katalogu domowym (bez podkatalogów), które mają rozszerzenie '.txt' – ważna wielkość liter, rozmiar większy niż 10B, z czasem ostatniego dostępu mniejszym od 2 dni, wyniki usuń za pomocą przełącznika 'find -exec'.

4. Z pliku ‘/etc/passwd’ wypisz linie zawierające informacje o użytkownikach posiadających dwucyfrowe numery grupy.

5. Podaj polecenia, które dla pliku ‘b.txt’:
a. nadaj prawa do wykonywania dla pozostałych oraz grupy,
b. odejmie prawa do czytania dla właściciela
Nie używaj zapisu numerycznego praw dostępu. Załóż, że pierwotne prawa do pliku to rw-r--r--.


To ma PS10
A teraz to co u mnie było

1. Skopiuj z katalogu ‘/etc’ pliki o rozszerzeniu .net do swego katalogu domowego używając ścieżek bezwzględnych. Nie należy używać polecenia find.
2. Dla pliku ‘a.txt’ za pomocą jednego polecenia:
a. nadaj prawa do wykonywania dla pozostałych oraz grupy
b. odejmij prawa do odczytu dla pozostałych.
Użyj zapisu numerycznego. Załóż, że pierwotne prawa do pliku to rw-r--r--.
3. Wyszukaj wszystkie niepuste pliki zwykłe w katalogu '/etc' (i jego podkatalogach), które mają rozszerzenie '.conf' - wielkość liter bez znaczenia, rozmiar mniejszy niż 100B, z czasem ostatniego dostępu większym od 10 dni, wynik skopiuj za pomocą przełącznika 'find -exec' do katalogu 'conf' utworzonego w swoim katalogu domowym.
4. Wyświetl zawartość pliku ‘/etc/aliases’ usuwając wszystkie komentarze.
5. Policz sumę wszystkich liczb podanych jako parametry wywołania skryptu. Zignoruj parametry inne niż liczby.


To do zadań zaczynających się od
1. Skopiuj z katalogu ‘/etc’ pliki o rozszerzeniu .net do swego katalogu domowego używając ścieżek bezwzględnych. Nie należy używać polecenia find.
1. cp /etc/*.net ~/
2. chmod 651 a.txt
3. find /etc ! -empty -type f -name "*.conf" -size -100b -atime 10 -exec cp {} ~/conf/\;
4. grep -vE "^#" /etc/aliasses


1.
#!/bin/bash
if [ $# -eq 0 ]
then
echo brak parametrow
exit
fi
for i in $@
do
head -n 10 $i
done

2.
rm -r ~/kat1

3.
find ~ -maxdepth 1 ! -empty -type f -name "*.txt" -size +10c -atime -2 -exec rm {} \;
4.
grep "^[^:]*:.:[0-9]*:[0-9][0-9]:"
5.
a. chmod go+x b.txt
b. chmod u-r b.txt

Offline

#2 2015-06-11 19:40:19

Zamaskowany Gwałciciel
Użytkownik
Dołączył: 2015-06-11
Liczba postów: 1
Windows 8.1Firefox 38.0

Odp: Kolos - ogólne zagadnienia / gotowce / to co miały inne grupy

Dlaczego dopiero teraz powstało takie forum... https://www.youtube.com/watch?v=fFl7hEVSE1Q

Offline

#3 2015-06-12 10:40:03

Hubert
Użytkownik
Dołączył: 2015-06-11
Liczba postów: 6
UbuntuFirefox 37.0

Odp: Kolos - ogólne zagadnienia / gotowce / to co miały inne grupy

Zad 2:
find ~ -type f -iname "*.txt" -atime 1 -size -100b

do tego niepuste pliki jak zaznaczyc?

Wiadomość dodana po 11 min 29 s:
Zad 5: dziala [dblpt]P piszcie cos
#!/bin/bash
for ((i = $2 ; i<= $3; i++ ))
do
    echo "$1 x $i = $[ $1*$i ]"
done

Offline

#4 2015-06-12 10:57:04

Advencik
Użytkownik
Dołączył: 2015-06-11
Liczba postów: 15
UbuntuFirefox 36.0

Odp: Kolos - ogólne zagadnienia / gotowce / to co miały inne grupy

Hubert my w innym temacie piszemy

Offline

#5 2015-06-12 11:05:11

SromotnikJadowity
Administrator
Dołączył: 2015-06-07
Liczba postów: 11
AndroidChrome 40.0.2214.109

Odp: Kolos - ogólne zagadnienia / gotowce / to co miały inne grupy

rm -r var/ps1

Find -iname "*.txt" -type f -mtime 1 -size -100c -exec tj{}\
Nie jestem tych pewien.
A skrypt raczej źle bo $@ to odwołanie do zmiennych wywolania

Chmod a+x u-r ps1.txt (albo to co wyżej)

Offline

Użytkowników czytających ten temat: 0, gości: 1
[Bot] ClaudeBot
Własność niczyja ...mam nadzieje zbiorowa, wiec dbajmy o ład i porządek na tym forum.

Stopka

Forum oparte na FluxBB