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
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...
Ja osobiście dorzucę coś takiego. Z konsoli można wykonać znacznie więcej rzeczy niż z najlepszego terminala okienkowego. Mamy też większą kontrolę nad procesem wykonania zadań. Poza tym bądźmy szczerzy jeżeli trzeba coś zrobić i akurat umarliśmy serwer X-ów (co zdarza się nad wyraz często w moim przypadku) to konsola jest jedynym punktem dostępu. No i na koniec jeszcze jedna rzecz. Zawsze jak pracuję z konsoli w firmie to budzę respekt szacunek i rozsiewam aurę profesjonalizmu :D
A właśnie, przypomniałeś mi o jeszcze jednym. Podstawowa metoda reanimacji X-ów:
Ctrl-Alt-F1killall firefoxalbokillall chromehtopczytopexit(alboCtrl-D)Ctrl-Alt-F7I jestem z powrotem w znowu responsywnych X-ach ;-)
ciekawe, bo u mnie jest akurat odwrotnie... :-) ja szukam czegos z kumplem i ten mi zaglada przez ramie to zaraz dostaje pytanie: "A po co tym grepem, nie wygodniej jest z eclipsa?". Wlasciwie nie mam na to opowiedzi poza 'mnie nie'. ;-)
i polecam jeszcze polecenie xargs... odkrylem je stosunkowo niedawno i jestem zachwycony :-)
find . -type f -name *.doc -print0 | xargs -0 -iXXX wvHtml XXX XXX.html
powyzsze konwertuje wszystkie dokumenty M$doc w bierzacym katalogu i jego podkatalogach na htmle. Co fajne, jest odporne na te irytujace spacje w nazwach dokumentow. P.S. napisalem co prawda z banki bez sprawdzenia ale powinno dzialac...
bedzie dzialac jak sie .doc zamknie w apostrofach, o tak: '.doc' albo poprzedzi gwiazdke backslashem, jak zrobilem w poprzednim komentarzu ale mi jakos wyfiltrowalo...
kurcze, najpierw przefiltrowalo mi backslasha a teraz gwiazdke (teraz widze, ze one do italica) moze teraz zadziala: \*.doc lub '*.doc'
Ech, ten markdown. Też mnie czasem irytuje ale nic lepszego nie znalazłem. Kawałki kodu najlepiej pisać w osobnym wierszu, wcięte na 4 spacje. Twój wychodzi tak (złamałem też na dwa wiersze):
Póki operacja się mieści w ramach funkcji edytora - czemu nie. Ja nie jestem dogmatyczny, shella używam też a nie tylko.
Gdzie się kończy Eclipse? W porównaniu z rgrepem - na przykład, gdy trzeba przeszukać serię stumegabajtowych logów (których pootwieranie w edytorze zabije system). No i oczywiście przy operacjach, które wykraczają poza jego możliwości, jak zmiany nazw plików, konwersje formatów, przerzucanie ich na inną maszynę itd itp.
Tam gdzie trzeba wykonać jakieś zadanie związane z przetwarzaniem tekstu. Eclipse to tylko IDE i nie ma pewnych mechanizmów, które mają grep/sed/awk czy najzwyklejszy OO/MSO. Poza tym Java średnio radzi sobie z przetwarzaniem tekstu w porównaniu do C/C++.
najczesciej uzywam shella ale czasem, przyznam, ze rzadko, tez uzywam podobnych opcji z edytora - ale nie z eclipse'a... moj ulubiony edytorek i tak zawsze mam uruchomiony i mimo, ze tez jest napisany w javie to jest i tak duzo szybszy od eclipse'a i nie ma szans tak spuchnac jak eclipse zwykl puchnac przy operacjach na setkach plikow... w odwodzie mam jeszcze oczywiscie gedit/kwrite...
Ja pod Vistą testowałem różne RocketDocki, ObjectDoki i Launchy aż w końcu używam Google Toolbara. Dwa razy CTRL (bo CTRL Spacja gryzło się z Ubiquity) i mogę odpalić dowolny program bez klikania. Po prostu wpisując Word czy Gimp, ale do terminala temu daleko.
Pod Linuksem najporęczniejsze z rzeczy tego typu jest chyba Gnome Do. Troszkę używam ale terminal zwykle poręczniejszy. Do samego odpalania, zamiast menu, ujdzie jeszcze aplet szybkiego uruchamiania (
Alt-F2i pod Gnome i pod KDE).A duża różnica Linux-Windows jest też w tym, że pod Windows programów nie ma w ścieżce, nawet mając otwartą konsolę trzeba pisać jakieś
"C:\Program Files\Paint Shop Pro\PSPro.exe"dodam od siebie, że convert wymaga zainstalowania imagemagick
sporym ułatwieniem jest też ustawienie sobie klawisza skrótu odpalającego terminal - ja ustawiłem sobie SuperL (aka klawisz Windows). jedno naciśnięcie i już mam terminal gotowy do pracy.
najczesciej uzywam shella ale czasem tez uzywam podobnych opcji z edytora - ale nie z eclipse'a... moj ulubiony edytorek i tak zawsze mam uruchomiony i mimo, ze tez jest napisany w javie to jest duzo szybszy od eclipse'a i nie ma szans tak spuchnac jak eclipse zwykl puchnac przy operacjach na setkach plikow...
Oj sporo jest rzeczy, które szybciej się robi za pomocą terminala (wiersza poleceń). Z pewnością będą to - jak już tu wspomniano - operacje na większej liczbie plików, wyszukiwanie poleceniem find. Tu może dorzucę świetne opcje: -mtime, -mmin, które pozwalają określić np. pliki zmodyfikowane w ciągu ostatnich 24 godzin czy minut lub starsze niż ileś-tam. A mistrzostwo świata to polecenia df i du wyświetlające wolny plac na dyskach (df) i ilość zajętego miejsca w katalogu (du).
No i jeszcze... :)
Będąc pod wrażeniem programu "ikog" napisałem sobie w pythonie menedżera listy zadań. Napisałem? Nie - wciąż go piszę :))
Wiem, że Autor interesuje się tego rodzaju programami, więc pozwolę sobie parę słów: Program działa w linii poleceń. Ładuje się natychmiast i wydaje mi się, że praca z nim jest szybsza niż z programami okienkowymi.
Lista zadań na dziś? "d"
Nowe zadanie? ". treść"
Cała lista? "l tekst_szukany"
Z podziałem wg tagów? "lt tekst_szukany"
itd. itd.
Dane (baza sqlite) razem z programem przechowuję na pendrivie i używam go w domu na Linuksie a w pracy na Windows.
Trzeba jeszcze nadmienić, że treść zadań można edytować w okienku generowanym za pomocą modułu Tkinter. Nie jestem przecież wrogiem okienek, w Windows niewygodnie się wkleja tekst do terminala no i okienko umożliwia łatwe wpisanie wielu wierszy. Oprócz zadań przechowuję tu różne notki i to się wtedy bardzo przydaje.
Jest jedno ale co do użycia konsoli. Musisz pamiętać polecenia, aby efektywnie z niej korzystać. Wiele osób ma pamięć tak dalece "obrazkową", że nigdy nie będą chciały pracować w terminalu.
Problem z tekstowymi rozwiązaniami pojawia się, gdy zadań robi się więcej i trzeba je organizować. Kiedyś próbowałem używać be jako issue-trackera i wpisywało się fajnie ale gdy przyszło przemyśleć plan prac, bolało. Chociaż ... jest jedno tekstowe podejście które mnie trochę kusi - GTD na org-mode. Beware, I am Emacs addict.
Oczywiście gdy piszesz sam, jesteś w lepszej sytuacji, możesz sobie swobodnie dodawać brakujące elementy.
O, bez Image Magick nie obejdę się nawet pod Windows (cygwinem)