| DICTD(8) | DICTD(8) |
نام (NAME)
dictd - سرور پایگاهداده واژهنامه
خلاصه دستور (SYNOPSIS)
dictd [گزینهها]
توضیحات (DESCRIPTION)
dictd یک سرور برای پروتکل سرور واژهنامه (DICT) است؛ یک پروتکل پرسوجو/پاسخ مبتنی بر تراکنشهای TCP که به کلاینت امکان میدهد به تعاریف واژگان از مجموعهای از پایگاههای داده لغتنامه زبان طبیعی دسترسی داشته باشد.
به دلایل امنیتی، dictd پس از راهاندازی، دسترسیهای کاربر ریشه (root) را رها میکند. اگر کاربر dictd روی سیستم وجود داشته باشد، دیمن تحت عنوان آن کاربر و گروه dictd اجرا خواهد شد، در غیر این صورت تحت عنوان کاربر nobody و گروه nobody یا nogroup (بسته به توزیع سیستمعامل) اجرا میشود.
از آنجا که زمان راهاندازی اولیه قابل توجه است، این سرور به گونهای طراحی شده است که به صورت مداوم اجرا شود و نباید از طریق inetd(8) اجرا گردد. (با این حال، در صورت استفاده از پردازندهای سریع، انجام این کار امکانپذیر است.)
پایگاههای داده به صورت جداگانه از سرور توزیع میشوند.
به طور پیشفرض، dictd فرض میکند که فایلهای نمایه (index) به ترتیب حروف الفبا مرتب شدهاند و تنها نویسههای حرفیعددی از مجموعه نویسههای اسکی ۷-بیتی (7-bit ASCII) برای جستجو استفاده میشوند. این پیشفرض میتواند توسط یک هدر در فایل داده لغو شود. تنها ویژگیهایی از این دست که در حال حاضر پیادهسازی شدهاند، هدر "00-database-allchars" است که به dictd اعلام میکند نویسههای غیر حرفیعددی نیز ممکن است برای جستجو استفاده شوند، هدر "00-database-utf8" که نشان میدهد پایگاهداده از کدگذاری utf8 استفاده میکند، و هدر "00-database-8bit-new" که نشان میدهد پایگاهداده طبق یک محلیسازی (locale) که از کدگذاری ۸-بیتی استفاده میکند، کدگذاری و مرتبسازی شده است.
پیشزمینه (BACKGROUND)
سالهای متمادی، جامعه اینترنت برای دسترسی به تعاریف زبان طبیعی به پروتکل «webster» متکی بود. پروتکل webster از دسترسی به یک لغتنامه منفرد و (به صورت اختیاری) یک اصطلاحنامه (thesaurus) پشتیبانی میکرد. در سالهای اخیر، تعداد سرورهای webster که به صورت عمومی روی اینترنت در دسترس هستند به شدت کاهش یافته است.
خوشبختانه اخیراً چندین لغتنامه و فرهنگ واژگان با قابلیت توزیع آزاد بر روی اینترنت در دسترس قرار گرفتهاند. با این حال، این پایگاههای داده با توزیع آزاد از طریق یک رابط یکپارچه قابل دسترسی نیستند و از یک سایت واحد در دسترس قرار ندارند. آنها اغلب به صورت انفرادی کوچک و ناکامل هستند، اما در کنار یکدیگر میتوانند یک پایگاهداده کاربردی و ارزشمند از واژگان انگلیسی را فراهم آورند. به عنوان نمونه میتوان به فایل Jargon، پایگاهداده WordNet، نسخه سال ۱۹۱۳ وبستر از MICRA (لغتنامه بازبینیشده و کامل وبستر) و Free Online Dictionary of Computing اشاره کرد. (برای مراجع، به مشخصات پروتکل DICT در RFC مراجعه فرمایید.) لغتنامههای ترجمه و غیرانگلیسی نیز در حال در دسترس قرار گرفتن هستند (برای مثال، لغتنامه FOLDOC در حال ترجمه به زبان اسپانیایی است).
پروتکل webster برای فراهم آوردن دسترسی به تعداد زیادی از پایگاههای داده واژهنامه مجزا مناسب نیست و افزودن افزونهها به پروتکل فعلی webster راهحلی تمیز برای مسئله پایگاهداده واژهنامه به شمار نمیرفت.
پروتکل DICT برای فراهم آوردن دسترسی به چندین پایگاهداده طراحی شده است. تعاریف کلمات را میتوان درخواست کرد، نمایه کلمات را میتوان جستجو نمود (با استفاده از مجموعهای از الگوریتمها که به راحتی قابل گسترش هستند)، اطلاعات مربوط به سرور را میتوان دریافت کرد (مثلاً اینکه کدام راهبردهای جستجوی نمایه پشتیبانی میشوند یا کدام پایگاههای داده در دسترس هستند) و اطلاعات مربوط به یک پایگاهداده را میتوان به دست آورد (مانند کپیرایت، ارجاع، یا اطلاعات توزیع). علاوه بر این، پروتکل DICT دارای قلابهایی (hooks) است که میتوان از آنها برای محدود کردن دسترسی به برخی یا همه پایگاههای داده استفاده کرد.
dictd(8) سروری است که پروتکل DICT را پیادهسازی میکند. برت مارتین (Bret Martin) سرور دیگری را پیادهسازی کرده است و چندین نفر (از جمله برت و من) کلاینتهایی را به زبانهای گوناگون پیادهسازی کردهاند.
گزینهها (OPTIONS)
- -V یا --version
- نمایش اطلاعات نسخه.
- --license
- نمایش اطلاعات کپیرایت و مجوز.
- -h یا --help
- نمایش اطلاعات راهنما.
- -v یا --verbose یا -dverbose
- حالت پرگو (نمایش اطلاعات با جزئیات بیشتر).
- -c file یا --config file
- مشخص کردن فایل پیکربندی. مقدار پیشفرض /etc/dict/dictd.conf است، اما میتواند هنگام کامپایل در فایل defs.h تغییر کند (DICTD_CONFIG_FILE).
- -p port یا --port port
- کلیدواژه port را در بخش مشخصات تنظیمات سراسری (Global Settings Specification) فایل پیکربندی لغو (override) میکند.
- -i یا --inetd
- برقراری ارتباط از طریق ورودی/خروجی استاندارد، مناسب برای استفاده از طریق inetd. اگرچه با توجه به زمان راهاندازی نسبتاً طولانی، این دیمن برای اجرا از طریق inetd طراحی نشده است، اما با یک پردازنده سریع انجام این کار امکانپذیر است. این گزینه همچنین به صورت ضمنی شامل --fast-start نیز میشود.
- --pp prog
- یک پیشپردازنده برای فایل پیکربندی تعیین میکند؛ مانند m4 یا cpp. فایل examples/dictd_complex.conf را در بسته توزیعشده ببینید. به طور پیشفرض، فایل پیکربندی بدون پیشپردازنده تجزیه میشود.
- --depth length
- کلیدواژه depth را در بخش مشخصات تنظیمات سراسری (Global Settings Specification) فایل پیکربندی لغو میکند.
- --delay seconds
- کلیدواژه delay را در بخش مشخصات تنظیمات سراسری (Global Settings Specification) فایل پیکربندی لغو میکند.
- --facility facility
- معادل کلیدواژه syslog_facility در بخش مشخصات تنظیمات سراسری (Global Settings Specification) فایلهای پیکربندی است.
- -f یا --force
- وادار کردن دیمن به راهاندازی، حتی اگر نمونه دیگری از دیمن در حال اجرا باشد. (این گزینه کاربرد چندانی ندارد مگر اینکه یک درگاه غیر پیشفرض با -p مشخص شده باشد؛ چرا که اگر یک نمونه به درگاه متصل شده باشد، نمونه دوم هنگامی که نتواند به درگاه متصل شود با خطا مواجه خواهد شد.)
- --limit children
- کلیدواژه limit را در بخش مشخصات تنظیمات سراسری (Global Settings Specification) فایل پیکربندی لغو میکند.
- --listen-to host
- کلیدواژه listen_to را در بخش مشخصات تنظیمات سراسری (Global Settings Specification) فایل پیکربندی لغو میکند.
- --address-family family
- کلیدواژه address_family را در بخش مشخصات تنظیمات سراسری (Global Settings Specification) فایل پیکربندی لغو میکند.
- --locale locale
- کلیدواژه locale را در بخش مشخصات تنظیمات سراسری (Global Settings Specification) فایل پیکربندی لغو میکند.
- -s
- معادل کلیدواژه syslog در بخش مشخصات تنظیمات سراسری (Global Settings Specification) فایلهای پیکربندی است.
- -L file یا --logfile file
- معادل کلیدواژه log_file در بخش مشخصات تنظیمات سراسری (Global Settings Specification) فایلهای پیکربندی است.
- --pid-file file
- معادل کلیدواژه pid_file در بخش مشخصات تنظیمات سراسری (Global Settings Specification) فایلهای پیکربندی است.
- -m minutes یا --mark minutes
- کلیدواژه timestamp را در بخش مشخصات تنظیمات سراسری (Global Settings Specification) فایل پیکربندی لغو میکند.
- --default-strategy strategy
- کلیدواژه default_strategy را در بخش مشخصات تنظیمات سراسری (Global Settings Specification) فایل پیکربندی لغو میکند.
- --without-strategy strat1,strat2,...
- معادل کلیدواژه without_strategy در بخش مشخصات تنظیمات سراسری (Global Settings Specification) فایلهای پیکربندی است.
- --add-strategy strategy_name:description
- معادل کلیدواژه add_strategy در بخش مشخصات تنظیمات سراسری (Global Settings Specification) فایلهای پیکربندی است.
- --fast-start
- معادل کلیدواژه fast_start در بخش مشخصات تنظیمات سراسری (Global Settings Specification) فایلهای پیکربندی است.
- --without-mmap
- معادل کلیدواژه without_mmap در بخش مشخصات تنظیمات سراسری (Global Settings Specification) فایلهای پیکربندی است.
- --stdin2stdout
- هنگامی که همراه با --inetd به کار رود، هر دستوری که از ورودی استاندارد (stdin) دریافت شود در خروجی استاندارد (stdout) نیز چاپ میگردد. این گزینه برای اشکالزدایی سودمند است.
- -l option یا --log option
- معادل کلیدواژه log_option در بخش مشخصات تنظیمات سراسری (Global Settings Specification) فایلهای پیکربندی است.
- -d option
- معادل کلیدواژه debug_option در بخش مشخصات تنظیمات سراسری (Global Settings Specification) فایلهای پیکربندی است.
فایل پیکربندی (CONFIGURATION FILE)
- مقدمه
- مسیر پیشفرض فایل پیکربندی /etc/dict/dictd.conf است، اما میتوان آن را در خط فرمان با گزینه -c (به بالا رجوع شود) مشخص کرد.
فایل پیکربندی در زمان راهاندازی در حافظه بارگذاری میشود و دیگر توسط dictd مورد ارجاع قرار نمیگیرد مگر اینکه سیگنال ۱ (SIGHUP) دریافت شود؛ این سیگنال موجب میشود dictd فایل پیکربندی را دوباره بخواند.
این فایل به بخشهای مختلفی تقسیم شده است. بخش دسترسی (Access Section) باید در ابتدا قرار گیرد و پس از آن بخش پایگاهداده (Database Section) و سپس بخش کاربران (User Section) میآیند. بخش پایگاهداده الزامی است؛ بخشهای دیگر اختیاری هستند، اما باید به ترتیبی که در اینجا فهرست شده است قرار گیرند.
- نحو و ساختار (Syntax)
- کلیدواژههای زیر در فایل پیکربندی معتبر هستند: access، allow، deny، group، database، data، index، filter، prefilter، postfilter، name، include، user، authonly، site. این کلیدواژهها به حروف بزرگ و کوچک حساس هستند. آرگومانهای رشتهای که حاوی فاصله هستند باید درون علامت نقلقول جفتی قرار گیرند. بدون استفاده از نقلقول، رشتهها میتوانند حاوی نویسههای حرفیعددی و _، -، . و * باشند، اما فاصله مجاز نیست. رشتهها میتوانند در چندین خط ادامه یابند. \"، \\، \n و \<NL> به ترتیب به عنوان علامت نقلقول، بکاسلش، خط جدید و بدون نماد در نظر گرفته میشوند. توضیحات با # آغاز شده و تا انتهای خط ادامه مییابند.
- بخش تنظیمات سراسری (Global Settings Section)
- global { مشخصات تنظیمات سراسری }
- برای اعمال تنظیمات سراسری dictd مانند فایل ثبت گزارش (log file)، امکانات syslog، محلیسازی (locale) و مواردی از این دست استفاده میشود.
- مثال:
- فایل examples/dictd4.conf موجود در بسته توزیع را مشاهده کنید.
- بخش دسترسی (Access Section)
- access { مشخصات دسترسی }
- این بخش حاوی محدودیتهای دسترسی به سرور و کلیه پایگاههای داده به صورت مشترک است. کنترل دسترسی به ازای هر پایگاهداده به طور مجزا، در بخش پایگاهداده مشخص میشود.
- مثال:
- فایل examples/dictd3.conf موجود در بسته توزیع را مشاهده کنید.
- بخش پایگاهداده (Database Section)
- database string { مشخصات پایگاهداده }
- رشته (string) نام پایگاهداده را مشخص میکند (مانند wn یا web1913). (این یک نام اختیاری و دلخواه است که توسط مدیر سیستم انتخاب میشود و الزاماً با نام فایل یا هر نامی که در فایل داده آمده ارتباطی ندارد. اغلب یک نام کوتاه با تایپ آسان برای استفاده راحتتر با dict -d انتخاب میشود.)
نکته: اگر فایلهای مشخصشده در تعاریف پایگاهداده روی سیستم وجود نداشته باشند، dictd ممکن است بدون هیچ پیامی با خطا متوقف شود.
- database_virtual string { مشخصات پایگاهداده مجازی }
- این بخش پایگاهداده مجازی را مشخص میکند. string نام پایگاهداده را مشخص مینماید (مانند en-ru یا fren).
- database_plugin string { مشخصات افزونه }
- این بخش افزونه را مشخص میکند. string نام پایگاهداده را مشخص مینماید.
- database_mime string { مشخصات mime }
- به طور سنتی، پایگاههای داده ایجاد شده برای dictd تنها حاوی متن ساده بودند، زیرا نسخههای dictd پیش از 1.10.0 از گزینه OPTION MIME به طور کامل پشتیبانی نمیکردند (به RFC-2229 رجوع کنید). این بخش پایگاهداده ویژهای را شرح میدهد که رفتار آن بسته به اینکه دستور OPTION MIME از کلاینت دریافت شده باشد یا خیر، متفاوت خواهد بود؛ به این معنا که پایگاهداده ایجاد شده در این بخش امکان بازگرداندن متن ساده یا محتوای با قالببندی ویژه به کلاینت را بسته به اینکه کلاینت DICT از محتوای MIME پشتیبانی میکند (یا مایل به دریافت آن است) یا خیر فراهم میسازد. string نام پایگاهداده را مشخص میکند.
نکته: تمام این موارد صرفاً مربوط به دستور DEFINE است. دستورات MATCH, SHOW DB, SHOW STRAT, SHOW INFO, SHOW SERVER و HELP متنها را تنها با یک خط خالی در ابتدا برمیگردانند.
- database_exit
- پایگاههای داده پس از خود را از پایگاهداده '*' مستثنی میکند. به طور پیشفرض، '*' به معنای تمام پایگاههای داده موجود است. برای مشاهده نمونه پیکربندی به فایل 'examples/dictd_virtual.conf' مراجعه کنید.
نکته: اگر از واژهنامههای مجازی استفاده میکنید، باید از این دستورالعمل استفاده کنید؛ در غیر این صورت یک واژهنامه را دو بار جستجو خواهید کرد.
- بخش کاربران (User Section)
- user string string
- رشته اول نام کاربری را مشخص میکند و رشته دوم رمز مشترک (shared secret) برای این نام کاربری را تعیین مینماید. هنگامی که از دستور AUTH استفاده میشود، کلاینت نام کاربری و نسخه درهمسازیشده (hashed) رمز مشترک را ارسال میکند. اگر رمز مشترک مطابقت داشته باشد، کاربر احراز هویت شده تلقی میشود و به پایگاههای دادهای که مشخصات دسترسی آنها به آن کاربر اجازه میدهد (بر اساس نام یا با نویسههای عام) دسترسی خواهد داشت. در صورت وجود، این بخش باید به عنوان آخرین بخش در فایل پیکربندی قرار گیرد. ورودیهای متعددی از کاربر میتواند وجود داشته باشد. رمز مشترک باید محرمانه بماند، زیرا هر کسی که به آن دسترسی داشته باشد میتواند به پایگاههای داده مشترک دسترسی پیدا کند (به شرطی که دسترسی بر اساس نام دامنه مسدود نشده باشد).
- مشخصات دسترسی (Access Specification)
برای دستورات allow، deny و authonly، میتوان از ستاره (*) به عنوان نویسه عام برای تطبیق با هر تعداد نویسه استفاده کرد. علامت سوال (؟) میتواند به عنوان نویسه عام برای تطبیق با یک نویسه منفرد استفاده شود. برای مثال، 10.0.0.* و *.edu رشتههای معتبری هستند.
علاوه بر این، میتوان محدودهای از آدرسهای IP و یک آدرس IP به همراه ماسک شبکه (netmask) را مشخص کرد. به عنوان مثال، 10.0.0.0:10.0.0.255، 10.0.0.0/24 و 10.0.0.* همگی دامنه یکسانی از شمارههای IP را مشخص میکنند. این نمادها نمیتوانند در یک خط با یکدیگر ترکیب شوند. اگر نمادگذاری نامفهوم باشد، دسترسی به طور پیشفرض رد خواهد شد. برای اشکالزدایی مشکلات مربوطه از گزینه --debug auth استفاده کنید.
توجه داشته باشید که این تعاریف در هر خط مشخصات فقط یک رشته میپذیرند. با این وجود، میتوانید خطوط متعددی از هر نوع داشته باشید.
نحو و ساختار به شرح زیر است:
- allow string
- این رشته نام دامنه یا آدرس IP مجاز برای دسترسی به سرور (در بخش Access) یا به یک پایگاهداده (در بخش Database) را مشخص میکند. توجه داشته باشید که بیش از یک رشته در یک خط "allow" مجاز نیست، اما خطوط متعدد "allow" در فایل پیکربندی مجاز هستند.
- deny string
- این رشته نام دامنه یا آدرس IP مسدودشده برای دسترسی به سرور (در بخش Access) یا به یک پایگاهداده (در بخش Database) را مشخص میکند. توجه داشته باشید که اگر DNS معکوس کار نکند، تنها شماره IP بررسی خواهد شد. بنابراین، ضروری است که مسدودسازی شبکهها بر اساس شماره IP انجام شود، زیرا مسدودسازی بر اساس نام دامنه ممکن است همیشه قابل بررسی نباشد.
- authonly string
- این حالت فقط در بخش Access کاربرد دارد. این رشته نام دامنه یا آدرس IP را مشخص میکند که مجاز به دسترسی به سرور است اما اجازه دسترسی به هیچیک از پایگاههای داده را ندارد. تمام دستورات به جز DEFINE، MATCH و SHOW DB معتبر هستند. به طور مشخصتر، AUTH دستوری معتبر است و دستوراتی که به پایگاههای داده دسترسی دارند مجاز نیستند.
- user string
- این حالت فقط در بخش Database کاربرد دارد. این رشته نام کاربری را مشخص میکند که پس از اجرای موفقیتآمیز دستور AUTH، مجاز به دسترسی به این پایگاهداده است.
- مشخصات تنظیمات سراسری (Global Settings Specification)
- port string_or_number
- درگاه یا نام سرویس را مشخص میکند (مانند 2628). مقدار پیشفرض طبق RFC پروتکل DICT برابر با 2628 است، اما میتواند هنگام کامپایل در فایل defs.h تغییر داده شود (DICT_DEFAULT_SERVICE).
- site string
- برای مشخص کردن نام فایل مربوط به اطلاعات سایت (site information file) به کار میرود؛ یک فایل متنی ساده که در پاسخ به دستور SHOW SERVER نمایش داده خواهد شد.
مثال: فایل examples/dictd4.conf موجود در بسته توزیع را مشاهده کنید.
- به طور پیشفرض، دستور SHOW SERVER اطلاعات مربوط به نسخه dictd و نوع سیستمعامل را خروجی میدهد. این گزینه این قابلیت را غیرفعال میکند.
- site_no_uptime boolean
- به طور پیشفرض، دستور SHOW SERVER اطلاعاتی در مورد مدتزمان بالا بودن (uptime) سرور dictd، تعداد فورکها (forks) از زمان راهاندازی و تعداد فورکها در ساعت را خروجی میدهد. این گزینه این قابلیت را غیرفعال میکند.
- site_no_dblist boolean
- به طور پیشفرض، دستور SHOW SERVER اطلاعات داخلی مربوط به پایگاههای داده مانند تعداد سرواژهها (headwords)، اندازه نمایه و غیره را خروجی میدهد. این گزینه این قابلیت را غیرفعال میکند.
- delay number
- مدتزمانی (بر حسب ثانیه) که یک کلاینت میتواند غیرفعال (idle) بماند تا سرور اتصال را قطع کند مشخص میکند. زمان بیکاری به عنوان زمانی تعریف میشود که سرور منتظر دریافت ورودی است و شامل زمانی که سرور صرف جستجو در پایگاهداده میکند نمیشود. مقدار پیشفرض 0 ثانیه (بدون محدودیت) است، اما میتواند هنگام کامپایل در فایل defs.h تغییر یابد (DICT_DEFAULT_DELAY).
نکته: اتصالها بدون هشدار قبلی بسته میشوند، زیرا هیچ تدبیری برای خاتمه زودهنگام اتصال در RFC پروتکل DICT پیشبینی نشده است.
- depth number
- طول صف را برای listen(2) مشخص میکند. این مقدار بیانگر تعداد اتصالات سوکت در انتظار است که توسط سیستمعامل در صف قرار میگیرند. برخی سیستمهای عامل ممکن است این مقدار را به ۵ (سیستمهای قدیمیتر BSD) یا ۱۲۸ (لینوکس) محدود کنند. مقدار پیشفرض 10 است اما میتواند هنگام کامپایل در فایل defs.h تغییر کند (DICT_QUEUE_DEPTH).
- limit_childs number
- تعداد دیمنهایی را که میتوانند به طور همزمان اجرا شوند مشخص میکند. هر دیمن به یک اتصال پاسخ میدهد. اگر از این حد فراتر رود، یک اتصال (سریالسازیشده) توسط فرآیند سرور برقرار میشود و کد پاسخ ۴۲۰ (سرور موقتاً در دسترس نیست) به کلاینت ارسال خواهد شد. این پارامتر باید به گونهای تنظیم شود که از تحمیل بار اضافی بر ماشین سرور توسط کلاینتهای dict جلوگیری شود، اما نباید آنقدر پایین تنظیم شود که بسیاری از کلاینتها از برقراری اتصالات مفید محروم شوند. مقدار پیشفرض ۱۰۰ است، اما میتواند هنگام کامپایل در فایل defs.h تغییر یابد (DICT_DAEMON_LIMIT_CHILDS).
- limit number
- مترادفی برای limit_childs. صرفاً جهت سازگاری با گذشته.
- limit_matches number
- حداکثر تعداد تطابقهایی را که میتوانند توسط پرسوجوی MATCH بازگردانده شوند تعیین میکند. صفر به معنای عدم محدودیت است. مقدار پیشفرض ۲۰۰۰ است.
- limit_definitions number
- حداکثر تعداد تعاریفی را که میتوانند توسط پرسوجوی DEFINE بازگردانده شوند تعیین میکند. صفر به معنای عدم محدودیت است. مقدار پیشفرض ۲۰۰ است.
- limit_time number
- مدتزمانی (بر حسب ثانیه) که یک کلاینت میتواند با سرور گفتگو کند قبل از اینکه سرور اتصال را ببندد مشخص میکند. مقدار پیشفرض ۶۰۰ ثانیه (۱۰ دقیقه) است، اما میتواند هنگام کامپایل در فایل defs.h تغییر یابد (DICT_DEFAULT_LIMIT_TIME).
نکته: تنظیم گزینه limit_time موجب غیرفعال شدن گزینه delay میشود. تنها یکی از آنها (آخرین موردی که در dictd.conf مشخص شده باشد) اعمال خواهد شد.
نکته: اتصالها بدون هشدار قبلی بسته میشوند، زیرا هیچ تدبیری برای خاتمه زودهنگام اتصال در RFC پروتکل DICT پیشبینی نشده است.
- limit_queries number
- تعداد پرسوجوهایی (MATCH، DEFINE، SHOW DB و غیره) را که کلاینت میتواند قبل از قطع ارتباط توسط سرور ارسال کند مشخص مینماید. صفر به معنای بدون محدودیت است. مقدار پیشفرض ۲۰۰۰ است، اما میتواند هنگام کامپایل در فایل defs.h تغییر کند (DICT_DEFAULT_LIMIT_QUERIES).
- timestamp number
- فاصله زمانی ثبت برچسب زمان (timestamp) در گزارشها (به دقیقه). (این گزینه فقط در صورتی موثر است که ثبت وقایع با گزینه -s یا -L یا با یکی از گزینههای اشکالزدایی فعال شده باشد.)
- log_option option
- مشخص کردن
یک گزینه
ثبت وقایع.
این تنظیم
تنها در
صورتی موثر
است که ثبت
گزارش با
گزینههای
-s یا -L یا در
فایل
پیکربندی
فعال شده
باشد، یا
اینکه ثبت
گزارش در
کنسول با یک
گزینه
اشکالزدایی
فعال شده
باشد (مانند
--debug nodetach). با هر
بار
استفاده از
این گزینه
تنها
میتوان یک
مورد را
تنظیم کرد؛
با این حال،
میتوان از
این گزینه
چندین بار
در فایل
پیکربندی
یا در خط
فرمان dictd
استفاده
نمود. برای
نمونه:
dictd -s --log stats --log found --log notfound
یک خط فرمان معتبر است و سه گزینه ثبت گزارش را فعال میکند.
برخی از گزینههای پرجزئیاتتر ثبت وقایع عمدتاً برای اشکالزدایی کد سرور استفاده میشوند و برای کاربردهای عادی چندان کاربردی نیستند.
- server
- ثبت اطلاعات تشخیصی سرور در گزارش. بسیار پرجزئیات است.
- connect
- ثبت کلیه اتصالات در گزارش.
- stats
- ثبت اتمام کار تمام فرآیندهای فرزند در گزارش.
- command
- ثبت کلیه دستورات در گزارش. بسیار پرجزئیات است.
- client
- ثبت نتایج دستور CLIENT در گزارش.
- found
- ثبت تمامی کلمات یافتشده در پایگاههای داده در گزارش.
- notfound
- ثبت تمامی کلمات یافتنشده در پایگاههای داده در گزارش.
- timestamp
- هنگام ثبت گزارش در یک فایل، از یک برچسب زمان کامل شبیه به خروجی syslog استفاده میکند. در غیر این صورت، برچسب زمانی درج نمیشود که موجب کوتاهتر شدن حجم فایلها خواهد شد.
- host
- ثبت نام میزبان کلاینت در گزارش.
- auth
- ثبت خطاهای احراز هویت در گزارش.
- min
- تنظیم حداقل تعداد گزینهها. اگر ثبت گزارش (در فایل یا از طریق syslog) فعال شده باشد و هیچ گزینهای تنظیم نشده باشد، حداقل مجموعه گزینهها استفاده خواهد شد. اگر گزینههایی تنظیم شده باشند، تنها گزینههای مشخصشده اعمال میشوند.
- all
- تنظیم تمام گزینهها.
- none
- پاک کردن تمام گزینهها.
جهت تسهیل مکانیابی اطلاعات مورد نظر در فایل گزارش، ورودیها با حروف ابتدایی مشخصکننده دسته خط ثبتشده نشانهگذاری میشوند:
- I
- اطلاعات مربوط به سرور، اتصالات، یا آمار پایان کار فرآیندها. این خطوط معمولاً برای تجزیه خودکار طراحی نشدهاند.
- E
- پیامهای خطا.
- C
- اطلاعات دستور CLIENT.
- D
- تعاریف یافتشده در پایگاههای داده جستجوشده.
- M
- تطابقهای یافتشده در پایگاهداده جستجوشده.
- N
- تطابقهایی که در پایگاههای داده جستجوشده یافت نشدند.
- T
- ردیابی دقیق خط ارسالشده توسط کلاینت.
- A
- اطلاعات احراز هویت.
برای حفظ گمنامی کلاینت، از گزینههای connect یا host استفاده نکنید. کلاینتها ممکن است اطلاعات میزبان را با استفاده از دستور CLIENT ارسال کنند یا نکنند، اما این باید گزینهای باشد که در سمت کلاینت قابل انتخاب باشد.
- debug_option string
- فعال کردن یک گزینه اشکالزدایی. گزینههای متعددی وجود دارد که همگی تنها برای توسعهدهندگان سودمند هستند. این موارد صرفاً جهت کامل بودن مستندات در اینجا ذکر شدهاند. فهرستی از آنها را میتوان با استفاده از -d به همراه یک گزینه غیرمجاز به صورت تعاملی مشاهده کرد.
- verbose
- معادل -v یا --verbose. جزئیات بیشتری به سایر گزینهها میافزاید.
- scan
- اشکالزدایی اسکنر مربوط به فایل پیکربندی.
- parse
- اشکالزدایی تجزیهکننده (parser) مربوط به فایل پیکربندی.
- search
- اشکالزدایی تبدیل نویسهها (character folding) و روالهای جستجوی دودویی.
- init
- گزارش مقداردهی اولیه پایگاهداده.
- port
- ثبت شماره درگاه سمت کلاینت در فایل گزارش.
- lev
- اشکالزدایی الگوریتم جستجوی لوناشتاین (Levenshtein).
- auth
- اشکالزدایی روالهای احراز هویت.
- nodetach
- جدا نشدن از ترمینال به عنوان فرآیند پسزمینه. متضمن این است که رونوشتی از فایل گزارش در خروجی استاندارد چاپ خواهد شد.
- nofork
- انشعاب (fork) نکردن دیمنها برای پاسخ به درخواستها. به عنوان یک سرور تکنخی عمل میکند. این گزینه متضمن nodetach است و بیش از همه برای استفاده از یک دیباگر جهت یافتن نقطهای که فرآیندهای دیمن دچار تخلیه حافظه (core dump) میشوند مفید است.
- alt
- اشکالزدایی تابع altcompare در index.c.
- locale string
- محلیسازی (locale) مورد استفاده برای جستجو را تعیین میکند. در صورت عدم تعیین، از محلیسازی "C" استفاده میشود. محلیسازی سرور باید با موردی که در زمان ساخت پایگاهداده برای dictfmt استفاده شده بود (به ویژه محلیسازی که نمایه تحت آن مرتب شده است) یکسان باشد. محلیسازی باید برای هر دو فرمت ۸-بیتی و UTF-8 مشخص شود. اگر رشته locale حاوی زیررشته utf8 یا utf-8 باشد، فرمت UTF-8 مورد انتظار خواهد بود. توجه داشته باشید که اگر پایگاهداده شما در فرمت ASCII7 یا UTF-8 نباشد، سرور dictd با استانداردهای RFC 2229 سازگار نخواهد بود.
نکته: اگر واژهنامههای utf-8 یا ۸-بیتی در فایل پیکربندی گنجانده شده باشند و گزینه مناسب --locale مشخص نشده باشد، dictd شروع به کار نخواهد کرد. این بدان معناست که dictd نمیتواند به طور همزمان با واژهنامههای utf-8 و ۸-بیتی در فایل پیکربندی اجرا شود.
- add_strategy strategy_name description
- افزودن راهبرد جستجوی strategy_name با توضیحات description. این راهبرد جستجوی جدید ممکن است با کمک افزونهها پیادهسازی شود. هر دو پارامتر strategy_name و description به صورت رشته هستند.
- default_strategy string
- تنظیم راهبرد جستجوی پیشفرض سرور برای نوع جستجوی MATCH. مقدار پیشفرض کامپایلشده 'lev' است. همچنین میتوان راهبرد پیشفرض را به ازای هر پایگاهداده نیز تنظیم کرد. کلیدواژه default_strategy را در بخش مشخصات پایگاهداده (Database specification) ببینید.
- disable_strategy string
- غیرفعال کردن راهبردهای مشخصشده. به طور پیشفرض تمام راهبردهای جستجوی پیادهسازیشده فعال هستند. همچنین میتوان راهبردها را به ازای هر پایگاهداده غیرفعال کرد. کلیدواژه disable_strategy را در بخش مشخصات پایگاهداده (Database specification) ببینید.
- listen_to host
- نام میزبان محلی یا آدرس IP برای bind شدن. در صورت عدم تعیین یا استفاده از *، برنامه dictd به تمام رابطهای شبکه متصل خواهد شد. در غیر این صورت، dictd تنها به همین آدرس متصل میشود.
- address_family family
- اگر برابر با 4 باشد، خانواده آدرس IPv4 (پیشفرض) و اگر 6 باشد، خانواده آدرس IPv6 خواهد بود.
- syslog string
- ثبت گزارش با استفاده از سرویس syslog(3).
- syslog_facility string
- امکانات (facility) مورد استفاده برای syslog را تعیین میکند. استفاده از این گزینه به صورت ضمنی شامل گزینه -s برای فعال کردن ثبت وقایع از طریق syslog است. هنگامی که کتابخانههای سیستمعامل از SYSLOG_NAMES پشتیبانی میکنند، نامهای مورد استفاده برای این گزینه باید همان مواردی باشند که در syslog.conf(5) فهرست شدهاند. در غیر این صورت، نامهای زیر استفاده میشوند (به این فرض که امکانات مورد نظر در فایلهای هدر تعریف شده باشند): auth، authpriv، cron، daemon، ftp، kern، lpr، mail، news، syslog، user، uucp، local0، local1، local2، local3، local4، local5، local6 و local7.
- log_file string
- فایل را برای ثبت وقایع مشخص میکند. نام فایل مشخصشده در هر بار استفاده با فراخوانی strftime(3) مجدداً محاسبه میشود. برای مثال، نام فایلی که به ".%Y%m%d" ختم میشود، در فایلهای گزارشی مینویسد که به سال، ماه و تاریخی که ورودی گزارش در آن ثبت شده ختم میشوند.
- pid_file string
- نام فایل مشخصشده برای نگهداری شناسه فرآیند (pid) فرآیند اصلی dictd ایجاد خواهد شد. مقدار پیشفرض /var/run/dictd.pid است.
- fast_start
- به طور پیشفرض، dictd یک نمایه اضافی (در حافظه) ایجاد میکند تا جستجو سریعتر شود. این گزینه این رفتار را غیرفعال کرده و راهاندازی را سریعتر مینماید.
- without_mmap
- از تابع mmap(2) استفاده نکرده و به جای آن تمام فایلها را در حافظه بارگذاری میکند. تنها در صورتی از این گزینه استفاده کنید که دقیقاً میدانید چه کاری انجام میدهید.
- مشخصات پایگاهداده (Database Specification)
- data string
- نام فایل مربوط به پایگاهداده متنی ساده را مشخص میکند. اگر نام فایل با '.' یا '/' آغاز نشود، پیشوند $datadir/ به آن اضافه میشود. این یک گزینه زمان کامپایل است. میتوانید این رفتار را با ویرایش Makefile یا اجرای configure --datadir=.../. تغییر دهید.
- index string
- نام فایل مربوط به فایل نمایه (index) را مشخص میکند. نحوه تعیین مسیر مشابه موردی است که در گزینه "data" در بالا شرح داده شد.
- index_suffix string
- این یک فایل نمایه اختیاری برای افزایش سرعت راهبرد جستجوی 'suffix' (جستجوی دودویی) است. این فایل توسط 'dictfmt_index2suffix' ایجاد میشود. برای اطلاعات بیشتر دستور "dictfmt_index2suffix --help" را اجرا کنید. نحوه تعیین مسیر مشابه موردی است که در گزینه "data" در بالا شرح داده شد.
- index_word string
- این یک فایل نمایه اختیاری برای افزایش سرعت راهبرد جستجوی 'word' (جستجوی دودویی) است. این فایل توسط 'dictfmt_index2word' ایجاد میشود. برای اطلاعات بیشتر دستور "dictfmt_index2word --help" را اجرا کنید. نحوه تعیین مسیر مشابه موردی است که در گزینه "data" در بالا شرح داده شد.
- prefilter string
- دستور پیشفیلتر (prefilter) را مشخص میکند. هنگامی که تکهای از پایگاهداده فشردهشده خوانده میشود، قبل از خارج شدن از حالت فشرده، با این فیلتر پالایش خواهد شد. این گزینه ممکن است برای اعمال نوعی فشردهسازی اضافی که از ساختار داده آگاه است و میتواند فشردهسازی بهتری نسبت به الگوریتم LZ77 مورد استفاده در zlib ارائه دهد، استفاده شود.
- postfilter string
- دستور پسفیلتر (postfilter) را مشخص میکند. هنگامی که تکهای از پایگاهداده فشردهشده خوانده میشود، قبل از اینکه از آفست و طول مدخل برای دسترسی به داده استفاده شود، با این فیلتر پالایش خواهد شد. این گزینه برای تقارن با دستور پیشفیلتر ارائه شده است و همچنین ممکن است برای ارائه فشردهسازی اضافی پایگاهداده مفید باشد.
- filter string
- دستور فیلتر را مشخص میکند. پس از استخراج مدخل از پایگاهداده، با این فیلتر پالایش خواهد شد. این گزینه ممکن است برای قالببندی مدخل (برای مثال تبدیل به html) استفاده شود.
- name string
- نام کوتاه پایگاهداده را مشخص میکند (مانند "1913 Webster's"). اگر رشته با علامت @ شروع شود، سرواژهای را مشخص میکند که باید در واژهنامه جستجو شود تا نام کوتاه پایگاهداده به دست آید. مقدار پیشفرض "@00-database-short" است، اما میتوان آن را هنگام کامپایل در فایل defs.h تغییر داد (DICT_SHORT_ENTRY_NAME).
- info string
- اطلاعات مربوط به پایگاهداده را مشخص میکند. اگر رشته با علامت @ شروع شود، سرواژهای را مشخص میکند که باید در واژهنامه جستجو شود تا اطلاعات مربوطه به دست آید. مقدار پیشفرض "@00-database-info" است، اما میتوان آن را هنگام کامپایل در فایل defs.h تغییر داد (DICT_INFO_ENTRY_NAME).
- invisible
- واژهنامه را از دید کلاینتها پنهان میسازد؛ یعنی این واژهنامه توسط دستورات DEFINE، MATCH، SHOW INFO، SHOW SERVER و SHOW DB شناخته نشده و نمایش داده نمیشود. اگر برخی از تعاریف یا تطابقها در یک واژهنامه نامرئی یافت شوند، نام واژهنامه مجازی مرئی بالادستی بازگردانده میشود. واژهنامههای '*' و '!' شامل واژهنامههای نامرئی نمیشوند. نکته: واژهنامههای نامرئی کاملاً برای کلاینت غیرقابل دسترس (و نامرئی) هستند، مگر اینکه در یک واژهنامه مجازی یا MIME گنجانده شده باشند (بخشهای پایگاهداده database_virtual یا database_mime را ببینید).
- disable_strategy string
- راهبرد مشخصشده را برای پایگاهداده غیرفعال میکند. این گزینه میتواند برای واژهنامههای کند (افزونهها) یا برای واژهنامههای گنجاندهشده در واژهنامههای مجازی سودمند باشد. برای مشاهده نمونه به فایل examples/dictd_complex.conf مراجعه فرمایید.
- default_strategy string
- راهبردی را مشخص میکند که در صورت دسترسی به پایگاهداده با استفاده از راهبرد '.' به کار گرفته خواهد شد؛ به این معنا که این دستورالعمل روشی برای تعیین راهبرد جستجوی ترجیحی به ازای هر پایگاهداده است. برای مثال، به جای راهبرد lev ممکن است راهبرد word برای پایگاههای دادهای که عمدتاً شامل عبارات چندکلمهای هستند ترجیح داده شود.
- مشخصات پایگاهداده مجازی (Virtual Database Specification)
- database_list string
- فهرستی از پایگاههای داده را مشخص میکند که در پایگاهداده مجازی گنجانده شدهاند. نام پایگاههای داده در این رشته با کاما از یکدیگر جدا میشوند.
- name string
- نام کوتاه پایگاهداده را مشخص میکند. به مشخصات پایگاهداده مراجعه فرمایید.
- info string
- اطلاعات مربوط به پایگاهداده را مشخص میکند. به مشخصات پایگاهداده مراجعه فرمایید.
- invisible
- واژهنامه را از دید کلاینتها پنهان میسازد. به مشخصات پایگاهداده مراجعه فرمایید.
- disable_strategy string
- راهبرد مشخصشده را برای پایگاهداده غیرفعال میکند. به مشخصات پایگاهداده مراجعه فرمایید.
- مشخصات افزونه (Plugin Specification)
- plugin string
- نام فایل افزونه را مشخص میکند.
- data string
- دادههای مورد نیاز برای مقداردهی اولیه افزونه را مشخص مینماید.
- name string
- نام کوتاه پایگاهداده را مشخص میکند. برای اطلاعات بیشتر به مشخصات پایگاهداده مراجعه کنید.
- info string
- اطلاعات مربوط به پایگاهداده را مشخص میکند. برای اطلاعات بیشتر به مشخصات پایگاهداده مراجعه کنید.
- invisible
- واژهنامه را از دید کلاینتها پنهان میسازد. برای اطلاعات بیشتر به مشخصات پایگاهداده مراجعه کنید.
- disable_strategy string
- راهبرد مشخصشده را برای پایگاهداده غیرفعال میکند. برای اطلاعات بیشتر به مشخصات پایگاهداده مراجعه کنید.
- default_strategy string
- راهبرد جستجوی پیشفرض را برای پایگاهداده تنظیم میکند. برای اطلاعات بیشتر به مشخصات پایگاهداده مراجعه کنید.
مشخصات MIME (Mime Specification)
- dbname_nomime string
- نام پایگاهداده واقعی را مشخص میکند که در صورتی به کار میرود که دستور OPTION MIME از کلاینت دریافت نشده باشد.
- dbname_mime string
- نام پایگاهداده واقعی را مشخص میکند که در صورتی به کار میرود که دستور OPTION MIME از کلاینت دریافت شده باشد. یک هدر ضروری MIME در زمان ایجاد پایگاهداده تنظیم میشود. برای گزینه --mime-header به dictfmt(1) مراجعه کنید.
- name string
- نام کوتاه پایگاهداده را مشخص میکند. برای اطلاعات بیشتر به مشخصات پایگاهداده مراجعه کنید.
- info string
- اطلاعات مربوط به پایگاهداده را مشخص میکند. برای اطلاعات بیشتر به مشخصات پایگاهداده مراجعه کنید.
- invisible
- واژهنامه را از دید کلاینتها پنهان میسازد. برای اطلاعات بیشتر به مشخصات پایگاهداده مراجعه کنید.
- disable_strategy string
- راهبرد مشخصشده را برای پایگاهداده غیرفعال میکند. برای اطلاعات بیشتر به مشخصات پایگاهداده مراجعه کنید.
- default_strategy string
- راهبرد جستجوی پیشفرض را برای پایگاهداده تنظیم میکند. برای اطلاعات بیشتر به مشخصات پایگاهداده مراجعه کنید.
- include string
- متن فایل "string" (معمولاً یک مشخصات پایگاهداده) به گونهای خوانده میشود که گویی در همین مکان در فایل پیکربندی قرار گرفته است. استفاده از include تودرتو مجاز نیست.
تعیین سطح دسترسی (DETERMINATION OF ACCESS LEVEL)
هنگامی که یک کلاینت متصل میشود، مشخصات دسترسی سراسری به ترتیب بررسی میشوند تا زمانی که یک مشخصه مطابقت پیدا کند. اگر هیچ مشخصه دسترسی وجود نداشته باشد، تمام دسترسیها مجاز خواهند بود (به عنوان مثال، رفتار سرور مشابه حالتی است که "allow *" تنها مورد در مشخصات دسترسی باشد). برای هر مورد، هم نام میزبان و هم آدرس IP بررسی میشوند. برای مثال، مشخصات دسترسی زیر را در نظر بگیرید:
authonly *.edu
deny *
هنگامی که دستور AUTH ارسال میشود، فهرست دسترسی هر پایگاهداده به ترتیب بررسی میشود؛ دقیقاً همانطور که فهرست دسترسی سراسری بررسی میشد. با این حال، پس از احراز هویت، کلاینت دارای یک نام کاربری مرتبط خواهد بود. به عنوان مثال، مشخصات دسترسی زیر را در نظر بگیرید:
deny *.com
user u2
allow *
هشدار: بررسیها برای نامهای دامنه و آدرسهای IP انجام میشوند. با این حال، اگر DNS معکوس برای یک سایت خاص کار نکند، این احتمال وجود دارد که نام دامنه برای بررسی در دسترس نباشد. اطمینان حاصل کنید که تمام محدودیتها و مسدودسازیها از آدرسهای IP استفاده میکنند. (و این بهبود را برای آینده در نظر بگیرید: اگر یک نام دامنه در دسترس نباشد، آیا مسدودسازیهایی که وابسته به نام دامنه هستند باید با هر چیزی مطابقت یابند؟ این دیدگاهی محافظهکارانهتر است، اما در حال حاضر پیادهسازی نشده است.)
الگوریتمهای جستجو (SEARCH ALGORITHMS)
استاندارد DICT چند الگوریتم جستجو را مشخص میکند که باید پیادهسازی شوند و اجازه میدهد الگوریتمهای دیگر بسته به سرور پشتیبانی شوند. راهبردهای جستجوی زیر توسط این سرور پشتیبانی میشوند. توجه داشته باشید که تمام راهبردها به بزرگی و کوچکی حروف حساس نیستند. اکثر آنها نویسههای غیر حرفیعددی و غیرفاصله را نادیده میگیرند.
- exact
- تطابق دقیق. این الگوریتم از جستجوی دودویی استفاده میکند و یکی از سریعترین الگوریتمهای جستجوی موجود است.
- lev
- الگوریتم لوناشتاین (فاصله ویرایشی رشته برابر با یک). این الگوریتم تمام کلماتی را که فاصله ویرایشی آنها از کلمه هدف یک است جستجو میکند. یک «ویرایش» به معنای درج، حذف یا جابهجایی نویسه است. این یک الگوریتم سریع برای اصلاح خطاهای املایی است، زیرا بسیاری از خطاهای املایی در فاصله لوناشتاین یک نسبت به کلمه اصلی قرار دارند.
- prefix
- تطابق پیشوند. این الگوریتم نیز از جستجوی دودویی استفاده میکند و بسیار سریع است.
- nprefix
- مشابه prefix اما محدوده مشخصشدهای از تطابقها را بازمیگرداند. برای مثال، هنگامی که راهبرد prefix تعداد ۱۰۰۰ تطابق را بازمیگرداند، شما میتوانید تنها ۱۰۰ مورد را با صرفنظر از ۸۰۰ تطابق اول دریافت کنید. این کار با مشخص کردن این محدودیتها در یک پرسوجو به این شکل انجام میشود: 800#100#app که در آن 800 تعداد موارد نادیدهگرفتهشده، 100 تعداد تطابقهای درخواستی و "app" عبارت جستجوی شماست. این راهبرد امکان پیادهسازی یک کلاینت DICT با تکمیل خودکار سریع را (اگرچه ساده نیست) دقیقاً مانند بسیاری از برنامههای واژهنامه مستقل فراهم میسازد.
- re
- جستجوی عبارات باقاعده مدرن بر اساس POSIX 1003.2. عبارات باقاعده مدرن همان مواردی هستند که توسط egrep(1) استفاده میشوند. این عبارات باقاعده از کلاسهای نویسه پیشتعریفشده پشتیبانی میکنند (برای مثال [[:alnum:]]، [[:alpha:]]، [[:digit:]] و [[:xdigit:]] برای این کاربرد مفید هستند)؛ از * برای تطابق با دنبالهای از ۰ یا چند تطابق از عنصر قبلی استفاده میشود؛ از + برای تطابق با دنبالهای از ۱ یا چند تطابق از عنصر قبلی استفاده میشود؛ از ? برای تطابق با دنبالهای از ۰ یا ۱ تطابق از عنصر قبلی استفاده میشود؛ از ^ برای تطابق با ابتدای کلمه و از $ برای تطابق با انتهای کلمه استفاده میگردد و امکان استفاده از زیرعبارات تودرتو و گزینش با () و | را فراهم میسازد. برای مثال، "(foo|bar)" با تمام کلماتی که شامل "foo" یا "bar" هستند تطابق پیدا میکند. برای تطابق با این نویسههای خاص، آنها باید با دو اسلش وارونه اسکیپ شوند (به دلیل ویژگیهای نقلقول در سرور). هشدار: تطابق با عبارات باقاعده میتواند بین ۱۰ تا ۳۰۰ برابر بیشتر از تطابق زیررشته زمان ببرد. در یک سرور شلوغ با پایگاههای داده متعدد، این امر ممکن است بسته به پیچیدگی عبارت باقاعده به بیش از ۵ دقیقه زمان انتظار نیاز داشته باشد.
- regexp
- عبارات باقاعده قدیمی (پایه). این عبارات باقاعده از |، + یا ? پشتیبانی نمیکنند. گروهها از پرانتزهای اسکیپشده استفاده میکنند. در حالی که عبارات باقاعده مدرن معمولاً کاربرد آسانتری دارند، عبارات باقاعده پایه دارای قابلیت ارجاع به گذشته (back reference) هستند. این قابلیت میتواند برای تطابق با تکرار دوم موردی که قبلاً تطابق یافته استفاده شود. برای مثال، عبارت زیر تمام کلماتی را مییابد که با سه حرف یکسان شروع شده و پایان مییابند:
^\(...\).*\1$
به استفاده از اسلشهای وارونه دوتایی برای اسکیپ کردن نویسههای خاص توجه کنید. این کار به دلیل مشخصات رشته در پروتکل DICT الزامی است (یک بکاسلش نویسه بعدی را اسکیپ میکند -- ما از دو تا استفاده میکنیم تا یک بکاسلش منفرد به موتور عبارت باقاعده برسد). هشدار: توجه داشته باشید که استفاده از عقبگرد (backtracking) حتی از عبارات باقاعده عمومی نیز کندتر است.
- soundex
- الگوریتم ساوندکس (Soundex)، الگوریتمی کلاسیک برای یافتن کلماتی که تلفظی شبیه به یکدیگر دارند. این الگوریتم هر کلمه را با استفاده از اولین حرف کلمه و تا حداکثر سه رقم کدگذاری میکند. از آنجا که حرف اول مشخص است، این جستجو نسبتاً سریع است و گاهی برای اصلاح خطاهای املایی در زمانی که الگوریتم لوناشتاین کمکی نمیکند، مناسب است.
- substring
- تطابق یک زیررشته در هر کجای سرواژه. این راهبرد جستجو از الگوریتم اصلاحشده بویر-مور-هورزپول (Boyer-Moore-Horspool) استفاده میکند. از آنجا که این الگوریتم باید تمام فایل نمایه را جستجو کند، به سرعت تطابق دقیق و تطابق پیشوند نیست.
- suffix
- تطابق پسوند. این راهبرد جستجو نیز از الگوریتم اصلاحشده بویر-مور-هورزپول استفاده میکند و سرعتی مشابه جستجوی زیررشته دارد. اگر فایل رشتهای اختیاری index_suffix در فایل پیکربندی ذکر شده باشد، این جستجو بسیار سریعتر خواهد بود.
- word
- تطابق هر تککلمه، حتی اگر بخشی از یک مدخل چندکلمهای باشد. اگر فایل اختیاری index_word در فایل پیکربندی ذکر شده باشد، این راهبرد جستجو بسیار سریعتر عمل میکند.
- first
- تطابق اولین کلمهای که یک مدخل چندکلمهای با آن آغاز میشود.
- last
- تطابق آخرین کلمهای که یک مدخل چندکلمهای با آن پایان مییابد. اگر فایل رشتهای اختیاری index_suffix در فایل پیکربندی ذکر شده باشد، این راهبرد جستجو بسیار سریعتر عمل میکند.
فرمت پایگاهداده (DATABASE FORMAT)
پایگاههای داده برای dictd به صورت جداگانه توزیع میشوند. یک پایگاهداده از دو فایل تشکیل شده است: یکی فایل متنی ساده (flat text) و دیگری فایل نمایه (index).
فایل متنی ساده حاوی مدخلهای واژهنامه (یا هر داده مناسب دیگر) است و فایل نمایه حاوی چندتاییهای جداشده با نویسه Tab است که شامل سرواژه (headword)، آفست بایت شروع این مدخل در فایل متنی و طول مدخل بر حسب بایت میباشد. آفست و طول با استفاده از کدگذاری پایه ۶۴ (base 64) و با زیرمجموعه ۶۴-نویسهای الفبای بینالمللی IA5 که در RFC 1421 (کدگذاری قابل چاپ) و RFC 1522 (کدگذاری base64 MIME) مورد بحث قرار گرفتهاند، کدگذاری میشوند. کدگذاری آفستها در مبنای ۶۴ در مقایسه با مبنای معمول ۱۰ باعث صرفهجویی قابل توجهی در فضای دیسک میشود، در حالی که همچنان اجازه میدهد از نویسه Tab (کد اسکی ۹) برای جداسازی فیلدها در یک رکورد استفاده شود. هر رکورد با یک خط جدید (کد اسکی ۱۰) خاتمه مییابد، به طوری که فایل نمایه برای انسان خوانا است.
برخی سرواژهها به صورت ویژه توسط dictd استفاده میشوند:
00-database-info حاوی اطلاعات مربوط به پایگاهداده است که توسط دستور SHOW INFO بازگردانده میشود، مگر اینکه در فایل پیکربندی مشخص شده باشد.
00-database-short حاوی نام کوتاه پایگاهداده است که توسط دستور SHOW DB بازگردانده میشود، مگر اینکه در فایل پیکربندی مشخص شده باشد. گزینه dictfmt -s را ببینید.
00-database-url نشانی URL که منابع اصلی واژهنامه از آن دریافت شده است. گزینه dictfmt -u را ببینید. این سرواژه توسط dictd استفاده نمیشود.
00-database-utf8 در صورتی وجود دارد که واژهنامه با استفاده از UTF-8 کدگذاری شده باشد. گزینه dictfmt --utf8 را ببینید.
00-database-8bit-new در صورتی وجود دارد که واژهنامه با استفاده از مجموعه نویسههای ۸-بیتی (غیر اسکی و غیر UTF-8) کدگذاری شده باشد. گزینه dictfmt --locale را ببینید.
فایل متنی ساده ممکن است با استفاده از gzip(1) (توصیه نمیشود) یا dictzip(1) (اکیداً توصیه میشود) فشردهسازی شود. سرعت بهینه با استفاده از یک فایل فشردهنشده به دست میآید. با این حال، الگوریتم فشردهسازی gzip بر روی متن ساده بسیار خوب کار میکند و میتواند منجر به صرفهجویی در فضا به میزان معمول بین ۶۰ تا ۸۰ درصد شود. اما استفاده از فایلی که با gzip(1) فشرده شده باشد توصیه نمیشود، زیرا دسترسی تصادفی به فایل تنها با خارج کردن متوالی کل فایل از حالت فشرده امکانپذیر است؛ فرآیندی که به طور غیرقابل قبولی کند است. dictzip(1) از همان الگوریتم فشردهسازی و فرمت فایلی استفاده میکند که gzip(1) استفاده مینماید، اما جدولی فراهم میسازد که میتوان از آن برای دسترسی تصادفی به بلوکهای فشردهشده در فایل استفاده کرد. استفاده از بلوکهای ۵۰ تا ۶۴ کیلوبایتی برای فشردهسازی معمولاً میزان فشردهسازی را کمتر از ۱۰ درصد کاهش میدهد، در حالی که قابلیتهای دسترسی تصادفی قابل قبولی را برای تمام دادههای موجود در فایل حفظ میکند. به عنوان یک مزیت اضافی، فایلهای فشردهشده با dictzip(1) را میتوان با gzip(1) یا zcat(1) از حالت فشرده خارج کرد. (نکته: فشردهسازی مجدد یک فایل dictzip با ابزارهایی مانند znew(1) ویژگیهای دسترسی تصادفی فایل را از بین خواهد برد. همواره فایلهای داده را با استفاده از dictzip(1) فشردهسازی کنید.)
سیگنالها (SIGNALS)
SIGHUP موجب میشود dictd فایل پیکربندی را دوباره بخواند و پایگاههای داده را مجدداً مقداردهی اولیه کند.
SIGUSR1 موجب میشود dictd پایگاههای داده را از حافظه تخلیه کند (unload). پس از آن، dictd وضعیت ۴۲۰ را (به جای ۲۲۰) بازمیگرداند. برای بارگذاری مجدد پایگاههای داده، سیگنال SIGHUP را ارسال کنید. از آنجا که فایلهای پایگاهداده با mmap(2) نگاشت شدهاند، بهروزرسانی آنها در زمان اجرای dictd غیرممکن است. بنابراین، اگر نیاز به بهروزرسانی فایلهای پایگاهداده و بازخوانی فایل پیکربندی دارید، ابتدا سیگنال SIGUSR1 را به dictd ارسال کنید تا پایگاههای داده را تخلیه کند، سپس فایلها را بهروزرسانی نموده و در نهایت سیگنال SIGHUP را برای بارگذاری مجدد آنها بفرستید.
کپیرایت و تکثیر (COPYING)
فایلهای منبع اصلی برای سرور dictd و برنامه فشردهسازی dictzip توسط ریک فیث (faith@dict.org) نوشته شدهاند و تحت شرایط مجوز عمومی همگانی گنو (GNU GPL) توزیع میشوند. اگر نیاز به توزیع تحت شرایط دیگری دارید، به نویسنده نامه بنویسید.
کتابخانههای اصلی استفادهشده توسط این برنامهها (zlib، regex، libmaa) تحت شرایط متفاوتی توزیع میشوند؛ بنابراین ممکن است بتوانید از این کتابخانهها برای برنامههایی که با GPL ناسازگار هستند استفاده کنید -- لطفاً برای اطلاعات بیشتر به اعلانات کپیرایت و اطلاعات مجوز ارائهشده همراه با کتابخانهها مراجعه فرمایید و برای حل این مسائل با وکیل خود مشورت کنید.
اشکالات (BUGS)
جستجوهای مبتنی بر عبارات باقاعده، بر خلاف سایر جستجوها، نویسههای غیرفاصلهای و غیر حرفیعددی را نادیده نمیگیرند. در عمل، این موضوع مشکل چندانی ایجاد نمیکند.
هشدارها (WARNINGS)
انطباق عبارات باقاعده (استفادهشده توسط راهبردهای جستجوی 're' و 'regexp') با استانداردهای ERE و BRE بستگی به کتابخانهای دارد که dictd را با آن میسازید. اینکه آیا راهبردهای 're' و 'regexp' از utf8 پشتیبانی میکنند یا خیر، بستگی به کتابخانهای دارد که dictd را با آن میسازید.
فایلها (FILES)
- /etc/dict/dictd.conf
- فایل پیکربندی dictd
- /usr/bin/dictd
- دیمن اصلی dictd
- /var/run/dictd.pid
- فایل ذخیرهسازی شناسه فرآیند (pid) دیمن dictd
- /usr/share
- پوشه پیشفرض برای پایگاههای داده dictd (فایلهای index. و dict[.dz].)
همچنین ببینید (SEE ALSO)
examples/dictd*.conf, dictfmt(1), dict(1), dictzip(1), gunzip(1), zcat(1), webster(1), RFC 2229
| 29 March 2002 |