صفر تا صد دستورات لینوکس (آموزش جامع)
سیستم عامل اپن سورس لینوکس نیز مانند ویندوز طرفدارادان بسیاری دارد. این سیستم عامل توزیع های مختلفی دارد که هر یک کاربرد خاص خود را دارد. اما کار کردن با این سیستم عامل مانند ویندوز چندان راحت نیست، چرا که برای کار کردن با این سیستم عامل باید با انواع فرمان ها و دستور لینوکس آشنا باشید. از طرفی دستورات لینوکس بسیار زیاد هستند و حتی اگر با لینوکس کار کرده باشید و مبتدی نباشید ممکن است همیشه همه دستورات یادتان نماند.
از این جهت وجود یک لیست جامع از دستوات لینوکس می تواند به شما در یادآوری آنچه می دانید به شما کمک کند. از طرفی اگر تا به حال با لینوکس کار نکرده اید و به عنوان یک مبتدی قصد دارید تا با دستورات لینوکس آشنا شوید باید بگوییم این مقاله به شما نیز کمک خواهد کرد. بنابراین چه مبتدی باشید و چه حرفه ای مطالعه این مطلب به شما کمک خواهد کرد، پس با این آموزش از زمین هاست همراه ما باشید.
آشنایی با مهم ترین و کاربردی ترین دستورات لینوکس
هماکنون در دنیایی که مملو از ابزارهای جدید و محیطهای نرمافزاری مختلف است،هر مهندس نرمافزار نیاز به یادگیری فرمانهای اصلی که در حیطه سرور لینوکس استفاده میشود امری اساسی است. یک سری دستورها و بستههای خاص میتوانند به کمک توسعه دهندگان آمده و در بحث عیبیابی و بهینه سازی برنامهها کمک بزرگی باشند. اگر یک توسعهدهنده تازه وارد به دنیای لینوکس هستید یا به دنبال افزایش اطلاعات خود به عنوان یک ادمین سرورهای هستید، و یا میخواهید خودتان برنامههایتان را مدیریت کنید، لیست دستورات زیر می تواند به شما کند.
این دستورات همچنین میتوانند در مواردی نظیر توصیف عیبیابی سرور به شما کمک کنند؛ چرا که برای مثال ممکن است یک برنامه به صورت محلی کار کند اما به صورت ریموت خیر. بنابراین از این فرمانهای میتوانید در محیط لینوکس، ماشینهای مجازی و همینطور containerها استفاده کنید.
اما پیش از این که لیست دستورات لینوکس را در این مطلب مطالعه کنید خوب است بدانید که تقریبا تمام دستورات این لیست در توزیع های مختلف یکسان هستند. همچنین لازم به ذکر است که دستورات لینوکسی که در این مطلب قرار داده شده است مهم ترین و پر کاربرد ترین دستورات لینوکس هستند که برای آموزش و بررسی هر یک از آن ها می توانید روی اسم دستور در لیست دسترسی زیر کلیک کنید:
- cURL
- python -m json.tool/jq
- LS
- tail
- cat
- grep
- ps
- env
- netstat
- IP
- Isof
- df
- du
- id
- chmod
- dig/nslookup
- firewall-cmd
- sestatus
- history
- top
چرا باید دستورات لینوکس را یاد بگیریم؟
بیش از 90 درصد از زیر ساخت های ابری و خدمات میزبانی در سیستم عامل لینوکس اجرا می شوند. بنابراین شاید تنها به همین دلیل، آشنایی با دستورات محبوب لینوکس بسیار مهم است. لینوکس به طور گسترده به عنوان یکی از قدرتمندترین و امن ترین سیستم عامل ها شناخته می شود که این یک تصادف نیست. لینوکس رایگان و منبع باز است، از امنیت بهتری نسبت به رقبای خود برخوردار است و دارای خط فرمان قدرتمندی است که به توسعه دهندگان کمک زیادی می کند.
1. دستور لینوکس cURL
دستور cURL از کتابخانه انتقال URL کلاینت libcURL استفاده می کند که کار انتقال URL را انجام میدهد. به عبارت دیگر این دستور به شما این امکان را می دهد تا داده ها را بین دستگاه خود و سرور انتقال دهید. دستور cURL در جهت تست این موضوع که آیا برنامه شما میتواند با سرویس دیگری (مانند دیتابیس) ارتباط بگیرد و غیره مورد استفاده قرار میگیرد.
به عنوان مثال، فرض کنید که برنامه شما یک خطای HTTP 500 به شکل زیر ایجاد میکند که نشاندهنده این است که نمیتواند به پایگاه داده MongoDB شما دسترسی داشته باشد:
$ curl -I -s myapplication:5000
HTTP/1.0 500 INTERNAL SERVER ERROR
اطلاعات هدر را نشان داده و آپشن -s response body را ساکت میکند. اندپوینت دیتابیس را از دسکتاپ محلیتان چک کنید:
$ curl -I -s database:27017
HTTP/1.0 200 OK
پس مشکل چه میتواند باشد؟ در این مرحله چک میکنیم که آیا برنامهمان به سایر نقاط پایانی غیر از دیتابیس دسترسی دارد یا خیر.
$ curl -I -s https://opensource.com
HTTP/1.1 200 OK
به نظر میرسد که مشکلی در اینجا وجود ندارد؛ حال سعی میکنیم از میزبان برنامه به پایگاه داده دسترسی پیدا کنیم:
$ curl database:27017
curl: (6) Couldn't resolve host 'database'
خطای بالا نشان میدهد که برنامه شما نمیتواند به پایگاه داده وصل شود چرا که نشانی اینترنتی پایگاه داده در دسترس نیست و یا اینکه میزبان nameserver ندارد که بتواند مشکل را حل کند.
2. دستور python -m json.tool/jq
بعد از اینکه مشکل کرل را حل میکنید، ممکن است خواندن خروجی API دشوار باشد. برخی اوقات ممکن است بخواهید خروجی JSON چاپ کنید تا یک ورودی خاص را پیدا کنید. پایتون در اینجا یک کتابخانه پیشساخته دارد که به کمکتان خواهد آمد. میتوانید از ابزار python -m json.tool استفاده کنید. برای استفاده از ماژول JSON پایتون خروجی یک فایل JSON را به کمک فرمان python -m json.tool، پایپ کنید.
$ cat test.json
{"title":"Person","type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"age":{"description":"Age in years","type":"integer","minimum":0}},"required":["firstName","lastName"]}
برای استفاده از از کتابخانه پایتون، خروجی را به ماژول -m پایپ کنید.
$ cat test.json | python -m json.tool
{
"properties": {
"age": {
"description": "Age in years",
"minimum": 0,
"type": "integer"
},
"firstName": {
"type": "string"
},
"lastName": {
"type": "string"
}
},
"required": [
"firstName",
"lastName"
],
"title": "Person",
"type": "object"
}
برای این که از ویژگیهای بیشتری در پارس کردن JSON بهره ببرید میتوانید jq نصب کنید. jq گزینههایی را برای استخراج مقادیر ویژه از ورودی JSON فراهم میکند.
$ cat test.json | jq
{
"title": "Person",
"type": "object",
"properties": {
"firstName": {
"type": "string"
},
"lastName": {
"type": "string"
},
"age": {
"description": "Age in years",
"type": "integer",
"minimum": 0
}
},
"required": [
"firstName",
"lastName"
]}
3. دستور لینوکس LS
ls احتمالا اولین دستوری است که هر کاربر لینوکس در ترمینال خود تایپ می کند. دستور ls لیست فایلها در یک دایرکتوری را به شما نمایش میدهد. ادمینهای دیتابیس و سرور لینوکس معمولا به مراتب از این دستور استفاده میکنند. این دستور در کنار این که به شما کمک میکند تا فایلهایتان را پیدا کنید، به شما کمک میکند تا دسترسیهای خود را نیز مرور کنید.
در مثال پایین میبینید که نمیتوانید myapp را اجرا کنید و این به خاطر یک مشکل دسترسی است. وقتی با استفاده از دستور ls -l دسترسی ها را بررسی میکنید متوجه خواهید شد که از یک متغیر “x” استفاده نمیشود و فقط دسترسی read و write وجود دارد.
$ ./myapp
bash: ./myapp: Permission denied
$ ls -l myapp
-rw-r--r--. 1 root root 33 Jul 21 18:36 myapp
4. دستور tail
این دستور آخرین قسمتهای یک فایل را نشان میدهد. معمولا برای عیبیابی نیاز به چندین خط لاگ ندارید. در عوض احتمالن صرفا میخواهید بدانید که چه بر سر آخرین درخواستتان آمده است. برای مثال میتوانید از tail برای چک کردن این که در لاگها چه اتفاقی میافتد استفاده کنید.
میتوانید از tail -f استفاده کنید تا لاگهای آپاچی را دنبال کرده و درخواستهایتان را به صورت real-time ببنید.
-f نشاندهنده ویژگی follow است که فایلهای لاگ را در حالی که نوشته میشوند به صورت همزمان نشان میدهد. اما اگر نمیخواهید به صورت real-time لاگ را دنبال کنید، میتوانید از tail و آپشن -n استفاده کنید تا ۱۰۰ خط آخر را ببینید.
$ tail -n 100 /var/log/httpd/access_log
5. دستور لینوکس cat
دستور کت فایلها را به هم پیوست داده و پرینت میکند. شما میتوانید از این دستور برای چک کردن محتوای پیشنیازهای هر فایل استفاده کنید و یا ورژن اپلیکیشنی که در حال حاضر در اختیار دارید را چک کنید.
$ cat requirements.txt
flask
flask_pymongo
6. دستور grep
دستور گرپ وظیفه جستجو بین الگوهای مختلف را در اختیار دارد. اگر به دنبال یک الگوی خاص در خروجی یک دستور دیگر هستید میتوانید از گرپ استفاده کنید. از این دستور برای جستجو بین فایلهای لاگ، پردازشهای خاص و … استفاده کنید.
$ cat tomcat.log | grep org.apache.catalina.startup.Catalina.start
01-Jul-2017 18:03:47.542 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 681 ms
7. دستور لینوکس ps
دستور ps بخشی از پکیج کاربردی procps-ng ست که از دستورهای مختلفی برای جستجو بین آیدی پروسهها و وضعیت یک پردازش پشتیبانی میکند. از این دستور برای تعیین کردن وضعیت یک برنامه در حال اجرا و یا تایید کردن یک پردازش استفاده کنید. برای مثال اگر میخواهید وبسرور تامکت در حال اجرای یک سرور را چک کنید، میتوانید از این دستور و آپشنهایی که در اختیارتان میگذارد برای نگهداری آیدی پروسه تامکت استفاده کنید.
$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 2 18:55 ? 00:00:02 /docker-java-home/jre/bi
root 59 0 0 18:55 pts/0 00:00:00 /bin/sh
root 75 59 0 18:57 pts/0 00:00:00 ps -ef
برای در اختیار داشتن امکانات بیشتر، میتوانید دستور ps و گرپ را باهم دیگر پایپ کنید.
$ ps -ef | grep tomcat
root 1 0 1 18:55 ? 00:00:02 /docker-java-home/jre/bi
8. دستور env
دستور بالا به شما این امکان را میدهد که متغیرهای مختلف را پرینت کرده و یا تنظیم کنید. در طول عیبیابی ممکن است چک کردن متغیرهای مختلف به شما کمک کند تا مشکل برنامهتان را پیدا کنید. در مثال پایین این دستور برای چک کردن متغیرهای یک محیط (هاست برنامه) استفاده شده است.
$ env
PYTHON_PIP_VERSION=9.0.1
HOME=/root
DB_NAME=test
PATH=/usr/local/bin:/usr/local/sbin
LANG=C.UTF-8
PYTHON_VERSION=3.4.6
PWD=/
DB_URI=mongodb://database:27017/test
9. دستور لینوکس netstat
دستور نتاستت، وضعیت شبکه را نشان میدهد. این دستور پرتهای یک شبکه که در حال استفاده هستند و کانکشنهای آنها را نشان میدهد. هرچند که دستور netstat به طور پیش فرض بر روی لینوکس وجود نداشته و اگر بخواهید بایستی آن را نصب کنید. همچنین میتوانید با استفاده از پکیج net-tools از آن استفاده کنید.
به عنوان یک توسعه دهنده که به طور محلی (لوکال) کار میکند ممکن است خطایی دریافت کنید که یک پرت یا آدرس در حال استفاده است. استفاده از netstat در تصویر پایین نشان میدهد که پرت ۸۰ توسط سرور آپاچی در حال استفاده است.
10. دستور IP
اگر آدرس آیپی بر روی سرور لینوکس شما کار نمیکند بایستی با استفاده از iproute2 آن را نصب کنید. استفاده از آدرس آیپی برای تایید آدرس Ip هاست استفاده میشود؛ برای مثال زمانی که کانتینر شما به شبکه وصل است، آدرس آیپی نشان میدهد که کدام اینترفیس به کدام شبکه متصل است.
یک تست ساده در این زمینه این است که از دستور ip address استفاده کنید تا آدرس آیپی هاست را پیدا کنید. مثال پایین نشانگر این موضوع است.
$ ip address show eth0
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether d4:3b:04:9e:b2:c2 brd ff:ff:ff:ff:ff:ff
inet 10.1.1.3/27 brd 10.1.1.31 scope global dynamic noprefixroute eth0
valid_lft 52072sec preferred_lft 52072sec
11. دستور لینوکس Isof
این دستور لیست فایلهای مرتبط با برنامه شما را باز میکند. بر روی برخی از ماشینهای لینوکس بایستی بایستی Isof را با استفاده پکیج آن نصب کنید. در محیط لینوکس، تقریبا تمام تعاملات با سیستم به صورت فایل انجام میشود. در نتیجه اگر برنامه شما در یک فایل نوشته شود، دستور Isof آن تعامل را به عنوان یک فایل نشان میدهد. همچنین مانند دستور netstat میتوانید از این دستور برای چک کردن پرتهایی که در حال listen هستند استفاده کنید. برای مثال اگر میخواهید چک کنید که آیا پرت ۸۰ در حال استفاده است یا حیر میتوانید از این دستور برای بررسی آن استفاده کنید. در زیر باهم یکی از موارد استفاده این دستور را میبینیم.
12. دستور df
میتوانید از دستور df (نمایانگر فضای آزاد دیسک) برای عیبیابی مشکلات مربوط به فضای دیسک استفاده کنید. زمانی که برنامه خود را درون یک کانتینر بارگذاری میکنید ممکن است پیغام خطا مبنی بر عدم وجود فضای کافی در کانتینر دریافت کنید. از آنجا که فضای دیسک باید توسط ادمین سیستم مدیریت و بهینه شود، میتوانید از دستور df استفاده کرده تا فضای موجود در دایرکتوری را مشخص کرده و متوجه شوید که آیا واقع فضای کافی در اختیار دارید یا خیر.
آپشن -h اطلاعاتی را چاپ میکند که اصطلاحا در فرمت human-readable هستند. به طور پیشفرض، همانطور که میبینید df همه نتایج تحت دایرکتوری روت را لیست میکند؛ اما میتوانید نتایج را با ارائه دایرکتوری مد نظر خودتان محدود کنید. مثل: (df -h/home)
13. دستور لینوکس du
برای بازیابی اطلاعات دقیق تر در مورد این که کدام فایلها از فضای دیسک در یک دایرکتوری استفاده میکنند میتوانید از این فرمان استفاده کنید. اگر میخواهید متوجه شوید که کدام یک از لاگها بیشترین فضا را در دایرکتوری /var/log اشغال کرده است میتوانید از دستور du به صورت زیر استفاده کنید.
14. دستور id
برای چک کردن این که کدام کاربر، کدام برنامه را اجرا کرده است میتوانید از دستور id استفاده کنید تا هویت کاربر را برگرداند. مثال زیر از vagrant برای تست و ایزوله کردن محیط توسعه استفاده میکند. بعد از این که وارد vagrant میشوید اگر بخواهید سرور HTTP Apache را نصب کنید، سیستم بیان میکند که نمیتوانید فرمان را به صورت روت اجرا کنید. برای چک کردن یوزر خود بایستی از دستور فوق استفاده کنید و توجه داشته باشید که بایستی به صورت یوزر vagrant و در گروه vagrant باشید.
$ dnf -y install httpd
Loaded plugins: fastestmirror
You need to be root to perform this command.
$ id
uid=1000(vagrant) gid=1000(vagrant) groups=1000(vagrant) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
15. دستور لینوکس chmod
وقتی که باینری اپلیکیشن خود را برای اولین بار اجرا میکنید ممکن است با پیام permission denied مواجه شوید. همان طور که در پیام زیر در مورد ls میبینید میتوانید پرمیشن برنامه خود را چک کنید.
$ ls -l
total 4
-rw-rw-r--. 1 vagrant vagrant 34 Jul 11 02:17 test.sh
این موضوع نشاندهنده این است که شما حق اجرا برای اجرای باینری را ندارید. chmod میتواند پرمیشنها را به گونهای تغییر دهد که یوزر قادر باشد باینری را اجرا کند.
$ chmod +x test.sh
[vagrant@localhost ~]$ ls -l
total 4
-rwxrwxr-x. 1 vagrant vagrant 34 Jul 11 02:17 test.sh
همانطور که در مثال نشان داده شده است، این کار، پرمیشنها را با حقوق اجرایی خود به روز میکند. حال وقتی سعی میکنید که باینری خود را اجرا کنید، برنامه دیگر خطای مجوز به شما نخواهد داد. chmod میتواند زمانی که باینری خود را بر روی یک کانتینر لود میکنید نیز مفید باشد. این امر تضمین میکند که کانتینر شما مجوز مناسب برای اجرای باینری را نیز دارد.
16. دستور dig/nslookup
نیم سرور هر دامین به resolve کردن هر url به تعدادی از سرورهای اپلیکیشن کمک میکند. هرچند ممکن است با یک url ست نشده (resolve) برخورد کنید که برای کانکشن برنامه شما مشکل ایجاد کند. برای مثال تصور کنید که میخواهید از هاست برنامه خود از طریق url mydatabase دسترسی پیدا کنید و با خطای cannot resolve مواجه میشوید. در این صورت برای عیب یابی بایستی از دستور dig یا nslookup استفاده کنید تا ببینید که مشکل چیست.
$ nslookup mydatabase
Server: 10.0.2.3
Address: 10.0.2.3#53
** server can't find mydatabase: NXDOMAIN
در بالا میبینیم که استفاده از nslookup نشان میدهد که mydatabase قادر به resolve شدن نیست. استفاده از دستور dig نیز پیامی مشابه را به همراه دارد.
$ dig mydatabase
; <<>> DiG 9.9.4-RedHat-9.9.4-50.el7_3.1 <<>> mydatabase
;; global options: +cmd
;; connection timed out; no servers could be reached
خطاهای بالا میتوانند دلایل مختلفی داشته باشند. اگر قادر به پیدا کردن دلیل ریشه نیستید، میتوانید برای حل مشکل به ادمین سیستم خود مراجعه کنید.
17. دستور لینوکس firewall-cmd
به طور سنتی، فایروالها در لینوکس با استفاده از فرمان iptables پیکربندی شده بودند. این در حالی است که اکنون تا حد زیادی با nftables جایگزین شده اند. این دستور کمک میکند که یک سری قانون تنظیم کنید که کنترل ترافیک شبکه سیستم شما را تنظیم کند. این قوانین میتوانند به زونهای مختلف تقسیم شوند تا شما بتوانید به راحتی از یک سری قوانین به یک سری قوانین دیگر مهاجرت کنید. استفاده از این دستور و آپشنهای مربوط به آن به شما کمک میکنند که یک جمله human-readable بسازید. برای مثال برای این که ببینید در حال حاضر در کدام زون هستید:
$ sudo firewall-cmd --get-active-zones``
corp
interfaces: ens0
dmz
interfaces: ens1
در این مثال، کامپیوتر شما دو دیوایس شبکه دارد که یکی از آنها به زون corp تخصیص یافته و دیگری به dmz. برای این که ببینید هر زون چه مجوزهایی میدهد میتوانید مانند زیر عمل کنید:
$ sudo firewall-cmd --zone corp --list-all
corp
target: default
interfaces: ens0
services: cockpit dhcpv6-client ssh
ports:
protocols:
[...]
اضافه کردن سرویس هم به آسانی دستور زیر است:
$ sudo firewall-cmd --add-service http --permanent
$ sudo firewall-cmd --reload
Firewall-cmd طوری طراحی شده که آسان باشد و مجموعه وسیعی از سرویس های از قبل طراحی شده را در بگیرد.
18. دستور sestatus
شما معمولا SELinux را در یک میزبان کاربردی که توسط یک شرکت مدیریت میشود، پیدا میکنید. SELinux از دسترسی با حداقل امتیاز بر روی یک هاست پشتیبانی میکند که این موضوع از اجرا شدن فایلهای احتمالی آلوده بر روی سیستم جلوگیری خواهد کرد. در برخی شرایط یک برنامه ممکن است نیاز دسترسی به یک فایل ويژه را داشته باشد اما ممکن است با خطا مواجه شود. برای این که چک کنید که آیا SELinux برنامه شما را بلاک کرده است یا خیر، میتوانید از tail و grep استفاده کنید و دنبال یک پیام با عنوان denied در پوشه /var/log/audit بگردید.
در غیر این صورت میتوانید با استفاده از sestatus استفاده کنید و ببینید که آیا در قسمت مورد نظر SELinux فعال است یا خیر.
$ sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 28
19. دستور لینوکس history
وقتی که همه فرمانهای لازم را برای آزمایش و عیبیابی بررسی میکنید ممکن است موارد مفید را از قلم انداخته باشید هر shell یک سری دستور تحت عنوان history command دارد که تاریخچه دستوراتی که از ابتدای هر session اجرا کرده اید را نشان میدهد. میتوانید از history استفاده کرده تا دستوراتی که در طول عیب یابی بررسی کرده اید را ببینید.
$ history
1 clear
2 df -h
3 du
حال اگر بخواهیم یکی از دستورات گذشته را اجرا کنیم اما نخواهیم دوباره آن را تایپ کنیم چه؟ در اینجا از علامت ! قبل از شماره دستور استفاده میکنیم تا دوباره اجرا شود.
20. دستور top
این دستور اطلاعات پروسههای دسته بندی شده را نمایش داده و آپدیت میکند. از این دستور در مواردی استفاده کنید که قصد دارید متوجه شوید که کدام پروسهها در حال اجرا هستند و کدام یک سی پی یو و مموری بیشتری مصرف میکنند.
برای این که متوجه شوید که آیا برنامه شما واقعن به حافظه احتیاج دارد یا خیر از دستور top استفاده کنید تا بفهمید در حال حاضر چه میزان از سی پی یو و حافظه را مصرف میکند. وقتی از تاپ استفاده میکنید احتمالا متوجه یک برنامه پایتون خواهید شد که بیشتر سی پی یو شما را مصرف میکند و ممکن است آن را با برنامه خود اشتباه بگیرید.