changement de shell de zsh à bash


17

Mon serveur Web a été falsifié par quelqu'un qui utilisait le shell zsh. Je me sens plus à l'aise avec bash shell, car ce sont les valeurs par défaut fournies avec Ubuntu et OS X (les deux principaux systèmes d'exploitation que j'utilise). Mais cette question se concentre sur le serveur Ubuntu. J'ai 4 sites Web exécutés sur ce serveur Web, j'utilise byobu, j'utilise tmux, j'utilise ruby ​​/ ruby ​​sur rails, node.js, apache, quelques démons. Si je change le shell racine actuel de zsh en bash, pourrait-il y avoir des effets secondaires négatifs qui pourraient résulter de ce changement? Par exemple, les processus seront-ils tués parce que leur processus parent (le shell) a été changé?


Demandez-vous quelles sont les conséquences du changement (qui n'en sont pas, j'utilise zsh en ce moment et je peux passer en bash quand je veux) ou demandez-vous comment changer efficacement le shell?
Braiam

@Braiam Je suis nerveux quant aux conséquences du changement. S'il n'y a pas de conséquences, je changerai. Je pensais simplement que le shell était un processus parent pour certains de ces démons comme Apache, et si je devais en sortir, cela tuerait le processus Apache. Mais je suppose que je me trompe.
JohnMerlino

Réponses:


10

Changer votre shell, via sudo chsh --shell=/bin/bash $USERchangera le champ shell dans /etc/passwd. Cette valeur n'est consultée qu'au moment de la connexion, lorsque le système n'a aucune idée du shell à utiliser pour vous.

Processus en cours, que ce soit a commencé par zsh, bash apacheou evil_overlord's_programne sera pas affecté


Le shell n'est-il pas le processus parent des autres processus qui y sont exécutés, ou simplement le terminal de contrôle (et non le shell) serait-il considéré comme le processus parent?
JohnMerlino

Le loginprogramme s'exécute dans un processus, comme tout. Quand il vous laisse entrer, il crée un autre processus avec votre UID, etc., et exécute / bin / bash (à partir de / etc / passwd). Le shell bash lit à partir de STDIN (mis en place par login), et va bifurquer / exécuter des commandes non intégrées, attendre qu'elles se terminent et boucler pour plus de commandes. L'idée de "contrôler le terminal" n'est pas utile sous Unix / Linux.
waltinator

25

Réponse du débordement de pile ( passage de zsh à bash ):

Vous pouvez simplement utiliser exec pour remplacer votre shell actuel par un nouveau shell:

Passer en bash:

exec bash

Passez à zsh:

exec zsh

Cela n'affectera pas les nouvelles fenêtres de terminal ou quoi que ce soit, mais c'est pratique.


n'a pas fonctionné. encore: echo $ SHELL / usr / bin / zsh
ses

8

Ouvrez votre terminal et utilisez la commande suivante:

chsh -s $(which bash)

Je suppose que c'est l'équivalent de chsh -s / bin / bash
JohnMerlino

2
which bashdonnerait le chemin absolu de bash, donc ce serait la même chose si /bin/bashc'est où bashétait situé.
ryanjdillon

0

Sur Mac OS Catalina

  1. Passez à zsh:

    chsh -s /bin/zsh
  2. Changer pour bash:

    chsh -s /bin/bash
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.