ts icon
سرور تیم اسپیک گاردایران

پست های پیشنهاد شده


اموزش کامل اسکریپت نویسی

مجموعه اموزشی اسکریپتینگ از سه بخش اصلی تشکیل میشه

بخش اول کامند لاین و پیش نیاز های اسکریپت نویسی رو تشکیل میده

در بخش دوم اسکریپت نویسی رو از پایه شروع میکنیم و تا سطح متوسط پیش میریم (صفحه دوم)

و در بخش سوم مباحت مربوط به اسکریپت نویسی پیشرفته رو دنبال میکنیم

 

لطفا به هیچ عنوان اسپم ندید و اگر امری بود در پیام خصوصی عنوان کنید

 

__________________________________________________________________________________________________________________

بخش اول - قسمت یکم

یکی از راه های وصل شدن به CLI یا command line interface یا همان رابط کاربری خط فرمان ، استفاده از لینوکس بدون دسکتاپ هستش

درست مثل لینوکس در دوران قدیمش که شما فقط با یک محیط ویژال کنسول سر و کار داشتید

برای ویژال کنسول کردن محیط گرافیکی هم میتونیم از Alt + Ctrl + F1 / F7 استفاده کنیم

که هر کدوم از اف ها یک محیط ویژال کنسول مجزا برامون فراهم میکنن

که مستقیم به ران لول عمیق تر وصل اند و حتی میتونیم همزمان با یوزر های مختلف لاگین کنیم

هر کدوم از این محیط های کنسولیه مجزا شماره ی مربوط به خودشون رو دارن که در tty دیده میشه

مثلا وقتی شما با Alt + Ctrl +F2 دومین محیط کنسولیه خودتون رو باز میکنید

و با همون یوزر یا یوزر دیگه ای لاگین میکنید در اولین خط مقدار tty2 رو میتونید ببینید 

که نشون میده شما در دومین محیط کنسولیتون قرار دارید

برای شیفت کردن بین tty ها از همون Alt + Ctrl + F با شماره ی tty مورد نظر استفاده میشه

تو این مورد F1 ( برگشتن از محیط کنسولیه دوم ( با مقدار tty2 ) به محیط کنسولیه اولیه ( با مقدار tty 1 ) )

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

ما میتونیم درون محیط های کنسولی هم از text mode console terminal

برای کاستومایز کردن محیط کنسول استفاده کنیم

 با استفاده از دستور setterm

برای مثال من چند مورد رو قرار میدم ، که البته خودتون با help میتونید لیست متنوع دستور setterm رو ببینید

setterm -background black white red blue green yellow magenta cyan

 تغیر رنگ پس زمینه به یکی از رنگ هایی که اسمش رو نوشتم

setterm -foreground green

تغیر رنگ متن به سبز ( یا هر رنگی که اسمش رو بنویسید )

inversescreen on or off

برعکس کردن رنگ زمینه و متن

store

ذخیره ی تغیرات

reset

برگشت به حالت پیش فرض

 

روش بعدی وصل شدن به شل استفاده از ترمینال های گرافیکی از داخل محیط دسکتاپ هستش  

این ترمینال ها روی کنسول کار میکنن ولی از داخل محیط گرافیکی دسکتاپ

ترمینال های مختلفی در محیط گرافیکی وجوده که هر کدوم اپشن های خودشون رو دارن ، ولی چون کار اصلیه مارو شل ها انجام میدن و این ترمینال ها صرفا رابط هستن ، استفاده از هر کدومشون بیشتر جنبه ی سلیقه ای داره

در زیر من لیست پر استفاده هاشون رو با سایت هاشون برای علاقه مندان میزارم

 

Eterm    http://www.eterm.org
Final    Term http://finalterm.org
GNOME    Terminal https://help.gnome.org/users/gnome-terminal/stable
Guake    https://github.com/Guake/guake
Konsole    Terminal http://konsole.kde.org
LillyTerm    http://lilyterm.luna.com.tw/index.html
LXTerminal    http://wiki.lxde.org/en/LXTerminal
mrxvt    https://code.google.com/p/mrxvt
ROXTerm    http://roxterm.sourceforge.net
rxvt    http://sourceforge.net/projects/rxvt
rxvt-unicode    http://software.schmorp.de/pkg/rxvt-unicode
Sakura    https://launchpad.net/sakura
st    http://st.suckless.org
Terminator    https://launchpad.net/terminator
Terminology    http://www.enlightenment.org/p.php?p=about/terminology
tilda    http://tilda.sourceforge.net/tildaabout.php
UXterm    http://manpages.ubuntu.com/manpages/gutsy/man1/uxterm.1.html
Wterm    http://sourceforge.net/projects/wterm
xterm    http://invisible-island.net/xterm
Xfce4 Terminal    http://docs.xfce.org/apps/terminal/start
Yakuake    http://extragear.kde.org/apps/yakuake

خوب دوستان این قسمت بیشتر جنبه ی مقدمه ی بخش اول و اشنایی علاقه مندان با کنسول رو داشت

به همین دلیل سعی کردم خیلی کوتاه و خلاصه توضیحش بدم ، در قسمت دوم دستورات خط فرمان رو شروع میکنیم

دوستان هرکس سوال ، پیشنهاد یا انتقادی داشت لطفا پیام خصوصی بدین و به هیچ عنوان اسپم ندید

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

بخش اول - قسمت دوم

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

فایل /etc/passwd شامل لیستی از یوزر های سیستم هستش که جلوی هر یوزر اطلاعات پیکربندیش قرار داره

در زیر یک نمونه از مقادیر فایل passwd در دایرکتوری etc رو میبینید

 

rednaxela:X:501:501:red naxela:/home/rednaxela:/bin/bash


هر کدوم از مقادیر فایل passwd دارای هفت فیلد هستش که این قسمت ها با ( : ) از هم جدا شدن

تو قسمت های بعدی بیشتر در مورد هر کدوم از این فیلد ها صحبت میکنیم ، ولی تو این قسمت توجهمون معطوف میشه به فیلد هفتم

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

در این مثال یوزر rednaxela بعد از لاگین بر روی شل bash قرار میگیره

 

اکثر لینوکس ها از شل قدرتمند bash به صورت پیشفرض استفاده میکنن ، که یکی از شل های اصلی برای اسکریپت نویسی محسوب میشه

به همین دلیل ما هسته ی این مجموعه رو بر مبنا ی این شل قرار میدیم و بعد از پایان بخش سوم یه نگاه اجمالی به شل های دیگه میکنیم

 

تعامل با bash manual با دستور man :

صفحات manual صفحاتی هستند که جامع ترین توضیحات و دستور العمل هارو در مورد ابجکت های شل دارن

که میتونید مثلا با اموزش طرز کار یه کامند و اپشن های اون کامند تستش کنید

man jobs 

man -k download

در دستور اول ما صفحات manual رو با استفاده از دستور  man برای دستور jobs دریافت میکنیم

و اما دستور دوم که دستور man رو با اپشن  k- اجرا کرده  ، از این اپشن میشه برای کشف دستوراتی که نمیدونید استفاده کنید

مثلا ما میخوایم یک فایل رو با استفاده از خط فرمان دانلود کنیم ، ولی نمیدونیم باید از چه دستوری برای دانلود استفاده کنیم

با دستور man -k download دستور هایی که مربوط به دانلود میشن برامون نمایش داده میشه

برای خروج از صفحات manual از حرف q استفاده کنید

برای اطلاعات بیشتر در مورد دستور man میتونید از خودش برای خودش ، یعنی دستور man man استفاده کنید

از اطلاعات بدست اومده میتونید برای شناخت بخش های مختلف خروجی دستور man بهره ببرید


فایل سیستم و دستورات مربوطه :

به تفاوت پارتیشن بندی ویندوز با لینوکس دقت کنید

همون طور که در مثال پایین میبینید لینوکس از سیستم درایو هایی که ویندوز استفاده میکنه تبعیت نمیکنه و از نظر پارتیشن بندی یک ساختار یکپارچه درونی داره

نکته ای که باید در اسکریپت ها مدنظر داشته باشید اینه که مسیر های لینوکس برخلاف ویندوز از اسلش / استفاده میکنن نه بک اسلش \
و همچنین لینوکس بر خلاف ویندوز به تفاوت حروف کوچیک و بزرگ حساسه

c:\Users\rednaxela\Documents\test.doc

/home/rednaxela/Documents/test.doc

در فایل سیستم لینوکس همه چیز از دایرکتوری ریشه ( / ) یا روت شروع میشه
( که در مثال بالا قبل از دایرکتوری home مشخصه ، که یعنی اولین دایرکتوری )
مواضب باشید به دلیل هم اسم بودن ، دایرکتوری ( / ) رو با دایرکتوری root در بحث ها اشتباه نگیرید ، چون در فارسی معنیه جفتشون میشه ریشه

مقادیر دایرکتوری /

boot = بوت دایرکتوری ( جایی که فایل های مربوط به بوت نگه داشته میشه )

dev = دیوایس دایرکتوری ( جایی که لینوکس نود های دیوایس تولید و نگهداری میکنه )
etc =  سیستم کانفیگوریشن ( جایی که فایل های پیکربندی سیستم نگه داری میشن )
home = دایرکتوری هوم ( جایی که لینوکس دایرکتوری یوزر هارو تولید و نگه داری میکنه )
lib = لیبراری دایرکتوری ( جایی که لینوکس فایل های لیبراری سیستم و اپلیکیشن هارو نگه میداره )
media = مدیا دایرکتوری ( یک مکان مرسوم برای مدیا های قابل جداسازی از سیستم )
mnt = مونت دایرکتوری ( یک مکان مرسوم دیگه برای مونت کردن مدیا های قابل جدا سازی )
opt = اپشنال دایرکتوری ( محل نگه داری دیتا و پکیج های نرم افزار های ثرد-پارتی )
proc = پراسس دایرکتوری ( جایی که اطلاعات سخت افزار و پروسه ها نگه داشته میشه )
bin = باینری دایرکتوری ( جایی که خیلی از ابزار های سطح یوزر گنو نگه داشته میشن )
root = روت دایرکتوری ( جایی که دایرکتوری خانه و دیتا های یوزر روت نگه داشته میشه )
sbin =  سیستم باینری دایرکتوری ( جایی که خیلی از ابزار های سطح ادمین گنو نگه داشته میشن )
run = ران دایرکتوری ( جایی که دیتا های ران تایم نگه داشته میشه )
srv = سرویس دایرکتوری ( جایی که دیتا های مربوط به سرویس هایی که سیستم میده نگه داشته میشه )
sys = سیستم دایرکتوری ( جایی که دیتا های مربوط به اطلاعات سخت افزاری نگه داشته میشه )
tmp = تمپورری دایرکتوری ( جایی که فایل های تمپورری (در فصل مربوط بهش کامل بهش میپردازیم) میتونن تولید و نگه داری بشن )
usr = یوزر باینری دایرکتوری ( محل نگه داری ابزار ها و دیتا فایل های سطح یوزر گنو )
var = وری ایبل دایرکتوری ( جایی که فایل هایی با مقادیر متغیر نگه داشته میشه مثل لاگ فایل ها )


به عنوان مثال وقتی که وارد شل میشید به طور پیش فرض در دایرکتوری home در لیست بالا قرار دارید که البته اونجا هم تو یه دایرکتوری دیگه که به اسم اکانتتون هست

 

دستورات خط فرمان :

 

cd /home/rednaxela

cd ..

از دستور cd برای مرور فایل سیستم استفاده میشه
مقادیری مثل ( . ) یا ( .. ) به ترتیب اشاره به دایرکتوری فعلی و دایرکتوری بالا تر دارن

 

pwd

/root/books

از دستور pwd برای نمایش ادرس جایی که در فایل سیستم هستیم استفاده میشه
در این مثال خروجی دستور pwd میگه ما در مسیر root/books/ هستیم

 

ls
ls -F -R -a -l
ls *.txt
ls scri??
ls go[a-p]d
ls b[!a]d

از دستور ls برای مشاهده لیست مقادیر یک دایرکتوری استفاده میشه
که اپشن های متنوع ای داره که چند تاشون رو مثال زدم ، اپشن ها میتونن به صورت تکی یا بیشتر استفاده بشن ، یا حتی ادغام شن مثل ls -alF

اپشن F- فایل هارو از دایرکتوری ها متمایز میکنه
اپشن R- تمام محتوای دایرکتوری رو با تمام مقادیری که خود اونها دارن تا انتها لیست میکنه
اپشن a- مقادیر مخفی رو هم در لیست به نمایش میزاره
اپشن l- لیست خروجی رو همراه با اطلاعات مربوط به هر کدوم از مقادیر نشون میده
مقادیری مثل سطح دسترسی فایل برای یوزر ها
نام صاحب فایل
نام گروه فایل
مقدار سایز فایل
اخرین زمانی که اصلاح شده و ...

