قدرت و کارایی عالی خط فرمان در گنو/لینوکس (6)

بازهم معرفی یک برنامهء خط فرمان.
نام این برنامه xwd هست. فکر میکنم برخلاف یکسری برنامه هایی که قبلا مطرح شدن، این برنامه در اکثر توزیعها باید موجود و نصب باشه بطور پیشفرض.
با این برنامه میشه اسکرین شات گرفت.

Xwd is an X Window System window dumping utility. Xwd allows X users to store window images in a specially formatted dump file. This file can then be read by various other X utilities for redisplay, printing, editing, formatting, archiving, image processing, etc. The target window is selected by clicking the pointer in the desired window.

یک برنامهء مکمل دیگه هم هست که تصاویری رو با فرمتی که برنامهء xwd ایجاد میکنه، میتونه نمایش بده و ما در مثالهامون از این برنامه کمک میگیریم برای تست سریعتر. اسم این برنامهء نمایش دهنده، xwud هست.

خب سریع میریم سر مثالهای عملی:

xwd | xwud

این فرمان رو وقتی صادر کنید، برنامه منتظر میمونه تا شما روی بخشی از صفحه کلیک کنید؛ وقتی کلیک کردید تصویر اون پنجره ای که روش کلیک کردید گرفته میشه (حتی پنل شما یک پنجره به حساب میاد در این حالت). در حالت پیشفرض xwd خروجی خودش رو به stdout یا خروجی استاندارد که معمولا ترمینال هست میفرسته. مشخصه که شما روی ترمینال چیزی جز مقدار زیادی کاراکترهای عجیب و غریب که نتیجهء خروجی باینری هست نمی بینید.
پس ما در این خط فرمان این خروجی رو به برنامهء xwud پاس کردیم و این برنامه تصویر رو به شما نشون میده. برای خروج از این برنامه باید روی تصویر نمایش داده شده کلیک کنید. یا میتونید کلید q یا Ctrl+c رو بزنید و یا پنجره رو با کلیک روی دکمهء مربوطه ببندید. پس از بسته شدن این پنجره، خط فرمان تازه برمیگرده.
البته نمایش یک تصویر به اینصورت برای ما فایدهء چندانی نداره (چون جایی ذخیره نمیشه) و بیشتر به منظور تست و نمایش کاربردهای مختلف xwd با تنظیمات مختلف، اینجا بکار میبریمش.

xwd -frame | xwud

این فرمان فرقش با قبلی اینه که تصویر فریم پنجره رو هم میگیره (فریم چهارچوب دور یک پنجره هست که مثلا دکمهء X یا همون Close روش هست).

xwd -name 'StarDict' | xwud

این فرمان از پنجره ای با عنوان (Title) مشخص که StarDict هست (یک دیکشنری بسیار خوب برای لینوکس که دیتابیس فارسی خوبی هم براش تهیه شده) تصویر گرفته و نمایش میده.
شما عنوان هر پنجره ای رو که بدید از همون تصویر گرفته میشه. و پنجره باید مریی/حاضر باشه.

xwd -name 'StarDict' | xwud -scale

این فرمان هم تنها فرقش اینه که آپشن -scale رو به xwud دادیم که باعث میشه بعد از نمایش تصویر بشه سایز پنجره رو به دلخواه تغییر داد و تصویر درون اون به همون شکل کشیده یا منقبض بشه.

xwd -out ~/Desktop/out.xwd

با پارامتر آپشن -out به xwd میگیم که تصویر رو در فایلی به نام out.xwd، روی دسکتاپ کاربریمون ذخیره کنه.
برای نمایش این تصویر توسط xwud هم به این صورت عمل میکنیم:

xwud -in ~/Desktop/out.xwd

حتما میدونید که میشه دو فرمان رو پشت سرهم قرار داد، تا تصویر گرفته و ذخیره شده و نتیجه رو بلافاصله مشاهده هم بکنیم:

xwd -out ~/Desktop/out.xwd; xwud -in ~/Desktop/out.xwd

خب اما این فرمتی که تصاویر ما درش ذخیره میشه، توسط هر برنامه ای قابل خواندن و استفاده نیست. میتونیم با استفاده از هر برنامهء ویرایش و تبدیلی که این فرمت رو پشتیبانی میکنه، تصویر رو به فرمت متداول و ضمنا فشرده ای در بیاریم. توجه کنید که فرمت xwd فشرده شده نیست و مثل تصاویر BMP، حجم زیادی داره.

ما اینجا بسادگی از برنامهء convert استفاده میکنیم، که جزیی از پکیج ImageMagick هست. این پکیج شامل یکسری ابزار و برنامه برای کارهای ویرایشی و عملیات جالب دیگری روی تصاویر هست. بنده با این برنامه چندان کار نکردم و منوال برنامه های مختلف این پکیج رو مطالعه نکردم. بهرحال برای کار ما یک خط فرمان ساده کفایت میکنه. احتمالا اگر بعدها بیشتر راجع به این برنامه ها مطالعه کردم و درجش مطالبشون رو در این تاپیک مفید دیدم، سعی میکنم این کار رو انجام بدم.

xwd -out ~/Desktop/out.xwd; convert ~/Desktop/out.xwd ~/Desktop/out.png; rm -f ~/Desktop/out.xwd; display ~/Desktop/out.png

تصویری از پنجرهء کلیک شده گرفته میشه؛ تصویر به فرمت png تبدیل میشه؛ فایل حجیم و بی استفادهء xwd که در مرحلهء اول ایجاد شد پاک میشه؛ تصویر توسط برنامهء display (اینهم جزیی از پکیج ImageMagick هست) نمایش داده میشه.
راستی ظاهرا با کلیک روی این تصویر نمایش داده شده، میتونید ویرایشهایی رو روش اعمال کنید. (البته دیگه هیچ ربطی به این تاپیک که دربارهء خط فرمان و برنامه های خط فرمان هست نداره).

xwd -root | xwud

ببخشید، فراموش کرده بودم که فرمان اسکرین شات (از کل صفحهء نمایش) رو بگم؛ این همون فرمان هست.

جالب اینکه حتی برنامهء display هم میتونه ورودی خودش رو از stdin (ورودی استاندارد ترمینال) بگیره:

xwd -root | display

البته خود پکیج ImageMagick هم برنامه ای به نام import داره که کار اسکرین شات گرفتن رو برای شما انجام میده.
بهرحال بسته به این هست که این پکیج روی سیستم شما نصب شده باشه. اگر خواستید منوالش رو مطالعه بفرمایید. احتمالا اگر نصب باشه، راحتتر و سریعتر بتونید کارتون رو با اون راه بندازید؛ چون میتونید مستقیما و در یک مرحله بعضی کارهای ویرایشی لازم رو انجام بدید و تصویر مستقیما با فرمت مورد نظر شما ذخیره بشه.

تا مجالی دیگر بدرود.

قدرت و کارایی عالی خط فرمان در گنو/لینوکس (5)

