source: postlfs/config/profile.xml@ c10fe29

10.0 10.1 11.0 11.1 11.2 11.3 12.0 12.1 8.1 8.2 8.3 8.4 9.0 9.1 basic bdubbs/svn elogind kea ken/TL2024 ken/inkscape-core-mods ken/tuningfonts lazarus lxqt perl-modules plabs/newcss plabs/python-mods python3.11 qt5new rahul/power-profiles-daemon renodr/vulkan-addition trunk upgradedb xry111/intltool xry111/llvm18 xry111/soup3 xry111/test-20220226 xry111/xf86-video-removal
Last change on this file since c10fe29 was c10fe29, checked in by DJ Lucas <dj@…>, 7 years ago

Use real example for cacerts page, remove i18n.sh from systemd.

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