PIPESZ(1) دستورهای کاربری PIPESZ(1)

pipesz - تنظیم و بررسی اندازه بافر پایپ‌ها و FIFOها

pipesz [options] [--set size] [--] [command [argument...]]

pipesz [options] --get

پایپ‌ها و FIFOها یک بافر داخلی را برای انتقال داده‌ها میان سر خواندن و سر نوشتن نگه می‌دارند. در برخی موارد، اندازه پیش‌فرض این بافر داخلی ممکن است مناسب نباشد. این برنامه امکاناتی را برای تنظیم و بررسی اندازه این بافرها فراهم می‌کند.

عملیات --set اندازه بافر پایپ را تنظیم می‌کند. اگر این گزینه مشخص شود، باید همراه با یک size صریح مشخص گردد. در غیر این صورت، این مقدار ضمنی در نظر گرفته شده و اندازه از /proc/sys/fs/pipe-max-size خوانده می‌شود. هسته ممکن است size را همان‌طور که در fcntl(2) شرح داده شده تنظیم کند. برای مشاهده اندازه واقعی بافرهایی که تنظیم می‌شوند، از گزینهٔ --verbose استفاده کنید. اگر نه --file و نه --fd مشخص نشده باشند، --set بر روی خروجی استاندارد عمل می‌کند.

عملیات --set امکان اجرای یک command اختیاری را پس از تنظیم اندازه بافر پایپ فراهم می‌کند. این دستور با پایپ‌های تنظیم‌شده اجرا می‌شود.

عملیات --get داده‌ها را در قالب جدول خروجی می‌دهد. ستون نخست، نام پایپ به همان صورت داده‌شده به pipesz است. توصیف‌کننده‌های پرونده به صورت "fd N" نام‌گذاری می‌شوند. ستون دوم اندازه بافر داخلی پایپ بر حسب بایت است. ستون سوم تعداد بایت‌های خوانده‌نشده موجود در پایپ است. ستون‌ها با تب ('\t'، کد ASCII 09h) از هم جدا می‌شوند. اگر --verbose مشخص شده باشد، یک سربرگ توضیحی نیز نمایش داده می‌شود. اگر نه --file و نه --fd مشخص نشده باشند، --get بر روی ورودی استاندارد عمل می‌کند.

مگر اینکه گزینهٔ --check مشخص شده باشد، در صورت مواجهه با خطا هنگام دستکاری یک پرونده یا توصیف‌کننده پرونده، pipesz خارج نمی‌شود. این امر امکان استفاده عمومی از pipesz را بدون ترس از مختل شدن اجرای خطوط لوله در صورتی که نوع برخی پرونده‌ها بعداً تغییر کند، فراهم می‌سازد. برای کمترین میزان اختلال، گزینهٔ --quiet از صدور هشدارها در این موارد جلوگیری می‌کند.

هسته محدودیت‌هایی را برای میزان فضای بافر پایپ که فرآیندهای بدون امتیاز می‌توانند استفاده کنند اعمال می‌کند، هرچند به بخش اشکالات (BUGS) در زیر مراجعه کنید. هسته همچنین در صورتی که کوچک کردن بافر پایپ منجر به از دست رفتن داده‌های بافرشده شود، از انجام آن خودداری می‌کند. برای جزئیات بیشتر به pipe(7) مراجعه کنید.

دستور pipesz از مشخص کردن چندین گزینهٔ کوتاه به صورت متوالی، به شیوهٔ معمول getopt(3) پشتیبانی می‌کند. اولین آرگومان غیرگزینه‌ای به عنوان command تفسیر می‌شود. اگر ممکن است command با '-' شروع شود، از '--' برای جدا کردن آن از آرگومان‌های pipesz استفاده کنید. در اسکریپت‌های پوسته، استفاده از '--' در هنگام بسط پارامترها روش مناسبی است. خود pipesz از ورودی استاندارد نمی‌خواند و در خروجی استاندارد نمی‌نویسد، مگر اینکه --get، --help یا --version مشخص شده باشند.

-g, --get

گزارش اندازه بافرهای پایپ در خروجی استاندارد و خروج. به عنوان یک رفتار ویژه، اگر نه --file و نه --fd مشخص نشده باشند، ورودی استاندارد بررسی می‌شود. مشخص کردن این گزینه همراه با --set خطا است.

-s, --set size

تنظیم اندازه بافرهای پایپ بر حسب بایت. این گزینه می‌تواند دارای پسوندهای K، M، G، KiB، MiB یا GiB برای نشان دادن مضارب ۱۰۲۴ باشد. مقادیر کسری در این حالت پشتیبانی می‌شوند. پسوندهای اضافی نیز پشتیبانی می‌شوند اما بعید است کاربردی باشند. اگر این گزینه مشخص نشود، یک مقدار پیش‌فرض استفاده می‌شود، همان‌طور که در بالا توضیح داده شد. اگر این گزینه چندین بار مشخص شود، هشداری صادر می‌شود و تنها آخرین size مشخص‌شده اعمال خواهد شد. به عنوان یک رفتار ویژه، اگر نه --file و نه --fd مشخص نشده باشند، خروجی استاندارد تنظیم می‌شود. مشخص کردن این گزینه همراه با --get خطا است.

