mirror of
https://github.com/n05la3/cmdtypist
synced 2024-11-05 21:20:23 +00:00
Shell programming notes
This commit is contained in:
parent
146fd5fd04
commit
f1ee95a7c7
278
Shellprogrammingnotes.txt
Executable file
278
Shellprogrammingnotes.txt
Executable file
@ -0,0 +1,278 @@
|
||||
An Introduction to the
|
||||
Linux Command Shell
|
||||
For Beginners
|
||||
Presented by:
|
||||
Victor Gedris
|
||||
In Co-Operation With:
|
||||
The Ottawa Canada Linux Users Group
|
||||
and
|
||||
ExitCertifiedCopyright and Redistribution
|
||||
This manual was written with the intention of being a helpful guide to Linux users who are trying
|
||||
to become familiar with the Bash shell and basic Linux commands. To make this manual useful to
|
||||
the widest range of people, I decided to release it under a free documentation license, with the
|
||||
hopes that people benefit from it by updating it and re-distributing modified copies. You have
|
||||
permission to modify and distribute this document, as specified under the terms of the GNU Free
|
||||
Documentation License. Comments and suggestions for improvement may be directed to:
|
||||
vic@gedris.org.
|
||||
This document was created using an Open Source office application called Open Office. The file
|
||||
format is non-proprietary, and the document is also published in various other formats online.
|
||||
Updated copies will be available on Vic Gedris' web site [http://vic.dyndns.org/]. For
|
||||
more information on Open Office, please visit http://www.openoffice.org/.
|
||||
Copyright ++ 2003 Victor Gedris.
|
||||
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU
|
||||
Free Documentation License, Version 1.1 or any later version published by the Free Software
|
||||
Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
|
||||
Texts. A copy of the license is available from the Free Software Foundation's website:
|
||||
http://www.fsf.org/copyleft/fdl.html
|
||||
Document Version: 1.2, 2003-06-251.0
|
||||
Introduction
|
||||
The purpose of this document is to provide the reader with a fast and simple introduction to using
|
||||
the Linux command shell and some of its basic utilities. It is assumed that the reader has zero or
|
||||
very limited exposure to the Linux command prompt. This document is designed to accompany an
|
||||
instructor-led tutorial on this subject, and therefore some details have been left out. Explanations,
|
||||
practical examples, and references to DOS commands are made, where appropriate.
|
||||
1.1
|
||||
What is a command shell?
|
||||
A program that interprets commands
|
||||
Allows a user to execute commands by typing them manually at a terminal, or automatically
|
||||
in programs called shell scripts.
|
||||
A shell is not an operating system. It is a way to interface with the operating system and run
|
||||
commands.
|
||||
1.2
|
||||
What is BASH?
|
||||
BASH = Bourne Again SHell
|
||||
Bash is a shell written as a free replacement to the standard Bourne Shell (/bin/sh)
|
||||
originally written by Steve Bourne for UNIX systems.
|
||||
It has all of the features of the original Bourne Shell, plus additions that make it easier to
|
||||
program with and use from the command line.
|
||||
Since it is Free Software, it has been adopted as the default shell on most Linux systems.
|
||||
1.3
|
||||
How is BASH different from the DOS command prompt?
|
||||
Case Sensitivity: In Linux/UNIX, commands and filenames are case sensitive, meaning
|
||||
that typing +,%EXIT"/- instead of the proper #%'exit%$. is a mistake.
|
||||
%/)\(** vs. !$*/#)(: In DOS, the forward-slash &$./,"! is the command argument delimiter,
|
||||
while the backslash '$,\$,# is a directory separator. In Linux/UNIX, the
|
||||
!'.//+) is the directory separator, and the %!(\-/* is an escape character. More
|
||||
about these special characters in a minute!
|
||||
Filenames: The DOS world uses the .(%eight dot three)*- filename convention, meaning
|
||||
that all files followed a format that allowed up to 8 characters in the
|
||||
filename, followed by a period (!')dot&**), followed by an option extension,
|
||||
up to 3 characters long (e.g. FILENAME.TXT). In UNIX/Linux, there is
|
||||
no such thing as a file extension. Periods can be placed at any part of the
|
||||
filename, and &"%extensions),! may be interpreted differently by all
|
||||
programs, or not at all.1.4
|
||||
Special Characters
|
||||
Before we continue to learn about Linux shell commands, it is important to know that there are
|
||||
many symbols and characters that the shell interprets in special ways. This means that certain
|
||||
typed characters: a) cannot be used in certain situations, b) may be used to perform special
|
||||
operations, or, c) must be #$.escaped(#* if you want to use them in a normal way.
|
||||
Character Description
|
||||
\ Escape character. If you want to reference a special character, you must "'"escape!+! it
|
||||
with a backslash first.
|
||||
Example:
|
||||
/
|
||||
touch /tmp/filename\*
|
||||
Directory separator, used to separate a string of directory names.
|
||||
Example:
|
||||
/usr/src/linux
|
||||
. Current directory. Can also **(hide'#) files when it is the first character in a filename.
|
||||
.. Parent directory
|
||||
~ User's home directory
|
||||
* Represents 0 or more characters in a filename, or by itself, all files in a directory.
|
||||
Example:
|
||||
?
|
||||
Represents a single character in a filename.
|
||||
Example:
|
||||
[ ]
|
||||
cd /var/log ; less messages
|
||||
Command separator as above, but only runs the second command if the first one
|
||||
finished without errors.
|
||||
Example:
|
||||
&
|
||||
more < phonenumbers.txt
|
||||
Command separator. Allows you to execute multiple commands on a single line.
|
||||
Example:
|
||||
&&
|
||||
echo $#'Mary 555-1234,/" >> phonenumbers.txt
|
||||
Redirect a file as input to a program.
|
||||
Example:
|
||||
;
|
||||
ls > myfiles.txt
|
||||
Redirect the output of a command onto the end of an existing file.
|
||||
Example:
|
||||
<
|
||||
ls | more
|
||||
Redirect output of a command into a new file. If the file already exists, over-write it.
|
||||
Example:
|
||||
>>
|
||||
hello[0-2].txt represents the names hello0.txt,
|
||||
hello1.txt, and hello2.txt
|
||||
-,*Pipe),&. Redirect the output of one command into another command.
|
||||
Example:
|
||||
>
|
||||
hello?.txt can represent hello1.txt, helloz.txt, but not
|
||||
hello22.txt
|
||||
Can be used to represent a range of values, e.g. [0-9], [A-Z], etc.
|
||||
Example:
|
||||
|
|
||||
pic*2002 can represent the files pic2002, picJanuary2002,
|
||||
picFeb292002, etc.
|
||||
cd /var/logs && less messages
|
||||
Execute a command in the background, and immediately get your shell back.
|
||||
Example:
|
||||
find / -name core > /tmp/corefiles.txt &1.5
|
||||
Executing Commands
|
||||
The Command PATH:
|
||||
Most common commands are located in your shell's *.)PATH(&$, meaning that you can just
|
||||
type the name of the program to execute it.
|
||||
Example: Typing ).* ls"/& will execute the *!' ls"') command.
|
||||
Your shell's ###PATH)&" variable includes the most common program locations, such as
|
||||
/bin, /usr/bin, /usr/X11R6/bin, and others.
|
||||
To execute commands that are not in your current PATH, you have to give the complete
|
||||
location of the command.
|
||||
Examples:
|
||||
/home/bob/myprogram
|
||||
./program (Execute a program in the current directory)
|
||||
~/bin/program (Execute program from a personal bin directory)
|
||||
Command Syntax
|
||||
Commands can be run by themselves, or you can pass in additional arguments to make them do
|
||||
different things. Typical command syntax can look something like this:
|
||||
command [-argument] [-argument] [--argument] [file]
|
||||
Examples:
|
||||
ls List files in current directory
|
||||
ls -l Lists files in *$-long+,) format
|
||||
ls -l --color As above, with colourized output
|
||||
cat filename Show contents of a file
|
||||
cat -n filename Show contents of a file, with line numbers2.0
|
||||
Getting Help
|
||||
When you're stuck and need help with a Linux command, help is usually only a few keystrokes
|
||||
away! Help on most Linux commands is typically built right into the commands themselves,
|
||||
available through online help programs (!-.man pages"-+ and %-*info pages&/)), and of course online.
|
||||
2.1
|
||||
Using a Command's Built-In Help
|
||||
Many commands have simple #)!help)"( screens that can be invoked with special command flags.
|
||||
These flags usually look like "$*-h$%' or ,&*--help!"..
|
||||
Example:
|
||||
2.2
|
||||
grep --help
|
||||
Online Manuals: !)#Man Pages.*/
|
||||
The best source of information for most commands can be found in the online manual pages,
|
||||
known as *.-man pages$%, for short. To read a command's man page, type $',man command$!-.
|
||||
Examples: man ls
|
||||
man man
|
||||
Get help on the #))ls$-- command.
|
||||
A manual about how to use the manual!
|
||||
To search for a particular word within a man page, type +!*/word,"+. To quit from a man page, just
|
||||
type the *"%Q-!. key.
|
||||
Sometimes, you might not remember the name of Linux command and you need to search for it.
|
||||
For example, if you want to know how to change a file's permissions, you can search the man page
|
||||
descriptions for the word $"%permission!,) like this:
|
||||
man -k permission
|
||||
If you look at the output of this command, you will find a line that looks something like:
|
||||
chmod
|
||||
(1)
|
||||
- change file access permissions
|
||||
Now you know that $/'chmod/*. is the command you were looking for. Typing %-(man chmod-!, will
|
||||
show you the chmod command's manual page!
|
||||
2.3
|
||||
Info Pages
|
||||
Some programs, particularly those released by the Free Software Foundation, use info pages as
|
||||
their main source of online documentation. Info pages are similar to man page, but instead of
|
||||
being displayed on one long scrolling screen, they are presented in shorter segments with links to
|
||||
other pieces of information. Info pages are accessed with the *#,info$/% command, or on some
|
||||
Linux distributions, ')'pinfo#-. (a nicer info browser).
|
||||
For example:
|
||||
info df
|
||||
Loads the !"/df,)# info page.3.0
|
||||
Navigating the Linux Filesystem
|
||||
The Linux filesystem is a tree-like hierarchy hierarchy of directories and files. At the base of the
|
||||
filesystem is the %%"/$+# directory, otherwise known as the )/'root!,/ (not to be confused with the root
|
||||
user). Unlike DOS or Windows filesystems that have multiple $-"roots()!, one for each disk drive, the
|
||||
Linux filesystem mounts all disks somewhere underneath the / filesystem. The following table
|
||||
describes many of the most common Linux directories.
|
||||
3.1
|
||||
The Linux Directory Layout
|
||||
Directory
|
||||
Description
|
||||
The nameless base of the filesystem. All other directories, files, drives, and
|
||||
devices are attached to this root. Commonly (but incorrectly) referred to as
|
||||
the ,/"slash*"& or ()./.&( directory. The !"$/),& is just a directory separator, not a
|
||||
directory itself.
|
||||
/bin Essential command binaries (programs) are stored here (bash, ls, mount,
|
||||
tar, etc.)
|
||||
/boot Static files of the boot loader.
|
||||
/dev Device files. In Linux, hardware devices are acceessd just like other files, and
|
||||
they are kept under this directory.
|
||||
/etc Host-specific system configuration files.
|
||||
/home Location of users' personal home directories (e.g. /home/susan).
|
||||
/lib Essential shared libraries and kernel modules.
|
||||
/proc Process information pseudo-filesystem. An interface to kernel data structures.
|
||||
/root The root (superuser) home directory.
|
||||
/sbin Essential system binaries (fdisk, fsck, init, etc).
|
||||
/tmp Temporary files. All users have permission to place temporary files here.
|
||||
/usr The base directory for most shareable, read-only data (programs, libraries,
|
||||
documentation, and much more).
|
||||
/usr/bin Most user programs are kept here (cc, find, du, etc.).
|
||||
/usr/include Header files for compiling C programs.
|
||||
/usr/lib Libraries for most binary programs.
|
||||
/usr/local $&&Locally*-) installed files. This directory only really matters in environments
|
||||
where files are stored on the network. Locally-installed files go in
|
||||
/usr/local/bin, /usr/local/lib, etc.). Also often used for
|
||||
software packages installed from source, or software not officially shipped
|
||||
with the distribution.
|
||||
/usr/sbin Non-vital system binaries (lpd, useradd, etc.)
|
||||
/usr/share Architecture-independent data (icons, backgrounds, documentation, terminfo,
|
||||
man pages, etc.).
|
||||
/usr/src Program source code. E.g. The Linux Kernel, source RPMs, etc.
|
||||
/usr/X11R6 The X Window System.
|
||||
/var Variable data: mail and printer spools, log files, lock files, etc.3.2
|
||||
Commands for Navigating the Linux Filesystems
|
||||
The first thing you usually want to do when learning about the Linux filesystem is take some time
|
||||
to look around and see what's there! These next few commands will: a) Tell you where you are,
|
||||
b) take you somewhere else, and c) show you what's there. The following table describes the basic
|
||||
operation of the pwd, cd, and ls commands, and compares them to certain DOS commands that
|
||||
you might already be familiar with.
|
||||
Linux Command
|
||||
DOS Command
|
||||
Description
|
||||
pwd cd )).Print Working Directory+!'.
|
||||
location in the directory tree.
|
||||
cd cd, chdir #$-Change Directory$&.. When typed all by itself, it
|
||||
returns you to your home directory.
|
||||
cd directory cd directory Change into the specified directory
|
||||
Example: cd /usr/src/linux
|
||||
cd ~
|
||||
cd ..
|
||||
Shows the current
|
||||
name.
|
||||
*-.~($+ is an alias for your home directory. It can be
|
||||
used as a shortcut to your '+-home",!, or other
|
||||
directories relative to your home.
|
||||
cd..
|
||||
cd -
|
||||
Move up one directory. For example, if you are in
|
||||
/home/vic and you type (/&cd ..%)+, you will end
|
||||
up in /home.
|
||||
Return to previous directory. An easy way to get
|
||||
back to your previous location!
|
||||
ls dir /w
|
||||
ls directory dir directory List the files in the specified directory.
|
||||
List all files in the current directory, in column
|
||||
format.
|
||||
Example: ls /var/log
|
||||
ls -l dir List files in %#$long#%$ format, one file per line. This
|
||||
also shows you additional info about the file, such
|
||||
as ownership, permissions, date, and size.
|
||||
ls -a dir /a List all files, including )'.hidden&#$ files. Hidden files
|
||||
are those files that begin with a +,)."+,, e.g. The
|
||||
.bash_history file in your home directory.
|
||||
ls -ld
|
||||
directory
|
||||
A ,*.long!+* list of "*)directory.&*, but instead of showing
|
||||
the directory contents, show the directory's detailed
|
||||
information. For example, compare the output of
|
||||
the following two commands:
|
||||
ls -l /usr/bin
|
||||
ls -ld /usr/bin
|
||||
ls /usr/bin/d*
|
||||
dir d*.*
|
Loading…
Reference in New Issue
Block a user