Skip to content

Latest commit

 

History

History
599 lines (435 loc) · 11.8 KB

File metadata and controls

599 lines (435 loc) · 11.8 KB

Podstawy Linuxa

Jeśli szukasz wersję w języku angielsku - README.md.

Surwiwal

  1. Z GUI do Terminala:

  2. Z terminala GUI:

    ls
    xdg-open .
  3. Przejrzyj zawartość katalogu $HOME, z pomocą ls :

    #
    ls
    
    # $HOME stores
    # path to your home directory
    ls $HOME
    
    echo $HOME
  4. Surwiwal 1 - gdzie jestem? Dlaczego moje komendy zwracają No such file or directory albo Permission denided? Dwie komendy pomogą Tobie:

    pwd
    
    ls
  5. Surwiwal 2 - jak wrócić do swojego katalogu domowego?

    # glowny katalog w linuxie to: / , na windowsie byłby to C:
    cd /
    pwd
    
    # szybki powrów do katalogu domowego
    cd
    # zobaczmy czy to jest prawda:
    pwd
    
    # i jescze raz
    cd /
    pwd
    ls
    
    # ~ oznacza katalog domowy
    # czyli zmien katalog na ~
    cd ~
  6. Przygotowanie do pracy z katalogami, zainstalujmy tree:

    sudo apt-get update
    sudo apt install tree

    Sudo? Mamy oczywiście xkcd pokazujący korzyści sudo!.

  7. Praca z kalalogami:

    mkdir poland
    cd poland
    mkdir cities
    cd cities
    mkdir gdansk
    ls
    mkdir warszawa
    mkdir wroclaw
    mkdir krakow
    ls
    cd ..
    pwd
    cd ..
    
    tree
    
    tree ../poland

    Po uruchmieniu tree powinieneś zobaczyć:

    poland
    \- cities/
       |- gdansk/
       |- warszawa/
       |- wroclaw/
       \- krakow/
    
  8. Przechodzenie po katalogach z cd ŚCIEŻKA:

    # go in
    pwd
    cd cities/krakow
    pwd
    
    # go out
    cd ../..
  9. Zauważ:

    # relatywna o miejsca gdzie jesteś
    ls cities
    
    # absolutna/pełna ścieżka
    ls /home/
    ls ~
  10. Dodaj katalog villages i podkatalogi dla przykładowych wsi w Polsce:

    poland
     |- cities/
     |   |- gdansk/
     |   |- krakow/
     |   |- warszawa/
     |   \- wroclaw/
     |
     \- villages/
        |- nowawies
        \- zytno
    
  11. Surwival 2 - vim/vi:

    • Zainstaluj vim:

      sudo apt-get install vim
    • wrócmy spowrotem do katalogu domowego: cd

    • czas uruchomić vim:

      vim learning_vim.txt
    • Jak wyjść, jeśli niczego nie dodaliśmy:

      1. ESC ESC
      2. :q
      3. ENTER
    • iii! Uuuu.. jednak coś wpisałem (insert mode: ESC ESC i), chce po prostu wyjść bez zapisywania:

      1. ESC ESC
      2. :q!
      3. ENTER
    • ok. Jestem gotowa, jedem gotowy, aby zmienić plik:

      1. vim learning_vim.txt

      2. ESC ESC

      3. i

      4. Please add sth, e.g., Uwielbiam vim!

      5. ESC ESC

      6. :wq

      7. ENTER

      8. Zweryfikujmy czy zapisaliśmy poprawnie plik:

        cat learning_vim.txt
  12. Surwiwal 4 - emacs / nano:

    # jak wyzej
    nano learning_nano.txt

    Zauważ, ^ znaczy CTL/CONTROL.

  13. Jeśli szukasz jakiegoś prostego edytora podobnego do Notebook na Windowsie: gedit p.txt

Zauważ

  1. Jeśli komenda nie wypisuje niczego na ekran, znaczy się, że wszystko się udało
  2. Korzystaj z auto uzupełninia: TAB TAB

