Category Archives: свободен софтуер

Clone drive old fashion way

от Йордан Радунчев
лиценз CC BY

Понякога се налага да направим копие на твърд диск, карта памет, флашка - с архивна цел или защото се налага да извършим върху него някаква потенциално разрушителна операция, като например опит за възстановяване на изтрита информация. Примерно ако някой е опитал да я унижощи с отвертка... В подобна ситуация първото и най-важно нещо е да се направи точно копие на твърдия диск, абсолютно точно до последния бит, за да може да се възстанови в първоначално състояние, ако се наложи. Това е елементарна операция с dd, както всеки по-отворен Линукс потребител би ви обяснил:

dd if=/dev/sdb of=./sdb.img bs=64k

Тази команда ще прехвърли бит по бит, на блокове от по 64к, съдържанието на устройството /dev/sdb във файла sdb.img в текущата директория. Съответно преди да започнете тази операция, трябва да сте сигурни, че имате достатъчно свободно място в текущата директория, защото ако твърдия диск, който копирате е 100Gb, съответно и файла sdb.img ще бъде с големина 100Gb, тъй като представлява точно до последния бит копие на оригинала - включително празното и неизползвано пространство върху него.

Ако целта ви е да възстановите изтрита информация от оригиналния диск - това е начина да си направите архивно копие преди да започнете, защото така ще съхраните и онези части от диска, които са маркирани като свободни, но върху които вероятно са останали "изтритите" данни.

Ако обаче искате просто да си направите архивно копие на твърдия диск, картата с памет от фотоапарата или флашката - тогава най-добре да се оттървете от неизползваното място върху тях, за да можете да компресирате копието с gzip, като по този начин то ще стане значително по-малко от оригинала и няма да ви заема толкова много място. За да е ефективно компресирането, трябва да подготвите празното място на оригинала - най-добре като запишете нули навсякъде върху него - така ще улесните gzip при компресирането и ще го направите много по-ефективен.

dd if=/dev/zero of=/media/usb/dummyfile

С помощта на dd започвате да копирате нули от специалното устройство /dev/zero на Линукс, което има безкраен запас от нули, във файла dummyfile на оригиналния диск/карта/флашка монитран в /media/usb - dd ще "налива" нули в dummyfile, докато там не остане повече празно място и тогава ще "умре". Сега просто изтрийте dummyfile с rm. Това упражнение ни гарантира, че цялото неизползвано пространство съдържа 0 - и образно казано gzip всичките тези нули, ще ги компресира до една единствена 0, спестявайки ни много място. Следващата стъпка е:

dd if=/dev/sdb | gzip -c  > ./sdb.img.gz

Подаваме прочетеното от dd към gzip, който го компресира и излива във файл sdb.img.gz - компресирано точно копие на оригиналния диск.

След като имаме копие от диска, идва момента в който искаме да го възстановим. Просто използваме dd наобратно :)

dd if=./sdb.img of=/dev/sdb

...ако копието ни не е компресирано. Ако е компресирано:

gunzip -c ./sdb.img.gz | dd of=/dev/sdb

...и сме възстановили оригиналното съдържание на sdb...

Ако сте забелязали навсякъде използваме sdb, а не sdb1 - това е важно, защото искаме копие на целия диск, а не само на един дял от него. Ако използвате sdb1 ще направите копие на първия дял от диска, без информацията от boot сектора на устройството и без таблицата на дяловете му. Имайте го на ум.

TermFu (За Android) – справочник за дълги команди

от Владимир Колев
лиценз CC BY-NC-ND
Терминал

ic_launcherАко често използвате терминала или пък харесвате да комбинирате доста от нещата, които вършите в .sh скриптове предполагам, че това приложение от BulTux може да ви бъде доста полезно, особено ако като мен имате проблем със запомнянето на километричните низове от команди с параметри за извършване на задачи от рода на:

- конвертиране на изображения
- записване на екрана във видео формат
- споделяне на екрана чрез SSH
и т.н.

За приложението

TermFu е приложение за Android телефони (Android 2.2+), което ви позволява да преглеждате сайта commandlinefu.com за termfu_dialogразлични команди – от записване на екрана чрез ffmpeg или mencoder, през ssh и различни трикове за споделяне на екрана до следене на системата. На практика сайта предлага различни едно-редови команди, с които можете доста да улесните живота си. От друга страна запомнянето на тези дълги команди е определено непосилно (поне за мен е така), а посещаването на сайта през телефона е меко казано неудобно. Така се роди и идеята за TermFu – едно малко приложение, което по всяко време да ми е под ръка.

Какво предлага като функционалност

- Табът “Последни” (Latest) – предлага на потребителя последните команди, публикувани за последната седмица – избор на команда отваря диалог, в който се показва цялата команда, описание какво прави и позволява на потребителя да копира командата в буфера за споделяне (clipboard). Звездичката, която е на всеки ред, позволява да добавите командата в “Предпочитани”.

