এআইএক্স - কাঁটাচামচ সম্ভব না হলে মেমরি মুক্ত করতে ksh বিল্টিনগুলি ব্যবহার করুন


2

প্রসঙ্গ: খুব কম স্মৃতিযুক্ত একটি এআইএক্স এলপিআর (কোনও ঝাঁকুনি দেওয়া সম্ভব নয়, সুতরাং কেবল শেলের বিল্টিনগুলি (সিডি, ইকো, কিল) কাজ করবে)। আমি এটিতে একটি (এইচএমসি) কনসোল রাখতে পারি, তবে এআইএক্সে স্মৃতি মুক্ত করা শুরু করার জন্য আমার আরও ভাল উপায় প্রয়োজন, যখন মেমরিটি খুব কম হয় এমনকি আপনাকে একটি "পিএস-শেফ" করার অনুমতি দেয় না। (আমার কাছে একটি উপায় আছে তবে এটি এলোমেলোভাবে বিদ্যমান পিডগুলি মেরে ফেলার একটি উপায় is আমি যে পিআইডি মারতে পারি তার সম্পর্কে আমার আরও তথ্য থাকা দরকার, তাই আমি একটি গুরুত্বহীন পিআইডি চয়ন করতে পারি)

আমি জানতে চাই :

  • কেবলমাত্র ksh 'বিল্টইন ব্যবহার করে আমি কীভাবে ফাইলগুলির সামগ্রী দেখতে পারি
  • এবং চূড়ান্ত লক্ষ্য: আমি কোন ফাইলের বিষয়বস্তুটি কেবল বিল্টিনগুলি ব্যবহার করে মেরে ফেলার জন্য বেছে নিতে পারি, যাতে আমি কেবল "জাগতিক" প্রক্রিয়াটি মেরে ফেলি, (যখন আমি যথেষ্ট পিআইডি হত্যা করি তখন আমি "পিএস - ef "" netstat -rn "ইত্যাদি, এবং" PS "এখনও" গুরুত্বপূর্ণ "প্রক্রিয়া দেখানো উচিত)

আমি ইতিমধ্যে যা জানি:

  • আমি কনসোলে লগইন করতে পারি (ssh hscroot @ hmc, vtmenu, আউটঅফমিউরি সমস্যা নিয়ে এলপারটি বেছে নিতে, রুট হিসাবে লগইন করতে পারি এবং কিছুক্ষণ পরে (2-5 মিনিট) এবং ksh / / etc / এ কমান্ডগুলি কাঁটাচামচ করতে পারে না এমন বেশ কয়েকটি অভিযোগ প্রোফাইল, আমি একটি (কেএসএস) প্রম্পটে পাচ্ছি।

  • / ডিরেক্টরি / পিআইডি # ডিরেক্টরি উপস্থিত রয়েছে তা দেখার জন্য এখন আমি "এলএস" অনুকরণ করতে পারি: cd /proc ; echo * আমাকে এখনও চলমান পিআইডি-র তালিকা পাবে। (সাধারণত আমি 0, 1 (আরম্ভ) দেখতে পাব, যেগুলি হত্যা করা হবে না, এবং অন্যান্য পিআইডিগুলির একটি গোছাও, তারা কী প্রক্রিয়া চালাচ্ছে তার খুব কম ইঙ্গিত সহ (ksh? syncd? ls? ja?))।

  • আমি এটিও করতে পারি: kill some pids hereযথেষ্ট পরিমাণে মেমরি মুক্ত করতে (ksh (বা বাশ!) একটি নিহত একটি বিল্টিন, সুতরাং এটি ব্যবহার করার জন্য কাঁটাচামচ করার দরকার নেই) এবং যখন আমি যথেষ্ট পিআইডি হত্যা করি তখন আমি তখন একটি ps -ef netstat -rnইত্যাদি করতে সক্ষম হয়ে আমাকে অনুমতি দেয় সার্ভারের shutdown -rFঅবস্থাটি এলপিআর থেকে নিজেই পুনরায় চালু করার পূর্বে সার্ভারের অবস্থা পান (এটি সিঙ্ক হবে, ফাইল সিস্টেমগুলি বন্ধ করবে ইত্যাদি Note নোট করুন যে বিকল্পটি, এইচএমসি থেকে একটি রিবুট সাধারণত সম্ভব হয় না (সম্ভবত এটি কিছু কমান্ড কাঁটাতে চেষ্টা করে)) , যদি না আপনি "--immed" যোগ করেন, যা সরাসরি বিদ্যুত বন্ধ হওয়ার মতো এবং এটি ফাইল সিস্টেমের সমস্যার কারণ হতে পারে বলে পরামর্শ দেওয়া হয় না, কারণ lpar পুনরায় চালু করার সময় কখনও কখনও খুব দীর্ঘ fsck সৃষ্টি করে)।

  • কিছু পিআইডি মেরে শাটডাউনটি চালিয়ে দাও: আমাকে যা চলছে তার কিছু "পিএস -ফাইফ" ধারণা পেতে, পুনরায় চালু করার দরকার, রুটগুলি পেতে (স্ট্যাটিক রুটগুলি মেলে না এমন ক্ষেত্রে) এবং শাটডাউন "আরও কৌতূহলীভাবে", ফাইল সিস্টেমটি সংরক্ষণ করা এবং দীর্ঘ -কালীন fsck এড়ানো শুরু হওয়ার সাথে সাথে এড়ানো))

তবে আমারও আপনার সহায়তা দরকার:

  • কিছু ফাইলের বিষয়বস্তু দেখুন! (উদাহরণস্বরূপ: /var/run/*.pid- তে পিড ফাইলগুলির কয়েকটি পিড দেখতে সক্ষম হয়ে আমি করব: cd /var/runএবং পরে পিআইডি ফাইলগুলির echo *pidতালিকা পেতে, তবে কেবল ksh এর বিল্টিনগুলি দিয়ে (মনে রাখবেন: কোন জাল নয়!) আমি কীভাবে এই ফাইলগুলির একটির বিষয়বস্তু পেতে পারি?) একই কৌশলটি নীচে / প্রোক / পিআইডি # / ... এর নীচে কিছু ইনফোস পেতে সহায়তা করতে পারে, সম্ভবত আমাকে হত্যা করার জন্য সঠিক পিআইডিও বেছে নিতে দেয়)

  • উপরেরটি (বা আপনার যে কোনও কৌশল হতে পারে) ব্যবহার করে "বুদ্ধিমানের" পিআইডি চয়ন করুন

যথার্থতা: আপনার ট্রিকটি এই সংস্করণ ksh বিল্টিনগুলির সাথে কাজ করে যদি বোনাস পয়েন্টগুলি:

prompt# strings /usr/bin/ksh | grep '\..*\.' | grep builtin
0@(#)27  1.57.14.5  src/bos/usr/bin/ksh/builtin.c, cmdksh, bos61Z, z2013_29A2 7/5/13 00:10:52

উত্তর:


2

দয়া করে এটি চেষ্টা করুন:

Ksh এ অন্তর্ভুক্ত বিল্টিনগুলির একটি তালিকা:

$ ksh -c 'builtin' 

আপনার প্রশ্নের উত্তর দেওয়ার জন্য এই একমাত্র বিল্টিনগুলি দরকারী:

echo kill print printf read

সুতরাং, মনে হয় "ফাইল পড়ার" একমাত্র উপায় হ'ল পঠন ব্যবহার করা।
কয়েকটি ফাংশন সংজ্ঞায়িত করা যাক (সিএলআইতে অনুলিপি করুন এবং আটকান):

function Usage {
    echo "fileread: filename [from line] [to line]"
    exit 1
}

function fileread {
    [ "$#" -lt 1 ] && echo "please supply the name of a file" && Usage
    linestart=${2:-1}
    lineend=${3:-0}
    i=0
    while IFS=$'\n' read line; do
        i=$((i+1))
        [[ "$i" -lt "$linestart" ]] && continue
        [[ "$lineend" != 0 && "$i" -gt "$lineend" ]] && continue
        echo "$i $line"
    done <"$1"
}

এবং তারপরে, ফাংশনটি কল করুন (উদাহরণ হিসাবে):

$ cd /var/run
$ fileread sshd.pid 10 20

পড়ুন! আমি পড়তে ব্যবহার করতে ভুলে গেছি (যা আমি বেশ কয়েকটি স্ক্রিপ্ট এবং একটি লাইনারে প্রতিদিন ব্যবহার করি) ... অনুস্মারকটির জন্য ধন্যবাদ!
অলিভিয়ার ডুলাক

1
@ অলিভিয়ারডুলাক উপস্থিত না হওয়া সত্ত্বেও, কাঁটাচামচ না করে একটি ফাইল ক্যাট করার আরেকটি উপায় echo "$(<FILENAME)"। এটি আপনার ksh সংস্করণে কাজ নাও করতে পারে, আমি জানি না কোন সংস্করণ রয়েছে।
গিলস

1
fileread()shcat()যে কোনও সোলারিস থেকে প্রাপ্ত ওএসের /etc/rc*.sh ফাইলগুলির মধ্যে স্ট্যান্ডেলোন ফাংশনের মতো দেখায় - src.illumos.org/source/xref/illumos-gate/usr/src/cmd/svc/shell/… দেখুন
হেন্ক ল্যাঙ্গভেল্ড

1
@ হেনকলেঙ্গেলওয়েড আমি ব্যবহার করিনি, অথবা এই জাতীয় ফাংশনটির আগের কোনও প্রয়োগ সম্পর্কে আমার ধারণা ছিল না। আমি পোস্ট করা কোনও কোড হ'ল আমার নিজস্ব স্বাধীন সৃষ্টি যা কোনও এবং সমস্ত ভুল সহ।
sorontar

@ সোরন্টার - আমি অনুমান করি যে আরও অনেক স্বাধীন সমাধান হবে, আপনার অবদানের জন্য ধন্যবাদ। আমার ধারণা shcat()সম্ভবত জনগণের সামনে প্রকাশিত প্রথম দিকের মধ্যে সম্ভবত। এটি ইতিমধ্যে সানোস 3 বা 4 এ ব্যবহৃত হয়েছিল কিনা জানুন
হেন্ক ল্যাঙ্গভেল্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.