পিং বা অনুরূপ কমান্ড ব্যবহার করে ইন্টারনেটের মাধ্যমে কীভাবে একটি ফাইল সনাক্ত করবেন?


10

ইন্টারনেটে আমার কিছু জিনিস ডাউনলোড করার জন্য আমার কাছে একটি শেল স্ক্রিপ্ট রয়েছে। ইন্টারনেটে কোনও ফাইল বিদ্যমান থাকলে আমি কীভাবে জানতে পারি? যাক বলুন আমি জানতে চাই যে http://192.168.1.1/backup/01012011.zipউপস্থিত আছে কি না? আমি pingকমান্ডটি ব্যবহার করার চেষ্টা করেছি , তবে এটি ত্রুটি দেখায়, আমি অনুমান করি কারণ এটি /অক্ষর।

কেউ কি আমাকে সাহায্য করতে পারেন? অথবা অন্য উপায় আছে কি?


এটি লক্ষ করা উচিত যে pingHTTP অনুরোধগুলি মোটেই প্রেরণ করে না। বরং pingকোনও হোস্টের কাছে পৌঁছনীয় কিনা তা নির্ধারণ করতে এবং বিলম্বিতা পরীক্ষা করতে 'আইসিএমপি' নামে একটি প্রোটোকল ব্যবহার করে।
নাথান ওসমান

উত্তর:


8

অবশ্যই অন্য একটি উপায় আছে - তবে এটি যখন ইন্টারনেটের মাধ্যমে একটি অনুরোধ করা হয় তখন আসলে কী ঘটে তা বোঝার প্রয়োজন। আপনি যখন আপনার ওয়েব ব্রাউজারে কোনও পৃষ্ঠাতে যান, তখন এইচটিটিপি নামে একটি প্রোটোকল ব্যবহার করে ডেটা স্থানান্তরিত হয় (হ্যাঁ, আপনি http://URL এর শুরুতে প্রায়শই দেখতে পাবেন ) see

এইচটিটিপি একটি পাঠ্য-ভিত্তিক প্রোটোকল। অনুরোধের বডি অনুসারে শিরোনাম পাঠিয়ে ক্লায়েন্ট এবং সার্ভারের মধ্যে তথ্য বিনিময় হয়। শিরোনামগুলির মধ্যে অনুরোধ এবং স্থানান্তরিত হওয়া তথ্য সম্পর্কে প্রচুর স্থিতির তথ্য থাকে। আপনার সমস্যাটি আপনাকে সহায়তা করতে আপনি যে শিরোনামটির প্রতি আগ্রহী হবেন তা আসলে কোনও শিরোনাম নয় - এটি হ'ল প্রথম লাইনের স্থানান্তরিত এবং এতে স্ট্যাটাস কোড নামক একটি নম্বর রয়েছে। এই সংখ্যাটি 3 ডিজিটের এবং স্থিতির তথ্য জানায়। যদি একটি অনুরোধ সফল হয়, ফলাফলটি সাধারণত 200 হয় (সর্বদা নয় - ব্যতিক্রমগুলি রয়েছে)।

একটি বিষয় অবশ্যই নিশ্চিত - আপনার অনুরোধ করা ফাইলটি যদি ওয়েব সার্ভারে উপস্থিত না থাকে তবে সার্ভারের 404 এর একটি স্থিতি কোড দিয়ে উত্তর দেওয়া উচিত This এটি সূচিত করে যে উত্সটি খুঁজে পাওয়া যায় নি। (কৌতূহলীদের জন্য, এখানে এইচটিটিপি স্থিতি কোড এবং তাদের অর্থগুলির একটি তালিকা রয়েছে))

ঠিক আছে, যথেষ্ট তত্ত্ব। আসুন দেখুন আমরা টার্মিনালে এটি কীভাবে করতে পারি। এইচটিটিপি ব্যবহার করে অনুরোধ আনার জন্য একটি দুর্দান্ত সরঞ্জাম যা আমাদের স্থিতি কোড পরীক্ষা করার ক্ষমতাও সরবরাহ করে তা হল সিউআরএল, যা উবুন্টু রেপোতে উপলব্ধ। আপনি এটি দিয়ে এটি ইনস্টল করতে পারেন:

sudo apt-get install curl

একবার এটি ইনস্টল হয়ে গেলে আপনি এটির মতো অনুরোধ করতে পারেন:

curl [website]

... এবং প্রদত্ত ইউআরএলটির সামগ্রীটি টার্মিনালে মুদ্রিত হবে। এটি সেই তথ্য যা আপনার ওয়েব ব্রাউজারটি সেই URL টি দেখার পরে দেখে। এটি কীভাবে আমাদের সহায়তা করে? ঠিক আছে, কমান্ডের জন্য পতাকাগুলি নিবিড়ভাবেcurl দেখুন । আমরা যদি প্যারামিটারটি পাস করি তবে --headসিআরএল অনুরোধ থেকে কেবল শিরোনামই ফিরিয়ে দেবে । এটি একটি URL দিয়ে চেষ্টা করুন it আপনি ফর্মের লাইনের একটি তালিকা পাবেন:

header-name: header-value