- Табът Популярни (Popular) – не се различава по функционалност от Latest, освен че предлага най-популярните команди за цялото време. Това са командите, които с времето са събрали най-много гласове.

termfu_search- Табът “Търсене” (Search) – както предполагате – позволява търсене в commandlinefu.com за въведена от вас ключова дума. Резултатите функционират както последните два таба.

- Предпочитани (Favorites) – показва записаните в базата данни на приложението команди от пторебителя (Записването става, чрез избор на звездата от предните три таба). Тук функционалността е малко по-различна. Контрола става чрез задържане на определен елемент, което активира меню с опции – “Преглед” и “Изтриване”, което предполагам е ясно какво правят.

 

 

Изтегляне

Приложението можете да изтеглите от Google Play Store:

Android app on Google Play

Да си наинстаграмим снимките…

от Йордан Радунчев
лиценз CC BY

Имате стари снимки, искате да изглеждат като онези страхотно модерни снимки, които всички правят с Instagram? Дообре... Imagemagick знае как.

Оригиналната снимка:

Оригиналната снимка...

Ghotam:

Ghotam

convert zkayra.jpg -set option:distort:viewport "%[fx:min(w,h)]x%[fx:min(w,h)]+%[fx:max((w-h)/2,0)]+%[fx:max((h-w)/2,0)]" -filter point -distort SRT 0 +repage -modulate 120,10,100 -fill '#222b6d' -colorize 20 -gamma 0.5 -contrast -contrast ghotam.jpg

Toaster:

Toaster

convert zkayra.jpg -set option:distort:viewport "%[fx:min(w,h)]x%[fx:min(w,h)]+%[fx:max((w-h)/2,0)]+%[fx:max((h-w)/2,0)]" -filter point -distort SRT 0 +repage -fill black -opaque '#330000' -modulate 150,80,100 -gamma 1.2 -contrast -contrast -gaussian-blur 0x1 toaster.jpg

Nashville:

Nashville

convert zkayra.jpg -set option:distort:viewport "%[fx:min(w,h)]x%[fx:min(w,h)]+%[fx:max((w-h)/2,0)]+%[fx:max((h-w)/2,0)]" -filter point -distort SRT 0 +repage -fill black -opaque '#222b6d' -fill white -opaque '#f7daae'-contrast -modulate 100,150,100 -auto-gamma nashville.jpg

Lomo:

Lomo

convert zkayra.jpg -set option:distort:viewport "%[fx:min(w,h)]x%[fx:min(w,h)]+%[fx:max((w-h)/2,0)]+%[fx:max((h-w)/2,0)]" -filter point -distort SRT 0 +repage -channel R -level 33% -channel G -level 33% lomo.jpg

Kelvin:

Kelvin

convert zkayra.jpg -set option:distort:viewport "%[fx:min(w,h)]x%[fx:min(w,h)]+%[fx:max((w-h)/2,0)]+%[fx:max((h-w)/2,0)]" -filter point -distort SRT 0 +repage -auto-gamma -modulate 120,50,100 -fill 'rgba(255,153,0,0.5)' kelvin.jpg

Толкова, за да придобиете представа на какво е способен Imagemagick... Прегледайте документацията, за да се запознаете с пълните му възможности, ако искате да шашнете Света с наистина откачени снимки.

Пропуснах OpenFest

от Ясен Праматаров
лиценз CC BY

Не успях да ида на OpenFest. Имах намерение, но вкъщи сме с леко болничка мама и всички – дечица и тати – се опитваме да помагаме. Не ми липсва пропускането на фестивала – от няколко години вече съм леко встрани от тия неща, по едно време и престанах да ходя. Радвам се, че хората, които продължиха и продължават да го организират, не губят ентусиазма. Аз не съм бил никога от централното ядро там, но покрай Сдружението за свободен софтуер имах досег и донякъде, доколкото можех, съм помагал косвено. Първият OpenFest беше точно на рождения ми ден и отидохме заедно с Краси, после цяла вечер бяхме с хората от екипа, с Krzysztof Zaraska от Prelude IDS и Harald Welte. Беше 2003-та. Сега погледнах – на сайта на OpenFest най-старото споменаване в историята на фестивала е 2006-та. Може би има нещо общо със смяната на хората, с промяната на екипа. Може би има личен момент, както имаше и личен момент в разтурянето на FSA-BG. Жалко, но все тая. Имам много добри приятелства и познанства от тия години и си ги ценя – макар и повечето хора да ги виждам “веднъж на високосна”.

