خط فرمان زندگی ما را بسیار آسانتر می کند زیرا می توانیم چندین کار روزمره را به صورت خودکار انجام دهیم و همه چیز را روان تر کنیم. به جای کلیک کردن در رابط کاربری گرافیکی (GUI) ، می توانیم چند دستور را فراخوانی کنیم و آن کار را انجام دهیم.
پوسته یونیکس (Unix shell) یک مفسر خط فرمان یا Shell است که یک واسط کاربر خط فرمان را برای سیستم عامل های یونیکس و شبه-یونیکس محیا میکند. یک یونیکس شل در واقع یک زبان اسکریپت نویسی و یک واسط خط فرمان تعاملی است که همچنین توسط خود سیستم عامل برای کنترل اجرای سیستم استفاده میشود.
هر سیستم عامل لینوکس یا مبتنی بر Mac دارای یک خط فرمان است که به صورت پیش فرض نصب شده است، معمولاً تحت عنوان “ترمینال” شناخته می شود. خط فرمان (CLI) به ما امکان می دهد تا به راحتی فایل ها را جا به جا کنیم و تغییر نام دهیم، داده ها را مرتب کنیم و در پوشه های کامپیوتر جا به جا شویم.
پس از این مقدمه و بدون حرف بیشتر، ۱۱ ترفند خط فرمان را معرفی می کنیم که می تواند زندگی شما را آسان تر کند.
اول- grep
$ grep "some string" file
دستور grep درون هر فایلی را برای یافتن یک الگو جستجو می کند. همچنین الگوهای شامل کاراکتر خط جدید (newline) را نیز جستجو می کند و در نهایت هر خطی که با الگوی داده شده منطبق باشد را در خروجی نمایش می دهد.

grep
command to find all React keywords in a file با استفاده از گزینه i- می توانیم جستجو را بدون در نظر گرفتن کوچک و بزرگ بودن حروف انجام دهیم. به عنوان مثال دستور زیر با کلمات “REACT”، “REact” و “react” منطبق می شود.
$ grep -i "REact" file
اگر بخواهیم تعداد خطوطی که با رشته/الگوی داده شده منطبق می شوند را مشخص کنیم می توانیم از گزینه c- که معرف count است، استفاده نماییم.
$ grep -c "react" index.js

یک کمیک جالب و آموزنده در مورد دستور grep در اینترنت پیدا کردم که برای شما قرار دادم.

علاوه بر این، دستوراتی همچون egrep و fgrep وجود دارند که به ترتیب همان کار دستورات grep -E و grep -F را انجام می دهند. این نوع دستورات منسوخ شده اند و تنها برای حفظ قابلیت سازگاری با گذشته (backward compatibility) ارائه شده اند.
کارهای زیادی می توان با استفاده از دستور grep انجام داد. برای مطالعه عمیق تر مستندات آن را مطالعه نمایید.
دوم- ls
$ ls
دستور ls فایل ها و پوشه های موجود در مسیر جاری را لیست می کند. اگر مسیر داده شده به این دستور یک فایل باشد، اطلاعات آن فایل بر اساس گزینه های انتخابی نمایش داده می شوند. اگر مسیر داده شده یک پوشه باشد، اطلاعات فایل ها و زیرپوشه های درون آن نمایش داده می شوند.

همانطور که متوجه شده اید، فایل ها با رنگ خاکستری و پوشه ها با رنگ مایل به آبی نمایش داده شده اند. این به ما کمک می کند تا به آسانی بین آنها تمایز قائل شویم.
سوم- pwd
$ pwd

دستور pwd یک دستور خط فرمان سودمند است که مسیر جاری را نمایش می دهد. خروجی مسیر کامل سیستم دایرکتوری کار فعلی را به خروجی استاندارد چاپ می کند. به طور پیش فرض ، دستور pwd پیوندها (symlinks) را نادیده می گیرد ، اگرچه مسیر فیزیکی کامل پوشه جاری با استفاده از یک گزینه نشان داده می شود.
چهارم- cat
$ cat somefile.js