-f, --file path

تنظیم اندازه بافر FIFO یا پایپ در مسیر path، نسبت به دایرکتوری کاری فعلی. می‌توانید این گزینه را چندین بار برای اعمال روی پرونده‌های مختلف مشخص کنید، و همچنین می‌توانید آن را همراه با --fd به کار ببرید. به‌طور کلی، این گزینه برای FIFOها استفاده می‌شود، اما روی پایپ‌های بی‌نام مانند آن‌هایی که در /proc/PID/fd یافت می‌شوند نیز عمل می‌کند. تغییرات اندازه بافر FIFOها پس از راه‌اندازی مجدد سیستم حفظ نمی‌شوند.

-n, --fd number

تنظیم اندازه بافر پایپ یا FIFO متناظر با توصیف‌کننده پرونده شمارهٔ number. می‌توانید این گزینه را چندین بار برای اعمال روی توصیف‌کننده‌های پرونده مختلف مشخص کنید، و همچنین می‌توانید آن را همراه با --file به کار ببرید. گزینه‌های کوتاه برای موارد معمول fd 0 (ورودی استاندارد / stdin)، fd 1 (خروجی استاندارد / stdout) و fd 2 (خطای استاندارد / stderr) ارائه شده‌اند که در بیشتر موارد کافی خواهند بود.

-i, --stdin

کوتاه‌شده برای --fd 0.

-o, --stdout

کوتاه‌شده برای --fd 1.

-e, --stderr

کوتاه‌شده برای --fd 2.

-c, --check

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

-q, --quiet

عدم گزارش خطاهای غیرمهلک در خطای استاندارد. این گزینه بر خروجی عادی گزینه‌های --get، --verbose، --help یا --version تأثیری ندارد.

-v, --verbose

در صورت مشخص شدن همراه با --get، دستور pipesz یک سربرگ توضیحی را بالای جدول نمایش می‌دهد. در غیر این صورت، در صورت مشخص شدن، pipesz اندازه‌های واقعی بافر تنظیم‌شده توسط هسته را در خطای استاندارد چاپ می‌کند.

-h, --help

نمایش متن راهنما و خروج.

-V, --version

نمایش نسخه و خروج.

pipesz dd if=file bs=1M | ...

دستور dd(1) را با یک پایپ خروجی استاندارد گسترش‌یافته اجرا می‌کند، که به آن اجازه می‌دهد هنگام انتقال بلوک‌های بزرگ داده از طریق پایپ، از تعویض متن (context switch) جلوگیری کند.

pipesz -s1M -cf /run/my-service.fifo

اندازه بافر پایپ یک FIFO سرویس را به ۱٬۰۴۸٬۵۷۶ بایت تنظیم می‌کند. اگر اندازه بافر تنظیم نشود، pipesz با خطا خارج می‌شود.

echo hello | pipesz -g

اندازه پایپ استفاده‌شده توسط پوسته برای ارسال ورودی به pipesz را چاپ می‌کند. از آنجا که pipesz ورودی استاندارد را نمی‌خواند، بسته به زمان‌بندی نسبی ممکن است ۶ بایت خوانده‌نشده را نیز در پایپ گزارش کند.

find /proc/PID/fd -exec pipesz -gqf '{}' ';'

اندازه و تعداد بایت‌های خوانده‌نشده تمام پایپ‌های در حال استفاده توسط PID را چاپ می‌کند. اگر برخی پایپ‌ها معمولاً پر باشند، pipesz ممکن است بتواند گلوگاه پردازشی را کاهش دهد.

لینوکس از نگارش هسته ۲.۶.۳۵ به بعد از تنظیم اندازه بافرهای پایپ پشتیبانی می‌کند. این نگارش همچنین /proc/sys/fs/pipe-max-size را معرفی کرد.

این برنامه از F_GETPIPE_SZ/F_SETPIPE_SZ در fcntl(2) برای دریافت و تنظیم اندازه‌های بافر پایپ استفاده می‌کند.

این برنامه از FIONREAD در ioctl(2) برای گزارش مقدار داده‌های خوانده‌نشده در پایپ‌ها استفاده می‌کند. اگر بنا به دلیلی این عملیات ناموفق باشد، مقدار داده‌های خوانده‌نشده ۰ گزارش می‌شود.

پیش از لینوکس ۴.۹، برخی اشکالات بر نحوه اعمال محدودیت‌های خاص منابع هنگام تنظیم اندازه بافر پایپ تأثیر می‌گذاشتند. برای جزئیات به pipe(7) مراجعه کنید.

Nathan Sharp <nwsharp@live.com>

pipe(7)

برای گزارش باگ‌ها از ردیاب مشکلات https://github.com/util-linux/util-linux/issues.

دستور pipesz بخشی از بستهٔ util-linux است که می‌توان آن را از بایگانی هسته لینوکس https://www.kernel.org/pub/linux/utils/util-linux.

2026-09-02 util-linux 2.42.3