دی ۱ ۱۳۹۲

اضافه کردن میانبر در میزکار گنوم

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

ابتدا وارد پنجره تنظیمات شوید و گزینه صفحه‌کلید (Keyboard) را انتخاب کنید.

اکنون در پنجره صفحه کلید سربرگ میان برها (Shortcuts) را انتخاب کنید و در لیست سمت چپ آن گزینه آخر (Custom Shortcuts) را انتخاب کنید و سپس در پایین لیست سمت راست روی گزینه + بروید تا بتوانید یک میان‌بر جدید بسازید.

کافیست در بخش Name نام دلخواه خود و در بخش Command دستور مورد نظر را بنویسید و تایید کنید.

دستورات همانند دستوراتی هستند که در ترمینال از آن‌ها استفاده می‌کنید. یعنی مثلا برای باز شدن ترمینال از دستور gnome-terminal استفاده کنید و یا برای باز شدن مدیریت فایل از دستور nautilus می‌توانید استفاده کنید.

بعد از اضافه کردن میان‌بر کافیست در لیست، سمت راست گزینه میان‌بری که ساخته‌اید کلیک کنید (در اول کار غیرفعال و با عنوان Disabled است) و کلیدهایی که می‌خواهید برای میانبر استفاده شوند را فشار دهید تا فعال شود.

اضافه کنم که در همین مکان می‌توانید دیگر میانبرهای خود را نیز که در لیست سمت چپ آمده است تغییر دهید یا با کلید Space غیر فعال کنید.


آذر ۲۹ ۱۳۹۲

تبدیل بسته deb به rpm

