Автор Тема: Копилка полезных скриптов и команд  (Прочитано 18386 раз)

UncleHex

  • Глобальный модератор
  • Пользователь
  • *****
  • Сообщений: 68
  • Карма: +33/-1
  • βṟåȊﬨṦțØƦɱęṟ
    • Просмотр профиля
    • Мой блог o Linux
Невозможно описать сколько всего интересного и полезного можно сделать в терминале или при помощи языка shell!
К примеру - от команды поиска по сотне файлов(команда занимает одну строчку), до скрипта автоматом скачивающего файл, записывающего его на болванку и выключающего после этого компьютер. Естественно это не предел :-)
Очень часто можно наткнуться на что-то хорошее в сети, или написать в случае необходимости(это очень занимательный процесс).
Присылайте свои находки по данной теме.


По поводу написания скриптов и всего остального вы можете найти в библиотеке.


Магия консольных одностроковых скриптов

Одностроковый скрипт - набор программ, как правило соединенных через пайп (|). При соединении программ через пайп выход левой команды передается на вход правой. Можно получить простые и полезные решения за счет всего одной строчки в командной строке bash.

К примеру, вы хотите знать, сколько файлов в текущем каталоге. Можно скомандовать:

ls | wc -l
Это очень простой пример - можно придумать и посложнее. Представьте, что вам нужно знать 5 процессов, которые больше всего нагружают процессор системы:

ps -eo user,pcpu,pid,cmd | sort -r -k2 | head -6
Опция o программы ps выбирает колонки для отображения. sort -r осуществляет сортировку в обратном порядке по второй колонке (pcpi) - это указывается в ключе -k2. head оставляет лишь первые 6 строк из выходного потока (включая строку заголовка). Можно поместить pcpu в первую колонку и можно будет опустить ключ -k2, потому что по умолчанию данные сортируются по первой колонке. Таким образом, одну и ту же задачу можно решить разными способами; разные версии одностроковых скриптов с различными ключами могут давать разный результат.

Обычна ситуация для администраторов Linux - когда нужно получить упорядоченный список пользователей системы. Есть простой способ сделать это:

cat /etc/passwd | sort
Если вам нужны лишь имена пользователей, тогда нужно отсеять часть данных. К примеру, так:

cat /etc/passwd | sort | cut -d":" -f1
Отсортированный список передается программе cut, ключ -d которой определяет разделительный символ. cut делит строку на части и отображает первое поле (это указывается ключом -f1). Так-то лучше; теперь отображаются лишь имена. Однако, скорее всего, вы не хотите, чтобы в список попали системные пользователи, такие как apache, bin, lp и т.д. Если требуются лишь настоящие пользователи, отдайте следующую команду:

cat /etc/passwd | sort | gawk '$3 >= 500 {print $1 }' FS=":"
gawk обрабатывает каждую строку из входного потока. Если третье поле (UID) больше или равно 500 (что для большинства современных дистрибутивов означает нормальных пользователей), тогда выполняется действие. Действие указывается в фигурных скобках - это печать первого поля, имени пользователя. Разделитель полей строки - двоеточие, для команды gawk это становится понятно после указания его в ключе FS.

Теперь представьте, что у вас есть каталог, содержащий множество файлов с разными расширениями, и вам нужно создать резервные копии лишь .php-файлов, добавив к их имени .bkp - вот так filename.bkp. Это реализует следующий однострочник:

for f in *.php; do cp $f $f.bkp; done
Команда выполняет цикл по всем файлам в каталоге, имеющим расширение .php. Имя каждого найденного файла сохраняется в переменной $f. Затем с каждым из них производится операция копирования. Заметьте, что в этом скрипте мы пользовались точкой с запятой для выполнения команд одна за другой.

Как бы создать резервную копию большого объема данных? Посмотрим на это:

