কেন এই হার্ড-টু বোধগম্য 'ফাইন্ড' আদেশটি আমার সিস্টেমটি ভেঙে দিয়েছে?


0

আমি আর্চলিনাক্স ব্যবহার করছি এবং মূল পার্টিশনের স্থান বাঁচাতে আমি কোর ডাম্প ফাইল মুছে ফেলার চেষ্টা করছিলাম।

আমি সত্যিই এটি না বুঝে ইন্টারনেটে যেটি পেয়েছি তা বোকামি দিয়ে চালিয়েছি:

sudo find / -xdev -name core -ls -o -path "/lib*" -prune -exec rm {} \;

আমি এতক্ষণ যা বুঝতে পেরেছি তা থেকে। এটি '/' এর অধীনে কিছু না বাদে মূল 'কোর' এর মূল নাম থাকা মূল / / এর নীচে থাকা সমস্ত কিছু মুছে ফেলবে

এবং এটি আমি পেয়েছি আউটপুট

 399883 4 drwxr-xr-x 2 root root 4096 Sep 21 18:33 /usr/share/lightdm-webkit/themes/litarvan/packages/$sdk/lib/core
401640 4 drwxr-xr-x 11 root root 4096 Sep 21 18:33 /usr/share/lightdm-webkit/themes/litarvan/packages/angular2/src/core
992335 4 drwxr-xr-x 2 root root 4096 Dec 5 14:36 /usr/include/boost/log/core
999740 4 drwxr-xr-x 7 root root 4096 Dec 5 14:36 /usr/include/boost/spirit/home/classic/core
999834 4 drwxr-xr-x 3 root root 4096 Dec 5 14:36 /usr/include/boost/spirit/home/x3/core
999557 4 drwxr-xr-x 3 root root 4096 Dec 5 14:36 /usr/include/boost/phoenix/core
992045 4 drwxr-xr-x 2 root root 4096 Dec 5 14:36 /usr/include/boost/hana/fwd/core
992030 4 drwxr-xr-x 2 root root 4096 Dec 5 14:36 /usr/include/boost/hana/core
991963 4 drwxr-xr-x 2 root root 4096 Dec 5 14:36 /usr/include/boost/geometry/multi/core
991928 4 drwxr-xr-x 2 root root 4096 Dec 5 14:36 /usr/include/boost/geometry/core
991626 4 drwxr-xr-x 4 root root 4096 Dec 5 14:36 /usr/include/boost/beast/experimental/core
991622 4 drwxr-xr-x 4 root root 4096 Dec 5 14:36 /usr/include/boost/beast/core
991735 4 drwxr-xr-x 2 root root 4096 Dec 5 14:36 /usr/include/boost/contract/detail/inlined/core
991731 4 drwxr-xr-x 2 root root 4096 Dec 5 14:36 /usr/include/boost/contract/core
1000174 4 drwxr-xr-x 3 root root 4096 Dec 5 14:36 /usr/include/boost/xpressive/detail/core
991744 4 drwxr-xr-x 2 root root 4096 Dec 5 14:36 /usr/include/boost/core
1062959 4 drwxr-xr-x 3 root root 4096 Dec 6 01:31 /usr/lib/python3.7/site-packages/ranger/core
1088768 4 drwxr-xr-x 3 root root 4096 Oct 22 21:00 /usr/lib/python3.7/site-packages/core
450582 4 drwxr-xr-x 6 root root 4096 Dec 6 01:07 /usr/lib/ruby/gems/2.5.0/gems/rspec-core-3.8.0/lib/rspec/core
1008621 4 drwxr-xr-x 4 root root 4096 Dec 20 14:03 /usr/lib/modules/4.19.10-arch1-1-ARCH/kernel/sound/core
1008442 4 drwxr-xr-x 2 root root 4096 Dec 20 14:03 /usr/lib/modules/4.19.10-arch1-1-ARCH/kernel/drivers/usb/core
1007844 4 drwxr-xr-x 2 root root 4096 Dec 20 14:03 /usr/lib/modules/4.19.10-arch1-1-ARCH/kernel/drivers/infiniband/core
1008479 4 drwxr-xr-x 2 root root 4096 Dec 20 14:03 /usr/lib/modules/4.19.10-arch1-1-ARCH/kernel/drivers/video/fbdev/core
1007786 4 drwxr-xr-x 2 root root 4096 Dec 20 14:03 /usr/lib/modules/4.19.10-arch1-1-ARCH/kernel/drivers/gpu/drm/tinydrm/core
1008033 4 drwxr-xr-x 2 root root 4096 Dec 20 14:03 /usr/lib/modules/4.19.10-arch1-1-ARCH/kernel/drivers/mmc/core
1008005 4 drwxr-xr-x 2 root root 4096 Dec 20 14:03 /usr/lib/modules/4.19.10-arch1-1-ARCH/kernel/drivers/memstick/core
1008133 4 drwxr-xr-x 2 root root 4096 Dec 20 14:03 /usr/lib/modules/4.19.10-arch1-1-ARCH/kernel/drivers/net/ethernet/mellanox/mlx5/core
1008569 4 drwxr-xr-x 2 root root 4096 Dec 20 14:03 /usr/lib/modules/4.19.10-arch1-1-ARCH/kernel/net/core
415080 4 drwxr-xr-x 4 root root 4096 Sep 9 09:36 /usr/lib/python2.7/site-packages/wx-3.0-gtk3/wx/lib/pubsub/core
1074158 4 drwxr-xr-x 2 root root 4096 Sep 7 03:10 /usr/lib/python2.7/site-packages/radialnet/core

সুতরাং, সমস্ত ম্যাচ ডিরেক্টরি হয়, এবং যেহেতু আমি বিকল্প rmছাড়াই ব্যবহার করি -r, এটি ডিরেক্টরিগুলি মুছে ফেলা উচিত নয়, যার অর্থ এটি কোনও কিছুই মুছে ফেলা উচিত।

তবে, আমি কমান্ডটি চালানোর পরে, আমার সিস্টেমে বেশিরভাগ জিনিসগুলি ভেঙে গেছে, যেমন, zsh, i3। এবং আমি আমার পিসি রিবুট করার সময়, আমি একটি কর্নেল প্যানিক, খারাপ চাবুক মান বা কিছু পেয়েছিলাম।

আমার পৃথক মূল এবং হোম বিভাজন থাকায় আমি আবার ইনস্টল করতে পারি। তবে কেন আমি সিস্টেমটি ভেঙে দিয়েছি তা আমি খুব কৌতূহলী।


সংক্ষিপ্ত উত্তর: আপনার যে কমান্ডগুলি রয়েছে সেগুলি সম্পর্কে আপনাকে খুব খুব যত্নবান হওয়া দরকার । আপনার মত যদি কোনও সাপ আপনাকে মাশরুম খেতে দেয়। find-o
স্কট

আমি জানি -oএখন 'যৌক্তিক বা' এর অর্থ, তবে এখনও -pruneবিকল্পটি সম্পর্কে বিভ্রান্ত । আমি কি সমস্ত কিছু মুছে ফেলেছি যা নেই coreএবং লিবি বা এর অধীনে আছে ? /lib' and have নামে কোর-এর আওতায় ফাইল বাদে সব কিছু ?
রাশাদ

হুম। আমি আপনার প্রশ্নে কমান্ডটি তাত্ক্ষণিকভাবে দেখেছি এবং আমি ভেবেছিলাম কী ঘটছে তা আমি বুঝতে পেরেছি। কাছাকাছি পরীক্ষায়, আমি বুঝতে পারি না; কমপক্ষে পুরোপুরি না। দুর্ভাগ্যক্রমে, আমার এখনই তদন্ত করার সময় নেই। … (চালিয়ে যাওয়া)
স্কট

উত্তর:


0

findনির্দিষ্টকরণের কিছু প্রাসঙ্গিক টুকরো :

-xdev
প্রাথমিকটি সর্বদা সত্য হিসাবে মূল্যায়ন করবে; এটি পৃথক ডিভাইস আইডি থাকা অতীতের ডিরেক্টরিগুলিকে অবতরণ না করা সন্ধান করতে পারে […]। যদি কোনও -xdevপ্রাথমিক নির্দিষ্ট করা থাকে, তবে -xdevপ্রাথমিকভাবে মূল্যায়ন না করা হলেও এটি সম্পূর্ণ অভিব্যক্তির ক্ষেত্রে প্রযোজ্য ।

-prune
প্রাথমিকটি সর্বদা সত্য হিসাবে মূল্যায়ন করবে; এটি যদি ডিরেক্টরি হয় তবে এটি বর্তমান পথের নামটি নেমে আসবে না। [...]

[...]

নিম্নলিখিত অপারেটরগুলি (অগ্রাধিকার হ্রাসের ক্রমে) ব্যবহার করে প্রাইমারিগুলি একত্রিত করা যেতে পারে:

[...]

expression [-a] expression
প্রাথমিকের সংমিশ্রণ; অ্যান্ড অপারেটর দুটি প্রাইমারীর রচনাবলীর দ্বারা বোঝানো হয় বা alচ্ছিক -aঅপারেটর দ্বারা স্পষ্ট করে দেওয়া হয় । প্রথম এক্সপ্রেশনটি মিথ্যা হলে দ্বিতীয় প্রকাশটি মূল্যায়ন করা হবে না।

expression -o expression
প্রাথমিকের পরিবর্তন; ওআর অপারেটর। প্রথম অভিব্যক্তিটি সত্য হলে দ্বিতীয় প্রকাশটি মূল্যায়ন করা হবে না।

এখন আপনার কমান্ড (কেবল এটি দেখার জন্য):

find / -xdev -name core -ls -o -path "/lib*" -prune -exec rm {} \;

কিছু সিদ্ধান্ত এবং তথ্য:

  1. -xdevএমনকি সমস্ত কিছুর পরেও অংশে প্রযোজ্য -o
  2. কারণ juxtaposition (বা -a) পূর্ববর্তী -o, আপনার কমান্ড মত ( expression1 ) -o ( expression2 )( এই উত্তর তুলনা করুন )।
  3. আপনি যে সমস্ত আউটপুট দেখেছেন তা এসেছে -ls
  4. যখনই -lsকাজ করা হয়েছিল, প্রথম প্রকাশটি সত্য ছিল, তাই দ্বিতীয়টির মূল্যায়ন করা হয়নি (যার অর্থ আপনি যে ম্যাচগুলি দেখেছেন তা অপসারণ করা হয়নি)।
  5. -path "/lib*" এই বিষয়গুলির সাথে মেলে:
    • নামের সাথে lib*সরাসরি মিলছে ডিরেক্টরিগুলি /,
    • মিলে নামের সাথে অ ডিরেক্টরি lib*সরাসরি /,
    • প্রথম বুলেট পয়েন্ট থেকে ডিরেক্টরিগুলির ভিতরে থাকা সমস্ত অবজেক্ট (আপনার ক্ষেত্রে নয়, কারণ -prune)।

সুতরাং rmনীচের সমস্ত শর্ত পূরণ করে যে কোনও বস্তুর জন্য অনুরোধ করা হয়েছিল:

  1. এটি /(কারণ কারণে -xdev) একই ফাইল সিস্টেমের অন্তর্ভুক্ত ।
  2. এটি নামকরণ করা হয়নি core(কারণ কীভাবে -oকাজ করে)।
  3. এটি সরাসরি /এবং এর নামের সাথে মেলে lib*

আমি এই বিষয়গুলি মুদ্রণের জন্য আমার কুবুন্টুতে এটি চালাচ্ছি:

find / -xdev -name core -o -path "/lib*" -prune -print

এবং ফলাফল ছিল

/lib
/lib64
/lib32

এগুলির প্রত্যেকটি একটি ডিরেক্টরি, একা rm(ছাড়া -r) এটিকে সরাতে পারে না। আমি নিশ্চিত আমার ক্ষেত্রে আপনার আসল কমান্ডটি সিস্টেমটি ভেঙে দেবে না। তবে যদি কোনো মিলে যাওয়া বস্তুর একটি ডিরেক্টরি ছিল না, rmসম্ভবত এটি অপসারণ করা হবে।

এফএইচএস - ফাইল সিস্টেম হায়ারার্কি স্ট্যান্ডার্ড বলেছেন:

/lib32এবং /lib64গ্রন্থাগার ডিরেক্টরি হতে পারে এবং /libসেগুলির একটিতে একটি সিমিলিংক।

আমি অনুমান আপনার /libএকটি সিমবলিক লিঙ্ক হয়ে থাকতে পারে এবং rmএটি সরানোর কোন সমস্যা ছিল। এই অবস্থানটি অপরিহার্যভাবে ভাগ করা লাইব্রেরি এবং কার্নেল মডিউলগুলির জন্য (এফএইচএস বা এই উত্তর দেখুন ), আপনি আপনার সিস্টেমটি ভেঙে ফেলতে অবাক হওয়ার কিছু নেই। আমি নিশ্চিত হতে পারি না যে অন্য lib*কোনও ডিরেক্টরি বহির্ভূত ডিরেক্টরি নেই যা সরানো হয়েছিল; তবে আমি যদি ঠিকই থাকি /libতবে সম্ভবত সিস্টেমটি ঠিক করার জন্য আপনাকে অবশ্যই সিমিলিঙ্কটি পুনরায় তৈরি করা দরকার।

ইন খনি অন্য উত্তর প্রথম উপদেশ

100 বার লিখুন "আমি কমান্ডগুলি চালাব না আমি রুট হিসাবে বুঝতে পারি না"। :)

তবে দেখে মনে হচ্ছে আপনি ইতিমধ্যে আপনার পাঠটি শিখে ফেলেছেন।

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