| AUGPRINT(1) | Augeas | AUGPRINT(1) |
نام (NAME)
augprint - ایجاد یک اسکریپت برگشتپذیر (idempotent) برای augtool جهت یک پرونده مشخص
خلاصه دستور (SYNOPSIS)
augprint [--pretty|-p] [--regexp[=n]|-r[n]] [--noseq|-s] [--verbose|-v] [--lens name|-l name] [--target /target|-t /target] FILE
توضیحات (DESCRIPTION)
دستور augprint یک اسکریپت augtool برای یک FILE مشخص ایجاد میکند که عمدتاً از دستورات "set" تشکیل شده است.
اسکریپت حاصل از نوع خودتوان (idempotent) طراحی شده است و اعمال آن روی پرونده اصلی تغییری در محتوا ایجاد نخواهد کرد.
دستور augprint هر مکان شمارهگذاریشده در درخت را با یک عبارت مسیر (path-expression) جایگزین میکند که با استفاده از مقادیر درون آن جایگاه، موقعیت را به طور یکتا مشخص میسازد.
این کار عبارت مسیر را از شماره موقعیت مستقل میسازد، و در نتیجه آن را برای پروندههایی قابل اعمال میکند که در آنها ممکن است همان داده در موقعیت شماره دیگری وجود داشته باشد.
برای نمونه خروجی به بخش «مثالها» مراجعه کنید.
خروجی عبارت باقاعده (Regexp output)
بهطور پیشفرض augprint عبارتهای مسیری تولید میکند که از مقایسههای برابری ساده "=" تشکیل شدهاند:
set /files/etc/hosts/seq::*[ipaddr='127.0.0.1']/ipaddr '127.0.0.1'
گزینه --regexp خروجی را به گونهای تغییر میدهد که مقایسههای مبتنی بر عبارتهای باقاعده تولید کند:
set /files/etc/hosts/seq::*[ipaddr=~regexp('127\\.0\\..*')]/ipaddr '127.0.0.1'
حداقل طول N عبارت باقاعده را میتوان با "--regexp=N" مشخص کرد.
اگر با عبارت باقاعده N نویسهای چند مقدار مختلف مطابقت پیدا کنند، augprint عبارت باقاعده طولانیتری از N را انتخاب خواهد کرد.
محدودیتها (Limitations)
تنها پیوستشدن (Append-only)
خروجی عمدتاً بر پایه عملیاتهای set استوار است. عملیات set تنها میتواند:
الف) مقدار موجود را در همان جای خود تغییر دهد
ب) یک مقدار جدید را پس از آخرین موقعیت در گروه اضافه کند
این بدان معنی است که در صورت بازتولید یک مدخل، ممکن است در همان موقعیت مدنظر اولیه قرار نگیرد. به عنوان مثال، اگر مدخل مربوط به 192.0.2.3 از قبل وجود نداشته باشد، به عنوان آخرین مدخل در /etc/hosts ایجاد خواهد شد.
اغلب، چنین ردیفهای خارج از ترتیبی تأثیری در کارایی پرونده پیکربندی حاصل ندارند. اگر ترتیب اهمیت داشته باشد، ویرایش دستی اسکریپت "augtool" مورد نیاز خواهد بود.
مقادیر تکراری (Repeated Values)
دستور augprint همیشه در یافتن عبارت مسیر یکتا برای یک موقعیت موفق نمیشود. در این صورت augprint موقعیت ترتیبی را به عبارتی که یکتا نیست اضافه میکند.
این حالت به ویژه زمانی رخ میدهد که مقادیر تکراری در پرونده وجود داشته باشد.
برای پرونده /etc/hosts شامل:
#------ 192.0.2.3 defaultdns #------
دستور augprint خروجی زیر را تولید میکند:
set /files/etc/hosts/#comment[.='--------'][1] '--------' set /files/etc/hosts/seq::*[ipaddr='192.0.2.3']/ipaddr '192.0.2.3' set /files/etc/hosts/seq::*[ipaddr='192.0.2.3']/canonical 'defaultdns' set /files/etc/hosts/#comment[.='--------'][2] '--------'
دقت کنید که چگونه به مسیرهای "#comment" به ترتیب "[1]" و "[2]" بعد از "[expr]" اضافه شده است.
سایر مسیرهایی که عبارتهای یکتا دارند مستقیماً تحت تأثیر قرار نمیگیرند.
گزینهها (OPTIONS)
- -v, --verbose
- گنجاندن مسیرهای شمارهگذاریشده اصلی به عنوان کامنت در خروجی
- -p, --pretty
- تولید خروجی خواناتر با افزودن فاصلهها و سطرهای خالی
- -r, -rN, --regexp, --regexp=N
- تولید
عبارات
باقاعده
برای تطبیق
با مقادیر،
با استفاده
از حداقل
طول N نویسه
از مقدار
مقدار N اختیاری است و پیشفرض آن 8 است
- -l, --lens=LENS
- استفاده از LENS مشخصشده برای پرونده؛ بدون این گزینه، augprint از لنز پیشفرض برای پرونده استفاده میکند
- -t targetfile, --target=targetfile
- تولید
اسکریپت
برای FILE
مشخصشده
به گونهای
که گویی
مسیر واقعی
آن targetfile بوده
است
این کار لنز متناظر با targetfile را روی FILE اعمال کرده و عبارتهای مسیر حاصل را مطابق با targetfile تغییر میدهد
مقدار targetfile باید نام کامل مسیر با شروع از '/' باشد
برای نحوه استفاده عملی از --target به بخش «مثالها» مراجعه کنید
- -s, --noseq
- عدم
استفاده از
"seq::*" در
خروجی و
استفاده از
"*" به
جای آن؛ به
عنوان مثال:
set /files/etc/hosts/*[ipaddr='127.0.0.1']/ipaddr '127.0.0.1'
مهم: خروجی حاصل دیگر ورودی جدیدی برای 127.0.0.1 ایجاد نخواهد کرد اگر از قبل وجود نداشته باشد. گزینه "--noseq" برای این است که مسیرهای حاصل با نسخههای augeas قبل از 1.13.0 قابل استفاده باشند (با در نظر گرفتن این محدودیت)
مثالها (EXAMPLES)
این مثالها از پرونده /etc/hosts زیر به عنوان FILE استفاده میکنند:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 192.0.2.3 dns-a 192.0.2.4 dns-b
خروجی دستور "augtool 'print /files/etc/hosts'" چنین خواهد بود:
/files/etc/hosts /files/etc/hosts/1 /files/etc/hosts/1/ipaddr = "127.0.0.1" /files/etc/hosts/1/canonical = "localhost" /files/etc/hosts/1/alias[1] = "localhost.localdomain" /files/etc/hosts/1/alias[2] = "localhost4" /files/etc/hosts/1/alias[3] = "localhost4.localdomain4" /files/etc/hosts/2 /files/etc/hosts/2/ipaddr = "192.0.2.3" /files/etc/hosts/2/canonical = "dns-a" /files/etc/hosts/3 /files/etc/hosts/3/ipaddr = "192.0.2.4" /files/etc/hosts/3/canonical = "dns-b"
خروجی پیشفرض (Default output)
"augprint /etc/hosts"
set /files/etc/hosts/seq::*[ipaddr='127.0.0.1']/ipaddr '127.0.0.1' set /files/etc/hosts/seq::*[ipaddr='127.0.0.1']/canonical 'localhost' set /files/etc/hosts/seq::*[ipaddr='127.0.0.1']/alias[.='localhost.localdomain'] 'localhost.localdomain' set /files/etc/hosts/seq::*[ipaddr='127.0.0.1']/alias[.='localhost4'] 'localhost4' set /files/etc/hosts/seq::*[ipaddr='127.0.0.1']/alias[.='localhost4.localdomain4'] 'localhost4.localdomain4' set /files/etc/hosts/seq::*[ipaddr='192.0.2.3']/ipaddr '192.0.2.3' set /files/etc/hosts/seq::*[ipaddr='192.0.2.3']/canonical 'dns-a' set /files/etc/hosts/seq::*[ipaddr='192.0.2.4']/ipaddr '192.0.2.4' set /files/etc/hosts/seq::*[ipaddr='192.0.2.4']/canonical 'dns-b'
خروجی مشروح (Verbose output)
"augprint --verbose /etc/hosts"
# /files/etc/hosts # /files/etc/hosts/1 # /files/etc/hosts/1/ipaddr '127.0.0.1' set /files/etc/hosts/seq::*[ipaddr='127.0.0.1']/ipaddr '127.0.0.1' # /files/etc/hosts/1/canonical 'localhost' set /files/etc/hosts/seq::*[ipaddr='127.0.0.1']/canonical 'localhost' # /files/etc/hosts/1/alias[1] 'localhost.localdomain' set /files/etc/hosts/seq::*[ipaddr='127.0.0.1']/alias[.='localhost.localdomain'] 'localhost.localdomain' ...
خروجی عبارت باقاعده (Rexexp output)
"augprint --regexp=4 /etc/hosts"
set /files/etc/hosts/seq::*[ipaddr=~regexp('127\\..*')]/ipaddr '127.0.0.1'
set /files/etc/hosts/seq::*[ipaddr=~regexp('127\\..*')]/canonical 'localhost'
set /files/etc/hosts/seq::*[ipaddr=~regexp('127\\..*')]/alias[.=~regexp('localhost\\..*')] 'localhost.localdomain'
set /files/etc/hosts/seq::*[ipaddr=~regexp('127\\..*')]/alias[.=~regexp('localhost4')] 'localhost4'
set /files/etc/hosts/seq::*[ipaddr=~regexp('127\\..*')]/alias[.=~regexp('localhost4\\..*')] 'localhost4.localdomain4'
set /files/etc/hosts/seq::*[ipaddr=~regexp('192\\.0\\.2\\.3')]/ipaddr '192.0.2.3'
set /files/etc/hosts/seq::*[ipaddr=~regexp('192\\.0\\.2\\.3')]/canonical 'dns-a'
set /files/etc/hosts/seq::*[ipaddr=~regexp('192\\.0\\.2\\.4')]/ipaddr '192.0.2.4'
set /files/etc/hosts/seq::*[ipaddr=~regexp('192\\.0\\.2\\.4')]/canonical 'dns-b'
توجه داشته باشید که گرچه حداقل طول ۴ تعیین شده است، اما augprint در صورت لزوم عبارات باقاعده طولانیتری را برای اطمینان از تطبیق یکتا انتخاب خواهد کرد.
استفاده از --lens (Using --lens)
اگر پروندهای بهطور پیشفرض به لنزی متصل نشده باشد، میتوان از --lens lensname برای تعیین یک لنز استفاده کرد.
هنگامی که --lens مشخص شود، خروجی با دستورات مناسب "transform" و "load-file" پیشوندگذاری میشود تا اسکریپت augtool تکمیل شود، و همچنین یک دستور setm برای مستثنی کردن سایر لنزهای بارگذاری خودکار درج میگردد.
"augprint --lens shellvars /etc/skel/.bashrc"
setm /augeas/load/*[incl='/etc/skel/.bashrc' and label() != 'shellvars']/excl '/etc/skel/.bashrc' transform shellvars incl /etc/skel/.bashrc load-file /etc/skel/.bashrc set /files/etc/skel/.bashrc/#comment[.='.bashrc'] '.bashrc' set /files/etc/skel/.bashrc/#comment[.='Source global definitions'] 'Source global definitions' set /files/etc/skel/.bashrc/@if[.='[ -f /etc/bashrc ]'] '[ -f /etc/bashrc ]' set /files/etc/skel/.bashrc/@if[.='[ -f /etc/bashrc ]']/.source '/etc/bashrc' set /files/etc/skel/.bashrc/#comment[.='User specific environment'] 'User specific environment' ...
لنزهای "simplelines" و "shellvars" معمولاً برای پروندههایی که لنز اختصاصی ندارند بسیار مفیدند.
استفاده از --target (Using --target)
به منظور آمادهسازی اسکریپت augtool برای یک پرونده خاص، ممکن است ترجیح داده شود به جای ویرایش پرونده اصلی، آن را در مکان دیگری کپی کرد.
گزینه --target این فرایند را ساده میسازد:
الف) کپی کردن /etc/hosts به یک مکان جدید
cp /etc/hosts ~
ب) ویرایش پرونده ~/hosts بر اساس نیاز
echo '192.0.2.7 defaultdns' >> ~/hosts
ج) اجرای "augprint" به صورت زیر
augprint --target /etc/hosts ~/hosts
د) رونوشت از بخش مرتبط خروجی و انتقال آن به اسکریپت augtool یا سایر کلاینتهای Augeas
set /files/etc/hosts/seq::*[ipaddr='192.0.2.7']/ipaddr '192.0.2.7' set /files/etc/hosts/seq::*[ipaddr='192.0.2.7']/canonical 'defaultdns'
توجه کنید که "augprint" مسیرها را متناظر با --target (/etc/hosts) تولید کرده است به جای آرگومان FILE (~/hosts).
متغیرهای محیطی (ENVIRONMENT)
- AUGEAS_ROOT
- ریشه مؤثر سیستم پرونده؛ مقدار پیشفرض '/' است.
- AUGEAS_LENS_LIB
- فهرست شاخههای حاوی لنزها که با دونقطه جدا شدهاند. شاخههای تعیینشده در اینجا پیش از شاخههای پیشفرض /usr/share/augeas/lenses و /usr/share/augeas/lenses/dist جستجو میشوند.
وضعیت خروج (EXIT STATUS)
وضعیت خروج در صورت موفقیت دستور صفر و در صورت بروز هرگونه خطا ۱ خواهد بود.
فایلها (FILES)
تعاریف لنزها و شِماها در /usr/share/augeas/lenses و /usr/share/augeas/lenses/dist
نویسنده (AUTHOR)
George Hansper <george@hansper.id.au>
کپیرایت و مجوز (COPYRIGHT AND LICENSE)
حق نشر ۲۰۲۲ متعلق به George Hansper است.
ابزار Augeas (و augprint) تحت مجوز کمتر فراگیر گنو (LGPL) نگارش ۲.۱ توزیع میشوند.
همچنین ببینید (SEE ALSO)
وبسایت پروژه Augeas: https://www.augeas.net/
عبارات مسیر در Augeas: https://github.com/hercules-team/augeas/wiki/Path-expressions
| 2023-07-14 | Augeas 1.14.1 |