انجمنهای فارسی اوبونتو
		کمک و پشتیبانی => برنامهسازی => نویسنده: PunkGeek در 07 تیر 1393، 01:20 بظ
		
			
			- 
				سلام دوستان
 نیاز به یه شل اسکریپت ساده دارم که هر وقت اجرا میشه ایپی و گتوی و نت ماسک رو دریافت کنه و جایگزینه ایپی موجود در فایل interface کنه
 خیلی ممنونم
- 
				 - من اوبونتو ندارم ،اگه آدرس فایل و یک نمونه از محتویاتش رو بزارید ،انجامش میدم براتون.
			
- 
				 - من اوبونتو ندارم ،اگه آدرس فایل و یک نمونه از محتویاتش رو بزارید ،انجامش میدم براتون.
 
 
 خیلی ممنونم
 /etc/network/interfaces
 
 محتویاتشم اینه:
 
 # This file describes the network interfaces available on your system
 # and how to activate them. For more information, see interfaces(5).
 
 # The loopback network interface
 # auto lo
 # iface lo inet loopback
 
 # The primary network interface
 auto eth0:0
 iface eth0:0 inet static
 
 address 107.6.174.246
 netmask 255.255.255.192
 gateway 107.6.174.193
 
 auto eth0:1
 iface eth0:1 inet static
 
 address 192.168.1.3
 netmask 255.255.255.0
 gateway 192.168.1.1
 
 
 
 
 فقط یه نکته مهم اینه که eth0:1 نباید تغییر کنه
 فقط eth0:0 رو باید تغییر بده
- 
				 - شرمنده چیزی به ذهنم نمیاد الان ،فکر میکردم مثل سیستم عامل خودم هر interface فایلش جداست که با یک sed راحت حل میشه. :(
			
- 
				 - شرمنده چیزی به ذهنم نمیاد الان ،فکر میکردم مثل سیستم عامل خودم هر interface فایلش جداست که با یک sed راحت حل میشه. :(
 
 
 فدورا میشد، حالا شما اگر امکانش هست sed رو بنویسید من یه فکری به حالش مکنم
- 
				 - مبتدیانه است ولی همچین چیزی به ذهنم رسید (این کانفیگ فدوراست)  ::)
 #!/bin/bash
 
 path="/home/elyas/my_scripts/aaa"
 
 echo "enter ip :"
 read ip
 echo "enter netmask :"
 read netmask
 echo "enter gateway :"
 read gateway
 
 
 echo "TYPE=Ethernet" | tee $path
 echo "BOOTPROTO=dhcp"| tee -a $path
 echo "DEFROUTE=yes"| tee -a $path
 echo "NAME=wire"| tee -a $path
 echo "UUID=632f0667-56c9-481d-8203-7782af54af2a"| tee -a $path
 echo "ONBOOT=yes"| tee -a $path
 echo "HWADDR=20:89:84:FB:74:1E"| tee -a $path
 echo "PEERDNS=yes"| tee -a $path
 echo "PEERROUTES=yes"| tee -a $path
 echo "IPADDR=$ip"| tee -a $path
 echo "NETMASK=$netmask"| tee -a $path
 echo "GATEWAY=$gateway"| tee -a $path
 - راستی چرا با ifconfig کار نمیکنید؟
 ifconfig wlp3s0 172.20.1.50 netmask 255.255.255.0
- 
				 - مبتدیانه است ولی همچین چیزی به ذهنم رسید (این کانفیگ فدوراست)  ::)
 #!/bin/bash
 
 path="/home/elyas/my_scripts/aaa"
 
 echo "enter ip :"
 read ip
 echo "enter netmask :"
 read netmask
 echo "enter gateway :"
 read gateway
 
 
 echo "TYPE=Ethernet" | tee $path
 echo "BOOTPROTO=dhcp"| tee -a $path
 echo "DEFROUTE=yes"| tee -a $path
 echo "NAME=wire"| tee -a $path
 echo "UUID=632f0667-56c9-481d-8203-7782af54af2a"| tee -a $path
 echo "ONBOOT=yes"| tee -a $path
 echo "HWADDR=20:89:84:FB:74:1E"| tee -a $path
 echo "PEERDNS=yes"| tee -a $path
 echo "PEERROUTES=yes"| tee -a $path
 echo "IPADDR=$ip"| tee -a $path
 echo "NETMASK=$netmask"| tee -a $path
 echo "GATEWAY=$gateway"| tee -a $path
 - راستی چرا با ifconfig کار نمیکنید؟
 ifconfig wlp3s0 172.20.1.50 netmask 255.255.255.0
 
 به نظرتون اگه فایل interfaces رو پاک کنه و اخر کار اون سه تادخط رو اکو بدم چطوره؟
 ممنونم بابت شل
