11.14. Когда (не) использовать сценарии оболочки
Оболочка настолько богата функциями, что трудно рассказать обо всех ее важнейших элементах в одной главе. Если вы заинтересовались, на что еще способна оболочка, загляните в одну из книг, посвященных программированию в оболочке (например,
Но, несмотря на это, в некоторый момент (особенно если вы начинаете пользоваться встроенной командой read), вы должны задать себе вопрос: применяете ли вы по-прежнему верный инструмент для работы? Вспомните, с чем лучше всего справляются сценарии оболочки: это работа с простыми файлами и командами. Как уже было сказано выше, если вам приходится писать что-либо замысловатое, а в особенности задействовать сложные строковые или арифметические операции, вероятно, лучше обратиться к таким языкам сценариев, как Python, Perl или awk.
12. Передача файлов по сети
В этой главе рассмотрены возможности передачи и совместного использования файлов компьютерами одной сети. Мы начнем со способов копирования, которые отличаются от утилит scp и sftp, уже известных вам. Затем мы кратко рассмотрим подлинное совместное применение файлов, при котором какой-либо каталог компьютера включается в число каталогов другого компьютера.
Эта глава описывает некоторые альтернативные способы передачи файлов, поскольку не все задачи переноса файлов одинаковы. Иногда необходимо обеспечить быстрый временный доступ к компьютерам, о которых вы знаете совсем немного, или, например, эффективно поддерживать копии больших структур каталогов. Временами требуется более продолжительный доступ.
12.1. Быстрое копирование
Допустим, вы желаете скопировать файл (или файлы) с вашего компьютера на другой компьютер вашей сети и при этом вам не обязательно возвращать его обратно или предпринимать какие-либо особые действия. Вы просто хотите выполнить это быстро. Существует удобный способ осуществить желаемое с помощью модуля Python. Просто перейдите в каталог с необходимыми файлами и запустите такую команду:
$ python -m SimpleHTTPServer
При этом запускается базовый веб-сервер, который делает данный каталог доступным для любого браузера в сети. Обычно он работает с портом 8000, поэтому, если адрес компьютера, на котором вы запустили эту команду, равен 10.1.2.4, наберите адресна компьютере назначения, и у вас появится возможность забрать необходимые файлы.
12.2. Команда rsync
Если вы желаете переместить всю структуру каталогов, это можно выполнить с помощью команды scp –r или, если необходима дополнительная функциональность, с помощью «конвейерной» команды tar:
$ tar cBvf–
Эти методы делают свое дело, но они не слишком гибкие. В частности, по окончании передачи на удаленном хосте может оказаться не вполне точная копия каталога. Если на удаленном компьютере такой
Если вам необходимо выполнять подобные задачи регулярно (в особенности если вы планируете автоматизировать этот процесс), используйте выделенную систему синхронизации. В Linux команда rsync является стандартным синхронизатором, который обладает хорошей производительностью и многими полезными функциями для выполнения передачи. Мы рассмотрим несколько основных режимов работы команды rsync, а также отметим их особенности.
12.2.1. Основы команды rsync
Чтобы команда rsync работала между двумя хостами, она должна быть установлена как на хосте-источнике, так и на хосте-назначении и у вас должен быть способ доступа к одному компьютеру с другого компьютера. Проще всего передавать файлы с использованием удаленной учетной записи оболочки, и мы будем предполагать, что вам необходимо передавать файлы с помощью SSH-доступа. Тем не менее помните также о том, что команда rsync может принести пользу даже при копировании файлов и каталогов в пределах одного компьютера, например из одной файловой системы в другую.
На первый взгляд команда rsync незначительно отличается от команды scp. На самом деле команду rsync можно запускать с теми же аргументами. Например, чтобы скопировать группу файлов в домашний каталог вашего хоста, введите такую команду:
$ rsync
В любой современной системе команда rsync подразумевает, что вы используете протокол SSH для соединения с удаленным хостом.
Опасайтесь такого сообщения об ошибке:
rsync not found
rsync: connection unexpectedly closed (0 bytes read so far)