Примонтировать ftp в linux

Обновлено: 02.07.2024

Это возможно как в Linux, так и в Windows.
Как это сделать в виндах - расскажу чуть попозже, а в Linux нам поможет небольшая программа CurlFtpFS.

CurlFtpFS - утилита для монтирования удалённых FTP-хранилищ в локальную файловую систему. После монтирования мы можем оперировать с данными на сервере как с локальными, а все рутиные операции обмена файлами по протоколу FTP за нас будет делать утилита. Звучит неплохо, да?

Как установить

В пример буду приводить набирающую обороты Ubuntu, как систему для простых пользователей.
Набираем в консоли от имени суперпользователя:

apt-get install curlftpfs

Теперь нужно создать папку, куда будем монтировать FTP-хранилища. Предлагаю использовать /media , в этом случае они будут сразу отображаться в наутилусе:

Чтобы не делать все операции от суперпользователя, добавим текущего юзера в группу fuse и установим нужные права на целевой каталог:

adduser имя_пользователя fuse
chgrp fuse /media/ftp
chmod g+w /media/ftp

Как использовать

curlftpfs ftp://[пользователь]:[пароль]@имя_сервера /media/ftp [опции]

curlftpfs имя_сервера /media/ftp -o user=пользователь:пароль [другие_опции]

мне второй вариант нравится больше.

Настраиваем кодировки

Не забываем, что многие сервера создаются для виндуз-пользователей. Встроенный в винду FTP-клиент знает только одну кодировку: windows-1251, и именно в этой кодировке подобный FTP-сервер будет передавать имена файлов.
Соответственно, так как у нас utf8, вместо русских имён мы увидим абракадабру. И наоборот: при создании файла с русским именем, абракадабру увидят виндуз-пользователи.

Чтобы этого избежать, дописываем в опции соединения: codepage=windows-1251 (указываем какая кодировка используется на сервере) и iocharset=utf8 (указываем какая кодировка у нас, можно не писать).

curlftpfs имя_сервера /media/ftp -o user=пользователь:пароль,codepage=windows-1251[,iocharset=utf8]

Или делаем то же, но используя модуль iconv, что правильнее:

curlftpfs имя_сервера /media/ftp -o user=пользователь:пароль,modules=iconv,from_code=CP1251,to_code=UTF8

Другие настройки

Мой местный интернет-провайдер держит анонимный FTP-сервер. Его поддерживают замечательные администраторы, он до сих пор не понимает маленькую букву «я» в названиях файлов. Но дело даже не в этом.

Скорость заливки/скачивания на этом сервере не ограничена. Но! При попытке открыть несколько FTP-сессий, скорость на несколько минут падает до нескольких килобайт в секунду. С учётом, что на дворе 21 век, 2010 год, параллельные вычисления и нанотехнологии, считаю такой подход замечательным.

Чтобы забыть про администраторов нетрадиционной сексуальной ориентации, можно использовать опцию -s при подключении curlftpfs. Она отключит многопоточные операции.

curlftpfs имя_сервера /media/ftp -o modules=iconv,from_code=CP1251,to_code=UTF8 -s

Автомонтирование при запуске

Для автомонтирования ресурса при каждом запуске, добавим следующую строчку в файл /etc/rc.local :

sudo -u пользователь curlftpfs [параметры_подключения]

где пользователь - имя локального пользователя, от которого запустится curlftpfs.

Отмонтируем

fusermount -u /media/ftp

От имени текущего пользователя. Или, если хочется поизвращаться, то от имени суперпользователя:

Ссылки

Логин и пароль засвечиваются только в том случае, если писать их в URI для подключения.
Если передать их опциями (-o user=login:password), то всё будет хорошо.

Автоматизировать ввод пароля можно через стандартный

Совет: Перед изменением /etc/fstab — проведите монтирование вручную, после чего выполните команду mount (или cat /etc/mtab).
Источник и назначение монтирования надо будет внести в fstab согласно этому выводу, с точностью до символа.

Комментарии

что нам дает вот это:
curlftpfs ftp://[пользователь]:[пароль]@имя_сервера /media/ftp [опции]
или
curlftpfs имя_сервера /media/ftp -o user=пользователь:пароль [другие_опции]

После этого в нашей папке /media/ftp появляются все файлы что лежат на сервере?


После этого в нашей папке /media/ftp появляются все файлы что лежат на сервере?

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

Но в папку ничего не копируется, физически файлы находятся всё так же на удалённом FTP-сервере.

