کتابخانه‌ی استاندارد · سیستم و ابزار

کاربر os/user

اطلاعات کاربری که برنامه را اجرا کرده و پوشه‌های استاندارد او.

واردسازی سیستم عامل.کاربر

بسته‌ی کاربر به دو پرسش جواب می‌دهد: چه کسی برنامه را اجرا می‌کند (نام کاربری، شناسه کاربر، شناسه گروه)، و پرونده‌های این کاربر کجا باید باشند (پوشه خانگی، پوشه پیکربندی، پوشه حافظه پنهان). برنامه‌ها معمولاً تنظیمات را در پوشه‌ی پیکربندی و داده‌ی دورریختنی را در پوشه‌ی حافظه‌ی پنهان کاربر نگه می‌دارند؛ این بسته مسیر مرسوم هر سیستم را می‌دهد، مثلاً ~/.config در لینوکس و %APPDATA% در ویندوز. مک هم ~/.config و ~/.cache را می‌گیرد، یعنی قرارداد ابزارهای خط فرمان، نه ~/Library.

برای خود دستگاه به‌جای کاربر بسته‌ی سکو، برای خواندن متغیرهای محیطی دیگر بسته‌ی محیط و برای پیوستن مسیر به این پوشه‌ها بسته‌ی مسیر را ببینید.

پوشه‌ها چطور پیدا می‌شوند

این تابع‌ها فهرست پوشه‌ها را از سیستم عامل نمی‌پرسند؛ مثل بیشتر ابزارهای خط فرمان، متغیرهای محیطی را می‌خوانند. یعنی هر کس برنامه را اجرا کند می‌تواند آن‌ها را به جای دیگری بفرستد:

تابعلینوکس، مک و BSDویندوز
پوشه خانگی$HOME%USERPROFILE%
پوشه پیکربندی$XDG_CONFIG_HOME، وگرنه ~/.config%APPDATA%
پوشه حافظه پنهان$XDG_CACHE_HOME، وگرنه ~/.cache%LOCALAPPDATA%
نام کاربری$USER، وگرنه $LOGNAME، وگرنه پایگاه کاربران سیستم%USERNAME%

نمونه‌ی زیر متغیرها را خودش با محیط.تنظیم مقدار می‌دهد تا روی هر دستگاه یونیکسی همین خروجی را بدهد:

os-user-resolve.salam
واردسازی محیط
واردسازی سیستم عامل.کاربر

تابع ریشه:
    محیط.تنظیم("HOME"، "/home/sara")
    محیط.حذف("XDG_CONFIG_HOME")
    محیط.حذف("XDG_CACHE_HOME")
    سرچاپ "خانه:"، کاربر.پوشه خانگی()
    سرچاپ "پیکربندی:"، کاربر.پوشه پیکربندی()
    سرچاپ "حافظه پنهان:"، کاربر.پوشه حافظه پنهان()
    محیط.تنظیم("XDG_CONFIG_HOME"، "/data/sara/config")
    محیط.تنظیم("XDG_CACHE_HOME"، "/fast-disk/cache")
    سرچاپ "پیکربندی:"، کاربر.پوشه پیکربندی()
    سرچاپ "حافظه پنهان:"، کاربر.پوشه حافظه پنهان()
پایان
خروجیخانه: /home/sara پیکربندی: /home/sara/.config حافظه پنهان: /home/sara/.cache پیکربندی: /data/sara/config حافظه پنهان: /fast-disk/cache

تنظیمات و حافظه‌ی پنهان برنامه‌ی خودتان

در هر کدام از این پوشه‌ها یک زیرپوشه به نام برنامه‌تان بسازید و پیش از اولین نوشتن آن را با پوشه.ساخت پوشه ها ایجاد کنید، چون روی یک حساب تازه حتی ~/.config هم شاید هنوز نباشد. تنظیمات جایشان در پوشه‌ی پیکربندی است. هر چیزی که بشود دوباره ساخت، مثل پرونده‌های دانلودشده یا نمایه‌ی جست‌وجو، در پوشه‌ی حافظه‌ی پنهان می‌رود؛ کاربر یا ابزارهای پاک‌سازی ممکن است هر وقت خواستند آن را خالی کنند.

خط اول این نمونه HOME را به پوشه‌ای در پوشه‌ی جاری می‌برد تا اجرای آن به تنظیمات واقعی شما دست نزند. برنامه‌ی واقعی این خط را ندارد.

os-user-app-dirs.salam
واردسازی محیط
واردسازی سیستم پرونده.پوشه
واردسازی سیستم پرونده.پرونده
واردسازی سیستم پرونده.مسیر
واردسازی سیستم عامل
واردسازی سیستم عامل.کاربر

تابع ریشه:
    محیط.تنظیم("HOME"، مسیر.پیوند(سیستم عامل.پوشه جاری()، "demo-home"))
    محیط.حذف("XDG_CONFIG_HOME")
    محیط.حذف("XDG_CACHE_HOME")
    پیکربندی := مسیر.پیوند(کاربر.پوشه پیکربندی()، "notes")
    انبار := مسیر.پیوند(کاربر.پوشه حافظه پنهان()، "notes")
    پوشه.ساخت پوشه ها(پیکربندی)
    پوشه.ساخت پوشه ها(انبار)
    تنظیمات := مسیر.پیوند(پیکربندی، "settings.ini")
    تکرار ۲ در دور:
        اگر پرونده.وجود دارد(تنظیمات):
            سرچاپ "اجرای"، دور + ۱، "پیدا کرد:"، پرونده.خواندن متن(تنظیمات).پیراست()
        وگرنه:
            پرونده.نوشتن متن(تنظیمات، "theme=dark\n")
            سرچاپ "اجرای"، دور + ۱، "تنظیمات پیش‌فرض را نوشت"
        پایان
    پایان
    پرونده.نوشتن متن(مسیر.پیوند(انبار، "index.bin")، "0123456789")
    سرچاپ "جای تنظیمات: ~/" + مسیر.مسیر نسبی(کاربر.پوشه خانگی()، تنظیمات)
    سرچاپ "حافظه‌ی پنهان"، پوشه.اندازه(انبار)، "بایت دارد"
    پوشه.حذف همه(کاربر.پوشه خانگی())
پایان
خروجیاجرای 1 تنظیمات پیش‌فرض را نوشت اجرای 2 پیدا کرد: theme=dark جای تنظیمات: ~/.config/notes/settings.ini حافظه‌ی پنهان 10 بایت دارد

باز کردن ~ در مسیرهایی که کاربر می‌دهد

پوسته ~/notes را پیش از رسیدن به برنامه‌ی شما به مسیر کامل تبدیل می‌کند، اما مسیری که از پرونده‌ی تنظیمات خوانده یا در یک پرسش تایپ شده، هنوز با ~ شروع می‌شود. نه پرونده و نه مسیر آن را باز نمی‌کنند، پس خودتان با پوشه خانگی جایگزینش کنید:

os-user-expand-home.salam
واردسازی محیط
واردسازی سیستم پرونده.مسیر
واردسازی سیستم عامل.کاربر
واردسازی رشته

تابع گسترش(پ: رشته): رشته:
    اگر پ == "~": برگشت کاربر.پوشه خانگی() پایان
    اگر رشته.شروع با(پ، "~/"):
        برگشت مسیر.پیوند(کاربر.پوشه خانگی()، پ.زیررشته(۲، پ.طول() - ۲))
    پایان
    برگشت پ
پایان

تابع ریشه:
    محیط.تنظیم("HOME"، "/home/sara")
    هر پ در ["~"، "~/notes/today.md"، "/etc/hosts"، "reports/may.csv"]:
        سرچاپ پ، "->"، گسترش(پ)
    پایان
پایان
خروجی~ -> /home/sara ~/notes/today.md -> /home/sara/notes/today.md /etc/hosts -> /etc/hosts reports/may.csv -> reports/may.csv

نکته‌هایی که باید حواستان باشد

  • نام کاربری برای خوشامدگویی یا یک خط گزارش خوب است، اما از متغیرهای محیطی می‌آید که هر کس برنامه را اجرا کند می‌تواند عوضشان کند. هرگز برای تصمیم درباره‌ی دسترسی کسی به آن تکیه نکنید.
  • شناسه کاربر و شناسه گروه در ویندوز -1 هستند. در یونیکس، شناسه کاربر برابر 0 یعنی برنامه با کاربر ریشه (root) اجرا شده؛ ابزاری که نباید این‌طور اجرا شود بهتر است هشدار بدهد.
  • اگر متغیر مربوط تنظیم نشده باشد، مثلاً در سرویسی که با محیط خالی اجرا شده، پوشه خانگی رشته‌ی خالی برمی‌گرداند و پوشه پیکربندی و پوشه حافظه پنهان در یونیکس مسیرهای نسبی .config و .cache را. اول پوشه خانگی را بررسی کنید؛ وگرنه پرونده‌هایتان بی‌صدا در پوشه‌ی جاری می‌نشینند.

تابع‌ها

نام کاربری Username

تابع نام کاربری(): رشته
نام کاربر فعلی: $USER، وگرنه $LOGNAME، وگرنه پایگاه کاربران سیستم؛ در ویندوز %USERNAME%. هر کسی که برنامه را اجرا می‌کند می‌تواند عوضش کند.
os-user-Username.salam
واردسازی سیستم عامل.کاربر

تابع ریشه:
    سرچاپ کاربر.نام کاربری().طول() > ۰
    سرچاپ کاربر.شناسه کاربر() >= ۰، کاربر.شناسه گروه() >= ۰
    سرچاپ کاربر.پوشه خانگی().طول() > ۰
    سرچاپ کاربر.پوشه پیکربندی().طول() > ۰، کاربر.پوشه حافظه پنهان().طول() > ۰
پایان
خروجیtrue true true true true true

شناسه کاربر Uid

تابع شناسه کاربر(): صحیح
شناسه‌ی عددی کاربر از خود سیستم، برای root صفر؛ در ویندوز منفی یک.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: os-user-Username.salam

شناسه گروه Gid

تابع شناسه گروه(): صحیح
شناسه‌ی عددی گروه کاربر؛ در ویندوز منفی یک.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: os-user-Username.salam

پوشه خانگی HomeDir

تابع پوشه خانگی(): رشته
پوشه‌ی خانگی کاربر از $HOME (در ویندوز %USERPROFILE%)؛ اگر متغیر تنظیم نشده باشد خالی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: os-user-Username.salam

پوشه پیکربندی ConfigDir

تابع پوشه پیکربندی(): رشته
پوشه‌ی استاندارد پیکربندی برنامه‌ها: $XDG_CONFIG_HOME یا ~/.config، و در ویندوز %APPDATA%. ممکن است هنوز ساخته نشده باشد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: os-user-Username.salam

پوشه حافظه پنهان CacheDir

تابع پوشه حافظه پنهان(): رشته
پوشه‌ی استاندارد حافظه‌ی پنهان برنامه‌ها: $XDG_CACHE_HOME یا ~/.cache، و در ویندوز %LOCALAPPDATA%. ممکن است هنوز ساخته نشده باشد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: os-user-Username.salam