Posts Tagged Linux

Automatyczne dopasowanie ilości wyświetlanych linii w poleceniach head i tail

Dwa polecenie head oraz tail pozwalają na wyświetlenie odpowiednio 10 pierwszych lub ostatnich linii podanego pliku tekstowego. Przy użyciu przełącznika -n można określić inną ilość zwracanych linii. Z reguły pracuję na terminalach, gdzie ilość która się mieści na ekranie jest sporo większa niż 10, w związku z czym wolałbym, aby polecenia te odpowiednio do tego rozmiaru się dostosowywały.

Najprościej można zrobić to przy użyciu odpowiedniego aliasu do polecenia i umieszczeniu jego definicji w pliku ~/.bashrc:

alias head='head -n $(($LINES-2))'
alias tail='tail -n $(($LINES-2))'

Uwaga

Ważne jest umieszczenie definicji poleceń w pojedynczych cudzysłowach, dzięki temu zmienna $LINES będzie interpretowana podczas każdego wykonania polecenia, a nie tylko podczas jego definicji (czyli będzie po zmianie rozmiaru terminala polecenie odpowiednio się dostosuje).

W powyżej definicji została wykorzystana zmienna $LINES, która zawiera aktualną ilość widocznych linii w terminalu. Po utworzeniu tych aliasów przy każdym wywołaniu polecenia head lub tail zostanie odpowiednio ustawiona wartość wypisywanych linii na ekranie. Wartość ta jest pomniejszana o 2, aby starczyło miejsca na znak zachęty i w zależności od jego konfiguracji można ją zwiększyć.

Źródła

Tags: , , , ,

Wyłączenie dźwięków systemowych GTK pod KDE

Pracując głównie w środowisku KDE wyłączyłem wszelkie możliwe dźwięki systemowe, niestety ustawienia te nie były respektowane przez aplikacje korzystające GTK, takie jak Firefox czy Eclipse. Ciągle w nich pobrzmiewały pikania przy przełączaniu się pomiędzy zakładkami, plikami, otwieraniu okien dialogowych.

Rozwiązanie jak się okazuje jest całkiem proste ;). Wystarczy do pliku konfiguracyjnego GTK dodać wpis wyłączający wydawanie dźwięków przez aplikacje. W moim przypadku jest jest to plik ~/.gtkrc-2.0-kde4 (podejrzewam, że w środowisku GTK może mieć nazwę bez końcówki -kde4) oraz w pliku należy wstawić to:

gtk-enable-event-sounds=0

Od tego momentu ani Firefox ani Eclipse nie wydają dźwięków.

Źródła

Tags: , , , , ,

Jak wyczyścić pamieć podręczną DNS w Linuksie

Problem jest prosty: ulega zmianie adres serwera a nasz komputer ciągle łączy się ze starym adresem. Jest to spowodowane tym, że odpowiedzi od serwera DNS są przechowywane w pamięci podręcznej (żeby nie zasypywać biednego serwera DNS ciągle pytaniami). Ponieważ każda odpowiedź z serwera DNS ma pewien czas życia, możemy poczekać aż on upłynie i ponownie zostanie wysłane pytanie, lub też spróbować coś z tym zrobić.

W zależności od konfiguracji, może zadziałać jeden ze sposobów:

  • Restart interfejsów sieciowych – jeżeli jest możliwe, może się okazać najprostszą metodą, ale nie zawsze skuteczną.
  • Używamy demona dnsmasq – demon do przechowywania w pamięci podręcznej adresów DNS. Aby wyczyścić pamięć podręcznę, należy wysłać do niego sygnał SIGHUP
    # kill -SIGHUP $(pgrep dnsmasq)
  • Używamy demona bin – można użyć aplikacji służącej do zarządzaniem tym serwerem rndc
    # rndc flush
  • Używamy demona nscd:
    # /etc/init.d/nscd restart

Tags: , , , , ,

Monitorowanie aktywności sieciowej procesu lub użytkownika

