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

آوریل 26, 2017

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

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

دهیم:

[[email protected]~]$ cat namef> a

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

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

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

[[email protected]~]$ cut-c1-10namef > name

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

[[email protected]~]$ cut -c18-30 namef > family

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

سرور مجازی 

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

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

فایل passwd

Untitled-4-1.png

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

ببینیم:

[[email protected]~]$ less /etc/ passwd

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

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

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

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

[[email protected]~]$ chfn

Password

Name

Office

Phone

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

سرور اختصاصی 

[[email protected]~]$ finger n.pardis

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

[[email protected]~]$ cut -f1 -d: /etc/ passwd |mail -s uid sabt

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

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

[[email protected]~]$ cut -f1 -d: /etc/passwd |sort| mail-s uid sabt

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

[[email protected]~]$ cut -f1,5 -d: /etc/passwd |sort| mail-s uid sabt

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

[[email protected]~]$ history |mail-s myhis sabt

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

[[email protected]~]$ history |mail -s my hist `users`

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

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

[[email protected]~]$ x=2

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

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

[[email protected]~]$echo $x

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

[[email protected]~]$ echo t=$x

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

[[email protected]~]$ echo ${x}aictc

عبارت متغیر

read

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

[[email protected]~]$ type read

read is a shell builtin.

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

ttp

14

[[email protected]~]$ Read NAME

 اسم متغیر

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

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

[[email protected]~]$ echo $NAME

zahra

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

[[email protected]~]$ help Read

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

[[email protected]~]$ Read –t5 NAME

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

[[email protected]~]$ read –n3 NAME

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

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

[[email protected]~]$read-n3 –t7 name

اسم متغیر

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

[[email protected]~]$ read -p “PLZ ENTER UR NAME:”–t7 -n14 NAME

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

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

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

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

[[email protected]~]$ read -p “ENTER UR NAME:” -t 7 -n3 NAME; echo $NAME |cut-c1

ENTER UP NAME: pardis

p

[[email protected]~]$ read –p “ENTER NAME:” –t 7 -n 14 NAME;echo $NAME > /tmp/a; cutc1/tmp/a

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

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

[[email protected]~]$ read -p “ENTER Name:” –t 7 -n 14 NAME;echo $ NAME |tail -c2

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

حساب میشود.

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

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

[[email protected]~]$ echo hello |od -c

0000000 h e l l o \n

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

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

[[email protected]~]$ read a; echo $a |od–c

read

[[email protected]~]$ read a b

Najibeh pardis

[[email protected]~]$ echo $a

Najibeh

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

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