source: postlfs/config/profile.xml@ d56adcc

10.0 10.1 11.0 11.1 11.2 11.3 12.0 12.1 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 kea ken/TL2024 ken/inkscape-core-mods ken/tuningfonts krejzi/svn lazarus lxqt nosym perl-modules plabs/newcss plabs/python-mods python3.11 qt5new rahul/power-profiles-daemon renodr/vulkan-addition systemd-11177 systemd-13485 trunk upgradedb xry111/intltool xry111/llvm18 xry111/soup3 xry111/test-20220226 xry111/xf86-video-removal
Last change on this file since d56adcc was d56adcc, checked in by Dan Nichilson <dnicholson@…>, 17 years ago

Fix extrapaths.sh to find correct dirs in /opt

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

  • Property mode set to 100644
File size: 19.3 KB
Line 
1<?xml version="1.0" encoding="ISO-8859-1"?>
2<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
3 "http://www.oasis-open.org/docbook/xml/4.5/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
11 <sect1info>
12 <othername>$LastChangedBy$</othername>
13 <date>$Date$</date>
14 </sect1info>
15
16 <title>The Bash Shell Startup Files</title>
17
18 <para>The shell program <filename>/bin/bash</filename> (hereafter
19 referred to as just "the shell") uses a collection of startup files to
20 help create an environment. Each file has a specific use and
21 may affect login and interactive environments differently. The files in
22 the <filename class="directory">/etc</filename> directory generally provide
23 global settings. If an equivalent file exists in your home directory it may
24 override the global settings.</para>
25
26 <para>An interactive login shell is started after a successful login, using
27 <filename>/bin/login</filename>, by reading the <filename>/etc/passwd</filename>
28 file. This shell invocation normally reads <filename>/etc/profile</filename>
29 and its private equivalent <filename>~/.bash_profile</filename> upon
30 startup.</para>
31
32 <para>An interactive non-login shell is normally started at the command-line
33 using a shell program (e.g.,
34 <prompt>[prompt]$</prompt><command>/bin/bash</command>) or by the
35 <command>/bin/su</command> command. An interactive non-login shell is also
36 started with a terminal program such as <command>xterm</command> or
37 <command>konsole</command> from within a graphical environment. This type of
38 shell invocation normally copies the parent environment and then reads the
39 user's <filename>~/.bashrc</filename> file for additional startup configuration
40 instructions.</para>
41
42 <para>A non-interactive shell is usually present when a shell script is
43 running. It is non-interactive because it is processing a script and not
44 waiting for user input between commands. For these shell invocations, only
45 the environment inherited from the parent shell is used.</para>
46
47 <para> The file <filename>~/.bash_logout</filename> is not used for an
48 invocation of the shell. It is read and executed when a user exits from an
49 interactive login shell.</para>
50
51 <para>Many distributions use <filename>/etc/bashrc</filename> for system wide
52 initialization of non-login shells. This file is usually called from the
53 user's <filename>~/.bashrc</filename> file and is not built directly into
54 <command>bash</command> itself. This convention is followed in this
55 section.</para>
56
57 <para>For more information see <command>info bash</command> --
58 <emphasis role="strong">Nodes: Bash Startup Files and Interactive
59 Shells</emphasis>.</para>
60
61 <note>
62 <para>Most of the instructions below are used to create files located in
63 the <filename class='directory'>/etc</filename> directory structure which
64 requires you to execute the commands as the
65 <systemitem class='username'>root</systemitem> user. If you elect to create
66 the files in user's home directories instead, you should run the commands
67 as an unprivileged user.</para>
68 </note>
69
70 <sect2 id="etc-profile-profile">
71 <title>/etc/profile</title>
72
73 <indexterm zone="postlfs-config-profile etc-profile-profile">
74 <primary sortas="e-etc-profile">/etc/profile</primary>
75 </indexterm>
76
77 <para>Here is a base <filename>/etc/profile</filename>. This file starts by
78 setting up some helper functions and some basic parameters. It specifies some
79 <command>bash</command> history parameters and, for security purposes,
80 disables keeping a permanent history file for the <systemitem
81 class="username">root</systemitem> user. It also sets a
82 default user prompt. It then calls small, single purpose scripts in the
83 <filename class='directory'>/etc/profile.d</filename> directory to provide most
84 of the initialization.</para>
85
86 <para>For more information on the escape sequences you can use for your prompt
87 (i.e., the <envar>PS1</envar> environment variable) see <command>info
88 bash</command> -- <emphasis role="strong">Node: Printing a
89 Prompt</emphasis>.</para>
90
91<screen role="root"><userinput>cat &gt; /etc/profile &lt;&lt; "EOF"
92<literal># Begin /etc/profile
93# Written for Beyond Linux From Scratch
94# by James Robertson &lt;jameswrobertson@earthlink.net&gt;
95# modifications by Dagmar d'Surreal &lt;rivyqntzne@pbzpnfg.arg&gt;
96
97# System wide environment variables and startup programs.
98
99# System wide aliases and functions should go in /etc/bashrc. Personal
100# environment variables and startup programs should go into
101# ~/.bash_profile. Personal aliases and functions should go into
102# ~/.bashrc.
103
104# Functions to help us manage paths. Second argument is the name of the
105# path variable to be modified (default: PATH)
106pathremove () {
107 local IFS=':'
108 local NEWPATH
109 local DIR
110 local PATHVARIABLE=${2:-PATH}
111 for DIR in ${!PATHVARIABLE} ; do
112 if [ "$DIR" != "$1" ] ; then
113 NEWPATH=${NEWPATH:+$NEWPATH:}$DIR
114 fi
115 done
116 export $PATHVARIABLE="$NEWPATH"
117}
118
119pathprepend () {
120 pathremove $1 $2
121 local PATHVARIABLE=${2:-PATH}
122 export $PATHVARIABLE="$1${!PATHVARIABLE:+:${!PATHVARIABLE}}"
123}
124
125pathappend () {
126 pathremove $1 $2
127 local PATHVARIABLE=${2:-PATH}
128 export $PATHVARIABLE="${!PATHVARIABLE:+${!PATHVARIABLE}:}$1"
129}
130
131
132# Set the initial path
133export PATH=/bin:/usr/bin
134
135if [ $EUID -eq 0 ] ; then
136 pathappend /sbin:/usr/sbin
137 unset HISTFILE
138fi
139
140# Setup some environment variables.
141export HISTSIZE=1000
142export HISTIGNORE="&amp;:[bf]g:exit"
143#export PS1="[\u@\h \w]\\$ "
144export PS1='\u@\h:\w\$ '
145
146for script in /etc/profile.d/*.sh ; do
147 if [ -r $script ] ; then
148 . $script
149 fi
150done
151
152# Now to clean up
153unset pathremove pathprepend pathappend
154
155# End /etc/profile</literal>
156EOF</userinput></screen>
157
158 <sect3 id="etc-profile.d">
159 <title>The /etc/profile.d Directory</title>
160
161 <indexterm zone="postlfs-config-profile etc-profile.d">
162 <primary sortas="e-etc-profile.d">/etc/profile.d</primary>
163 </indexterm>
164
165 <para>Now create the <filename class='directory'>/etc/profile.d</filename>
166 directory, where the individual initialization scripts are placed:</para>
167
168<screen role="root"><userinput>install --directory --mode=0755 --owner=root --group=root /etc/profile.d</userinput></screen>
169
170 </sect3>
171
172 <sect3 id="etc-profile.d-dircolors.sh">
173 <title>/etc/profile.d/dircolors.sh</title>
174
175 <indexterm zone="postlfs-config-profile etc-profile.d-dircolors.sh">
176 <primary sortas="e-etc-profile.d-dircolors.sh">/etc/profile.d/dircolors.sh</primary>
177 </indexterm>
178
179 <para>This script uses the <filename>~/.dircolors</filename> and
180 <filename>/etc/dircolors</filename> files to control the colors of file names in a
181 directory listing. They control colorized output of things like <command>ls
182 --color</command>. The explanation of how to initialize these files is at the
183 end of this section.</para>
184
185<screen role="root"><userinput>cat &gt; /etc/profile.d/dircolors.sh &lt;&lt; "EOF"
186<literal># Setup for /bin/ls to support color, the alias is in /etc/bashrc.
187if [ -f "/etc/dircolors" ] ; then
188 eval $(dircolors -b /etc/dircolors)
189
190 if [ -f "$HOME/.dircolors" ] ; then
191 eval $(dircolors -b $HOME/.dircolors)
192 fi
193fi
194alias ls='ls --color=auto'</literal>
195EOF</userinput></screen>
196
197 </sect3>
198
199 <sect3 id="extrapaths.sh">
200 <title>/etc/profile.d/extrapaths.sh</title>
201
202 <indexterm zone="postlfs-config-profile extrapaths.sh">
203 <primary sortas="e-etc-profile.d-extrapaths.sh">/etc/profile.d/extrapaths.sh</primary>
204 </indexterm>
205
206 <para>This script adds several useful paths to the <envar>PATH</envar> and
207 <envar>PKG_CONFIG_PATH</envar> environment variables. If you want, you
208 can uncomment the last section to put a dot at the end of your path. This will
209 allow executables in the current working directory to be executed without
210 specifiying a ./, however you are warned that this is generally considered a
211 security hazard.</para>
212
213<screen role="root"><userinput>cat &gt; /etc/profile.d/extrapaths.sh &lt;&lt; "EOF"
214<literal>if [ -d /usr/local/lib/pkgconfig ] ; then
215 pathappend /usr/local/lib/pkgconfig PKG_CONFIG_PATH
216fi
217if [ -d /usr/local/bin ]; then
218 pathprepend /usr/local/bin
219fi
220if [ -d /usr/local/sbin -a $EUID -eq 0 ]; then
221 pathprepend /usr/local/sbin
222fi
223
224for dir in /opt{,/*}/lib/pkgconfig; do
225 [ -d "$dir" ] || continue
226 pathappend $dir PKG_CONFIG_PATH
227done
228for dir in /opt{,/*}/bin; do
229 [ -d "$dir" ] || continue
230 pathappend $dir
231done
232unset dir
233
234if [ -d ~/bin ]; then
235 pathprepend ~/bin
236fi
237#if [ $EUID -gt 99 ]; then
238# pathappend .
239#fi</literal>
240EOF</userinput></screen>
241
242 </sect3>
243
244 <sect3 id="readline.sh">
245 <title>/etc/profile.d/readline.sh</title>
246
247 <indexterm zone="postlfs-config-profile readline.sh">
248 <primary sortas="e-etc-profile.d-readline.sh">/etc/profile.d/readline.sh</primary>
249 </indexterm>
250
251 <para>This script sets up the default <filename>inputrc</filename>
252 configuration file. If the user does not have individual settings, it uses the
253 global file.</para>
254
255<screen role="root"><userinput>cat &gt; /etc/profile.d/readline.sh &lt;&lt; "EOF"
256<literal># Setup the INPUTRC environment variable.
257if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ] ; then
258 INPUTRC=/etc/inputrc
259fi
260export INPUTRC</literal>
261EOF</userinput></screen>
262
263 </sect3>
264
265 <sect3 id="umask.sh">
266 <title>/etc/profile.d/umask.sh</title>
267
268 <indexterm zone="postlfs-config-profile umask.sh">
269 <primary sortas="e-etc-profile.d-umask.sh">/etc/profile.d/umask.sh</primary>
270 </indexterm>
271
272 <para>Setting the <command>umask</command> value is important for security.
273 Here the default group write permissions are turned off for system users and when
274 the user name and group name are not the same.</para>
275
276<screen role="root"><userinput>cat &gt; /etc/profile.d/umask.sh &lt;&lt; "EOF"
277<literal># By default we want the umask to get set.
278if [ "$(id -gn)" = "$(id -un)" -a $EUID -gt 99 ] ; then
279 umask 002
280else
281 umask 022
282fi</literal>
283EOF</userinput></screen>
284
285 </sect3>
286
287 <sect3 id="X.sh">
288 <title>/etc/profile.d/X.sh</title>
289
290 <indexterm zone="postlfs-config-profile X.sh">
291 <primary sortas="e-etc-profile.d-X.sh">/etc/profile.d/X.sh</primary>
292 </indexterm>
293
294 <para>If <application>X</application> is installed, the <envar>PATH</envar>
295 and <envar>PKG_CONFIG_PATH</envar> variables are also updated.</para>
296
297<screen role="root"><userinput>cat &gt; /etc/profile.d/X.sh &lt;&lt; "EOF"
298<literal>if [ -x /usr/X11R6/bin/X ]; then
299 pathappend /usr/X11R6/bin
300fi
301if [ -d /usr/X11R6/lib/pkgconfig ] ; then
302 pathappend /usr/X11R6/lib/pkgconfig PKG_CONFIG_PATH
303fi</literal>
304EOF</userinput></screen>
305
306 </sect3>
307
308 <sect3 id="extra-prompt.sh">
309 <title>/etc/profile.d/extra-prompt.sh</title>
310
311 <indexterm zone="postlfs-config-profile extra-prompt.sh">
312 <primary sortas="e-etc-profile.d-prompt.sh">/etc/profile.d/extra-prompt.sh</primary>
313 </indexterm>
314
315 <para>This script shows an example of a different way of setting the
316 prompt. The normal variable, <envar>PS1</envar>, is supplemented by
317 <envar>PROMPT_COMMAND</envar>. If set, the value of
318 <envar>PROMPT_COMMAND</envar> is executed as a command prior to issuing
319 each primary prompt. The sequence \e is an ESC character. \a is a
320 BEL character. For a reference on <command>xterm</command> escape
321 sequences, see <ulink
322 url="http://rtfm.etla.org/xterm/ctlseq.html"/>.</para>
323
324<screen role="root"><userinput>cat &gt; /etc/profile.d/extra-prompt.sh &lt;&lt; "EOF"
325<literal>PROMPT_COMMAND='echo -ne "\e[1m${USER}@${HOSTNAME} : ${PWD}\e[0m\a"'
326export PROMPT_COMMAND</literal>
327EOF</userinput></screen>
328
329 <para>The escape sequences above are BOLD, NORMAL, and BEL.</para>
330
331 </sect3>
332
333 <sect3 id="i18n.sh">
334 <title>'/etc/profile.d/i18n.sh'</title>
335
336 <indexterm zone="postlfs-config-profile i18n.sh">
337 <primary sortas="e-etc-profile.d-i18n.sh">/etc/profile.d/i18n.sh</primary>
338 </indexterm>
339
340 <para>This script sets an environment variable necessary for
341 native language support. A full discussion on determining this
342 variable can be found on the <ulink
343 url="&lfs-root;/chapter07/profile.html">LFS Bash Shell
344 Startup Files</ulink> page.</para>
345
346<screen role="root"><userinput>cat &gt; /etc/profile.d/i18n.sh &lt;&lt; "EOF"
347<literal># Set up i18n variables
348export LANG=<replaceable>&lt;ll&gt;</replaceable>_<replaceable>&lt;CC&gt;</replaceable>.<replaceable>&lt;charmap&gt;</replaceable><replaceable>&lt;@modifiers&gt;</replaceable></literal>
349EOF</userinput></screen>
350
351 </sect3>
352
353 <sect3>
354 <title>Other Initialization Values</title>
355
356 <para>Other initialization can easily be added to the
357 <filename>profile</filename> by adding additional scripts to the
358 <filename class='directory'>/etc/profile.d</filename> directory.</para>
359
360 </sect3>
361
362 </sect2>
363
364 <sect2 id="etc-bashrc-profile">
365 <title>/etc/bashrc</title>
366
367 <indexterm zone="postlfs-config-profile etc-bashrc-profile">
368 <primary sortas="e-etc-bashrc">/etc/bashrc</primary>
369 </indexterm>
370
371 <para>Here is a base <filename>/etc/bashrc</filename>. Comments in the
372 file should explain everything you need.</para>
373
374<screen role="root"><userinput>cat &gt; /etc/bashrc &lt;&lt; "EOF"
375<literal># Begin /etc/bashrc
376# Written for Beyond Linux From Scratch
377# by James Robertson &lt;jameswrobertson@earthlink.net&gt;
378# updated by Bruce Dubbs &lt;bdubbs@&lfs-domainname;&gt;
379
380# System wide aliases and functions.
381
382# System wide environment variables and startup programs should go into
383# /etc/profile. Personal environment variables and startup programs
384# should go into ~/.bash_profile. Personal aliases and functions should
385# go into ~/.bashrc
386
387# Provides a colored /bin/ls command. Used in conjunction with code in
388# /etc/profile.
389
390alias ls='ls --color=auto'
391
392# Provides prompt for non-login shells, specifically shells started
393# in the X environment. [Review the LFS archive thread titled
394# PS1 Environment Variable for a great case study behind this script
395# addendum.]
396
397#export PS1="[\u@\h \w]\\$ "
398export PS1='\u@\h:\w\$ '
399
400# End /etc/bashrc</literal>
401EOF</userinput></screen>
402
403 </sect2>
404
405 <sect2 id="bash_profile-profile">
406 <title>~/.bash_profile</title>
407
408 <indexterm zone="postlfs-config-profile bash_profile-profile">
409 <primary sortas="e-AA.bash_profile">~/.bash_profile</primary>
410 </indexterm>
411
412 <para>Here is a base <filename>~/.bash_profile</filename>. If you want each
413 new user to have this file automatically, just change the output of
414 the command to <filename>/etc/skel/.bash_profile</filename> and check the
415 permissions after the command is run. You can then copy
416 <filename>/etc/skel/.bash_profile</filename> to the home directories of already
417 existing users, including <systemitem class="username">root</systemitem>,
418 and set the owner and group appropriately.</para>
419
420<screen><userinput>cat &gt; ~/.bash_profile &lt;&lt; "EOF"
421<literal># Begin ~/.bash_profile
422# Written for Beyond Linux From Scratch
423# by James Robertson &lt;jameswrobertson@earthlink.net&gt;
424# updated by Bruce Dubbs &lt;bdubbs@&lfs-domainname;&gt;
425
426# Personal environment variables and startup programs.
427
428# Personal aliases and functions should go in ~/.bashrc. System wide
429# environment variables and startup programs are in /etc/profile.
430# System wide aliases and functions are in /etc/bashrc.
431
432append () {
433 # First remove the directory
434 local IFS=':'
435 local NEWPATH
436 for DIR in $PATH; do
437 if [ "$DIR" != "$1" ]; then
438 NEWPATH=${NEWPATH:+$NEWPATH:}$DIR
439 fi
440 done
441
442 # Then append the directory
443 export PATH=$NEWPATH:$1
444}
445
446if [ -f "$HOME/.bashrc" ] ; then
447 source $HOME/.bashrc
448fi
449
450if [ -d "$HOME/bin" ] ; then
451 append $HOME/bin
452fi
453
454unset append
455
456# End ~/.bash_profile</literal>
457EOF</userinput></screen>
458
459 </sect2>
460
461 <sect2 id="bashrc-profile">
462 <title>~/.bashrc</title>
463
464 <indexterm zone="postlfs-config-profile bashrc-profile">
465 <primary sortas="e-AA.bashrc">~/.bashrc</primary>
466 </indexterm>
467
468 <para>Here is a base <filename>~/.bashrc</filename>. The comments and
469 instructions for using <filename class="directory">/etc/skel</filename> for
470 <filename>.bash_profile</filename> above also apply here. Only the target file
471 names are different.</para>
472
473<screen><userinput>cat &gt; ~/.bashrc &lt;&lt; "EOF"
474<literal># Begin ~/.bashrc
475# Written for Beyond Linux From Scratch
476# by James Robertson &lt;jameswrobertson@earthlink.net&gt;
477
478# Personal aliases and functions.
479
480# Personal environment variables and startup programs should go in
481# ~/.bash_profile. System wide environment variables and startup
482# programs are in /etc/profile. System wide aliases and functions are
483# in /etc/bashrc.
484
485if [ -f "/etc/bashrc" ] ; then
486 source /etc/bashrc
487fi
488
489# End ~/.bashrc</literal>
490EOF</userinput></screen>
491
492 </sect2>
493
494
495 <sect2 id="bash_logout-profile">
496 <title>~/.bash_logout</title>
497
498 <indexterm zone="postlfs-config-profile bash_logout-profile">
499 <primary sortas="e-AA.bash_logout">~/.bash_logout</primary>
500 </indexterm>
501
502 <para>This is an empty <filename>~/.bash_logout</filename> that can be used as
503 a template. You will notice that the base <filename>~/.bash_logout</filename>
504 does not include a <userinput>clear</userinput> command. This is because the
505 clear is handled in the <filename>/etc/issue</filename> file.</para>
506
507<screen><userinput>cat &gt; ~/.bash_logout &lt;&lt; "EOF"
508<literal># Begin ~/.bash_logout
509# Written for Beyond Linux From Scratch
510# by James Robertson &lt;jameswrobertson@earthlink.net&gt;
511
512# Personal items to perform on logout.
513
514# End ~/.bash_logout</literal>
515EOF</userinput></screen>
516
517 </sect2>
518
519
520 <sect2 id="etc-dircolors-profile">
521 <title>/etc/dircolors</title>
522
523 <indexterm zone="postlfs-config-profile etc-dircolors-profile">
524 <primary sortas="e-etc-dircolors">/etc/dircolors</primary>
525 </indexterm>
526
527 <indexterm zone="postlfs-config-profile etc-dircolors-profile">
528 <primary sortas="e-AA.dircolors">~/.dircolors</primary>
529 </indexterm>
530
531 <para> If you want to use the <filename>dircolors</filename> capability, then
532 run the following command. The <filename class="directory">/etc/skel</filename>
533 setup steps shown above also can be used here to provide a
534 <filename>~/.dircolors</filename> file when a new user is set up. As before,
535 just change the output file name on the following command and assure the
536 permissions, owner, and group are correct on the files created and/or
537 copied.</para>
538
539<screen role="root"><userinput>dircolors -p > /etc/dircolors</userinput></screen>
540
541 <para>If you wish to customize the colors used for different file types, you can
542 edit the <filename>/etc/dircolors</filename> file. The instructions for setting
543 the colors are embedded in the file.</para>
544
545
546 <para>Finally, Ian Macdonald has written an excellent collection of tips and
547 tricks to enhance your shell environment. You can read it online at
548 <ulink url="http://www.caliban.org/bash/index.shtml"/>.</para>
549
550 </sect2>
551
552</sect1>
Note: See TracBrowser for help on using the repository browser.