۱۰ دستور لینوکسی دیگر که لازم است بدانید
Isof
این دستور لیست فایلهای مرتبط با برنامه شما را باز میکند. بر روی برخی از ماشینهای لینوکس بایستی بایستی Isof را با استفاده پکیج آن نصب کنید. در محیط لینوکس، تقریبا تمام تعاملات با سیستم به صورت فایل انجام میشود. در نتیجه اگر برنامه شما در یک فایل نوشته شود، دستور Isof آن تعامل را به عنوان یک فایل نشان میدهد. همچنین مانند دستور netstat میتوانید از این دستور برای چک کردن پرتهایی که در حال listen هستند استفاده کنید. برای مثال اگر میخواهید چک کنید که آیا پرت ۸۰ در حال استفاده است یا حیر میتوانید از این دستور برای بررسی آن استفاده کنید. در زیر باهم یکی از موارد استفاده این دستور را میبینیم.
df
میتوانید از دستور df (نمایانگر فضای آزاد دیسک) برای عیبیابی مشکلات مربوط به فضای دیسک استفاده کنید. زمانی که برنامه خود را درون یک کانتینر بارگذاری میکنید ممکن است پیغام خطا مبنی بر عدم وجود فضای کافی در کانتینر دریافت کنید. از آنجا که فضای دیسک باید توسط ادمین سیستم مدیریت و بهینه شود، میتوانید از دستور df استفاده کرده تا فضای موجود در دایرکتوری را مشخص کرده و متوجه شوید که آیا واقع فضای کافی در اختیار دارید یا خیر.
آپشن -h اطلاعاتی را چاپ میکند که اصطلاحا در فرمت human-readable هستند. به طور پیشفرض، همانطور که میبینید df همه نتایج تحت دایرکتوری روت را لیست میکند؛ اما میتوانید نتایج را با ارائه دایرکتوری مد نظر خودتان محدود کنید. مثل: (df -h/home)
du
برای بازیابی اطلاعات دقیق تر در مورد این که کدام فایلها از فضای دیسک در یک دایرکتوری استفاده میکنند میتوانید از این فرمان استفاده کنید. اگر میخواهید متوجه شوید که کدام یک از لاگها بیشترین فضا را در دایرکتوری /var/log اشغال کرده است میتوانید از دستور du به صورت زیر استفاده کنید.
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
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 میتواند زمانی که باینری خود را بر روی یک کانتینر لود میکنید نیز مفید باشد. این امر تضمین میکند که کانتینر شما مجوز مناسب برای اجرای باینری را نیز دارد.
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
خطاهای بالا میتوانند دلایل مختلفی داشته باشند. اگر قادر به پیدا کردن دلیل ریشه نیستید، میتوانید برای حل مشکل به ادمین سیستم خود مراجعه کنید.
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 طوری طراحی شده که آسان باشد و مجموعه وسیعی از سرویس های از قبل طراحی شده را در بگیرد.
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
history
وقتی که همه فرمانهای لازم را برای آزمایش و عیبیابی بررسی میکنید ممکن است موارد مفید را از قلم انداخته باشید هر shell یک سری دستور تحت عنوان history command دارد که تاریخچه دستوراتی که از ابتدای هر session اجرا کرده اید را نشان میدهد. میتوانید از history استفاده کرده تا دستوراتی که در طول عیب یابی بررسی کرده اید را ببینید.
$ history
1 clear
2 df -h
3 du
حال اگر بخواهیم یکی از دستورات گذشته را اجرا کنیم اما نخواهیم دوباره آن را تایپ کنیم چه؟ در اینجا از علامت ! قبل از شماره دستور استفاده میکنیم تا دوباره اجرا شود.
top
این دستور اطلاعات پروسههای دسته بندی شده را نمایش داده و آپدیت میکند. از این دستور در مواردی استفاده کنید که قصد دارید متوجه شوید که کدام پروسهها در حال اجرا هستند و کدام یک سی پی یو و مموری بیشتری مصرف میکنند.
برای این که متوجه شوید که آیا برنامه شما واقعن به حافظه احتیاج دارد یا خیر از دستور top استفاده کنید تا بفهمید در حال حاضر چه میزان از سی پی یو و حافظه را مصرف میکند. وقتی از تاپ استفاده میکنید احتمالا متوجه یک برنامه پایتون خواهید شد که بیشتر سی پی یو شما را مصرف میکند و ممکن است آن را با برنامه خود اشتباه بگیرید.