কেন একই ইনপুট ফাইলে সেড আউটপুট পুনর্নির্দেশ করা আমার যন্ত্রটিকে প্রতিক্রিয়াবিহীন করে?


13

আমি sedএকটি বড় ফাইলের (100 এমবি) কিছু কীওয়ার্ড প্রতিস্থাপন করার চেষ্টা করছিলাম । আমি -i(অন্তর্নিহিত) বিকল্পটি সম্পর্কে অসচেতন ছিলাম , তাই আমার প্রথম প্রচেষ্টাটি এটির মতো পুনঃনির্দেশ করার ছিল:

sed 's/original/edited/g' file.log >> file.log

এরপরে যা ঘটেছিল তা হ'ল আমার পিসি একটি থামতে চলে গেছে, প্রায় কোনও কীবোর্ড ইনপুট নেই। আমি একটি ভিন্ন কনসোল Ctrl+ Alt+ চেষ্টা করেছি F1তবে ধীরে ধীরে ব্যবহারকারীর নাম প্রবেশ করার পরে, এটিও বন্ধ হয়ে যায়। কীবোর্ড ছাড়া, আমার একমাত্র বিকল্প ছিল মেশিনটিকে হার্ডওয়্যার-রিসেট করা। লগ ইন করার পরে, আমি দেখতে পেলাম যে file.log প্রায় 8 জিবি।

আমি সত্যিই বুঝতে চাই যে কেন এই আদেশের প্রয়োগ কার্যকরভাবে সিস্টেমটিকে এত প্রতিক্রিয়াহীন করতে সক্ষম হয়েছিল এবং যদি সতর্কতা জাগ্রত করতে এবং আপত্তিকর প্রক্রিয়াটি হত্যার জন্য সিস্টেম স্তরে ব্যবস্থা থাকে তবে?


7
এটি কি একক কোর মেশিন? এটি খুব আশ্চর্যজনক বলে মনে হচ্ছে যে এটি একটি আধুনিক কম্পিউটারকে তার হাঁটুর কাছে নিয়ে আসা উচিত ছিল। হ্যাঁ, আপনার ডিস্ক ভরাট হ্যাঁ, আপনার একটি কোরের 100% ব্যবহার করেছেন Used তবে পুরো ক্রাশ?
টেরডন

এই ফাইলটি সম্পর্কে কি অদ্ভুত কিছু আছে? যদি এটি কোনও সমস্যা না হয় তবে আপনি কি এর সামগ্রীগুলি পেস্টবিনে পোস্ট করতে পারেন?
সের্গেই কলডিয়াজনি

এছাড়াও, আপনার স্মৃতি পরিমাণ কত? আপনি আমাদের আউটপুট সরবরাহ করতে পারেন free -h ?
সের্গেই কোলোডিয়াজনি

আপনি যখন কোনও ফাইল পরিবর্তন করতে চান তবে কেন প্রথমে একটি স্ট্রিম সম্পাদক ব্যবহার করবেন? পার্শ্ব প্রতিক্রিয়া ex -sc '%s/original/edited/ge|x' file.logছাড়াই আপনি ইউনিক্স আইডিয়োম্যাটিক পদ্ধতিতে যা চান তা করা উচিত sed -i
ডেভিড ওঙ্গারো

মনে রাখবেন যে আপনি এটি সঠিকভাবে করছেন (লোকেদের যে কোনও পদ্ধতি দ্বারা সরবরাহ করা হচ্ছে), এটি সক্রিয় প্রক্রিয়া সম্পর্কিত লগ ফাইলে এই ধরণের কাজটি করা খুব দুর্বল হতে পারে।
র্যান্ডম 832

উত্তর:


10

যেমনটি আগেই বলা হয়েছে, >>ফাইলটিতে সংযোজন করা হয়, সুতরাং আপনার sedকমান্ডটি কেবলমাত্র আউটপুটযুক্ত রেখাগুলি পড়তে বসবে এবং তারপরে আরও কিছু আউটপুট করবে। আপনি, ইন-জায়গা আপনার ফাইলটি প্রতিস্থাপন করতে চেয়েছিলেন >এখনও কাজে না, কিন্তু আপনার হয় সচেতন sedএর -iবিকল্প, যা স্পষ্টভাবে এক যদি আপনি চান হয়।

তবে, আপনি একেবারে নিশ্চিত করুন যে আপনি একটি ফাইল আপনি একটি স্ট্রিম হিসাবে করছি পড়া লিখবেন করতে চান, এবং শুধুমাত্র এই এক পাস করতে চান ব্যবহারের বিষয়ে বিবেচনা করছি spongeথেকে moreutilsপ্যাকেজ;

sed 's/original/edited/g' file.log | sponge >> file.log

spongeস্টিডেন থেকে ইওএফ পর্যন্ত স্মৃতিতে পড়ে, তারপরে এটির সমস্ত বিষয় স্টাডআউটে ফেলে দেয়, সুতরাং sedফাইলটির শেষের দিকে আঘাত করবে, এটি পড়া বন্ধ করবে, এটি বন্ধ করবে এবং তারপরে স্পঞ্জ এতে যুক্ত হওয়া শুরু করবে।


2
spongeসম্পর্কে জানা একটা চমৎকার ইউটিলিটি, কিন্তু sedইতিমধ্যে একটি রয়েছে -iবিকল্প: -i[SUFFIX], --in-place[=SUFFIX], edit files in place (makes backup if SUFFIX supplied)
জোশুয়া টেলর

@ জোশুয়া টেলর, ওপি ব্যবহার করছিল , কোনটি পরিবর্তিত হয় তার >>পরিবর্তে কোনটি সংযোজন করে >। মঞ্জুর, ওপি বিশেষত -iপোস্টটিতে উল্লেখ করেছে এবং এটি এটির তুলনায় অনেক বেশি সাধারণ ব্যবহারের মতো বলে মনে হয়েছে তবে আমি মনে করেছি যে এটি নির্দিষ্ট করে দেওয়া উচিত যে নির্দিষ্ট অপারেশন ওপি পোস্ট করেছে খুব বেশি ভুল ছাড়াই সম্ভব হয়েছিল, যদি আপনি সত্যই সত্যই করেন আপনি এটি করতে চান তা নিশ্চিত
ymbirtt

1
আমি এটি এখানে উল্লেখ করেছি কারণ এটি গৃহীত উত্তরের মূল বিষয় ছিল । এটি বলেছিল, স্পঞ্জ সম্পর্কে জানতে পেরে আমি সত্যই খুশি ; এটি আমার সরঞ্জামবাক্সের জন্য একটি নতুন সরঞ্জাম এবং কেবলমাত্র এটির জন্য একটি উত্সাহের যোগ্য।
জোশুয়া টেলর 14

1
আহ! আমি দেখি. আমি কিছুটা পরিষ্কার করার জন্য আমার উত্তরটি টুইট করব। এছাড়াও, আপনি যদি উপভোগ করেন তবে spongeএকবার দেখুন vipemoreutilsশুধু একটি ঐন্দ্রজালিক প্যাকেজ জিনিস দিয়ে ভরা হয় তুমি কখনো জানতাম তুমি প্রয়োজন
ymbirtt

18

আপনার sedআদেশটি এতে যুক্ত হওয়া ফাইলটি পড়ার চেষ্টা করছে। এটি কখনই ফাইল-এন্ড-এ পৌঁছায় না, তবে চেষ্টা করে প্রচুর সিপিইউ খাবে। সে কারণেই ^ C (বাধা বর্তমান প্রক্রিয়া) আবিষ্কার করা হয়েছিল।


আমি মনে করি না যে সেখানে ^ C একটি বিকল্প ছিল ... এটি একটি হ্যাল্টে গেছে, অর্থাত্ কোনও ঝলক দেওয়া কার্সার আটকেছে না!
ইকনস

18

আপনি যে ফাইলটি পড়েছেন তার সাথে যুক্ত হওয়া কোনও ক্ষেত্রেই ভাল ধারণা নয়, কারণ আপনি একটি ক্রমবর্ধমান ফাইলটি শেষ করবেন। আপনি যদি সত্যিই ফাইলটিতে আবার লিখতে চান তবে আপনার -iপতাকাটি ব্যবহার করা উচিত :

sed -i 's/original/edited/g' file.log

অথবা আপনি যদি পরিবর্তনগুলি করার আগে এটির ব্যাকআপ তৈরি করতে চান তবে আপনি -iপতাকাটিতে একটি ফাইল প্রত্যয় যুক্ত করতে পারেন :

sed -i.bak 's/original/edited/g' file.log

