Ubuntu i Bash, od czego zacząć?

Piszę z zawodową sprawą, pytaniem do eksperta Linuxa. Kiedyś przez krótki czas korzystałem z Minta, ale postanowiłem się poznać go na porządnie korzystając z najpowszechniejszej wersji – Ubuntu.
Czy możesz mi polecić co powinienem poznać by poruszać się po nim sprawnie oraz gdzie/jak mogę tego dokonać (szkolenia, tutoriale)?
Dodatkowo możesz mi wytłumaczyć popularność Basha, dlaczego jest tak ważny? Jego też bym chciał poznać więc wszelkie wskazówki do nauki mile widziane.

Ubuntu będzie całkowicie w porządku do nauki systemów GNU/Linux. Obecnie obok Centos zdaje się być standardem zarówno na desktopach jak i na serwerach. Włącznie z tym, że bez składania specjalnego zamówienia, mój służbowy komputer przyszedł właśnie z Ubuntu na pokładzie. Obecnie korzystam z Ubuntu Studio, które ułatwia mi konfigurację i pracę z multimediami, którą dość często wykonuję.

W sprawie porządnej nauki Ubuntu gorąco polecam Ci książkę Ubuntu. Oficjalny podręcznik. Wydanie VIII. Nie jest droga, a zawiera całkiem fajnie przedstawione rozmaite aspekty systemu nie tylko dla początkujących, ale również dla zaawansowanych. Poza książką najprostszą metodą uczenia się systemu jest wyszukiwanie rozwiązań swoich problemów w sieci i wprowadzanie ich w życie oraz samodzielne kombinowanie bez obawy o zepsucie systemu. Zakładając, że będziesz robił kopię zapasową ważnych dla siebie danych ponowna instalacja systemu zajmie zaledwie kilkadziesiąt minut.

Dobrymi serwisami zawierającymi informacje, poradniki oraz artykuły o ciekawych programach są WebUpd8 oraz OMG! Ubuntu!.

Bash wywodzi się z czasów, kiedy interfejsy graficzne jeszcze nie istniały, a potem przez długi czas nie były zbyt powszechne. W tamtym okresie do wykonywania akcji takich jak obliczenia na podstawie danych z otrzymanego dokumentu i tworzenie grafów oraz innych form przetwarzania wymagało łączenia ze sobą wielu małych programów (takich jak AWK/SED – przetwarzanie dokumentu czy bc – wykonywanie obliczeń). Tworząc taki zbiór komend połączonych ze sobą znakami | (przekaż wyjście do następnej komendy) lub && (po zakończeniu wykonaj następującą komendę) za pomocą jednej linijki jesteśmy w stanie na przykład pobrać wszystkie wystąpienia danego słowa w plikach i policzyć je wykonując następnie na podstawie tej informacji wprowadzenie nowego rekordu do bazy danych. Takie linijki nazywamy one-linerami.

Stopniowo łączone ze sobą programy stawały się co raz bardziej skomplikowane i dalsze trzymanie ich w jednej linijce nie miało sensu. Powodowało, że były one kompletnie nieczytelne i niemożliwe do dalszego rozwijania, nie mówiąc już o ponownym wprowadzaniu. Zaczęto zapisywać je w skryptach (plikach tekstowych z rozszerzeniem *.sh zawierających listę instrukcji do wykonania). Bash jest jednym ze środowisk, w których możemy wykonywać nasze komendy. Dostarcza do tego celu mechanizmy pętli oraz instrukcji warunkowych, które ułatwiają tworzenie programów (puryści lubią trzymać się nazywania ich skryptami) wykonujących za nas skomplikowane zadania bez potrzeby naszego czuwania nad ich wykonaniem i podejmowania kolejnych decyzji. Jest to zatem świetne narzędzie do automatyzacji zadań wykonywanych w systemach z rodziny Uniksa (od niedawna również MS Windows). Warto jednak pamiętać, że bash to jedynie środowisko i zestaw podstawowych funkcji. Zaawansowane zadania możemy realizować dzięki zestawom aplikacji dostarczanych w pakietach takich jak coreutils. To dzięki nim w systemie pojawiają się aplikacje awk/sed/cron (planowanie automatycznego wykonania zadania)/bc i wiele innych. Tworzone przez nas linijki czy skrypty są w rzeczywistości kompilowaniem ich funkcji ze sobą, tak byśmy nie musieli żmudnych zadań wykonywać samodzielnie.

Do nauki basha i pozostałych narzędzi linii komend polecam: nixCraft (publikują świetne poradniki), Serię Bash by example” od IBM, SED i AWK” na stronie Grzegorza Nalepy, kiedyś O’Reilly wydało świetną książkę „sed & awk, która została nawet wydana u nas przez Helion, ale niestety ciężko jest nasze rodzime wydanie gdziekolwiek jeszcze dostać. Tu podobnie jak w przypadku systemu Ubuntu, dobrze jest uczyć się kombinując i starając się zrozumieć rozwiązania przedstawiane online dla problemów, które mamy do rozwiązania.

Grafika Ubuntu dzięki uprzejmości Canonical Ltd. udostępniona na licencji CC BY-SA 3.0.

Więcej

Migracja z ZSH do BASH

Ostatnio postanowiłem wrócić do basha, w związku z tym stanąłem przed problem migracji historii. Okazał się on trochę cięższy ze względu na dokładane przez zsh prefiksy do komend, np.:

: 2145123543:0;git push origin master

Ciąg cyfr przypadkowy, chodzi o pokazanie wzorca. Nie wiem do końca czy robi tak każda konfiguracja zsh. Ja akurat korzystałem z oh-my-zsh. By się go pozbyć i mieć swoją historię w bashu polecam następującą komendę:

cat ~/.zsh_history | sed 's/\:...........\:.\;//g' > ~/.bash_history

Usuwa ona prefix i po przeładowaniu basha mamy dostęp do naszej historii. Dodatkowym ułatwieniem, które lubię stosować w swoim korzystaniu z konsoli jest dopełnianie komendy na podstawie historii, na dowolnym etapie jej budowania za pomocą klawiszy strzałek „↑” i „↓”. Rozwiązanie to znajdziecie w moim repozytorium z plikami konfiguracyjnymi, w pliku .initrc, który należy umieścić w katalogu domowym.

Więcej