Shell Related Questions

1. How can I change my default shell ?
2. How can set the user to a restricted shell ?
3. How does the environment set when I use Bash shell ?

1. How can I change my default shell ?

Use the command chsh or edit /etc/passwd

with the root user rights enter the command yast then System Administarion->User administration select the user you want modified with F3 function key and when you come to login shell again press F3 and select the shell and finish. When you login as that user you can have the shell you have assigned in Yast

The interactive way to deal with it is through usermod. Something like (don't quote , read the man page):

  # usermod -s USER /qualified/path/to/shell
	

2. How can set the user to a restricted shell ?

Simply give the user /usr/bin/rbash instead of /usr/bin/bash as a login shell. If bash is either called with the -r parameter or as rbash, it will react as restricted shell. See info bash for further documentation.

3. How does the environment set when I use Bash shell ?

Keith Winston

Applies to SuSE 7.3

SuSE 7.3 Bash Initialization. This is an overview of what gets set where when you use a bash shell in SuSE. The process works a little differently if you are running a different shell (zsh, ksh, [t]csh, etc.).

The files are processed in this order:

/etc/profile

global config, initializes the terminal (sets the TERM variable and unsets TERMCAP since SuSE uses terminfo instead of termcap), sets umask 022, sets initial PATH, MANPATH and a few other variables, sources /etc/SuSEconfig/profile, sources all *.sh files in /etc/profile.d/, sources /etc/profile.local, sources /etc/bash.bashrc, sources ~/.bashrc. It includes code to prevent ~/.bashrc from running more than once depending on whether it has already been executed.

/etc/SuSEconfig/profile

this file is generated by SuSEconfig from settings in the /etc/rc.config file. It sets language environment variables, KDEDIR, QTDIR, PRINTER and WINDOWMANAGER.

/etc/profile.d/*.sh

application specific settings such as jade_dsl.sh, medusa-idled.sh (search engine used by nautilus), sp.sh, tetex.sh. Most of these were not activated for my installation.

/etc/profile.local

doesn't exist by default. Best place to put global aliases, global shell and environment variables, etc.

/etc/bash.bashrc

sets some shell functions (startx and remount), also sets some aliases (+=pushd, -=popd, o=less, others), sets the PS1 variable which controls the format of the prompt, sets other variables, if bash 2.0+ it also sources/etc/profile.d/complete.bash.

/etc/profile.d/complete.bash

sets a couple of shell options (shopt), customizes the bash "complete" builtin behavior (file completion). SuSE did some serious work to optimize this part of the bash configuration.

~/.bashrc

finally, your own bash settings are run. You can override anything that has been set previously since this file is sourced last (prompt, variables, etc.). The default SuSE .bashrc includes code to check for /etc/profile.dos and sources it if it exists. It also checks for ~/.alias and sources it if it exists.

/etc/profile.dos

sets up aliases for DOS commands (del, move, copy, etc.)

~/.alias

best place to put your custom alias definitions.

Then, bash looks for additional config files to run...

For login shells, it looks for these files, in order, and executes commands from the FIRST one that exists and is readable.

~/.bash_profile 

doesn't exist by default.

~/.bash_login 

doesn't exist by default. You can create it and put custom commands here that you only want to happen once when you first login. If this file exists, then the ~/.profile will not run. Normally, this is not a problem since ~/.profile does not do much and the ~/.bashrc gets sourced from /etc/profile.

~/.profile 

sets LANG variable, sources /etc/profile, iF it has not already been run (checks PROFILEREAD variable), sources ~/.bashrc, runs the fortune program if you uncomment it.

For interactive non-login shells, bash looks for this file:

~/.bashrc 

this is where most custom user settings should go.

When you logout, it looks for this file:

~/.bash_logout 

file doesn't exist by default. If you want to do something every time you logout, create this file and load it up.

Copyright 2002-2003 Togan Muftuoglu