Archive for the ‘linux’ Category

scp resume

Wednesday, May 18th, 2011

scp е много удобен инструмент за прехвърляне на файлове между различни машини. Може да работи както за ъплоуд, така за даунлоуд, та даже и директно да мести от втора на трета машина. Използва демона на SSH и не се налага да стартирам допълнителни услуги.

Примерна употреба:

scp -P220 192.168.2.1:/extra/ivanatora/snimki/2011_05_18_plovdiv/ .

Взима рекурсивно папката 2011_05_18_plovdiv/ от домашното ми PC и я копира на текущата машина (лаптопа). Освен това -P опцията ще рече че SSH слуша на порт, различен от дефаултния. Ако искам да направя трансфер в обратната посока само трябва да разменя source и destination.

Та така днес рекох да си олекотя малко харда на лаптопа и да прехвърля всички файлове на таймлапсовете от предните постове на домашното PC. Това са доста файлове - 20 хиляди е добро предположение. Общия размер е към 2-3GB, което не е много и в случая това което натоварва са операциите за отваряне и затваряне на файлове. А да - и имах неблагоразумието да пусна всичко това да върви през един wifi рутер, който забива като се погледне накриво. Всичко си вървя към един-два часа, когато трансфера спря и scp умря с "Connection closed: broken pipe".
Опцията беше да го пусна на ново, да чакам час-два и пак да забие. scp няма resume. Освен това не копира файловете в някакъв ред, а хаотично. Не мога да видя до къде е стигнало (коя папка от петте, кой пореден файл) и да продължа ръчно от там.

Тук на помощ идва rsync. Какво е и как се ползва - който иска да чете man-страницата.

Това което ми свърши работа - довърши копирането без да презаписва вече качените файлове:

rsync -r --partial --progress timelapse_* --rsh='ssh -p220' 192.168.2.1:/extra/ivanatora/snimki/

Аргументите:

  • -r - рекурсивно пълзи по директорията-източниик
  • --partial - запазва файловете, които вече ги има в целта
  • --progress - показва колко файла остават и до къде е стигнало
  • timelapse_* - папките-източник; * се експандва от шела до timelapse_11_04_2011, timelapse_sky_09_04_2011 и т.н.
  • --rsh='ssh -p220' - използва алтернативна команда за пренасяне на файловете. Може да е SSH, но има и други варианти
  • 192.168.2.1:/extra/ivanatora/snimki/ - директорията-цел

Автоматично прекратяване на интерактивна sudo сесия

Thursday, April 28th, 2011

Сценарият е следния: Ubuntu машина, стандартен потребител (ivanatora), който има нужда да свърши няколко неща изискващи root достъп. Вместо потребителя да пише sudo преди всяка команда, той си съкращава писането с:

$ sudo -i
[sudo] password for ivanatora:
#

И минава в интерактивен root-ски логин. От този логин той излиза с `exit` или CTRL+D. До тук всичко е ясно.

Проблем: root логинът се захвърля на някоя конзола измежду всички останали и се забравя там. На повечето системи, които съм виждал този логин би останал отворен вечно, докато не се затвори ръчно.

Решение: следното се добавя в /root/.profile

if [ $SUDO_USER ]; then
        export TMOUT=1200
fi

Обяснение: Опцията "-i" симулира първоначален логин, като се изпълняват и съответните файлове ~/.profile, ~/.bash_profile и т.н. на новия акаунт. TMOUT е променлива на средата, която казва колко секунди след последния вход ще се прекрати процеса. Ако се сложи TMOUT=0 автоматичното прекратяване ще се забрани. SUDO_USER е променлива на средата показваща кой е потребителят изпълнил sudo. На някои системи тази променлива не съществува и там трябва да се ползва "who am i" (с интервалите).

Thinkpad и индикация за батерия

Monday, April 18th, 2011

