Używanie komend Linux w codziennym użytku

System operacyjny Linux jest znany ze swojej niezawodności, wydajności i bezpieczeństwa. Jego siła tkwi w dostępności szerokiego zakresu poleceń, które umożliwiają użytkownikom wykonywanie różnorodnych zadań, od prostych operacji, takich jak kopiowanie plików, po bardziej skomplikowane, takie jak zarządzanie siecią. Ten poradnik ma na celu zapoznanie z podstawowymi poleceniami Linux, oraz ich przykładowymi zastosowaniami. Dzięki temu będziesz mógł zrozumieć, jak te polecenia działają i jak mogą być wykorzystane w codziennym użytkowaniu systemu Linux.

Wstępne wytłumaczenie do dalszej części tekstu

Zanim przejdziemy dalej, postarajmy zobrazować i przypomnieć sobie kilka podstawowych poleceń, które będą przydatne w dalszej części tekstu. W naszej bazie wiedzy znajdują się już odpowiednie informacje na temat tych poleceń, więc nie będziemy ich szczegółowo omawiać. Poniżej jednak przytoczymy tylko wybrane, aby ułatwić ich zrozumienie w dalszej części tego poradnika. "grep" (Global Regular Expression Print) to jedno z najczęściej używanych poleceń w systemie Linux. Służy do wyszukiwania określonego ciągu tekstowego w jednym lub więcej plikach.

Składnia: grep [opcje] wzorzec [plik...]

