আমি মুছে ফেলেছি / বিন / আরএম। আমি কীভাবে এটি পুনরুদ্ধার করব?


168

কেবল মজাদার জন্য, আমি ভেবেছিলাম যে আমি আমার রাস্পবেরি পাইতে রাস্পবিয়ান চলমান এই আদেশটি ব্যবহার করব:

sudo rm -f /bin/rm

আমি ভেবেছিলাম যে আমি কেবল পুনরায় ইনস্টল করতে পারি coreutils: আমি ভুল ছিলাম!

apt-get install --reinstall coreutilsএতে ত্রুটি দেয় dpkg, প্যাকেজটি সরাতে পারে না বলে জানিয়ে দেয় । উত্স থেকে সংকলন কাজ করে না কারণ Makefileব্যবহারগুলি rm

আমি কীভাবে একটি কাজ rmফিরে পেতে পারি ?


9
প্রতিটি .deb হ'ল একটি সংরক্ষণাগার যা আপনি আনপ্যাক করতে এবং খালি আরএমকে এক্সিকিউটেবলের / বিনে অনুলিপি করতে পারবেন।
স্কাইবা

1
এটি কি ওএস? লিনাক্স? ইউনিক্স? অন্যকিছু? যদি লিনাক্স, কোন ডিস্ট্রো? 64bit? 32?
টেরডন

12
ln -s /usr/lib/initramfs-tools/bin/busybox /bin/rm(বা /bin/busybox, বা এটি একটি
আরআরড

10
রাস্পবেরি পাই এর একটি এসডি মেমরি কার্ডে ওএস রয়েছে যাতে আপনি কেবল অন্য মেশিনের প্যাকেজ থেকে আরএম বাইনারি বের করতে পারেন এবং এটি কার্ডে আবার অনুলিপি করতে পারেন। যাই হোক না কেন, হাসিখুশি স্টান্ট আপনি সেখানে
খ্রিস্টান

15
@ user645715 37 জন মানুষ এই প্রশ্নকে মজাদার বলে মনে করেছে।
ব্রিলিয়ান্ড

উত্তর:


194
sudo touch /bin/rm && sudo chmod +x /bin/rm
apt-get download coreutils
sudo dpkg --unpack coreutils*

এবং আর কখনও না।


আপনি অ্যাপো-গেটের সাথে সুডো ব্যবহার করেননি কেন?

কারণ downloadআদেশের এটির প্রয়োজন নেই:

download
ডাউনলোড বর্তমান ডিরেক্টরিতে প্রদত্ত বাইনারি প্যাকেজটি ডাউনলোড করবে

সুতরাং, আপনি যদি কোনও ডিরেক্টরিতে না থাকেন তবে আপনি লিখতে পারবেন না, আপনাকে ব্যবহার করার দরকার নেই sudoএবং এটি পরে সমস্যা হতে পারে যেহেতু rootপ্যাকেজটি সরিয়ে / সরানোর জন্য আপনার অনুমতি প্রয়োজন ।



31
@ এভিপ্লার নং, এক্ষেত্রে না।
ব্রিয়াম

5
মনে রাখবেন যে একটি খালি এক্সিকিউটেবল ফাইল শেল স্ক্রিপ্ট হিসাবে কার্যকর হয় যা কিছুই করে না। সুতরাং যে চাওয়া মানে /bin/sh। একটি কাজ করা সহজ sudo ln -s true /bin/rmবা আরও ভাল কাজ sudo ln -s busybox /bin/rmকরতে পারে rm
স্টাফেন চেজেলাস

1
apt-getআপনি যদি कोरুটিলেটগুলি ডাউনলোড না করেন তবে সুডোর দরকার আছে কারণ অন্যথায় এটি /varযেখানে ডাউনলোড করা ফাইলগুলি ডেবিয়ান সংরক্ষণ করে সেখানে লিখতে সক্ষম হবে না ।
ক্রিস্টোফার ইভস

3
@ ক্রিস্টোফার ভুল হয়েছে ... apt-getপ্যাকেজটি সর্বদা বর্তমান ডিরেক্টরিতে ডাউনলোড করে (হ্যাঁ, আপনি এমনকি ব্যবহার করলেও sudo), সুতরাং আপনি যদি কোনও ডিরেক্টরিতে না থাকেন তবে আপনার প্রয়োজন মতো আপনার ব্যবহারকারী হিসাবে লিখতে পারবেন না sudo। ম্যান পৃষ্ঠাগুলি পরীক্ষা করুন।
ব্রায়াম

106

debianএবং এর ডেরিভেটিভস (এবং সম্ভবত বেশিরভাগ অন্যান্য বিতরণ) আসে busyboxযা ব্যবহার করে initramfs

busybox একক এক্সিকিউটেবলের মধ্যে বেশিরভাগ মূল কমান্ড লাইন ইউটিলিটিগুলি বান্ডিল করে।

আপনি এখানে অস্থায়ীভাবে সিমিলিংক /bin/rmকরতে পারেন /bin/busybox:

ln -s busybox /bin/rm

একটি কাজ পেতে rm(যার পরে আপনি নিজের কাজটি করতে পারেন apt-get install --reinstall coreutils)।

busyboxঅন্তর্ভুক্ত থাকা অন্যান্য সমস্ত ইউটিলিটির জন্য একই পদ্ধতি ব্যবহার করা যেতে পারে । এই তালিকা এক থেকে অন্য স্থাপনায় পরিবর্তিত হয়। আপনি তালিকাটি পেতে পারেন busybox --list

তবে খেয়াল করুন যে এগুলি সম্পর্কিত ইউটিলিটির সীমিত সংস্করণ। তারা কখনও কখনও জিএনইউ এক্সটেনশানগুলিকে সমর্থন করে তবে সাধারণত তা হয় না এবং তাদের মধ্যে কিছু কিছু এমনকি সমস্ত মানক / পসিক্স বৈশিষ্ট্যগুলিও সমর্থন করে না (কিছু বৈশিষ্ট্য সংকলনের সময় সক্ষম / অক্ষম করা যেতে পারে)।

বিকল্পভাবে, আপনি zshএর বিল্টিন আরএম ব্যবহার করতে পারেন :

#! /bin/zsh
zmodload zsh/files
rm "$@"

zsh/filesমডিউল কয়েক অতিরিক্ত builtin কমান্ড প্রদান করে ( rm, mv, ln, mkdir, rmdir, chown, chmod, sync)। এটি এই ধরণের পরিস্থিতিতে বা যখন আপনি আরও প্রক্রিয়া তৈরি করতে পারবেন না তবে ইন্টারেক্টিভ zshচলমান থাকে তখন এটি কার্যকর।

ksh93অতিরিক্ত / ঐচ্ছিক কমান্ড buitin একটি নম্বর আছে, কিন্তু না rmতাদের মধ্যে ( basename, chmod, dirname, getconf, head, mkdir, logname, cat, cmp, cut, uname, wc, sync)। আপনি তাদের সাথে অনুরোধ করতে পারেন:

command /opt/ast/bin/the-command

একটি ksh93স্ক্রিপ্টে।


5
দুর্দান্ত উত্তর। আমাকে বিস্মিত করে তোলে যদি ওপিকে সত্যিকার অর্থেই পুনরায় ইনস্টল করা দরকার হয় rm। ;-)
জোয়েটউইল

প্রকৃতপক্ষে. আসলে, এটি আমাকে কোরিউটিলগুলিও মুছে ফেলার বিষয়ে ভাবতে বাধ্য করে ... :-)
ড্যামন

4
@ ড্যামন: কোর্টিলগুলি ব্যস্তবক্সের তুলনায় বেসিক কমান্ডগুলির বর্ধিত সংস্করণ সরবরাহ করে, তাই ব্যস্তবক্সটি এসইএসভি 3 প্রয়োজনীয়তার সাথে মেলে যথেষ্ট হতে পারে, তবে কোর্টিলগুলি আরও বৈশিষ্ট্যযুক্ত; উদাহরণস্বরূপ ব্যস্তবক্সে আই 18 এন সমর্থন সীমিত রয়েছে।
লাইওরি

2
@ লিওরি: আমি অর্ধ-রসিকতা করছি, যদিও 10-15 বছর আগে, সম্ভবত আমি সম্ভবত এটি করতে পারতাম (যুক্ত "বৈশিষ্ট্যগুলি", বিশেষত i18n , আমার মতে কোনও সুবিধা নয় - অনিবার্য অনুবাদসমূহ এবং এমন সুইচগুলি ব্যবহার করতে শেখা যা অপ্রত্যাশিতভাবে অন্য কম্পিউটারে স্ক্রিপ্টগুলি ভেঙে দেয়, ধন্যবাদ নেই)। যাইহোক, আজকাল, আমি যদি খুশি যে আমি যদি কোনও লিনাক্স সিস্টেম কোনও কিছু স্পর্শ না করে এবং সিস্টেম / কনফিগার ফাইল / বাইনারিগুলি সরিয়ে / মুছতে / মুছতে না পারা সহজভাবে ইনস্টল করে তবেই আমি খুশি। দুঃখের বিষয়, এখনও প্রায়শই যথেষ্ট হয় না, তাই আমি অবশ্যই এমন কিছু স্পর্শ করছি না যা কাজ করে :-)
ড্যামন

29

ক্ষেত্রে apt-getবা dpkgপ্রয়োজনে rmএবং rmপুনরায় ইনস্টল করা সম্ভব নয়, তবে আপনি এর rmসাথে অনুকরণ করতে পারেন perl:

cat > /bin/rm << "EOF"
#!/usr/bin/perl
foreach (@ARGV) { unlink $_ or warn "$@:$!"; }
EOF
chmod +x /bin/rm

3
মনে রাখবেন যে এটি হ্যান্ডেল করে না -r, এবং এটি সঠিক প্রস্থান স্থিতি ফেরত না দেয় তা সমস্যার কারণ হতে পারে।
স্টাফেন চেজেলাস

6
@ স্টাফেনচাজেলাস ওপিটিকে apt-get install --reinstall coreutilsস্বাভাবিক অবস্থায় ফিরিয়ে আনার পক্ষে যথেষ্ট ।
terdon

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

আপনার কাছে অনুকরণ পারে rmসঙ্গে mv(করতে 'ট্র্যাশ বিন')
sendmoreinfo

14

আমি rmঅন্য মেশিন থেকে সঠিক বাইনারি পাওয়ার চেষ্টা করব এবং তারপরে scpপাই বা অনুলিপি করার জন্য কিছু ব্যবহার করব । এটি অবশ্যই scpইতিমধ্যে যদি ইনস্টল থাকে তবেই কাজ করে ...

যদি scpউপলভ্য না ncথাকে তবে প্রেরণকারী পক্ষের (ওরফে নেটক্যাট) এবং প্রাপ্তির দিকটিতে /dev/tcp/HOST/PORTপুনর্নির্দেশ সহ ব্যাশও কাজ করতে পারে।

আপনার যদি অন্য কোনও রাস্পবিয়ান মেশিন না থাকে তবে আপনি কোর্টিলস প্যাকেজটি পুনরুদ্ধার করতে পারেন ( .debসঠিক সংস্করণটি পেতে পারেন ) এবং এটি দিয়ে আনব্যাক করুন ( দেবিয়ানdpkg-deb / উবুন্টু / মিন্টে /… এমনকি এটি পাইতে না থাকলেও):

dpkg-deb --fsys-tarfile coreutils*.deb | tar xf - ./bin/rm

আপনার যদি ডিপিকেজি সহ অন্য কোনও মেশিন না থাকে তবে আপনি ফাইলটি ar(বাইনুটিলস ডেভলপমেন্ট সরঞ্জাম থেকে) এবং টার দিয়ে এক্সট্রাক্ট করতে পারেন :

ar p coreutils*.deb data.tar.gz  | tar xzf - ./bin/rm

8
যদি scpউপলভ্য না থাকে তবে প্রেরণকারী পক্ষের nc(ওরফে netcat) এবং গ্রহণকারী পক্ষের পুনঃনির্দেশ bashসহ /dev/tcp/HOST/PORTএটিও কাজ করতে পারে।
এমভিজি

13

এটি ডেবিয়ান (বা উবুন্টু) হওয়ায় ফাইলগুলি পাওয়ার সহজ উপায় রয়েছে:

mkdir /tmp/coreutils
sudo dpkg-deb --extract /var/cache/apt/archives/coreutils_ [tab complete for correct version].deb /tmp/coreutils
sudo cp /tmp/coreutils/bin/rm /bin

এটি কাজ করে কারণ অ্যাপল-ইন্সটল করার আগে কোর্টিলস.ডেব ডাউনলোড করেছেন এবং ডিপিকজি-ডেব কোনও ডেবিয়ান-ভিত্তিক সিস্টেমে থাকার নিশ্চয়তা রয়েছে।

সরাসরি / টিএমপি-তে উত্তোলন করবেন না, এটি পিতামাতার ডিরেক্টরিতে অনুমতি পরিবর্তন করে।

আপনি যদি চারপাশে খেলতে যাচ্ছেন তবে আপনি প্যাকেজটি ব্যস্তবক্স-স্ট্যাটিকটি ইনস্টল করতে চাইতে পারেন, যা আপনি সমস্ত কিছু ভাঙ্গলেও এমনকি কাজ করে।

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