source: postlfs/config/profile.xml@ b5905ae

10.0 10.1 11.0 11.1 11.2 11.3 12.0 12.1 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 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/intltool xry111/llvm18 xry111/soup3 xry111/test-20220226 xry111/xf86-video-removal
Last change on this file since b5905ae was b5905ae, checked in by Igor Živković <igor@…>, 11 years ago

alias for colored /bin/grep in bash startup scripts as suggested by a user

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