අහම්බෙන් rm -rf / * වළක්වා ගන්නේ කෙසේද?


166

මම rm -rf /*අහම්බෙන් දිව්වා , නමුත් මම අදහස් කළේ rm -rf ./*(කප්පාදුවෙන් පසු තරුව සැලකිල්ලට ගන්න).

alias rm='rm -i'හා --preserve-rootපෙරනිමියෙන් මාව බේරගන්න නැත, ඒ නිසා මෙම කිසිදු ස්වයංක්රීය ආරක්ෂක තිබේද?


මම මූල නොවූ අතර වහාම විධානය අවලංගු කළෙමි, නමුත් මගේ බෑෂ් විමසුම දැනටමත් කැඩී ඇති බව මා දුටු නිසා කොතැනක හෝ යම් ලිහිල් අවසරයක් තිබුනි. මට අවසර මත යැපීමට සහ මූල නොවීමට අවශ්‍ය නැත (මට එකම වැරැද්ද කළ හැකිය sudo), සහ පද්ධතියේ කොතැනක හෝ නැතිවූ එක් ගොනුවක් නිසා අද්භූත දෝෂ සඳහා දඩයම් කිරීමට මට අවශ්‍ය නැත, එබැවින් උපස්ථ සහ sudoහොඳයි , නමුත් මෙම විශේෂිත අවස්ථාව සඳහා වඩා හොඳ යමක් මම කැමතියි.


දෙවරක් සිතීම සහ මොළය භාවිතා කිරීම ගැන. මම එය ඇත්ත වශයෙන්ම භාවිතා කරමි! නමුත් මම එය භාවිතා කරන්නේ විවිධ කරුණු 10 ක් සම්බන්ධ සංකීර්ණ ක්‍රමලේඛන කාර්යයක් විසඳීමට ය. මම මෙම කර්තව්‍යයේ ගැඹුරින් ගිලී සිටිමි, කොඩි සහ මාර්ග පරීක්ෂා කිරීම සඳහා මොළ ශක්තියක් ඉතිරිව නැත, විධාන සහ තර්ක අනුව මම නොසිතමි, 'හිස් ධාරා ඩිර්' වැනි ක්‍රියාවන් අනුව මම සිතමි. මගේ මොළයේ විවිධ කොටස් ඒවා විධාන වලට පරිවර්ථනය කරන අතර සමහර විට එය වැරදි කරයි. පරිගණකය ඒවා නිවැරදි කිරීමට මට අවශ්‍යයි, අවම වශයෙන් භයානක ඒවා.


14
FYI, ඔබ සිටි ඕනෑම ඩිරෙක්ටරියක් rm -rf . /mydirවෙනුවට ඔබට කළ හැකි rm -rf ./mydirඅතර මරා දැමිය හැකිය. මෙය බොහෝ විට සිදුවන බව මට පෙනේ.
user606723

28
තුවක්කු ප්‍රතිසමයක් භාවිතා කිරීම සඳහා, කරුණාකර මෙම තුවක්කුව මා ඉලක්ක කරන්නේ ගින්නෙන් නොවන බව හඳුනා ගැනීමට සලස්වන්න, නමුත් තුවක්කුව මගේ පාමුලට ඉලක්ක නොකිරීම පිළිබඳ කිසිදු වගකීමක් මට අවශ්‍ය නැත. තුවක්කු සහ පරිගණක මෝඩ වන අතර ඔබ මෝඩ දෙයක් කළහොත් ඔබට මෙම ප්‍රති .ල ලැබෙනු ඇත. තුවක්කු සාදෘශ්‍යය අනුගමනය කිරීමෙන්, සුපරීක්ෂාකාරී වීම සහ පුහුණුවීම හැර අන් කිසිවක් ඔබට රිදවීම වළක්වන්නේ නැත.
slillibri

76
lslillibri rmඑය තුවක්කුවක් නොව, එය පරිගණක වැඩසටහනක් වන අතර, පරිශීලකයා වැදගත් ලිපිගොනු මකා දමා අනතුරු ඇඟවීමක් කිරීමට යන බව තීරණය කිරීමට එය බුද්ධිමත් විය හැකිය (ඇත්ත වශයෙන්ම ඔබ rm -rf /තරුවක් නොමැතිව කිරීමට උත්සාහ කරන්නේ නම් ).
වැලන්ටින් නෙම්සෙව්

82
l ස්ලිලිබ්‍රි තුවක්කු වලට ආරක්ෂිතයි. rmවිධානයට වඩා හොඳ ආරක්ෂාවක් ලබා දෙන්නේ කෙසේදැයි විමසීම පරිපූර්ණ නීත්‍යානුකූල sysadmin ප්‍රශ්නයකි.
ගිලෙස්ගේ SO- නපුරු වීම නවත්වන්න '

23
sudo rm / bin / rm නිර්දේශ කර නැත, නමුත් බොහෝ rm වලක්වනු ඇත :-)
Paul

Answers:


222

මා අනුගමනය කරන එක් උපක්‍රමයක් #නම් rmවිධානය භාවිතා කරමින් ආරම්භය තැබීමයි .

root@localhost:~# #rm -rf /

මෙය rmවැරදි ගොනුවක් / නාමාවලියක අහම්බෙන් ක්‍රියාත්මක වීම වළක්වයි . සත්‍යාපනය කළ පසු, #මුල සිට ඉවත් කරන්න . මෙම උපක්‍රමය ක්‍රියාත්මක වන්නේ, Bash හි ආරම්භ වන #වචනයක් එම වචනය සහ එම පේළියේ ඉතිරිව ඇති සියලුම අක්ෂර නොසලකා හැරීමට හේතු වන බැවිනි. එබැවින් විධානය සරලව නොසලකා හරිනු ලැබේ.

හෝ

ඔබට වැදගත් නාමාවලියක් වළක්වා ගැනීමට අවශ්‍ය නම් තවත් එක් උපක්‍රමයක් තිබේ.

-iඑම නාමාවලියෙහි නම් කර ඇති ගොනුවක් සාදන්න . එවැනි අමුතු ගොනුවක් නිර්මාණය කරන්නේ කෙසේද? භාවිතා කිරීම touch -- -iහෝtouch ./-i

දැන් උත්සාහ කරන්න rm -rf *:

sachin@sachin-ThinkPad-T420:~$ touch {1..4}
sachin@sachin-ThinkPad-T420:~$ touch -- -i
sachin@sachin-ThinkPad-T420:~$ ls
1  2  3  4  -i
sachin@sachin-ThinkPad-T420:~$ rm -rf *
rm: remove regular empty file `1'? n
rm: remove regular empty file `2'? 

මෙන්න *පුළුල් -iවිධාන රේඛාවේ කිරීමට, එසේ ඔබේ විධාන අවසානයේ බවට පත් rm -rf -i. මේ අනුව විධානය ඉවත් කිරීමට පෙර විමසනු ඇත. ඔබට මෙම ගොනුව ඔබගේ කළ හැකි /, /home/, /etc/, ආදිය

හෝ

--preserve-rootවිකල්පයක් ලෙස භාවිතා කරන්න rm. තුළ rmනව ඇතුළත් coreutilsඇසුරුම්, මෙම විකල්පය ප්රකෘතිය වේ.

--preserve-root
              do not remove `/' (default)

හෝ

ආරක්ෂිත- rm භාවිතා කරන්න

වෙබ් අඩවියෙන් උපුටා ගැනීම:

Safe-rm යනු වැදගත් ලිපිගොනු අහම්බෙන් මකාදැමීම වැළැක්වීම සඳහා / බින් / ආර්එම් එතීමෙන් ආදේශ කිරීම වැළැක්වීම සඳහා වන අතර එය කිසි විටෙකත් ඉවත් නොකළ යුතු ගොනු සහ නාමාවලි වල වින්‍යාසගත කළ හැකි අසාදු ලේඛනයට එරෙහිව ලබා දී ඇති තර්ක පරීක්ෂා කරයි.

මෙම ආරක්ෂිත ලිපිගොනු හෝ නාමාවලි වලින් එකක් මකා දැමීමට උත්සාහ කරන පරිශීලකයින්ට එසේ කිරීමට නොහැකි වන අතර ඒ වෙනුවට අනතුරු ඇඟවීමේ පණිවිඩයක් පෙන්වනු ඇත:

$ rm -rf /usr
Skipping /usr

10
safe-rm ඉතා හොඳ පෙනුමක්, දැන් ඒ ගැන සොයා බලයි ...
වැලන්ටින් නෙම්සෙව්

46
safe-rm පිළිවෙලට තිබේ. එසේම එය -iගොනුව සමඟ නව උපක්‍රමයක් වේ . හාහ්. මෝඩ බැෂ්.
එරික්ආර්

5
යුනික්ස් වලින් කරන ලද උපක්‍රම මොනවාදැයි පුදුමයි.
වර්නර්සීඩී

12
එය බුද්ධිමත් ය. මන්ත්‍ර ගුරුකම් වනු ඇතtouch -- -rf
මිර්සියා වට්කොවිචි

7
Ach සචින් ඩිවෙකර් මෙම පිළිතුර මෙතරම් ඉහළ ඡන්දයක් ලබාගත්තේ කෙසේද? safe-rmහා ---preserve-rootහරි යෝජනා, නමුත් prepending #ඇත්තටම සියල්ල සඵල ඇති බවක් පෙනෙන්ට නැත. මගේ සැබෑ ඉඟටිය නම්, මෙම විශේෂ -iලිපිගොනු ව්‍යාපාරය සමඟ වන අතර එය සරලවම නරක උපදෙස් වේ ! අමුතු නම් සහිත ලිපිගොනු සමඟ ඔබේ ගොනු පද්ධතිය පැටවීම සැබවින්ම ප්‍රයෝජනවත් නොවේ, විශේෂයෙන් සරල, effective ලදායී, සාමාන්‍ය විසඳුමක් findවිධානය භාවිතා කර පෙරදසුන් කර මකාදැමීම සඳහා: find | lessසහ පසුව find -delete.
aculich

48

ඔබේ ගැටලුව:

මම අහම්බෙන් rm -rf / * දිව්වා, නමුත් මම අදහස් කළේ rm -rf ./* (කප්පාදුවෙන් පසු තරුව සැලකිල්ලට ගන්න).

විසඳුම: එසේ නොකරන්න! පුහුණුවීමේ කාරණයක් ලෙස, ./මාර්ගයක ආරම්භයේ දී භාවිතා නොකරන්න . කප්පාදුව විධානයට කිසිදු වටිනාකමක් එක් නොකරන අතර එය ව්‍යාකූලත්වයක් ඇති කරයි.

./*මෙයින් අදහස් කරන්නේ එකම දෙයයි *, එබැවින් ඉහත විධානය වඩා හොඳින් ලියා ඇත්තේ:

rm -rf *

මෙන්න අදාළ ගැටලුවක්. පහත දැක්වෙන ප්‍රකාශනය මම බොහෝ විට දකිමි, එහිදී යමෙකු උපකල්පනය කළේ FOOඑය යම් දෙයකට සකසා ඇති බවයි /home/puppies. ප්‍රධාන මෘදුකාංග වෙළෙන්දෙකුගේ ලියකියවිලි වලින් මම මෙය අද දුටුවෙමි.

rm -rf $FOO/

නමුත් FOOසකසා නොමැති නම් , මෙය rm -rf /ඔබේ පද්ධතියේ ඇති සියලුම ගොනු ඉවත් කිරීමට උත්සාහ කරනු ඇත. පසුපස කප්පාදුව අනවශ්‍යය, එබැවින් ප්‍රායෝගිකව එය භාවිතා නොකරන්න.

පහත දැක්වෙන දේ එකම දේ කරනු ඇති අතර ඔබේ පද්ධතිය දූෂිත වීමට ඇති ඉඩකඩ අඩුය:

rm -rf $FOO

මම මෙම ඉඟි අමාරුවෙන් ඉගෙන ගත්තා. මීට වසර 14 කට පෙර මගේ පළමු සුපර් යූසර් ගිණුම ඇති විට, මම අහම්බෙන් rm -rf $FOO/ෂෙල් පිටපතක් තුළට දිව ගොස් පද්ධතියක් විනාශ කළෙමි . අනෙක් සිසැඩ්මින්වරු 4 දෙනා මේ දෙස බලා, 'ඔව්. හැමෝම ඒක එක පාරක් කරනවා. දැන් මෙන්න ඔබේ ස්ථාපන මාධ්‍යය (නම්‍ය තැටි 36). ගිහින් ඒක හදන්න. '

මෙහි අන් මිනිසුන් මෙන් විසඳුම් නිර්දේශ --preserve-rootහා safe-rm. කෙසේ වෙතත්, මෙම විසඳුම් සියලුම Un * xe- ප්‍රභේද සඳහා නොපවතින අතර සොලාරිස්, ෆ්‍රීබීඑස්ඩී සහ මැකෝස්එක්ස් මත ක්‍රියා නොකරනු ඇත. ඊට අමතරව, safe-rmඔබ භාවිතා කරන සෑම ලිනක්ස් පද්ධතියකම අමතර පැකේජ ස්ථාපනය කිරීම අවශ්‍ය වේ. ඔබ විශ්වාසය තබන්නේ නම්, ඔබ safe-rmනව රැකියාවක් ආරම්භ කරන විට සහ ඔවුන් safe-rmස්ථාපනය කර නොමැති විට කුමක් සිදුවේද ? මෙම මෙවලම් කිහිලිකරුවකි, දන්නා පෙරනිමි මත විශ්වාසය තබා ඔබේ වැඩ පුරුදු වැඩි දියුණු කිරීම වඩා හොඳය.


22
මගේ මිතුරා මට කිව්වා ඔහු කවදාවත් පාවිච්චි කරන්නේ නැහැ කියලා rm -rf *. ඔහු සෑම විටම පළමු වරට නාමාවලිය වෙනස් කරන අතර නිශ්චිත ඉලක්කයක් භාවිතා කරයි. හේතුව, ඔහු කවචයේ ඉතිහාසය බොහෝ සෙයින් භාවිතා කරන අතර, ඔහුගේ ඉතිහාසයේ එවැනි විධානයක් තිබීම වැරදි වේලාවකදී මතු වනු ඇතැයි ඔහු කනස්සල්ලට පත්ව සිටී.
haggai_e

5
rm -rf $FOOඔබට අවශ්‍ය නම් උදව් නොකරනු ඇත rm -rf $FOO/$BAR. cd $FOO && rm -rf $BARඋදව් වනු ඇත, එය තව දුරටත් දිගු වුවද.
වික්ටර් සර්ජියන්කෝ

6
IctVictorSergienko, bash සමඟ, නියම කරන්නේ කෙසේද ${FOO:?}, rm -rf ${FOO:?}/සහ මෙන් rm -rf ${FOO:?}/${BAR:?}. එය කිසි විටෙකත් පරිවර්තනය කිරීමෙන් වලක්වනු ඇත rm -rf /. මගේ පිළිතුරේ මේ ගැන තවත් තොරතුරු කිහිපයක් මා සතුව ඇත .
Acumenus

1
@haggai_e: මෙම මාතෘකාව පිළිබඳ හොඳම උපදෙස් වලින් එකක් ලෙස මම දකිමි. මම මගේ ඇඟිල්ල පුළුස්සා rm -rf *දැමුවේ for for loop එකකින් වැරදීමකින් වැරදි ඩිරෙක්ටරියට වෙනස් වී වෙනත් දෙයක් මකා දැමීමෙනි. මම නිශ්චිත ඉලක්කයක් භාවිතා කළේ නම් වැරදි දේ මකා දැමීමට ඊට වඩා කුඩා අවස්ථාවක් ලැබෙනු ඇත.
පොහොසත්

1
IctVictorSergienko $FOOහිස් $BARනම් හෝ එසේ නම් .හෝ /ඔබගේ නව හිස් නිවාස නාමාවලියට සුබ පැතුම්.
ඇන්ඩ්‍රේ වර්ලාන්ග්

33

මෙය "සර්වර්ෆෝල්ට්" හි ඇති බැවින්, මම මෙය පැවසීමට කැමතියි:

ඔබට විශාල පරිපාලක / පරිශීලකයින් කණ්ඩායමක් සමඟ සේවාදායකයන් දුසිම් ගණනක් හෝ වැඩි ගණනක් තිබේ නම්, යමෙකු යන්නේ rm -rfහෝ chownවැරදි නාමාවලියකට ය.

බලපෑමට ලක්වූ සේවාව අවම එම්ටීටීආර් සමඟ නැවත ලබා ගැනීම සඳහා ඔබට සැලසුමක් තිබිය යුතුය.


5
අයකර ගැනීම් පුහුණු කිරීම සඳහා ඔබ VM හෝ අමතර කොටුවක් භාවිතා කළ යුතුය - ක්‍රියා නොකළ දේ සොයාගෙන එම සැලැස්ම පිරිපහදු කරන්න. අපි දෙසතියකට වරක් නැවත පණගැන්වීමකට පිවිසෙමු - මන්ද අපගේ ගොඩනැගිල්ලේ විදුලිය ඇනහිටීම් සිදුවී ඇති අතර සෑම අවස්ථාවකදීම එය වේදනාකාරී වී ඇත. අපි ආදිය ස්වයංක්රීය / විසඳුමක් init.d පිටපත් කිරීමට ඇති බිටු ඉගෙන එක් එක් කාල - සියලු රාක්ක සැලසුම් වසා දැමීමේ කිහිපයක් කිරීමෙන්, අපි දැන් පැය 3 ක් පමණ පමණ ධාවනය දින කිහිපයක් එය කපා හැර තිබෙනවා
ඩැනී ස්ටේප්ල්

VM එකකින් මෙම විධානය උත්සාහ කරන්න. එය සිත්ගන්නා සුළුය! නමුත් පළමුව ඡායාරූපයක් ගන්න.
ස්ටෙෆාන් ලසිව්ස්කි

23

හොඳම විසඳුම් වන්නේ පුරුදු rmසෘජුවම භාවිතා නොකිරීමට වෙනස් කිරීමයි .

එක් ප්‍රවේශයක් නම් echo rm -rf /stuff/with/wildcards*පළමුව ධාවනය කිරීමයි. ආදේශක කාඩ්පත්වල ප්‍රතිදානය සාධාරණදැයි පරීක්ෂා කරන්න, ඉන්පසු පෙර විධානය ක්‍රියාත්මක කිරීමට ෂෙල් ඉතිහාසය භාවිතා කරන්න echo.

තවත් ප්‍රවේශයක් නම්, echoඔබ මකා දැමිය යුතු දේ අන්ධ ලෙස පැහැදිලිව පෙනෙන අවස්ථාවන්ට විධානය සීමා කිරීමයි . නාමාවලියක ඇති සියලුම ගොනු ඉවත් කරනවා වෙනුවට, නාමාවලිය ඉවත් කර නව එකක් සාදන්න. හොඳ ක්‍රමයක් නම්, පවතින නාමාවලිය නැවත නම් කිරීම DELETE-foo, පසුව fooසුදුසු අවසරයන් සහිත නව නාමාවලියක් නිර්මාණය කිරීම සහ අවසානයේ ඉවත් කිරීම ය DELETE-foo. මෙම ක්‍රමයේ අතුරු ප්‍රතිලාභයක් නම් ඔබේ ඉතිහාසයේ ඇතුළත් කර ඇති විධානයයි rm -rf DELETE-foo.

cd ..
mv somedir DELETE-somedir
mkdir somedir                 # or rsync -dgop DELETE-somedir somedir to preserve permissions
ls DELETE-somedir             # just to make sure we're deleting the right thing
rm -rf DELETE-somedir

ඔබට ඩිරෙක්ටරිය ඉතිරිව තිබිය යුතු නිසා (එය සැමවිටම පැවතිය යුතු නිසා හෝ එය ප්‍රතිනිර්මාණය කිරීමට ඔබට අවසර නොමැති නිසා) ලිපිගොනු පොකුරක් මකා දැමීමට ඔබ සැබවින්ම අවධාරනය කරන්නේ නම්, ගොනු වෙනත් නාමාවලියකට ගෙන ගොස් එම නාමාවලිය මකන්න .

mkdir ../DELETE_ME
mv * ../DELETE_ME
ls ../DELETE_ME
rm -rf ../DELETE_ME

(එම Alt+ .යතුර ඔබන්න.)

ඩිරෙක්ටරියක් ඇතුළත සිට මකා දැමීම ආකර්ශනීය වනු ඇත, මන්ද rm -rf .කෙටි නිසා යතුරු ලියනය වීමේ අවදානම අඩුය. අවාසනාවකට මෙන් සාමාන්‍ය පද්ධති ඔබට එය කිරීමට ඉඩ නොදේ. rm -rf -- "$PWD"යතුරු ලියනය වීමේ වැඩි අවදානමක් ඇති ඔබට ඒ වෙනුවට කළ හැකි නමුත් ඒවායින් බොහොමයක් කිසිවක් ඉවත් කිරීමට හේතු වේ. මෙය ඔබගේ ෂෙල් ඉතිහාසයේ භයානක විධානයක් තබන බවට පරිස්සම් වන්න.

ඔබට හැකි සෑම විටම අනුවාද පාලනය භාවිතා කරන්න. ඔබ rm, ඔබ cvs rmහෝ කුමක් වුවත්, එය අහෝසි කළ නොහැක.

ඩිරෙක්ටරියක ඇති rmසියළුම ලිපිගොනු ලැයිස්තුගත කරන තර්කයක් සමඟ ධාවනය වීමට පෙර Zsh ඔබට විමසීමට විකල්ප ඇත : rm_star_silent(පෙරනිමියෙන්) ක්‍රියාත්මක කිරීමට පෙර විමසනු ඇත rm whatever/*, සහ rm_star_wait(පෙරනිමියෙන් අක්‍රීය) තත්පර 10 ක ප්‍රමාදයක් එකතු කර ඔබට තහවුරු කළ නොහැක. කිසියම් නාමාවලියක ඇති සියලුම ලිපිගොනු ඉවත් කිරීමට ඔබ අදහස් කරන්නේ නම් මෙය සීමිත ප්‍රයෝජනයකි, මන්ද ඔබ දැනටමත් විමසුම අපේක්ෂා කරනු ඇත. සඳහා යතුරු ලියනය වැළැක්වීමට එය උදව් rm foo *වේ rm foo*.

rmවිධානය වෙනස් කිරීම සම්බන්ධ තවත් බොහෝ විසඳුම් පාවෙමින් තිබේ. මෙම ප්‍රවේශයේ සීමාවක් නම්, යම් දිනෙක ඔබ සැබෑ යන්ත්‍රයක් මත සිටින rmඅතර ඔබ ස්වයංක්‍රීයව අමතනු ඇත rm, තහවුරු කිරීමක් අපේක්ෂා කිරීමෙන් ආරක්ෂිතයි… ඊළඟට ඔබ උපස්ථ ප්‍රතිස්ථාපනය කරනු ඇත.


mv -t DELETE_ME -- *තව ටිකක් මෝඩයි.
ටෝබු

Iles ගයිල්ස් rmකෙලින්ම භාවිතා නොකිරීම හොඳ උපදෙස්! ඊටත් වඩා හොඳ විකල්පයක් වන්නේ විධානය භාවිතා කිරීමයිfind .
aculich

1
ඔබට ඩිරෙක්ටරිය රැඳී සිටීමට අවශ්‍ය නම් ඔබට එය සරලව කළ හැකි find somedir -type f -deleteඅතර එය භාවිතා කිරීමෙන් සියලුම ලිපිගොනු මකා දැමිය හැකි somedirනමුත් නාමාවලිය සහ සියලුම උප බහලුම් වලින් ඉවත් වේ.
aculich

19

ඔබ සඳහන් කළ පරිදි ඔබට සැමවිටම අන්වර්ථයක් කළ හැකිය:

what_the_hell_am_i_thinking() {
   echo "Stop." >&2
   echo "Seriously." >&2
   echo "You almost blew up your computer." >&2
   echo 'WHAT WERE YOU THINKING!?!?!' >&2
   echo "Please provide an excuse for yourself below: " 
   read 
   echo "I'm sorry, that's a pathetic excuse. You're fired."
   sleep 2
   telnet nyancat.dakko.us
}

alias rm -fr /*="what_the_hell_am_i_thinking"

ඔබේ දෘඩ තැටිය rm -fr /*root ලෙස පිස දැමීමෙන් ඔබ ඔබව පාහේ අවමානයට ලක් කළ ආකාරය පිළිබඳව ඔබේ මිතුරන් දැනුවත් කිරීමට විධාන ට්විටර් සේවාදායකයකු සමඟ එය ඒකාබද්ධ කළ හැකිය .


3
ටෙල්නෙට් සඳහා +1 miku.acm.uiuc.edu
අලි

1
alias echo = "telnet miku.acm.uiuc.edu"
kubanczyk

මම ප්‍රමාණවත් තරම් පැරණි පාසලක් නොවිය යුතුය ... එහි ඇති වැදගත්කම telnet miku.acm.uiuc.eduකුමක්ද?
කයිල් ස්ට්‍රෑන්ඩ්

එය උත්සාහ කර සොයා ගන්න. එය විනාශකාරී නොවේ. ඔබ විය යුතු තරම් ව්‍යාකූල නම්, වීඑම් එකක ධාවනය කරන්න.
නෆ්ටුලි කේ

3
-1 අවලංගු නාමයක් වන ඉඩක් සහිත අන්වර්ථ විධානයන් ඔබට කළ නොහැක / * එය අවලංගු නමකි
xenithorb

15

ඔව්: මූල ලෙස වැඩ නොකර ක්‍රියා කිරීමට පෙර දෙවරක් සිතන්න.

එසේම, https://launchpad.net/safe-rm වැනි දෙයක් දෙස බලන්න .


සංස්කරණයේ මූල ලෙස වැඩ කිරීම ගැන සඳහන් කර ඇත
වැලන්ටින් නෙම්සෙව්

@ වැලන්ටින්: o_O !!
ජොනතන් රියොක්ස්

15

මෙම ත්‍රෙඩ් එකේ ඇත්තෙන්ම නරක උපදෙස් කිහිපයක් තිබේ, වාසනාවකට මෙන් එය බොහෝමයක් ඡන්දය ප්‍රකාශ කර ඇත.

පළමුවෙන්ම, ඔබට මූල වීමට අවශ්‍ය වූ විට, root බවට පත් වන්න - sudo සහ විවිධ අන්වර්ථ උපක්‍රම ඔබව දුර්වල කරයි. ඊටත් වඩා නරක නම්, ඔවුන් ඔබව නොසැලකිලිමත් කරනු ඇත. දේවල් නිසි ආකාරයෙන් කිරීමට ඉගෙන ගන්න, ඔබව ආරක්ෂා කිරීම සඳහා අන්වර්ථ නාම මත යැපීම නවත්වන්න. ඔබේ පුහුණු රෝද නොමැති කොටුවක යම් දවසක ඔබ මුල් බැස යමක් පුපුරවා හරිනු ඇත.

දෙවනුව - ඔබට මූලයක් ඇති විට, ඔබ පාසැල් දරුවන්ගෙන් පිරුණු බස් රථයක් පදවාගෙන යයි සිතන්න. සමහර විට ඔබට ගුවන්විදුලියෙන් ගීතයට පිවිසිය හැකිය, නමුත් වෙනත් වේලාවක ඔබට ක්‍රම දෙකම බැලීමට, දේවල් මන්දගාමී කිරීමට සහ ඔබේ සියලු දර්පණ දෙවරක් පරීක්ෂා කිරීමට අවශ්‍ය වේ.

තෙවනුව - ඔබට කවදාවත් ඇත්ත වශයෙන්ම එසේ කිරීමට අවශ්‍ය නැත rm -rf- ඔබට අවශ්‍ය mv something something.bakහෝ වැඩි වශයෙන්mkdir _trash && mv something _trash/

හතරවනුව - සෑම විටම lsඔබේ ආදේශක කාඩ්පත rm- යමක් සදහටම විනාශ කිරීමට පෙර එය දෙස බැලීමේ පිස්සු කිසිවක් නැත.


3
භාවිතය සඳහා +1 ls.
සචින් දිවාකර්

@eventi මෙම ත්‍රෙඩ් එකේ භයානක උපදෙස් සහ කැත හක්ක ඇති බව මම එකඟ වෙමි. යමක් විනාශ කිරීමට පෙර එය බැලීම හොඳ අදහසකි, නමුත් විධානය භාවිතා කරfind එය කිරීමට ඊටත් වඩා හොඳ ක්‍රමයක් තිබේ .
aculich

1
සොයා ගැනීම සරල හෝ ආරක්ෂිත වන්නේ කෙසේදැයි බැලීමට මා අසමත් නමුත් මම ඔබේ find . -name '*~'ආදර්ශයට කැමතියි . මගේ අදහස නම් එය භාවිතා lsකරන එකම ග්ලෝබ් ලැයිස්තුගත rmකිරීමයි.
eventi

15

අහම්බෙන් වළක්වා ගත හැකි සරලම ක්‍රමය rm -rf /*නම් rmවිධානය භාවිතා කිරීම වළක්වා ගැනීමයි ! ඇත්ත වශයෙන්ම, rm /bin/rmවිධානය මුළුමනින්ම ඉවත් කිරීම සඳහා ධාවනය කිරීමට මා නිතරම පෙළඹී ඇත ! නැහැ, මම මුහුණට මුහුණලා නැහැ.

ඒ වෙනුවට විධානයේ -deleteවිකල්පය findභාවිතා කරන්න , නමුත් පළමුව ලිපිගොනු මකා දැමීමට පෙර මම නිර්දේශ කරන්නේ ඔබ මකා දැමිය යුතු ලිපිගොනු පෙරදසුන් කිරීමට:

find | less

සටහන, නවීන සංස්කරණ වලදී findඔබ නාමාවලියක නම අතහැර දැමුවහොත්, එය වත්මන් නාමාවලිය ව්‍යංගයෙන් භාවිතා කරනු ඇත, එබැවින් ඉහත සඳහන් දේ සමාන වේ:

find . | less

මේවා මකා දැමීමට අවශ්‍ය ලිපිගොනු බව ඔබට විශ්වාස වූ පසු ඔබට -deleteවිකල්පය එක් කළ හැකිය:

find path/to/files -delete

එබැවින්, find භාවිතා කිරීම වඩා ආරක්ෂිත පමණක් නොව , එය වඩාත් ප්‍රකාශිත වේ , එබැවින් ඔබට පෙරදසුන සඳහා මෙවැනි ප්‍රකාශනයක් භාවිතා කළ හැකි නිශ්චිත රටාවකට ගැලපෙන නාමාවලි ධූරාවලියක ඇති සමහර ගොනු පමණක් මකා දැමීමට අවශ්‍ය නම්, පසුව ගොනු මකන්න:

find path/to/files -name '*~' | less
find path/to/files -name '*~' -delete

findආරක්ෂිතව හැරෙන්නට ඉගෙන ගැනීමට සහ භාවිතා කිරීමට හොඳ හේතු රාශියක් ඇත rm, එබැවින් ඔබ භාවිතා කිරීමට ඉගෙන ගැනීමට කාලය ගත කරන්නේ නම් පසුව ඔබට ස්තූති කරනු findඇත.


ඉතා රසවත් සාකච්ඡාවක්. මම ඔබේ ප්‍රවේශයට කැමතියි. එය සුපිරි අකාර්යක්ෂමයි, මන්ද එය 3 වතාවක් සොයා ගත හැකි නමුත් එය මට හොඳ ආරම්භයකි: github.com/der-Daniel/fdel
ඩැනියෙල් හිට්සෙල්

11

මෙය rm හි සන්දර්භය තුළ regexps සඳහා විශේෂයෙන් මගේ ප්‍රමිතියකි, නමුත් එය මෙම අවස්ථාවේ දී ඔබව බේරා ගනු ඇත.

මම සෑම විටම echo foo*/[0-9]*{bar,baz}*පළමුව කරන්නේ, රීජෙක්ස් ගැලපෙන්නේ කුමක් දැයි බැලීමට ය. මම ප්රතිදානය ඇති විට, මම ඊට පස්සේ විධාන රේඛාව සංස්කරණය කිරීම හා වෙනස් සමඟ යන්න echoකිරීමට rm -rf. මම කිසි විටෙකත්, rm -rfපරීක්ෂා නොකළ රීජෙක්ස්පී භාවිතා නොකරමි .