از دستور ls برای لیست هایی که مد نظرمون هست هم میشه استفاده کرد
مثل ls *.txt که میگه هر فایلی که چهار کاراکتر اخر اسمش ( t & x & t & . ) بود رو لیست کن
یا ? که میگه به جای من هرچیزی بود بپذیر
یا  [a-p] که میگه به جای من هر کاراکتری از a تا p بود قبول کن
یا [a!] که میگه به جای a هر کاراکتر دیگه ای بود بپذیر

شما میتونید از این چند نمونه ی ساده به جز دستور ls در جاهای بیشماری استفاده کنید
که البته با مدل های بیشتری در ادامه اشنا میشید

 

touch filename
touch script
touch abc.txt
touch /home/rednaxela/zzzz.sh

از دستور touch برای ساخت فایل خالی استفاده میشه
که در مثال بالا طرز استفاده و امکاناتش رو میتونید ببینید
ا

 

cp file file2
cp /root/file /home/rednaxela/file
cp file /root/books/file
cp /home/rednaxela/books/file .

از دستور cp برای کپی کردن فایل ها استفاده میشه

در مثال اول یک فایل در همون دایرکتوری ای که بوده کپی شده ، به همین دلیل اسمش رو عوض کردیم
در مثال دوم چون خودمون تو هیچ کدوم از مسیر های مبدا و مقصد کپی نبودیم
نام فایل رو چه در مبدا چه در مقصد همراه با مسیر کامل نوشتیم
در مثال سوم چون خودمون در دایرکتوری قرار گیری فایل بودیم اسم فایل رو بدون ادرس مبدا نوشتیم
و اما مثال چهارم ، همون طور که قبلا گفتیم کاراکتر ( . ) اشاره به دایرکتوری فعلی ما داره به همین دلیل برای کپی کردن فایل به جایی که هستیم مسیر مبدا رو نوشتیم و به جای مسیر مقصد ( جایی که هستیم ) کاراکتر ( . ) گذاشتیم

میتونیم از اپشن i- هم استفاده کنیم , که در صورت وجود یک فایل هم نام در ادرس مقصد قبل از کپی روی مقادیر اون فایل ازمون سوال شه
با استفاده از اپشن R- میتونیم تمام محتوای یک دایرکتوری رو کپی کنیم

 

ln -s /target-file-name /shortcut-file-name

از دستور ln با اپشن s- برای ساخت شورتکات استفاده میشه

 

mv /home/rednaxela/file1 /home/rednaxela/file2

mv file1 /root/books/

از دستور mv برای انتقال فایل و تغیر نام فایل استفاده میشه
در مثال اول ( تغیر نام به file2) تغیر نام انجام میشه
در مثال دوم ( انتقال به داخل دایرکتوری books ) انتقال فایل انجام میشه
در دستور mv هم مثل دستور cp میتونیم از اپشن i- یا R- استفاده کنیم

 

rm file-name

rm -R directory-name

با دستور rm و انتخاب فایل , فایل مورد نظر دیلیت میشه
با استفاده از اپشن R- میتونیم یه دایرکتوری رو با همه ی مقادیرش دیلیت کنیم

 

mkdir directory-name 

mkdir -P dir/dir/dir/directory-name

با استفاده از دستور mkdire میتونیم دایرکتوری بسازیم
با اضافه کردن اپشن P- میتونیم با یک دستور دایرکتوری های تو در تو بسازیم

 

rmdir directory-name 


از دستور rmdir برای دیلیت کردن دایرکتوری های خالی استفاده میشه

 

tree directory-name

از دستور tree برای دیدن ساختار درختی یک دایرکتوری استفاده میشه
( به تصویر کشیدن تمام مقادیر لایه به لایه )

 

file file-name

دستور file نوع فایلی که بهش بدید رو بر مبنای مقدار درونیه فایل مشخص میکنه

 

cat file-name 
cat -n file-name
cat -b file-name

دستور cat فایلی که بهش بدید رو باز میکنه ( نه اجرا )
اپشن n- اول هر خط یک عدد میزاره به ترتیب میاد پایین
اپشن b- فقط اول خط هایی که دارای مقادیر باشن شماره بندی اعمال میکنه

 

more file-name

دستور more هم مشابه دستور cat عمل میکنه ولی یوزر فرندلی تر
و مقدار خروجی رو بخش بخش و درصد گذاری شده نمایش میده
نسبت به cat داینامیک تره و قدرت پویش یوزر رو افزایش میده

 

less file-name

دستور less مدل پیشرفته ی more هستش که قابل توجه ترین بخشش اینه که
فایل رو قبل از کامل خوندن باز میکنه ، بدین معنا که به محض اجرا مقدار دیتایی که بدست اورده باشه رو نمایش میده و در صورت حجیم بودن فایل یوزر رو منتظر نمیزاره تا تمام فایل رو بخونه

 

tail file-name
tail -n 5
tail -5
tail -f

دستور tail به صورت پیشفرض ده خط اخر فایل رو میخونه
که با اپشن n- و عدد درخواست تعداد خط های اخر فایل یا مستقیما وارد کردن عدد درخواستی بعد از ( - )

میتونیم این مقدار رو تغیر بدیم
نکته ی جالب توجه این دستور اپشن f- هستش که باعث میشه سیشن دستور فعال بمونه حتی وقتی یه برنامه داره از فایل مورد نظر استفاده میکنه 
که این باعث میشه به محض تغیر در فایل به صورت زنده تغیرات نمایش داده بشن

 

head file-name
head -n 6
head -6
head -f

دستور head مدل برعکس دستور tail هستش ، که ده خط اول فایل رو میخونه
در بقیه ی موارد کاملا مثل دستور tail عمل میکنه


پایان قسمت دوم از بخش یک 
برای اینکه طولانی شدن مبحث و تغیر در ریشه ی ادامه دستورات خط فرمان
خستتون نکنه ادامه دستورات در قسمت سوم تقدیمتون میشه

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

بخش اول - قسمت سوم

ادامه مبحث دستور های خط فرمان ( مدیریت سیستم لینوکس )
یکی از مهم ترین بخش ها در مدیریت لینوکس ، تحت نظر داشتن عوامل فعال در سیستمه
که ما دستور های مرتبط بهش رو مرور میکنیم

ps

-A
-M
-f
-l
--forest

وقتی یک برنامه روی سیستم اجرا میشه خودش رو به صورت پروسه نشون میده
برای دیدن اینکه چه پروسه هایی روی سیستم فعال هستند ، از دستور ps استفاده میکنیم
که میتونه ضمن نشون دادن پروسه ها اطلاعات مربوط به هرکدومشونم بهمون بده
در اینجا من چند تا از اپشن های جالبش رو مثال میزنم

اپشن A- نمایش تمام پروسه ها
اپشن M- نمایش اطلاعات امنیتی مربوط به پروسه ها
اپشن f- نمایش لیست ( فول فرمت )
اپشن l- نمایش به صورت لانگ لیست ( اطلاعات بیشتر )
اپشن forest-- که یکی از پارامتر های لانگ گنو محصوب میشه ، برای به تصویر کشیدن رابطه بین پروسه ها استفاده میشه

برخی از مقادیری که دستور ps میتونه بهمون بده رو براتون لیست میکنم

UID
PID
PPID
STIME
TTY 
CMD

فیلد uid : مربوط به کاربریه که پروسه رو فعال کرده
فیلد pid : کد پی ایدی پروسه ( یک کد منحصر به هر پروسه )
فیلد ppid : اگه یک پروسه از طریق پروسه دیگه ای فعال شده باشه pid پروسه اولیه رو نمایش میده
فیلد stime : سیستم تایمی که پروسه فعال شده
فیلد TTY : نمایش اینکه هر پروسه در کدوم TTY فعال شده
فیلد Cmd : اسم خود برنامه ی هر پروسه

همون طور که دیدید دستور ps در نوع خودش عالی کار میکنه ضمن اینکه پویایی این دستور به مثال کوچیک ما محدود نمیشه
ولی اگه هدف شما زیر نظر گرفتن روند پروسه هاییه که فعالیت منقطع دارن
باید از دستور top استفاده کنید

top


دستور top هم مثل ps پروسه ها و اطلاعات برامون لیست میکنه
ولی این کارو در حالت ( real-time ) انجام میده ، که باعث میشه به هدفمون برسیم

اولین بخش خروجی اطلاعات عمومی سیستم رو نمایش میده
خط اول زمان فعلی ، زمانی که سیستم بالا بوده ، تعداد کاربر های لاگین کرده و load average رو نشون میده
خط دوم اطلاعات عمومی پروسه ها رو نشون میده 
مثل : تعداد کل پروسه ها ، چند پروسه فعال وجود داره ، چند پروسه متوقف شدن ، چند پروسه خواب هستن الان و چند پروسه به زامبی تبدیل شدن
زامبی : پروسه هایی که کارشون تموم شده ولی پروسه هایی که اینهارو فعال کرده بودن هنوز هیچ پاسخی بهشون ندادن
خط سوم اطلاعات عمومی در مورد cpu نشون میده
و دو خط اخر هم در مورد وضعیت system memory هستند ، خط اول وضعیت physical memory , و خط دوم swap memory

بخش دوم دستور هم شامل اطلاعات پروسه ها میشه ، مثل دستور ps

 

kill 3940
killall http*

از دستور kill و killall برای متوقف کردن پروسه ها استفاده میشه

در مثال اول pid یک پروسه که 3940 هست رو به عنوان مقدار میدیم به دستور تا اون پروسه متوقف شه
در مثال دوم به دستور killall میگیم هر پروسه ای که با http شروع میشه رو متوقف کن

 

mount
mount -t ntfs /dev/sdb1 /media/disk
umount directory device

همونطور که قبلا در موردش صحبت کردیم لینوکس تمام فایل سیستم رو در یه دایرکتوری مرجع ( / ) قرار میده 
قبل از اینکه شما بتونید از یک مدیا دیسک استفاده کنید ، باید اونو در سیستم دایرکتوری جا بدید ، که به این کار میگن mounting
که برای این کار به دسترسی روت نیاز دارید
( البته این موضوع مربوط به اون دسته از removable media هایی میشه که به صورت خودکار این عمل براشون اتفاق نمیوفته ، که شامل موارد مرسوم نیست)

با وارد کردن دستور mount به صورت تنها ، لیستی از دیوایس های مونت شده نمایش داده میشه ، به همراه مسیرشون ، نوع فایل سیستمشون و وضعیت سطح دسترسیشون

در مثال اول ما یک فلش مموری رو با نوع فایل سیستم ntfs در ادرس دیوایس و ادرس مدیا ی مشخص شده به ترتیب ، مونت کردیم
البته در حالت پیشفرض فقط همون یوزر روت به مدیا ی مونت شده دسترسی داره ، که میتونه سطح دسترسی رو تغیر بده

در مثال دوم هم از دستور umount هم برای unmount کردن استفاده کردیم

 

df -h


از دستور df برای دیدن فضای خالی تمام دیوایس ها استفاده میکنیم ( اینترنال و اکسترنال )
اپشن h- مقادیر خروجی رو به صورت مگ و گیگ و ... نمایش میده که راحت تر قابل درک باشه

 

du -h

دستور du بر خلاف دستور df مقادیر مربوط به فضای استفاده شده رو نمایش میده
اپشن h- هم همون اپشن مثال قبله

 

sort file1
sort -n file1
sort -M file1
sort -r file1
sort -t ':' -k 3 /etc/passwd

از دستور sort برای مرتب سازی مقادیر استفاده میشه
از اپشن n- برای مرتب سازی بر اساس ترتیب اعداد استفاده میشه
از اپشن M- برای مرتب سازی بر اساس ترتیب ماه های میلادی استفاده میشه ( برای مواقعی که اسم مقادیر دارای نام ماه هستن ، مثل لاگ فایل  ها )
از اپشن r- برای برعکس کردن ترتیب فعلی مقادیر استفاده میشه
و اما ترکیب جالب t- و k- که در مرحله اول یک کاراکتر رو به عنوان جدا کننده انتخاب میکنه و در مرحله دوم بین بلاک های ساخته شده بلاک مورد نظر رو انتخاب میکنه ، در مثال ما سومین بلاک انتخاب شده ، از بین بلاک هایی که کاراکتر ( : ) به وجود اورده

 

grep root passwd
grep -e red -e blue file-name
grep -v xxxx file-name
grep -n
grep -c

