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

آموزش ويرايشگر 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 mesغير مجاز مي باشدe 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 </1 يعني ما نميخواهيم خروجيا را ببينيم خروجيا را بريز دور.

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

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

تمام شود كدش صفر است و هر فرماني اجرا نشود و 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


ادامه مطلب
نوشته شده توسط سرور | ۱۳ تير ۱۳۹۶ ساعت ۱۱:۵۶:۲۳ | آرشيو نظرات (0) :موضوع |

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

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

مي 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/


ادامه مطلب
نوشته شده توسط سرور | ۳۱ ارديبهشت ۱۳۹۶ ساعت ۱۰:۴۵:۴۶ | آرشيو نظرات (0) :موضوع |

سرور مجازي لينوكس ساخت فايل از خروجي يك فرمان


سرور مجازي لينوكس ساخت فايل از خروجي يك فرمان

آوريل 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

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/


ادامه مطلب
نوشته شده توسط سرور | ۱۹ ارديبهشت ۱۳۹۶ ساعت ۱۰:۳۷:۰۷ | آرشيو نظرات (0) :موضوع |

ساخت فايل از خروجي يك فرمان

ساخت فايل از خروجي يك فرمان

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

دهيم:

[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

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 كه متغيردوّم است ميدهد. و اگر تعداد داده ورودي كمتر بود متغيرآخري چيزي گيرش نميآيد.


ادامه مطلب
نوشته شده توسط سرور | ۱۶ ارديبهشت ۱۳۹۶ ساعت ۰۹:۰۳:۵۶ | آرشيو نظرات (0) :موضوع |

سرور مجازي آموزش 1

سرور مجازي آموزش 1

در ادامه حل تمرين بايد از file pipe استفاده ميكنيم كه input standard را به output standard مي برد به طور كل ما

زماني از pipe استفاده ميكنيم كه بخواهيم خروجي استاندارد را از طريق لوله كه pipe اين نقش را براي ما اجرا ميكند به جاي

نمايش روي مانيتور به يك فرمان ديگر ميفرستيم.

به طور كلي:

File PIPE استاندارد Input را به استاندارد output ميبرد.

: حال ميخواهيم همين اسمها را جدا كنيم و ايميل كنيم يعني به جاي اينكه نمايش دهيم روي صفحه از طريق pipe

به فرمانmail ميفرستيم:

[N.pardis@Lpi1~]$ cut -c1-10 namef | mail -s names-listn.pardis

حال دوبارهفرمانmail كه بزنيم آن را ميبينيم. حال شماره ايميل را ميزنيم تا باز شود و آن را ببينيم.

sort

اين فرمان همان طور كه از اسمش مشخص است براي ما sort مي كند و اگر خروجي يك فرمان را به اين فرمان بدهيمsort مي

كند خروجي را.

[N.pardis@Lpi1~]$ man sort

در ادامه اين تمرين از يك فرمان ديگر به نام uniq هم استفاده مي كنيم كه كار واحد سازي را انجام مي دهد و اسمها ي شبيه

هم را از هر كدام يكي مي شمارد.

حال ميخواهيم اين اطلاع را sort كنيم و ايميل كنيم.

[N.pardis@Lpi1~]$ cut -c1-10 namef |sort| mail -s names n.pardis

ttp

11

سرورمجازي

 

اوّل cut آن را جدا ميكند بعد به sort ميدهد و sort هم به mail ميدهد. حال ميبينيم كه اسمها sort شده اند و ايميل شده

اند.

حال ميخواهيم هر اسم را با تعداد تكرار آن يك بار بنويسيد و آپشن f –را هم اضافه ميكنيم تا sensitive caseنباشد.

[N.pardis@Lpi1~]$ cut -c1-10 namef |sort -u –f | mail-s names n.pardis

حال ميخواهيم از هراسم بگويد كه چند تا داريم؟

[N.pardis@Lpi1~]$ cut -cl-10 namef |sort| uniq -c

آپشن u –را از sortبر ميداريم چون اگر اين باشد از هر كدام يكي ميدهد به unique

: اگر sort را برداريم اشتباه ميشود. چون uniq مثالً amirرا ميبيند و بعد زيرش mohammad را ميبيند و فكر مي

كند amirيكي است.

الان مي خواهيم به طور مثال history خودمان را براي همه كساني كه هم اكنون به سيستم متصل هستند ارسال نماييم :

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

ميبينيد كه users را درونtick backيعني ‘’ قرار مي دهيم كه با اين كار users را به عنوان يك اسم مدرنظر نميگيرد

بلكه مقدار آن يعنيuserid كل كاربران را در نظر مي گيرد.

پس تا اينجا sort و uniq را ياد گرفتيم.

dedicatedhosting

[N.pardis@Lpi1~]$ sort -k3 -r -n namef

آپشن k3–يعني بر اساس كليد سوم sort كن وr–يعنيreversمرتب كن و n–يعني كليد سوم از نوع numeric مي باشد و بر

اساس نوع داده numeric در نظر بگير و مرتب كن.

tail head

فرمان بعدي كه با هم ياد ميگيريمhead است كه اين فرمان 12 خط اوّل فايل را به طور پيش فرض بيرون ميكشيد:

در مثال هاي زير فقط 5 خط را نمايش مي دهد:

[N.pardis@Lpi1~]$ head-5 file-name

[N.pardis@Lpi1~]$ head-5 namef

حال اگر بخواهيم 12 خط آخر فايل را نشان دهيم از فرمانtail استفاده ميكنيم:

[N.pardis@Lpi1~]$ tailnamef

و اگر بخواهيم 5 خط آخر را نمايش دهد:

[N.pardis@Lpi1~]$tail -5 namef

حال اگر بخواهيم خط آخر را نشان دهيم اين فرمان را ميزنيم:

[N.pardis@Lpi1~]$ tail -1 namef

1 :شاگرد سوّم را ميخواهيم نمايش دهد:

[N.pardis@Lpi1~]$ sort -k3 –r-n namef |head-3

شاگرد يكي به آخر را نمايش دهد

[N.pardis@Lpi1~]$sort -k3-r -n namef |tail-2| head-1

: خط 13 فايل namef را نمايش دهيد:

[N.pardis@Lpi1~]$ head -13 namef |tail-1| mail -s sort2 sabt

tac

همان طور كه قبال گفتيمفرمانcat محتويات يك فايل را نمايش ميدهد:

[N.pardis@Lpi1~]$ cat namef

و فرمانtacكه عكس فرمانcat است معكوس فايل را نمايش مي دهد:

[N.pardis@Lpi1~]$ tac file-name

[N.pardis@Lpi1~]$ tac namef

 

rev

اين فرمان هم فيلدها و محتويات داخل آنها را برعكس ميكند:

[N.pardis@Lpi1~]$ rev namef

اين فرمان هم كاري نميكند فقط معكوس معكوس است:

[N.pardis@Lpi1~]$ rev namef |rev

less

[N.pardis@Lpi1~]$ man less

فرمانcat اطلاع را نمايش ميدهد ولي چون scroll ميشود همه اطلاع را نميتوانيم در يك ص فحه ببين يم. ميتوانيم از

less استفاده نماييم.

[N.pardis@Lpi1~]$ less nemef

فرمانMore و Most و less كاري كه انجام ميدهند اينست كه صفحه به صفحه نمايش ميدهند و در لينوكس بيشتر از less

استفاده مي شود.خصوصيت مهم less اينست كه امكان search را به ما ميدهد وقتي فايل نمايش داده شد با زدن / و نوشتن

كلمه مورد نظر آن را پيدا كنيم:  پس less امكان search را به ما ميدهد.

[N.pardis@Lpi1~]$ less file-name

و اگر رشته مورد نظر را پيدا نكرد پي ام found not Pattern را ميدهد.

دستور زير كلماتي كه 0 تا oo ندارند را نمايش دهد.

[N.pardis@Lpi1~]$ less namef

/!

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


ادامه مطلب
نوشته شده توسط سرور | ۶ ارديبهشت ۱۳۹۶ ساعت ۱۲:۱۴:۳۰ | آرشيو نظرات (0) :موضوع |