събота, 10 февруари 2007 г.

Linux команди

   На много места в интернет можете да видите теми от рода на "Основни Linux команди" и всякакви подобни. В повечето случаи това са команди от рода на ls, cp, mv или rm. Тук реших да събера не чак толкова основни команди, а такива, които оптимизират работата и правят решаването на даден проблем възможно за кратко време.
   Първото нещо, за което се сещам е една опция на командата find, -exec . Тази опция позволява да бъде изпълнена команда, която да "работи" с резултатите, които връща find. Приемаме следната ситуация. Имаме една директория /data/, в която имаме стотици поддиректории и стотици файлове с различни разширения. Трябва да изтрием всички файлове с разширение jpg от всички директории. Тази работа ще свърши следната команда:

find /data/ -iname "*.jpg" -type f -exec rm {} \;

При изпълнението на командата лявата и дясна цица ( {} ) приемат стойността на всеки резултат върнат от find. В случая, това са намерените файлове. В случай, че целта е да изтрием не само jpg, но и gif и bmp файловете, командата ще изглежда така:

find /data/ \( -iname "*.jpg" -o -iname "*.gif" -o -iname "*.bmp" \) -type f -exec rm {} \;

Ако целта е да бъдат изтрити всички jpg и gif файлове, с изключение на тези, които се намират в поддиректорията /daat/newfiles/ командата ще е следната.

find /data/ -path '/data/newfiles' -prune -o \( -iname "*.jpg" -o -iname "*.gif" \) -type f -exec rm {} \;

От тук нататък е само въпрос на въображение ;-).
   Темата излезе доста дълга и сега ще спомена само някои неща, които ми се струват полезни, а друг път ще пиша за други команди и полезни скриптчета.
   В Slackware при копиране на файлове в конзола, презаписването на един файл върху друг става без съгласието на потребителя. Опцията, която казва на cp, да пита преди да презапише даден даден файл е -i. За да не се налага всеки път да пишете cp -i, добро решение е да добавите следния ред в ~/.bash_profile:

alias 'cp=cp -i'

За да го добавите, без да се налага да отваряте и да редактирате файла ръчно изпълнете следната команда.

echo "alias 'cp=cp -i'" >> ~/.bash_profile

Други полезни опции са:
rm -i - пита дали да изтрие даден файл.
mv -i - пита дали да презапише един файл върху друг при местене.
Горните две могат да се добавят в ~/.bash_profile по следния начин:

echo "alias 'rm=rm -i'" >> ~/.bash_profile
echo "alias 'mv=mv -i'" >> ~/.bash_profile


Всички команди изброени по-горе се пишат на едни ред. Причината някои от тях да са на два реда е начина на форматиране на страницата. В случай, че искате да напишете дадена команда на повече от един ред, всеки ред, който не е последен от командата трябва да завършва с "\" (без кавичките). Например:

mv -i \
/dir_1/subdir_1/subsubdir_1/file1 \
/dir_2/subdir_2/subsubdir_2

1 коментар:

  1. Ехаа, ей такива теми най-обичам. :)
    Съвсем сериозно, повечето неща съм се чудил как стават, сега има от къде да видя, без да тровя човека по icq :P
    Отново благодаря на г-н Тодоров за усилията и времето, което отделя за споделяне на опит и т.н.
    ==
    Понякога чак ми е неудобно да те тровя с моите неща, но .. :mrgreen:

    ОтговорИзтриване