از دستور grep برای جستجو و تعامل با مقادیر و فایل استفاده میکنیم
در مثال اول با مشخص کردن الگوی جستجو root برای فایل passwd به دستور grep میگیم بین مقادیر فایل passwd هر خطی که الگوی مارو داشت نمایش بده
اپشن e- برای مشخص کردن چند الگو استفاده میشه ، تو مثال ما الگو های red و blue مشخص شدن
اپشن v- به دستور میگه تمام مقادیر فایل رو نمایش بده به جز قسمت هایی که الگوی ما رو دارن
اپشن n- شماره خطی که مقدار الگوی مارو داشته هم باهاش نمایش میده
اپشن c- به جای نمایش مقادیر ، تعداد خط هایی که الگوی مارو داشتن رو نمایش میده

 

gzip
gzcat
gunzip

از دستور gzip برای زیپ کردن فایل استفاده میشه
از دستور gzcat برای نمایش مقادیر فایل زیپ استفاده میشه
از دستور gunzip برای از زیپ خارج کردن مقادیر استفاده میشه

 

tar -cvf test.tar test/ test2/
tar -tf test.tar
tar xvf test.tar
tar -zxvf file-name.tgz.

از دستور tar برای ساخت فایل های فشرده tar استفاده میشه که بخشی از فایل های فشرده مرسوم رو تشکیل میدن
اپشن c- برای ساخت فایل استفاده میشه
اپشن v- برای نمایش فرایند استفاده میشه
اپشن f- برای مشخص کردن فایل خروجی استفاده میشه
اپشن x- برای استخراج مقادیر فایل فشرده استفاده میشه
در مثال اول ما یک فایل فشرده به اسم test.tar میسازیم که مقادیر فولدر های test و test2 رو دریافت کرده
در مثال دوم ما مقدار فایل ساخته شده در مثال اول رو بدون استخراج فایل میبینیم
در مثال سوم فایل رو استخراج میکنیم
در مثال چهارم هم فایل رو استخراج میکنیم ، که البته مربوط به فرمت پیشفرض نیست ، مثلا برای استخراج تربال ها استفاده میشه

 

در ادامه لیست دستورات پر استفاده رو براتون گذاشتم که بخشیش رو تا الان دیدید و بقیش هم در قسمت های بعد با توجه به موضوع بحث اون قسمت میبینید

head      Displays the fi rst portion of the specifi ed fi le’s contents
help      Displays the help pages for bash built-in commands
killall      Sends a system signal to a running process based on process name
kwrite     Invokes the KWrite text editor
less     Advanced viewing of fi le contents
link     Creates a link to a fi le using an alias name
ln     Creates a symbolic or hard link to a designated fi le
ls     Lists directory contents
makewhatis     Creates the whatis database allowing man page keyword searches
man     Displays the man pages for the designated command or topic
mkdir     Creates the specifi ed directory under the current directory
more     Lists the contents of the specifi ed fi le, pausing after each screen of data
mount     Displays or mounts disk devices into the virtual fi lesystem
mv     Renames a fi le
nano     Invokes the nano text editor
nice     Runs a command using a different priority level on the system
passwd     Changes the password for a system user account
ps     Displays information about the running processes on the system
pwd     Displays the current directory
renice     Changes the priority of a running application on the system
rm     Deletes the specifi ed fi le
rmdir     Deletes the specifi ed directory
sed     Streams line editing using editor commands
sleep     Pauses bash shell operation for a specifi ed amount of time
sort     Organizes data in a data fi le based on the specifi ed order
stat     Views the fi le statistics of the specifi ed fi le
sudo     Runs an application as the root user account
tail     Displays the last portion of the specifi ed fi le’s contents
tar     Archives data and directories into a single fi le
top     Displays the active processes, showing vital system statistics
touch     Creates a new empty fi le or updates the timestamp on an existing fi le
umount     Removes a mounted disk device from the virtual fi lesystem
uptime     Displays information on how long the system has been running
useradd     Creates a new system user account
userdel     Removes an existing system user account.
usermod     Modifi es an existing system user account
vi     Invokes the vim text editor
vmstat     Produces a detailed report on memory and CPU usage on the system
chage     Changes the password expiration date for the specified system user account
chfn     Changes the specifi ed user account’s comment information
chgrp     Changes the default group of the specifi ed fi le or directory
chmod     Changes system security permissions for the specifi ed fi le or directory
chown     Changes the default owner of the specifi ed fi le or directory
chpasswd     Reads a fi le of login name and password pairs and updates the passwords
chsh     Changes the specifi ed user account’s default shell
clear     Removes text from a terminal emulator or virtual console terminal
compress     Original Unix fi le compression utility
coproc     Spawns a subshell in background mode and executes the designated command
cp     Copies the specifi ed fi les to an alternate location
crontab Initiates the editor for the user’s crontable fi le, if allowed
cut     Removes a designated portion of each specifi ed fi le’s lines
date     Displays the date in various formats
df     Displays current disk space statistics for all mounted devices
du     Displays disk usage statistics for the specifi ed fi le path
emacs     Invokes the emacs text editor
file     Views the fi le type of the specifi ed fi le
find     Performs a recursive search for fi les
free     Checks available and used memory on the system
gawk     Streams editing using programming language commands
grep     Searches a fi le for the specifi ed text string
gedit     Invokes the GNOME Desktop editor
getopt     Parses command options including long options
groups     Displays group membership of the designated user
groupadd     Creates a new system group
groupmod     Modifi es an existing system group
gzip     The GNU Project’s compression using Lempel-Ziv compression
whereis     Displays a designated command’s fi les, including binary, source code, and man pages
which     Finds the location of an executable fi le
who     Displays users currently logged into system
whoami     Displays the current user’s username 
xargs     Takes items from STDIN, builds commands, and executes the commands
zip     Unix version of the Windows PKZIP program

 

پایان قسمت سوم از بخش یک

در قسمت بعد وارد مباحث مرتبط با شل میشیم

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

بخش اول - قسمت چهارم

الان که تا حدی با دستورات بیسیک خط فرمان اشنا شدید وقتشه مروری بر عمق شل داشته باشیم
که برای درک بهترش باید مروری بر موارد بیسیک کامند لاین اینترفیس ( CLI ) داشته باشیم

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

در این قسمت شما با پروسه شل و به وجود اومدن ساب شل ها و رابطشون با پرنت شل ها اشنا میشید

حتما یادتونه در قسمت های قبل در مورد شل پیشفرض برای هر یوزر صحبت کردیم ، که در پیکربندی هر یوزر این مقدار میتونه متغیر باشه 
( فیلد هفتم از مقادیر فایل passwd که با مقدار bin/bash/ شل پیش فرض یوزر ( اینجا بش ) و ادرسش رو نشون میداد )
وقتی شما در محیط ویژال کنسول لاگین میکنید ، یا وقتی یه ترمینال در محیط گرافیکی باز میکنید ، شل پیشفرضی که توضیح دادم براتون فعال میشه
اما ...
اما این تنها شل پیش فرض سیستم شما نیست
یک شل پیش فرض دیگه وجود داره به اسم دیفالت سیستم شل ، که این شل برای اسکریپت های سیستم استفاده میشه ، مثل اونایی که تو استارت اپ بهشون نیازه
این شل پیش فرض در مسیر bin/sh/ قرار داره

در بعضی لینوکس ها شما مثال زیر رو میبینید که طی اون دیفالت سیستم شل با استفاده از یه لینک رو شل بش تنظیم شده

$ ls -l /bin/sh
lrwxrwxrwx. 1 root root 4 Mar 20 15:05 /bin/sh -> bash

 

 البته باید توجه داشته باشید روی همه لینوکس ها ، هم برای دیفالت سیستم شل و هم برای دیفالت اینتراکتیو شل ، یک شل استفاده نمیشه 
و ممکنه هر کدوم از دو شل پیشفرض روی یه شل متفاوت تنظیم شده باشن ، مثل مثال پایین

$ cat /etc/passwd

[...]
rednaxela:x:501:501:red,,,:/home/rednaxela:/bin/bash
$
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Apr 22 12:33 /bin/sh -> dash


تفاوت شل های پیش فرض میتونه منجر بشه به درست کار نکردن اسکریپت ما 
( در صورتی که سیستم دیفالت شل سیستمی که اسکریپت مارو اجرا میکنه ، با شلی که اسکریپت باهاش نوشته شده فرق داشته باشن )

به همین دلیل ما همیشه در اولین خط اسکریپت نوع شلی که قراره اجراش کنه رو مشخص میکنیم ( مربوط به بخش دوم اموزش )

اگرچه شل های پیش فرض قابل تغیرن ،اما  تو حالت عادی هم شما مجبور نیستید از دیفالت شل اینتراکتیو استفاده کنید ، تو همون محیط کنسول میتونید هر شلی رو بخونید تا اون شل STDIN رو دریافت کنه ، ( در بخش دوم با STDIN اشنا میشید ٬ اینجا منظور مقادیر ورودیه ) و از اون لحضه با اون شل کار کنید

به مثال پایین دقت کنید ، تو محیط ترمینال شل دش خونده شده ، به خروجی دستور دقت کنید ، این خروجی به معنی ( هیچی و فاقد خروجی ) نیست
از این لحضه هر دستوری وارد کنید شل دش اون دستور رو میگیره
مثل دستور exit که شل دش گرفت و طبق اون خودش رو بست ، و به همین دلیل ترمینال بسته نشد و شما علامت پرامپت رو میبینید ( که یعنی برگشتید به همون شلی که باهاش شل دش رو خونده بودید )

$ /bin/dash
$

$ exit
exit
$

 

مروری بر رابطه parent shell با child shell یا همون subshell

شلی که شما بعد از لاگین تو محیط کنسول میگیرید ، یا از ترمینال تو محیط گرافیکی ، شل پرنت یا شل اولیه محسوب میشه 
وقتی شما توی محیط شل یه شل دیگه باز میکنید ( چه مستقیم چه غیر مستقیم )
اون شل ثانویه ، چایلد شل یا ساب شله

بعد از باز کردن یه ساب شل چیز خاصی برای نشون دادن روابط بین شل ها نشون داده نمیشه ، به همین دلیل از دستور ps با اپشن f- استفاده میکنیم
در مثال پایین یه نمونه از خروجی دستور قبل از اجرای ساب شل و بعدش رو میتونید ببینید

$ ps -f
UID  PID    PPID C  STIME TTY TIME       CMD
501 1841 1840  0  11:50 pts/0 00:00:00 -bash
501 2429 1841  4  13:44 pts/0 00:00:00 ps -f
$
$ bash
$
$ ps -f
UID  PID   PPID  C  STIME TTY TIME       CMD
501 1841 1840  0  11:50 pts/0 00:00:00 -bash
501 2430 1841  0  13:44 pts/0 00:00:00 bash
501 2444 2430  1  13:44 pts/0 00:00:00 ps -f

 

به خروجی اولین دستور دقت کنید ، دوتا پروسه رو نشون میده اولی bash- دومی دستور ps 
اگه به ppid ( شماره پروسه ی پرنت ) دستور ps نگاه کنید pid ( شماره پروسه ) بش رو مینید ، که یعنی پروسه مادری که پروسه ی دستور ps از اون نشعت گرفته ، متعلق به بش هستش

با همین تفاسیر در خروجی دومین دستور ps 
( که بعد از دستور bash تایپ شده ، که یعنی داخل شل بش جدیدی که باز شده دستور ps وارد شده ) 
میبینیم که سه پروسه قرار داره ، به ppid دومین پروسه دقت کنید ( شل جدید ) میبینید که مقدار pid اولین پروسه رو داره 1841
که یعنی شل دوم داخل شل اول باز شده و چایلد شل یا ساب شل همون شل اوله
و چون تو شل دوم ps گرفتیم میبینید که pid ساب شلمون ppid دستور ps هستش

وقتی یه ساب شل به وجود میاد ، همه ی ابجکت های محیطیه شل مادر رو نداره
و این ممکنه تو کار با متغیر ها مشکل ایجاد کنه ، که در قسمت متغیر ها بهش میپردازیم

یه ساب شل میتونه خودش هم ساب شل ایجاد کنه که اون ساب شل ثانویه میشه گرند چایلده پرنت چایلده ساب شل اولیه ، و حتی میشه بیشتر رفت پایین
(میشه چندین شل تو همدیگه ساخت ، که با هم در تعامل اند )
به مثال پایین دقت کنید

$ ps -f
UID PID  PPID  C  STIME TTY   TIME     CMD
501 1841 1840  0  11:50 pts/0 00:00:00 -bash
501 2532 1841  1  14:22 pts/0 00:00:00 ps -f
$
$ bash
$
$ bash
$
$ bash
$
$ ps --forest
 PID    TTY    TIME     CMD
 1841 pts/0 00:00:00 bash
 2533 pts/0 00:00:00      \_ bash
 2546 pts/0 00:00:00           \_ bash
 2562 pts/0 00:00:00                \_ bash
 2576 pts/0 00:00:00                     \_ ps


