www.blogspot.com
ubuntuzer
ubuntu/linux: советы и решения
1	http://ubuntuzer.blogspot.com/2011/12/blog-post.html	удаление лишних пробелов в конце строки	2011-12-28T23:51:09.441+04:00	tag: sed endoftag tag: утилиты endoftag 	Задача из области написания кода. Часто случается так, что в конце строки образуются лишние пробелы. Как их быстрее всего увидеть и удалить? Приходит на помощь sed.На первый взгляд, задача тривиальна:sed -ri 's/\s+$//g' foobarНо есть в ней одна засада. Если исходный файл foobar имеет переводы строк системы DOS/Windows (т.е. два символа CR-LF), то символ \r в unix системах будет трактован тоже как пробел и соответственно удален. В итоге вместе с пробелами поменяются и переводы строк. Что может быть нежалательно.Правильнее будет сделать так:sed -ri 's/ +(\r)?$/\1/g' foobarВ данном случае мы запоминаем, был ли в конце строки символ \r и заменяем последовательность пробелов (именно пробелов, а не вообще пробельных символов) на этот символ (или его отсутствие, если исходный файл с переводами *nix).Ну и еще пара моментов. Флаг -r, расширенные регулярные выражения, просто чтобы не писать лишние бэкслеши. Флаг -i замена файла in-place, т.е. и поток будет прочитан из файла и записан в него же.Ну и наконец команда, чтобы выполнить данную операцию для всех файлов директории.find . -name '*.java' -exec sed -ri 's/ +(\r)?$/\1/g' \{\} \;
2	http://ubuntuzer.blogspot.com/2011/11/postgres.html	смена пароля postgres	2011-11-28T11:14:16.314+04:00	___	Если забыт пароль рутового пользователя postgres.1. Редактируется конфиг postgres для входа без пароля. vim /etc/postgresql/version/main/pg_hba.confДолжна быть строчка:local all postgres ident sameuser2. Перезапускаем сервис:service postgresql-version restart3. Логинемся в postgres:sudo su postgres -c psql template4. Меняем пароль:ALTER USER postgres with PASSWORD 'password';5. Меняем строчку в pg_hba.conf обратно. Например:local all postgres md5 sameuser
3	http://ubuntuzer.blogspot.com/2011/11/blog-post.html	Тестирование скорости записи	2011-11-18T22:33:59.829+04:00	tag: система endoftag 	Случайно наткнулся, отличная заметка как узнать скорость записи на диск в linux.http://romanrm.ru/en/dd-benchmark
4	http://ubuntuzer.blogspot.com/2011/07/bash.html	"Пул" процессов в bash	2011-07-14T12:09:14.479+04:00	tag: решения endoftag tag: утилиты endoftag 	Интересный способ имитации пула процессов найден с помощью команды xargs.Известно, что эта команда может выполнить некую процедуру для каждого элемента из входного списка (stdin). Оказывается, она способна выполнять процедуру не последовательно для каждого элемента, а поддерживать выполнение заданного количество копий. Т.е. если на входе у нас 1 2 3 4 5 6 7 8 9 10 и мы хотим одновременное выполнение 4 процессов, то xargs сразу же запустит 4 процесса для 1 2 3 4 и как только кто-то из них завершит выполнение запустит новый уже с аргументом 5 и так далее.Очень удобно, на самом деле, в некоторых случая. В общем, все просто - опция --max-procs.
5	http://ubuntuzer.blogspot.com/2011/05/spare.html	Создание "разреженного" (sparse) файла	2011-05-05T22:54:39.607+04:00	tag: решения endoftag 	Для виртуальной машины требуется создать образ диска в файле. Чтобы это быстрее сделать (если образ большой), и файл занимал меньше места на диске, можно создать "разреженный" файл. Делается так:dd if=/dev/zero of=myimage.img bs=1 count=0 seek=16GВ данном случае размер образа 16G, но пока он не будет использован, на диске места он не займет.
6	http://ubuntuzer.blogspot.com/2011/05/mc.html	Подсветка типов файлов в mc	2011-05-05T22:49:39.908+04:00	tag: решения endoftag 	В относительно свежих версия ubuntu, например, в стабильной 10.04 у mc поломана функция раскраски файлов разных типов. Починяется так:apt-get source mcsudo cp mc-4.7.0/misc/filehighlight.ini /usr/share/mcЕсли не работает apt-get source нужно поставить пакет dpkg-dev
7	http://ubuntuzer.blogspot.com/2011/02/midnight-commander.html	midnight commander и двойной путь	2011-02-21T11:58:00.445+03:00	___	Midnight Commander дважды выводит путь своей командной строке (та что снизу). Если путь получается длинный -  то он начинает занимать всю ширину экрана, а на собственно команду не остается места. Сей глюк проявляется только в терминальный программах (в консоли все отлично).Решение найдено на убунтовском форуме.
8	http://ubuntuzer.blogspot.com/2010/10/blog-post_29.html	Звук по завершении долгой консольной команды	2010-10-29T15:48:43.419+04:00	tag: терминал endoftag tag: утилиты endoftag 	Допустим, нужно выполнить в терминале команду, которая выполняется достаточно долго, чтобы ее дожидаться ничем больше не занимаясь. В тоже время, бывает такая потребность, что как только команда выполнится нужно сделать какое-то следующее действие. Ну и вообще, просто чтобы не забыть, что она вообще там выполняется.Придумано такое решение. Можно в командной строке указать, что после требуемой команды выполнить еще одну, которая ... подаст звуковой сигнал!В простейшем случае воспроизвести звук из терминала можно командой beep. Чтобы не спутать звук, с обычным сигналом bell из терминала, в параметрах beep можно указать длительность и частоту звука. Звук будет воспроизведен через встроенный динамик (pc speaker).Пример:do_time_consuming_task; beep -f 1000 -l 500 -r 3upd В xterm обнаружилась интересная функция. Называется PopupOnBell, в простейшем случае активируется при запуске с ключом -pob. В таком режиме, если на терминал выводится символ ASCII BELL (код 0x07 или 8-ричный 007), то окно терминала уведомляет менеджер о наличии активности (точно не знаю как назвать), после чего Desktop Manager, например, Gnome отображает кнопку такого окна на панели задач мигающей (примерно так, как если свернутый Instant Messanger получает новое сообщение).Соответственно, можно, например, чтобы каждый раз, как shell в терминале получает управление (выводит приглашение) терминал сообщал о активности.PS1="\\007$PS1"sleep 5Если выполнить эти команды, а потом свернуть окно xterm, то через 5 секунд оно замигает в панели задач.upd #2 Аналогичное решение для gnome-terminal.
9	http://ubuntuzer.blogspot.com/2010/10/xargs.html	Длинная командная строка через xargs	2010-10-20T16:57:43.311+04:00	tag: утилиты endoftag 	Иногда приходится выполнить команду с таким количеством аргументов, что '*' (звездочка) уже не работает - shell пытается создать слишком длинную командную строку. Выход - разбить список на несколько более мелких и выполнить команду для каждого из них. В том числе и для этого создана команда xargs.Она получает список из stdin и выполняет переданную ей команду подставляя список в качестве ее аргументов. Для разбития списка на куски есть разные опции (-n или -s).Но до сего момента я не подозревал, что список аргументов может быть не в самом конце нужной команды, но и в любом месте.Для примера. Если нужно скопировать кучу файлов и cp * &lt;dest&gt; не работает. Пробуем писать:ls * | xargs -n 1000 cp /destИ оно тоже не будет работать, потому как список аргументов от xargs будет подставлен в конец команды cp и в итоге будет выглядеть примерно как:cp /dest arg1 arg2 ... argnКак поместить список аргументов в нужное место? А вот это в man'е не совсем очевидно при первом прочтении. А в итоге нужно делать так:ls * | xargs -n 1000 -I FILES cp FILES destЧто тут происходит? Опция -I сообщает xargs, что если подстрока 'FILES' встретится где-либо в части исполняемой команды (initial arguments), то именно в это место и нужно раскрыть список аргументов из stdin.
10	http://ubuntuzer.blogspot.com/2010/10/blog-post.html	Консольная мышь	2010-10-18T11:42:22.684+04:00	___	Заимев в пользование IP-KVM, осознал потребность в консольной мыше. Для этой цели в ubuntu наличествует пакет gpm.apt-get install gpm
11	http://ubuntuzer.blogspot.com/2010/04/blog-post.html	Удалить старые файлы и папки в корзину	2010-04-02T16:37:18.368+04:00	___	Надоело чистить папку downloads руками? Можно добавить в crontab такую строчку:/usr/bin/find /home/user/downloads/ -maxdepth 1 -ctime +30 -exec trash {} ;Действует она просто - удаляет в коризну все файлы старше 30 дней из подкаталога downloads домашнего каталога. У меня настроен ее запуск при перезагрузке.
12	http://ubuntuzer.blogspot.com/2010/02/blog-post.html	Считать пароль с клавиатуры	2010-02-10T14:29:19.047+03:00	tag: bash endoftag 	Как считать некий текст с клавиатуры, без его отображения на терминале? Для этого у внутренней bash'евской команды read есть специальный ключ -s (silent). Если в качестве последнего аргумента не указано имя переменной, куда нужно поместить результат, то результат помещается в переменную REPLY.А нужно это было примерно для такого:read -s && adduser2custombase.pl newuser $REPLYПосле выполнения в терминале этой строчки приглашался пользователь, который задавал свой пароль.
13	http://ubuntuzer.blogspot.com/2009/12/blog-post.html	посчитать кол-во некоторого символа в файле	2009-12-10T16:08:26.853+03:00	tag: текст endoftag 	Допустим, ищем количество запятых (,) в файле. Нашел в интернете несколько решений:awk '{c+=gsub(s,s)}END{print c}' s=',' input.txtgrep -o \, input.txt | wc -ltr -dc \, 
14	http://ubuntuzer.blogspot.com/2009/11/uuid.html	Обновить список UUID дисков	2009-11-12T09:05:44.608+03:00	tag: железо endoftag tag: мелочи endoftag 	Если создать новый раздел на диске, то список UUID известных ядру не обновляется. Т.е. несмотря на то, что UUID уже есть (как посмотреть), раздел не монтируется по идентификатору. Чтобы список UUID обновить нужно выполнить команду:udevtrigger
15	http://ubuntuzer.blogspot.com/2009/10/blog-post_26.html	Посчитать количество повторяющихся строк	2009-10-26T15:53:22.154+03:00	tag: мелочи endoftag 	Например, есть файл с таким содержимым:ABACBAНужно получить такое:A - 3B - 2C - 1Можно это сделать с помощью awk, но еще проще сделать с помощью утилиты uniq с ключом -c.
16	http://ubuntuzer.blogspot.com/2009/10/unix.html	сконвертить секунды unix в человеческий формат	2009-10-21T13:56:57.375+04:00	tag: мелочи endoftag 	Как, например, преобразовать число 1256118655, являющееся количеством секунд с начала Эпохи в нормальное представление?Вот такой командой:date -d @1256118655Т.е. - отобразить (-d) дату, заданную строкой @1256118655. Здесь именно '@' указывает, что исходное число - unix time. А в man date об этом не сказано. Но зато сказано в info date. В этом отличие команды GNU date от аналогичной в BSD. Там формат исходой даты можно задавать явно, а в линукс команда в большинстве случае догадывается и парсит его сама, за исключением вот таких особых случаев, когда ей нужно явно на это намекнуть.
17	http://ubuntuzer.blogspot.com/2009/10/blog-post.html	Рекурсивное назначение прав для директорий	2009-10-06T10:17:32.111+04:00	tag: мелочи endoftag 	Если нужно раздать права для всего дерева, но чтобы атрибут "x" прописался только для директорий можно использовать такую команду:chmod -R +rwX somepath/Раньше я пользовался для этих целей чуть более сложной конструкциейfind somepath/ -type f -exec chmod +rw \{\} \;find somepath/ -type d -exec chmod +rwx \{\} \;
18	http://ubuntuzer.blogspot.com/2009/07/32-bit-x64-ubuntu.html	32-bit приложения на x64 ubuntu	2009-07-16T10:19:56.671+04:00	tag: мелочи endoftag 	Чтобы был возможен запуск старых бинарных 32-битных приложений под 64-битной убунтой нужно доустановить мета-пакет ia32-libs.
19	http://ubuntuzer.blogspot.com/2009/07/blog-post_15.html	самосборные модули ядра	2009-07-15T17:16:45.960+04:00	tag: ядро endoftag 	Пытался поставить ubuntu на сервер с Intel'овской платой (S5500BC), но оказалось, что имеющийся на плате soft-raid не поддерживается даже самой свежей версией ubuntu (не говоря уж о 8.04 LTS, которая не увидела даже DVD-дисковод).На сайте Intel драйвера только для RedHat/SuSE. Однако, оказалось, что драйвер можно пересобрать и для другого конкретного ядра. Итак, вот такие шаги:Скачал и распаковал драйверПрочитал The Linux Kernel Module Programming Guide откуда понял, что в прилагающемся Makefile не хватает собственно двух строк:all:       make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modulesclean:       make -C /lib/modules/$(shell uname -r)/build M=$(PWD) cleanС первой попытки компиляция не удалась. Смысл я до конца не понял, но двух словах - версии ядра в убунту в пределах релиза не увеличиваются, хотя фичи в них встраивают новые, от свежих ядер. Нашел в исходниках директивы условной компиляции, где проверялась версия ядра, исправил циферки, чтобы "как бы старое" ядро распознавалось как "как бы новое". После этого все собралось.Копируем файл в модули (в моем случае /lib/modules/&lt;kversion&gt;/kernel/drivers/scsi/)Выполняем depmod -aВ-принципе, все. Если бы это был модуль не-дискового устройства. Для дисковых устройств нужно поместить модуль в initramfs. Для этого в /etc/initramfs-tools/initramfs.conf меняем MODULES=most, на MODULES=list, а в файл /etc/initramfs-tools/modules помещаем список все нужных модулей (можно посмотреть на работающей системе через lsmod).Потом нужно пересобрать initramfs образ командой update-initramfs -u.Комментарии:Собирать драйвер можно на уже работющей системе с таким же ядром (к счастью у меня такая машина была)Понятно, что если корневая система на изначально доступном блочном устройстве, то помещать модуль в initramfs не обязательно, можно просто прописать его загрузку в /etc/modules)
20	http://ubuntuzer.blogspot.com/2009/07/blog-post.html	Программное перемещение в корзину	2009-07-07T11:56:04.805+04:00	tag: утилиты endoftag 	Нашел такой пакет - trash. Позволяет управлять корзиной из скриптов. Таким образом настроил автоматическое удаление старых файлов из downloads в корзину.
21	http://ubuntuzer.blogspot.com/2009/05/2.html	Мониторинг системы 2	2009-05-05T15:33:04.476+04:00	tag: администрирование endoftag tag: система endoftag 	Утилита sar, о которой я уже упоминал собирает довольно большой набор статистики, но результаты доступны для просмотра только в текстовом виде. Удобнее, по крайней мере часть этих данных, отображать в графической форме. Нашел скрипт sar2rrd.Позволяет создавать на основе текстового вывода команды sar три набора файлов - rrd, xml и png. В png содержаться уже готовые графики. В качестве аргументов указывается диапазон времени, за который будет построен график, интервал агрегации данных ну и собственно по каким подсистемам (процессор, память, сеть) строить графики и какие параметры из доступных с помощью sar на них отображать.
22	http://ubuntuzer.blogspot.com/2009/04/blog-post.html	имя файла, путь, расширение	2009-04-21T22:36:19.623+04:00	tag: bash endoftag tag: файлы endoftag 	Полезно при написании скриптов на bash, которые конвертят и/или переносят файлы.Имеется полное имя файла. Как извлечь разные его компоненты (отдельно путь, имя с раширением, имя без расширения, отдельно расширение)foo=/tmp/my.dir/filename.tar.gzpath = ${foo%/*}file = ${foo##*/}base = ${file%%.*}ext = ${file#*.}При этом получается следующее:path=/tmp/my.dirfile=filename.tar.gzbase=filenameext=tar.gzПервые два выражения аналогичны командам dirname и basename соответственно.источник
23	http://ubuntuzer.blogspot.com/2009/03/gedit.html	кодировки в gedit	2009-03-19T09:51:52.074+03:00	tag: i18n endoftag 	Как упростить работу в gedit с файлами в разных кодировках?С помощью gconf-editor расширить список кодировок в ветке /apps/gedit-2/preferences/encodings/auto_detectedУстановить специальный плагин, позволяющий менять кодировки на лету. Плагин нужно распаковать в ~/.gnome/gedit/plugins и активировать в gedit (Edit --> Preferences --> Plugins --> Encoding)Подсмотрено здесь:кодировка в текстовом редакторе Gedit
24	http://ubuntuzer.blogspot.com/2009/03/excel-openoffice.html	Документы Excel, OpenOffice и кодировка	2009-04-21T22:35:54.271+04:00	tag: i18n endoftag tag: офис endoftag tag: решения endoftag 	В некоторых кривых Excel'евских документах русские символы при открытии их в OpenOffice Calc отображаются кракозябрами. Решение найдено такое:Скачивается дополнение CyrTools к OpenOfficeУстанавливается (Сервис->Управление расширениями->Добавить...). Дополнение проявляет себя как новый пункт главного меню (Кириллический документ)После открытия "кривого" документа в меню выбираем "Кириллический документ->Перекодировка документа->Латиница-1 в кириллицу"
25	http://ubuntuzer.blogspot.com/2009/02/blog-post.html	Добавить пользователя в группу	2009-03-13T15:09:03.608+03:00	tag: администрирование endoftag tag: мелочи endoftag 	Как добавить linux-пользователя в существующую группу?usermod -a -G admin userОзначает, что пользователь user будет добавлен в группу admin.UPD:Оказывается, данный ключик относительно свежий. На более старом линуксе (не ubuntu) совсем недавно обнаружил его отсутствие у команды usermod. Но во всяком случае, в последнем LTS релизе (8.04.2) данный ключ уже есть.А если ключ не поддерживается командой usermod, то для добавления в новую группу придется перечислить и все "старые"...