Прекарах топлите пладнета на съботата и неделята в парка с децата. Игри, езерца, катерички, жълъди, въртележки и пързалки и разговори със Светко защо някои деца се държат лошо и как трябва сам да се справя, защото не е честно аз да се намесвам. Хубави дни. Краси е по-добре. Трябва да платим наема днес – като мине това, ще се успокоя, надявам се. Бях изнервен вчера и взех да се карам на децата – поуката е, че валидолът не е лошо нещо и митовете за опасности са пълна глупост и чист HealthScare.

Пропуснах OpenFest

от Ясен Праматаров
лиценз CC BY

Не успях да ида на OpenFest. Имах намерение, но вкъщи сме с леко болничка мама и всички – дечица и тати – се опитваме да помагаме. Не ми липсва пропускането на фестивала – от няколко години вече съм леко встрани от тия неща, по едно време и престанах да ходя. Радвам се, че хората, които продължиха и продължават да го организират, не губят ентусиазма. Аз не съм бил никога от централното ядро там, но покрай Сдружението за свободен софтуер имах досег и донякъде, доколкото можех, съм помагал косвено. Първият OpenFest беше точно на рождения ми ден и отидохме заедно с Краси, после цяла вечер бяхме с хората от екипа, с Krzysztof Zaraska от Prelude IDS и Harald Welte. Беше 2003-та. Сега погледнах – на сайта на OpenFest най-старото споменаване в историята на фестивала е 2006-та. Може би има нещо общо със смяната на хората, с промяната на екипа. Може би има личен момент, както имаше и личен момент в разтурянето на FSA-BG. Жалко, но все тая. Имам много добри приятелства и познанства от тия години и си ги ценя – макар и повечето хора да ги виждам “веднъж на високосна”.

Прекарах топлите пладнета на съботата и неделята в парка с децата. Игри, езерца, катерички, жълъди, въртележки и пързалки и разговори със Светко защо някои деца се държат лошо и как трябва сам да се справя, защото не е честно аз да се намесвам. Хубави дни. Краси е по-добре. Трябва да платим наема днес – като мине това, ще се успокоя, надявам се. Бях изнервен вчера и взех да се карам на децата – поуката е, че валидолът не е лошо нещо и митовете за опасности са пълна глупост и чист HealthScare.

Poor man’s backup options

от Йордан Радунчев
лиценз CC BY

Всички ние редовно си правим архив и резервни копия от важната информация по лаптопите и компютрите, които използваме, и съхраняваме тези архиви на друго място, различно от лаптопите и компютрите, които използваме... нали така? Ха-ха.

Това все още е най-стария виц сред IT хората - датира още от появата на първия персонален компютър.

Обаче не е толкова весело, когато се прецака твърдия диск и няма от къде да възстановите данните си. Тогава ви идва на ум, че можеше и да копирате оная папка със сорс кода в dropbox например... и сега да си я върнете обратно... Само ако не беше толкова досадно да се правят архиви и да се ъплоудват на някъде. Ами всъщност не е толкова досадно. С bash скриптове и cron, всяка досадна задачка я прехвърляте на Линукс и той с удоволствие ще я върши редовно вместо вас.

Добрият човек Andrea Fabrizi е написал скрипт, който позволява да работите с dropbox от командния ред. Отбележете си някъде да го почерпите бира, когато го срещнете. Свалете си dropbox-uploader.sh и го настройте за работа с вашия dropbox, следвайки указанията на Андреа. С негова помощ можете да копирате архивите си на редовни интервали там с помощта на скрипт и cron.

Естествено, аз не ви съветвам да качвате данните си в Интернет незащитени и да се доверявате на сигурността на dropbox. В никакъв случай. Нямате никаква реална представа колко защитен е сайта им и дали вече не е хакнат. За това силно ви препоръчвам да криптирате всяка информация, която качвате там. Скрипта, който ви предлагам, освен че създава архиви от директориите, които сте му посочили, също така криптира тези архиви с публичен ключ, преди да ги качи в dropbox, така че само вие да можете да ги декриптирате в последствие с частния си ключ. Дори някой да ги източи от там, няма да може да ги разгледа.

Като първа стъпка трябва да си генерирате двойка частен-публичен ключове специално за целите на архивирането. Не ви съветвам да използвате ключове, които използвате вече за други цели. Необходимо е да имате OpenSSL в системата си, ако нямате, инсталирайте си го. С него генерираме ключовете:

openssl req -x509 -nodes -days 100000 -newkey rsa:2048 -keyout prk.pem -out puk.pem -subj '/'

Частният ключ prk.pem запазете някъде на сигурно място, чиято сигурност вие контролирате. Този ключ отключва архивите. Публичният ключ puk.pem ще се използва за заключването им, него може да запазите където ви е удобно, той може само да криптира.

