
Я столкнулся с кошмаром на работе. Коллега, ответственный за то, что я собираюсь описать ниже, передал эту ответственность мне и теперь покинул организацию. У меня нет опыта в выполнении чего-либо из этого. Пожалуйста, извините меня за мою неосведомленность и длинный вопрос — я не уверен, какую информацию включить/опустить.
Фон
Мы получаем некоторые данные от третьей стороны, которые отправляются на сервер postgres, а затем переносятся на сервер linux, где некоторые скрипты оболочки выполняют некоторые преобразования. Затем набор данных объединяется, после чего он отправляется в используемый нами инструмент анализа данных. Процесс автоматизирован с помощью cron.
Однако каждый год нам приходится вручную обновлять некоторые CSV-файлы метаданных на сервере Linux [они объединяются со сторонними данными с помощью скрипта оболочки].
Структура папок:
Ниже представлена структура папок сервера Linux [доступ с помощью PuTTY]:
- другой_проект
- другой_проект
- мой проект
- другой_проект
~/мой_проект>
- shell_скрипты
- закупленные_файлы
- мета_файлы
- комбинированные_файлы
~/мета_файлы>
- 2019.csv
- 2020.csv
- 2021.csv
Что мне нужно сделать
Мне нужно добавить файл под названием2022.csvв папку meta_files. У меня есть файл на локальной системе. В документе о передаче моего коллеги он просто говорит "скопировать файл в Linux с помощью общего ресурса Samba". Я нашел местоположение общего ресурса Samba и настроил его в своем проводнике Windows. У него есть адрес, который выглядит так:\\smb.comp.com\prod. Здесь есть разные виды папок.
Я подозреваю, что мне придется разместить2022.csvфайл где-нибудь в общем ресурсе samba, а затем выполнить команду на сервере linux с помощью PuTTY. Однако я понятия не имею, куда его поместить и какую команду запустить.
Я снова извиняюсь за такой длинный вопрос и чрезмерное описание. Любая помощь с тем, как мне перенести файл 2022.csv на Linux, была бы очень признательна. Пожалуйста, дайте мне знать, если потребуется какая-либо дополнительная информация. Большое спасибо.
решение1
Если вы уже используете SSH для доступа к серверу Linux, сделайте наоборот — подключитесь к серверу Linux через SFTP напрямуюзагрузитьфайл. Как правило, все серверы, которые принимают SSH, также принимают SFTP-подключения.
PuTTY поставляется с командами
pscp
иpsftp
(которые могут использовать ваши существующие ключи SSH и все такое).C:\> pscp 2022.csv user@yourserver:~/my_project/meta_files/2022.csv
Последние версии Windows поставляются со встроенным OpenSSH с командами
scp
иsftp
. Их использование похоже на pscp/psftp.WinSCP — хороший графический клиент SFTP, но также имеет пакетный режим CLI (
winscp.com
) и сборку .NET для автоматизации.Для ручного использования GUI, я думаю, у Bitvise есть SFTP. FileZilla тоже подойдет.
Но если сервер Linuxдолженвытащите файл из общего ресурса SMB – поместите его куда хотите, затем используйте клиент Linux SMB для доступа к нему. Есть несколько, например:
Команда
smbclient
из Samba. Хорошо подходит для разовых работ, но неприятна для автоматизации:$ smbclient //smb.comp.com/prod -U someuser smbclient> get 2022.csv
Уровень ядра
smb3
иcifs
монтирования. Хороший выбор для автоматизации, но для первой настройки требуются права root в системе Linux.$ sudo mount -t smb3 //smb.comp.com/prod /mnt/thesmbserver [options...] $ cp -av /mnt/thesmbserver/2022.csv ~/my_project/meta_files/ $ sudo umount /mnt/thesmbserver
(Если общий ресурс SMB не поддерживает SMB3, используйте старый
cifs
тип.)Пользовательский скрипт Python, использующий модуль "python-smbprotocol". Подходит для автоматизации:
import os import shutil import smbclient import time thisyear = time.strftime("%Y") remote = r"\\smb.comp.com\prod\%s.csv" % thisyear local = os.path.expanduser("~/my_project/meta_files/%s.csv" % thisyear) with smbclient.open_file(remote, "rb") as remote_fh: with open(local, "wb") as local_fh: shutil.copyfileobj(remote_fh, local_fh)
(У нас есть несколько заданий cron для Linux, которые используют python-smbprotocol для копирования файловк(Серверы Windows, а затем python-pypsrp для удаленного запуска команд на этих системах Windows.)