এটি নামক একটি ফাইল তৈরি করবে file.log.bakএবং তারপরে পরিবর্তনগুলি করবে, আপনি যে প্রোগ্রামটি পড়ছেন সেই ফাইলটি সংযুক্ত করার চেষ্টা করে আপনি সেখানে কী করেছিলেন আমরা প্রোগ্রামারকে একটি ডেটা রেস স্ল্যাং বলে, যেখানে একই ডেটা উত্সের জন্য বিভিন্ন প্রক্রিয়াগুলির রেস তা ইনপুট বা আউটপুট হতে পারে । এই কারণে আপনার মেশিনটি বন্ধ হয়ে গেছে।


1
আমি অবাক হয়েছি এটি গৃহীত উত্তর, কারণ এটি এমনকি ওপির প্রশ্নেরও সমাধান করে না"I really would like to understand why the execution of that command was able to make the system so unresponsive, and if mechanisms exist at the system level to trigger alerts and kill the offending process?"
স্টিভ

@ স্টিভ কেন এটি থামিয়ে দিয়েছিল আমি সম্বোধন করেছি, তবে দ্বিতীয় অংশের জন্য আপনি ঠিক বলেছেন। আমি এটিকে সম্বোধন করিনি কারণ আমি এর কোনও উত্তর জানি না। আমরা একটি আড্ডার আলোচনার পরে কমান্ডটি ব্যাপকভাবে পরীক্ষা করেছিলাম এবং বিভিন্ন মেশিন এবং অপারেটিং সিস্টেমে সম্পূর্ণ ভিন্ন পরিণতিতে এসেছি। উদাহরণ: খিলানযুক্ত কোনও মেশিনে এটি কেবল ফাইলটিকে চিরতরে বাড়তে দেয়, তবে মেশিনটিকে প্রতিক্রিয়াহীন করে না। আমার উবুন্টু মেশিনে আমি প্রশ্নটিকে প্রক্রিয়াটি মেরে ফেলার সুযোগ ছাড়াই একই ফল পেয়েছিলাম। উবুন্টু ভিএম-তে একই পরীক্ষা করার জন্য দ্বিতীয় একটি মেশিন এসেছিল ha
ভিডিওনাথ

একটি straceঅন্য দিকে didtn উপর পুরো প্রক্রিয়া আমার মেশিনে এবং একটি অন্য ব্যবহারকারীর মেশিনে ফলাফলের এবং এই নকল করা। অবশ্যই এমন কোনও ব্যবস্থা রয়েছে যার সাহায্যে আপনি প্রতিক্রিয়াহীন অ্যাপ্লিকেশনগুলিকে মেরে ফেলতে পারেন, তবে আপনার মেশিনটি যদি প্রতিক্রিয়াবিহীন উপস্থাপন করা হয় তবে এটি পুনরায় সেট করে আপনার একমাত্র বাম বিকল্পটি রেখে দিন। আমি এখনও এটি পরীক্ষা করছি এবং বর্ণিত আচরণের কারণ কী তা পুরোপুরি বুঝতে না পারার আগেই আমি প্রশ্নের এই অংশটি সম্বোধন করতে অক্ষম।
ভিডিওনাথ

এটি সম্ভবত কর্নেল কনফিগারেশনের মধ্যে পার্থক্য, যেমন একটি ভিন্ন সময়সূচী যা IO- কে অগ্রাধিকার দেয়, বা সিস্টেমের মধ্যে ডিস্ক / ফাইল-সিস্টেম ড্রাইভারের মধ্যে পার্থক্য। আপনারা যে তদন্ত করেছেন তা দেখে ভাল লাগল, এটি ভাল তথ্য।
স্টিভ

আপনি যদি অন্য ডেটা পয়েন্টে আগ্রহী হন; আমি মোটামুটি ছোট ফাইল সহ সেন্টোস মেশিনে এটি চেষ্টা করেছি এবং এটি নীচে আমার স্পঞ্জ দ্রবণ হিসাবে ঠিক একই জিনিসটি করেছে। আমি কল্পনা করি যে একটি ছোট ফাইলের sedজন্য হ্যান্ডেলটি ধরে রাখার চেয়ে পুরো জিনিসটিকে মেমোরিতে পরিণত করা হবে এবং তারপরে এটি বন্ধ করে দেওয়া হবে। ওপি-র মতো ~ 100MB ফাইলের সাহায্যে এটি অনির্দিষ্টকালের জন্য বৃদ্ধি পেয়েছিল তবে মেশিনটিকে ইট দেয়নি।
ymbirtt
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.