مقدمه
سیستم عامل های لینوکس و شبیه یونیکس به اندازه کافی خوش شانس هستند که تقریباً جایگزین های اندکی برای هر مؤلفه ای از محیط کار خود دارند. یکی از مؤلفه هایی که کاربران سرور مجازی با آنها بیشتر در ارتباط هستند شل خط فرمان (command line shell) است.
در حالی که اکثر سیستم ها با پوسته bash کار میکنند که مخفف “Bourne again shell” میباشد، گزینه های دیگری نیز وجود دارد که بسیاری از کاربران از بررسی آن سود می برند. شاید در مورد zsh محبوب شنیده باشید که می توانید در این لینک آن را بیاموزید.
یکی دیگر از شل (shel)های فول امکانات، که موضوع این راهنما خواهد بود، fish shell است. fish shell یک شل فرمان مدرن ، جذاب و قدرتمند است که می تواند قابلیت های شل معمولی bash را گسترش دهد. در این راهنما یاد خواهیم گرفت که چگونه این شل جایگزین را نصب ، پیکربندی و استفاده کنید.
ما از اینها به طور مثال در Ubuntu 12.04 VPS استفاده خواهیم کرد ، اما شما به راحتی میتوانید این دستورالعمل را با توزیع انتخاب خود تطبیق دهید.
نحوه نصب fish shell
خوشبختانه برای ما ، مخازن پیش فرض اوبونتو 12.04 شامل بسته های باینریfish هستند.
ما می توانیم با به روز کردن ایندکس پکیج محلی و وارد کردن پکیج به سیستم خود ، آن را به روش مرسوم نصب کنیم:
sudo apt-get update
sudo apt-get install fish

این تنها کاری است که باید انجام دهیم تا shell جدید را به سیستم خود وارد کنیم.
برای شروع کار ، از قسمت فعلی خود fish shell جدیدی را شروع خواهیم کرد. اگر تصمیم بگیرید fish برای شما مناسب است ، بعداً در مورد چگونگی تغییر shell پیش فرض شما بحث خواهیم کرد:
fish
demouser@host ~>

می بینید که اعلان شما تغییر کرده است. به جای “$” به عنوان اعلان یک کاربر عادی ، یک علامت “>” مشاهده خواهید کرد.
با برخی از ویژگی های سطحی آشنا شوید
بلافاصله، می توانیم با مراجعه به روتین های عادی خود در شل ، برخی از مزایای این shell را ببینیم. این مزایا بیشتر توسط کارکردهای گنجانده شده که بعدا به آنها خواهیم پرداخت، انجام می شود.
به عنوان مثال ، اگر محتوای یک دایرکتوری را فهرست کنید ، متوجه خواهید شد که در انتها به طور خودکار با یک کاراکتر پیوست می شوند که نوع فایل را نشان می دهد:
ls
bin/ etc/ lib/ media/ proc/ sbin/ sys/ var/
boot/ home/ lib64/ mnt/ root/ selinux/ tmp/ vmlinuz@
dev/ initrd.img@ lost+found/ opt/ run/ srv/ usr/

این همان خروجی مانند ls-F است که محتویات را بر اساس نوع طبقه بندی می کند.
اگر در یک مسیر فایل اعم از نسبی یا مطلق تایپ کنید ، خواهید دید که fish shell مسیرهای فهرست را زیر نظر دارد تا تفسیر آن با یک نگاه ساده تر شود:
cd /home/demo

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

با این حال ، وقتی “o” نهایی را اضافه می کنید ، آن را به یک فرمان تبدیل می کنید ، و خواهید دید که فوراً سبز می شود. این ویژگی بازخورد مفیدی را برای شما فراهم می کند که می تواند تشخیص علائم را در ابتدای کار آسان کند.
استفاده از عملکرد TAB برای یک زمان ساده تر
همچنین ممکن است متوجه شوید که عملکرد TAB بسیار عالی است:
cd / ## Hit the TAB key at this point
/bin/ (Directory) /media/ (Directory) /srv/ (Directory)
/boot/ (Directory) /mnt/ (Directory) /sys/ (Directory)
/dev/ (Directory) /opt/ (Directory) /tmp/ (Directory)
/etc/ (Directory) /proc/ (Directory) /usr/ (Directory)
/home/ (Directory) /run/ (Directory) /var/ (Directory)
/lib/ (Directory) /sbin/ (Directory)
/lib64/ (Directory) /selinux/ (Directory)

همانطور که می بینید ، fish به طور هوشمندانه فقط دیرکتوری های دستور cd را فهرست می کند، زیرا این ها تنها مقادیر معقول هستند.
اگر از یک فرمان عمومی استفاده می کنیم ، در عوض همه لیست ها (و نوع آنها) را مشاهده می کنیم:
در این مرحله کلید TAB را لمس کنید
touch / ## Hit the TAB key at this point
/bin/ (Directory) /proc/ (Directory)
/boot/ (Directory) /root/ (Directory)
/dev/ (Directory) /run/ (Directory)
/etc/ (Directory) /sbin/ (Directory)
/home/ (Directory) /selinux/ (Directory)
/initrd.img (Symbolic link, 15MB) /srv/ (Directory)
/lib/ (Directory) /sys/ (Directory)
/lib64/ (Directory) /tmp/ (Directory)
/lost+found/ (Directory) /usr/ (Directory)
/media/ (Directory) /var/ (Directory)
/mnt/ (Directory) /vmlinuz (Symbolic link, 5.2MB)
/opt/ (Directory)

یک ویژگی مشابه که مفید است قالب بندی فرمان man میباشد. اگر بخواهیم تمام صفحات man fish را مشاهده کنیم ، می توانیم از عملکرد tab استفاده کنیم:
man fish ## Hit the TAB key at this point
fish (1: the friendly interactive shell)
fish_indent (1: indenter and prettifier)
fish_pager (1: internal command used by fish)
fishd (1: universal variable daemon)

به صورت مشابه، میتوانید با استفاده از هر مرورگر ترمینالی که دارید و با قابلیت کمک داخلی سیستم، از کمک فول امکانات بهره بگیرید:
help
fish home | Main documentation page | Design document | Commands | FAQ |
License

Fish user documentation

1

Table of contents

• Fish user documentation
□ Table of contents
□ Introduction
□ Syntax overview
□ Help
□ Tab completion
در دستگاه من، سیستم کمکی در مرورگر ترمینال w3m باز میشود. شما میتوانید هر لینکی که مثلا در مرورگر عادی باز میکنید دنبال کنید و با تایپ کردن q از آن خارج شودید. اگر برای فرمان خاصی که fish درمورد آن میداند، به کمک احتیاج دارید، فقط کافیست آن را به صورت آرگومان زیر استفاده کنید:
help cd
cd – change directory

Synopsis

cd [DIRECTORY]

Description Changes the current

directory. If DIRECTORY is supplied it will become the new directory. If
DIRECTORY is a relative path, the paths found in the CDPATH environment
variable array will be tried as prefixes for the specified path. If
CDPATH is not set, it is assumed to be ‘.’. If DIRECTORY is not
specified, $HOME will be the new directory.

Back to index.

باز هم میتوانید ببینید کدام دستورات کمکی با استفاده از ویژگی tab در دسترس هستند.
help ## Type a space to let fish know you are finished with the command, and then hit the TAB key at this point
alias (Help for the specified command)
and (Help for the specified command)
begin (Help for the specified command)
bg (Help for the specified command)
bind (Help for the specified command)
block (Help for the specified command)
break (Help for the specified command)
breakpoint (Help for the specified command)
. . .

