Про Linux
Ноя. 21, 2011
Сент. 13, 2011
11:52 pm - mkfifo foo; script -f foo
www.commandlinefu.com
mkfifo foo; script -f foo
Share your terminal session real-time
One person does "mkfifo foo; script -f foo" and another can supervise real-time what is being done using "cat foo".
Июл. 8, 2011
12:26 pm - "while read" да плюс "$RANDOM"
Ask: Добрый день!!!
I'm: Добрый
Ask: начал вчера писать скрипт
Ask: но упёрся в то, что не знаю как считывать, например в цикле, из текстового файла строку за строкой и брать каждую для обработки в скрипте.
Ask: и прекратить это дело, когда строки в исходном файле-списке кончатся.
I'm: cat FILE.txt | while read STR;do Чего нить с переменной STR делать;done
Ask: О!
Ask: Так просто!!!
Ask: Попробую..
I'm: можно еще так:
cat FILE.txt | while read STR1 STR2 STR3;do ...
Тогда строки будут разбиватся по пробелу
I'm: плюс как пример:
cat /etc/passwd| while IFS=":" read Name x Uid Gid Comment Home Shell; do echo $Name - $Home;done
Ask: Это можно бесстрашно попробовать?
I'm: да
I'm: попробывать и проанализировать)
Ask: Хорошо. СПАСИБО!
...
Ask: да, цикл с passwd интересный
Ask: но не понимаю что такое IFS?
I'm: InputFieldSeporator - указываем таким образом разделитель другой (по умолчанию пробел и табуляция)
Ask: аааа.. прикольно. То есть такая предопределённая переменная в системе.
I'm: угу
Ask: ещё воевал с функцией случайной генерации числа, оказалось всё просто: $ RANDOM % 100 это кпримеру если нужен диапазон от 0 до 100
I'm: это диапозон от 0 до 99
I'm: $[$RANDOM%100+1] - это в диапозоне 1-100
I'm: на тему случаностей - есть еще команда shuf
I'm: cat FILE.txt | shuf -перемешает строки на выводе
cat FILE.txt | shuf -n1 - выведет одну случайную строку из файла
I'm: и $RANDOM сама в диапозоне от 0 до 32767 - стоит учитывать когда нужно из большего диапозона
Окт. 26, 2010
10:14 pm - Загрузчик
Ответ на вопрос: Как загрузчики определяют между собой какой из них будет использоваться?, особенно если присутствуют загрузчики от разных систем - от Linux и Windows, например.
Порядок загрузки следующий:
Шаг1) запускается то что в MBR.
Шаг2) А всё - нету стандартного шага второго - смотря что там в MBR, то дальше и работает...
В SUSE'ях щас по-умолчанию инстолятор делает такую схему:
- Например у нас на компьютере стоит Виндавс(для сложности картинки, да и для многих это описание действительности). Тогда у ней реализовано так: в MBR - dos'овский загрузчик, который смотрит какой раздел в таблице разделов помечен как bootable(или "активный" еще называют) и начинает грузить то что на этом разделе прописано загрузочном секторе(первые 512байт раздела). Там у Винды обычно(имхо, мне так долго кажется - но умных книг не читал, может у них там чего еще бывает) загрузчик ntloader (настройки, которого прописаны в C:\boot.ini).
- SUSE-инстолятор при установке, заменяет содержимое MBR таким же dos'ким загрузчиком как и описано выше (заменяет на всякий случай - мало ли вдруг там чего-то нето и ли вообще пусто).
- Дальше он метит раздел с Линухом как bootable. И ставит в загрузочный сектор этого раздела загрузчик(по умолчанию GRUB).
- В настройках GRUB'а прописывает как пункт запуска Линукса, так и пункт запуска загрузчика Виндавса(тот ntloader, который всё так же лежит в начале раздела Виндавс)
Вместо ранее:
Еще раз - это описана схема по-умолчанию, то есть можно при установке сделать всё совсем по другому.
Можно GRUB - ставить в MBR(я так обычно и делаю, так как не предпологаю сносить Linux(то есть и не удалятся настройки grub) и GRUB настраивеемее чем dos'кий загрузчик. ).
Можно даже в виндузовый boot.ini добавить пункт запуска Linux и не перетерать MBR. Но по мне - опять же GRUB более настраиваемый чем ntloader.
Если где про Винду обманул - поправьте

Окт. 16, 2010
01:02 pm - Куды Винды?
Попросили сегодня родственники виндавс на ноут поставить, ...а я отказался, хотя и хотел помочь.
И не потому, что "красноглазый линуксойд" и "вера" не позволяет)) - просто как далеко в прошлом от меня те знания как ставятся виндоус и какие бывают под неё антивирусы, Вордексель. Где это всё "сщастье" взять, да затем активировать, обновить... Жесть.
Даже желая помочь, при попытке подумать над выше перечислеными вопросами, понял что как же это сложно, да и абсолютно, неимоверно скучно. ...Вобщем не смог побороть внутреннее сопративление)))
Но ведь, влёгкую согласился бы поставить какой-нибудь доселе мне не известный дистрибутив Linux'а или BSD-unix'а(ну или чего-нить в этом роде - не закрытое)... потому что просто занятие интереснее, хотя разбиратся где софт брать и как ставить тоже бы пришлось.
Окт. 14, 2010
10:45 pm - ...выравнивает, ресайзит и раскидывает окна по рабочим столам...
Повесел себе кнопку на панель Gnome - которая выравнивает, ресайзит и раскидывает окна по рабочим столам - в соответствии с уже сложившимися взглядами "где им быть правильнее".
Примечания:
1)На нетбуке 1024x600 - можно было бы легко сделать унивирсальный скрипт под разные разрешения, но "ну нафиг - не хочу". Все равно у каждого к тому же еще свои предпочтения, что и где размещать. Скорее это инструкция "как сделать так же себе" для тех кому понравится идея.
2) установлен compiz - с треми(!) рабочими столами. Кому под куб - учитываете это.
3) пример частично урезаный список моих программ, причем правила по ходу использования скрипта всё еще добавляю.
4) нужные координаты, ширину, высоту окон определял следующим образом - раскидал окна "как надо" и "прошелся по ним" запущенной командой xwininfo.
#!/bin/bash
#Dc - определяю текущий рабочий стол
Dc=$(wmctrl -d | grep -o "VP: [0-9,]*" | sed "s/^VP: \([0-9]*\),[0-9]*$/\1/")
#D1, D2, D3 - координаты рабочих столов 1го, 2го и 3го.
D1=$[0-$Dc] # Буду использовать для браузера и аськи.
D2=$[1024-$Dc] # Для GIMP''а - с эго сложной многооконностью
D3=$[2048-$Dc] # Для "казуальной игрухи" - Wine и если запущена игруха - аську тогда здесь держу.))
# Смотрю список запущенных программ - и по каждой отедьно выделяю ID(уникальный индификатор окна - можно также его узнать, запустив xwininfo), Pid(индификатор процесса - это чтобы окна qutIM - выловить, так как по заголовку они сложно выявляются), Name(заголовок окна).
wmctrl -l -p | while read ID x Pid x Name;do
case "$Name" in
"Панель инструментов")
# GMP - Панель инструментов - широной 160
wmctrl -i -r "$ID" -e 0,$[$D2+665],0,160,583
;;
"Слои")
# GMP - Панель слоев - шириной 200
wmctrl -i -r "$ID" -e 0,$[$D2+824],0,200,583
;;
"GNU Image Manipulation Program"|*\(*\)*x*GIMP)
# GMP - основное окно - всю оставшуюся часть рабочего стола
wmctrl -i -r "$ID" -e 0,$[$D2+0],0,665,583
;;
"Default - Wine desktop")
# Wine-окно 800x600
wmctrl -i -r "$ID" -e 0,$[$D3+0],0,800,600
# Аська - занимает оставшуюся часть экрана
wmctrl -F -r "qutIM" -e 0,$[$D3+800],0,219,580
;;
"qutIM")
# Ничего - так как все операциии по его размещению переместил к Wine и браузеру
;;
*Mozilla\ Firefox)
# Если не запущен wine то аську запустить рядом с браузером
if ! wmctrl -l | grep "Default - Wine desktop" && wmctrl -l | grep "qutIM" ; then
wmctrl -F -r "qutIM" -e 0,$[$D1+919],0,100,580
wmctrl -i -r "$ID" -e 0,$[$D1+0],0,919,600
else
# Если не запущена аська - весь рабочий стол отдать браузеру
wmctrl -i -r "$ID" -e 0,$[$D1+0],0,1024,600
fi
;;
*)
# Окно сообщений qutIM'а - откурывать в том же экране где и сама "Аська" - заполняя остальную часть
[ "$Pid" -eq "$(pgrep qutim)" ] && {
X=$D3
W=800
wmctrl -l | grep "Default - Wine desktop" || { X=$D1; W=919; }
wmctrl -i -r "$ID" -e 0,$[$X+0],0,$W,600
}
;;
esac
done
# Повернуть compiz-куб(у меня три стороны) на то окно, которое было активным при нажатии. То есть если сидел в браузере - то при нажатии, всё поперемещалась и "куб" повернулся той стороной, где стал браузер
wmctrl -a :ACTIVE:
Верю что наверно(кто знает подвердите, а то может и нет) в tiling-оконныхМенеджерах что-нибудь подобное есть. Но иногда приятее "изобретать свой велосипед".
P.P.S. А потом подумал еще и создал файл /etc/acpi/events/my_keys:
event=hotkey (ATKD|HOTK) 0000001b
action=/path/to/script/my_wmctrl
Который теперь при нажатии на ноутбучную медийную кнопку всё это делает. Код клавиши(0000001b) узнал выполнив команду acpi_listen. Одно только смущает от root'а выполняется - надо "su -c" туда вставить внутрь.
P.P.P.S. Теперь не от root'a - по нажатию вызываю скрипт следующего содержания:
su - user -c "DISPLAY=:0 $(for i in DBUS_SESSION_BUS_ADDRESS XAUTHLOCALHOSTNAME XAUTHORITY;do cat /proc/$(pgrep gnome-session)/environ|tr "\0" "\n"|grep $i;done| tr "\n" " ") /path/to/script/my_wmctrl"
Окт. 2, 2010
12:07 pm - sopcaster - Просмотр интернет-TV
Уж пару лет как ставил одним знакомым програмку sopcaster для того чтобы смотреть интернетное телевидение, в частности футбольные матчи.
Утилита - консольная, с хитрым способом работы: вначале запускаешь
sp-sc URL localPORT
а затем подключаешся на этот локальный порт каким-нибудь видео-проигрывателем.
Заставлять делать такие телодвижения человека, который от командной строки очень далек, было не гуманно и поэтому тогда(пару лет назад) родился скрипт(про который сейчас вспомнил(всё это время человек им пользовался не реже раза в неделю, а во время чемпионатов, так и раз пять на дню) и решил выложить):
#!/bin/bash
URL="$(zenity --entry --text "Укажи URL:" --title SOPCASTer --width=300)"
/usr/local/sopcaster/sp-sc $URL 3908 8908 &> /dev/null &
smplayer http://localhost:8908/tv.asf
killall sp-sc
Комментарий:
Вешается это всё на кнопку(в меню или на панели, или еще куда).
При нажатии появляется менюшка с запросом sop-URL'я(по умолчанию, можно было б например вставлять туда предыдущую указанную ссылку(--text-entry), но тогда гляжу я этого не сделал).
Дальше запускается всё необходимое, в том числе проигрыватель, когда проигрыватель закроют - sopcaster также отключал.
Откуда качал sopcaster - не помню, но гугл показывает вполне достаточное количество ссылок - например:
http://www.linux.ryukent.co.uk/show.php?i
Сент. 23, 2010
08:59 pm - youtube-ролик
Для выкачивания роликов с youtube использую утилиту youtube-dl
Сент. 22, 2010
08:51 pm - Прогресс выполнения команды
Писал скриптик для обработки файлов и как всегда добавил отображения прогресса выполнения, но в этот раз подумал "А почему бы не выводить его в той же строке, где и вызвал скрипт - там же еще куча свободного места".
Итого:
Покрупнее
Запускаю скрипт и он выводит: номер_обрабатываемого_файла (общее_количество_файлов) [процент_выполненого]
Сделано это так:
#!/bin/bash
A=0;
N=$(ls $Dir | wc -l)
for i in $(ls $Dir | tail -n +$A); do
let A++
echo -e "\033[1A\033[30CОбработано: $A($N) [$[$A*100/$N]%]"
команды_обрабатывающие_файл $i
done
Комментарии:
- A - счетчик файлов
- N - общее количество файлов
- \033[1A - поднятся на строку выше
- \033[30C - сдвинутся вправо на 30 символов
* конструкция "tail -n +$A" - нужна на случай, когда уже какое-то количество файлов в начале было обработано, тогда просто меняю вначале "A=0" на, например, "A=50", либо на "A=${2-0}" (то есть если указывать второй аргумент в команде - начинать с него)
* gif-ку делал так:
- узнал "window id" для терминала командой xwininfo. Вывело "...xwininfo: Window id: 0x3601b89 "Терминал"..."
- for i in {1..200}; do /usr/bin/import -display :0 -window 0x3601b89 scr_${i}.jpg;sleep 1; done - это создало кучу файлов scr_№.jpg
- convert $(ls scr*| sort -t_ -k2 -n) itog.gif
Сент. 17, 2010
02:02 pm - sort -R SOMEFILE
Вывод строк в случайном порядке
sort -R SOMEFILE
http://www.commandlinefu.com/commands/vi
Сент. 12, 2010
03:07 pm - Полезный "alert" через NotifyOSD
http://www.commandlinefu.com/commands/vi
Get notified when a job you run in a terminal is done, using NotifyOSD
This is an alias you can add to your .bashrc file to get notified when a job you run in a terminal is done.
alias alert='notify-send -i /usr/share/icons/gnome/32x32/apps/gnome-t
example of use:
sleep 20; alert
Сент. 8, 2010
10:19 am - ~/Desktop/
Бывает root'ом сохраняю какие-то файлы\папки на рабочий стол пользователя, а потом "мучаюсь " их удаляя или пытаясь отредактировать обычным пользователем. А решение вполне простое - сделать так, чтобы всё создаваемое на рабочем столе пользователя было ему доступно: chmod g+s /home/aonick/Desktop/ либо setfacl -d -m user:aonick:rwx /home/aonick/Desktop/
Авг. 29, 2010
01:54 pm - Ответ на вопрос: "Монохромная тема, а цветные иконка сильно выбиваются. Как можно заменить иконку?"
Можно всю директорию с иконками /usr/share/pixmaps - промонохромить
(на всякий случай - предварительно сделал бы её копию):
cp -r /usr/share/pixmaps /usr/share/pixmaps.bak
find /usr/share/pixmaps -type f -name "*.png" -exec mogrify -fx intensity {} \;
mogrify - утилита из пакета ImageMagick(нужно установить если нету)
А еще можно "промонохромить" /usr/share/icons/НазваниеТемыИконок и /usr/share/themes/НазваниеТемы
Да памятка для себя - иногда требуется:
----------------------------------------
Еще можно обесцветить так:
mogrify -modulate 100,0,100 pic.jpg
----------------------------------------
И в догонку: контраст увеличить:
mogrify -normalize -enhance -unsharp 0 pic.jpg
----------------------------------------
Авг. 3, 2010
10:04 pm - Время вместо done
Глупость, но всё же - уже привык. А так как исхожу из мнения, что к хорошему быстро привыкаешь, значит полезное.
Так как часы не сильно меня окружают, и как многие околокомпьютерные личности начинаю часто день с включения компьютера, а заканчивую - выключением. Постоянно посматривать на часы перед выключением или сразу после привело к мысли, что тут надо что-нибудь поменять.
Итого:
в /etc/rc.status (дистриб openSUSE 11.2):
rc_done="${stat}${done}done${norm}"
заменил на:
rc_done="${stat}${done}$(date +%T)${norm}"
Теперь вместо:
Starting MegaService
пишет:
Starting MegaService
Стало более информативно при включении и выключении компьютера.
Кстати в /boot/grub/menu.lst у меня "splash=verbose", чтобы видеть стандартный запуск Линукса, а не картинку bootsplash.
P.S. Перейду уж как-нибудь в ближайшее время на openSUSE 11.3 - на днях потестю и перейду.
Июл. 14, 2010
06:17 pm - перенаправление вывода
Вопрос: Есть возможность при перенаправлении вывода результатов команды в файл вначале вставить еще и саму команду?
Как вариант решения:
{
set -x
команда
} &> файл
Что такое "&>" написано в "man bash":
There are two formats for redirecting standard output and standard error:
&>word
and
>&word
Of the two forms, the first is preferred. This is semantically equivalent to
>word 2>&1
Пример: Команда:
{ set -x; ls $HOME; } > file.txt
выводит
+ ls -N --color=tty -T 0 /home/aonick
и сохраняет вывод команды ls в файл file.txt
Команда:
{ set -x; ls $HOME; } &> file.txt
и строку
+ ls -N --color=tty -T 0 /home/aonick
и вывод команды ls сохраняет в файл file.txt
Просто "set -x" - начинает еще по stderr выводить выполняемые "распарсенные" команды (кстати может "set -v" больше подходит по постановке задачи - вывод "нераспарсенных" команды) и чтобы он также писался в файл - пишу "&>".
P.S. Какже хорошо log'и аськи постить)
Июн. 8, 2010
07:22 pm - Бывает нужно скачать - за пару дней уже два раза понадобилось
eval $(cat main.html | egrep -o '(thumb|vkid|vtag|uid)\":"[^"]*'|sed 's/":"/=/')
host="$(echo $thumb|cut -d/ -f3)"
wget http://$host/as""sets/videos/$vtag$vki
_________________Скрипт(зашел на сайт, Ctrl-U, Ctrl-A и запустил этот скрипт)
eval $(xsel | egrep -o '(thumb|vkid|vtag|uid|md_title)\":"[^"]*
host="$(echo $thumb|cut -d/ -f3)"
md_title=$(echo $md_title| sed -e's/%\([0-9A-F][0-9A-F]\)/\\\\\x\1/g' | xargs -n1 echo -e | tr "+()" "_"|sed "s/\&[a-z]*;/-/g").flv
echo $md_title
wget "http://$host/u$uid/video/$vtag.360.m
Июн. 3, 2010
02:40 pm - Вывод ps
# Вывод списка процессов и их относительный приоритета указаного пользователя
## опция U - указывает для какого пользователя вывести
## опция o - определяет что выводить, в данном случае: pid процесса, относительный приоритет и имя команды
## опция h - не выводить заголовок
ps U $mUser o pid,ni,comm h
Просто писал скрипт, который всем процессам определенного пользователя уменьшает приоретет на заданное значение.
Июн. 2, 2010
12:37 am - В URL'ах заменить %20 на "пробел" и не только...
# echo http://ru.wikipedia.org/wiki/%D0%A7%D0%B
http://ru.wikipedia.org/wiki/Чего-то_на_
Май. 19, 2010
04:20 pm - Список процессов, проигрывающих звук в текущий момент (commandlinefu)
lsof | grep pcm
http://www.commandlinefu.com/commands/vi
Апр. 30, 2010
08:06 pm - [Полезность из инета] ввод Unicode-символа
Ctrl+Shift+u (появится u) затем Unicode-номер и Enter
Thanks to http://welinux.ru/user/booley
Мар. 29, 2010
05:57 pm - Запись видео с веб-камеры
Используя http://www.opennet.ru/tips/info/2000.sht
#!/bin/bash
f_rec(){
mencoder tv:// -tv driver=v4l2:width=640:height=480:device=
}
if pgrep mencoder; then
kill $(pgrep mencoder)
else
f_rec
fi
Теперь при нажатии пишит видео и звук с вебкамеры, а при повторном - прекращает запись.
Мар. 10, 2010
10:21 pm - Ты ещё не анализировал какими командами чаще пользуешься?
- спросил DzhidayРуслан
Грубо и не точно - ответ был получен так:
cat ~/.bash_history | tr "|;" "\n\n"|sed "s/^ //" | awk '{print $1}' |sort |uniq -c |sort -n -r
И из 1000 строк истории -в top'е:
172 grep
153 cut
123 vi
122 sed
93 for
93 echo
88 fold
77 tr
64 cat
А тут уж - можно и диагнозы ставить :)
Правда стоит заметить, что в одной строке истории у меня обычно несколько команд помещается. Прикольно выглядит следующая статистика(количество "пайпов" в одной строке):
cat ~/.bash_history | sed "s/[^|]*//g"|sort |uniq -c|sort -n |while read A B;do echo "$A $B <$(echo $B|wc -c)>";done
2 |||||||||||||| <15>
3 |||||||||||| <13>
3 ||||||||||||||| <16> - вот он рекорд (повторенный трижды) :)
5 ||||||||| <10>
8 |||||||||| <11>
9 |||||||| <9>
10 ||||||||||||| <14>
14 |||||| <7>
24 ||||||| <8>
26 ||| <4>
33 ||||| <6>
38 |||| <5>
52 | <2>
53 || <3>
720 <1>
Количество символов в среднем на комманду:
:) Команда в 576 символов - это да!))))), а в среднем порядка 17,584 символа на строку ))))
Вот такая вот статистика - и это причем не на серваке, и от не root'пользователя
Мар. 7, 2010
11:02 pm - Мелочи vim'а - замена и прогон через внешнюю команду
:1,$s/ЧтоМеняем/НаЧтоМеняем/gc - по всему тексту
:1,$! tr "a-z" "A-Z" - прогонит текст через команду, например замена букв нихнего регистра на верхнего
А еще очень удобно так - замена или прогон через команду в выбраном куске текста:
1)Нажимаем в командном режиме клавишу "v" - першли в "Визуальный режим"(причем "shift-v" - выбор строк, "Ctrl-v" - выбор блока текста).
2)Клавишами "верх", "вниз", "вправо", "влево" - выделяем нужный кусок текста текст.
3) Нажимаем ":"(для выполнения :s/ЧтоМеняем/НаЧтоМеняем/) или "!"(для :! команда) - и дописываем необходимое - витоге получаем что- то типа такого:
:'<,'>s/^/#/ - таким образом я закомментил выбраные строки(вставил символ "#" в начало строки)
Кстати разделитель не обязательно должен быть "/" часто удобно восродьзоваться каким-нить другим, например:
:1,$s|ЧтоМеняем|НаЧтоМеняем|g
Также про Vim уже писал ранее
02:27 am - Список URLов в октрытых сейчас tab'ах firefox
cat ~/.mozilla/firefox/*.default/sessionstor
потребовалось тут накачать всякого - после поисков в браузере открыто около 30 табов страниц скоторых нужно качать - вообщем после команды выше получаем список url'ов и скармливаю их уже другому скрипту.
Фев. 28, 2010
08:13 pm - Погода
wget -q --header='Accept-Language: ru' "http://www.google.com/ig/api?weather=Mo
Сплошная облачность -3
Вс -3 0 Местами солнечно
Пн 1 3 Местами солнечно
Вт -1 4 Снегопад
Ср -7 1 Местами солнечно
натолкнуло с http://boombick.org/blog/posts/90
Navigate: (Previous 25 Entries)