MD5 چیست و با آن چه می‌توان کرد؟

در ابتدا، Hash چیست؟

hash خروجی تابعی یک‌طرفه است، برای تولید نوعی اثر انگشت از یک سری داده. منظور از یک‌طرفه بودن تابع Hash این است که نمی‌توان با داشتن خروجی تابع به اصل داده دست یافت (همان‌طور که با داشتن اثر انگشت یک انسان، نمی‌توان آن انسان را از نو تولید کرد!). احتمال اینکه دو داده‌ی متفاوت دو خروجی یکسان از این تابع بگیرند بسیار پایین است، به همین دلیل از الگوریتم‌های متفات این تابع معمولا برای تشخیص درستی داده‌ها استفاده می‌شود. به عنوان مثال اگر از الگوریتم معروف MD5 برای محاسبه‌ی خروجی تابع Hash استفاده کنیم، و کلمه‌ی 'Cat' را به آن بدهیم، خروجی ما همیشه مقدار زیر است:

d077f244def8a70e5ea758bd8352fcd8
چنانچه کلمه‌ی 'Cat'  را به 'Cats' تغییر دهیم، خروجی تابع به شکل زیر تغییر پیدا می‌کند:

0832c1202da8d382318e329a7c133ea0
مقدار داده‌ای که به تابع می‌دهیم، ربطی به سایز خروجی آن ندارد. همچنین تغییر در داده‌، هر چقدر هم که کوچک باشد، خروجی کاملا متفاوتی ارائه خواهد کرد.

MD5 چیست؟

MD5 یا Message-Digest algorithm 5
پر استفاده‌ترین، تابع رمزنگاری Hash است. از این تابع در بسیاری از نرم‌افزارهای حفاظت اطلاعت استفاده می‌شود و همچنین کاربرد زیادی در تشخیص درستی داده‌ها دارد. خروجی این تابع مقداری 128 بیتی‌است که معمولا به صورت یک عدد هگزادسیمال ۳۲ رقمی ارائه می‌شود. به خروجی تابع MD5 Hash یک داده، MD5 Checksum آن داده گفته می‌شود.

چگونه MD5 Checksum یک عبارت را محاسبه کنیم؟

ساده‌ترین راه برای این کار مراجعه به این آدرس، نوشتن عبارت مورد نظر و فشردن دکمه‌ی Calculate MD5 است، اما نرم‌افزار‌های زیادی هم برای محاسبه‌ی این مقدار نوشته شده است. همچنین اگر شما برنامه‌نویس هستید، توابع متفاوتی برای استفاده در زبان‌های مختلف برنامه‌نویسی وجود دارد. با این حال شبه‌کد محاسبه‌ی این مقدار را می‌توان در ویکیپدیا یافت.

MD5 Hash و فایل‌ها:

محاسبه‌ و مقایسه‌ی خروجی تابع MD5 Hash فایل‌ها روشی است برای تعیین دست نخورده بودن، و یا سالم بودن یک فایل. همچنین از MD5 Checksum می‌توان برای یافتن فایل‌های مشابه استفاده کرد. به عنوان مثال تصور کنید که قصد دارید مقداری از اطلاعات خود را برای یکی از دوستان خود کپی کنید. برای اینکار می‌توانید ابتدا MD5 Checksum فایل‌های خود و فایل‌های دوستتان را محاسبه کرده، و سپس فایل‌هایی را که مقدار MD5 Checksum آنها متفاوت است، کپی کنید. با این کار از کپی کردن فایل‌هایی که از قبل در هارد دیسک دوستتان وجود داشته‌ است جلوگیری می‌کنید. همچنین بار دیگر بعد از کپی کردن فایل‌ها می‌توانید با مقایسه‌ی مقدار MD5 Checksum فایل‌های کپی شده با فایل‌های موجود در هارد دیسک خود،‌ از این که فایل‌ها به درستی کپی شده‌اند، مطمئن شوید.
به هنگام دانلود یک فایل‌، در بسیاری از سایت‌های اینترنتی مقدار MD5 Checksum فایل هم ذکر می‌شود تا پس دانلود، بتوان از سلامت فایل مطمئن شد. به عنوان مثال اغلب سایت‌های ارائه دهنده‌ی توزیع‌های لینوکس، مقدار MD5 Checksum فایل‌های ایزوی توزیعشان را نیز ذکر می‌کنند تا پیش از رایت آنها بر روی سی‌دی، بتوان از سلامت فایل دانلود شده مطمئن شد.