<p>بسیار پیش آمده است که بخواهید بسته‌های مختلف لینوکس را به هم تبدیل کنید. بسته دبیانی با پسوند deb داشته‌اید و اکنون می‌خواهید در توزیعی که از بسته‌های ردهت با پسوند rmp پشتیبانی می‌کند استفاده کنید و یا بالعکس.</p> <p>امروز قصد دارم برنامه‌ای معرفی کنم که این تبدیلات را به راحتی برای شما ممکن می‌سازد با پشتبانی از تبدیل بسته‌های deb، rpm، lsb، tgz و دیگر بسته‌های توزیع‌های لینوکس به هم و یک سری امکانات دیگر.</p> <p>قبل از هر چیز بهتر است بدانید که برنامه‌های یونیکس همگی از کدهای ماشین یکسانی بهره می‌برند و از این جهت قابل اجرا در هر توزیعی هستند اما هر توزیع از سیستم بسته‌بندی متفاوتی استفاده می‌کند و همچنین منابع متفاوتی دارد؛ از این جهت بسته‌ها در هر توزیعی قابل نصب نیستند و باید آن‌ها را به فرم بسته‌های آن توزیع تبدیل کرد و یا حتی اگر از منابع خاصی استفاده می‌کنند که در یک توزیع وجود ندارد برای اجرای آن با مشکل بر خواهید خورد.</p> <h3 id="alien----">برنامه alien برای تبدیل بسته های لینوکس</h3> <p>ابتدا توسط دستور زیر در ترمینال این بسته را نصب کنید. این بسته در منابع توزیع شما موجود است.</p> <ul> <li>نصب برای دبیان، ابونتو، مینت و …</li> </ul> <div class="language-sh highlighter-rouge"><pre class="highlight"><code>sudo apt-get install alien </code></pre> </div> <ul> <li>نصب برای فدورا، سنت-او-اس و …</li> </ul> <div class="language-sh highlighter-rouge"><pre class="highlight"><code>yum install alien </code></pre> </div> <p>اکنون دستور زیر را وارد کرده تا راهنمای استفاده از این برنامه را مشاهده کنید.</p> <div class="language-sh highlighter-rouge"><pre class="highlight"><code>alien -h Usage: alien <span class="o">[</span>options] file <span class="o">[</span>...] file <span class="o">[</span>...] Package file or files to convert. -d, --to-deb Generate a Debian deb package <span class="o">(</span>default<span class="o">)</span>. Enables these options: --patch<span class="o">=</span> Specify patch file to use instead of automatically looking <span class="k">for </span>patch <span class="k">in</span> /var/lib/alien. --nopatch Do not use patches. --anypatch Use even old version os patches. -s, --single Like --generate, but <span class="k">do </span>not create .orig directory. --fixperms Munge/fix permissions and owners. --test Test generated packages with lintian. -r, --to-rpm Generate a Red Hat rpm package. --to-slp Generate a Stampede slp package. -l, --to-lsb Generate a LSB package. -t, --to-tgz Generate a Slackware tgz package. Enables these options: --description<span class="o">=</span> Specify package description. --version<span class="o">=</span> Specify package version. -p, --to-pkg Generate a Solaris pkg package. -i, --install Install generated package. -g, --generate Generate build tree, but <span class="k">do </span>not build package. -c, --scripts Include scripts <span class="k">in </span>package. -v, --verbose Display each <span class="nb">command </span>alien runs. --veryverbose Be verbose, and also display output of run commands. -k, --keep-version Do not change version of generated package. --bump<span class="o">=</span>number Increment package version by this number. -h, --help Display this <span class="nb">help </span>message. -V, --version Display alien<span class="s1">'s version number. </span></code></pre> </div> <p>در اینجا من ترجمه‌ای از این راهنما را قرار داده‌ام.</p> <blockquote> <p>طریقه استفاده: alien [گزینه‌ها] file […]<br /> file […] توضیح داده که فایل یعنی فایل بسته یا فایل‌های مورد نظر برای تبدیل کردن<br /> -d, –to-deb سوییچ‌های مورد نظر برای تبدیل کردن به بسته‌های دبیان (به صورت پیش‌فرض از همین استفاده می‌شود)<br /> گزینه‌های قابل استفاده:<br /> –patch= فایل پچ مخصوصی که می‌خواهید از آن کنار تبدیل استفاده کنید<br /> نگاهی به پچ‌ها در این مسیر بیندازید /var/lib/alien.<br /> –nopatch از هیچ پچی استفاده نکردن<br /> –anypatch زمانی از این سوییچ استفاده کنید که پچ‌های سیستم‌عامل قدیمی است<br /> -s, –single مانند سوییچ جنریت است اما .او-ار-آی-جی نمی‌سازد<br /> directory.<br /> –fixperms درست کردن اجازه‌ها و مالک<br /> –test آزمایش ساخت بسته‌ها<br /> -r, –to-rpm تبدیل به آر-پی‌-ام. بسته‌های ردهت<br /> –to-slp تبدیل به بسته‌های استمپید به پسوند اس-ال-پی<br /> -l, –to-lsb تبدیل به بسته‌های ال-اس-بی<br /> -t, –to-tgz تبدیل به بسته‌های اسلک ور به پسوند تی-جی-زد<br /> گزینه‌های قابل استفاده:<br /> –description= مشخص کردن توضیحات بسته<br /> –version= مشخص کردن نسخه بسته<br /> -p, –to-pkg تبدیل به بسته‌های سولاریز با پسوند پی-کی-جی<br /> -i, –install نصب بسته تولید شده<br /> -g, –generate ساخت درخت تولید. اما بسته را تولید نمی‌کند<br /> -c, –scripts اسکریپ‌های پکیج را هم برای تبدیل شامل کن<br /> -v, –verbose نمایش هر دستوری که برنامه تبدیل‌گر الین انجام می‌دهد<br /> –veryverbose طولانی دستور بالا است و خروجی دستورات را نیز نمایش می‌دهد<br /> -k, –keep-version نسخه بسته را تغییر نده<br /> –bump=number نسخه بسته را به شماره مذکور تغییر بده<br /> -h, –help نمایش راهنمای برنامه<br /> -V, –version نمایش نسخه برنامه</p> </blockquote> <p>مثلا می‌خواهید یک بسته آر پی ام را به دبیان تبدیل کنید:</p> <div class="language-sh highlighter-rouge"><pre class="highlight"><code>sudo alien -r debian-package.debredhat_package_manager-package.rpm generated </code></pre> </div> <p>یا تبدیل یک بسته دبیان به آر-پی-ام</p> <div class="language-sh highlighter-rouge"><pre class="highlight"><code>alien redhat_package_manager-package.rpmdebian-package.deb generated </code></pre> </div> <p>با توجه به بسته مورد نظر باید از سوییچ‌های مناسب استفاده کنید.</p>

