Wprowadzenie do konsoli tekstowej
Wstęp
Zostawmy w spokoju wszelkie dywagacje na temat rozróżnienia terminala od konsoli i powłoki, basha od sh i xterma od rxvt. Poniższy tekst jest przeznaczony dla ludzi, którzy próbują się nauczyć obsługi "tego DOS-a".
Czym jest tryb tekstowy? Powinieneś to już wiedzieć. Na pewno otworzyłeś kiedyś terminal w swoim środowisku graficznym, albo co gorsze, system zamiast wystartować w środowisku graficznym, wyświetlił czarne tło i szare literki. No więc to jest właśnie tryb tekstowy. Po co on jest, skoro można użyć wygodnego środowiska graficznego? No cóż, Linux od zawsze działał w trybie tekstowym, a interfejs graficzny powstał jako nakładka na polecenia tekstowe. Dziś środowiska graficzne są bardzo zaawansowane i wiele ich funkcji nie bazuje już na tekstowych programach. Wiele funkcji, tak. Ale zwykle nie te najważniejsze.
Co takiego ważnego można zrobić przy użyciu trybu tekstowego?
Nagrać płytę
Obejrzeć film (no, w asci artach ;) )
Zakodować/przekodować/obciąć film
Edytować obrazki
Przeprowadzać wszelkie możliwe operacje plikowe
Pisać dokumenty tekstowe, także z formatowaniem
Pracować na arkuszach kalkulacyjnych
Słuchać muzyki
Prowadzić korespondencję e-mailową i uczestniczyć w grupach dyskusyjnych
Pogadać przez IRC-a
Przeglądać/edytować/publikować strony internetowe
Pograć w symulator lotów
Zamówić pizzę (wymagany flash).
Wierzcie lub nie, ale te czynności można wygodnie wykonywać w trybie tekstowym i wiele osób dzisiaj je wykonuje właśnie tak, ponieważ programy tekstowe są szybsze i mają mniejsze wymagania. Często też są... wygodniejsze.
Jeśli tryb tekstowy jest taki super, po co nam środowiska graficzne? - można by przewrotnie zapytać
Niektóre czynności po prostu wykonuje się w nich łatwiej i szybciej. Do tego niektórych rzeczy nie można łatwo wykonać w trybie tekstowym.
Spróbujmy jednak drążyć temat... dlaczego nowoczesne programy graficzne takie jak K3b wykorzystują do swoich podstawowych czynności (w tym przypadku nagrywanie) programy tekstowe (cdrecord, growisofs)? Zadajmy inaczej pytanie: dlaczego programy spełniające ważne funkcje powstają w trybie tekstowym, a programy graficzne to tylko nakładki, uprzyjemniające pracę i wprowadzające w nieznacznym stopniu własną funkcjonalność? Odpowiadam: bo taka jest filozofia. Programy graficzne powstają dla konkretnego środowiska, posiadają specyficzne funkcje, integrują się z innymi programami. Program tekstowy zaś można łatwo przenieść na inny system operacyjny, wykorzystać w skrypcie do automatyzacji pracy lub zbudować na jego podstawie wyspecjalizowane urządzenie. Dodatkowo, twórcy środowisk graficznych mogą z jego wykorzystaniem napisać programy, które będą spełniały potrzeby i założenia ich środowiska.
Implementacja - Praktyczna realizacja zadania przy zastosowaniu konkretnych narzędzi i rozwiązań technicznych.
Za Netopedią
Można więc powiedzieć, że programy tekstowe dostarczają funkcji, a programy graficzne ten funkcje implementują.
Jest jeszcze coś takiego jak biblioteki. Różnią się one od programów tekstowych głównie tym, że nie można ich używać bezpośrednio przez konsolę, czyli są nieinteraktywne. Ich funkcje można wykorzystać w trakcie pisania innego programu.
Otwieramy terminal
Przejdźmy wreszcie do rzeczy. Po pierwsze otwórz terminal. Jeśli pracujesz w środowisku GNOME lub KDE, zapewne znajdziesz odpowiednio terminal i konsolę w menu programów. Jeśli nie możesz sobie poradzić, wciśnij alt+F2 i wpisz o okienko xterm, rxvt, konsole lub gnome-terminal. Któreś z tych poleceń musi zadziałać. Uzycie konsole lub gnome-terminal jest o tyle dobre, że te programy historię poleceń i ich wyników.
Konsola otwarta? A więc zobaczmy co tam jest:
blueice mk {~} $
Po otwarciu konsoli zobaczysz wpis podobny do tego powyżej. Wyjaśnijmy sobie jego znaczenie:
blueice to nazwa komputera, na którym jesteś zalogowany
mk to nazwa zalogowanego użytkownika
{~} to bieżący katalog, czyli katalog, gdzie konsola została otwarta; dalsze wyjaśnienia poniżej
$ oznacza, że polecenia wydajemy z konta zwykłego użytkownika, # to konto administratora (roota)
Spróbujmy więc zmienić katalog i zobaczymy co się stanie:
blueice mk {~} $ cd Obrazki blueice mk {~/Obrazki} $
Jak widać, zamiast {~} mamy w tej chwili {~/Obrazki}. Ale co oznacza ~/ ? Katalog domowy użytkownika, czyli w tym wypadku /home/mk. Możemy się o tym łatwo przekonać, przechodząc do niego i wyświetlając z niego pliki:
blueice mk {~/Obrazki} $ cd ~/ blueice mk {~} $ ls #kateos-pl.log.bz2 karta/ video20.jpg CenT_XLS.xls kompilacja/ video21.jpg Desktop/ nes/ video22.jpg Documents/ pbm.rss.xml video23.jpg Downloads/ public_html/ video24.jpg [ i tak dalej]
Pozwólcie, że podaruję już sobie kolorowanie składni w następnych przykładach:
blueice mk {~/Obrazki} $ cd /home/mk blueice mk {~} $ ls #kateos-pl.log.bz2 karta/ video20.jpg CenT_XLS.xls kompilacja/ video21.jpg Desktop/ nes/ video22.jpg Documents/ pbm.rss.xml video23.jpg Downloads/ public_html/ video24.jpg [ i tak dalej]
Jak widać efekt ten sam, ~/ to zdecydowanie katalog domowy zalogowanego użytkownika.
Proste, prawda? Ale nieciekawe zarazem, więc przejdźmy do czegoś bardziej użytecznego, czyli logowania na administratora:
blueice mk {~} $ su Password: [tu podajemy hasło roota] blueice root {/home/mk} #
Jak widać, bieżącym katalogiem roota jest dalej katalog użytkownika, czyli {/home/mk}. Wpisz w konsolę exit lub użyj skrótu ctrl+D i zaloguj się tak:
blueice mk {~} $ su - Password: blueice root {~} #
Tym sposobem odczytane zostały ustawienia basha użytkownika root, w nich znajduje się między innymi domyślny bieżący katalog (w tym przypadku jest to katalog /root).
Uruchamiamy programy
Pracujesz w środowisku graficznym? Jak nazywa się Twój menedżer plików? Konqueror? Nautilus? A może Thunar? Spróbuj uruchomić go z konsoli:
blueice mk {~} $ konqueror
Tak się nie powinno robić
Konqueror to potężny program z wieloma możliwościami, na dodatek nie pozbawiony drobnych błędów. Pracując na koncie roota możesz całkiem przypadkowo zniszczyć swój system. Zamiast tego powinieneś uruchamiać program przeznaczony konkretnie do wykonywanego zadania. Szczegóły poniżej.
Jak widać uruchomił się menedżer plików. Możesz zrobić to samo z konta roota, aby edytować pliki, do których nie masz dostępu jako użytkownik.
Praca na Linuksie zmusza nas czasami do wykonania pewnych czynności, których nie możemy wykonać jako zwykły użytkownik. Należą do nich wszelkie modyfikacje plików umieszczonych poza katalogiem domowym użytkownika. Wszakże poza nim nie mamy prawa do zapisu! Gorzej, jeśli akurat instalujemy komercyjny sterownik do karty graficznej, nie mamy dostępu do X serwera, a musimy na przykład odczytać z loga czemu sterownik nie chce działać, wykonać kopię konfiguracji iksów lub ją edytować. Warto w tym przypadku znać podstawowe polecenia:
edycja pliku:
blueice root {/home/mk} # mcedit/nano/gedit/kwrite plik
czytanie pliku:
blueice root {/home/mk} # cat/more/less plik
utworzenie pustego pliku:
blueice root {/home/mk} # touch plik
nadanie atrybutu wykonywalności dla pliku:
blueice root {/home/mk} # chmod +x plik
wykonanie programu (nawet takiego bez atrybutu wykonywalności):
blueice root {/home/mk} # sh plik
usunięcie pliku:
blueice root {/home/mk} # rm plik
utworzenie katalogu:
blueice root {/home/mk} # mkdir katalog
Wykorzystanie środowiska KDE do wygodnej pracy w konsoli
Przypuśćmy, że ściągnąłeś duży plik z Internetu, który jest podzielony na kilka części. Części nazywają się np. plik.aa, plik.ab, plik.ac, plik.ad. Teraz trzeba je jakoś połączyć w całość. W Windows musiałbyś ściągnąć jakiś dziwny program. Tutaj wystarczy polecenie cat (tak, czytanie pliku). Zobaczmy jakim cudem polecenie odczytania pliku może połączyć kilka plików w jeden:
blueice root {/home/mk} # cat plik.aa plik.ab plik.ac plik.ad > plik
Jak widać jest to banalne. Wydajesz polecenie odczytania po kolei plików plik.aa plik.ab plik.ac plik.ad. Zamiast jednak wyświetlić je w konsoli, przekierowujesz strumień do pliku > plik.
Ale miało być o KDE. Należy zauważyć, że przepisanie powyższego polecenia nie spowoduje połączenia żadnych plików. Musimy wszak wejść do katalogu, w którym znajdują się te pliki:
blueice mk {~} $ cd /home/mk/Downloads/plik blueice mk {~/Downloads/plik} $ cat plik.aa plik.ab plik.ac plik.ad > plik
Można jeszcze inaczej
blueice mk {~} $ cat /home/mk/Downloads/plik/plik.aa /home/mk/Downloads/plik/plik.ab /home/mk/Downloads/plik/plik.ac /home/mk/Downloads/plik/plik.ad > /home/mk/Downloads/plik/plik
Zobacz ile to wpisywania. Można się przy tym na dodatek kilka razy pomylić i doprowadzić do niespodziewanych rezultatów. W KDE jest prościej. Wchodzisz Konquerorem do tego katalogu:
Wciskasz F4, otwiera się konsola (w bieżącym katalogu). Piszesz cat [spacja]. Zaznaczasz w Konquerorze odpowiednie pliki do połączenia
Przeciągasz je na konsolę, wybierając opcję Wklej
Konqueror wpisuje całe ścieżki dostępowe na wypadek, gdybyś ręcznie zmienił w konsoli bieżący katalog lub chciał przeciągnąć pliki do innej konsoli.
Cudzysłowy przydają się w przypadku, gdy w nazwach plików znajdują się spacje, a także przy rozbudowanych skryptach.
Konquerora nie interesuje, że konsola została otwarta w bieżącym katalogu, przekierowuje on całe ścieżki dostępowe dla plików, stosując cudzysłowy. Ponieważ jednak konsola została otwarta w bieżącym katalogu nie musisz przejmować się o te ścieżki i do tekstu wklejonego przez Konquerora dopisujesz [spacja] > plik
Konqueror oferuje także wbudowaną w okno konsolę, która podąża za użytkownikiem:
Ułatwianie sobie pracy w trybie tekstowym
Nieraz użytkownicy Linuksa przechwalają się, że w konsoli są w stanie zrobić coś szybciej, niż w trybie graficznym. Mają rację? Zobaczmy.
Przede wszystkim ścieżki dostępu
Czy naprawdę myślisz, że powyższy przykład łączenia plików
blueice mk {~} $ cat /home/mk/Downloads/plik/plik.aa /home/mk/Downloads/plik/plik.ab /home/mk/Downloads/plik/plik.ac /home/mk/Downloads/plik/plik.ad > /home/mk/Downloads/plik/plik
napisałem ręcznie? Nic bardziej mylnego. Po prostu otworzyłem konsolę, wpisałem cat [spacja], następnie /h i wcisnąłem na klawiaturze przycisk TAB. Konsola automatycznie dopełniła ścieżkę do /home/. Następnie napisałem m i znowu TAB. Ścieżka dostępu wyglądała w tym momencie już tak: /home/mk/. Kolejno chciałem przejść przez katalog Downloads (oj, trudna nazwa), więc wpisałem D, TAB... chmm, nie działa, jeszcze raz i... oj, a co to?
blueice mk {~} $ /home/mk/D Desktop/ Documents/ Downloads/
Niestety, na literkę D w moim katalogu domowym można znaleźć więcej plików, zostały one wylistowane przez TAB. I bardzo dobrze, wiem czego się trzymać.
Gdy już miałem wpisane cat /home/mk/Downloads/plik/plik.a, skopiowałem sobie to do schowka. A schowek w Linuksie jest bardzo łatwy w użyciu - wystarczy zaznaczyć tekst lewym przyciskiem myszy i już go można wklejać środkowym. Dalszego ciągu można się już łatwo domyślić.
Historia poleceń
Bardzo dużym udogodnieniem jest łatwo dostępna historia wpisywanych poleceń, pod strzałkami w górę i w dół. Odczytywana jest z pliku ~/.bash_history.
Popularne czynności
Oprócz znanych Ci programów środowiska graficznego, które można uruchmiać z terminala, istnieją jeszcze bardzo przydatne polecenia tekstowe.
halt, reboot, hibernate - to odpowiednio wyłączenie systemu, ponowne uruchomienie systemu i hibernacja. Ta ostatnia może nie działać z wszystkimi systemami, warto zapytać dystrybutora. Powyższe polecenia prawie zawsze muszą być wykonane przez administratora.
Potoki - funkcja nieobecna w Windows, pozwala na połączenie dwóch poleceń. Przykładowo wpisując cat /etc/X11/xorg.conf, wyświetlisz zawartość tego pliku w konsoli. Jest to plik konfiguracyjny X serwera, zwykle dosyć obszerny i dlatego przewinie się poza ekran. Możemy więc cat połączyć w potok z less lub more i tym samym otrzymać możliwość łatwego przewijania tego pliku: cat /etc/X11/xorg.conf |more. Kolejny przykład, smartctl --help wyświetla bardzo wiele możliwości, a Ty jesteś ciekawy tylko opcji dla trybu DMA, wpisujesz więc smartctl --help |grep DMA. Tak grep, jak less i more to osobne programy, z których można korzystać niezależnie od innych programów. Grep jest bardzo przydatny do pracy z manualami, czyli pomocą uzyskiwaną za pomocą polecenia man program.
Nie wszyscy wiedzą, że pliki konfiguracyjne, takie jak fstab, także posiadają swoją pomoc w formacie man.
top - jest to program niezwykle przydatny do zarządzania procesami. Przykładowy problem: system zwolnił lub na jakimś aplecie superkaramby obserwujesz użycie procesora w 100%. Uruchamiasz więc top:
top - 13:04:47 up 2:04, 1 user, load average: 0.38, 0.39, 0.37 Tasks: 116 total, 4 running, 112 sleeping, 0 stopped, 0 zombie Cpu(s): 98.3% us, 0.0% sy, 0.0% ni, 0.0% id, 00.0% wa, 0.7% hi, 1.0% si Mem: 1036324k total, 832404k used, 203920k free, 83708k buffers Swap: 2104472k total, 0k used, 2104472k free, 371788k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 4664 mk 18 0 2586m 4584 3048 R 97.0 0.4 0:00.23 AP.EXE 3445 mk 15 0 178m 85m 25m R 5.3 8.5 3:43.95 amarokapp 4667 mk 15 0 4100 1688 556 S 3.7 0.2 0:00.11 wineserver 2822 root 15 0 87268 61m 4164 S 3.0 6.0 4:26.06 X 2975 mk 15 0 61552 44m 22m S 1.0 4.4 0:29.61 konqueror 2907 mk 15 0 48636 29m 14m R 0.7 2.9 0:04.75 kicker 2921 mk 15 0 41656 27m 15m S 0.7 2.7 0:14.36 superkaramba 2903 mk 15 0 36284 19m 10m S 0.3 1.9 0:05.60 kwin 2905 mk 15 0 39068 22m 13m S 0.3 2.2 0:03.48 kdesktop 2920 mk 15 0 34304 20m 12m S 0.3 2.0 0:00.58 kwikdisk 4663 mk 15 0 2248 1120 840 R 0.3 0.1 0:00.08 top 1 root 15 0 1600 544 472 S 0.0 0.1 0:00.57 init 2 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0 3 root 10 -5 0 0 0 S 0.0 0.0 0:00.08 events/0 4 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 khelper 5 root 15 -5 0 0 0 S 0.0 0.0 0:00.00 kthread 30 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 kblockd/0 31 root 20 -5 0 0 0 S 0.0 0.0 0:00.00 kacpid 139 root 15 -5 0 0 0 S 0.0 0.0 0:00.00 kseriod
Jak widać, AP.EXE, czyli słownik angielsko-polski uruchomiony pod wine pewnie się zawiesił. PID czyli identyfikator procesu to 4664. Znając tę informację możemy użyć np. polecenia kill -9 PID. Szczegółowe informacje na temat tego przełącznika znajdują się w manualu. Zamiast używać kill możesz w topie wcisnąć K i wpisać numer feralnego procesu. Jeśli nie chce Ci się szukać PID-u, a wiesz który program Ci przeszkadza, możesz użyć polecenia killall nazwa pliku binarnego, czyli np. killall soffice.bin dla OpenOffice. Użycie killall może się wiązać z nieprzewidywalnymi rezultatami, na przykład "zabicie" Nautilusa pod GNOME spowoduje zniknięcie ikonek z pulpitu, ponieważ są one wyświetlane w ramach procesu Nautilusa.
Demony - wyobraź sobie sytuację, w której chcesz zrestartować połączenie z Internetem. Albo uruchomić menedżera logowania, bo na przykład musiałeś go wyłączyć w celu instalacji binarnych sterowników Nvidii. W systemach opartych o skrypty startowe BSD (Slackware, Arch) musisz z katalogu /etc/rc.d/ wybrać odpowiedni plik, który odpowiada za uruchamianie żądanej usługi przy starcie systemu. Dla przedstawionych powyżej przypadków będą to odpowiednio rc.inet i rc.4. Pełne polecenie może wyglądać tak /etc/rc.d/rc.inet restart. Zamiast restart można napisać start lub stop. W innych systemach skrypty startowe są rozrzucone po większej ilości katalogów, więc tam zwykle należy użyć narzędzia dedykowanego dla dystrybucji, w Mandrivie na przykład jest to service nazwa demona (np. gdm) start|stop|restart.