Bash: wartość domyślna zmiennej

Czasem w prostych skryptach warto nadać zmiennym wartość domyślną. W moim przypadku chodzi głównie o nazwy plików konfiguracyjnych, które są ściśle określone ale też można podać opcjonalnie inne pliki. Można to zrobić na dwa sposoby, jeden to oczywiście walka z if i else ale drugi jest bardziej przyjemny.

W przypadku bardzo prostych skryptów mozna użyć zmiennej $1:

LIST_OF_SERVERS=${1:-"servers_list.txt"};

Albo bardziej rozbudowany:

LIST_OF_SERVERS=${LIST_OF_SERVERS:-"servers_list.txt"};

Drobne wyjaśnienie:
Zmienne można zapisywać w dwa sposoby: jako $ + NAZWA_ZMIENNEJ (bardzo to ogranicza wszystkie zabawy z zmienną) oraz jako $ { NAZWA_ZMIENNEJ}. W drugim przypadku możemy używać większej ilości operacji, jak tutaj podstawiania wartości domyślnej.

Linux: jak wskazać technikowy interface sieciowy

Cóż, nie zawsze nasze systemy linuksowe mamy przy sobie, czasem są one w zdalnych serwerowniach. Jak wskazać interesujący nas port sieciowy, jeżeli mamy ich kilka? Z pomocą przychodzi nam polecenie ethetool i parametr -p wskazujący interface (ostatni parametr to czas wskazywania). W lepszych serwerach (kartach sieciowych) zapali się specjalna dioda, w gorszych podświetli się dioda od ruchu sieciowego (nawet jak nie ma kabla). Przykład wywołania komendy:

ethtool -p eth0 10

Iptables – komentowanie reguł firewall-a

Tworząc reguły firewall-a często przydałoby się skomentować skąd one wzieły się. Możemy to oczywiście zrobić w własnym skrypcie ale większość dystrybucji (wszystkie?) mają skrypty startowe, gotowe rozwiązania, narzędzia wspomagające itp. Poza tym przyjemnie byłby listując reguły firewall-a widzieć ich przeznaczenie. Na szczęście niektórzy pomyśleli o tym przede mną i mamy moduł „comment”. Efekt jego urzycia jest następujący:

[root@centos ~]# iptables -L -n | grep -i httpd
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp multiport dports 80,443 /* httpd - apache2 */ 

A regułę tworzymy następująco:

iptables -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp -m multiport --dports 80,443 -m comment --comment "httpd - apache2" -j ACCEPT 

Jak widać idealnie nadaje się do łączenia z innym modułem: multiport.

Bind9 – zmiana prezentowanej wersji serwera

Jeżeli chcemy zmienić wersję prezentowaną przez Bind9 możemy w sekcji options dodać:

version "version: blablabla";

I wtedy nasz serwer zwróci następującą odpowiedz:

user@ubuntu$ dig +nostat +nocomments  +nocmd  -t txt -c chaos VERSION.BIND @127.0.0.1
;VERSION.BIND.			CH	TXT
VERSION.BIND.		0	CH	TXT	"version: blablabla"
VERSION.BIND.		0	CH	NS	VERSION.BIND.

Kadu jako multikomunikator

No i naszła chwila, gdy musiałem zainstalować multikomunikator, za dużo ludzi, którzy odeszli z firmy nie używało GG (kurcze, co za czasy by w Ruminii czy Czechach nie używanego tego doskonałego softu?). Myślałem, że bedzie z tym problem ale nie ma, nowe gg (0.9.0) potrafi ładnie współpracować z gtalkiem jak również facebook-iem. jedyną wadą dla mnie jest brak sprawdzania pisowni, może brakuje mi jakieś wtyczki a może będę musiał zainstalować inny :/

Linux: Dlaczego korzystanie z dystrybucyjnych narzędzi do aktualizacji systemów nie zawsze jest najlepsze…

W przypadku dużych środowisk, mówimy o setkach jak nie tysiącach systemów, musimy być pewni że środowiska mają taką samą konfigurację (takie same wersje pakietów). wynika to z faktu, iż nie możemy pozwolić sobie na jakiekolwiek problemy, oprogramowanie przetestowane na serwerach testowych musi być zainstalowane dokładnie w tych samych wersjach na serwerach produkcyjnych.

Gdy używamy up2date lub yum zostaną zaisntalowane ostatnie dostępne aktualizacje, czyli systemy aktualizowane ostatnio a aktualizowane 2 tygodnie temu będą się różnić.

AIX: HMC – na jakiej maszynie znajduje się lpar?

Bardzo przydatną komendą w przypadku korzystania z HMC w trybie tekstowym (tak, lubie udawać że potrafie pisać skrypty) jest lssyscfg. W przypadku przeglądania cech lpar-a pojawia się jednak problem, trzeba podać na jakiej maszynie znajduje się dany lpar :/. Jak to znależć? Wystarczą 2 proste pętle:

for MACHINE in `lssyscfg -r sys -F "name"`; do lssyscfg -r lpar -m $MACHINE -F "name" | while read LPAR; do echo "$MACHINE;$LPAR"; done; done

Powyższe polecenia pozwala stworzyć listę w formacie CSV. Prosty grep i cut pozwalają wydobyć poszukiwaną informację:

for MACHINE in `lssyscfg -r sys -F "name"`; do lssyscfg -r lpar -m $MACHINE -F "name" | while read LPAR; do echo "$MACHINE;$LPAR;"; done; done | grep "Szukany_LPAR" | cut -d ";" -f 1