FAKETIME(1) wolfcw FAKETIME(1)

faketime - دستکاری و تغییر زمان سیستم برای برنامه‌های مشخص‌شده

faketime [گزینه‌ها] برچسب_زمان برنامه [آرگومان‌ها...]

دستور مشخص‌شده به گونه‌ای فریب داده می‌شود که تصور کند زمان جاری سیستم همان زمان مشخص‌شده در برچسب زمان (timestamp) است. برچسب‌های زمانی سیستم فایل نیز نسبت به این برچسب زمانی گزارش خواهند شد. ساعت سیستم (wall clock) از این تاریخ و زمان به کار خود ادامه می‌دهد مگر اینکه خلاف آن تعیین شده باشد (به بخش گزینه‌های پیشرفته مراجعه کنید). در واقع، faketime یک پوسته ساده برای libfaketime است که از سازوکار LD_PRELOAD برای بارگذاری یک کتابخانه کوچک استفاده می‌کند که فراخوان‌های سیستمی به توابعی مانند time(2) و fstat(2) را رهگیری می‌کند. این پوسته تنها زیرمجموعه‌ای از قابلیت‌های libfaketime را در دسترس قرار می‌دهد؛ برای جزئیات بیشتر و گزینه‌های پیشرفته لطفاً به فایل README همراه faketime مراجعه کنید، یا به https://github.com/wolfcw/libfaketime نگاهی بیندازید.

نمایش اطلاعات نحوه استفاده و خروج.
نمایش اطلاعات نسخه و خروج.
استفاده از نسخه چندریسمانی (multi-threading) کتابخانه libfaketime.
وانمود کردن اینکه شناسه پردازه (PID) برنامه، مقدار PID داده‌شده است. (تنها در صورتی در دسترس است که با FAKE_PID کامپایل شده باشد)
استفاده از قالب پیشرفته تعیین برچسب زمان.
هنگامی که برنامه تابع clock_gettime را با ساعت CLOCK_MONOTONIC فراخوانی می‌کند، زمان را دستکاری نکن.
غیرفعال کردن استفاده از حافظه اشتراکی (shared memory) توسط libfaketime.
استفاده از پیاده‌سازی سازگار با GNU-date خاص از ابزار کمکی برای تبدیل رشته‌های "قالب برچسب زمان" به تاریخ‌های قابل استفاده در برنامه، به جای حدس پیش‌فرض زمان کامپایل برای پلتفرم هدف عمومی.

faketime 'last Friday 5 pm' date
faketime '2008-12-24 08:15:42' date
faketime -f '+2,5y x10,0' bash -c 'date; while true; do echo $SECONDS ; sleep 1 ; done'
faketime -f '+2,5y x0,50' bash -c 'date; while true; do echo $SECONDS ; sleep 1 ; done'
faketime -f '+2,5y i2,0' bash -c 'while true; do date ; sleep 1 ; done'

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

(لطفاً توجه داشته باشید که استفاده از . یا , برای آفست‌های اعشاری به تنظیمات محلی شما بستگی دارد)

قالب ساده برچسب زمان که به صورت پیش‌فرض استفاده می‌شود، از دستور /bin/date -d برای تجزیه عبارت‌های کاربرپسند مانند 'last friday' استفاده می‌کند. هنگام استفاده از گزینه -f در faketime، برچسب زمان مشخص‌شده در خط فرمان مستقیماً به libfaketime ارسال می‌شود که چندین ویژگی اضافی مانند افزایش یا کاهش سرعت ساعت برای برنامه هدف را فعال می‌کند. اکیداً توصیه می‌شود که مستندات libfaketime را مطالعه کنید. خلاصه:

ثابت کردن ساعت در برچسب زمان مطلق: "YYYY-MM-DD hh:mm:ss"
اگر می‌خواهید یک نقطه زمانی مطلق را مشخص کنید، دقیقاً باید از این قالب استفاده شود. لطفاً توجه داشته باشید که ثابت کردن ساعت معمولاً چیزی نیست که می‌خواهید و ممکن است عملکرد برنامه را مختل کند. تنها در صورتی استفاده کنید که می‌دانید چه کاری انجام می‌دهید!
آفست زمانی نسبی: "[+/-]123[m/h/d/y]"، مانند "+60m" یا "+2y"
این پرکاربردترین قالب است و زمان جعلی را نسبت به زمان واقعی جاری مشخص می‌کند. نخستین نویسه رشته قالب باید + یا - باشد. مقدار عددی به طور پیش‌فرض نشان‌دهنده ثانیه است، اما پسوندهای m، h، d و y می‌توانند به ترتیب برای تعیین دقیقه، ساعت، روز یا سال استفاده شوند. برای مثال، "-2y" به معنای "دو سال پیش" است. آفست‌های زمانی اعشاری نیز قابل استفاده هستند، مانند "+2,5y" که به معنای "دو سال و نیم در آینده" است. لطفاً توجه داشته باشید که جداکننده اعشار به تنظیمات محلی شما بستگی دارد، بنابراین اگر "+2,5y" کار نکرد، می‌توانید "+2.5y" را امتحان کنید.
برچسب‌های زمانی شروع-از: "@YYYY-MM-DD hh:mm:ss"
ساعت سیستم از برچسب زمان داده‌شده شروع به شمارش برای برنامه می‌کند. این مورد می‌تواند برای تعیین برچسب‌های زمانی مطلق بدون ثابت کردن ساعت استفاده شود.

