Różne użyteczne drobiazgi

Jaki jest mój zewnętrzny adres IP?

curl ifconfig.me

Wstępne rozpoznanie systemu

Rotacja plików mail.log

Debian przechowuje domyślnie 7 egzemplarzy starych plików /var/log/mail.*. Aby to zmienić i np. przechowywać większą liczbę starych logów, należy zmodyfikować plik /etc/cron.daily/sysklogd (zmodyfikować wartość opcji -c programu savelog) a nie pliki konfiguracyjne logrotate, jak by się mogło wydawać. Informację o tym można znaleźć w /usr/share/doc/logrotate/README.Debian.

Jak wyświetlić plik graficzny ze zdalnego hosta?

Aby wyświetlić obraz (np. display ...) lub aplikację graficzną (np. xclock) serwer SSH musi mieć włączoną opcję X11Forwarding. Ponadto po obu stronach wymagane jest xauth (xbase-clients). Potem wystarczy ssh -X user@serwer i to tyle. Nie jest nawet wymagane ustawienie zmiennej DISPLAY (dzieje się to automatycznie).

Jak pozbyć się logów iptables wyrzucanych na wszystkie terminale tty?

Można to zrobić np. poprzez zmianę poziomu logowania komunikatów przeznaczonych dla konsoli. W przypadku klogd w pliku /etc/default/klogd należy dodać opcję -c 1.

Jak zmienić domyślny edytor używany w systemie?

Poleceniem update-alternatives --config editor.

Maile w formacie HTML w mutt'cie

Choć programów do obsługi poczty elektronicznej jest zatrzęsienie, od lat używam mutt'a, pomimo, że próbowałem również innych MUA (ang. Mail User Agent). Głównie ze względu na łatwość przeszukiwania skrzynek i elegancką obsługę formatu Maildir w którym każdy e-mail jest przechowywany w osobnym pliku, co ułatwia ich ewentualne późniejsze przetwarzanie.

Niestety coraz więcej osób przysyła maile w postaci HTML, który nie jest przez mutt'a obsługiwany. Oczywiście bez problemu można skonfigurować mutt'a tak, aby wyświetlił taki e-mail np. links'em, gorzej, kiedy jednak musimy odpowiedzieć. Najprostszym sposobem na rozwiązanie tego problemu jest automatyczna konwersja HTML do tekstu. Można to zrobić na wiele sposobów, ja użyłem do tego celu vim'a, który jest moim domyślnym edytorem tekstu. Wystarczy w pliku vimrc wpisać proste (?) makro:

map <F12> ma:.,$s/^> //<Enter>`a:.,$!html2text<Enter>:.,$s/^/> /<Enter>`a

Jego użycie jest już proste. Odpowiadamy na maila, jak zwykle. Zakładam, że edytorem wywoływanym przez mutt'a jest właśnie vim. Najeżdżamy kursorem na początek kodu HTML i wciskamy klawisz F12. Reszta dzieje się już sama:

  1. kasowane są znaki "> " oznaczające cytowanie, tak, aby mogła być wykonana poprawna konwersja HTML do tekstu,
  2. wywoływany jest program html2text, który konwertuje nam kod,
  3. ponownie wstawiane są znaki cytowania.

Wyciągnięcie ścieżki audio z pliku AVI

Aby wyciągnąć ścieżkę dźwiękową z filmu wystarczy użyć mplayera:

mplayer input-file.avi -vc null -vo null -ao pcm:fast

Potem konwersja do mp3:

lame audiodump.wav

I po robocie.

Obrócenie filmu o 90 stopni

mencoder -vf rotate=1 -o output-file.avi -oac copy -ovc lavc input-file.mpg

Użycie mplayera do odtworzenia katalogu zgranego z DVD

mplayer dvdnav:// -mouse-movements -dvd-device ./

PostgreSQL 8.1.15 i Enterprise Architect

PostgreSQL może służyć jako repozytorium dla Enterprise Architect. W przypadku wersji 8.0.4 wszystko zadziałało w zasadzie "z marszu", natomiast dla 8.1.15 pojawił się przy próbie połączenia błąd: client encoding mismatch. Problem rozwiązuje się po wykonaniu następującej kwerendy dla bazy EA:

alter user enterprise set client_encoding to SQL_ASCII;

Więcej na ten temat można przeczytać m.in. tutaj.

Wyświetlenie listy użytkowników samby

Aby wyświetlić listę użytkowników samby w sytuacji gdy passdb backend = tdbsam (w przeciwnym razie wystarczy wyświetlenie /etc/samba/smbpasswd), należy skorzystać z komendy: pdbedit -L.

GRUB doesn't detect Windows partition?

Just use os-prober.

How to use SSH as a tunnel?

Let's say we have for example Host A (e.g. our work notebook), Host B (which is allowed to connect to Host C) and Host C (on which runs HTTP server). We want to see web page which is hosted on Host C in web browser on Host A. All we have is SSH connection from A to B and from B to C.

Solution: on Host B just run: ssh -f -N -L hostB.ip.address:8080:localhost:80 username@hostC.ip.address

And that's all. But if web service on Host C can not be accessed by IP address then some more steps are to be done:

Dostęp do komputera za NAT'em via SSH

Mamy w pracy lapka A, którego nie chce nam się nosić do domu, a chcemy móc na nim zdalnie pracować z domu. Mamy do dyspozycji serwer B, który sobie gdzieś-tam stoi 24/7, więc może tunelować. Z lapka A tworzymy przed wyjściem z pracy tunel: ssh -R 10022:localhost:22 user@serwerB. A kiedy chcemy zacząć pracę, z serwera B po prostu łączymy się do lapka: ssh -p 10022 localhost

How to interrupt safely fsck?

"According to Murphy'ss law, the fsck check that happens once every n boots always happens at the worst time. By default, using CTRL-C to abort it causes fsck to exit with an error, and the filesystem to be remounted read-only. It's easy to change that in /etc/e2fsck.conf:"

[options]
allow_cancellation = true

Test przepustowości łącza

Do testów przepustowości pomiędzy dwoma hostami dobrze nadaje się program iperf. Na jednym hoście uruchamiamy serwer (iperf -s -u), na drugim klienta (np. iperf -c adres.ip.serwera -u -b 10M). Parametr -u oznacza użycie protokołu UDP - wynik jest bardziej wiarygodny niż dla TCP, ponieważ nie ma dodatkowych narzutów związanych z kontrolą. Parametr -b jest potrzebny, inaczej test będzie wykonywany z domyślną przepustowością 1Mbps. Uwaga: kolejność opcji ma znaczenie - najpierw należy wybrać klient/serwer, a potem określić inne opcje.

Prosty routing

Mamy dwa komputery A i B, z których tylko A (poprzez interfejs WiFi: wlan0) ma wyjście do Internetu. Chcemy, aby B mógł korzystać z Internetu za pośrednictwem A. Nic prostszego:

A: iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
A: echo 1 > /proc/sys/net/ipv4/ip_forward
B: route add default gw adres.IP.komputera.A

Proper display of HTML file from subversion repository

If you want to have your .html file to be properly displayed in your web browser, just use: svn propset svn:mime-type "text/html" file_name.html.

Simple arithmetic in VIM

Find integer and add 1 to it. :.,$s/\d\+/\=submatch(0)+1/c

A tool to get the lines in one file that are not in another

Answer is here

diff -U $(wc -l < fileA) fileA fileB | grep '^-' | sed 's/^-//g' > fileC