Ten blog nie jest już rozwijany. Wraz ze wszystkimi artykułami zostały przeniesiony pod adres wmroczkowski.pl

Czy chcesz przejść pod nowy adres?

środa, 22 października 2008

Resetowanie zapomnianego hasła w MySQL

Czasami zdarza się nam zapomnieć hasła roota w mysql. Mi to się zdarzyło przynajmniej kilka razy na serwerach na których rzadko pracowałem. Na szczęście możliwe jest zresetowania hasła do mysql z poziomu systemowego użytkownika root.

Najpierw zatrzymujemy mysql:

/etc/init.d/mysql stop

Następnie:

mysqld –skip-grant-tables –u root
mysql -u root
mysql> use mysql;
mysql> UPDATE user SET Password = PASSWORD(’newpass’) WHERE User = ‘root’;
mysql> FLUSH PRIVILEGES;

I gotowe. Teraz nasze hasło do mysql to ’newpass’.

piątek, 10 października 2008

Wprowadzenie do wyrażeń regularnych w PHP - metaznaki

Jeżeli często używamy linuxa to na pewno wyrażenia regularne nie są nam obce. Również wiele języków webowych ma dobrze rozwiniętą obsługę tych wyrażeń. Dzisiaj przyjrzymy się wykorzystywaniu wyrażeń regularnych (ang. regular expressions, w skrócie regex lub regexp) w PHP.
Wyrażenia regularne są potężną techniką opisywania wzorców tekstu występujących w plikach tekstowych - wiele programów wykorzystuje tą funkcjonalność. Programy do wyszukiwania takie jak 'grep' opierają się właśnie na tych wyrażeniach. Zasadniczo wyrażenia regularne ukształtowały się w świecie linuxa. Powstało wiele języków skryptowych, takich jak perl, ruby, PHP, JS, etc., które bazują na wyrażeniach regularnych. Wyrażenia regularne są również intensywnie wykorzystywane w module mod_rewrite w Apache'u, który opisałem we wcześniejszych postach. Coraz mniej jest języków, które nie posiadają choćby kilku funkcji wykorzystujących wyrażenia regularne, tak więc bardzo istotną sprawą jest opanowanie tego wielofunkcyjnego narzędzia.
Nie przestrasz się zewnętrznym wyglądem ułożonych wyrażeń regularnych; mnóstwo znaków specjalnych sprawia wrażenia trudnego do opanowania, ale jak już poznasz podstaw to uświadomisz sobie, że łatwiej już chyba nie może być. Przykładowo, za pomocą wzorca [a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\.[a-zA-Z]{2,4} można sprawdzić poprawność wpisanego w formularz adresu e-mail. Poznając podstawy wyrażeń regularnych powyższy zapis stanie się dla Ciebie jasny jak słońce.

Metaznaki:
Wyrażenia regularne mogą składać się ze zwykłych znaków lub z metaznaków. Zwykłe znaki to np. zapis "RegEx is easy", natomiast metaznaki oprócz tego, że wyglądają jak zwykłe znaki, mają dodatkowo pewne zastosowanie merytoryczne. W wyrażeniach regularnych używając zwykłego znaku np. "P", znajdujemy w tekście "P". Jeżeli użyjemy metaznaku, możemy dopasować o wiele więcej szukanych fragmentów.
Wyróżniamy następujące metaznaki:
. + ? * ^ $ [ ( ) \ | {
Słownie te znaki to: kropka, plus, znak zapytania, asterisk, karetka, dolar, nawias kwadratowy otwierający, nawiasy zwykłe, backslash, kreska pionowa (alternatywa), klamra otwierająca.

. - kropka pasuje do dowolnego znaku, a więc wyrażenie r.d pasuje do wyrażeń rod, rad, rid, r$d, r6d, itd.

+ - plus to jedno lub więcej wystąpień wyrażenia poprzedzającego, np. Do+M pasuje do DoM, DooM, DoooM, DooooM, itd.

? - znak zapytania oznacza zero lub jedno wystąpienie poprzedzajacego wyrażenia, a więc np. Do?M pasuje do DM lub DoM.

* - asteriks to zero lub więcej wystąpień wyrażenia poprzedzającego, np. Do*M pasuje do DM, DoM, DooM, DoooM, DooooM, itd.

^ - karetka użyta na początku wyrażenia (przed nawiasami) odpowiada za początek linii, natomiast użyta po nawiasie kwadratowym oznacza zaprzeczenie, np. [^0-9] oznacza wszystkie znaki z wyjątkiem liczb od 0 do 9.

$ - dolar oznacza koniec danego napisu lub po prostu koniec linii

[ ] - nawiasy kwadratowe służą do dopasowywania liter z podanego zbioru, np. [dgj] pasuje do jednej z liter, d, g lub j. [a-z] oznacza wszystkie małe litery od a do z, jednak taki zakres nie obejmuje polskich znaków. Aby określić wszystkie znaki polskiego alfabetu musimy użyć wyrażenia [a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ]

( ) - tzw. atom - umożliwia zastosowanie alternatywy | (or) oraz na dopasowywanie powtarzających się fragmentów ciągów znaków. Przykładowo, do wyrażenia /^(abc)+$/ pasują ciągi "abc", "abcabc", "abcabcabc" itd.

\ - backslash pozwala nam na używanie specjalnych znaków we wzorcu, tak aby były również wyszukiwane a nie traktowane jako metaznak. Tzn. aby znaleźć plik.txt musimy użyć zapisu plik\.txt. Wyrażenie plik.txt potraktowałoby nam kropkę jako metaznak i znalazłoby również wyrażenia takie jak plikitxt, plik1txt, etc.

| - pionowa kreska (ang. pipeline)oznacza alternatywę. Inaczej mówiąc jest to operator logiczny 'OR'. Jeżeli np. napiszemy a|b|c oznacza to, że w danym wyrażeniu może wystąpić a lub b lub c.


Najłatwiej jest zrozumieć działanie metaznaków na przykładzie. Załóżmy, że chcemy w pliku tekstowym odnaleźć wszelkie wpisy o treści *.php to nasze wyrażenie regularne będzie miało postać \*\.php a nie *.php, ponieważ * i . to metaznaki i aby były traktowane jako normalny znak musimy użyć backslasha. Z angielskiego nazywa się to escape character, jednak trzeba pamiętać aby używać go tylko przed mataznakami, czyli przed '(', ')', '[', ']', '{', '}', '\', '*', '|', '^', '$', '?' przed zwykłymi znakami powoduje coś zupełnie innego, a mianowicie predefiniowane klasy znakowe. Ale o tym w kolejnym poście.

piątek, 3 października 2008

Strutkura katalogów systemu Linux

Sposób w jaki Linux rozmieszcza swoje pliku na dysku jest kompletnie różny od tego stosowanego w Windowsie. Każdy z użytkowników Linuxa zapewne pamięta kiedy pierwszy raz wyświetlił zawartość swojej partycji linuksowej - jak wielkie było było zdziwienie a zarazem przerażenie na myśl o pracy z takim "drzewem" a raczej "lasem" plików. Obecnie użytkownicy którzy przechodzą na Linuxa mają już pewien zarys tego co mogą tam zobaczyć, jednak dobra znajomość katalogów systemu jest kluczem do opanowania Linuxa w stopniu średnio-przeciętnego użytkowania.
Ten artykuł jest wstępem do poznania struktury plików - zostanie tu opisany pierwszy poziom katalogów Linuksa. Cały artykuł ma na celu ułatwić początkowym użytkownikom tego systemu wybór odpowiednich katalogów do instalacji konkretnych programów.
Poniżej znajduję się przykładowa struktura katalogów dla RedHat Linux.



/
Katalog główny oznaczony jest w Linuxie symbolem "/" (slash) - określonym jest również słowem "root", które oznacza z angielskiego korzeń. Wszystkie katalogi wywodzą się od tego jednego. To w tym miejscu jest zainstalowana cała struktura plików. Przenosząc to na język Windowsa - "/" jest tym sam co "c:" w Windowsie. Linux nie uruchomi się bez zawartości "/". Usunięcie stąd plików jest tym samym co usunięcie zawartości folderu "c:/Windows" w Windowsie.

/bin
Folder /bin zawiera ważne programy systemowe, czyli pliki binarne (wykonywalne). Od tego właśnie wywodzi się nazwa - "bin" jest skrótem od "binary". To tutaj znajdują się najczęściej używane programy, takie jak: cat, less, grep, more, cp, mkdir, date, dmesg, etc...

/boot
Jak sama nazwa wskazuje, ten katalog jest odpowiedzialny za uruchomienie całego systemu oraz same jądro Linuxa. Gdyby nie jądro nie byłoby Linuxa. To ono odpowiada za wszystkie uruchomione procesy w systemie. Drugim krytycznym dla systemu programem znajdującym w katalogu boot jest bootloader, czyli program odpowiadający za zlokalizowane jądra i uruchomienie go.

/dev
"Dev" jest skrótem słowa "device", czyli urządzenie. W Linuxie każde urządzenie jest plikiem. Oznacza to, że dla każdego podłączonego urządzenia w systemie zostaje utworzony odpowiadający mu plik, za pomocą którego system komunikuje się z urządzeniem. Jeżeli system wykrywa dysk kojarzy go z plikiem np."/dev/sda". W tym przypadku /dev jest katalogiem a /sda plikiem odpowiadającym za dysk. Tutaj koniecznie trzeba powiedzieć o pliku /dev/null, który jest jakby czarną dziurą - śmietnikiem na bity, które do niego wpadają. Wykorzystujemy je gdy np. chcemy przekierować dane ze standardowego wyjścia (ekranu) do miejsca w którym dane nie będą ani zapisane ani wyświetlane, czyli do /dev/null. Jeżeli np. chcemy sformatować cały dysk twardy możemy to zrobić komendą: 'dd if=/dev/null of=/dev/sda'. Skopiuje to zawartość urządzenia /dev/null, czyli naszą próżnię, na dysk twardy - cała zawartość dysku zostanie skasowana.

/etc
Jeżeli lubisz konfigurować programy, ustawiać system pod własne wymagania i grzebać w ustawieniach to w tym katalogu będziesz spędzał najwięcej czasu. W /etc system przechowuje pliki konfiguracyjne wszystkich programów. Oczywiście programy pod Linuxem domyślnie są już dosyć rozsądnie skonfigurowane ale jeżeli je jeszcze bardziej zoptymalizować to wystarczy, że otworzysz do edycji odpowiedni tekstowy plik konfiguracyjny i edytujesz odpowiednie linie. Przeważnie pliki konfiguracyjne są opatrzone sensownymi komentarzami i gotowymi komendami, które wystarczy odhashować i gotowe. Wystarczy podstawowa znajomość języka angielskiego.

/lib
W tym katalogu znajdziemy skompilowane biblioteki niezbędne do uruchomienia systemu. Większość plików znajdujących się w tym katalogu ma rozszerzenie '.so' co oznacza 'shared object'. Te pliki są tak zbudowane aby mogły być wykorzystane przez programu różnego rodzaju. Dzięki temu nie musimy ściągać różnych programów po 300 mb, ale np. programy, które zajmują 50 mb i korzystają z tych samych plików '.so' co inne programy. W Windowsie takie pliki mają nazwę 'Dynamically Linked Libraries' powszechnie znano jako DLL. Jako przeciętny użytkownik prawdopodobnie nie będziesz musiał korzystać z plików, które znajdują się w katalogu /lib. Cały proces kojarzenia plików odbywa się automatycznie. Czasami jednak możesz spotkać się z błędem 'missing shared object'. Oznacza to, że program który instalujesz lub uruchamiasz wymaga obecności innego programu.

/lost+found
W tym katalogu znajdziesz pliki odnalezione podczas wykonywania testów dysku. Do czego to się może przydać? Jeżeli użytkownik nie zamknie systemu prawidłowo lub system dozna nagłego braku zasilania to w trakcie następnego wczytywania się systemu zostanie uruchomiony program skanujący, który sprawdzi czy wszystko jest w porządku i w razie potrzeby spróbuje naprawić błędy. Wszelkie pliki uszkodzone i naprawione są umieszcza w katalogu /lost+found aby użytkownik mógł je przejrzeć i podjąć decyzję co z nimi dalej zrobić.

/mnt
/media

Te dwa katalogi znajdujące się w głównym katalogu sytemu odpowiedzialne są za montowanie dysków, cd-romów, pendrive'ów oraz wszelkich urządzeń przenoszących dane. W zależności od dystrybucji Linuxa w katalogu /media montowane są nośniki wymienne jak pendrive, dyskietka, karty pamięci, czy napędy cdrom. Natomiast w /mnt montowane są dyski twarde. Wyjątkiem tutaj jest Ubuntu, gdzie dyski montowane są w katalogu /media. We wcześniejszych dystrybucjach Linuxa konieczne było montowanie nośników ręcznie, tzn. poprzez odpowiednie komendy. Obecnie, w większości dystrybucji nośniki montowane są automatycznie po podłączeniu. Oczywiście można takie ustawienia zmienić i montować ręcznie. To samo dotyczy miejsca montowania - /mnt i /media to tylko domyślna konfiguracja dla montowanych nośników. Tak naprawdę możesz zamontować dowolne urządzenie w jakimkolwiek katalogu na dysku, jeżeli oczywiście masz do niego dostęp. Jednak montowanie urządzeń w tych katalog znacznie ułatwia nam późniejsze poruszanie się po nich. Jeśli chodzi o katalog /media to jest on nową rzeczą w Linuxie. Kiedyś używało się tylko katalogu /mnt.

/opt
Tutaj możemy instalować oprogramowanie dodatkowe. W Linuxie, mówiąc o oprogramowaniu dodatkowym, mam na myśli takie, które nie jest dostępne w repezytorium i jest instalowane z paczek. Aby nie oddzielać programów instalowanych ręcznie od tych systemowych poprzez np.zmianę nazwy katalogów możemy je po prostu zainstalować w /opt. Różne dystrybucje różnie się ustosunkowują do tego katalogu. Jeżeli domyślnie instalujesz Apache' jego pliki konfiguracyjne znajdują się w /etc. Jeżeli zainstalujesz Apache'a w pakiecie LAMP, wszystkie pliki instalują się w katalogu /opt. Więc często w nowych dystrybucjach ten katalog jest po prostu wykorzystywany do przechowywania oprogramowania trzeciego.

/proc
W tym katalogu znajdują się wszelkie informacje odnośnie uruchomionych na twoim systemie procesów jak również o stanie komputera. Np. plik '/proc/cpuinfo' przechowuje dane na temat twojego procesora: prędkość, marka, taktowanie, etc. Znajdziesz tam również informację związane z systemem plików, ilością wolnej pamięci, miejsca, itd.

/sys
Od wersji jądra w wersji 2.6 znajdziemy tam interfejs zmiany parametrów jądra. Obecnie katalog /sys przejmuje funkcjonalność katalogu /proc.

/tmp
W tym katalogu, jak sama nazwa wskazuje, zapisywane są pliki tymczasowe. Znajdziesz tutaj pliki, które system musiał pobrać np. podczas surfowania po internecie lub instalacji jakiegoś programu. Większość plików z tego katalogu po zakończeniu danej operacji jest usuwana automatycznie, jednak warto co jakiś czas tam zajrzeć aby sprawdzić czy system nie generuje nam jakiegoś zbędnego śmietnika plików.

/usr
Gdybyś teraz użył komendy 'ls /usr/bin' prawdopodobnie byś zobaczył bardzo długą listę różnego rodzaju programu. Pewnie trochę to Cię dziwi bo przecież wszystkie pliki binarne miały być trzymane w katalogu /bin, więc skąd tego tutaj tyle? Dzieje się tak ponieważ Linux rozdziela wszystkie programy na te które są niezbędne do uruchomienia systemu oraz na te, które są używane "dla wygody" przez użytkownika, np. przeglądarki, odtwarzacze muzyki i filmów, programy graficzne, itd, itd... Porównując Linuxa z Windowsem możemy powiedzieć, że /usr jest dla Linuxa tym czym "c:/Program Files" dla Windowsa.

/var
Jeżeli na twoim systemie działają różnego rodzaju serwery pocztowe, www, ftp, ssh itp. to będziesz bardzo często korzystał z katalogu /var, ponieważ znajdują się tutaj logi systemowe. Cały katalog działa podobnie do /tmp, ponieważ pliki przechowywane tutaj są tymczasowe ale nie w tym samym sensie co te w /tmp. Pliki znajdujące się w katalogu /var nie są krytyczne dla uruchomienia żadnego programu, natomiast pomagają użytkownikowi diagnozować co dzieje się w tle jego systemu. Z jaką częstotliwością te pliki będą się kasowały oraz ile miejsca zajmowały zależy od nas. W katalogu /var/mail znajduje się nasza poczta; wszystkie wysłane i odebrane wiadomości, więc nie oszczędzajmy miejsca na ten katalog.

Mam nadzieję, że ten artykuł chociaż trochę przybliżył początkującym użytkownikom jak również tym, którzy już od jakiegoś czasu pracują na Linuxie, rozeznanie się w strukturze katalogów Linuxa. Oczywiście Linux zawiera jeszcze mnóstwo miejsc o których nie pisałem a które mogą być kluczem w rozwiązaniu pewnym problemów użytkownika lub administratora systemu. Jeżeli masz jakiś konkretny problem związany z tym postem pisz do mnie lub w komentarzu. Postaram się Ci pomóc!