سرور مجازی سرور اختصاصی
بازدید:
تاريخ : 1396/04/13

آموزش ویرایشگر VIM سرور مجازی

جولای 3, 2017

ویرایشگر vim

ما تا اینجا تعدادیفرمانیاد گرفتیم ولی گاهی اوقا شما نیاز دارید یک فایل را تغییردهید و یا تنظیماتی که مد نظرتان است را

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

ما با آن کار می کنیم ویرایشگر vim می باشد.

در این جلسه ما به طور کامل ویرایشگر Vim را بررسی میکنیم.

[N.pardis@lpi1 ~]$ vim

[N.pardis@Lpi1~]$man vim

این فرمان جزوه ی کاملی هم دارد. برای اینکه یک فایل را ویرایش کنیم این فرمان را میزنیم

File-namevim[N.pardis@Lpi1~]

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

Vim محدودیت ندارد و اگر باینری exe باشد میشود انجام داد و به طور کلی هر چیزی را آماده است ویرایش کند.

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

در لینوکس در بیاوریم. شروع کار به صورت زیر است و فایلی با نام test1 سرور مجازی میسازد:

[N.pardis@Lpi1~]$vim testl

برای وارد کردن دستورا و یا ت ییرا در فایل کلید i در صفحه کلید را فشار می دهیم و تغییراتی را که می خواهیم اعمال می

کنیم.

برای ذخیره و خارج شدن از محیط ویرایشگر x : shift را میزنیم حال l –ls که بزنیم مشخصا فایل را میبینیم و اگر اسم

فایل را بزنیم اجرا میشود.

[N.pardis@Lpi1~]$ test1

میبینیم که اجرا نشد و به ما پی ام found not command را میدهد که این به این دلیل است که لینوکس به خاطر مسایل

امنیتیdirectory current را نمیگردد و از بیرون میخواهد بیاورد برخالف ویندوز مایکروسافت. مسایل امنیتی اینست که

ممکن است فرمانی مثل date در دایرکتوری جاری دستکاری شده باشد و اگر ما date را از دایرکت وری جاری اجرا کنیم مثالً

formatیا delete را انجام دهد به همین دلیل است که از دایرکتوری جاری نمیخواند

حال اگر خودمان مشخص کنیم که از دایرکتوری جاری بخوان باید به صورت زیر بزنیم

[N.pardis@Lpi1~]$./testl

Permission denied

که حال اجرا میشود ولی ممکن است پی ام denied permission هم بگیرید.

[N.pardis@Lpi1~]$chmod 777 test1

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

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

گرفته شود. که این error را error semantic میگویند و اگر دستورکلا اشتباه باشد error syntax میدهد.

برنامهای بنویسید که اسم را بگیرد سرور اختصاصی و حرف آخر آن را چاپ کند؟

[N.pardis@Lpi1~]$vim testn

echo “please Enter ur NAME:”

read N

echo $N |tail-c2

خروج از vim با x : shift

[n.pardis@lpi ~]$ testn

-bash: testn: command not found

بنابراین برای اجرا testn ./را به کار می گیریم:

[N.pardis@Lpi1~]$ ./testn

bash:./testn permission denied

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

اینست که

[N.pardis@Lpi1~]$chmod 777 test1

[N.pardis@Lpi1~]$ ./testn

حال میبینیم که اجرا میشود و از ما اسم میخواهد و حرف آخرش را نمایش میدهد.

 

میخواهیم وارد یک دایرکتوری به نام dummy شویم و فایلهایی که اسمشان 0 حرفی است را به ما نشان دهد:

[N.pardis@Lpi1~]$ cd dummy

[N.pardis@Lpi1~/dummy]$ ls ??

1a 1b sh 1j

دو تا ؟؟ یعنی 0 حرفی وفایل های دو حرفی را نمایش میدهد. هر ؟ یعنی یک حرف . فایلهای

دو حرفی که اوّلش عدد است را نمایش دهد؟

[N.pardis@lpi1~/dummy]$ls [0-9]?

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

[N.pardis@lpi1~/dummy]$ ls *[0-9]

فایلهایی که آخرشان حرف صدادار دارد را نمایش دهد ؟

[N.pardis@lpi1~/dummy]$ ls *[aciou]

فایلهایی که از a تا k شروع میشوند را نمایش دهد ؟

[N.pardis@lpi1~/dummy]$ ls [a-k] *

فایلهایی که با a شروع نمیشوند را نمایش دهد ؟

[N.pardis@lpi1~/dummy]$ ls [!a]*

ما در vim میتوانیم abbreviation تعریف کنیم به این صورت :

:abbr p pardis

با این تعریف به محظ اینکه حرف p را بزنیم و سپس کلید space را فشار دهیم pardis را مینویسد.

p space

همچنین در vim میتوانید macro تعریف کنید که مثالً اگر 5 F1 را فشار دادیم. بالای نامه �به نام خدا � بنویسید و خیلی

امکانات دیگر هم در vim داریم.

برنامهای بنویسید که یک IP بگیرد و کامپیوتر مربوطه را کنترل کند و اگر سیستم down بود به Adminیک

ایمیل ارسال کند؟

چطور میشود فهمید که یک کامپیوتر up است یا down؟ فرمان ping را اجرا میکنیم.

[N.pardis@Lpi1~]$ Ping 192.168.100.1

ping با استفاده از پروتوکل ICMP. ،56 حرفکه عبارت است از حروف الفبا به اضافه character special میفرستد و اگر

دوباره برایش پس فرستاد میفهمیم که up است.

به معنی در تاریکی به دنبال چیزی گشتن Groper internet packet  Ping

ping بیشتر برای رفع اشکال بدرد میخورد.

ICMP internet control message protocol

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

انجام میدهد. حال منوآل ping را بخوانید و بگویید چه کار کنیم که 1 بار بیشتر ping نکند؟ از آپشن c1 –استفاده میکنیم که

یک بار بیشتر نفرستد.

[N.pardis@Lpi1~]$ ping 192.168.100.1

[N.pardis@Lpi1~]$ vi test2

#!/bin/bash

با نوشتن این خط داریم میگوییم که این نرمافزار را چه کسی اجرا میکند و در این مثال bash آن را اجرا می کند.

این خط صفحه را پاک میکند.

clear

X=`date`

read -p “please Enter Ip:” IP

این خط پی امی را روی صفحه مینویسد و توقع دارد IP بدهیم.

Ping -c1 $IP>/dev/null 2>/dev/null

ttp

24

به طور کلی هر نرم افزاری عدد یک ورودی میخواهد و حداقل دو تا خروجی دارد:

1 خروجی استاندارد

0 خروجی خطا

نرمافزاری که خروجیاش همیشه یک چیز درست و مشخصی است همیشه به output standard میفرستد و نرمافزار اعتراض

و پیامهای خطایش را به خروجی خطا میفرستد.

&> 0 یعنی 0 جایی برود که یک 1 میرود.

null/dev یعنی ما نمیخواهیم خروجیا را ببینیم خروجیا را بریز دور.

null/dev یعنی خروجی خطا را هم نمیخواهیم ببینیم و بریز دور.

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

تمام شود کدش صفر است و هر فرمانی اجرا نشود و error دهد و نتیجهای که خواستیم ندهد غیرصفر است.

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

که ping با موفقیت انجام شده و سیستم up است؟؟؟ فرمانی که در اینجا مطرح می شود فرمانی است که نتیجه نهایی فرمان

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

معنی عدم موفقیت فرمان قبلی می باشد.

[n.pardis@lpi1~]$ echo $?

0

مقدار تابع date را میگیرد `date=`Xیکبار ping میکند.

اگر ping انجام شد ویا به هر دلیلی انجام نشد را از طریق ساختار شرطیif چک می کنیم که در زبانهای برنامه نویسی برای شرط

بود و شرطی را بیان میکرد :

[n.pardis@lpi1~]$ type if

if is a shell keyword

If [$? !=0]; then

به Admin ایمیل میکند.

echo $Ip $X |mail -s “server is down…” Admin

else

echo “server is up”

fi

بنابراین پروژه ما به اتمام رسید به این صورت :

#!/bin/bash

clear

X=`date`

read -p “please Enter Ip:” Ip

ping -c1 $Ip>/dev/null 2>/dev/null

If [$?!= 0] then

echo $Ip $X | mail -s “server is down…” Admin

else

echo “server is up”

fi

از vim خارج می شویم و permission می دهیم و آن را اجرا می کنیم:

[N.pardis@Lpi1~]$ chmod 700 test2

[N.pardis@Lpi1~]$ ./test2

ttp

25

برای اینکه زمان و ساعت را نگه داریم آن را در یک متغیربا حرف بزرگ به نام X میریزیم و این نکته را هم به

خاطر داشته باشید وقتی می خواهید نتیجه ی اجراییک فرمان را در یک متغیرنگه دارید از` استفاده می کنیم و

فرمان را درون آن قرار می دهیم.

[N.pardis@Lpi1~]$ X=`date`

[N.pardis@Lpi1~]$ echo $X

اگر بخواهیم فقط روز را نگه داریم در X به این صورت عمل میکنیم:

[N.pardis@Lpi1~]$ X=` date |cut-cl-3′

[N.pardis@Lpi1~]$ echo $X

در تمرین 15 که در قسمت قبل حل کردیم این مشکل وجود دارد که اگر هیچ Ip ای هم وارد نکنیم و Enter بزنیم جلوی ما را

نمیگیرد میخواهیم کاری کنیم که اگر هیچip ای وارد نکردیم جلوی ما را بگیرد. برای این ک ار ping را دس ت نم یزن یم و در

بالای برنامه یک if میگذاریم میگوییم:

if [$Ip=’ ‘]

then

echo “U Must Enter Ip…”

exit

fi

اگر در دو طرف Ipیک حرف نگذاریم با یک Enter میشود شکستیعنی اگر enter بزنیم و بخواهیم خالی رد کنیم قبول می کند

و error نمیدهد چون enter را هم به عنوان ورودی می گیرد و فکر میکند خالی نیست.

این باز هم درست کار نمیکند.چرا؟

if مثل کفه ی ترازوهای قدیمی است که اگر یک طرف یک وزنه یک کیلویی باشد و آن طرف هم جنس هر دو طرف مثالً یک

وزنه ی خیلی کوچک قرار میدهند تا مساوی شوند. ما هم در if همین کار را میکنیم و هر دو طرف ifیک حرف مثالx قرار می

دهیم و حال if ما مساوی میشود و اگر Enter بزنیم در نتیجه هر دو طرف if ما مساوی میشود و مثل این می ماند که خالی

رد کنیم. اکثر script shell ها به این صورت است. چون هر دو طرف فقط یک x داریم و x ها مساوی هستند معلوم م یش ود

که ما Enter زدیم.

:میخواهیم پسورد دوّم را برایid user ایجاد کنیم و اگر پسورد دوّم غلط بود یک ایمیل برا یAdmin و صاحب

userid برود.

برای اینکه بتوانیم این تمرین را حل کنیم باید بدانیم که موقعی که ما login میکنیم چه اتفاقی میافتد.

اگر a-ls را بزنید تمام فایلهایی را که وجود دارد میبینید. وقتی شما در لینوکس userid میسازید فرد هر کاری که انجام ده د

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

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

less [N.pardis@Lpi1~]$ bash-history

عبارت است از یک فایلی که تمام history ها را به شما نشان میدهد.

برای اینکه history خود را ببینید این فرمان را بزنید:

[N.pardis@Lpi1~]$ less .bash-history

ما 1 تا فایل داریم که با bash .شروع میشود. فایل بعدیprofile-bash .است که معادل bash.Autoexec در ویندوز اس ت

که به مح اینکه loginکنید این فایل اجرا میشود. که میتوانیم در این فایل ت ییراتی هم ایجاد کنیم ک ه م ثالً بع د از ا ینک ه

login کردیم یک پی ام مثالً salam بنویسید.

echo “salam”

حال تمرین را حل میکنیم:

[N.pardis@Lpi1~]$ vi .bash-profile

trap “echo enter second password” 2

read –s-p “PLZ ENTER SECOND PASS:” pass

iF [ P$pass != pardisp ] then

echo $USER on `date` hacked | mail -s hacked admin

exit

else

حواسمان باشد در if اگر پسورد غلط بود قبل از elseیک exit هم باید بگذاریم.

اولین مشکل اینست که پسورد دیده شد باید کاری کنیم که دیده نشود میآییم بنابراین آپشن s –را ب ه read اض افه

میکنیم.

مشکل دوّم اینست که میخواهیم Enter زدیم prompt نگیرد.

فرمانsu را که بزنیم به معنیuser switch میباشد یعنی از یک id user به id user دیگر رفتن و اگر dash –جلوی

آن بگذاریم به معنیfull میباشد و به root میرود.

.bash-logout فایل

بنابراین ما متوجه شدیم که 1 فایل نقطه داریم. فایل بعدی که بررسی میکن یم logout-bash .است و وقتی شما out log

میکنید این نرم افزار اجرا میشود.

میخواهیم برنامهای بنویسید که وقتی میخواهید out log کنید از شما بپرسد مطمئن ی و اگر yes گفتید out log

کند و اگر No گفتید prompt را برای شما بیاورد؟

[n.pardis@lpi1~]$ vi .bash-logout

بررسی سیگنال ها

یک برنامه وقتی میآید در حافظه باید آنقدر محکم باشد که از بین نرود. یکی از عاللمی که یک برنامه را متوقف میکند و یا می

کشد c ctrl است. در محیط گرافیکال cut که وقتی به یک نرمافزار میرسد آن را از بین میبرد و میکشد.

به همین دلیل است که وقتیpass second را میخواهد c ctrl میزنیم که میکشد آن را و وارد م یش ود. ب ه c ctrl م ی

گوییم سیگنال. ما سیگنالهای مختلفی داریم. که سه تا عکسالعمل میتوانیم در مقابل هر سیگنال داشته باشیم:

1 عکسالعمل نشان دادن Action

Ignore 0

Default 3

دو سیگنال معروفی که داریم یکیc ctrl و دیگریup Hang شماره 1 ارتباط مخاطب با پروسس قطع شده است است.

حال این فرمان را میزنیم تا ببینیم چند تا سیگنال داریم.

[N.pardis@Lpi1~]$ kill -l

1 .سیگنال ما داریم که لینوکس همه را support میکند. که یکی از آنها Hangup است و interrupt شماره 0 همان

c ctrl است. Vim را نمیتوان با c ctrl کشت. هر سیگنال یک کد دارد. ما به وسیلهیtrapیعنی فرمانtrap برای سیگنال می

توانیم تله بگذاریم و جلوی اجرا شدنش را بگیریم. trapیکی از فرمانهای داخلیbash است میتوان به وسیله آن عکس العمل

مناسب را در مقابل سیگنال اتخاذ نمود و توصیه میشود دستور trap را در ابتدایscript گذاشت. با این فرمان میگو ییم هر

وقت

[n.pardis@lpi1~]$ trap ‘cal’ 2

سیگنال شماره 0 یعنیc ctrl آمد تقویم را اجرا کن. یعنی سیگنال 0 را اجرا نمیکند و تقویم را اجرا میکند.

اگر فرمان زیر را وارد کنیم دوباره c ctrl کار می کند.

[n.pardis@lpi1~]$ trap ” 2

حال اگر دو تا کوتیشن را به هم بچسبانیم و بعد c ctrl را بزنیم م یبینیم که اجرا نمیش ود. وقت یspace بینشان باشند

یعنیc ctrl را بگیرد ولی هیچ کاری نکند.

و اگر دو تا کوتیشن به هم چسبیده باشندیعنیignore میکند c ctrl را. در بین دو کوتیشن میتوانیم هر چی بگذاریم echo

salamیا اجراییک نرمافزار. اگر خواستیم دوباره برگردانیم به حالت پیشفرض بین دو تا کوتیشن یک blank میگذاریم.

برای دیدن منوآل signal که خیلی هم مهم است این فرمان را بزنید:

[n.pardis@lpi1~]$

man -a signal





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

می 21, 2017

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

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

میکند.

وقتیفرمانl -ls را میزنیم اطلاع و مشخصا فایل ها را مشخص میکند.اولین فیلد اطلاعتی شامل مجوزها می باشد .سمت چپ

ترین کاراکتر اگر d باشد یعنیدایرکتوری است و اگر – باشد یعنی فایل است.

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

مربوط به ownerیعنی صاحب فایل می باشد execute write read rwx یعنی مجوز خواندن، نوشتن و اجرا کردن. اگر به