- 
				 - اینجور که از فایل شما دیده میشه شما با interface های alias هم کار میکنید، که ممکنه لیستتون کم یا زیاد بشه ،ولی اگه یک لیست ثابت دارین خوبه.
 
 به نظرتون اگه فایل interfaces رو پاک کنه و اخر کار اون سه تادخط رو اکو بدم چطوره؟ 
 - اینم آدرسی که تحت عنوان path میگیره رو پاک میکنه ( چون اولین دستور tee ، نداره append-- رو ) ،و محتویاتی که میخواید رو میتونید اکو کنید ،اگه همیشه فایل به یک شکله.
- 
				 - اینجور که از فایل شما دیده میشه شما با interface های alias هم کار میکنید، که ممکنه لیستتون کم یا زیاد بشه ،ولی اگه یک لیست ثابت دارین خوبه.
 
 به نظرتون اگه فایل interfaces رو پاک کنه و اخر کار اون سه تادخط رو اکو بدم چطوره؟ 
 - اینم آدرسی که تحت عنوان path میگیره رو پاک میکنه ( چون اولین دستور tee ، نداره append-- رو ) ،و محتویاتی که میخواید رو میتونید اکو کنید ،اگه همیشه فایل به یک شکله.
 
 
 eth0:1 ثابت هستش
- 
				با تشکر فراوان، اسکریپتی که دادید جواب داد
 فقط یه موردی چطور باید کاری کنم که خروجی رو نشون نده؟
 و اینکه با هر بار لاگین کردن یوزر روت، اسکریپت خودکار اجرا بشه و در صورت کنسل کردن (ctrl + c) یوزر روت هم لاگ اوت بشه؟
- 
				میشه بگی این کدها رو برای چه کاری میخوای؟
			
- 
				میشه بگی این کدها رو برای چه کاری میخوای؟
 
 
 برای یه ماشین مجازی که ایپی رو غیر از interfaces داخل چند تا فایل php هم باید ست کنه و یه سری چیز های دیگه مثل پسورد و ...
 در اصل یه پنلی هست برای esxi فعلا آماده نشده هنوز
 
 فقط نمیدونم چرا این کد که نوشتم کار نمیده
 echo "Enter Password For Root:"
 read pass
 
 echo -e "$pass\n$pass\n"| passwd root
- 
				 - برای این که کد خروجی نداشته باشه از این استفاده کنید :
 #!/bin/bash
 
 path="/home/elyas/my_scripts/aaa"
 
 echo "enter ip :"
 read ip
 echo "enter netmask :"
 read netmask
 echo "enter gateway :"
 read gateway
 
 
 echo "TYPE=Ethernet" > $path
 echo "BOOTPROTO=dhcp">> $path
 echo "DEFROUTE=yes">> $path
 echo "NAME=wire">> $path
 echo "UUID=632f0667-56c9-481d-8203-7782af54af2a">> $path
 echo "ONBOOT=yes">> $path
 echo "HWADDR=20:89:84:FB:74:1E">> $path
 echo "PEERDNS=yes">> $path
 echo "PEERROUTES=yes">> $path
 echo "IPADDR=$ip">> $path
 echo "NETMASK=$netmask">> $path
 echo "GATEWAY=$gateway">> $path
 - برای این که این اسکریپت با لاگین روت اجرا بشه اون رو در یک فایل قابل اجرا در یکی از فولدر های داخل متغیر PATH کپی کنید یا آدرس پوشه خودتون رو به PATH اضافه کنید. و در نهایت در فایل .bashrc در آدرس /root نام فایل حاوی اسکریپتتون رو به آخر فایل اضافه کنید تا با هر بار ورود با یوزر root اسن اسکریپت اجرا بشه.
 
 - برای خروجش متاسفانه اطلاعات کافی ندارم.
 
 echo -e "$pass\n$pass\n"| passwd root
 
 - آیا از نظر منطق سیستم عامل ممکنه که یک پسوورد با کارکتر n\ وجود داشته باشه؟فکر نمیکنم درست باشه ولی اطلاعات کافی ندارم که قطعی چیزی بگم.
