source: postlfs/config/profile-systemd.xml@ 6d850ad3

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

typo.

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

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