'\" t .\" Title: git-daemon .\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author] .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: 2026-06-29 .\" Manual: Git Manual .\" Source: Git 2.55.0 .\" Language: Persian .\" .TH "GIT\-DAEMON" "1" "2026\-06\-29" "Git 2\&.55\&.0" "Git Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "نام (NAME)" git-daemon \- یک کارساز بسیار ساده برای مخازن گیت .SH "خلاصه دستور (SYNOPSIS)" .sp .nf \fBgit\fR \fBdaemon\fR [\fB\-\-verbose\fR] [\fB\-\-syslog\fR] [\fB\-\-export\-all\fR] [\fB\-\-timeout=\fR\fI\fR] [\fB\-\-init\-timeout=\fR\fI\fR] [\fB\-\-max\-connections=\fR\fI\fR] [\fB\-\-strict\-paths\fR] [\fB\-\-base\-path=\fR\fI\fR] [\fB\-\-base\-path\-relaxed\fR] [\fB\-\-user\-path\fR | \fB\-\-user\-path=\fR\fI\fR] [\fB\-\-interpolated\-path=\fR\fI\fR] [\fB\-\-reuseaddr\fR] [\fB\-\-detach\fR] [\fB\-\-pid\-file=\fR\fI\fR] [\fB\-\-enable=\fR\fI\fR] [\fB\-\-disable=\fR\fI\fR] [\fB\-\-allow\-override=\fR\fI\fR] [\fB\-\-forbid\-override=\fR\fI\fR] [\fB\-\-access\-hook=\fR\fI\fR] [\fB\-\-\fR[\fBno\-\fR]\fBinformative\-errors\fR] [\fB\-\-inetd\fR | [\fB\-\-listen=\fR\fI\fR] [\fB\-\-port=\fR\fI\fR] [\fB\-\-user=\fR\fI\fR [\fB\-\-group=\fR\fI\fR]]] [\fB\-\-log\-destination=\fR(\fBstderr\fR|\fBsyslog\fR|\fBnone\fR)] [\fI\fR\&...] .fi .sp .SH "توضیحات (DESCRIPTION)" .sp یک دیمون (کارساز پس‌زمینه) فوق‌العاده ساده TCP برای گیت که به طور معمول روی درگاه «DEFAULT_GIT_PORT» یعنی ۹۴۱۸ گوش فرا می‌دهد\&. این برنامه منتظر برقراری اتصال برای درخواست یک سرویس می‌ماند، و در صورت فعال بودن آن سرویس، به آن پاسخ می‌دهد\&. .sp این برنامه بررسی می‌کند که دایرکتوری دارای فایل ویژه "git\-daemon\-export\-ok" باشد، و از صادر کردن هر دایرکتوری گیت که صریحاً به این روش برای صدور علامت‌گذاری نشده باشد خودداری می‌کند (مگر اینکه پارامتر \fB\-\-export\-all\fR مشخص شده باشد)\&. اگر مسیرهایی از دایرکتوری‌ها را به عنوان آرگومان‌های \fBgit\fR \fBdaemon\fR ارسال کنید، خدمات محدود به مخازن درون همان دایرکتوری‌ها خواهد شد\&. .sp به طور پیش‌فرض، فقط سرویس \fBupload\-pack\fR فعال است که به کلاینت‌های \fBgit\fR \fBfetch\-pack\fR و \fBgit\fR \fBls\-remote\fR (که از سوی \fBgit\fR \fBfetch\fR، \fBgit\fR \fBpull\fR و \fBgit\fR \fBclone\fR فراخوانی می‌شوند) سرویس‌دهی می‌کند\&. .sp این حالت برای به‌روزرسانی‌های فقط‌خواندنی، یعنی دریافت (pull) از مخازن گیت، ایده‌آل است\&. .sp همچنین سرویس \fBupload\-archive\fR برای سرویس‌دهی به \fBgit\fR \fBarchive\fR وجود دارد\&. .SH "گزینه‌ها (OPTIONS)" .PP \fB\-\-strict\-paths\fR .RS 4 تطبیق دقیق مسیرها (یعنی عدم پذیرش "/foo/repo" وقتی مسیر واقعی "/foo/repo\&.git" یا "/foo/repo/\&.git" است) و عدم استفاده از مسیرهای نسبی کاربر\&. \fBgit\fR \fBdaemon\fR در صورت فعال بودن این گزینه و عدم ارائه آرگومان‌های دایرکتوری، از شروع به کار خودداری می‌کند\&. .RE .PP \fB\-\-base\-path=\fR\fI\fR .RS 4 نگاشت مجدد تمام درخواست‌های مسیر به صورت نسبی نسبت به مسیر داده‌شده\&. این گزینه نوعی «ریشه گیت» است \- اگر \fBgit\fR \fBdaemon\fR را با \fB\-\-base\-path=/srv/git\fR روی \fBexample\&.com\fR اجرا کنید، اگر بعداً بخواهید از \fBgit://example\&.com/hello\&.git\fR دریافت کنید، \fBgit\fR \fBdaemon\fR مسیر را به عنوان \fB/srv/git/hello\&.git\fR تفسیر خواهد کرد\&. .RE .PP \fB\-\-base\-path\-relaxed\fR .RS 4 اگر \fB\-\-base\-path\fR فعال باشد و جستجوی مخزن ناموفق شود، با این گزینه \fBgit\fR \fBdaemon\fR تلاش خواهد کرد تا بدون افزودن پیشوند مسیر پایه جستجو را انجام دهد\&. این برای تغییر تدریجی به استفاده از \fB\-\-base\-path\fR در عین مجاز دانستن مسیرهای قدیمی مفید است\&. .RE .PP \fB\-\-interpolated\-path=\fR\fI\fR .RS 4 برای پشتیبانی از میزبانی مجازی، می‌توان از یک الگوی مسیر درون‌یابی‌شده برای ساخت پویای مسیرهای جایگزین استفاده کرد\&. این الگو از موارد زیر پشتیبانی می‌کند: \fB%H\fR برای نام میزبان هدف ارائه‌شده توسط کلاینت که به حروف کوچک تبدیل شده است، \fB%CH\fR برای نام میزبان متعارف (canonical)، \fB%IP\fR برای نشانی IP کارساز، \fB%P\fR برای شماره درگاه، و \fB%D\fR برای مسیر مطلق مخزن تعیین‌شده\&. پس از درون‌یابی، مسیر در برابر فهرست دایرکتوری‌ها اعتبارسنجی می‌شود\&. .RE .PP \fB\-\-export\-all\fR .RS 4 اجازه دریافت از تمام دایرکتوری‌هایی که شبیه مخازن گیت هستند (دارای زیردایرکتوری‌های \fIobjects\fR و \fIrefs\fR هستند)، حتی اگر فایل \fBgit\-daemon\-export\-ok\fR را نداشته باشند\&. .RE .PP \fB\-\-inetd\fR .RS 4 اجرای کارساز به عنوان یک سرویس inetd\&. متضمن \fB\-\-syslog\fR است (ممکن است با \fB\-\-log\-destination=\fR لغو شود)\&. ناسازگار با گزینه‌های \fB\-\-detach\fR، \fB\-\-port\fR، \fB\-\-listen\fR، \fB\-\-user\fR و \fB\-\-group\fR\&. .RE .PP \fB\-\-listen=\fR\fI\fR .RS 4 گوش دادن روی یک آدرس IP یا نام میزبان مشخص\&. آدرس‌های IP در صورت پشتیبانی می‌توانند آدرس IPv4 یا IPv6 باشند\&. اگر IPv6 پشتیبانی نشود، در نتیجه \fB\-\-listen=\fR\fI\fR نیز پشتیبانی نمی‌شود و به \fB\-\-listen\fR باید یک آدرس IPv4 داده شود\&. این گزینه می‌تواند بیش از یک بار مشخص شود\&. ناسازگار با گزینه \fB\-\-inetd\fR\&. .RE .PP \fB\-\-port=\fR\fI\fR .RS 4 گوش دادن روی یک درگاه جایگزین\&. ناسازگار با گزینه \fB\-\-inetd\fR\&. .RE .PP \fB\-\-init\-timeout=\fR\fI\fR .RS 4 مهلت زمانی (بر حسب ثانیه) بین لحظه برقراری اتصال و دریافت درخواست کلاینت (معمولاً مقداری نسبتاً کم است، زیرا اصولاً باید بلافاصله انجام شود)\&. .RE .PP \fB\-\-timeout=\fR\fI\fR .RS 4 مهلت زمانی (بر حسب ثانیه) برای زیردرخواست‌های خاص کلاینت\&. این شامل مدت زمانی است که کارساز برای پردازش زیردرخواست صرف می‌کند و همچنین زمانی که در انتظار درخواست بعدی کلاینت سپری می‌شود\&. .RE .PP \fB\-\-max\-connections=\fR\fI\fR .RS 4 حداکثر تعداد کلاینت‌های همزمان؛ پیش‌فرض ۳۲ است\&. برای نامحدود بودن، آن را صفر قرار دهید\&. .RE .PP \fB\-\-syslog\fR .RS 4 کوتاه‌شده \fB\-\-log\-destination=syslog\fR\&. .RE .PP \fB\-\-log\-destination=\fR\fI\fR .RS 4 ارسال پیام‌های گزارش به مقصد مشخص‌شده\&. توجه داشته باشید که این گزینه متضمن \fB\-\-verbose\fR نیست، بنابراین به طور پیش‌فرض فقط شرایط خطا ثبت می‌شوند\&. مقدار \fI\fR باید یکی از موارد زیر باشد: .PP \fBstderr\fR .RS 4 نوشتن در خروجی خطای استاندارد\&. توجه داشته باشید که اگر \fB\-\-detach\fR مشخص شده باشد، فرایند از خطای استاندارد واقعی جدا می‌شود و این مقصد عملاً معادل \fBnone\fR خواهد بود\&. .RE .PP \fBsyslog\fR .RS 4 نوشتن در syslog با استفاده از شناسه \fBgit\-daemon\fR\&. .RE .PP \fBnone\fR .RS 4 غیرفعال کردن تمام وقایع‌نگاری‌ها\&. .RE .sp مقصد پیش‌فرض در صورتی که \fB\-\-inetd\fR یا \fB\-\-detach\fR مشخص شده باشد \fBsyslog\fR است، در غیر این صورت \fBstderr\fR می‌باشد\&. .RE .PP \fB\-\-user\-path\fR, \fB\-\-user\-path=\fR\fI\fR .RS 4 اجازه استفاده از نماد ~user در درخواست‌ها\&. هنگامی که بدون پارامتر مشخص شود، درخواستی برای git://host/~alice/foo به عنوان درخواستی برای دسترسی به مخزن \fIfoo\fR در دایرکتوری خانگی کاربر \fBalice\fR در نظر گرفته می‌شود\&. اگر \fB\-\-user\-path=\fR\fI\fR مشخص شود، همان درخواست به عنوان درخواست دسترسی به مخزن \fI\fR\fB/foo\fR در دایرکتوری خانگی کاربر \fBalice\fR در نظر گرفته خواهد شد\&. .RE .PP \fB\-\-verbose\fR .RS 4 ثبت جزئیات مربوط به اتصالات ورودی و فایل‌های درخواست‌شده در وقایع‌نگاری\&. .RE .PP \fB\-\-reuseaddr\fR .RS 4 استفاده از \fBSO_REUSEADDR\fR هنگام اتصال سوکت شنونده (bind)\&. این به کارساز اجازه می‌دهد بدون انتظار برای به پایان رسیدن مهلت زمانی اتصالات قدیمی، مجدداً راه‌اندازی شود\&. .RE .PP \fB\-\-detach\fR .RS 4 جدا شدن از پوسته و اجرا در پس‌زمینه\&. متضمن \fB\-\-syslog\fR\&. .RE .PP \fB\-\-pid\-file=\fR\fI\fR .RS 4 ذخیره شناسه فرایند در \fI\fR\&. هنگامی که دیمون تحت \fB\-\-inetd\fR اجرا شود، نادیده گرفته می‌شود\&. .RE .PP \fB\-\-user=\fR\fI\fR, \fB\-\-group=\fR\fI\fR .RS 4 تغییر شناسه کاربری (uid) و شناسه گروهی (gid) دیمون قبل از ورود به حلقه سرویس\&. هنگامی که فقط \fB\-\-user\fR بدون \fB\-\-group\fR داده شود، شناسه گروه اصلی کاربر استفاده می‌شود\&. مقادیر این گزینه به \fBgetpwnam\fR(\fB3\fR) و \fBgetgrnam\fR(\fB3\fR) داده می‌شوند و شناسه‌های عددی پشتیبانی نمی‌شوند\&. .sp دادن این گزینه‌ها در صورت استفاده با \fB\-\-inetd\fR یک خطا محسوب می‌شود؛ در صورت نیاز، پیش از راه‌اندازی \fBgit\fR \fBdaemon\fR از امکانات دیمون inet برای دستیابی به همین هدف استفاده کنید\&. .sp مانند بسیاری از برنامه‌هایی که شناسه کاربر را تعویض می‌کنند، این دیمون هنگام اجرای برنامه‌های گیت مانند \fBupload\-pack\fR و \fBreceive\-pack\fR متغیرهای محیطی نظیر \fBHOME\fR را بازنشانی نمی‌کند\&. هنگام استفاده از این گزینه، ممکن است بخواهید پیش از شروع دیمون \fBHOME\fR را طوری تنظیم و export کنید که به دایرکتوری خانگی \fI\fR اشاره کند، و اطمینان حاصل کنید که هر فایل پیکربندی گیت در آن دایرکتوری توسط \fI\fR قابل خواندن باشد\&. .RE .PP \fB\-\-enable=\fR\fI\fR, \fB\-\-disable=\fR\fI\fR .RS 4 فعال/غیرفعال کردن سرویس در سطح کارساز به صورت پیش‌فرض\&. توجه داشته باشید که یک سرویس غیرفعال‌شده در سطح سرور همچنان می‌تواند برای هر مخزن فعال شود، در صورتی که قابل بازنویسی علامت‌گذاری شده باشد و مخزن با یک آیتم پیکربندی آن سرویس را فعال نماید\&. .RE .PP \fB\-\-allow\-override=\fR\fI\fR, \fB\-\-forbid\-override=\fR\fI\fR .RS 4 اجازه/ممنوعیت بازنویسی پیش‌فرض سرور با پیکربندی مخصوص هر مخزن\&. به طور پیش‌فرض، تمام سرویس‌ها ممکن است بازنویسی شوند\&. .RE .PP \fB\-\-informative\-errors\fR, \fB\-\-no\-informative\-errors\fR .RS 4 هنگامی که خطاهای آگاهی‌بخش فعال باشند، git\-daemon خطاهای پرجزئیات‌تری را به کلاینت گزارش می‌دهد، و وضعیت‌هایی مانند «no such repository» (چنین مخزنی وجود ندارد) را از «repository not exported» (مخزن صادر نشده است) متمایز می‌کند\&. این برای کلاینت‌ها راحت‌تر است، اما ممکن است اطلاعاتی را درباره وجود مخازن صادرنشده فاش سازد\&. هنگامی که خطاهای آگاهی‌بخش فعال نباشند، تمام خطاها پیام «access denied» (دسترسی رد شد) را به کلاینت گزارش می‌دهند\&. حالت پیش‌فرض \fB\-\-no\-informative\-errors\fR است\&. .RE .PP \fB\-\-access\-hook=\fR\fI\fR .RS 4 هر بار که یک کلاینت متصل می‌شود، ابتدا یک دستور خارجی مشخص‌شده توسط را با نام سرویس (مانند "upload\-pack")، مسیر مخزن، نام میزبان (\fB%H\fR)، نام میزبان متعارف (\fB%CH\fR)، نشانی IP (\fB%IP\fR)، و درگاه TCP (\fB%P\fR) به عنوان آرگومان‌های خط فرمان آن اجرا کنید\&. دستور خارجی می‌تواند با خروج با یک وضعیت غیر صفر از ارائه سرویس خودداری کند (یا با خروج با وضعیت صفر به آن اجازه دهد)\&. همچنین می‌تواند متغیرهای محیطی $REMOTE_ADDR و \fB$REMOTE_PORT\fR را بررسی کند تا هنگام تصمیم‌گیری، اطلاعاتی در مورد درخواست‌کننده به دست آورد\&. .sp دستور خارجی می‌تواند به صورت اختیاری یک سطر در خروجی استاندارد خود بنویسد تا هنگام رد سرویس، به عنوان پیام خطا برای درخواست‌کننده ارسال شود\&. .RE .PP \fI\fR .RS 4 آرگومان‌های باقی‌مانده فهرستی از دایرکتوری‌ها را ارائه می‌دهند\&. اگر دایرکتوری‌هایی مشخص شده باشند، فرایند \fBgit\-daemon\fR تنها در صورتی به دایرکتوری درخواستی پاسخ می‌دهد که درون یکی از این دایرکتوری‌ها قرار داشته باشد\&. اگر \fB\-\-strict\-paths\fR مشخص شده باشد، دایرکتوری درخواستی باید دقیقاً با یکی از این دایرکتوری‌ها مطابقت داشته باشد\&. .RE .SH "سرویس‌ها (SERVICES)" .sp این سرویس‌ها می‌توانند با استفاده از گزینه‌های خط فرمان این دستور به صورت سراسری فعال/غیرفعال شوند\&. اگر کنترل دقیق‌تری مورد نیاز باشد (برای مثال، اجازه اجرای \fBgit\fR \fBarchive\fR تنها در چند مخزن منتخب که دیمون ارائه می‌دهد)، می‌توان از فایل پیکربندی اختصاصی هر مخزن برای فعال یا غیرفعال کردن آنها استفاده کرد\&. .PP upload\-pack .RS 4 این سرویس به کلاینت‌های \fBgit\fR \fBfetch\-pack\fR و \fBgit\fR \fBls\-remote\fR پاسخ می‌دهد\&. به طور پیش‌فرض فعال است، اما یک مخزن می‌تواند با تنظیم آیتم پیکربندی \fBdaemon\&.uploadpack\fR روی \fBfalse\fR آن را غیرفعال کند\&. .RE .PP upload\-archive .RS 4 این سرویس به \fBgit\fR \fBarchive\fR \fB\-\-remote\fR پاسخ می‌دهد\&. به طور پیش‌فرض غیرفعال است، اما یک مخزن می‌تواند با تنظیم آیتم پیکربندی \fBdaemon\&.uploadarch\fR روی \fBtrue\fR آن را فعال کند\&. .RE .PP receive\-pack .RS 4 این سرویس به کلاینت‌های \fBgit\fR \fBsend\-pack\fR پاسخ می‌دهد و اجازه ارسال (push) ناشناس را می‌دهد\&. به طور پیش‌فرض غیرفعال است، زیرا \fIهیچ\fR احراز هویتی در این پروتکل وجود ندارد (به عبارت دیگر، هر کسی می‌تواند هر چیزی را به مخزن ارسال کند، از جمله حذف مراجع)\&. این صرفاً برای یک محیط شبکه محلی (LAN) بسته که همه کاربران در آن مورد اعتماد هستند در نظر گرفته شده است\&. این سرویس را می‌توان با تنظیم آیتم پیکربندی \fBdaemon\&.receivepack\fR روی \fBtrue\fR فعال کرد\&. .RE .SH "مثال‌ها (EXAMPLES)" .PP ما موارد زیر را در /etc/services فرض می‌کنیم: .RS 4 .sp .if n \{\ .RS 4 .\} .nf $ grep 9418 /etc/services git 9418/tcp # Git Version Control System .fi .if n \{\ .RE .\} .sp .RE .PP \fIgit daemon\fR به عنوان کارساز inetd .RS 4 برای راه‌اندازی \fIgit daemon\fR به عنوان یک سرویس inetd که به هر مخزنی درون \fB/pub/foo\fR یا \fB/pub/bar\fR پاسخ می‌دهد، ورودی‌ای مانند زیر را در یک سطر در \fB/etc/inetd\fR قرار دهید: .sp .if n \{\ .RS 4 .\} .nf git stream tcp nowait nobody /usr/bin/git git daemon \-\-inetd \-\-verbose \-\-export\-all /pub/foo /pub/bar .fi .if n \{\ .RE .\} .sp .RE .PP \fIgit daemon\fR به عنوان کارساز inetd برای میزبان‌های مجازی .RS 4 برای راه‌اندازی \fIgit daemon\fR به عنوان یک سرویس inetd که مخازن میزبان‌های مجازی مختلف مانند \fBwww\&.example\&.com\fR و \fBwww\&.example\&.org\fR را مدیریت می‌کند، ورودی‌ای مانند زیر را در یک سطر در \fB/etc/inetd\fR قرار دهید: .sp .if n \{\ .RS 4 .\} .nf git stream tcp nowait nobody /usr/bin/git git daemon \-\-inetd \-\-verbose \-\-export\-all \-\-interpolated\-path=/pub/%H%D /pub/www\&.example\&.org/software /pub/www\&.example\&.com/software /software .fi .if n \{\ .RE .\} .sp در این مثال، دایرکتوری سطح ریشه \fB/pub\fR شامل یک زیردایرکتوری برای هر نام میزبان مجازی پشتیبانی‌شده خواهد بود\&. علاوه بر این، هر دو میزبان مخازن را صرفاً به عنوان \fBgit://www\&.example\&.com/software/repo\&.git\fR اعلان می‌کنند\&. برای کلاینت‌های قبل از ۱\&.۴\&.۰، یک پیوند نمادین از \fB/software\fR به مخزن پیش‌فرض مناسب نیز می‌تواند ایجاد شود\&. .RE .PP \fIgit daemon\fR به عنوان یک دیمون معمولی برای میزبان‌های مجازی .RS 4 برای راه‌اندازی \fBgit\fR \fBdaemon\fR به عنوان یک سرویس معمولی غیر inetd که مخازن چندین میزبان مجازی را بر اساس آدرس‌های IP آنها مدیریت می‌کند، دیمون را به این صورت شروع کنید: .sp .if n \{\ .RS 4 .\} .nf git daemon \-\-verbose \-\-export\-all \-\-interpolated\-path=/pub/%IP/%D /pub/192\&.168\&.1\&.200/software /pub/10\&.10\&.220\&.23/software .fi .if n \{\ .RE .\} .sp در این مثال، دایرکتوری سطح ریشه \fB/pub\fR شامل یک زیردایرکتوری برای هر آدرس IP میزبان مجازی پشتیبانی‌شده خواهد بود\&. با این حال، با فرض اینکه نام‌های میزبان متناظر با این آدرس‌های IP باشند، مخازن همچنان از طریق نام میزبان نیز قابل دسترسی هستند\&. .RE .PP فعال/غیرفعال کردن انتخابی سرویس‌ها به ازای هر مخزن .RS 4 برای فعال‌سازی \fBgit\fR \fBarchive\fR \fB\-\-remote\fR و غیرفعال‌سازی \fBgit\fR \fBfetch\fR روی یک مخزن، عبارت زیر را در فایل پیکربندی درون مخزن (یعنی فایل \fIconfig\fR در کنار \fBHEAD\fR، \fIrefs\fR و \fIobjects\fR) قرار دهید: .sp .if n \{\ .RS 4 .\} .nf [daemon] uploadpack = false uploadarch = true .fi .if n \{\ .RE .\} .sp .RE .SH "محیط (ENVIRONMENT)" .sp دستور \fBgit\fR \fBdaemon\fR در صورت در دسترس بودن آدرس IP، متغیر \fBREMOTE_ADDR\fR را روی آدرس IP کلاینتی که به آن متصل شده است تنظیم می‌کند\&. متغیر \fBREMOTE_ADDR\fR در محیط قلاب‌هایی که هنگام اجرای سرویس‌ها فراخوانی می‌شوند در دسترس خواهد بود\&. .SH "GIT" .sp بخشی از مجموعه \fBgit\fR(1)