یک روش متفاوت برای انجام برخی از کارهای معمول
بسیاری از افرادی که سالها از bash و حتی sh استفاده کرده اند ، به روشی که این shell ها کارها را انجام می دهند عادت کرده اند. در حالی که fish بخش عمده ای از سهم این شل ها را به خود اختصاص می دهد ، رفتار را جایی اصلاح می کند که می تواند پیشرفت هایی را ایجاد کند.

rediction ، Piping و Wildcards
یک مثال ساده rediction است (تغییر مسیر) است. تغییر مسیر عادی و pipeها دقیقا مثل bash کار می کنند:
|: خروجی pipe از فرمان در سمت چپ به ورودی فرمان در سمت راست
<: به جای صفحه کلید ، ورودی استاندارد را از فایل سمت راست دریافت می کند
>: به جای صفحه نمایش ، خروجی استاندارد را روی فایل در سمت راست مینویسد
با این حال ، یک تفاوت در نحوه تغییر مسیر خطای استاندارد است. شما این کار را با علامت عیار انجام می دهید:
^: تغییر مسیر خطای استاندارد به محل سمت راست.
این یک راه آسان برای تغییر مسیر توصیف کننده فایل فراهم می کند. به یاد داشته باشید که معمولاً هر توصیف کننده فایل با یک شماره همراه است:
0: ورودی استاندارد. ورودی فرمان شما به طور پیش فرض صفحه کلید است.
1: خروجی استاندارد. خروجی فرمان شما به صورت پیش فرض صفحه نمایش است.
2: خطای استاندارد. خطاهای فرمان شما به طور پیش فرض روی صفحه چاپ می شود.
ما می توانیم توصیف کننده فایل را با استفاده از کاراکتر “&” و پس از آن شماره توصیف کننده ، به جای دیگر تغییر مسیر دهیم.
به عنوان مثال ، می توانیم خروجی استاندارد یک فرمان را به یک فایل تغییر مسیر دهیم و سپس خطای استاندارد آن را به فایل خروجی استاندارد خود بفرستیم و همچنین با تایپ کردن چیزی شبیه به این:
ls /etc >ls_results.txt ^&1

تمام خروجی استاندارد در فایل ls_results.txt قرار داده می شود و سپس خطای استاندارد در محلی تنظیم می شود که خروجی استاندارد هدایت می شود (فایل فوق).
در مورد wildcards ، fish دوباره بیشتر قسمتهای پیش فرض از bash را استفاده می کند. که شامل موارد زیر هستند:
*: هر رشته کاراکتر را که شامل “/” نیست ، مطابقت میدهد.
؟: با هر کاراکتر واحد به جز “/” مطابقت دارد.
یک wildcard اضافی که بسیار مفید است ، wildcard بازگشتی است:
**: هر رشته ای از جمله “/” را مطابقت میدهد.
این کاراکتر می تواند برای این مورد استفاده قرار گیرد که به راحتی قابلیت بازگشتی را به دستورات اضافه کند. حتی اگر ls گزینه بازگشتی داشته باشد ، ما می توانیم این کار را با fish انجام دهیم. با تایپ کردن دستور زیر می توانیم تمام فایل هایی را که به .conf در دیرکتوری /etc خاتمه می یابد را پیدا کنیم:

ls /etc/**.conf
/etc/adduser.conf
/etc/apparmor/subdomain.conf
. . .

در دستگاه من ، دو خط اول خروجی این عمل را نشان می دهد. یکی از فایل ها در دایرکتوری بالایی است که ما جستجو می کردیم و دیگری در زیرشاخه قرار دارد.
ایجاد توابع و نام های مستعار
ما می توانیم توابع و نام های مستعار را در fish با یک ترکیب آسان استفاده کنیم.
قالب اصلی چیزی شبیه به دستور زیر است:
function function_name
function_content
end

اگر می خواهید آرگومان های موجود در عملکرد خود را تجزیه کنید ، باید همه آنها را در متغیر $ argv در کنار هم قرار دهید. آنها به صورت آرایه ذخیره می شوند.
به عنوان مثال ، ما می توانیم تابعی مانند این را ایجاد کنیم که تمام آرگومان هایمان را چاپ کند:
function say_hello
echo hello $argv
end

ما می توانیم این را با یک یا چند آرگومان فراخوانی کنیم و همه آنها را به دستور echo منتقل خواهیم کرد:
say_hello John Doe
hello John Doe

اگر بخواهیم به یک متغیر خاص دسترسی پیدا کنیم ، آن را با شماره مرجع از آرایه آرگومان خارج کنید (در fish ، آرایه ها از 1 شروع می شوند ، نه 0). ما می توانیم اسکریپت قبلی خود را تغییر دهیم تا فقط از آرگومان دوم استفاده کنیم:
function hello_sir
echo hello Mr. $argv[2]
end

سپس می توانیم این تابع را فراخوانی کنیم و نتیجه متفاوتی می گیریم:
hello_sir John Doe
hello Mr. Doe

می توانیم با تایپ کردن دستور زیر همه توابع تعریف شده را مشاهده کنیم:
functions -a

می توانید با تایپ کردن این دستور یکی از توابع خود را حذف کنید:
functions -e function_name

برای نام مستعار ،bash shell دستور خاصی دارد. در fish ، از همان دستور تابع استفاده می شود.
تنها نکته ای که باید بدانید اینست که اگر دستور جانشین فرمانی شود که به آن اشاره دارد، باید دستور داخلی command  را اضافه کنید تا به شل بگویید که به صورت بازگشتی از تابع استفاده نکند بلکه از دستور خارجی استفاده کند.
به عنوان مثال ، اگر دستور cat را برای شماره گذاری به طور پیش فرض بخواهیم، بهتر است دستور را بازتعریف کنیم تا flag را در بر داشته باشد. به یاد داشته باشید که متغیر آرگومان را به گونه ای ارسال کنید که بتواند نام فایلها را به درستی تجزیه کند:
function cat
command cat -n $argv
end
اکنون ، وقتی cat را فرا میخوانیم، خروجی به طور خودکار شماره گذاری می شود:
cat /etc/hosts
1 127.0.0.1 localhost fish fish
2
3 # The following lines are desirable for IPv6 capable hosts
4 ::1 ip6-localhost ip6-loopback
5 fe00::0 ip6-localnet
6 ff00::0 ip6-mcastprefix
7 ff02::1 ip6-allnodes
8 ff02::2 ip6-allrouters

اگر از عملکردی برای غلبه بر پیش فرض های یک فرمان استفاده می کنید ، می توانید از دستور داخلی نیز استفاده کنید تا هرگونه تغییراتی که ایجاد کرده اید را دور بزنید و دستور اصلی را بیابید.
command cat /etc/hosts
127.0.0.1 localhost fish fish

# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

تاریخچه ( (history ساده شده
در حالی که bash مجموعه ای از عملکردهای بسیار پیچیده اما مفید history را ارائه می دهد ، fish این موارد را تجزیه می کند و روی بهبود اصول کار برای رفع مشکلات در حین استفاده کار می کنند.
شما می توانید با استفاده از کلید UP به صورت زمانی در تاریخچه حرکت کنید. با استفاده از کلید DOWN می توانید در جهت معکوس حرکت کنید. این ویژگی نسبتاً استاندارد است.
اگر بخواهیم به تبلیغ خود بازگردیم ، فقط کافیست کلید space را بزنیم.
همچنین می توانیم در بخشی از دستور قبلی تایپ کنیم و سپس کلید UP را فشار دهیم تا آخرین نمونه های آن فرمان خاص را جستجو کنیم.
علاوه بر این ، می توانیم از دستورات ALT-UP و ALT-DOWN استفاده کنیم تا فقط آرگومان های خط فرمان را فراخوانی کنیم.
به عنوان مثال ، اگر محتوای یک دیرکتوری را فهرست کرده باشیم:
ls /etc
acpi/ groff/ ltrace.conf rmt*
adduser.conf group magic rpc
alternatives/ group- magic.mime rsyslog.conf
apm/ grub.d/ mailcap rsyslog.d/
apparmor/ gshadow mailcap.order screenrc
. . .

میفهمیم که این دایرکتوری مورد نظر ماست و اکنون می خواهیم به آن سوییچ کنیم. می توانیم با وارد کردن دستور جدید شروع کنیم:
cd # Don’t press return yet

اکنون می توانیم با زدن کلیدهای ALT-UP ، آرگومان های آخرین دستور را وارد کنیم:
cd # Hit Alt-UP and get…

cd /etc

این یک مثال بسیار ساده است ، اما می بینید که چگونه این مسئله می تواند فوق العاده مفید باشد ، به خصوص که می توانید آرگومان های فرمان قبلی را حرکت دهید.
نوع دیگری از تاریخچه که fish ارائه می دهد تاریخچه دیرکتوری است. این یک ویژگی عالی است که به شما امکان می دهد اساساً از طریق تاریخچه cd خود به فهرست های قبلی بروید.
می توانید تاریخچه دیرکتوری خود را با تایپ کردن دستور زیر مشاهده کنید:
dirh

می توانید با فشار دادن ALT-LEFT و ALT-RIGHT در هنگام فرمان خالی ، در تاریخچه دیرکتوری خود به عقب و جلو بروید. این به شما امکان می دهد تا به راحتی بین دایرکتوری ها چرخ بزنید.
ایجاد پرونده های پیکربندی و تغییر shell پیش فرض شما
اگر از fish shell لذت برده باشید، احتمالاً می خواهید برخی موارد سفارشی را برای شکل دادن به محیط خود بگنجانید.
در حالی که ممکن است به تنظیمات خاصی در فایل های ~/.bashrc یا ~ / .bash_profile خود عادت کرده باشید ، این موارد برای این shell ها استفاده نمی شود.
برای پیکربندی تنظیمات برگزیده خود ، باید پرونده ای در ~ / .config / fish / config.fish ایجاد کنید. تمام فایل های پیکربندی fish باید به .fish ختم شوند. معمولاً وقتی برای اولین بار از شل استفاده می کنید مسیر ~ / .config / fish / path ایجاد می شود.
اگر مایل به شروع با یک فایل مثال هستید ، می توانید آن را از دیرکتوری پکیج fish کپی کنید:
cp /usr/share/fish/config.fish ~/.config/fish

سپس می توانید آن را مانند هر فایل دیگر ویرایش کنید:
nano ~/.config/fish/config.fish

هنگامی که با فایل آشنا شدید، احتمالاً باید هر چیزی را که شخصاً سفارشی نکرده اید ، حذف کنید.
بهتر است توابع را مستقیماً به این فایل پیکربندی اضافه نکنید. درعوض ، باید یک دایرکتوری به نام functions در فهرست تنظیمات fish خود ایجاد کنید:
mkdir ~/.config/fish/functions

در داخل این دیرکتوری ، برای هر یک از توابع مورد نظر خود ، فایل ایجاد کنید. تا زمانی که هر پرونده با .fish تمام شود ، shell آنها را پیدا کرده و آنها را در محیط خود می گنجاند. هر تابع باید در فایل خود بدون هیچ فایل دیگر قرار گیرد.
به عنوان مثال ، می توانیم پرونده ای را ایجاد کنیم تا عملکرد hello_sir در هر بخش برای کاربر ما فراهم شود ، می توانیم این را تایپ کنیم (قبل از ادامه ، به یاد داشته باشید که اگر این کار را نکرده اید ، نام مستعار cat را که قبلاً درست کرده اید با set -e cat جایگزین کنید. قبلا، پیش از این
cat > ~/.config/fish/functions/hello_sir.fish
function hello_sir
echo hello Mr. $argv[2]
end

پس از تایپ end، CTRL-D را بزنید تا ورودی پایان یابد. اکنون با هر بار لود شدن shell در دسترس خواهد بود. اگر می خواستیم تابع say_hello خود را نیز اضافه کنیم ، به یک فایل جداگانه احتیاج داریم.

اگر به برخی از الهامات نیاز دارید ، می توانید به عملکردهای پیش فرض fish نگاهی بیندازید:
cd /usr/share/fish/functions
ls

پس از اینکه shell خود را به دلخواه پیکربندی کردید ، میتوانید از fish به عنوان شل پیش فرض خود استفاده کنید. برای این کار می توانید از دستور chsh استفاده کنید.
ابتدا باید مسیر shell fish را بدانیم:
which fish
/usr/bin/fish

در مرحله بعد می توانیم shell خود را با تایپ دستور زیر تغییر دهیم:
chsh -s /usr/bin/fish

از شما خواسته می شود رمز عبور خود را تأیید کنید. پس از اتمام این کار ، هر بار که وارد شوید ، سریعاً به شما اعلان fish داده می شود.
اگر می خواهید به شل دیگر خود برگردید ، می توانید آن را به روش مشابه مشخص کنید:
chsh -s /bin/bash

نتیجه
در حال حاضر ، باید با اصول اولیه استفاده از shell fish آشنا باشید. و این یک پیش زمینه خوب برای بسیاری از افراد است ، زیرا به قواعدی مقید است که منطقی میباشد ، اما عملکردی را می افزاید که shell های قبلی جای بهبود دارند.
قطعاً چیزهای بیشتری برای یادگیری وجود دارد ، اما شما باید پایه و اساس خوبی برای آموزش های بعدی داشته باشید. به یاد داشته باشید که از سیستم کمکی عالی که از طریق فرمان help در دسترس

 

از این لینک ها زیر می توانید آمورش های بیشتری برای لینوکس پیدا کنید :

چگونه می توان با کتابخانه (library) درخواست ها در پایتون شروع به کار کرد

نحوه اجرای صفحه گذاری در MySQL با PHP روی اوبونتو 18.04

نحوه تنظیم پلتفرم Eclipse Theia Cloud IDE در CentOS 7

بسته بندی برنامه Laravel 6 برای توسعه با Docker Compose در اوبونتو 18.04

نحوه بهینه سازی درخواست های MySQL با ذخیره سازی ProxySQL در اوبونتو 16.04

نحوه استفاده از Ansible برای نصب و راه اندازی وردپرس با LAMP در اوبونتو 18.04

چگونه می توان پلتفرم كد سرور Cloud IDE را در اوبونتو 18.04 تنظیم كرد (شروع سریع)

چگونه می توان از رول های ansible برای انتزاع محیط زیرساختی خود استفاده کرد

نحوه پیکربندی یک خوشه Galera با MySQL در سرورهای اوبونتو 18.04

نحوه تهیه نسخه پشتیبان و بازیابی یک خوشه Kubernetes در vpsgol با استفاده از Velero

نحوه نصب و استفاده از PostgreSQL در CentOS 7

چگونه می توان پلتفرم Eclipse Theia Cloud IDE را روی اوبونتو 18.4 تنظیم کرد

نحوه استقرار و مدیریت DNS با استفاده از DNSControl در Debian 10

چگونه می توان پلتفرم Cloud IDE کد سرور را روی CentOS 7 تنظیم كرد

نحوه نصب Apache Kafka در Debian 10

نحوه نصب وردپرس با OpenLiteSpeed ​​در اوبونتو 18.04

چگونه پیکربندی SSH Daemon خود را بر روی یک VPS لینوکس تنظیم کنید

کلمات کلیدی خرید سرور

خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکا – خرید سرور مجازی

برچسب‌ها:, ,