বাশ স্ক্রিপ্টের মাধ্যমে একটি ফাইল সম্পাদনা করুন


12

আমি ব্যাশ স্ক্রিপ্টিংয়ের একটি শিক্ষানবিশ। আমি আমার লিনাক্স বাক্সে একটি স্বয়ংক্রিয় পদ্ধতিতে ইনস্টল করতে এবং স্টাফগুলি কনফিগার করতে বাশ স্ক্রিপ্ট তৈরি করতে চাই।

ধরুন আমি সম্পাদনা করতে চাই

/etc/yum.repos.d/epel.repo

বাশ স্ক্রিপ্ট দ্বারা

আমি যা করতে চাই তা নিম্নরূপ

  1. ফাইল /etc/yum.repos.d/epel.repo খুলুন
  2. [এপেল] বিভাগটি সন্ধান করুন
  3. এপেল বিভাগে লাইন সক্ষম = 1 পরে ঠিক একটি লাইনের অগ্রাধিকার = 10 যুক্ত করুন

প্রথম অংশের জন্য আমি যুক্ত করেছি

yum install nano
nano /etc/yum.repos.d/epel.repo

আমার প্রশ্নটি কীভাবে ন্যানো ব্যবহার করে ব্যাশ স্ক্রিপ্টের সাহায্যে 2 ও তৃতীয় অংশটি করবেন (যদি সম্ভব হয় তবে যদি সম্ভব না হয় তবে আমাকে সেড দিয়ে দেখান)

এছাড়াও কিছু পয়েন্টে আমাকে উদাহরণস্বরূপ ফাইলগুলিতে ভেরিয়েবলগুলি পরিবর্তন করতে হবে

  1. = 1 সক্ষম করতে = 0 সক্ষম করুন
  2. টেস্টিং = "1" থেকে টেস্টিং = "0"
  3. একটি লাইনে পাঠ্য যুক্ত করুন। ফাংশন = থেকে ফাংশন = "পাঠ্য 1", "পাঠ্য 2"
  4. একটি ফাইলে কিছু পাঠ্য যুক্ত করুন এবং এটি সংরক্ষণ করুন (ন্যানো দিয়ে)

আমি এর চাহিদা জানি কিন্তু আমার এমন এক বন্ধুর জন্য এটি তৈরি করা দরকার যিনি সার্ভার ম্যানেজমেন্টে ন্যূনতম হন U দুর্ভাগ্যক্রমে আমার কাছ থেকে পরীক্ষাগুলি শুরু হতে বাশ স্ক্রিপ্টিং অধ্যয়ন করার সময় নেই I আমি আপনার উদাহরণগুলি স্ক্রিপ্ট লেখার জন্য ব্যবহার করব।


সমস্ত উত্তর আমি সফলভাবে ব্যাশ স্ক্রিপ্টে সম্পন্ন করেছি এর জন্য ধন্যবাদ

তবে আরেকটা সমস্যা ঠাউর আমি sed ব্যবহার করে আমরা worker_processes চুক্তি হবে nginx.conf পরিবর্তন করতে চান করতে দেয় আছে
ব্যবহার নিম্নলিখিত 1.Find করতে sed এখন আমি চাই প্রথম সংঘটন এর worker_processes যে সার্ভার এবং পাঠ্য প্রতিস্থাপনworker_processes 4;

