शेल पर काम नहीं कर रहा है, लेकिन शीघ्र काम कर रहा है


1

मैं लिनक्स शैल स्क्रिप्ट के लिए नौसिखिया हूं। मैं लिनक्स शैल स्क्रिप्ट द्वारा एक पीएचपी वेब एप्लिकेशन द्वारा आईपी पते को बदलना चाहता हूं।

मैंने अपना PHP वेब एप्लिकेशन और शेल स्क्रिप्ट पूरी कर ली है। इससे पहले कि वे एक साथ काम करें और काम करें, मैं परीक्षण करना चाहूंगा कि क्या शेल स्क्रिप्ट ठीक से चल सकता है।

मेरा लिनक्स शैल स्क्रिप्ट $ 0 (स्क्रिप्ट नाम) को छोड़कर 7 चर को संग्रहीत करेगा।:

  1. नेटवर्क इंटरफ़ेस फ़ाइल ( /etc/sysconfig/network-scripts/ifcfg-{XXX})
  2. पुराना आईपी एड्रेस
  3. नया आईपी पता
  4. पुराना सबनेट मास्क
  5. न्यू सबनेट मास्क
  6. पुराना गेटवे
  7. नया द्वार

अधिकांश जाँच पहले से ही मेरे PHP एप्लिकेशन द्वारा प्रदर्शन की गई थी क्योंकि मैं लिनक्स शैल स्क्रिप्ट के लिए नौसिखिया हूं, मैं अपनी शेल स्क्रिप्ट पर ऐसा नहीं करना चाहता। मेरा PHP एप्लिकेशन यह सुनिश्चित कर सकता है कि डेटा सही है और मूल्यों से भरा है।

इसलिए इस शेल स्क्रिप्ट को चलाने के लिए, मैं परिणाम देखने के लिए निम्नलिखित टाइप करता हूं:

sh ./ipchanger.sh /etc/sysconfig/network-scripts/ens32 192.168.1.18 192.168.1.201 32 24 192.168.1.1 192.168.1.1 

अर्थ:

  1. लक्ष्य नेटवर्क स्क्रिप्ट फ़ाइल निर्दिष्ट करें।
  2. से आईपी बदलने 192.168.1.18के लिए 192.168.1.201
  3. से सबनेट मास्क बदलने 255.255.255.255के लिए 255.255.255.0

वास्तव में यह निम्नलिखित कमांड चलाएगा:

sudo sed -i -r "s/$currentIpAddress/$newIpAddress/g" $fileName
sudo sed -i -r "s/$currentSubnetMask/$newSubnetMask/g" $fileName
sudo sed -i -r "s/$currentGateway/$newGateway/g" $fileName

यह कोई त्रुटि नहीं देता है और इसके दिखने में अच्छा है क्योंकि नेटवर्क स्क्रिप्ट फ़ाइल की अंतिम संशोधित तिथि अपडेट हो गई है। लेकिन जब मैंने फाइल खोली तो कुछ भी नहीं बदला।

फिर मैं echoआज्ञा देता हूं , यह वही आज्ञा देता है जो मैं चाहता था। फिर मैं कमांड प्रॉम्प्ट द्वारा सभी तीन लाइनों को चलाता हूं और फ़ाइल को फिर से जांचता हूं, सभी जानकारी बदल गई है!


यदि आपका मुद्दा sudo नहीं है जैसा कि @davidgo ने सुझाव दिया है, तो आप यह पुष्टि करना चाहते हैं कि दोनों इंटरफ़ेस समान शेल का उपयोग कर रहे हैं। आप यह सुनिश्चित करने के लिए कि वे एक ही हैं, रनिंग echo $SHELLया ps -p $$दोनों इंटरफेस में प्रयास करना चाहते हैं।
फ्रैंक थॉमस

जवाबों:


0

समस्या sudoप्रत्येक पंक्ति की शुरुआत में सबसे अधिक संभावना है । sudoतात्पर्य है "रूट के रूप में चलाएं।" आप संभवतः यह पाएंगे कि, प्रभावी रूप से, आप जिस खाते में कमांड लाइन में लॉग इन हैं वह कमांड लाइन /etc/sudoersसे काम करने के लिए सेट किया गया है , लेकिन PHP स्क्रिप्ट के माध्यम से नहीं - और वास्तव में आपको चलाने की आवश्यकता है जब आप इसे वेब उपयोगकर्ता के माध्यम से चलाते हैं, तो इसके निहितार्थों पर विचार करें - वेब उपयोगकर्ता शायद इसमें सेट नहीं किया जाएगा /etc/sudoers- और नहीं होना चाहिए!

आप फ़ाइलों के स्वामित्व को बदलकर और बिना स्क्रिप्ट चलाए इस सिद्धांत का परीक्षण कर सकते हैं sudo। फ़ाइल के स्वामित्व को बदलने के लिए, बसchown filename.ext

मेरा मानना ​​है कि आप बेहतर होंगे:

  1. के तहत एक नई निर्देशिका बनाना /var/www(या आप जहां भी सहज हों और वेब उपयोगकर्ता की पहुंच हो)
  2. उस निर्देशिका में उपयुक्त कॉन्फिग फाइल को ले जाना
  3. या तो व्यक्तिगत फ़ाइलों या निर्देशिका को समाहित करके इसे www में रखा जाए।
  4. डब्ल्यूडब्ल्यूई निर्देशिका के लिए इन फ़ाइलों के स्वयं को बदलें
  5. प्रत्येक कमांड की शुरुआत में सुडो को गिराएं। बेहतर है, स्क्रिप्ट को कॉल करना क्यों न छोड़ें और बस PHP में बदलाव लिखें।

sudoप्रत्येक पंक्ति की शुरुआत में हटाने के बाद , इसका अभी भी काम करता है!
अकीयरू

"Whoami" क्या कहता है, और PHP "निष्पादन" प्रकार का कमांड जो आप उपयोग कर रहे हैं?
डेविगो

whoamiअपाचे दिखाता है
अकीरू

यह थोड़ा समझ में आता है। क्या यह तब होता है जब आप इसे बैश प्रॉम्प्ट से या स्क्रिप्ट के माध्यम से चलाते हैं? फ़ाइलों पर अनुमतियाँ क्या हैं?
davidgo

अब मैं शेल स्क्रिप्ट को ही आईपी एड्रेस बदल सकता हूं। लेकिन PHP में, यह नहीं कर सका।
अकीयरू
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.