Używam linii komend. Często, intensywnie, do bardzo wielu czynności.
Nie muszę. GNOME i KDE obrosły masą wizualnych narzędzi, prawie
wszystko da się wyklikać. Po prostu wolę. Napisanie cp
albo mv
zajmuje mi mniej czasu niż otwarcie odpowiednich folderów i ciąganie
myszą, apt-get install cośtam
jest zdecydowanie prostsze od
uruchamiania i przeklikiwania Centrum Oprogramowania i tak dalej.
Zarazem widzę, że dla wielu użytkowników Linuksa konsola jest czymś totalnie obcym. I dotyczy to nie tylko komputerowych nowicjuszy ale też osób, które bez żadnych problemów konstruują złożone makra w programach biurowych, wpisują wyrafinowane wyrażenia w arkuszach, używają tekstowych komend w grach, nawet programują. Czyli wykonują czynności zauważalnie trudniejsze od obsługi shella.
Powodów jest wiele i ich analiza nie jest dzisiaj moim celem. O jednym z nich przekonałem się na własnej skórze: gdy korzystałem z windowsowego laptopa, moja chęć do używania konsoli radykalnie zmalała. Bo ... była trudno dostępna. Przeklikiwanie się przez parę poziomów menu, potem jeszcze zawsze nie ten co trzeba katalog.
Dzisiaj o sposobach dzięki którym którym linuksowy wiersz poleceń zawsze mam pod ręką.
Popup
Kiedykolwiek potrzebuję wykonać jakieś polecenie ad hoc, naciskam F12. Wysuwa się okienko terminala, w którym mogę wpisać potrzebną mi komendę. Powtórne F12 chowa je ale go nie zamyka, mogę zostawić tam działający program, zostaje zachowany bieżący katalog.
Służącym do tego programem jest tilda (na Ubuntu i Debianie
dostępna w pakiecie: apt-get install tilda
). Program ten dodałem do
autostartu, poprawiłem w ustawieniach rozmiar okienka i skrót
klawiszowy i od tej chwili zawsze mam pod ręką gotowy terminal.
Tilda nie jest jedyną opcją, do wyboru jest
jeszcze guake (także używające bibliotek GNOME) oraz yakuake
(używające komponentów KDE i z nim zintegrowane - min. korzystające z
profili konsoli KDE). Te programy także są dostępne w pakietach
(apt-get install guake
albo apt-get install yakuake
).
Funkcjonalnie są do siebie zbliżone, lekką przewagę ma yakuake, które potrafi zrobić split okna. Wybrałem tildę, bo pozwala w preferencjach ustalić rozmiar i położenie okna, a ja wolę mieć je wyświetlane z lewej strony a nie centralnie.
Terminal dla bieżącego folderu
Drugie przydatne usprawnienie to możliwość otwarcia terminala w katalogu aktualnie wyświetlanym w nautilusie. Po prostu opcja Open in Terminal (vel Otwórz terminal) dostępna w menu File (Plik) a także w menu pod prawym klawiszem.
Opcja jest dostępna po doinstalowaniu wtyczki do nautilusa. Na Debianie/Ubuntu:
sudo apt-get install nautilus-open-terminal
(po czym trzeba zrestartować nautilusa, np. przez killall nautilus
albo przez przelogowanie się).
W KDE jest jeszcze lepiej. Dolphin nie tylko ma analogiczną opcję (Narzędzia/Otwórz terminal) ale także potrafi wyświetlać miniterminal dołączony do swojego okna, do tego zmieniając bieżący katalog ilekroć zostanie on zmieniony przy pomocy myszy.
Włączamy go przy pomocy Widok/Panele/Terminal (albo F4
).
Wreszcie, jako miłośnik Emacsa muszę też wspomnieć o M-x shell
,
które otwiera terminal w katalogu aktualnie edytowanego pliku,
a także o M-!
, które pyta o polecenie, wykonuje je i wyświetla
wynik w nowym oknie edytora.
Podobne opcje ma też parę innych edytorów czy środowisk programistycznych.
Po co
Po co komu ten terminal?
Oprócz uruchamiania skryptów czy programów konsolowych, widzę dwie podstawowe grupy zastosowań.
Pierwszą jest szybsze, bardziej ergonomiczne uruchamianie aplikacji i
wykonywanie typowych czynności. Powiedzmy, że chcę podedytować w
gimpie screenshots/firefox.png
. Myszą muszę w tym celu przejść
przez dwa poziomy menu (klikając kolejno Aplikacje, Grafika,
GIMP i musząc poświęcić chwilę uwagi zlokalizowaniu odpowiedniego
menu i trafieniu weń) a następnie wykonać sekwencję kliknięć w samym
Gimpie (Plik, Otwórz a potem pracowite przeklikiwanie i
przewijanie okna otwierania pliku). W terminalu napiszę
gimp sc«TAB»fi«TAB»«ENTER»
(tabulator dopełnia nazwy plików) i już.
Powstaje komenda:
$ gimp screenshots/firefox.png
która ma drobną wadę: terminal pozostaje zablokowany. Można go odzyskać odsyłając program w tło: wciskam Ctrl-Z a następnie piszę
bg
ale prościej jest nieco zmienić polecenie, dopisując na końcu znaczek&
:$ gimp screenshots/firefox.png &
('&' oznacza: nie czekaj na koniec działania programu tylko od razu pozwól wprowadzać następne polecenia).
Druga dotyczy operacji realizowanych na bardzo wielu plikach i wymaga
nieco większej wiedzy na temat shella. Przykładowo, tak skasujemy
wszystkie pliki .bak
we wszystkich podkatalogach katalogu sources
:
$ find ~/sources -name '*.bak' -exec rm {} \;
a tak można skonwertować wszystkie pliki .png
w bieżącym katalogu na .jpg
:
$ for file in *.png; do \
convert $file `basename $file .png`.jpg; done
for, find, convert…
Skoro już dałem te przykłady, krótkie wyjaśnienie o co chodzi.
Polecenie find
jest dość złożone ale w najczęściej używanej formie
ma postać:
$ find katalogPoczątkowy czegoSzukamy -exec polecenie \;
gdzie czegoSzukamy to albo coś w stylu -name '*.png'
(maska
nazwy pliku) albo -type f
(szukanie wszystkich plików) czy -type d
(szukanie katalogów) a polecenie jest dowolną komendą w której
magiczne oznaczenie {}
zostanie zastąpione nazwą znalezionego
pliku. Zacytowany wyżej find
znajdzie wszystkie pliki .bak
i
dla każdego wykona rm nazwaPliku.bak
.
Polecenie for
łatwiej zrozumieć gdy napiszemy je używając
znaków nowego wiersza zamiast średników. Powyższe wyglądałoby tak:
for file in *.png
do
convert $file `basename $file .png`.jpg
done
Dla każdego pliku o rozszerzeniu .png
jego nazwa zostanie zapisana
do zmiennej $file
, po czym zostanie uruchomione polecenie convert ...
.
Drobną dodatkową magią jest tutaj napis `basename $file .png`
.
Odwrócone apostrofy wykonują podaną komendę i wklejają zamiast niej to, co wypisała
na standardowe wyjście (tj. na ekran).
Przykładowo, jeśli robiąc powyższe mam w katalogu plik test.png
,
w odpowiednim obrocie pętli pojawi się $file
o wartości test.png
i powstanie komenda:
convert test.png `basename test.png .png`.jpg
Shell wywoła komendę basename test.png .png
, ta wypisze po prostu test
,
zatem ostatecznie do wykonania zostanie
convert test.png test.jpg
Skomplikowane? Trochę tak. Ale gdy porównajmy trud napisania tej komendy z ręcznym konwertowaniem pięciuset plików po kolei...