# Linux 1
###### tags: `linux`
## Zadanie 1
:::spoiler
* `ll` = `ls -lAFbhv | less -XER`
`ls -lAFbhv`
`-l` - długi format listingu (z uprawnieniami, włascicielem pliki itp.)
`-A` - pokazuje także pliki zaczynające się od . i ..
`-F` - Dodaje / na końcu katalogów
`-b` - Dodaje '' do napisów zawierajacych znaki niewyświetlane jak spacja
`-h` - Dodaje jednostki wielkości plików/katalogów
`-v` - Sortowanie
`-color=always` - koloruje odpowiednio wyniki zapytania w tym przypadku zawsze korzystając ze zmiennej LS_Colors
`less -XER`
`-X` - wyłącza inicjalizace np. nie czyści ekranu
`-E` - wyłącz program po osiągnięciu końca pliku
`-R` - wyświetla znaki specjalne
* `gentmp` = `date +"tmp%Y-%m-%d %H:%M:%S"`
* `genpwd` = `tr -dc '3-9A-HJ-NP-Z' </dev/urandom | head -c 10`
:::
## Zadanie 2
:::spoiler
### `grep` - Program służący do wyszukiwania wzorca w tekscie
Program ten domyślnie wypisuje te linie tekstu w których zdajduje się wzorzec. po urzyciu flagi
Przykładowe Opcje:
* `-E` pozwala na wyszukiwanie za pomocą regex'a zamiennie z `egrep`
* `-i` wyłącza rozróznianie wielkości liter
* `-v` wyszukuje linie nie zawierające wzorca
* `-x` wybiera linię tylko jeśli w całości pasuje do wzorca
* `-m NUM` wybiera tylko pierwsze `NUM` wyników
* `-n` wypisuje dodatkowo numery linii
* wiele wiele innych opcji
Przykłady użycia:
* `grep pan zad2.txt` - wyszukuje linie w którym znajduje się wzorzec 'pan'
* `grep -E '^pan*' zad2.txt` - wyszukuje linie w zaczynające się od 'pan'
* `grep -E '*człowiek$' zad2.txt` - wyszukuje linie kończące się na 'człowiek'
* `grep -E '^[a-z]{3,5}Tadeusz*' zad2.txt -i` - wyszukuje linie posiadające od 3 do 5 znaków przed słowem Tadeusz przy wyłączonym rozróznianiu wielkości znaków
:::
## Zadanie 3
:::spoiler
### `find` - Program służący do wyszukiwania plików w katalogu
Program ten wypisuje nazwy znalezionych plików pasujących do wzorca wraz ze ścieżką do nich
Przykładowe Opcje:
* `-name` pozwala na wyszukiwanie za pomocą regex'a
* `-ls` wypisuje rezultat w formacie `ls -dils`
* `-user USER` plik należący do `USER`
* `-maxdepth LEVELS` przeszukuje katalogi zagłębiając się maksymalnie na `LEVELS` poziomów
* wiele wiele innych opcji
Przykłady użycia:
* `find -maxdepth 1 -name "plik1[0-9].*" -ls ` - wyszukuje tylko w bierzącym katalogu
* `find -maxdepth 3 -name "plik1[0-9].*" -ls ` - wyszukuje zagłębiając się maxymalnie na 2 dodatkowe poziomy pliki z dowolnym rozszerzeniam
* `find ~/Pulpit -name "*.txt"` - wyszukuje wszystkie pliki txt w katalogu i podkatalogach `~/Pulpit`
:::
## Zadanie 4
todo
:::spoiler
:::
## Zadanie 5
:::spoiler
* `apt list --installed | awk '{split($0, a, "/"); print a[1]}' | grep -vxf <(ls /usr/share/doc)` - polecenie wypisuje listę pakietów nieposiadającą katalogu w `/usr/share/doc)`
* `ls /usr/share/doc | grep -vxf <(apt list --installed | awk '{split($0, a, "/"); print a[1]}')` - polecenie wypisuje listę pakietów nieposiadającą katalogu w `/usr/share/doc)`
:::
## Zadanie 6
:::spoiler
:::
## Zadanie 7
:::spoiler
:::
## Zadanie 8
:::spoiler
:::
## Zadanie 9
todo
:::spoiler
:::
## Zadanie 10
:::spoiler
```bash=
str=$1
i=1
while grep '^G*$\|^B*$\|^R*$' <<< $str -v && (($i < 1000))
do
i=$((i+1))
temp=$(grep -Eo 'RB|BR|GB|BG|RG|GR' <<< $str | head -1)
if [[ "$temp" == 'RB' || "$temp" == 'BR' ]]
then
swap='GG'
elif [[ "$temp" == 'GB' || "$temp" == 'BG' ]]
then
swap='RR'
else
swap='BB'
fi
str=$(sed "s/RB\|BR\|GB\|BG\|RG\|GR/$swap/" <<< $str)
done
echo $str
```
:::