Przykłady użycia:
  • Wyszukiwanie ciągu znaków w pliku:
  • grep "bash" /etc/passwd
  • Wyszukiwanie ciągu znaków z uwzględnieniem wielkości liter:
  • grep -i "bash" /etc/passwd
  • Wykluczanie ciągu znaków z wyników:
  • grep -v "nologin" /etc/passwd
  • Filtrowanie wyników innego polecenia:
  • ps -ef | grep www-data
  • Wyszukiwanie wielu wzorców:
  • grep -e "bash" -e "root" /etc/passwd
    "sudo"(SuperUser DO) pozwala na wykonywanie poleceń z uprawnieniami innego użytkownika, takiego jak superużytkownik.

    Składnia: sudo [opcje] polecenie

    Przykłady użycia:
  • Wykonywanie polecenia jako superużytkownik:
  • sudo apt update
  • Wyświetlanie wersji sudo:
  • sudo -V
  • Wyświetlanie uprawnień użytkownika:
  • sudo -l
  • Wykonywanie polecenia bez pytania o hasło:
  • echo 'hasło' | sudo -S apt update
    "dpkg" to podstawowy menedżer pakietów dla systemów Debian i opartych na Debianie.

    Składnia: dpkg [opcje] polecenie

    Przykłady użycia:
  • Instalacja pakietu:
  • sudo dpkg -i pakiet.deb
  • Usuwanie pakietu:
  • sudo dpkg -r pakiet
  • Wyświetlanie informacji o pakiecie:
  • dpkg -s pakiet
  • Wyświetlanie listy zainstalowanych pakietów:
  • dpkg -l
  • Wyświetlanie zawartości pakietu:
  • dpkg -c pakiet.deb
    "find"to potężne narzędzie do wyszukiwania plików i katalogów na podstawie różnych kryteriów

    Składnia: find [ścieżka...] [wyrażenie]

    Przykłady użycia:
  • Wyszukiwanie pliku po nazwie:
  • find / -type f -name "myfile.txt"
  • Wyszukiwanie katalogu:
  • find / -type d -name "mydir"
  • Wyszukiwanie plików o określonych uprawnieniach:
  • find / -type f -perm 0644
  • Wyszukiwanie plików modyfikowanych w ciągu ostatnich 10 dni:
  • find / -type f -mtime -10
  • Wyszukiwanie plików o określonym rozmiarze:
  • find / -type f -size +2M
    "wc"(word count) służy do zliczania linii, słów, znaków i bajtów w plikach

    Składnia: wc [opcje] [plik...]

    Przykłady użycia:
  • Zliczanie linii w pliku:
  • wc -l myfile.txt
  • Zliczanie słów w pliku:
  • wc -w myfile.txt
  • Zliczanie znaków w pliku:
  • wc -m myfile.txt
  • Zliczanie bajtów w pliku:
  • wc -c myfile.txt
  • Wyświetlanie długości najdłuższej linii w pliku:
  • wc -L myfile.txt

    Przykładowe zastosowania poleceń

    Teraz przejdźmy do omówienia bardziej zaawansowanych przykładów. Poniższe polecenia są przykładami bardziej zaawansowanych operacji, które można wykonać za pomocą poleceń Linux. Zalecamy przetestowanie ich na swoim systemie, aby lepiej zrozumieć, jak działają. Dla przykładu, jeśli chcemy uniknąć wyświetlania nazwy pliku, możemy użyć polecenia `cat` do wyświetlenia zawartości pliku i przekazać ją na wejście standardowe polecenia `wc`, na przykład:
    cat plik.txt | wc -l
    Polecenie: znajdź pliki zawierających ciąg znaków "txt" (wyszukaj pliki z roszerzeniem .txt):
    find ~ -name "*txt*" -type f
    Powyższa komenda znajduje pliki z nazwami zawierającymi ciąg "txt" w katalogu domowym (`~`) i podkatalogach, i wyświetla ich pełne ścieżki. Polecenie: wyświetl listę plików w katalogu `/etc/` posortowaną według rozmiaru, zaczynając od największego:
    ls -lS /etc/
    Polecenie: utworzyć listę katalogów dostępnych w aktualnie zamontowanym katalogu, następnie wyświetl szczegółówe informacje o bieżącym katalogu (wyświetl również dane o ukrytych plikach)
    ls -la
    Polecenie: utworzyć plik tekstowy przekopiowany z innego pliku tekstowego
    cp plik1.txt plik2.txt
    Polecenie: utworzyć katalog, następnie skopiować do niego kilka plików, usuń folder z całą zawartością
    mkdir nowy_folder
    cp *.txt nowy_folder
    rm -r nowy_folder
    Polecenie: pobierz plik z internetu do wskazanego folderu, pamiętając aby każdy nowo pobierany plik miał tworzony nowy folder zgodny z nazwą pliku
    wget -P /ścieżka/do/folderu/ http://adres.pliku
    Polecenie: wczytaj plik tekstowy, następnie zapisz pierwsze 30 linijek tekstu/5 ostatnich paragrafów/4 środkowe linie drugiego akapitu tekstu do trzech różnych plików jednocześnie
    head -n 30 plik.txt > plik1.txt
    tail -n 5 plik.txt > plik2.txt
    sed -n '2p' plik.txt | cut -d ' ' -f 2-5 > plik3.txt
    Polecenie: utwórz kilka plików tekstowych dla kilku różnych wejść tekstu (użyj polecenia cat)
    echo "tekst1" > plik1.txt
    echo "tekst2" > plik2.txt
    echo "tekst3" > plik3.txt
    Polecenie: wczytaj plik tekstowy, następnie podlicz ile linijek tekstu zawiera cały tekst, ile paragrafów zawiera, ile znaków zawiera. Skorzystaj z strumienia potoku aby wyświetlić wszystko za jednym razem.
    wc plik.txt
    Polecenie: podaj polecenia na znalezienie wszystkich wyrazów zaczynających się na a i kończących się na i.
    grep -o '\ba\w*i\b' plik.txt
    Polecenie: podaj polecenia na znalezienie wszystkich słów które zaczynają się od dużej litery
    grep -o '\b[A-Z]\w*\b' plik.txt
    Polecenie: podaj polecenie na znalezienie powtarzających się słów
    grep -o '\b\w*\b' plik.txt | sort | uniq -d
    Polecenie: podaj polecenie które znajdzie słowa zawarte w liście/pliku
    grep -Ff lista.txt plik.txt
    Polecenie: podaj polecenie które znajdzie wyrażenia (zdania), składające się z co najmniej 3 słów, np: "Ala ma kota"
    grep -o '\b\w*\b \b\w*\b \b\w*\b' plik.txt
    Polecenie: uporządkuj listę alfabetycznie, następnie zapisz ją pod nowym plikiem
    sort lista.txt > lista_sort.txt
    Polecenie: uporządkuj listę malejąco od z-a, następnie zapisz ją pod nowym plikiem
    sort -r lista.txt > lista_sort_rev.txt
    Polecenie: utwórz kilku użytkowników w systemie linux, następnie zmień im hasło i ustaw konta tak, aby wymagały ponownego zmienienia hasła przed pierwszym zalogowaniem do konta
    useradd user1
    passwd user1
    chage -d 0 user1
    Polecenie: utwórz użytkownika "pizolec", nadaj mu uprawnienia do odczytu dla katalogu: /var/files/, oraz prawa do zapisu dla katalogu: /var/saves/
    useradd pizolec
    chmod u+r /var/files/
    chmod u+w /var/saves/
    Polecenie: dodaj kilku użytkowników do grupy "homegroup", następnie dla grupy nadaj:
    chmod 700 /ścieżka/do/folderu
    Polecenie: wyświetl informacje na temat: aktualnych użytkowników systemowych, podzespołach systemowych: tj: procesor, dysk, pamięć RAM, karta graficzna, rodzaj systemu, dystrybucja oraz jądro.
    who
    lscpu
    lsblk
    free -m
    lspci | grep VGA
    uname -a
    cat /etc/*release
    Polecenie: zmień właściciela pliku jednego użytkownika i nadaj je drugiemu, wykonaj to samo dla przykładowego drugiego użytkownika, ale nadaj uprawnienia dla wszystkich podfolderów się tam znajdujących
    chown user2 plik.txt
    chown -R user2 folder/
    Polecenie: wyświetl podstawowe informacje o aktualnych używanie zasobach systemowych przez procesy, skorzystaj z terminala
    top
    Polecenie: wyświetl procesy utworzone przez użytkownika, następnie na trzy różne sposoby za pomocą komend: zamknij dowolny proces (nie systemowy)
    ps -u user1
    kill -9 'PID'
    Polecenie: utwórz archiwum dowolnego katalogu zawierającego pliki, następnie wypakuj je do innego folderu (skorzystaj z komendy: gzip oraz tar)
    tar -czvf archiwum.tar.gz /ścieżka/do/folderu
    tar -xzvf archiwum.tar.gz -C /ścieżka/do/nowego/folderu
    Polecenie: sprawdź rozmiar linków:
    wget --spider -i links.txt 2>&1 | grep -o -P '(?<=Długość: ).*(?= \()' > sizes.txt
    Polecenie: przenieś pliki z podkatalgów do katalogu wyżej
    find . -mindepth 2 -type f -exec mv -n '{}' . \;
    Polecenie: zmień grupę władająca uprawieniami do pliku, dla przykładu utwórz przykładową, po czym nadaj zmień ją.
    groupadd nowa_grupa
    chgrp nowa_grupa plik.txt
    Polecenie: zmień prawa do dostępu plików, skorzystaj z sposobu: bitowego, lepkich bitów oraz zapisu literowego:
    chmod u=w,g=w,o=w plik.txt
    Polecenie: wyświetl informacje o aktualnie zalogowanych użytkownikach, następnie wyświetl informacje o zalogowanym użytkowniku
    w
    Polecenie: wyświetl argumenty funkcji:
    echo "Liczba argumentów wywołania: $#"
    Polecenie: wczytaj dwie liczby całkowite, następnie wyświetl ich sumę
    echo "Podaj pierwszą liczbę:"
    read a
    echo "Podaj drugą liczbę:"
    read b
    suma=$((a+b))
    echo "Suma: $suma"
    Polecenie: sprawdź istnienie n-tego parametru
    if [ $# -ge n ]; then
    echo "Parametr nr n: $n"
    else
    echo "Brak parametru nr n"
    fi
    Należy zamienić "n" na odpowiednią wartość liczbową. Polecenie: wczytywanie pliku z liczbami i obliczanie sumy, minimum i maksimum:
    #!/bin/bash
    if [ -s plik.txt ]; then
    max=$(sort -rn plik.txt | head -n 1)
    min=$(sort -n plik.txt | head -n 1)
    suma=$(awk '{s+=$1} END {print s}' plik.txt)
    echo "Maksimum: $max, Minimum: $min, Suma: $suma"
    else
    echo "Plik jest pusty lub nie istnieje"
    fi

    Skrypty w powłoce terminala - BASH!

    Skrypty w powłoce terminala to zbiór poleceń, które mogą być wykonywane w terminalu systemu Linux. Skrypty te pozwalają na automatyzację zadań, wykonywanie operacji na plikach i katalogach, zarządzanie procesami, monitorowanie zasobów systemowych i wiele innych. Poniżej znajdziesz kilka przykładowych skryptów w powłoce terminala, które mogą być użyteczne w codziennym użytkowaniu systemu Linux. Aby skrypt zadziałał, najpierw trzeba go napisać, a następnie nadać mu odpowiednie uprawnienia do wykonania. Można to zrobić za pomocą polecenia `chmod +x nazwa_skryptu.sh`. Następnie skrypt można uruchomić za pomocą polecenia `./nazwa_skryptu.sh`. Polecenie: skrypt wysyłający komunikat do użytkownika i działający w tle:
    #!/bin/bash
    while true; do
    if [ "$(whoami)" = "$1" ]; then
    echo "KIM JA JESTEM? Czarodziejem!"
    fi
    sleep 30
    done &
    Aby skrypt zadziałał, należy podać nazwę użytkownika jako argument, np. `./skrypt.sh user`. Polecenie: napisz skrypt, który umożliwi pobranie filmu z YouTube i konwersję go na MP3- Uwaga: wyamgane narzędzia: youtube-dl oraz ffmpeg. Aby je zainstalować, wykonaj następujące polecenie: sudo apt-get install youtube-dl ffmpeg
    #!/bin/bash
    # Skrypt wymaga narzędzia youtube-dl i ffmpeg
    youtube-dl --extract-audio --audio-format mp3 $1
    Użyj tego skryptu, podając URL filmu z YouTube jako argument. Polecenie: wypakuj wszystkie pliki archiwów (*.RAR) z hasłem oraz bez hasła
    #z hasłem

    for file in *.rar; do unrar x -p'haslo' "$file"; done
    #bez hasła

    for file in *.rar; do unrar x "$file"; done
    Polecenie: przeszukaj bieżący katalog i wypakuj wszystkie pliki o rozszerzeniu .rar (skrypt bash)
    for plik in *; do
    if [ -f "$plik" ] && [[ $plik == *.rar ]]; then
    ./unrar x "$plik"
    fi
    done
    Polecenie: wypakuj pliki ".rar" do osobnych katalogów o nazwach odpowiadających nazwom plików.
    for file in *.rar; do
    dir="${file%%.rar}"
    mkdir -p "$dir"
    unrar x "$file" "$dir"
    done
    Polecenie: spakuj wszystkie foldery w bieżącym folderze do każdego odzielnego archiwum *.ZIP
    for dir in */; do
    base=$(basename "$dir")
    zip -r "${base}.zip" "$dir"
    done
    Polecenie: utworzyć losowe 50 katalogów, różniące się końcówką nazwy pliku, tzn: folder1, folder2... itp;
    for i in {1..50}; do mkdir "folder$i"; done
    Polecenie: skopiować 30 katalogów- z folderu folder0 utworzyć kopie pozostałych folderów w bieżącym folderze, według następującego schematu: folder1, folder2, folder3 itd.
    for i in {1..30}; do cp -r folder0 "folder$i"; done
    Polecenie: skopiowanie tekstu wejściowego do pliku
    #!/bin/bash
    cat > output.txt
    Uruchom ten skrypt, a następnie wprowadź tekst. Skrypt zakończy działanie po naciśnięciu Ctrl+D. Polecenie: wyświetl aktywność sieciową w czasie rzeczywistym
    #!/bin/bash
    # Skrypt wymaga narzędzia nethogs
    sudo nethogs
    Ten skrypt wyświetla aktywność sieciową w czasie rzeczywistym. Zakończ działanie skryptu, naciskając Ctrl+C. Polecenie: kompilacja i uruchomienie programu w C
    #!/bin/bash
    # Skrypt kompiluje i uruchamia program w C
    echo '#include <stdio.h>
    int main() {
    for(int i = 1; i <= 10; i++) {
    printf("%d\n", i);
    }
    return 0;
    }' > program.c
    gcc program.c -o program
    ./program
    Ten skrypt tworzy prosty program w C, który liczy do 10, kompiluje go i uruchamia Polecenie: monitorowanie zużycia pamięci przez procesy
    #!/bin/bash
    # Skrypt monitoruje zużycie pamięci przez procesy i zapisuje wyniki do pliku log.txt
    while true; do
    ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head > log.txt
    sleep 5
    done
    Ten skrypt wyświetla procesy zużywające najwięcej pamięci co 5 sekund i zapisuje wyniki do pliku `log.txt`. Polecenie: automatyczne tworzenie kopii zapasowych
    #!/bin/bash
    # Skrypt tworzy kopię zapasową katalogu /home/user do /backup/user_backup.tar.gz
    tar -czf /backup/user_backup.tar.gz /home/user
    Ten skrypt tworzy kopię zapasową katalogu `/home/user` i zapisuje ją jako `/backup/user_backup.tar.gz`. Polecenie: automatyczne aktualizacje systemu
    #!/bin/bash
    # Skrypt automatycznie aktualizuje system
    apt-get update -y && apt-get upgrade -y
    Ten skrypt automatycznie aktualizuje system, wymaga uprawnień administratora. Polecenie: monitorowanie logów systemowych
    #!/bin/bash
    # Skrypt monitoruje logi systemowe i wyświetla błędy
    tail -f /var/log/syslog | while read LOGLINE
    do
    [[ "${LOGLINE}" == *"error"* ]] && echo "${LOGLINE}"
    done
    Polecenie: automatyczne tworzenie kopii zapasowych z datą
    #!/bin/bash
    # Skrypt tworzy kopię zapasową katalogu /home/user z datą w nazwie pliku
    DATE=$(date +%Y-%m-%d)
    tar -czf /backup/user_backup_$DATE.tar.gz /home/user
    Ten skrypt tworzy kopię zapasową katalogu `/home/user` i zapisuje ją jako `/backup/user_backup_$DATE.tar.gz`, gdzie `$DATE` to aktualna data. Polecenie: monitorowanie dostępności strony internetowej
    #!/bin/bash
    # Skrypt monitoruje dostępność strony internetowej
    URL="http://example.com"
    if curl --output /dev/null --silent --head --fail "$URL"; then
    echo "Strona jest dostępna: $URL"
    else
    echo "Serwer nie odpowiada lub strona została usunięta: $URL"
    fi
    Ten skrypt sprawdza, czy podany URL istnieje i jest dostępny. Polecenie: automatyczne usuwanie starych plików
    #!/bin/bash
    # Skrypt usuwa pliki starsze niż 30 dni z katalogu /tmp
    find /tmp -type f -mtime +30 -exec rm {} \;
    Ten skrypt usuwa pliki starsze niż 30 dni z katalogu `/tmp`. Polecenie: automatyczne tworzenie kopii zapasowych bazy danych MySQL
    #!/bin/bash
    # Skrypt tworzy kopię zapasową bazy danych MySQL
    DB_USER="username"
    DB_PASS="password"
    DB_NAME="database"
    DATE=$(date +%Y-%m-%d)
    mysqldump -u $DB_USER -p$DB_PASS $DB_NAME > /backup/mysql_backup_$DATE.sql
    Ten skrypt tworzy kopię zapasową bazy danych MySQL i zapisuje ją jako `/backup/mysql_backup_$DATE.sql`, gdzie `$DATE` to aktualna data. Polecenie: automatyczne tworzenie kont użytkowników
    #!/bin/bash
    # Skrypt tworzy konta użytkowników na podstawie listy w pliku
    while IFS= read -r USER
    do
    useradd $USER
    done < users.txt
    Ten skrypt tworzy konta użytkowników na podstawie listy w pliku `users.txt`. Polecenie: zmiana rozmiaru zdjęć (*.JPG) w wybranym katalogu na rozmiar 512x512 pikseli, utwórz kopię zapasową tych zdjęć do folderu backup_data przed wykonaniem zadania. Zedytowane zdjęcia zapisz w folderze resized_data- Uwaga: wymagane narzędzie ImageMagick- za pomocą tej komendy: sudo apt-get install imagemagick, zainstalujesz narzędzie convert - potrzebne do poniższego skryptu.
    #!/bin/bash
    # Katalog źródłowy
    SOURCE_DIR="/home/user/Pulpit/zdjecia/"

    # Katalog docelowy
    DEST_DIR="resized_data"
    BACKUP_DIR="backup_data"

    # Tworzenie katalogów, jeśli nie istnieją
    mkdir -p $DEST_DIR
    mkdir -p $BACKUP_DIR

    # Sprawdzenie, czy narzędzie 'convert' jest dostępne
    if ! [ -x "$(command -v convert)" ]; then
    echo 'Błąd: ImageMagick nie jest zainstalowany.' >&2
    exit 1
    fi

    # Przejście przez wszystkie pliki jpg w katalogu źródłowym
    for FILE in $SOURCE_DIR/*.jpg
    do
    # Kopiowanie plików do katalogu kopii zapasowej
    cp $FILE $BACKUP_DIR/

    # Pobieranie nazwy pliku
    FILENAME=$(basename $FILE)

    # Zmiana rozmiaru zdjęcia i zapisanie go w katalogu docelowym
    convert $FILE -resize 512x512 $DEST_DIR/$FILENAME
    done
    Polecenie: otwórz listę linków w przeglądarce internetowej automatycznie
    #!/bin/bash
    # Nazwa pliku z linkami
    plik="linki.txt"
    # Sprawdź, czy plik istnieje
    if [ ! -f "$plik" ]; then
    echo "Plik $plik nie istnieje."
    exit 1
    fi

    # Otwórz każdy link w domyślnej przeglądarce
    while IFS= read -r link
    do
    xdg-open "$link"
    # Czekaj na 5 sekund przed otwarciem następnego linku
    sleep 5
    done < "$plik"
    Polecenie: odświeżaj stronę "aktywną" w przeglądarce internetowej
    #!/bin/bash
    while true
    do
    xdotool search --onlyvisible --class "Firefox" windowactivate key F5
    sleep 10
    done
    Pobierz pliki z listy linków z SourceForge automatycznie (z pominięciem oczekiwania na pobranie pliku)
    # Zdefiniuj ścieżkę do pliku z listą linków i folder docelowy
    file_with_links="links.txt"
    folder_where_you_want_files_to_be_downloaded="/home/user/Pobrane/"

    # Pobierz stronę z SourceForge
    wget -w 1 -np -m -A download $link_to_sourceforge_folder -O sourceforge_page.html

    # Wyszukaj linki do plików na pobranej stronie i zapisz je do listy
    grep -Rh refresh sourceforge_page.html | grep -o "https[^\\?]*" > urllist

    # Pobierz pliki z listy do określonego folderu
    wget --content-disposition -P $folder_where_you_want_files_to_be_downloaded -i $file_with_links
    Pamiętaj aby w zmiennych takich jak: `SOURCE_DIR="..."`, `plik="...`, `file_with_links` i innych- podać odpowiednie, własne wartości odpowiadające twoim katalogom. Pamiętaj również o nadaniu uprawnień do uruchomienia skryptu.