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

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