دوازده دستور terminal که باید بلد باشید

07 مرداد 1398
دوازده دستور terminal که باید بلد باشید

ترمینال (terminal) یکی از مهم ترین چیزهایی است که برنامه نویسان حرفه ای با آن کار می کنند. اگر در دنیای وب خارجی گشت و گذاری داشته باشید می دانید که تمام بحث ها چند خطی کد ترمینال دارند. یادگیری دستورات terminal نیز به شما کمک فراوانی می کند چرا که بعضی از کارهای سخت تبدیل به یک خط کد می شوند! در این مقاله برخی از دستورات Unix را برایتان آماده کرده ایم که همه ی توسعه دهندگان حرفه ای بلد هستند و شما نیز باید از آن ها اطلاع داشته باشید.

1. Curl

Curl ابزار بسیار مناسبی برای ایجاد درخواست بر بستر HTTP و HTTPS و FTP و پروتکل های دیگر است. Curl می تواند فایل ها را دانلود کند، response header ها را چک کند و به داده های مختلف دسترسی داشته باشد. در دنیای توسعه ی وب معمولا از curl برای تست کردن Connection های مختلف و RESTful API ها استفاده می شود. به مثال زیر توجه کنید:

# 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
29 is the number of days it takes Saturn to orbit the Sun.

البته واضح است که دستورات Curl می توانند خیلی پیچیده تر از این حرف ها شوند؛ به طور مثال صدها گزینه ی خاص برای کنترل header ها، کوکی ها، احراز هویت و لاگین و غیره وجود دارد. اگر دوست دارید بیشتر در مورد این دستور بدانید به Everything curl سری بزنید. در این سایت دستور curl تمام و کمال توضیح داده شده است.

2. Tree

Tree یکی از دستورات پرکاربرد unix است که محتویات یک دیرکتوری را به صورت بصری نشان می دهد. Tree به صورت بازگشتی عمل می کند؛ در هر مرحله از nesting وارد می شود و یک شکل درختی از محتویات آن را نمایش می دهد. با این کار شما می توانید به راحتی فایل های مورد نظر خود را پیدا کنید. به این مثال توجه کنید:

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

همچنین با الگوهایی شبیه REGEX می توانید یافته ها را فیلتر کنید و دنبال مورد خاصی بگردید:

tree -P '*.min.*'
.
├── css
│   ├── bootstrap.min.css
├── fonts
└── js
    └── bootstrap.min.js

توضیحات بیشتر را از computerhope دریافت کنید.

3. Tmux

Tmux از نظر فنی یک terminal multiplexer است و به زبان ساده کارش این است که چندین ترمینال مختلف را به یک session متصل می کند.

اتصال چندین ترمینال به یک نشست
اتصال چندین ترمینال به یک نشست

همچنین به شما اجازه می دهد که در ترمینال بین چندین برنامه جابجا شوید، صفحات و فضای کاری را تقسیم کنید (مانند تصویر بالا) و ترمینال های مختلف را به یک نشست متصل کرده و همگی را همگام با هم (sync) نگه دارید. Tmux استفاده ی خاصی در کار با remote server دارد چرا که به شما اجازه می دهد بدون لاگین شدن دوباره، tab جدیدی بسازید.

اطلاعات بیشتر در این صفحه

4. du

دستور du مخفف disk usage (استفاده از فضا) است. این دستور گزارشی وضعیت استفاده از فضا توسط دیرکتوری های ما ایجاد می کند. استفاده از آن ساده است و بازگشتی نیز کار می کند تا وارد هر زیر شاخه شده و سایز تک تک فایل ها را به ما برگرداند. از موارد استفاده ی 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 *

1.2G    Desktop
4.0K    Documents
40G     Downloads
4.0K    Music
4.9M    Pictures
844K    Public
4.0K    Templates
6.9M    Videos

البته دستور مشابه دیگری به نام  df (مخفف disk free) وجود دارد و اطلاعاتی راجع به فضای خالی به ما می دهد، یعنی دقیقا برخلاف دستور du! برای مطالعه ی بیشتر به computerhope سری بزنید.

5. Git

Git با اختلاف زیاد مشهورترین و پرکاربردترین سیستم مدیریت نسخه (version control system) است. Git یکی از مهم ترین عناصر طراحی مدرن در دنیای وب است و نمی توان آن را درون این لیست قرار نداد. با اینکه ابزارها و برنامه های متعددی برای کار با Git وجود دارند، اما اکثر برنامه نویسان ترجیح می دهند از Git به صورت native و داخل خود ترمینال استفاده کنند؛ git CLI بسیار قوی است و می تواند پیچیده ترین پروژه ها را نیز مدیریت کند.

کار با git نیاز به مقالات خودش را دارد بنابراین منتظر سری مقالات کار با git نیز باشید.

6. Tar

Tar ابزار پیش فرض unix برای کار با آرشیوها و فایل ها است. Tar به شما اجازه می دهد که چندین فایل را به سرعت درون یک فایل قرار دهید تا ذخیره و استفاده های بعدی از آن آسان تر شود:

tar -cf archive.tar file1 file2 file3

همچنین با استفاده از دستور x- می توانیم آرشیو های tar. را استخراج (extract) کنیم:

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

اگر سیستم unix شما از این نسخه پشتیبانی نمی کند می توانید از gzip و zcat و compress برای کاهش حجم فایل هایتان استفاده کنید.

7. md5sum

unix دستورات متعددی برای هش کردن دارد که md5sum و sha1sum نیز جزو آن هستند. دستورات hashing استفاده های مختلفی در برنامه نویسی دارند اما یکی از مهم ترین موارد چک کردن صحت و اعتبار فایل ها است. به طور مثال اگر یک فایل iso. را از منبع غیرمطمئنی دانلود کرده اید، احتمال دارد که فایل حاوی اسکریپت های مخرب باشد. برای حصول اطمینان می توانیم از این فایل iso یک هش مانند md5 تولید کنیم:

md5sum ubuntu-16.04.3-desktop-amd64.iso 

0d9fe8e1ea408a5895cbbe3431989295  ubuntu-16.04.3-desktop-amd64.iso

حالا باید هش ایجاد شده را با هش معرفی شده توسط منبع مطمئن و نویسنده ی اصلی مقایسه کنید (مثلا UbuntuHashes).

8. Htop

Htop یک task manager بهتر و پیشرفته تر نسبت به top است. Htop رابط کاربری پیشرفته و گزینه های متعددی برای زیر نظر گرفتن و کنترل پروسه های سیستمی دارد.

نمایی از Htop
نمایی از Htop

با اینکه Htop در ترمینال اجرا می شود اما از موس هم پشتیبانی می کند. به همین خاطر گشت و گذار در منوها، انتخاب پروسه ها و مرتب کردن آن ها بسیار ساده تر می شود. اطلاعات بیشتر در Htop.

9. Ln

لینک ها در unix مانند shortcut ها در ویندوز هستند و به شما اجازه می دهند که سریعا به برخی از فایل ها دسترسی داشته باشید. این لینک ها با استفاده از دستور ln ساخته شده و دو نوع دارند: hard و symbolic. هر نوع برای موارد خاص به کار رفته و استفاده های خاصی دارد (مطالعه ی بیشتر)

مثال زیر یکی از روش های استفاده از لینک ها در unix است. فرض کنید یک دیرکتوری به نام scripts در دسکتاپ شما وجود دارد. درون این دیرکتوری پر از اسکریپت های bash شناخته شده است. هر بار که بخواهیم یکی از این اسکریپت ها را صدا بزنیم باید این کار را انجام دهیم:

~/Desktop/Scripts/git-scripts/git-cleanup

واضح است که این کار بسیار آزار دهنده است چرا که هر بار باید آدرس مطلق فایل را تایپ کنیم. به جای آن می توانیم یک symlink ایجاد کنیم (به آدرس usr/local/bin) تا اسکریپت ما را از تمام دیرکتوری ها قابل اجرا کند:

sudo ln -s ~/Desktop/Scripts/git-scripts/git-cleanup /usr/local/bin/

حالا فقط کافی است که ترمینال را باز کرده باشیم و نام اسکریپت خود را بنویسیم تا اجرا شود:

git-cleanup

10. SSH

با استفاده از دستور ssh کاربران می توانند سریعا وارد یک هاست شده و به Unix shell آن دسترسی داشته باشند. این روش کار ما را بسیار ساده می کند چرا که میتوانیم دستورات مورد نظر را مستقیما از کامپیوتر خودمان روی سرور اجرا کنیم. برای اتصال تنها کافی است که آدرس ip یا url صحیح را وارد کنید. البته اگر دفعه ی اولی است که به یک سرور متصل می شوید از شما احراز هویت خواهد شد:

ssh username@remote_host

اگر می خواهید سریعا دستوری را بدون لاگین شدن روی سرور اجرا کنید می توانید به راحتی یک دستور را بعد از url بنویسید. دستور روی سرور اجرا شده و نتیجه به شما برمیگردد:

ssh username@remote_host ls /var/www

some-website.com
some-other-website.com

با استفاده از SSH کارهای زیادی می توان انجام داد (مانند ساخت tunnel و پراکسی ها یا امن کردن اتصال با استفاده از کلید های خصوصی و ...). برای اطلاعات بیشتر سری به این لینک بزنید.

11. Grep

Grep دستور پیش فرض unix برای پیدا کردن یک رشته درون یک متن است. ورودی خود را به صورت یک فایل را direct stream گرفته و محتوای آن را بر اساس یک regular expression فیلتر می کند، سپس هر چیزی که پیدا شده باشد به شما برگردانده می شود. استفاده ی اصلی این دستور هنگام کار با فایل های بزرگ است. ما در مثال زیر دستور grep را با date ترکیب کرده ایم تا درون یک log file بسیار بزرگ جست و جو کرده و خطاهای مربوط به امروز را در یک فایل جدید قرار دهیم:

// 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 است و گزینه های بسیار بیشتری نیز دارد.

12. Alias

بسیاری از دستورات unix پس از اضافه کردن option های مختلف به آن ها بسیار طولانی می شوند. برای آنکه این دستورات را راحت تر به ذهن بسپارید می توانید برایشان نام مستعار (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 به شما کمک کرده باشد.

نویسنده شوید

دیدگاه‌های شما

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.