FastNetMon

Показаны сообщения с ярлыком Bash. Показать все сообщения
Показаны сообщения с ярлыком Bash. Показать все сообщения

понедельник, 12 марта 2012 г.

Замена стандартного интерпретатора /bin/sh во FreeBSD 8.2 на что-либо нормальное

Собираем bash:
cd /usr/ports/shells/bash
make install clean; rehash

Меянем шелл заданному юзеру:
chsh -s /usr/local/bin/bash testuser

Источник: http://www.cyberciti.biz/faq/howto-set-bash-as-your-default-shell/

пятница, 7 октября 2011 г.

суббота, 9 июля 2011 г.

Обновление файлов и папок рекурсивно

Итак, есть задача - имеется некая файловая иерархия, где в корневой папке имеются и файлы и папки, в которых в свою очередь имеются вложенные файлы и папки. Кроме этого, имеется аналогичная файловая иерархия, но с только новыми файлами (файлы лежат как в корне, так и во вложенных папках). Задача - нужно из второй файловой иерархии скопировать все папки/файлы и в случае их наличия в первой - переписать их. Пусть первая иерархия - folder, вторая - folderpatch.


Первая попытка была в стиле:
mv folderpatch/* folder

Но в ответ меня встретило:

mv: cannot move `test1' to `../test1': Directory not empty
mv: cannot move `test2' to `../test2': Directory not empty
mv: cannot move `test3' to `../test3': Directory not empty

То есть, пропатчить файлы внутри папок не получится никак.

Но для cp преград нету!
cp -af folderpath/* folder

После этого измененные/новые файлы из папки folderpatch заменят файлы в корне папки folder, а также файлы во вложенных папках папки folder.

Источник: http://www.cafewebmaster.com/update-overwrite-files-and-directories-recursively-linux-mv-cp-commands

среда, 15 июня 2011 г.

Как просмотреть статус копирования команды dd?

Итак, есть долго работающая команда dd:

dd if=/dev/sdb3 of=/dev/zero bs=1M &

Как просмотреть, в каком состоянии сейчас копирование? Легко!

Узнаем pid процесса dd:
ps aux | grep dd
root 2 0.0 0.0 0 0 ? S< 09:54 0:00 [kthreadd] root 32228 17.0 0.0 5916 1624 pts/0 D 14:39 0:01 dd if /dev/sdb3 of /dev/zero bs 1M root 32239 0.0 0.0 4848 772 pts/0 S+ 14:39 0:00 grep dd




Посылаем процессу сигнал USR1:
kill -USR1 32228

В ответ на это dd выласт текущий прогресс копирования:
25289+0 записей считано
25288+0 записей написано
скопировано 26516389888 байт (27 GB), 417,757 c, 63,5 MB/c

вторник, 31 мая 2011 г.

Анализ числовых данных в Linux посредством num-utils

Довольно часто у меня рождались вот такие скрипты (ниже приведен пример скрипта для подсчета среднего арифметического) для анализа каких-либо чиловых данных:
cat file | perl -e 'for(<>){$a+=$_; $b++}; print $a/$b'

И таких скриптов было множество, найти среднее, найти наибольшее, найти наименьшее среди строк поданных на стандартный ввод - крайне типовая задача.

Разумеется, можно ее решить в лоб, например, найти наибольшее число в массиве можно следующим образом:
sort -g | tail -1
Наименьшее
sort -g | head -1
А вот со средним и суммой - сложности, тут в любом случае придется писать скрипт на каком-либо языке программирования. Либо... воспользоваться num-utils, которая предоставляет ряд чудесных утилит.

Устанавливаем:
apt-get install -y num-utils
Как результат мы получим целый комплкект отменных утилит для работы с числами:
dpkg -L num-utils | grep '/usr/bin/'
/usr/bin/numaverage
/usr/bin/numbound
/usr/bin/numinterval
/usr/bin/numnormalize
/usr/bin/numgrep
/usr/bin/numprocess
/usr/bin/numsum
/usr/bin/numrandom
/usr/bin/numrange
/usr/bin/numround

Сумма:
cat | numsum
1
2
3
6

12

Среднее арифметическое:
cat | numaverage
1
2
3

2

Наибольшее значение:
cat | numbound
1
4
6
1
444
5

444

Наименьшее значение:
4
1
0
1
3
444

0


Я привел лишь часть примеров, на самом деле, утилит больше, изучайте! :)

четверг, 19 мая 2011 г.

Самый простой способ выполнить команду в chroot

chroot /mnt /bin/bash -c 'ls -la /dev'
total 8
drwxr-xr-x 2 root root 4096 Mar 25 12:13 .
drwxr-xr-x 21 root root 4096 May 19 15:59 ..

Вот честно - стыдно, что сам до такого не додумался :(

понедельник, 9 мая 2011 г.

Как быстро узнать число ядер в Linux системе?

grep -c '^processor' /proc/cpuinfo
12

Debian: как избавиться от You have new mail in /var/mail/root ?

Поиски свои я начал с man bash:

MAILCHECK Specifies how often (in seconds) bash checks for mail. The default is 60 seconds. When it is time to check for mail, the shell does so before displaying the primary prompt. If this variable is unset, or set to a value that is not a number greater than or equal to zero, the shell disables mail checking.

MAIL If this parameter is set to a file name and the MAILPATH variable is not set, bash informs the user of the arrival of mail in the specified file.

Итого, на мой взгляд самый правильный путь обнулить переменную MAIL.

Открываем конфиг файл:
vi /etc/profile

И добавляем там следующее:
# Disable You have new mail in /var/mail/root
unset MAIL

После этого потребуется закрыть ssh сессию и запустить заново.

CentOS: Waiting for driver initialization почему так долго?

Это не более чем баг: http://murty4all.wordpress.com/2010/09/29/fixing-waiting-for-driver-initialization-on-rhel-5-4-while-booting/

Почему sort так тормозит?

Дано - файл на 300 мб с кучей абсолютных путей в Linux, каждый на отдельной строке, присутствует юникод, задача - отсортировать как можно быстрее:

Стандартный подход
time sort -u /var/log/backup/2011-05-09.log > sort_standard

real 2m4.258s
user 2m3.716s
sys 0m0.344s

Хитрый вариант:
time LC_ALL=C sort -u /var/log/backup/2011-05-09.log > sort_fast

real 0m10.781s
user 0m8.965s
sys 0m0.548s

Результаты:
md5sum sort_fast
a1a339709059142d8700a2314481544b sort_fast

md5sum sort_standard
7a8ea0f6f1bdccc6fd0551b49aa3c99c sort_standard

wc -l sort_fast
295038 sort_fast

wc -l sort_standard
291784 sort_standard


ls -alh | grep sort
-rw-r--r-- 1 root root 30M 2011-05-09 02:55 sort_fast
-rw-r--r-- 1 root root 30M 2011-05-09 02:55 sort_standard

Подозрения, что побились имена в UTF-8 в результате такой сортировки, но не уверен, у кого идеи, как быстро это узнать?

Источник: http://ranadip.wordpress.com/2010/03/12/tech-trivia-linux-unusually-slow-performance-of-grepsortother-text-processing-commands/

воскресенье, 1 мая 2011 г.

Активация расширенного Bash completion в Debian

С тем, что Bash дополняет имя команды знаком каждый, например, написав apt-и нажав tab мы получим ряд вариантов:
apt-[TAB]
apt-cache apt-config apt-ftparchive apt-key apt-sortpkgs
apt-cdrom apt-extracttemplates apt-get apt-mark

Но кроме этого есть крайне удобная возможность - дополнение еще и аргументов команд. Но стандартно она не активна, поэтому активируем ее.

Устанавливаем нужный пакет:
apt-get install -y bash-completion

Активируем возможность автокомплита для всех пользователей системы глобально, добавляем строки перед строкой export PATH:
if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi


После этого отключаемся от ssh, подключаемся заново и пробуем новую функцию в деле:

test:~# apt-get up[TAB]
update upgrade
test:~# apt-get[TAB]
autoclean build-dep clean dselect-upgrade purge source upgrade
autoremove check dist-upgrade install remove update

Не правда ли, прекрасная фича? :)

Источники: http://www.howtoforge.com/how-to-add-bash-completion-in-debian и http://habrahabr.ru/blogs/sysadm/71525/

пятница, 25 марта 2011 г.

Как добавить свой путь в PATH на CentOS?

Открываем файл конфигурации:
vi /etc/profile

Находим строку "Path manipulation" и чуть нижее нее будет условный оператор, внутрь которого и нужно добавить наш дополнительный путь поиска бинарных приложений:
# Path manipulation
if [ "$EUID" = "0" ]; then
pathmunge /sbin
pathmunge /usr/sbin
pathmunge /usr/local/sbin
pathmunge /usr/StorMan # добавленный путь
fi

После этого выходим/входим в ssh сессию и приложения из добавленного пути станут доступны по именам команд, без использования абсолютных путей.

Источник: http://serverfault.com/questions/102932/adding-a-directory-to-path-in-centos

среда, 2 марта 2011 г.

Bash, pipe и код завершения программы

Всем известно, что такое код возврата программы, но далеко не все знают, по какому алгоритму возвращается код возврата, если несколько программ объединены в pipe (например, cat /var/log/ | grep | gzip > ... ). В данном случае Bash вернет код возврата только последней программы. То есть, если первая или вторая программы сбойнули, выдав код возврата 1 (повествующий об ошибки), но последняя программа выдала успех (нулевой код возврата), то вся pipe последовательность считается успешной и возвращается код нуль, повествующий об успехе.

Выглядит это так:
# false | true
# echo $?
0

Разумеется, это совершенно не адекватное поведение и мало кому такой расклад будет полезен. Поэтому новые версии Bash могут вести себя иначе, возвращать первый не нулевой код возврата, возникший в pipe цепочки. То есть, если отказала первая команда - будет возвращен ее код возврата, если вторая - ее, если третья, последняя, то ее.

Выглядит это так:
# set -o pipefail
# false | true
# echo $?
1

Вот такая вот фича :)

Источник: http://bclary.com/blog/2006/07/20/pipefail-testing-pipeline-exit-codes/

понедельник, 14 февраля 2011 г.

Конвертирование Windows переводов строки (^M) в Unix

Делается вот так легко:
perl -pi -e 's/\r\n/\n/g' file.txt

В частности для CGI приложений Windows переводы строки могут вызывать, например, проблему:
bash: ./install.cgi: /usr/bin/perl^M: bad interpreter: No such file or directory

Источник: http://www.cyberciti.biz/faq/howto-unix-linux-convert-dos-newlines-cr-lf-unix-text-format/

вторник, 18 января 2011 г.

Как узнать uptime процесса в Linux?

Узнаем PID нашего процесса (мне нужно было определить время жизни nginx воркера):
pid=`ps aux | grep nginx | grep worker | grep -v 'worker process is shutting down' | head -1 | awk '{print $2}'`

Запрашиваем время работы процесса:
ps -eo pid,etime | grep $pid | awk '{print $2}'

В ответ будет выдано время в формате (минуты):
26:05

Источник: http://stackoverflow.com/questions/2598145/how-to-retrieve-the-process-start-time-or-uptime-in-python

среда, 8 декабря 2010 г.

четверг, 18 ноября 2010 г.

Как отсортировать текст sort`ом в соответствие с номерами версий?

У sort новых версий (например, в Ubuntu 10.10) есть замечательный ключ -V, который работает вот так:
-V, --version-sort natural sort of (version) numbers within text

Допустим, у нас есть вот такие данные о версиях:
git tag -l | grep '2.6.35'
Linaro-2.6.35-1000.2
Linaro-2.6.35-1000.3
Linaro-2.6.35-1001.5
Linaro-2.6.35-1002.6
Linaro-2.6.35-1003.7
Linaro-2.6.35-1004.8
Linaro-2.6.35-1004.9
Linaro-2.6.35-1005.10
Linaro-2.6.35-1006.11
Linaro-2.6.35-1006.12
Linaro-2.6.35-1007.13
Linaro-2.6.35-1008.14
Linaro-2.6.35-1008.15
Ubuntu-2.6.35-1.1
Ubuntu-2.6.35-10.15
Ubuntu-2.6.35-11.16
Ubuntu-2.6.35-12.17
Ubuntu-2.6.35-13.18
Ubuntu-2.6.35-14.19
Ubuntu-2.6.35-14.20
Ubuntu-2.6.35-15.21
Ubuntu-2.6.35-16.22
Ubuntu-2.6.35-17.23
Ubuntu-2.6.35-18.24
Ubuntu-2.6.35-19.25
Ubuntu-2.6.35-19.26
Ubuntu-2.6.35-19.27
Ubuntu-2.6.35-19.28
Ubuntu-2.6.35-2.2
Ubuntu-2.6.35-2.3
Ubuntu-2.6.35-20.29
Ubuntu-2.6.35-21.30
Ubuntu-2.6.35-21.31
Ubuntu-2.6.35-22.32
Ubuntu-2.6.35-22.33
Ubuntu-2.6.35-22.34
Ubuntu-2.6.35-22.35
Ubuntu-2.6.35-23.36
Ubuntu-2.6.35-23.37
Ubuntu-2.6.35-23.38
Ubuntu-2.6.35-23.39
Ubuntu-2.6.35-3.4
Ubuntu-2.6.35-4.5
Ubuntu-2.6.35-5.6
Ubuntu-2.6.35-6.7
Ubuntu-2.6.35-6.8
Ubuntu-2.6.35-6.9
Ubuntu-2.6.35-7.10
Ubuntu-2.6.35-7.11
Ubuntu-2.6.35-7.12
Ubuntu-2.6.35-8.13
Ubuntu-2.6.35-9.14
Ubuntu-2.6.35-903.10
Ubuntu-2.6.35-903.11
Ubuntu-2.6.35-903.12
Ubuntu-2.6.35-903.13
Ubuntu-2.6.35-903.14
Ubuntu-2.6.35-903.15
Ubuntu-2.6.35-903.16
Ubuntu-2.6.35-903.17
Ubuntu-2.6.35-903.18
Ubuntu-2.6.35-903.19
Ubuntu-2.6.35-903.8
Ubuntu-2.6.35-903.9
v2.6.35

Читать крайне неудобно и непонятно, заюзаем sort -V:
git tag -l | grep '2.6.35' | sort -V
Linaro-2.6.35-1000.2
Linaro-2.6.35-1000.3
Linaro-2.6.35-1001.5
Linaro-2.6.35-1002.6
Linaro-2.6.35-1003.7
Linaro-2.6.35-1004.8
Linaro-2.6.35-1004.9
Linaro-2.6.35-1005.10
Linaro-2.6.35-1006.11
Linaro-2.6.35-1006.12
Linaro-2.6.35-1007.13
Linaro-2.6.35-1008.14
Linaro-2.6.35-1008.15
Ubuntu-2.6.35-1.1
Ubuntu-2.6.35-2.2
Ubuntu-2.6.35-2.3
Ubuntu-2.6.35-3.4
Ubuntu-2.6.35-4.5
Ubuntu-2.6.35-5.6
Ubuntu-2.6.35-6.7
Ubuntu-2.6.35-6.8
Ubuntu-2.6.35-6.9
Ubuntu-2.6.35-7.10
Ubuntu-2.6.35-7.11
Ubuntu-2.6.35-7.12
Ubuntu-2.6.35-8.13
Ubuntu-2.6.35-9.14
Ubuntu-2.6.35-10.15
Ubuntu-2.6.35-11.16
Ubuntu-2.6.35-12.17
Ubuntu-2.6.35-13.18
Ubuntu-2.6.35-14.19
Ubuntu-2.6.35-14.20
Ubuntu-2.6.35-15.21
Ubuntu-2.6.35-16.22
Ubuntu-2.6.35-17.23
Ubuntu-2.6.35-18.24
Ubuntu-2.6.35-19.25
Ubuntu-2.6.35-19.26
Ubuntu-2.6.35-19.27
Ubuntu-2.6.35-19.28
Ubuntu-2.6.35-20.29
Ubuntu-2.6.35-21.30
Ubuntu-2.6.35-21.31
Ubuntu-2.6.35-22.32
Ubuntu-2.6.35-22.33
Ubuntu-2.6.35-22.34
Ubuntu-2.6.35-22.35
Ubuntu-2.6.35-23.36
Ubuntu-2.6.35-23.37
Ubuntu-2.6.35-23.38
Ubuntu-2.6.35-23.39
Ubuntu-2.6.35-903.8
Ubuntu-2.6.35-903.9
Ubuntu-2.6.35-903.10
Ubuntu-2.6.35-903.11
Ubuntu-2.6.35-903.12
Ubuntu-2.6.35-903.13
Ubuntu-2.6.35-903.14
Ubuntu-2.6.35-903.15
Ubuntu-2.6.35-903.16
Ubuntu-2.6.35-903.17
Ubuntu-2.6.35-903.18
Ubuntu-2.6.35-903.19
v2.6.35

Очевидно, сортированный вариант намного удобнее :)