3
කරුණාකර සසඳා බලන්න: linuxmanpages.com/man3/regex.3.php linuxmanpages.com/man3/glob.3.php
bukzor

5
හරි, මම සොයන්නේ කුමක්ද? ලිපිගොනු ගැලපීම සඳහා වන රීජෙක්ස් සින්ටැක්ස් උදා: පර්ල් හි භාවිතා කළ ක්‍රමයට වඩා වෙනස් (සමහර විට වෙනත් නමකින් හැඳින්වේ) ඔබ පෙන්වා දෙනවාද? නැත්නම් මට මග හැරුණු වෙනත් කරුණක් තිබේද? මගේ සිතුවිලි මන්දගාමී වීම ගැන මම සමාව ඉල්ලමි, එය සෙනසුරාදා උදෑසන මෙහි පළමු දෙයයි!
MadHatter

10
ඔබ "regexp" ලෙස හඳුන්වන මේ දේවල් ඇත්ත වශයෙන්ම ග්ලෝබ් වේ. එය වෙනස් රීජෙක්ස් වාක්‍ය ඛණ්ඩයක් නොවේ; එය රීජෙක්ස් නොවේ.
bukzor

1
එම තර්කය නිසැකවම ඉදිරිපත් කළ හැකිය. කෙසේ වෙතත්, සාමාන්‍ය ප්‍රකාශන පිළිබඳ විකිපීඩියා ලිපියෙන් මට පෙනී යන්නේ "බොහෝ නවීන පරිගණක පද්ධති ගොනු පද්ධතියකින් ගොනු නාම ගැලපීම සඳහා ආදේශක අක්ෂර සපයන බවයි. මෙය බොහෝ විධාන රේඛා කවච වල මූලික හැකියාව වන අතර එය ග්ලෝබින් ලෙසද හැඳින්වේ" - රීජෙක්ස්ප් ලිපිගොනු එකක් හෝ වැඩි ගණනකට ගැලපෙන පරිදි මෙටාචරැක්ටර් අඩංගු ටෝකන ඇමතීම වැරදි නොවන බව මට පෙනෙන පරිදි "ද හැඳින්වේ". ගොනුව ගැලපීම සඳහා නිත්‍ය ප්‍රකාශන භාවිතා කිරීම හැර වෙනත් කිසිවක් අදහස් නොකරන නිසා ග්ලෝබ් කිරීම වඩා හොඳ යෙදුමක් බව මම එකඟ වෙමි.
මැඩ්හැටර්