Сега сте готови да използвате моя скрипт. Свалете си го от тук: dbackup. В началото на скрипта има няколко променливи, които трябва да настроите, за да стане използваем.

  • bcpdir=("${HOME}/mp3/" "${HOME}/scripts/") - тук задавате директориите, които искате да се архивират. ${HOME} е променлива на обкръжението, която отговаря на вашата домашна директория. Можете да зададете колкото пожелаете директории тук, като записвате пътя до тях в кавички и ги разделяте една от друга с интервал. В примера скрипта ще архивира две директории от домашната ми директория - mp3 и scripts.

  • pubkey=("${HOME}/dropbox_backup/pukey.pem") - тук се посочва публичния ключ, който ще се използва за криптиране на архивите. Задайте пълния път на файла.

  • dboxup=("${HOME}/dropboxbackup/dropboxuploader.sh") - това е пълния път до скрипта на Andrea. С него ще се ъплоудват архивите в dropbox. Необходимо е преди да изпълнявате моя скрипт, да сте настроили неговия за работа с вашия dropbox.

  • dboxdr="/backups" - това е папката в dropbox в която искате да се запишат архивите ви.

След като сте настроили тези променливи, можете да си създадете запис в cron, който да изпълнява скрипта на определен от вас интервал. Честито.

В този backup скрипт липсват много неща, които биха го направили истински бекъп скрипт. Например той прави само пълни архиви на посочените директории, не предлага възможност за частични архиви само на файловете, променени след последния пълен архив. Именно поради това е poor man's вариант на бекъп, а не истински бекъп. Но по-добре такъв, от колкото никакъв.

Едно нещо, което липсва и което вие можете сами да добавите - след успешно качване на архивите в dropbox, да изтрива архивите от локалната машина, за да не заемат излишно място.

Скрипта вече си работи в /tmp директорията и почиства след себе си. Освен това разделя архивите на части от по 512M. Ако искате по-малки или по-големи парчета - задайте размера в променливата bckpch в мегабайти. За всеки файл се изчислява контролна сума (md5).

Отворените данни в страната на Линукс

от Йордан Радунчев
лиценз CC BY

Тези дни от Държавния архив направиха данните за всички загинали в Балканската война достъпни на специален Интернет сайт: http://archives.bg/balkanwars/. Наистина не по най-удобния за използване и обработка начин, но не им се сърдя - те също се учат в движение, достатъчно е, че са тръгнали в правилната посока. Боян Юруков, който вероятно влага най-много усилия в каузата "Отворени данни" у нас, е изтеглил всичката информация от сайта и след допълнителна обработка, я е публикувал на този адрес: http://opendata.yurukov.net/balkanwars/, като CSV файл с табулация за разделител на полетата. Целта на този текст е да ви покаже как може да използвате основни Линукс инструменти за обработка на подобни данни.

И така, имаме CSV файл. Тоест - обикновен текстов файл съдържащ данни, структурирани по определен начин. Всеки ред от този файл представлява запис за един човек. Всеки запис се състои от няколко полета, разделени с табулация едно от друго. Първият ред-запис във файла представлява всъщност списък с етикетите на отделните полета в реда по който са подредени във всеки ред-запис. Ако сте изтеглили файла с данните от сайта на Боян, можете да го отворите и да погледнете - петото поле на всеки ред-запис съдържа фамилията на човека, за когото е записа. Дванадесетото - датата на смъртта му. И така нататък. Така са организирани данните.

В Линукс, когато стане дума за текстов файл, записи по редове, данни по полета - веднага се сещаме за awk. С негова и на приятелите му помощ, можем да извлечем информация от данните. Приятелите на awk са sort и uniq. И така - може би ви интересува в битките при кои населени места, българската армия е дала най-много жертви? Във файла информацията за мястото на смъртта се съдържа в поле 13 от всеки запис. С awk можем да извадим само него от всички данни. Със sort ще сортираме резултата от работата на awk. Инструмента uniq, извикан по подходящ начин, ще преброи колко пъти се среща всяко име в подредения от sort списък. Резултата от uniq ще дадем отново на sort, като този път го помолим да го сортира в обратен ред - от най-голямата стойност към най-малката. И тъй като ни интересуват само най-големите стойности, ще извикаме head и ще поискаме от него само първите десет стойности от списъка, изготвен от sort. Следите ли мисълта ми? Ето я цялата операция в един команден ред:

awk 'BEGIN{FS="\t"}{print $13}' zaginali.csv | sort | uniq -c | sort -nr | head -n 10 
Красиво :) Резултата от изпълнението изглежда така:
    2659 
    1684 Чаталджа
   1502 Одрин
   1168 Чорлу
   1156 София
   1044 Бунар Хисар
    817 с. Тарфа
    801 Лозенград
    739 с. Калфа кьой
    718 Хисар

