source: postlfs/config/profile.xml@ 51d044f

systemd-13485
Last change on this file since 51d044f was 51d044f, checked in by DJ Lucas <dj@…>, 8 years ago

Remainder of -systemd.xml cleanup.

git-svn-id: svn://svn.linuxfromscratch.org/BLFS/branches/systemd@16882 af4574ff-66df-0310-9fd7-8a98e5e911e0

  • Property mode set to 100644
File size: 19.0 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"><?dbfo keep-together="auto"?><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
131export -f pathremove pathprepend pathappend
132
133# Set the initial path
134export PATH=/bin:/usr/bin
135
136if [ $EUID -eq 0 ] ; then
137 pathappend /sbin:/usr/sbin
138 unset HISTFILE
139fi
140
141# Setup some environment variables.
142export HISTSIZE=1000
143export HISTIGNORE="&amp;:[bf]g:exit"
144
145# Set some defaults for graphical systems
146export XDG_DATA_DIRS=/usr/share/
147export XDG_CONFIG_DIRS=/etc/xdg/
148
149# Setup a red prompt for root and a green one for users.
150NORMAL="\[\e[0m\]"
151RED="\[\e[1;31m\]"
152GREEN="\[\e[1;32m\]"
153if [[ $EUID == 0 ]] ; then
154 PS1="$RED\u [ $NORMAL\w$RED ]# $NORMAL"
155else
156 PS1="$GREEN\u [ $NORMAL\w$GREEN ]\$ $NORMAL"
157fi
158
159for script in /etc/profile.d/*.sh ; do
160 if [ -r $script ] ; then
161 . $script
162 fi
163done
164
165unset script RED GREEN NORMAL
166
167# End /etc/profile</literal>
168EOF</userinput></screen>
169
170 <sect3 id="etc-profile.d">
171 <title>The /etc/profile.d Directory</title>
172
173 <indexterm zone="postlfs-config-profile etc-profile.d">
174 <primary sortas="e-etc-profile.d">/etc/profile.d</primary>
175 </indexterm>
176
177 <para>Now create the <filename class='directory'>/etc/profile.d</filename>
178 directory, where the individual initialization scripts are placed:</para>
179
180<screen role="root"><userinput>install --directory --mode=0755 --owner=root --group=root /etc/profile.d</userinput></screen>
181
182 </sect3>
183
184 <sect3 id="etc-profile.d-dircolors.sh">
185 <title>/etc/profile.d/dircolors.sh</title>
186
187 <indexterm zone="postlfs-config-profile etc-profile.d-dircolors.sh">
188 <primary sortas="e-etc-profile.d-dircolors.sh">/etc/profile.d/dircolors.sh</primary>
189 </indexterm>
190
191 <para>This script uses the <filename>~/.dircolors</filename> and
192 <filename>/etc/dircolors</filename> files to control the colors of file names in a
193 directory listing. They control colorized output of things like <command>ls
194 --color</command>. The explanation of how to initialize these files is at the
195 end of this section.</para>
196
197<screen role="root"><userinput>cat &gt; /etc/profile.d/dircolors.sh &lt;&lt; "EOF"
198<literal># Setup for /bin/ls and /bin/grep to support color, the alias is in /etc/bashrc.
199if [ -f "/etc/dircolors" ] ; then
200 eval $(dircolors -b /etc/dircolors)
201fi
202
203if [ -f "$HOME/.dircolors" ] ; then
204 eval $(dircolors -b $HOME/.dircolors)
205fi
206
207alias ls='ls --color=auto'
208alias grep='grep --color=auto'</literal>
209EOF</userinput></screen>
210
211 </sect3>
212
213 <sect3 id="extrapaths.sh">
214 <title>/etc/profile.d/extrapaths.sh</title>
215
216 <indexterm zone="postlfs-config-profile extrapaths.sh">
217 <primary sortas="e-etc-profile.d-extrapaths.sh">/etc/profile.d/extrapaths.sh</primary>
218 </indexterm>
219
220 <para>This script adds some useful paths to the <envar>PATH</envar> and
221 can be used to customize other PATH related environment variables
222 (e.g. LD_LIBRARY_PATH, etc) that may be needed for all users.</para>
223
224<screen role="root"><userinput>cat &gt; /etc/profile.d/extrapaths.sh &lt;&lt; "EOF"
225<literal>if [ -d /usr/local/lib/pkgconfig ] ; then
226 pathappend /usr/local/lib/pkgconfig PKG_CONFIG_PATH
227fi
228if [ -d /usr/local/bin ]; then
229 pathprepend /usr/local/bin
230fi
231if [ -d /usr/local/sbin -a $EUID -eq 0 ]; then
232 pathprepend /usr/local/sbin
233fi
234
235# Set some defaults before other applications add to these paths.
236pathappend /usr/share/man MANPATH
237pathappend /usr/share/info INFOPATH</literal>
238EOF</userinput></screen>
239
240 </sect3>
241
242 <sect3 id="readline.sh">
243 <title>/etc/profile.d/readline.sh</title>
244
245 <indexterm zone="postlfs-config-profile readline.sh">
246 <primary sortas="e-etc-profile.d-readline.sh">/etc/profile.d/readline.sh</primary>
247 </indexterm>
248
249 <para>This script sets up the default <filename>inputrc</filename>
250 configuration file. If the user does not have individual settings, it uses the
251 global file.</para>
252
253<screen role="root"><userinput>cat &gt; /etc/profile.d/readline.sh &lt;&lt; "EOF"
254<literal># Setup the INPUTRC environment variable.
255if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ] ; then
256 INPUTRC=/etc/inputrc
257fi
258export INPUTRC</literal>
259EOF</userinput></screen>
260
261 </sect3>
262
263 <sect3 id="umask.sh">
264 <title>/etc/profile.d/umask.sh</title>
265
266 <indexterm zone="postlfs-config-profile umask.sh">
267 <primary sortas="e-etc-profile.d-umask.sh">/etc/profile.d/umask.sh</primary>
268 </indexterm>
269
270 <para>Setting the <command>umask</command> value is important for security.
271 Here the default group write permissions are turned off for system users and when
272 the user name and group name are not the same.</para>
273
274<screen role="root"><userinput>cat &gt; /etc/profile.d/umask.sh &lt;&lt; "EOF"
275<literal># By default, the umask should be set.
276if [ "$(id -gn)" = "$(id -un)" -a $EUID -gt 99 ] ; then
277 umask 002
278else
279 umask 022
280fi</literal>
281EOF</userinput></screen>
282
283 </sect3>
284
285<!-- This is handled in the Xorg section of the book
286 <sect3 id="X.sh">
287 <title>/etc/profile.d/X.sh</title>
288
289 <indexterm zone="postlfs-config-profile X.sh">
290 <primary sortas="e-etc-profile.d-X.sh">/etc/profile.d/X.sh</primary>
291 </indexterm>
292
293 <para>If <application>X</application> is installed, the <envar>PATH</envar>
294 and <envar>PKG_CONFIG_PATH</envar> variables are also updated.</para>
295
296<screen role="root"><userinput>cat &gt; /etc/profile.d/X.sh &lt;&lt; "EOF"
297<literal>if [ -x /usr/X11R6/bin/X ]; then
298 pathappend /usr/X11R6/bin
299fi
300if [ -d /usr/X11R6/lib/pkgconfig ] ; then
301 pathappend /usr/X11R6/lib/pkgconfig PKG_CONFIG_PATH
302fi</literal>
303EOF</userinput></screen>
304
305 </sect3>
306-->
307 <sect3 id="i18n.sh">
308 <title>/etc/profile.d/i18n.sh</title>
309
310 <indexterm zone="postlfs-config-profile i18n.sh">
311 <primary sortas="e-etc-profile.d-i18n.sh">/etc/profile.d/i18n.sh</primary>
312 </indexterm>
313
314 <para>This script sets environment variables necessary for
315 native language support.</para>
316
317<screen role="root"><userinput>cat &gt; /etc/profile.d/i18n.sh &lt;&lt; "EOF"
318<literal># Begin /etc/profile.d/i18n.sh
319
320unset LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES \
321 LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT LC_IDENTIFICATION
322
323if [ -n "$XDG_CONFIG_HOME" ] &amp;&amp; [ -r "$XDG_CONFIG_HOME/locale.conf" ]; then
324 . "$XDG_CONFIG_HOME/locale.conf"
325elif [ -r /etc/locale.conf ]; then
326 . /etc/locale.conf
327fi
328
329export LANG="${LANG:-C}"
330[ -n "$LC_CTYPE" ] &amp;&amp; export LC_CTYPE
331[ -n "$LC_NUMERIC" ] &amp;&amp; export LC_NUMERIC
332[ -n "$LC_TIME" ] &amp;&amp; export LC_TIME
333[ -n "$LC_COLLATE" ] &amp;&amp; export LC_COLLATE
334[ -n "$LC_MONETARY" ] &amp;&amp; export LC_MONETARY
335[ -n "$LC_MESSAGES" ] &amp;&amp; export LC_MESSAGES
336[ -n "$LC_PAPER" ] &amp;&amp; export LC_PAPER
337[ -n "$LC_NAME" ] &amp;&amp; export LC_NAME
338[ -n "$LC_ADDRESS" ] &amp;&amp; export LC_ADDRESS
339[ -n "$LC_TELEPHONE" ] &amp;&amp; export LC_TELEPHONE
340[ -n "$LC_MEASUREMENT" ] &amp;&amp; export LC_MEASUREMENT
341[ -n "$LC_IDENTIFICATION" ] &amp;&amp; export LC_IDENTIFICATION
342
343# End /etc/profile.d/i18n.sh</literal>
344EOF</userinput></screen>
345
346 </sect3>
347
348 <sect3>
349 <title>Other Initialization Values</title>
350
351 <para>Other initialization can easily be added to the
352 <filename>profile</filename> by adding additional scripts to the
353 <filename class='directory'>/etc/profile.d</filename> directory.</para>
354
355 </sect3>
356
357 </sect2>
358
359 <sect2 id="etc-bashrc-profile">
360 <title>/etc/bashrc</title>
361
362 <indexterm zone="postlfs-config-profile etc-bashrc-profile">
363 <primary sortas="e-etc-bashrc">/etc/bashrc</primary>
364 </indexterm>
365
366 <para>Here is a base <filename>/etc/bashrc</filename>. Comments in the
367 file should explain everything you need.</para>
368
369<screen role="root"><userinput>cat &gt; /etc/bashrc &lt;&lt; "EOF"
370<literal># Begin /etc/bashrc
371# Written for Beyond Linux From Scratch
372# by James Robertson &lt;jameswrobertson@earthlink.net&gt;
373# updated by Bruce Dubbs &lt;bdubbs@&lfs-domainname;&gt;
374
375# System wide aliases and functions.
376
377# System wide environment variables and startup programs should go into
378# /etc/profile. Personal environment variables and startup programs
379# should go into ~/.bash_profile. Personal aliases and functions should
380# go into ~/.bashrc
381
382# Provides colored /bin/ls and /bin/grep commands. Used in conjunction
383# with code in /etc/profile.
384
385alias ls='ls --color=auto'
386alias grep='grep --color=auto'
387
388# Provides prompt for non-login shells, specifically shells started
389# in the X environment. [Review the LFS archive thread titled
390# PS1 Environment Variable for a great case study behind this script
391# addendum.]
392
393NORMAL="\[\e[0m\]"
394RED="\[\e[1;31m\]"
395GREEN="\[\e[1;32m\]"
396if [[ $EUID == 0 ]] ; then
397 PS1="$RED\u [ $NORMAL\w$RED ]# $NORMAL"
398else
399 PS1="$GREEN\u [ $NORMAL\w$GREEN ]\$ $NORMAL"
400fi
401
402unset RED GREEN NORMAL
403
404# End /etc/bashrc</literal>
405EOF</userinput></screen>
406
407 </sect2>
408
409 <sect2 id="bash_profile-profile">
410 <title>~/.bash_profile</title>
411
412 <indexterm zone="postlfs-config-profile bash_profile-profile">
413 <primary sortas="e-AA.bash_profile">~/.bash_profile</primary>
414 </indexterm>
415
416 <para>Here is a base <filename>~/.bash_profile</filename>. If you want each
417 new user to have this file automatically, just change the output of
418 the command to <filename>/etc/skel/.bash_profile</filename> and check the
419 permissions after the command is run. You can then copy
420 <filename>/etc/skel/.bash_profile</filename> to the home directories of already
421 existing users, including <systemitem class="username">root</systemitem>,
422 and set the owner and group appropriately.</para>
423
424<screen><userinput>cat &gt; ~/.bash_profile &lt;&lt; "EOF"
425<literal># Begin ~/.bash_profile
426# Written for Beyond Linux From Scratch
427# by James Robertson &lt;jameswrobertson@earthlink.net&gt;
428# updated by Bruce Dubbs &lt;bdubbs@&lfs-domainname;&gt;
429
430# Personal environment variables and startup programs.
431
432# Personal aliases and functions should go in ~/.bashrc. System wide
433# environment variables and startup programs are in /etc/profile.
434# System wide aliases and functions are in /etc/bashrc.
435
436if [ -f "$HOME/.bashrc" ] ; then
437 source $HOME/.bashrc
438fi
439
440if [ -d "$HOME/bin" ] ; then
441 pathprepend $HOME/bin
442fi
443
444# Having . in the PATH is dangerous
445#if [ $EUID -gt 99 ]; then
446# pathappend .
447#fi
448
449# End ~/.bash_profile</literal>
450EOF</userinput></screen>
451
452 </sect2>
453
454 <sect2 id="bashrc-profile">
455 <title>~/.bashrc</title>
456
457 <indexterm zone="postlfs-config-profile bashrc-profile">
458 <primary sortas="e-AA.bashrc">~/.bashrc</primary>
459 </indexterm>
460
461 <para>Here is a base <filename>~/.bashrc</filename>. The comments and
462 instructions for using <filename class="directory">/etc/skel</filename> for
463 <filename>.bash_profile</filename> above also apply here. Only the target file
464 names are different.</para>
465
466<screen><userinput>cat &gt; ~/.bashrc &lt;&lt; "EOF"
467<literal># Begin ~/.bashrc
468# Written for Beyond Linux From Scratch
469# by James Robertson &lt;jameswrobertson@earthlink.net&gt;
470
471# Personal aliases and functions.
472
473# Personal environment variables and startup programs should go in
474# ~/.bash_profile. System wide environment variables and startup
475# programs are in /etc/profile. System wide aliases and functions are
476# in /etc/bashrc.
477
478if [ -f "/etc/bashrc" ] ; then
479 source /etc/bashrc
480fi
481
482# End ~/.bashrc</literal>
483EOF</userinput></screen>
484
485 </sect2>
486
487
488 <sect2 id="bash_logout-profile">
489 <title>~/.bash_logout</title>
490
491 <indexterm zone="postlfs-config-profile bash_logout-profile">
492 <primary sortas="e-AA.bash_logout">~/.bash_logout</primary>
493 </indexterm>
494
495 <para>This is an empty <filename>~/.bash_logout</filename> that can be used as
496 a template. You will notice that the base <filename>~/.bash_logout</filename>
497 does not include a <userinput>clear</userinput> command. This is because the
498 clear is handled in the <filename>/etc/issue</filename> file.</para>
499
500<screen><userinput>cat &gt; ~/.bash_logout &lt;&lt; "EOF"
501<literal># Begin ~/.bash_logout
502# Written for Beyond Linux From Scratch
503# by James Robertson &lt;jameswrobertson@earthlink.net&gt;
504
505# Personal items to perform on logout.
506
507# End ~/.bash_logout</literal>
508EOF</userinput></screen>
509
510 </sect2>
511
512
513 <sect2 id="etc-dircolors-profile">
514 <title>/etc/dircolors</title>
515
516 <indexterm zone="postlfs-config-profile etc-dircolors-profile">
517 <primary sortas="e-etc-dircolors">/etc/dircolors</primary>
518 </indexterm>
519
520 <indexterm zone="postlfs-config-profile etc-dircolors-profile">
521 <primary sortas="e-AA.dircolors">~/.dircolors</primary>
522 </indexterm>
523
524 <para> If you want to use the <filename>dircolors</filename> capability, then
525 run the following command. The <filename class="directory">/etc/skel</filename>
526 setup steps shown above also can be used here to provide a
527 <filename>~/.dircolors</filename> file when a new user is set up. As before,
528 just change the output file name on the following command and assure the
529 permissions, owner, and group are correct on the files created and/or
530 copied.</para>
531
532<screen role="root"><userinput>dircolors -p > /etc/dircolors</userinput></screen>
533
534 <para>If you wish to customize the colors used for different file types, you can
535 edit the <filename>/etc/dircolors</filename> file. The instructions for setting
536 the colors are embedded in the file.</para>
537
538
539 <para>Finally, Ian Macdonald has written an excellent collection of tips and
540 tricks to enhance your shell environment. You can read it online at
541 <ulink url="http://www.caliban.org/bash/index.shtml"/>.</para>
542
543 </sect2>
544
545</sect1>
Note: See TracBrowser for help on using the repository browser.