Архів за місяць: Квітень 2011

Ping та завантаженість каналу мережі

Коли локальна мережа та підключення до інтернету поєднані через некеровані комутатори (свічі), то досить важко визначити на якому саме напрямку проблеми.

Корисна утиліта ping дає, на перший погляд, тільки приблизну оцінку того, як саме пакети йдуть мережею і який відсоток втрат. Але якщо уважно придивитися до її виводу, то можна побачити одну характерну ознаку, яка може свідчити про проблеми у пропускній здатності каналу чи мережевої карти: істотне коливання часу відповіді echo reply на запит echo request.

Поясню на прикладі:

$ ping 192.168.0.26
PING 192.168.0.26 (192.168.0.26) from 192.168.0.22 : 56(84) bytes
 of data.
64 bytes from 192.168.0.26: icmp_seq=1 ttl=64 time=0.890 ms
64 bytes from 192.168.0.26: icmp_seq=2 ttl=64 time=0.503 ms
64 bytes from 192.168.0.26: icmp_seq=3 ttl=64 time=0.485 ms
64 bytes from 192.168.0.26: icmp_seq=4 ttl=64 time=0.492 ms
64 bytes from 192.168.0.26: icmp_seq=5 ttl=64 time=0.495 ms
64 bytes from 192.168.0.26: icmp_seq=6 ttl=64 time=0.502 ms
64 bytes from 192.168.0.26: icmp_seq=7 ttl=64 time=0.476 ms
64 bytes from 192.168.0.26: icmp_seq=8 ttl=64 time=0.490 ms
64 bytes from 192.168.0.26: icmp_seq=9 ttl=64 time=0.499 ms
64 bytes from 192.168.0.26: icmp_seq=10 ttl=64 time=0.492 ms
64 bytes from 192.168.0.26: icmp_seq=11 ttl=64 time=0.496 ms
64 bytes from 192.168.0.26: icmp_seq=12 ttl=64 time=0.476 ms
64 bytes from 192.168.0.26: icmp_seq=13 ttl=64 time=0.487 ms
64 bytes from 192.168.0.26: icmp_seq=14 ttl=64 time=0.487 ms
64 bytes from 192.168.0.26: icmp_seq=15 ttl=64 time=0.480 ms
64 bytes from 192.168.0.26: icmp_seq=16 ttl=64 time=0.500 ms
64 bytes from 192.168.0.26: icmp_seq=17 ttl=64 time=0.485 ms
64 bytes from 192.168.0.26: icmp_seq=18 ttl=64 time=0.477 ms

--- 192.168.0.26 ping statistics ---
18 packets transmitted, 18 received, 0% loss, time 17017ms
rtt min/avg/max/mdev = 0.476/0.511/0.890/0.096 ms

Тут все гаразд, відхилення звичайно є, але в середньому (0.096 ms) вони не істотні. І зовсім інша картина у наступному прикладі:

$ ping 192.168.10.10
PING 192.168.10.10 (192.168.10.10) from 192.168.10.1 : 56(84) bytes
 of data.
