انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید


ارائه ۲۴٫۱۰ اوبونتو منتشر شد 🎉

نویسنده موضوع: تغيير ip سرور بدون داشتن دسترسى كامل به سرور .  (دفعات بازدید: 3430 بار)

0 کاربر و 2 مهمان درحال مشاهده موضوع.

آفلاین אוּרִיאֵל

  • High Sr. Member
  • *
  • ارسال: 641
  • جنسیت : پسر
  • bin/Matin/ !#
    • bin/Matin/ !#
سلام . ميخواستم كه يك فايل رو از طريق شل ويرايش كنم به اين صورت كه هرموقع يك فايل بخصوص ديگه تغيير كرد اين فايل هم تغيير كنه . و مقاديرى كه به جاى عبارت x وارد كرده به صورت
test="x"در جاى خودشون درون فايل ديگر وارد شوند
براى مثال در جاى حرف z به اين صورت :
config="z" خيلى مهمه كه سريعاً پس از ويرايش اين عمل انجام بشه .
كسى راهى سراغ داره ؟ لزوماً هم نمى خواد از طريق شل باشه اما تاجاى ممكن سبك و ايمن باشه شل يا … مورد نظر .
ممنون پيشاپيش .



بنده خودم يكم در اين مورد فكر كردم . البته زياد موفق نبودم  :D
كاربر ميتونه بعد از ويرايش يك متغير رو برابر با 1 بكنه و وقتى مد فايل دوم رو با اين فايل هماهنگ سازى كرد بياد اون متغير رو 0 كنه اما در اين صورت بايد دائماً در حال اجرا باشه كد كه اصلاً جالب نيست فكر نكنم . اما ميشه چك كردن متغير رو گذاشت ابتداى كد كه زياد منابع سيستم رو مصرف نكنه . خوشحال ميشم يكى زحمتشو بكشه چون واقعاً عجله دارم ( معذرت ميخوام البته . )



صورت سؤال تغيير كرد تا حدودى :
http://forum.ubuntu.ir/index.php/topic,70942.msg592177.html#msg592177
« آخرین ویرایش: 31 تیر 1392، 12:37 ب‌ظ توسط אוּרִיאֵל »

آفلاین meno

  • Full Member
  • *
  • ارسال: 109
  • جنسیت : پسر
    • MeNoBLOG
اگه درست فهمیده باشم شما منظورتون اینه که اگه یه فایل رو ویرایش کردید همزمان فایل دیگه ای هم بصورتی که شما معیین کردید تغییر کنه
بنظرم من راهی نیست مگر اینکه یه برنامه سبک بنوسید که مدام در حال اجراباشه و هر وقت فایل تغییر کرد برنامه متوجه بشه و فایل دوم رو تغییر بده . اما شاید بشه کار دیگه ای هم کرد شما باید مثلایه سیگنال در زمان تغییر فایل سیستم عامل بفرسته و برنامه شما دریافت کننده باشه بقول گفتنی یه جور هوک ایجاد کنی مثل هات کی هایی که در برنامه ها ایجاد میشه و شما هر جای سیستم عامل که باشدی با زدن اون کلید میانبر برنامه اجرا می شه. البته این نظر منه کار بردی بودنش باید روش بحث بشه

با Qt ‌بنویس راحتری
« آخرین ویرایش: 31 تیر 1392، 12:42 ق‌ظ توسط meno »

آفلاین אוּרִיאֵל

  • High Sr. Member
  • *
  • ارسال: 641
  • جنسیت : پسر
  • bin/Matin/ !#
    • bin/Matin/ !#
اگه درست فهمیده باشم شما منظورتون اینه که اگه یه فایل رو ویرایش کردید همزمان فایل دیگه ای هم بصورتی که شما معیین کردید تغییر کنه
بنظرم من راهی نیست مگر اینکه یه برنامه سبک بنوسید که مدام در حال اجراباشه و هر وقت فایل تغییر کرد برنامه متوجه بشه و فایل دوم رو تغییر بده . اما شاید بشه کار دیگه ای هم کرد شما باید مثلایه سیگنال در زمان تغییر فایل سیستم عامل بفرسته و برنامه شما دریافت کننده باشه بقول گفتنی یه جور هوک ایجاد کنی مثل هات کی هایی که در برنامه ها ایجاد میشه و شما هر جای سیستم عامل که باشدی با زدن اون کلید میانبر برنامه اجرا می شه. البته این نظر منه کار بردی بودنش باید روش بحث بشه