چگونه MD5 Checksum یک فایل را (در لینوکس) محاسبه کنیم؟

برای محاسبه‌ی MD5 Checksum یک فایل از ابزار md5sum استفاده می‌شود. این برنامه به صورت پیش‌فرض در اکثر توزیع‌های لینوکس موجود است. تصور کنید قصد محاسبه‌ی این مقدار برای فایلی به نام file.txt را دارید. برای این کار یک ترمینال باز کنید و دستور زیر را وارد کنید:

md5sum file.txt

همه چیز در مورد md5sum:

ابزار md5sum چند قابلیت دیگر هم دارد. برای محاسبه‌ی md5sum چند فایل به صورت همزمان، می‌توانید نام فایل‌ها را یکی پس از دیگری به عنوان آرگومان‌های دستور md5sum بنویسید:

md5sum text1.txt text2.txt
خروجی این دستور چیزی شبیه به این است:
9ff460edc32f6a59fd0e612162c8d7e7  text1.txt
bbee0ebbbb53235666b515c5d0c2c3ab  text2.txt
ستون اول مقدار MD5 Checksum و ستون دوم نام فایل‌هاست.
بدیهی است می‌توان MD5 Checksum فایل‌ها را با استفاده از دستور زیر در یک فایل جداگانه ذخیره کرد:

md5sum text1.txt text2.txt > mymd5sums
با این کار فایلی به نام mymd5sums با محتوایی برابر خروجی دستور در فولدر جاری ایجاد می‌شود. از این فایل می‌توان بعدا برای چک کردن تطابق مقدار MD5 Checksum‌های موجود در این فایل، با مقدار به دست آمده از فایل‌ها استفاده کرد. برای این کار از دستور زیر استفاده می‌شود:
md5sum -c mymd5sums
خروجی دستور بالا چیزی شبیه به این است:
text1.txt: OK
text1.txt: OK
چنانچه مقدار به دست آمده از یکی از فایل‌ها با عدد موجود در فایل mymd5sums تطابق نداشته باشد، خروجی به شکل زیر می‌باشد:
one.txt: FAILED
two.txt: OK
md5sum: WARNING: 1 of 2 computed checksums did NOT match
می‌توان به صورت دستی نیز فایلی مشابه فایل mymd5sums ایجاد نمود و از آن فایل برای مقایسه‌ی مقدار MD5 Checksumهای فایل‌های متفاوت ایجاد کرد. فقط دقت کنید که هر سطون باید با دو بار فشردن کلید Space از هم جدا شوند.
همچنین می‌توان به جای استفاده از یک فایل، از خروجی استاندارد یک دستور دیگر برای مقایسه‌ استفاده کرد. به عنوان مثال:

echo '9ff460edc32f6a59fd0e612162c8d7e7  text1.txt' | md5sum -c -
دستور بالا، مقدار md5checksum فایل text.txt را با مقدار پایپ شده از دستور echo مقایسه می‌کند. دقت کنید که به جای نام فایل، این بار از -(خط تیره) استفاده شده است.

و در انتها...

امیدوارم چیزی رو از قلم نیانداخته باشم و از شما هم این انتظار را دارم که اگر احساس کرده‌اید جایی اشتباهی صورت گرفته یا بخشی از نوشته نامفهوم بوده به من اطلاع بدهید.
بعضی قسمت‌های نوشته‌ی بالا برگرفته از منابع زیر است:

استفاده از اکانت Gmail در ترمینال لینوکس