آذر ۲۵ ۱۳۹۲

اجزای میزکار یونیتی

<p>سیستم‌عامل ابونتو که یکی از معروف‌ترین توزیع‌های لینوکس/گنو است به صورت پیش‌فرض از میزکار یونیتی استفاده می‌کند. یونیتی بر پایه گنوم است و برای ابونتو سفارشی شده است و سعی شده کاربردی و ساده باشد.</p> <p><img src="/assets/images/ubuntu-unity-screenshot.png" alt="" /></p> <p>از ابونتو ۱۰.۱۰ میزکار یونتی جایگزین میزکار گنوم شد و در هر نسخه جدید ویژگی‌های جدیدی به آن اضافه می‌شود اما ساختار آن تقریبا ثابت است و از اجزای زیر تشکیل شده که در ادامه توضیح می‌دهیم.</p> <h3 id="desktop-">میزکار Desktop یونیتی</h3> <p><img src="/assets/images/image_12_1.png" alt="" /></p> <p>با ورود به ابونتو میزکار را مشاهده می‌کنیم که فایل‌های شاخه دستاپ (Desktop) کاربری شما را نمایش می‌دهد.</p> <p>می‌توان آیکن برنامه‌های خاصی مثل مدیریت فایل، سطل بازیافت و شبکه را به آن اضافه کرد.</p> <p>به صورت پیش‌فرض ۴ میزکار دارد که می‌توان آن‌ها را افزایش یا کاهش داد.</p> <h3 id="luncher-">اجراگر Luncher یونیتی</h3> <p><img src="/assets/images/image_13_1.png" alt="" /></p> <p>نوار کنار میزکار است که می‌تواند همیشه در کنار میزکار باشد و یا تنظیماتی انجام دهیم که با رفتن نشان‌گر موس نمایش داده شود.</p> <p>برنامه‌هایی که به آن اضافه شده‌اند و برنامه‌های در حال اجرا را نمایش می‌دهد. به اضافه میان‌بر دش، سطل بازیافت و دستگاه‌های متصل به رایانه.</p> <h3 id="section">پنل یونیتی</h3> <p><img src="/assets/images/image_14_1.png" alt="" /></p> <p>نوار تیره بالای صفحه است.</p> <p>آیکن تنظیمات، صدا، باتری، پیام‌ها، اینترنت، زبان و … در سمت چپ پنل قرار دارند که به صورت منویی می‌توان از آن‌ها استفاده کرد.</p> <p><img src="/assets/images/image_14_2.png" alt="" /></p> <p>در سمت راست پنل نام پنجره برنامه جاری که در حال اجرا است و منوهای آن برنامه قرار دارند.</p> <p>با رفتن نشان‌گر موس روی نام برنامه دکمه‌های بستن، بزرگ‌کردن و کوچک کردن پنجره برنامه جاری ظاهر می‌شوند.</p> <h3 id="hud-">هود Hud یونیتی</h3> <p><img src="/assets/images/image_15_1.png" alt="" /></p> <p>با فشردن کلید Alt نمایش داده می‌شود.</p> <p>برای استفاده بهتر و سریع‌تر از منوها و امکانات برنامه جاری که در حال اجرا است. مثلا در تصویر پنجره گوگل کروم باز است که با استفاده از هود نیو را جست‌وجو کرده‌ایم و امکاناتی که به این نام هستند برای اجرا پیشنهاد داده شده‌اند.</p> <h3 id="dash-">داشبرد (دش) Dash یونیتی</h3> <p><img src="/assets/images/image_16_1.png" alt="" /></p> <p>با فشردن کلید پنجره و یا میان‌بر آن در اجراگر ظاهر می‌شود.</p> <p>برای جست‌وجو در فایل‌ها و برنامه‌ها است.</p> <p>از چندین لنز تشکیل شده (در پایین دش) که هر کدام جست‌وجو را در منابع خاصی انجام می‌دهند.</p> <p>مثلا در شکل لنز خانه را می‌بینید که فایل‌های تازه استفاده شده (Recent) و خلاصه‌ای از نتایج دیگر لنزها را نمایش می‌دهد بعد از آن به ترتیب از چپ به راست لنز اپلیکیشن برای جستجو در برنامه‌ها، لنز فایل برای جستجو در فایل‌ها و دیگر لنزها قرار دارند.</p>