tar cf - . | (cd /usr/backups/; tar xfp -)
Сначала будет создан tar-архив текущего каталога со всеми подкаталогами. Затем через пайп этот пакет пойдет к следующей команде. Скобки создают временную подоболочку, в которой сначала производится переход в другой каталог, затем извлекается содержимое архива - собственно исходный каталог. Ключ p второй команды tar сохраняет свойства файла такие как время и права доступа. После завершения исходная оболочка будет восстановлена, и пользователь будет в том же каталоге, в котором и был.

Вот вариант однострочника, создающий архив на удаленном сервере:

tar cf - . | ssh smith@remote.server tar xfp - -C /usr/backup/smith
Здесь запускается удаленная SSH-сессия и содержимое архива распаковывается с ключом C, таким образом производится смена текущего каталога, в нашем случае в /usr/backup/smith, там и производится распаковка.

grep и gawk и uniq!

Обработка текста - типичная задача для однострочников. Можно создавать красивые решения, правильно подобрав команды. В следующем примере требуется получить отчет по входящим почтовым сообщениям, примерно так:
cat incoming_emails
2008-07-01 08:23:17 user1@example.com
2008-07-01 08:25:20 user2@someplace.com
2008-07-01 08:32:41 somebody@server.net
2008-07-01 08:35:03 spam not recived, filtered
2008-07-01 08:39:57 user1@example.com
...

Итак, требуется отчет, содержащий адреса получателей. Как видно, некоторые адресаты повторяются, а нам это не нужно. Следующий однострочник решает эту задачу:

grep '@' incoming_email | gawk '{print $3}' | sort | uniq
grep оставляет строки, содержащий символ @, означающий электронную почту. Далее, gawk выделяет третье поле, содержащее почтовый адрес и передает вывод команде sort. Сортировка необходима для группировки повторяющихся адресатов, ведь следующая команда uniq удаляет повторяющиеся смежные строки из отсортированного списка. Вывод скрипта ниже. Большинство текстовых однострочников работают через комбинации утилит grep, sed, awk, order, tr, cut, uniq и др.
somebody@server.net
user1@example.com
user2@someplace.com

Для удобства использования таких скриптов полезно создавать для них алиасы. Это можно сделать, дописав соответствующую строчку в файл .bashrc. Когда вы откроете пользовательскую сессию, будет выполнен этот файл, и будет активизирован ваш алиас:

alias p5="ps -eo pcpu,user,pid,cmd | sort -r | head -6"
Эта статья лишь начало, можно придумать и написать куда более замысловатые скрипты. Если вы системный администратор Linux, заведите привычку собирать, создавать и адаптировать такие скрипты; никогда не знаешь, когда они могут потребоваться.
_____________________________________________________________
Источник - http://rus-linux.net/lib.php?name=MyLDP/consol/cli-magic.html
« Последнее редактирование: 01 Июнь 2011, 12:13:45 от UncleHex »

Brego

  • Ветеран
  • *****
  • Сообщений: 566
  • Карма: +93/-1
  • Перебьемся
    • Просмотр профиля
    • MintMem
Скрипт для вывода погоды в консоли
« Ответ #1 : 31 Май 2011, 23:20:14 »
Уровень: для "начавших" осваивать консоль (т.е. мой  :-))

В интернете можно найти немало скриптов, выводящих текущую погоду в консоли.
Это не только прикольная штучка, чтобы поражать воображение знакомых девушек, но и отличный
полигон для освоения основ скриптинга.
Один из самых популярных погодных скриптов можно найти, например, здесь -- http://www.net4me.net/examples/16/net74.html
Однако он подходит для тех, кто живет неподалеку от аэропорта, имеющего свой код (коды можно посмотреть тут: Коды ИКАО аэропортов России и стран бывшего СССР)
Кроме того, он выводит скудные данные, по-английски и (в смысле оформления) скучно. Таким вряд ли поразишь девушку.
Но на его основе мы легко сможем смастерить свой скрипт без этих недостатков.
Для начала выберем подходящий погодный сайт, например, сайт Гидрометцентра. Найдем на нем страничку со своей погодой (к примеру, для поселка Лебяжье Красноярского края) -- http://meteoinfo.ru/pogoda/russia/krasnoyarsk-territory/lebjazhe2
Выбираем консольный браузер lynx или ставим его из реп. Пишем
#!/bin/bash
# Скрипт текущей погоды поселка Лебяжий
# модификация скрипта с http://www.net4me.net/examples/16/net74.html
echo '============== Погода в Лебяжьем ==========='
lynx -dump http://meteoinfo.ru/pogoda/russia/krasnoyarsk-territory/lebjazhe2 | grep -A 8 -B 4 "Атмосферное давление на уровне станции"
wait;
echo '============================================'
exit 0

Как он работает?
lynx скачивает указанную ему страницу и прекращает работу; grep отбирает строку, содержащую выражение "Атмосферное давление на уровне станции" и, кроме того, отображает еще восемь строк после нее (-A 8) и четыре - до (-B 4).
Запустив скрипт, мы увидим что-то такое:
============== Погода в Лебяжьем ===========
     Вторник, 31 мая
   18:00:00
   (время московское) [1px.gif]
   [pr5000_left2.gif] [pr5000_middle2.gif]
   Атмосферное давление на уровне станции, мм рт.ст. 734
   Температура воздуха, °C 19.5
   Относительная влажность, % 54
   Направление ветра Ю-В
   Скорость ветра, м/с 1
   Балл общей облачности 6
   Горизонтальная видимость, км 50

   [27]Рейтинг@Mail.ru [28]Rambler's Top100
============================================
Уже неплохо, но надо убрать мусор -- ссылки на картинки и нижнюю строку. Уточняем:
#!/bin/bash
# Скрипт текущей погоды поселка Лебяжий
# модификация скрипта с http://www.net4me.net/examples/16/net74.html
echo '============== Погода в Лебяжьем ==========='
lynx -dump http://meteoinfo.ru/pogoda/russia/krasnoyarsk-territory/lebjazhe2 | grep -A 6 -B 4 "Атмосферное давление на уровне станции" | grep -v "\[.*\]*"
wait;
echo '============================================'
exit 0
Теперь вывод приобрел вид:
============== Погода в Лебяжьем ===========
     Вторник, 31 мая
   18:00:00
   Атмосферное давление на уровне станции, мм рт.ст. 734
   Температура воздуха, °C 19.5
   Относительная влажность, % 54
   Направление ветра Ю-В
   Скорость ветра, м/с 1
   Балл общей облачности 6
   Горизонтальная видимость, км 50
============================================
Чудно! Но где же обещанная красота? Сейчас мы ее сделаем.
#!/bin/bash
# Скрипт текущей погоды поселка Лебяжий
# модификация скрипта с http://www.net4me.net/examples/16/net74.html
tput bold
echo '============== Погода в Лебяжьем ==========='
tput sgr0
tput setaf 7
lynx -dump http://meteoinfo.ru/pogoda/russia/krasnoyarsk-territory/lebjazhe2 | grep -A 6 -B 4 "Атмосферное давление на уровне станции" | grep -v "\[.*\]*"
tput sgr0
wait;
tput bold
echo '============================================'
tput sgr0
exit 0

Я выбрал цвета исходя из "боевой раскраски" своей консоли:

Вы можете подобрать другие цвета, задаваемые командой tput. Для себя я накропал антисклерозный скрипт, который показывает наглядную подсказку:

Из кода скрипта совершенно понятно, как применять tput:
#!/bin/bash
# Set a foreground colour using ANSI escape
tput setaf 1
echo "Пример изменения цвета текста при помощи команды tput setaf 1"
tput sgr0
tput setaf 2
echo "Пример изменения цвета текста при помощи команды tput setaf 2"
tput sgr0
tput setaf 3
echo "Пример изменения цвета текста при помощи команды tput setaf 3"
tput sgr0
tput setaf 4
echo "Пример изменения цвета текста при помощи команды tput setaf 4"
tput sgr0
tput setaf 5
echo "Пример изменения цвета текста при помощи команды tput setaf 5"
tput sgr0
tput setaf 6
echo "Пример изменения цвета текста при помощи команды tput setaf 6"
tput sgr0
tput setaf 7
echo "Пример изменения цвета текста при помощи команды tput setaf 7"
tput sgr0
tput rev
echo "Пример изменения цвета фона при помощи команды tput rev"
tput sgr0

Итак, используя простейшие средства, мы получили красивый вывод погоды в консоли.
В заключение отмечу, что сайт meteoinfo.ru имеет неприятную особенность: он часто меняет количество строк выводимой информации и то вставляет, то нет картинки среди текстовых строк. Но, думаю, по примеру приведенного скрипта, используя man grep, вы сможете без труда так модифицировать скрипт, что никто и не догадается об этих проблемах. В качестве подсказки: обратите внимание на опцию grep -f.
В следующий раз рассмотрим, как приспособить этот (несколько модифицированный) скрипт для вывода погоды в conky.
« Последнее редактирование: 01 Июнь 2011, 00:18:29 от Brego »
"Следующая эпоха началась с сожжения всех хроник вместе с хронистами". С. Лем

Azure

  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2118
  • Карма: +275/-114
  • Обычно я му-р-р-р-чу
    • Просмотр профиля
    • Exilibris Web Development
Re: Скрипт для вывода погоды в консоли
« Ответ #2 : 01 Июнь 2011, 03:16:58 »
В заключение отмечу, что сайт meteoinfo.ru имеет неприятную особенность: он часто меняет количество строк выводимой информации и то вставляет, то нет картинки среди текстовых строк. Но, думаю, по примеру приведенного скрипта, используя man grep, вы сможете без труда так модифицировать скрипт, что никто и не догадается об этих проблемах. В качестве подсказки: обратите внимание на опцию grep -f.
Вот вне зависимости от количества строк и для браузера links2links -codepage CP866 -dump http://meteoinfo.ru/pogoda/russia/krasnoyarsk-territory/lebjazhe2 | iconv -f CP866 -t utf8 | sed -e 's/.*     \(\([ПВСЧАТОНБГ(]\|[0-9]\+:\)[^ ].*\)/\1/' -ne '/^\([ВЧАТОНБГ(]\|[0-9]\+:\|[П][^р]\|[С][^т]\)[^ ].*/p'- конечно если надо однострочник, но никто не мешает сохранить это дело в файл или присвоить переменной и все команды выполнять последовательно. Преимущество этого скрипта в том, что можно выбрать из выводимой информации желаемые пункты.
Без "красявостей" - но они есть выше.

Brego

  • Ветеран
  • *****
  • Сообщений: 566
  • Карма: +93/-1
  • Перебьемся
    • Просмотр профиля
    • MintMem
Re: Копилка полезных скриптов и команд
« Ответ #3 : 01 Июнь 2011, 10:57:12 »
Всё верно (только в команде links, а не links2), но такой регекс, пожалуй, не для "освоения основ". И, кстати, lynx я выбрал именно потому, что он корректнее работает с кодировками и кирилицей и не требует, как правило, применения iconv. А вообще-то подобную фигнюшку можно накропать хоть на awk, хоть на python, да хоть на чем  :-). Тут весь интерес -- в максимальном упрощении. Хотя и мне не удалось избежать регекса, но он маленький и легко читаемый/объяснимый (для начинающих).
"Следующая эпоха началась с сожжения всех хроник вместе с хронистами". С. Лем

Azure

  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2118
  • Карма: +275/-114
  • Обычно я му-р-р-р-чу
    • Просмотр профиля
    • Exilibris Web Development
Re: Копилка полезных скриптов и команд
« Ответ #4 : 01 Июнь 2011, 12:25:32 »
только в команде links, а не links2
Работает с links (проверено *YES* ) , а выбрал links2, потому что он может отображать графику будучи запущен с ключом -g.
А насчет нечитаемости могу поспорить - на вкус и цвет товарищей как говорится...
Я например "расшифровываю" регулярку так:
найти строки, которые начинаются с любого количества любых символов '.*' в которых после 5-ти пробелов идет какая-либо большая буква из ПВСЧАТОНБГ или "(" (скобка)'     [ПВСЧАТОНБГ(]'или '\|' несколько (одна и больше) '\+' цифр со знаком ":"(двоеточие) '[0-9]\+:' после которых (букв или цифр) 'внутренние скобки \(...\)' не будет пробела '[^ ]' и заменить их 's/' только на окончание строки (т.е. после букв или цифр) 'внешние скобки \(...\).../\1/' и показать только те строки, где была выполнена замена, за исключением строк, где после буквы П идет р или после С идет т '[П][^р]\|[С][^т]'.
« Последнее редактирование: 01 Июнь 2011, 12:31:23 от Azure »

UncleHex

  • Глобальный модератор
  • Пользователь
  • *****
  • Сообщений: 68
  • Карма: +33/-1
  • βṟåȊﬨṦțØƦɱęṟ
    • Просмотр профиля
    • Мой блог o Linux
Re: Копилка полезных скриптов и команд
« Ответ #5 : 01 Июнь 2011, 12:35:10 »
Из старинных заметок:

> find ./ -type d -exec chmod 775 {} \;В текущей директории рекурсивно сменить разрешения на все директории

> find ./ -type f -exec chmod 664 {} \;То же для файлов

egrep -ioam1 '[a-z0-9]{8}' /dev/urandomГенератор паролей (8 символов)

rename 's/.html$/.php/' *.htmlИзменит расширения всех файлов html на php в текущей директории.


Azure

  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2118
  • Карма: +275/-114
  • Обычно я му-р-р-р-чу
    • Просмотр профиля
    • Exilibris Web Development
Переименование - 2 скрипта
« Ответ #6 : 01 Июнь 2011, 13:33:48 »
rename 's/.html$/.php/' *.htmlИзменит расширения всех файлов html на php в текущей директории.
Это только если установлен пакет renameutils.
Вот стянул из интернета скриптик на переименование (предлагают назвать его renna)#!/bin/sh
# renna: переименование нескольких файлов по специальным правилам
# Автор - felix hudson Jan - 2000

#Прежде всего, посмотрите на различные "режимы", которые имеются у этой программы.
#Если первый аргумент ($1) является подходящим, мы выполняем эту часть
#программы и выходим.

# Проверка на возможность добавления префикса.
if [ $1 = p ]; then

#Теперь переходим от переменной режима ($1) и префикса ($2)
prefix=$2 ; shift ; shift

# Необходимо проверить, задан ли, по крайней мере, хотя бы один файл.
# В противном случае, лучше ничего не предпринимать, чем переименовывать несуществующие
# файлы!!

  if [$1 = ]; then
     echo "не задано ни одного файла"
     exit 0
  fi

# Этот цикл for обрабатывает все файлы, которые мы задали
# программе.
# Он осуществляет одно переименование на файл.
  for file in $*
    do
    mv ${file} $prefix$file
  done

#После этого выполняется выход из программы.
  exit 0
fi

# Проверка на условие добавления суффикса.
# В остальном, данная часть фактически идентична предыдущему разделу;
# пожалуйста, смотрите комментарии, содержащиеся в нем.
if [ $1 = s ]; then
  suffix=$2 ; shift ; shift
  if [$1 = ]; then
   echo "не задано ни одного файла"
   exit 0
  fi

 for file in $*
  do
   mv ${file} $file$suffix
 done

 exit 0
fi

# Проверка на условие переименования с заменой.
if [ $1 = r ]; then

  shift

# Из соображений безопасности автор включил эту часть, чтобы не повредить ни один файл, если пользователь
# не определил, что следует выполнить:

  if [ $# -lt 3 ] ; then
    echo "Ошибка; правильный ввод: renna r [выражение] [замена] файлы... "
    exit 0
  fi

# Рассмотрим другую информацию
  OLD=$1 ; NEW=$2 ; shift ; shift

# Данный цикл for последовательно проходит через все файлы, которые мы
# задали программе.
# Он совершает одно переименование на файл, используя программу 'sed'.
# Это простая программа с командной строки, которая анализирует стандартный
# ввод и заменяет регулярное выражение на заданную строку.
# Здесь мы задаём для sed имя файла (в качестве стандартного ввода) и заменяем
# необходимый текст.

  for file in $*
  do
    new=`echo ${file} | sed s/${OLD}/${NEW}/g`
    mv ${file} $new
  done
exit 0
fi

# Если мы достигли этой строки, это означает, что программе были заданы
# неправильные параметры. В связи с этим, следует объяснить пользователю, как её
# использовать
echo "используйте:"
echo " renna p [префикс] файлы.."
echo " renna s [суффикс] файлы.."
echo " renna r [выражение] [замена] файлы.."
exit 0

# done!
Или простенький и коротенький:#!/bin/bash
     # renames.sh
     # простая программа переименования

     criteria=$1
     re_match=$2
     replace=$3
     
     for i in $( ls *$criteria* );
     do
         src=$i
         tgt=$(echo $i | sed -e "s/$re_match/$replace/")
         mv $src $tgt
     done
Синтаксис у последнего скрипта такой название_скрипта какие_файлы что_меняем на_что_меняем
« Последнее редактирование: 01 Июнь 2011, 13:37:30 от Azure »

Brego

  • Ветеран
  • *****
  • Сообщений: 566
  • Карма: +93/-1
  • Перебьемся
    • Просмотр профиля
    • MintMem
Re: Копилка полезных скриптов и команд
« Ответ #7 : 01 Июнь 2011, 14:17:22 »
Сколько пакетов установлено в системе?
Конечно же, я не первый, но самостоятельно ( :-)) нашел способ выводить только инсталлированные пакеты (с флагом ii) как можно более короткой командой:
dpkg -l | awk ' /^ii|hi/ { print $2 }'Чтобы узнать количество установленных пакетов:
dpkg -l | awk ' /^ii|hi/ { print $2 }' | wc -lИнтересно, можно ли еще короче (без сторонних программ), может, кто знает?

PS: Кстати, отцы, стóит ли здесь выкладывать модификацию погодного скрипта для conky?
« Последнее редактирование: 01 Июнь 2011, 14:24:06 от Brego »
"Следующая эпоха началась с сожжения всех хроник вместе с хронистами". С. Лем

EagleStars

  • Постоялец
  • ***
  • Сообщений: 208
  • Карма: +64/-55
    • Просмотр профиля
Re: Копилка полезных скриптов и команд
« Ответ #8 : 02 Июнь 2011, 02:57:20 »
Я, к примеру плохо запоминаю команды. А что бы воспользоваться маном во многих случаях нужно хотя бы помнить какая команда нужна и поиск по манам невсегда удобен и выручает, особенно с полным отсутствием знания буржуйских говоров. Поэтому пользуюсь справочниками при составлении команды. Дам полезные ссылки на сей счёт.
Сборник шпаргалок с ubuntu.ru.
Сборник с переводами opennet.ru по манам.
Ну и классика, необходимая любому, кто серьёзно собирается писать сценарии: "Искусство программирования на языке сценариев командной оболочки".
Есть ещё ссылки, но во первых в моих ссылках многие из них присутствуют, во вторых не все они рабочие, в третьих приведённые мною ссылки наиболее удачные.


Знаю,что Вы любите букву "з" и старался не обращать внимания, но уж сильно "режет глаз" (сборник <- собирать)
« Последнее редактирование: 02 Июнь 2011, 15:36:21 от Azure »

Azure

  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2118
  • Карма: +275/-114
  • Обычно я му-р-р-р-чу
    • Просмотр профиля
    • Exilibris Web Development