За 2659 от загиналите липсва информация къде са загинали. 1156 са починали в София - вероятно става дума за ранени и болни, евакуирани и починали в болници.

Малко по-подробен поглед върху awk частта... Това което е оградено с '' представлява "програмата", която искаме awk да изпълни върху всеки ред от файла, който му даваме. Ето съставните й части и коя какво прави:

  • BEGIN{FS="\t"} - указва на awk, че за разделител между полетата в записа използваме табулация. Налага се, защото по подразбирне awk използва интервал за разделител. BEGIN казва на awk да изпълни инструкциите в следващия блок {} преди да започне да обработва файла.

  • {print $13} - инструктираме awk да отпечата 13 поле от всеки ред-запис във файла zaginali.csv.

Това е почти най-простия начин да се използва awk. Толкова прост, че чак е обиден за него и вероятно тук бихме могли да използваме cut вместо awk.

Със същия команден ред, като го насочим към друго поле от данните, можем да извадим различна информация. Например за това кой войнишки набор е дал най-много жертви в Балканската война - набора на загиналите е посочен в седмото поле..

awk 'BEGIN{FS="\t"}{print $7}' zaginali.csv | sort | uniq -c | sort -nr | head -n 10

    14337 
    2985 1906
    2326 1908
    2300 1907
    2297 1905
    1886 1904
    1807 1909
    1640 1911
    1615 1910
    1512 1912

За 14337 души липсва информация от кой набор са. От останалите, за които има такава - най-голям брой жертви е дал набор 1906 - 2985 човека. До тук видяхме, че с прости и достъпни във всяка Линукс дистрибуция инструменти, можем да извличаме информация от данните, задавайки прости въпроси. А ако искаме да зададем по-сложен въпрос, който да ни даде по-специфична информация? Например - кой войнишки набор е дал най-много жертви в боевете при Одрин? На практика комбинираме двата прости въпроса, които използвахме в примерите до сега. Истината е, че в примерите до сега не сме използвали и 5% от мощта на awk. За него подобни задачи са тривиални.

awk 'BEGIN{FS="\t"}$13~/Одрин/{print $7}' zaginali.csv | sort | uniq -c | sort -nr | head -n 10

    476 
     77 1906
     66 1905
     62 1894
     59 1912
     59 1895
     57 1908
     56 1904
     50 1910
     45 1893

Въобще не го затруднихме - поискахме полетата с набора, но само на записите в които полето за място на смъртта съдържа Одрин. И после sort, uniq и head свършиха своята част от задачата. Най-много жертви при Одрин е дал набор 1906... А къде е дал най-много жертви въпросният героичен набор 1906? Да попитаме:

awk 'BEGIN{FS="\t"}$7~/1906/{print $13}' zaginali.csv | sort | uniq -c | sort -nr | head -n 10

    118 
    101 Чаталджа
     91 Чорлу
     78 с. Тарфа
     75 Бунар Хисар
     71 Одрин
     61 Щип
     52 Хисар
     48 с. Криволак
     46 Лозенград

В боевете при Чаталджа...

Тъй като в последните два примера усложнихме въпроса, инструкциите към awk също леко се усложниха.

  • BEGIN{FS="\t"} - това вече го знаем. Уведомяваме awk, че разделителя в нашия файл е табулация.

  • $7~/1906/{print $13} - тук отново искаме от awk да отпечата поле №13, но под условие! Условието е поле №7 да съдържа 1906 - ако там има друга, различна година, не го искаме. За това пред инструкцията за отпечатване на поле №13 сме сложили условието $7~/1906/... Сега awk ще погледне какво има в поле 7 и ако там стои 1906, ще продължи с изпълнението на инструкциите в блока {}, ако няма 1906 - ще мине направо на следващия ред-запис, без да отпечата нищо.

Виждате, че Linux има всичко необходимо, за да отговори на въпросите ви, стига вие да можете да ги формулирате правилно и да му дадете база от данни, от която да извлече отговора. А ако впрегнете и gnuplot - ще се сдобиете и с красиви графики, които да визуализират информацията ви. Но за това друг път.

Комфорт в терминала

от Владимир Колев
лиценз CC BY-NC-ND
Терминал

Със следната статия ще ви покажа как да направите ползването на терминала малко по-удобно и разбира се приятно. Все още много потребители намират ползвато на текстовата работна среда за неудобно и стряскащо, но моето лично мнение е, че тя може да бъде доста приятна и примамлива, също както едно време беше модерно на графичната среда да се активират какви ли не ефекти, което спомогна за популяризирането на някои десктоп Линукс базирани дистрибуции.

Инстументите, които ще покажа тука са следните: zsh и tmux (други мисля, че вече сме си споменавали в по-стари статии като cmux, irssi, alpine).

Zsh (Z Shell)