آذر ۲۴ ۱۳۹۲

معرفی ویراشگر پارتیشن GParted

<p>برنامه جی‌پارتد (GParted) یک ویرایشگر پارتیشن قوی گنوم (Gnome Partition Editor) است که هم برای اکثر توزیع‌ها لینوکس منتشر می‌شود و هم به صورت جداگانه می‌توانید نسخه ایزو (ISO) آن را دریافت کرده و به صورت لایو (Live) از روی دیسک اجرا کنید و هارد دیسک خود را پارتیشن بندی و ویرایش کنید.</p> <p><img src="/assets/images/gparted_screenshot.png" alt="" /></p> <p>روز ۲۲ آذر برابر با ۱۳ دسامبر نسخه <span dir="ltr">0.17.0-1</span> لایو این ویرایشگر پارتیشن که بر پایه دبیان است منتشر شده است. نسخه مخصوص توزیع‌ها هم‌اکنون ۰٫۱۷٫۰ است.</p> <p>نسخه جدید با قابلت تغییر اندازه برخی فایل سیستم‌ها (Btrfs ،ext3 ،ext4 ،JFS ،LVM2 pv ،NILFS2 ،ReiserFS و XFS) زمانی که آن‌ها مانت شده‌اند می‌باشد. همچنین بسیاری از باگ‌های رفع شده است و ترجمه‌ها به‌روز شده‌اند.</p> <p>نسخه جدید بر پایه دبیان سید (Sid) است که در تاریخ ۲۰۱۳-۱۲-۱۳ منتشر شده است و از هسته لینوکس ۳.۱۱.۱۰ بهره می‌برد.</p> <h3 id="gparted--">کارهایی که می‌توان با GParted انجام داد</h3> <ul> <li>ساخت یا حذف پارتیشن</li> <li>تغییر اندازه و یا جابجایی پارتیشن</li> <li>چک کردن پارتیشن</li> <li>برچسب (label) زدن به پارتیشن</li> <li>تنظیم UUID جدید</li> <li>کپی و چسباندن (paste)</li> </ul> <h3 id="gparted---">فایل سیستم‌ها و فرمت های پارتیشنی که GParted پشتیبانی می کند</h3> <ul> <li>btrfs</li> <li>ext2 / ext3 / ext4</li> <li>fat16 / fat32</li> <li>hfs / hfs+</li> <li>linux-swap</li> <li>lvm2 pv</li> <li>nilfs2</li> <li>ntfs</li> <li>reiserfs / reiser4</li> <li>ufs</li> <li>xfs</li> </ul> <p>این برنامه در پردازنده‌های x86 و x86-64 با حداقل رم ۱۲۸ مگابایت قابل اجرا است و برای اکثر توزیع‌های لینوکس و همچنین ویندوز و مک به صورت رایگان منتشر می‌شود.</p> <p>برای دریافت برنامه می‌توانید به این آدرس مراجعه کنید. gparted.org/download.php</p>

