如何更改unix系统上的全局loginshell?

我想设置所有现有和未来用户的loginshell(他们login时获得的shell)。

更改loginshell的正确方法似乎是chsh 。 但是这只允许我改变现有用户的shell。

我可以把shell命令放在/etc/profile ,但是这远不是一个干净的解决scheme。

我正在使用debian,并希望将zsh设置为默认shell。

取决于您用来添加用户的内容。 如果是adduser命令,那么编辑你的/etc/adduser.conf文件 – 你会发现默认的loginshell选项,即: DSHELL

另一方面,如果您更喜欢使用useradd那么将其与-s <shell of choice>参数一起使用。

如果你想改变现有用户的shell,你可以简单地编辑/etc/passwd并在那里修改它。 sed是一个完美的select,以防您需要将更改应用到众多行中。 运行sed 's/bash$/zsh/g' /etc/passwd并查看它的作用。 你应该看到你的/etc/passwd的内容,每个bashzshreplace。 如果你对结果满意,你可以用-i选项运行相同的命令: sed -i 's/bash$/zsh/g' /etc/passwd 。 不要忘了复制原始文件,以防万一:)

我想你可以通过编辑/ etc / default / useradd文件并更改SHELL=行来设置默认值。

我认为useradd可以让你设置: useradd -D

 When invoked with only the -D option, useradd will display the current default values. When invoked with -D plus other options, useradd will update the default values for the specified options. Valid default-changing options are: <...snip...> -s, --shell SHELL The name of a new user's login shell. This option sets the SHELL variable in /etc/default/useradd.