source: postlfs/config/profile.xml@ 956d023

10.0 10.1 11.0 8.1 8.2 8.3 8.4 9.0 9.1 basic bdubbs/svn elogind ken/refactor-virt lazarus perl-modules qt5new trunk xry111/git-date xry111/git-date-for-trunk xry111/git-date-test
Last change on this file since 956d023 was 956d023, checked in by Bruce Dubbs <bdubbs@…>, 4 years ago

Simplify fix for kdelibs4support.
Update to wayland-protocols-1.8.
Update to xterm-329.
Update to whois-5.2.16.
Update to garcon-0.6.1.
Update to Parse-Yapp-1,2.
Update to unrar-5.5.4.

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

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