найдите: недостающий аргумент '-должностному-лицу'

Если предположить, что ваш настроенный сервер имён не имеет в своём распоряжении кэшированных результатов, то сколько серверов имён должны быть запрошены для разрешения map.google.com? Какую команду вы бы использовали для поиска всех этих серверов имён? Перечислите по одному с каждого уровня и объясните, зачем нужен этот уровень.

Что ж, давайте выберем этот уровень отдельно.

"Предположим, что ваш настроенный сервер имён не имеет кэшированных результатов в своём распоряжении"[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 вероятно не будет):

  • .
  • com.
  • google.com.
  • maps.google.com.
  • Начните с выяснения, где можно запросить содержимое [116016].[116017]. Это просто; у нас уже есть эта информация: корневой сервер имен [116018]имена и IP-адреса[116019]. Итак, у нас есть сервер имен корня. Допустим, мы решили использовать 198.41.0.4 ([116020]a.root-servers.net[116021], также 2001:503:ba3e::2:30) для продолжения разрешения имен. На практике, одной из первых вещей, выполняемых преобразователем, скорее всего, будет использование предоставленных данных сервера корневой зоны для запроса на один из серверов корневой зоны точного списка серверов имен для корневой зоны, тем самым гарантируя, что если любое из имен и IP-адресов будет корректным и доступным, то, когда разрешение начнется, он будет иметь полный и полный набор данных для корневой зоны.
  • Снимите DNS-запрос для [116022]map.google.com. В A[116023] к 198.41.0.4. В ответе будет сказано "нет, не буду, но вот кто-то может знать"; это направление. Он содержит [116024]NS[116025] записи для ближайшей зоны, о которой знает сервер, вместе с любыми клеевыми записями, которые есть у сервера. Если данные клея недоступны, вам сначала нужно разрешить хост, названный в выбранной вами NS-записи, чтобы получить IP-адрес; если данные клея недоступны, у вас будет IP-адрес сервера имен, который, по крайней мере, "ближе" к ответу. В этом случае, это будет набор серверов для зоны [116026]com.[116027], и данные клея также будут предоставлены.
  • Повторите процесс, задав один из серверов имен [116028]com.[116029] тот же самый вопрос. Они тоже не знают, но направят вас к авторитетным серверам имен Google. На данный момент в общем случае, будет нанесен удар или пропущено, предоставляются ли данные о клее или нет; ничто не мешает домену [116030]com[116031] иметь серверы имен только в [116032]nl[116033], например, в этом случае данные о клее вряд ли будут доступны с серверов gTLD. Предоставленные данные о клее также могут быть неполными, а если вам действительно не повезло, то они могут быть даже неверными! Вы должны быть готовы к тому, что [116034]всегда [116035] будет порождать то отдельное разрешение имени, о котором я упоминал выше.

В основном, вы продолжаете работать до тех пор, пока не получите ответ с установленным флагом [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].

1
01.04.2015, 01:22
3 ответа

У вас слишком много оболочек, выполняющих некоторую обработку. Кроме того, использование обратных кавычек - плохая идея, особенно если в них есть обратная косая черта. Вместо этого вы должны использовать синтаксис $ (...) .

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 ) имеет большой смысл).

3
27.01.2020, 23:27

Когда я пытаюсь использовать эту команду

 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|^\.'"`
  1. Использование «Найти [..]»
  2. Использование TR

     -S, --squeze-Repeats
      Замените каждую входную последовательность повторяющегося символа, который указан в SET1 с одним возникновением этого символа
     
  3. Использование CUT

     -D, --DELIMITER = DELIM
      Используйте раздел вместо вкладки для разделителя поля
     -f, --fields = список
      Выберите только эти поля;  Также напечатайте любую строку, которая не содержит символ разделителя, если не указана параметр -s
     
0
27.01.2020, 23:27

Попробуйте на этот путь:

...-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|^\.'`
0
27.01.2020, 23:27

Теги

Похожие вопросы