Oto prosta komenda, która pozwoli na monitorowanie, z jakimi adresami sieciowymi łączy się dana aplikacja lub też dany użytkownik:

  • monitorowanie aktywności procesu:
    lsof -r 2 -p PID -i -a
  • monitorowanie aktywności użytkownika
    lsof -r 2 -u USER -i -a

Poszczególne parametry oznaczają:

  • -p PID – numer procesu, który ma być monitorowany
  • -u USER – nazwa użytkownika, którego połączenia sieciowe mają być monitorowane, parametr może być użyte więcej niż jeden raz, może to pozwolić to wtedy na monitorowanie aktywności kilku użytkowników
  • -r 2 – tryb ciągłego odczytu, w tym przypadku co dwie sekundy zostaną wyświetlone aktualne dane
  • -i – wyświetlenie połączeń IP (pominięcie wyświetli także np. otwarte pliki), pozwala także na ograniczanie zakresu wyświetlanych opcji (np. IPv4 lub IPv6 czy jakaś pojedyncza domena)
  • -a – powoduje, że pomiędzy warunkami definiującymi co ma być wyświetlone jest stosowany spójnik logiczny AND (w przeciwnym wypadku będzie stosowany spójnik OR, czyli wyświetlenie np. informacji o podanym procesie lub wszystkie połączenie TCP)

Źródła

Tags: , , ,

Wielkość liter w nazwach tabel w MySQL

Baza danych MySQL na Linuksach jest wrażliwa na wielkość znaków w nazwach tabel. Czyli dwa takie zapytania:

1
2
3
SELECT FROM tabela;

SELECT FROM TABELA;

Może się okazać, że wykonanie jednego z nich spowoduje wyrzucenie komunikatu, mówiącego że podana tabela nie istnieje.

Co można zrobić w takiej sytuacji:

  1. Zmodyfikować aplikację, tak aby odwoływała się do tabel tak, jak są nazywane w bazie danych.
    Fajne, ale raz dużo pracy, dwa nie zawsze mamy kody źródłowe, trzy nie chcemy nikomu za to płacić.
  2. Zmodyfikować konfigurację serwera bazy danych oraz bazę danych
    Łatwiejsze niż modyfikacja kodu źródłowego, ale dotyczyć będzie wszystkich baz danych oraz aplikacji z niej korzystających.

Jak zmodyfikować konfigurację serwera aby nie było problemów z wielkością znaków w tabelach?

  1. Zmiana wielkości znaków w tabelach
    Pierwszym krokiem jest zmiana wielkości znaków nazw tabel we wszystkich bazach danych na małe litery. Pomocny może być ten skrypt, produkujący odpowiednie zapytania, które należy następnie wykonać (autor Anders Eriksson):

    SELECT CONCAT('rename table ', TABLE_NAME, ' to ' , LOWER(TABLE_NAME) , ';')
    FROM information_schema.`tables`
    WHERE table_schema = 'nazwa_bazy_danych';

    Wynik zapytania należy wykonać na bazie danych, spowoduje to zmianę nazw tabel na pisane tylko małymi znakami.

    Małe ostrzeżenie: Jeżeli w bazie danych istnieją dwie tak samo nazywające się tabele ale zapisane różną wielkością znaków, to MySQL zgłosi błąd podczas wykonywania powyższej operacji.

  2. Modyfikacja pliku konfiguracyjnego /etc/mysql/my.cnf
    Ostatnim krokiem jest odpowiednia konfiguracji bazy danych, tak aby zawsze już były używane małe litery do oznaczania tabel. Należy do pliku /etc/mysql/my.cnf, w sekcji mysqld dodać linię z parametrem lower_case_table_names

    31
    32
    [mysqld]
    lower_case_table_names=1

Od tej pory nie powinno już być problemów z różną wielkością znaków na nazwach tabel. Więcej informacji na temat tej opcji konfiguracyjnej można znaleźć na stronach MySQL.

Źródła

Tags: ,