2.01 - Fordham University
Download
Report
Transcript 2.01 - Fordham University
Unix Overview
CISC2200, Fall 09
1
Using Unix/Linux System
Apply for an account
User name and password
Log on and off
through PuTTy, or other telnet/ssh client
Linux server: storm.cis.fordham.edu
After log in, you are in the home directory
2
associated with each account
Your first encounter: shell
Graphical user interface vs. command line interface
Shell: interactive command interpreter
3
On starts up, it displays a prompt character, and waits for user
to type in a command line
On input of a command line, shell extracts command name
and arguments, searches for the program, and runs it.
When program finishes, shell reads next command line….
Linux commands
Command name and arguments:
Some arguments are file names: cp src dest
Some arguments are flags/options: head -20 file
Note that “head 20 file” will print initial 10 lines of file “20”,
and file “file”
Wild cards: *, ?, []
4
rm *.o: remove all .o files
?: match any one character
[abc]: a or b or c
Check/Change Login Shell
Many variations: shell, csh, bash, tcsh, ksh
To check the shell you are using
echo $shell
echo $SHELL
echo $0
login shell: default shell for a user, specified in /etc/passwd
To change login shell
5
chsh <your_user_name>
Some useful tips
Bash stores the commands history
Repeat a previous command
“!<command_no>” or “!<any prefix of previous command>
(the most recent match)
Search for a command
Use UP/DOWN arrow to browse them
Use “history” to show past commands
Type Ctrl-r, and then a string
Bash will search previous commands for a match
File name autocompletion: “tab” key
Shell: how does it work
Shell: interactive command interpreter
Start a shell session within another one
Just enter command “bash”
Use ctrl-d or type exit to terminate a session
How does it find the program ?
Environment variable PATH stores a list of paths to search for
programs: “set | grep PATH” or “echo $PATH”, “set” to show
all variable settings
Builtin commands: history, set, echo, etc.
Customize your shell environment
Modify your shell's startup file (in home dir)
sh, ksh: .profile
bash: .profile, .bashrc, .bash_login .bash_profile
csh: .cshrc, .login tcsh: .tcshrc, .login
Note that these all start with dot
Set environment variables
Values of environment variables
In sh, ksh, bash:
PATH=$HOME/bin:$PATH
PS1="You rang? "
export PATH PS1
can also do export PS1="Yes? “
In csh, tcsh:
setenv PATH $HOME/bin:$PATH
set prompt="You rang? "
Create customized command shorthand
Aliases
In sh, ksh, bash:
alias ls='ls –F’
alias rm=‘rm –I’: so that you have to confirm the removal
In csh, tcsh
alias ls 'ls –F’
File Systems
11
Hierarchical file system
• File: a sequence of 0 or more bytes containing
arbitrary information
– Directories are stored as file
/ (root)
de
v
cdrom tty24
bi
n
home
staff
zhang
12
et
c
lib
passwd
Home directory & Pathname
Absolute pathname, path, specify location of a file or
a directory in the complete file structure
/home/staff/zhang is pathname for my home directory
To make life easier:
Working directory (or current directory) concept
To change your current directory:
To check your current directory: pwd
cd <path name of target directory>
Relative pathname: path names specified relative to
current directory
13
“..”: refers to parent dir
“.”: current directory
“/”: root and seperator in file names
“~”: home directory
Getting around in the file system
To list files/directories:
To create a subdirectory:
ls
mkdir <path name of directory>
To remove a directory:
14
rmdir <path name of directory>
File manipulating commands
mv: move a file or directory, or rename a file/directory
cp: copy file or directory
mv src_path dest_path
cp –r src_dir dest_dir
rm: remove a file or a directory
rm <filename>
rm –r <dir_name>: remove recursively everything under the
directory
A close look at ls
Simply type “ls” will list names of files under current
directory
[zhang@storm Demo]$ ls
CCodes README SampleCodes ShellScriptes
By default, files are listed in alphabetic order
Files with names starting with “.” is not listed
ls <pathname>
If <pathname> is a directory name, list files under the
directory
Change ls behavior using flags
To list “hidden” files
[zhang@storm Demo]$ ls -a
. .. CCodes .HiddenFile README SampleCodes ShellScriptes
To list files in the order of modification time (most recent
first)
[zhang@storm Demo]$ ls -t
README ShellScriptes CCodes SampleCodes
Long listing
To get more information about each file
[zhang@storm Demo]$ ls -al
Total disc space taken in blocks (1024 Byte)
total 32
drwxr-xr-x 5 zhang staff 4096 2008-01-16 16:01 .
drwxr-xr-x 41 zhang staff 4096 2008-01-16 16:01 ..
drwxr-xr-x 2 zhang staff 4096 2008-01-16 15:55 CCodes
-rw-r--r-- 1 zhang staff 38 2008-01-16 16:01 .HiddenFile
-rw-r--r-- 1 zhang staff 53 2008-01-16 15:57 README
drwxr-xr-x 2 zhang staff 4096 2008-01-16 15:55 SampleCodes
drwxr-xr-x 4 zhang staff 4096 2008-01-16 15:56 ShellScriptes
d means
directory
User name of the owner and its group
Who has permission to read/write the file
File permissions
Each file is associated with permission info.
Differentiate three type of users: owner user, user from same
group as owner, others
Three type of access
Read (r): use “cat” to open a file to read, use “ls” to list
files/directories under a directory
Write (w): modify the contents of the file
Execute (x): run the file, or “cd” to the directory
Trying to snoop into other’s directory
[zhang@storm ~]$ ls ../roche/
ls: cannot open directory ../roche/: Permission denied
What’s in a file ?
So far, we learnt that files are organized in a hierarchical
directory structure
Contents of file:
Each file has a name, resides under a directory, is associated
with some admin info (permission, owner)
Text (ASCII) file (such as your C/C++ source code)
Executable file (commands)
A link to other files, …
To check the type of file: “file <filename>”
Display a text file
cat: concatenate input files
more, less: display a file in screen by screen
Go forward using PgDn, Return key
less: can go forward or backward
head, tail: display the first/last 10 lines of a file
head -20 <filename>: display first 20 lines
Some useful file related utilities
Counting # of lines, words and characters in files
To search files for lines that match a pattern
wc
grep “global warming” articles
grep “traditional medicine” articles
-v option: lines that don’t match the pattern
Where did I define/access a variable named
gNumOfOperations ?
grep gNumOfOperations *.[ch]
Sort command
Sort the input into alphabetical order line by line
Many options to control sorting order
-r: reverse the normal order
-n: sort in numeric order
-nr: sort in reverse numeric order
+n: sort starting at n+1-th field
Compare file contents
Suppose you carefully maintain diff. versions of your
projects (so that you can undo some changes), and want
to check what’s the difference.
cmp file1 file2: finds the first place where two files differ (in
terms of line and character)
diff file1 file2: reports all lines that are different
Standard Input/Output
25
Standard input/output/error
• For each program, three special files are
automatically created/opened
• By default, all three are set to the terminals
• In C++, cin, cout, cerr
• In C, extern FILE *stderr, *stdin, *stdout;
1
0
2
Simple example
A very simple C program
#include <stdio.h>
main() {
char yourName[256];
printf ("Your name ?\n");
if (fgets (yourName,256,stdin)==NULL)
fprintf (stderr,"No input");
else
printf("hello, %s\n", yourName);
}
Examples
Many Linux prog. reads input from keyboard and writes
output to the screen
Command “sort”: read lines from terminal (until Ctrl-D), sorts
them and writes to the screen
Very flexible when combined with redirection and pipes
28
Redirect input/output/error
Redirect output to a file:
Redirect error output:
cat tmpfile1 tmpfile2 > newfile
cat tmpfile1 > newfile
cat tmpfile2 >> newfile: append output to the file given
cat tmpfile 2>error_out.txt
Redirect input: cat < tmpfile1 > newfile
Note: syntax is different under different shells
29
More on redirection
To capture both output and error to same file:
./a.out < tt > dd 2> dd : does not work. Error output is not
captured.
./a.out < tt > dd 2>&1
./a.out < tt 2>dd >&2
To discard output, redirect it to /dev/null
/dev/null: a special virtual file, “a black hole”
./a.out > /dev/null 2>&1
Combining commands together
How many files are there under current directory ?
ls > tmp
wc –l < tmp
rm tmp
Sort current online user by alphabetic order
Is some user login to the system now ? (using grep)
Pipe: getting rid of temporary file
Pipe: connect the output of one program to the input of
another program
Any prog. that reads from standard input can read from
pipe, similarly for the standard output
who am i | ./a.out | wc
knows nothing about redirection and pipe
Rule of composition
Pipe: one of the fundamental contributions of UNIX
system
Design programs to be connected with other
programs
Read/write simple, textual, stream-oriented formats
Read from standard input and write to standard output
Filter: program that takes a simple text stream on
input and process it into another simple text stream
on output
Command Pipeline: how ?
Pipe
an inter-process communication mechanism provided by
kernel
Has a reading end and a writing end
Any data write to writing end can be read back from the
reading end
Read/write pipe is no different from read/write files
Writing end
Reading end
The Power of Pipe
Who is using the most CPU ?
ps -eo pcpu,pid,user,args | sort -k 1 -r | head -10
Command Pipeline: how ?*
Shell set things up
create a pipe, “start” two programs simultaneously, with their
input/output redirected to the reading/ending end of pipe
Process related commands
37
The workings of shell*
For each command line, shell creates new child process
to run the command
Sequential commands: e.g. date; who
Pipelined commands: e.g. ls –l | wc
Two commands are run in sequence
Two programs are load/execute simultaneously
Shell waits for the completion, and then display prompt to
get next command …
Run program in background
To start some time-consuming job, and go on to do
something else
wc ch * > wc.out &
Shell starts a process to run the command, and does not wait
for its completion (i.e., reads and parses next command)
Shell builtin command: wait
Kill a process: kill <processid>
ps command
To report a snapshot of current processes: ps
By default: report processes belonging to current user and
associated with same terminal as invoker.
Example:
[zhang@storm ~]$ ps
PID TTY
TIME CMD
15002 pts/2 00:00:00 bash
15535 pts/2 00:00:00 ps
List all processes: ps -e
BSD style output of ps
Learn more about the command, using man ps
[zhang@storm ~]$ ps axu
USER
PID %CPU %MEM VSZ RSS TTY
STAT START TIME COMMAND
root
1
0.0 0.0 2112 672 ?
Ss Jan17 0:11 init [3]
root
2
0.0 0.0
0
0?
S< Jan17 0:00 [kthreadd]
root
3
0.0 0.0
0
0?
S< Jan17 0:00 [migration/0]
root
4
0.0 0.0
0
0?
S< Jan17 0:00 [ksoftirqd/0]
root
5
0.0 0.0
0
0?
S< Jan17 0:00 [watchdog/0]
root
6
0.0 0.0
0
0?
S< Jan17 0:00 [migration/1]
root
7
0.0 0.0
0
0?
S< Jan17 0:00 [ksoftirqd/1]
root
8
0.0 0.0
0
0?
S< Jan17 0:00 [watchdog/1]
root
9
0.0 0.0
0
0?
S< Jan17 0:00 [migration/2]
Some useful commands
To let process keep running even after you log off (no
hangup)
To run your program with low priority
Nohup <command> &
Output will be saved in nohup.out
nice <command> &
To start program at specified time (e.g. midnight)
at 2am < file_containing_programs
Other useful commands
43
Getting help
To check online manual for a command or a library call
man ls, or man fopen
Use PgUp,PgDn, Up Arrow, Down Arrow, Return to move
around
GNU’s official documentation format: TexInfo
Use “info ls” for additional description about “ls”
Misc. Commands
Send a file to the printer:
who: who are logged in the system ?
lpr <fileName>
The file should be of format that the printer recognizes, e.g.,
text file, postscript file (.ps)!
who –a, or who am i
which: show the full path of a command
which bash