- 
				 - برای این که کد خروجی نداشته باشه از این استفاده کنید :
 #!/bin/bash
 
 path="/home/elyas/my_scripts/aaa"
 
 echo "enter ip :"
 read ip
 echo "enter netmask :"
 read netmask
 echo "enter gateway :"
 read gateway
 
 
 echo "TYPE=Ethernet" > $path
 echo "BOOTPROTO=dhcp">> $path
 echo "DEFROUTE=yes">> $path
 echo "NAME=wire">> $path
 echo "UUID=632f0667-56c9-481d-8203-7782af54af2a">> $path
 echo "ONBOOT=yes">> $path
 echo "HWADDR=20:89:84:FB:74:1E">> $path
 echo "PEERDNS=yes">> $path
 echo "PEERROUTES=yes">> $path
 echo "IPADDR=$ip">> $path
 echo "NETMASK=$netmask">> $path
 echo "GATEWAY=$gateway">> $path
 - برای این که این اسکریپت با لاگین روت اجرا بشه اون رو در یک فایل قابل اجرا در یکی از فولدر های داخل متغیر PATH کپی کنید یا آدرس پوشه خودتون رو به PATH اضافه کنید. و در نهایت در فایل .bashrc در آدرس /root نام فایل حاوی اسکریپتتون رو به آخر فایل اضافه کنید تا با هر بار ورود با یوزر root اسن اسکریپت اجرا بشه.
 
 - برای خروجش متاسفانه اطلاعات کافی ندارم.
 
 echo -e "$pass\n$pass\n"| passwd root
 
 - آیا از نظر منطق سیستم عامل ممکنه که یک پسوورد با کارکتر n\ وجود داشته باشه؟فکر نمیکنم درست باشه ولی اطلاعات کافی ندارم که قطعی چیزی بگم.
 
 
 دستت درد نکنه، چرا اتفاقا توی اوبونتو /n جواب میده اما نمیدونم چرا میزارم داخل شل اسکریپت اجرا نمیشه اما در حالت عادی که بنویسم pass=123 بعد اون دستور رو که وارد میکنم پسورد تغییر پیدا میکنه
 
 دوستان کسی در رابطه با لاگ اوت شدن در صورت ctrl +c اطلاعی نداره؟
 راستی صفحه welcome لاگین پیج کامند لاین کجا هستش؟ پیداش نمیکنم توی اوبونتو
- 
				 - یعنی توی دستور passwd وسطش میشه اینتر زد!؟
 
 
 - ویرایش :
 - تازه متوجه منظور شما شدم  ;)
 - اول کدی که نوشتید این خط رو بزارین و دوباره بررسی کنید که انجام میده یا نه.
 #!/bin/bash
 - برای اون قضیه خروج که گفتید ، این کد در یک لحظه اجرا میشه و تموم میشه ،و دستی ازش خارج شدن خیلی معنی نمیده یا شایدم من متوجه حرفتون نشدم.
 - و در کل کدی که در bashrc میزارین توی ترمینال خواصی اجرا نمیشه که بخوایم با ctrl + c ببندیمش.
- 
				 - یعنی توی دستور passwd وسطش میشه اینتر زد!؟
 
 
 - ویرایش :
 - تازه متوجه منظور شما شدم  ;)
 - اول کدی که نوشتید این خط رو بزارین و دوباره بررسی کنید که انجام میده یا نه.
 #!/bin/bash
 - برای اون قضیه خروج که گفتید ، این کد در یک لحظه اجرا میشه و تموم میشه ،و دستی ازش خارج شدن خیلی معنی نمیده یا شایدم من متوجه حرفتون نشدم.
 - و در کل کدی که در bashrc میزارین توی ترمینال خواصی اجرا نمیشه که بخوایم با ctrl + c ببندیمش.
 
 
 #!/bin/bash
 
 echo "Enter Password For Root:"
 read pass
 
 echo -e "$pass\n$pass\n"| passwd root
 
 
 root@ubuntu:~# sh pass.sh 
 Enter Password For Root:
 sdfDSF34rdfg
 Enter new UNIX password: Retype new UNIX password: Sorry, passwords do not match
 passwd: Authentication token manipulation error
 passwd: password unchanged
 
 
 فایده نذاشت
 
 ببینید آخر اون اسکریپت تغییر ایپی که کاربر همه ی سوال هارو جواب میده نیازه یه ریبوت بشه
 حالا من میخوام وقتی که کاربر لاگین کرد حالا اگه ctrl + c  فشار داد لاگ اوت بشه پ برای وارد کردن مجدد باید لاگین بشه
- 
				به کمک نیاز مندیم  :D
 
 ویرایش
 با اضافه کردن sudo حل شد مشکل پسورد
 فقط مونده مشکل ctrl +c