هر کدوم از دستورات bash که میبینید داخل دستور قبلی اجرا شده
خروجی دو دستور ps رو با هم مقایسه کنید

 

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

توی یک خط شما میتونید دستورات مختلف رو جوری لیست کنید که یکی بعد از دیگری اجرا بشن ، این عمل با گذاشتن یک semicolon ( ; ) بین دستورات اتفاق میوفته 
به لیست دستورات و خروجیه به ترتیبشون در مثال زیر دقت کنید

$ pwd ; ls ; cd /etc ; pwd ; cd ; pwd ; ls
/home/rednaxela
Desktop Downloads Music Public Videos
Documents junk.dat Pictures Templates
/etc
/home/rednaxela
Desktop Downloads Music Public Videos
Documents junk.dat Pictures Templates

 

یه فرمت دیگش هم به این صورته

{ command ; } 

 

مثال بالا یک کامند لیست بود ، برای ساخت لیست پروسه ها کافیه کامند لیست رو بین پرانتز بزاریم
تفاوت command list  با process list اینه که مقادیر porocess list توی یک ساب شل اجرا میشن
به مثال زیر دقت کنید ، به لیست دستور فقط یک پرانتز اضافه شده ، خروجی هم به نظر فرقی نکرده ، ولی از ریشه یه تغیر بزرگ حاصل شده

$ (pwd ; ls ; cd /etc ; pwd ; cd ; pwd ; ls)
/home/rednaxela
Desktop Downloads Music Public Videos
Documents junk.dat Pictures Templates
/etc
/home/rednaxela
Desktop Downloads Music Public Videos
Documents junk.dat Pictures Templates

 

برای بهتر دیدن تغیر در خروجی دو مثال بالا ، از یک متغیر محیطی به اسم BASH_SUBSHELL استفاده میکنیم
در صورتی که دستورات توی یک ساب شل اجرا شده باشن مقدار این متغیر 1 میشه ، اگه تو ساب شل اجرا نشده باشن مقدارش 0 میشه
( هر عدد مربوط به عمق شل بر تعداد ساب شل هاست ، جلو تر مثال میزنم )
مثال بالا رو با این متغیر محیطی ببینید :

$ pwd ; ls ; cd /etc ; pwd ; cd ; pwd ; ls ; echo $BASH_SUBSHELL
/home/rednaxela
Desktop Downloads Music Public Videos
Documents junk.dat Pictures Templates
/etc
/home/rednaxela
Desktop Downloads Music Public Videos
Documents junk.dat Pictures Templates
0

 

اینجا ما با دستور echo مقدار $ متغیر رو نمایش میدیم ( عدد 0 خط اخر )
که یعنی دستورات تو ساب شل اجرا نشدن

$ ( pwd ; ls ; cd /etc ; pwd ; cd ; pwd ; ls ; echo $BASH_SUBSHELL )
/home/rednaxela
Desktop Downloads Music Public Videos
Documents junk.dat Pictures Templates
/etc
/home/rednaxela
Desktop Downloads Music Public Videos
Documents junk.dat Pictures Templates
1

 

میبینید که تو این مثال خروجی 1 گرفتیم ، چون process list برای اجرا ساب شل ران کرده

شما میتونید توی process list هم دوباره ساب شل باز کنید ، به مثالش دقت کنید

$ ( pwd ; echo $BASH_SUBSHELL)
/home/rednaxela
1
$ ( pwd ; (echo $BASH_SUBSHELL))
/home/rednaxela
2

 

دقت کنید خروجی مربوط به ساب شل اولین دستور 1 بود ، مثل مثال های قبلی
ولی خروجی دومین دستور 2 بود 
که میگه این دستور تو عمق دو لایه شل اجرا شده ( ساب شل دوم ، در ساب شل اول )

 

استفاده از background mode


حالت بک گراند به شما این فرصت رو میده که وقتی شل در حال اجرای دستوریه که زمان میبره انجامش ، شما منتظر نمونید و همون لحضه بتونید دوباره کنترل شل رو بدست بگیرید
برای اجرای یک کامند در حالت بک گراند تنها کافیه به انتهای دستور & اضافه کنید

$ sleep 3000 &
[1] 2396
$ ps -f
UID PID    PPID C STIME TTY TIME       CMD
501 2338 2337 0 10:13 pts/9 00:00:00 -bash
501 2396 2338 0 10:17 pts/9 00:00:00 sleep 3000
501 2397 2338 0 10:17 pts/9 00:00:00 ps -f

 

مثال بالا دستور sleep رو با مقدار 3000 ثانیه اجرا کرده ( در حالت بک گراند با استفاده از & در انتهای دستور )
و چون دستور در حالت بک گراند اجرا شده ، کنترل شل فورا به دستمون برگشته و تونستیم دستور ps رو اجرا کنیم
( اگه دستور قبلی در بک گراند نبود ، باید سه هزار ثانیه صبر میکردیم تا بتونیم دستور بعدی رو وارد کنیم )
که در خروجی دستور ps میتونیم sleep رو در حال اجرا ببینیمعلاوه بر دستور ps میتونیم از دستور jobs برای دیدن دستورات بک گراند استفاده کنیم 

$ jobs
[1] +   Running          sleep 3000 &


میبینید که دستور jobs شماره job number هر job رو به علاوه ی وضعیت اجرا و اسم دستور و مقدار دستورش رو نشون میده


با اپشن l- میتونید pid هر دستور رو هم ببینید

jobs -l
[1] +   2399     running          sleep 3000 &

 

هر زمان یک بک گراند جاب به اتمام برسه ، نتیجش در صفحه اعلان میشه

[1] + Done                     sleep 3000 &

 

گذاشتن process list ها در background :


میدونید که process list ها در ساب شل اجرا میشن ، با این روش ما میتونیم ساب شل ایجاد شده رو ببریم در background
مثال زیر هر دو حالت رو به تصویر میکشه

در حالت عادی 

$ (sleep 2 ; echo $BASH_SUBSHELL ; sleep 2)
1

 

در حالت بک گراند

$ (sleep 2 ; echo $BASH_SUBSHELL ; sleep 2)&
[2] 2401
$ 1
[2]+ Done ( sleep 2; echo $BASH_SUBSHELL; sleep 2 )

 

در حالت بک گراند ،  خط اول از خروجی مربوط به لحضه رفتن به بک گرانده ، خط دوم و سوم هم مربوط به خروجی دستور و اعلان اتمام جاب هستش

 

انجام co-processing با دستور coproc :


 دستور coproc ساب شل در بک گراند ایجاد میکنه ، و دستورات رو اونجا اجرا میکنه
به ترکیب جالب co-processing با process list در مثال زیر دقت کنید

$ coproc ( sleep 10 ; sleep 20 )
[1] 2574
$
$ jobs
[1]+ Running coproc COPROC ( sleep 10; sleep 2 ) &
$
$ ps --forest
 PID TTY TIME CMD
 2483 pts/12 00:00:00 bash
 2574 pts/12 00:00:00 \_ bash
 2575 pts/12 00:00:00 | \_ sleep
 2576 pts/12 00:00:00 \_ ps

 

مروری بر دستورات built-in و external

دستورات external دستوراتی هستند که بیرون از خود شل قرار دارند ، که معمولا در مسیر های زیر هستند

/bin   /usr/bin   /sbin   /usr/sbin


مثلا دستور ps یه دستور اکسترناله ، شما میتونید محل نگه داریشو با دستورات which و type پیدا کنید

$ which ps
/bin/ps
$
$ type -a ps
ps is /bin/ps
$
$ ls -l /bin/ps
-rwxr-xr-x 1 root root 93232 Jan 6 18:32 /bin/ps

 

هر موقع یک دستور اکسترنال اجرا بشه ، بدین واسطه یک child process به وجود میاد ، به مثال زیر دقت کنید

$ ps -f
UID PID  PPID C STIME TTY   TIME     CMD
501 2743 2742 0 17:09 pts/9 00:00:00 -bash
501 2801 2743 0 17:16 pts/9 00:00:00 ps -f

 

خود دستور ps به عنوان یکی از پروسه ها در لیست دیده میشه که مقدار ppid برابر با pid بش هستش ، که یعنی بش به عنوان پرنت ps رو اجرا کرده

و اما دستورات built-in دستوراتی هستند که بخشی از خود شل محسوب میشن و به عنوان child process اجرا نمیشن مثل دستورات cd و exit 

$ type cd
cd is a shell builtin
$
$ type exit
exit is a shell builtin

 

بر خلاف دستورات اکسترنال ، این دستورات جایی بیرون از شل دیده نمیشن
چون برای اجرای دستورات built-in نیازی به child process نیست ، این دستورات سریع تر از دستورات اکسترنال هستند

اما بعضی از دستورات هستند که تلفیقی از این دو نوع محسوب میشن
برای مثال هر دو دستور echo و pwd از این دسته هستند 

$ type -a echo
echo is a shell builtin
echo is /bin/echo
$
$ which echo
/bin/echo
$
$ type -a pwd
pwd is a shell builtin
pwd is /bin/pwd
$
$ which pwd
/bin/pwd


پایان قسمت چهارم از بخش یک
در قسمت پنجم وارد مباحث مرتبط با متغیر ها میشیم

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
 

بخش اول - قسمت پنجم 

    یکی از عوامل تاثیر گذار در محیط شل متغیر های محیطی هستند , که خیلی از برنامه ها و اسکریپت ها ازشون استفاده میکنن , در این قسمت بیشتر باهاشون اشنا میشید
    در اصل متغیر های محیطی محلی برای نگه داشتن اطلاعات مربوط به سیشن های شل و محیط کاری هستند
    همچنین این امکان رو به شما میدن تا دیتا ها رو در مموری نگه دارید تا به سادگی توسط برنامه ها و اسکریپت های شل قابل دسترسی باشه
    دو نوع متغیر محیطی در بش شل وجود داره , که بهشون میپردازیم


    global variables و local variables

    نگاهی به متغیر های محیطی گلوبال :
    این نوع از متغیر ها هم از درون شل , و هم از درون همه ساب شل های اون قابل رویت هستند 
    در صورتی که نوع لوکال فقط از درون خود شل دیده میشن
    که این موضوع نوع گلوبال رو برای اپلیکیشن هایی که ساب شل اجرا میکنن با استفاده میکنه
    ( ساب شل هایی که اطلاعات مربوط به پرنت شل رو درخواست میکنن )
    وقتی شما سیشن بش رو فعال میکنید سیستم لینوکس چند متغیر محیطی گلوبال براتون ست میکنه , به اسم متغیر های محیطی سیستمی , که تقریبا همیشه از حروف بزرگ برای اسمشون استفاده میکنن , تا از متغیر هایی که یوزر تعریف میکنه قابل تمایز باشن
    برای دیدن لیست متغیر های محیطی گلوبال از دستور های env و printenv استفاده میکنیم

    $ printenv
    HOSTNAME=server01.class.edu
    SELINUX_ROLE_REQUESTED=
    TERM=xterm
    SHELL=/bin/bash

    HISTSIZE=1000
    [...]
    HOME=/home/rednaxela
    LOGNAME=rednaxela
    [...]
    G_BROKEN_FILENAMES=1
    _=/usr/bin/printenv



    در مثال بالا فقط بخشی از خروجی دستور رو براتون گذاشتم
    نه تنها در هنگام لاگین بخشی از متغیر های محیطی گلوبال براتون ست میشه , بلکه نوع لاگین میتونه تایین کننده باشه در انتخابشون


    با دستور printenv
    میتونید مقدار هر کدومشونم ببینید , اکه البته با دستور
    env شدنی نیست

    $ printenv HOME
    /home/rednaxela
    $
    $ env HOME
    env: HOME: No such file or directory


    که البته با دستور echo هم میتونید این کارو کنید , که باید از علامت $ قبل از اسم متغیر استفاده کنید

   $ echo $HOME
    /home/rednaxela

 

    لازمه بدونید استفاده از علامت $ قبل از اسم متغیر فقط به دلیل دیدن مقادیر متغیر نیست , بلکه این امکان رو هم بهتون میده تا از متغیر به عنوان پارامتر یه دستور هم استفاده کنید
    به مثال زیر دقت کنید

    $ ls $HOME
    Desktop    Downloads  Music     Public     test.sh
    Documents  junk.dat   Pictures  Templates  Videos
    $
    $ ls /home/rednaxela
    Desktop    Downloads  Music     Public     test.sh
    Documents  junk.dat   Pictures  Templates  Videos

 

    بالا تر گفتیم که این متغیر ها از درون ساب شل هم دیده میشن
    به مثال زیر دقت کنید
  

    $ bash
    $
    $ ps -f
    UID        PID  PPID  C STIME TTY          TIME CMD
    501       2017  2016  0 16:00 pts/0    00:00:00 -bash
    501       2082  2017  0 16:08 pts/0    00:00:00 bash
    501       2095  2082  0 16:08 pts/0    00:00:00 ps -f
    $
    $ echo $HOME
    /home/rednaxela
    $
    $ exit
    exit
    $


    بریم سراغ متغیر های محیطی لوکال
    همونطور که از اسمشون مشخصه , این متغیر ها فقط از داخل پروسه ای که توش تعریف شدن قابل خوندن اند
    اگرچه لوکال اند ولی به همون اندازه هم نوع های گلوبالشون مهم اند , در اصل سیستم لینوکس از این نوع متغیر هم به صورت پیش فرض براتون تعریف کرده
    به هر حال شما میتونید متغیر های خوتون رو تعریف کنید
    

