خاصیت Tab Completion
یک ویژگی کاربردی که سبب افزایش سرعت و عملکرد کاربران در خط فرمان می گردد. بدین صورت که با تایپ قسمتی از ابتدای دستور، نام فایل، نام دایرکتوری یا سوئیچ یک دستور و استفاده از کلید tab، آنها را تکمیل کرده و یا گزینه های در دسترس را پیشنهاد می دهد.
* مکانیزم استفاده از کلید tab :
اگر عبارت تایپ شده تنها به یک گزینه محدود شود، یکبار فشردن کلید tab آنرا کامل می کند. اما اگر بیش از یک گزینه با این عبارت شروع شوند، با دوبار زدن کلید tab، لیست گزینه ها نمایش می یابد. با بیان مثال، به بررسی این موضوع می پردازیم.
& استفاده از کلید tab در تایپ دستور whereis : در خط فرمان کاراکتر w را تایپ کرده و کلید tab را دوبار می زنیم. با این کار تمامی دستوراتی که با کاراکتر w شروع می شوند، برای کاربر به نمایش در می آیند.
w<tab><tab>
w wftopfa whois wsgen
wait wget wipe wsimport
wall whatis wipefs wvdial
watch whereis withsctp wvdialconf
watchgnupg which wodim wvgain
wavpack while wpa_cli wvtag
wc whiptail wpa_passphrase wvunpack
wdctl who wpa_supplicant
weak-modules whoami write
در ادامه با تایپ کاراکتر h و دوبار زدن کلید tab، لیست بالا محدود شده و فقط دستوراتی که با wh شروع می شوند، در لیست پیشنهادی قرار می گیرند.
wh<tab><tab>
whatis which whiptail whoami
whereis while who whois
در نهایت با تایپ کارکتر e و یکبار فشردن کلید tab، دستور whereis کامل می شود.
whe<tab> => whereis
& استفاده از کلید tab برای تغییر مکان به دایرکتوری etc/systemd/ :
cd /e<tab> => cd /etc/
cd /etc/sys<tab><tab>
sysconfig/ sysctl.d/ systemd/
cd /etc/syst<tab> => cd /etc/systemd/
شرح دستورات بالا : در سطر اول بعد از تایپ حرف e و فشردن کلید tab، نام دایرکتوری etc در خط فرمان قرار می گیرد. این موضوع به این دلیل است که تنها یک دایرکتوری در مسیر / قرار دارد که با حرف e شروع می شود. در سطر دوم بعد از وارد کردن کلمه sys، زدن یکبار کلید tab بی تاثیر می باشد، ولی اگر دوبار از کلید tab استفاده شود، لیست دایرکتوری های که با عبارت sys شروع می شوند، برای کاربر به نمایش در می آید. در سطر سوم با وارد کردن حرف t و فشردن کلید tab، نام دایرکتوری systemd در خط فرمان قرار می گیرد.
* چند نمونه از کاربردهای خاصیت Tab Completion را در زیر مشاهده می کنید.
& هنگام کار بر روی فایل های که دارای نام طولانی، پیچیده و همراه با کاراکترهای خاص باشند، این خاصیت بسیار مفید است.
ls
test_file LearnLinux_TabCompletion_1398-04-25.pdf
vi L<tab> => vi LearnLinux_TabCompletion_1398-04-25.pdf
در مثال بالا دو فایل در مکان جاری قرار دارند و کاربر برای ویرایش فایلی با نام طولانی، فقط عبارت vi L را تایپ کرده و با فشردن کلید tab، نام فایل کامل می شود.
& برای نمایش لیست کاربران سیستم، کافیست کاراکتر ~ را تایپ کرده و کلید tab را دوبار بزنید.
~<tab><tab>
~abrt/ ~geoclue/ ~operator/ ~sshd/
~adm/ ~halt/ ~polkitd/ ~sync/
~avahi ~lightdm/ ~postgres ~systemd-coredump/
~bin/ ~lp/ ~pulse ~systemd-network/
~chrony/ ~mail/ ~root/ ~systemd-resolve/
~colord/ ~masih/ ~rpc ~systemd-timesync/
~daemon/ ~rpcuser/ ~tcpdump/
~dbus/ ~rtkit/ ~unbound/
~ftp/ ~nobody/ ~setroubleshoot/
~games/ ~openvpn/ ~shutdown/
& جهت نمایش لیست متغیرهای سیستم، کافیست کاراکتر $ را تایپ کرده و کلید tab را دوبار بزنید.
$<tab><tab>
$_ $LINES
$BASH $LS_COLORS
$BASH_ARGC $MAIL
$BASH_ARGV $MAILCHECK
$BASH_CMDS $OPTERR
$BASH_COMMAND $OPTIND
$BASH_LINENO $PATH
$BASHOPTS $PIPESTATUS
$BASHPID $PPID
$BASH_SOURCE $PS1
$BASH_SUBSHELL $PS2
$BASH_VERSINFO $PS4
…
& بصورت زیر می توان دستگاه هایی که در فایل hosts تعریف شده اند، را لیست نمود. ( فایل hosts در مسیر etc/ قرار دارد و برای تبدیل نام به آدرس IP استفاده می شود)
@<tab><tab>
@::1 @localhost4 @localhost6.localdomain6
@DBS_Server @Guard_1 @localhost.localdomain
@localhost @localhost6
* غیرفعال نمودن خاصیت Tab Completion برای همه کاربران :
& روش اول : با ویرایش فایل etc/inputrc/ و درج عبارت مشخص شده در پایین، این خاصیت برای همه کاربران سیستم غیرفعال می شود.
vi /etc/inputrc
set disable-Completion on
نکته : از فایل inputrc در زمان ایجاد یک Bash، برای پیکربندی نقش کلیدهای صفحه کلید استفاده می گردد. (بطور مثال نقش کلیدهای Ctrl+d، خروج از Session فعلی می باشد)
نکته : تغییر ایجاد شده، در Session های جدید کاربران اعمال می گردد.
& روش دوم : با ویرایش یکی از فایل های پیکربندی سیستم (مانند etc/bashrc/) و درج یکی از دستورات زیر، می توان خاصیت Tab Completion را برای همه ی کاربران غیرفعال نمود.
vi /etc/bashrc
bind 'set disable-Completion on'
یا
bind -u complete
* غیرفعال نمودن خاصیت Tab Completion برای یک کاربر خاص :
& روش اول : اینکار با افزودن عبارت زیر به فایل inputrc. در Home Directory هر کاربر، قابل انجام می باشد.
vi ~/.inputrc
set disable-Completion on
نکته : تنظیمات انجام شده در فایل inputrc./~ نسبت به فایل etc/inputrc/ ارجحیت دارند.
& روش دوم : درج یکی از دو دستور زیر در فایل bashrc./~ ، سبب غیرفعال شدن خاصیت Tab Completion برای یک کاربر خاص می شود.
vi ~/.bashrc
bind 'set disable-Completion on'
یا
bind -u complete
* غیرفعال نمودن خاصیت Tab Completion در یک Session :
& این موضوع با اجرای یکی از دستورات زیر قابل انجام می باشد.
Bash --noediting
یا
bind 'set disable-Completion on'
یا
bind -u complete
نکته : جهت فعال نمودن دوباره خاصیت Tab Completion، می توان عبارت درج شده در فایل های پیکربندی را حذف کرده و یا به عبارت زیر تغییر داد.
set disable-Completion off
* غیرفعال نمودن حساسیت به حروف کوچک و بزرگ (Case Sensitive) در زمان استفاده از خاصیت Tab Completion:
همانطور که می دانید حروف کوچک و بزرگ در لینوکس متفاوت می باشند، این ویژگی در استفاده از خاصیت Tab Completion نیز صادق است. در مثال زیر به بررسی این موضوع می پردازیم.
با دستور زیر چهار فایل ساخته می شوند.
touch Amir ahmad Abbas ali
در خروجی دستورات زیر مشخص است که حروف بزرگ و کوچک موثر می باشند.
vi a<tab><tab>
ahmad ali
vi A<tab><tab>
Abbas Amir
برای غیرفعال نمودن خاصیت Tab Completion، عبارت زیر را در فایل etc/inputrc/ قرار می دهیم.
vi /etc/inputrc
set completion-ignore-case on
بعد از اعمال تغییرات بالا، غیرفعال شدن خاصیت Case Sensitive، در خروجی دستورات زیر مشخص می باشد.
vi a<tab><tab>
Abbas ahmad ali Amir
vi A<tab><tab>
Abbas ahmad ali Amir