انجمنهای فارسی اوبونتو
کمک و پشتیبانی => انجمن عمومی => نویسنده: אוּרִיאֵל در 30 تیر 1392، 07:20 بظ
-
سلام . ميخواستم كه يك فايل رو از طريق شل ويرايش كنم به اين صورت كه هرموقع يك فايل بخصوص ديگه تغيير كرد اين فايل هم تغيير كنه . و مقاديرى كه به جاى عبارت x وارد كرده به صورت
test="x"
در جاى خودشون درون فايل ديگر وارد شوند
براى مثال در جاى حرف z به اين صورت :
config="z"
خيلى مهمه كه سريعاً پس از ويرايش اين عمل انجام بشه .
كسى راهى سراغ داره ؟ لزوماً هم نمى خواد از طريق شل باشه اما تاجاى ممكن سبك و ايمن باشه شل يا … مورد نظر .
ممنون پيشاپيش .
بنده خودم يكم در اين مورد فكر كردم . البته زياد موفق نبودم :D
كاربر ميتونه بعد از ويرايش يك متغير رو برابر با 1 بكنه و وقتى مد فايل دوم رو با اين فايل هماهنگ سازى كرد بياد اون متغير رو 0 كنه اما در اين صورت بايد دائماً در حال اجرا باشه كد كه اصلاً جالب نيست فكر نكنم . اما ميشه چك كردن متغير رو گذاشت ابتداى كد كه زياد منابع سيستم رو مصرف نكنه . خوشحال ميشم يكى زحمتشو بكشه چون واقعاً عجله دارم ( معذرت ميخوام البته . )
صورت سؤال تغيير كرد تا حدودى :
http://forum.ubuntu.ir/index.php/topic,70942.msg592177.html#msg592177
-
اگه درست فهمیده باشم شما منظورتون اینه که اگه یه فایل رو ویرایش کردید همزمان فایل دیگه ای هم بصورتی که شما معیین کردید تغییر کنه
بنظرم من راهی نیست مگر اینکه یه برنامه سبک بنوسید که مدام در حال اجراباشه و هر وقت فایل تغییر کرد برنامه متوجه بشه و فایل دوم رو تغییر بده . اما شاید بشه کار دیگه ای هم کرد شما باید مثلایه سیگنال در زمان تغییر فایل سیستم عامل بفرسته و برنامه شما دریافت کننده باشه بقول گفتنی یه جور هوک ایجاد کنی مثل هات کی هایی که در برنامه ها ایجاد میشه و شما هر جای سیستم عامل که باشدی با زدن اون کلید میانبر برنامه اجرا می شه. البته این نظر منه کار بردی بودنش باید روش بحث بشه
با Qt بنویس راحتری
-
اگه درست فهمیده باشم شما منظورتون اینه که اگه یه فایل رو ویرایش کردید همزمان فایل دیگه ای هم بصورتی که شما معیین کردید تغییر کنه
بنظرم من راهی نیست مگر اینکه یه برنامه سبک بنوسید که مدام در حال اجراباشه و هر وقت فایل تغییر کرد برنامه متوجه بشه و فایل دوم رو تغییر بده . اما شاید بشه کار دیگه ای هم کرد شما باید مثلایه سیگنال در زمان تغییر فایل سیستم عامل بفرسته و برنامه شما دریافت کننده باشه بقول گفتنی یه جور هوک ایجاد کنی مثل هات کی هایی که در برنامه ها ایجاد میشه و شما هر جای سیستم عامل که باشدی با زدن اون کلید میانبر برنامه اجرا می شه. البته این نظر منه کار بردی بودنش باید روش بحث بشه
با Qt بنویس راحتری
خوب من در حال حاضر كلاً سيستم ندارم كه بتونم كدا رو امتحان كنم . گرافيكو مينم فضاند !
اما موافقم باهاتون در مورد ايده . فكر ميكنم حالت اول بهتر باشه نمى خوام خيلى پيچيدش كنم .
-
برنامهای که دائما هر لحظه یه فایل رو زیر نظر بگیره و بر اساس تغییرات اون کاری رو انجام بده زیاد جالب نیست. ارسال سیگنال فکر خوبی هست اما بدون تعامل کاربر امکان پذیر نیست. یعنی کاربر بعد از اینکه خط رو توی فایل نوشت، خودش باید دستی سیگنال رو بفرسته. لزوما باید یه چیزی هم مدام در حال اجرا باشه تا بتونه این سیگنال رو دریافت کنه (یه daemon). برنامهها اکثرا به همین شیوه عمل میکنند. مثلا بعد از تغییر دادن یه فایل پیکربندی، باید یه سیگنال HUP به برنامه ارسال بشه تا برنامه متوجه بشه. البته روشهای دیگه هم مسلما هست که البته من هم متخصص نیستم و بیشتر از این چیزی نمیدونم و دوستان بهتر میتونن کمک کنن. اما در سادهترین حالت، با شرط اینکه کاربر خط رو همیشه در آخر فایل اضافه میکنه، میتونی یه همچین کدی بنویسی: (این یه شبه کد به یه زبان فرضی هست و اجرا نمیشه)
pline=`tail -1 /path/to/file`
while(true)
{
sleep(1);
line= `tail -1 /path/to/file`;
if($line != pline)
echo "config=$line" >> /path/to/another/file;
pline=line;
}
یا میتونی شرط رو بر اساس تاریخ آخرین تغییر فایل هم قرار بدی که اینجوری به مراتب بهتره و اگه فایل تغییر نکرده بود دیگه خونده هم نمیشه. اگه یه شل اسکرپته، stat رو ببین، اگر هم C هست، یه system call به همین نام وجود داره که اطلاعات inode فایل رو توی یک ساختار برمیگردونه
-
من نفهمیدم منظورت چی هست. میخوای دقیقاً همون فایل رو داشته باشی؟ یعنی یه symbolic link داشته باشی ازش؟ یعنی یه فایلی داشتی باشی که دقیقاً کپی فایل اول باشه و هر موقع فایل اول ویرایش شد این دوم هم خودش رو مثل فایل اول کنه؟
http://fa.wikipedia.org/wiki/%D9%BE%DB%8C%D9%88%D9%86%D8%AF_%D9%86%D9%85%D8%A7%D8%AF%DB%8C%D9%86
برای چه کاری میخوای؟
-
بحث تغییر مقدار متغیر و اینا که پیچیده نیست، sed یا vim یا حتی grep هم میتونه این کار رو انجام بده.
مشکل اینه که چطور این اسکریپت اجرا بشه.
من پیشنهاد میکنم کد رو روی git ببری. اینطور بحث همزمانی و اینا حل میشه و میتونی توی گیت یه هوک تعریف کنی که بعد از مثلن کامیت کردن، اون هوک هم اجرا بشه و متغیرها رو تغییر بده.
من توی یک پروژه با اینطور کاری، استرینگ تاریخ انتشار نرمافزار (یه متغیر جاوا) رو هربار که کامیت میکردم، آپدیت هم میکردم و خوب جواب میگرفتم.
آیا امکانش هست از مثلن گیت استفاده کنی؟
-
سوال رو اگر ساده کنی، راحت تر درک می شه. اگر برداشت من درست باشه می شه این سوال رو اینطوری مطرح کرد: آیا سیستمی هست که بتونه به شکل زنده تغییر کردن یک فایل در فایل سیستم رو تشخیص بده؟
اگر تو اینو داشته باشی می تونی یک برنامه خیلی ساده بنویسی که فایلی که تغییر کرده رو بخونه و بر اساسش یک چیزهایی رو تغییر بده. جوابت هم FAM است. فم اصولا درست شده که بتونه توی سیستم های مشابه یونیکس تغییرات فایل سیستم رو زیر نظر بگیره. یکی از ساب سیستم های مشهورش که لینوکس ها دارن GAMIN است که دقیقا کارش همینه که اگر فایلی عوض شد به تو خبر بده.
-
سوال رو اگر ساده کنی، راحت تر درک می شه. اگر برداشت من درست باشه می شه این سوال رو اینطوری مطرح کرد: آیا سیستمی هست که بتونه به شکل زنده تغییر کردن یک فایل در فایل سیستم رو تشخیص بده؟
اگر تو اینو داشته باشی می تونی یک برنامه خیلی ساده بنویسی که فایلی که تغییر کرده رو بخونه و بر اساسش یک چیزهایی رو تغییر بده. جوابت هم FAM است. فم اصولا درست شده که بتونه توی سیستم های مشابه یونیکس تغییرات فایل سیستم رو زیر نظر بگیره. یکی از ساب سیستم های مشهورش که لینوکس ها دارن GAMIN است که دقیقا کارش همینه که اگر فایلی عوض شد به تو خبر بده.
من یه چیز جدید یاد گرفتم. مرسی.
-
ممنون از همه ى دوستان و راهنمايى ها خيلى مفيدشون كه خيلى چيزا رو باعث شد ياد بگيرم . ممنون واقعاً .
بنده احساس ميكنم در كل دارم راه رو اشتباه ميرم و كار خودم رو خيلى خيلى سخت تر ميكنم و به هيچ كدوم از اين كار ها نيازى نيست . بخاطره همين مشكل رو كامل توضيح ميدم .
يكى از دوستان يك سرور دارند براى ارائه ى vps و … كه گويا امنيت براى ايشون خيلى خيلى مهمه و خوب اين سرور لينوكس نيست و بنده پيشنهاد دادم كه از OpenBSD استفاده كنند . اين كه پيشنهاد درستى بوده يا نه بماند چون به شخصه معتقدم توى سيستم عامل هايى مثل لينوكس و بى اس دى ها امنيت بيشتر به خود شخص بستگى داره و ابزارى كه استفاده ميكنه و تنظيمات فايروال و … . اين سرور هم گويا در كل سيستم عاملش لينوكسه البته و فقط به صورت مجازى OpenBSD نصب كردند براى قرار دادن ابزار خودشون كه ميخواند امنيت براش كاملاً تأمين بشه و گويا اين ابزار سيستم مديريت مشتركان يا چيزى مشابه هستش كه بنده در اطلاع نيستم به صورت كامل . در هر صورت سيستم با موڤقيت ديروز راه اندازى شد و خوب اين دوست عزيز ديروز مشكل جديدشون رو به اين صورت مطرح كردند كه بايد يك كاربر به نام admin داشته باشند كه تنها كارى كه ميتونند بكنند تغيير ip هست و بس . كه بنده به دليل خستگى يا هر چيز ديگه اى راه اشتباهى انتخاب كردم و فرايند رو بسيار طولانى تر كردم . ( رو راست بگم فكرم كار نداد … ) ابتدا به ساخت كاربر جديد فكر كردم و متوجه شدم محدود كردن اين كاربر تا اين حد براى حفظ امنيت زياد راحت نيست حداقل براى من و به همين دليل به راهه ديگه اى فكر كردم كه باز هم راه اشتباهى رو انتخاب كردم و اين بار بنظر اشتباه بزرگترى بود . بنده به اين فكر افتادم كه هاستى با فضايى خيلى اندك رو روى سرور به ايشون اختصاص بدند و ايشون ip رو درون يك فايل وارد كنند و با كدى كه اينجا درخواستشو از دوستان عزيز كرده بودم بروز شدن فايل تشخيص داده بشه و ip در فايل /etc/hostname.em0/ قرارداده بشه . در حال حاضر به اين فكر ميكنم كه يك نرم افزار از اين شخص ip رو بپرسه و درون فايل hostname.em0 وارد كنه كه گويا دوستان ميگند با sed و … ميشه اگه اشتباه نكنم اما دو مشكل هست اول اين كه چگونه اين كه درون سيستم فرد اجرا بشه ( لزومى به اين شرط نيست البته ) و درون فايل /etc/hostname.em0/ روى هاست جايگزين كنه دوم خود تشخيص دادن و جايگزين كردن ip هستش .
-
ممنون از همه ى دوستان و راهنمايى ها خيلى مفيدشون كه خيلى چيزا رو باعث شد ياد بگيرم . ممنون واقعاً .
بنده احساس ميكنم در كل دارم راه رو اشتباه ميرم و كار خودم رو خيلى خيلى سخت تر ميكنم و به هيچ كدوم از اين كار ها نيازى نيست . بخاطره همين مشكل رو كامل توضيح ميدم .
يكى از دوستان يك سرور دارند براى ارائه ى vps و … كه گويا امنيت براى ايشون خيلى خيلى مهمه و خوب اين سرور لينوكس نيست و بنده پيشنهاد دادم كه از OpenBSD استفاده كنند . اين كه پيشنهاد درستى بوده يا نه بماند چون به شخصه معتقدم توى سيستم عامل هايى مثل لينوكس و بى اس دى ها امنيت بيشتر به خود شخص بستگى داره و ابزارى كه استفاده ميكنه و تنظيمات فايروال و … . اين سرور هم گويا در كل سيستم عاملش لينوكسه البته و فقط به صورت مجازى OpenBSD نصب كردند براى قرار دادن ابزار خودشون كه ميخواند امنيت براش كاملاً تأمين بشه و گويا اين ابزار سيستم مديريت مشتركان يا چيزى مشابه هستش كه بنده در اطلاع نيستم به صورت كامل . در هر صورت سيستم با موڤقيت ديروز راه اندازى شد و خوب اين دوست عزيز ديروز مشكل جديدشون رو به اين صورت مطرح كردند كه بايد يك كاربر به نام admin داشته باشند كه تنها كارى كه ميتونند بكنند تغيير ip هست و بس . كه بنده به دليل خستگى يا هر چيز ديگه اى راه اشتباهى انتخاب كردم و فرايند رو بسيار طولانى تر كردم . ( رو راست بگم فكرم كار نداد … ) ابتدا به ساخت كاربر جديد فكر كردم و متوجه شدم محدود كردن اين كاربر تا اين حد براى حفظ امنيت زياد راحت نيست حداقل براى من و به همين دليل به راهه ديگه اى فكر كردم كه باز هم راه اشتباهى رو انتخاب كردم و اين بار بنظر اشتباه بزرگترى بود . بنده به اين فكر افتادم كه هاستى با فضايى خيلى اندك رو روى سرور به ايشون اختصاص بدند و ايشون ip رو درون يك فايل وارد كنند و با كدى كه اينجا درخواستشو از دوستان عزيز كرده بودم بروز شدن فايل تشخيص داده بشه و ip در فايل /etc/hostname.em0/ قرارداده بشه . در حال حاضر به اين فكر ميكنم كه يك نرم افزار از اين شخص ip رو بپرسه و درون فايل hostname.em0 وارد كنه كه گويا دوستان ميگند با sed و … ميشه اگه اشتباه نكنم اما دو مشكل هست اول اين كه چگونه اين كه درون سيستم فرد اجرا بشه ( لزومى به اين شرط نيست البته ) و درون فايل /etc/hostname.em0/ روى هاست جايگزين كنه دوم خود تشخيص دادن و جايگزين كردن ip هستش .
دروغ چرا، من از بیخ مشکل رو متوجه نشدم. ولی برای سوال دوم، فرض کن یه فایل داری که خطی که توش IP آدرس نوشته شده به این صورته:
my_ip_address="x.x.x.x"
برای این که این یک خط رو پیدا کنی و ویرایش کنی، این کار رو میتونی انجام بدی:
sed -i -r 's/my_ip_address="([0-9]{1,3}\.){3}[0-9]{1,3}"/my_ip_address="192.168.1.2"/g' /path/to/file
که این کد، تمام الگوهای IP آدرس نسخهٔ چهار که پیش از اون نوشته my_ip_address=" و بعدش هم علام " هست رو با مقدار جدید جایگزین میکنه. توی فایل (In Place) این کار رو انجام میده.
اما سوال اولت، اگر درست متوجه شده باشم اینه: چطور این کار رو یک یوزر محدود انجام بده در حالی که این فایل مشخص برای تغییرش نیاز به یک کاربر سطح بالاتر هست؟
این کاری که من میگم خیلی خطرناکه و امیدوارم بچهها نظر بهتری داشته باشن. میشه خط تغییر آیپی آدرس رو توی یک اسکریپت نوشت و به اون اسکریپت با chmod، دسترسی s رو بدی. اینطور وقتی اسکریپت رو یک یوز بدون دسترسی اجرا کنه، برای کار خاص دسترسی روت به اسکریپت داده میشه.
اما باید حوست جمع باشه که بجر روت کسی نتونه فایل رو تغییر بده، به اینجکت شدن کد به اسکریپت هم باید دقت کنی. با تمام این توضیحات، هر یوزری میتونه این اسکریپت رو اجرا کنه که اون رو هم میشه با گروهها حل کرد.
-
ممنون از همه ى دوستان و راهنمايى ها خيلى مفيدشون كه خيلى چيزا رو باعث شد ياد بگيرم . ممنون واقعاً .
بنده احساس ميكنم در كل دارم راه رو اشتباه ميرم و كار خودم رو خيلى خيلى سخت تر ميكنم و به هيچ كدوم از اين كار ها نيازى نيست . بخاطره همين مشكل رو كامل توضيح ميدم .
يكى از دوستان يك سرور دارند براى ارائه ى vps و … كه گويا امنيت براى ايشون خيلى خيلى مهمه و خوب اين سرور لينوكس نيست و بنده پيشنهاد دادم كه از OpenBSD استفاده كنند . اين كه پيشنهاد درستى بوده يا نه بماند چون به شخصه معتقدم توى سيستم عامل هايى مثل لينوكس و بى اس دى ها امنيت بيشتر به خود شخص بستگى داره و ابزارى كه استفاده ميكنه و تنظيمات فايروال و … . اين سرور هم گويا در كل سيستم عاملش لينوكسه البته و فقط به صورت مجازى OpenBSD نصب كردند براى قرار دادن ابزار خودشون كه ميخواند امنيت براش كاملاً تأمين بشه و گويا اين ابزار سيستم مديريت مشتركان يا چيزى مشابه هستش كه بنده در اطلاع نيستم به صورت كامل . در هر صورت سيستم با موڤقيت ديروز راه اندازى شد و خوب اين دوست عزيز ديروز مشكل جديدشون رو به اين صورت مطرح كردند كه بايد يك كاربر به نام admin داشته باشند كه تنها كارى كه ميتونند بكنند تغيير ip هست و بس . كه بنده به دليل خستگى يا هر چيز ديگه اى راه اشتباهى انتخاب كردم و فرايند رو بسيار طولانى تر كردم . ( رو راست بگم فكرم كار نداد … ) ابتدا به ساخت كاربر جديد فكر كردم و متوجه شدم محدود كردن اين كاربر تا اين حد براى حفظ امنيت زياد راحت نيست حداقل براى من و به همين دليل به راهه ديگه اى فكر كردم كه باز هم راه اشتباهى رو انتخاب كردم و اين بار بنظر اشتباه بزرگترى بود . بنده به اين فكر افتادم كه هاستى با فضايى خيلى اندك رو روى سرور به ايشون اختصاص بدند و ايشون ip رو درون يك فايل وارد كنند و با كدى كه اينجا درخواستشو از دوستان عزيز كرده بودم بروز شدن فايل تشخيص داده بشه و ip در فايل /etc/hostname.em0/ قرارداده بشه . در حال حاضر به اين فكر ميكنم كه يك نرم افزار از اين شخص ip رو بپرسه و درون فايل hostname.em0 وارد كنه كه گويا دوستان ميگند با sed و … ميشه اگه اشتباه نكنم اما دو مشكل هست اول اين كه چگونه اين كه درون سيستم فرد اجرا بشه ( لزومى به اين شرط نيست البته ) و درون فايل /etc/hostname.em0/ روى هاست جايگزين كنه دوم خود تشخيص دادن و جايگزين كردن ip هستش .
دروغ چرا، من از بیخ مشکل رو متوجه نشدم. ولی برای سوال دوم، فرض کن یه فایل داری که خطی که توش IP آدرس نوشته شده به این صورته:
my_ip_address="x.x.x.x"
برای این که این یک خط رو پیدا کنی و ویرایش کنی، این کار رو میتونی انجام بدی:
sed -i -r 's/my_ip_address="([0-9]{1,3}\.){3}[0-9]{1,3}"/my_ip_address="192.168.1.2"/g' /path/to/file
که این کد، تمام الگوهای IP آدرس نسخهٔ چهار که پیش از اون نوشته my_ip_address=" و بعدش هم علام " هست رو با مقدار جدید جایگزین میکنه. توی فایل (In Place) این کار رو انجام میده.
اما سوال اولت، اگر درست متوجه شده باشم اینه: چطور این کار رو یک یوزر محدود انجام بده در حالی که این فایل مشخص برای تغییرش نیاز به یک کاربر سطح بالاتر هست؟
این کاری که من میگم خیلی خطرناکه و امیدوارم بچهها نظر بهتری داشته باشن. میشه خط تغییر آیپی آدرس رو توی یک اسکریپت نوشت و به اون اسکریپت با chmod، دسترسی s رو بدی. اینطور وقتی اسکریپت رو یک یوز بدون دسترسی اجرا کنه، برای کار خاص دسترسی روت به اسکریپت داده میشه.
اما باید حوست جمع باشه که بجر روت کسی نتونه فایل رو تغییر بده، به اینجکت شدن کد به اسکریپت هم باید دقت کنی. با تمام این توضیحات، هر یوزری میتونه این اسکریپت رو اجرا کنه که اون رو هم میشه با گروهها حل کرد.
خيلى ممنون از راهنماييتون .
با اين توضيحات فكر نكنم بشه از رو سيستم خودش اجراش كنه بايد يه vps داشته باشه فكر كنم البته . چطورى ميتونه از توى vps به فايل هاى خوده سيستم دسترسى داشته باشه اين اسكريپت ؟
من نفهمیدم منظورت چی هست. میخوای دقیقاً همون فایل رو داشته باشی؟ یعنی یه symbolic link داشته باشی ازش؟ یعنی یه فایلی داشتی باشی که دقیقاً کپی فایل اول باشه و هر موقع فایل اول ویرایش شد این دوم هم خودش رو مثل فایل اول کنه؟
http://fa.wikipedia.org/wiki/%D9%BE%DB%8C%D9%88%D9%86%D8%AF_%D9%86%D9%85%D8%A7%D8%AF%DB%8C%D9%86
برای چه کاری میخوای؟
خوب آيا ميتونم اين symbolic link رو درون فضاى هاسته ايشون قرار بدم كه هر موقع ايشون ويرايشش كردند فايل اصلى هم ويرايش بشه ؟
ببخشيد sed مثله اين كه چيزى به عنوان -i نداره
اون i یعنی in place انجام بده. r برای عبارت منظم توسعه یافتست. man sed
برای اون i احتمالن توزیعت یا سیستمعاملت از یه نسخهٔ دیگه استفاده میکنه. راه حل موقت اینه که اینطور عمل کنی:
sed -r 's/my_ip_address="([0-9]{1,3}\.){3}[0-9]{1,3}"/my_ip_address="192.168.1.2"/g' /path/to/file > tempFile && mv tempFile /path/to/file
این یعنی سعی کن این تغییر رو با sed انجام بده و نتیجه رو توی یه فایل دیگه بریز، اگر درست انجام شد، اون فایل موقت رو با اصلی جایگزین کن.
البته بهتره این بحث رو توی همون تاپیک ادامه بدیم که دیگران هم کمک کنن و احیانن شاید همین مشکل رو داشته باشن.
يه سؤال ديگه :
چطور ميشه كارى كرد توى شل اسكريپت كه مدام در حال اجرا باش و آى پى جديد رو بپرسه ؟
-
يه سؤال ديگه :
چطور ميشه كارى كرد توى شل اسكريپت كه مدام در حال اجرا باش و آى پى جديد رو بپرسه ؟
اینطور فکر کنم بشه:
while read anIpAddress
do
sed -r 's/my_ip_address="([0-9]{1,3}\.){3}[0-9]{1,3}"/my_ip_address="$anIpAddress"/g' /path/to/file > tempFile && mv tempFile /path/to/file
fi
-
اين محتويات فايل /etc/hostname.em0/ من هستش ( البته نه دقيقاً ) :
inet 192.168.1.1 255.255.255.224
من ميخوام 192.168.1.1 جايگزين بشه
و موقعى كه شل اجرا ميشه بپرسه :
ip:
بعد كاربر ip رو وارد كنه اينتر رو كه زد ip جايگزين بشه و دوباره بپرسه كه اگه كاربر خواست دوباره عوضش كنه اين تا آخر اجرا بشه .
چطور ميشه كارى كرد خروجى شل تو يه فايل ذخيره بشه ؟
-
اين محتويات فايل /etc/hostname.em0/ من هستش ( البته نه دقيقاً ) :
inet 192.168.1.1 255.255.255.224
من ميخوام 192.168.1.1 جايگزين بشه
و موقعى كه شل اجرا ميشه بپرسه :
ip:
بعد كاربر ip رو وارد كنه اينتر رو كه زد ip جايگزين بشه و دوباره بپرسه كه اگه كاربر خواست دوباره عوضش كنه اين تا آخر اجرا بشه .
این آدرسی که میدی، آدرس یه دایرکتوریه. یه بار چک کن. با این همه ببین این جواب میده بهت:
#!/bin/bash
TMP_FILE=`tempfile`
CONF_FILE="/etc/hostname.em0"
echo "IP:"
while read anIpAddress
do
sed -r 's/ inet ([0-9]{1,3}\.){3}[0-9]{1,3} /inet $anIpAddress /g' "$CONF_FILE" > "TMP_FILE" && mv "$TMP_FILE" "$CONF_FILE"
echo "IP:"
done
-
چطور ميشه كارى كرد خروجى شل تو يه فايل ذخيره بشه ؟
پایپلاینها، در این حالت خاص:
command > /path/to/file
خروجیای که به استاندارد آوتپوت میرفته رو به فایل انتقال میده. البته راههای دیگهای هم هست، مثلن پایپ کردن به tee یا کلی راه دیگه
-
نه دايركتورى نيستش
خروجى رو پيوست كردم
-
نه دايركتورى نيستش
خروجى رو پيوست كردم
خب این توزیع یا سیستمعاملت دستور tempfile رو هم نداره.
اون خط که گفته no such file or directory هم میگه این فایل وجود نداره. ببین توی اون خط که من conf_file رو تعریف کردم، آدرس درسته؟
در نهایت این اسکریپت رو اینطور چک کن:
#!/bin/bash
TMP_FILE=/tmp/ip_tmp
CONF_FILE="/etc/hostname.em0"
echo "IP: "
while read anIpAddress
do
sed -r 's/ inet ([0-9]{1,3}\.){3}[0-9]{1,3} /inet $anIpAddress /g' "$CONF_FILE" > "$TMP_FILE"
mv "$TMP_FILE" "$CONF_FILE"
echo "IP: "
done
-
اگه سوال رو درست فهمیده باشم به نظرم بهتره راهی رو برید که در این لینک توضیح داده : http://www.wallix.org/2011/10/18/restricting-remote-commands-over-ssh
و در مسیر rbin که در مطلب به اون اشاره شده فقط یک اسکریپت bash، پایتون یا موارد دیگه باشه که ip رو بگیره و در فایل مقصد قرار بده.
برای موارد تکمیلی restricted shell رو سرچ کنین. این لینک هم شاید کمک کنه: http://stackoverflow.com/questions/402615/how-to-restrict-ssh-users-to-a-predefined-set-of-commands-after-login
-
اگه سوال رو درست فهمیده باشم به نظرم بهتره راهی رو برید که در این لینک توضیح داده : http://www.wallix.org/2011/10/18/restricting-remote-commands-over-ssh
و در مسیر rbin که در مطلب به اون اشاره شده فقط یک اسکریپت bash، پایتون یا موارد دیگه باشه که ip رو بگیره و در فایل مقصد قرار بده.
برای موارد تکمیلی restricted shell رو سرچ کنین. این لینک هم شاید کمک کنه: http://stackoverflow.com/questions/402615/how-to-restrict-ssh-users-to-a-predefined-set-of-commands-after-login
ميشه توضيحش بديد ؟
اسكريپت اجرا ميشه ip رو ميپرسه اما در نهايت جايگزين نميشه
-
اگه سوال رو درست فهمیده باشم به نظرم بهتره راهی رو برید که در این لینک توضیح داده : http://www.wallix.org/2011/10/18/restricting-remote-commands-over-ssh
و در مسیر rbin که در مطلب به اون اشاره شده فقط یک اسکریپت bash، پایتون یا موارد دیگه باشه که ip رو بگیره و در فایل مقصد قرار بده.
برای موارد تکمیلی restricted shell رو سرچ کنین. این لینک هم شاید کمک کنه: http://stackoverflow.com/questions/402615/how-to-restrict-ssh-users-to-a-predefined-set-of-commands-after-login
ميشه توضيحش بديد ؟
اسكريپت اجرا ميشه ip رو ميپرسه اما در نهايت جايگزين نميشه
یه اسپیس اضافه توی sed بود. این رو اجرا کن ببین چیزی که چاپ میشه مد نظرته:
sed -r 's/inet ([0-9]{1,3}\.){3}[0-9]{1,3} /inet 192.168.169.170 /g' /etc/hostname.em0
اگر توی نتیجه تغییر کرده بود، مشکل از همون اسپیس بوده
-
اگه سوال رو درست فهمیده باشم به نظرم بهتره راهی رو برید که در این لینک توضیح داده : http://www.wallix.org/2011/10/18/restricting-remote-commands-over-ssh
و در مسیر rbin که در مطلب به اون اشاره شده فقط یک اسکریپت bash، پایتون یا موارد دیگه باشه که ip رو بگیره و در فایل مقصد قرار بده.
برای موارد تکمیلی restricted shell رو سرچ کنین. این لینک هم شاید کمک کنه: http://stackoverflow.com/questions/402615/how-to-restrict-ssh-users-to-a-predefined-set-of-commands-after-login
ميشه توضيحش بديد ؟
اسكريپت اجرا ميشه ip رو ميپرسه اما در نهايت جايگزين نميشه
یه اسپیس اضافه توی sed بود. این رو اجرا کن ببین چیزی که چاپ میشه مد نظرته:
sed -r 's/inet ([0-9]{1,3}\.){3}[0-9]{1,3} /inet 192.168.169.170 /g' /etc/hostname.em0
اگر توی نتیجه تغییر کرده بود، مشکل از همون اسپیس بوده
بله خروجى درست بود اما من نفهميدم دقياً كجا اسپيس اضافه بود
نتيجه رو پيوند كردم
-
اگه سوال رو درست فهمیده باشم به نظرم بهتره راهی رو برید که در این لینک توضیح داده : http://www.wallix.org/2011/10/18/restricting-remote-commands-over-ssh
و در مسیر rbin که در مطلب به اون اشاره شده فقط یک اسکریپت bash، پایتون یا موارد دیگه باشه که ip رو بگیره و در فایل مقصد قرار بده.
برای موارد تکمیلی restricted shell رو سرچ کنین. این لینک هم شاید کمک کنه: http://stackoverflow.com/questions/402615/how-to-restrict-ssh-users-to-a-predefined-set-of-commands-after-login
ميشه توضيحش بديد ؟
اسكريپت اجرا ميشه ip رو ميپرسه اما در نهايت جايگزين نميشه
یه اسپیس اضافه توی sed بود. این رو اجرا کن ببین چیزی که چاپ میشه مد نظرته:
sed -r 's/inet ([0-9]{1,3}\.){3}[0-9]{1,3} /inet 192.168.169.170 /g' /etc/hostname.em0
اگر توی نتیجه تغییر کرده بود، مشکل از همون اسپیس بوده
بله خروجى درست بود اما من نفهميدم دقياً كجا اسپيس اضافه بود
بیین اسلش و inet، بعد از s:
...'s/ inet...
...'s/inet...
نتيجه رو پيوند كردم
ببخش، من بدون تست مینویسم، این میشه که سوتی زیاد میدم. این خط رو اصلاح کن:
sed -r "s/ inet ([0-9]{1,3}\.){3}[0-9]{1,3} /inet $anIpAddress /g" "$CONF_FILE" > "$TMP_FILE"
-
فكر كنم بخاطر اينه كه بين " " هستش $anIpAddress
-
ببخشید من این پست و اشتباه گذاشتم ولی نمیدونم چطور باید پاکش کنم.
یه مطلبی بود که جاش اینجا نبود .
معذرت میخوام .
:'( :oops: