2005.02_Sztuczki i kruczki_[TipsTriks].pdf

(184 KB) Pobierz
439130243 UNPDF
dla początkujących
Sztuczki i kruczki
Grzegorz Niewęgłowski
Niespodziewane
“zawieszanie się” terminali?
Czy czasem zauważasz, że terminal tek-
stowy (np. XTerm lub zwykły linuksowy
terminal VGA) przestaje reagować? Zupeł-
nie, jakby został zamrożony, nie przyjmuje
żadnych naciśnięć klawiszy, nie aktualizu-
je wyświetlanego tekstu, a jedynym wyj-
ściem jest wyłączenie go? Jeśli tak, to być
może przypadkiem nacisnąłeś [ Ctrl ]+[ s ].
Aby odblokować terminal, trzeba naci-
snąć [ Ctrl ]+[ q ]. Takie pomyłki przytra-
fiają mi się stosunkowo często, więc
całkiem wyłączyłem swoim termina-
lom możliwość reagowania na [ Ctrl ]+
[ s ]. Można to zrobić wywołując polecenie
stty -ixon , a jeśli dopiszesz je do plików
konfiguracyjnych swojej powłoki, np. do
~/.bashrc czy ~/.bash_profile , to unik-
niesz tego na stałe.
ją, aby wiersze tekstu były oddziela-
ne dwubajtową sekwencją <CR><LF>,
natomiast Linux zadowala się samym
<LF>. Linuksowe pliki bez konwer-
sji łatwo rozpoznać pod Windows
– wszystkie wiersze zwykle zosta-
ną sklejone w pojedynczy, długi ciąg,
a to skutecznie utrudnia czytanie
takiego tekstu.
Wiele edytorów potrafi na życze-
nie użytkownika konwertować teksty
między tymi standardami (np. w VIM-ie
można zrobić to przez :set fileformat
=unix lub :set fileformat=dos przed
zapisem pliku), ale istnieją też (jak
przy kodowaniach) dedykowane pro-
gramy do tego celu. W razie potrzeby
(choćby przy obróbce wsadowej, gdy
trzeba konwertować wiele plików,
a okazuje się, że nie ma pod ręką
gotowego narzędzia) można wykorzy-
stać SED-a :
Łatwo jest zmienić nazwę jedne-
mu plikowi. Nawet dziesięć plików
można przemianować ręcznie. Ale gdy
są ich setki, na dodatek rozproszone
po całym drzewie katalogów? Można
wtedy próbować stworzyć jakiś auto-
mat działający rekursywnie, oparty na
pętlach for..do..done . Można również
próbować połączyć find, iconv i mv ,
ale takie rozwiązanie będzie pewnie
dalekie od ideału wydajności i obsłu-
gi błędów.
Rozwiązaniem może być skrypt
convmv . Zwykle nie wchodzi on w skład
linuksowych dystrybucji, ale można go
łatwo pobrać z http://j3e.de/linux/
convmv/ . Polecenie convmv -r -i -f
utf-8 -t iso8859-2 –notest ~/katalog
spowoduje rekursywne przejście przez
~/katalog , wyszukując nazwy plików
w utf-8 i konwertując je na iso8859-2 .
Opcja -i włącza dodatkowo tryb
interaktywny, w którym użytkownik
widzi dokładnie, które pliki będzie
próbował konwertować convmv . Skrypt
jest dobrze przygotowany na różne
sytuacje, co widać w obsługiwanych
przez niego opcjach. Dzięki niemu
konwersja nazw całego drzewka
plików nie stanowi już problemu,
a na pewno jest bezpieczniejsza niż
używanie napisanych na szybko skryp-
tów opartych na iconv i mv.
Konwertowanie strony kodowej
plików tekstowych
Istnieje sporo specjalnych narzędzi słu-
żących do konwertowania tekstu między
różnymi kodowaniami. Zamiast instalo-
wać do tego celu kolejny pakiet, można
posłużyć się poleceniem iconv . To stan-
dardowa część pakietu Glibc , więc powi-
nien znajdować się na każdym współ-
czesnym systemie linuksowym. Aby
przekonwertować tekst w iso8859-2
do unikodowego utf-8 , można użyć
takiego polecenia:
# sed 's:$:\r:' -i plik_unix.txt
# sed -e 's:\r::' -i plik_unix.txt
Pierwsze polecenie zamienia końce
znaków w plik _ unix.txt na coś czytel-
nego pod Windows, a drugie zamie-
nia z powrotem końce linii na format
uniksowy (czyli powraca do stanu
wyjścia).
Konwertowanie kodowań nazw
plików
Rzadziej potrzebną funkcją jest kon-
wertowanie samych nazw plików, ale
przez to potrafi być ono dużo bardziej
kłopotliwe. Problem pojawia się przy
przestawianiu systemu z iso8859-2
na utf-8 , albo gdy używa się glo-
balnie iso8859-2, a jakaś nowomod-
na aplikacja (np. ROX-Filer ) uparcie
tworzy pliki o nazwach zakodowanych
w utf-8 ... lub w innych sytuacjach, np.
przy niedbałym kopiowaniu plików
między systemami plików, używający-
mi różnych standardów kodowania.
# iconv -f iso8859-2 -t utf-8 S
<plik_w_iso.txt >plik_w_utf.txt
Cykliczne uruchamianie
polecenia w trybie tekstowym
Przydatnym (choć często niezna-
nym) poleceniem jest watch z pakie-
tu ProcPS . Pozwala on w regularnych
odstępach czasu (np. co sekundę) uru-
chamiać jakieś polecenie. Dzięki temu
można przykładowo obserwować
stale aktualizowaną zawartość jakie-
goś pliku z /proc lub wyjście pole-
cenia ifconfig . Najprostsze zastoso-
wanie to:
Windowsowe cp1250 konwertuje się na
iso8859-2 analogicznie:
# iconv -f cp1250 -t iso8859-2 S
<plik_windows.txt >plik_iso.txt
Spis obsługiwanych kodowań można
obejrzeć przez iconv –list .
Pozostała tylko kwestia znaków
końca linii – DOS/Windows wymaga-
# watch ifconfig eth0
60
luty 2005
439130243.015.png
 
