The shell gives you the option to set variables for PATH, HISTORY, etc.
The pathname is a string of text that indicates the location of a file or folder. There is a variable for this called PATH. As you'll see, this one makes your life a lot easier. Lesson 8 / Lesson 10
If it weren't for the path variable, you'd have to type in a complete path--including all directories and subdirectories--for every command you enter on the command-line. So, if you wanted to use the "less" utility to look at the contents of "newtext.txt", you'd have to enter:
/usr/bin/less newtext.txt
The path variable tells the shell to look in certain directories to find the executable files that make your programs and system utilities work. With the path variable set, you can abbreviate the above command to:
less newtext.txt
You can use the echo command to see how the path variable is set.
echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/games
Note that there are several separate paths in this statement. Each path is separated from the next by a colon. You can invoke an executable in any one of these paths without having to enter the entire path on the command-line. But, what if you want to invoke an executable that's not in any of these paths?
You can invoke the command by entering the entire path, as we did in the above example with the less utility. Or, you can cd to the directory where the program executable is located, and prefix the command with a "./".
cd BOINC/ BOINC]$ ./run_manager
The "./" tells the shell to look in the current working directory for the program executable that's being invoked.
Note: In the DOS/Windows world, the current working directory is an implied part of the path variable. So, if you're in the directory where the program executable that you want to invoke is stored, you don't need to prefix the command with anything. In the Linux world, the current working directory isn't implied as part of the path variable, so you need to implicitly tell the system to look there when you want to invoke a program. This was purposely set up this way for security reasons.
Finally, you can use the export command to add a new path to the path variable:
export PATH=$PATH:/opt/bin echo $PATH /usr/kerberos/sbin:/usr/kerberos/bin:/usr/lib/ccache/bin:/usr/local/sbin:/usr/local/bin:/sbin: /bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/usr/lib/jre/bin:/root/bin:/usr/lib/jre/bin:/opt/bin
Note how the new path is added at the end of the path statement.
Hash Table When a command is executed without a path, the shell searches the PATH variable to locate it. When it is found it places that in a hash table. After that Bash checks the hash table first.
There are several other environment variables that may be set on your system. One of the important aspects of the environment is that when the parent process spawns a child, the child and any applications that start from the child process will inherit the environment from the parent.
You can see what all of them are by issuing the "env" command.
env SSH_AGENT_PID=4354 HOSTNAME=localhost.localdomain SHELL=/bin/bash TERM=xterm HISTSIZE=1000 GTK_RC_FILES=/etc/gtk/gtkrc:/root/.gtkrc-1.2-gnome2 WINDOWID=41943208 OLDPWD=/etc USER=donnie LS_COLORS=no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41: mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.exe=00;32:*.com=00;32:*.btm=00;32:*.bat=00;32: *.sh=00;32:*.csh=00;32:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31 :*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tz=00;31:*.rpm=00;31: *.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00;35:*.xpm=00;35:*.png=00;35: *.tif=00;35: GNOME_KEYRING_SOCKET=/tmp/keyring-0xU7ub/socket SSH_AUTH_SOCK=/tmp/ssh-hDkQIP4294/agent.4294 KDEDIR=/usr SESSION_MANAGER=local/localhost.localdomain:/tmp/.ICE-unix/4294 MAIL=/var/spool/mail/donnie DESKTOP_SESSION=default PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/lib/ccache/bin:/usr/local/sbin:/usr/local/bin: /sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/usr/lib/jre/bin:/root/bin:/usr/lib/jre/bin: /opt/bin INPUTRC=/etc/inputrc PWD=/ LANG=en_US.UTF-8 GDMSESSION=default SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass HOME=/home/donnie SHLVL=2 GNOME_DESKTOP_SESSION_ID=Default LOGNAME=donnie DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-ovZR0qXh6n LESSOPEN=|/usr/bin/lesspipe.sh %s DISPLAY=:0.0 G_BROKEN_FILENAMES=1 COLORTERM=gnome-terminal XAUTHORITY=/home/donnie/.Xauthority _=/bin/env
Or, use the echo command if you just want to see the value of one variable. (It'll work the same way as it did in the previous examples.)
echo $USER tom Here's a table of some of the more common environment variables.
USER The username of the person who is currently logged on to the system. SHELL The path to the shell that is currently in use. PWD The current working directory. HOSTNAME This is the TCP/IP hostname of the computer. PATH A colon-delimited list of directories in which the system looks when you type an executable program name. This variable gets built in several configuration files, such as /etc/profile and the .bashrc file that resides in the user's home directory. HOME This holds the path for the current user's home directory. Some programs will use this variable to determine where to find configuration files or determine the default location to store files. LD_LIBRARY_PATH It works like the path variable. Some programs will use it to help find their library files. PS1 The default bash prompt. NNTPSERVER Some newsreader programs may use this variable to set the name of the news server. TERM This specifies the current terminal type. You'll probably see it set as "xterm". The system needs to know which terminal type is in use so that it will know how to move the cursor and display text effects in text-mode programs. DISPLAY This variable allows you to have multiple displays running from the same computer. If you're only running one display, you'll see a returned value of ":0.0". (That means, the first display on the current computer.) EDITOR This sets the default text editor that you want to use. You have several choices, but for best results, always set it to use a text-mode editor. Some good choices would be vi, joe, or emacs.
The history Command
The history command remembers the last 1000 commands that you have performed at the command line. The value of the history command is that you can go back and review a command that you used in case you do not remember or you can see where you made a mistake. ---cut--- 558 ls /usr/sbin 559 lsusb 560 su - diane 561 ls /usr/sbin 562 ifconfig 563 safe-finger 564 finger tom 565 ifdown eth0 566 ap-get update 567 apt-get update 568 history
The history is listed from the last 1000 commands (500 for Ubuntu) starting with the furthest back as number 1 and the most recent as number 1000. If you have not run 1000 commands you will see that it will list the number that you have used.
If you pipe the history command to the command less you may scroll backwards and forwards by using the arrow keys. The | symbol pipes the output of one command into another.
history | less
This history is kept in the hidden file .bash_history in your home directory. There are several configurable variables that you may want to adjust.
History Variables: HISTCMD history number of current command HISTFILE history command saves data here ~/.bash_history HISTFILESIZE max number of lines stored in history HISTSIZE max number of commands to remember in history
View these variables by using the echo command:
echo $HISTFILE /home/mike/.bash_history
echo $HISTSIZE 500 echo $HISTCMD 1005 echo $HISTFILESIZE 1000
You may change the history file size with this command:
HISTFILE=1200
That would change the history file size to 1200 instead of 500.
You can also review your past commands using the up and down arrow keys on your keyboard to call-up previously entered commands. If you keep pressing the up arrow key, you'll scroll through the list of previous commands, starting with the last one entered. If you go past the command that you want, you can use the down arrow key to get back to it. When you finally do get to the command that you want to repeat, you can either press the Enter key to enter it as is, or edit it and then press Enter. Copyright CyberMontana Inc. and BeginLinux.com
All rights reserved. Cannot be reproduced without written permission. Box 1262 Trout Creek, MT 59874
|