source: postlfs/config/profile.xml@ 8a33d8cd

10.0 10.1 11.0 11.1 11.2 11.3 12.0 12.1 12.2 7.10 7.5 7.6 7.6-blfs 7.6-systemd 7.7 7.8 7.9 8.0 8.1 8.2 8.3 8.4 9.0 9.1 basic bdubbs/svn elogind gimp3 gnome kde5-13430 kde5-14269 kde5-14686 kea ken/TL2024 ken/inkscape-core-mods ken/tuningfonts krejzi/svn lazarus lxqt nosym perl-modules plabs/newcss plabs/python-mods python3.11 qt5new rahul/power-profiles-daemon renodr/vulkan-addition systemd-11177 systemd-13485 trunk upgradedb xry111/for-12.3 xry111/intltool xry111/llvm18 xry111/soup3 xry111/spidermonkey128 xry111/test-20220226 xry111/xf86-video-removal
Last change on this file since 8a33d8cd was ec7940be, checked in by Bruce Dubbs <bdubbs@…>, 11 years ago

Rewrite Qt pages
Add corrections for some paths (e.g. man pages)
Tags

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

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