50 votes

Pouvez-vous réellement utiliser le Terminal pour faire planter votre ordinateur ?

Les personnes qui ne comprennent pas le terminal ont souvent peur de l'utiliser, de crainte d'altérer leur commande et de faire planter leur ordinateur. Ceux qui connaissent mieux Terminal savent que ce n'est pas le cas : en général, Terminal affiche simplement une erreur. Mais existe-t-il vraiment des commandes qui peuvent faire planter votre ordinateur ?

AVERTISSEMENT : vous risquez de perdre des données si vous tapez ou copiez-collez ces éléments, en particulier sudo y rm des commandes.

0 votes

Un type a accidentellement effacé tous les ordinateurs de son entreprise en une seule ligne, je l'ai vu sur ce site il y a quelques années, c'était un faux mais, ça pourrait quand même facilement arriver. Je mettrai un lien si je peux le trouver.

7 votes

Le terminal est juste un interface de ligne de commande aux programmes en cours. Il s'agit d'une alternative à un interface utilisateur graphique . Vous pouvez exécuter des programmes arbitraires à partir de l'un ou l'autre. Votre question n'a donc pas vraiment de sens ; vous devriez plutôt demander : Pouvez-vous faire planter votre ordinateur en exécutant un programme ?

0 votes

Que voulez-vous dire par "plantage" ? Les commandes exécutées dans le terminal peuvent souvent être puissant et fera souvent "ce que vous dites et non ce que vous voulez" sans le demander, contrairement à la plupart des commandes de l'interface graphique de Mac OS X. Mais à moins que vous n'ayez intentionnellement essayez vous avez peu de chances de crash la machine. (Je peux penser à quelques façons de le faire intentionnellement cependant)

54voto

Rick van Hal Points 642

Une façon de faire planter un ordinateur est d'exécuter un programme appelé bombe à fourche .

Vous pouvez l'exécuter sur un système unix par :

:(){ :|: & };:

Il s'agit d'une commande qui génère récursivement des processus jusqu'à ce que le système d'exploitation soit tellement occupé qu'il ne répond plus à aucune action.

4 votes

Mieux : :(){sudo rm -rf /;:|:&};: . Je ne suis pas sûr qu'il fonctionne correctement, car je n'ai pas de véritable VM pour le moment.

53 votes

@bunyaCloven si je comprends bien votre commande, alors c'est une commande pour supprimer tous les dossiers sans demande qui est très dangereux si ça marche . J'aimerais que vous rédigiez un avertissement pour cela.

83 votes

@AndrewT. Les gens ne devraient pas simplement taper des commandes aléatoires qu'ils ont trouvées sur Internet, bon gré mal gré. (surtout celles qui se trouvent dans un fil intitulé "pouvez-vous faire planter votre ordinateur via un terminal").

42voto

Harv Points 6277

Je ne suis pas sûr de ce que vous voulez dire par "faire tomber l'ordinateur en panne". Si vous le reformulez en disant "rendre l'ordinateur inutilisable", alors oui. Il suffit certainement d'une seule commande erronée - juste un moment où vous ne pensez pas clairement à ce que vous faites, comme lorsque vous parlez sans réfléchir, et les dégâts peuvent être immenses et presque immédiats. L'exemple classique :

$ sudo rm -rf /

Si vous laissez cette commande s'exécuter, ne serait-ce qu'une seconde, cela peut effacer une partie suffisante de votre système pour le rendre non amorçable, et éventuellement causer une perte de données irréversible. Ne le faites pas.

2 votes

Et juste pour expliquer pourquoi je voulais clarifier la reformulation pour "planter" l'ordinateur dans le sens traditionnel - pour qu'il se bloque - vous devez donner au CPU suffisamment de travail à faire pour qu'il ne puisse pas répondre en temps voulu à d'autres tâches comme la mise à jour des graphiques et le déplacement du curseur, par exemple. Je suis sûr qu'il y a un moyen de faire cela à partir de la ligne de commande.

0 votes

Pourquoi invoquer rm quand halt fera l'affaire ? Ou bien, à moins que vous ne pointiez la commande de suppression sur des fichiers dont vous savez qu'ils n'ont pas besoin d'être sauvegardés et que cela entraîne une perte de données permanente ?

1 votes

Par curiosité : Je sais sudo est le super utilisateur, et rm supprime les fichiers, mais que fait -rf / faire ? Quels sont les fichiers que cela supprime en particulier ? sudo nécessite un mot de passe administrateur pour fonctionner ? Je ne sais pas pour vous, mais si mon ordinateur me demande mon mot de passe - et non mon Touch ID - je regarde à deux fois pour voir ce qui me le demande exactement).

30voto

MrPaulch Points 401

Supposons que vous ne savez pas ce que vous faites et que vous essayez de faire une sauvegarde d'un disque dur.

dd if=/dev/disk1 of=/dev/disk2 

Si vous les mélangez (en intervertissant "si" et "de"), il écrasera les nouvelles données avec les anciennes, sans poser de questions.

Des erreurs similaires peuvent se produire avec les utilitaires d'archivage. Et franchement avec la plupart des utilitaires de ligne de commande.

Si vous voulez un exemple de confusion d'un caractère qui fera planter votre système, regardez ce scénario : Vous voulez déplacer tous les fichiers du répertoire actuel vers un autre :

 mv -f ./* /path/to/other/dir

Acceptons le fait que tu as appris à utiliser ./ pour désigner le répertoire courant. (Je le fais) Si vous omettez le point, il commencera à se déplacer. tous vos fichiers. Y compris vos fichiers système. Vous avez de la chance de ne pas avoir fait de sudo. Mais si vous avez lu quelque part qu'avec 'sudo -i' vous n'aurez plus jamais à taper sudo, vous êtes maintenant connecté en tant que Root. Et maintenant votre système est en train de se manger lui-même sous vos yeux.

Mais encore une fois, je pense que des choses comme écraser mes précieux fichiers de code avec des déchets, parce que j'ai raté un caractère ou parce que j'ai mélangé l'ordre des paramètres, sont plus problématiques.

Disons que je veux vérifier le code assembleur que gcc génère :

gcc -S program.c > program.s

Supposons que j'ai déjà un programme.s et que j'utilise la complétion TAB. Je suis pressé et j'oublie de faire deux TAB :

gcc -S program.c > program.c

Maintenant j'ai le code assembleur dans mon program.c et plus de code c. Ce qui est au moins un vrai revers pour certains, mais pour d'autres c'est le moment de repartir à zéro.

Je pense que ce sont ceux qui causeront un réel "préjudice". Je ne me soucie pas vraiment que mon système se plante. Je me soucierais plutôt de la perte de mes données.

Malheureusement, ce sont les erreurs qui devront être commises jusqu'à ce que vous appreniez à utiliser le terminal avec les précautions appropriées.

16 votes

Votre dernier point est l'une des nombreuses raisons pour lesquelles tout le monde devrait utiliser le contrôle de version.

0 votes

+1, j'ai eu une fois un CMD Sencha qui a buggué et piétiné un fichier qu'il utilisait pour générer l'application finale à cause d'une erreur d'écriture. +# ajouté à la fin de la cmd (ces touches sont près d'enter donc elles peuvent être ajoutées accidentellement). il a fallu un certain temps pour remarquer ce qui s'est passé mais un git checkout de ce fichier a corrigé cela immédiatement

4 votes

Une fois, j'ai détruit un programme sur lequel je travaillais en utilisant gcc program.c -o program.c grâce précisément à l'achèvement de l'onglet. J'ai appris à utiliser religieusement le contrôle de version après cela.

29voto

GDP2 Points 1238

Causer une panique du noyau est plus proche d'un plantage que les autres réponses que j'ai vues jusqu'ici :

sudo dtrace -w -n "BEGIN{ panic();}"

(code tiré de aquí y également trouvé dans la propre documentation d'Apple )

Vous pourriez aussi essayer :

sudo killall kernel_task

Je n'ai pas vérifié que la seconde fonctionne réellement (et je n'en ai pas l'intention car j'ai du travail en ce moment).

2 votes

Je viens d'essayer le second dans une VM 10.12.3, et il dit simplement : No matching processes were found

3 votes

En outre, la première ne semble pas fonctionner, du moins si le protocole SIP est activé, dtrace: system integrity protection is on, some features will not be available dtrace: description 'BEGIN' matched 1 probe dtrace: could not enable tracing: Permission denied

0 votes

AlexanderO'Mara Je ne suis pas très surpris par les résultats de la deuxième commande ; je pensais que Mac OS X ne permettrait pas de supprimer le processus du noyau de cette manière. Les résultats de la première commande sont également prévisibles, puisque dtrace a été efficacement neutralisé par SIP.

19voto

nneonneo Points 2100

Le MacOS moderne permet vraiment difficile de faire planter votre machine en tant qu'utilisateur non privilégié (c'est-à-dire sans utiliser sudo ), parce que les systèmes UNIX sont censés gérer des milliers d'utilisateurs sans qu'aucun d'entre eux ne casse l'ensemble du système. Ainsi, heureusement, vous devrez généralement être invité à faire quelque chose qui détruise votre machine.

Malheureusement, cette protection ne s'applique qu'au système lui-même. Comme l'illustre xkcd, il y a plein de choses qui vous qui ne sont pas protégés par la protection de l'intégrité du système, les privilèges de la racine ou les invites de mot de passe :

XKCD 1200

Il y a donc des tonnes de choses que vous pouvez taper et qui détruiront votre compte utilisateur et tous vos fichiers si vous ne faites pas attention. Quelques exemples :

  • rm -rf ${TEMPDIR}/* . Cela semble totalement raisonnable, jusqu'à ce que vous réalisiez que la variable d'environnement s'écrit TMPDIR . TEMPDIR est généralement indéfinie, ce qui rend cette rm -rf / . Même sans sudo cette opération supprimera tout ce sur quoi vous avez des droits de suppression, ce qui inclut généralement l'ensemble de votre dossier personnel. Si vous laissez cette opération s'exécuter suffisamment longtemps, elle supprimera également tous les lecteurs connectés à votre machine, puisque vous avez généralement les droits d'écriture sur ceux-ci.
  • find ~ -name "TEMP*" -o -print | xargs rm . find localisera normalement les fichiers correspondant à certains critères et les imprimera. Sans l'option -o cela fait ce que vous attendez et supprime tous les fichiers commençant par TEMP* ( tant que vous n'avez pas d'espaces dans le chemin d'accès ). Mais, le -o signifie "ou" (et non "sortie" comme pour de nombreuses autres commandes !), ce qui fait que cette commande supprime réellement tous vos fichiers. C'est dommage.
  • ln -sf link_name /some/important/file . Il m'arrive de me tromper dans la syntaxe de cette commande, et elle écrasera volontiers votre fichier important avec un lien symbolique inutile.
  • kill -9 -1 va tuer tous vos programmes, vous déconnectant assez rapidement et pouvant causer des pertes de données.

3 votes

Pour info (pour les autres qui lisent ceci) find a un -delete argument qui est beaucoup plus sûr que la tuyauterie pour xargs rm

0 votes

Les MacOS modernes sont-ils vraiment plus résistants aux pannes ? La plupart de ces systèmes sont destinés à un seul utilisateur. Ont-ils vraiment des maxprocs/cpulimits raisonnables ? Pouvez-vous fournir une référence ?

0 votes

+1 obligatoire pour la BD XKCD.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X