جای هر کدام از این کاراکترها – بود یعنی اجازه ی انجام آن کار را ندارد .سه تای دوم مربوط به هم گروه ها ی آن userid می

باشدgroup که مشخص میکند هم گروههای آن userid چه permission هایی دارندexecute write read rwx و سه

تای آخر هم مجوز های مربوط به other را مشخص می کند یعنی افراد غریبه چه مجوزهایی دارند.به عنوان مثال مجوز زیر می

تواند مربوط به یک فایل می باشد.

سرور مجازی 

-rwx r– r–

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

[N.pardis@Lpi1~]$ cd /home/

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

completion command است استفاده کنید.

 

و از آنجا به خانه یک فرد دیگر میرویم که پی ام denied permission میگیریم چون باید root باشیم تا این مجوز فعال شود

و اجازه داشته باشیم:

[N.pardis@Lpi1~]$ cd /a.Niki/

Permission denied

حال اگر مجوزها را تغییردهیم میتوانیم به خانهی فرد برویم که با فرمانchmod میتوانیم مجوزها را تغییردهیم. 777 یعنی

همه میتوانند همه کاری را انجام دهند، هر فردی چه غریبه و چه همگروه میتوانند همه کاری انجام دهند.

اجازهی اجرای دایرکتورییعنی مجوز x برای یک دایرکتوری چیست؟

ln

در لینوکس ما میتوانیم به یک فایل تا 055 تا اسم بدهیم.

فرمانln که مخفف link می باشد در لینوکس برای دادن چندین اسم به یک فایل به کار می رود.

ابتدا یک فایل می سازیم.با فرمانl –ls مشخصا آن را میبینیم که اندازه آن صفر است.

[N.pardis@Lpi1~]$ > F1

[N.pardis@Lpi1~]$ ls-l

اگر بخواهیم دو تا اسم دهیم از فرمانln استفاده میکنیم که با هم manual آن را میبینیم

[N.pardis@lpi1 ~]$ man ln

[N.pardis@Lpi1~]$ln F1 F2

[N.pardis@Lpi1~]$ln F1 F3

حال F1 سه تا اسم دارد.فرمانln که مخفف link می باشد چندین کاربرد دارد:

1:فایل های با نام طولانی را می توانیم یک اسم کوتاه بدهیم .

0:به یک فایل می توانیم چندین نام به زبان های مختلف بدهیم.

3:ت ییرا در هر چند فایل به صورت همزمان اعمال می شود.

ttp

19

1:با پاک شدن یکی از فایل ها در صورت وجود نام دیگر به طور کامل نابود نمی شود چون 0 تا اسم دارد از روی دیسک پاک

نمیشود..سرور اختصاصی 

فرمانrm فایل را پاک میکند:

[N.pardis@Lpi1~]$rm F2

حال فایلی که ساختیم دواسمیمیشود.

آیا F3یک کپی از F2 است؟ چطور بفهمیم که یکی هستند؟

در لینوکس هر object ای که درست میکنیم به آن یک عدد صحیح و مثبت اختصاص میدهد. که اگر قبل از دس تور l-lsیک

i –هم بنویسیم یعنیindexیا شمارهی آن را هم میدهد و شماره F1 و F3 را میبینیم که یکی است. ه ر object در لین وکس

درست شود یک شماره دارد که به آن inode node index میگویند.

حال اگر i –ls بزنیم میبینیم که شماره این سه فایل یعنیinode آنها یکی است البته چون یکی از آنه ا را delete کرد یم الان

دو تا فایل داریم که f1 و f3 می باشند که inode آنها یکی است.

[n.pardis@lpi ~]$ ls -i

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

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

[N.pardis@Lpi1~]$mkdir test2

[N.pardis@Lpi1~]$ls-l

میبینیم که این دایرکتوری که تازه ساختیم و هیچ ln هم به آن نداشتیم تعداد لینکهایش 0 است چرا؟

مثالً یک دایرکتوریetc داریم که 055 اسم دارد آیا میتواند درست باشد؟ تعداد لینکهای دایرکتوری 0 است ولی فایل 1 است

منبع : https://sarvserver.com/%D8%A8%D8%B1%D8%B1%D8%B3%DB%8C-%D9%85%D8%AC%D9%88%D8%B2-%D9%87%D8%A7%DB%8C-%D9%81%D8%A7%DB%8C%D9%84-%D8%AF%D8%B1-%D9%84%DB%8C%D9%86%D9%88%DA%A9%D8%B3-%D9%88%D8%B3%D8%B1%D9%88%D8%B1-%D9%85%D8%AC%D8%A7/






سرور مجازی لینوکس ساخت فایل از خروجی یک فرمان

آوریل 26, 2017

ساخت فایل از خروجی یک فرمان

حال میخواهیم ببینیم اگر بخواهیم محتویاتت یک فایل را به جای اینکه نمایش دهیم در یک فایل بریزیم چه کاری باید انجام

دهیم:

[N.pardis@Lpi1~]$ cat namef> a

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

کنیم. با این دستوریک فایلی درست شد به اسم a و محتویات namef داخل آن است.

فقط اسامی را در فایلی به نام name بریزید:

[N.pardis@Lpi1~]$ cut-c1-10namef > name

فقط نام خانوادگی را در فایلی به نام family بریزید:

[N.pardis@Lpi1~]$ cut -c18-30 namef > family

اگر دو تا علامت < داشته باشیم یعنی><به چه معنی می باشد؟

سرور مجازی 

یعنی اگر فایلی به نام family در مثال بالا وجود دارد در انتهای آن اضافه میکند و محتویاتت فایل قبلی تغییر نمی نماید ولی اگر

فایل وجود نداشته باشد فایلfamily را خودش می سازد.

فایل passwd

Untitled-4-1.png

در لینوکس فایلی داریم به نام passwd که تمام userId ها در آن ثبت شده اند و به این صورت میتوانیم محتویات آن را

ببینیم:

[N.pardis@Lpi1~]$ less /etc/ passwd

محتویات داخل این فایل با: از هم جدا شده اند و اطلاع مربوط به هر Id user با دو نقطه از Id user بعدی جدا میشود:

قلمهای اطلاعتیId user و password و شماره Id و … می باشد.پس فایل passwd آدرس و شماره و … شما را نگه میدارد.

ما میتوانیم این فایل را تغییردهیم.

اگر بخواهیم مشخصه Fingerیک شناسه را تغییربدهیم:

[N.pardis@Lpi1~]$ chfn

Password

Name

Office

Phone

اگر بخواهیم ببینیم به عنوان مثال:

سرور اختصاصی 

[N.pardis@Lpi1~]$ finger n.pardis

میخو اهیم تمام Id user ها را از فایل passwd جدا کنیم و محتویات آن را به userid به نام sabt ارسال کنیم؟

[N.pardis@Lpi1~]$ cut -f1 -d: /etc/ passwd |mail -s uid sabt

آپشن d –مخفف delimiter به معنی جدا کننده می باشد و در این فایل جداکننده دو نقطه : می باشد.

میخواهیم sort کنیم و ایمیل کنیم:

[N.pardis@Lpi1~]$ cut -f1 -d: /etc/passwd |sort| mail-s uid sabt

میخواهیم فیلد اوّل و پنجم را جدا کنیم:

[N.pardis@Lpi1~]$ cut -f1,5 -d: /etc/passwd |sort| mail-s uid sabt

اگر بخواهیم history خودمان را Mail کنیم به این صورت :

[N.pardis@Lpi1~]$ history |mail-s myhis sabt

اگر بخواهیم history مان برای همه ایمیل کنیم به جای اینکه اسم همه id user ها را بنویسیم از users استفاده میکنیم.

[N.pardis@Lpi1~]$ history |mail -s my hist `users`

تعریف متغیر در لینوکس

در لینوکس ما متغیرداریم و میتوانیم به راحتی به آن مقدار دهیم :

[N.pardis@Lpi1~]$ x=2

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

میدهیم که مقدار آن را در نظر بگیرد نه اینکه اسم متغیر را بنویسد:

[N.pardis@Lpi1~]$echo $x

دستور زیر مقدار متغیرx را در t میریزد.

[N.pardis@Lpi1~]$ echo t=$x

برای اینکه یک عبارت را در کنار مقدار متغیرچاپ کند به این صورت مینویسیم:

[N.pardis@Lpi1~]$ echo ${x}aictc

عبارت متغیر

read

برای خواندن اطلاع در لینوکس فرمانread را داریم که به وسیلهیفرمانtype میفهمیم که یک دستور builtin میباشد:

[N.pardis@Lpi1~]$ type read

read is a shell builtin.

وقتی فرمانread و سپس نام متغیررا وارد می نمایید.

ttp

14

[N.pardis@Lpi1~]$ Read NAME

 اسم متغیر

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

وقتیecho کنیم میبینیم که مقدار متغیررا برای ما مینویسد. توصیه میشود اسامی متغیرها را بزرگ بنویسید

[N.pardis@Lpi1~]$ echo $NAME

zahra

اطلاع بیشتر از فرمان read را می توان با فرمان read help مشاهده نمود.فرمانهایbuiltin فقط help دارند.

[N.pardis@Lpi1~]$ help Read

با توجه به helpفرمانreadکاری کنید اگر فرمانRead بعد از 5 ثانیه جواب ندادید out time بدهد و خارج شود:

[N.pardis@Lpi1~]$ Read –t5 NAME

چه کاری انجام دهیم تا اسم را بیشتر از سه حرف نگیرد؟

[N.pardis@Lpi1~]$ read –n3 NAME

در Read اگر اسم متغیررا وارد نکنید error نمیدهد و پیشفرض اسم replyمیگذارد.

حال میخواهیم که اسم بیشتر از 3 حرف نگیرد و out time 7 ثانیه باشد.

[N.pardis@Lpi1~]$read-n3 –t7 name

اسم متغیر

p –در فرمانread به ما prompt میدهد:

[N.pardis@Lpi1~]$ read -p “PLZ ENTER UR NAME:”–t7 -n14 NAME

اگر فرمان زیر را بزنیم بعد از مد ثانیهای که در آن مشخص میکنیم خط قطع میشود که این فرمان برای کنترل و کار کردن

کاربران مناسب است.

بعد از 15 ثانیه خط قطع میشود با حروف بزرگ 15 =TMOUT

با یک خط برنامهای بنویسید که یک اسم را بخواند و حرف اوّل آن را چاپ کند؟

[N.pardis@Lpi1~]$ read -p “ENTER UR NAME:” -t 7 -n3 NAME; echo $NAME |cut-c1

ENTER UP NAME: pardis

p

[N.pardis@Lpi1~]$ read –p “ENTER NAME:” –t 7 -n 14 NAME;echo $NAME > /tmp/a; cutc1/tmp/a

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

برنامهای بنویسید که اسمی را بخواند و حرف آخر آن را چاپ کند؟

[N.pardis@Lpi1~]$ read -p “ENTER Name:” –t 7 -n 14 NAME;echo $ NAME |tail -c2

حرف آخر اسم مورد نظر ما s است از آخر حرف دوم است چونEnter هم که بعد از اسم وارد کرد یم هم یک کاراکتر

حساب میشود.

دلیل اینکه 0 مینویسیم به این خاطر است که اگر مثالً کلمه Hello را ما به echoبدهیم و بگوییم dump octal آن را به ما

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

[N.pardis@Lpi1~]$ echo hello |od -c

0000000 h e l l o

nهم که enter است یکی حساب میشود.

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

[N.pardis@Lpi1~]$ read a; echo $a |od–c

read

[N.pardis@Lpi1~]$ read a b

Najibeh pardis

[N.pardis@Lpi1~]$ echo $a

Najibeh

همیشه اولین داده ورودی تا قبل از space را میدهد به اوّلین متغیرو دوّمین ورودی و هر چه که باز هم بعد از space میزنیم

را به همان b که متغیردوّم است میدهد. و اگر تعداد داده ورودی کمتر بود متغیرآخری چیزی گیرش نمیآید.

منبع:https://sarvserver.com/%d8%b3%d8%b1%d9%88%d8%b1-%d9%85%d8%ac%d8%a7%d8%b2%db%8c-%d9%84%db%8c%d9%86%d9%88%da%a9%d8%b3-%d8%b3%d8%a7%d8%ae%d8%aa-%d9%81%d8%a7%db%8c%d9%84-%d8%a7%d8%b2-%d8%ae%d8%b1%d9%88%d8%ac%db%8c-%db%8c%da%a9/