لینوکس و من

۱۵ مطلب با کلمه‌ی کلیدی «ترمینال» ثبت شده است

چند ترفند ssh برای انتقال فایل

یکی از مشکلات همیشگی هنگام اتصال به سرورها از طریق شبکه، انتفال فایل است. ابزار هایی مثل sftp با وجود کارایی فراوان، مشکلاتی هم دارند، مثلا استفاده مکرر از آنها ملال‌آور است و اصلا برای اسکریپت نویسی مناسب نیستند و مشکلاتی مثل سطح دسترسی و غیره هم ممکن است رخ دهد.
یک راه حل جالب برای این مشکلات استفاده مستقیم از خود ssh است. مثلا به کمک دستور زیر میتوان فایلی را از سرور به کلاینت منتقل کرد.
ssh <server_ip> cat /path/to/file >/path/to/file/on/client
حال برای مثال اگر با فایلی مواجه باشیم که خواندن آن نیاز به دستور روت دارد به سادگی میتوان نوشت:
ssh -tt <server_name> sudo cat /path/to/file > /path/to/save/file
اما مزایای این روش فقط به همین جا محدود نمیشود میتوان کار های جالب تری انجام داد که برای sftp غیر ممکن است. مثلا:
 ssh <server_ip> curl http://example.com >/path/to/save
ssh <server_ip> "dd if=/dev/sdx |gzip -c9" >/path/to/save
که از اولی میتوان برای دانلود مستقیم یک فایل به کمک ssh و از دومی برای بکاپ گرفتن از یک سیستم روی شبکه کمک گرفت. تقربیا میتوان از هر ترکیبی استفاده کرد. و stdout هر دستوری را که روی سرور اجرا میشود مستقیما روی کلاینت ذخیره کرد و از مزایای رمزنگاری و ارتباط امن ssh بهره برد.
علاوه بر این میتوان از این مزیت در جهت عکس نیز استفاده کرد. مثلا به کمک این دستور میتوان از سیستم بکاپ گرفت و مستقیما روی یک کامپیوتر روی شبکه ذخیره کرد:
"dd if=/dev/sdx| gzip -c9 |ssh <server_name> "cat > /path/to/file
تذکر: فراموش کردن " ها میتواند نتایج جالبی داشته باشد :)
حتی میتوان فایل هایی را بازنویسی کرد که ویرایش آنها نیاز به دستور روت دارد.
cat /file/on/client |ssh -tt <server_address> sudo tee /path/to/file
نکته:‌ درصورت استفاده از sudo در دستورات ssh باید از سویچ -tt استفاده کنید.

علاوه بر همه این مثال ها میتوان از قدرت bash و ابرازهای مختلف استفاده کرد و به ترکیب‌های هیجان‌انگیز بیشتری رسید. اگر مثال های جالبتری به ذهنتان رسید آنهارا باما در میان بگذارید.

آپدیت:
به توصیه یکی از دوستان تصمیم گرفتم توضیح مختصری درباره دستور scp به این پست اضافه کنم.

پیدا کردن یک عبارت در یک سری فایل

گاهی پیش میاد که لازم داریم دنبال یه عبارت خاص توی پوشه ها و فایلهایی که داریم بگردیم. خب باز کردن دونه دونه اونها و یکی یکی سرچ کردن هم سخته هم خنگولانه است!
با این روش ها میشه این کار رو راحت تر کرد:

grep -rnw '/path/to/somewhere/' -e "pattern"
یک دستور تیپیک برای جست و جوی عبارت pattern در یک دایرکتوری.

grep --include=\*.{c,h} -rnw '/path/to/somewhere/' -e "pattern"

این دستور جست و جو رو در فایلهایی انجام میده که پسوند اونها به c یا h ختم بشن

grep --exclude=*.o -rnw '/path/to/somewhere/' -e "pattern"
این دستور هم میگه که همه فایلهایی که آخرشون به O ختم میشه از جست و جو خارج کن

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

ویرایش:
یکی از خوانندگان عزیز وبلاگ، صدراله در مورد این سرچ کرد که چگونه یک عبارت را در تعداد زیادی فایل پیدا کنیم و اون را با یک عبارت دیگه جایگزین کنیم. یعنی همون find and replace در مقیاس بزرگ!
خودش زحمت کشید و جواب رو پیدا کرد و به اشتراک گذاشت. ممنون از تلاشش

 find /home/user/directory -name \*.c -exec sed -i "s/cybernetnews/cybernet/g" {} \;
دستور بالا در مسیر مشخص شده  cybernetnews را در فایلهایی که انتهای پسوند آنها c دارد پیدا و آن را به cybernet تبدیل میکند.

 find /home/user/directory -type f -readable -writable -exec sed -i "s/cybernetnews/cybernet/g" {} \;
