Je pense que la plupart des gens ici par erreur ' rm -rf
' ont édité le mauvais répertoire, et j'espère que cela n'a pas causé d'énormes dégâts .. Existe-t-il un moyen d'empêcher les utilisateurs de faire une histoire d'horreur Unix similaire ?? Quelqu'un a mentionné (dans la section des commentaires du lien précédent ) que
... Je suis presque sûr maintenant que chaque cours ou entreprise Unix utilise unix définit rm -fr pour désactiver les comptes des personnes qui essaient de l'exécuter ou les empêcher de l'exécuter ...
Y a-t-il une implémentation de cela dans une distribution Unix ou Linux actuelle? Et quelle est la pratique courante pour empêcher cette erreur même à partir d'un administrateur système (avec accès root)?
Il semble qu'il y avait une certaine protection pour le répertoire racine ( /
) dans Solaris (depuis 2005) et GNU (depuis 2006). Y a-t-il de toute façon à implémenter la même manière de protection à certains autres dossiers?
Pour plus de clarté, je ne demandais pas de conseils généraux sur l' rm
utilisation (et j'ai mis à jour le titre pour en indiquer plus), je veux quelque chose de plus comme la protection du dossier racine: pour que rm -rf /
vous deviez passer un paramètre spécifique: rm -rf --no-preserve-root /
.. Existe-t-il des implémentations similaires pour un ensemble personnalisé de répertoires? Ou puis-je spécifier des fichiers en plus /
d'être protégés par l' option conserve-racine ?
la source
rm
commande par une qui ne possède pas cette fonctionnalité.rm -rf
peut être un événement générateur de CV. Vérifiez et revérifiez avant de l'exécuterRéponses:
Pour éviter une erreur
rm -rf
, ne tapez pasrm -rf
.Si vous devez supprimer une arborescence de répertoires, je recommande le workflow suivant:
mv directory-to-delete DELETE
DELETE
et vérifiez que c'est bien ce que vous vouliez supprimerrm -rf DELETE
N'appelez jamais
rm -rf
avec un argument autre queDELETE
. Effectuer la suppression en plusieurs étapes vous donne la possibilité de vérifier que vous ne supprimez pas la mauvaise chose, soit à cause d'une faute de frappe (comme dansrm -rf /foo /bar
au lieu derm -rf /foo/bar
) ou à cause d'un braino (oups, non, je voulais supprimerfoo.old
et conserverfoo.new
) .Si votre problème est que vous ne pouvez pas faire confiance aux autres pour ne pas taper
rm -rf
, pensez à supprimer leurs privilèges d'administrateur. Il y a beaucoup plus de choses qui peuvent mal tournerrm
.Effectuez toujours des sauvegardes .
Vérifiez régulièrement que vos sauvegardes fonctionnent et sont à jour.
Gardez tout ce qui ne peut pas être facilement téléchargé depuis un emplacement sous contrôle de version.
Avec un système Unix de base, si vous voulez vraiment rendre certains répertoires non supprimables par
rm
, remplacez (ou mieux shadow)rm
par un script personnalisé qui rejette certains arguments. Ou parhg rm
.Certaines variantes Unix offrent plus de possibilités.
chmod +a 'group:everyone deny delete_child' somedir
(cela n'empêche pas la suppression des fichiers dans les sous-répertoires: si vous le souhaitez, définissez également l'ACL dans le sous-répertoire).rm
de modifier certains répertoires.la source
--no-preserve-root
option, pour un autre dossier important .. Et cela n'existe apparemment même pas en tant que pratique ...rm -rf
signifie déjà «supprimer ceci, oui je suis sûr de savoir ce que je fais». Si vous en voulez plus, remplacez-lerm
par un script qui refuse de supprimer certains répertoires.rm
d'accéder à certains répertoires. De plus, puisque votre question ne concerne pas seulement Linux, j'aurais dû mentionner OSX, qui a quelque chose d'un peu comme ce que vous voulez.Si vous utilisez
rm *
et le zsh, vous pouvez définir l'optionrmstarwait
:Maintenant, le shell avertit lorsque vous utilisez
*
:Lorsque vous la rejetez (
n
), rien ne se passe. Sinon, tous les fichiers seront supprimés.la source
zsh -f
sert-il?Pour vous protéger contre un accident
rm -rf *
dans un répertoire, créez un fichier appelé "-i" (vous pouvez le faire avec emacs ou un autre programme) dans ce répertoire. Le shell essaiera d'interpréter -i et le fera passer en mode interactif.Par exemple: Vous avez un répertoire appelé
rmtest
avec le fichier nommé à l'-i
intérieur. Si vous essayez derm
tout dans le répertoire, vous yrm
serez d'abord-i
transféré et passerez en mode interactif. Si vous placez un tel fichier dans les répertoires sur lesquels vous souhaitez bénéficier d'une protection, cela peut être utile.Notez que cela est inefficace contre
rm -rf rmtest
.la source
> -i
MODIFIER comme suggéré par le commentaire:
Vous pouvez changer l'attribut de en immuable le fichier ou le répertoire et puis il ne peut pas être supprimé même par root tant que l'attribut n'est pas supprimé.
chattr +i /some/important/file
Cela signifie également que le fichier ne peut en aucun cas être écrit ou modifié, même par root . Un autre attribut apparemment disponible que je n'ai pas utilisé moi-même est l'attribut append (
chattr +a /some/important/file
. Ensuite, le fichier ne peut être ouvert qu'en mode append, ce qui signifie également aucune suppression, mais vous pouvez y ajouter (par exemple un fichier journal). Cela signifie que vousvim
par exemple, vous ne pourrez pas le modifier , mais vous pouvez le faireecho 'this adds a line' >> /some/important/file
. L'utilisation>
au lieu de>>
échouera.Ces attributs peuvent être désactivés à l'aide d'un signe moins, c'est-à-dire
chattr -i file
Sinon, si cela ne convient pas, une chose que je pratique est de toujours d'
ls /some/dir
abord, puis au lieu de retaper la commande, appuyez sur la flèche vers le haut CTL-A, puis supprimez lels
et tapez monrm -rf
si j'en ai besoin. Pas parfait, mais en regardant les résultats de ls, vous savez d'avance si c'est ce que vous vouliez.la source
Si vous comprenez le langage de programmation C, je pense qu'il est possible de réécrire le code source rm et de faire un petit patch pour le noyau. J'ai vu cela sur un serveur et il était impossible de supprimer certains répertoires importants et lorsque vous tapez «rm -rf / direcotyr», il envoie un e-mail à sysadmin.
la source
Un choix possible est d'arrêter
rm -rf
et de commencer à utiliserrm -ri
. Lei
paramètre supplémentaire est de s'assurer qu'il vous demande si vous êtes sûr de vouloir supprimer le fichier.Votre meilleur pari serait probablement de créer un alias
rm -ri
pour quelque chose de mémorablekill_it_with_fire
. De cette façon, chaque fois que vous avez envie d'enlever quelque chose, allez-y et tuez-le avec le feu.la source
f
exactement le contraire de l'i
option ?? Je l'ai essayé et j'ai quand même travaillé ...r
là-dedans. Je l'ai juste réparé.J'aime mettre le nom du répertoire en premier comme ceci:
la source