این پست یک راهنما برای استفاده از Mutt به همراه fetchmail و procmail و msmtp جهت فرستادن، دریافت کردن و خواندن ای‌میل در ترمینال لینوکس و با استفاده از اکانت جی میل است. اگر این سوال براتون پیش اومده که چرا یک نفر باید برای انجام چنین کاری وقت بذاره و طبق معمول از یک مرورگر اینترنت برای دریافت یا ارسال ای‌میل‌ها استفاده نکنه، احتمالا این پست برای شما نیست.

اما فکر می کنم همه شما تا الان قدرت شگفت‌انگیز ترمینال لینوکس رو حس کرده‌اید، اگر اینطوره حتما از این مطلب خوشتون میاد.


بیشتر این نوشته برگرفته از نوشته‌ی اندرو استرانگ (Andrew Strong)، با عنوان Using Mutt with Gmail است که در اینجا از ایشون که به من این اجازه رو دادن که از نوشته‌شون استفاده کنم و این متن رو در اینجا بنویسم تشکر می‌کنم.


پیش از شروع


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

بخش یک: دانلود ای‌میل‌ها


احتمالا این بخش پیچیده‌ترین بخش این مطلب باشه ولی بهتون اطمینان می‌دم که به سختیش می‌ارزه!
در ابتدا باید مجوز‌های SSL ٬(SSL Certificates) لازم رو دانلود و نصب کرد، سپس باید fetchmail رو نصب کرد و در آخر می باید procmail رو نصب کنیم.