অবশ্যই লক্ষ করুন যে খুব প্রথম লাইনে এর মতো কিছুই দেখা যাচ্ছে না। আমরা আগে যে স্ট্যাটাস কোডের কথা বলেছিলাম তা মনে আছে? আপনি এটি প্রথম পংক্তিতে তিন অঙ্কের সংখ্যা হিসাবে লক্ষ্য করবেন। এখন আমাদের যা করা দরকার তা হ'ল পার্ল ব্যবহার করে এটি প্রথম লাইন থেকে বের করা - এবং আমরা পার্লের -eপতাকা ব্যবহার করে টার্মিনালে এটি করতে পারি যা আসুন পার্ল কোডটি সরাসরি পার্ল ইন্টারপ্রেটারে প্রেরণ করি। --silentএটি একটি অগ্রগতি বার প্রদর্শন করা থেকে দূরে রাখতে এবং আমাদের পার্ল স্ক্রিপ্টটি বিশৃঙ্খলা থেকে বাঁচানোর জন্য সিআরএল ( ) এ আমাদের একটি অতিরিক্ত পতাকাও যুক্ত করতে হবে।

আমাদের যা প্রয়োজন তা এখানে ... এটি শেল থেকে প্রচুর পালানোর প্রয়োজনের কারণে এটি বেশ জটিল:

পার্ল -e "\ $ s = \` কার্ল [ইউআরএল] - হেড - সাইলেন্ট \ `; \ $ এস = ~ এম / (\\ ডি {3}) /; প্রিন্ট \ $ 1"

এটি মূলত যা করছে তা হ'ল ইউআরএলটি সিআরএল নিয়ে আসা এবং এটি একটি পার্ল নিয়মিত প্রকাশের মাধ্যমে চালানো যা স্থিতি কোডটি বের করে এবং প্রিন্ট করে।

আপনার যা যা পরীক্ষা করা হচ্ছে তার ইউআরএল-এ এখন আপনাকে যা দেওয়ার দরকার তা এটি '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 এবং '1' ফিরিয়ে দিলে প্রত্যাবর্তনের মান হবে '0'। তারপরে আপনি শেলটিতে এই কমান্ডটি শৃঙ্খলাবদ্ধ করতে পারেন ঠিক তেমন কোনও অন্য কমান্ডের মতো।


তত্ত্ব এবং সমাধান সম্পর্কে অনেক ধন্যবাদ, ... তবে পার্ল অংশ, .. আমি এটিকে কেবল একটি সাধারণ শেল স্ক্রিপ্ট দিয়ে তৈরি করতে আশ্চর্য করি, .. কাজ করার জন্য, ....
এজি মোহাম্মদ এরদিন

@ ওয়ারং: আচ্ছা ... একটি শেল স্ক্রিপ্টকে কেবল একটি দূরবর্তী ইউআরএল অনুসন্ধান করতে নয়, প্রতিক্রিয়াটি বিশ্লেষণ করার জন্য একটি বাহ্যিক কমান্ড কল করতে হবে।
নাথান ওসমান

হ্যাঁ ... এবং মাইবি আমি cutকমান্ডগুলির সাথে প্রতিক্রিয়াটি পার্স করার চেষ্টা করতে পারি ... তবে এখনও কাজ করে না, .. আপাতত, আপনি যা করেছেন ঠিক তেমনই এটি করি ..
এগি মোহাম্মদ এরদিন

@ ওয়ারুংনসি 49: এরকম কিছু curl $url --head --silent | head -n 1 | cut -d ' ' -f 2?
zpea

@ জর্জ এডিসন: সুন্দর উত্তর! যেমন আপনি বাশ থেকে পার্ল কোডটি উদ্ধৃত করার কথা উল্লেখ করেছেন: আপনি যদি আপনার পার্ল এক্সপ্রেশনটির চারপাশে 'ডাবল কোট ( ") পরিবর্তে একক উদ্ধৃতি ( ) দিয়ে থাকেন তবে আপনি প্রচুর ব্যাকস্ল্যাশ থেকে মুক্তি পেতে পারেন ।
zpea

13

আপনি --spiderউইজেটের বিকল্পটি ব্যবহার করতে পারেন , যা আসলে ফাইলটি ডাউনলোড করে না, তবে সেখানে রয়েছে কিনা তা পরীক্ষা করে দেখুন। আপনার উদাহরণে:

wget --spider http://192.168.1.1/backup/01012011.zip

এটি হয় 200 OKযদি ফাইলটি উপস্থিত থাকে তবে একটি ত্রুটিযুক্ত একটি বার্তা , বা ত্রুটি, যেমন 404 Not Foundএটি উপস্থিত না থাকলে, বা 403 Forbiddenযদি আপনার কাছে এটি পাওয়ার অনুমতি না থাকে তবে তা ফিরিয়ে আনবে ।


1
wget http://192.168.1.1/backup/01012011.zip

ফলাফল কোড 0 এর অর্থ হ্যাঁ, অন্য কিছু - না।

আপনি স্ক্রিপ্টের সাথে $?ভেরিয়েবলের সাথে ফলাফল কোড পরীক্ষা করতে পারেন ।


1
আরে মিকাইল! রিটার্ন মানগুলি ব্যাখ্যা করা ভাল ধারণা। তবে এই কমান্ডটি পুরো ফাইলটি ডাউনলোড করবে, কেবল এটি উপলব্ধ কিনা তা যাচাই করে না।
zpea
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.