بازم یک برنامهء جالب دیگه، و البته مختصر، رو معرفی میکنیم: text2wave

قبل از هر چیز تذکر بدم (نمیدونم قبلا گفتم یا نه) که تمام این تستها و تجربیات و برنامه ها در این محیط انجام شده و نتایجش دراختیار شما سروران گرامی قرار گرفته: Fedora 5 GNU/Linux
چون بعضا بین توزیعها و حتی نسخه های مختلف یک توزیع تفاوتهای ریز و درشتی میتونه باشه. البته نه لزوما به معنای ناسازگاری، اونهم در چنین مواردی. بلکه بیشتر یکسری پیکربندیها، برنامه های نصب شده، و ویژگیهای اونها هست. بهرحال گنو/لینوکس یک محیط حرفه ای و مجهز و بسیار غنی هست، و بهای این مزایا نیاز به حداقل کاربر حرفه ای هست. متخصصان و برنامه نویسان طراز اول و هکرها هم که مشخصه این محیط براشون ایدئال هست (حتما شنیدید که میگن گنو/لینوکس بهشت برنامه نویسان!).
پس کاربر باید بتونه از پس حل این تفاوتها و نصب برنامه ها و پیدا کردن پیکربندیهای هر محیط و ویژگیهای اختصاصی هر نسخه و توزیع و برنامه بربیاد.

خب کار این برنامهء text2wave چیه؟ از اسمش باید پیدا باشه. یک متن رو گرفته و به صوت تبدیل میکنه که میشه این صوت رو در یک فایل ذخیره کرد یا بطور مستقیم پخشش کرد.

echo 'On the fly' | text2wave | aplay

عبارت پاس شده تبدیل به صوت شده و مستقیما پخش میشه.

echo 'On the fly' | text2wave -o ~/Desktop/out.wav; aplay ~/Desktop/out.wav

عبارت پاس شده تبدیل به صوت شده و در فایلی در دسکتاپ شما ذخیره شده (~ در شل یونیکسی به معنای Home directory کاربر جاری هست) و سپس این فایل پخش میشه (بنابراین اگر نمیخواید الان پخش بشه، میتونید فرمان aplay ~/Desktop/out.wav رو بر دارید).

این برنامه درواقع جزیی از پکیج festival هست (احتمال داره که روی سیستم شما بطور پیشفرض نصب نباشه). text2wave درواقع خودش یک شل اسکریپت هست که برنامهء فستیوال رو بکار میگیره.
قدرت و امکانات زیاد برنامه نویسی شل، باعث شده بسیاری برنامه ها درواقع شل اسکریپتهای مختصر یا بزرگتر و ساده و پیچیده ای باشن.
از نظر سرعت و قدرت هم مشکل خاصی با اینطور برنامه ها وجود نداره. البته معمولا شل اسکریپتها خیلی کوچکتر از برنامه های عادی هستن و کاربردشون بیشتر در این زمینه های کارهای متداول و نسبتا کوچک و ترکیب و تنظیم و خودکارسازی و بهینه سازی رابطهای برنامه های دیگه هست. این محدوده ای هست که تخصص و هدف اصلی شل یونیکسیها هست.

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

file $(type -p command);

اگر این فرم کار نکرد، فرم دیگش رو بکار ببرید:

file `type -p command`

بجای command شما اسم برنامهء مورد بررسی خودتون رو قرار میدید و این فرمان بهتون اطلاعات مفیدی راجع به اون برنامه میده؛ البته درصورت موفقیت (بعضی حالات جواب نمیده؛ مثل Shell builtin ها).
مثال:

[root@localhost ~]# file `type -p sh`
/bin/sh: symbolic link to `bash'

[root@localhost ~]# file `type -p text2wave`
/usr/bin/text2wave: Bourne shell script text executable

[root@localhost ~]# file $(type -p festival)
/usr/bin/festival: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped

اگر بخواید میتونید این فرمان رو به یک تابع تبدیل کنید (کاری که خودم تاحالا نکرده بودم و حالا کردم!):

what () { file $(type -p $1); };

میتونید این تابع رو در .bashrc قرار بدید تا با هر بار ورود به یک ترمینال با شل BASH، بطور خودکار این تابع هم تعریف شده و در دسترس قرار بگیره.
بعد بجای تایپ کردن اون خط فرمان قبلی، بسادگی اینطور این تابع رو بکار میبرید:

what command

[root@localhost ~]# what file
/usr/bin/file: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped

حالا که صحبتش کشیده شد، به فرمان مفید file هم میپردازیم.
این فرمان (یک برنامه هست) نوع فایلهای پاس شده بهش رو با بررسی قسمتهایی از محتویات و هدرهای اون فایلها مشخص میکنه. شناسایی فایل بدون توجه به پسوند و خصیصه های دیگرش و تنها از روی محتویات انجام میشه؛ ضریب قطعیت و تعیین و خطاناپذیری ۱۰۰٪ نیست با این روش (چرا که استاندارد عام و تعهد وجود تمهیدات ویژه و بطور مثال شناسه های یکتا در داخل فایلها برای شناسایی اونها از طریق محتویات وجود نداره!)، اما بقدر کافی اطمینان و کاربرد داره برای بیشتر کارها و میتونه در مواقعی بسیار مفید باشه (بطوریکه بنده به Context menu ی KDE هم اضافه کردمش).
اگر لازم باشه شما حتی میتونید انواع جدیدی از فایلهای مورد نظر خودتون رو در دیتابیس مخصوص این برنامه تعریف کنید تا برنامه قادر به شناسایی اونها هم باشه؛ البته نیاز به خوندن منوال مربوطه (file وmagic) هست و یادگرفتن زبان تعریف محتویات مورد بررسی برای تشخیص فایلها.
این برنامه، انواع فایل از سورسهای برنامه نویسی تا فرمتهای تصویری مختلف و حتی فایلهای اجرایی ویندوز رو تشخیص میده. به این روش میتونید براحتی از محتویات واقعی یک فایل اطلاع حاصل کنید، بدون اینکه پسوند یا مشخصات دیگرش درست یا گویا باشن.

قدرت و کارایی عالی خط فرمان در گنو/لینوکس (4)

از قضا در این پست هم به بررسی یک برنامهء خط فرمان میپردازیم.
اسم این برنامه bc هست و چنانچه در سیستم شما نصب شده باشه با همین نام در خط فرمان اجراش کنید. البته بحث ما درمورد پیاده سازی GNU این برنامه هست.

bc’ is a language that supports arbitrary precision numbers with interactive execution of statements. There are some similarities in the syntax to the C programming language. A standard math library is available by command line option. If requested, the math library is defined before processing any files. `bc’ starts by processing code from all the files listed on the command line in the order listed.

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

