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:
- uprawnienia do zapisu i wykonywania, dla pozostałych do odczytu
groupadd homegroup
usermod -aG homegroup user1
chmod 750 /ścieżka/do/folderu
- uprawnienia do odczytu i wykonania, dla pozostałych do odczytu
chmod 550 /ścieżka/do/folderu
- uprawnienia do wykonania, dla pozostałych wszystkie uprawnienia
chmod 710 /ścieżka/do/folderu
- wszystkie uprawnienia, dla pozostałych zablokuj dostęp
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: wypakować wszystkie pliki ZIP w bieżącym katalogu
find . -name "*.zip" -exec unzip {} \;
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:
- odczyt i zapis
chmod u=rw,g=r,o=r plik.txt
- zapis i wykonywanie
chmod u=rw,g=x,o=r plik.txt
- tylko zapis
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:
- argumenty wywołania 3 funkcji
echo "Argumenty wywołania: $1 $2 $3"
- wyświetlanie wszystkich argumentów wywołania
echo "Argumenty wywołania: $@"
- wyświetlanie liczby argumentów wywołania
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.