source: postlfs/config/profile.xml@ f8d632a

10.0 10.1 11.0 6.0 6.1 6.2 6.2.0 6.2.0-rc1 6.2.0-rc2 6.3 6.3-rc1 6.3-rc2 6.3-rc3 7.10 7.4 7.5 7.6 7.6-blfs 7.6-systemd 7.7 7.8 7.9 8.0 8.1 8.2 8.3 8.4 9.0 9.1 basic bdubbs/svn elogind gnome kde5-13430 kde5-14269 kde5-14686 ken/refactor-virt krejzi/svn lazarus nosym perl-modules qt5new systemd-11177 systemd-13485 trunk xry111/git-date xry111/git-date-for-trunk xry111/git-date-test
Last change on this file since f8d632a was f8d632a, checked in by Bruce Dubbs <bdubbs@…>, 17 years ago

New XML Chapter 3

git-svn-id: svn://svn.linuxfromscratch.org/BLFS/trunk/BOOK@2287 af4574ff-66df-0310-9fd7-8a98e5e911e0

  • Property mode set to 100644
File size: 15.3 KB
Line 
1<?xml version="1.0" encoding="ISO-8859-1"?>
2<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
3 "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [
4 <!ENTITY % general-entities SYSTEM "../../general.ent">
5 %general-entities;
6]>
7
8<sect1 id="postlfs-config-profile" xreflabel="The Bash Shell Startup Files">
9<?dbhtml filename="profile.html"?>
10<title>The Bash Shell Startup Files</title>
11
12<para>The shell program <filename>/bin/bash</filename> (hereafter
13referred to as just "the shell") uses a collection of startup files to
14help create an environment. Each file has a specific use and
15may affect login and interactive environments differently. The files in
16the <filename class="directory">/etc</filename> directory generally provide global
17settings. If an equivalent file exists in your home directory it may
18override the global settings.
19</para>
20
21<para>An interactive login shell is started after a successful login, using
22<filename>/bin/login</filename>, by reading the <filename>/etc/passwd</filename>
23file. This shell invocation normally reads <filename>/etc/profile</filename>
24and its private equivalent <filename>~/.bash_profile</filename> upon startup.</para>
25
26<para>An interactive non-login shell is normally started at the command-line
27(e.g., <prompt>[prompt]$</prompt><command>/bin/bash</command>) or by the
28<command>/bin/su</command> command. An interactive non-login shell is also
29started with a terminal program such as <command>xterm</command> or
30<command>konsole</command> from within a graphical environment. This type of
31shell invocation normally copies the parent environment and then reads the
32user's <filename>~/.bashrc</filename> file for additional startup configuration
33instructions.</para>
34
35<para>A non-interactive shell is usually present when a shell script is
36running. It is non-interactive because it is processing a script and not
37waiting for user input between commands. For these shell invocations, only
38the environment inherited from the parent shell is used.</para>
39
40<para> The file <filename>~/.bash_logout</filename> is not used for an
41invocation of the shell. It is read and executed when a user exits from an
42interactive login shell.</para>
43
44<para>To the standard files, we also add <filename>/etc/bashrc</filename>
45which is called from the user's <filename>~/.bashrc</filename> for
46system wide initialization of non-login shells.</para>
47
48<para>For more information see <command>info bash</command> --
49<emphasis role="strong">Nodes: Bash Startup Files and Interactive
50Shells.</emphasis></para>
51
52<sect2>
53<title><filename>/etc/profile</filename></title>
54
55<para>Here is a base <filename>/etc/profile</filename>. This file starts by
56setting up some helper functions and some basic parameters. It specifies some
57<filename>bash</filename> history parameters and, for security purposes,
58disables keeping a permanent history file for the root user. It also sets a
59default user prompt. It then calls small, single purpose scripts in the
60<filename class='directory'>/etc/profile.d</filename> directory to provide most
61initialization. </para>
62
63<para>For more information on the escape sequences you can use for your prompt
64(e.g., the <envar>PS1</envar> environment variable) see <command>info
65bash</command> -- <emphasis role="strong">Node: Printing a
66Prompt.</emphasis></para>
67
68<screen><userinput><command>cat &gt; /etc/profile &lt;&lt; "EOF"</command>
69# Begin /etc/profile
70# Written for Beyond Linux From Scratch
71# by James Robertson &lt;jameswrobertson@earthlink.net&gt;
72# modifications by Dagmar d'Surreal &lt;rivyqntzne@pbzpnfg.arg&gt;
73
74# System wide environment variables and startup programs.
75
76# System wide aliases and functions should go in /etc/bashrc. Personal
77# environment variables and startup programs should go into
78# ~/.bash_profile. Personal aliases and functions should go into
79# ~/.bashrc.
80
81# Functions to help us manage paths. Second argument is the name of the
82# path variable to be modified (default: PATH)
83pathremove () {
84 local IFS=':'
85 local NEWPATH
86 local DIR
87 local PATHVARIABLE=${2:-PATH}
88 for DIR in ${!PATHVARIABLE} ; do
89 if [ "$DIR" != "$1" ] ; then
90 NEWPATH=${NEWPATH:+$NEWPATH:}$DIR
91 fi
92 done
93 export $PATHVARIABLE="$NEWPATH"
94}
95
96pathprepend () {
97 pathremove $1 $2
98 local PATHVARIABLE=${2:-PATH}
99 export $PATHVARIABLE="$1${!PATHVARIABLE:+:${!PATHVARIABLE}}"
100}
101
102pathappend () {
103 pathremove $1 $2
104 local PATHVARIABLE=${2:-PATH}
105 export $PATHVARIABLE="${!PATHVARIABLE:+${!PATHVARIABLE}:}$1"
106}
107
108if [ $EUID -eq 0 ] ; then
109 unset HISTFILE
110fi
111
112# Setup some environment variables.
113export HISTSIZE=1000
114export HISTIGNORE="&amp;:[bf]g:exit"
115#export PS1="[\u@\h \w]\\$ "
116export PS1='\u@\h:\w\$ '
117
118for script in /etc/profile.d/*.sh ; do
119 if [ -x $script ] ; then
120 . $script
121 fi
122done
123
124# Now to clean up after ourselves
125unset pathremove pathprepend pathappend
126
127# End /etc/profile
128<command>EOF</command></userinput></screen>
129
130<para>Now create the <filename class='directory'>/etc/profile.d</filename> directory.</para>
131
132<screen><userinput><command>install --directory --mode=0755 --owner=root --group=root /etc/profile.d</command></userinput></screen>
133
134<sect3>
135<title><filename>/etc/profile.d/dircolors.sh</filename></title>
136
137<para>This script uses the <filename>~/.dircolors</filename> and
138<filename>/etc/dircolors</filename> files to control the colors of file names in a
139directory listing. They control colorized output of things like <command>ls
140--color</command>. The explaination of how to initialize these files is at the
141end of this section. </para>
142
143
144<screen><userinput><command>cat &gt; /etc/profile.d/dircolors.sh &lt;&lt; "EOF"</command>
145# Setup for /bin/ls to support color, the alias is in /etc/bashrc.
146if [ -f "/etc/dircolors" ] ; then
147 eval $(dircolors -b /etc/dircolors)
148
149 if [ -f "$HOME/.dircolors" ] ; then
150 eval $(dircolors -b $HOME/.dircolors)
151 fi
152fi
153alias ls='ls --color=auto'
154<command>EOF</command></userinput></screen>
155</sect3>
156
157
158<sect3>
159<title><filename>/etc/profile.d/extrapaths.sh</filename></title>
160
161<para>This script adds several useful paths to the <envar>PATH</envar> and
162<envar>PKG_CONFIG_PATH</envar> environment variables. If you want, you can uncomment
163the last section to put a dot at the end of your path. This will allow executables in the
164current working directory to be executed without specifiying a ./, however
165you are warned that this is generally considered a security hazard.</para>
166
167<screen><userinput><command>cat &gt; /etc/profile.d/extrapaths.sh &lt;&lt; "EOF"</command>
168if [ -d /usr/local/lib/pkgconfig ] ; then
169 pathappend /usr/local/lib/pkgconfig PKG_CONFIG_PATH
170fi
171if [ -d /usr/local/bin ]; then
172 pathprepend /usr/local/bin
173fi
174if [ -d /usr/local/sbin -a $EUID -eq 0 ]; then
175 pathprepend /usr/local/sbin
176fi
177for directory in $(find /opt/*/lib/pkgconfig -type d); do
178 pathappend $directory PKG_CONFIG_PATH
179done
180for directory in $(find /opt/*/bin -type d); do
181 pathappend $directory
182done
183if [ -d ~/bin ]; then
184 pathprepend ~/bin
185fi
186#if [ $EUID -gt 99 ]; then
187# pathappend .
188#fi
189<command>EOF</command></userinput></screen>
190</sect3>
191
192<sect3>
193<title><filename>/etc/profile.d/readline.sh</filename></title>
194
195<para>This script sets up the default <filename>inputrc</filename> configuration file.
196If the user does not have individual settings, it uses the global file.</para>
197
198<screen><userinput><command>cat &gt; /etc/profile.d/readline.sh &lt;&lt; "EOF"</command>
199# Setup the INPUTRC environment variable.
200if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ] ; then
201 INPUTRC=/etc/inputrc
202fi
203export INPUTRC
204<command>EOF</command></userinput></screen>
205</sect3>
206
207<sect3>
208<title><filename>/etc/profile.d/tinker-term.sh</filename></title>
209
210<para>Some applications need a specific <envar>TERM</envar> setting to support color.</para>
211
212<screen><userinput><command>cat &gt; /etc/profile.d/tinker-term.sh &lt;&lt; "EOF"</command>
213# This will tinker with the value of TERM in order to convince certain apps
214# that we can, indeed, display color in their window.
215
216if [ -n "$COLORTERM" ]; then
217 export TERM=xterm-color
218fi
219
220if [ "$TERM" = "xterm" ]; then
221 export TERM=xterm-color
222fi
223<command>EOF</command></userinput></screen>
224</sect3>
225
226<sect3>
227<title><filename>/etc/profile.d/umask.sh</filename></title>
228
229<para>Setting the <command>umask</command> value is important for security. Here
230we turn off the default group write permissions for system users and when the
231user name and group name are not the same.</para>
232
233<screen><userinput><command>cat &gt; /etc/profile.d/umask.sh &lt;&lt; "EOF"</command>
234# By default we want the umask to get set.
235if [ "$(id -gn)" = "$(id -un)" -a $EUID -gt 99 ] ; then
236 umask 002
237else
238 umask 022
239fi
240<command>EOF</command></userinput></screen>
241</sect3>
242
243<sect3>
244<title><filename>/etc/profile.d/X.sh</filename></title>
245
246<para>If <application>X</application> is installed, we also update the <envar>PATH</envar>
247and <envar>PKG_CONFIG_PATH</envar> variables.</para>
248
249<screen><userinput><command>cat &gt; /etc/profile.d/X.sh &lt;&lt; "EOF"</command>
250if [ -x /usr/X11R6/bin/X ]; then
251 pathappend /usr/X11R6/bin
252fi
253if [ -d /usr/X11R6/lib/pkgconfig ] ; then
254 pathappend /usr/X11R6/lib/pkgconfig PKG_CONFIG_PATH
255fi
256<command>EOF</command></userinput></screen>
257</sect3>
258
259<sect3>
260<title><filename>/etc/profile.d/xterm-titlebars.sh</filename></title>
261
262<para>This script shows an example of a different way of setting the prompt. The normal
263variable, <envar>PS1</envar>, is supplemented by <envar>PROMPT_COMMAND</envar>.
264If set, the value of <envar>PROMPT_COMMAND</envar> is executed as a command prior to
265issuing each primary prompt. </para>
266
267<screen><userinput><command>cat &gt; /etc/profile.d/xterm-titlebars.sh &lt;&lt; "EOF"</command>
268# The substring match ensures this will work for "xterm" and "xterm-xfree86".
269if [ "${TERM:0:5}" = "xterm" ]; then
270 PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME} : ${PWD}\007"'
271 export PROMPT_COMMAND
272fi
273<command>EOF</command></userinput></screen>
274
275<para>Other initialization can easily be added to the <filename>profile</filename>
276by adding additional scripts to the
277<filename class='directory'>/etc/profile.d</filename> directory.</para>
278</sect3>
279</sect2>
280
281<sect2>
282<title><filename>/etc/bashrc</filename></title>
283<para>Here is a base <filename>/etc/bashrc</filename>. Comments in the
284file should explain everything you need.</para>
285
286<screen><userinput><command>cat &gt; /etc/bashrc &lt;&lt; "EOF"</command>
287# Begin /etc/bashrc
288# Written for Beyond Linux From Scratch
289# by James Robertson &lt;jameswrobertson@earthlink.net&gt;
290
291# System wide aliases and functions.
292
293# System wide environment variables and startup programs should go into
294# /etc/profile. Personal environment variables and startup programs
295# should go into ~/.bash_profile. Personal aliases and functions should
296# go into ~/.bashrc
297
298# Provides a colored /bin/ls command. Used in conjunction with code in
299# /etc/profile.
300
301alias ls='ls --color=auto'
302
303# Provides prompt for non-login shells, specifically shells started
304# in the <application>X</application> environment. [Review the LFS archive thread titled
305# PS1 Environment Variable for a great case study behind this script addendum.]
306
307#export PS1="[\u@\h \w]\\$ "
308export PS1='\u@\h:\w\$ '
309
310# End /etc/bashrc
311<command>EOF</command></userinput></screen>
312</sect2>
313
314
315<sect2>
316<title><filename>~/.bash_profile</filename></title>
317
318<para>Here is a base <filename>~/.bash_profile</filename>. If you want each
319new user to have this file automatically, just change the output of
320the command to <filename>/etc/skel/.bash_profile</filename> and check the
321permissions after the command is run. You can then copy
322<filename>/etc/skel/.bash_profile</filename> to the home directories of already
323existing users, including root, and set the owner and group appropriately.
324</para>
325
326<screen><userinput><command>cat &gt; ~/.bash_profile &lt;&lt; "EOF"</command>
327# Begin ~/.bash_profile
328# Written for Beyond Linux From Scratch
329# by James Robertson &lt;jameswrobertson@earthlink.net&gt;
330# updated by Bruce Dubbs &lt;bdubbs@linuxfromscratch.org&gt;
331
332# Personal environment variables and startup programs.
333
334# Personal aliases and functions should go in ~/.bashrc. System wide
335# environment variables and startup programs are in /etc/profile.
336# System wide aliases and functions are in /etc/bashrc.
337
338append () {
339 # First remove the directory
340 local IFS=':'
341 local NEWPATH
342 for DIR in $PATH; do
343 if [ "$DIR" != "$1" ]; then
344 NEWPATH=${NEWPATH:+$NEWPATH:}$DIR
345 fi
346 done
347
348 # Then append the directory
349 export PATH=$NEWPATH:$1
350}
351
352if [ -f "$HOME/.bashrc" ] ; then
353 source $HOME/.bashrc
354fi
355
356if [ -d "$HOME/bin" ] ; then
357 append $HOME/bin
358fi
359
360unset append
361
362# End ~/.bash_profile
363<command>EOF</command></userinput></screen>
364</sect2>
365
366<sect2>
367<title><filename>~/.bashrc</filename></title>
368
369<para>Here is a base <filename>~/.bashrc</filename>. The comments and
370instructions for using <filename class="directory">/etc/skel</filename> for
371<filename>.bash_profile</filename> above also apply here. Only the target file
372names are different.</para>
373
374<screen><userinput><command>cat &gt; ~/.bashrc &lt;&lt; "EOF"</command>
375# Begin ~/.bashrc
376# Written for Beyond Linux From Scratch
377# by James Robertson &lt;jameswrobertson@earthlink.net&gt;
378
379# Personal aliases and functions.
380
381# Personal environment variables and startup programs should go in
382# ~/.bash_profile. System wide environment variables and startup
383# programs are in /etc/profile. System wide aliases and functions are
384# in /etc/bashrc.
385
386if [ -f "/etc/bashrc" ] ; then
387 source /etc/bashrc
388fi
389
390# End ~/.bashrc
391<command>EOF</command></userinput></screen>
392</sect2>
393
394
395<sect2>
396<title><filename>~/.bash_logout</filename></title>
397
398<para>This is an empty <filename>~/.bash_logout</filename> that can be used as
399a template. You will notice that the base <filename>~/.bash_logout</filename>
400does not include a <userinput>clear</userinput> command. This is because the
401clear is handled in the <filename>/etc/issue</filename> file.</para>
402
403<screen><userinput><command>cat &gt; ~/.bash_logout &lt;&lt; "EOF"</command>
404# Begin ~/.bash_logout
405# Written for Beyond Linux From Scratch
406# by James Robertson &lt;jameswrobertson@earthlink.net&gt;
407
408# Personal items to perform on logout.
409
410# End ~/.bash_logout
411<command>EOF</command></userinput></screen>
412</sect2>
413
414
415<sect2>
416<title><filename>/etc/dircolors</filename></title>
417
418<para> If you want to use the <filename>dircolors</filename> capability, then
419run the following command. The <filename class="directory">/etc/skel</filename>
420setup steps seen above also can be used here to provide a
421<filename>.dircolors</filename> file when a new user is set up. As before, just
422change the output file name on the following command and assure the
423permissions, owner, and group are correct on the files created and/or copied.
424</para>
425
426<screen><userinput><command>dircolors -p > /etc/dircolors</command></userinput></screen>
427
428<para>If you wish to customize the colors used for different file types, you can
429edit the <filename>/etc/dircolors</filename> file. The instructions for setting
430the colors are embedded in the file.</para>
431
432
433<para>Finally, Ian Macdonald has written an excellent collection of tips and
434tricks to enhance your shell environment. You can read it online at
435<ulink
436url="http://www.caliban.org/bash/index.shtml">http://www.caliban.org/bash/index.shtml</ulink>.</para>
437</sect2>
438</sect1>
Note: See TracBrowser for help on using the repository browser.