Bash Cheatsheet

Essentials
qWyjście z programu.Ctrl + APrzenosi kursor na początek linii.Ctrl + EPrzenosi kursor na koniec linii.Ctrl + RWyszukiwanie w historii poleceń.Ctrl + LCzyści ekran.TabAutomatyczne uzupełnianie komend.↑/↓ / Ctrl+P / Ctrl+NHistoria poleceń.-Zwykły plik.dKatalog (directory).lLink symboliczny (symlink).bPlik blokowy (block device).cPlik znakowy (character device).pPotok nazwany (named pipe).sGniazdo (socket).../Katalog nadrzędny, czyli 'w górę' w strukturze katalogów..Bieżący katalog../Bieżący katalog, używane w ścieżkach do wskazania plików lub uruchamiania programów.~/Katalog domowy użytkownika.>Przekierowanie wyjścia do pliku (nadpisuje).>>Przekierowanie wyjścia do pliku (dopisuje).<Przekierowanie wejścia z pliku.|Pipe, przekierowanie wyjścia jednego polecenia do wejścia innego.&&Wykonuje kolejne polecenie, jeśli poprzednie zakończyło się sukcesem.||Wykonuje kolejne polecenie, jeśli poprzednie zakończyło się niepowodzeniem.;Wykonuje polecenia sekwencyjnie.&Uruchamia polecenie w tle.Basics
whoamiWyświetla nazwę bieżącego użytkownika.echo $USERWyświetla wartość zmiennej $USER, która przechowuje nazwę użytkownika.envWyświetla wszystkie zmienne środowiskowe oraz ich wartości dla bieżącej sesji.idWyświetla UID (user ID), GID (group ID) oraz listę grup, do których należy użytkownik.whoWyświetla listę użytkowników aktualnie zalogowanych do systemu.cat /etc/passwdWyświetla zawartość pliku /etc/passwd, który przechowuje listę wszystkich zarejestrowanych użytkowników systemu oraz ich podstawowe informacje (UID, GID).lastWyświetla historię logowań użytkowników oraz czas, datę i adres IP (jeśli dostępny) dla każdego logowania.cat /etc/issueWyświetla zawartość pliku /etc/issue, który zawiera informacje o dystrybucji systemu Linux.cat /etc/os-releaseWyświetla szczegółowe informacje o dystrybucji systemu Linux: nazwa dystrybucji, numer wersji, nazwa wydania, ID systemu.uname -aWyświetla szczegółowe informacje o jądrze systemu, w tym nazwę, wersję, architekturę, nazwę hosta i wersję jądra.cat /proc/versionWyświetla wersję jądra Linux oraz wersję kompilatora GCC, użytego do skompilowania jądra.cat /proc/cpuinfoWyświetla szczegółowe informacje o procesorze (CPU), takie jak liczba rdzeni, model procesora, częstotliwość taktowania, liczba wątków, cache oraz inne parametry sprzętowe.cat /proc/meminfoWyświetla szczegółowe informacje o pamięci systemowej (RAM) i pamięci wirtualnej.lspciWyświetla listę wszystkich urządzeń podłączonych do magistrali PCI w systemie, wraz z ich identyfikatorami i podstawowymi informacjami o sprzęcie.lsusbWyświetla listę wszystkich urządzeń USB podłączonych do systemu, w tym informacje o identyfikatorach producenta i produktu, a także numerze magistrali i porcie, do którego urządzenie jest podłączone.lsscsiWyświetla listę wszystkich urządzeń SCSI (w tym dysków twardych, napędów optycznych i innych urządzeń) podłączonych do systemu, wraz z ich identyfikatorami i informacjami o urządzeniach.lsblkWyświetla szczegółowe informacje o sprzęcie systemu, w tym o procesorze, pamięci, dyskach, urządzeniach peryferyjnych oraz ich konfiguracji.lshwWyświetla informacje o wszystkich dostępnych urządzeniach blokowych w systemie, takich jak dyski twarde i partycje, wraz z ich nazwami, rozmiarami, typem (np. dysk, partycja), oraz punktami montowania.df -hWyświetla informacje o dostępnej i używanej przestrzeni dyskowej dla zamontowanych systemów plików w formacie czytelnym dla człowieka (flaga -h).free -hWyświetla informacje o wykorzystaniu pamięci RAM i swap, również w formacie przyjaznym dla człowieka (flaga -h).topWyświetla dynamiczny podgląd zużycia zasobów przez procesy działające w systemie, w tym zużycie CPU, pamięci oraz czas działania procesów (wymaga przerwania kombinacją Ctrl + C).ip aWyświetla szczegółowe informacje o wszystkich interfejsach sieciowych w systemie, takie jak adresy IP, maski podsieci, stan interfejsów, adresy MAC.ip rWyświetla tabelę routingu, czyli listę tras, które system wykorzystuje do przesyłania pakietów do innych sieci.ip nWyświetla tabelę ARP (Address Resolution Protocol), czyli mapowanie adresów IP na adresy MAC dla urządzeń w lokalnej sieci.cat /etc/resolv.confWyświetla zawartość pliku /etc/resolv.conf, który zawiera adresy serwerów DNS używanych przez system do rozwiązywania nazw domenowych na adresy IP.ss -tpWyświetla wszystkie aktualnie nawiązane połączenia TCP w systemie oraz procesy, które te połączenia obsługują (-t dla połączeń TCP, -p dla wyświetlania nazw procesów).ss -tlpWyświetla wszystkie aktywne nasłuchujące porty TCP oraz procesy, które je obsługują (-t dla TCP, -l dla nasłuchu, -p dla wyświetlania nazw procesów).psWyświetla listę aktualnie działających procesów w systemie, pokazując podstawowe informacje takie jak identyfikator procesu (PID), użytkownik oraz stan procesu.ps auxWyświetla szczegółową listę wszystkich uruchomionych procesów w systemie, niezależnie od użytkownika, z dodatkowymi informacjami takimi jak użycie CPU, pamięci, czas działania i inne atrybuty procesu.ps auxfWyświetla szczegółową listę wszystkich uruchomionych procesów, prezentując je w formie drzewa hierarchii procesów, co ułatwia zrozumienie relacji między procesami i ich rodzicami.lsWyświetla listę plików i katalogów znajdujących się w bieżącym katalogu roboczym.ls -lWyświetla szczegółową listę plików i katalogów w bieżącym katalogu roboczym, prezentując dodatkowe informacje takie jak uprawnienia, właściciel, grupa, rozmiar i data ostatniej modyfikacji.ls -aWyświetla wszystkie pliki i katalogi w bieżącym katalogu roboczym, w tym ukryte pliki i katalogi, których nazwy zaczynają się od kropki (.).touch [nazwa_pliku]Tworzy nowy, pusty plik o podanej nazwie lub aktualizuje datę ostatniego dostępu i modyfikacji istniejącego pliku.echo Hello > [nazwa_pliku]Zapisuje tekst "Hello" do pliku o nazwie [nazwa], tworząc nowy plik lub nadpisując zawartość istniejącego.cp [nazwa_pliku_1] [nazwa_pliku_2]Kopiuje zawartość pliku [nazwa_pliku_1] do nowego pliku o nazwie [nazwa_pliku_2].mv [nazwa_pliku_1] [nazwa_pliku_2]Przenosi plik [nazwa_pliku_1] do nowej lokalizacji lub zmienia jego nazwę na [nazwa_pliku_2].rm [nazwa_pliku_1]Usuwa plik o nazwie [nazwa_pliku_1] z systemu.mkdir [nazwa_pliku_1]Tworzy nowy katalog o nazwie [nazwa_pliku_1] w bieżącym katalogu roboczym.rmdir [nazwa_pliku_1]Usuwa pusty katalog o nazwie [nazwa_pliku_1].locate foo.txtWyszukuje plik o nazwie foo.txt przy użyciu zindeksowanej bazy danych (szybkie działanie).locate --ignore-case foo.txtIgnoruje wielkość liter podczas wyszukiwania pliku.locate f*.txtWyszukuje pliki tekstowe, których nazwa zaczyna się na "f".locate .confWyszukuje wszystkie pliki zawierające ".conf" w nazwie.updatedbAktualizuje bazę danych `locate`. Musi być wykonane jako root (lub z użyciem sudo).find / -name "*.conf" 2>/dev/nullPrzeszukuje cały system w poszukiwaniu plików .conf, ignorując błędy dostępu.find /path -name foo.txtWyszukuje dokładnie plik o nazwie foo.txt w zadanej ścieżce.find /path -iname foo.txtWyszukuje plik ignorując wielkość liter.find /path -name "*.txt"Wyszukuje wszystkie pliki z rozszerzeniem .txt.find /path -type f -name foo.txtWyszukuje plik regularny (zwykły) o nazwie foo.txt.find /path -type d -name fooWyszukuje katalog o nazwie foo.find /path -type l -name foo.txtWyszukuje dowiązania symboliczne o nazwie foo.txt.find /path -name foo.txt -deleteWyszukuje i usuwa plik foo.txt.find /path -type f -mtime +30Znajduje pliki, które nie były modyfikowane przez ponad 30 dni.find /path -type f -mtime +30 -deleteUsuwa pliki starsze niż 30 dni.find /path -name "*.png" -exec pngquant {} \;Dla każdego pliku .png uruchamia pngquant (kompresja).type wgetWyświetla, czym jest `wget` (alias, funkcja, polecenie wbudowane lub ścieżka).which wgetWyświetla ścieżkę do binarki `wget` zdefiniowaną w PATH.whereis wgetZnajduje plik binarny, kod źródłowy i stronę man dla `wget`.grep 'foo' /bar.txtWyszukuje ciąg 'foo' w pliku bar.txt.grep 'foo' /bar -rRekurencyjnie przeszukuje katalog /bar w poszukiwaniu 'foo'.grep 'foo' /bar -RJak -r, ale również śledzi dowiązania symboliczne.grep 'foo' /bar -lWyświetla tylko nazwy plików, w których znaleziono dopasowanie.grep 'foo' /bar -LWyświetla tylko nazwy plików, które **nie zawierają** dopasowania.grep 'Foo' /bar -iIgnoruje wielkość liter podczas wyszukiwania.grep 'foo' /bar -xDopasowuje tylko całe linie zawierające dokładnie 'foo'.grep 'foo' /bar -C 1Pokazuje 1 linię kontekstu nad i pod dopasowaniem.grep 'foo' /bar -vWyświetla tylko linie, które nie zawierają 'foo'.grep 'foo' /bar -cZlicza liczbę linii zawierających 'foo'.grep 'foo' /bar -nDodaje numery linii do wyników dopasowania.grep 'foo' /bar --colourPodświetla dopasowane fragmenty (jeśli terminal to obsługuje).grep 'foo\|bar' /baz -RWyszukuje 'foo' **lub** 'bar' w katalogu /baz, rekurencyjnie.grep -E 'foo|bar' /baz -RUżywa rozszerzonych wyrażeń regularnych (equivalent: `egrep`).egrep 'foo|bar' /baz -RSkrócona forma `grep -E` – przeszukuje rekurencyjnie z regexem.grep 'sh' /etc/passwdWyszukuje ciąg 'sh' w pliku /etc/passwd – np. w ścieżkach powłok.grep -v nologin /etc/passwdWyświetla tylko użytkowników z aktywną powłoką logowania.systemctl status sshWyświetla szczegółowy status usługi SSH: czy działa, jakie ma PIDy, logi błędów.systemctl statusBez nazwy usługi – pokazuje ogólny stan systemu, aktywne jednostki, błędy i ostrzeżenia.cat /etc/crontabPokazuje zawartość systemowego pliku crontab, w którym definiowane są zadania dla całego systemu.crontab -eOtwiera edytor do edycji zadań cron tylko dla bieżącego użytkownika.adduser [nazwa]Tworzy nowego użytkownika wraz z domyślnym katalogiem domowym i hasłem.userdel [nazwa]Usuwa użytkownika z systemu (bez usuwania katalogu domowego).usermod -aG [grupa] [użytkownik]Dodaje użytkownika do wskazanej grupy.groupadd [nazwa]Tworzy nową grupę systemową.groups [użytkownik]Wyświetla listę grup, do których należy użytkownik.ls -l [plik]Wyświetla szczegółowe informacje o pliku, w tym jego uprawnienia, właściciela i grupę.chmod 755 [plik]Ustawia uprawnienia: właściciel może czytać, pisać i wykonywać; grupa i inni mogą czytać i wykonywać.chmod 644 [plik]Ustawia uprawnienia: właściciel może czytać i pisać; grupa i inni tylko czytać.chmod 700 [plik]Tylko właściciel może czytać, pisać i wykonywać. Grupa i inni nie mają żadnych uprawnień.chmod +x [plik]Dodaje uprawnienie wykonywania (execute) dla wszystkich (user, group, others).chmod u+x [plik]Dodaje prawo wykonywania tylko dla właściciela (user).chmod g+x [plik]Dodaje prawo wykonywania dla grupy.chmod o+x [plik]Dodaje prawo wykonywania dla innych użytkowników.chmod a+x [plik]Dodaje prawo wykonywania dla wszystkich (u, g, o).chmod u-x,g-x [plik]Odejmuje uprawnienie wykonywania dla właściciela i grupy.chmod +100 [plik]Dodaje prawo wykonywania (001 binarnie) tylko dla właściciela.chmod -100 [plik]Odejmuje prawo wykonywania (001) tylko dla właściciela.chown user:group [plik]Zmienia właściciela i grupę przypisaną do pliku.umaskWyświetla bieżącą maskę uprawnień (umask), czyli domyślne ograniczenia dla nowych plików.7 → rwx → 111Odczyt, zapis i wykonanie6 → rw- → 110Odczyt i zapis5 → r-x → 101Odczyt i wykonanie4 → r-- → 100Tylko odczyt3 → -wx → 011Zapis i wykonanie2 → -w- → 010Tylko zapis1 → --x → 001Tylko wykonanie0 → --- → 000Brak uprawnieńfor i in {1..5}; do echo $i; donePętla for – wykonuje komendę dla wartości od 1 do 5.while true; do echo "Looping"; sleep 1; donePętla while – wykonuje komendę w nieskończoność.if [ -f plik.txt ]; then echo "Jest"; fiInstrukcja warunkowa – sprawdza czy istnieje plik o nazwie plik.txt.[ "$USER" == "root" ] && echo "Jesteś rootem"Jednolinijkowy if – sprawdza, czy użytkownik to root.journalctl -xeWyświetla logi systemd z rozszerzonym widokiem błędów.tail -f /var/log/syslogNa żywo śledzi log systemowy (w Debianie).dmesgWyświetla bufor pierwotnych logów jądra (np. po podłączeniu USB).apt updateAktualizuje listę dostępnych pakietów z repozytoriów.apt upgradeAktualizuje wszystkie zainstalowane pakiety.apt install [pakiet]Instaluje nowy pakiet.apt remove [pakiet]Usuwa pakiet z systemu (bez usuwania zależności).apt search [nazwa]Wyszukuje pakiet w repozytorium.ssh user@hostŁączy się zdalnie z hostem jako dany użytkownik.scp file.txt user@host:/path/Kopiuje plik na zdalną maszynę przez SSH.ssh-keygen -t rsaTworzy parę kluczy SSH (prywatny/publiczny).ssh-copy-id user@hostKopiuje klucz publiczny na zdalną maszynę, umożliwiając logowanie bez hasła.bash -x script.shUruchamia skrypt z debugowaniem – pokazuje wykonywane linie krok po kroku.set -eKończy działanie skryptu przy pierwszym błędzie.set -uKończy działanie skryptu przy odwołaniu do niezdefiniowanej zmiennej.trap "echo Error!" ERRWykonuje określoną komendę w przypadku błędu w skrypcie.tar -czf archiwum.tar.gz folder/Tworzy skompresowane archiwum GZIP z katalogu.tar -xzf archiwum.tar.gzRozpakowuje archiwum GZIP.zip -r archiwum.zip folder/Tworzy archiwum ZIP z katalogu.unzip archiwum.zipRozpakowuje archiwum ZIP.head -n 10 plik.txtWyświetla pierwsze 10 linii pliku.tail -n 10 plik.txtWyświetla ostatnie 10 linii pliku.sort plik.txtSortuje linie pliku alfabetycznie.uniq plik.txtUsuwa powtarzające się linie (wymaga wcześniejszego sortowania).cut -d ":" -f 1 /etc/passwdWyciąga pierwsze pole z każdej linii pliku (oddzielonego dwukropkiem).awk -F ":" '{print $1}' /etc/passwdUżywa awk do wyświetlenia pierwszego pola w każdej linii.sudo suZostaje rootem – pełne uprawnienia administratora.passwd [user]Zmienia hasło użytkownika (lub własne, bez nazwy).fail2ban-client statusPokazuje status ochrony logowania przez fail2ban (jeśli zainstalowany).ufw statusSprawdza stan zapory sieciowej UFW (jeśli używana).Scripts
nanoProsty edytor tekstu – idealny dla początkujących.vimZaawansowany, modalny edytor tekstu. Wymaga nauki.lessTylko do przeglądania, nie do edycji. Umożliwia wyszukiwanie.vimtutorUruchamia interaktywny kurs VIM.- Ctrl + O (oznacza "Output", czyli zapisz),
- Naciśnij Enter, aby potwierdzić nazwę pliku (w tym przypadku
skrypt.sh), - Potem naciśnij Ctrl + X, aby wyjść z edytora.
- Ctrl + 0 → wyjście bez zapisu
which bash Sprawdzenie lokalizacji Basha. Zazwyczaj ścieżka /bin/bash.
/bin/bash --version Sprawdzenie wersji Basha.
nano skrypt.sh Tworzenie i edycja skryptu. 'nano' to edytor tekstowy. Kiedy wpisujesz 'nano skrypt.sh', otwierasz plik 'skrypt.sh' w edytorze.
Przykładowy skrypt bash
#!/bin/bash
echo "Witaj w moim skrypcie!"
mkdir nowy_katalog
echo "Katalog 'nowy_katalog' został utworzony."
echo "Current folder content:"
ls ./
chmod +x skrypt.sh Skrypty posiadają rozszerzenie .sh. Muszą mieć ustawioną opcję wykonywania. Nadaj skryptowi uprawnienia do wykonywania.
./skrypt.sh Uruchom skrypt w odrębnej powłoce jako odrębny proces - skrypt wykonuje swoje zadania, ale nie zmienia nic w bieżącej powłoce. Na przykład, jeśli skrypt tworzy zmienne, to po zakończeniu działania te zmienne nie będą widoczne w terminalu.
source skrypt.sh Uruchomienia skryptu wewnątrz aktualnej powłoki - wszystkie zmiany wykonane przez skrypt (np. utworzenie zmiennych) będą widoczne po zakończeniu skryptu w terminalu. source jest użyteczne, gdy chcesz, aby skrypt wpłynął na środowisko, w którym aktualnie pracujesz (np. utworzył zmienne dostępne po zakończeniu działania skryptu).
. skrypt.sh Jak wyżej.