آذر ۱۶ ۱۳۹۲

۵ شگرد جالب و کاربردی خط فرمان لینوکس

<p>تو این آموزش می خوایم در مورد ۵ روش جالب برای استفاده‌ی بهتر و سریع‌تر از خط فرمان لینوکس با هم صحبت کنیم. انشاالله به مرور قسمت‌های دیگه‌ی این آموزش رو هم می‌تونید از لینوکسی‌ها مطالعه کنید.  در آموزش‌های بعدی کارهای هیجان انگیزتری در خط فرمان انجام خواهیم داد!</p> <p><img src="/assets/images/terminal2.png" alt="" /></p> <p><strong>توجه:</strong> در این آموزش فرض شده که خواننده حداقل آشنایی نسبی با لینوکس و دستورات خط فرمان داره؛ اگه مشکلی تو فهمیدن کاری که این دستورات انجام میدن دارین، می تونین به <a href="http://linuxihaa.ir/%D9%85%D8%B1%D8%AC%D8%B9-%D8%AF%D8%B3%D8%AA%D9%88%D8%B1%D8%A7%D8%AA-%D8%AA%D8%B1%D9%85%DB%8C%D9%86%D8%A7%D9%84-%D9%84%DB%8C%D9%86%D9%88%DA%A9%D8%B3/">اینجا</a> مراجعه کنید.</p> <p><strong>توجه:</strong> <em>تمام این مثال‌ها تو پوسته‌ی bash‌ (پوسته‌ی پیش فرض اکثر توزیع‌های لینوکس) تست شده‌اند.</em></p> <p>خب! با مثال اول شروع می‌کنیم:</p> <h3 id="section">۱. چطوری سریع و بی دردسر بین دایرکتوری های مختلف جابجا بشیم؟</h3> <p>معمولا وقتی داریم با خط فرمان لینوکس کار می‌کنیم، لازمه که بین تعدادی دایرکتوری مرتبا سوییچ کنیم. مثلا توی دایرکتوری A هستیم، به دایرکتوری B منتقل میشیم، حالا می خوایم دوباره برگردیم به دایرکتوری A. نوشتن کل آدرس اون دایرکتوری ممکنه کار مشکلی باشه. تو همچین شرایطی می تونیم از دستور میان‌بر <code class="highlighter-rouge">cd -</code> استفاده کنیم. مثلا:</p> <div class="language-sh highlighter-rouge"><pre class="highlight"><code><span class="gp">$ </span><span class="nb">pwd</span> /home/mohammad <span class="gp">$ </span><span class="nb">cd</span> /usr/local/bin/ <span class="gp">$ </span><span class="nb">cd</span> - /home/mohammad </code></pre> </div> <p>این جوری می‌تونیم به راحتی بین دو تا دایرکتوری جابجا بشیم.</p> <h3 id="section-1">۲. چطور  از تاریخچه‌ی خط فرمان به صورت کاربردی استفاده کنیم؟</h3> <p>با استفاده از <code class="highlighter-rouge">!!</code> می تونیم آخرین دستور اجرا شده را دوباره فراخوانی کنیم. مثلا:</p> <div class="language-sh highlighter-rouge"><pre class="highlight"><code><span class="gp">$ </span>uname -a Linux mohammad-1015PN 3.8.0-26-generic <span class="c">#38-Ubuntu SMP Mon Jun 17 21:46:08 UTC 2013 i686 i686 i686 GNU/Linux</span> <span class="gp">$ </span>!! uname -a Linux mohammad-1015PN 3.8.0-26-generic <span class="c">#38-Ubuntu SMP Mon Jun 17 21:46:08 UTC 2013 i686 i686 i686 GNU/Linux</span> </code></pre> </div> <p>خب! حالا چه کارای خلاقانه‌ای می تونیم با<strong> !!</strong> انجام بدیم؟<br /> اول از همه می‌تونیم با دستورات دیگه ترکیبش کنیم، مثلا:</p> <div class="language-sh highlighter-rouge"><pre class="highlight"><code><span class="gp">$ </span>!! | grep Linux uname -a | grep Linux Linux mohammad-1015PN 3.8.0-26-generic <span class="c">#38-Ubuntu SMP Mon Jun 17 21:46:08 UTC 2013 i686 i686 i686 GNU/Linux</span> </code></pre> </div> <p>و معمولا خیلی پیش میاد که دستوری رو وارد می کنید و خطایی رو مشاهده می کنین که این دستور، سطح دسترسی root لازم داره. تو این موارد اولین چیزی که به نظر می رسه اینه که دکمه ی up arrow  و بعد home رو بزنیم و ابتدای دستور sudo رو اضافه کنیم. با استفاده از !!‌ می تونیم راحت تر این کار رو انجام بدیم:</p> <div class="language-sh highlighter-rouge"><pre class="highlight"><code><span class="gp">$ </span>touch new_binary touch: cannot touch <span class="s1">'new_binary'</span>: Permission denied <span class="gp">$ </span>sudo !! sudo touch new_binary <span class="o">[</span>sudo] password <span class="k">for </span>mohammad: <span class="gp">$ </span>ls new_binary new_binary </code></pre> </div> <p>مورد استفاده دیگه می‌تونه این باشه که می‌خوایم یه دستور رو به آخر یه فایل shell اضافه کنیم. یا مثلا یه فایل shell‌ از دستوری که الان وارد کردیم درست کنیم:</p> <div class="language-sh highlighter-rouge"><pre class="highlight"><code><span class="gp">$ </span>ls -lart /home/mohammad/test/<span class="k">*</span>.py -rw-rw-r-- 1 mohammad mohammad 50 Mar 1 00:23 /home/mohammad/test/test.py <span class="gp">$ </span><span class="nb">echo</span> !! &gt; myscript.sh <span class="nb">echo </span>ls -lart /home/himanshu/practice/<span class="k">*</span>.py &gt; script.sh <span class="gp">$ </span>cat script.sh ls -lart /home/mohammad/test/<span class="k">*</span>.py </code></pre> </div> <p>پس مسلما استفاده از !! می تونه خیلی کمک کننده باشه و باعث صرفه جویی در وقت میشه.<br /> مورد دیگه استفاده از <strong>!</strong> به صورت تکی هست که مثلا تو این مورد می‌تونه کاربرد داشته باشه که می‌خوایم یه دستور خاص رو از سری دستوراتی که قبلا وارد کردیم اجرا کنیم، مثلا:</p> <div class="language-sh highlighter-rouge"><pre class="highlight"><code><span class="gp">$ </span><span class="nb">history</span> ... ... ... ۲۰۳۹ uname -a | grep Linux ۲۰۴۰ dmesg ۲۰۴۱ clear ۲۰۴۲ <span class="nb">cd </span>bin ۲۰۴۳ clear ۲۰۴۴ <span class="nb">pwd </span>2045 touch new_binary ۲۰۴۶ sudo touch new_binary ۲۰۴۷ ls new_binary ۲۰۴۸ <span class="nb">history</span> <span class="gp">$ </span>!2039 uname -a | grep Linux Linux mohammad-1015PN 3.8.0-26-generic <span class="c">#38-Ubuntu SMP Mon Jun 17 21:46:08 UTC 2013 i686 i686 i686 GNU/Linux</span> </code></pre> </div> <p>خیلی راحت تونستیم دستور ۲۰۳۹ از تاریخچه ی دستورهای خط فرمان رو دوباره اجرا کنیم، بدون اینکه نیازی باشه دوباره تایپش کنیم. این روش حتی از copy/paste هم راحت تره، نه؟!<br /> حتی می‌تونیم به جای شماره دستور از ۲- ، یعنی عدد منفی استفاده کنیم:</p> <div class="language-sh highlighter-rouge"><pre class="highlight"><code><span class="gp">$ </span><span class="nb">history</span> ... ... ... ۲۰۴۹ ! ۲۰۳۹ ۲۰۵۰ uname -a | grep Linux ۲۰۵۱ <span class="nb">history</span> <span class="gp">$ </span>!-2 uname -a | grep Linux Linux mohammad-1015PN 3.8.0-26-generic <span class="c">#38-Ubuntu SMP Mon Jun 17 21:46:08 UTC 2013 i686 i686 i686 GNU/Linux</span> </code></pre> </div> <p>اجرا کردن دستور با ورودی های دستور قبل با استفاده از !$</p> <p>فقط یه مثال رو ببینیم:</p> <div class="language-sh highlighter-rouge"><pre class="highlight"><code><span class="gp">$ </span>ls /home/mohammad/test/<span class="k">*</span>.py /home/mohammad/test/firstPYProgram.py </code></pre> </div> <div class="language-sh highlighter-rouge"><pre class="highlight"><code><span class="gp">$ </span>ls -lart !<span class="err">$</span> ls -lart /home/mohammad/test/<span class="k">*</span>.py -rw-rw-r-- 1 mohammad mohammad 50 Mar 1 00:23 /home/mohammad/test/firstPYProgram.py </code></pre> </div> <p>که مقدار ورودی دستور قبلی رو تو دستور بعدی به عنوان ورودی استفاده کردیم.<br /> می تونیم از <code class="highlighter-rouge">![keyword]</code> برای تکرار آخرین دستوری که با keyword شروع میشه، استفاده کنیم:</p> <div class="language-sh highlighter-rouge"><pre class="highlight"><code><span class="gp">$ </span>!ls ls -lart /home/mohammad/practice/<span class="k">*</span>.py -rw-rw-r-- 1 mohammad mohammad 50 Mar 1 00:23 /home/mohammad/test/firstPYProgram.py </code></pre> </div> <h3 id="section-2">۳. چطور از  کاما استفاده کنیم؟!</h3> <p>یکی از کاربرد های کاما اینه که بخوایم یه رشته یا ابتدای یه رشته رو به حروف کوچک تبدیل کنیم:</p> <div class="language-sh highlighter-rouge"><pre class="highlight"><code><span class="gp">$ </span><span class="nv">words</span><span class="o">=</span><span class="s2">"Example of comma OPERATOR"</span> </code></pre> </div> <div class="language-sh highlighter-rouge"><pre class="highlight"><code><span class="gp">$ </span><span class="nb">echo</span> <span class="k">${</span><span class="nv">words</span><span class="p">,</span><span class="k">}</span> example of comma OPERATOR </code></pre> </div> <div class="language-sh highlighter-rouge"><pre class="highlight"><code><span class="gp">$ </span><span class="o">{</span>words,,<span class="o">}</span> example of comma operator </code></pre> </div> <p>که تو مثال اول فقط حرف اول رشته‌ی تعریف شده، و تو مثال دوم، کل رشته رو به حروف کوچک تبدیل کردیم.</p> <p>استفاده از  کاما در اسم فایل</p> <p>یکی از کاربرد‌های جالب استفاده از کاما می‌تونه این باشه که مثلا می‌خوایم با دستوری مثل touch سه تا فایل بسازیم.</p> <div class="language-sh highlighter-rouge"><pre class="highlight"><code><span class="gp">$ </span>touch new_file<span class="o">{</span>1,2,3<span class="o">}</span> <span class="gp">$ </span>ls new_file<span class="k">*</span> new_file1 new_file2 new_file3 </code></pre> </div> <p>با کاما خیلی راحت تونستیم اسم فایل‌ها رو وارد کنیم. در واقع محتویات داخل {} هر کدوم به اسم فایل اضافه شدن و در نهایت سه تا اسمی که می‌خواستیم ساخته شد.</p> <p>یکی از پرکاربردترین کارهایی که معمولا با این روش انجام میشه اینه که بخوایم اسم یه فایل رو موقتا تغییر بدیم تا مثلا دو نسخه ی جدید و قدیمی رو ازش داشته باشیم:</p> <div class="language-sh highlighter-rouge"><pre class="highlight"><code><span class="gp">$ </span>mv my_filename.<span class="o">{</span>old,new<span class="o">}</span> </code></pre> </div> <p>که فایلی به اسم my_filename.old رو به my_filename.new تغییر میده.</p> <h3 id="section-3">۴. چطور با فایلی که ابتدای اسمش خط تیره (-) داره، کار کنیم؟</h3> <p>حتما می دونید که تو خط فرمان معمولا پارامترهای دستورات مختلف رو با خط تیره مشخص می کنیم. حالا فرض کنید فایلی به اسم <code class="highlighter-rouge">-1mpFile.out</code> رو می خوایم پاک کنیم. خب! اگه از دستور <code class="highlighter-rouge">$ rm ۱mpFilee.out</code> استفاده کنیم. با این خطا مواجه میشیم (حتی اگه از “” استفاده کنیم بازم خطا میده!) :</p> <div class="language-sh highlighter-rouge"><pre class="highlight"><code>rm: invalid option -- <span class="s1">'1'</span> Try <span class="s1">'rm ./-1mpFile.out'</span> to remove the file <span class="s1">'-1mpFile.out'</span>. Try <span class="s1">'rm --help'</span> <span class="k">for </span>more information. </code></pre> </div> <p>یه راه حل، همین راه حلی هست که خط فرمان برامون نوشته، راه حل دیگه می تونه این باشه که دستور بالا رو اینجوری بنویسیم:</p> <div class="language-sh highlighter-rouge"><pre class="highlight"><code><span class="gp">$ </span>rm -- -1mpFile.out </code></pre> </div> <p>یعنی دو تا خط تیره قرار میدیم و بعد اسم فایلمون.</p> <p>این راه حل رو میشه تو موارد مشابه با دستورات دیگه هم به کار برد.</p> <h3 id="section-4">۵. چطور همه ی فایل های یک دایرکتوری به جز تعداد خاصی رو حذف کنیم؟</h3> <p>فرض کنید یه دایرکتوری داریم با تعداد زیادی فایل و می‌خوایم همه رو حذف کنیم، به جز تعدادی که پسوندهای خاصی دارند. مثلا تو این دایرکتوری:</p> <div class="language-sh highlighter-rouge"><pre class="highlight"><code><span class="gp">$ </span>ls a.out Cfile.c file.c macro.c my_printf.c orig_file.orig stacksmash.c bfrovrflw.c cmd.c firstPYProgram.py main.c new_printf.c orig_file.rej test_strace.c bufrovrflw.c env.c helloworld.c my_fopen.c new.txt prog.c virtual_func.c </code></pre> </div> <p>می خوایم همه‌ی فایل‌های تو دایرکتوری رو پاک کنیم، به جز فایل‌های سورس کدمون(فایل های با پسوند c و py). برای این کار می تونیم از دستور rm به این صورت استفاده کنیم:</p> <div class="language-sh highlighter-rouge"><pre class="highlight"><code><span class="gp">$ </span>rm !<span class="o">(</span><span class="k">*</span>.c|<span class="k">*</span>.py<span class="o">)</span> <span class="gp">$ </span>ls bfrovrflw.c Cfile.c env.c firstPYProgram.py macro.c my_fopen.c new_printf.c stacksmash.c virtual_func.c bufrovrflw.c cmd.c file.c helloworld.c main.c my_printf.c prog.c test_strace.c </code></pre> </div> <p>می بینید که همه‌ی فایل ها به جز اونایی که پسوند c و py داشتن، حذف شدن. (در اینجا اپراتور ! به معنی مکمل هست، یعنی همه به جز این فایل‌ها)</p> <p>البته از این روش مشخص کردن اسامی فایل‌ها تو دستورات دیگه هم میشه استفاده کرد.</p> <p>ادامه دارد… :)</p>