ترمینال (Terminal) یکی از مهمترین ابزارهای سودمندی است که در اختیار توسعه دهندگان است. تسلط بر آن میتواند تاثیر بسیار مثبتی بر جریان کار شما داشته باشد، بسیاری از کارهای روزمره با نوشتن یک دستور ساده و زدن دکمهی Enter انجام میشوند.
در این مقاله، میخواهیم مجموعهای از دستورات Unix را گردآوری کنیم که به شما کمک میکنند بیش از پیش از ترمینال خود استفاده کنید. بعضی از آنها به صورت پیشفرض در سیستم عامل وجود دارند (built in) و برخی دیگر ابزارهای رایگانی هستند که مورد آزمایش قرار گرفتهاند و در کمتر از یک دقیقه نصب و راهاندازی میشوند.
Curl
Curl یک ابزار خط فرمان است برای ایجاد درخواستها بر بستر پروتکلهای HTTP، HTTPS، FTP و دهها پروتکلی که ممکن است در مورد آنها نشنیده باشید. میتواند فایلها را دانلود کند، سرآیندهای (headers) پاسخ را بررسی کند و به آسانی به دادههای راه دور (remote) دسترسی داشته باشد.
در توسعهی وب، از curl اغلب برای تست ارتباطها و کار با RESTful APIs استفاده میشود.
# Fetch the headers of a URL. curl -I http://google.com HTTP/1.1 302 Found Cache-Control: private Content-Type: text/html; charset=UTF-8 Referrer-Policy: no-referrer Location: http://www.google.com/?gfe_rd=cr&ei=0fCKWe6HCZTd8AfCoIWYBQ Content-Length: 258 Date: Wed, 09 Aug 2017 11:24:01 GMT # Make a GET request to a remote API. curl http://numbersapi.com/random/trivia ۲۹ is the number of days it takes Saturn to orbit the Sun.
دستورات curl میتوانند بسیار پیچیدهتر از دستورهای فوق باشند. گزینههای زیادی برای کنترل سرآیندها، کوکیها (cookies)، احراز هویت و خیلی چیزهای دیگر وجود دارد. برای مطالعهی بیشتر میتوانید کتاب عالی و رایگان Everything curl را مطالعه کنید.
Tree
Tree یک ابزارک خط فرمان است که به شما ارائهای دیداری از فایلهای درون یک پوشه میدهد. به صورت بازگشتی کار میکند و سطوح تو در تو را پیمایش و تمام محتوا را به شکل یک درخت ترسیم میکند. به این ترتیب شما میتوانید دید بهتری داشته باشید و فایلهایی که میخواهید را به سرعت پیدا کنید.
tree . ├── css │ ├── bootstrap.css │ ├── bootstrap.min.css ├── fonts │ ├── glyphicons-halflings-regular.eot │ ├── glyphicons-halflings-regular.svg │ ├── glyphicons-halflings-regular.ttf │ ├── glyphicons-halflings-regular.woff │ └── glyphicons-halflings-regular.woff2 └── js ├── bootstrap.js └── bootstrap.min.js
همچنین این امکان وجود دارد که نتایج را با الگویی شبیه به عبارات منظم (Regular Expression) ساده، فیلتر کنید:
tree -P '*.min.*' . ├── css │ ├── bootstrap.min.css ├── fonts └── js └── bootstrap.min.js
Tmux
بر اساس آنچه در مستندات خودش نوشته شده است، Tmux یک ترمینال چندمنظوره (terminal multiplexer) است. اگر بخواهیم به زبان آدمیزاد بگوییم، به این معناست که ابزاری برای مرتبط کردن چند ترمینال در یک ترمینال است.
به شما این امکان را میدهد که بین برنامهها در یک ترمینال جابهجا شوید، پنلهای جدا از هم داشته باشید، چند ترمینال را به همان نشست (session) پیوست کنید و همه آنها را با یکدیگر همگامسازی (sync) کنید. Tmux به طور ویژه برای کار با یک سرور راه دور مناسب است، چرا که میتوانید تبهای جدید ایجاد کنید بدون اینکه نیاز به لاگین مجدد داشته باشید.
Disk usage – du
دستور du گزارشی از فضای استفاده شدهی دیسک توسط فایلها و پوشهها ارائه میکند. استفاده از آن بسیار ساده است و به صورت بازگشتی کار میکند، وارد هر زیرپوشه شده و حجم هر فایل را به صورت جداگانه نمایش میدهد.
یک استفادهی عمومی از du وقتیست که یکی از درایوهای دیسک شما پُر شده است و شما علت آن را نمیدانید. با استفاده از این دستور میتوانید به سرعت، میزان فضایی که توسط هر پوشه اشغال شده است را مشاهده و فایل یا پوشهای که بیشترین فضا را به خود اختصاص داده است پیدا کنید.
# Running this will show the space usage of each folder in the current directory. # The -h option makes the report easier to read. # -s prevents recursiveness and shows the total size of a folder. # The star wildcard (*) will run du on each file/folder in current directory. du -sh * ۱٫۲G Desktop ۴٫۰K Documents ۴۰G Downloads ۴٫۰K Music ۴٫۹M Pictures ۸۴۴K Public ۴٫۰K Templates ۶٫۹M Videos
دستور مشابهی با نام df وجود دارد (Disk Free) که اطلاعات متنوعی در مورد میزان فضای باقیماندهی دیسک ارائه میکند (برعکس دستور du است).
Git
Git در حال حاضر محبوبترین سیستم کنترل نسخه (version control) است. این یکی از ابزارهایی است که توسعهی وب مدرن با آن تعریف میشود و نمیشد که آن را در این لیست نیاوریم.
ابزارها و برنامههای فراوانی برای کار کردن با git در دسترس هستند، اما بسیاری از افراد ترجیح میدهند که از طریق ترمینال با آن کار کنند. خط فرمان (CLI) آن بسیار قدرتمند است و حتی میتواند تاریخچهی پروژههای بسیار پیچیده و درهمتنیده را کنترل نماید.
برای آشنایی بیشتر، توصیه می کنم آموزش در ۳۰ دقیقه، GIT را یاد بگیرید را مطالعه کنید.
Tar
Tar یکی از ابزارهای پیشفرض Unix است که برای کار با فایلهای آرشیو کاربرد دارد. این امکان را به شما میدهد که خیلی سریع چند فایل را به صورت یک بسته درآورید و به این ترتیب بتوانید خیلی راحتتر آنها را ذخیره یا جابهجا کنید.
tar -cf archive.tar file1 file2 file3
استفاده از گزینهی x- همراه با tar برای خارج کردن فایلها از حالت آرشیو کاربرد دارد.
tar -xf archive.tar
توجه داشته باشید که فرمتهای دیگری نظیر zip. و rar. با استفاده از tar
باز نمیشوند و به دستورات کاربردی دیگری همچون unzip نیاز خواهید داشت.
بسیاری از سیستمهای Unix مدرن، یک نسخهی توسعه یافته از tar را اجرا میکنند (GNU tar) که همزمان فشردهسازی حجم فایل را نیز انجام میدهد:
# Create compressed gzip archive. tar -czf file.tar.gz inputfile1 inputfile2 # Extract .gz archive. tar -xzf file.tar.gz
اگر سیستمعامل شما این نسخه از tar را ندارد، میتوانید از gzip ،zcat یا compress برای کم کردن حجم فایلهای آرشیوی استفاده کنید.
md5sum
unix دارای تعدادی دستور داخلی برای hash کردن هست که از آن جمله میتوان به md5sum و sha1sum اشاره نمود. این ابزارهای خط فرمان در برنامه نویسی دارای کاربردهای متنوعی هستند اما یکی از مهمترین آنها بررسی درستی و تمامیت (integrity) فایلهاست (یعنی اینکه فایل دچار تغییر نشده باشد).
به عنوان مثال، اگر یک فایل iso. را از یک منبع نامطمئن دانلود کرده باشید، این امکان وجود دارد که فایل محتوی اسکریپتهای مخرب باشد. برای آنکه از امن بودن آن فایل اطمینان حاصل کنید، میتوانید یک md5 یا انواع دیگر hash از آن بسازید.
md5sum ubuntu-16.04.3-desktop-amd64.iso ۰d9fe8e1ea408a5895cbbe3431989295 ubuntu-16.04.3-desktop-amd64.iso
حالا میتوانید عبارت تولید شده را با آنچه توسط مؤلف اصلی (original author) ارائه شده است مقایسه کنید (به عنوان مثال لیستی از hash های سیستم عامل Ubuntu در UbuntuHashes وجود دارد).
Htop
Htop قدرتمندترین جایگزین برای top
(که به صورت پیشفرض به عنوان task manager در سیستم وجود دارد) است. با توجه به گزینههای فراوانی که برای مانیتور کردن و کنترل فرآیندهای سیستم دارد، یک واسط پیشرفته را فراهم کرده است.
htop با وجود آنکه در ترمینال اجرا میشود از کنترلهای ماوس به خوبی پشتیبانی میکند. به این ترتیب استفاده از منوها، انتخاب فرآیندها، و انجام اموری همچون مرتبسازی و فیلتر کردن، به آسانی قابل انجام است.
Ln
لینکها (Links) در Unix مشابه با میانبرها (shortcuts) در سیستم عامل ویندوز هستند و به شما امکان دسترسی سریع به فایلها را میدهند. لینکها با استفاده از دستور ln
ایجاد میشوند و میتوانند بر دو نوع باشند: سخت (hard) یا نمادین (symbolic). هر یک از این دو نوع دارای ویژگیهای متفاوتی هستند و در مواقع متفاوتی کاربرد دارند (بیشتر بخوانید).
در اینجا به عنوان مثال، یکی از راههای زیادی که میتوانید از لینکها استفاده کنید را نشان میدهیم. فرض کنید یک پوشه به نام Scripts در دسکتاپ ما وجود دارد. این پوشه شامل تعدادی اسکریپتهای bash است که به خوبی سازمان یافتهاند و ما معمولا از آنها استفاده میکنیم. هر زمان که بخواهیم یکی از این اسکریپتها را صدا بزنیم، باید چیزی شبیه به دستور زیر اجرا کنیم:
~/Desktop/Scripts/git-scripts/git-cleanup
واضح است که نوشتن مسیر کامل برای هر بار اجرای اسکریپت، خیلی راحت و مناسب نیست. پس به جای این کار، میتوانیم یک symlink (مخفف symbolic link است) از پوشهی Scripts به usr/local/bin/ ایجاد کنیم. به این ترتیب اسکریپتهای ما از هر پوشهی دیگری نیز قابل اجرا خواهند بود.
sudo ln -s ~/Desktop/Scripts/git-scripts/git-cleanup /usr/local/bin/
با ایجاد این symlink ما میتوانیم اسکریپتهای خودمان را به سادگی و تنها با نوشتن نام آن در هر جای ترمینال، فراخوانی کنیم.
git-cleanup
SSH
با استفاده از دستور ssh
کاربران میتوانند به سرعت به یک میزبان راه دور (remote host) متصل و وارد Unix shell آن شوند. به این ترتیب امکان اجرای دستورات روی سرور از ترمینال ماشین محلی (local machine’s terminal) به صورت مستقیم فراهم میشود.
برای برقراری ارتباط شما نیاز دارید که به سادگی آدرس آیپی درست یا url را مشخص کنید. اولین مرتبه که به یک سرور جدید متصل میشوید، با یکی از صورتهای احراز هویت مواجه خواهید شد.
ssh username@remote_host
اگر شما میخواهید خیلی سریع یک دستور را روی سرور اجرا کنید بدون آنکه وارد آن شوید، دستور را پس از url بنویسید. دستور روی سرور اجرا شده و نتیجهی آن به شما برگشت داده میشود.
ssh username@remote_host ls /var/www some-website.com some-other-website.com
با استفاده از SSH کارهای زیادی میتوانید انجام دهید. مثلا پروکسیها یا تونلها را ایجاد کنید، ارتباطهای خود را با استفاده از کلیدها امن کنید، فایلها را منتقل کنید و خیلی کارهای دیگر. برای مطالعهی بیشتر، این راهنما را بخوانید.
Grep
Grep یک ابزار استاندارد Unix برای پیدا کردن یک عبارت داخل یک متن است. یک ورودی را به شکل فایل یا جریان مستقیم (direct stream) دریافت میکند، محتوای آن را با یک عبارت منظم بررسی میکند و تمام خطوطی که مطابقت دارند را برمیگرداند.
این دستور برای کار کردن با فایلهای حجیم که نیاز به فیلتر کردن دارند، بسیار سودمند است. در مثال زیر، دستور grep
را با دستور date
ترکیب میکنیم تا یک فایل بزرگ لاگ را جستجو کنیم و فایلی جدید ایجاد کنیم که تنها شامل خطاهای (errors) امروز باشد.
// Search for today's date (in format yyyy-mm-dd) and write the results to a new file. grep "$(date +"%Y-%m-%d")" all-errors-ever.log > today-errors.log
یک دستور فوقالعادهی دیگر برای کار کردن با رشتهها، دستور sed است. این دستور از grep قدرتمندتر و البته پیچیدهتر است. و میتواند تقریبا هر کار مرتبط با رشتهها همچون اضافه کردن، حذف کردن و جابهجا کردن آنها را انجام دهد.
Alias
خیلی از دستورات Unix، که به برخی از آنها در این مقاله هم اشاره شد، ممکن است با اضافه کردن تمام گزینهها به آنها، خیلی طولانی شوند. برای آنکه آنها را راحتتر به خاطر بسپارید، میتوانید یک نام مستعار کوتاه برایشان ایجاد کنید. اینکار با استفاده از دستور alias قابل انجام است:
# Create an alias for starting a local web server. alias server="python -m SimpleHTTPServer 9000" # Instead of typing the whole command simply use the alias. server Serving HTTP on 0.0.0.0 port 9000 ...
نامهای مستعار تا زمانی که ترمینال را باز نگه دارید در دسترس هستند. اگر میخواهید آنها را به صورت دائمی و ثابت داشته باشید؛ باید دستور alias را به فایل bashrc. خود اضافه نمایید.
منبع: ۱۲Terminal Commands Every Web Developer Should Know About
ترجمه: سیدمحمدحسین طباطبایی بالا