Re: Копилка полезных скриптов и команд
« Ответ #9 : 02 Июнь 2011, 16:03:18 »
можно ли еще короче (без сторонних программ)
Если "без сторонних" (не знаю короче или нет :-[)aptitude search ~iБудьте внимательны:
  • в коде ~("тильда" - буква Ё на англ.раскладке), а не "тире".
  • вывод команды будет очень большой (более 1500 строк) так что по конвейеру сразу что-то с ним делайте ;-)
Я, к примеру плохо запоминаю команды.
А интернета вдруг нет? Найти слово в описании программыaptitude search ~dслово_в_описании # может иметь несколько слов, повторяя конструкцию ~dслово_в_описании1 ~dслово_в_описании2 и т.д
man -k слово_в_описании
apropos слово_в_описании # тоже самое что выше, но запомнить труднее

EagleStars

  • Постоялец
  • ***
  • Сообщений: 208
  • Карма: +64/-55
    • Просмотр профиля
Re: Копилка полезных скриптов и команд
« Ответ #10 : 02 Июнь 2011, 18:43:35 »
У меня в архиве есть страницы с нужными манами. Подсказку то же туда занесу, благодарю! Чего то недогадался насчёт того что бы просто ключи и команды поиска записать.
Ещё по первой моей ссылке для таких забывчивых как есть ссылки на справочники и справочные листы для скачивания.
Так же обалденная идея (не моя, видел где то) это зделать обои из нужных справочных команд.
« Последнее редактирование: 02 Июнь 2011, 18:52:12 от EagleStars »

Brego

  • Ветеран
  • *****
  • Сообщений: 566
  • Карма: +93/-1
  • Перебьемся
    • Просмотр профиля
    • MintMem
Re: Копилка полезных скриптов и команд
« Ответ #11 : 02 Июнь 2011, 20:52:50 »
можно ли еще короче (без сторонних программ)
Если "без сторонних" (не знаю короче или нет :-[)aptitude search ~i
Если вместе с описанием, то да, действительно короче
...вывод команды будет очень большой (более 1500 строк) так что по конвейеру сразу что-то с ним делайте ;-)
Это у кого-то, может, более 1500, а у некоторых уже за 2000  :-D

Маленькое прим. по поводу манов. Хочу отметить проект Дмитриева (при поддержке Костромина) HuMan, даже то, что уже сделано, очень полезно новичкам, а иногда и не только новичкам.
"Следующая эпоха началась с сожжения всех хроник вместе с хронистами". С. Лем

Brego

  • Ветеран
  • *****
  • Сообщений: 566
  • Карма: +93/-1
  • Перебьемся
    • Просмотр профиля
    • MintMem
Re: Копилка полезных скриптов и команд
« Ответ #12 : 02 Июнь 2011, 22:23:57 »
В дополнение к двум скриптам Azure для переименования -- очень полезный скрипт, меняющий в текущей папке в именах файлов пробелы на подчеркивания. Я нашел его в каком-то блоге, а потом обнаружил, что его источник -- неувядаемый "Advanced Bash-Scripting Guide". Поскольку часто приходится запускать его в Midnight Commander и выводы echo не видны, чтобы не давить Ctrl+o направил вывод во всплывающие системные сообщения.

#!/bin/bash
# blank-rename.sh
# переименование файлов, чьи имена содержат пробелы
# Заменяет пробелы символом подчеркивания в именах файлов в текущем каталоге.

ONE=1                     # единственное или множественное число (см. ниже).
number=0                  # Количество переименованных файлов.
FOUND=0                   # Код завершения в случае успеха.

for filename in *         # Перебор всех файлов в текущем каталоге.
do
     echo "$filename" | grep -q " "         #  Проверить -- содержит ли имя файла
     if [ $? -eq $FOUND ]                   #+ пробелы.
     then
       fname=$filename                      # Удалить путь из имени файла.
       n=`echo $fname | sed -e "s/ /_/g"`   # Заменить пробелы символом подчеркивания.
       mv "$fname" "$n"                     # Переименование.
       let "number += 1"
     fi