এখানে বিশেষ দ্রষ্টব্য: এটি কেবল একটি উদাহরণ। এটি ঘটতে পারে যে কনফিডে কর্মী_প্রক্রিয়া 1 থাকে; । এটা শক্ত অংশ। আমি একটি sed কমান্ড যে এটি চান প্রথম পুরো ম্যাচ ক্ষেত্রে শব্দের worker_processes , লেখার ডিলিট লাইন যেখানে শব্দ পাওয়া যায় এবং পেস্ট worker_processes 4;ফাইলটি সংরক্ষণ সেখানেই। ফাইলগুলি সম্পাদনা করার সময় এটি কোনও নির্ভরযোগ্য পদ্ধতি (

একটি সর্বশেষ পরামর্শ আমি রিমির অংশে [রিমি] বিভাগের আওতায় সক্ষম = 0 সক্ষম = 1 পরিবর্তন করতে সক্ষম -1 '/ সক্ষম = 0 / সক্ষম = 1 / জি' /etc/yum.repos.d/remi.repo ব্যবহার করেছি .repo .যদিও আমার মনে হয় যে এটি ফাইলের সমস্ত সক্ষম = 0 কে পরিবর্তন করতে পারে যা সার্ভারকে নষ্ট করবে। যে কেউ আরও ভাল কোডের পরামর্শ দিতে পারে an


আমি নিশ্চিত নই এমন অন্য একটি জিনিস: পিআই এমন একটি ফাইল সম্পাদনা করতে চাই যার পাঠ্য টেস্টিং = "0" হিসাবে আছে (হ্যাঁ এর উদ্ধৃতি রয়েছে এবং আমার এটি রাখা দরকার) এটি পরীক্ষার = "0" থেকে টেস্টিং = "এ পরিবর্তন করা উচিত" 1 "(উদ্ধৃতি সহ)

এছাড়াও আমাকে "থ্যাঙ্কস কোয়ান্টা" (উদ্ধৃতি সহ) এর সাথে একটি ফাইলের শেষে উদ্ধৃতি সহ কিছু পাঠ্য যুক্ত করতে হবে পিএইচপি জন্য আপনি প্রতিধ্বনিত উদ্ধৃতি সহ একটি put রেখেছেন, কীভাবে বাশের জন্য এটি করা হয় তা জানেন না

আর একটি জিনিস যা
আমাকে একটি কনফের মধ্যে একটি লাইন পরিবর্তন করতে হবে তবে আমি মনে করি না যে পুরো পাঠ্যটি প্রতিস্থাপন করতে হবে

এর মত শোনা = কিছু; , আমি শোনার জন্য এটি পরিবর্তন করতে চাই = /tmp/php5-fpm.sock;

কোয়ান্টা আপ করার জন্য বড় থাম্বস আপ

অসাধারণ সমর্থন বলছি জন্য ধন্যবাদ

উত্তর:


18
sed '/enabled=1/a\priority=10' /etc/yum.repos.d/epel.repo

-iআপনি যদি চান (তবে .bakপ্রথমে এক্সটেনশান দিয়ে ব্যাকআপ রাখুন) একটি ইন-প্লেস এডিটিং বিকল্পটি নির্দিষ্ট করুন :

sed -i.bak '/enabled=1/a\priority=10' /etc/yum.repos.d/epel.repo

এখন আমি নীচের কাজগুলি করতে সিড ব্যবহার করতে চাই 1. এই কনফিডে কর্মী_প্রক্রিয়াগুলির প্রথম ঘটনাটি সন্ধান করুন এবং কর্মী_প্রসেস 4 এর সাথে পাঠ্য প্রতিস্থাপন করুন;

sed '0,/worker_processes [0-9]*;/s//worker_processes 4;/' /etc/nginx/nginx.conf

একটি শেষ পরামর্শ আমি বিভাগের অধীনে sed -i 's/enabled=0/enabled=1/g' /etc/yum.repos.d/remi.repoপরিবর্তন enabled=0করতে ব্যবহার করেছি । তবে আমার অনুভূতি আছে যে এটি ফাইলের মধ্যে সমস্তটি সংশোধন করতে পারে যা সার্ভারকে নষ্ট করবে anyone যে কেউ আরও ভাল কোডের পরামর্শ দিতে পারেenabled=1[remi]remi.repoenabled=0

এখানে তোমার জন্য:

sed '/\[remi\]/,/enabled=0/ { s/enabled=0/enabled=1/ }' remi.repo

আমি নিশ্চিত নই এমন অন্য একটি জিনিস: পিআই এমন একটি ফাইল সম্পাদনা করতে চাই যার পাঠ্য টেস্টিং = "0" হিসাবে আছে (হ্যাঁ এর উদ্ধৃতি রয়েছে এবং আমার এটি রাখা দরকার) এটি পরীক্ষার = "0" থেকে টেস্টিং = "এ পরিবর্তন করা উচিত" 1 "(উদ্ধৃতি সহ)

sed 's/Testing = "0"/Testing = "1"/g'

এছাড়াও আমাকে "থ্যাঙ্কস কোয়ান্টা" (উদ্ধৃতি সহ) এর সাথে একটি ফাইলের শেষে উদ্ধৃতি সহ কিছু পাঠ্য যুক্ত করতে হবে পিএইচপি জন্য আপনি প্রতিধ্বনিত উদ্ধৃতি সহ একটি put রেখেছেন, কীভাবে বাশের জন্য এটি করা হয় তা জানেন না

sed '$a"Werulz, you are welcome"\'

আর একটি জিনিস যা আমাকে একটি কনফের মধ্যে একটি লাইন পরিবর্তন করতে হবে তবে আমি মনে করি না যে পুরো পাঠ্যটি প্রতিস্থাপন করতে হবে

এর মত শোনা = কিছু; , আমি শোনার জন্য এটি পরিবর্তন করতে চাই = /tmp/php5-fpm.sock;

sed 's/listen = .*/listen = \/tmp\/php5-fpm.sock;/'

'কিন্তু' / সক্রিয় = 1 / একটি \ অগ্রাধিকার = 10 '/etc/yum.repos.d/epel.repo' ফাইল সম্পাদনা এবং সংরক্ষণ changes.PLease নিশ্চিত করবে
Werulz

@ ওয়ারুল্জ: কেবলমাত্র এমন একটি ফাইল যাচাই করে নিন বা এপেল.রেপোর বিষয়বস্তু হোম ডিরেক্টরিতে থাকা কোনও ফাইলে অনুলিপি করতে বা এটি অনুলিপি / সুপারভাইজার সুবিধা ছাড়াই চালানোর চেষ্টা করুন।
এরিক I

-iএকটি নয় মান বিকল্প জন্য sededতবে, শেডের মতোই সিনট্যাক্সের সাথে ফাইলগুলি সম্পাদনা করার জন্য একটি মান-সম্মতিযুক্ত উপায় সরবরাহ করে।
কোজিরো

আপনাকে আমার আরেকটি পরামর্শ জিজ্ঞাসা করার জন্য আমি আমার প্রথম পোস্টটি আপডেট করেছি so এখন পর্যন্ত কোয়ান্টায় সহায়তার জন্য অনেক ধন্যবাদ।
ভেরুল্জ

আমি আবার পোস্ট আপডেট করেছি ...... অনেক প্রশ্ন জিজ্ঞাসা করার জন্য দুঃখিত। আপনার প্রয়োজনের সাথে স্ক্রিপ্ট ভাগ করে নেবে
ওয়ার্লজ

12

ভালো লেগেছে ptman বললেন, Augeas ব্যবহার থেকে আপনাকে রক্ষা করতে পারে sed/ awk:

$ augtool -s set /files/etc/yum.repos.d/epel.repo/epel/priority 10

epelসংগ্রহস্থলের অগ্রাধিকারটি 10-এ priorityসেট করে prioritythe

আপনি অন্যান্য সংশোধন করতে চাইতে পারেন এমন অন্যান্য মানগুলির ক্ষেত্রেও এটি একই রকম।

আপনি যদি বেশ কয়েকটি মান পরিবর্তন করতে চান তবে আপনি augtoolদোভাষী হিসাবেও ব্যবহার করতে পারেন :

$ cat epel.augtool
#!/usr/bin/augtool -sf

# Make a variable
defvar epel /files/etc/yum.repos.d/epel.repo/epel

# Set values
set $epel/enable 1
set $epel/priority 10
set $epel/Testing 0
$ chmod +x epel.augtool
$ ./epel.augtool
Saved 1 file(s)

আপনি যদি এটি আপনার ব্যাশ স্ক্রিপ্টে রাখতে চান তবে আপনি কমান্ডগুলিকে এতে পাইপ করতে পারেন augtool:

cat <<EOF | augtool
# Make a variable
defvar epel /files/etc/yum.repos.d/epel.repo/epel

# Set values
set $epel/enable 1
set $epel/priority 10
set $epel/Testing 0
save
EOF

দেখুন man augtoolআরো বিকল্পের জন্য।

অজিয়াস বনাম sed/ awk: ব্যবহার করার কয়েকটি সুবিধা রয়েছে

  • অউজিয়ার পার্সার রয়েছে যা ফাইল সিনট্যাক্স সম্পর্কে জানে (এই ক্ষেত্রে yum.repoসিনট্যাক্স)। আপনার রেজেক্স ভুল হলে আপনি ফাইল সিনট্যাক্স ভাঙার ঝুঁকি নেবেন না;
  • অউজিয়াস yum.repo পার্সার yum.repoবিভাগগুলি সম্পর্কে জানেন , তাই আপনি জানেন যে আপনি সঠিক বিভাগটি সম্পাদনা করছেন;
  • অজিয়াস আদর্শবান ot এটি পরিবর্তন করতে হলে কেবলমাত্র ফাইলটিতে পরিবর্তন আনবে। যদি সমস্ত মান ইতিমধ্যে সেট করা থাকে তবে এটি ফাইলটি পরিবর্তন করবে না;
  • অউজিয়ার একটি পুতুল সরবরাহকারী রয়েছে, তাই আপনি এটি সহজেই একটি পুতুলের অবকাঠামোতে স্বয়ংক্রিয় করতে পারেন;
  • যদি প্যারামিটারগুলি এখনও বিদ্যমান না থাকে তবে অজিয়াসগুলি এগুলি আপনার জন্য তৈরি করবে। যদি বিভাগটি এখনও বিদ্যমান না থাকে তবে যথাযথ বাক্য গঠন সহ অজিয়াসও এটি তৈরি করবে।

উত্তরের জন্য ধন্যবাদ ...... এটি নিশ্চিতভাবে বিবেচনা করবে .... আপনি কীভাবে আমার বাশ স্ক্রিপ্ট দিয়ে এটি ব্যবহার করবেন তার একটি উদাহরণ দিতে পারেন
Werulz

ঠিক আছে, আমার সম্পাদনা দেখুন।
hফিংক

2

আপনি প্রোগ্রামটিমে কনফিগার ফাইলগুলিকে সংশোধন করার জন্য অউজিয়ার সরঞ্জামটিও দেখতে পারেন । এটি পুতুল (একটি কনফিগারেশন ম্যানেজমেন্ট সিস্টেম) এর সাথে একত্রে খুব শক্তিশালী , তবে এটি নিজেও ব্যবহার করতে পারেন।


সেই
লোলটি

2
আপনি এই উত্তরের গুণমান উন্নত করতে পারেন আউজিয়ার কী / কী হয় তার একটি সংক্ষিপ্ত বিবরণ দিয়ে এবং একটি উদাহরণ বা দুটি যোগ করে।
ThatGraemeGuy

আমি একটি নতুন প্রশ্ন বলছি
Werulz
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.