인터넷을 통해 일부 항목을 다운로드 할 수있는 쉘 스크립트가 있습니다. 인터넷에 파일이 있는지 어떻게 알 수 있습니까? http://192.168.1.1/backup/01012011.zip
존재 여부를 알고 싶다고 가정 해 봅시다 . 나는 ping
명령 을 사용해 보았지만 오류가 표시 /
됩니다.
누구든지 나를 도울 수 있습니까? 아니면 다른 방법이 있습니까?
확실히 다른 방법이 있지만 인터넷을 통해 요청을 할 때 실제로 어떤 일이 발생하는지 이해해야합니다. 웹 브라우저에서 페이지를 방문하면 HTTP라는 프로토콜을 사용하여 데이터가 전송됩니다 (예, 이것이 http://
URL의 시작 부분에 자주 표시 되는 이유 입니다).
HTTP는 텍스트 기반 프로토콜입니다. 정보는 요청 본문에 이어 헤더를 전송하여 클라이언트와 서버간에 교환됩니다. 헤더에는 요청 및 전송중인 정보에 대한 많은 상태 정보가 포함됩니다. 문제 해결에 도움이되는 헤더는 실제로 헤더가 아닙니다. 전송되는 첫 번째 줄이며 상태 코드라는 번호를 포함합니다. 이 숫자는 3 자리이며 상태 정보를 전달합니다. 요청이 성공하면 결과는 일반적으로 200입니다 (항상 그런 것은 아닙니다-예외가 있습니다).
한 가지는 확실합니다. 요청한 파일이 웹 서버에없는 경우 서버는 상태 코드 404로 응답해야합니다. 이는 리소스를 찾을 수 없음을 나타냅니다. (호기심를 들어, 여기에 HTTP 상태 코드와 그 의미의 목록입니다.)
글쎄, 충분한 이론. 터미널에서이 작업을 수행하는 방법을 살펴 보겠습니다. 상태 코드를 검사하는 기능을 제공하는 HTTP를 사용하여 요청을 가져 오는 훌륭한 도구는 cURL이며 Ubuntu 저장소에서 사용할 수 있습니다. 다음과 같이 설치할 수 있습니다.
sudo apt-get install curl
설치가 완료되면 다음과 같이 호출 할 수 있습니다.
curl [website]
... 주어진 URL의 내용이 터미널에 인쇄됩니다. 웹 브라우저가 해당 URL을 방문 할 때 표시되는 정보입니다. 이것이 우리에게 어떻게 도움이됩니까? 글쎄, 명령 에 대한 플래그를curl
자세히 살펴보십시오 . 매개 변수를 전달하면 --head
cURL은 요청의 헤더 만 반환 합니다 . URL로 시도해보십시오. 다음과 같은 형식의 줄 목록이 표시됩니다.
header-name: header-value
물론 첫 번째 줄은 이와 같이 보이지 않습니다. 앞서 언급 한 상태 코드를 기억하십니까? 첫 번째 줄에 세 자리 숫자로 표시됩니다. 이제해야 할 일은 Perl을 사용하여 첫 번째 줄에서 추출하는 것입니다. -e
Perl 코드를 Perl 인터프리터에 직접 전달할 수있는 Perl 플래그를 사용하여 터미널에서 수행 할 수 있습니다 . 또한 --silent
진행률 표시 줄을 표시하고 Perl 스크립트를 엉망으로 만들기 위해 cURL ( )에 추가 플래그를 추가해야합니다 .
다음은 우리가 필요로하는 것입니다 ... 셸에서 많은 것을 이스케이프해야하기 때문에 매우 복잡합니다.
perl -e "\ $ s = \`curl [URL] --head --silent \`; \ $ s = ~ m / (\\ d {3}) /; print \ $ 1"
이것이 기본적으로하는 일은 cURL로 URL을 가져 와서 상태 코드를 추출하여 출력하는 Perl 정규식을 통해 실행하는 것입니다.
이제 확인중인 파일의 URL에 입력하고 '404'와 비교하기 만하면됩니다. '404'가 표시되면 파일이 존재하지 않는다고 가정 할 수 있습니다.
물론 이것은 터미널에서 조작하기가 매우 어려울 수 있으므로 이해하기 쉽고 실행하기 쉽게 만드는 작은 스크립트를 작성할 수 있습니다.
#!/usr/bin/perl
# Get the URL
$url = $ARGV[0];
# Fetch the header
$header = `curl $url --head --silent`;
# Try to find the status code
$header =~ m/(\d{3})/;
# Return the result
exit(0) if $1 == 404;
exit(1);
파일에 복사하여 붙여 넣기 만하면됩니다. 이 예에서는 파일을 url_check
. 그런 다음 다음을 사용하여 파일을 실행 가능하게 만듭니다.
chmod 755 url_check
그런 다음 다음 간단한 명령으로 모든 파일을 확인할 수 있습니다.
./url_check [URL]
서버가 404를 반환하면 반환 값은 '0'이고 그렇지 않으면 '1'이됩니다. 그런 다음 다른 명령과 마찬가지로 셸에서이 명령을 연결할 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다