bash

2013-06-07 9 views
5

का उपयोग कर आईएनआई फ़ाइल में अद्यतन var मैं सर्वर के विभिन्न पहलुओं को कॉन्फ़िगर करने के लिए एक बैश स्क्रिप्ट लिखने का प्रयास कर रहा हूं। यहां संदर्भ एक चर के एक फ़ाइल को एक conf फ़ाइल (ini प्रारूप) में दूसरे मान के साथ बदल रहा है।bash

संदर्भ

[ssh-iptables] 

enabled = false 

है और मैं बस सही करने के लिए झूठी बदलने की जरूरत है।

आमतौर पर मैं सिर्फ sed

sed -i 's/^enabled = false/enabled = true/g' /etc/fail2ban/jail.conf 

का एक सरल सा के साथ ऐसा होता है लेकिन enabled = false कई स्थानों में मौजूद है।

मुझे कोई सफलता

awk -F ":| " -v v1="true" -v opt="enabled" '$1 == "[ssh-iptables]" && !f {f=1}f && $1 == opt{sub("=.*","= "v1);f=0}1' /etc/fail2ban/jail.conf 

ऊपर this forum thread से प्राप्त किया गया था, लेकिन मैं वास्तव में नहीं है कैसे लिपियों में इसका इस्तेमाल करने के लिए यह काम करने के लिए के लिए पर्याप्त समझ है साथ awk का उपयोग कर की कोशिश की है। सभी यह करने के लिए लगता है की cat /etc/fail2ban/jail.conf

मैं कुछ अन्य लिपियों जो काफी लंबे समय तक रहे हैं, जो आदर्श के रूप में इस INI फ़ाइलों का भार का क्या होगा नहीं है पाया है बराबर तो मैं आशा करती हूं कि किसी ने मुझे सही करने में मदद कर सकते है कोड के ऊपर या मुझे सही दिशा में इंगित करें।

क्षमा करें अगर यह सर्वरफॉल्ट पर है, लेकिन जैसा कि यह सर्वर कॉन्फ़िगरेशन की जटिलताओं के बजाय स्क्रिप्टिंग है, मुझे लगता है कि यहां अधिक उपयुक्त हो सकता है।

उत्तर

11

अपने प्रारूप मान लिया जाये कि कोई वर्ग ब्रैकेट लाइनों (जैसे [ssh-iptables]) वर्गों के भीतर हैं वह यह है कि, मैं (sed के साथ) के ऊपर अपने समाधान तो जैसे कि ब्लॉक के भीतर करने के लिए क्वेरी का प्रयोग करेंगे लेकिन प्रतिबंधित:

sed -i '/^\[ssh-iptables\]$/,/^\[/ s/^enabled = false/enabled = true/' /etc/fail2ban/jail.conf 

शुरुआत में अतिरिक्त भाग निम्नलिखित प्रतिस्थापन कथन को केवल [ssh-iptables] की रेखा के बीच चलाने के लिए बताता है और अगला जो [ से शुरू होता है। यह एक अल्पविराम से अलग दो नियमित अभिव्यक्तियों का उपयोग करता है जो सीमाओं को इंगित करते हैं।

+0

यह दुर्भाग्य से काम नहीं कर रहा है। 'टेबल]' और 'सक्षम =' के बीच एक लाइन ब्रेक है लेकिन इसे हटाने से कोई फर्क नहीं पड़ता। क्या यह लाइन एंडिंग आदि के बारे में परवाह करता है? –

+0

@BenSwinburne मैंने इसे कॉपी करते समय प्रारंभिक '^' के स्थान को गलती से स्थानांतरित कर दिया। यह अब काम करना चाहिए। –

+0

यह वास्तव में करता है! उत्तम। बहुत बहुत धन्यवाद। –

1
awk '/^[ssh-iptables/ {ok=1} 
    ok==1 && $0="enabled = false" {print " enabled = true"; ok=0 ; next} 
    {print $0} ' infile > tmp 
    mv tmp infile 
2

आप इस मामले में sed के बजाय m4 का उपयोग करने पर विचार कर सकते हैं। यह परिवर्तनीय प्रतिस्थापन का उपयोग करता है और मुझे लगता है कि फ़ाइल को पठनीय लग रहा है। आपका m4 टेम्पलेट इस प्रकार दिखाई देंगे:

m4 -DSSH_IPTABLES_ENABLED=true input.m4 > output.ini 

या:

m4 -DSSH_IPTABLES_ENABLED=false input.m4 > output.ini 

[ssh-iptables] 
enabled=SSH_IPTABLES_ENABLED 

अब, आप निम्नलिखित मानकों (जो एक bash स्क्रिप्ट से ही कॉल किया जा सकता है) के साथ m4 फोन

यह एम 4 का उपयोग करने का एक बेहद आसान तरीका है, यदि आप इसके बारे में पढ़ते हैं तो आप पाएंगे कि आप कुछ वास्तव में निफ्टी चीजें कर सकते हैं (यह वह आधारभूत संरचना है जिस पर ऑटोकॉन्फ़/ऑटोमैटिक शुरू में डिज़ाइन किया गया था)।

+0

दुर्भाग्य से CentOS 6.4 पर fail2ban की डिफ़ॉल्ट कॉन्फ़िगरेशन मूल 'jail.conf' फ़ाइल बनाता है जिसमें' सक्षम = सत्य' है, इसलिए मुझे 'SSH_IPTABLES_ENABLED' के साथ सत्य के प्रतिस्थापन को स्क्रिप्ट करना होगा। एक एम 4 समाधान के लिए –

+0

+1। आप सभी को शुभकामनायें! – shellter

+0

आमतौर पर एम 4 के साथ, आप एक टेम्पलेट लाइब्रेरी तैयार करेंगे जो आप मौजूदा कॉन्फ़िगरेशन को संपादित करने के बजाय अपने विभिन्न वातावरण के लिए कॉन्फ़िगरेशन लाइब्रेरी के विरुद्ध निष्पादित करेंगे और मौजूदा कॉन्फ़िगरेशन फ़ाइलों को प्रतिस्थापित करेंगे। दोनों तरीकों के फायदे हैं, और मुझे उम्मीद है कि आप उस चीज़ पर बस जाएंगे जो आपको कुछ सिरदर्द का कारण बनता है। – PaulProgrammer

8

यदि आप बाहरी अनुप्रयोगों का उपयोग करने के लिए खुले हैं, तो आप crudini के उपयोग में रूचि रख सकते हैं।

उदाहरण:

[oauth2provider] 
module = SippoServiceOAuth2Provider 
backend[] = none 
wiface = public 

; [calldirection] 
; module = SippoServiceCallDirection 
; backend[] = none 
; wiface = internal 

एक मानक ग्रेप टिप्पणी की अपवाद फ़िल्टर नहीं कर पाएंगे।

परामर्श के लिए crudini चीजों के साथ

, स्थापित करने और संशोधित आसान कर रहे हैं:

$ crudini --get /myproject/config/main.ini oauth2provider wiface 
public 
$ crudini --get /myproject/config/main.ini calldirection wiface 
Section not found: calldirection 

मैं एक पार्टी-केवल एप्लिकेशन पर था और इस दृष्टिकोण के लिए चले गए। केवल एक सलाह।

सम्मान,

 संबंधित मुद्दे