Е алтернатива за bash (bourne-again schell), но много по-конфигурируема и също така разпространена. С какво обаче е по-различен и за предпочитане пред инсталирания по подразбиране в много дистрибуции bash:

  1. Функционира изключително близко до bash, което позволява на потребителите да не се налага да се учат на ново как да го ползват
  2. Предлага корекция на правописа. Предполагам ви се е случвало в бързината да напишете команда и да изпуснете/заместите буква. Zsh се опитва да разпознае командата и ви предлага да я замести преди да се опита да изпълни сбърканата от вас команда.
  3. Изключително конфигурируем (както, между другото, вече споменах).
  4. Много добро и коректно допълване с клавиша [Tab]
  5. Споделена история между сесии – ако сте стартирали няколко zsh-сесии едновременно, то те ще си споделят историята
  6. Вграден пейджър – това можете да го разбирате като вградена less функционалност. Така можете да напишете <README вместо cat README | less
  7. Красив и разширяем – освен по-подредения синтаксис, към zsh можете да иснталирате пакет oh-my-zsh, с който инсталирането и конфигурирането на обвивката става изключително бързо и лесно. Смяната на контролната лента е просто като да смените темата на десктоп средата (не говоря за Gnome3, където това е чиста висша акробатика).

Повечето дистрибуции идват с преинсталиран bash, и ако искате да го смените ще трябва да извършите няколко машинации, които далеч не са нещо особено сложно:
- Инсталирате пакет zsh: В ArchLinux това би било pacman -S zsh
- Смяна на шела по подразбиране за настоящия потребител – в почти всички дистрибуции това става с командата chsh [change shell]:

chsh -s /bin/zsh

- Добавяне на oh-my-zsh: Това може да стане по два начина:
Автоматизирано с curl:

curl -L https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh | sh

Ръчно с извличане на git хранилището:

git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh

Тук обаче ще се наложи ръчно да създадете .zshrc файла, по образеца в ~/.oh-my-zsh

След като рестартирате терминала би трябвало да бъдете поздравени с промпта на zsh, от там следва една бърза настройка като разрешите някои добавки за вашата дистрибуция или често ползвани приложения. Можете да смените и командния промпт,с друг по-шарен, или по-полезен за вас.

Списък с предлаганите теми към oh-my-zsh можете да намерите на адрес: https://github.com/robbyrussell/oh-my-zsh/wiki/Themes
Списък с предлаганите добавки и кратко обяснение за какво са: https://github.com/robbyrussell/oh-my-zsh/wiki/Plugins

И един бонус, който мен лично доста ме ядосваше в началото е пействането от clipboard с клавишната комбинация Shift+Ins за целта трябва да добавите следното във вашия .zshrc файл:

# Create a widget from the function paste-from clipboard.
# Note that /dev/clipboard will give you access to the clipboard
# if you are on cygwin.
paste-from-clipboard() {
CLIPOUT=`cat /dev/clipboard`
BUFFER=$LBUFFER$CLIPOUT$RBUFFER
}
 
# Bind a widget with the same name as the function
zle -N paste-from-clipboard paste-from-clipboard
 
# Make insert paste from clipboard by binding it to the widget.
# If you hit ctrl-v and then the key, it shows you the extended code to use.
bindkey "\e[2~" paste-from-clipboard

Общо взето това е – мисля, че останалото бихте могли сами да разучите.

Tmux (Terminal Multiplexer)

Накратко по-добра алтернатива за screen и byobu, позволява ви да стартирате една или повече инстанции на шела в една програма, като ги разделяте по екран или по прозорци – всичкото в една програма. Представете си ползвате компютъра без графична среда. Няма прозорци, които да минимизирате, няма табове – за запознатите – тук влиза в употреба screen. В случаят при мен влиза в употерба tmux. И защо е за предпочитане – защото позволява с прости клавишни комбинации да разделяте екрана, както пожелаете. В screen например разполагате с прозорци и толкова (или пък аз не съм достатъчно запознат). Докато в tmux можете да разделяте допълнително прозореца на дялове. По този начин можете да изпълняване няколко неща директно от един екран (особено за разработка това е страхотно (ляво: терминал, дясно: vm,  долу: gdb). Разбира се бихте могли да си нацепите по този начин и vim, но за някои от функциите ще трябва да се погрижите за подходящи добавки.

Важно да кажем за някои от характеристиките на tmux:
- Поддържа utf-8 и 256 цвята
- Панели и прозорци, като всеки панел може да бъде разделят многократно
- Смяна на прозорци, чрез търсене на по индекс
- Заключване на терминала – ръчно или автоматично след определен период от време и т.н.

Инсталирането на tmux става от пакетния мендиджър на почти всяка дистрибуция.

За да не преписвам клавишните комбинации ще добавя една Ctrl+b+…. – това е командната клавишна комбинация, след което следва командата.
На пример ако искате да разделите екрана на две полета ляво/дясно Ctrl+b+!
Ctrl+b+" – разделя екрана/полето на две горе/долу
Ctrl+b+<стрелки за движение> – можете да се движите между полетата
и т.н. пробвайте с man tmux за да ги разучите

Щеше ми се да допълня и малко повече за настройката на vim посредством bundles, но мисля, че за това ще трябва допълнителна статия.

Надявам се информацията да ви е била полезна.

P.S. BulTux.Org rises from the dead :-)

