انتقال وبلاگ به سرویس بلاگر

سلام،

بعد از مدت‌ها وبلاگ‌نویسی بر روی دامنه شخصی و نرم‌افزار مدیریت محتوای وردپرس، تصمیم گرفتم تا وبلاگ‌نویسی را در سرویس بلاگر ادامه بدهم.
آدرس‌های جدید:

* تا اطلاع ثانوی محتوای این وبلاگ در دامنه zebardast.ir برای مشاهده در دسترس خواهد بود.

درباره سعید زبردست

من برنامه نویس Java و PHP هستم. در کنار برنامه نویسی اطلاعات خوبی در زمینه پایگاه ‌های داده بخصوص MySQL دارم. برای اطلاع بیشتر به صفحه درباره سعید زبردست مراجعه کنید.

Linux CLI Commands

از دستور history بهتر استفاده کنیم

مقدمه

دستور history برای مشاهده تاریخچه دستورات وارد شده در خط فرمان سیستم‌عامل‌هایی بر مبنای یونیکس و لینوکس است. خروجی پیش‌فرض این دستور، فهرستی ساده‌ای از دستوراتی است که قبل از این دستور اجرا شده‌اند. مطلب امروز با معرفی پارامترها و ثابت‌های مرتبط با دستور history، باعث استفاده حداکثری شما از امکانات آن می‌شود.

فهرست دستورات اجرا شده

در زیر خروجی پیش‌فرض دستور history را مشاهده می‌نمایید:

$ history
 1008  ll
 1009  ifconfig
 1010  sudo iptables -nL
 1011  sudo psad -S
 1012  aptitude update
 1013  aptitude full-upgrade
 1014  history

فهرست دستورات اجرا شده همراه با تاریخ و ساعت

برای مشاهده زمانی که هر دستور در خط فرمان وارد شده است می‌توانید متغیر HISTTIMEFORMAT را مقداردهی نمایید:

$ export HISTTIMEFORMAT='%F %T  '
$ history
 1008  2014-05-07 09:09:11  ll
 1009  2014-05-07 09:09:14  ifconfig
 1010  2014-05-07 09:09:25  sudo iptables -nL
 1011  2014-05-07 09:09:37  sudo psad -S
 1012  2014-05-07 09:09:47  aptitude update
 1013  2014-05-07 09:09:55  aptitude full-upgrade
 1014  2014-05-07 09:10:01  history
 1015  2014-05-07 09:11:05  export HISTTIMEFORMAT='%F %T  '
 1016  2014-05-07 09:11:16  history

* در مقداردهی متغیر HISTTIMEFORMAT مقادیر زیر معادل یکدیگر هستند:

%F Equivalent to %Y - %m - %d
%T Replaced by the time ( %H : %M : %S )

فیلتر کردن برخی دستورات در تاریخچه دستور history

شما می‌توانید با مقداردهی متغیر HISTIGNORE دستوراتی را که مکرر استفاده می‌کنید را فیلتر نمایید:

$ export HISTIGNORE='pwd:history:ll:'
$ pwd
/home/saeid
$ history 3
 1040  2014-05-07 09:22:58  history
 1041  2014-05-07 09:32:48  export HISTIGNORE='pwd:history:ll:'
 1042  2014-05-07 09:32:57  history 3

نادیده گرفتن تکرار دستورات

دستوراتی که قصد دارید تکرار دستورات را در history نادیده بگیرید، از متغیر HISTCONTROL به شکل زیر استفاده نمایید:

$ export HISTCONTROL=ignoredups

در نظر داشته باشید که در صورت نیاز می‌توانید تنظیمات HISTCONTROL را توسط دستور unset به حالت پیش‌فرض تغییر دهید:

$ unset HISTCONTROL

تنظیم حداکثر تعداد ذخیره‌سازی دستورات اجرا شده

متغیر HISTSIZE حداکثر تعداد ذخیره‌سازی دستورات اجرا شده را مشخص می‌نماید. مقدار پیش‌فرض این متغیر 1000 است.

$ export HISTSIZE=1000

* برای غیرفعال کردن ذخیره‌سازی دستورات اجرا شده، کافیست مقدار متغیر HISTSIZE را صفر قرار دهید:

$ export HISTSIZE=0

مشاهده دستورات اجرا شده توسط سایر کاربران

به صورت پیش‌فرض، فهرست دستورات اجرا شده توسط هر کاربر در فایلی با نام .bash_history داخل پوشه خانگی وی ذخیره می‌شود. به عنوان مثال دستورات اجرا شده توسط کاربر saeid در فایل زیر قابل مشاهده و دستیابی است:

root@Saeid-Dev:/home/saeid# ll ~saeid/.bash_history
-rw------- 1 saeid saeid 40324 May  7 08:05 /home/saeid/.bash_history

* برای تغییر نام و آدرس فایل تاریخچه دستورات از متغیر HISTFILE استفاده نمایید.
* در نظر داشته باشید که برای مشاهده محتوای فایل تاریخچه سایر کاربران، باید دسترسی کاربر ریشه (root) را داشته باشید.

جستجو در تاریخچه دستورات اجرا شده

شما می‌توانید به منظور جستجو در تاریخچه دستورات اجرا شده، از ترکیب دستورات history و grep به صورت زیر استفاده نمایید:

$ history | grep export
  872  export HISTTIMEFORMAT='%F %T  '
  874  export HISTTIMEFORMAT='%T  '
  878  export HISTTIMEFORMAT='%Y - %m - %d %T  '
 1017  export HISTTIMEFORMAT=''
 1019  export HISTTIMEFORMAT='%F %T  '
 1021  export HISTIGNORE='ll:history'
 1024  export HISTIGNORE='ls -l:history:ll'
 1026  export HISTIGNORE='ll'
 1028  export HISTIGNORE='ls -l'
 1041  export HISTIGNORE='pwd:history:ll:'
 1043  export HISTCONTROL=ignoredups
 1051  unset HISTCONTROL
 1053  echo "export HISTCONTROL=ignoredups" >> ~/.bash_profile
 1062  export HISTSIZE=1000
 1074  history | grep export

روش دیگر برای جستجو در تاریخچه دستورات استفاده از ترکیب دکمه های Ctrl و r است. با فشردن هر دو دکمه با هم، فرم جستجوی خطی تاریخچه فعال می‌شود:

(reverse-i-search)`source ': source .bash_profile

ذخیره دائمی تنظیمات دستور history

برای ذخیره نمودن دائمی تنظیمات دستور history (و سایر دستورات) می‌توانید مقادیر مورد نظر را در فایل .bash_profile ذخیره نمایید.

$ vi ~/.bash_profile

یا به صورت خودکار، مانند:

$ echo "export HISTCONTROL=ignoredups" >> ~/.bash_profile

پاک کردن تاریخچه دستورات اجرا شده

به منظور پاک کردن تاریخچه تمامی دستورات اجرا شده میتوانید، از دستورات زیر را استفاده نمایید:

$ history -c

یا

$ > $HISTFILE

در نهایت اینکه اگر قصد دارید دستوری را بدون ذخیره شدن آن در تاریخچه دستورات اجرا نمایید، کافیست در ابتدای دستور یک فاصله (space) قرار دهید ;)

درباره سعید زبردست

من برنامه نویس Java و PHP هستم. در کنار برنامه نویسی اطلاعات خوبی در زمینه پایگاه ‌های داده بخصوص MySQL دارم. برای اطلاع بیشتر به صفحه درباره سعید زبردست مراجعه کنید.

پایگاه داده MySQL

نحوه بازیابی رمز عبور MySQL

مقدمه

به دلایل زیادی ممکن است که شما نتوانید با کاربر root وارد محیط پایگاه داده MySQL شوید. مواردی از قبیل فراموشی کلمه عبور، تغییر کلمه عبور توسط شخص دیگر (همکار یا نفوذگر)، نفوذ به پایگاه داده بدون داشتن رمز عبور و غیره. راهنمای زیر در نسخه 5.5 پایگاه داده MySQL بر روی سیستم عامل اوبونتو 12.04 آزموده شده است. همچنین این راهنما بر روی سایر سیستم‌عامل‌ها با کمی تغییر محیطی قابل اجرا می‌باشد.

تغییر رمز MySQL بدون داشتن رمز فعلی

مراحل زیر را به ترتیب برای تغییر رمز MySQL انجام دهید.

۱- متوقف کردن سرویس MySQL

دستور زیر را برای متوقف کردن سرویس MySQL در خط فرمان گنو/لینوکس اجرا نمایید:

sudo /etc/init.d/mysql stop

۲- راه‌اندازی سرویس MySQL در حالت غیر فعال کردن رمز عبور

دستور زیر را برای راه‌اندازی سرویس MySQL در حالت غیر فعال کردن رمز عبور در خط فرمان گنو/لینوکس اجرا نمایید:

sudo mysqld_safe --skip-grant-tables &

۳- ورود به محیط MySQL

دستور زیر را برای ورود به محیط MySQL بدون نیاز به رمز عبور در خط فرمان گنو/لینوکس اجرا نمایید:

mysql -u root

۴- تغییر رمز کاربر root

دستورات زیر را در خط فرمان MySQL برای تغییر رمز عبور کاربر root وارد نمایید. به جای عبارت NEW-ROOT-PASSWORD رمز مورد نظر خود را جایگزین نمایید. همچنین شما میتوانید رمز سایر کاربران را نیز با دستورات مشابه تغییر دهید.

mysql> use mysql;
mysql> update user set password=PASSWORD("NEW-ROOT-PASSWORD") where User='root';
mysql> flush privileges;
mysql> quit

۵- متوقف کردن سرویس جاری MySQL

دستور زیر را برای متوقف کردن سرویس جاری MySQL در خط فرمان گنو/لینوکس اجرا نمایید:

sudo /etc/init.d/mysql stop

۶- راه‌اندازی سرویس MySQL و ورود با رمز جدید

دستور زیر را برای راه‌اندازی سرویس MySQL در خط فرمان گنو/لینوکس اجرا نمایید:

sudo /etc/init.d/mysql start

در نهایت با استفاده از رمز عبور جدید و دستور زیر وارد محیط MySQL شوید:

mysql -u root -p

درباره سعید زبردست

من برنامه نویس Java و PHP هستم. در کنار برنامه نویسی اطلاعات خوبی در زمینه پایگاه ‌های داده بخصوص MySQL دارم. برای اطلاع بیشتر به صفحه درباره سعید زبردست مراجعه کنید.

برنامه Homebrew برای مدیریت بسته‌های نرم‌افزاری در OS X

برنامه Homebrew برای مدیریت بسته‌های نرم‌افزاری در OS X

مقدمه

من از سیستم‌عامل اوبونتو برای انجام کارهای شرکت و پروژه‌های گنو/لینوکسی استفاده می‌کنم و در کنار آن، از مک‌بوک پرو (OS X) برای انجام سایر کارها و پروژهای شخصی بهره می‌برم. به صورت پیش‌فرض در اوبونتو و سایر گنو/لینوکس‌ها ابزارهایی مانند APT و RPM برای مدیریت بسته‌های نرم‌افزاری وجود دارند که OS X از آن‌ها بی‌بهره است. ابزار‌های زیادی برای رفع این کمبود وجود دارند. از جمله Fink، Gentoo/Alt، MacPorts، Pkgsrc، RudixH و Homebrew. من شخصا Homebrew را بدلیل راحتی در استفاده و زیاد بودن بسته‌ها در مخازن نرم‌افزاری آن به سایر ابزارها ترجیح می‌دهم.

نصب Homebrew

برای نصب Homebrew کافیست دستور زیر را در خط فرمان ترمینال وارد و اجرا نمایید:

ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"

سپس دستور زیر را برای اطمینان از نصب صحیح Homebrew اجرا نمایید:

brew doctor                # check everything is ok

Homebrew بسته‌های نرم‌افزاری را در پوشه /usr/local/Cellar نصب کرده و symlink آن‌ها را برای اجرا در /usr/local/bin ایجاد می‌نماید. دستورات زیر نحوه نصب بسته wget و محل نصب آن را مشخص می‌کنند:

$ brew install wget
$ cd /usr/local
$ find Cellar
Cellar/wget/1.15
Cellar/wget/1.15/bin/wget
Cellar/wget/1.15/share/man/man1/wget.1

$ ls -l bin
bin/wget -> ../Cellar/wget/1.15/bin/wget

دستور زیر را برای بررسی وجود /usr/local/bin در $PATH اجرا نمایید:

if [ -n "`echo $PATH | grep '/usr/local/bin'`" ]; then echo "true"; else echo "false"; fi;

در صورتیکه خروجی دستور بالا false بود، دستورات زیر را برای اضافه کردن /usr/local/bin به $PATH اجرا نمایید:

echo -e "\n# Homebrew bin dir path." >> ${HOME}/.bash_profile
echo "PATH=/usr/local/bin:\$PATH" >> ${HOME}/.bash_profile
source ~/.bash_profile

دستورات Homebrew

دستورات Homebrew بسیار شبیه به سایر نرم‌افزارهای مشابه‌اش است. برای اجرای دستورات Homebrew نیازی به دسترسی ریشه و sudo ندارید. در زیر مهم‌ترین دستورات Homebrew را مشاهده می‌نمایید:

دستور توضیح
brew list
نمایش فهرست نرم‌افزار‌های نصب شده
brew search
نمایش فهرست نرم‌افزار‌های قابل نصب
brew search pkg-name
جستجو برای نرم‌افزار pkg-name
brew info pkg-name
نمایش اطلاعات بسته نرم‌افزاری pkg-name
brew install pkg-name
نصب بسته نرم‌افزاری pkg-name
brew uninstall pkg-name
حذف بسته نرم‌افزاری pkg-name
brew update
بروزرسانی فهرست نرم‌افزار‌های قابل نصب
brew upgrade
بروزرسانی تمامی نرم‌افزارها
brew upgrade pkg-name
بروزرسانی نرم‌افزار pkg-name

پیوندها

درباره سعید زبردست

من برنامه نویس Java و PHP هستم. در کنار برنامه نویسی اطلاعات خوبی در زمینه پایگاه ‌های داده بخصوص MySQL دارم. برای اطلاع بیشتر به صفحه درباره سعید زبردست مراجعه کنید.

لینوکس

آزاد کردن فضای RAM با پاک‌کردن Cache در لینوکس

مقدمه

مدتی قبل در حال بررسی عملکرد پایگاه داده MySQL و پارامترهای مختلف کش (Cache) کردن اطلاعات آن بودم. قطعه کدی به زبان سی پلاس پلاس (++C) وظیفه خواندن محتوای فایل‌ها و انتقال مقادیر محاسبه شده و دریافتی از آن‌ها را به MySQL داشت. مشکلی که بوجود آمد، پر شدن حافظه رم (RAM) بعد از چند دقیقه و کندی سیستم برای انجام سایر کارها بود.

بررسی وضعیت رم

در لینوکس دستوری به نام free وجود دارد که اطلاعات وضعیت رم و فضای swap را نشان می‌دهد.

$ free -h
             total       used       free     shared    buffers     cached
Mem:          7.5G       7.4G       163M         0B        76M       4.1G
-/+ buffers/cache:       3.2G       4.3G
Swap:         7.7G       4.9M       7.7G

با توجه به خروجی دستور free مشخص می‌شود که از مجموع 7.5G فضای رم، فقط 163M خالی است. همچنین 4.1G به Cache اختصاص داده شده است. من نیاز داشتم که فضای کش شده را به صورت دستی خالی کنم.

منظور از Cache و Buffer در اینجا چیست؟

Cache شامل اطلاعات محتوای فایل‌ها و اطلاعاتی است که از دیسک خوانده شده اند.
‌Buffer شامل اطلاعات وضعیت رم و Cache و همچنین اطلاعاتی که هنوز ذخیره نشده‌اند.

پاک کردن Cache

در لینوکس فایلی به نام drop_caches وجود دارد که نوشتن در آن به کرنل (Kernel) دستور لازم برای آزاد کردن فضای cache از حافظه را می‌دهد. مقدار عددی 3 باعث پاک کردن تمامی اطلاعات کش شده می‌شود. در نظر داشته باشید که قبل از پاک کردن کش باید دستور sync را اجرا نمایید. دستور sync، اطلاعاتی که نیازمند نوشتن شدن بر روی دیسک هستند ولی هنوز در cache و buffer می‌باشند را بر روی دیسک می‌نویسد. ترکیب دستورات sync و پاک کردن cache در زیر آماده است.

$ sync; sudo sh -c "echo 3 > /proc/sys/vm/drop_caches"

بد نیست دوباره دستور free را اجرا کرده و وضعیت رم را بررسی کنیم:

$ free -h
             total       used       free     shared    buffers     cached
Mem:          7.5G       3.5G       4.0G         0B       7.6M       433M
-/+ buffers/cache:       3.0G       4.5G
Swap:         7.7G       4.9M       7.7G

خوب،‌ براحتی حدود 3.4G از فضای RAM را خالی کردیم. شما می‌توانید این دستورات را توسط crontab به صورت دوره‌ای و خودکار بر روی سرور ویا کامپیوتر شخصی خود اجرا نمایید. البته بهتر است مدیریت رم را به سیستم عامل واگذار کنید.

برای مطالعه بیشتر

درباره سعید زبردست

من برنامه نویس Java و PHP هستم. در کنار برنامه نویسی اطلاعات خوبی در زمینه پایگاه ‌های داده بخصوص MySQL دارم. برای اطلاع بیشتر به صفحه درباره سعید زبردست مراجعه کنید.