کاربر os/user
اطلاعات کاربری که برنامه را اجرا کرده و پوشههای استاندارد او.
واردسازی سیستم عامل.کاربر
بستهی کاربر به دو پرسش جواب میدهد: چه کسی برنامه را اجرا میکند (نام کاربری، شناسه کاربر، شناسه گروه)، و پروندههای این کاربر کجا باید باشند (پوشه خانگی، پوشه پیکربندی، پوشه حافظه پنهان). برنامهها معمولاً تنظیمات را در پوشهی پیکربندی و دادهی دورریختنی را در پوشهی حافظهی پنهان کاربر نگه میدارند؛ این بسته مسیر مرسوم هر سیستم را میدهد، مثلاً ~/.config در لینوکس و %APPDATA% در ویندوز. مک هم ~/.config و ~/.cache را میگیرد، یعنی قرارداد ابزارهای خط فرمان، نه ~/Library.
برای خود دستگاه بهجای کاربر بستهی سکو، برای خواندن متغیرهای محیطی دیگر بستهی محیط و برای پیوستن مسیر به این پوشهها بستهی مسیر را ببینید.
پوشهها چطور پیدا میشوند
این تابعها فهرست پوشهها را از سیستم عامل نمیپرسند؛ مثل بیشتر ابزارهای خط فرمان، متغیرهای محیطی را میخوانند. یعنی هر کس برنامه را اجرا کند میتواند آنها را به جای دیگری بفرستد:
| تابع | لینوکس، مک و BSD | ویندوز |
|---|---|---|
پوشه خانگی | $HOME | %USERPROFILE% |
پوشه پیکربندی | $XDG_CONFIG_HOME، وگرنه ~/.config | %APPDATA% |
پوشه حافظه پنهان | $XDG_CACHE_HOME، وگرنه ~/.cache | %LOCALAPPDATA% |
نام کاربری | $USER، وگرنه $LOGNAME، وگرنه پایگاه کاربران سیستم | %USERNAME% |
نمونهی زیر متغیرها را خودش با محیط.تنظیم مقدار میدهد تا روی هر دستگاه یونیکسی همین خروجی را بدهد:
واردسازی محیط
واردسازی سیستم عامل.کاربر
تابع ریشه:
محیط.تنظیم("HOME"، "/home/sara")
محیط.حذف("XDG_CONFIG_HOME")
محیط.حذف("XDG_CACHE_HOME")
سرچاپ "خانه:"، کاربر.پوشه خانگی()
سرچاپ "پیکربندی:"، کاربر.پوشه پیکربندی()
سرچاپ "حافظه پنهان:"، کاربر.پوشه حافظه پنهان()
محیط.تنظیم("XDG_CONFIG_HOME"، "/data/sara/config")
محیط.تنظیم("XDG_CACHE_HOME"، "/fast-disk/cache")
سرچاپ "پیکربندی:"، کاربر.پوشه پیکربندی()
سرچاپ "حافظه پنهان:"، کاربر.پوشه حافظه پنهان()
پایانتنظیمات و حافظهی پنهان برنامهی خودتان
در هر کدام از این پوشهها یک زیرپوشه به نام برنامهتان بسازید و پیش از اولین نوشتن آن را با پوشه.ساخت پوشه ها ایجاد کنید، چون روی یک حساب تازه حتی ~/.config هم شاید هنوز نباشد. تنظیمات جایشان در پوشهی پیکربندی است. هر چیزی که بشود دوباره ساخت، مثل پروندههای دانلودشده یا نمایهی جستوجو، در پوشهی حافظهی پنهان میرود؛ کاربر یا ابزارهای پاکسازی ممکن است هر وقت خواستند آن را خالی کنند.
خط اول این نمونه HOME را به پوشهای در پوشهی جاری میبرد تا اجرای آن به تنظیمات واقعی شما دست نزند. برنامهی واقعی این خط را ندارد.
واردسازی محیط
واردسازی سیستم پرونده.پوشه
واردسازی سیستم پرونده.پرونده
واردسازی سیستم پرونده.مسیر
واردسازی سیستم عامل
واردسازی سیستم عامل.کاربر
تابع ریشه:
محیط.تنظیم("HOME"، مسیر.پیوند(سیستم عامل.پوشه جاری()، "demo-home"))
محیط.حذف("XDG_CONFIG_HOME")
محیط.حذف("XDG_CACHE_HOME")
پیکربندی := مسیر.پیوند(کاربر.پوشه پیکربندی()، "notes")
انبار := مسیر.پیوند(کاربر.پوشه حافظه پنهان()، "notes")
پوشه.ساخت پوشه ها(پیکربندی)
پوشه.ساخت پوشه ها(انبار)
تنظیمات := مسیر.پیوند(پیکربندی، "settings.ini")
تکرار ۲ در دور:
اگر پرونده.وجود دارد(تنظیمات):
سرچاپ "اجرای"، دور + ۱، "پیدا کرد:"، پرونده.خواندن متن(تنظیمات).پیراست()
وگرنه:
پرونده.نوشتن متن(تنظیمات، "theme=dark\n")
سرچاپ "اجرای"، دور + ۱، "تنظیمات پیشفرض را نوشت"
پایان
پایان
پرونده.نوشتن متن(مسیر.پیوند(انبار، "index.bin")، "0123456789")
سرچاپ "جای تنظیمات: ~/" + مسیر.مسیر نسبی(کاربر.پوشه خانگی()، تنظیمات)
سرچاپ "حافظهی پنهان"، پوشه.اندازه(انبار)، "بایت دارد"
پوشه.حذف همه(کاربر.پوشه خانگی())
پایانباز کردن ~ در مسیرهایی که کاربر میدهد
پوسته ~/notes را پیش از رسیدن به برنامهی شما به مسیر کامل تبدیل میکند، اما مسیری که از پروندهی تنظیمات خوانده یا در یک پرسش تایپ شده، هنوز با ~ شروع میشود. نه پرونده و نه مسیر آن را باز نمیکنند، پس خودتان با پوشه خانگی جایگزینش کنید:
واردسازی محیط
واردسازی سیستم پرونده.مسیر
واردسازی سیستم عامل.کاربر
واردسازی رشته
تابع گسترش(پ: رشته): رشته:
اگر پ == "~": برگشت کاربر.پوشه خانگی() پایان
اگر رشته.شروع با(پ، "~/"):
برگشت مسیر.پیوند(کاربر.پوشه خانگی()، پ.زیررشته(۲، پ.طول() - ۲))
پایان
برگشت پ
پایان
تابع ریشه:
محیط.تنظیم("HOME"، "/home/sara")
هر پ در ["~"، "~/notes/today.md"، "/etc/hosts"، "reports/may.csv"]:
سرچاپ پ، "->"، گسترش(پ)
پایان
پایاننکتههایی که باید حواستان باشد
نام کاربریبرای خوشامدگویی یا یک خط گزارش خوب است، اما از متغیرهای محیطی میآید که هر کس برنامه را اجرا کند میتواند عوضشان کند. هرگز برای تصمیم دربارهی دسترسی کسی به آن تکیه نکنید.شناسه کاربروشناسه گروهدر ویندوز-1هستند. در یونیکس،شناسه کاربربرابر0یعنی برنامه با کاربر ریشه (root) اجرا شده؛ ابزاری که نباید اینطور اجرا شود بهتر است هشدار بدهد.- اگر متغیر مربوط تنظیم نشده باشد، مثلاً در سرویسی که با محیط خالی اجرا شده،
پوشه خانگیرشتهی خالی برمیگرداند وپوشه پیکربندیوپوشه حافظه پنهاندر یونیکس مسیرهای نسبی.configو.cacheرا. اولپوشه خانگیرا بررسی کنید؛ وگرنه پروندههایتان بیصدا در پوشهی جاری مینشینند.
تابعها
نام کاربری Username
تابع نام کاربری(): رشته$USER، وگرنه $LOGNAME، وگرنه پایگاه کاربران سیستم؛ در ویندوز %USERNAME%. هر کسی که برنامه را اجرا میکند میتواند عوضش کند.واردسازی سیستم عامل.کاربر
تابع ریشه:
سرچاپ کاربر.نام کاربری().طول() > ۰
سرچاپ کاربر.شناسه کاربر() >= ۰، کاربر.شناسه گروه() >= ۰
سرچاپ کاربر.پوشه خانگی().طول() > ۰
سرچاپ کاربر.پوشه پیکربندی().طول() > ۰، کاربر.پوشه حافظه پنهان().طول() > ۰
پایانشناسه کاربر Uid
تابع شناسه کاربر(): صحیحنمونهی این مورد همراه با موارد بالاتر آمده است: 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