فایلهایی رو محتوی دستورات نوشته شده با این زبان (که میتونن بسادگی نوشتن جمع و تفریق تا حلقه و شرط و گرفتن ورودی از کاربر باشن) میشه در خط فرمان به این برنامه پاس کرد، در نهایت وارد خط فرمان این برنامه میشیم که در اونجا میتونیم عملیات ساده مثل چهار عمل اصلی، تا عملیاتی پیچیده تر و چند مرحله ای رو انجام بدیم. چنانچه این برنامه رو با آپشن l فراخوانی کرده باشیم یک سری توابع ریاضی استاندارد مثل سینوس و کسینوس و لگاریتم طبیعی و چند تابع دیگه لود شده و در برنامه در دسترس قرار میگیرن.
تا اینجا تنها گفتیم که این برنامه عملیات ریاضی انجام میده و البته یک زبان برنامه نویسی مخصوص و خیلی مختصر (دربرابر زبانهای با کاربرد برنامه نویسی عادی) برای انجام برنامه های مخصوص محاسباتی چند مرحله ای درش تعبیه شده؛ اما نکتهء دیگه ای که ذکرش در اینجا لازم بنظر میرسه اینه که با این برنامه میشه روی اعداد بسیار بزرگ و همچنین با دقت (تعداد ارقام اعشار) بسیار زیاد کار کرد. محاسبات شما میتونن اعداد فوق العاده بزرگ و فوق العاده دقیقی رو تولید کنن.
شما در این برنامه حلقه دارید، شرط، تابع، متغییر (دو نوع معمولی و آرایه)، عملگرهای مقایسه ای و منطقی (البته نتیجه برگردانده شده، بجای true و false، صفر و یک هست)، و یکسری تابعهای مخصوص از پیش تعریف شده و همچنین توابع ریاضی ای که گفتیم با آپشن l در دسترس قرار میگیرن.
ضمنا مقادیر ورودی و خروجی این برنامه میتونن در مبنای تعیین شده توسط شما باشن. حالت پیشفرض، مبنای ۱۰ برای ورودی و خروجی هست.

خب وقت مثال رسیده:

pi=$(echo "scale=10; 4*a(1)" | bc -l)

