MyTetra Share
Делитесь знаниями!
Полезные_scripts2
02.01.2019
08:19
Автор: alensav
Текстовые метки: scripts
Раздел: MyTetra - SAVSCRIPTS

Копилка полезных скриптов и команд

« : 06 Январь 2011, 23:08:52 »

Невозможно описать сколько всего интересного и полезного можно сделать в терминале или при помощи языка 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
  • Перебьемся

Скрипт для вывода погоды в консоли

« Ответ #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
  • Обычно я му-р-р-р-чу

Re: Скрипт для вывода погоды в консоли

« Ответ #2 : 01 Июнь 2011, 03:16:58 »

Цитата: Brego от 31 Май 2011, 23:20:14

В заключение отмечу, что сайт meteoinfo.ru имеет неприятную особенность: он часто меняет количество строк выводимой информации и то вставляет, то нет картинки среди текстовых строк. Но, думаю, по примеру приведенного скрипта, используя man grep, вы сможете без труда так модифицировать скрипт, что никто и не догадается об этих проблемах. В качестве подсказки: обратите внимание на опцию grep -f.

Вот вне зависимости от количества строк и для браузера links2

Код: [Выделить]

links -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
  • Перебьемся

Re: Копилка полезных скриптов и команд

« Ответ #3 : 01 Июнь 2011, 10:57:12 »

Всё верно (только в команде links, а не links2), но такой регекс, пожалуй, не для "освоения основ". И, кстати, lynx я выбрал именно потому, что он корректнее работает с кодировками и кирилицей и не требует, как правило, применения iconv. А вообще-то подобную фигнюшку можно накропать хоть на awk, хоть на python, да хоть на чем  . Тут весь интерес -- в максимальном упрощении. Хотя и мне не удалось избежать регекса, но он маленький и легко читаемый/объяснимый (для начинающих).

Записан

"Следующая эпоха началась с сожжения всех хроник вместе с хронистами". С. Лем

Azure

  • Глобальный модератор
  • Ветеран
  • Сообщений: 2118
  • Карма: +275/-114
  • Обычно я му-р-р-р-чу

Re: Копилка полезных скриптов и команд

« Ответ #4 : 01 Июнь 2011, 12:25:32 »

Цитата: Brego от 01 Июнь 2011, 10:57:12

только в команде links, а не links2

Работает с links (проверено ) , а выбрал links2, потому что он может отображать графику будучи запущен с ключом -g.
А насчет
нечитаемости могу поспорить - на вкус и цвет товарищей как говорится...
Я например "расшифровываю" регулярку так:
найти строки, которые начинаются с любого количества любых символов
'.*' в которых после 5-ти пробелов идет какая-либо большая буква из ПВСЧАТОНБГ или "(" (скобка)'     [ПВСЧАТОНБГ(]'или '\|' несколько (одна и больше) '\+' цифр со знаком ":"(двоеточие) '[0-9]\+:' после которых (букв или цифр) 'внутренние скобки \(...\)' не будет пробела '[^ ]' и заменить их 's/' только на окончание строки (т.е. после букв или цифр) 'внешние скобки \(...\).../\1/' и показать только те строки, где была выполнена замена, за исключением строк, где после буквы П идет р или после С идет т '[П][^р]\|[С][^т]'.

« Последнее редактирование: 01 Июнь 2011, 12:31:23 от Azure »

Записан

UncleHex

  • Глобальный модератор
  • Пользователь
  • Сообщений: 68
  • Карма: +33/-1
  • βṟåȊﬨṦțØƦɱęṟ

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
  • Обычно я му-р-р-р-чу

Переименование - 2 скрипта

« Ответ #6 : 01 Июнь 2011, 13:33:48 »

Цитата: UncleHex от 01 Июнь 2011, 12:35:10

Код: [Выделить]

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
  • Перебьемся

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
  • Обычно я му-р-р-р-чу

Re: Копилка полезных скриптов и команд

« Ответ #9 : 02 Июнь 2011, 16:03:18 »

Цитата: Brego от 01 Июнь 2011, 14:17:22

можно ли еще короче (без сторонних программ)

Если "без сторонних" (не знаю короче или нет )

Код: [Выделить]

aptitude search ~i

Будьте внимательны:

  1. в коде ~("тильда" - буква Ё на англ.раскладке), а не "тире".
  2. вывод команды будет очень большой (более 1500 строк) так что по конвейеру сразу что-то с ним делайте

Цитата: EagleStars от 02 Июнь 2011, 02:57:20

Я, к примеру плохо запоминаю команды.

А интернета вдруг нет? Найти слово в описании программы

Код: [Выделить]

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
  • Перебьемся

Re: Копилка полезных скриптов и команд

« Ответ #11 : 02 Июнь 2011, 20:52:50 »

Цитата: Azure от 02 Июнь 2011, 16:03:18

Цитата: Brego от 01 Июнь 2011, 14:17:22

можно ли еще короче (без сторонних программ)

Если "без сторонних" (не знаю короче или нет )

Код: [Выделить]

aptitude search ~i

Если вместе с описанием, то да, действительно короче

Цитата: Azure от 02 Июнь 2011, 16:03:18

...вывод команды будет очень большой (более 1500 строк) так что по конвейеру сразу что-то с ним делайте

Это у кого-то, может, более 1500, а у некоторых уже за 2000 

Маленькое прим. по поводу манов. Хочу отметить проект Дмитриева (при поддержке Костромина)
HuMan, даже то, что уже сделано, очень полезно новичкам, а иногда и не только новичкам.

Записан

"Следующая эпоха началась с сожжения всех хроник вместе с хронистами". С. Лем

Brego

  • Ветеран
  • Сообщений: 566
  • Карма: +93/-1
  • Перебьемся

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
  • Перебьемся

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-


 
MyTetra Share v.0.52
Яндекс индекс цитирования