439130243.016.png 439130243.017.png 439130243.001.png 439130243.002.png 439130243.003.png 439130243.004.png 439130243.005.png 439130243.006.png
 
sztuczki i kruczki
dla początkujących
Ale to nie koniec możliwości. Można
np. spowolnić czas odświeżania do 1
minuty:
Jak odczytać temperaturę
procesora pod Linuksem?
Problem jest bardziej złożony – jak
w ogóle odczytać czujniki z płyty
głównej? Większość płyt ma wbudo-
wane stosowne czujniki monitorujące
parametry pracy – szalenie przydatne,
gdy mamy zamiar przetaktować proce-
sor lub podejrzewamy, że niestabilna
praca komputera to wina słabego wen-
tylatora lub przeciążonego zasilacza.
Nowe płyty główne często udostęp-
niają te dane jako część implementacji
ACPI, a Linux (w wersjach 2.6.x) umie je
odczytać i udostępnić przez pliki w /proc
lub /sys . Wtedy trzeba je jakoś pokazać
użytkownikowi – dobrą nakładką może
być GKrellM , który, obok zintegrowa-
nych wykresów pokazujących obciąże-
nie procesora i sieci, umie podłączyć się
pod strumień informacji z czujników tem-
peratury.
Jeśli płyta nie obsługuje ACPI lub
obsługuje tylko szczątkowo, rozwiąza-
niem może być pakiet lm_sensors – to
rozbudowany zestaw modułów jądra,
pozwalający odczytywać różne infor-
macje z płyty głównej, takie jak napię-
cia, obroty wiatraków czy temperatu-
ra. Niestety, pakiet ten może być kło-
potliwy w konfiguracji, co przy bogac-
twie chipsetów odczytujących tempe-
raturę utrudnia jego poprawne użycie.
Jeśli lm_sensors wchodzi w skład dys-
trybucji, której używasz, to dobrze
– moduły są już skompilowane, więc
wystarczy załadować ich odpowiedni
zestaw (pomocne będzie polecenie sen-
sors-detect , podpowiadające, jaka elek-
tronika została wykryta w komputerze),
a potem odczytywać dane poleceniem
sensors (lub za pomocą GkrellM , gdyż
współpracuje on również z lm_sen-
sors ). Pakiet lm_sensors jest stopniowo
integrowany w źródła jądra 2.6.x, ale
sądząc po obecnym postępie, jeszcze
długo potrwa zanim zostanie całkowi-
cie wchłonięty.
Jeśli nie mamy dojścia do goto-
wych paczek z lm_sensors , a nie
chcemy kłopotać się kompilowaniem
i instalowaniem go samodzielnie, to
możemy użyć programu xmbmon
– to proste narzędzie bez żadnych
niestandardowych zależności, które
nie wymaga instalowania modułów
jądra ani tworzenia plików konfi-
guracyjnych. Ponadto, potrafi auto-
matycznie wykryć i obsłużyć całkiem
obszerny zestaw płyt głównych i chip-
setów. W skład tego pakietu wcho-
dzą dwa polecenia: mbmon oraz
xmbmon .
Po uruchomieniu mbmon możemy
zobaczyć coś takiego:
# watch -n 60 ifconfig eth0
zlikwidować “tytuł” wyświetlany przez
watch :
Temp.= 35.0, 48.0, 0.0;
Rot.= 0, 3214,0
Vcore = 1.66, 0.10;
Volt. = 3.55, 5.05, 12.59, -12.06, -5.14
# watch -n 60 -t ifconfig eth0
a nawet włączyć bardzo wygodny tryb
oznaczania zmian ( watch będzie oznaczał
te fragmenty tekstu, które zmieniły się od
ostatniego uruchomienia):
Ten skondensowany odczyt czujni-
ków pokazuje temperaturę procesora,
tempo obrotu wiatraków oraz wysoko-
ści poszczególnych napięć na płycie.
Za pomocą opcji mbmon możemy
zmieniać format prezentowanych da-
nych, ale to kwestia gustu, więc poprze-
stanę na pokazaniu formatu domyśl-
nego.
Obserwując wzrost temperatu-
ry, spadek prędkości obrotów wiatra-
ka czy niebezpieczne obniżanie się
napięć, można zdiagnozować wiele
awarii maszyny lub przewidzieć te
dopiero nadchodzące. A zasilacz czy
wentylator lepiej jest wymieniać zanim
osiągną stadium krytyczne i pójdą
z dymem.
Niestety, xmbmon nie współpra-
cuje z GkrellM, ale dla zwolenników
graficznego interfejsu istnieje polece-
nie xmbmon , pokazujące swoje wyniki
w formie okienka z prostą grafiką.
Z omawianym tematem wiąże się
również odczytywanie temperatu-
ry dysku twardego – w końcu dyski
też się grzeją i przegrzanie może się
dla nich skończyć fatalnie. Niestety,
tutaj sprawa ma się gorzej niż z tem-
peraturą procesora, ale nie z winy
Linuksa, lecz samych producentów
sprzętu. Nadal stosunkowo niewiele
dysków ma wbudowane czujniki tem-
peratury, więc niewielu użytkowników
będzie mogło sprawdzić, jak miewa
się ich dysk. Można jednak spróbować
można – tutaj kluczowym słowem jest
SMART , czyli system autodiagnosty-
ki dysku. Temperatura jest udostęp-
niana jako część danych SMART , więc
można ją odczytać za pomocą Smart-
montools (najpierw uruchamiając
smartd , a następnie odczytując dane
dysku przez smartcl -a /dev/hda lub
smartctl -a /dev/hda|grep -i temp ,
aby nie przedzierać się przez nieistot-
ne dane).
# watch -n 60 -t -d ifconfig eth0
Większość tego (może z wyjątkiem
oznaczania zmian) dałoby się łatwo
wykonać za pomocą pętli while i pole-
ceń clear oraz sleep , ale watch jest już
prawdopodobnie zainstalowany w sys-
temie, więc dlaczego z niego nie sko-
rzystać? Obserwowanie wyniku jakie-
goś cyklicznie odświeżanego polecenia
przydaje się w najmniej spodziewanych
momentach.
Jakich bibliotek używa ten
program?
Prosta rzecz, ale często nieodzowna.
Jak sprawdzić, które biblioteki współ-
dzielone są wymagane przez dany pro-
gram? Często wystarczy uruchomić na
nim polecenie ldd , a pojawi się zesta-
wienie bibliotek, które byłyby łado-
wane przy uruchamianiu programu.
Nie uwzględnia ono niestety dodatko-
wych bibliotek czy wtyczek, które pro-
gram potem może ładować własno-
ręcznie (tego nie da się z góry przewi-
dzieć), ale w 99% przypadków wynik
ldd będzie się pokrywał z rzeczywisty-
mi rezultatami.
Taka wiedza przydaje się przy dia-
gnozowaniu problemów z ładowa-
niem bibliotek dynamicznych – ldd ,
obok listy samych bibliotek, wyświetla
ścieżki dostępu do nich (widać, gdzie
szuka bibliotek), a jeśli jakaś biblioteka
nie mogła zostać zlokalizowana, to ldd
również powiadomi o tym użytkowni-
ka w sposób bardziej czytelny niż zro-
biłby to konsolidator (ang. linker ) przy
próbie uruchamiania programu. Dzięki
ldd można również odróżnić progra-
my budowane statycznie od tych dyna-
micznie.
www.lpmagazine.org
61
 
439130243.007.png 439130243.008.png
 
439130243.009.png 439130243.010.png 439130243.011.png 439130243.012.png 439130243.013.png 439130243.014.png
Zgłoś jeśli naruszono regulamin