Я ищу способ читать из доли самбы. Я хочу использовать его как класс Dir
, например открывать и читать каталоги. Возможно ли это в Руби?
Ruby читать Samba поделиться
Ответы (4)
Драгоценный камень Sambala должен работать для вас, если ваша хост-ОС представляет собой систему Posix (UNIX-подобную) (не уверен насчет Windows...):
gem install sambala
Этот драгоценный камень будет работать до тех пор, пока ваша хост-ОС имеет работающий исполняемый файл smbclient где-то в вашем $ PATH. Пока вы используете Mac OS X, Linux или какой-либо другой вариант UNIX, вы должны иметь возможность запустить следующую команду из терминала, чтобы увидеть, есть ли у вас smbclient где-то на вашем пути:
which smbclient
Если вы не получили результата, выполните поиск в Google, чтобы узнать, как получить smbclient для вашей текущей хост-ОС. Если вы работаете в Mac OS X, вы можете просто установить MacPorts, а затем выполнить следующую команду из терминала, чтобы установить smbclient:
sudo port install samba3
Я думаю, вы могли бы попробовать проверить мой драгоценный камень, я начал его, потому что у меня такие же проблемы с самбалой
https://github.com/reivilo/rsmbclient
Драгоценный камень Sambala будет работать с реализациями Ruby версии 1.8.x в системе Posix (подобной UNIX).
gem install sambala
Для 1.9.x Ruby на Posix используйте форк GLSIGNAL.
git clone https://github.com/glsignal/sambala.git
cd sambala
gem build samabala
gem install ./sambala.gem
Примечание: гем GLSignal использует источник изобилия github, который исправлен для работы на 1.9.x.
Как заявил lottscarson, эти драгоценные камни будут работать до тех пор, пока ваша хост-ОС имеет работающий исполняемый файл smbclient где-то в вашем $ PATH. Пока вы используете Mac OS X, Linux или какой-либо другой вариант Posix, вы должны иметь возможность запустить следующую команду из терминала, чтобы увидеть, есть ли у вас smbclient где-то на вашем пути:
which smbclient
Если вы не получили результата, выполните поиск в Google, чтобы узнать, как получить smbclient для вашей текущей хост-ОС. (Примеры)
(RHEL/CENTOS/etc) yum install samba
(ubuntu/debian) sudo apt-get install samba smbfs
(osx) brew install samba
В качестве альтернативы оболочке для smbclient вы можете использовать рубиновый гем расширения C под названием «net-smb». Это требует собственной компиляции и не написано на чистом Ruby.
gem install net-smb
Для этого также требуется несколько вещей.
Ruby 1.9.3+
Samba 3.5+ (libsmbclient)
C compiler
Примеры установки
sudo apt-get install libsmbclient libsmbclient-dev
Ruby_SMB — это собственная реализация Ruby семейства протоколов SMB.
Из README:
sock = TCPSocket.new address, 445
dispatcher = RubySMB::Dispatcher::Socket.new(sock)
client = RubySMB::Client.new(dispatcher, username: 'msfadmin', password: 'msfadmin')
client.negotiate
client.authenticate
begin
tree = client.tree_connect('TEST_SHARE')
puts "Connected to #{path} successfully!"
rescue StandardError => e
puts "Failed to connect to #{path}: #{e.message}"
end
files = tree.list(directory: 'subdir1')
files.each do |file|
create_time = file.create_time.to_datetime.to_s
access_time = file.last_access.to_datetime.to_s
change_time = file.last_change.to_datetime.to_s
file_name = file.file_name.encode("UTF-8")
puts "FILE: #{file_name}\n\tSIZE(BYTES):#{file.end_of_file}\n\tSIZE_ON_DISK(BYTES):#{file.allocation_size}\n\tCREATED:#{create_time}\n\tACCESSED:#{access_time}\n\tCHANGED:#{change_time}\n\n"
end