دستور cat دارای سه عملکرد مرتبط با فایل های متنی است:
- نمایش فایل متنی
- ترکیب چند فایل متنی
- ایجاد یک فایل جدید
رایج ترین استفاده از cat، خواندن محتوای فایل ها است و cat اغلب راحت ترین برنامه برای این منظور است.
در مثال زیر ، خروجی استاندارد cat با استفاده از عملگر تغییر مسیر خروجی (که توسط یک براکت زاویه ای با اشاره به سمت راست نشان داده می شود) به فایل دوم هدایت می شود:
$ cat somefile > somefile2

پنجم- echo
$ echo "some text"
دستور echo در لینوکس برای نمایش یک خط از متن یا رشته ای که به عنوان آرگومان به آن داده می شود، کاربرد دارد. دستور echo جزئی از دستورات داخلی (built-in) در لینوکس است و اغلب در اسکریپت های shell و یا فایل های batch برای نمایش وضعیت روی صفحه نمایش یا ثبت در یک فایل استفاده می شود.

ششم- touch
$ touch somefile
دستور touch برای ایجاد یک فایل بدون محتوا استفاده می شود. این دستور زمانی کاربرد دارد که کاربر داده ای برای ذخیره کردن هنگام ایجاد فایل نداشته باشد.

توجه کنید که در مثال بالا چطور از دستور touch برای ایجاد فایل و از دستور cat برای مشاهده محتوای آن استفاده کردیم. از آنجایی که فایل index2.js که به تازگی ایجاد کردیم، خالی است، دستور cat چیزی برنمی گرداند.
تفاوت اصلی بین دستورهای cat و touch به شرح زیر است:
- cat برای ایجاد فایل با محتوا استفاده می شود.
- touch برای ایجاد فایل بدون محتوا و یا برای ایجاد فایل های خالی استفاده می شود.
هفتم- mkdir
$ mkdir some-directory
همانطور که حدس زده اید، mkdir در مسیر فعال فعلی یک دایرکتوری خالی جدید ایجاد می کند. به جای اینکه در ویرایشگر متن یا GUI خود کلیک کنید، از این دستور برای ایجاد پوشه های جدید استفاده کنید.

نکته: توجه کنید که چگونه می توانیم با دستور قبلی ls داخل دایرکتوری را نگاه کنیم.
هفتم-الف- rm
$ rm someFile
rm مخفف remove است، که دقیقاً آنچه را که می گوید انجام می دهد. حذف می کند یا به عبارت دیگر ، یک فایل را پاک می کند.

rm
commandبه طور پیش فرض، دستور rm پوشه ها را حذف نمی کند. برای حذف پوشه ها باید پرچم rf- را به آن اضافه کنید.
$ rm -rf some-directory

نکته: دستور مثال قبل پوشه را بدون قید و شرط حذف می کند، چه پوشه دارای محتوا باشد یا نباشد.
هفتم-ب- rmdir
$ rmdir some-directory
در صورت عدم وجود محتوا در یک پوشه، دستور rmdir آن پوشه را حذف می کند.

هشتم- tail
$ tail somefile
دستور tail یک فایل را می خواند و بخش انتهایی آن را به خروجی می فرستد.

دستور tail هنگام ارائه گزارش خرابی یا گزارش های سابقه قبلی مفید است. در اینجا مثالی از مفید بودن آن هنگام کار با پرونده های لاگ آورده شده است.
# tail /var/log/messages
Mar 20 12:42:22 hameda1d1c dhclient[4334]: DHCPREQUEST on eth0 to 255.255.255.255 port 67 (xid=0x280436dd)
Mar 20 12:42:24 hameda1d1c avahi-daemon[2027]: Registering new address record for fe80::4639:c4ff:fe53:4908 on eth0.*.
Mar 20 12:42:28 hameda1d1c dhclient[4334]: DHCPREQUEST on eth0 to 255.255.255.255 port 67 (xid=0x280436dd)
Mar 20 12:42:28 hameda1d1c dhclient[4334]: DHCPACK from 10.76.198.1 (xid=0x280436dd)
Mar 20 12:42:30 hameda1d1c avahi-daemon[2027]: Joining mDNS multicast group on interface eth0.IPv4 with address 10.76.199.87.
Mar 20 12:42:30 hameda1d1c avahi-daemon[2027]: New relevant interface eth0.IPv4 for mDNS.
Mar 20 12:42:30 hameda1d1c avahi-daemon[2027]: Registering new address record for 10.76.199.87 on eth0.IPv4.
Mar 20 12:42:30 hameda1d1c NET[4385]: /sbin/dhclient-script : updated /etc/resolv.conf
Mar 20 12:42:30 hameda1d1c dhclient[4334]: bound to 10.76.199.87 -- renewal in 74685 seconds.
Mar 20 12:45:39 hameda1d1c kernel: usb 3-7: USB disconnect, device number 2
نهم- wget
$ wget someurl
GNU wget یک بسته نرم افزاری رایگان برای دریافت فایل از طریق پروتکل های http, https, ftp و ftps است که از پرکاربردترین پروتکل های اینترنت هستند. wget یک ابزار خط فرمان غیر تعاملی است بنابراین به آسانی می توان آن را در اسکریپت ها، فایل های CRON و یا ترمینال فراخوانی نمود.

GNU Wget دارای ویژگی های بسیاری برای بازیابی فایل های بزرگ و یا ایجاد mirror از کل وب سایت یا سایت های FTP است، از جمله:
- می توانید دانلودهای متوقف شده را با استفاده از REST و RANGE از سر بگیرید
- می توانید از wild card در نام فایل ها استفاده نمایید
- فایل های پیام مبتنی بر NLS برای بسیاری از زبان های مختلف
- در صورت نیاز لینک های absolute موجود در اسناد دانلود شده را به لینک های relative تبدیل می کند تا اسناد به صورت محلی بتوانند به هم لینک داشته باشند
- در اکثر سیستم عامل های مشابه UNIX و همچنین Microsoft Windows اجرا می شود
- پشتیبانی از پروکسی HTTP
- پشتیبانی از HTTP cookies
- ارتباط HTTP پایدار را پشتیبانی می کند
- انجام عملیات بدون نظارت / پس زمینه
- برای تعیین اینکه آیا اسناد در هنگام mirror کردن مجدداً نیاز به دانلود دارند یا نه، از Timestamp محلی فایل استفاده می کند
- GNU Wget تحت مجوز GNU General Public License توزیع می شود.
برای اطلاعات بیشتر اسناد رسمی GNU را بخوانید.
دهم- find
$ find path -name filename
دستور find به شما امکان می دهد به سرعت یک فایل یا پوشه را بیابید. وقتی در حال کار روی یک پروژه بزرگ هستید که صدها فایل و پوشه مختلف دارد، استفاده از این دستور مفید است.

جستجوی فایل هایی از نوع خاص
دستور find همچنین به شما امکان می دهد یک نوع خاص فایل ها را در یک پوشه (و زیرمجموعه های آن) جستجو کنید. به عنوان مثال، دستور زیر تمام فایل های .js را در پوشه کاری فعلی شما جستجو می کند.
$ find . -name "*.js"

یازدهم- mv
$ mv somefile /to/some/other/path
دستور mv فایل ها یا دایرکتوری ها را از یک مکان به مکان دیگر منتقل می کند. دستور mv از انتقال فایلهای تکی، چندین فایل و پوشه ها پشتیبانی می کند.

منبع: Here Are 11 Console Commands Every Developer Should Know
ترجمه: سیدمحمدحسین طباطبایی بالا