Как расшарить папку между гостевой и хост ОС в VirtualBox (Shared Folders)

Как как.. ну в мануале всё написано. Сначала как ни выкручивайся надо поставить Virtual Box Guest Additions. У меня нету оконного менеджера на девзоне, поэтому у меня были небольшие заморочки с этим. Ну,.. условно заморочки. Хост система - Windows 7, гостевая - Ubuntu 9.04 (32bit). Как было дело:

  1. Devices -> Mount CD/DVD-ROM -> CD/DVD-ROM Image
  2. Выбираем VBoxGuestAdditions.iso (лежит в папке с виртуалбоксом)
  3. sudo mount /media/cdrom0 
    cd /media/cdrom0 
    ls -la 
    
    Видим в списке файлик VBoxLinuxAdditions-x86.run (autorun.sh не заработает, потому что хочет gksudo, а иксов нету)
  4. Запускаем инсталятор дополнений руками
    sudo sh ./VBoxLinuxAdditions-x86.run
    
    И нифига не выходит потому что не установлен make, не установлены исходники ядра и ещё какая-то лабуда. Решаем эти проблемы при помощи гугла, kernel headers ставятся так
    sudo apt-get update 
    apt-cache search linux-headers-$(uname -r) 
    sudo apt-get install linux-headers-$(uname -r)
    
    Дальше всё что надо и не ставится идем в гугл и читаем как поставить. Всё тривиально, apt-get-ом. Эту итерацию выполняем до победы, пока установка дополнений не пройдет до конца без ошибок (ну, кроме матюгов по поводу того, что не установлены дополнения для иксов, а у нас их и нема, если консоль только, так что это не важно).
  5. Теперь, когда гостевые дополнения установлены делаем
    lsmod | grep vbox 
    modprobe vboxvfs # если lsmod не сказал что есть такое слово.
    
    То есть на этом этапе мы должны убедиться что дополнения установлены и модуль vboxvfs запущен. vboxvfs == VirtualBox Virtual File System видимо
  6. Теперь идем Devices -> Shared Folders и добавляем там папку с локального диска для того чтобы расшарить её с гостевой ОС. Выбираем папку которую хотим расшарить, имя шары для VirtualBox и тип доступа. Таким образом VirtualBox будет видеть эту шару по имени которое прописано в колонке Name (см рисунок). Причем клиент ОС видит новую шару сразу, без всяких перезагрузок.
  7. Теперь нашу шару надо подключить.
    cd ~ 
    mkdir my_shared 
    sudo mount.vboxsf virtbox_shared my_shared
    
    Таким образом мы прицепим шару с хост ОС E:\projects\virtbox_shared к папке ~\my_shared на гостевой ОС (см. рисунок). Дальше можно прописать это в fstab (virtbox_shared /home/ijin/my_shared vboxsf defaults 0 0) и бла-бла-бла, уже понятно. Ну вот. И вся любовь. Целостностью файловых систем озадачивается VirtualBox и я склонен ему доверять. Шара с вирт машиной - удобная штука. По идее можно вообще локально держать софт а выполнять на виртуальной машине если грамотно структуру проекта разложить. Там конечно, как всегда есть свои нюансы, но это уже отдельная история.
это список shared folders для VirtualBox

VirtualBox shared folders

The Regex Coach, программа для отладки регулярных выражений

Наверное у многих веб-разработчиков (и не только) есть проблема с тестированием больших и сложных регулярок которыми они как-то обрабатывают рабочий контент. Мне приходится делать это постоянно и иногда выражения бывают трудно воспринимаемы просто одной головой. Вот в этой ситуации мне обычно помогает Regex Coach. Он просто подсвечивает участки которые попадают под выбранное условие. На примере показан простенький реплейс подстроки при помощи регулярки (понятно он же match). Очень удобная штука. Обновлялась в 2008м году. Скачать можно здесь. Интерфейс не выделяется ничем, но оно и не нужно. Обычная рабочая лошадка. Интересно есть ли другие похожие разработки.

основное окно программы

regex coach

bash-скрипт для резервирования данных

Писался на коленке при помощи гугла. Цель была зарезервировать список папок и список БД mysql с одного хоста.

#!/bin/bash
##################### config
dirs_to_save="/home/ci1.loc /home/smarty /home/TTT"
my_dir_for_backups="/home/captain/backups"
mysql_databases_to_save="content mysql test"
mysql_user_name="root"
##################### /config
target_dir=`date +%F`
backup_dir="$my_dir_for_backups/$target_dir/"
echo "
-------------------------------------------------------------------
ijin reserv_copy script v.1.1 | Wed 02 Sep 2009 02:53:30 PM MSD
hello at: "`date`"
i'll save dump to: "$backup_dir"
-------------------------------------------------------------------
"
# create dir for current dump
mkdir -p $backup_dir
echo "dumping directories: 
--------------------"
# pack all src dirs
for cur_dir in $dirs_to_save; do
   dst_file=${cur_dir//\//-} # change slashes to -
   dst_file=$backup_dir${dst_file/-/}".tar.gz" # remove first - and create full dst file name
   echo $cur_dir" -> "$dst_file 
   tar -czf $dst_file $cur_dir &> /dev/null # no output from tar
done
read -s -p "
enter pass for mysql please: " MYSQL_PASS
echo "
dumping databases: 
------------------"
# pack all src databases
for cur_db in $mysql_databases_to_save; do
    dst_file=$backup_dir$cur_db".sql"
    echo $cur_db" -> "$dst_file 
    mysqldump -u $mysql_user_name --password=$MYSQL_PASS $cur_db > $dst_file 2> /dev/null ### hide error messages
    if [ $? != 0 ] ### result of execution of mysqldump
    then
        echo "=> WARNING: can't dump database. Check login:pass and privileges."
        unlink $dst_file
    else
        echo "=> OK: "$cur_db" dumped ok. I'll gzip it now.."
        gzip $dst_file
    fi
done
echo "
-------------------------------------------------------------------
all done.
bye at: "`date`"

"
sleep 1
Естественно прав на папки и базы у пользователей должно хватать. Вывод будет примерно такой:
bash script

Plink: remote host MySql access via ssh

Задача простая. Есть удаленный хост с MySql. Удаленные подключения запрещены. Локальные для нашего пользователя разрешены. Таким образом как нам получить на свою машину доступ к удаленному хосту через какой-нибудь графический MySql клиент, а не только через консоль в шелле (самая надежная безглючная фигня кстати и лучше с боевой БД работать именно через неё, ага). Для этого cуществует утилита plink. Она поможет нам пробросить шелл соединение и забиндить под него локальный порт. Делается это просто. Делаем батничек lala.bat в нем пишем:
REM plink -N -L local_port:remote_localhost:remote_port remote_host_user@remote_host

plink -N -L 4500:localhost:3306 lala@lala-host.ru

Где:

  • lala - имя юзера
  • lala-host.ru - ваш хост
  • -N - не стартовать шелл, коммандная строка не нужна
  • -L - [listen-IP:]listen-port:host:port форвард локального порта на удаленный адрес
Для linux тоже самое будет немного иначе
ssh -N -f -L local_port:remote_localhost:remote_port remote_host_user@remote_host

В примере мы вешаем на свою локальную машину, на порт 4500 коннект к удаленному 3306 порту мускуля через ssh соединение. Потом берем любой клиент для бд и подключаемся к локалхосту на порт 4500. И все дела. Естественно должен быть шелл-доступ к удаленному хосту с мускулем и plink должен оставаться запущенным и авторизованным на время работы с бд.

Рекурсивный chmod только для папок (или только для файлов)

Как? Погуглив... Нашел. Оказалось совсем несложно, как обычно..

# для директорий используем -type d 
cd
/home/target_dir
find
. -type d -exec chmod 755 {} \;  

# для файлов -type f

cd /home/target_dir
find
. -type f -exec chmod 644 {} \;  

# по маске имени с параметром -name
cd
/home/target_dir
find
. -type f -name '*.htm*' -exec chmod 644 {} \;  

# для наглядности можно выполнить

find
/home/target_dir/ -type f -name '*.php' -exec echo '-- '{} \;
Хороший человек объяснил подробности. ";" - терминатор екзека и шелла одновременно, поэтому его в шелле надо заэксейпить. Ну а "{}" результат файнда построчно.