دستور set لیست تمام متغیر هایی که برای یک پروسه تعریف شدن رو نمایش میده , که شامل نوع گلوبال , لوکال و نوع تعریف شده توسط یوزر (user-defined) میشه , در مثال زیر بخشی از خروجی دستور رو براتون گذاشتم

    $ set
    BASH=/bin/bash
    [...]
    BASH_ALIASES=()
    BASH_ARGC=()
    BASH_ARGV=()
    BASH_CMDS=()
    BASH_LINENO=()
    BASH_SOURCE=()
    [...]
    colors=/etc/DIR_COLORS
    rednaxela_variable='guardiran'
    [...]
    $


    نحوه تعریف متغیر های  user-defined
    بعد از ران کردن بش شل شما مجازید متغیر های خودتونو تعریف کنید
    برای تعریف متغیر کافیه اسم منتخب رو همراه با علامت = و مقدار متغیر , بدون هیچگونه فاصله کنار هم بزارید
به مثال زیر دقت کنید

    $ my_variable=Hello
    $
    $ echo $my_variable

    Hello


    در صورت وجود فاصله فرایند به مشگل میخوره , مثل :

    $ my_variable = "Hello World"
    —bash: my_variable: command not found


    اگه خواستید مقدار متغیر رو رشته ای قرار بدید که حاوی فاصله هم باشه , باید رشته رو بین تک یا دابل کوتیشن بزارید , مثال زیر :
    

 $ my_variable=Hello World
 —bash: World: command not found
 $
 $ my_variable="Hello World"
 $
 $ echo $my_variable
 Hello World


    بدون کوتیشن شل تصور میکرد کلمه بعد از فاصله دستور بعدی شله
    دقت کنید متغیری که ما تعریف کردیم بر خلاف مثال های قبلی با حروف کوچیکه , چون متغیر های سیستمی با حروف بزرگ تعریف شدن هر موقع خواستید متغیری با اسم حروف بزرگ تعریف کنید باید مواضب تشابه اسمی باشید


    وقتی یه متغیر لوکال تعریف میکنید , در هر جایی در داخل پروسه شل خودتون قابل دستیابیه , مشگل زمانی پیش میاد که یه ساب شل ران بشه
    به مثال زیر توجه کنید

    $ my_variable="Hello World"
    $
    $ bash
    $
    $ echo $my_variable
    $ exit
    exit
    $
    $ echo $my_variable
    Hello World


    همونطور که دیدید متغیری که تو پرنت شل تعریف شده بود از داخل ساب شل قابل دسترس نبود
    این موضوع در مورد حالت برعکس این مثال هم صدق میکنه , مثال زیر :

    $ echo $my_child_variable
    $ bash
    $
    $ my_child_variable="Hello Little World"
    $
    $ echo $my_child_variable
    Hello Little World
    $
    $ exit
    exit
    $
    $ echo $my_child_variable
    $


    میبینید که مقدار خروجی خط خالی قرار گرفته نه مقدار متغیر , چون در این سطح همچین متغیری وجود نداره


    نحوه تعریف متغیر های محیطی گلوبال
    این متغیر ها بر خلاف نوع قبلی از درون هر ساب شلی که ریشه در شل اصلی داشته باشه قابل مشاهدس
    برای ساخت این نوع از متغیر شما باید اول یک متغیر لوکال بسازید بعد اکسپورتش کنید به محیط گلوبال


    این کار با استفاده از دستور export و نام متغیر بدون علامت $ انجام میشه , مثال زیر :

    $ my_variable="I am Global now"
    $
    $ export my_variable
    $
    $ echo $my_variable
    I am Global now
    $
    $ bash
    $
    $ echo $my_variable
    I am Global now
    $
    $ exit
    exit
    $
    $ echo $my_variable
    I am Global now


    دقت کنید که تغیر مقدار یک متغیر گلوبال که در پرنت شل تعریف شده از داخل ساب شل شدنی نیست , مثال زیرو ببینید

    $ export my_variable
    $
    $ echo $my_variable
    I am Global now
    $
    $ bash
    $
    $ echo $my_variable
    I am Global now
    $
    $ my_variable="Null"
    $
    $ echo $my_variable
    Null
    $
    $ exit
    exit
    $
    $ echo $my_variable
    I am Global now


    طبق این مثال متوجه میشید که دستورات از بالا به پایین منتقل میشن , نه برعکس
    ساب شل فقط تونست یه متغیر با اون اسم داخل خودش تعریف کنه
       اکسپورت کردن هم از همین اصل تبعیت میکنه , یه متغیر از بالا اکسپورت میشه که از پایین قابل دسترسی باشه , نه برعکس , مثال زیرو ببینید

    $ my_variable="I am Global now"
    $ export my_variable
    $
    $ echo $my_variable
    I am Global now
    $
    $ bash
    $
    $ echo $my_variable
    I am Global now
    $
    $ my_variable="Null"
    $
    $ export my_variable
    $
    $ echo $my_variable
    Null
    $
    $ exit
    exit

    $
    $ echo $my_variable
    I am Global now


    برای از بین بردن متغیر ها هم باید از دستور unset و نام متغیر بدون علامت $ استفاده کنید

    $ echo $my_variable
    I am Global now
    $
    $ unset my_variable
    $
    $ echo $my_variable 
    $


    میبینید که خروجی خط خالی داد
    که البته طبق اصلی که توصیح دادم , از ساب شل نمیشه تو پرنت شل تغیر ایجاد کرد
    مثال زیر رو ببینید

    $ my_variable="I am Global now"
    $
    $ export my_variable
    $
    $ echo $my_variable
    I am Global now
    $
    $ bash
    $
    $ echo $my_variable
    I am Global now
    $
    $ unset my_variable
    $
    $ echo $my_variable
    $ exit
    exit
    $
    $ echo $my_variable
    I am Global now


    میبینید که فقط توی ساب شل از بین رفت


    متغیر های محیطی پیش فرض شل :
    

    شل بش متغیر های مشخصی رو به صورت پیش فرض قرار میده تا محیط سیستم رو تعریف کنن
    که میتونن برامون مفید باشن , در لیست زیر متغیر هایی رو که بش فراهم میکنه میتونید ببینید

  

    CDPATH
    A colon-separated list of directories used as a search path for the cd command
    HOME
    The current user’s home directory
    IFS
    A list of characters that separate fi elds used by the shell to split text strings
    MAIL
    The filename for the current user’s mailbox (The bash shell checks this fi le for new mail.)
    MAILPATH
    A colon-separated list of multiple filenames for the current user’s mailbox (The bash shell checks each file in this list for new mail.)
    OPTARG
    The value of the last option argument processed by the getopt command
    OPTIND
    The index value of the last option argument processed by the getopt command
    PATH
    A colon-separated list of directories where the shell looks for commands
    PS1
    The primary shell command line interface prompt string
    PS2
    The secondary shell command line interface prompt string

     علاوه بر متغیر های بالا , خود بش هم تعدادی از این متغیر ها توسط خودش تعریف میکنه
    

    BASH
    The full pathname to execute the current instance of the bash shell
    BASH_ALIASES
    An associative array of currently set aliases
    BASH_ARGC
    A variable array that contains the number of parameters being passed to a subroutine or shell script
    BASH_ARCV
    A variable array that contains the parameters being passed to a subroutine or shell script
    BASH_CMDS
    An associative array of locations of commands the shell has executed
    BASH_COMMAND
    The shell command currently being or about to be executed
    BASH_ENV
    When set, each bash script attempts to execute a startup file defined by this variable before running
    BASH_EXECUTION_STRING
    The command(s) passed using the bash -c option
    BASH_LINENO
    A variable array containing the source code line number of the currently executing shell function
    BASH_REMATCH
    A read-only variable array containing patterns and their sub-patterns for positive matches using the regular expression comparison operator
    BASH_SOURCE
    A variable array containing the source code filename of the currently executing shell function
    BASH_SUBSHELL
    The current nesting level of a subshell environment (The initial value is 0.)
    BASH_VERSINFO
    A variable array that contains the individual major and minor version numbers of the current instance of the bash shell
    BASH_VERSION
    The version number of the current instance of the bash shell
    BASH_XTRACEFD
    If set to a valid file descriptor (0,1,2), trace output generated from the 'set -x' debugging option can be redirected. This is often used to separate trace output into a file.
    BASHOPTS
    A list of bash shell options that are currently enabled
    BASHPID
    Process ID of the current bash process
    COLUMNS
    Contains the terminal width of the terminal used for the current instance of the bash shell
    COMP_CWORD
    An index into the variable COMP_WORDS, which contains the
    current cursor position
    COMP_LINE
    The current command line
    COMP_POINT
    The index of the current cursor position relative to the beginning of the current command
    COMP_KEY
    The final key used to invoke the current completion of a shell function
    COMP_TYPE
    An integer value representing the type of completion attempted 
    that caused a completion shell function to be invoked
    COMP_WORDBREAKS
    The Readline library word separator characters for performing
    word completion

    COMP_WORDS
    An array variable that contains the individual words on the 
    current command line
    COMPREPLY
    An array variable that contains the possible completion codes
    generated by a shell function
    COPROC
    An array variable that holds an unnamed coprocess’ I/O fi le 
    descriptors
    DIRSTACK
    An array variable that contains the current contents of the directory
    stack
    EMACS
    Indicates the emacs shell buffer is executing and line editing is 
    disabled, when set to 't'
    ENV
    When set, executes the startup fi le defi ned before a bash shell
    script runs (It is used only when the bash shell has been invoked
    in POSIX mode.)
    EUID
    The numeric effective user ID of the current user
    FCEDIT
    The default editor used by the fc command
    FIGNORE

    A colon-separated list of suffi xes to ignore when performing fi le 
    name completion
    FUNCNAME
    The name of the currently executing shell function
    FUNCNEST
    Sets the maximum allowed function nesting level, when set to a
    number greater than zero (If it is exceeded, the current command
    aborts.)
    GLOBIGNORE
    A colon-separated list of patterns defi ning the set of fi lenames 
    to be ignored by fi le name expansion
    GROUPS
    A variable array containing the list of groups of which the current
    user is a member
    histchars
    Up to three characters, which control history expansion
    HISTCMD
    The history number of the current command
    HISTCONTROL
    Controls what commands are entered in the shell history list
    HISTFILE
    The name of the fi le in which to save the shell history list (.bash_history by default)
    HISTFILESIZE
    The maximum number of lines to save in the history fi le

    HISTTIMEFORMAT
    Used as a formatting string to print each command’s timestamp
    in bash history, if set and not null
    HISTIGNORE
    A colon-separated list of patterns used to decide which com-
    mands are ignored for the history fi le
    HISTSIZE
    The maximum number of commands stored in the history fi le
    HOSTFILE
    Contains the name of the fi le that should be read when the shell
    needs to complete a hostname
    HOSTNAME
    The name of the current host
    HOSTTYPE
    A string describing the machine the bash shell is running on
    IGNOREEOF
    The number of consecutive EOF characters the shell must 
    receive before exiting (If this value doesn’t exist, the default is 1.)
    INPUTRC
    The name of the Readline initialization fi le (The default is.inputrc.)
    LANG
    The locale category for the shell
    LC_ALL
    Overrides the LANG variable, defi ning a locale category

    LC_COLLATE
    Sets the collation order used when sorting string values
    LC_CTYPE
    Determines the interpretation of characters used in fi lename 
    expansion and pattern matching
    LC_MESSAGES
    Determines the locale setting used when interpreting doublequoted
    strings preceded by a dollar sign
    LC_NUMERIC
    Determines the locale setting used when formatting numbers
    LINENO
    The line number in a script currently executing
    LINES
    Defi nes the number of lines available on the terminal
    MACHTYPE
    A string defi ning the system type in cpu-company-system format
    MAPFILE
    An array variable that holds read-in text from the mapfile com-
    mand when no array variable name is given
    MAILCHECK
    How often (in seconds) the shell should check for new mail (The
    default is 60.)
    OLDPWD
    The previous working directory used in the shell

    OPTERR
    If set to 1, the bash shell displays errors generated by the 
    getopts command.
    OSTYPE
    A string defi ning the operating system the shell is running on
    PIPESTATUS
    A variable array containing a list of exit status values from the
    processes in the foreground process
    POSIXLY_CORRECT
    If set, bash starts in POSIX mode.
    PPID
    The process ID (PID) of the bash shell’s parent process
    PROMPT_COMMAND
    If set, the command to execute before displaying the primary 
    prompt
    PROMPT_DIRTRIM
    An integer used to indicate the number of trailing directory
    names to display when using the \w and \W prompt string
    escapes (The directory names removed are replaced with one
    set of ellipses.) 
    PS3
    The prompt to use for the select command
    PS4
    The prompt displayed before the command line is echoed if the

    bash -x parameter is used
    PWD
    The current working directory
    RANDOM
    Returns a random number between 0 and 32767 (Assigning a 
    value to this variable seeds the pseudo-random number
    generator.)
    READLINE_LINE
    Readline buffer contents when using bind -x command
    READLINE_POINT
    Readline buffer content insertion point’s current position when 
    using bind -x command
    REPLY
    The default variable for the read command
    SECONDS
    The number of seconds since the shell was started (Assigning a 
    value resets the timer to the value.)
    SHELL
    The full pathname to the bash shell
    SHELLOPTS
    A colon-separated list of enabled bash shell options
    SHLVL
    Indicates the shell level, incremented by one each time a new
    bash shell is started

    TIMEFORMAT
    A format specifying how the shell displays time values
    TMOUT
    The value of how long (in seconds) the select and read com-
    mands should wait for input (The default of zero indicates to wait
    indefi nitely.)
    TMPDIR
    Directory name where the bash shell creates temporary fi les for 
    its use
    UID
    The numeric real user ID of the current user


    پایان قسمت پنجم از بخش یک
    در قسمت بعد استارت اپ ها و ارایه ها رو توضیح میدم

 

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

