실행 중인 xargs 명령에 인수를 추가하는 방법은 무엇입니까? (호스트 명령을 예로 들어 보겠습니다.)

실행 중인 xargs 명령에 인수를 추가하는 방법은 무엇입니까? (호스트 명령을 예로 들어 보겠습니다.)

저는 DNS 도구를 작성 중이고 "| xargs 호스트"가 필요합니다. 이것이 작동하지만 호스트 명령은 /etc/resolv.conf에 구성된 DNS 서버를 찾고 있습니다.

몇 가지 테스트를 실행하고 xargs에 대한 매뉴얼 페이지를 읽고 있지만 호스트 + xargs를 사용하여 DNS 서버를 지정하는 방법을 알 수 없습니다.

전임자.

printf "google.com\nyahoo.com\nbing.com\n" > hosts.txt
cat hosts.txt | xargs -n1 host

그러면 3개의 도메인을 조회하여 출력하지만 조회를 수행하는 DNS 서버는 /etc/resolv.conf에 구성된 서버입니다.

호스트를 사용하여 DNS 서버를 지정하려면 일반적으로 명령 끝에 서버를 추가하면 됩니다.

"호스팅된 google.com 8.8.8.8"

나는 다음과 같은 것을 찾고 있습니다 :

조롱하다:

server_to_query=8.8.8.8 ; cat hosts.txt | xargs -n1 host [xargs input] $server_to_query

그러나 현재 상황은 다음과 같습니다.

server_to_query=8.8.8.8 ; cat hosts.txt | xargs -n1 host $server_to_query [xargs input]

$server_to_query가 [xargs input]에 대해 찾고 있는 것으로 나타났으며 저는 그 반대가 발생하기를 찾고 있습니다.

xargs로 할 수 없다면 for 루프를 사용하거나 dig를 사용할 수 있지만 xargs와 호스트를 사용하는 것이 더 좋습니다.

답변1

replace-str-I옵션을 사용하여 a를 지정 xargs하면 인수를 끝에 두는 대신 명령의 어느 위치에서든 대체됩니다.

$ echo -e "google.com\nfarrellit.net\nexample.com" | xargs -I % -n 1 host % 8.8.8.8

bash/osx에서 완벽하게 작동합니다.

Using domain server:
Name: 8.8.8.8
Address: 8.8.8.8#53
Aliases:

google.com has address 172.217.9.46
google.com has IPv6 address 2607:f8b0:4009:802::200e
google.com mail is handled by 40 alt3.aspmx.l.google.com.
google.com mail is handled by 50 alt4.aspmx.l.google.com.
google.com mail is handled by 20 alt1.aspmx.l.google.com.
google.com mail is handled by 10 aspmx.l.google.com.
google.com mail is handled by 30 alt2.aspmx.l.google.com.
Using domain server:
Name: 8.8.8.8
Address: 8.8.8.8#53
Aliases:

farrellit.net has address 99.84.254.112
farrellit.net has address 99.84.254.4
farrellit.net has address 99.84.254.33
farrellit.net has address 99.84.254.62
farrellit.net mail is handled by 10 mail3.farrellit.net.
Using domain server:
Name: 8.8.8.8
Address: 8.8.8.8#53
Aliases:

example.com has address 93.184.216.34
example.com has IPv6 address 2606:2800:220:1:248:1893:25c8:1946
example.com mail is handled by 0 .

답변2

일반적으로 어떤 네임서버에게 물어보라고 강제하려는 이유는 여러 개의 서로 다른 네임서버에 물어보려고 할 때입니다.

GNU Parallel을 사용하면 다음을 수행할 수 있습니다.

parallel host {1} {2} :::: hostlist.txt ::: 8.8.8.8 1.1.1.1

결과를 보려면 다음을 사용하십시오 --tag.

parallel --tag host {1} {2} :::: hostlist.txt ::: 8.8.8.8 1.1.1.1

호스트 목록이 매우 큰 경우가 많으므로 추가하면 -j100수백 개의 호스트를 병렬로 구문 분석할 수 있습니다.

관련 정보