این مثال از خود منوال هست.
توجه کنید که این فرمان رو در خط فرمان شل نوشتیم و اجرا کردیم، و نه در خط فرمان bc.
کاری که این دستور میکنه اینه که فرامین محاسباتی مناسبی رو که جهت محاسبهء عدد پی با ده رقم اعشار هست به برنامهء bc ارسال میکنه و نتیجهء نهایی در متغییر شل pi قرار میگیره (با دستور echo $pi میتونید مقدارش رو در خط فرمان شل ببینید).
فرامین مورد نظر ارسالی، دو فرمان هستن که با سمیکالن از هم جدا شدن.
فرمان scale=10 به bc میگه که محاسبه با دقت ده رقم اعشار رو میخواد
فرمان بعدی 4*a(1) هست که معناش ضرب ۴ در آرک تانژانت ۱ هست، که عدد پی رو نتیجه میده. توجه کنید که بعلت استفاده از این تابع، bc رو با آپشن l که توابع استاندارد ریاضی رو لود میکنه اجرا میکنه، فراخوانی کردیم.
bc این فرمانها رو اجرا کرده و خروجی خودش رو به خروجی استاندارد که صفحه‌ ترمینال هست میفرسته.
ساختارویژهء شل، یعنی علامت دلار در ابتدای پرانتز باز و بسته، که کل این فرامین رو احاطه کرده، باعث میشه که هر خروجی استاندارد تولید شده در داخل این پرانتزها، بجای کل این ساختار قرار بگیره، مثل اینکه اونجا تایپ شده باشه. با این روش مقدار خروجی bc بجای چاپ شدن، در متغییر pi قرار میگیره. به این ساختار مفید و پرکاربرد شل، Command substitution گفته میشه.
البته فرم دیگر این ساختار (فرم قدیمی اون)، قرار دادن فرامین مورد نظر در علامتهای Back tick هست (`).

خب حالا ما وارد bc میشیم:

[root@localhost ~]# bc -l
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.

و در خط فرمانش، دستوراتی رو اجرا میکنم:

scale
20

مقدار دقت (ارقام اعشار) رو بررسی میکنیم؛ خروجی ۲۰ یعنی تعداد ارقام اعشار ۲۰ است. چون bc رو با آپشن l فراخوانی کردیم دقت اعشاری داریم، ولی بدون این آپشن مقدار پیشفرض برای scale صفر هست. یعنی خروجی نتیجهء بعضی محاسبات (تقسیم) بطور معمول بصورت صحیح هست. بنابراین شما در هنگام استفاده از این برنامه (bc) با پاس کردن فرمانها بهش یا در داخل فایلهای نوشته شده با این زبان که میخواید نتایج اعشاری با دقت دلخواه داشته باشید، باید فرمان scale=x رو بدید، که ایکس تعداد ارقام اعشار مورد نظر شما هست.

scale=50
456/3.3
138.18181818181818181818181818181818181818181818181818

تعداد ارقام اعشار رو ۵۰ قرار میدیم (۲۰ تا کم بود برامون!!)
محاسبهء ۴۵۶ تقسیم بر ۳.۳.
نتیجه رو با ۵۰ رقم اعشار ملاحظه میفرمایید.

scale(456/3.3)
50

تابع ویژهء scale، تعداد ارقام اعشار یک محاسبه یا عدد رو برمیگردونه.

scale(5.54*2.4)
3
scale(5/2)
50
scale(4/2)
50

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

2^3000
12302319221611171769315588132767525146407138957368337157661180291600\
58800614672948775360067838593459582429649254051804908512884180898236\
82358508248206534833123495935035584501741302332011136066692262472823\
97568804164344783156936750134130907572086903767932966588106629418244\
93488451726505303712916005346747908623702673480919353936813105736620\
40235274477690384047788365110032240930198348836380293054048248790976\
34840982539407286851320444088637347542712125924717786439494866885117\
21051561970432780747454823776808464180697103083861812184348565522740\
19579668262220551184551208055201031005025580158934964592800113374547\
42207150136834139075427790637598338761013542351842450966700421607206\
29411581502371248008430447184842098610320580417992206662247328722122\
08851364368390767036020916265367064113093699700217050067550137472399\
87660058275793007232534748906122501351718891748990799112915123997738\
72178519018229989376

دو به توان ۳۰۰۰.

length(2^3000)
904

خب، کنجکاو شدیم ببینیم عدد قبلی چند رقمی بوده!
تابع ویژهء length، تعداد ارقام بکار رفته در عدد یا نتیجهء محاسبه ای رو برمیگردونه.

length(5/2)
51

توجه کنید که اگر عدد اعشار داشته باشه، اعداد بعد از اعشار هم به حساب میان؛ نقطهء اعشار شمرده نمیشه.

(2994563.034*((3-5.04)^-10)*sqrt(456))/-.23
-222733.92500476577084326894346580777764319861310198677173

یک عبارت پیچیده تر پرانتز گذاری شده که قابلیت محاسبهء توان و جذر رو هم بکار گرفته.

define f (x) {
if (x <= 1) return (1);
return (f(x-1) * x);
}
f(100)
93326215443944152681699238856266700490715968264381621468592963895217\
59999322991560894146397615651828625369792082722375825118521091686400\
0000000000000000000000

تعریف تابع فاکتوریل (از نوع بازگشتی)، و محاسبهء مقدار ۱۰۰ فاکتوریل با استفاده از این تابع.
در مثالهای قبلی هم دیدید که خطهای طولانی شکسته میشن و در انتهای خطوط شکسته شده بک اسلش قرار میگیره. البته طول سطرهای خروجی قابل تنظیم هست (با متغییر محیطی (در شل) BC_LINE_LENGTH):

[root@localhost ~]# BC_LINE_LENGTH=25; export BC_LINE_LENGTH; echo '2^1024' | bc
17976931348623159077293\
05190789024733617976978\
94230657273430081157732\
67580550096313270847732\
24075360211201138798713\
93357658789768814416622\
49284743063947412437776\
78934248654852763022196\
01246094119453082952085\
00576883815068234246288\
14739131105408272371633\
50510684586298239947245\
93847971630483535632962\
4224137216

یک مثال برای مشخص کردن چگونگی تعیین طول خطهای خروجی. البته معمولا طول خطوط رو نیاز داریم به دلایل مختلفی افزایش بدیم و نه کاهش، ولی اینجا برای نشان داده شدن مثال، طول خطوط رو کم کردیم.

scale=10
obase=2
456/3.3
10001010.0010111010001011101000101110100010

تعداد ارقام اعشار رو روی ۱۰ قرار میدیم.
مبنای خروجی رو روی ۲ قرار میدیم.
فرمان محاسبهء 456 تقسیم بر 3.3 رو صادر میکنیم.
نتیجه در مبنای ۲ مشاهده میشه.
قابل توجه هست که تعداد ارقام اعشار، در مبنای ده سنجیده میشه و نه مبنای خروجی.

obase=1010
10001010.0010111010001011101000101110100010
138.1818181817652657628059387207031250

مبنای خروجی رو ۱۰ قرار میدیم. توجه کنید که چون مبنای ورودی رو روی ۲ گذاشته بودیم، هر عددی که وارد میکنیم بعنوان عدد مبنای دو دیده میشه و بنابراین ما باید عدد ۱۰ رو هم به مبنای ۲ وارد کنیم. پس همینطور برای تغییر مبنای ورودی هم باید عدد مبنای مورد نظر رو در مبنای فعلی ورودی وارد کرد.
حالا میتونیم ببینیم عدد مبنای ۲ محاسبهء قبلی، در مبنای ۱۰ چی میشه.

obase=10
length(10001010.0010111010001011101000101110100010 )
100101
obase=1010
100101
37

مبنای خروجی رو روی ۲ قرار میدیم.
طول عدد رو مجددا در این حالت بررسی میکنیم.
مبنای خروجی رو مجددا به ۱۰ میبریم.
طول بدست آمده در مبنای ۲ رو وارد کرده و حاصل رو در مبنای ۱۰ دریافت میکنیم.
پس به این نتیجه میرسیم که طول یا درواقع تعداد ارقام هر عدد پاس شده به این تابع، همواره برابر تعداد ارقام اون عدد در مبنای ۱۰ هست (در واقع این عملکرد در تابعهای دیگه هم دیده میشه؛ پس حواستون به این مسئله باشه).

obase=1010
ibase=1010

خب دیگه خسته شدیم! مبناهای ورودی و خروجی رو به ۱۰ برمیگردونیم.

scale=3
2.000000000001*2
4.000000000002
2.0000000000000*1
2.0000000000000

توجه کنید که بعضی حالات مثل این (ضرب)، چنانچه دقت اعداد ورودی ما بیشتر از مقدار scale باشه، دقت مقدار ورودی مورد استفاده قرار میگیره و نه scale.

f=1; for(i=1; i<=10; i++) f*=i; f
3628800

محاسبهء ۱۰ فاکتوریل با استفاده از حلقهء for.

ibase=16
FF
255

نکته: در مبنای ورودی بالاتر از ۱۰ (مبنای ورودی حداکثر تا شانزده امکان داره)، از حروف بزرگ A تا F برای نمایش ارقام بزرگتر از ۹ استفاده کنید.

obase=17
100
05 15

در مبناهای خروجی بالاتر از ۱۶، معادل هر رقم در اون مبنا، در مبنای ۱۰ و در یک ستون مجزا نوشته میشه.
۵ * ۱۷ + ۱۵ = ۱۰۰

خب فکر کنم کافی باشه!
برای اطلاع دقیقتر از این برنامه و زبان مخصوصش و نکات و قابلیتهای کاملش، به منوالش مراجعه کنید.
در خط فرمان info bc، در آدرسبار مرورگر/فایل منیجر کانکرر info:bc یا صورت اختصاری ##bc رو، برای دستیابی به منوال این برنامه میتونید بکار ببرید.

قدرت و کارایی عالی خط فرمان در گنو/لینوکس (3)

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

What is a shell?

At its base, a shell is simply a macro processor that executes commands. A Unix shell is both a command interpreter, which provides the user interface to the rich set of GNU utilities, and a programming language, allowing these utilitites to be combined. Files containing commands can be created, and become commands themselves. These new commands have the same status as system commands in directories such as `/bin’, allowing users or groups to establish custom environments.

منبع: رفرنس رسمی BASH
(This is Edition 2.5b, last updated 15 July 2002, of The GNU Bash Reference Manual, for Bash, Version 2.05b)

پس اینکه انتظار داشته باشیم تمام قابلیتهای شل و کاربردهاش رو در برنامه های با رابط گرافیکی معادل ببینیم، انتظار تقریبا عبث و بی معنایی هست. چون به این معنا، شل یک روش قدیمی برای انجام همهء کارها نیست، بلکه یک ابزار برنامه نویسی مخصوص تعبیه شده در سیستم عامل هست که مثل زبانهای برنامه نویسی دیگه (مثلا سی++، جاوا، بیسیک…) همیشه بوده و هست و احتمالا خواهد بود. نقص یک سیستم عامل در شل و یوتیلیتهای خط فرمان لازم، نقصی اساسی هست.
بطور کلی رابطهای گرافیکی اغلب برای انجام مجموعه کارهایی خیلی معمول، روزمره، مشترک، و نسبتا ساده (اما ممکنه تکراری و خسته کننده) ساخته شدن، و انجام کارهای ترکیبی و پیچیده و بصورت ساختار یک برنامه در حیطهء وظایف و گاهی حتی ظرفیتشون نیست (یعنی تقریبا غیرممکن هست – مثل اینکه شما بخواید کلا بصورت ویژوال یک برنامه نویسی واقعی بکنید و دست به کدنویسی نبرید و با اینحال با این روش همه گونه برنامهء سفارشی کاملی رو بسازید).
پس شل و محیط گرافیک مکمل همدیگر هستن. میشه گفت که شل بیشتر کارها رو میتونه انجام بده، درحالیکه رابط گرافیکی چنین نیست. اما از سویی انجام یکسری کارها با استفاده از محیط گرافیکی سرعت و راحتی بسیار بیشتری داره.
در قدیمترها که رابط گرافیکی نبود یا خیلی کمیاب تر و بدوی تر بوده، اجبارا تمام یا بیشتر کارها با رابط خط فرمان و محیط متنی انجام میشده، اما بعدا بسیاری کارها در رابط گرافیکی هم قابل دسترس شدن و انجام بسیاری کارها اغلب با خصوصیات مذکور در بالا، در رابط گرافیکی ممکن و معمول شد. بعضی اشتباها نتیجه گرفتن که شل یک روش قدیمی و منسوخ بوده برای انجام تمام/بیشتر کارها. درحالیکه عملا اینطور نیست. بلکه محیط گرافیک مکمل مناسبی برای شل شد. ضمنا اگر منظور از تمام یا بیشتر کارها، کارهای یک کاربر عادی خانگی و غیرمتخصص باشه، میشه گفت بله تاحدود زیادی!
اما برای کاربرهای حرفه ای و متخصص شل ابزاری غیرقابل جایگزینی هست و حتی خیلی وقتها رابط محبوب و ترجیح داده شده که خیلی کارها رو باهاش سریعتر و راحتتر از یک رابط گرافیکی انجام میدن (چون به اون راحتی با یک رابط گرافیکی امکان پذیر نیستن).
یک کاربر عادی خانگی خیلی کارها رو به روش خودش نمیتونه انجام بده و خیلی مسایل رو حل کنه یا بصورت خودکار دربیاره. خب این مسلم هست؛ مثل مقایسهء یک برنامه نویسی حرفه ای با یک اپراتور ساده.

خب دیگه تئوری کافیه و طبق ادعای خودمون به مسایل عملی میپردازیم!

این جواب سوالی بود که در یک فروم لینوکسی پرسیده شده بود. از اونجا که ساختارش میتونه کلی باشه و در خیلی موارد بکار بره ذکر میکنم:

echo -e "new line at begining.\n$(cat file.txt)\nnew line at end." > file.txt

خب این خط فرمان چیکار میکنه؟
پاسخ: یک خط مورد نظر رو به ابتدا و یک خط دیگه رو به انتهای یک فایل متن اضافه میکنه.
در این خط فرمان برخلاف دو مورد قبلی که مطرح شد، بیشتر از قابلیتهای شل (BASH) استفاده شده و تنها برنامهء بکار رفته که برنامهء ساده ای هست، برنامه ای بنام cat هست که برای چاپ کردن و استخراج کل محتویات فایلها بکار میره.
با اینطور فرمانها میشه تعداد زیادی فایل رو با یک خط فرمان با سرعت زیادی آپدیت کرد (البته برای تعدادی فایل، تغییرات کوچکی در هرمورد لازم هست – این فرمان درج شده روی یک فایل عمل میکنه). فرضا تعداد زیادی فایل اچ تی ام ال داریم که حالا یادمون افتاده که خطی به ابتدا یا انتها یا هردو قسمت اونها اضافه کنیم؛ مثلا یک کامنت.

بخاطر اینکه شاید با این فرمان زیاد حال نکرده باشید یک فرمان بدردبخور که احتمالا خیلی ها ازش بی اطلاع هستن، به این پست اضافه میکنم:

umount /dev/hdc; cdrdao disk-info --device /dev/hdc

این فرمان که ممکنه در سیستم شما نیاز به کمی تغییر (تطابق) داشته باشه، اطلاعات مفیدی رو راجع به سی دی ها میده.
یکی از مهمترین این اطلاعات شاید نوع سی دی باشه.
شاید خیلیها ندونن که سی دی ها دو نوع هستن (درواقع بنده هم تا زمانی که خروجی این فرمان رو ندیده بودم، نمیدونستم):
یک نوع، سی دی هایی که برای عمر طولانی ساخته شدن و درشون از موادی با چنین قابلیتی استفاده شده. اینها با عبارتLong strategy در این اطلاعات مشخص میشن.
یک نوع دیگر سی دی هایی که برای ذخیرهء موقت و کاربردهایی مثل نقل و انتقال اطلاعات ساخته شدن و طول عمر طولانی برای اونها تضمین نشده. یعنی ممکنه چند سال دیگه که اون سی دی ها رو توی درایو بذارید، با تعجب متوجه بشید که بدون اینکه سی دی هیچ صدمه ای دیده باشه و در شرایط بدی نگهداری شده باشه، اطلاعاتش دیگه قابل دسترس نیستن. به این سی دی ها Short strategy گفته میشه.

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

اگر این فرمان در سیستم شما کار نمیکنه، احتمالا باید /dev/hdc رو با مسیر مربوط به درایو مورد نظر خودتون جایگزین کنید.

قدرت و کارایی عالی خط فرمان در گنو/لینوکس (2)

خب در این پست هم بذارید یه برنامهء مالتی مدیای دیگه رو معرفی کنم! مثل اینکه افتادیم توی بحث مالتی مدیای خط فرمان!! بهرحال کاربرد این برنامه در بخشهای دیگه هم میتونه باشه و ترجیح میدم بعنوان توالی منطقی و مکمل بحث پیشین مطرحش کنم.

این برنامه اسمش هست SoX و البته در خط فرمان با sox باید اجراش کنید (نام فایلها در سیستم عاملهای یونیکسی حساس به کوچکی و بزرگی حروف هست).

این برنامه یک تبدیل کننده، ویرایشگر، و تولید کننده صدا و فایلهای صوتی هست. واقعا برنامهء بدردبخوری هست و میشه گفت قابلیتهای مالتی مدیای شما رو در خط فرمان کاملتر میکنه بنوعی.

راستی دوستان توجه کنن که تمام این برنامه هایی که داریم میگیم ممکنه روی هر توزیعی بطور پیشفرض نصب نباشن و حتی روی سی دی های اون توزیع هم نباشن. پس ممکنه نیاز به نصب/دانلود دستی باشه. البته این برنامه روی توزیع فدورای بنده هست و فکر میکنم یکی از برنامه های نسبتا استاندارد در توزیعهای لینوکس باشه. ولی بعضی توزیعها یکسری برنامه ها رو بخاطر کاهش حجم توزیع حذف میکنن.

sox – Sound eXchange : universal sound sample translator

با این برنامه میشه یک سری افکت جالب توجه و بدردبخور رو به صوت/موسیقی اضافه کرد.

SoX is a command line program that can convert most popular audio files to most other popular audio file formats. It can optionally change the audio sample data type and apply one or more sound effects to the file during this translation.

البته کار کردن با این برنامه در حالت حرفه ایش نیاز به خوندن منوالش داره؛ ولی خیلی کارهای ساده و متداول رو میتونید بسادگی انجام بدید.

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

با این برنامه میتونید بطور مثال sampling rate فایلها رو تغییر بدید؛ فکر کنم بدرد تغییر حجم و کیفیت میخوره.
میشه یک فایل رو چند بار تکرار کرد. مثلا میخواید یک صدا یا آهنگی که در فایلی هست بصورت دوبار یا هرچند بار پشت سرهم ضبط بشه. بنظرم این خیلی جاها میتونه بدرد بخوره! مثلا شما میخواید ساعتی توسط یکسری بوق پشت سرهم، مثل این ساعتهای قدیمی که ساعت رو با تعداد صدای ناقوس اعلام میکردن، اعلام بشه. خب اینکار رو براتون براحتی انجام میده! البته این فقط یک مثاله.
توجه کنید که صدای تولید شده میتونه در یک فایل ذخیره نشه و بلکه مستقیما پخش بشه! این قابلیت میتونه در خط فرمان و جاهای دیگه خیلی بدرد بخوره؛ یعنی شما میتونید صداهایی رو بصورت دینامیک و On the fly تولید کنید.
افکت reverb اگر آشنا باشید.
افکت vibro که ظاهرا معروف هست، ولی بنده نمیدونم چیه.
افکت reverse؛ یعنی فایل شما انگار از انتها به ابتدا پخش بشه! مثل یک نوار کاست که با دور برعکس پخش بشه.
برداشتن سکوت (صدایی با شدت کمتر از یک حدی که تعریف میکنید) از ابتدا یا انتهای فایلها.
افزایش یا کاهش سرعت (مثل پخش کردن یک نوار کاست با سرعت بالاتر یا پایینتر موتور).
جابجا کردن کانالهای صدا.
ساخت صدا (درمورد این امکان جالب و مفید بعدا صحبت میکنیم).
حذف قطعه/مدت زمان معینی از ابتدا یا انتهای فایل.
تغییر شدت/ولوم صدا.
افکت fade.
انواع فیلترهای مختلف (بالاگذر، پایین گذر، …؟).
… (افکتهای متعدد دیگه)

ضمنا قابلیت میکس (مخلوط) کردن چند فایل صوتی با هم، توسط برنامهء soxmix وجود داره. البته بعضی مشخصات فایلهای ورودی در این حالت باید باهم یکی باشه؛ مثلا sample rate و data type اونها.

مثالها:

sox -t nul /dev/zero -t alsa default synth 2 square 2000-100

این فرمان صوتی با فرکانس ۲۰۰۰ هرتز رو تولید میکنه که در مدت ۲ ثانیه به ۱۰۰ هرتز میرسه. شکل موج صوت از نوع مربعی هست؛ مواظب باشید که به این علت صدای بلند و کاملا تیزی رو تولید میکنه! ولوم اسپیکرهای خودتون رو کم کنید که یک وقت از اهل خانواده بد و بیراه دریافت نکنید!!

sox -t nul /dev/zero -t alsa default synth 1 square 500-3000 repeat 2

صوتی با فرکانس از ۵۰۰ تا ۳۰۰۰ در مدت یک ثانیه؛ این جریان دوبار هم تکرار میشه و بنابراین ما سه تا از این صوت یک ثانیه ای رو خواهیم داشت.

sox -t nul /dev/zero -t alsa default synth 2 square 350

صوتی با فرکانس ۳۵۰ که ۲ ثانیه پخش میشه.
جلوی synth زمان مورد نظر به ثانیه رو بدید یا بصورت hh:mm:ss.frac.

sox file1.wav file2.ogg

فایل شمارهء یک با فرمت wav در فایل شمارهء دو با فرمت ogg ذخیره میشه.
تبدیل فرمتها به همدیگه میتونه به همین سادگی باشه و برنامه از روی پسوندهایی که میشناسه فرمت مورد نظر رو شناسایی میکنه. اگر پسوند کارگر نشه فکر میکنم اقدام به تلاش برای شناسایی از طریق هدرهای فایل بشه. اگر موفق نباشه باید پارامترهای نوع فایل رو در خط فرمان به برنامه بدید.
ضمنا بدیهی هست که برای تبدیل، برای مشخصات مختلف فایل (مثل sample rate و data type) از مقادیر فایل اول، مقادیر پیش فرض و انتخاب خودکار استفاده میشه، مگر اینکه شما مقدارهای دیگری رو در خط فرمان صریحا مشخص کنید.
ogg فرمتی هست که میشه اون رو جایگزین مناسبی برای فرمت انحصاری mp3 دونست. فشرده سازی و کیفیتی مشابه یا نزدیک (گویا کمی بیشتر) ام پی تری داره.

شما میتونید با این برنامه صدا رو هم از دستگاههای ورودی ضبط کنید. اینکار با فرمان rec همراه پارامترهای لازمش براحتی بیشتری انجام میشه که دیگه وارد جزییات نمیشم چون تست نکردم و بقدر کافی بررسی نکردم ساختارش رو.
البته ضبط صدا با برنامه های خط فرمان دیگری (arecord) هم ممکن هست که احتمالا باید روی بیشتر توزیعها پیدا بشن.

راستی اگر اون فرمانهای ساخت صدای بالا روی سیستم شما کار نکرد، بجای -t alsa default یک فایل خروجی بدید، و بعدش فرمان پخش اون فایل رو میتونید بدید. مثلا:

sox ~/.add/oo.ogg out.wav synth 1 square 100-350; play out.wav

نکته اینکه، فرمان play هم که در اینجا آمده، درواقع شل اسکریپتی هست که sox رو بکار میگیره. بنابراین تمام فرمتهای اون رو پشتیبانی میکنه؛ وگرنه با فرمان aplay میتونید فایلهای wav رو پخش کنید.

soxmix music.wav voice.wav mixed.wav

میکس کردن با استفاده از soxmix. از خط فرمان واضح و مبرهن است که فایل موسیقی و فایل صدای آدمیزاد ! باهم میکس/مخلوط شده و در فایل آخر، یعنی mixed.wav، ذخیره میشن.
هرچندتا فایل رو که بخواید میتونید با این روش میکس کنید. آخرین فایل، فایل خروجی و مخلوط تمام فایلها هست.
ضمنا ظاهرا موقع میکس کردن میتونید افکتها و تنظیمات مختلفی رو برای هر فایل بطور جداگانه اعمال کنید!
بهرحال بنده وارد جزییات اینها نمیشم و بیشتر موضوع درمورد برنامه sox هست که باهاش بیشتر کار و بسیاری گزینه هاش رو تست کردم.

این برنامه کارهای بیشتری میکنه و هرکدوم از این کارها هم با گزینه ها و خصوصیات مختلفی قابل انجام هستن (فرضا موج مثلثی، سینوسی، … و حتی انواعی از noise !! بجای مربعی در افکت synth – حذف نویز …).

قدرت و کارایی عالی خط فرمان در گنو/لینوکس (1)

خب خلاصه یک راست میریم سر بحث شیرین تکنیکی و عملی!!
چون دیروز یک چیزی رو تازه خودم امتحان کردم که قبلا شنیده بودم ولی تجربه نکرده بودم و مطلب جالب و سرگرم کننده ای هست اون رو الان شرح میدم؛ اگر قبلا تجربش رو داشتم در پست آغازین تاپیک بهش اشاره میکردم.
حکایت از این قراره که در محیط متن و خط فرمان لینوکس حتی میشه فیلم نگاه کرد.
تاجایی که میدونم این قابلیت با استفاده از تکنیکی بنام Linux framebuffer صورت میگیره که بنابراین اگر سیستم شما مجهز به این قابلیت و فعال باشه میتونید در خط فرمان ویدئو داشته باشید.

یه قسمت مفید و مختصر از مقالهء ویکی پدیا:

The Linux framebuffer (fbdev) is a graphic hardware-independent abstraction layer to show graphics on a console without relying on system-specific libraries such as SVGALib or the heavy overhead of the X Window System.

خب حالا میرسیم به وادی عملی و تست و سرگرمی!!
برای استفاده از این قابلیت بنده از mplayer استفاده کردم که یک مالتی مدیا پلیر عالی تحت لینوکس هست. باید از برنامه ای استفاده کنید که بهرحال امکان استفاده از این سیستم نمایش گرافیک در محیط متنی رو داشته باشه.

یک خط فرمان نمونه بسادگی:

mplayer /media/data/video/g11-1-128.mpg

البته اگر در محیط گرافیکی باشید، با وارد کردن این فرمان یک پنجرهء جداگانه برای نمایش فیلم باز میشه.
اگر در محیط متنی باشید فیلم بصورت فول اسکرین نمایش داده میشه.
در توزیع فدورا، بنده میتونم با کلید ctrl+alt+f5 یا ctrl+alt+f1 به محیط تماما متنی وارد بشم و با کلید ctrl+alt+f7 برمیگردم به محیط گرافیکی.
موقع پخش فیلم با کلید p میتونید فیلم رو نگه دارید؛ با کلید q یا ESC هم پخش متوقف میشه و به خط فرمان برمیگردید. چند کلید دیگه هم هست که کارهای مختلف مثل عقب و جلو بردن، تنظیم ولوم و نمایش یا عدم نمایش نشان دهنده های وضعیت (کلید o) رو انجام میدن.
بهرحال همونطور که ابتدای تاپیک گفتم هدف ما اینجا آموزش و ذکر جزء به جزء نیست و فقط سرنخها رو بدست میدیم و قابلیتها و کارهای جالب و مفید و پیشرفته در محیط متن لینوکس رو لیست میکنیم.
البته بنده کم نمیذارم و بهترین چیزهایی رو که میدونم تاجایی که توان و وقتم اجازه میده براتون میگم. امیدوارم در ادامه دوستان دیگر هم مطالب ارزشمند و تجربه های شخصی خوبی رو در اختیار همگان بذارن.

قابلیت جالب دیگر mplayer که باهاش حتی میشه کارهایی فراتر از نمایش فیلم کرد مثل این هست:

mplayer -vo aa /media/data/video/g11-1-128.mpg

اینجا توسط آپشن vo (ظاهرا مخفف video output) میگیم که ویدئو رو با استفاده از درایور ASCII ART نمایش بده که فکر میکنم بیشتر شما بدونید چی هست، ولی برای مبتدیها و تازه واردها بگم که فیلم در این حالت با کاراکترهای معمولی اسکی نمایش داده میشه که دیدنش خالی از لطف نیست! میتونید با این روش صحنه های مناسب دلخواه از فیلمهاتون رو به چنین فرمی دربیارید (در نقطهء مورد نظر متوقف و تبدیل به عکس کنید).
اگر بجای aa عبارت caca رو وارد کنید فرم دیگری از همین رو نمایش میده که از تعدادی رنگهای مختلف محدود استفاده میکنه و نمایش رنگی شاید جذابتر و واضحتری خواهید داشت.
سعی میکنم تصویری از این نوع رو ضمیمه کنم.
درایورهای دیگه که تست کردم شامل gif89a , jpej , png هست.
بغیر از خروجی gif89a، اون دوتای دیگه هر فریم فیلم رو تبدیل به تصویری جداگانه میکنن و در دایرکتوری جاری میریزن. پس مواظب تعداد زیاد فایلهای ایجاد شده باشید! فکر نمیکنم زیاد بدردتون بخوره.
اما خروجی gif89a جالب هست که ویدئوی شما رو تبدیل به یک تصویر گیف متحرک میکنه. احتمالا ازش بشه استفاده های عملی کرد. مثلا قسمت کوتاه جالبی از یک فیلم رو که جداکردیم با این روش میتونیم به تصویر متحرک تبدیل کرده و روی وب و کاربردهای دیگه که دنبال چنین چیزی هستیم استفاده کنیم. البته سعی کنید ذوق زده نشید و افراط نکنید! اینها تنها ابزارهایی هستن که وجود دارن و باید موقع لازم ازشون استفاده بشه. معمولا برای کارهای تخصصی تر و استفادهء مستمر و گسترده خب ابزارهای مخصوص و پروفشنال تری وجود دارن، اما برنامه های لینوکس اینقدر گسترده و متنوع و هرکدوم با ویژگیهای جالب خودشون هستن که واقعا از همشون در شرایط خاص میشه استفادهء عملی کرد و گاهی برای کاری ساده یا خاص یک ابزار ساده بهتر و مناسبتر یا از معدود گزینه های معقول/شدنی هست.
اگر با gif89a خواستید کار کنید متوجه افزایش شدید حجم عکس باشید؛ برای تست توصیه میکنم حدود یک ثانیه از یک فیلم رو تست کنید. یعنی با کلید q یک ثانیه بعد از شروع نمایش، از فیلم خارج بشید.
ضمنا میدونید که کیفیت تصویر گیف بخاطر محدود بودن تعداد رنگهاش به فکر میکنم ۲۵۶، کمتر از تصاویر ویدئوی اصلی خواهد بود.
حال این رو تست کنید:

mplayer -ao pcm /media/data/video/g11-1-128.mpg

این خط فرمان توسط آپشن ao (مخفف audio output) صدای فیلم شما رو به فایل wav تبدیل میکنه! (فایل در دایرکتوری جاری ریخته میشه که با فرمان pwd میتونید دربارش اطلاع حاصل کنید).
پس به همین راحتی و خوشمزگی میشه صدای یک فیلم رو ازش استخراج کرد. کاری که یادمه بعضی براش دنبال نرم افزار ویرایش فیلم میگشتن.
ضمنا شما میتونید با درایوری با نام null برای هرکدوم از آپشنهای ویدئو و صوت، اون خروجی رو نابود کنید. یعنی فیلم بدون تصویر یا صدا پخش بشه (البته برای پخش بدون صدا از آپشن -nosound هم میتونید استفاده کنید).
این برنامهء خط فرمانی جزیی از یک خانواده/پکیج هست که مثلا برنامه ای بنام mencoder هم داره که ظاهرا روی سیستم بنده نصب نیست. منوال رو الان نگاه کردم؛ واقعا مفصل هست! با mencoder ظاهرا میتونید فرمتهای مختلف فیلم رو به هم تبدیل کنید، اونهم با امکانات ویرایشی مختلف (فرضا از کجا تا کجا تبدیل بشه و غیره)؛ توضیح مفصلش در منوال mplayer آمده که دیگه بنده مطالعه نکردم.

اگر میخواید بطور حرفه ای با این برنامه (mplayer) آشنا بشید، حتما بقیهء آپشنهای خط فرمان و منوالش رو بدقت بررسی کنید. خیلی کارهای دیگه هم انجام میده؛ فرضا میشه تعداد فریم در ثانیه رو تنظیم کرد (مثلا شاید برای کاهش حجم تصاویر گیف متحرک مفید باشه). تنظیمات و انعطاف و قابلیتهای بسیار بیشتر از چیزی که اینجا گفتیم درش هست. اما بنده دیگه بهشون نمیپردازم. تازه با این برنامه آشنا شدم وگرنه احتمالا منوالش رو دقیق میخوندم و چیزهای بیشتری برای گفتن داشتم.
بعنوان اولین برنامه خط فرمان مطرح شده این برنامه رو گفتم ولی امیدوارم زیاد به زرق و برق و جنبهء سرگرمی پرداخته نشه و تاپیک از مسیر/گرایش فنی و تخصصی خودش خارج نشده باشه. بهرحال اینجا فروم برنامه نویسی هست و هدف و محتویات درنظر گرفته شده برای این جستار هم بی ارتباط با این زمینه نیستن و اکثرا برای کاربرهای خانگی معمولی و غیر متخصص کاربرد چندانی ندارن، اما متخصصان و حرفه ایها و برنامه نویسان در جریان پیشرفت تاپیک احتمالا متوجه خواهند شد که ابزارها و قابلیتهای مطرح شده چقدر جالب و مفید هستن برای کارهای مختلفی که برای این قشر افراد کم پیش نمیان.

———–
تصویر ضمیمهء ذیل حاصل استفاده از caca (libcaca) video output driver هست:

قدرت و کارایی عالی خط فرمان در گنو/لینوکس (مقدمه)

در اینجا میخوایم در مورد قدرت و کاربردهای عملی خط فرمان گنو/لینوکس و شاید بطور کلی سیستمهای یونیکسی (شباهت تنها از لحاظ استانداردها و ساختارهای پایه هست) صحبت کنیم.
بعضی فکر میکنند خط فرمان یک رابط منسوخ شده هست که متعلق به عهد بوقه و باید بدور انداختنش!
بعضی هم فکر میکنن فقط باید با یکی از دو رابط گرافیکی یا خط فرمان عمدهء کارها رو انجام داد.
اکثریت ویندوزیها و حتی خیلی از لینوکسیهایی که بقدر کافی حرفه ای نیستن و خط فرمان و زبان و برنامه هاش رو بقدر کافی بلد نیستن واقعا شدت تفاوت خط فرمان در ویندوز و لینوکس و همچنین کاربردهای مسلم و منطقیش رو خوب درک نکردن.
اینجا نمیخوام یک بحث سیستماتیک و کلاسی رو پیگیری کنم، نمیخوام از صفر چیزی رو یاد بدم، تاپیک آموزش خط فرمان و شل و برنامه ها نیست و در اینطور موارد رفرنسهای کافی موجود هستن که باید بقدر کافی کاربر حرفه ای و انگلیسی دان بود و به رفرنسهای مربوطه مراجعه کرد.
البته هر نوع سوالی رو میتونید بپرسید و اگر بنده یا شخص دیگری بلد بودیم میتونیم جواب بدیم یا رفرنسی معرفی کنیم و غیره. البته تعهدی برای اینکار نیست و شاید وقت و انرژی کافی نباشه چون واقعا اینطور مقولات گسترده هستن. فقط خواستم بگم که تاپیک حالت آزاد و متنوع داره و محدودیت و چهارچوب سختگیرانه ای نداره.

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

اینجا احتمالا چیزی که مطرح کنم و درواقع یکی از اهداف این تاپیک بوده، مطرح کردن مثالهای عملی و کاربردهای واقعی ای هست که برای خودم در جریان کارها و زمینهء فعالیتم (عمدتا کاربری و مدیریت سیستم/برنامه نویسی وب …) پیش اومده. ممکنه برای حرفه ایها ساده و نه چندان ارزشمند بحساب بیاد و ممکنه هم نه. ولی مسلما برای مبتدیها/نه چندان حرفه ایها و ویندوزیهایی که میخوان دید بهتری نسبت به لینوکس و خط فرمان و اینطور چیزها پیدا کنن و جواب سوالاتشون دربارهء این محیط عجیب و غریب و رعب آور هکری رو بدونن بدون فایده نیست.

قول هم نمیدم که وقت زیاد بتونم بذارم، یا با فاصله و برنامهء منظم پیگیری کنم. اینها هم مثل محتوی تاپیک آزاد و متنوع هست!! فعلا فقط استارت اولیه و احتمالا نظرات سایر دوستان.
اوه راستی فراموش نشه که بنده فقط یک استارتر هستم و نه رهبر و سخنگوی اصلی تاپیک. از دوستان و استادان و سروران گرامی که تجربه و دانشی در این زمینه ها دارن دعوت میکنم آزادانه در این تاپیک نظرات و تجربیات خودشون رو در اختیار دیگران بذارن. اصولا اینطور تاپیک واقعا محتوی لازم رو پیدا میکنه، چون بخش عمدهء اون تجربهء شخصی میتونه باشه که مشخصه با افزایش تعداد کمیت و کیفیتش بسیار بالاتر میتونه بره. ضمنا بازهم تکرار میکنم که بحث آزاد هست و از تئوری تا عملی و مثال و نمونه و نظر و ایده و غیره، خلاصه میتونید هرچیزی رو مطرح کنید.
بهرحال ما یه کاری کردیم؛ کوچیک یا بزرگ و مفید و بیهوده، در آینده مشخص میشه. چنین تاپیکی در جای دیگه ندیدم و بنظر من جاش خالی و مورد نیاز و مفید بود. حقش هم نیست برای چنین قدرت و برجستگی ای در لینوکس بحثی نشه و فقط به چیزهای مد روز مثل معادل برنامهء فتوشاپ و فلان محیط ویژوال بپردازیم. چون همونطور که گفتم این تاحدودی بخاطر/ایجاد کنندهء یک تصور غلط هم هست که فکر میکنیم غیبت کلی چنین چیزی در محیط ویندوز دلیل بر کم اهمیتی و بدون کاربرد بودن اون هست.

فعلا بدرود.