دانلود SSL Certificates:

 
از اونجا که احتمال داره مجوزهای جی‌میل پس از یک دوره‌ی زمانی (معمولا طولانی) عوض بشن من در اینجا روشی برای اینکه مجوزها رو خودتون از موزیلا (Mozilla's source tree) و با استفاده از اسکریپت دانیل استنبرگ (Daniel Stenberg) دانلود کنید، معرفی می‌کنم.
برای اجرای این اسکریپت باید Perl و همچنین ماژول‌های perl-libwww رو نصب کرده باشید.

$ mkdir -pv $HOME/mail/certs
$ cd $HOME/mail/certs
$ touch Thawte_Premium_Server_CA.pem
$ touch Equifax_Secure_CA.pem
$ curl --verbose --output mk-ca-bundle.pl \
http://cool.haxx.se/cvs.cgi/*checkout*/curl/lib/mk-ca-bundle.pl?rev=1.10
$ perl mk-ca-bundle.pl
این کد باعث می‌شه یک فایل به اسم ca-bundle.crt ایجاد بشه که شما باید دو مجوز از درون این فایل استخراج کنید. اولین مجوز "Thawte Premium Server CA" است که باید در فایل مربوط به خودش که چند لحظه پیش ساختیم (Thawte_Premium_Server_CA.pem) ذخیره بشه. من این مجوز رو اینجا برای کسانی که با اسکریپت perl مشکل دارن می‌ذارم ولی بهتره که خودتون این مجوز رو بدست بیارین:
-----BEGIN CERTIFICATE-----
MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkExFTATBgNVBAgT
DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UE
AxMYVGhhd3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZl
ckB0aGF3dGUuY29tMB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYT
AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2
aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBDQTEoMCYGCSqGSIb3DQEJARYZ
cHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2
aovXwlue2oFBYo847kkEVdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIh
Udib0GfQug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMRuHM/
qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQAm
SCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUIhfzJATj/Tb7yFkJD57taRvvBxhEf
8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JMpAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7t
UCemDaYj+bvLpgcUQg==
-----END CERTIFICATE-----
دومین مجوز "Equifax Secure CA" است که اون هم باید در فایل مربوط به خودش (Equifax_Secure_CA.pem) ذخیره بشه:
-----BEGIN CERTIFICATE-----
MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE
ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT
B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB
nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR
fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW
8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG
A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE
CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG
A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS
spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB
Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961
zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB
BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95
70+sB3c4
-----END CERTIFICATE-----
و در آخر با استفاده از کد زیر کاری کنید که Openssl بدونه کجا دنبال مجوزها بگرده:
$ c_rehash $HOME/mail/certs/
با این کار بخش مربوط به دانلود مجوزها تموم می‌شه و ما الان آماده‌ایم که به سراغ بخش نصب fetchmail بریم.

نصب fetchmail:

 
الان که موفق شدیم مجوزهای SSL رو دانلود کنیم، fetchmail به راحتی قابل نصب و استفاده است. باید فایل HOME$/fetchmailrc رو با اطلاعات زیر ایجاد کنید:

poll pop.gmail.com
with proto POP3
user 'your.email@gmail.com'
there with password 'your_password'
is 'your_user_name' here
mda "/usr/bin/procmail -d %T"
options
no keep
ssl
sslcertck
sslcertpath /home/your_username/mail/certs/
واضحه که می‌باید اطلاعات مربوط به خودتون رو جایگزین قسمت‌های مربوطه کنید.
و در آخر، از اونجا که کلمه‌ی عبور شما در این فایل ذخیره شده، بهتره که فقط به صاحب فایل، مجوز دسترسی و خوندنش رو بدید:

$ chmod 600 ~/.fetchmailrc
الان زمان مناسبیه برای اینکه مطمئن بشید که POP Forwarding رو در اکانت جی‌میلتون فعال کرده‌اید. این تنظیمات رو می‌تونید در قسمت Settings - Forwarding and POP جی‌میل پیدا کنید. بعد از اینکه تنظیمات مورد نظر خودتون رو اعمال کردید، به مرحله‌ی بعد برید.

نصب procmail


procmail آخرین مرحله از بخش دانلود ای‌میل‌هاست. قبل از نصب اون باید متغیر محیطی MAIL$ رو تعریف کنید تا تمام نرم‌افزارهای مربوط به ای‌میل بدونن محل ذخیره‌ی ای‌میل‌ها کجاست.دو خط زیر رو به bashrc./~ اضافه کنید:
# Sets the Mail Environment Variable
MAIL=/var/spool/mail/john && export MAIL>/code>
بعد از انجام این‌کار باید فایل HOME$/.procmailrc رو به همراه تنظیمات مورد نظرتون ایجاد کنید. من یک نمونه‌ی ساده از تنظیمات procmail رو در زیر می‌آرم که شما می‌تونید در صورت تمایل پس از خوندن راهنمای procmail تغییرش بدین:
PATH=/bin:/usr/bin:/usr/local/bin
VERBOSE=off 
DEFAULT=/var/spool/mail/your_username
MAILDIR=$HOME/mail
LOGFILE=$HOME/.procmaillog
# Recipes below this comment:

:0:
* ^TOmutt-user
mutt
البته بخش آخر فایل تنها یک مثال ساده است که می‌تونه حذف بشه. فعلا توضیحی در مورد اون نمی‌دم چون شما بعد از خوندن راهنمای procmail متوجه کاربردش خواهید شد. حتما man procmailex رو اجرا کنید تا متوجه تنظیمات بالا بشید. البته فراموش نکنید که در تنظیمات بالا اطلاعات مربوط به خودتون رو جایگزین قسمت قرمز رنگ بکنید.

بخش دو: فرستادن ای‌میل

در این بخش از نرم‌افزار msmtp برای فرستادن ای‌میل استفاده ‌می‌کنیم. برای نصب msmtp می‌بایست فایل HOME$/.msmtprc رو با اطلاعات زیر ایجاد کنید:
account default
host smtp.gmail.com
port 587
from your_email@gmail.com
tls on
tls_starttls on
tls_trust_file /home/john/mail/certs/Thawte_Premium_Server_CA.pem
# tls_trust_file /home/john/mail/certs/Equifax_Secure_CA.pem
auth on
user your_email
password your_password
logfile ~/.msmtp.log 
البته فراموش نکنید که قسمت‌های قرمز رو با اطلاعات مربوط به خودتون تغویض کنید و از اونجا که باز هم در این فایل پسورد شما ذخیره شده، باید کاری کنید که فایل فقط توسط صاحب اون خونده بشه:
$ chmod 600 ~/.msmtprc
و بالاخره Mutt:

بخش سه: خواندن ای‌میل‌ها

برای تنظیم Mutt باید فایل HOME$/.muttrc رو ایجاد و تنظیمات مورد نیازتون رو به اون اضافه کنید. تنظیم Mutt کار نسبتا زمان بریه و اگر بخواید این فایل رو از هیچ بنویسید، ممکنه خسته بشید. من برای شروع یک نمونه‌ی ساده از این تنظیمات رو می‌ذارم که شما می‌تونید بعداً اون رو به هر شکلی که دوست دارید، تغییر بدید. بعضی قسمت‌های این فایل مثل aliasها و رنگ‌ها (colours) به فایل‌ دیگه‌ای اشاره می‌کنن که نباید یادتون بره اون فایل‌ها رو هم ایجاد کنید.

#======================================================#
# Boring details
set realname = "your_username"
set from = "your_email@gmail.com"
set use_from = yes
set envelope_from ="yes"

# Use a signature
set signature="~/.signature"

# Use msmtp rather than sendmail. Check that
# the path is correct for your system:
set sendmail="/usr/bin/msmtp"  

# If not set in ~/.bashrc:
set spoolfile = /var/spool/mail/john

#======================================================#
# Folders
set folder="$HOME/mail"      # Local mailboxes stored here
set record="+sent"           # Where to store sent messages
set postponed="+postponed"   # Where to store draft messages
set mbox_type=mbox           # Mailbox type
set move=no                  # Don't move mail from spool

#======================================================#
# Watch these mailboxes for new mail, useful only if
# Procmail or Maildrop is used to sort mail.
mailboxes ! +slrn +fetchmail +mutt
set sort_browser=alpha    # Sort mailboxes by alpha(bet)

#======================================================#
# What to show and order of headers
ignore *
unignore Date: From: User-Agent: X-Mailer X-Operating-System To: \
Cc: Reply-To: Subject: Mail-Followup-To:
hdr_order Date: From: User-Agent: X-Mailer X-Operating-System To: \
Cc: Reply-To: Subject: Mail-Followup-To:

#======================================================#
# which editor do you want to use?
# vim of course!
set editor="vim -c 'set tw=70 et' '+/^$' "
set edit_headers=yes      # See the headers when editing

#======================================================#
# Aliases

set alias_file = ~/mail/mutt_aliases # In their own file
source ~/mail/mutt_aliases           # Source them
set sort_alias=alias                 # Sort alphabetically

#======================================================#
# Colours: defaults are a little bleak so experiment!

source ~/mutt/mutt_colors            # In their own file

#======================================================#
# Lists: An example using the mutt-users list:

lists mutt-users
subscribe mutt-users
set followup_to=yes        # Sets 'Mail-Followup-To' header
set honor_followup_to=yes 
fcc-hook mutt-user +mutt   # See your own posts using fcc

#======================================================#
# Odds and ends

set markers          # mark wrapped lines of text in the pager with a +
set smart_wrap       # Don't wrap mid-word
set pager_context=5  # Retain 5 lines of previous page when scrolling.
set status_on_top    # Status bar on top.
push <show-version>  # Shows mutt version at startup
در زیر توضیحات بیشتری در مورد رنگ‌ها و روش استفاده از اون‌ها در Mutt می‌دم:

رنگ‌ها در Mutt

اگر ترمینال شما از رنگ‌ها هم پشتیبانی می‌کنه (که دیگه این روزا خیلی کم پیش می‌یاد که ترمینالی از رنگ‌ها پشتیبانی نکنه)، می‌تونید تغریبا رنگ همه‌ی قسمت‌های پنجره‌ی Mutt رو تنظیم کنید. تمام اطلاعات مربوط به رنگ‌ها در راهنمای Mutt و در قسمت "Section 3: Configuration 8: Using color and mono video attributes" موجوده، ولی در هر حال، روش ساده‌ی استفاده از رنگ‌ها به صورت زیره:
color   object   foreground   background>/code>

البته تعیین رنگ‌ها می‌تونه خیلی پیچیده‌تر از این‌ها باشه، ولی یک شروع ساده مناسب‌تره. رنگ‌های اولیه شامل سفید (white)، سیاه (black)، سبز (green)، بنفش (magenta)، آبی (blue)، فیروزه‌ای (cyan)، زرد (yellow)، قرمز (red) و رنگ پیش‌فرض (default) است که همین‌طور می‌تونید با اضافه کردن کلمه‌ی bright در مورد رنگ‌های پس‌زمینه (foreground) اون‌ها رو پر رنگ‌تر کنید. برای افرادی که از ترمینالی با پیش‌زمینه‌ی سفید استفاده می‌کنن، رنگ‌های زیر رنگ‌های مناسبی هستن:

#---- Mutt Colors for White Background -------
color    hdrdefault    black           default  
color    quoted        red             default  
color    signature     brightblack     default  
color    indicator     brightwhite     red
color    attachment    black           default
color    error         red             default  
color    message       blue            default  
color    search        brightwhite     magenta
color    status        brightyellow    blue
color    tree          red             default  
color    normal        blue            default  
color    tilde         green           default  
color    bold          brightyellow    default  
color    markers       red             default

البته باید فایلی به اسم colors.default هم به هنگام نصب Mutt ایجاد شده باشه که برای ترمینال‌هایی با پیش‌زمینه‌ی سفید نوشته شده. برای ترمینال‌هایی که دارای پیش‌زمینه‌ی سیاه رنگ هستند هم فایلی به نام colors.linux به هنگام نصب Mutt ایجاد شده که محتویات این فایل در زیر اومده:

#---- Mutt Colors for Black Background -------
color   hdrdefault   blue              black
color   quoted       blue              black
color   signature    blue              black
color   attachment   red               black
color   message      brightred         black
color   error        brightred         black
color   indicator    black             red
color   status       brightgreen       blue
color   tree         white             black
color   normal       white             black
color   markers      red               black
color   search       white             black
color   tilde        brightmagenta     black
color   index        blue              black ~F
color   index        red               black "~N|~O"
اگر هم از هیچ‌‌کدوم از رنگ‌های بالا خوشتون نیامد، می‌تونید خودتون دست بکار بشید و با کمک راهنمای Mutt رنگ‌های مورد علاقه‌تون رو انتخاب کنید.

نتیجه‌ی کار
در نهایت، شما می‌تونید بعد از باز کردن Mutt، با فشار دادن کلید "!" یک شل پرامت (shell prompt) باز کنید و پس از اجرای کامند fetchmail -v خواندن ای‌میل‌هاتون رو شروع کنید. و هدیه‌‌ای که من در اینجا به شما می‌دم یک ماکروست که با استفاده از اون می‌تونید به راحتی و با فشردن کلید "I" به خواندن ای‌میل‌ها بپردازید. خط زیر رو به muttrc./~ اضافه کنید:

macro index,pager I '<shell-escape> fetchmail -v<enter>'

البته این فایل Muttrc./~ خیلی ساده است و می‌تونه پیچیده‌تر از این‌ها باشه، اما به نظر من این فایل بیشتر نیازها رو بر آورده می‌کنه. از اینکه چند ساعتی بیشتر وقت بذارید و این فایل رو کامل‌تر کنید نترسید، چون قطعا کامل‌تر کردنش ارزش زمانی رو که براش می‌ذارید رو داره.


و در انتها...

 
ترمینال لینوکس برنامه‌های خارق‌العاده‌ای داره و می‌شه باهاش کارهای عجیب غریبی انجام داد. اسکریپت‌های زیادی می‌شه نوشت که نتیجه‌ی اون‌ها رو ای‌میل کنه، و یا ای‌میلی رو که دریافت شده رو بگیره و کار خاصی روی اون انجام بده. به هر حال امیدوارم از این نوشته بهره‌ی کافی رو برده باشید و خیلی خوشحال می‌شم اگر نظر خودتون و نتیجه استفاده از این نوشته رو از طریق ای‌میل (مسلما با استفاده از Mutt) و یا کامنت به من بگید. همین‌طور اگر در این نوشته به ایرادی برخوردید، حتما من رو مطلع کنید.

هر آنچه از ls -l باید بدانید

یکی از کامندهای خیلی پر استفاده‌ی لینوکس ls -l هست که به طور حتم شما هم به خوبی می‌شناسیدش و بارها ازش استفاده کرده‌اید. کار این کامند نمایش لیست‌ طولانی (همراه با مشخصات) فایل‌ها و فولدرهاست. یک نمونه از خروجی این کامند رو در زیر می‌بینید که من بعدا هر ستون این کامند رو ترجمه می‌کنم. (گرچه به احتمال زیاد شما بیشتر ستون‌ها یا شاید همه‌ی اون‌ها رو می‌شناسید.)

drwxr-xr-x.  3 root root    4096 2010-01-02 12:55 alsa
drwxr-xr-x.  2 root root    4096 2009-11-09 22:42 bdevid
lrwxrwxrwx.  1 root root      14 2010-02-13 18:30 cpp -> ../usr/bin/cpp
drwxr-xr-x.  3 root root    4096 2010-02-27 01:04 crda
drwxr-xr-x.  2 root root    4096 2010-01-15 16:51 dbus-1
drwxr-xr-x. 40 root root    4096 2010-03-30 15:14 firmware
drwxr-xr-x.  3 root root    4096 2010-01-04 17:28 i686
drwxr-xr-x.  6 root root    4096 2009-11-09 22:44 kbd
-rwxr-xr-x.  1 root root  179364 2010-01-04 17:59 ld-2.11.1.so
lrwxrwxrwx.  1 root root      12 2010-01-14 14:49 ld-linux.so.2 -> ld-2.11.1.so
lrwxrwxrwx.  1 root root      13 2010-02-05 14:36 ld-lsb.so.3 -> ld-linux.so.2
lrwxrwxrwx.  1 root root      15 2010-01-10 02:56 libacl.so.1 -> libacl.so.1.1.0
-rwxr-xr-x.  1 root root   31444 2009-12-26 23:51 libacl.so.1.1.0
-rwxr-xr-x.  1 root root    3508 2009-07-26 23:38 libaio.so.1.0.0
-rwxr-xr-x.  1 root root    3508 2009-07-26 23:38 libaio.so.1.0.1
-rwxr-xr-x.  1 root root   18556 2010-01-04 17:59 libanl-2.11.1.so
lrwxrwxrwx.  1 root root      16 2010-01-14 14:49 libanl.so.1 -> libanl-2.11.1.so
-rwxr-xr-x.  1 root root  964852 2010-01-26 12:14 libasound.so.2.0.0
-rwxr-xr-x.  1 root root   18516 2009-11-26 22:20 libattr.so.1.1.0
-rwxr-xr-x.  1 root root   93248 2009-12-08 19:25 libaudit.so.1.0.0

برای نمونه سطر زیر رو در نظر بگیرید:

-rwxr-xr-x.  1 root root    3508 2009-07-26 23:38 libaio.so.1.0.1

همین‌طور که می‌بینید این سطر به ۱۰ ستون به شکل زیر تقسیم شده:



ستون ۱۰

ستون ۹

ستون ۸

ستون ۷

ستون ۶

ستون ۵

ستون ۴

ستون ۳

ستون ۲

ستون ۱
libaudit.so.1.0.1
2009-11-0823:38

3508

root

root

1

r-x

r-x

rwx

-


ستون اول ممکنه یکی از حالت‌های زیر باشه:
- : فایل
d : فولدر یا directory
l : لینک

ستون‌های دوم، سوم و چهارم مربوط به مجوزهاست. مجوز خواندن (r)، مجوز نوشتن (w) و مجوز اجرا کردن (x) که:
ستون اول مجوزهای صاحب (owner) فایل است.
ستون دوم مجوزهای گروه فایل است.
و ستون سوم مجوزهای سایرافراد (everyone) است.

ستون پنجم نشان‌دهنده‌ی تعداد لینک‌ها یا فولدارهای داخل یک فولدره.

ستون ششم نام صاحب (owner) فایل یا فولدر رو نشان می‌ده.

ستون هفتم گروهی رو که فایل به اون تعلق داره، مشخص می‌کنه و هر کاربری (به جز صاحب فایل) که متعلق به این گروه باشه، دارای مجوزهای ذکر شده در ستون سوم است.

ستون هشتم نشان دهنده‌ی سایز فایل به بایت است. افزودن h- (برگرفته از Human Readable) به همراه l- باعث می‌شه خروجی برای درک بهتر به کیلوبایت، مگابایت و یا گیگابایت باشه.

ستون نهم شامل تاریخ و زمان آخرین باری که فایل ویرایش شده است.

و در ستون دهم هم که نام فایل به نمایش در می‌آد. البته در مورد لینک‌ها نام فایلی که به آن لینک داده شده پس از علامت <- نمایش داده می‌شه.

دو تابع مفید گوگلی برای استفاده در لینوکس

قصد داشتم برای شروع روش تنظیم و استفاده از اکانت جی میل در کنسول لینوکس رو توضیح بدم ولی نوشتنش بیشتر از اونی که فکر می کردم طول کشید. بنابراین فعلا به این پست کوتاه‌تر بسنده می‌کنم.

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

spellcheck(){ typeset y=$@;curl -sd "<spellrequest><text>$y</text></spellrequest>" https://www.google.com/tbproxy/spell|sed -n '/s="[0-9]"/{s/<[^>]*>/ /g;s/\t/ /g;s/ *\(.*\)/Suggestions: \1\n/g;p}'|tee >(grep -Eq '.*'||echo -e "OK");}
(اگر دوست دارید همیشه این تابع دم دستتون باشه، می‌تونید کد بالا رو به bashrc./~ اضافه کنید.)

پس از وارد کردن دستور بالا به راحتی می‌تونید با استفاده از دستور زیر املای صحیح یک کلمه رو چک کنید:

spellcheck some_word

تابع دوم، می تونه برای تشخیص زبان یک نوشته، با استفاده از مترجم گوگل استفاده بشه. مشابه کد بالا، کد زیر رو هم میتونید به فایل bashrc./~ اضافه کنید تا بتونید همیشه ازش استفاده کنید.

detectlanguage(){ curl -s "http://ajax.googleapis.com/ajax/services/language/detect?v=1.0&amp;q=$(echo "$@" | sed 's/ /%20/g')" | sed 's/{"responseData": {"language":"\([^"]*\)".*/\1\n/'; }

پس از وارد کردن دستور بالا، با استفاده از دستور زیر زبان یک عبارت رو چک کنید:

detectlanguage text_in_an_unknown_language

امیدوارم مفید بوده باشه.

منبع کد اول - منبع کد دوم

گذرگاه آزاد

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

اما در این بین کم کم صدای یک سیستم‌عامل نسبتا تازه‌تر شنیده شد. سیستم‌عاملی که بر خلاف سیستم‌عامل‌های دیگر به شرکت خاصی وابسته نیست و کسی برای استفاده کردن از آن ملزم به پرداخت هزینه‌ای نمی‌باشد. سیستم‌عاملی قدرتمند که تمام قوانین دست و پاگیر و انحصار طلبانه‌ی شرکت‌های تجاری را حذف کرده و به شما اجازه‌ی هرگونه تغییر و تکثیر نرم‌افزارهایش را می‌دهد. سیستم‌عاملی آزاد، بازمتن و رایگان به نام لینوکس.
لینوکس فقط یک سیستم‌عامل قدرتمند نیست. یک تفکر بزرگ است که توسط میلیون‌ها نفر در سراسر دنیا حمایت می‌شود. حتی اگر تا به حال چیزی راجع به لینوکس نشنیده‌اید، اگر به آزادی خود و دیگران اهمیت می‌دهید، استفاده از لینوکس را شروع کنید و قدم به دنیای آزادی نرم‌افزارها بگذارید تا با همان چند قدم اول، غرق در این دنیای تازه شوید.
من علی موسوی هستم و اینجا نوشته‌ها و تجربیات خودم را از این دنیای بزرگ می‌نویسم. برای ارتباط با من می‌توانید از هر یک از لینک‌های سمت راست صفحه استفاده کنید و یا برای من به ali.mousavi در جی‌میل ای‌میل بفرستید.