source: postlfs/config/profile.xml@ 89cad9f

10.0 10.1 11.0 11.1 11.2 11.3 12.0 12.1 7.10 7.6 7.7 7.8 7.9 8.0 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 krejzi/svn lazarus lxqt nosym 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 89cad9f was 89cad9f, checked in by Bruce Dubbs <bdubbs@…>, 10 years ago

Update to p11-kit-0.20.6.
More tags.
Some minor fixes.

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

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