Praca z plikami

  1. Wrócmy spowrotem do naszego katalogu domowego, utwórzmy folder workspace i przejdźmy do niego:

    cd
    mkdir workspace
    cd workspace
  2. Pliki tworzymy za pomocą touch (to remember it), w tym ćwiczeniu skorzystamy z echo, aby dodać zawartość:

    touch myfile.txt # tworzymy pusty plik
    
    echo "Ubuntu 18.04" > myfile.txt
    echo "Ubuntu 20.04" >> myfile.txt
    
    cat myfile.txt
    echo "Mint" >> myfile.txt
    echo "Debian" >> myfile.txt
    echo "Redhat" >> myfile.txt
    echo "Linux" >> myfile.txt
    
    cat myfile.txt
  3. Oczywiśćie, moglibyśmy skorzystać z atoma:

    atom myfile.txt

    Jak zainstalować atom, google pomoże, jeśli nie chcesz wyszukiwać w tym momencie tutaj znajdziesz właściwą komendę snapcraft.io/install/atom/ubuntu.

  4. grep jest jadną z najczęściej wykorzystywaną komendą w CLI oraz skryptach. Zauważ grep domyślnie zwraca uwagę na duże i małe litery:

    grep Linux myfile.txt
    
    grep Ubuntu myfile.txt
    # compare with:
    grep ubuntu myfile.txt
    grep -i ubuntu myfile.txt
    
  5. Często używany grep do analizy logów:

    grep -i Error /var/log/*log
    # alternative to `wc -l`
    grep -c -i Error /var/log/*log

    Zadanie: na zasadzie analogi, wyszukaj swojego użytkownika (komenda whoami przypomni Ci jako kto jesteś zalogowana) w /etc/passwd.

  6. Jako kopiować pliki, z pomocą przychodzi cp :

    cp myfile.txt myfile2.txt
    
    ls
    
    # możesz wykonać `grep`
    # na wielu plikach jednoczesnie
    # poniżej - wszystkie pliki konczace sie
    # na `.txt`
    grep Linux *.txt
  7. Jak prenieść plik plik z jednego katalogu do drugiego? mv - również służy do zmiany nazwy plików lub katalogów.

    mkdir mydirectory
    mv myfile2.txt mydirectory
    ls mydirectory
    tree ../
    
    # let's move the file back
    # to the current directory `.`
    mv mydirectory/myfile2.txt .
  8. mv służy również do zmiany nazwy foderów oraz plików, wróćmy do naszych katalogów o Polsce i zmienmy nazwę naszego katalogu cities na miasta:

    cd ~
    cd poland
    ls
    # sb asked us to use Polish word for cities
    # - miasta
    mv cities miasta
    ls
    tree ../poland
  9. A co jeśli musimy mieć i po PL jak i ENG? Przekopijmy zawartość miasta:

    cp -r miasta cities
    cd ..
    tree poland

    Powineneś zobaczyć zarówno miasta jak i cities.

  10. Wrócmy do naszego katalogu, gdzie mieliśmy pliki z nazwami dystrybucji linuxa, aby zobaczyć jak skasować plik z pomocą rm:

    cd
    cd workspace
    rm myfile2.txt
  11. ... a teraz spowrotem do katalogów z miastami, aby zobaczyć jak kasujemy katalogi (puste oraz z zawartością):

    cd
    ls poland
    rmdir poland/cities/warszawa
    
    # czy to zadziała?
    rmdir poland/cities
    
    # nie? z pomocą przychodzi rm -r
    rm -r poland/cities
  12. Utwórz następujące katalogi i pliki, pamiętaj o komendzie tree (*.txt są plikami):

    biologia/
    |- drzewa
    |      |- lisciaste.txt
    |      \- iglaste.txt
    |
    \- zwierzeta
        |- drapiezniki
        |   \- koty.txt
        \- roslinozerne
            \- rogate.txt
    

    Po utworzeniu.

    1. Przenieś koty.txt i rogate.txt bezpośrednio do katalogu zwierzeta,
    2. Następnie przekopiuj iglaste.txt do katalogu domowego (sprawdź czy wykonałeś poprawenie z ls ~),
    3. Skasuj katalog zwierzeta,
    4. Skasuj katalog biologia.

Zmienne środowiskowe i ukryte pliki

  1. W Linuxie, mamy ukryte pliki. Nazwy ukrytych plików zaczynają się od .:

    cd
    ls -a
    ls -la
    ls -la | grep bash
  2. Zmienne środowiskowe wykorzystujemy bardzo często w automatyzacjach i korzysta z nich wiele komend i programów na Linuxie:

    printenv
    printenv | grep HOME=
    printenv | grep LANG=
    
    echo $HOME
  3. Wypisanie zmiannych środowiskowych:

    # porownaj:
    echo "$HOME"
    echo '$HOME'
    
    # zawsze w skryptach
    # zmienne srodowiskowe umieszczaj 
    # miedzy { i }
    echo "${HOME}"
  4. Zmienne środowiskowe i echo:

    cd ~
    mkdir tmp
    cd tmp
    
    echo "$HOME" > home.txt
    cat home.txt
  5. Zmienne środowiskowe i $HOME/.bashrc, dodadanie powitania oraz naszej własnej zmiennej środowiskowej:

    atom $HOME/.bashrc

    Na samym końcu ~/.bashrc dodajmy powitanie oraz zmienną środowiskową i zapisz plik:

    echo "Hi ${USER}!"
    export MY_PHONE=9999

    Po uruchomienou bash lub otworzenie nowego okna terminalu, zobaczysz powitania i będzie dostępna nowa zmienna:

    # notice TAB TAB works
    echo $MY_PHONE
  6. Ad hoc definicja zmiennych środowiskowych:

    export SHOP_USER=natalia
    echo "$SHOP_USER"
  7. Create your first bash script my_script.sh with the following content:

    #!/bin/bash
    
    echo "Hi ${USER}! Nice to meet you!"
    echo "Your home directory is ${HOME}"
    echo "Your configured language is ${LANG}"

    and run it:

    bash my_script.sh

Jak znaleźć plik lub katalog po nazwie?

Pamiętam, że gdzieś utworzyłem plik lub katalog ale nie wiem gdzie dokładnie.

# znajdzmy wszystkie pliki lub katalogi
# zakonczone na txt
cd
find . -iname '*.txt'

# a jednak interesują m
# mnie tylko pliki
find . -iname '*.txt' -type f

# find in the home directory `~`
# a directory `-type d`
# with name `poland`
find ~ -iname poland -type d

Praca z plikami tekstowymi

  1. You got an export from your ecommerce shop koszyk1.txt:

    mleko,10,1zl
    chleb,1,4zl
    

    Używając cut:

    cut -d',' -f1 koszyk1.txt
    cat koszyk1.txt | cut -d',' -f1
    
    # zauważ:
    cut --delimiter=',' --fiels=1 koszyk.txt
    
    # oraz
    cut -d',' -f3,1 koszyk1.txt

    wypisz na ekran:

    1zl
    4zl
    

    Wykorzystując nabytą wiedzę:

    1. Wyświetl nazwy użytkowników z /etc/passwd (pierwsza kolumna)
    2. Wyciągniej miesiąc i dzień /var/log/syslog
    3. Wyciągniej miesiąc i dzień oraz godzinę (bez minut) /var/log/syslog
  2. Przeglądasz logi i znajdujesz zrzut z obiektu reprezentującego produkt do pliku koszyk2.txt:

    product=mleko
    price=1
    product=chleb
    price=4
    

    Korzystając z pomocy cut oraz paste, utwórz plik koszyk2b.txt z danymi w następującym formacie:

    mleko 1
    chleb 4
    

    Wskazówka:

    cat koszyk2.txt | paste - -
  3. Zastępowanie łańcuchów znaków, masz plik koszyk3.txt z treścią:

    product_category: mleczne
    

    Zauważasz, że mamy tutaj użytą nazwę kategorii produktu zamiast jego kodu. Twoim zadaniem jest zastopienie mleczne identyfikatorem kategorii M0:

    product_category: M0
    

    Wskazówka:

    sed 's/category/cat/g'
  4. tr jest bardzo pomocne kiedy musimy zamienić pojedyńczą literę:

    cat koszyk3.txt | tr ':' '='

    albo usunąć:

    cat koszyk3.txt | tr -d ':'

    Na przykład, jeśli użyjemy jeszcze xargs to możemy wygenerować URLe do sklepu:

    echo "product_cat=M0" | xargs -I {} echo "https://example.com/search?{}"
  5. Sprawdź co robią komendy head, tail oraz less:

    less /var/log/syslog
    tail /var/log/syslog
    head /var/log/syslog
    head -n 10 /var/log/syslog
  6. Mamy następujący eksport z naszego sklepu (zauważ *.txt są plikami):

    basket/
    |- chocolates/
    |   \- products.txt
    |      wedel,2
    |      goplana,3
    |
    \- dairy/
        \- products.txt
           mlekovita,5
           zimnemleko,4
    
    1. Za pomocą jednej komendy wypisz ceny każdego z produktów:

      2
      3
      5
      4
      
    2. Teraz zsumuj, żebyśmy mieli wartość całego koszyka (poszukaj rozwiązania na stackoverflow/google):

      14
      

    Zauważ, jak łatwo można znaleźć rozwiązanie dla nawet złożonych problemów w bashu.

Dodatkowe