cambiando shell da zsh a bash


17

Il mio server Web è stato manomesso da qualcuno che utilizzava la shell zsh. Mi sento più a mio agio con bash shell, dato che sono le impostazioni predefinite di Ubuntu e OS X (i due principali sistemi operativi che utilizzo). Ma questa domanda è focalizzata sul server Ubuntu. Ho 4 siti Web in esecuzione su questo server Web, utilizzo byobu, utilizzo tmux, utilizzo ruby ​​/ ruby ​​su rotaie, node.js, apache, alcuni demoni. Se cambio l'attuale shell root da zsh a bash, potrebbero esserci degli effetti collaterali negativi che potrebbero derivare da questo switch? Ad esempio, i processi verranno eliminati perché il loro processo padre (la shell) è stato cambiato?


Stai chiedendo le conseguenze del cambiamento (che non sono nessuno, sto usando zsh in questo momento e posso passare a bash ogni volta che mi piace) o stai chiedendo come cambiare efficacemente la shell?
Braiam,

@Braiam Sono nervoso per le conseguenze del cambiamento. Se non ci sono conseguenze, allora cambierò. Stavo solo pensando che la shell era un processo genitore per alcuni di questi demoni come Apache, e se dovessi cambiarlo, avrebbe ucciso il processo Apache. Ma credo di sbagliarmi.
John Merlino,

Risposte:


10

Cambiando la shell, via sudo chsh --shell=/bin/bash $USERcambierà il campo della shell in /etc/passwd. Questo valore viene consultato solo al momento dell'accesso, quando il sistema non ha idea di quale shell utilizzare per te.

I processi in esecuzione, sia che venga avviata da zsh, bash apacheo evil_overlord's_programnon saranno interessati


La shell non è il processo genitore di altri processi in esecuzione in esso, o solo il terminale di controllo (e non la shell) sarebbe considerato il processo genitore?
John Merlino,

Il loginprogramma viene eseguito in un processo, come tutto. Quando ti lascia entrare, crea un altro processo con il tuo UID, ecc. Ed esegue / bin / bash (da / etc / passwd). La shell bash legge da STDIN (impostato da login), ed eseguirà il fork / eseguirà comandi non incorporati, attenderà che terminino e eseguirà il ciclo per ulteriori comandi. L'idea di "controllo terminale" non è utile in Unix / Linux.
Waltinator,

25

Risposta dallo Stack Overflow ( passando da zsh a bash ):

Puoi semplicemente usare exec per sostituire la tua shell corrente con una nuova shell:

Passa a bash:

exec bash

Passa a zsh:

exec zsh

Ciò non influirà sulle nuove finestre del terminale o altro, ma è conveniente.


non ha funzionato. ancora: echo $ SHELL / usr / bin / zsh
ses

8

Apri il tuo terminale e usa il seguente comando:

chsh -s $(which bash)

Presumo che questo sia l'equivalente di chsh -s / bin / bash
John Merlino

2
which bashdarebbe il percorso assoluto di bash, quindi sarebbe lo stesso se /bin/bashè dove bashsi trovava.
Ryanjillon,

0

Su Mac OS Catalina

  1. Passare a zsh:

    chsh -s /bin/zsh
  2. Passa a bash:

    chsh -s /bin/bash
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.