Набързо за aptitude

от Lindeas
лиценз CC BY

По случай скорошния рожден ден на проекта Debian, нека кажем нещо за търсенето в aptitude. Aptitude е някак странна програма – ползва се за основни неща от тези, които не искат да се задълбават в подробностите на apt, dpkg и пакетното управление в Debian. От друга страна пък се ползва и от напреднали хакери и разработчици на пакети. Едните ползват два, максимум три клавиша – u за обновяване, f за забравяне на новите и g за инсталиране на отбелязаните – а другите използват всякакви подробни клавиши, съкратени търсения и превключване на изгледите, от които на нормалния човек му се завива свят. Е, или поне му става като в Emacs (приятелска закачка към емаксаджийте, не се сърдете).

Да видим някои от най-полезните клавиши за ежедневна работа и някои основни търсения и шаблони за търсене, които може да са ни полезни. Без претенция за изчерпателност, разбира се – аз самият дълги години вече не съм седнал да дочета наръчника за програмата… Действам на принципа “колкото ми стига – толкова”.

Клавиши:

u – обновяване на списъка с пакети. Същото като apt-get update, или по-точно aptitude update. Някои си го настройват в cron, други инсталират cron-apt, apticron и подобни. Трети, като моя милост, натискат u при влизане в aptitude, за да се радват на запълващите се зелени и оранжеви стълбчета.

f – забравяне на новите пакети (aptitude forget-new). Когато повече от веднъж видите един и същи пакет в графата “New Packages”, си е досадно. Може да се настрои автоматично да ги отбелязва като нови след инсталиране на нещо, но къде отива удоволствието да гледаш как една програма “забравя”? :)

g – при първо натискане дава списък с действията по пакетите и при повторно – започва да ги действа. Пак стълбчетата.

e – ако има неразрешени зависимости, се опитва да ги разреши автоматично. Ако първият списък не ви харесва, натиснете “>” за следващо предложение. И пак, и пак – докато намерите комбинация, която ви устройва. Назад в тази поредица предложения се връщате с “<”. Понякога спестява време вместо ръчно да оправяте конфликтите с избиране на всеки пакет, да ползвате “e”. Но и често не върши работа – логиката е такава, че няма тотален приоритет на вече инсталираните пакети и неведнъж може например за едно малко програмче да ви предлага да махнете целия X с цяла страница пакети. Не разчитайте сляпо на тая автоматика.

M – ръчно отбелязване на отделния пакет като “автоматично инсталиран”.

m – ръчно отбелязване на отделния пакет като “ръчно инсталиран”. Тези последните две са полезни при бъдещо обновяване или премахване на пакети, които са в зависимост от въпросните. Казано накратко, “автоматичните” се повличат от зависещите от тях (не е толкова просто, но ни стига за момента). Разработчиците описват зависимости, но понякога ръчната донастройка на това си е полезна.

Бързи търсения:

b – търси счупени зависимости (от “broken”). Същото като “/~b”.

/ – влиза в режим търсене. Най-простото е да въведете някакъв низ, който смятате, че се съдържа в името на пакета, защото по подразбиране търси в името. Може да шикалкавите с ^ за търсене в началото и ! в края на името.

/~ – специални търсения. Тук темата е широка и не ни стига малкият сайт. Накратко някои полезни – /~dtext търси за “text” в описанието на пакета; /~mtext търси в полето за пакетиралия разработчик; /~atext търси зададено действие за пакет (“text” може да е install, upgrade, hold и т.н.); /~stext търси в секцията “text”; /~Atext търси в конкретен архив на хранилището “text” (stable, unstable и т.н.); /~Otext търси в хранилището на “text”… Май за тези се сещам…

Да не търсим повече шаблони за търсене, мисля че има още доста, но и тези са предостатъчно. Особено като се има предвид, че едно от удобствата на aptitude е визуалната работата с интерфейса – стрелки, enter, q. Каквото е mc за командния ред. :)

Може би тук е моментът да спомена, че съкращенията с ~ си имат несъкратен аналог с ? – например на d отговаря description, на b – broken и т.н. Рядко съм ги ползвал, но ако някъде видите да се споменават, да знаете, че са същите като кратките. Може би е някакво удобство да виждаш изписана цялата дума и така да не я грешиш, не знам.

