Czy aliasy na desktopie mogą być przydatne?
W dzisiejszym wpisie chciałem się z Wami podzielić moimi skromnymi doświadczeniami w używaniu aliasów. Nie raz odwiedzałem różne strony, gdzie ktoś dzielił się swoim zestawem, ale w większości przypadków były to zestawy poleceń o przeznaczeniu typowo administracyjnym. Mnie bardziej interesują pomysły na ułatwienie codziennej pracy na desktopie, osobie która korzysta również z konsoli. Mam nadzieję, że uda mi się tym wpisem rozpocząć dyskusję, w której podzielicie się swoimi zestawami aliasów, dzięki czemu można by zbudować w miarę uniwersalny zestaw startowy.
Co to są aliasy?
Być może wpis ten będzie czytany również przez osoby mniej obyte z Linuxem, dlatego słowem wstępu chciałem krótko wyjaśnić czym są aliasy i dlaczego mogą być w ogóle przydatne.
Wikipedia tłumaczy ogólnie alias jako ksywkę / pseudonim, który służy do identyfikacji osoby lub obiektu. W systemach unixowych alias jest poleceniem, które pozwala nam zastąpić bardziej złożone polecenie jakimś krótkim, łatwym do zapamiętania hasłem.
SKŁADNIA:
alias nazwa='złożone polecenie'
Przykład:
Chcemy sprawdzić nasz adres ip w sieci lokalnej. Niestety za każdym razem, gdy tego potrzebujemy, zapominamy polecenia i googlujemy. A gdyby tak po prostu wpisać własne polecenie, np. ip? Nic prostszego.
alias ip='ifconfig'
W tym przypadku ciapki (pojedynczy cudzysłów) są zbędne bo nasze polecenie składa się tylko z jednego wyrazu, ale jak ich zawsze używam, żeby wyrobić sobie taki nawyk, zwłaszcza że przeważnie aliasy tworzymy do poleceń złożonych. Prawdopodobnie większość informacji wyświetloną przez to polecenie nas kompletnie nie interesuje. Chcieliśmy tylko sprawdzić nasz adres IP, ewentualnie maskę. Możemy więc nieco zmodyfikować to polecenie:
alias ip='ifconfig | grep inet addr'
Takie polecenie jest tym bardziej trudne do zapamiętania, a na pewno trudniej się wpisuje niż samo "ip". Pipe "|" przekierowuje wyniki polecenia ifconfig do polecenia grep, które filtruje treść po zadanym haśle. W ten oto sposób otrzymujemy tylko te linijki, w których pojawia się adres IP. W moim przypadku są to dwie linijki bo poza interfejsem mojej karty sieciowej mam jeszcze włączony Loopback. W Mincie oczywiście można sobie kliknąć na ikonkę połączenia sieciowego i tam wybrać Informacje, by uzyskać to samo w okienku graficznym. Większość rzeczy można obecnie zrobić w interfejsie graficznym i nie używać konsoli. W dużej mierze to kwestia osobistych preferencji stylu pracy z komputerem. Z własnego doświadczenia wiem, że gdy użytkownik oswoi się nieco z konsolą, to sięga do niej zdecydowanie częściej, bo jest szybka, konkretna i programowalna. Okienka z informacją o połączeniu sieciowym nie możemy sobie przefiltrować:)
Skoro mamy już sposób na proste uzyskanie adresu ip, to moglibyśmy się pokusić o alias do polecenia zwracającego nas zewnętrzny adres ip. Znów, można włączyć przeglądarkę, wejść na stronę typu myip.com/ i odczytać z niej nasz adres. Ja osobiście wolę wpisać sobie w konsoli myip. Naciskam enter i mam.
alias myip='wget -qO- http://wtfismyip.com/text'
Jest wiele sposobów by uzsykać zewnętrzne ip w consoli. Ja korzystam ze strony, która zwraca adres ip w postaci tekstowej. Tekst ten pobieram programem wget. Parametr -q ustawia wget w tryb cichy (nie wyświetla dodatkowych komunikatów), natomiast -O pozwala zapisać pobraną treść do pliku, natomiast "‑" wpisany jako nazwa pliku sprawia, że treść nie jest zapisywana do pliku na dysku, tylko wypluwana na standardowe wyjście, czyli na konsolę.
Jak zapisać aliasy?
Polecenie alias sprawia, że nasze aliasy działają w konsoli tak długo, jak uruchomiony jest komputer. Być może na serwerach jest to wystarczająco długo, ale w domu komputer wyłączamy nawet kilka razy dziennie. Czy da się zatem zapisać jakoś aliasy na stałe, aby były dostępne w konsoli od razu po uruchomieniu? Nie wiem jak to dokładnie wygląda na innych dystrybucjach (pracuję na Mincie), ale sądzę, że na Ubuntopodobnych jest tak samo jak u mnie. Ja zapisuję sobie wszystkie moje aliasy w pliku .bashrc, który znajduje się w katalogu użytkownika. UWAGA: jest to plik ukryty i aby go zobaczyć trzeba w menadżerze plików włączyć wyświetlanie plików ukrytych (CTRL+H). Można też (będąc w katalogu domowym) w konsoli wpisać: [code]gedit .bashrc [/code] Domyślnie plik ten jest pusty. Ponieważ używam Minta na kilku komputerach, zapisuję sobie ten plik w Dropboxie, a następnie tworzę w katalogu domowy link symboliczny do lokalizacji w Dropboxie. Dzięki temu, jeśli na jednym z komputerów dopiszę sobie jakiś nowy alias, mam do niego dostęp także na pozostałych komputerach. Wszędzie mam takie samo środowisko pracy. Ogólna postać polecenia tworzące link symboliczny:
ln -s źródło link
Aby więc utworzyć link do pliku .bashrc umieszczonego w Dropboxie wpisujemy:
ln -s ~/Dropbox/.bashrc .bashrc
gdzie "~" zastępuje nam ścieżkę do katalogu domowego użytkownika.
Dalsze przykłady
Skoro wspomniałem już o dopisywaniu nowych aliasów do mojego zestawu, to wspomnę również o tym, że z mojego doświadczenia wynika, iż wygodnie jest mieć alias na szybkie dopisywanie aliasów. :) Tak, tak, z czasem można się od tego uzależnić i tworzyć aliasy na wszystko, co nam tylko przyjdzie do głowy. Ja używam takiego:
alias brc='gedit ~/.bashrc'
Co ciekawe, polecenie wywołuje do edycji edytorem gedit plik w katalogu użytkownika, a nie ten w Dropboxie. Na tym właśnie polega piękno linków symbolicznych. Można powiedzieć, że link symboliczny jest traktowany jakby był samym celem, do którego prowadzi.
Może piszę to wszystko dosyć łopatologicznie, ale zależy mi na tym, by dotrzeć także do osób, które nie miały z tym styczności i mogły sobie samodzielnie sprawdzić działanie tego, o czym pisze.
Analogicznie mam także alias na wyświetlanie zawartości mojego zbiorów aliasów w konsoli:
alias catbrc='cat ~/.bashrc'
Niby proste polecenie, ale tyle w nim znaków specjalnych, że się niewygodnie pisze.
Teraz kilka aliasów na instalację programów:
alias inst='sudo apt-get install'
alias ppa='sudo apt-add-repository'
alias update='sudo apt-get update'
alias usun='sudo apt-get purge'
Włączanie/wyłączanie komputera:
alias uspij='sudo pm-suspend'
alias wylacz='sudo shutdown -P now'
alias hib='sudo pm-hibernate'
alias restart='sudo shutdown -r now'
Restart X'ów, na wypadek, gdyby skrót CTRL+ALT+BACKSPACE nie zadziałał.
alias restartX='sudo service lightdm restart'
Kolejnym obszarem, w którym używam wielu aliasów to montowanie zasobów sieciowych. Najpierw montowanie zasobów przez NFS. Owszem, mógłbym montowanie zrealizować w jakimś fstabie, ale ponieważ korzystam z tych zasobów od czasu do czasu, to wolę mieć kontrolę i podłączać je tylko wtedy, gdy ich potrzebuję.
alias doc='sudo mount -t nfs host:/folder1/doc ~/NFS/doc/'
Jako host wpisujemy adres ip serwera, na którym znajdują się zasoby udostępnione NFS'em. Skoro montujemy zasób tylko na określony czas, to warto sobie zrobić alias na odmontowanie:
alias udoc='sudo umount ~/NFS/doc/'
Teraz montowanie zasobów z sieci lokalnej udostępnionych sambą:
alias doc='sudo mount -t cifs -o username="użytkownik",password="hasło" //IP/folder1/doc ~/samba/doc'
W miejsce IP wpisujemy adres IP serwera samby. Jeśli z jakiegoś powodu uważacie, że przechowywanie haseł w pliku tekstowym jest niebezpieczne, to można pominąć parametr hasła. Przy montowaniu wyskoczy w konsoli monit o podanie hasła samby, po monicie o wpisanie hasła super użytkownika. Ja lubię mieć hasło zapamiętane.
Teraz dwa aliasy na uruchomienie zdalnych pulpitów. Najpierw VNCViewer:
alias ciocia='~/MojeProgramy/./VNC-Viewer-5.2.0-Linux-x86 ip-cioci'
Uwaga: Nazwę pliku wykonywalnego należy dostosować w zależności od używanej wersji VNC‑Viewera! Z tego co czytałem, nie ma możliwości przekazania z konsoli hasła do połączenia VNC‑Viewera. Prawdopodobnie względy bezpieczeństwa o tym decydują.
Używam też Remminy, ze względu na jej możliwość obsługi RDP, także w wersji z Windowsa 8. Remmina obsługuje także protokół NX. Aby wywołać połączenie Remminy z konsoli, trzeba mieć wcześniej zapisane parametry połączenia do pliku. Taką konfigurację zapisujemy z poziomu programu. Następnie w aliasie odwołujemy się do tego pliku:
alias wujek='remmina -c ~/.remmina/1411908101121.remmina'
Mam jeszcze parę innych aliasów, których używam zdecydowanie rzadziej. Pozwolę sobie ich na razie nie zdradzać, żeby nie zaśmiecać wpisu niepotrzebnie, a jeśli wywiąże się dyskusja, to w zależności od jej kierunku, być może wtedy je dopiszę.
Przeciążanie poleceń aliasami
Na koniec chciałem wspomnieć o małej sztuczce związanej z aliasami. Polega ona na zastąpieniu istniejącej komendy własnym aliasem o tym samym brzmieniu. Przykładowo często korzystamy z polecenia ls, ale nie podoba nam się forma wyświetlanych wyników. Preferujemy ls -la. Możemy utworzyć następujący alias:
alias ls='ls -la'
To spowoduje, że ilekroć wpiszemy ls, to będzie działał nasz alias o ej nazwie, a nie oryginalne polecenie ls. Nie jest ono jednak utracone, a jedynie "schowane". Aby wywowłać oryginalne polecenie ls bez kasowania aliasu wpisujemy:
\ls
Jest jednak jedna różnica między oryginalnym poleceniem ls a \ls. Oryginalne polecenie ls wyświetla nam wyniki kolorowane, a \ls jest pozbawione kolorów. Warto jednak znać taki zabieg, bo być może wolimy sobie przeciążyć kilka domyślnych poleceń. Przykładowo możemy ustawić by wszystkie linki były tworzone jako linki symboliczne.