Mimo, że większość aktualnych dystrybucji Linuxa posiada bardzo zaawansowane środowisko graficzne, umiejętność pracy w trybie tekstowym bywa bardzo przydatna (np. w przypadku pracy zdalnej w dużych ośrodkach naukowych). Poniżej znajdują się podstawowe komendy systemów UNIXowych omawiane na zajęciach.
passwd - omawiana już komenda służąca do zmiany hasła
man (manual) - podaje informacje na temat polecenia podanego jako parametr. Przykład: man passwd
Większosć poleceń w systemie UNIX posiada szereg dodatkowych opcji, które wpływają na wykonanie tego polecenia. Komenda 'man' podaje te parametry oraz dodatkowe informacje
finger - podaje informację o aktualnie zalogowanych użytkownikach w systemie lokalnym, zdalnym lub informację o konkretnym użytkowniku. Przykłady:
finger - informacja o zalogowanych użytkownikach na lokalnym systemie
finger @student.fizyka.pw.edu.pl - informacja o użytkownikach na komputerze student.fizyka.pw.edu.pl
finger jkowalski - informacja o użytkowniku 'jkowalski' na lokalnym systemie
pwd (print working directory) - wyświetla miejsce (katalog) w którym się aktualnie znajdujemy
tree - wyświetla system katalogów i plików w postaci drzewa (uwaga: program nie zawsze jest zainstalowany)
cd (change directory) - do poruszania się po systemie plików i katalogów (wchodzenie i wychodzenie z katalogów)
1. Chcąc powrócić do własnego katalogu domowego można wydać polecenie cd ~ lub samo cd. Znak ~ oznacza katalog domowy
2. Natomiast polecenie cd ~kperl przeniesie nas do katalogu domowego użytkownika kperl
3. Chcąc wejść do dowolnego katalogu: cd nazwa_katalogu
Przykład: cd PTI (jeśli jesteśmy w katalogu w którym znajduje się podkatalog PTI) lub np. cd /home/students/fiz2023/login/PTI albo cd ~/PTI jeśli znajdujemy się w innym miejscu
4. Jeśli chcemy przejść do katalogu położonego wyżej w hierarchii piszemy cd ..
5. Komenda cd - zmienia bieżący katalog na ten w którym byliśmy poprzednio (jest to raczej niezbyt często używana komenda ale bywa przydatna)
ls (list) - wyświetla zawartość bieżącego katalogu lub katalogu podanego jako parametr. Przykłady:
ls podaje zawartość katalogu bieżącego
ls /usr/users podaje zawartość katalogu /usr/users
Dodatkowe parametry komendy 'ls' to:
1. ls -l - pokazuje pliki razem z ich rozmiarami, datami utworzenia, etc. Dodatkowy parametr '-h' czyli ls -lh pokaże rozmiary w wygodnych jednostkach (k, M, G)
2. ls -a - pokazuje również pliki i katalogi ukryte (zaczynają się od kropki; zawierają m.in. ustawienia użytkownika i nie ma potrzeby żeby ich listę za każdym razem oglądać)
Parametry te można łączyć np. ls -l -a lub ls -la
du - pokazuje ile miejsca zajmują pliki i katalogi. Komenda du -s . pokaże rozmiar bieżącego katalogu, komenda du -s * wypisze rozmiary poszczególnych plików i katalogów w katalogu bieżącym
mkdir (make directory) - do tworzenia katalogów. Przykład: mkdir nazwa_katalogu lub mkdir /home/students/rok2023/login/nazwa_katalogu
rmdir (remove directory) - do usuwania katalogów ale pod warunkiem że są w środku puste. Przykład: rmdir nazwa_katalogu
lub rmdir /tmp/nazwa_katalogu
cp (copy) - do kopiowania plików i katalogów. Przykłady: cp plik1 plik2 lub cp plik1 /tmp/katalog1/plik2 lub cp plik1 /tmp/katalog1. W ostatnim przykładzie plik1 zostanie skopiowany do katalogu /tmp/katalog1/ z tą samą nazwą czyli plik1. Dodatkowa opcja komendy 'cp':
1. cp -r - kopiuje katalog wraz z zawartością np. cp -r katalog1 katalog2
2. Jeśli chcemy zachować daty utworzenia plików możemy użyć komendy cp -a. Przykład: cp -a katalog1 katalog2
Jeśli zamiast kopiować chcemy jedynie utworzyć link, można to zrobić zgodnie z przykładem: ln -s plik1 link1
Dygresja: Podobnie jak w DOS lub Windows, w systemie UNIX istnieją specjalne symbole (metasymbole - ang. wildcards), zastępujące znaki lub ciągi znaków
* - gwiazdka zastępuje dowolny ciąg znaków np.:
cp * alfa/ - kopiuje wszystkie pliki z bieżącego katalogu do katalogu alfa
cp *ab alfa/ - kopiuje wszystkie pliki kończące się na 'ab' z bieżącego katalogu do katalogu alfa
cp a*b alfa/ - kopiuje wszystkie pliki zaczynające się na 'a' i jednoczesnie kończące na 'b'
? - znak zapytania zastępuje pojedynczy znak np.:
cp ab?de alfa/ - kopiuje pliki, których nazwa ma 5 liter długości i której trzeci znak jest dowolny.
Metasymbole stosują się również do wielu innych poleceń
mv (move) - przenosi plik/pliki, służy też do zmiany nazwy pliku lub katalogu. Przykłady:
mv plik1 plik2 - zmienia nazwę plik1 na plik2
mv *.gif ~ - przenosi wszystkie pliki kończące się na 'gif' do katalogu domowego
mv katalog1 katalog2 - zmienia nazwę katalogu
mv katalog1 ./PTI/katalog1 - przenosi katalog1 do podkatalogu PTI (podkatalog PTI znajduje się w katalogu bieżącym)
rm (remove) - usuwa pliki. Przykład:
rm plik1 - usuwa plik1
rm * - usuwa wszystkie pliki z bieżącego katalogu (należy używać bardzo ostrożnie - sprawdzić, czy rzeczywiscie chcemy wszystko skasować)
Dodatkowe opcje komendy 'rm':
1. rm -r - usuwa cały katalog razem z zawartością np. rm -r /tmp/katalog1
2. rm -i - wymaga potwierdzenia chęci skasowania pliku
3. rm -f - usuwa również pliki przeznaczone jedynie do odczytu
UWAGA: Komenda 'rm -rf *' może okazać się bardzo groźna więc zalecana jest szczególna ostrożność!
W systemie UNIX nie istnieje możliwosć odzyskiwania pomyłkowo skasowanych plików lub katalogów, dlatego przy wszystkich tego typu operacjach należy upewnić się, że polecenie, które wydajemy usunie tylko pliki, które rzeczywiscie chcemy usunąć
chmod (change mode) - zmienia prawa dostępu do pliku/katalogu
Każdy z plików lub katalogów w systemie UNIX posiada atrybuty określające prawa dostępu do pliku różnych użytkowników. Pierwsza trójka pól określających uprawnienia dotyczy właściciela pliku, druga użytkowników należących do tej samej grupy co właściciel a trzecia pozostałych użytkowników
Aby zmienić prawa dostępu do pliku należy użyć polecenia chmod. Przykłady:
1. Aby odebrać innym użytkownikom prawa czytania, pisania i uruchamiania pliku alfa wydajemy polecenie:
chmod o-rwx alfa, gdzie 'o' oznacza innych użytkowników (others), '-' oznacza odbieranie uprawnień, 'rwx' odbierane uprawnienia
2. Zamiast 'o' możemy użyć 'u' - polecenie będzie odnosić się wtedy do uprawnień własciciela pliku (user), lub 'g' dla uprawnień grupy (group)
3. Aby nadać uprawnienia zamiast znaku '-' używamy znaku '+', np:
chmod g+r alfa nada użytkownikom z tej samej grupy co właściciel uprawnienia czytania pliku alfa
4. Poszczególne typy użytkownika można łączyć np. gdy chcemy odebrać wszystkie prawa innym oraz grupie piszemy chmod go-rwx alfa
5. Można wreszcie odebrać nawet sobie prawo do modyfikacji pliku chmod u-w alfa co może uchronić przed przypadkową zmianą lub skasowaniem ważnego dokumentu
chown (change owner) - zmienia właściciela pliku. Przykład: chown nowy_wlasciciel nazwa_pliku
more - pozwala na przegladanie danych (plików, komunikatów poleceń) ekran po ekranie. Przykłady:
1. more alfa - wyświetla zawartość pliku alfa
2. przykład tzw. strumienia ls -la | more - wypisuje zawartość katalogu (bieżącego) zatrzymując się każdorazowo po zapisaniu całego ekranu
cat - podobnie do polecenia 'more' pokazuje zawartość pliku ale nie zatrzymuje się ekran po ekranie tylko wyświetla od razu całość
Komendą more można obejrzeć zawartość pliku np. tekstowego. Z linii komend można uruchomić i inne programy którymi obejrzy się np. pliki graficzne. Przykłady:
1. evince nazwa_pliku można obejrzeć
plik typu 'ps', 'pdf', 'eps'
2. eog (eom, display) nazwa_pliku oglądać
można pliki graficzny np. 'gif', 'jpg', 'png', etc.
3. acroread nazwa_pliku można obejrzeć plik typu 'pdf'
Uwaga: to które programy są domyślnie zainstalowane zależy od wersji Linuxa
Z linii komend można wywołać również notatnik/edytor tekstów do utworzenia pliku tekstowego np.
1. nano nazwa_pliku
2. geany nazwa_pliku
3. gedit nazwa_pliku
4. pluma nazwa_pliku
file - komenda, która podaje rodzaj pliku. Przykład: file nazwa_niezidentyfikowanego_pliku
convert - komenda do zmiany niektórych typów plików graficznych. Przykład: convert plik1.ps plik1.gif. Inne komendy do zmiany typów pliku: ps2pdf, pdf2ps, giftopnm, etc. W tych drugich podajemy tylko nazwę pliku pierwotnego np. ps2pdf plik1.ps aby z pliku plik1.ps otrzymać plik1.pdf. Obrazek typu 'pdf' można przekonwertować na typ 'eps' używając pdftops -eps plik1.pdf.
Do zapisania pliku w innym formacie można użyć również programu gimp
gzip - program do kompresji plików. Przykład: gzip nazwa_pliku
gunzip - program do odkompresowania skompresowanych wcześniej plików. Przykład: gunzip nazwa_pliku.gz
tar - program do archiwizacji danych. Przykłady:
1. tar -cvf nazwa_archiwum.tar plik1 plik2 katalog1 plik3 /tmp/katalog2 ... - tworzenie archiwum o nazwie nazwa_archiwum.tar w skład którego wchodzą zarówno pojedyncze pliki jak i katalogi
2. tar -xvf nazwa_archiwum.tar - odzyskanie zawartości archiwum (uwaga: oryginalny plik nazwa_archiwum.tar również zostaje)
diff - porównuje dwa pliki i znajduje różnice. Przykład: diff plik1.txt plik2.txt
diffpdf - porównuje dwa pliki pdf i znajduje różnice. Przykład: diffpdf plik1.pdf plik2.pdf
date - podaje aktualną datę i czas
cal - pokazuje kalendarz. Np. cal -y - pokaże kalendarz na cały rok
ping - pozwala sprawdzić, czy możliwe będzie nawiązanie połączenia ze zdalnym komputerem. Przykład:
ping student.fizyka.pw.edu.pl - wysyła komunikaty testowe do serwera student.fizyka.pw.edu.pl, na które ten powinien odpowiedzieć. Brak odpowiedzi świadczy o uszkodzonym łączu lub awarii serwera
traceroute - podaje kolejne nazwy i adresy komputerów, przez które przepływają dane z komputera lokalnego do zdalnego, podanego jako parametr. Polecenie to pozwala wyśledzić, w którym miejscu połączenie jest uszkodzone. Przykład:
traceroute sunsite.icm.edu.pl - podaje kompletną drogę, jaką pokonują pakiety danych z maszyny lokalnej do serwera sunsite.icm.edu.pl
nslookup - podaje adres IP z adresu DNS. Przykład: nslookup student.fizyka.pw.edu.pl
hostname - podaje nazwę komputera na którym została wykonana ta komenda
history - podaje listę ostatnio wykonywanych komend
find - komenda do poszukiwania plików. Przykłady:
1. find ~ -name hello.cc - komenda szuka lokalizacji pliku(ów) o nazwie hello.cc począwszy od katalogu domowego użytkownika
2. find . -name *.cc - komenda szuka lokalizacji pliku(ów) o nazwach kończących się na .cc począwszy od katalogu bieżącego
Program jest to plik wykonywalny, a więc taki, który system potrafi uruchomić np. w reakcji na działanie użytkownika. Działaniem tym może być np. wypisanie nazwy tego pliku w linii komend shella (terminal tekstowy) lub (w środowisku okienkowym) kliknięcie na ikonę powiązaną z danym programem.
Procesem z kolei jest instancja działającego programu, która powstała w wyniku jego uruchomienia. W danej chwili może istnieć i działać wiele różnych procesów, będących wynikiem uruchomienia tak tego samego, jak i różnych programów, przez wielu różnych użytkowników. Dlatego też należy rozróżniać pomiędzy procesem a programem. Każdy proces pracujący w systemie posiada przydzielony przez system, jednoznaczny (w danej chwili czasu) numeryczny identyfikator (PID) i wykonuje się w zasadzie niezależnie od innych procesów, działających na tym samym komputerze.
ps -u login - komenda podaje listę procesów (czyli uruchomionych pragramów; chociaż jeden program może też uruchomić kilka procesów) danego użytkownia (login) na systemie. Podany jest m.in. PID, który pozwala jednoznacznie odwołać się do procesu. Listę swoich procesów można zobaczyć również używając komendy ps -ux (podaje m.in. status procesu; procesy "zombie" oznaczone są jako "Z")
kill - 'zabija' proces o podanym numerze (PID). Służy np. do zatrzymywania procesów, nad którymi w jakiś sposób straciliśy kontrolę. Bez praw administratora można zabijać tylko własne procesy ;). Przykłady:
1. kill 13843 - przerywa i likwiduje proces o numerze 13843
2. kill -9 13843 - jak wyżej. Parametr '-9' powoduje bezwględne, natychmiastowe zabicie procesu. Wcześniej warto spróbować bez użycia '-9'
top - podaje listę procesów, które zużywają największą ilość CPU
Proces można puścić w tzw. tle, co oznacza że można się będzie wylogować a proces będzie w dalszym ciągu chodził (pod warunkiem, że nikt nie wyłączy komputera). Robi się to używając znaku &. Przykład: moj_program &
Standardowym strumieniem wyjścia dla komputera jest ekran (stdout) a strumieniem wejścia klawiatura (stdin).
1. Konstrukcja komenda ... > plik powoduje, że zawartość 'stdout' wywołanej komendy, zamiast na ekranie, pojawi się w pliku o podanej nazwie (w miejscu wielokropka umieścić można dowolne opcje i inne argumenty wywołania). Przykłady:
moj_program > plik_z_wynikami.txt
cat plik1.txt plik2.txt plik3.txt > caly_plik.TXT (sklejenie kilku plików w jeden)
man cp > manual_do_cp.txt
2. Podobnie komenda ... < plik spowoduje, że zawartość podanego pliku będzie stanowiła 'stdin' wywołanej komendy. Przykład:
moj_program < plik_wejsciowy.dat
3. Z kolei pisząc komenda1 ... | komenda2 ... sprawimy, że dane wyprowadzone przez 'komenda1' na jej 'stdout' staną się zawartością 'stdin' dla 'komenda2'. Przykład: ls -la | more
Wszystkich tych rodzajów przekierowania można też użyć łącznie, np.: komenda1 < plik1 | komenda2 > plik2 lub komenda1 < plik_wejsciowy > plik_wyjsciowy
Jeśli zastosujemy przekierowanie komenda ... > plik, a 'plik' już istnieje, to jego wcześniejsza zawartość zostanie zastąpiona przez zawartość 'stdout' wywołanej komendy tj. utracona. Istnieje druga postać przekierowania 'stdout': komenda ... >> plik, przy której zawartość 'stdout' wywołanej komendy nie zastępuje wcześniejszej zawartości podanego pliku lecz zostanie dopisana do jej końca.
Brakujący pakiet oprogramowania można doinstalować używając komendy
(Ubuntu, Debian):
sudo apt-get install <nazwa pakietu> (wymagane uprawnienia administratora). Przykład: sudo apt-get install xpdf
Jeśli chcemy jedynie dokonać aktualizacji istniejącego (wybranego) programu, należy wykonać dwie komendy:
sudo apt-get update . Ta komenda jeszcze nie instaluje nowej wersji programu, ale aktualizuje listę dostępnych pakietów (tych które można zaktualizować oraz nowych które właśnie pojawiły się w repozytorium).
Drugą komendą jest:
sudo apt-get install --only-upgrade <nazwa pakietu> która aktualizuje dany pakiet. Przykład: sudo apt-get install --only-upgrade firefox
Jeśli chcemy dokonać aktualizacji wszystkich programów:
sudo apt-get update a następnie:
sudo apt-get upgrade