В Интернете, включая локальные сети, машины называют друг друга IP-адресами. Для доступа к машине B от машины использование названия машины B, машина A должна иметь некоторый способ отобразить название B к его IP-адресу. Существует три способа объявить названия машины на A:
unix.stackexchange.com
.Существует много путей, которыми они могут работать на практике; невозможно покрыть их всех. В этом ответе я опишу несколько общих ситуаций.
Метод файла hosts имеет преимущество, что это не требует никакого специального метода. Это может быть громоздким, если у Вас есть несколько машин, потому что необходимо обновить каждую машину, когда название одной машины изменяется. Это не подходит, если IP-адрес B присвоен динамично (так, чтобы Вы получили другой каждый раз, когда Вы соединяетесь с сетью).
Файл hosts является простым списком строк, отображающих имена к IP-адресам. Это похоже на это:
127.0.0.1 localhost localhost.localdomain
198.51.100.42 darkstar darkstar.bands
В системах Unix файл hosts /etc/hosts
. В Windows это c:\windows\system32\drivers\etc\hosts
. Примерно каждая операционная система, которую можно подключить к Интернету, имеет подобный файл; Википедия имеет список.
Добавить запись для B в файле hosts A:
Определите IP-адрес B. На B, выполненном команда ifconfig
(если команда не найдена, попробовать /sbin/ifconfig
). Вывод будет содержать строки как это:
eth1 Link encap:Ethernet HWaddr 01:23:45:67:89:ab
inet addr:10.3.1.42 Bcast:10.3.1.255 Mask:255.255.255.0
В этом примере IP-адрес B 10.3.1.42. Если существуют несколько inet addr:
строки, выберите ту, которая соответствует Вашей сетевой плате, никогда lo
запись или туннель или виртуальная запись.
/etc/hosts
как суперпользователь; посмотрите, Как я выполняю команду как системный администратор (корень).Этот метод является безусловно самым простым, если у Вас есть необходимое оборудование. Только необходимо настроить одно устройство, и все компьютеры будут знать об именах друг друга. Этот метод предполагает, что Ваши компьютеры получают свои IP-адреса по DHCP, который является методом для компьютеров для автоматического получения IP-адреса, когда они соединяются с сетью. Если Вы не знаете, каков DHCP, они, вероятно, делают.
Если Ваша сеть имеет домашний маршрутизатор, это - лучшее место для конфигурирования названий машин, подключенных к тому маршрутизатору. Во-первых, необходимо выяснить MAC-адрес B. Каждое сетевое устройство имеет уникальный MAC-адрес. На B, выполненном команда ifconfig -a
(если команда не найдена, попробовать /sbin/ifconfig -a
). Вывод будет содержать строки как это:
eth1 Link encap:Ethernet HWaddr 01:23:45:67:89:ab
В этом примере MAC-адрес 01:23:45:67:89:ab
. Необходимо выбрать строку HWaddr, которая соответствует сетевому порту, это подключено к маршрутизатору через кабель (или карта Wi-Fi, если Вы соединены по Wi-Fi). Если у Вас есть несколько записей, и Вы не знаете, который является, который, включите кабель и посмотрите, какое сетевое устройство получает IP-адрес (inet addr
строка чуть ниже).
Теперь, на веб-интерфейсе Вашего маршрутизатора, ищите установку как “DHCP”. Название и местоположение установки абсолютно зависит от модели маршрутизатора, но большинство имеет подобный набор основных настроек. Вот то, на что это похоже на Томатном встроенном микропрограммном обеспечении:
Введите MAC-адрес, IP-адрес и желаемое имя. Можно выбрать любой IP-адрес на диапазоне адресов локальной сети. Большинство домашних маршрутизаторов предварительно сконфигурировано для диапазона адресов формы 192.168.x.y или 10.x.y.z. Например, на Томатном маршрутизаторе, показанном выше, на вкладке “Network”, существует “IP-адрес маршрутизатора”, устанавливающий со значением 10.3.0.1 и установкой “маски подсети” со значением 255.255.255.0, что означает, что компьютеры в локальной сети должны иметь адрес формы 10.3.0.z. Существует также диапазон адресов для автоматически присвоенных адресов DHCP (10.3.0.129-10.3.0.254); для Вашего вручную присвоенного адреса DHCP выберите тот, который не находится в этом диапазоне.
Теперь подключите B к сети, и это должно получить IP-адрес, который Вы указали, и это будет достижимо указанным именем от любой машины в сети.
Если у Вас нет способного домашнего маршрутизатора, можно настроить ту же функциональность на любой машине Linux. Я объясню, как использовать Dnsmasq для установки DNS. Существует много других подобных программ; я выбрал Dnsmasq, потому что легко настроить и легкий вес (это - то, что Томатный маршрутизатор проиллюстрировал выше использования, например). Dnsmasq доступен на большей части Linux и дистрибутивов BSD для ПК, серверов и сетевого оборудования.
Выберите компьютер, это всегда включено, который имеет статический IP-адрес, и это запускает некоторый Linux или BSD; давайте звонить, это (для сервера). На S, установка dnsmasq
пакет (если это уже не там). Ниже я предположу, что конфигурационный файл /etc/dnsmasq.conf
; местоположение может варьироваться на некотором распределении. Теперь необходимо сделать несколько вещей.
/etc/hosts
(см. раздел “Hosts file” выше), и удостоверьтесь это /etc/dnsmasq.conf
не имеет no-hosts
директива не прокомментирована. (Строки, которые начинаются с a #
комментируются.) Можно поставить имена в другом файле; если Вы делаете, поместите строку addn-hosts=/path/to/hosts/file
в /etc/dnsmasq.conf
.Скажите Dnsmasq, как получить IP-адреса для названий машин в Интернете.
resolvconf
пакет. В наиболее распространенных случаях все будет работать из поля.Если Ваш администратор сети или Ваш ISP дали Вам адреса серверов DNS, введите их в /etc/dnsmasq.conf
, например:
server=8.8.8.8
server=8.8.4.4
Если Вы не знаете, каковы Ваши текущие настройки DNS, посмотрите в файле /etc/resolv.conf
. Если Вы видите строку как nameserver 8.8.8.8
, поместите строку server=8.8.8.8
в /etc/dnsmasq.conf
. После изменения /etc/dnsmasq.conf
, перезапуск Dnsmasq. Команда, чтобы сделать, который зависит от распределения; типичные возможности включают restart dnsmasq
или /etc/init.d/dnsmasq restart
.
/etc/resolv.conf
(как корень), удалите каждый nameserver
строка, и помещенный nameserver 127.0.0.1
вместо этого. /etc/resolv.conf
может быть субоптимальным, если Вы установили resolvconf
пакет с сетью и выполнением. Удостоверьтесь что файлы base
, head
и tail
в /etc/resolvconf/resolv.conf.d/
каталог не содержит никого nameserver
записи, затем выполненные resolvconf -u
(как корень)./etc/resolv.conf
и замените все nameserver
строки с синглом nameserver 10.3.0.2
где 10.3.0.2 IP-адрес S (см. выше для того, как узнать IP-адрес S).Можно также использовать Dnsmasq в качестве сервера DHCP, так, чтобы машины могли получить адрес, соответствующий их имени автоматически. Это выходит за рамки этого ответа; консультируйтесь с документацией Dnsmasq (это не трудно). Обратите внимание, что может только быть единственный сервер DHCP в данной локальной сети (точное определение локальной сети выходит за рамки этого ответа).
До сих пор я принял локальную сеть. Что, если Вы хотите дать имя машине, это находится в другом углу мира? Можно все еще использовать любой из методов выше, за исключением того, что части, включающие DHCP, только применимы в локальной сети. С другой стороны, если Ваши машины имеют общедоступные IP-адреса, можно зарегистрировать собственное общедоступное имя их. (Можно присвоить частный IP-адрес общедоступному имени, также; это менее распространено и менее полезно, но нет никакой технической трудности.)
Можно получить собственное доменное имя и присвоить IP-адреса именам хостов в этом домене. Необходимо зарегистрировать доменное имя в поставщике доменного имени; это обычно стоит $10-15/лет (за самые дешевые домены). Используйте свой веб-интерфейс поставщика доменного имени для присвоения адресов именам хостов.
Если Ваши машины имеют динамический IP-адрес, можно использовать динамический протокол DNS для обновления IP-адреса, связанного с названием машины, когда адрес изменяется. Не все поставщики доменного имени поддерживают динамический DNS, так магазин перед покупкой. Для персонального использования, без IP, обеспечивает бесплатную динамическую службу DNS, если Вы используете их собственные домены (например. example.ddns.net
).
Использование:
$ copy() { mkdir -p -- "${@: -1}" && cp -- "$@" ; }
$ copy * ../b/c/d/
Примечание: он работает с Bash, KSH93 и ZSH.
«$ {@: -1}»
соответствует форме $ {Parameter: Offset}
: все параметры, начиная с смещения. Смещение -1 соответствует последнему параметру, поскольку отрицательные смещения подсчитываются от конца. Пространство необходимо, в противном случае это было бы $ {PARAMETER: -WORD}
. Смотрите руководство Bash для получения дополнительной информации.
«$ @»
расширяется до списка параметров, что является то, что требуется для CP
.
Примечание 2: Как предложено Mikeserv, вы можете использовать
eval 'mkdir -p -- "${'"$#"'}"'
, который является более портативным (POSIX), вместо
mkdir -p -- "${@: -1}"
, касающихся характеристики, решение Eval
намного быстрее с Bash 4.3. 30, но другой раствор быстрее с KSH 93U + и ZSH 5.0.6 (KSH93 и ZSH намного быстрее, чем bash в обоих случаях); и dash 5.7 с решением
решение (другой не поддерживается) немного быстрее, чем ksh93 с решением «$ {@: -1}»
. Таким образом, в зависимости от вашего дела (скрипта, интерактивное использование, поддержка специфических функций оболочки и т. Д.) Сделайте свой выбор ... Обратите внимание, однако, что в контексте CP
(который займет большую часть времени ), эти различия в производительности не будут заметны.
Сценарий, который я использовал для теста:
i=50000
while [ $i -ne 0 ];
do
# : "${@: -1}"
eval ': "${'"$#"'}"'
i=$((i-1))
done
(комментировать EVAL
, и растремиться к предыдущей строке для другого решения), называется:
time sh ./tst `seq 1000`
time bash ./tst `seq 1000`
time ksh93 ./tst `seq 1000`
time zsh ./tst `seq 1000`
У меня была такая же проблема, и я использовал tar
для ее решения! Вот так:
tmpfile=/tmp/myfile.tar
files="/some/folder/file1.txt /some/other/folder/file2.txt"
targetfolder=/home/you/somefolder
tar --file="$tmpfile" "$files"
tar --extract --file="$tmpfile" --directory="$targetfolder"
В этом случае tar
автоматически создаст для вас все (подпапки )! Лучший,
Наби