Супер! Получилось.
А я могу теперь синхронизировать папку /media/ftp с какой-нибудь другой папкой на компьютере?
Просто моя IDE-программа надолго зависает если я открываю файл непосредственно из папки /media/ftp и начинаю редактировать.


А я могу теперь синхронизировать папку /media/ftp с какой-нибудь другой папкой на компьютере?

А смысл?
Если синхронизировать, то лучше непосредственно с FTP.

Просто моя IDE-программа надолго зависает если я открываю файл непосредственно из папки /media/ftp и начинаю редактировать.

Если на FTP нет файлов с русскими именами или они хранятся в кодировке UTF-8, можно подмонтировать прямо через наутилус.
Содержимое удалённого сервера будет в каталоге

Как эксперт, дайте ваш совет по реализации синхронизации двух папок в убунте, с автозапуском этой самой синхронизации при изменении(или при каком-нибудь другом условии) любого содержимого в этих папках, причем в двустороннем направлении.
Искал программу которая могла бы это делать но так и не нашел ничего подходящего для себя (ввиду того что на линукс пересел неделю назад, консольные программы для меня еще пока как тропические леса амазонки, хотя по инструкции иногда получается).
Выполнимая ли это задача?
Извиняюсь что ушел немного от темы.


дайте ваш совет по реализации синхронизации двух папок в убунте, с автозапуском этой самой синхронизации при изменении(или при каком-нибудь другом условии) любого содержимого в этих папках, причем в двустороннем направлении.
Искал программу которая могла бы это делать но так и не нашел ничего подходящего для себя (ввиду того что на линукс пересел неделю назад, консольные программы для меня еще пока как тропические леса амазонки, хотя по инструкции иногда получается).
Выполнимая ли это задача?

Задача выполнимая. У линухов как у ОС невыполнимых задач вообще, по-моему, нет. Более того, одну и ту же задачу можно решить огромным количеством способов. Иногда это вгоняет в ступор, не знаешь что выбрать.

Консоль - одно из преимуществ системы. Все операции желательно делать в ней, даже если поначалу трудно, сложно и непонятно. С опытом всё быстро придёт.
К каждой консольной утилите есть инструкция, с которой нужно подробно ознакомиться. Вызывается с помощью [man команда]. Чаще всего на птичьем английском языке, но многие и на русском, то есть, вопросов с пониманием возникнуть не должно.

У неё есть графическая морда: grsync.
Морда, он же фронтэнд, это графическая оболочка для консольной утилиты. Позволяет задать настройки из графики, вывод информации делает в графику, но по сути представляет собой всего лишь надстройку над основной (консольной) программой.
apt-get install grsync достаточно, он поставит вместе с собой и сам rsync.

Если нужно засунуть задание в планировщик, можно поступить следующим образом: сделать настройки в графике, подсмотреть сформированную строку запуска rsync и кинуть её в crontab.

Но, я так понимаю, речь всё-таки идёт про синхронизацию файлов между локальным каталогом и FTP-сервером. Вручную это удобно делать с помощью FileZilla. Это двухпанельный FTP-менеджер, умеет делать синхронизированный просмотр локального и удалённого каталогов (то есть, ходишь одновременно по хранилищу и его копии), есть режим сравнения файлов. Как таковой синхронизации в нём не существует, но можно настроить копирование только изменённых файлов.

Ну, это если так, вкратце и сходу.

Fradis

В прошлом годы был на Ибице, так там познакомился с человеком, у которого стиль изложения материала очень похож на ваш. Но, к сожалению, тот человек очень далек от Интернета.

Strek

У меня пароль имеет вид "_!?_цифро-буквы_?!_" и после ввода "curlftpfs site.com /media/FTP -o user=username:_!?_цифро-буквы_?!_"
выдаёт "bash: !?_цифро-буквы_?: event not found"
Что нужно сделать, чтобы пароль не распознавался, как какое-то событие?

Strek

Нашёл. Заключил в одинарные кавычки данные - username:_!?_цифро-буквы_?!_
то есть, что было так 'username:_!?_цифро-буквы_?!_'


Нашёл. Заключил в одинарные кавычки данные - username:_!?_цифро-буквы_?!_
то есть, что было так 'username:_!?_цифро-буквы_?!_'

Скорее всего, один из символов пароля был служебным.

И, скорее всего, в кавычки достаточно заключить только пароль.

kirill

а что делать если disk на ftp сервере fat32?

а что делать если disk на ftp сервере fat32?

