پس از انتشار ۶۲ قسمت از مجموعه مقالات آموزشی مدیریت سرورِ وب لینوکس، پس از مدت تقریباً طولانی با قسمت ۶۳ام در خدمت شما هستم. تا اینجا ما با بسیاری از کارهای مقدماتی که پس از تحویل سرور لینوکس باید انجام می دادیم و همچنین دستورات پایه و اساسی در لینوکس آشنا شدیم. اما یکی دیگر از دستورات لینوکس wget نام دارد که در این مرحله از آموزش سرور لینوکس به باز کردن مبحثِ این دستور خواهیم پرداخت.
به طور خلاصه دستور wget برای دانلود و دریافت پرونده ها و صفحات مختلف اینترنتی کاربرد دارد که با بیشتر پروتکل ها کار می کند. در ویندوز و زمانی که مرورگر اینترنتی را باز می کنیم و وارد صفحه می شویم، در حال دانلود کردن پروندۀ همان صفحه و همچنین پرونده های دیگری که به آن صفحه متصل شدند هستیم. حتی زمانی که روی پیوند دانلود یک نرم افزار یا عکس یا کتاب کلیک می کنیم، این کار یعنی دانلود توسط مرورگر برای ما انجام می شود. اما در لینوکس یکی از نرم افزارهای بسیار مفید برای امر دانلود کردن همین بسته نرم افزاریِ wget است. این بسته که دستوری با همین عنوان در خط فرمان لینوکس دارد، شامل مشخصه های بسیاری هم هست که برای مواقع مختلف که نیازهای مختلفی داریم را پوشش دهد.
یاد گرفتن تمام جوانب دستور wget شاید زیاد ضروری نباشد. اما ما در اینجا با مثال به چند تا از پرکاربردترین ترکیب دستوریِ برنامه wget اشاره خواهیم کرد که اگر با مقاله های قبلی وبنولوژی همراه بوده باشید، الان به طور کامل با این دستور هم بدون مشکل آشنا خواهید شد. ما در خیلی از مواقع، مثل نصب یک بستۀ نرم افزاری یا حتی دریافت چندین پروندۀ کوچک یا بزرگ، نیاز داریم از دستور wget استفاده کنیم و آنها را روی سرور خود بیاوریم. دقیقاً مثل همان کار دانلود که با مرورگر اینترنتی انجام می دهیم.
دستور wget بسیار پرکاربردتر از آن چیزی است که تصور می کنید. مثلاً شاید ندانید که با این دستور می توان کل یک سایت را به صورت آفلاین روی سرور دریافت (دانلود) کرد. این کار را به همراه تمامی محتویات سایت که قابل دسترس توسط همگان است می توان انجام داد. در ادامه با نمونه ای از این کاربرد هم آشنا خواهید شد.
ساختار کلی دستور wget
ساختار کلی این دستور با عبارت wget شروع شده و به مانند هر دستور لینوکسی دیگر دارای مشخصه هایی هم هست. در آخر هم نشانی اینترنتی یا همان URL مقصد برای دریافت آن خواهد آمد. پروتکل هایی که از آنها پشتیبانی می شود شامل؛ HTTP و HTTPS و FTP است. همچنین از پروکسی های HTTP هم پشتیبانی می کند.
wget [option]… [URL]…
در ادامه با مثال های کاربردیِ این دستور بیشتر آشنا خواهید شد.
کاربردهای کلی دستور wget
۱- برای دریافت یا همان دانلود یک پرونده که دارای یک نشانی اینترنتی با پروتکل های مذکور است، به راحتی نشانی را بعد از دستور wget در خط فرمان لینوکس وارد می کنیم. اگر مشکلی وجود نداشته باشد، یک نوار پیشرفت درون همان محیط خط فرمان به نمایش در خواهد آمد که نشان از پیشرفته دانلود پرونده دارد. این پرونده هر نوع پرونده ای می تواند باشد. فقط دقت کنید نشانی که وارد می کنید باید کامل باشد.
wget http://example.com/file.iso
۲- اگر خواسته باشید پروندۀ مورد نظر را با یک نام دلخواه روی سرورِ خودتان دریافت کنید، باید از مشخصۀ output-document طبق نمونۀ زیر استفاده کنید. باز هم خدمت شما عرض می کنم اگر با ساختار دستورات لینوکس آشنا نیستید، به مقالات آموزشیِ گذشته مراجعه کنید.
wget ‐‐output-document=filename.html example.com
۳- اگر خواسته باشید پروندۀ مورد نظر در یک مکانی به غیر از مکان فعلیِ شما ذخیره شود، باید از مشخصۀ directory-prefix استفاده کنید که در جلوی علامت = مسیر مورد نظر نوشته شود. قابل ذکر است که دستور wget بدون هیچ مشخصه ای، کارِ دریافتِ پرونده را در مسیر فعلی انجام می دهد.
wget ‐‐directory-prefix=folder/subfolder example.com
۴- یکی از ویژگی های بستۀ نرم افزاری wget این است که اگر به هر دلیلی عملیات دانلود با شکست روبرو شود، شما می توانید بعداً از ادامه دریافت را انجام دهید. این کار را با مشخصۀ continue می توانید انجام دهید. البته دانلود باید با خود همین دستور wget انجام شده باشد، نه دستور دیگر.
wget ‐‐continue example.com/big.file.iso
۵- یکی دیگر از ویژگی های دستور wget این است که می تواند زمان آخرین ایجاد تغییرات در پرونده یا پرونده های دانلودی را تعیین کند و فقط آنهایی را دریافت کند که جدید هستند. این کار را با مشخصۀ timestamping می توان انجام داد. در این صورت فقط پرونده هایی که از آخرین دریافت شان به روز شدند دریافت می شوند.
wget ‐‐continue ‐‐timestamping https://wordpress.org/latest.zip
۶- اگر چندین نشانی داشته باشید که خواسته باشید همۀ آنها را یکجا دانلود کنید، می توانید نشانی ها را داخل یک پروندۀ متنی txt قرار دهید و مسیر آن را با استفاده از مشخصۀ input به دستور wget بدهید.
wget ‐‐input list-of-file-urls.txt
۷- اگر خواسته باشید چندین پرونده را به صورت متوالی دانلود کنید، باید از ساختار زیر استفاده کنید. از طریق دستور زیر پرونده ها از ۱.jpg شروع به دانلود شدن می کنند تا ۲۰.jpg.
wget http://example.com/images/{1..20}.jpg
۸- یکی از کاربردهای بسیار جالب wget این است که می توانید یک سایت یا یک مسیر خاصی از نشانیِ یک سایت را به طور کامل به همراه تمامی متعلقات آن دریافت کنید (page-requisites)، که به صورت آفلاین آن را داشته باشید.
در دستور زیر مشخصۀ span-hosts باعث می شود دانلود فقط محدود به دامنه و مسیری نشود که در انتهای دستور آورده شده است. به دلیل اینکه دانلود می تواند به صورت برگشتی انجام گیرد، عکس ها و محتویاتی که روی سرورهای دیگر وجود دارند هم با این مشخصه دریافت خواهند شد.
در دستور زیر مشخصۀ convert-links پس از اینکه دانلود به اتمام می رسد، پیوندهای موجود در پرونده ها را طوری تغییر می دهد که شما بتوانید به صورت کامل صفحات سایت را ببینید و بین آنجا جابجا شوید. حتی باعث می شود تصاویر و دیگر متعلقات صفحه هم بدون مشکل دیده شودن.
و در آخر مشخصۀ adjust-extension پسوندهای پرونده های دانلود شده را تنظیم می کند. مثلاً به پرونده ها پسوند html اضافه می کند.
wget ‐‐page-requisites ‐‐span-hosts ‐‐convert-links ‐‐adjust-extension http://example.com/dir/file
دریافت کل محتویات سایت با wget
۹- با دستور زیر می توانید یک سایت را با کل محتویاتی به آن متصل شده دانلود کنید. البته این کار ممکن است زمان و منابع زیادی را مصرف کند.
wget ‐‐execute robots=off ‐‐recursive ‐‐no-parent ‐‐continue ‐‐no-clobber http://example.com/
۱۰- دانلود تمام پرونده های mp3 که در زیر پوشۀ مورد نظر قرار گرفتند.
wget ‐‐level=1 ‐‐recursive ‐‐no-parent ‐‐accept mp3,MP3 http://example.com/mp3/
۱۱- دانلود همۀ عکس های سایت در یک مسر خاص.
wget ‐‐directory-prefix=files/pictures ‐‐no-directories ‐‐recursive ‐‐no-clobber ‐‐accept jpg,gif,png,jpeg http://example.com/images/
۱۲- دانلود کتاب های PDF که در همان سایت و همچنین زیردامنه هایی که ما تعیین کردیم قرار گرفته اند.
wget ‐‐mirror ‐‐domains=abc.com,files.abc.com,docs.abc.com ‐‐accept=pdf http://abc.com/
۱۳- دانلود همۀ پرونده های یک سایت، به استثنای چند تا مسیر خاص.
wget ‐‐recursive ‐‐no-clobber ‐‐no-parent ‐‐exclude-directories /forums,/support http://example.com
دریافت محتویات محدود شده با wget
در خیلی از مواقع ممکن است ما محتوایی را خواسته باشید دانلود کنیم که پشت صفحۀ ورود (login) قرار گرفته باشد. یعنی اول باید وارد سایت شویم، بعد دریافت را انجام دهیم. در این صورت نمونه های زیر ارائه می شوند.
۱۴- دانلود از سایت هایی که فقط ارجاع از یک سایت خاص و یا ورود با یک مرورگر خاصی را قبول می کنند. به مشخصه های دستور زیر با دقت نگاه کنید.
wget ‐‐refer=http://google.com ‐‐user-agent=”Mozilla/5.0 Firefox/4.0.1″ http://example.com
۱۵- دانلود پرونده ها از سایت هایی که نیاز است با رمز عبور وارد آنها شویم.
wget ‐‐http-user=labnol ‐‐http-password=hello123 http://example.com/secret/file.zip
۱۶- دریافت صفحاتی که پشت صفحۀ ورود قرار گرفتند. شما باید نام کاربری و رمز عبور را در دستور زیر عوض کنید.
wget ‐‐cookies=on ‐‐save-cookies cookies.txt ‐‐keep-session-cookies ‐‐post-data ‘user=labnol&password=123’ http://example.com/login.php
پس از ورود در مواقع بعدی که خواستید مجدد یک صفحۀ دیگری از ناحیۀ محدود شده را دریافت کنید، باید از دستور زیر استفاده کنید.
wget ‐‐cookies=on ‐‐load-cookies cookies.txt ‐‐keep-session-cookies http://example.com/paywall
دریافت جزئیات پرونده ها با wget
۱۷- دریافت حجم یک پرونده قبل از دانلود آن. در پاسخی که به شما برگردانده می شود، باید به مورد Content Length دقت کنید. واحد آن هم به بایت می باشد.
wget ‐‐spider ‐‐server-response http://example.com/file.iso
۱۸- دانلود کردن پرونده و نمایش محتویات آن در نمایشگر بدون ذخیره کردن آن به صورت محلی.
wget ‐‐output-document – ‐‐quiet google.com/humans.txt
۱۹- دریافت آخرین وضعیت تغییرات در پرونده مورد نظر.
wget ‐‐server-response ‐‐spider http://www.example.org
۲۰- اگر خواسته باشید پیوندهای سایت را بررسی کنید که ببینید همگی کار می کنند، باید از دستور زیر استفاده کنید. مشخصۀ spider باعث می شود پرونده ها به صورت محلی روی سرور یا رایانۀ شما ذخیره نشود.
wget ‐‐output-file=logfile.txt ‐‐recursive ‐‐spider http://example.com
تا اینجا حتماً متوجه این موضوع شدید که با دستور wget چه کارهایی به غیر از دریافت سادۀ یک پرونده می توان انجام داد. حالا در ادامه به نکات بیشتری راجع به این دستور اشاره خواهم کرد.
بیشتر با دستور wget
همانطور که تا الان متوجه شدید، wget به صورت پیش فرض مثل یک خزنده یا ربات برای پویش و دانلود فایل های مختلف یک سایت برخورد می کند. یعنی اگر در مواجه با پروندۀ robots.txt یا مشخصۀ rel=nofollow روی پیوندهای یک سایت، مواجه شود، امکان ورود به آنجا که برای ربات ها مسدود شده است را نخواهد داشت. برای جلوگیری از این مشکل می توانید از مشخصۀ execute robots=off استفاده کنید که نمونه های آن را در بالا دیدید.
یا حتی امکان دارد سایت دسترسیِ یک بخشی از سایت را به ربات ها یا خزنده ها بسته باشد که اگر این کار را با بررسی کردن agent انجام دهد، می توانید با افزودن مشخصۀ user-agent=Mozilla به دستور wget خود، این مورد را هم دور بزنید.
در ضمن دستور wget به صورت غیر فعل و انفعالی است. یعنی می تواند در پس زمینۀ فعالیت های سرور کار خودش را انجام دهد. از همین رو زمانی که شما در حال دانلود کردن یک سایت بزرگ یا حتی یک پروندۀ سنگین باشید، فشار زیادی به سرور شما وارد کند. در این صورت شاید خواسته باشید نرخ دریافت را محدود کنید، یا در میان دانلود زمان های استراحت به صورت خودکار قرار دهید. این کارها را با مشخصه های زیر می توانید انجام دهید.
wget ‐‐limit-rate=20k ‐‐wait=60 ‐‐random-wait ‐‐mirror example.com
با limit-rate نرخ دریافت را محدود به ۲۰ کیلوبیت در ثانیه می کنید.
با wait یک زمان انتظار بین دریافت هر منبع تعیین می کنید.
و با random-wait زمان انتظار را روشن می کنید.
این بود از دستورات پرکاربرد و بسیار مهم بستۀ نرم افزاری wget که علاوه بر اینها شما قادرید از مشخصه های دیگر این دستور هم استفاده کنید. با دستور man wget قادرید توضیحات کامل تری از wget را مطالعه کنید.
سلام
مقالات شما زبان فصیح و روانی دارد ، خواننده از خواندن آن لذت می برد کتابهایی که در زمینه لینوکس به فارسی ترجمه شده بسیار خشک و رسمی است ، کتابی میخواندم درباره مدیریت سرور لینوکس که ناگهان وسط کتاب مطالب آن کاملا عوض شد و نویسنده کتاب گیر داده بود به کامپایل هسته لینوکس !!! که این مطلب حدود ۱۲۰ صفحه بود و واقعا بسیارگیج کننده و کسالت آور ، به هر حال به خاطر این زحمتی که می کشید از شما سپاسگزارم
سلام؛ ممنونم از دلگرمیِ شما! این مقالاتی که نوشته شدند و خواهند شد، اگر کتاب بشن، کامل ترین کتاب مدیریت سرور لینوکس به صورت کاربردی خواهد بود که تا به حال به زبان نوشته شدند.
اما قصد بنده انتشار رایگان بود که همه بتونند ازش استفاده کنند و زمانی که شخص بنده برای آموزش اونها گذاشتم رو دیگران نگذارند.
تا انتهای مقالات آموزشیِ سرور لینوکس همراه باشید.
سلام برای دانلود فایل هایی که به عنوان مثال روی adf.ly اپلود شدن چطوری باید اقدام به دانلود روی سرور کرد؟!
من اون لینکی که بعد از پنج ثانیه برای دانلود میده رو روی سرور wget کردم اما متاسفانه اون فایل رو دانلود نمیکنه و یه فایل html دانلود میکنه ممنون میشم اگه راهنمایی کنید
سلام؛ با wget روی لینوکس نمیتونید لینک های غیرمستقیم رو دانلود کنید. اینجا شما باید از مرورگرهایی مثل lynx یا links که از جاوا اسکریپت پشتیبانی می کنند روی خط فرمان لینوکس استفاده کنید. یا اینکه اصلاً محیط میزکار Gnome یا KDE رو روی سرور نصب کنید و با یک مرورگر گرافیکی اقدام به دانلود اون جور لینک ها کنید.
سلام میشه لطفا دستور دانلود از اینستا گرام که جدیدا هم برای دیدن فیلم هاش باید به اکانت کاربری وارد شد رو بذارید؟
من همه دستورات رو که گذاشته بودید رو بررسی کردم ولی هیچ کدام نتوانست فایل های داخل اینستاگرام رو دانلود کند، لطفا راهنمایی کنید.