|
|
|
|
|
|
The Directory Tree |
|
directories contain files and/or directories |
|
/ : means either the root directory, or a directory
separator |
|
consider the directory /home/user/AFNI_data1 |
|
class work: |
|
open a terminal window |
|
commands: pwd, ls, ls -a, ls -al |
|
use the "cd" command to go to
the given directories |
|
e.g. for directory /usr/bin, use the
command: cd /usr/bin |
|
once there, use the commands "pwd",
"ls", and "ls -al" |
|
note that you can always return to the
home directory via: cd |
|
|
|
/, home, user, AFNI_data1, ..,
AFNI_data1/afni, ../.. |
|
/home/user, /usr/bin, ~/abin,
../../home/user/../user/../user |
|
|
|
many commands can be used to return to
the home directory (of "user") |
|
examples: cd, cd
~, cd ~user, cd $HOME, cd /home/user |
|
an "absolute" pathname begins
with '/', a "relative" pathname does not |
|
a relative pathname depends on where
you start from |
|
in the directories above, note which
are relative pathnames |
|
|
|
|
|
every directory has a parent directory |
|
the relative pathname for the parent
directory is '..' |
|
the relative pathname for the current
directory is '.' |
|
commands: |
|
ls, ls -a, ls -al, ls -alt, ls -altr,
cd ~/AFNI_data1/afni |
|
ls -l, wc ideal_r1.1D, cat idea_r1.1D,
less ideal_r1.1D |
|
'less': a file perusal program |
|
basic keystrokes while running less: Enter, Space, b, g, G, h, q |
|
command: less rall_vr+orig.HEAD |
|
Programs |
|
a program is something that gets
"executed", or "run" |
|
the first element of a command line is
generally a program |
|
commands: |
|
echo the home directory of $USER is
$HOME |
|
ls ~ ~/AFNI_data1
~/AFNI_data1/afni/ideal_r1.1D |
|
script: an interpreted program
(interpreted by another program) |
|
e.g. consider the c00.all script: cat ~/AFNI_data1/ht03/c00.all |
|
|
|
|
|
|
|
The Shell: command line processing |
|
command interpreter (case and syntax
sensitive) |
|
examples: tcsh, csh, sh, bash, ksh,
zsh, wish, tclsh, rsh, ssh |
|
command: echo $SHELL |
|
|
|
The T-shell: /bin/tcsh |
|
an enhanced C-shell (csh), which has C
programming style syntax |
|
command line processing, simplified
outline: |
|
evaluate special characters, such as: |
|
~ ! @ # $ : & ( ) * ? \ ' " `
[ ] | { } |
|
decide which program(s) to execute |
|
full pathname, alias, shell command,
search the $PATH |
|
execute appropriate program, giving it
the parameter list |
|
save the execution status in the $status
variable |
|
command: ls $HOME ~/suma_demo '$pickle' |
|
tcsh has automatic filename completion
using the Tab key |
|
type "ls suma" and hit the Tab
key, watch what happens, and hit Enter |
|
type "ls AF" and hit the Tab
key, note what happens |
|
|
|
|
Special Characters |
|
|
|
~
: the current user's home directory (e.g. /home/user) |
|
$
: used to access a variable (e.g. $home) |
|
& : used to put a command in the background (e.g. afni
&) |
|
*
: wildcard, matching zero or more characters (e.g. ls AFNI_d*) |
|
?
: wildcard, matching exactly one character (e.g. ls AFNI_data?) |
|
\
: command line continuation (must be the last character on the line) |
|
'
: the shell will not evaluate special characters contained within
these quotes |
|
(e.g. echo '$HOME' gives $HOME, not /home/user) |
|
" : the shell will evaluate $variables and `commands`
contained within these |
|
(e.g. echo
"[*] my home dir is $HOME") |
|
(e.g. echo
"the numbers are 'count -digits 2 7 12'" ) |
|
`
: execute the command contained within these quotes, and replace the
quoted |
|
part with the output of the contained
command |
|
(e.g. echo
"the numbers are `count -digits 2 7 12`" ) |
|
|
|
|
|
Command Types |
|
consider the commands: |
|
/bin/ls ~ |
|
ls ~ |
|
cd ~ |
|
wc ~/AFNI_data1/afni/ideal_r1.1D |
|
the "which" command shows
where the shell gets a command from: |
|
which ls which cd which
wc |
|
the shell must decide what type of
command it has: |
|
full pathname for a program: execute
that program |
|
alias: apply any alias(es) then start
over (decide on which program to run) |
|
shell command: part of the /bin/tcsh
program |
|
check the $PATH directories for the
program |
|
|
|
The PATH Variable |
|
a list of directories to be searched
for a given program to be run from |
|
the $path and $PATH variables are
identical, but are represented differently |
|
commands: echo $PATH |
|
echo $path |
|
cat ~/.cshrc |
|
|
|
|
|
|
Shell Variables |
|
shell variables are variables that are
stored in, and affect the shell |
|
all variables are stored as strings (or
as arrays of strings) |
|
a variable is accessed via the '$'
character |
|
the 'echo' command: echo the line after
processing any special characters |
|
command: echo my home dir, $HOME, holds ~/* |
|
the 'set' command: set or assign values
to one or more variables |
|
without arguments: 'set' displays all
variables, along with any values |
|
'set' takes a list of variables to set,
possibly with values |
|
consider the commands: |
|
|
|
set food |
|
echo $food |
|
set food = pickle |
|
echo $food |
|
echo $pickle |
|
set eat food = chocolate donut |
|
set |
|
set food = "eat chocolate
donut" |
|
echo $food |
|
|
|
|
|
|
Environment Variables |
|
|
|
similar to shell variables, but their
values will propagate to children shells |
|
by convention, these variables are all
upper-case (though it is not required) |
|
similarly, shell variables are
generally all lower-case |
|
set environment variables using "setenv"
(as opposed to the "set" command) |
|
without any parameters, the "setenv"
command will display all variables |
|
the "setenv" command will
only set or assign one variable at a time |
|
the format for the command to set a
value is (without any '=' sign): |
|
|
|
setenv VARIABLE value |
|
|
|
commands: |
|
setenv MY_NAME Elvis |
|
echo $MY_NAME |
|
echo $path |
|
echo $PATH |
|
echo $HOME |
|
setenv |
|
|
|
|
|
Wildcards |
|
used for shell-attempted filename
matching |
|
special characters for wildcards: |
|
*, ?, [, ], ^ |
|
* : matches any string of zero or more
characters |
|
(special case: a
lone * will not match files starting with '.') |
|
? : matches exactly one character |
|
[] : matches any single character within the square
brackets |
|
[^] : matches any single character
EXCEPT for those within the brackets |
|
|
|
commands (run from the ~/AFNI_data1/SPGR_anat
directory): |
|
ls |
|
ls * |
|
ls -a |
|
ls I.* |
|
ls I.04? |
|
ls I.0[123]* |
|
ls I.0[^123]* |
|
echo I.0[^123]* |
|
|
|
|
|
|
|
|
Shell Scripts |
|
a text file, a sequence of shell
commands |
|
the '\' character can be used for line
continuation (for readability) |
|
for that purpose, it must be the last
character on the line (including spaces) |
|
executing shell scripts, 3 methods: |
|
tcsh filename : execute filename as t-shell commands |
|
./filename :
execute filename according to the top "#!program" |
|
if no such line, use the current shell |
|
the file must have execute permissions
(see 'ls -l') |
|
source filename : execute filename using current
shell |
|
this method affects the current
environment, so it should be used only when that is the intention (e.g. .cshrc) |
|
consider ~/AFNI_data1/ht03/c00.all |
|
consider ~/AFNI_data1/ht03/@stim_analyze |
|
use the command "nedit my.script"
to create a script with a few commands |
|
echo hello there |
|
ls -a |
|
cd $HOME/AFNI_data1 |
|
ls -al |
|
run the script using the command: tcsh my.script |
|
|
|
|
Some Shell Commands (handled by the
shell) |
|
|
|
cd : change working directory |
|
echo : echo command line to the
terminal window |
|
pwd : echo the present working
directory |
|
set : set variables or assign
string values to variables |
|
@ : set a variable to the
results of an integral computation |
|
alias : display or create an alias |
|
(e.g. alias
hi 'echo hello there' ) |
|
bg : put a process in the
background (usually after ctrl-z) |
|
fg : put a process in the
foreground |
|
exit : terminate the shell |
|
setenv : set environment variables |
|
source : execute a script within the
current shell environment |
|
|
|
special keystrokes (to use while a
process is running) |
|
ctrl-c : send an interrupt signal to
the process |
|
ctrl-z : send a suspend signal to
the process |
|
|
|
|
|
|
|
Pipes and Redirection |
|
> : redirect program output (stdout) to a file |
|
e.g. waver -help > waver.help |
|
waver -pickle > waver.help |
|
>& : redirect all output (both stdout and stderr) to a file |
|
e.g. waver -pickle >& waver.pickle |
|
e.g. tcsh my.script >&
script.output |
|
|
|
>> : append program output to a file |
|
|
|
| : pipe standard output to the input of another
program |
|
e.g. 3dDeconvolve -help | less |
|
|
|
|& : include stderr in the pipe |
|
e.g. tcsh my.big.script |& tee script.output |
|
run the script |
|
send all output to the tee program |
|
the tee program duplicates the input,
sending the output to both the terminal and the given file (script.output) |
|
you can see the output, but it is also
stored for future analysis |
|
|
|
|
Some OS Commands |
|
ls : list the
contents of a directory |
|
* cat : concatenate files to the terminal (print them to
the screen) |
|
* more : a file perusal program - view files one page at a time |
|
* less : a better file perusal program (type less, get more) |
|
man : on-line
manuals for many OS commands (and library functions) |
|
-
this uses a "less" interface to display the information |
|
-
e.g. consider man on : ls, less, man, tcsh, afni |
|
info : a new program to
replace the "man" program |
|
* head : display the top lines of a file (default = 10) |
|
-
e.g. 3dDeconvolve -help | head
-25 |
|
* tail : display the bottom lines of a file (default = 10) |
|
-
e.g. tail ideal_r1.1D |
|
* wc : word count - count characters, words and
lines (of a file) |
|
rm : BE
CAREFUL - remove files and/or directories (no recovery) |
|
-
e.g. rm junk.file |
|
-
e.g. rm -r bad.directory |
|
|
|
* denotes a 'filter' program, which can take input
from a file or from stdin |
|
|
|
|
|
|
* grep : print lines from a file that match the given pattern |
|
e.g. grep path ~/.cshrc |
|
e.g. ls ~/abin | grep -i vol |
|
e.g. from the output of "3dVol2Surf
-help" show lines which |
|
contain 'surf', but not 'surface', then remove duplicates |
|
|
|
3dVol2Surf -help | grep surf | grep -v
surface | sort | uniq |
|
|
|
Some Special Files (in the home
directory) |
|
.cshrc : c-shell startup file ("csh run commands") |
|
set aliases |
|
adjust the path |
|
set shell and environment variables |
|
.afnirc : AFNI startup file |
|
.sumarc : suma startup file |
|
|
|
.login : commands run at the start of a login shell (e.g. a
terminal window) |
|
.logout : commands run before exiting a
login shell |
|
.tcshrc : t-shell startup file (if it
does not exist, the .cshrc file will be used) |