سرور مجازی لینوکس ساخت فایل از خروجی یک فرمان
ساخت فایل از خروجی یک فرمان
حال میخواهیم ببینیم اگر بخواهیم محتویاتت یک فایل را به جای اینکه نمایش دهیم در یک فایل بریزیم چه کاری باید انجام
دهیم:
[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
در لینوکس فایلی داریم به نام 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 که متغیردوّم است میدهد. و اگر تعداد داده ورودی کمتر بود متغیرآخری چیزی گیرش نمیآید.