понеділок, 18 січня 2016 р.

Полезные ресурсы и книги

Век живи - век учись! Можно сюда ещё добавить кучу прописных истин в стиле "мастерами не рождаются, мастерами становятся" и так далее. Мало того, некоторым вещам нужно обучаться десятилетиями. И, конечно, совершенства достичь вряд ли возможно, но стремиться нужно. Я, к примеру, познакомился с миром *nix более 5 лет назад, но ежедневно "сидеть" на линуксах начал лишь 3 года назад. И за это время Я ещё до сих пор не собрал собственноручно ядро (а ещё поговаривают, что каждый линуксоид должен сам себе собрать ядро и настроить с нуля систему); Я также понимаю, что мне известна лишь малая часть этого мира, и края не видно. Да и запомнить нормально всё то, что уже проходил тоже сложно, поэтому этот блог Я создал отчасти для себя, чтобы не забыть некоторые вещи, всегда иметь в сети пример конфига vim, быстро расшарить файлы по сети и т.п., если вдруг что-то случится с моими нотатками и бекапами на собственном компьютере. Конечно, если работа связана с администрированием системы, сети, баз данных или ещё чего, то оно само собой будет учиться и запоминаться. А для обычного пользователя, который хочет наслаждаться работой и быть эффективным вполне достаточно даже десятой части этих знаний. В общем, хватит лить водичку, перейдем к делу.

Книги (некоторые есть лишь на английском, но это даже ещё полезней):
- Современные операционные системы Эндрю Таненбаум
Unix и Linux. Руководство системного администратора Эви Немет, Гарт Снайдер, Трент Хейн, Бэн Уэйли
- Linux in a Nutshelby Ellen Siever, Stephen Figgins, Robert Love, Arnold Robbins
Компьютерные сети. Принципы, технологии, протоколы Олифер В.Г., Олифер Н.А.
- Запускаем Linux Маттиас Калле Далхаймер, Мэтт Уэлш
- Ubuntu Pocket Guide by Keir Thomas

Ресурсы:
- Advanced Bash Scripting Guide
- 10 лучших команд на хабре
60 команд от новичка до администратора
- Форум Ubuntu

Для начала всего этого хватит сполна. А далее - учимся самостоятельно находить нужную информацию, регистрироваться на соотвествующих форумах, коректно задавать вопросы. Если же у вас есть предложения по ресурсах, добавляйте в комментариях - давайте делиться информацией :)

вівторок, 5 січня 2016 р.

Работа с sshfs

Как уже ранее упоминалось, в мире Linux есть много способов расшаривания/передачи файлов по сети (рассматривались Samba, FTP и HTTP). Знаем также, что можно безопасно "ходить" по разных хостах через ssh и копировать файлы через scp. Даже можно работать в Vim на своей машине с помощью netrw плагина, который автоматически при сохранении файла копирует его через один из транспортных протоколов, что настраивается (в том числе и через scp). Естественно, это сопровождается задержками при сохранении, так как каждый раз устанавливается новое соединение. А можно просто примонтировать себе удалённую директорию (структуру, файловую систему и т.п.) и работать с ней как с локальной директорией. Естественно, никто чужой не должен иметь доступ к точке монтирования, иначе зачем эта вся безопасность с ssh?
Итак, для начала вам надо установить sshfs (теоретически, оно должно автоматически подтянуть fuse, на котором sshfs базируется). Все нужные настройки и дополнительные пакеты смотрите для вашего дистрибутива; в основном далее достаточно себя добавить в группу fuse и всё.
Монтирование выполняется командой:

sshfs <-o опции монтирования> user@host:<путь> <точка монтирования>

А размонтирование:

fusermount -u <точка монтирования>

Это всё можно красиво завернуть в простой bash скрипт, дабы облегчить себе же работу (в данном случае, к удалённым хостам Я подключаюсь через SOCKS, проброс через порт 3128):
#!/bin/bash

USAGE="USAGE:\n\
        \t$0 mount|umount|remount <host_name>\n"

SSHFS_MOUNT_ROOT=/home/sergius/work/SSHFS

action=$1
host=$2

function mount_sshfs( ) {
    if [[ -z $host ]]
    then
        echo "Invalid arguments"
        echo -e $USAGE
        exit 2
    fi

    mkdir -p $host
    sshfs -o reconnect,workaround=all,ProxyCommand="/bin/nc.openbsd -x localhost:3128 %h %p" sergius@$host: $SSHFS_MOUNT_ROOT/$host/
}

function umount_sshfs( ) {
    fusermount -u $SSHFS_MOUNT_ROOT/$host
}

function remount_sshfs( ) {
    umount_sshfs;
    mount_sshfs;
}

if [[ $action == "mount" ]]
then
    mount_sshfs;
elif [[ $action == "umount" ]]
then
    umount_sshfs;
elif [[ $action == "remount" ]]
then
    remount_sshfs;
else
    echo "Invalid arguments"
    echo -e $USAGE
    exit 1
fi

exit 0

Сохраняем скрипт под именем "mount_sshfs" и делаем его исполняемым. Теперь монтируем командой (если находимся в директории, где скрипт, то путь начинается с точки):
./mount_sshfs mount home_comp
Где home_comp - имя моего домашнего компьютера. В большинстве случаев, далее вам пригодится только remount. Есть один недостаток (больше мне не встречалось) в sshfs: когда связь обрывается, а вы выполняли как раз какую-то операцию ввода-вывода - это может затянуться надолго, а уж после появится сообщение с ошибкой. Всегда можно прибить процесс, перемонтировать. В любом случае, это надо всё попробовать самому - лучше один раз пощупать, чем сто раз увидеть.
Да и вообще, sshfs существует уже довольно давно, а вот активно пользоваться этим Я начал лишь несколько месяцев назад. И пришел к выводу, что довольно полезная вещь, по крайней мере в моей работе, поэтому решил это внести в блог, пусть запись вышла немного сырая, но кому-то может пригодиться. Также можете внести предложения к публикации в комментариях, подправлю.