С какой стороны (пользователь или администратор сервера)?
И что это за сервер такой загадочный?…

ЗЫ: Обыкновенно, как в случае стандарта де-факто на файловую систему для сменных носителей (то есть глобально эмулировать посредством опций монтирования).


а что делать если disk на ftp сервере fat32?

Не понял. А какая разница, какая ФС на серверном диске? Хочется приключений — пусть будет FAT32.

При запросе файла по FTP команда поступает FTP-серверу, который представляет собой демон. Демон запросит файл у операционной системы, на которой он вращается. И только ОС обратится к файлу непосредственно, через драйвер соответствующей ФС.

Таким образом, FTP-серверу глубоко насрать на то, в какую файловую систему отформатирован диск. Он тупо не работает с файлами на этом уровне.

Приветствую, заметил, что не сразу появляются файлы после сброса их в папку со стороны ФТП, т.е. в примонтированной папке их не видно некоторое время, я так понял, что от размера зависит. отмонтирование и примонтирование ничёго не дают, есть какой ключ делающий обновление файлов в папке ?


Приветствую, заметил, что не сразу появляются файлы после сброса их в папку со стороны ФТП, т.е. в примонтированной папке их не видно некоторое время, я так понял, что от размера зависит. отмонтирование и примонтирование ничёго не дают, есть какой ключ делающий обновление файлов в папке ?

Насколько я знаю, копирование файлов по FTP происходит через каталог временных файлов. Почему так — хз, но копни в эту сторону. Может, причина задержки в этом.

Виталий

Не могу создать бекап rar на диске CurlFtps, tar.gz создаётся без проблем.
У меня нет места свободного для бекапов и я создаю архив прямо на ftp диске и при этом временные файлы на локальном диске если архивировать tar.gz не создаются.
А rar не хочет - пишет сразу ошибку. Может у вас получится, может я какой то параметр не дописал.
При частых обрывах попробуйте снизить MTU с 500 на 1475 - мне помогло!

Виталий

Получилось создать rar архив но на SSHFS диске и место не занимает. Ура!
sshfs login@1.1.1.1:/raid/backup/www /media/FTP
rar a -r -u -m5 -pPAAS /media/FTP/$HOSTNAME-$(date +'%Y-%m-%d').rar /home* /etc* /root* /var/log* & cpulimit --exe=rar --limit=30

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

Техническая информация
Время подготовки страницы: 0.029030 c.
Кэш: частичный.

Иногда нужно, чтобы FTP аккаунт был всегда под рукой, а вернее отдельным каталогом вашей файловой системы. В linux это делается с помощью пакета curlftpfs, при этом в ядре должна быть включена поддержка FUSE (во всех современных ядрах она есть, если вы только не пересобирали ядро сами :))

На официальный сайте проекта curlftpfs можно найти исходники программы, но практически во всех репозиториях она есть и исходники вам врядли понадобятся.

В ubuntu/debian ставим с помощью команды

На всякий случай подгружаем модуль ядра fuse (в разных дистрибутивах модуль может подгружаться и автоматом при задействовании системы FUSE)

Теперь можно и примонтировать ftp в какой-нибудь каталог, например /mnt/ftp

Следующие команды выполняем от sudo или суперпользователя

после набора пароля пользователя ftp в каталоге /mnt/ftp будет отображаться содержимое ftp с правами пользователя ftp.
Чтобы не набирать пароль, можно его указывать в команде подключения

Внимание: Так я делать не рекомендую по соображениям безопасности, т.к. команды обычно логируется в history или могут быть подсмотрены. Но если очень надо создать автоматическое монтирование ftp ресурса, тогда рекомендую создать скрипт с данной командой подключения и выставить на него права 600.

Чтобы монтировать ftp от обычного пользователя, надо дописать/расcкомментировать в файле /etc/fuse.conf (если файла нет, то создать) строку

и монтировать уже командой от обычного пользователя

Если надо примонтировать только 1 подкаталог с главного корня ftp, достаточно просто указать относительный путь этого каталога.
Например в корне ftp есть каталог temp, который нам надо примонтировать. Тогда команда монтирования будет выглядеть:

Для монтирования ftp на уровне загрузке системы можно занести монтирование в файл /etc/fstab, подставив свои значения

Можно посмотреть в какую директорию смонтированы все файловые системы компьютера, в частности curlftpfs.
Из недостатков монтирования я заметил, что данная команда неправильно показывает занятое/свободное место на ftp.

Читайте также: