جستجو برای:
سبد خرید 0
  • صفحه اصلی
  • دوره‌های آموزشی
  • وبلاگ
  • درباره ما
  • قوانین و مقررات
  • همکاری با ما
  • تماس با ما
محتوای باز
ورود
[suncode_otp_login_form]
گذرواژه خود را فراموش کرده اید؟
عضویت
[suncode_otp_registration_form]
  • خانه
  • کتاب آنلاین
  • درباره سایت
  • درباره لوگو
  • تماس با ما
محتوای باز
  • صفحه اصلی
  • دوره‌های آموزشی
  • وبلاگ
  • درباره ما
  • قوانین و مقررات
  • همکاری با ما
  • تماس با ما
شروع کنید
آخرین اطلاعیه ها
لطفا برای نمایش اطلاعیه ها وارد شوید
0
[wcas-search-form]

محیط (Environment) در خط فرمان لینوکس

25 تیر 1399
ارسال شده توسط فرشید نوتاش حقیقت
خط فرمان، گنو/لینوکس
محیط (Environment)

همانطور که قبلاً اشاره کردیم، شل (Shell) یک بدنه از اطلاعات را در طی نشست شل (Shell) با نام محیط (Environment) نگهداری می‌کند. داده‌هایی که در داخل محیط ذخیره شده است به وسیله برنامه‌ها به منظور تعیین واقعیت‌های پیکربندی استفاده می‌شوند.

در حالی که بیشتر برنامه‌ها به مقادیری که در داخل محیط ذخیره می‌شوند نگاه می‌کنند تا رفتار خود را تطبیق دهند. با دانستن این موضوع، ما می‌توانیم از محیط به منظور شخصی‌سازی محیط شل (Shell) استفاده کنیم.

چه چیز در داخل محیط لینوکس ذخیره شده است؟

شل (Shell) دو نوع اساسی از داده را در داخل محیط (Environment) ذخیره می‌کند. هر چند که در بش (Bash) انواع تا حد زیادی غیرقابل تشخیص هستند. این دو نوع شامل متغیرهای محیط (Environment Variables) و متغیرهای شل (Shell Variables) هستند. متغیرهای شل (Shell) بیت‌هایی از داده هستند که در بش (Bash) قرار گرفته‌اند و مابقی، متغیرهای محیط هستند.

علاوه بر متغیرها، شل (Shell) همچنین داده‌های برنامه‌ریزی با نام‌های Aliases و Shell Functions را ذخیره می‌کند. به یاد دارید Aliasها و توابع را توضیح داده‌ایم. در ادامه با محیط (Environment) در لینوکس بیشتر آشنا خواهیم شد.

بررسی محیط (Environment)

به منظور مشاهده اینکه چه چیزی در محیط (Environment) ذخیره شده است، ما می‌توانیم از فرمان‌های set یا printenv استفاده کنیم. فرمان set هر دو نوع متغیرهای محیط و شل را به شما نشان خواهد داد در حالی که فرمان printenv فقط متغیرهای محیط را نشان می‌دهد. از آنجایی که لیست محتویات محیط نسبتاً طولانی است، بهتر است که با کمک less آن‌ها را نمایش دهیم:

[me@linuxbox ~]$ printenv | less

نتیجه به صورت زیر خواهد بود:

KDE_MULTIHEAD=false
SSH_AGENT_PID=6666
HOSTNAME=linuxbox
GPG_AGENT_INFO=/tmp/gpg-PdOt7g/S.gpg-agent:6689:1
SHELL=/bin/bash
TERM=xterm
XDG_MENU_PREFIX=kde-
HISTSIZE=1000
XDG_SESSION_COOKIE=6d7b05c65846c3eaf3101b0046bd2b00-1208521990.996705-11770561
99
GTK2_RC_FILES=/etc/gtk-2.0/gtkrc:/home/me/.gtkrc-2.0:/home/me/.kde/share/confi
g/gtkrc-2.0
GTK_RC_FILES=/etc/gtk/gtkrc:/home/me/.gtkrc:/home/me/.kde/share/config/gtkrc
GS_LIB=/home/me/.fonts
WINDOWID=29360136
QTDIR=/usr/lib/qt-3.3
QTINC=/usr/lib/qt-3.3/include
KDE_FULL_SESSION=true
USER=me
LS_COLORS=no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33
;01:or=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.exe:

آنچه ما می‌بینیم لیستی از متغیرهای محیط و مقادیر آن‌ها می‌باشد. برای مثال متغیری با نام USER را می‌بینیم که در این مورد خاص دارای مقدار me که کاربر فعلی است را به خود اختصاص داده است. فرمان printenv نیز می‌تواند یک متغیر خاص را لیست کند:

[me@linuxbox ~]$ printenv USER
me

زمانی که فرمان set بدون گزینه و آرگومان به کار می‌رود، متغیرهای شل (Shell) و محیط هر تابع دیگر تعریف شده را نشان می‌دهد.

[me@linuxbox ~]$ set | less

بر خلاف فرمان printenv خروجی آن بر اساس حروف الفبا دسته‌بندی شده است. همچنین ممکن است که محتوای یک متغیر را به صورت جداگانه با فرمان echo نمایش دهیم:

[me@linuxbox ~]$ echo $HOME
/home/me

یکی از عناصر محیط که هیچ‌کدام از فرمان‌های set و printenv آن را نشان نمی‌دهد alias ها هستند. برای مشاهده آن‌ها فرمان alias را بدون هیچ آرگومانی وارد می‌کنیم:

[me@linuxbox ~]$ alias
alias l.='ls -d .* --color=tty'
alias ll='ls -l --color=tty'
alias ls='ls --color=tty'
alias vi='vim'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --showtilde'

برخی از متغیرهای جذاب

محیط حاوی برخی از متغیرها می‌باشد و بر اساس نوع محیطی که در آن قرار گرفته‌اید ممکن است متفاوت باشد. برخی از این متغیرها در جدول زیر به همراه توضیح کامل آورده شده‌اند. اگر برخی از این فرمان‌ها برای شما موجود نبود نگران نباشید چون که بر اساس توزیع‌های مختلف آن‌ها تفاوت دارند.

محیط چگونه برقرار شده است

زمانی که ما به سیستم Login می‌کنیم، برنامه Bash آغاز شده و برخی از اسکریپت‌های پیکربندی را با نام startup files اجرا می‌کند که محیط پیش‌فرض (Environment) که بین کاربران به اشتراک گذاشته است را تعریف می‌کند. این کار با بارگذاری فایل‌های استارت‌آپ پوشه home که محیط شخصی کاربر ما را تعریف می‌کند، ادامه می‌یابد.

شل‌های لاگین و بدون لاگین (Login, Non-login)

دو نوع نشست شل (Shell) وجود دارد. نشست لاگین شل (Login Shell Session) و نشست بدون لاگین (Non-login Shell Session) یک نشست لاگین شل، نشستی است که در آن از ما درخواست نام کاربری و رمز عبور می‌شود. برای مثال زمانی که ما یک نشست کنسول مجازی را آغاز می‌کنیم یک نشست لاگین شل را آغاز کرده‌ایم. یک نشست بدون لاگین شل، معمولاً زمانی رخ می‌دهد که ما یک نشست ترمینال را در رابط گرافیکی، باز می‌کنیم. لاگین شل (Login Shell) فایل‌های استارت‌آپ (Start Up) همانگونه که در جدول زیر می‌بینید می‌خواند:

فایلمحتویات
/etc/profileیک اسکریپت پیکربندی سراسری که بر روی همه کاربران اعمال می‌شود
~/.bash_profileیک فایل استارتاپ شخصی کاربر. می‌توان آن را برای گسترش یا نادیده گرفتن تنطیمات در اسکریپت پیکربندی سراسری استفاده کرد.
~/.bash_loginاگر ~/.bash_profile پیدا نشود، بش سعی می‌کند تا این اسکریپت را بخواند.
~/.profileاگر که هیچکدام از این دو ~/.bash یا ~/.bash_login یافت نشد، بش تلاش می‌کند تا این فایل را بخواند. این فایل در توزیع‌های مبتنی بر دبیان مثل اوبونتو پیشفرض است.

نشست‌های بدون لاگین شل (Non-login Shell Session) فایل‌های استارت‌آپ را همانگونه که در جدول زیر نمایش داده شده‌اند می‌خواند:

فایلمحتویات فایل
/etc/bash.bashrcیک اسکریپت پیکربندی سراسری که بر روی همه کاربران اعمال می‌گردد.
~/.bashrcیک فایل استارتاپ شخصی کاربر. می‌توان برای گسترش یا نادیده گرفتن تنظیمات در اسکریپت پیکربندی سراسری استفاده کرد.

علاوه بر خواندن فایل‌های استارت‌آپ بالا، شل‌های بدون لاگین محیط خود را از پروسه والد به ارث می‌برند که معمولاً یک لاگین شل (Login Shell) است. به سیستم خود نگاهی بیندازید و ببینید که کدامیک از این فایل‌های استارت‌آپ را دارید.

به یاد داشته باشید که اکثر اسامی فایل‌هایی که در بالا لیست شده است با یک نقطه شروع می‌شود؛ به این معنی که این فایل‌ها مخفی هستند و برای نمایش آن‌ها بایستی از گزینه –a به همراه ls استفاده کنید.

فایل ~/.bashrc احتمالاً مهمترین فایل استارت‌آپ از نقطه نظر کاربران عادی است. به این دلیل که تقریباً همیشه خوانده می‌شود. شل‌های بدون لاگین (Non-login Shells) به صورت پیش‌فرض آن را می‌خواند و بیشتر فایل‌ها برای لاگین شل‌ها به شیوه‌ای نوشته شده‌اند تا ~/.bashrc را بخوانند.

فایل استارت آپ (Startup File)

اگر نگاهی به درون یک فایل عادی .bash_profile (که از یک توزیع CentOS4 گرفته شده) بیندازیم، مشابه تصویر زیر را مشاهده می‌کنیم:

# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH

خطوطی که با علامت # داخل فایل شروع می‌شوند توضیح (Comment) هستند و این خطوط توسط شل (Shell) خوانده نمی‌شود. این خطوط به منظور خواناتر شدن توسط انسان قرار داده شده‌اند.

if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

اولین کد جالب در خط چهار اتفاق می‌افتد:

If the file "~/.bashrc" exists, then
read the "~/.bashrc" file.

که if compound command یا فرمان شرطی ترکیبی نامیده می‌شود که در دروس اسکریپت‌نویسی آن را به تفصیل توضیح خواهیم داد ولی برای درک موضوع آن را برای شما ترجمه می‌کنیم. این خط یعنی اینکه اگر فایل ~/.bashrc موجود باشد، فایل ~/.bashrc را بخوان.

اتفاق بعدی که در فایل استارت‌آپ ما رخ می‌دهد به متغیر PATH مرتبط است.

تعجب نمی‌کنید که شل (Shell) از کجا فرمان‌های ما را هنگامی که آن‌ها را در خط فرمان وارد می‌کنیم پیدا می‌کند؟! برای مثال زمانی که ما ls را وارد می‌کنیم، آیا شل (Shell) کل سیستم ما را برای پیدا کردن /bin/ls می‌گردد؟ خیر، به جای آن شل (Shell) لیستی از پوشه‌هایی که حاوی متغیرهای PATH هستند را جستجو می‌کند و در نتیجه ls را به راحتی پیدا می‌کند.

متغیرهای PATH اغلب (نه همیشه اوقات، بسته به نوع توزیعی که از آن استفاده می‌کنیم) توسط فایل استارت‌آپ در مسیر /etc/profile با استفاده از کد زیر تنظیم می‌شود:

PATH=$PATH:$HOME/bin

PATH به منظور اضافه کردن دایرکتوری $HOME/bin به آخر لیست تغییر داده شده است. این یک ثال از بسط پارامتری است، که در دروس قبلی آن را تغییر دادیم.

[me@linuxbox ~]$ foo="This is some"
[me@linuxbox ~]$ echo $foo
This is some
[me@linuxbox ~]$ foo=$foo" text."
[me@linuxbox ~]$ echo $foo
This is some text.

با اضافه کردن رشته $HOME/bin به انتهای محتویات متغیر PATH دایرکتوری $HOME/bin هنگامی که یک فرمان وارد می‌شود، به انتهای لیست پوشه‌ها اضافه می‌شود.

به این معنی که زمانی که می‌خواهیم پوشه‌ای را در داخل دایرکتوری home خود برای ذخیره برنامه‌های شخصی ایجاد کنیم، شل (Shell) آماده تطبیق دادن است. همه کاری که باید کرد این است که آن را bin نامگذاری کنیم و بقیه مهیاست.

export PATH

فرمان export به شل (Shell) می‌گوید که محتویات PATH را برای پروسه‌های فرزند فراهم کن.

تغییر محیط (Modifying the Environment)

از آنجایی که ما می‌دانیم که فایل‌های استارت‌آپ کجا هستند و چه محتویاتی دارند، می‌توانیم آن‌ها را تغییر داده تا محیط خود را شخصی‌سازی کنیم.

چه فایل‌هایی را بایستی تغییر دهیم؟

به عنوان یک قانون کلی، برای اضافه کردن دایرکتوری‌ها به PATH خود و یا تعریف متغیرهای جدید محیطی، این تغییرات را در .bash_profile (و یا معادل آن بسته به نوع توزیع لینوکس – برای مثال .profile در توزیع اوبونتو) قرار دهید.

برای کارهای دیگر، تغییرات را در داخل .bashrc قرار دهید. تغییرات خود را به فایل‌ها در دایرکتوری home خودتان محدود کنید، مگر آن که مدیر سیستم باشید و می‌خواهید تغییرات پیش‌فرض را برای همه کاربران تغییر دهید. ممکن است که فایل‌هایی مثل profile موجود در /etc را تغییر دهید و در بسیاری موارد این تغییر معقول است ولی برای شروع بهتر است این تغییرات را ایجاد نکنید.

منبع: لینوکس‌سیزن نوشته فرشید نوتاش حقیقت

 

برچسب ها: CLICommand Lineخط فرمانخط فرمان لینوکس
درباره فرشید نوتاش حقیقت

همیشه نیازمند یک منبع آموزشی فارسی در حوزه نرم‌افزارهای آزاد/ متن‌باز و سیستم‌عامل گنو/لینوکس بودم. از این رو این رسالت رو برای خودم تعریف کردم تا رسانه «محتوای باز» رو بوجود بیارم.

نوشته‌های بیشتر از فرشید نوتاش حقیقت
قبلی Cryptkeeper برنامه قفل پوشه در اوبونتو
بعدی ویرایشگرهای متنی لینوکس

دیدگاهتان را بنویسید لغو پاسخ

این سایت از اکیسمت برای کاهش جفنگ استفاده می‌کند. درباره چگونگی پردازش داده‌های دیدگاه خود بیشتر بدانید.

جستجو
جستجو برای:
دسته‌بندی موضوعی مقالات
  • برنامه‌نویسی
    • پایتون
    • دواپس
  • پایگاه‌داده
    • MariaDB
    • MySQL
  • تجارت الکترونیک
    • بازاریابی اینترنتی
    • دیجیتال مارکتینگ
    • شبکه‌های اجتماعی
  • جامعه کاربری
    • لاگ
  • دسته‌بندی نشده
  • شبکه و امنیت
  • طراحی وب
    • سئو
    • سیستم مدیریت محتوا
      • وردپرس
  • فناوری‌های نوظهور
    • اینترنت اشیاء
    • رایانش ابری
      • OpenStack
    • کلان‌داده‌ها
  • گنو/لینوکس
    • توزیع
      • CentOS
      • اوبونتو
      • دبیان
      • فدورا
    • چیست
    • خط فرمان
  • مهاجرت به آزاد/متن‌باز
  • نرم‌افزار
    • اداری
      • لیبره آفیس
        • ایمپرس
        • بیس
        • دراو
        • رایتر
        • کالک
    • کاربردی
    • گرافیک و انیمیشن
      • بلندر
      • گیمپ
نماد الکترونیکی (اینماد)
پرداخت‌یار

محتوای باز؛ مرجع آموزشی نرم‌افزارهای آزاد/ متن‌باز

از اینکه قصد همکاری با رسانه «محتوای باز» را دارید بسیار خرسندیم و این مایه مباهات ماست.

نحوه همکاری با ما چندان پیچیده نیست و شرایط آن در ادامه، ارائه گردیده است.

دستمزد مدرسین

پیش از بیان شرایط ضبط ویدئو شایان ذکر است اشاره‌ای به دستمزد مدرسین سایت داشته باشیم.

شما ممکن است در دو حالت تمایل به نشر ویدئو خود را داشته باشید: یا آن را رایگان در اختیار عموم قرار دهید و یا اینکه در قبال فروش آن از خریدار وجه مربوطه محصول را اخذ نمایید.

صرف نظر از هر حالت ممکنه، می‌بایست شرایطی که در ادامه ذکر شده‌اند را رعایت کرده باشید.

در حالت اول (رایگان) رسانه محتوای باز (Open Content)، نه وجهی از شما برای نشر ویدئو می‌گیرد و نه وجهی به شما پرداخت می‌نماید و دوره آموزشی شما را به رایگان منتشر می‌کند.

اما در حالت بعدی طریقه همکاری به روش درآمد از فروش خواهد بود، به گونه‌ای که 70 درصد از کل مبلغ فروش دوره آموزشی متعلق به مدرس دوره بوده و 30 درصد مابقی به رسانه محتوای باز تعلق می‌گیرد.

شرایط کلی ضبط دوره آموزشی

دوره آموزشی مربوطه، صرف نظر از هر محتوایی که دارد می‌بایست در یکی از توزیعات گنو/لینوکسی ضبط شده باشد. (به‌عنوان مثال دوره دروپال در اوبونتو، دوره آموزشی کار با آردوینو در دبیان و امثالهم). اگر دوره آموزشی شما در محیط ویندوز و یا هر پلتفرم/سیستم‌عامل دیگری ضبط شده باشد از همکاری با شما معذوریم.

پیشنهاد می‌گردد برای ضبط دوره آموزشی در توزیع گنو/لینوکس از ابزار قدرتمند OBS استفاده نمایید. البته این صرفا یک پیشنهاد است و شما می‌توانید از هر ابزار مناسب دیگری برای این کار بهره ببرید.

برای آشنایی یا تسلط بیشتر می‌توانید دوره رایگان آموزش OBS محمد عابدینی را ببینید:

مشاهده دوره آموزش OBS
شرایط کیفی ضبط دوره آموزشی

کیفیت صدا از اهمیت ویژه‌ای برخوردار می‌باشد و می‌بایست فاقد هر گونه نویز یا صدای اضافی دیگری (صدای محیط پیرامون) باشد.

دوره آموزشی تهیه شده صرفا باید برای رسانه محتوای باز تدوین شده باشد و در هیچ سایت مشابه دیگری قرار نگرفته باشد.

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

دوره آموزشی ضبط شده می‌باید فاقد هر گونه لوگو یا آدرس سایت دیگری (در گوشه تصویر یا بک‌گراند صفحه دسکتاپ و هر جای دیگری) باشد.

در حین دوره، مدرس نباید به برند خاصی اشاره کند که جز رقبای ما به‌شمار می‌آیند.

مدرس باید در ابتدا در اواسط و در انتهای دوره به برند ما یعنی رسانه محتوای باز (Open Content) بصورت کلامی اشاره نماید.

مدرس، هنگام تدریس نباید تپق زده، سرفه یا عطسه کند یا صدای قورت دادن بزاقش شنیده شود و بایستی با صدای رسا، دوستانه و پرانرژی به تدریس بپردازد.

قبل از تدوین دوره آموزشی حتما با ما در تماس باشید و یک ویدیوی چنددقیقه‌ای (ترجیحا 5 الی 10 دقیقه)، بصورت نمونه‌کار برای ما بفرستید.

از همکاری با شما سپاسگزاریم.

فراخوان همکاری