Също така всяко от тези условия за търсене може да се обръща с “!” – тоест /!text търси за пакети, които НЕ съдържат “text”.

И сега нека честитим рождения ден на Дебиан, като пуснем следното търсене:

/~i!~Odebian

Това ще ви даде пакетите, които са инсталирани и не са от официалните хранилища на Debian. От пакет на пакет може да минавате с “n” (от “next”). А списък с всички тези пакети наведнъж може да получите от команден ред така:

# aptitude search '~i!~Odebian'

Ако като мен използвате към официалните хранилища и тези на Siduction, тогава:

# aptitude search '~i!(~Odebian|~Osiduction)'

Всичко останало са пакети от рожденика :)

EmailPrintIdenti.caFacebookTwitterGoogle+DeliciousLinkedInShare/Bookmark

MySQL -> TheirSQL?

от Lindeas
лиценз CC BY

Прокрадват се съмнения в обещаната от Oracle политика към MySQL, когато ги напазаруваха със Sun. Съмненията не са от вчера и дано всичко накрая свърши като кратка буря в чаша вода.

А дано, ама надали, както биха казали някои…

MySQL AB, компанията, която развиваше MySQL, беше купена през 2008г. от Sun Microsystems и след това, две години по-късно, премина в лакомите ръце на Oracle, когато погълнаха Sun. Положението е много интересно, защото самите Oracle имат за основен бизнес една от най-мащабните комерсиални системи за управление на бази от данни. MySQL на практика им се явява нещо като вътрешна конкуренция, защото от своя страна е най-разпространената свободна система за бази от данни.

MySQL AB пък винаги е работела на принципа на двойното лицензиране – продуктът се предлага и като свободен софтуер, но основните приходи идват не от поддръжка, а от продажби на комерсиални лицензи. Нерядко са се чували притеснения от този модел – например Qt на Trolltech и др. – най-вече заради лесният механизъм на еволюция към затворен код, ако компанията промени приоритетите си за бъдещите версии. Между другото, наскоро за пореден път такива притеснения се появиха за въпросното Qt, след като от ръцете на Nokia сега премина в тези на Digia – и двете (едната повече, другата по-малко) заподозрени от общността в близки отношения с Microsoft. Може би сравнението на Digia с Oracle не е много коректно, но бъдещето ще покаже кой как си спазва обещанията.

Разбира се, нито Qt, нито MySQL ще престанат да бъдат свободен софтуер. Най-малкото съществуват или фондации и управление от общността, или разклонения на кода, готови при нужда да поемат основната част разработчици.

При MySQL може би е реалистичен вторият вариант. От доста време бивши разработчици на MySQL, заедно с основателя на проекта Monty правят продукта MariaDB, който е двоично съвместим и заменим с MySQL. В повечето случаи разликата е само в имената на програмите и съответно имената на инсталационните пакети. Затова в дистрибуциите се повдига въпроса за премахване на твърдото изискване за “mysql” в зависимостите на пакетите, за да може да се използва която и да е от тези системи, без функционална разлика.

Притеснението на хората от MariaDB в случая е заради скриването в последната версия на MySQL (с която те периодично се синхронизират в името на съвместимостта) на списъка с промените и на тестовите скриптове. Така не се разбира какви грешки всъщност са отстранени в тази версия и никой външен разработчик не може да е сигурен защо нещо е поправено, какво е било то, нито може да провери дали наистина е поправено. Така с един “удар” се отсича достъпа на външни на компанията разработчици – да, кодът е там и е под свободен лиценз, но я иди да четеш хиляди и хиляди редове код и да не знаеш кое как и защо е променено…

Ако се стигне до масова миграция към MariaDB, затруднението ще е в зависимостите на дистрибуциите и в свикването с името от потребителите. Първото е лесно и бързо решимо – и по-големи промени са се правили в дистрибуциите, а тук става дума почти само за промяна в име. Второто ще е големият проблем, защото днес всеки знае за MySQL и почти никой – за MariaDB. Имам предвид особено мениджърите на средно ниво из фирмите, на които им трябваха години, за да запомнят MySQL, а сега не се знае колко биха им трябвали, за да го сменят. Ще кажете – няма проблем, те във фирмите ще си ползват комерсиални лицензи за MySQL, независимо колко отворен или затворен е кодът. Да, така е, от гледна точка на бизнеса няма голям проблем. Но от гледна точка на софтуерната свобода години усилия отиват на вятъра.

Може всичко да се окаже техническа грешка и нещата да се оправят. Ако не – още един грях на Oracle към свободния софтуер.

EmailPrintIdenti.caFacebookTwitterGoogle+DeliciousLinkedInShare/Bookmark