Взех си евтина китайска батерия от eBay, която държи 3 пъти повече от оригиналната. Естествено електрониката въобще не се разбира с лаптопа и единствената информация, която може да бъде извлечена е процента на заряд. Брой презареждания, температури, напрежение на елементите, тоци - абсурд. Такъв абсурд, че даже и светодиодът за батерия не работи - има само едно - зелено състояние. По принцип с оригиналната батерия като падне под 30% зеленото се сменя с оранжево, а като падне под 20% оранжеовото почва да мига. Ама те и процентите на новата са едни проценти... на 20% гасне лаптопа.
Липсата на някаква осезаема индикация за батерията ми бърка в здравето. За това си написах едно просто скриптче, което взима процента на батерията и при ниски или критични нива примигва осветителния светодиод и издава звук. Скриптът е Thinkpad специфичен и няма да работи на други машини.

  1.  
  2. #!/usr/bin/php
  3. <?php
  4. $sLedFile = "/sys/devices/platform/thinkpad_acpi/leds/tpacpi::thinklight/brightness";
  5. $sBatteryFile = "/sys/devices/platform/smapi/BAT0/remaining_percent";
  6. $sStateFile = "/sys/devices/platform/smapi/BAT0/state";
  7.  
  8. $iPercentLow = 40;
  9. $iPercentCritical = 30;
  10.  
  11. $iNumBlinksCritical = 5;
  12. $iNumBlinksLow = 3;
  13.  
  14. /* **************************************** */
  15. $sState = trim(file_get_contents($sStateFile));
  16. if ($sState != 'discharging'){
  17.     exit(0);
  18. }
  19.  
  20. $iPercentCurrent = trim(file_get_contents($sBatteryFile));
  21. if ($iPercentCurrent < $iPercentCritical){
  22.     for ($i = 0; $i < $iNumBlinksCritical; $i++){
  23.         blink_critical($sLedFile);
  24.     }
  25. }
  26. else if ($iPercentCurrent < $iPercentLow){
  27.     for ($i = 0; $i < $iNumBlinksLow; $i++){
  28.         blink_low($sLedFile);
  29.     }
  30. }
  31.  
  32. function blink_critical($sLedFile){
  33.     `echo 1 > $sLedFile`;
  34.     usleep(100000);
  35.     `echo 0 > $sLedFile`;
  36.     //usleep(100000);
  37.     `beep -f 2000 -l 100`;
  38. }
  39.  
  40. function blink_low($sLedFile){
  41.     `echo 1 > $sLedFile`;
  42.     usleep(1000000);
  43.     `echo 0 > $sLedFile`;
  44.     usleep(1000000);
  45. }
  46.  
  47. ?>
  48.  

Това го слагам на crontab да се изпълнява всяка минута и проблемът е решен:

*/1 * * * * /root/bin/check_battery.php

Готин Bash хак за изтриване на път

Tuesday, November 24th, 2009

Забелязъл съм нещо интересно, което може да се прави в csh, но работи по друг начин в bash.
Да речем че съм написал някакъв дълъг път:

/mnt/storage/mp3/Manowar

... и се сетя че всъщност не съм имал предвид "Manowar" като последна директория, а "rammstein". Единия начин да оправя това е като набия 7 backspace-а и да изтрия всяка буква поотделно, докато стигна до наклонената черта. Ами ако се сетя че "rammstein" не е в "mp3", а в "/mnt/storage/Music"? Тогава чаткането по backspace става още повече.
В csh това става елементарно с CTRL-W - комбинацията изтрива всичко от командния ред до предната наклонена черта.
Така

/mnt/storage/mp3/Manowar

става

/mnt/storage/mp3/

с един CTRL-W. Следващия CTRL-W ще махне "mp3/", следващия ще махне "storage/" и т.н.
Гугъл върна един резултат на това търсене - тук в Shallow Thoughts.
На кракто решението е следното:
Това отива в ~/.inputrc:

set bind-tty-special-chars Off

А това отива в ~/.bash_profile:

bind '\C-w:backward-kill-word'

Шела се рестартира (logout -> login) и трябва да работи.
Обяснение на дълго защо се случва това - в горния линк.

Thingies

Monday, May 25th, 2009

В магазините за обувки нямат мъжки сандали. Нито в Стара Загора нито в Пловдив. Най-близкото което имат са или джапанки или отвсякъде затворени обувки с дупки. Половината магазини за обувки нямат нищо мъжко. Разочарован съм.

Заради манифестациите по повод 24-ти май, центъра на Стара Загора беше тотално блокиран в продължение на няколко часа. Маршрути, които обикновено отнемат 5 минути пешеходно време трябваше да бъдат заобикаляни през пет улици в шеста. Навсякъде беше пълно със злобни пенсионери, които гледаха на кръв всичко що е младо и им пречи да гледат манифестацията. В същия повод се сетих как едни мамчета си говореха във влака зад мен:
- Моята дъщеря не искаше да ходи на манифестация! Ааа.. "Щеш-нещеш - ще ходиш!" и тя отиде де. Ама виж ги младите - никакви ценности нямат.
Според мен всякакви манифестации и паради трябва да бъдат забранявани, освен ако не показват танкове.

Наложи ми се да мога да пращам и получавам поща от моя компютър. Преди ползвах Sendmail, но то внезапно се скапа преди няколко дни. При всеки опит за изпращане се получаваше грешката:
SYSERR(root): dev.ivanatora.info. config error: mail loops back to me (MX problem?)
MX записа на домейна си стоеше както и преди и никой не го е пипал. Правех някои промени в /etc/hosts свързани с името на локалната машина, но след като ги върнах обратно Sendmail продължи да прави цигании. Издразних се и свалих да пробвам Postfix. И там имаше проблеми - не изпращаше пощата, а й слагаше статус:
status=deferred (alias database unavailable)
За получаване пък да не говорим. Освен това даваше грешка:
warning: lookup owner-postmaster, NIS domain ivanatora.info, map mail.aliases: internal yp server or client error
Сетих се да изключа NIS функционалностите (и без това не ползвам NIS) и всичко тръгна по мед и масло. Пощата се изпраща и приема.

Имам проблем с руските спамери в блога. Akismet на ден хваща поне по 10 спам поста. Веднъж на няколко дни се случва някой да минава акисмета и да иска одобряване.