64 bytes from 192.168.10.10: icmp_seq=1 ttl=128 time=4.41 ms
64 bytes from 192.168.10.10: icmp_seq=2 ttl=128 time=0.730 ms
64 bytes from 192.168.10.10: icmp_seq=3 ttl=128 time=0.804 ms
64 bytes from 192.168.10.10: icmp_seq=4 ttl=128 time=0.724 ms
64 bytes from 192.168.10.10: icmp_seq=5 ttl=128 time=0.740 ms
64 bytes from 192.168.10.10: icmp_seq=6 ttl=128 time=0.734 ms
64 bytes from 192.168.10.10: icmp_seq=7 ttl=128 time=3.03 ms
64 bytes from 192.168.10.10: icmp_seq=8 ttl=128 time=2.61 ms
64 bytes from 192.168.10.10: icmp_seq=9 ttl=128 time=0.730 ms
64 bytes from 192.168.10.10: icmp_seq=10 ttl=128 time=0.746 ms
64 bytes from 192.168.10.10: icmp_seq=11 ttl=128 time=0.720 ms
64 bytes from 192.168.10.10: icmp_seq=12 ttl=128 time=0.721 ms
64 bytes from 192.168.10.10: icmp_seq=13 ttl=128 time=0.911 ms
64 bytes from 192.168.10.10: icmp_seq=14 ttl=128 time=0.741 ms
64 bytes from 192.168.10.10: icmp_seq=15 ttl=128 time=0.754 ms
64 bytes from 192.168.10.10: icmp_seq=16 ttl=128 time=2.54 ms
64 bytes from 192.168.10.10: icmp_seq=17 ttl=128 time=0.731 ms
64 bytes from 192.168.10.10: icmp_seq=18 ttl=128 time=2.04 ms
64 bytes from 192.168.10.10: icmp_seq=19 ttl=128 time=0.739 ms
64 bytes from 192.168.10.10: icmp_seq=20 ttl=128 time=0.730 ms
64 bytes from 192.168.10.10: icmp_seq=21 ttl=128 time=0.728 ms

--- 192.168.10.10 ping statistics ---
21 packets transmitted, 21 received, 0% loss, time 20205ms
rtt min/avg/max/mdev = 0.720/1.268/4.419/1.011 ms

На час першого відгуку (4.41 ms) не звертаємо увагу, але я спеціально позначив аномальний час 7, 8, 16 та 18 запитів. Це саме ті моменти, коли час відповіді істотно відрізняється. В обох прикладах відсоток втрати пакетів нульовий, але у другому можна стверджувати, що мережевий канал чи пристрій істотно завантажені.

Видалення тимчасових файлів CVS

Сьогодні оновлював багато файлів в одному проекті (він під контролем CVS) і помітив, що моя робоча копія має цілу купу зайвих тимчасових файлів. Їх імена починались на “.#”. Гадаю, що це копії більш ранніх версій одного файлу, тому що я часто переглядаю старі ревізії.
Саме просте рішення – видалити робочу копію, та зробити cvs checkout, але проект великий і мені не хотілося качати все з інтернету. Тому я поступив простіше. Спочатку переглянув ці файли, щоб ненароком не витерти щось корисне:

$ find . -type f -name ".#*"

А потім всі їх видалив:

$ find . -type f -name ".#*" -exec rm {} ;

Звичайно після цього перевірив чи все гаразд з робочою копією:

$ cvs update -dP

До речі, якщо Вам з робочої копії CVS треба видалити саме інформацію про систему контролю версій (директорії CVS), то це можна зробити наступною командою:

$ find . -type d -name "CVS" -exec rm -rf {} ;

Як визначити назву моделі материнської плати в Лінукс?

Якщо маєте справу з віддаленим сервером і просто зняти кришку від системного блока не є можливим, то визначити назву материнської плати вам допоможе утиліта lshw:

# lshw -class bus
 *-core                  
 description: Motherboard
 product: P5Q
 vendor: ASUSTeK Computer INC.
 physical id: 0
 version: Rev 1.xx
 serial: MS1C8AB10300122
 slot: To Be Filled By O.E.M.
 *-usb:0
 description: USB Controller
 product: 82801JI (ICH10 Family) USB UHCI Controller #4
...

lshw дуже корисна утиліта. Без параметрів вона показує все про наявнє у Лінукс комп’ютері залізо. Щоб не розгубитись у детальному виводі lshw краще запускати так:

# lshw | less

Підсвічування синтаксису при передачі кода через e-mail, ICQ чи Skype

Якщо Вам треба показати комусь шмат коду, а ви спілкуєтесь через e-mail, ICQ чи skype, то у пригоді стане сервіс http://pastie.org/. Адже без підсвічування синтаксису в деяких мовах програмування досить важко розібратися.

Користуватись цим сервісом дуже просто. Копіюєте текст, обираєте для нього правильну мову для підсвічування синтаксису і короткий URL для передачі готов.

Наприклад, код Perl с попереднього повідомлення виглядає так:

http://pastie.org/1754095