دستور بالا در مسیر مشخص شده عبارت cybernetnews را در همه ی فایلهای قابل خواندن، قابل ویرایش و اجرایی  پیدا و آن را به cybernet تبدیل میکند.
بدیهیه که با این دستورها خیلی کارهای بزرگتری میشه کرد. کافیه بلد باشیم و خلاقیت داشته باشیم.

عبارات فارسی در ترمینال در آرچ

سوال یکی از بچه ها توی انجمن تازه راه افتاده ی فارسی زبان های آرچ در مورد فارسی نویسی در ترمینال منو بر آن داشت که سری به یکی از مطالب قدیمی وبلاگ بزنم.

برای نوشتن فارسی در ترمینال در آرچ دقیقا همون کار قدیمی رو باید بکنیم. کتابخانه های fribidi و bicon رو باید نصب کنیم.
 
 yaourt -S bicon-git

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

su
echo 'Terminal=true' >> /usr/share/applications/xfce4-terminal.desktop
echo 'Exec=/usr/bin/bicon' >> /usr/share/applications/xfce4-terminal.desktop

شما باید قسمت خاکستری در بالا رو به ترمینالی که خودتون دارید تغییر بدید. مثلا gnome-terminal
و سپس اگر از ترمینال جایی شورتکات گذاشتید حذفش کنید و دوباره بذارید.
از این به بعد با اجرا کردن ترمینال از منوی دسکتاپتون bicon بصورت خودکار اجرا میشه و شما میتونید راحت فارسی تایپ کنید و بخونید.

 

وارد کردن یک خط به انتهای یک فایل

پیش میاد بخوایم فقط یک خط به انتهای یک فایلی اضافه کنیم. به جای اینکه به خودمون زحمت بدیم و فایل رو باز کنیم و کپی و پیست و ذخییییره... اووووه، با یه خط دستور میشه این کار رو انجام داد. البته برای تغییر فایل های سیستمی باید در حالت su باشید. با sudo کار نمیکنه.

برای مثال:
 
echo 'custom text' >> /file.txt

حفظ همه تاریخچه های bash

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

 

nano ~/.bashrc

این خط:
export PROMPT_COMMAND='history -a'

 

ترمینال xfce رو متفاوت تر داشته باشید

یه وقتهایی میشه که لازمه ترمینال رو سریع داشته باشیم و مدام جلوی دستمون باشه و در عین حال دست و پا گیر هم نباشه. ترمینال xfce یه امکان جالب داره که بهش میگن drop down. و با این دستور اجرا میشه:
xfce4-terminal --drop-down

یه ترمینال از بالای صفحه اجرا میشه و یه آیکن ترمینال هم توی پنل میاد. اندازه و در دسترس بودن این ترمینال رو میتونین خودتون تنظیم کنین. با ترکیب انیمیشن های compiz هم میتونین جلوه های قشنگی توی باز و بسته شدنش بکنین. با این مقدار: role=xfce4-terminal-dropdown

عکس از وبسایت منبع

ویرایش عکسها در خط فرمان

در این مطلب میخوام یکم در مورد دستور convert در لینوکس بنویسم. این دستور برای ویرایش عکسها است. مثلا تبدیل فرمت اونها، تغییر اندازه اونها، انداختن یک آرم یا اصطلاحا watermark روی عکس ها و ... و... و...
فرض کنیم ما یه فولدر داریم پر از فایل های مثلا png و میخوایم یکم با اونها تمرین کنیم. یه راه اینه که دونه دونه برای هر فایل کارهایی رو که میخوایم انجام بده. و یه راه هم اینه که به ترمینال بگیم هر چی فایل png اینجا میبینی این کارها رو روش انجام بده! مسلما روش دوم بهتره. :)

برای اینکار نیاز داریم مقصودمون رو به زبان ترمینال بهش بگیم! پس اول وارد دایرکتوری مورد نظر میشیم. و بعد مثلا این طوری:

for k in $(ls *.png); do dastoor  $k re-$k; done

این میگه که هر چی فایل که پسوند png دارند رو به عنوان متغیر k در نظر بگیر. و دستور dastoor رو روی متغیر k انجام بده و -re رو در ابتدای اسم فایل جدید بنویس. و تمام. شما میتونین به جای -re هر چیز دیگه ای بنویسین!
حالا این dastoor میتونه هر چی باشه. ما در اینجا میخوایم از convert استفاده کنیم. بنابراین هر دستوری که از این به بعد در زیر میبینید میتونید به جای عبارتی که  زیرش خط کشیده شده بنویسید.

تغییر فرمت عکس های ما به jpg

do convert $k re-$k.jpg


تغییر اندازه اونها به نصف اندازه اصلی

do convert -resize 50% $k re-$k

تغییر اندازه اونها به 800x600

do convert -resize 800x600 $k re-$k

دستور convert کارهای زیادی انجام میده. شما میتونید با man convert اطلاعات لازم رو در این مورد بدست بیارید. همچنین منابع زیادی در اینترنت هست که در مورد این دستور نوشته شده. مثلا اینجا

تبدیل charachter encoding فایل های متنی

سلام.
مشکل از اینجا شروع میشه که اکثر فایل های زیرنویس فارسی دارای encoding از نوع windows-1256 هستند. این باعث میشه که در نرم افزار های پخش فیلم مثل totem یا vlc زیرنویس فارسی درست نشون داده نشه. حتی اگه در تنظیمات vlc گزینه windows-1256 رو انتخاب کرده باشیم باز هم درست نمیشه. این مشکل با یه ورژن خاصی از libfribidi درست میشد. اما نمیدونم چرا در پارسیکس این روش جواب نمیده. برای حل این مشکل، من encoding فایل زیرنویس رو به utf8 تغییر میدم  و در تنظیمات vlc هم utf8 رو انتخاب میکنم. totem هم خودش متوجه خواهد شد. و زیرنویس فارسی درست نشون داده خواهد شد. برای این تغییر:

iconv -f windows-1256 -t utf8 /file-1.srt > /file-2.srt
طبیعتا آدرس فایل ها رو باید جایگزین کنید.

یک راه ساده تر برای این تبدیل، استفاده از یک اسکریپت ساده است. من این اسکریپت رو طبق نیاز خودم تغییر دادم. میتونید اون رو در یک فایل مثلا با نام srtconv ذخیره کنید و اون رو در فولدر usr/bin/  کپی کنید. و از این به بعد برای تبدیل یک زیرنویس به utf8 در خط فرمان تایپ کنید srtconv و بعد از اینتر کردن، آدرس فایلتون رو بهش میدید. اونوقت فایل شما از windows-1256 به utf8 تبدیل میشه و کنار فایل اصلی قرار میگیره.

#!/bin/bash
# get filename
# by AmiNimA  medicamin [at] gmail.com 

echo -n "This converts a file with windows-1256 encoding to UTF8. Enter File path:"
read fileName
 
if [ ! -f $fileName ]; then
  echo "Filename $fileName does not exists"
  exit 1
fi

iconv -f windows-1256 -t utf8 < $fileName > $fileName-NEW

یادتون باشه که مجوز اجرا شدن رو به اسکریپت بدید. شما میتونید با تغییر این اسکریپت کارهای دیگه ای هم انجام بدید!

تنبلی

این مطلب چیز زیاد مهمی نیست، فقط خواستم یه ترفندی رو بگم که کارمون راحت تر شه. میتونید خروجی دستور man رو به یه فایل متنی بدید تا راحت تر بتونید باهاش ور برید! منظورم رو که متوجه میشید؟! مثلا:

man convert > ~/man-convert.txt

نکته: علامت ~ یعنی پوشه ی home یوزر شما.

ترمینال در دسکتاپ

آماده اید یه کار جالب بکنیم؟ به عکس زیر نگاه کنید...

یک دسکتاپ گنوم میبینید که در دسکتاپ شماره چهارش یه ترمینال بازه و کل صفحه تبدیل شده به ترمینال! قشنگه نه؟! پنل بالایی هم autohide شده. سوال. چرا پس توی تسکبار (پایین) ترمینال وجود نداره؟!  اصلا border های ترمینال کجان؟!!

برای اینکه یه همچین چیزی داشته باشید این کار ها رو دنبال کنید:

۱- ترمینال رو باز کنید و یک profile از منوی Edit با نام Transparency بسازید.

۲- در قسمت title and command از پنجره ی ویرایش پروفایل، initial title رو بذارید Transparency و همون جا از منوی کشویی keep initial title رو انتخاب کنید.

۳- در قسمت background هم transparency رو هر چه قدر که میخواید بذارید. (هر چه سمت چپ تر شفاف تر)

۴- حالا برنامه devilspie رو از هر طریقی که بلدید (!) نصبش کنید.

۵- این ها رو اجرا کنید:

mkdir ~/.devilspie

gedit ~/.devilspie/Transparency.ds

۶- حالا فایل Transparency.ds رو با ویرایشگر باز کنید و اینها رو توش ذخیره کنید:

(if (matches (window_name) “Transparency”) (begin maximize undecorate skip_pager skip_tasklist (set_viewport 4)))

۷- برنامه startup manager رو از منو ها پیدا کنید و این دو تا رو بصورت جدا گانه add کنید، تا از این به بعد با روشن شدن سیستم این ترمینال خاص باز شه.

devilspie -a

gnome-terminal --window-with-profile=Transparency

و در آخر میتونید یکبار login کنید تا نتیجه رو ببینید. در حقیقت devilspie برنامه ایه که شما میتونید با ایجاد پروفایل های متعدد نحوه ی باز شدن برنامه های مختلف رو تحت کنترل کامل خودتون بگیرید. مثلا میتونید تعیین کنید هر پنچره ای که توی عنوانش firefox داشت وقتی باز شد، maximize کنش. یا ببرتش توی فلان دسکتاپ. یا minimize کن و اسمش رو هم توی taskbar نیار! میتونید با man devilspie پارامتر های مختلف رو ببینید.

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

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