source: postlfs/config/profile-systemd.xml@ a1b18af2

7.6-blfs 7.6-systemd kde5-14269 kde5-14686 systemd-13485
Last change on this file since a1b18af2 was d1ea8a45, checked in by Krejzi <krejzi@…>, 10 years ago

Begin merging Christophers work into systemd branch part 1.

git-svn-id: svn://svn.linuxfromscratch.org/BLFS/branches/systemd@13486 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"><?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
147
148# Setup a red prompt for root and a green one for users.
149NORMAL="\[\e[0m\]"
150RED="\[\e[1;31m\]"
151GREEN="\[\e[1;32m\]"
152if [[ $EUID == 0 ]] ; then
153 PS1="$RED\u [ $NORMAL\w$RED ]# $NORMAL"
154else
155 PS1="$GREEN\u [ $NORMAL\w$GREEN ]\$ $NORMAL"
156fi
157
158for script in /etc/profile.d/*.sh ; do
159 if [ -r $script ] ; then
160 . $script
161 fi
162done
163
164# End /etc/profile</literal>
165EOF</userinput></screen>
166
167 <sect3 id="etc-profile.d">
168 <title>The /etc/profile.d Directory</title>
169
170 <indexterm zone="postlfs-config-profile etc-profile.d">
171 <primary sortas="e-etc-profile.d">/etc/profile.d</primary>
172 </indexterm>
173
174 <para>Now create the <filename class='directory'>/etc/profile.d</filename>
175 directory, where the individual initialization scripts are placed:</para>
176
177<screen role="root"><userinput>install --directory --mode=0755 --owner=root --group=root /etc/profile.d</userinput></screen>
178
179 </sect3>
180
181 <sect3 id="etc-profile.d-dircolors.sh">
182 <title>/etc/profile.d/dircolors.sh</title>
183
184 <indexterm zone="postlfs-config-profile etc-profile.d-dircolors.sh">
185 <primary sortas="e-etc-profile.d-dircolors.sh">/etc/profile.d/dircolors.sh</primary>
186 </indexterm>
187
188 <para>This script uses the <filename>~/.dircolors</filename> and
189 <filename>/etc/dircolors</filename> files to control the colors of file names in a
190 directory listing. They control colorized output of things like <command>ls
191 --color</command>. The explanation of how to initialize these files is at the
192 end of this section.</para>
193
194<screen role="root"><userinput>cat &gt; /etc/profile.d/dircolors.sh &lt;&lt; "EOF"
195<literal># Setup for /bin/ls and /bin/grep to support color, the alias is in /etc/bashrc.
196if [ -f "/etc/dircolors" ] ; then
197 eval $(dircolors -b /etc/dircolors)
198
199 if [ -f "$HOME/.dircolors" ] ; then
200 eval $(dircolors -b $HOME/.dircolors)
201 fi
202fi
203alias ls='ls --color=auto'
204alias grep='grep --color=auto'</literal>
205EOF</userinput></screen>
206
207 </sect3>
208
209 <sect3 id="extrapaths.sh">
210 <title>/etc/profile.d/extrapaths.sh</title>
211
212 <indexterm zone="postlfs-config-profile extrapaths.sh">
213 <primary sortas="e-etc-profile.d-extrapaths.sh">/etc/profile.d/extrapaths.sh</primary>
214 </indexterm>
215
216 <para>This script adds several useful paths to the <envar>PATH</envar> and
217 <envar>PKG_CONFIG_PATH</envar> environment variables. If you want, you
218 can uncomment the last section to put a dot at the end of your path. This will
219 allow executables in the current working directory to be executed without
220 specifying a ./, however you are warned that this is generally considered a
221 security hazard.</para>
222
223<screen role="root"><userinput>cat &gt; /etc/profile.d/extrapaths.sh &lt;&lt; "EOF"
224<literal>if [ -d /usr/local/lib/pkgconfig ] ; then
225 pathappend /usr/local/lib/pkgconfig PKG_CONFIG_PATH
226fi
227if [ -d /usr/local/bin ]; then
228 pathprepend /usr/local/bin
229fi
230if [ -d /usr/local/sbin -a $EUID -eq 0 ]; then
231 pathprepend /usr/local/sbin
232fi
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, the umask should be 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<!-- This is handled in the Xorg section of the book
288 <sect3 id="X.sh">
289 <title>/etc/profile.d/X.sh</title>
290
291 <indexterm zone="postlfs-config-profile X.sh">
292 <primary sortas="e-etc-profile.d-X.sh">/etc/profile.d/X.sh</primary>
293 </indexterm>
294
295 <para>If <application>X</application> is installed, the <envar>PATH</envar>
296 and <envar>PKG_CONFIG_PATH</envar> variables are also updated.</para>
297
298<screen role="root"><userinput>cat &gt; /etc/profile.d/X.sh &lt;&lt; "EOF"
299<literal>if [ -x /usr/X11R6/bin/X ]; then
300 pathappend /usr/X11R6/bin
301fi
302if [ -d /usr/X11R6/lib/pkgconfig ] ; then
303 pathappend /usr/X11R6/lib/pkgconfig PKG_CONFIG_PATH
304fi</literal>
305EOF</userinput></screen>
306
307 </sect3>
308-->
309 <sect3 id="i18n.sh">
310 <title>/etc/profile.d/i18n.sh</title>
311
312 <indexterm zone="postlfs-config-profile i18n.sh">
313 <primary sortas="e-etc-profile.d-i18n.sh">/etc/profile.d/i18n.sh</primary>
314 </indexterm>
315
316 <para>This script sets environment variables necessary for
317 native language support.</para>
318
319<screen role="root"><userinput>cat &gt; /etc/profile.d/i18n.sh &lt;&lt; "EOF"
320<literal># Begin /etc/profile.d/i18n.sh
321
322unset LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES \
323 LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT LC_IDENTIFICATION
324
325if [ -n "$XDG_CONFIG_HOME" ] &amp;&amp; [ -r "$XDG_CONFIG_HOME/locale.conf" ]; then
326 . "$XDG_CONFIG_HOME/locale.conf"
327elif [ -r /etc/locale.conf ]; then
328 . /etc/locale.conf
329fi
330
331export LANG="${LANG:-C}"
332[ -n "$LC_CTYPE" ] &amp;&amp; export LC_CTYPE
333[ -n "$LC_NUMERIC" ] &amp;&amp; export LC_NUMERIC
334[ -n "$LC_TIME" ] &amp;&amp; export LC_TIME
335[ -n "$LC_COLLATE" ] &amp;&amp; export LC_COLLATE
336[ -n "$LC_MONETARY" ] &amp;&amp; export LC_MONETARY
337[ -n "$LC_MESSAGES" ] &amp;&amp; export LC_MESSAGES
338[ -n "$LC_PAPER" ] &amp;&amp; export LC_PAPER
339[ -n "$LC_NAME" ] &amp;&amp; export LC_NAME
340[ -n "$LC_ADDRESS" ] &amp;&amp; export LC_ADDRESS
341[ -n "$LC_TELEPHONE" ] &amp;&amp; export LC_TELEPHONE
342[ -n "$LC_MEASUREMENT" ] &amp;&amp; export LC_MEASUREMENT
343[ -n "$LC_IDENTIFICATION" ] &amp;&amp; export LC_IDENTIFICATION
344
345# End /etc/profile.d/i18n.sh</literal>
346EOF</userinput></screen>
347
348 </sect3>
349
350 <sect3>
351 <title>Other Initialization Values</title>
352
353 <para>Other initialization can easily be added to the
354 <filename>profile</filename> by adding additional scripts to the
355 <filename class='directory'>/etc/profile.d</filename> directory.</para>
356
357 </sect3>
358
359 </sect2>
360
361 <sect2 id="etc-bashrc-profile">
362 <title>/etc/bashrc</title>
363
364 <indexterm zone="postlfs-config-profile etc-bashrc-profile">
365 <primary sortas="e-etc-bashrc">/etc/bashrc</primary>
366 </indexterm>
367
368 <para>Here is a base <filename>/etc/bashrc</filename>. Comments in the
369 file should explain everything you need.</para>
370
371<screen role="root"><userinput>cat &gt; /etc/bashrc &lt;&lt; "EOF"
372<literal># Begin /etc/bashrc
373# Written for Beyond Linux From Scratch
374# by James Robertson &lt;jameswrobertson@earthlink.net&gt;
375# updated by Bruce Dubbs &lt;bdubbs@&lfs-domainname;&gt;
376
377# System wide aliases and functions.
378
379# System wide environment variables and startup programs should go into
380# /etc/profile. Personal environment variables and startup programs
381# should go into ~/.bash_profile. Personal aliases and functions should
382# go into ~/.bashrc
383
384# Provides colored /bin/ls and /bin/grep commands. Used in conjunction
385# with code in /etc/profile.
386
387alias ls='ls --color=auto'
388alias grep='grep --color=auto'
389
390# Provides prompt for non-login shells, specifically shells started
391# in the X environment. [Review the LFS archive thread titled
392# PS1 Environment Variable for a great case study behind this script
393# addendum.]
394
395NORMAL="\[\e[0m\]"
396RED="\[\e[1;31m\]"
397GREEN="\[\e[1;32m\]"
398if [[ $EUID == 0 ]] ; then
399 PS1="$RED\u [ $NORMAL\w$RED ]# $NORMAL"
400else
401 PS1="$GREEN\u [ $NORMAL\w$GREEN ]\$ $NORMAL"
402fi
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
436append () {
437 # First remove the directory
438 local IFS=':'
439 local NEWPATH
440 for DIR in $PATH; do
441 if [ "$DIR" != "$1" ]; then
442 NEWPATH=${NEWPATH:+$NEWPATH:}$DIR
443 fi
444 done
445
446 # Then append the directory
447 export PATH=$NEWPATH:$1
448}
449
450if [ -f "$HOME/.bashrc" ] ; then
451 source $HOME/.bashrc
452fi
453
454if [ -d "$HOME/bin" ] ; then
455 append $HOME/bin
456fi
457
458unset append
459
460# End ~/.bash_profile</literal>
461EOF</userinput></screen>
462
463 </sect2>
464
465 <sect2 id="bashrc-profile">
466 <title>~/.bashrc</title>
467
468 <indexterm zone="postlfs-config-profile bashrc-profile">
469 <primary sortas="e-AA.bashrc">~/.bashrc</primary>
470 </indexterm>
471
472 <para>Here is a base <filename>~/.bashrc</filename>. The comments and
473 instructions for using <filename class="directory">/etc/skel</filename> for
474 <filename>.bash_profile</filename> above also apply here. Only the target file
475 names are different.</para>
476
477<screen><userinput>cat &gt; ~/.bashrc &lt;&lt; "EOF"
478<literal># Begin ~/.bashrc
479# Written for Beyond Linux From Scratch
480# by James Robertson &lt;jameswrobertson@earthlink.net&gt;
481
482# Personal aliases and functions.
483
484# Personal environment variables and startup programs should go in
485# ~/.bash_profile. System wide environment variables and startup
486# programs are in /etc/profile. System wide aliases and functions are
487# in /etc/bashrc.
488
489if [ -f "/etc/bashrc" ] ; then
490 source /etc/bashrc
491fi
492
493# End ~/.bashrc</literal>
494EOF</userinput></screen>
495
496 </sect2>
497
498
499 <sect2 id="bash_logout-profile">
500 <title>~/.bash_logout</title>
501
502 <indexterm zone="postlfs-config-profile bash_logout-profile">
503 <primary sortas="e-AA.bash_logout">~/.bash_logout</primary>
504 </indexterm>
505
506 <para>This is an empty <filename>~/.bash_logout</filename> that can be used as
507 a template. You will notice that the base <filename>~/.bash_logout</filename>
508 does not include a <userinput>clear</userinput> command. This is because the
509 clear is handled in the <filename>/etc/issue</filename> file.</para>
510
511<screen><userinput>cat &gt; ~/.bash_logout &lt;&lt; "EOF"
512<literal># Begin ~/.bash_logout
513# Written for Beyond Linux From Scratch
514# by James Robertson &lt;jameswrobertson@earthlink.net&gt;
515
516# Personal items to perform on logout.
517
518# End ~/.bash_logout</literal>
519EOF</userinput></screen>
520
521 </sect2>
522
523
524 <sect2 id="etc-dircolors-profile">
525 <title>/etc/dircolors</title>
526
527 <indexterm zone="postlfs-config-profile etc-dircolors-profile">
528 <primary sortas="e-etc-dircolors">/etc/dircolors</primary>
529 </indexterm>
530
531 <indexterm zone="postlfs-config-profile etc-dircolors-profile">
532 <primary sortas="e-AA.dircolors">~/.dircolors</primary>
533 </indexterm>
534
535 <para> If you want to use the <filename>dircolors</filename> capability, then
536 run the following command. The <filename class="directory">/etc/skel</filename>
537 setup steps shown above also can be used here to provide a
538 <filename>~/.dircolors</filename> file when a new user is set up. As before,
539 just change the output file name on the following command and assure the
540 permissions, owner, and group are correct on the files created and/or
541 copied.</para>
542
543<screen role="root"><userinput>dircolors -p > /etc/dircolors</userinput></screen>
544
545 <para>If you wish to customize the colors used for different file types, you can
546 edit the <filename>/etc/dircolors</filename> file. The instructions for setting
547 the colors are embedded in the file.</para>
548
549
550 <para>Finally, Ian Macdonald has written an excellent collection of tips and
551 tricks to enhance your shell environment. You can read it online at
552 <ulink url="http://www.caliban.org/bash/index.shtml"/>.</para>
553
554 </sect2>
555
556</sect1>
Note: See TracBrowser for help on using the repository browser.