CHSH(1)

๐ŸŒธ chsh(1) โ€” the chsh manual, bestie edition ๐ŸŒธ

okay so real quick: this is the man page for chsh, section 1 of the manual (User Commands, if you're keeping score ๐Ÿ’…). it's short, it's sweet, and it's gonna change your entire login shell situation. let's go โœจ


โœจ NAME โœจ

chsh โ€” change your login shell ๐Ÿš

like, literally that's the whole job. iconic honestly.


๐ŸŽ€ SYNOPSIS ๐ŸŽ€

chsh [-s shell] [-l] [-h] [-V] [username|UID]

that's it. that's the whole vibe. no cap.


๐Ÿฆ‹ DESCRIPTION ๐Ÿฆ‹

chsh is how you change your login shell, periodt. if you don't hand it a shell right there on the command line, it'll just prompt you for one โ€” very "i'll wait, take your time bestie" energy ๐Ÿซถ

okay and this part matters: chsh supports non-local entries (kerberos, LDAP, etc.) if it's linked with libuser. if it's not? then you're gonna want ypchsh(1), lchsh(1), or literally any other implementation that handles non-local entries. iykyk ๐Ÿ˜ญ


๐Ÿ’… OPTIONS ๐Ÿ’…

  • -s, --shell shell โ€” tell it what your login shell should be. that's the one. that's the main character option ๐Ÿ‘‘
  • -l, --list-shells โ€” prints out the list of shells that live in /etc/shells, then dips and exits. very "here's the menu, i'm out" of it ๐Ÿ“
  • -h, --help โ€” shows the help text and exits. (the short option -h has only existed since version 2.30 โ€” before that it was -u, which is now deprecated. rip -u ๐Ÿชฆ)
  • -V, --version โ€” shows the version and exits. (short option -V is a version 2.39 thing โ€” older versions used -v, which is now deprecated too. they really did a whole glow-up on these flags ๐Ÿ’€)

๐Ÿงš VALID SHELLS ๐Ÿงš

okay so chsh will accept the full pathname of any executable file on the system. any of them. it's very trusting like that ๐Ÿ™ˆ

but here's the catch for the non-root girlies: by default, non-root users only get shells that are actually listed in the /etc/shells file. root just gets a warning instead. and heads up โ€” it can also be configured at compile-time to only issue a warning for all users, so the vibe check on your shell might differ depending on how it was built. just so you know โœจ


โญ EXIT STATUS โญ

  • 0 โ€” slayed. operation was successful ๐Ÿ’–
  • 1 โ€” didn't slay. operation failed, or the command syntax wasn't valid ๐Ÿ˜ญ

๐ŸŒˆ AUTHORS ๐ŸŒˆ

Salvatore Valente <svalente@mit.edu> โ€” thank you for your service king ๐Ÿซก


๐Ÿ”ฅ SEE ALSO ๐Ÿ”ฅ

login(1), login.defs(5), passwd(5), shells(5)

go read shells(5) if you wanna know what's in that file. it's giving necessary context ๐Ÿฆ‹


๐Ÿ’€ REPORTING BUGS ๐Ÿ’€

found a bug? bestie, take it to the issue tracker: <https://github.com/util-linux/util-linux/issues>

they'll handle it. probably. no promises but like, that's the process ๐Ÿซถ


๐Ÿ‘‘ AVAILABILITY ๐Ÿ‘‘

the chsh command is part of the util-linux package, which you can download from the Linux Kernel Archive at <https://www.kernel.org/pub/linux/utils/util-linux/>

like, go get it. it's right there. ๐ŸŒธ


ngl the whole thing is one of the shorter man pages out there โ€” but every single flag still matters, so don't sleep on -l before you go switching your shell to something unhinged ๐Ÿ’…

and that's a wrap, bestie! this page is from util-linux 2.42.4, dated 2026-09-21, and it's the CHSH(1) manual โ€” go change that shell, you absolute icon ๐ŸŽ€โœจ๐Ÿฆ‹

๐Ÿ“ฆ where this page comes from
  • arch rolling: util-linux 2.42.4-1 ยท BSD-2-Clause AND BSD-3-Clause AND BSD-4-Clause-UC AND GPL-2.0-only AND GPL-2.0-or-later AND GPL-3.0-or-later AND ISC AND LGPL-2.1-or-later AND LicenseRef-PublicDomain
  • ๐Ÿ’– girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms