انتقال داده شد!
انتقال داده شد به http://shahinism.com
چچچ (۱۱): چگونه میتوانم بفهمم کارت اترنتم (NIC) شناخته شده یا نه؟
کارت اترنت شیشهٔ زندگی یک سرور لینوکسی به حساب میآید. پس اگر نیاز دارید که بفهمید کارت اترنت سرورتان شناخته شده از دستور dmesg، ifconfig یا netstat استفاده کنید. دستور ifconfig میتواند برای تنظیم یک کارت رابط شبکه (Network interface card) به همان خوبی که برای کشف اطلاعات دربارهٔ کارت اترنت عمل میکند، مورد استفاده قرار گیرد. اگر میخواهید چیپ کارت شبکهتان را بشناسید هم میتوانید از دستور lspci استفاده کنید (پایینتر نمونهای از خروجی این دستور را با هم میبینیم) .
[bash]
# /sbin/ifconfig
[/bash]
خروجی:
[bash]
eth۰ Link encap: Ethernet HWaddr ۰۰: ۲۴: ۱d: d۱: ۰۴: d۰
inet addr: ۱۹۲. ۱۶۸. ۱. ۲ Bcast: ۱۹۲. ۱۶۸. ۱. ۲۵۵ Mask: ۲۵۵. ۲۵۵. ۲۵۵. ۰
inet۶ addr: fe۸۰:: ۲۲۴: ۱dff: fed۱: ۴d۰/۶۴ Scope: Link
UP BROADCAST RUNNING MULTICAST MTU: ۱۵۰۰ Metric: ۱
RX packets: ۱۸۰۷۸ errors: ۰ dropped: ۰ overruns: ۰ frame: ۰
TX packets: ۲۰۱۰۸ errors: ۰ dropped: ۰ overruns: ۰ carrier: ۰
collisions: ۰ txqueuelen: ۱۰۰۰
RX bytes: ۱۰۱۹۴۷۸۶ (۹. ۷ MiB) TX bytes: ۳۴۵۳۳۵۳ (۳. ۲ MiB)
Interrupt: ۴۰ Base address: ۰x۸۰۰۰
[/bash]
توجه کنید که اگر در خروجی eth۰ را دیدید، پس کارت شما شناخته شده. نکته دیگر اینکه در سرورهای مجازی با عبارات دیگری نظیر venet روبرو هستید، که پس از تجربه کردنشان، میتوانید بهتر درکشان کنید 😉
برنامه dmesg به کاربران کمک میکند پیغامهای هنگام بوت را مشاهده کنند. این پیغامها در فایل /var/log/dmesg (لینوکس دبیان) ذخیره میشوند:
[bash]
cat /var/log/dmesg | grep -i eth۰
[/bash]
خروجی:
[bash]
[۴. ۷۰۹۳۴۷] r۸۱۶۹ ۰۰۰۰: ۰۲: ۰۰. ۰: eth۰: RTL۸۱۶۸c/۸۱۱۱c at ۰xffffc۹۰۰۱۰۹c۸۰۰۰، ۰۰: ۲۴: ۱d: d۱: ۰۴: d۰، XID ۱c۴۰۰۰c۰ IRQ ۴۰
[/bash]
و یا:
[bash]
# dmesg | grep -i eth۰
[/bash]
نمایش جدول تمام رابطهای شبکه:
[bash]
# netstat -i
[/bash]
خروجی:
[bash]
Kernel Interface table
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth۰ ۱۵۰۰ ۰ ۱۸۴۰۸ ۰ ۰ ۰ ۲۰۵۲۴ ۰ ۰ ۰ BMRU
lo ۱۶۴۳۶ ۰ ۹۸۲۲ ۰ ۰ ۰ ۹۸۲۲ ۰ ۰ ۰ LRU
[/bash]
پیدا کردن چیپ NIC
برای رفع نقض کردن کارت ارتنت (NIC) من پیشنهاد میکنم که از دستور lspci استفاده کنید. Lspci ابزاری برای نمایش اطلاعات تمام درگاههای PCI موجود در سیستم که ابزاری بهشان متصل شده میباشد.
[bash]
lspci | less
[/bash]
یا
[bash]
lspci | grep Ethernet
[/bash]
خروجی:
[bash]
۰۲: ۰۰. ۰ Ethernet controller: Realtek Semiconductor Co.، Ltd. RTL۸۱۱۱/۸۱۶۸B PCI Express Gigabit Ethernet controller (rev ۰۲)
[/bash]
در مثال بالا من یک کارت «Realtec Semiconductor» با چیپ RTL-۸۱۱۱/۸۱۶۸B دارم.
چچچ (۱۰): دستور Uptime سرور برای پیدا کردن اینکه سیستم چه مدت در حال اجرا بوده
من میخواهم بدانم چه مدت سیستم یونیکسی/لینوکسیام فعال بوده. چطور این کار را بکنم؟
هر دو سیستم یونیکس و لینوکس با ابزارهای مختلفی این امکان را به ما میدهند که uptime سیستم را پیدا کنیم. در لینوکس فایل /proc/uptime اطلاعات uptime سیستم و فایل /var/run/utmp اطلاعات اینکه چه کسی در حال حاضر به سیستم متصل است را در خود نگه میدارند. اطلاعات ذخیره شده در فایلهای ذکر شده، مستقیما توسط انسان قابل خواندن نیستند، به همین دلیل ما به دستورات زیر نیازمندیم.
دستور uptime در یونیکس/لینوکس
یک ترمینال باز کنید، و سپس دستور زیر را وارد کنید:
[bash]
$ uptime
[/bash]
نمونهای از خروجی به صورت روبرو خواهد بود:
[bash]
۱۲: ۱۶: ۰۱ up ۵۷ min، ۳ users، load average: ۰. ۰۲، ۰. ۱۳، ۰. ۲۲
[/bash]
این دستور اطلاعات زیر را در یک خط به شما نمایش میدهد:
- زمان فعلی (۱۲: ۱۶: ۰۱)
- چه مدت سیستم در حال اجرا بوده (۵۷ دقیقه)
- در حال حاضر چه تعداد کاربر به سیستم متصلند (۳ کاربر)
- میانگین لود سیستم در ۱، ۵ و ۱۵ دقیقه گذشته (۰. ۰۲، ۰. ۱۳، ۰. ۲۲)
این تقریبا همان اطلاعاتی است که در سرخط اطلاعات نمایش داده شده توسط دستورات w و top میتوانید مشاهده کنید:
[bash]
w
[/bash]
نمونهای از خروجی به این شکل خواهد بود:
[bash]
12:20:34 up 1:02, 3 users, load average: 0.01, 0.07, 0.17
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
master tty1 – 11:19 18:17 0.16s 0.00s /bin/sh /usr/bin/startx
master pts/0 :0 12:02 0.00s 0.07s 0.00s w
master pts/1 :0 12:02 18:01 0.00s 0.94s kdeinit4: kded4 [kdeinit]
[/bash]
[bash]
$ top
[/bash]
نمونهای از خروجی:
حل مشکل USB Stickهایی که به صورت Unsafe از سیستم جدا شدهاند
شاید برای شما هم پیش آمده باشد که USB Stick (فلش درایو) ای از دوستی گرفتهاید ولی پس از نصب روی سیستمتان متوجه شدهاید که قابل نوشتن نیست. نمونهای از اخطار مربوطه به صورت زیر است:
[bash]
Error opening file ‹/media/Shahin_LG/1.jpg›: Permission denied
[/bash]
معمولا این اشکال در ازای جدا کردنش از سیستم در حین کار اتفاق میافتد. حال ممکن است که روی یک سیستم واقعی بوده باشد، یا یک فکش پلیر! به شخصه در اولین بر خورد با چنین مشکلی، آسیب دیدن فایل سیستم را دلیل دانستم، ولی پس از چک کردن فایل سیستم متوجه شدم که چنین نیست. راه حل این بار سوار کردن (Mount) دستی فلش درایو به صورت زیر است:
[bash]
sudo mount -t ntfs-3g /dev/sdb1 /media/LG -o force
[/bash]
توجه داشته باشید که برای جواب گرفتن از این دستور باید بستههای ntfs-config و ntfs-3g را نصب داشته باشید و همچنین پوشهای برای سوار کردن فلش درایو (در اینجا /media/LG) ایجاد کرده باشید.
چچچ (۹): چطور به صورت فلهای لینکهای یوتیوب را از وبسایتی استخراج و دانلود کنیم!
ببخشید که تیتری از این سادهتر و گویاتر پیدا نکردم. ولی خوب اصل موضوع خیلی قشنگ چالش برانگیز است. مساله این است:
سایتی به این شکل داریم (لینک را باز کنید) که شامل یک لیست از پیوند به صفحات دیگرش است که در آنها علاوه بر قابلیت نمایش ویدیو، لینک یوتیوب همان ویدیو وجود دارد. حجم پیوندها برابر ۲۰۰ عدد است
کار عادیاش به این صورت است که بنشینیم و با حوصله تک تک لینکها را کپی پیست کرده و جایی ذخیره کنیم. ولی با وجود دویست صفحه و لینک، کمی (خیلی) خسته کننده (خریت به معنای واقعی کلمه، البته ببخشید ;-)) است. خوب جواب مساله را خودم هم نمیدانستم، ولی مطمئن بودم، با ابزارهای گنو/لینوکسی، نتیجهی خیلی خوبی خواهم گرفت. اولین کاری که به فکرم رسید، دانلود صفحهی اصلی و صفحههای پیوند شده به هر لینک بود که با wget خیلی خوب بلد بودم! به این صورت:
[bash]
wget -rl1 http://thenewboston.org/list.php?cat=11
[/bash]
خوب نتیجه مجموعهای از فایلها بود که با اسمهایی شبیه به آدرسشان در پوشهی جاری ذخیره شده بود. با استفاده از آرگومانهای rl1 به wget فهماندم که صفحهی حاضر را به عمق یک صفحه رو به جلو دانلود کند. حالا مسالهی سخت اینجا بود که چطور به grep بفهمانیم که چه چیزی را (در اینجا لینک ویدیو در یوتیوب) برایمان جدا کند. دستوری که با دفعات زیادی آزمون و خطا نتیجه داد، به این صورت بود: (برای دیدن دستور کاملتر به آخر مطلب رجوع کنید، ویرایش۱)
[bash]
grep -ohE «http://www.youtube.com/watch?v=%5B%5B:alnum:%5D-%5D{11}» * > list
[/bash]
کار این دستور این است که یک لیست از الگوی داده شده را ایجاد و در فایل list ذخیره کند. آرگومانهای ohE به طور خلاصه به grep میفهمانند که فقط عبارت داخل پرانتز را در فایلها پیدا کند و در خروجی نمایش دهد. قسمت جالب قضیه که بیشتر از همه وقتم را گرفت بخش زیر بود:
[bash]
[[:alnum:]-]{11}
[/bash]
که به grep میگفت ترکیبی از حروف و ارقام را به تعداد یازده عدد قبول کند. در مورد این عبارتها در آیندهای نزدیک پستی در شاهینیسم خواهیم داشت.
برای دانلود لینکها هم میتوانید همان فایل خروجی را به صورت زیر به youtube-dl بدهید:
[bash]
youtube-dl -ta list
[/bash]
البته سرعت دانلود youtube-dl واقعا پایین است. روی سروری با دانلود عادی ده مگ، سرعت به زور میتوانست به چهل کیلوبایت برسد. پیشنهاد من به شما، نصب یک نسخه از RapidLeech است. سرعت و کاربرد بسیار بهتری دارد 😉
ویرایش ۱: بعد از مدتی استفاده از این دستور، فهمیدم که از اونجایی که توی آدرسهای Youtube امکان وجود آندرلاین هم هست، تعدادی از لینکها رو با دستور بالا از دست میدیم. به همین دلیل دنبال یه راه دیگه گشتم، و سرانجام به دستور زیر رسیدم که نتیجهی خیلی قابل قبولتری میده:
[bash]
grep -ohE «http://www.youtube.com/watch?v=%5B%5B:alnum:%5D(-|_)]{11}» * | uniq > list2
[/bash]
همچنین توی این دستور با استفاده از uniq از تکرار لینکها در صفحه خروجی جلوگیری میشه 😉
چچچ (۸): رنگی کردن خروجی فرمان ls در BASH
خیلی وقت بود که دنبال این بودم که بفهمم چطوری خروجی ls رو توی bash رنگی کنم و از این حالت مردهی سادش در بیارم. خوبی این رنگبندی موقعی معلوم میشه که توی دایرکتوریهای تو در تو گم میشی. خلاصه یه پست از پیروزان عزیز امروز بانی خیر شد و من رو مجبور کرد که به سمت حل این مشکل برم و چیزایی یاد بگیرم. البته ناگفته نمونه که پیروزان هم چیز جالبی معرفی کرد که در ادامهی مطلب توضیح استفاده ازش رو میدم.
برای رنگ کردن نتیجهی خروجی خود دستور ls یه آرگومانی به این صورت داره --color که خروجی رو رنگی میکنه. یعنی هر بار که میخواین خروجی رنگی بگیرین باید یه همچین دستوری رو بزنین:
[bash]
ls –color
[/bash]
که خوب این یه کم ممکنه خسته کننده باشه. برای رفع مشکلش هم که طبیعیه میتونین از alias استفاده کنین، و برای ماندگار شدنش یه همچین خطی رو به فایل .bashrc تون اضافه کنین:
[bash]
alias ls=»ls –color=always»
[/bash]
این دقیقا کاریه که خیلی از توزیعها به صورت پیشفرض انجامش میدن. ولی خوب همونطور که گفتم دوست عزیزم پیروزان یه چیز جالبتر هم معرفی کرده بود. ماجرا از این قراره که این آرگومان --color که بحثش رو کردیم، بر میگرده از یه فایلی به اسم DIR_COLORS توی شاخهی etc الگوی رنگبندیش رو بر میداره (که البته با توجه به توزیعهای مختلف ممکنه جای این فایل فرق کنه). حالا یه آدم باحال نشسته و رنگبندی متنوعی برای سیصد نوع فایل مختلف آماده کرده و توی این کانال git منتشر کرده. برای استفاده از این فایل اول اون رو دانلود کنین و برای مثال توی شاخهی خانگی لینوکستون ذخیره کنین. حالا با اضافه کردن خط زیر توی فایل .bashrc از رنگبندی جدید لذت ببرین:
[bash]
eval $(dircolors -b LS_COLORS)
[/bash]
نمونهای از خروجی این فایل به صورت زیره:
چچچ (۷): بستن یک حساب کاربری در گنو/لینوکس
دستور passwd برای تغییر رمز عبور حساب یک کاربر یا گروه مورد استفاده قرار میگیرد. یک کاربر عادی تنها قادر است که رمز عبور اکانت خودش را عوض کند، اما کاربر اصلی (ریشه) میتواند رمز عبور هر حسابی را عوض کند. شما با استفاده از این دستور میتوانید یک حساب را قفل کرده و یا قفلش را باز کنید.
قفل یک حساب گنو/لینوکس:
نحو:
[bash]
passwd -l (username)
[/bash]
حساب را قفل میکند. در واقع آپشن* -l با تغییر رمز عبور یک حساب به یک مقدار رمز شده، حساب را از دسترسی خارج میکند.
مثال:
قفل کردن حسابی به اسم shahin. با کاربر ریشه وارد میشویم و دستور زیر را وارد میکنیم:
[bash]
# passwd -l shahin
[/bash]
قفلگشایی یک حساب گنو/لینوکس:
نحو:
[bash]
passwd -u (username)
[/bash]
حساب را قفلگشایی میکند. این آپشن -u رمز حساب رو به مقدار قبلیاش باز میگرداند و آن را دوباره فعال میکند.
مثال:
برای بازگشایی یک حساب کاربری به اسم shahin، اول با کاربر ریشه وارد میشویم، و دستور زیر را وارد میکنیم:
[bash]
# passwd -u shahin
[/bash]
*: هر چه سعی کردم کلمه جایگزینی برای آپشن (انتخاب) به ذهنم نرسید که جملهبندی را خراب نکند. به بزرگی خودتان ببخشید!
چچچ (۶): چگونه در خط فرمان گنو/لینوکس بزرگنمایی صفحه نمایشام را پیدا کنم؟
این سوال به میزان وضوع یک تصویر بر روی صفحه نمایش اشاره میکند. بزرگنمایی صفحه (Screen resolution) به تعداد نقطهها یا پیکسلهای موجود در سراسر صفحهٔ نمایشتان اشاره میکند. برای مثال، وقتی میگویید برزگنمایی ۶۴۰x۴۸۰ پس منظورتان این است که ششصد و چهل نقطه در هر یک از چهارصد و هشتاد خط وجود دارد، یعنی، ۳۰۷ کیلو پیکسل.
برای پیدا کردن این مشخصه میتوانید از یکی از دو روش زیر کمک بگیرید:
۱) استفاده از دستور xdpyinfo:
[bash]
xdpyinfo | grep ‹dimensions:›
[/bash]
که نتیجهای به شکل زیر را باز میگرداند:
[bash]
dimensions: 1024×768 pixels (347×260 millimeters)
[/bash]
۲) استفاده از دستور xrandr:
[bash]
xrandr | grep ‘*’
[/bash]
که نتیجهای به صورت زیر را باز میگرداند:
[bash]
xrandr: Failed to get size of gamma for output default
1024×768 50.0* 51.0
[/bash]
که البته منظور خط بالایی احتمالا این است که به خاطر قدیمی بودن مانیتور من، خروجی گاما (!) را اندازه گیری نمیکند (یعنی به چه درد میخوره؟).
البته بدیهی است که در محیطهای دسکتاپ مختلف، با رجوع به بخش تنظیمات میتوان به این اطلاعات دست یافت، ولی این روشها طبیعتا سرراستتر است 😉
چچچ (۵): تغییر رمز عبور root در MySQL
من چگونه باید رمز عبور کاربر ریشه MySQL را در گنو/لینوکس، FreeBSD، OpenBSD و سیستمعاملهای شبه یونیکس روی ارتباط ssh / telnet عوض کنم؟
ایجاد رمز عبور MySQL یک کار ضروری است. به صورت پیشفرض کاربر ریشه، کاربر مدیر MySQL است. لطفا توجه داشته باشید که کاربر ریشه در لینوکس/یونیکس در سیستمعامل شما با کاربر ریشهٔ MySQL متفاوت است و هیچ ربطی به هم ندارند. بعضی مواقع ممکن است شما برای حفظ مسائل امنیتی، کاربر root را حذف کنید و به جای آن کاربر admin به عنوان کاربر اصلی در mysql معرفی کنید.
دستور mysqladmin برای تغییر کلمه عبور ریشه
اگر شما هرگز برای کاربر ریشهٔ کارگزار MySQLتان یک رمز عبور تعیین نکردهاید، کارگزار دیگر نیازی به کلمهٔ عبور برای متصل شدن به عنوان کاربر ریشه نخواهد داشت. برای ایجاد رمز عبور ریشه برای اولین بار، از دستور mysqlamin در خط فرمان به صورت زیر عمل کنید:
[bash]
$ mysqlamin -u root pasword NEWPASSWORD
[/bash]
به هر حال، اگر میخواهید رمز عبور کاربر ریشه را تعویض (یا به روز رسانی) کنید، پس باید دستور فوق را به شکل زیر تغییر دهید:
[bash]
$ mysqladmin -u root -p» oldpassword» password newpass
[/bash]
برای مثال، اگر رمز عبور قدیمی abc باشد، شما میتوانید روز جدید را به صورت ۱۲۳۴۵۶ با دستور زیر ایجاد کنید:
[bash]
$ mysqladmin -u root -p» abc» password «۱۲۳۴۵۶»
[/bash]
تغییر رمز عبور MySQL برای دیگر کاربران
برای تغییر رمز عبور کاربر عادی (فرض میکنیم که میخواهیم رمز عبور کاربر vivek را تغییر دهیم) باید از دستور زیر استفاده کنید:
[bash]
$ mysqladmin -u vivek -p oldpassword password newpass
[/bash]
تغییر رمز عبور کاربر ریشه MySQL با استفاده از دستور sql در محیط mysql
این روشی دیگر است. MySQL نامهای کاربری و رمز عبورها را در یک جدول در پایگاه دادهٔ MySQL ذخیره میکند. با استفاده از روش زیر میتوانید مستقیما رمز عبور کاربر Vivek را تغییر دهید:
۱) به کارگزار mysql وارد شوید و دستور زیر را در خط فرمان وارد کنید:
[bash]
$ mysql -u root -p
[/bash]
۲) از پایگاه داده mysql استفاده کنید (فرمان را در اعلان mysql> وارد کنید):
[bash]
mysql> use mysql;
[/bash]
۳) رمز عبور کاربر vivek را با وارد کردن دستور زیر تغییر دهید:
[bash]
mysql> update user set password=PASSWORD(“NEWPASSWORD”) where User=’vivek’;
[/bash]
۴) سرانجام، ابزارها را دوباره بارگزاری کنید:
[bash]
mysql> flush privileges;
mysql> quit
[/bash]
از این روش میتوانید با استفاده از APIها mysql در اسکریپت نویسیها به زبانهای PHP، پایتون و یا پرل استفاده کنید.
چچچ (۴): ایجاد یک کاربرد جدید در MySQL
وقتی که برای دسترسی به کارگزار (Server) پایگاه داده MySQL از طریق مشتریای (Client) نظیر mysql یا حتی زبانهای برنامه نویسی نظیر php یا perl اقدام میکنید، به یک حساب کاربری نیاز دارید.
MySQL دارای سیستم مدیریت کاربر خبرهای است که قادر به کنترل کردن دسترسی کاربران از مشتریهای مختلف به کارگزار میباشد. برای این کار MySQL از جداول مخصوص در پایگاه داده کمک میگیرد. به همین دلیل برای ساخت یک کاربر جدید در MySQL شما نیاز به کاربر root دارید.
سپس باید با دستوری به MySQL اجازهٔ ساخت یک کاربر جدید را بدهید. و در آخر، با استفاده از کاربر جدید ارتباطی را با کارگذار MySQL برقرار کنید.
لطفا توجه داشته باشید حساب کاربری در MySQL با اکانتهای یونیکس/لینوکس متفاوت است. برای مثال، کاربر root در MySQL و کاربر root در یونیکس/لینوکس جدا از هم بوده و هیچ ارتباطی با هم ندارند، حتی اگر نام کاربریشان شبیه به هم باشد.
روند ساخت یک حساب کاربری در MySQL
با استفاده از کاربر root برنامهٔ mysql وارد شوید (در پوستهٔ فرمان، دستور زیر را وارد کنید:):
[bash]
$ mysql -u root -p
[/bash]
و یا
[bash]
$ mysql -u root -h myserver-server. com -p
[/bash]
یک پایگاه دادهٔ جدید به اسم demo ایجاد کنید:
[bash]
mysql> CREATE DATABASE demo;
[/bash]
یک کاربر جدید برای پایگاه داده demo به اسم user۱ بسازید:
[bash]
mysql> GRANT ALL ON demo.* TO user1@localhost IDENTIFIED BY ‘mypassword’;
[/bash]
توجه: GRANT ALL به این معنی است که کاربر قادر است هر کاری انجام دهد. میتواند اطلاعات را بخواند، دستکاری کند و یا پاکشان کند، اما تنها برای جداول موجود در پایگاه دادهٔ demo. او قادر به دسترسی به دیگر پایگاههای داده نیست.
من چطور میتوانم با استفاده از حساب user۱ به کارگزار پایگاه داده MySQL متصل شوم؟
کاربر user۱ میتواند با استفاده از دستور زیر به حساب کاربریاش در پایگاه داده demo متصل شود:
[bash]
$ mysql -u user۱ -p demo
[/bash]
و یا:
[bash]
$ mysql -u user۱ -h mysql. server. com -p demo
[/bash]
که پارامترهای دستور به شکل زیر معنا میشوند:
- -user1 : کاربر MySQL
- -h : نام کارگزار MySQL (به صورت پیشفرض localhost)
- -p : اعلان برای رمز عبور
- demo: demo نام پایگاه داده در mysql میباشد (اختیاری)