2
AdMadHatter එසේම, ග්ලෝබ් කිරීම දෘශ්‍යමය වශයෙන් තරමක් සමාන වුවත්, සාමාන්‍ය ප්‍රකාශනවලට වඩා අර්ථාන්විතව වෙනස් වේ. රීජෙක්ස් එකක අර්ථය ක්ලීන් ස්ටාර්* නමින් ඉතා නිවැරදි අර්ථ දැක්වීමක් ඇති අතර එය යෙදෙන කට්ටලයේ ශුන්‍ය හෝ ඊට වැඩි මූලද්‍රව්‍යයන්ට ගැලපෙන ඒකීය ක්‍රියාකරුවෙකි (නිත්‍ය ප්‍රකාශන වලදී, අක්ෂර හෝ ඊට පෙර අක්ෂර මාලාව ක්ලීන් ස්ටාර්), නමුත් ගෝලීයකරණය කිරීමේදී පහත දැක්වෙන රටාවේ ඕනෑම දෙයක් ගැලපේ. සමාන වාක්‍ය ඛණ්ඩයක් ඇති බව පෙනෙන්නට තිබුණත් ඒවා අර්ථාන්විතව බෙහෙවින් වෙනස් ය. *
aculich

10

මෙම ගැටළුවට විසඳුම වන්නේ නිතිපතා උපස්ථ ලබා ගැනීමයි. ඔබට අහිමි වීමේ අවදානමක් නැති දෙයක් ඔබ නිෂ්පාදනය කරන ඕනෑම වේලාවක එය උපස්ථ කරන්න. නිතිපතා උපස්ථ කිරීම ඉතා වේදනාකාරී යැයි ඔබ සිතන්නේ නම්, එම ක්‍රියාවලිය වේදනාකාරී නොවන පරිදි සරල කරන්න.

උදාහරණයක් ලෙස, ඔබ ප්‍රභව කේත මත වැඩ කරන්නේ නම් git, කේතය පිළිබිඹු කිරීමට සහ වෙනත් යන්ත්‍රයක ඉතිහාසය තබා ගැනීමට වැනි මෙවලමක් භාවිතා කරන්න . ඔබ ලේඛන මත වැඩ කරන්නේ නම්, rsyncඔබේ ලේඛන වෙනත් යන්ත්‍රයකට යොමු කරන පිටපතක් තබා ගන්න .


Btrfs වැනි පිටපත්-ලිවීමේ ගොනු පද්ධතියක් ද උපකාරී වේ. දේශීයව ධාවනය වන සරල ස්වයංක්‍රීය සැණින් භ්‍රමණය ඔබට පහසුවෙන් සැකසිය හැකිය (බාහිර උපස්ථයට අමතරව).
malthe

6

මෙම අවදානම අවම කර ගත හැකි හොඳම ක්‍රමය බොහෝ GUIs මෙන් අදියර දෙකක මකාදැමීමක් බව පෙනේ. එනම්, rm වෙනුවට කුණු බහලුමකට (එකම පරිමාවෙන්) දේවල් ගෙන යන යමක් ආදේශ කරන්න. කිසියම් වැරැද්දක් දැකීමට ප්‍රමාණවත් කාලයක් ගත වූ පසු එම කුණු කූඩය පිරිසිදු කරන්න.

එවැනි එක් උපයෝගීතාවයක් වන කුණු කූඩය යුනික්ස් ස්ටැක්එක්ස්චේන්ජ් හි සාකච්ඡා කෙරේ .


සෑම යන්ත්‍රයකම මම ස්ථාපනය කරන පළමු දෙය එයයි. එය සුපුරුදු ඉවත් කිරීමේ මෙවලම විය යුතු අතර, rm භාවිතා කරනුයේ ඔබට දැන් යමක් ඉවත් කිරීමට අවශ්‍ය වූ විට පමණි. මට කණගාටුයි, එය තවම ඉවත් නොවීම ගැන, නමුත් යම් දවසක එය සිදුවනු ඇත. බොහෝ විට rm පිළිබඳ ප්‍රසිද්ධ සිදුවීමකින් පසු උපස්ථ මඟින් විසඳිය නොහැකි විශාල ගැටලුවක් ඇති විය. නැවත යථා තත්ත්වයට පත්වීමට ගතවන කාලය විශාල සාධකයක් ඉටු කරයි.
ජෙරී

+1 වසර 20 ක් තිස්සේ ලිනක්ස් භාවිතා කිරීමෙන් පසුව, මම තවමත් සිතන්නේ යම් ආකාරයක කුණු කසළ හැසිරීමක් තිබිය යුතු බවයි rm.
ෂොවාස්

3

එවැනි වැරදි වලක්වා ගත හැකි එක් ප්‍රධාන සාධකයක් වන්නේ root ගිණුම භාවිතයෙන් ප්‍රවේශ නොවීමයි. සාමාන්‍ය වරප්‍රසාද නොලත් පරිශීලකයෙකු භාවිතයෙන් ඔබ ප්‍රවේශ වන විට, ඔබ sudoඑක් එක් විධානය සඳහා භාවිතා කළ යුතුය. එබැවින් ඔබ වඩාත් සැලකිලිමත් විය යුතුය.


5
මට විශ්වාස නෑ සුඩෝ මේ වගේ දෙයක් වළක්වයි කියලා. ඔබ "rm" ට පෙර "sudo" ටයිප් කළත් ඔබට OP ලෙසම යතුරු ලියනය කළ හැකිය.
cjc

1
සංස්කරණයේ මූල ලෙස වැඩ කිරීම ගැන සඳහන් කර ඇත
වැලන්ටින් නෙම්සෙව්

භාවිතා කිරීම sudoසහ උපස්ථ පිළිබඳව ඔබට තවමත් විශ්වාසයක් නොමැති නම් . මෙම පිටුව දෙස බලන්න: forum.synology.com/wiki/index.php/… . එය ප්‍රතිචක්‍රීකරණ බඳුනක් නිර්මාණය කිරීම ගැන කතා කරයි. මෙය උපකාරී වේ යැයි සිතමු!
කලීඩ්

1
Ha ඛලෙඩ් මම සුඩෝ සහ උපස්ථ භාවිතා කරමි, මට මෙම විශේෂිත ගැටළුවට වඩා හොඳ යමක් අවශ්‍යයි
වැලන්ටින් නෙම්සෙව්

3

මම ඩිරෙක්ටරියක් පුනරාවර්තව මකා දැමූ විට -r, විධානය අවසානයේ-f දී , සහ අදාළ නම් , උදා . ඒ ආකාරයෙන්, මම මුළු මාර්ගයම ටයිප් නොකර, කලින්ම එන්ටර් එබුවහොත්, විධානය පුනරාවර්තනය නොවන බැවින් එය හානිකර නොවේ. පසු කප්පාදුව ටයිප් කිරීමට උත්සාහ කරන අතරතුර මම එන්ටර් බම්ප් කළහොත් , මම ලියා ඇත්තේ ඊට වඩා ය .rm /foo/bar -rf/foorm /foorm -rf /foo

එය GNU coreutils භාවිතා කරන පද්ධති මත හොඳින් ක්‍රියාත්මක වේ, නමුත් වෙනත් සමහර යුනික්ස් වල ඇති උපයෝගිතා අවසානයේ දී විකල්පයන් තැබීමට ඉඩ නොදේ. වාසනාවකට මෙන්, මම බොහෝ විට එවැනි පද්ධති භාවිතා නොකරමි.


2

එය සංකීර්ණ විය හැකි නමුත් ඔබට SELinux තුළ භූමිකාවන් සැකසිය හැකි අතර එමඟින් පරිශීලකයා sudo su - (හෝ සරල su) හරහා root බවට පත් වුවද, ගොනු මකාදැමීමේ හැකියාව සීමා කළ හැකිය (ඉවත් කිරීම සඳහා ඔබ කෙලින්ම root ලෙස ප්‍රවේශ විය යුතුය. ගොනු). ඔබ AppArmor භාවිතා කරන්නේ නම්, ඔබ ඒ හා සමාන දෙයක් කළ හැකිය .

ඇත්ත වශයෙන්ම, අනෙක් විසඳුම වනුයේ ඔබට උපස්ථ ඇති බවට වග බලා ගැනීමයි. :)


2

යුනික්ස් මත පදනම් වූ යන්ත්‍ර පිළිබඳ මගේ මකාදැමීමේ ක්‍රියාවලිය පහත පරිදි වේ.

  • ලිපිගොනු ලැයිස්තුව බැලීමට ls /path/to/intented/file_or_directoryටර්මිනල් කවුළුව ටයිප් කර return(හෝ Tab, අවශ්‍ය පරිදි) ඔබන්න.

සෑම දෙයක්ම හොඳින් පෙනේ නම්,

  • පර්යන්ත ඉතිහාසයෙන් නැවත up arrowගෙන ඒමට යතුර ක්ලික් කරන්න ls /path/to/intented/file_or_directory.

  • අවශ්‍ය පරිදි හෝ හෝ ආදේශ lsකරන්න . මම පෞද්ගලිකව ධජය භාවිතා කිරීමට කැමති නැත .rmrm -rrm -rf-f

මෙම ක්‍රියාවලිය වලංගු කිරීමේ ක්‍රියාවලිය rmමා විසින් මෙම ක්‍රියාවලිය අනුගමනය කිරීමට පෙර මට සිදු වූ දෙයක් වන විධානය අකාලයේ ක්‍රියාත්මක කිරීම වළක්වයි .


ලිපිගොනු මකා දැමීමට පෙර ඒවා පෙරදසුන් කිරීම හොඳ අදහසක් වන අතර, find මගේ පිළිතුරෙහි මා පැහැදිලි කරන ආකාරයට එය භාවිතා කිරීමට ඊටත් වඩා ආරක්ෂිත හා ප්‍රකාශන ක්‍රමයක් තිබේ .
aculich

2

භාවිතා කිරීමෙන් වැළකෙන globbing . Bash හි, ඔබට සැකසිය හැකිය noglob. නමුත් නැවතත්, ඔබ noglobසකසා නැති පද්ධතියකට ගිය විට , ඔබට එය අමතක වී එය මෙන් ඉදිරියට යා හැකිය.

ලිපිගොනු විනාශ noclobberකිරීම වැළැක්වීමට mvසහ වළක්වා ගැනීමට සකසන්න cp.

මකාදැමීම සඳහා ගොනු බ්‍රව්සරයක් භාවිතා කරන්න. සමහර ගොනු බ්‍රව්සර් කුණු කූඩයක් ලබා දෙයි (උදාහරණයක් ලෙස කොන්කුවර් ).

ග්ලෝබ් කිරීම වළක්වා ගත හැකි තවත් ක්‍රමයක් පහත දැක්වේ. විධාන රේඛාවේදී, මම echo filenamepattern >> xxx. පසුව මම ගොනුව Vim හෝ vi සමඟ සංස්කරණය කරන්නේ කුමන ලිපිගොනු මකා දැමිය යුතුද යන්න පරීක්ෂා කර බැලීමටය %s/^/rm -f/. මූලාශ්‍රය xxx. මේ ආකාරයට මකා දැමීමට යන සෑම ගොනුවක්ම ඔබ දකිනු ඇත.

ලිපිගොනු 'අට්ටාල' නාමාවලියකට හෝ තාර බෝලයකට ගෙන යන්න. නැතහොත් අනුවාද පාලනය භාවිතා කරන්න (මට පෙර කී පරිදි).


ඔබේ ලිපිගොනු මකා දැමීමට පෙර ඒවා පෙරදසුන් කිරීමේ යම් ක්‍රමයක් භාවිතා කිරීම සඳහා +1, කෙසේ වෙතත් විධානය භාවිතා කර එය කිරීමට සරල හා ආරක්ෂිත ක්‍රම තිබේfind .
aculich

2

ඉටු කිරීමට පෙර ZSH මගෙන් විමසයි (පෙරනිමියෙන්) rm -rf *.


2

ප්‍රතිචක්‍රීකරණ බඳුනේ කවුළු ප්‍රවේශයට මම කැමතියි.

මම සාමාන්‍යයෙන් "/ tmp / recyclebin" නමින් නාමාවලියක් නිර්මාණය කරමි.

mkdir /tmp/recyclebin

Rm -rf කිසි විටෙකත් භාවිතා නොකරන්න, මම සැමවිටම භාවිතා කරන්නේ:

mv target_folder /tmp/recyclebin

පසුව, මම aa ස්ක්‍රිප්ට් භාවිතයෙන් හෝ අතින් ප්‍රතිචක්‍රීකරණය හිස් කරමි.


1

පිටත chattr, එවැනි විධානයක් ක්‍රියාත්මක කිරීමට root ට ඉඩ දීමෙන් සම්පූර්ණ ආරක්ෂාවක් නොමැත. වරප්‍රසාද ලබා ගැනීමේදී නිසි කණ්ඩායම් සහ ප්‍රවේශම්කාරී විධානයන් වැදගත් වන්නේ එබැවිනි.

ඊළඟ සැරේ; මකාදැමීමට ඔබ සැලසුම් කරන ලිපිගොනු පරික්ෂා කරන්න - 'f' වෙතින් ඉවත් කරන්න rm -rf, නැතහොත් භාවිතා findකර එය වෙත යොමු කරන්නxargs rm


ඔබ භාවිතා කිරීම යෝජනා කිරීම හොඳයි find, නමුත් මගේ පිළිතුරේ එය ආරක්ෂිත ක්‍රමයක් භාවිතා කිරීමට මම නිර්දේශ කරමි . xargs rmසියලුම නවීන අනුවාදයන්ට විකල්පයක්find ඇති බැවින් භාවිතා කිරීමට අවශ්‍ය නැත . එසේම, ආරක්ෂිතව භාවිතා කිරීම සඳහා ඔබද භාවිතා කළ යුතු අතර වෙනත් ආකාරයකින් ඔබට අවකාශයන් සහිත ගොනු නාම වැනි දේ හමු වූ විට ඔබට ගැටළු ඇති වේ. -deletexargs rmfind -print0xargs -0 rm
aculich

මගේ අදහස වූයේ xargs පිළිබඳ සූක්ෂ්ම දේ ගැන නොව, ලිපිගොනු මකා දමා ඉදිරියට නොයා පළමුව සොයා ගැනීම භාවිතා කිරීමයි ..
සිහින් ව

ඔව්, ලිපිගොනු පරිහරණය කිරීම findහොඳ යෝජනාවක් යැයි මම සිතමි , කෙසේ වෙතත් xargsඔබ එය භාවිතා කිරීමට යෝජනා කරන්නේ නම් එහි සූක්ෂ්මතාව වැදගත් වේ, එසේ නොමැතිනම් එය අවකාශයන් සමඟ ලිපිගොනු හමු වූ විට ව්‍යාකූලත්වයට හා කලකිරීමට හේතු වේ ( -deleteවිකල්පය භාවිතා කිරීමෙන් එය වළක්වනු ලැබේ ).
aculich

1

සමාන විපත් වලක්වා ගැනීම සඳහා වෙනත් විධානයන් සඳහා සමහර ආරක්ෂිත අන්වර්ථයන් මෙහි ඇත :

# safety features
alias cp='cp -i'
alias mv='mv -i'
alias rm='rm -I'                    # 'rm -i' prompts for every file
alias ln='ln -i'
alias chown='chown --preserve-root'
alias chmod='chmod --preserve-root'
alias chgrp='chgrp --preserve-root'

ලොකු අකුර සැලකිල්ලට ගන්න -I, එය ඊට වඩා වෙනස් ය -i:

ලිපිගොනු තුනකට වඩා ඉවත් කිරීමට පෙර හෝ නැවත නැවත ඉවත් කිරීමේදී එක් වරක් විමසන්න. -I ට වඩා අඩු ආක්‍රමණශීලී, තවමත් බොහෝ වැරදි වලින් ආරක්ෂාව සපයයි


I විකල්පය ඔබ මකා දැමීමට යන දෙය නැවත ප්‍රතිරාවය නොකරනු ඇත.
කැල්මේරියස්

1

මම සාමාන්‍යයෙන් -vධජය භාවිතා කරන්නේ මකාදැමෙන්නේ කුමක් දැයි බැලීමට වන අතර ^Cමට සුළු සැකයක් ඇත්නම් ඉක්මනින් එය ලබා ගැනීමට අවස්ථාවක් තිබේ . නරක දේ වැළැක්වීමේ ක්‍රමයක් නොවේ rm, නමුත් යමක් වැරදුනහොත් හානිය සීමා කිරීමට මෙය ප්‍රයෝජනවත් වේ.


1

ඔබ දැන් නව පුරුදු අත්කර ගැනීමේ මනෝභාවයක නොසිටින්නේ .bashrc/.profileනම්, ඔබ මෝඩ දෙයක් කිරීමට සූදානම් දැයි පරීක්ෂා කිරීම සඳහා පරීක්ෂණ කිහිපයක් එකතු කිරීමට හොඳ ස්ථානයකි. මගේ දවස විනාශ කළ හැකි රටාවක් සඳහා මට ග්‍රහණය කරගත හැකි බාෂ් ශ්‍රිතයක් තුළ මම හදුනාගෙන මෙය ඉදිරිපත් කළෙමි:

alias rm='set -f; myrm' #set -f turns off wildcard expansion need to do it outside of           
                        #the function so that we get the "raw" string.
myrm() {
    ARGV="$*"
    set +f #opposite of set -f
    if echo "$ARGV" | grep -e '-rf /*' \
                           -e 'another scary pattern'
    then
        echo "Do Not Operate Heavy Machinery while under the influence of this medication"
        return 1
    else
        /bin/rm $@
    fi
}

එහි ඇති හොඳ දෙය නම් එය බාෂ් පමණි.

එය පැහැදිලිවම එම ස්වරූපයෙන් ප්‍රමාණවත් නොවේ, නමුත් මම සිතන්නේ එයට විභවයක් ඇති බැවින් කරුණාකර අදහස් හෝ අදහස් කිහිපයක් පළ කරන්න.


ඔබගේ ලිපිගොනු මකා දැමීමට පෙර ඒවා පෙරදසුන් කිරීමට උත්සාහ කිරීම හොඳයි, කෙසේ වෙතත් මෙම විසඳුම ඕනෑවට වඩා සංකීර්ණයි. ඔබට ඒ වෙනුවට විධානය භාවිතාfind කර වඩාත් සාමාන්‍ය ආකාරයකින් මෙය කළ හැකිය . එසේම, "එහි ඇති හොඳ දෙය නම් එය බාෂ් පමණක්" යැයි ඔබ කියන්නේ මන්දැයි මට තේරෙන්නේ නැත? ස්ක්‍රිප්ට් වල ඇති bash-isms වළක්වා ගැනීම රෙකමදාරු කරනු ලැබේ .
aculich

"Rm -rf / *" හෝ "rm -rf dir / *" වලින් අපව වළක්වා ගැනීම සඳහා "rm -rf ./*" සහ "rm -rf dir / *" යනුවෙන් අදහස් කරන විට අපට "/ *" රටා හඳුනාගත යුතුය. සහ "*" (සරලව). නමුත් අපට සියලු විධාන රේඛා තර්ක grep හරහා කිසියම් හානිකර රටාවක් සොයමින් යැවිය නොහැක, මන්ද යත්, බාෂ් විසින් ආදේශක කාඩ්පත් තර්ක සම්මත කිරීමට පෙර පුළුල් කරයි (තරුව ෆෝල්ඩරයක සියලුම අන්තර්ගතයන් දක්වා පුළුල් වනු ඇත). අපට "අමු" තර්ක නූලක් අවශ්‍ය වේ. එය "මයර්ම්" ශ්‍රිතය කැඳවීමට පෙර එය සකසා ඇත්තේ අමු තර්ක මාලාව පසු කර ග්‍රෙප් පූර්ව නිශ්චිත රටා සොයමිනි. *
kln

බාෂ් හි set -fසමානව ඔබ කුමක් කිරීමට උත්සාහ කරනවාදැයි මට වැටහී set -o noglobඇත, නමුත් එය තවමත් "ඔබේ හොඳ දෙය නම් එය බාෂ් පමණි" යන ඔබේ ප්‍රකාශය තවමත් පැහැදිලි නොකරයි. ඒ වෙනුවට ඔබට කිසියම් කවචයක් භාවිතා නොකිරීමෙන් rmනොව විධානය භාවිතා කිරීමෙන්find ගැටළුව මුළුමනින්ම හා සාමාන්‍ය ආකාරයකින් ඉවත් කළ හැකිය . ඔබ මෙහි යෝජනා කරන දේ සමඟ සැසඳෙන ආකාරය බැලීමට ඔබ ඇත්ත වශයෙන්ම එම යෝජනාව උත්සාහ කර තිබේද?
aculich

@aculich by bash මම අදහස් කළේ පයිතන් හෝ පර්ල් පරායත්තයන් නැත, සෑම දෙයක්ම බාෂ් වලින් කළ හැකිය. මගේ .bashrc සංශෝධනය කළ පසු පැරණි පුරුදු අත් නොහරිමින් මට දිගටම වැඩ කළ හැකිය. මම rm bash ඉල්ලා සිටින සෑම අවස්ථාවකම මම මෝඩ දෙයක් නොකරන බවට වග බලා ගන්නෙමි. මට අනතුරු ඇඟවීමට අවශ්‍ය රටා කිහිපයක් නිර්වචනය කළ යුතුය. "*" වැනි වත්මන් ෆෝල්ඩරයේ ඇති සියල්ල ඉවත් කරනු ඇත. සෑම විටම නැවත නැවතත් එය මට අවශ්‍ය දේම වනු ඇත, නමුත් තව ටිකක් වැඩ අන්තර්ක්‍රියාකාරිත්වය "මයර්ම්" වෙත එක් කළ හැකිය.
kln

@aculich OK gotcha.No මම එය උත්සාහ කර නැත. වැඩ ප්‍රවාහයේ සැලකිය යුතු වෙනසක් අවශ්‍ය යැයි මම සිතමි. මැක් ඕඑස් එක්ස් හි මගේ පරික්ෂා කරන්න .bash_history 500 වන අතර එම විධාන වලින් 27 ක් rm වේ. මේ දිනවල මම බොහෝ විට පර්යන්තයක් භාවිතා නොකරමි.
kln

1

කනගාටුවට කරුණක් නම්, ප්‍රමාණවත් නොවන කර්මය හේතුවෙන් මට ඉහත අදහස් දැක්වීමක් කළ නොහැකි නමුත් ආරක්ෂිත-ආර්එම් යනු අහම්බෙන් සිදු වූ මහා මකාදැමීමේ බියකරු සිහින සඳහා උවදුරක් නොවන බව අන් අයට අනතුරු ඇඟවීමට අවශ්‍ය වීමයි.

පහත සඳහන් දෑ ලිනක්ස් මින්ට් 17.1 අතථ්‍ය යන්ත්‍රයකින් පරීක්‍ෂා කරන ලදි (මෙම විධානයන් නොදන්නා අයට අනතුරු ඇඟවීම: මෙය නොකරන්න! ඇත්ත වශයෙන්ම, මෙම විධානයන් හුරුපුරුදු අය පවා විනාශකාරී දත්ත නැතිවීම වළක්වා ගැනීම සඳහා මෙය නොකළ යුතුය / නොකළ යුතුය):

පෙළ අනුවාදය (ensed නීභවනය):

$ cd /
$ sudo safe-rm -rf *
$ ls
bash: /bin/ls: No such file or directory

රූප අනුවාදය (සම්පූර්ණ):

රූප විස්තරය මෙහි ඇතුළත් කරන්න


1

මම හිතන්නේ මෙය ප්‍රබල වැළැක්වීමේ ඉඟියක් වන අතර, * පුළුල් කිරීමේ කෙටිමං කවචයේ ඇත:

පළමුව, යතුර ටයිප් කරන්න rm -rf *හෝ rm -rf your/path/*නොකරන්න Enter. (ඇත්ත වශයෙන්ම, භාවිතා කිරීමේදී වේගයෙන් / අහම්බෙන් Enter එබීම නොකිරීමට සැලකිලිමත් වීමේ පුරුද්දක් ඔබට තිබිය යුතුය rm -rf)

ඉන්පසු, "*" ආදේශක කාඩ්පත පැහැදිලිවම බාෂ් වලින් පුළුල් කිරීමට Alt-Shift-8(එනම් Alt-Shift-*) ඔබන්න . ඉතිහාසය සැරිසැරීමේදී "rm -rf *" විධානයක් නැවත ඇතුළත් කිරීමෙන්ද මෙය වළක්වයි.

අවසාන වශයෙන්, පුළුල් කිරීම සඳහා නිවැරදි ගොනු / නාමාවලි තිබේදැයි පරීක්ෂා කිරීමෙන් පසු Enter ඔබන්න.

සිදු විය.


0

හෙහෙ (පරීක්ෂා නොකළ හා තරමක් මුහුණට මුහුණලා!):

$ cat /usr/local/bin/saferm

#! /bin/bash

/bin/ls -- "$@"

echo "Those be the files you're about to delete."
echo "Do you want to proceed (y/N)?"

read userresponse

if [ "$userresponse" -eq "y" ]; then

  echo "Executing...."
  /bin/rm -- "$@"

fi

ඊළගට:

alias rm="/usr/local/bin/saferm"

යථාර්ථවාදීව, ග්ලෝබ් සමඟ එවැනි මෙහෙයුමක් සිදු කිරීමට පෙර ඔබට මානසික විරාමයක් තිබිය යුතුය, ඔබ මූලයක් ලෙස ධාවනය වන්නේද, එයට "සුඩෝ" සූදානම් කරන්නේද යන්න. ඔබට එකම ග්ලෝබ් එකක "එල්එස්" ධාවනය කළ හැකිය. නමුත්, මානසිකව, ඔබ තත්පරයකට නතර විය යුතුය, ඔබට අවශ්‍ය දේ ටයිප් කර ඇති බවට වග බලා ගන්න, ඔබට අවශ්‍ය දේ ඇත්ත වශයෙන්ම ඔබට අවශ්‍ය දේ බවට වග බලා ගන්න. යනාදිය මෙය පළමු වසර තුළ යමක් විනාශ කිරීමෙන් ප්‍රධාන වශයෙන් ඉගෙන ගත් දෙයක් යැයි මම සිතමි. යුනික්ස් එස්ඒ, උදුන මත යමක් උණුසුම් විය හැකි බව ඔබට පැවසීමට උණුසුම් දාහකය හොඳ ගුරුවරයෙකි.

ඔබට හොඳ උපස්ථ ඇති බවට වග බලා ගන්න!


භයානක දේවල් කිරීමට පෙර මම දෙවරක් සිතීමට උත්සාහ කරමි, නමුත් කෙසේ හෝ එය සැමවිටම ක්‍රියාත්මක නොවේ, මම අතීතයේ දී මේ දේ නොදැන සිටීම නිසා විනාශ කර දැමුවෙමි.
වැලන්ටින් නෙම්සෙව්

0

එසේම, ආරක්ෂාවක් ලෙස නොව, ඔබ hit C පහර දීමට පෙර මකාදැමූ ලිපිගොනු මොනවාදැයි සොයා ගැනීමේ මාර්ගයක් ලෙස, ඔබට locateදත්ත සමුදාය භාවිතා කළ හැකිය (ඇත්ත වශයෙන්ම එය ස්ථාපනය කර නොනැසී පැවතුනහොත් පමණි rm)

මම මේ බ්ලොග් සටහනෙන් ඒ ගැන ඉගෙන ගත්තා


0

අහම්බෙන් ඉවත් කිරීමට එරෙහි වීමට අවශ්‍ය ලිපිගොනු ගබඩා කිරීමට ZFS භාවිතා කරන්න.

  • නිතිපතා මෙම ගොනු පද්ධතියේ ස්නැප්ෂොට් සාදයි
  • පැරණි / අනවශ්‍ය ස්නැප්ෂොට් ඉවත් කරයි.

ලිපිගොනු ඉවත් කළහොත්, නැවත ලිවීම, දූෂිත වීම, කුමක් වුවත්, ඔබේ ගොනු පද්ධතිය අන්තිම හොඳ ඡායාරූපයේ ක්ලෝනයකට පෙරළා ඔබ අවසන් කර ඇත.


0

එසේ වන්නේ නැත පිළිතුරක් නමුත් තොරතුරක් බොහෝ, මම හැම විටම කරන්න rm (dir) -rfනොවේ rm -rf (dir)එනම්: න්යෂ්ටික හැකි අවසන් මොහොත දක්වා ම යන්නේ නැත.

ඇතුල් කිරීමේ යතුර ලිස්සා යාම සහ පහර දීම වැනි වලංගු මකාදැමීමක් වන පරිදි ඔබ ඩර් නමට ඇඟිල්ල දිගු කරන අවස්ථා අවම කිරීමට එය උපකාරී වේ.


ස්මාර්ට්, නමුත් BSD මත ක්‍රියා නොකරනු ඇත rm, එහිදී ගොනු නම් වලට පෙර විකල්ප පැමිණිය යුතුය.
gnucchi

ඔව්. මම මෑතකදී ඇපල් භාවිතා කරන බව සොයා ගත්තා. නිවැරදි කිරීම නම් gnu මෙවලම් ස්ථාපනය කර සෑම දෙයක් සඳහාම අන්වර්ථයන් සැකසීමයි :) සහ / හෝ වඩාත් සුදුසු වන්නේ ඇපල් ගෙඩිය කුණු කූඩයට දමන්න. :)
Sirex


1
මට ඉඩ දුන්නොත් නැනෝ තත්පරයකින්. එය ලිනක්ස් හා සසඳන විට කුණු කසළ වේ.
සයිරෙක්ස්

0

මෙය යමෙකුට තමන්ගේ නඩුව සඳහා උපකාර කරයි නම්:

1. භාවිතා කරන්න rmsafe:

එය ලිපිගොනු "කුණු" ෆෝල්ඩරයකට ගෙන යන අතර ඔබට ඒවා සරල ලෙස නැවත ගෙන ඒමට සෑම විටම අවස්ථාව තිබේ mv:

$ rmsafe /path/to/important/files

මුලාශ්‍රය: https://github.com/pendashteh/rmsafe

2. භාවිතා කරන්න safe:

rmආරක්ෂිතව භාවිතා කිරීම සඳහා ඔබට අන්වර්ථයක් සැකසිය හැකිය :

$ alias rm="safe rm"

දැන් ඔබ ධාවනය කරන්නේ නම් ඔබට rm /*මෙය ප්‍රතිචාරයක් වනු ඇත:

$ rm /*
Are you sure you want to 'rm /bin /boot /data /dev /etc /home /initrd.img /lib /lib64 /mnt /opt /proc /root /run /sbin /srv /sys /tmp /usr /var'? [y/n]

මම විශ්වාස කරනවා ඔබ ටයිප් නොකරන බව y!

මුලාශ්‍රය: https://github.com/pendashteh/safe


0

මම සරලවම මගේම පිටපතක් කළෙමි, එය සෑම ආකාරයකම තත්වයන්ට අනතුරු ඇඟවීමට සහ තහවුරු කිරීමක් ඉල්ලා සිටිය හැකිය, එය වැඩිදියුණු කරන්නේ කෙසේද යන්න පිළිබඳව ඔබට භාරයි

#!/bin/sh
# just sudo mv /usr/bin/rm to /usr/bin/rm-original

path=${!#}

color_yel="\x1b[1;33m"
color_rst="\x1b[0m"

function get_yn() {
    read i
    if [ "$i" != "y" ]; then echo "aborted."; exit 1; fi
}

if [ -d ${path} ]; then
    echo -e "${color_yel}You are deleting a folder, it's potentially dangerous, are you sure (y/n) ?${col>
    get_yn
    /usr/bin/rm-original $@
fi

එය වැඩි දියුණු කිරීම සඳහා වැඩිදුර අදහස:

  • විශේෂිත කොඩි සහ මාර්ග පරීක්ෂා කරන්න
  • අපද්‍රව්‍ය ෆෝල්ඩරයකට ගොස් ඉවත් කරන්න
  • ටික වේලාවකට පසු කුණු කූඩයට දමා පැරණි දේවල් හිස් කරන්න

එබැවින් සරල අභිරුචිකරණය කළ හැකි ස්ක්‍රිප්ටයක් මඟින් විශේෂ හැසිරීමක් ඇති කර ගැනීමට සහ අමතර පැකේජයක් ස්ථාපනය කිරීමෙන් වැළකී සිටීමට ඉඩ ලබා දේ.

යම් යම් දැනුමෙන්, ඔබට කුණු කූඩයට දැමිය හැක්කේ යම් යම් දේවල් පමණි.

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.