با Qt ‌بنویس راحتری

خوب من در حال حاضر كلاً سيستم ندارم كه بتونم كدا رو امتحان كنم . گرافيكو مينم فضاند !
اما موافقم باهاتون در مورد ايده . فكر ميكنم حالت اول بهتر باشه نمى خوام خيلى پيچيدش كنم .
« آخرین ویرایش: 31 تیر 1392، 12:47 ق‌ظ توسط אוּרִיאֵל »

آفلاین fond

  • Full Member
  • *
  • ارسال: 144
برنامه‌ای که دائما هر لحظه یه فایل رو زیر نظر بگیره و بر اساس تغییرات اون کاری رو انجام بده زیاد جالب نیست. ارسال سیگنال فکر خوبی هست اما بدون تعامل کاربر امکان پذیر نیست. یعنی کاربر بعد از اینکه خط رو توی فایل نوشت، خودش باید دستی سیگنال رو بفرسته. لزوما باید یه چیزی هم مدام در حال اجرا باشه تا بتونه این سیگنال رو دریافت کنه (یه 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 فایل رو توی یک ساختار برمیگردونه
« آخرین ویرایش: 31 تیر 1392، 01:43 ق‌ظ توسط fond »

آفلاین سلمان م.

  • ناظر انجمن
  • *
  • ارسال: 4106
  • جنسیت : پسر
  • GNU Operating System - سیستم عامل گنو
من نفهمیدم منظورت چی هست. می‌خوای دقیقاً همون فایل رو داشته باشی؟ یعنی یه 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

برای چه کاری می‌خوای؟

آفلاین سار

  • Newbie
  • *
  • ارسال: 24
بحث تغییر مقدار متغیر و اینا که پیچیده نیست، sed یا vim یا حتی grep هم می‌تونه این کار رو انجام بده.
مشکل اینه که چطور این اسکریپت اجرا بشه.
من پیشنهاد می‌کنم کد رو روی git ببری. اینطور بحث همزمانی و اینا حل می‌شه و می‌تونی توی گیت یه هوک تعریف کنی که بعد از مثلن کامیت کردن، اون هوک هم اجرا بشه و متغیر‌ها رو تغییر بده.

من توی یک پروژه با اینطور کاری، استرینگ تاریخ انتشار نرم‌افزار (یه متغیر جاوا) رو هربار که کامیت می‌کردم، آپدیت هم می‌کردم و خوب جواب می‌گرفتم.

آیا امکانش هست از مثلن گیت استفاده کنی؟

آفلاین جادی

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 1618
    • در دفاع از آزادی بیان
سوال رو اگر ساده کنی، راحت تر درک می شه. اگر برداشت من درست باشه می شه این سوال رو اینطوری مطرح کرد: آیا سیستمی هست که بتونه به شکل زنده تغییر کردن یک فایل در فایل سیستم رو تشخیص بده؟

اگر تو اینو داشته باشی می تونی یک برنامه خیلی ساده بنویسی که فایلی که تغییر کرده رو بخونه و بر اساسش یک چیزهایی رو تغییر بده. جوابت هم FAM است. فم اصولا درست شده که بتونه توی سیستم های مشابه یونیکس تغییرات فایل سیستم رو زیر نظر بگیره. یکی از ساب سیستم های مشهورش که لینوکس ها دارن GAMIN است که دقیقا کارش همینه که اگر فایلی عوض شد به تو خبر بده.
آزادی کیبورد حق هر انسان است - جادی

آفلاین سار

  • Newbie
  • *
  • ارسال: 24
سوال رو اگر ساده کنی، راحت تر درک می شه. اگر برداشت من درست باشه می شه این سوال رو اینطوری مطرح کرد: آیا سیستمی هست که بتونه به شکل زنده تغییر کردن یک فایل در فایل سیستم رو تشخیص بده؟

اگر تو اینو داشته باشی می تونی یک برنامه خیلی ساده بنویسی که فایلی که تغییر کرده رو بخونه و بر اساسش یک چیزهایی رو تغییر بده. جوابت هم FAM است. فم اصولا درست شده که بتونه توی سیستم های مشابه یونیکس تغییرات فایل سیستم رو زیر نظر بگیره. یکی از ساب سیستم های مشهورش که لینوکس ها دارن GAMIN است که دقیقا کارش همینه که اگر فایلی عوض شد به تو خبر بده.

من یه چیز جدید یاد گرفتم. مرسی.

آفلاین אוּרִיאֵל

  • High Sr. Member
  • *
  • ارسال: 641
  • جنسیت : پسر
  • bin/Matin/ !#
    • bin/Matin/ !#
ممنون از همه ى دوستان و راهنمايى ها خيلى مفيدشون كه خيلى چيزا رو باعث شد ياد بگيرم . ممنون واقعاً .

بنده احساس ميكنم در كل دارم راه رو اشتباه ميرم و كار خودم رو خيلى خيلى سخت تر ميكنم و به هيچ كدوم از اين كار ها نيازى نيست . بخاطره همين مشكل رو كامل توضيح ميدم .

يكى از دوستان يك سرور دارند براى ارائه ى vps و … كه گويا امنيت براى ايشون خيلى خيلى مهمه و خوب اين سرور لينوكس نيست و بنده پيشنهاد دادم كه از OpenBSD استفاده كنند . اين كه پيشنهاد درستى بوده يا نه بماند چون به شخصه معتقدم توى سيستم عامل هايى مثل لينوكس و بى اس دى ها امنيت بيشتر به خود شخص بستگى داره و ابزارى كه استفاده ميكنه و تنظيمات فايروال و … . اين سرور هم گويا در كل سيستم عاملش لينوكسه البته و فقط به صورت مجازى OpenBSD نصب كردند براى قرار دادن ابزار خودشون كه ميخواند امنيت براش كاملاً تأمين بشه و گويا اين ابزار سيستم مديريت مشتركان يا چيزى مشابه هستش  كه بنده در اطلاع نيستم به صورت كامل . در هر صورت سيستم با موڤقيت ديروز راه اندازى شد و خوب اين دوست عزيز ديروز مشكل جديدشون رو به اين صورت مطرح كردند كه بايد يك كاربر به نام admin داشته باشند كه تنها كارى كه ميتونند بكنند تغيير ip هست و بس . كه بنده به دليل خستگى يا هر چيز ديگه اى راه اشتباهى انتخاب كردم و فرايند رو بسيار طولانى تر كردم . ( رو راست بگم فكرم كار نداد … ) ابتدا به ساخت كاربر جديد فكر كردم و متوجه شدم محدود كردن اين كاربر تا اين حد براى حفظ امنيت زياد راحت  نيست حداقل براى من و به همين دليل به راهه ديگه اى فكر كردم كه باز هم راه اشتباهى رو انتخاب كردم و اين بار بنظر اشتباه بزرگترى بود . بنده به اين فكر افتادم كه هاستى با فضايى خيلى اندك رو روى سرور به ايشون اختصاص بدند و ايشون ip رو درون يك فايل وارد كنند و با كدى كه اينجا درخواستشو از دوستان عزيز كرده بودم بروز شدن فايل تشخيص داده بشه و ip در فايل /etc/hostname.em0/ قرارداده بشه . در حال حاضر به اين فكر ميكنم كه يك نرم افزار از اين شخص ip رو بپرسه و درون فايل hostname.em0 وارد كنه كه گويا دوستان ميگند با sed و … ميشه اگه اشتباه نكنم اما دو مشكل هست اول اين كه چگونه اين كه درون سيستم فرد اجرا بشه ( لزومى به اين شرط نيست البته ) و درون فايل /etc/hostname.em0/ روى هاست جايگزين كنه دوم خود تشخيص دادن و جايگزين كردن ip هستش .

آفلاین سار

  • Newbie
  • *
  • ارسال: 24
ممنون از همه ى دوستان و راهنمايى ها خيلى مفيدشون كه خيلى چيزا رو باعث شد ياد بگيرم . ممنون واقعاً .

بنده احساس ميكنم در كل دارم راه رو اشتباه ميرم و كار خودم رو خيلى خيلى سخت تر ميكنم و به هيچ كدوم از اين كار ها نيازى نيست . بخاطره همين مشكل رو كامل توضيح ميدم .

يكى از دوستان يك سرور دارند براى ارائه ى 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 رو بدی. اینطور وقتی اسکریپت رو یک یوز بدون دسترسی اجرا کنه، برای کار خاص دسترسی روت به اسکریپت داده می‌شه.

اما باید حوست جمع باشه که بجر روت کسی نتونه فایل رو تغییر بده، به اینجکت شدن کد به اسکریپت هم باید دقت کنی. با تمام این توضیحات، هر یوزری می‌تونه این اسکریپت رو اجرا کنه که اون رو هم می‌شه با گروه‌ها حل کرد.

آفلاین אוּרִיאֵל

  • High Sr. Member
  • *
  • ارسال: 641
  • جنسیت : پسر
  • bin/Matin/ !#
    • bin/Matin/ !#
ممنون از همه ى دوستان و راهنمايى ها خيلى مفيدشون كه خيلى چيزا رو باعث شد ياد بگيرم . ممنون واقعاً .

بنده احساس ميكنم در كل دارم راه رو اشتباه ميرم و كار خودم رو خيلى خيلى سخت تر ميكنم و به هيچ كدوم از اين كار ها نيازى نيست . بخاطره همين مشكل رو كامل توضيح ميدم .

يكى از دوستان يك سرور دارند براى ارائه ى 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 انجام بده و نتیجه رو توی یه فایل دیگه بریز، اگر درست انجام شد، اون فایل موقت رو با اصلی جایگزین کن.

البته بهتره این بحث رو توی همون تاپیک ادامه بدیم که دیگران هم کمک کنن و احیانن شاید همین مشکل رو داشته باشن.

يه سؤال ديگه :

چطور ميشه كارى كرد توى شل اسكريپت كه مدام در حال اجرا باش و آى پى جديد رو بپرسه ؟
« آخرین ویرایش: 31 تیر 1392، 08:52 ب‌ظ توسط אוּרִיאֵל »

آفلاین سار

  • Newbie
  • *
  • ارسال: 24
يه سؤال ديگه :

چطور ميشه كارى كرد توى شل اسكريپت كه مدام در حال اجرا باش و آى پى جديد رو بپرسه ؟
اینطور فکر کنم بشه:
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

آفلاین אוּרִיאֵל

  • High Sr. Member
  • *
  • ارسال: 641
  • جنسیت : پسر
  • bin/Matin/ !#
    • bin/Matin/ !#
اين محتويات فايل /etc/hostname.em0/ من هستش ( البته نه دقيقاً ) :
inet 192.168.1.1 255.255.255.224من ميخوام 192.168.1.1 جايگزين بشه
و موقعى كه شل اجرا ميشه بپرسه :
ip:بعد كاربر ip رو وارد كنه اينتر رو كه زد ip جايگزين بشه و دوباره بپرسه كه اگه كاربر خواست دوباره عوضش كنه اين تا آخر اجرا بشه .

چطور ميشه كارى كرد خروجى شل تو يه فايل ذخيره بشه ؟
« آخرین ویرایش: 31 تیر 1392، 09:43 ب‌ظ توسط אוּרִיאֵל »

آفلاین سار

  • Newbie
  • *
  • ارسال: 24
اين محتويات فايل /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

آفلاین سار

  • Newbie
  • *
  • ارسال: 24
چطور ميشه كارى كرد خروجى شل تو يه فايل ذخيره بشه ؟

پایپلاین‌ها، در این حالت خاص:
command > /path/to/file
خروجی‌ای که به استاندارد آوتپوت می‌رفته رو به فایل انتقال می‌ده. البته راه‌های دیگه‌ای هم هست، مثلن پایپ کردن به tee یا کلی راه دیگه