Что ж, давайте выберем этот уровень отдельно.
"Предположим, что ваш настроенный сервер имён не имеет кэшированных результатов в своём распоряжении"[115987] -- во-первых, если он имеет [115988]нет[115989] кэшированных данных вообще, то он не может ничего разрешить. Для того, чтобы кэшировать резольвер, необходимо иметь записи NS и адрес (A, AAAA) для [115990].[115991] (корневая зона A.K.A.). Это корневые серверы имен, которые находятся в зоне [115992]root-servers.net.[115993]. Нет ничего волшебного ни в этой зоне, ни в этих DNS-серверах. Однако, эти данные часто предоставляются DNS resolver "вне диапазона", именно для подготовки кэша resolver. Авторитетным серверам имен эти данные не нужны, но разрешающим серверам имен нужны.
Также, "разрешающим" к чему? К какому-нибудь RR-типу этого имени? [115994]A[115995] RR? Или к чему-то еще? Какой класс ([115996]CH[115997]/Chaosnet, [115998]IN[115999]/Internet, ...)? Точный процесс будет другим, но общая идея останется прежней.
smb://username:password@192.168.0.1/ *or whatever your volume's IP is.*
Если мы можем предположить, что знаем, как найти корневые серверы имен, но не более того, и что под "разрешением" мы подразумеваем получение содержимого любых [116000]IN A[116001] RR, связанных с именем, то это становится намного практичнее.
Для разрешения DNS-имени, вы, в основном, разделяете имя на метки, а затем работаете справа налево. Не забудьте про [116002].[116003] в конце; на самом деле вы бы разрешили [116004]map.google.com.[116005], а не [116006]maps.google.com[116007]. Это оставляет нас с необходимостью разрешения (мы знаем это, но реализация DNS resolver вероятно не будет):
В основном, вы продолжаете работать до тех пор, пока не получите ответ с установленным флагом [116036]aa[116037] (авторитетный ответ). Этот ответ скажет вам, что вы просите, или что RR, который вы просите, не существует (либо [116038]NXDOMAIN[116039], либо [116040]NOERROR[116041] с записями данных нулевого ответа). Продолжайте искать ответы типа [116042]SERVFAIL[116043] (и отступите на один шаг и попробуйте другой сервер, если он у вас есть; если все именованные серверы вернутся [116044]SERVFAIL[116045], то провалите процесс разрешения имен и верните [116046]SERVFAIL[116047] клиенту самостоятельно).
Альтернативой запроса полного RRname с каждого сервера (что можно считать плохой практикой) является использование разделенного списка меток, который мы определили ранее, запрос серверов имен, предоставленных сервером далее к корню для [116048]IN NS[116049] и [116050]IN A[116051]/[116052]IN AAAA[116053] RRs для этой метки, и использование этих меток для дальнейшего процесса разрешения имен. Это лишь незначительно отличается на практике, и тот же самый процесс все еще применяется.
Вы можете смоделировать весь этот процесс, используя опцию [116054]+trace[116055] к утилите [116056]dig[116057], которая идет как часть BIND, или [116058]set debug[116059] в [116060]nslookup[116061]. Также стоит помнить, что некоторые RR-типы (в частности, [116062]NS[116063], [116064]MX[116065] и некоторые другие; кроме того, [116066]A6[116067] довольно хорошо использовался в течение некоторого времени, но был устаревшим) могут и делают ссылки на другие RR. В этом случае, возможно, вам понадобится икра [116068]еще один [116069] процесс разрешения имен, чтобы дать полный и полезный ответ вашему клиенту.[115566].
У вас слишком много оболочек, выполняющих некоторую обработку. Кроме того, использование обратных кавычек - плохая идея, особенно если в них есть обратная косая черта. Вместо этого вы должны использовать синтаксис $ (...)
.
sudo -s
запускает оболочку для выполнения команды, но с sudo
пытается избежать некоторых специальных символов оболочки. Вы не хотите использовать это.
ssh
запускает оболочку на удаленном хосте для интерпретации командной строки, которая состоит из конкатенации аргументов (с пробелом между ними).
Итак, в:
var1=`sudo -u psoadmin -H -s ssh daill_scp@files.dc1.responsys.net find . -maxdepth 1 -type f -mtime +14 -exec ls -lh \{} \;`
sudo
запускается:
"/bin/bash", ["/bin/bash", "-c",
"ssh daill_scp\\@files.dc1.responsys.net find \\. -maxdepth 1 -type f -mtime \\+14 -exec ls -lh \\{\\} \\;"]
( / bin / bash
или любая другая оболочка входа пользователя).
Обратите внимание, как sudo
экранировал .
, +
, }
, но без обратной косой черты без особой на то причины.
Затем будет запущен этот bash:
"/usr/bin/ssh", ["ssh", "daill_scp@files.dc1.responsys.net", "find", ".", "-maxdepth", "1", "-type", "f", "-mtime", "+14", "-exec", "ls", "-lh", "{}", ";"]
ssh
объединит их и запустит на удаленном хосте:
"$SHELL", ["$SHELL", "-c", "find . -maxdepth 1 -type f -mtime + 14 -exec ls -lh {} ;"]
(где $ SHELL
на этот раз - оболочка входа удаленного пользователя).
То, что ;
выше не экранировано, поэтому интерпретируется как разделитель команд и не передается в find
, поэтому find
жалуется, что - exec
не завершается.
Здесь вы хотите:
var1=$(
sudo -u psoadmin -H ssh daill_scp@files.dc1.responsys.net '
find . -maxdepth 1 -type f -mtime +14 -exec ls -lh {} \;' |
awk '{print $5, $9}' |
egrep -v '^./upload|^./download|^./archive|^\.'
)
(не то чтобы эта команда (особенно часть egrep
) имеет большой смысл).
Когда я пытаюсь использовать эту команду
var1 = `sudo -u psoadmin -h -s ssh (hidden) найти. -maxdepth 1 -Type f -mtime +14 -exec ls -lh \ {} \; |. awk '{Print $ 5, $ 9}' | Egrep -v '^. / Загрузить | ^. / Скачать | ^. / Архив | ^ \.' `
Это бросает меня как
Найти: отсутствующий аргумент для `-exec '
Вы должны использовать это:
var1=`sudo -u psoadmin -H -s ssh daill_scp@files.dc1.responsys.net "find . -maxdepth 1 -type f -mtime +14 -exec ls -lh {} \; | tr -s [:space:] | cut -d ' ' -f 5,9 | egrep -v '^./upload|^./download|^./archive|^\.'"`
«Найти [..]»
Использование TR
-S, --squeze-Repeats
Замените каждую входную последовательность повторяющегося символа, который указан в SET1 с одним возникновением этого символа
Использование CUT
-D, --DELIMITER = DELIM
Используйте раздел вместо вкладки для разделителя поля
-f, --fields = список
Выберите только эти поля; Также напечатайте любую строку, которая не содержит символ разделителя, если не указана параметр -s
Попробуйте на этот путь:
...-exec ls -lh {} \;...
(Удалить обратно перед вьющимися кронштейном) Двойные кавычки:
var1=`sudo -u psoadmin -H -s ssh daill_scp@files.dc1.responsys.net "find . -maxdepth 1 -type f -mtime +14 -exec ls -lh {} \; "| awk '{print $5, $9}'|egrep -v '^./upload|^./download|^./archive|^\.'`