هنگام استفاده از آفست‌های زمانی نسبی یا برچسب‌های زمانی شروع-از (بخش «قالب پیشرفته برچسب زمان» در بالا و گزینه -f را ببینید)، سرعت ساعت قابل تنظیم است؛ یعنی زمان می‌تواند برای برنامه در حال اجرا تندتر یا کندتر بگذرد. برای مثال، +5y x10 زمان جعلی را ۵ سال به آینده منتقل می‌کند و باعث می‌شود زمان ۱۰ برابر سریع‌تر بگذرد (یک ثانیه واقعی معادل ۱۰ ثانیه محاسبه‌شده توسط برنامه است). به طور مشابه، جریان زمان را می‌توان کند کرد، مثلاً با استفاده از -7d x0,2، که زمان جعلی را ۷ روز به گذشته می‌برد و سرعت ساعت را روی ۲۰ درصد تنظیم می‌کند؛ یعنی ۵ ثانیه در دنیای واقعی طول می‌کشد تا ۱ ثانیه توسط برنامه محاسبه شود. مجدداً، بسته به تنظیمات محلی شما، ممکن است برای جداکننده اعشار به "x2.0" یا "x2,0" نیاز باشد. همچنین می‌توانید کاری کنید که faketime با هر بار فراخوانی time()، زمان گزارش‌شده را به اندازه یک بازه از پیش تعیین‌شده و مستقل از زمان سیستم افزایش دهد با استفاده از -7d i2,0، که در آن i با بازه افزایش بر حسب ثانیه همراه است.

تغییر زمان برای چندین برنامه یا حتی در سطح کل سیستم را می‌توان با استفاده از فایل‌های ~/.faketimerc و /etc/faketimerc ساده‌تر کرد. لطفاً برای هشدارها و جزئیات به فایل README همراه faketime مراجعه کنید.

تغییر برچسب‌های زمانی سیستم فایل را می‌توان با تنظیم متغیر محیطی NO_FAKE_STAT روی یک مقدار غیرخالی غیرفعال کرد.

لطفاً فایل‌های README و NEWS را برای مشارکت‌کنندگان ببینید.

به دلیل محدودیت‌های سازوکار LD_PRELOAD، دستور faketime با برنامه‌های دارای مجوز suidroot و برنامه‌های پیوندشده ایستا (statically linked) کار نخواهد کرد. در حالی که برچسب‌های زمانی و آفست‌های زمان برای پردازه‌های فرزند کار خواهند کرد، افزایش یا کاهش سرعت ساعت ممکن است مطابق انتظار برای پردازه‌های فرزندی که توسط برنامه اجراشده ایجاد می‌شوند کار نکند؛ برای هر پردازه فرزند از یک نمونه جدید libfaketime استفاده می‌شود، به این معنی که زمان شروع libfaketime (که در تنظیمات سرعت استفاده می‌شود) نیز مجدداً مقداردهی اولیه خواهد شد. برخی از برنامه‌ها ممکن است کتابخانه‌های سیستمی مانند librt را در زمان اجرا به صورت پویا بارگذاری کنند و در نتیجه libfaketime را دور بزنند. می‌توانید برنامه‌هایی را که با libfaketime کار نمی‌کنند گزارش کنید، اما تنها در صورتی که به صورت متن‌باز موجود باشند.

لطفاً از https://github.com/wolfcw/libfaketime/issues استفاده کنید.

حق نشر © 2003-2021 متعلق به نویسندگان libfaketime است.

هیچ ضمانتی وجود ندارد؛ حتی برای قابلیت فروش یا مناسب بودن برای یک هدف خاص. شما می‌توانید نسخه‌هایی از faketime را تحت شرایط مجوز عمومی همگانی گنو (GNU General Public License) بازتوزیع کنید.
برای اطلاعات بیشتر درباره این موارد، به پرونده‌ای با نام COPYING مراجعه کنید.

ld.so(1)، time(2)، fstat(2)

August 2026 faketime 0.9.13