بخش اول - قسمت ششم


    استارت اپ ها :
    لینوکس از متغیر های موقعیتی در اهداف مختلفی استفاده میکنه , شما الان میدونید چطور اونهارو اصلاح کنید , یا متغیر های خودتون رو ایجاد کنید
    وقتی شما با لاگینتون یک شل بش رو اجرا میکنید در حالت پیش فرض بش چندین فایل رو چک میکنه
    اسم این فایل ها فایل های استارت اپ یا فایل های محیطی هستش 
    فایل های استارت اپی که بش چک میکنه بستگی داره  به نوع اجرا شدن خود شل
    شما میتونید یک شل بش رو با سه روش استفاده کنید
    به عنوان شل پیش فرض موقع لاگین کرن
    به عنوان یک شل تعاملی که ساب شل محسوب بشه
    به عنوان یک شل غیر تعاملی برای اجرای اسکریپت ها
    که با استفاده از هر کدوم از روش های بالا فایل های استارت اپ مد نظرمون رو مشخص میکنیم
    شل پیش فرض موقع لاگین با پنج فایل استارت اپ زیر سروکار داره

    /etc/profile
    $HOME/.bash_profile
    $HOME/.bashrc
    $HOME/.bash_login
    $HOME/.profile


    فایل /etc/profile استارت اپ فایل اصلی پیش فرضه
    تمام یوزر های سیستم این فایل رو موقع لاگین اجرا میکنن
    لازمه بدونید بعضی از لینوکس ها از 
    pluggable authentication modules  =  PAM
    استفاده میکنن , که در این صورت قبل از اینکه شل بش اجرا بشه پروسه pam file اجرا میشه که باعث تغیر در حالت پیش فرض اجرای استارت اپ ها میشه  

    یک نمونه از محتویات این فایل رو در کادر زیر میبینید

    # /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
    # and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).
    if [ "$PS1" ]; then
    if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then
    # The file bash.bashrc already sets the default PS1.
    # PS1='\h:\w\$ '
    if [ -f /etc/bash.bashrc ]; then
    . /etc/bash.bashrc
    fi
    else
    if [ "`id -u`" -eq 0 ]; then
    PS1='# '

    else
    PS1='$ '
    fi
    fi
    fi 
    # The default umask is now handled by pam_umask.
    # See pam_umask(8) and /etc/login.defs.
    if [ -d /etc/profile.d ]; then
    for i in /etc/profile.d/*.sh; do
    if [ -r $i ]; then
    . $i
    fi
    done
    unset i
    fi


    هر نوع از لینوکس تنظیمات مختلفی رو در این فایل اعمال میکنه
    مثلا در این نمونه فایلی که با اسم  /etc/bash.bashrc. شناخته شده , حاوی لیست متغیر های موقعیتی هستش


    توجه کنید در مثال پایین از فایل /etc/profile که متعلق به CentOS distribution هستش , به فایلی با اسم  /etc/bash.bashrc اشاره ای نشده

    # /etc/profile
    # System wide environment and startup programs, for login setup
    # Functions and aliases go in /etc/bashrc
    # It's NOT a good idea to change this file unless you know what you
    # are doing. It's much better to create a custom.sh shell script in
    # /etc/profile.d/ to make custom changes to your environment, to
    # prevent the need for merging in future updates.
    pathmunge () {
    case ":${PATH}:" in
    *:"$1":*)
    ;;
    *)
    if [ "$2" = "after" ] ; then
    PATH=$PATH:$1
    else
    PATH=$1:$PATH
    fi
    esac
    }if [ -x /usr/bin/id ]; then

    if [ -z "$EUID" ]; then
    # ksh workaround
    EUID=`id -u`
    UID=`id -ru`
    fi
    USER="`id -un`"
    LOGNAME=$USER
    MAIL="/var/spool/mail/$USER"
    fi
    # Path manipulation
    if [ "$EUID" = "0" ]; then
    pathmunge /sbin 
    pathmunge /usr/sbin
    pathmunge /usr/local/sbin
    else
    pathmunge /usr/local/sbin after
    pathmunge /usr/sbin after
    pathmunge /sbin after
    fi
    HOSTNAME=`/bin/hostname 2>/dev/null`
    HISTSIZE=1000
    if [ "$HISTCONTROL" = "ignorespace" ] ; then
    export HISTCONTROL=ignoreboth
    else

    export HISTCONTROL=ignoredups
    fi
    export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL
    # By default, we want umask to get set. This sets it for login shell
    # Current threshold for system reserved uid/gids is 200
    # You could check uidgid reservation validity in
    # /usr/share/doc/setup-*/uidgid file
    if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
    umask 002
    else
    umask 022
    fi
    for i in /etc/profile.d/*.sh ; do
    if [ -r "$i" ]; then
    if [ "${-#*i}" != "$-" ]; then
    . "$i"
    else
    . "$i" >/dev/null 2>&1
    fi
    fi
    done
    unset i
    unset -f pathmunge

 

    از بین بقیه فایل های استارت اپ اکثر لینوکس ها فقط یکی دوتاشون رو مورد استفاده قرار میدن

    $HOME/.bash_profile
    $HOME/.bashrc 
    $HOME/.bash_login
    $HOME/.profile


    دقت کنید که هر چهار فایل با نقطه شروع میشن , که باعث میشه مخفی باشن
    به خاطر اینکه این فایل ها در دایرکتوری هر یوزر هستند , هر یوزر میتونه فقط فایل های خودش رو تغیر بده و متغیر های خودش رو اضافه کنه , که برای هر سیشن بشی که اجرا کنه فعال باشن
  

    ارایه ها :
    نکته جالب در مورد متغیر های محیطی اینه که میتونن به عنوان ارایه هم مورد استفاده قرار بگیرن
    یک ارایه , متغیریه که میتونه چند مقدار رو نگه داره
    برای ایجاد چند مقدار برای یک متغیر (تبدیل به ارایه) فقط کافیه اونارو بین پرانتز قرار بدید و با فاصله از هم جداشون کنید

    $ mytest=(one two three four five)


    روش مشاهده مقادیر ارایه ها با متغیر ها متفاوته
    شما نمیتونید مقدار ارایه هارو با روش متغیر ها نمایش بدید

 

   $ echo $mytest
   one


    تنها اولین مقدار از ارایه نمایش داده شد
    برای دیدن بخش مورد نظر از ارایه , از روش زیر تبعیت میکنیم

    $ echo ${mytest[2]}
    three


    به دلیل اینکه مقادیر ارایه از شماره صفر شروع میشن , شماره جایگاه سومین مقدار میشه 2
    برای دیدن تمام مقادیر ارایه از * استفاده میکنیم

    $ echo ${mytest[*]}
    one two three four five


    شما میتونید حتی فقط مقدار مورد نظرتونو تغیر بدید

    $ mytest[2]=seven
    $
    $ echo ${mytest[*]}
    one two seven four five


    میبینید که مقدار جایگاه شماره 2 به seven تغیر کرد

    شما حتی میتونید با استفاده از دستور unset مقدار مورد نظر رو حذف کنید

    $ unset mytest[2]
    $
    $ echo ${mytest[*]}
    one two four five
    $
    $ echo ${mytest[2]}
    $ echo ${mytest[3]}
    four

اگه دقت کرده باشید متوجه میشید که مقدار جایگاه شماره 2 پاک شده و خودش تغیر نکرده


    شما میتونید طبق مثال زیر تمام ارایه رو حذف کنید

    $ unset mytest
    $
    $ echo ${mytest[*]}
    $

 


    پایان قسمت ششم از بخش یک
    در قسمت بعد وارد موضوعات مرتبط با یوزر میشیم

 

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

بخش اول - قسمت هفتم


    هیچ سیستمی کاملا خالی از امنیت نیست , باید حتما مکانیزمی  برای محافظت از فایل ها در برابر تغیر و دسترسی غیر مجاز باشه
    سیستم لینوکس از روش یونیکس برای مجوز دسترسی استفاده میکنه
    اجازه دسترسی تقسیم بندی شده برای یوزر ها و گروه ها بر مبنای تنظیمات هر فایل یا دایرکتوری
    هسته سیستم امنیتی لینوکس یوزر اکانته , میزان دسترسی کاربران سیستم به ابجکت های مختلف بستگی به یوزری داره که باهاش لاگین میکنن
    سیستم لینوکس از فایل های خاصی برای مدیریت یوزر اکانت ها استفاده میکنه , قبل از اینکه در مورد  پرمیشن ها صحبت کنیم لازمه بدونیم لینوکس چجوری یوزر اکانت هارو هندل میکنه


    The /etc/passwd
    سیستم لینوکس برای همخونی دادن login name و uid از این فایل استفاده میکنه , این فایل حاویه هفت بخش اطلاعاتیه , یک نمونشو پایین میبینید

$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
news:x:9:13:news:/etc/news:mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
rpm:x:37:37::/var/lib/rpm:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin
smmsp:x:51:51::/var/spool/mqueue:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
avahi:x:70:70:Avahi daemon:/:/sbin/nologin
hsqldb:x:96:96::/var/lib/hsqldb:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
xfs:x:43:43:X Font Server:/etc/X11/fs:/sbin/nologin
gdm:x:42:42::/var/gdm:/sbin/nologin
rednaxela:x:500:500:red naxela:/home/rednaxela:/bin/bash
red:x:502:502:red:/home/red:/bin/bash
blue:x:503:503:blue:/home/blue:/bin/bash
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash


    یوزر root مدیر سیستم لینوکسه و همیشه مقدار uid صفر رو داره
    میبینید که سیستم لینوکس اکانت های زیادی رو ساخته که در واقع یوزر واقعی نیستن و برای مقاصد سیستمی استفاده میشن که بهشون میگن سیستم اکانت
    سیستم اکانت در اصل یک اکانت مخصوصه که سرویس ها روی سیستم ران میکنن تا به منابع روی سیستم دسترسی پیدا کنن
    تمام سرویس هایی که در حالت بک گراند ران میشن نیاز دارن تحت یک سیستم اکانت به سیستم لاگین بشن 
    اکثر لینوکس ها به سیستم اکانت ها uid زیر 500 میدن (مثال بالا رو ببینید)
    و uid یوزر هارو از 500 شروع میکنن (مثال بالا)


    فیلد های فایل /etc/passwd شامل موارد زیر هستند


    یوزرنیم لاگین

    پسورد یوزر

    مقدار uid یوزرم

    قدار gid یوزر

    مشخصات یوزر

    لوکیشن دایرکتوری home یوزر

    و مقدار اخر هم نوع شل یوزره


    مقدار x که در فیلد پسورد قرار گرفته به معنی پسورد یوزر نیست , سال ها پیش لینوکس پسورد هارو به صورت رمزنگاری شده تو این فیلد میذاشت , که چون خیلی از برنامه ها برای اطلاعات یوزر به دسترسی به این فایل نیاز داشتن , این موضوع یک مشگل امنیتی محسوب میشد
    الان اکثر لینوکس ها پسورد یوزر هارو تو یه فایل جدا به اسم etc/shadow/ قرار میدن
    که فقط برنامه های مخصوصی مثل لاگین بهش دسترسی دارن


    The /etc/shadow
    از این فایل برای نگهداری پسورد ها و اطلاعات مربوط بهشون استفاده میشه
    فقط یوزر root میتونه به این فایل دسترسی داشته باشه
    که باعث میشه امنیت بیشتری نسبت به /etc/passwd داشته باشه
    این فایل برای هر یوزر یه رکورد نگه میداره (مثال زیر)

rednaxela:$1$.FfcK0ns$f1UgiyHQ25wrB/hykCn020:11627:0:99999:7:::


    هر رکورد 9 تا فیلد داره , که با هم به ترتیب مرورشون میکنیم
    اسم لاگین
    پسورد به صورت رمزنگاری شده
    اخرین تاریخی که پسورد تغیر کرده
    حداقل روز های موندگاریه پسورد قبل از امکان تغیر
    تاریخ انقضای پسورد
    چند روز قبل از منقضی شدن پسورد هشدار داده بشه
   تعداد روز هایی که , بعد از منقضی شدن پسورد اکانت باید غیر فعال بشه
    تاریخ مربوط به اینکه از چه زمانی اکانت غیر فعال شده
    فیلدی که برای استفاده در اینده تعبیه شده


    در مثال بالا شما شش فیلد فعال میبینید , که حالت نرماله و به ترتیب شش توصیف اول هستن


    اضافه کردن یوزر :
    برای این کار از دستور useradd استفاده میکنیم
    این دستور یک راه ساده برای اضافه کرن یوزر بهمون میده , که از تلفیق مقادیر پیش فرض سیستم و پارامتر های خط دستور برای تعریف یوزر استفاده میکنه
    این مقادیر پیش فرض سیستمی در مسیر زیر قرار دارن
etc/defualt/useradd/
    که برای دیدنشون میتونید از پارامتر D- استفاده کنید ، به مثال زیر توجه کنید :

# /usr/sbin/useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

 

پارامتر  D- به ما میگه اگه از مقادیر مخصوص خومون موقع ساخت اکانت استفاده نکنیم , به صورت پیش فرض چه جایگزینی براشون در نظر گرفته میشه


    طبق مثال بالا این مقایر به ترتیب میگن که :
    یوزر جدید اضافه میشه به گروه مرسوم با گروپ ایدی 100
    یوزر جدید یک هوم اکانت در دایرکتوری هوم با اسم خودش اضافه میکنه
    یوزر جدید بعد از منقضی شدن پسورد غیر فعال نخواهد شد
    یوزر جدید بعد از مدت زمان معینی منقضی نخواهد شد
    یوزر جدید از شل بش به عنوان شل پیش فرض استفاده خواهد کرد
    سیستم محتوای etc/skel/ رو در دایرکتوری هوم یوزر اضافه میکنه
    سیستم یک فایل در دایرکتوری میل برای یوزر میسازه , تا ایمیل هاشو دریافت کنه


    مقادیر /etc/skel در برخی لینوکس ها :
 

$ ls -al /etc/skel
total 32
drwxr-xr-x   2 root root   4096 2019-04-29 08:26 .
drwxr-xr-x 135 root root   12288 2019-09-23 18:49 ..
—rw-r--r--   1 root root   220 2019-04-18 21:51 .bash_logout
—rw-r--r--   1 root root   3103 2019-04-18 21:51 .bashrc
—rw-r--r--   1 root root   179 2019-03-26 08:31 examples.desktop
—rw-r--r--   1 root root   675 2019-04-18 21:51 .profile


    شما باید این فایل هارو از قسمت های قبل بشناسید , اینها همون فایل های استاندارد استارت اپ هستند
    شما میتونید این موضوع رو با ساخت یک یوزر اکانت با مقادیر پیش فرض تست کنید

# useradd -m test
# ls -al /home/test
total 24
drwxr-xr-x 2 test test 4096 2019-09-23 19:01 .
drwxr-xr-x 4 root root 4096 2019-09-23 19:01 ..
—rw-r--r-- 1 test test  220 2019-04-18 21:51 .bash_logout
—rw-r--r-- 1 test test 3103 2019-04-18 21:51 .bashrc
—rw-r--r-- 1 test test  179 2019-03-26 08:31 examples.desktop
—rw-r--r-- 1 test test  675 2019-04-18 21:51 .profile


    در حالت دیفالت دستور useradd دایرکتوری home رو نمیسازه
    که اپشن m- باعث میشه این کارو برامون بکنه


    میبینید که محتوای etc/skel/ در هوم دایرکتوریه جدید هستش
    شما میتونید هنگام ساخت یوزر اکانت هر کدوم از مقادیر پیش فرض رو که خواستید تغیر بدید 


    c comment-

    برای اضافه کردن اطلاعات به فیلد کامنت یوزر استفاده میشه

    d home_dir- 
    برای جایگزین کردن اسم دایرکتوری با مقدار پیش فرض استفاده میشه

    e expire_date-
    برای تعین تاریخ انقضا اکانت استفاده میشه 

    f inactive_days-
    مشخص میکنه چه مدت بعد از منقضی شدن پسورد اکانت غیر فعال بشه 

    g initial_group- 
    برای مشخص کردن گروپ ایدی یوزر استفاده میشه

    G group-
    برای تعین چند گروه برای یوزر استفاده میشه

    k-
    همراه با m- استفاده میشه , برای کپی کردن مقادیر etc/skel/ تو هوم دایرکتوری

    m-
    برای ساخت هوم دایرکتوری استفاده میشه

    n-
    برای ایجاد یک گروه جدید هم اسم با خود یوزر , برای یوزر استفاده میشه

    r-
    برای ساخت اکانت های سیستمی استفاده میشه

    p passwd- 
    تعین پسورد پیش فرض یوزر

    s shell- 
    تعین شل پیش فرض یوزر

    u uid-

    تعین یک uid مشخص برای یوزر


    طبق چیزی که گفته شد میتونید مقادیر پیش فرض رو در هنگام ساخت یوزر اکانت برای یوزر تغیر بدید
    و یا , میتونید خود حالت پیش فرض رو تغیر بدید
    در این صورت هر اکانت دیگه ای که بسازید با مقایر پیش فرضی که شما تعین کردید ساخته میشه
    برای این کار باید پارامتر D- رو قبل از پارامتر های اصلاحی زیر 
    بزارید
    b default_home- 
    تغیر لوکیشن پیش فرض هوم دایرکتوری
    e expiration_date-
    تغیر مقدار زمان پیش فرض برای منقضی شدن اکانت 
    f inactive- 
    تغیر مقدار زمان پیش فرض برای غیر فعال شدن اکانت بعد از منقضی شدن پسوردش
    g group- 
    تغیر gid پیش فرض
    s shell- 
    تغیر لاگین شل پیش فرض

    به مثال زیر توجه کنید

# useradd -D -s /bin/tsch
# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/tsch
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes


    در این مثال مقدار شل پیش فرض برای تمام اکانت هایی که از این به بعد ساخته بشن تغیر کرد


    remove کردن یوزر  

 برای از بین بردن یک اکانت میتونیم از دستور userdel استفاده کنیم
    در حالت پیش فرض این دستور فقط اطلاعات یوزر رو از فایل /etc/passswd پاک میکنه
    اگه از پارامتر r- استفاده کنید
    هوم دایرکتوری و دایرکتوری ایمیل هم پاک میشن
    اگرچه در بعضی لینوکس ها بقیه فایل های اکانت از بین رفته  ، باقی میمونن
    به مثال زیر توجه کنید
 

# /usr/sbin/userdel -r test
# ls -al /home/test
ls: cannot access /home/test: No such file or directory

 

پایان قسمت هفتم از بخش یک

در قسمت بعد به اصلاحات یوزر و کار با گروه ها و سطح های دسترسی (permissions) میپردازیم

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

بخش اول - قسمت هشتم

  (قسمت اخر از بخش اول)  


    تغیرات اصلاحی یوزر اکانت

    لینوکس ابزار های مختلفی برای تغیرات در یوزر ها در اختیارمون میذاره , مثل :


    usermod
    برای تغیرات در فیلد های اکانت یوزر ازش استفاده میکنیم

    passwd
    برای تغیر پسورد یوزر کاربرد داره

    chpasswd
    این دستور با دریافت یک فایل متنی حاوی یوزر ها و پسورد انتخوابی , پسورد تمام یوزر هارو تغیر میده

    chage
    برای تغیر تاریخ انقضای پسورد کاربرد داره

    chfn
    برای تغیر کامنت اطلاعات یوزر استفاده میشه

    chsh
    برای تغیر شل پیش فرض یوزر استفاه میشه

 

    دستور usermod

    اپشن های این دستور باعث تغیر در بیشتر فیلد های فایل /etc/passwd میشن و اپشن ها مشابه اپشن های دستور useradd هستند 


    اپشن هایی مثل c , -e , -g-


    چند تا از اپشن های متفاوتش رو براتون میزارم

    l-
    تغیر اسم لاگین یوزر 

    L-
    قفل کردن یوزر اکانت , بنابراین یوزر نمیتونه لاگین کنه

    p-
    تغیر پسورد یوزر 

    U-
    باز کردن قفل یوزر 

 

    passwd و chpasswd

    دستور passwd
    یک راه سریع برای تغیر فقط پسورده

# passwd test

Changing password for user test.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.


    اگه دستور رو به صورت خالی وارد کنید , پسورد یوزر فعلی عوض میشه
    اکه با اسم یوزر وارد کنید , پسورد اون یوزر عوض میشه (البته اگه روت باشید)
    با استفاده از اپشن e- میتونید یوزر رو مجبور به تغیر پسوردش کنید


    در صورت نیاز به تغیر پسورد دسته جمعی میتونید از chpasswd به صورت زیر استفاده کنید

# chpasswd < users.txt

 

    در فایل متنی اسم های لاگین همراه با پسورد هاشون قرار میگیرین
    که با استفاده از ( : ) از هم جدا شدن , مثل : user:password
    

    chsh , chfn و chage

    دستور chsh طبق مثال زیر برای تغیر شل پیش فرض استفاه میشه

# chsh -s /bin/csh test
Changing shell for test.
Shell changed.


    دستور chfn یک روش استانارد برای ذخیره اطلاعات در فیلد کامنت در فایل passwd فراهم میکنه
    که به جای اطلاعات معمول از اطلاعات مخصوص استفاده شده در یونیکس فینگر استفاه میکنه


    دستور finger به شما اجازه میده به راحتی در مورد یوزر ها اطلاعات کسب کنید

# finger rednaxela
Login: rednaxela                       
Name: red naxela
Directory: /home/rednaxela                 
Shell: /bin/bash
On since Thu Sep 20 18:03 (EDT) on pts/0 from 192.168.1.2
No mail.
No Plan.


    البته به خاطر نگرانی های امنیتی در بیشتر لینوکس ها دستور فینگر غیر فعال شده

    یک نمونه از دستور chfn رو بدون پارامتر در مثال زیر میبینید

# chfn test
Changing finger information for test.

Name []: Ima Test
Office []: Director of Technology
Office Phone []: (123)555-1234
Home Phone []: (123)555-9876

Finger information changed.

 

# finger test
Login: test                        
Name: Ima Test
Directory: /home/test                  
Shell: /bin/csh
Office: Director of Technology        
Office Phone: (123)555-1234
Home Phone: (123)555-9876
Never logged in.
No mail.
No Plan.


    حالا به مقدار فایل /etc/passwd نگاه کنید

# grep test /etc/passwd
test:x:504:504:Ima Test,Director of Technology,(123)5551234,(123)555-9876:/home/test:/bin/csh


    دستور chage مقادیر مرتبط با پسورد هارو دریافت و تنظیم میکنه


    d-
    مشخص کرن زمان اخرین تغیر پسورد

    E-
    مشخص کردن تاریخ انقضای پسورد

    I-
    مشخص کردن زمان غیر فعال شدن اکانت بعد از منقضی شدن پسورد

    m-
    مشخص کردن حداقل روز های ثابت موندن پسورد بعد از هر تغیر

    W-
    مشخص کرن تعداد روز هایی که قبل از منقضی شدن پسورد باید هشدار داده بشه


    گروه ها در لینوکس :

    گروه ها هم یکی دیگه از موضوعات امنیتی لینوکس هستن
    لینوکس ها با روش های مختلفی بحث گروه پیض فرض رو پیش میبرن
    بعضی از لینوکس ها یک گروه پیش فرض برای همه کاربر ها تعریف میکنن
    اگه سیستم شما هم همینکار رو میکنه باید مراقب باشید چون فایل هاتون ممکنه برای کاربرای دیگه هم قابل استفاده باشه
    بقیه لینوکس ها برای هر کاربر یک گروه جدا تعریف میکنن که از این مشگل امنیتی جلوگیری بشه
    هر گروه اسم خودش و یک کد منحصر به فرد داره که بهش میگیم gid
    شما میتونید از ابزار هایی برای اینجاد و مدیریت گروه خودتون استفاه کنید


    فایل /etc/group

    درست مثل یوزر اکانت ها , اطلاعات گروه ها هم در یک فایل نگه داری میشه
    این فایل شامل اطلاعات مربوط به هر گروه میشه که در مثال زیر یک نمونش رو میتونید ببینید


  

root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
sys:x:3:root,bin,adm
adm:x:4:root,adm,daemon
rednaxela:x:501:
red:x:502:
blue:x:503:
mysql:x:27:
test:x:504:


    مثل uid ها gid ها هم از الگوی خاصی تبعیت میکنن
    گروه هایی که برای اکانت های سیستمی در نظر گرفته میشه gid زیر 500 دارن و gid یوزر گروه ها از 500 شروع میشه


    محتوای فایل /etc/group از چهار فیلد تشکیل شدن , که به ترتیب :

    اسم گروه
    پسورد گروه
    gid گروه
    لیست یوزر هایی که به گروه تعلق دارن


    گرچه این موضوع مرسوم نیست ولی یوزر ها با استفاده از پسورد گروه میتونن عضو اون گروه بشن


    ایجاد گروه جدید :

    با استفاده از دستور groupadd شما میتونید گروه جدید اضافه کنید

# /usr/sbin/groupadd guardiran
# tail /etc/group
haldaemon:x:68:
xfs:x:43:
gdm:x:42:
rednaxela:x:501:
red:x:502:
blue:x:503:
mysql:x:27:
test:x:504:
guardiran:x:505:


    وقتی یک گروه جدید میسازید هیچ یوزری در حالت دیفالت عضوش نیست

    برای اضافه کردن یوزر بهش از دستور usermod استفاده کنید

# /usr/sbin/usermod -G guardiran rednaxela
# /usr/sbin/usermod -G guardiran test
# tail /etc/group
    haldaemon:x:68:
    xfs:x:43:
    gdm:x:42:
    rednaxela:x:501:
    red:x:502:
    blue:x:503:
    mysql:x:27:
    test:x:504:
    guardiran:x:505:rednaxela, test


    و همچنین با دستور groupmod میتونید مقادیر رو اصلاح کنید 
    مثل پارامتر های -n و -g که برای تغیر اسم و gid استفاده میشن

# /usr/sbin/groupmod -n theguardiran guardiran
# tail /etc/group
    haldaemon:x:68:
    xfs:x:43:
    gdm:x:42:
    rednaxela:x:501:
    red:x:502:
    blue:x:503:
    mysql:x:27:
    test:x:504:
    theguardiran:x:505:rednaxela,test


        فایل پرمیشن ها :

    الان که با یوزر ها و گروه ها اشنا شدید وقتشه بریم سمت فایل پرمیشن ها , که قبلا اونارو در لیست فایل ها و دایرکتوری ها در کنار بقیه مشخصات مشاهده کردید

$ ls -l
total 68
—rw-rw-r-- 1 rednaxela rednaxela   50 2019-09-13 07:49 file1.gz
—rw-rw-r-- 1 rednaxela rednaxela   23 2019-09-13 07:50 file2
—rw-rw-r-- 1 rednaxela rednaxela   48 2019-09-13 07:56 file3
—rw-rw-r-- 1 rednaxela rednaxela   34 2019-09-13 08:59 file4
—rwxrwxr-x 1 rednaxela rednaxela 4882 2019-09-18 13:58 myprog
—rw-rw-r-- 1 rednaxela rednaxela  237 2019-09-18 13:58 myprog.c
drwxrwxr-x 2 rednaxela rednaxela 4096 2019-09-03 15:12 test1
drwxrwxr-x 2 rednaxela rednaxela 4096 2019-09-03 15:12 test2


    اولین فیلد در لیست بالا پرمیشن های فایل ها و دایرکتوری هارو مشخص میکنه
    و اولین کاراکتر در فیلد هم نوغ اون ابجکت رو مشخص میکنه

—   =   files
d   =   directories
l   =   links
c   =   character devices
b   =   block devices
n   =   network devices


    بعد از اون شما سه تا ست سه تایی میبینید
    که هر کدوم از ست های سه کاراکتری یک سطح دسترسی رو مشخص میکنن

r = read permission
w = write permission
x = execute permission


    اگه یکی از پرمیشن ها گرفته شده باشه به جاش دش قرار میگیره ( - )

    سه تا ست به معنای سه سطح امنیتی برای ابجکته
    ست اول , برای صاحب ابجکته
    ست دوم , برای گروهیه که ابجکت بهش تعلق داره
    ست سوم , برای بقیه یوزر هاست

—rwxrwxr-x  1 rednaxela rednaxela   4882   2019-09-18  13:58 myprog

 

    مثلا نمونه بالا نشون میده که :

    اولا ابجکتمون فایله , چون اولین کاراکتر دش هستش ( - )

    سه کاراکتر بعدی که متعلق به صاحب فایله میگه که یوزر هر سه اجازه ( خواندن , نوشتن , اجرا ) فایل رو داره
    سه کاراکتر بعدی یا همون ست دوم میگه که گروه فایل هم همون دسترسی هارو داره
    ولی ست اخر که برای سایر یوزر هاست پرمیشن نوشتن رو نداره


    پرمیشن های پیش فرض :

    پرمیشن های پیش فرض از طریق umask اعمال و نگه داری میشن

$ touch newfile
$ ls -l newfile
—rw-r--r--   1  rednaxela   rednaxela   0 Sep 20 19:16 newfile


    فایل با استفاده از سطح دسترسی پیشفرضی که برامون مشخص شده ساخته شد


    دستور umask پرمیشن های پیش فرض رو مشخص و نمایش میده

$ umask
  0022


    اولین عدد مشخص شده یک موضوع امنیتیه , به اسم sticky bit
    سه عدد بعدی مربوط به پرمیشن ها میشه

    برای اینکه معادل عددی پرمیشن ها اینجا استفاده میشن نگاهی به جدول زیر بندازید

    ---   0   no permissions
    --x   1   execute permission
    -w-   2   write permission
    -wx   3   write & execute permissions
    r--   4   read permission
    r-x   5   read & execute permissions
    rw-   6   read & write permissions
    rwx   7   read & write & execute permissions (full)


    به نحوه کارکرد umask  و مقداری که به دستور میدیم در مثال زیر دقت کنید و برای درک بهتر با جدول بالا مقایسه کنید

    میبینید که اولا مقدار دسترسی ای که به دستور میدیم از فایل گرفته میشه نه اینکه اون مقدار ست بشه

و اینکه این مقدار از عدد شش کم شده نه هفت

$ umask 026
$ touch newfile2

$ ls -l newfile2
-rw-r-----    1  rednaxela rednaxela   0 Sep 20 19:46 newfile2


    توجه داشته باشید که مقدار تعریف شده روی دایرکتوری ها هم تاثیر داره

  

$ mkdir newdir
$ ls -l
drwxr-x--x  2  rednaxela rednaxela  4096 Sep 20 20:11 newdir/

 

    زمانی که لازم باشه مقدار سطح دسترسی یه ابجکت رو مستقیم تغیر بدیم از دستور chmod به شکل زیر استفاده میکنیم

$ chmod 760 newfile
$ ls -l newfile
-rwxrw----   1  rednaxela  rednaxela    0 Sep 20 19:16 newfile


    میبینید که برخلاف مثال حالت پیشفرض , اینجا دقیقا سطح دسترسی ای که به دستور دادیم اعمال شده

    شما میتونید با استفاده از دستور chown مالکیت یوزر و گروه یک ابجکت رو تغیر بدید

    مثال زیر یوزر فایل رو تغیر میده

# chown red newfile
# ls -l newfile
-rw-rw-r--  1  red    rednaxela         0 Sep 20 19:16 newfile


    مثال زیر هم یوزر و هم گروه فایل رو تغیر میده

# chown red.share newfile
# ls -l newfile
-rw-rw-r--  1 red     share           0 Sep 20 19:16 newfile


    مثال زیر فقط گروه فایل رو تغیر میده , به کاراکتر دات دقت کنید

# chown .share2 newfile
# ls -l newfile
-rw-rw-r--   1  red      share2         0 Sep 20 19:16 newfile

  

    البته برای تغیر فقط گروه فایل , میتونید از دستور chgrp هم استفاه کنید    

$ chgrp share3 newfile
$ ls -l newfile

-rw-rw-r--   1  red     share3          0 Sep 20 19:16 newfile


    اشتراک فایل ها :

    همونطور که تا الان حدس زدید ایجاد گروه ها راهی برای به اشتراک گذاشتن سطح دسترسی به فایل هاست و به عنوان اشتراک گذاری کاربرد داره

    در بخش کد های مربوط به پرمیشن ها دیدید که وقتی یک فایل جدید میسازید , لینوکس پرمیشن پیش فرض فایل رو بر اساس یوزر ایدی و گروه ایدی مشخص میکنه , تا اجازه دسترسی به یوزر های دیگه هم بده

    شما یا باید پرمیشن های فایل رو تغیر بدید
    یا باید گروه پیش فرض فایل رو تغیر بدید به گروهی که یوزرا اونجان
    این موضوع میتونه ازاردهنده باشه اگه شما بخواید موارد زیادی رو بسازید و به اشتراک بزارید , که خوشبختانه راه حل مناسبی داره


    سه بیت دیگه هست که لینوکس برای هر فایل و دایرکتوری ذخیره میکنه :

    (The set user id (SUID
    وقتی یک فایل توسط یک یوزر اجرا میشه , برنامه تحت پرمیشن صاحب فایل اجرا بشه

    (The set group id (SGID
    برای فایل : وقتی یک فایل اجرا میشه برنامه تحت پرمیشن گروه فایل عمل کنه , برای دایرکتوری : اگه فایلی داخل دایرکتوری ساخته شد , از گروه دایرکتوری به عنوان گروه پیش فرض استفاده کنه 

    The sticky bit
    فایل بعد از پایان پروسه در مموری باقی بمونه


    بیت SGID برای اشتراک گذاری با اهمیته ,  با فعال کردن این بیت میتونید تمام فایل هایی که در دایرکتوریمون ساخته میشن رو مجبور کنید تا در گروه دایرکتوری قرار بگیرن

    هر کدوم از سه مورد ذکر شده مثل بحث پرمیشن ها با کد شناخته میشن , و این همون عدد اول از چهار عدد umask هستش

    در لیست زیر نمونه کد ها و معانیشون رو میتونید ببینید


    0
    هیچ کدوم از بیت ها ست نشده
    1
    sticky bit ست شده
    2
    SGID bit ست شده
    3
    SGID & sticky bit ست شدن  
    4
    SUID bit ست شده

    5
    SUID & sticky bit ست شدن
    6
    SUID & SGID ست شدن
    7
    همه بیت ها ست شدن


    برای ساخت یک دایرکتوری مخصوص اشتراک گذاری تنها نیاز دارید بیت  SGID  برای دایرکتوری ست بشه

$ mkdir testdir
$ ls -l
drwxrwxr-x    2  rednaxela     rednaxela         4096 Sep 20 23:12 testdir/
$ chgrp shared testdir
$ chmod g+s testdir
$ ls -l
drwxrwsr-x    2  rednaxela     shared       4096 Sep 20 23:12 testdir/
$ umask 002
$ cd testdir
$ touch testfile
$ ls -l
total 0
-rw-rw-r--  1  rednaxela      shared         0 Sep 20 23:13 testfile


    پایان قسمت هشتم از بخش اول
    پایان بخش اول

 

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

برای ارسال دیدگاه یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید دیدگاهی ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در سایت ما ثبت نام کنید. عضویت خیلی ساده است !

ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید

ورود به حساب کاربری