Hi all I have a quick question. Is it better for my zsh shell to be in /usr/bin/zsh or /bin/zsh. I remember reading that one of them would mess up the whole system since zsh is not posix compliant. I believe that szh shouldn’t be set as the root shell. I now have it in /usr/bin/zsh, is that good? So now when I drop into a root shell I don’t get they autocompletion feature that zsh has. I’d also lose that fancy theme. Does that mean my root shell is still bash? Thanks

4 points

I wouldn’t worry about deployment path; there are many reasons not use a fancy shell with root.

permalink
report
reply
4 points

Up until now, I’ve only been commenting on other peoples comments to nitpick. I think it is time to give you a comprehensive answer on my own:

You didn’t mention, what distribution you are using. Either way, you should use your distributions package manager to install zsh. Wherever that places the zsh binary is fine; you should not change that! If you want to know where the zsh binary is located, you can issue the command which zsh. That zsh should somehow be dangerous as a root shell because it is not POSIX compliant is nonsense. You can use whatever you like as a shell for root. If you don’t want to change the login shell for root, you can just start every shell from any shell by executing it’s binary (i.e. in bash type zsh, or the other way around). If you want to know what shells on your system are considered viable login shells by your system, you can issue the command cat /etc/shells; in your case it should list /usr/bin/zsh. If you want to change the login shell for a user, as that user run chsh -s ... where … is the fully qualified path of a valid login shell; to be sure to not make typos or use an alternate path, you can combine that with which, and for example to use zsh use the command chsh -s $(which zsh). If you are the sole user of your system, I’d strongly recommend using seperate configurations for zsh for your normal user and root.

So now when I drop into a root shell I don’t get […]

Issuing su - or sudo -i or logging in as root in a full screen TTY (ctrl+alt+F*) will spawn a new shell (the login shell configured for root). If you are unsure, what shell you’re currently in, you can find that out, by issuing the command readlink /proc/$$/exe. If readlink is not available on your system, you can use ps -fp $$; be aware though, that that will show you the command the shell was started with, not necessarily the path of the shell executable.

If you want to write scripts you should always specify the shell it should be executed by with a shebang. For maximum portability/compatibility (do you like to distro hop? want to share it with a friend/the internet?) you should use env in the shebang. For you, if you want to script with zsh, that simply means always having #!/usr/bin/env zsh as the first line of scripts.

permalink
report
reply
4 points

One may just be a symlink to the other depending on your distro. For shebang lines, I’d probably go with /bin/zsh

permalink
report
reply
1 point

So is the one you’re suggesting not the root one? I’m running endeavourOS. Should I switch it to /bin/zsh?

permalink
report
parent
reply
1 point

typically I wouldn’t recommend just moving file paths for packages, especially if you aren’t sure what you’re doing. assuming all you did was chsh -s, I wouldn’t worry about it.

permalink
report
parent
reply
1 point
*

All I did was chsh -s /usr/bin/zsh

permalink
report
parent
reply
1 point

tbh I always go with env variables, usually $SHELL or $zsh are set

permalink
report
parent
reply
3 points

/bin is symlinked to /usr/bin, so it doesn’t matter.

permalink
report
reply
3 points

While this is true for most linux distributions, it’s not true for all and there are other POSIX compliant OSs which are not linux at all:

/ # grep -i pretty /etc/*-release
/etc/os-release:PRETTY_NAME="Alpine Linux v3.18"
/ # ls -ld /bin
drwxr-xr-x    2 root     root           862 Aug  7 13:09 /bin
/ # 

As you can see, /bin is not a symlink there.

permalink
report
parent
reply
1 point

In your terminal. ;)

permalink
report
reply

Linux

!linux@lemmy.ml

Create post

From Wikipedia, the free encyclopedia

Linux is a family of open source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991 by Linus Torvalds. Linux is typically packaged in a Linux distribution (or distro for short).

Distributions include the Linux kernel and supporting system software and libraries, many of which are provided by the GNU Project. Many Linux distributions use the word “Linux” in their name, but the Free Software Foundation uses the name GNU/Linux to emphasize the importance of GNU software, causing some controversy.

Rules

  • Posts must be relevant to operating systems running the Linux kernel. GNU/Linux or otherwise.
  • No misinformation
  • No NSFW content
  • No hate speech, bigotry, etc

Related Communities

Community icon by Alpár-Etele Méder, licensed under CC BY 3.0

Community stats

  • 43

    Monthly active users

  • 3.3K

    Posts

  • 19K

    Comments