Każdy, kto kiedykolwiek zetknął się z Linuksem, czy też innymi „Uniksopodobnymi” systemami operacyjnymi na pewno zauważył, że przeniesienie przyzwyczajeń i sposobu myślenia z Windowsa nie jest proste. Sam zmagam się teraz z tym problemem, ponieważ na nowym komputerze, który mam zamiar nabyć w [mam nadzieję] niedalekiej przyszłości, chciałbym po raz kolejny [chyba już trzeci] dać szansę Debianowi na zajęcie pozycji głównego OSa – zwykle po pewnym czasie wracałem do niedających się wyrzucić „wspomnień” okienek, z których, w wersji XP, aktualnie korzystam. „Dysk” C: zamiast /dev/hda0, Panel Sterowania zamiast ustawień w /etc, klikanie myszą zamiast wpisywania poleceń oraz wiele innych „spraw życia codziennego” skutecznie uniemożliwiało mi „przezwyczajenie” się do otwartych rozwiązań. Tym bardziej, że uczelnia przez program MSDNAA daje darmową licencję na produkty Microsoftu… W każdym razie w życiu każdego człowieka, a szczególnie takiego związanego z nowymi technologiami [wszystko się zmienia w bardzo szybkim tempie], w pewnym momencie przychodzi czas na rewolucję, a przynajmniej przygotowanie do niej. Takim właśnie przygotowaniem była instalacja i konfiguracja „prawie natywnego” środowiska Linuksowego… pod Windowsem.
Czego potrzebuję?
Na początku pozwolę sobie opisać jak to zrobiłem, tak, abyś czytając kolejne rozdziały mógł skonfrontować swoje poglądy z moimi wnioskami. Tak więc – do dzieła!
Aby w pełni zastąpić konsolę Windowsa, czyli zrealizować zarówno postulaty wydajności / funkcjonalności jak i wyglądu / szeroko pojętego usability [wybaczcie - jest to jedno ze słów które mnie strasznie "uwiera", bo jest bardzo pomocne, ale nie mogę znaleźć dla niego dobrego polskiego odpowiednika] będziemy potrzebowali dwóch programów. Będą to:
- Cygwin [sprawdzona, aktualna wersja 1.7.1-1]
- Console2 [sprawdzona wersja 2.00b144, najnowsza 2.0b145]
Kilka słów wprowadzenia – Console2 to narzędzie zastępujące graficznie konsolę Windowsa o wiele ładniejszym i bardziej funkcjonalnym interfejsem. Niektóre z funkcji, które na pewno przydadzą się Tobie, przyszłemu użytkownikowi, a których nie ma w „pakiecie standardowym” [cmd.exe]:
- możliwość podpięcia innego interpretera poleceń niż cmd.exe
- przezroczystość okna
- dowolna zmiana rozmiaru, zarówno wzdłuż, jak i wszerz
- zakładki
Dzięki Console2 będziemy mogli „opakować” niezbyt ładne okno Cygwina w nieco bardziej przyjazny sposób. A czym jest sam Cygwin? Na jego oficjalnej stronie możemy znaleźć dość enigmatyczną informację:
„Cygwin is a Linux-like environment for Windows.”
Co to oznacza? Otóż – za pomocą biblioteki cygwin1.dll, która emuluje zachowanie systemów operacyjnych zgodnych ze standardem POSIX, w środowisku Windows zostaje nam udostępniona możliwość uruchamiania dowolnych narzędzi znanych z systemów opartych na jądrze Linuxa. Fajnie? Proste, że fajnie, rzekłbym nawet MEGA. ;] Pomyśl – gcc, vim, cat, ls, tar, ssh oraz masa innych narzędzi staje się dostępna pomimo korzystania z zupełnie innego środowiska! Cygwin zmienia także nasze podejście do struktury systemu, bowiem wewnątrz jego konsoli mamy standardowego „roota”, czyli element „/” wraz z wszystkimi partycjami zamontowanymi w drzewie /cygdrive. Byłbym zapomniał – normalne „exeki” także możemy uruchamiać, żeby nie było. Ktoś chce coś jeszcze? Nie? To idziemy dalej. ;]
Jak to zrobić?
Pakiet instalacyjny.
Aby stworzyć opisane wyżej środowisko należy w pierwszej kolejności zaopatrzyć się w pakiety instalacyjne obu programów. Najlepiej będzie, jeśli po prostu podam odnośniki do stron obu projektów, a zatem:
- Cygwin: http://cygwin.com/
- Console2: http://sourceforge.net/projects/console/
Po ściągnięciu przechodzimy do kolejnego akapitu.
Instalacja.
Console2 jest spakowany w zwykłym archiwum, więc wypakowujemy go gdziekolwiek na dysku – przy okazji polecam wykonanie jakiegoś skrótu, np. na pulpicie, żeby się wygodniej uruchamiało.
Z Cygwinem jest trochę więcej zabawy, ponieważ pakiet instalacyjny to tylko interfejs zawierający informacje o serwerach, z których będą ściągane docelowe dane. Uruchamiamy setup.exe, wita nas ekran informacyjny, który szybko pomijamy klikając przycisk „Dalej„. W kolejnym oknie mamy wybór źródła, z którego będą pobierane pakiety środowiska – polecam zaznaczenie pierwszej, domyślnej opcji „Install from Internet” – wtedy nie będziemy musieli się praktycznie o nic martwić. Ze stoickim spokojem klikamy więc „Dalej” i stajemy przed wyborem katalogu, w którym zostaną umieszczone wszystkie instalowane narzędzia. W moim przypadku jest to „D:\Cygwin”, ale możecie wybrać dowolny inny – nie testowałem tego, ale odradzałbym standardowy wybór większości użytkowników, czyli „C:\Program Files”, ze względu na spację w nazwie. Jeszcze tylko wybór opcji, dla jakich użytkowników będzie dostępna ta instalacja i możemy przejść do kolejnego okna, w którym wybieramy katalog „tempa”, w którym zostanie zachowana konfiguracja aktualnej instalacji Cygwina [potrzebna do ewentualnej aktualizacji / instalacji nowych pakietów]. Z oknem wyboru typu połączenia [skorzystałem z "ftp://ftp.easynet.be"] i serwera każdy powinien sobie raczej poradzić, wybór pakietów proponuję na razie zostawić, więc po kliknięciu któregoś już z kolei „Dalej” nie pozostaje nic innego jak zaczekać chwilę na ściągnięcie wszystkich danych i instalację samego środowiska.
Konfiguracja.
Voila! Cygwin i Console2 zainstalowane. Teraz najważniejsza część – konfiguracja. Nasze linuksowe środowisko jest, kolokwialnie mówiąc, „gołe”, więc wypadałoby zainstalować potrzebne narzędzia. Jeśli w poprzednim akapicie nie posłuchałeś[aś] mnie i wybrałeś[aś] już odpowiednie rzeczy – gratuluję – jeden akapit czytania mniej. ;] Tym jednak którzy posłusznie opuścili ekran wyboru paczek polecam teraz ponowne otwarcie instalatora setup.exe i przejście tych samych kroków, co w powyższym akapicie, ale należy zatrzymać się na ekranie konfiguracji programów [bardzo duża lista rozwijana]. W tym miejscu polecam dogłębne zapoznanie się z pozycjami dostępnymi do zainstalowania, ponieważ jest ich naprawdę sporo. Nie musimy się martwić o zależności między pakietami, ponieważ instalator, jak przystało na Linuksa, sam wykrywa zależności i zaznacza odpowiednie pozycje. Ze swojej strony polecę kilka narzędzi wartych uwagi:
- vim – jedni go kochają, inni nienawidzą, ale fakty są takie, że bez znajomości tego edytora tekstu nie możemy się nazywać prawdziwymi informatykami / programistami. ;] Absolutna podstawa w środowisku konsolowym.
- ssh – klient SSH pozwalający na łatwe łączenie się ze zdalnymi hostami.
- wget – konsolowe narzędzie pobierania plików [ogólnie danych] z internetu i innych źródeł.
- gcc – zestaw kompilatorów do różnych języków programowania [dodatkowe pakiety].
- nano – program dla lubiących „normalne” edytory tekstu, ale dalej w konsoli. ;]
- bash – moja ulubiona powłoka systemowa, oczywiście do wyboru, do koloru – csh, zsh, ksh, rxvt – wszystko jest, wystarczy zaznaczyć. ;]
Oczywiście godnych polecenia jest wiele innych pakietów, ale te przywołałem z pamięci jako najczęściej używane. Ostatnią rzeczą jaką musimy zrobić jest „zmuszenie” Console2 do uruchamiania konsoli Cygwina zamiast standardowego interpretera poleceń cmd.exe. Aby zmienić domyślną powłokę należy wybrać z menu pozycje Edit > Settings i w polu „Shell” wprowadzić ścieżkę do pliku cygwin.bat. W tzw. „międzyczasie” polecam pobawienie się ustawieniami tego programu i dostosowanie odpowiednich opcji do własnych gustów graficznych. To wszystko – mamy już w pełni działające środowisko! Gratuluję! ;]
W czym mi to pomogło?
Głównym problemem jaki został rozwiązany dzięki postawieniu Cygwina było to, że nie musiałem się w myślach „przełączać” pomiędzy poleceniami basha i ich windowsowymi odpowiednikami, dzięki czemu praca stała się o wiele bardziej wydajna. Zwykle robiąc coś w konsoli musiałem kombinować, jak kilka prostych i „normalnych” poleceń znanych z konsoli Linuksowej przełożyć na „dialekt” interpretera cmd.exe, a teraz znikła „warstwa abstrakcji” i mogę w pełni wykorzystać moc otwartych rozwiązań. Będzie to genialne rozwiązanie dla ludzi, którzy potrzebują czasem zrobić kilka rzeczy na Windowsie, a nie potrafią się obyć bez poleceń i programów dostępnych w Linuksie.
Inną sprawą jest dostępność klienta SSH w Windows, której to funkcjonalności mi bardzo brakowało. Oczywiście jest PuTTY, ale on nie integruje zwykłej konsoli z funkcjonalnością SSH, tak więc nie ma możliwości interakcji z tym, co mamy na dysku. Jako programista ukierunkowany na strony / aplikacje internetowe bardzo często piszę i testuję projekt na lokalnym serwerze WAMP, a kiedy prace osiągną odpowiedni poziom zaawansowania, przerzucam kod na serwer, do czego bardzo przydaje się SSH – do tej pory korzystałem głównie z WinSCP ze względu na dostęp do graficznego interfejsu. ;]
Co dalej?
Problem został teoretycznie rozwiązany, ale jest to tylko połowiczna „solucja”, ponieważ nadal jesteśmy w środowisku obcym, emulujemy odpowiednie funkcjonalności, a nie mamy dla nich natywnego środowiska, które „rozumiałoby” standard systemu operacyjnego, pod jaki były one tworzone. Dlatego po przyzwyczajeniu się do konsoli Linuksa i równoczesnym odzwyczajeniu od uciążliwych rozwiązań dostępnych wyłącznie w Windowsie proponuję przesiadkę na natywną instalację tego systemu [oczywiście mowa o Linuksie ;]] – polecam dystrybucję Debian w wersji „testing” – mamy tu dostęp do o wiele bogatszego zbioru pakietu niż wersja „stable”. Za parę tygodni sam będę próbował wykonać ten „manewr” i mam nadzieję, że za chyba już czwartym podejściem w końcu się uda. Oczywiście możecie się już spodziewać porad z tym związanych, bo na pewno pojawią się jakieś problemy. ;]
Podsumowanie.
Trochę się rozpisałem, za co przepraszam tych, którzy lubią krótkie i proste rozwiązania, ale naprawdę w zamierzeniu miałem napisać krótko [jak zwykle ;]]. Po prostu na etapie „dopieszczania” tekstu pojawiło się bardzo dużo moim zdaniem wartych uwagi szczegółów, przez co objętość wpisu urosła prawie trzykrotnie, głównie za sprawą rozdziału o instalacji i konfiguracji. Podzieliłem tekst na odpowiednie rozdziały, więc mam nadzieję, że nikt się specjalnie nie przemęczy i ominie to, co mu niepotrzebne. Cóż, obiecuję, że będę cały czas pracował sposobem wyrażania moich myśli w stylu „do rzeczy, panie kolego” – chyba, że lubicie czytać, wtedy nie ma sprawy, mogą być i dłuższe. ;] Będę wdzięczny za wszelkie opinie w komentarzach, zarówno w kwestii samej jakości tekstu, jak i poziomu merytorycznego oraz ewentualnych błędów [jestem tylko człowiekiem, ale nad tym też pracuję ;]].
Warto przeczytać.
Trwa ładowanie…
Ciekawe ;] Może wreszcie się zmuszę by Cygwina zainstalować. Normalnie bym wcześniej tego dokonał, jednak PowerShell umożliwia częściowo korzystanie z popularnych linuxowych funkcji. Jednak brak ssh z prawdziwego zdarzenia, jak stwierdziłeś, boli :)
A Console2 jest zajebiste ;] I też z PowerShellem działa.
Swoją drogą praktycznie jednocześnie o podobnej tematyce napisaliśmy ;)
Także ++ ;]
Ponownie tu napiszę, że bardzo mi się to przydało. Aczkolwiek ciągle nie mam zamiaru robić czegokolwiek na poważnie pod Windowsem ;).
Przy okazji co to takiego fruwa na stronie na samej górze i przesuwa się wraz ze scrollem?
Cieszę się, że jest odzew na ten wpis, nie wiedziałem, że aż tak się ludziom przyda, ale cóż, nieznane są wyroki użytkowników. Za Twój wpis się niedługo wezmę, możesz liczyć na komentarz. ;]
Część rzeczy można na pewno zrobić pod Windowsem, ale ja się czuję nieco ograniczany, stąd chęć posiadania systemu, który dawałby mi trochę więcej.
Zaintrygowałeś mnie za to tym „czymś latającym” – mógłbyś to dokładniej opisać, bo nic nie zauważyłem?
A nie dało by się dodać obrazków? Akurat trochę ciężko jest mi pewne rzeczy sobie z wizualizować :/
Oj, przyznam, że wolę pisać tekst, obrazki do tej pory rzadko pojawiały się we wpisach. Na pewno jeśli zrozumienie rozwiązania będzie niemożliwe bez wizualizacji, to wstawię odpowiednie zrzuty ekranu, tutaj jednak wydaje mi się, że da się to „ogarnąć” bez ich pomocy.
Gdybyś jednak miał problem [w co raczej nie wierzę, za dobry jesteś ;]], to śmiało pisz komentarz. ;]
Pingback: [Eclipse] Zmiana rozmiaru okna dokumentacji. « Tomasz Kowalczyk
Super notka!!
Wszyscy blogerzy piszący o IT powinni pisać takie rzeczowe i wyczerpujące poradniki. Podoba mi się ta forma: pytanie – odpowiedż.
BTW, ja np. jestem zmuszony używać w pracy WinXP i takie coś jak Cygwin+Console2 bardzo mi pomoże. Dzięki!
To raczej model problem < -> rozwiązanie, ale myślę, że jest co najmniej kompatybilny. ;] Wybrałem taki właśnie sposób prowadzenia tego bloga i cieszy mnie, że się sprawdza. ;]
Pingback: 6 kroków ku wygodnemu programowaniu w konsoli linuksowej | Robert Gawron
Ale windows ma już dwie konsole: wmic (windows management instrumentation console), dostępna od XP pro i wyżej
http://technet.microsoft.com/en-us/library/bb742610.aspx
oraz nową PowerShell:
http://support.microsoft.com/kb/968929
W cmd użycie wmic: wmic.exe. PowerShell jest już w aktualizacjach. Napewno też znacie Gnu for Windows – to pakiety narzędzi uniksowych, dostepne także binaria.
http://gnuwin32.sourceforge.net/
Warto również wspomnieć o narzędziach Sysinternals:
http://technet.microsoft.com/en-us/sysinternals/default.aspx
Ooo… takie komentarze lubię – czytelnicy wpadający z Google i innych wyszukiwarek na pewno się zainteresują. Moim celem nie było jednak zainstalowanie alternatywy dla konsoli Windowsa, ale pełnoprawnej konsoli „konkurencyjnego” systemu, którego nie wybrałem jako głównego tylko ze względu na strasznie twarde przyzwyczajenia do WinAMPa i jemu podobnych aplikacji. Ostatnio znalazłem nawet jeszcze lepszy sposób korzystania z Cygwina, który już niedługo opiszę. Cierpliwości. ;]
Oj, artykuł pierwsza klasa. Dodam że w Console2 bo już jej używałem, można wywoływać Wmic oraz PowerShell i działa pod nią PowerTab
http://powertab.codeplex.com/
Zresztą chętnie po przeczytaniu głębiej potestuję Cygwina :) Ale na dobre już u mnie zagościło Gnu for Win. Dla zainteresowanych „prawie” zamiennik wmic – WMInetcq.exe WMI .net command line query tool
http://www.digitalcoding.com/free-software/systems-and-networking/WMInetcq-exe-WMI-net-command-line-query-tool.html
To jeszcze dorzucę smaczek do Cygwina :D – Windows Quake Style Console
http://sourceforge.net/projects/winqconsole/
Widzę, że jednak zmieniłeś zdanie cieszy mnie, że na plus. ;]
Wiesz PowerShell też ma przyciągnąć userów Unixa bo w powłoce spotkamy np. taki alias jak CAT. No, ale… Cygwin już jest zainstalowany, dodałem go do zmiennych środowiskowych co by sobie w PowerShellu płynnie przechodzić i śmiga aż miło, po zakończeniu sesji Cygwina i wejściu na nowo do PShella wszystko ładnie działa. Kilka obrazków:
http://img194.imageshack.us/img194/474/pscygwin.png
wyjście do PShella:
http://img839.imageshack.us/img839/5869/cygwinoutps.png
Wywołałem przykładową pomoc (man) do grepa i przegląd był w Less, rozumiem że Less włącza się automatycznie?
Dla zainteresowanych LEss można również spotkać jako dodatek (moduł) dla PowerShella z kompletem cmdletów – PSCX (PowerShell Community Extensions):
http://pscx.codeplex.com/
http://img801.imageshack.us/img801/8305/shellless.png
Tak, ale to tylko alias, kopia prawdziwego terminala przy którym cmd.exe i wszelkie nakładki na niego są zwykłymi interpreterami poleceń. Programowanie w PowerShellu a programowanie w bashu to zupełnie inna bajka – nieporównywalnie większe możliwości, dlatego wolę Cygwina i pełną emulację środowiska Linuksowego niż CMD + kilka poleceń ściągniętych żywcem z Linuksa. Sam fakt „kto od kogo kopiuje” jest już dosyć znaczący. ;]
Hehe;) To prawda co piszesz z tym kopiowaniem. Nie wiem co miał Microsoft do końca na celu, może również to że można łatwiej czy szybciej będzie poruszać się po powłoce PShella znając już Basha, przyciągnąć Userów linuxa, Linux miał zawsze konsole, a Windows gdzieś od 2006 roku, no prócz wmic, ale wmic to inna bajka, zresztą PS tak samo ma dostęp do wmi. Co muszę przyznać że PowerShell to jednak potężne narzędzie ma dostęp praktycznie do wszystkich klas, obiektów .NET Framework.
Znowu nie lilka poleceń :D :P Ma ich 438
(Get-Command).Count
Szczerze przyznam się że wcześniej nie miałem okazji blisko przyjrzeć się CygWinowi i uszedł mi po czasie uwadze. Dużo uwagi poświęciłem PShellowi. Teraz chętnie potestuję Twoją propozycję bo lubie używać dobrych rzeczy i też jest to dla mnie formą rozrywki. No, ale o PowerShellu pisałem dla porównania, nie żeby celowo zmieniać temat bo wciąż dyskusja toczy się o Cygwinie :)
Wiesz, jeśli MS miałby dobre rozwiązanie, to też napisałbym o nim, nie jestem „fanboyem” Linuksa i spraw związanych z nim, ale po prostu narzędzia, których dostarcza, są na zupełnie innym poziomie, niż te od Microsoftu, który daje co najwyżej namiastkę możliwości pierwszego z wymienionych rozwiązań. Mówisz, że PS posiada ponad 400 poleceń – w Linuksie jednym poleceniem możesz zainstalować tysiące programów dostępnych bez absolutnie żadnego przekonfigurowywania systemu. Do tego dostępność wielu rodzajów partycji, montowanie urządzeń, system uprawnień z prawdziwego zdarzenia, prostota i potęga budowy samego systemu… możnaby tak w nieskończoność. ;]
Abym mógł porównać to nie porównam bo nie znam aż tak dobrze środowiska Basha. Z cmd też możesz instalować programy: Msiexec
Oczywiście pod warunkiem że korzystają one z systemowego instalatora .msi.
Róznych instalatorów cała masa np. Inno Setup i czy ten np. posiada obsługę z cmd – nie pamiętam. Z wmic też możesz odinstalować program, oczywiście o ile został zainstalowany .msi, przykład w wmic:
wmic path Win32_SoftwareElement (aby otrzymać informacje o zainstalowanych produktach) – może to chwilę potrwać.
W PowerShell:
Get-WmiObject -Class Win32_SoftwareElement | Format-Table *
Co do systemu plików to nie dyskutuję :D
PShellu można pobierać info praw systemu plików: Get-Acl lub zmieniać prawa Set-Acl
Moge również pobierać informacje dotyczące urządzeń w systemie i wykonywać metody, jeśli są dostępne. Jest też DevCon – menadżer urządzeń z linii wiersza poleceń. Zresztą przyjmuję pozycję stojącego z boku, muszę dobrze poznać Cygwina :)
Nie poznawaj Cygwina, ale poznaj dobrze Linuksa i jego architekturę. Cygwin, pomimo swoich możliwości także jest tylko małą próbą odwzorowania faktycznych możliwości tego genialnego systemu operacyjnego. Trudno tutaj polemizować, bo to, co w Windowsie jest „jedynym słusznym” rozwiązaniem, w oprogramowaniu FLOSS może zostać rozwiązane na kilka[tu dopisz wielokrotność] sposobów. ;]
Pingback: [Windows] Obsługa terminala Cygwin poprzez PuTTY. | Tomasz Kowalczyk
Pingback: Windows, PHP, Cygwin, bash: Wykonywanie poleceń w konsoli. « Tomasz Kowalczyk
Dzięki wielkie za poradnik, jak zwykle wszystko fachowo i przyjemnie opisane.
Mam jednak pytanie – naciśnięcie bakcpace gdy kursor jest maksymalnie do lewej lub użycie TAB w celu wywyołania podpowiedzi generuje dźwięk błędu Windows – jest jakaś możliwość wyłączenia go dla Console2