done

if [ "$number" -eq "$ONE" ]
then
 notify-send "$number файл переименован."
else
 notify-send "Переименовано файлов: $number"
fi
exit 0
"Следующая эпоха началась с сожжения всех хроник вместе с хронистами". С. Лем

Brego

  • Ветеран
  • *****
  • Сообщений: 566
  • Карма: +93/-1
  • Перебьемся
    • Просмотр профиля
    • MintMem
Re: Копилка полезных скриптов и команд
« Ответ #13 : 03 Июль 2011, 20:21:30 »
Исправляем раскладку текста средствами bash
Весьма полезный, на мой взгляд, скрипт нашел на хабре. Особенно его должны оценить те, кто не хочет связываться с программами типа xneur.

#!/bin/bash

if [ "$(xsel)" = "" || "$(xsel)" = " " ]; then exit 1; fi

BOOFER=$(xsel -b)

xsel | sed "y/abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ[]{};':\",.\/<>?@#\$^&\`~фисвуапршолдьтщзйкыегмцчняФИСВУАПРШОЛДЬТЩЗЙКЫЕГМЦЧНЯхъХЪжэЖЭбюБЮ№ёЁ/фисвуапршолдьтщзйкыегмцчняФИСВУАПРШОЛДЬТЩЗЙКЫЕГМЦЧНЯхъХЪжэЖЭбю.БЮ,\"№;:?ёЁabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ[]{};':\",.<>#\`~/" | xsel -b -i

xvkbd -xsendevent -text "\[Control_L]\[v]"
echo -n "$BOOFER" | xsel -b -i

Автор подробно прокомментировал скрипт, который кстати, можно скачать и по ссылке http://rghost.ru/7179111.

Необходимые условия для его работы:
Наличие утилит xsel, xvkbd и xbindkeys -- устанавливаем:
sudo apt-get install xsel xvkbd xbindkeysЗапускаем в консоли
xbindkeysПрограмма пожалуется на отсутствие конфигурационного файла и предложит создать его командой
xbindkeys --defaults > $HOME/.xbindkeysrcчто мы и сделаем.
Затем в этот только что созданный файл ~/.xbindkeysrc запишем
"/путь/к/скрипту.sh"
alt + q
(в первой строчке, разумеется, подставим свой путь и имя скрипта)
и еще раз запустим
xbindkeys(кстати, утилиту xbindkeys лучше прописать в автозагрузку, если предполагается пользоваться скриптом довольно часто).
Теперь, если мы случайно забудем переключить раскладку и напечатаем yb abuf ct,t! нам будет достаточно выделить этот текст и нажать Alt+q.
Комбинацию клавиш, естественно, можно привязать свою.

Примечание: Есть сообщение (см. ниже), что на Росинке-11 скрипт может вызвать конфликт со стандартными хоткеями (Ctrl-f в браузере и других программах). В Росинке-9 ("Новогодней") никаких конфликтов не наблюдал.
« Последнее редактирование: 09 Февраль 2012, 13:05:45 от Brego »
"Следующая эпоха началась с сожжения всех хроник вместе с хронистами". С. Лем

yasha

  • Новичок
  • *
  • Сообщений: 13
  • Карма: +4/-2
  • Старый трубокур
    • Просмотр профиля
Re: Копилка полезных скриптов и команд
« Ответ #14 : 10 Июль 2011, 17:45:05 »
Добавлю в копилку- Переименование группы файлов:Меня устраитвает,чесно, не помню,где нашел,:
#!/bin/bash
i= ; ls | while read; do mv "$REPLY" $((++i))".${REPLY//*.}"; done
Кидаешь в папку с файлами,и запускаешь-
./rename_script.sh-
« Последнее редактирование: 10 Июль 2011, 18:07:32 от yasha »
Если ни чего не помогает-прочтите,наконец,ИНСТРУКЦИЮ!