From c9a6f30490d5600ff21d4729df7f9c17686380e4 Mon Sep 17 00:00:00 2001 From: Jovina Date: Wed, 1 Feb 2012 12:59:45 +0530 Subject: Added 8 ult scripts --- two_column.py | 84 + ult/images/fossee-logo.png | Bin 0 -> 13587 bytes ult/images/iitb-logo.png | Bin 0 -> 13756 bytes ult/ult_1/script.rst | 372 ++++ ult/ult_1/ult1.tex | 208 +++ ult/ult_2/script.rst | 492 ++++++ ult/ult_2/ult2.tex | 200 +++ ult/ult_2/wonderland.txt | 4047 ++++++++++++++++++++++++++++++++++++++++++++ ult/ult_3/bar.txt | 8 + ult/ult_3/foo.txt | 9 + ult/ult_3/marks.txt | 5 + ult/ult_3/script.rst | 375 ++++ ult/ult_3/students.txt | 5 + ult/ult_3/ult3.tex | 170 ++ ult/ult_3/wonderland.txt | 4047 ++++++++++++++++++++++++++++++++++++++++++++ ult/ult_4/marks.txt | 5 + ult/ult_4/marks1.txt | 5 + ult/ult_4/script.rst | 409 +++++ ult/ult_4/students.txt | 5 + ult/ult_4/ult4.tex | 243 +++ ult/ult_5/foo.txt | 9 + ult/ult_5/marks1.txt | 5 + ult/ult_5/script.rst | 347 ++++ ult/ult_5/students.txt | 5 + ult/ult_5/ult5.tex | 178 ++ ult/ult_6/script.rst | 296 ++++ ult/ult_6/ult6.tex | 176 ++ ult/ult_7/06- track.mp3 | 0 ult/ult_7/clause.sh | 20 + ult/ult_7/dir-test.sh | 5 + ult/ult_7/emerald.mp3 | 0 ult/ult_7/for-1.sh | 4 + ult/ult_7/for-2.sh | 4 + ult/ult_7/for-3.sh | 4 + ult/ult_7/for-5.sh | 4 + ult/ult_7/premier.mp3 | 0 ult/ult_7/script.rst | 401 +++++ ult/ult_7/sign.sh | 7 + ult/ult_7/society.mp3 | 0 ult/ult_7/ult7.tex | 202 +++ ult/ult_7/while-1.sh | 4 + ult/ult_7/while-2.sh | 7 + ult/ult_8/script.rst | 339 ++++ ult/ult_8/slides.tex~ | 234 +++ ult/ult_8/ult8.tex | 248 +++ 45 files changed, 13188 insertions(+) create mode 100755 two_column.py create mode 100644 ult/images/fossee-logo.png create mode 100644 ult/images/iitb-logo.png create mode 100644 ult/ult_1/script.rst create mode 100644 ult/ult_1/ult1.tex create mode 100644 ult/ult_2/script.rst create mode 100644 ult/ult_2/ult2.tex create mode 100644 ult/ult_2/wonderland.txt create mode 100644 ult/ult_3/bar.txt create mode 100644 ult/ult_3/foo.txt create mode 100644 ult/ult_3/marks.txt create mode 100644 ult/ult_3/script.rst create mode 100644 ult/ult_3/students.txt create mode 100644 ult/ult_3/ult3.tex create mode 100644 ult/ult_3/wonderland.txt create mode 100644 ult/ult_4/marks.txt create mode 100644 ult/ult_4/marks1.txt create mode 100644 ult/ult_4/script.rst create mode 100644 ult/ult_4/students.txt create mode 100644 ult/ult_4/ult4.tex create mode 100644 ult/ult_5/foo.txt create mode 100644 ult/ult_5/marks1.txt create mode 100644 ult/ult_5/script.rst create mode 100644 ult/ult_5/students.txt create mode 100644 ult/ult_5/ult5.tex create mode 100644 ult/ult_6/script.rst create mode 100644 ult/ult_6/ult6.tex create mode 100644 ult/ult_7/06- track.mp3 create mode 100644 ult/ult_7/clause.sh create mode 100644 ult/ult_7/dir-test.sh create mode 100644 ult/ult_7/emerald.mp3 create mode 100644 ult/ult_7/for-1.sh create mode 100644 ult/ult_7/for-2.sh create mode 100644 ult/ult_7/for-3.sh create mode 100644 ult/ult_7/for-5.sh create mode 100644 ult/ult_7/premier.mp3 create mode 100644 ult/ult_7/script.rst create mode 100644 ult/ult_7/sign.sh create mode 100644 ult/ult_7/society.mp3 create mode 100644 ult/ult_7/ult7.tex create mode 100644 ult/ult_7/while-1.sh create mode 100644 ult/ult_7/while-2.sh create mode 100644 ult/ult_8/script.rst create mode 100644 ult/ult_8/slides.tex~ create mode 100644 ult/ult_8/ult8.tex diff --git a/two_column.py b/two_column.py new file mode 100755 index 0000000..4134b2e --- /dev/null +++ b/two_column.py @@ -0,0 +1,84 @@ +#!/usr/bin/env python +# This script generates two column format from the script file. +import re, optparse + +num = 0 +content = {} + +def parse_script(script): + """Parse the file, and get each cell's content into a dictionary.""" + where = 'HEAD' + txt = '' + global num + for line in open(script): + if line.startswith('..'): + loc = re.findall(".. ((L|R)(\d+))", line) + if loc: + # Next cell has been found + # Save previous cell data + content[where] = txt + + txt = '' + where = loc[0][0] + num = int(loc[0][2]) if int(loc[0][2]) > num else num + continue + else: + pass + txt += line + content[where] = txt # Saving the content of the last cell. + +def write_two_col(content, two_col): + """ Write the content to a file, in two column format.""" + f = open(two_col, 'w') + f.write('%s' %content['HEAD']) + + f.write("\n\n+%s+%s+\n" %('-'*82, '-'*82)) + for i in range(1, num+1): + l = '%s%s' %('L', i) + r = '%s%s' %('R', i) + + # Split each side text into individual lines + if l in content: + ltext = content[l].strip().splitlines() + else: + ltext = [''] + if r in content: + rtext = content[r].strip().splitlines() + else: + rtext = [''] + + # Ensure that both sides have the same number of lines + ltext.extend(['']*(len(rtext) - len(ltext))) + rtext.extend(['']*(len(ltext) - len(rtext))) + + # Write each of the lines in respective columns + for k in range(len(ltext)): + f.write("| %-80s | %-80s |\n" %(ltext[k], rtext[k])) + + # Horizontal division + f.write("+%s+%s+\n" %('-'*82, '-'*82)) + + f.close() + +if __name__ == '__main__': + parser = optparse.OptionParser() + parser.add_option("-i", default="script.rst", dest="input", + help="Input file. 'script.rst' is used by default.") + parser.add_option("-o", default="script2col.rst", dest="output", + help="Output file. script2col.rst is used by default.") + + parser.description = """Converts a script file into two column format.""" + + parser.epilog = \ + """Make sure that you check the validity of the formatting of both +the INPUT and the OUTPUT files, using rst2html. Also, Make sure that +each line, in the INPUT file, is less than 80 chars long.""" + + (options, args) = parser.parse_args() + + script, two_col = options.input, options.output + + parse_script(script) + write_two_col(content, two_col) + + print "Converted %s to 2 column format and saved as %s" %(script, two_col) diff --git a/ult/images/fossee-logo.png b/ult/images/fossee-logo.png new file mode 100644 index 0000000..49d1797 Binary files /dev/null and b/ult/images/fossee-logo.png differ diff --git a/ult/images/iitb-logo.png b/ult/images/iitb-logo.png new file mode 100644 index 0000000..38ec17e Binary files /dev/null and b/ult/images/iitb-logo.png differ diff --git a/ult/ult_1/script.rst b/ult/ult_1/script.rst new file mode 100644 index 0000000..4708de6 --- /dev/null +++ b/ult/ult_1/script.rst @@ -0,0 +1,372 @@ +.. Objectives +.. ---------- + + .. At the end of this tutorial, you will be able to: + + .. 1. Know what is linux and it's need. + .. 2. Understand the need for linux in today's world. + .. 3. Move around in directories and files. + .. 4. Use basic commands of Linux. + +.. Prerequisites +.. ------------- + +.. 1. None + + +Script +------ + +.. L1 + +{{{ Show the first slide containing title, name of the production +team along with the logo of MHRD }}} + +.. R1 + +Hello friends and Welcome to the tutorial on +'Using linux tools - Part 1'. + +.. L2 + +{{{ Show the slide, Objectives }}} + +.. R2 + +At the end of this tutorial, you will be able to, + + 1. Know what is linux. + #. Understand the need for linux in today's world. + #. Move around in directories and files. + #. Use basic commands of Linux. + +.. L3 + +{{{ Switch to slide, what is linux OS }}} + +.. R3 + +Linux (sometimes called GNU/Linux) is a Free and Open Source Operating +System that is inspired by Unix and runs on a variety of hardware +platforms. + +Linux is a modular operating system, with it's basic design based on the +principles established in Unix. It consists of an important and central +piece called the Linux kernel, which, manages system resources like process +control, networking, peripherals and file system access. This is +complemented by the application software, written on top of the kernel that +give the higher level functionality that facilitate the user to carry out +various tasks. + +.. L4 + +{{{ Switch to slide, Why Linux? }}} + +.. R4 + +GNU/Linux can be downloaded in its entirety from the Internet completely +for free with no registration fees, no costs per user, free updates, and +freely available source code. +The security model used in Linux is based on the UNIX idea of security, +which is known to be robust and of proven quality. Also, there are no +viruses in the GNU/Linux world. + +Python is used a lot for scientific computing. Why? Beause, +we can share our operating system and the libraries that we are using +with our co-workers, without any headaches of licensing. +There are a host of tools and libraries, that are useful in day-to-day +scientific computing work.GNU/Linux distributions are very stable and +known for their up-time. We don't have the fear of losing our +computational work, due to system crashes. + +.. L5 + +{{{ Switch to slide, Logging in }}} + +.. R5 + +Let's begin with logging into our system. The GNU/Linux OS supports +multiple users and each user logs in with his/her user-name and password. +You can log-in once you provide your authentication details. + +It is a popular misconception that GNU/Linux doesn't have a GUI (Graphical +user interface). It does have a fully functional GUI, but for the purpose +of this course we shall start with using the CLI (Command line interface). +Once your system has booted up, hit ``Ctrl + Alt + F1`` to switch to the +command line interface. + +You can log out using the ``logout`` command. + +.. R6 + +Now hit ``Ctrl + Alt + F7`` and come back to the GUI. For the purpose +of the spoken tutorials, we shall use the terminal on the GUI. + +.. L6 + +{{{ Open the terminal }}} + +.. R7 + +Now that we have logged in, where are we? +To find out the present working directory, we use the ``pwd`` command. + +.. L7 +:: + + pwd + +.. R8 + +Now, to see what is in the current directory, we use the ``ls`` command. + +.. L8 +:: + + ls + +.. R9 + +It gives us a list of all the files in our present working directory. +``ls`` command takes the directory, in which we want to see the list of +files present, as an argument. To see all the files present in the +``Music`` directory, we say + +.. L9 +:: + + ls Music + +.. R10 + +Note that everything in GNU/Linux and the Unix world is case sensitive. + +As you can see, our home folder has two html files. +What if we wanted the files to be more organized? Say, +we would like to put all our work during this course in a separate +directory. Let us now create a directory ``sdes`` by saying + +.. L10 +:: + + mkdir sees + +.. R11 + +Type ``ls`` to see that a new directory has been +created. + +.. L11 +:: + + ls + +.. L12 + +{{{ Switch to slide, New folders }}} + +.. R12 + +Also, note that special characters need to be escaped. For example if we +wanted to create a directory with the name ``software engineering``, we do +it either as + + mkdir software\ engineering + +or as + + mkdir "software engineering" + +But it is generally a practice to use hyphens or underscores instead of +spaces in filenames and directory names. +Also in modern GNU/Linux filesystems all characters except the forward +slash are allowed. + +.. R13 + +Now that we have seen how to create a new empty directory and navigate into +it, let us create a new blank file. We use the ``touch`` command for this. + +.. L13 + +{{{ Switch to the termninal }}} +:: + + pwd + cd sees + touch first + +.. R14 + +This creates a file named first in our present working directory. Use the +``ls`` command to see that the file has been created. + +.. L14 +:: + + ls + +.. R15 + +To get a quick description of the command, we could use the ``whatis`` +command. It gives a short one-line description of the command that is +passed as an argument to it. For example, + +.. L15 +:: + + whatis touch + +.. R16 + +To get a more detailed description of the command, +we use the ``man`` command. + +.. L16 +:: + + man touch + +.. R17 + +This page gives a detailed description of the command. We can see that the +``touch`` command has a whole host of options that can be passed to it. +Every command in Linux has such a list of options that can be passed to the +command to do specific tasks. Hit the ``q`` key to quit the ``man`` page. + +To see the manual on man itself do, + +.. L17 +:: + + man man + +.. L18 + +{{{ Switch to slide, Using additional options }}} + +.. R18 + +As you may have observed, often the ``man`` page is a bit too much for +quickly cross checking what option to use for a specific task. For this +kind of quick look-up, most of the commands come with a -h or --help +option. This gives a brief description of the options available for that +command. + +Pause the video here, try out the following exercise and resume the video. + +.. L19 + +{{{ Show slide with exercise 1 }}} + +.. R19 + +Which option should be used with ``ls`` command to list all the directories, +sub-directories and files contained in it? +Hint: Use ``man`` or ``--help`` + +.. R20 + +Switch to terminal for solution. + +.. L20 + +{{{continue from paused state}}} +{{{ Switch to the terminal }}} +:: + + ls -R + +.. R21 + +This lists out all the files in the sub-tree of the current directory, +recursively. + +.. L21 + +.. R22 + +When you wish to create a new directory deep inside a directory structure, +using a ``-p`` option with the ``mkdir`` command would be useful. For +example,if we wish to create a folder ``scripts`` inside the directory +``linux-tools`` inside the directory ``sees``, we could simply say, + +.. L22 +:: + + pwd + mkdir -p sees/linux-tools/scripts + +.. R23 + +Let's now say, we wish to remove a directory or a file. How do we find out +what command to use? We use the ``apropos`` command to search for commands +based on their descriptions. To search for the command to remove a +file/directory say, + +.. L23 +:: + + apropos remove + +.. R24 + +This gives us a whole list of commands that have the word ``remove``, in +their description. Looking through the list tells us that ``rm`` or +``rmdir`` is the command to use. + +.. L24 + +.. L25 + +{{{ Show summary slide }}} + +.. R25 + +This brings us to the end of the tutorial.In this tutorial, we have learnt to, + + 1. Understand the basic structure of linux and it's need. + #. Move around in directories and files. + #. Use commands like ``mkdir`` and ``rmdir`` to make and remove directories + respectively. + #. Use commands such as ``man`` and ``whatis`` to get a description of + what a particular command does. + +.. L26 + +{{{ Show self assessment questions slide }}} + +.. R26 + +Here are some self assessment questions for you to solve + +1. Which is the default directory after logging into the terminal? + +2. How to view file attributes with ls command? + +.. L27 + +{{{ Solution of self assessment questions on slide }}} + +.. R27 + +And the answers, + +1. It logins to user's home(/home/user) + +2. In order to view the attributes of a file, we use the -l option with + the ls command. + +:: + + ls -l + +.. L28 + +{{{ Show the Thankyou slide }}} + +.. R28 + +Hope you have enjoyed this tutorial and found it useful. +Thank you! + diff --git a/ult/ult_1/ult1.tex b/ult/ult_1/ult1.tex new file mode 100644 index 0000000..9ad3f03 --- /dev/null +++ b/ult/ult_1/ult1.tex @@ -0,0 +1,208 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Using Linux Tools +% +% Author: FOSSEE +% Copyright (c) 2009, FOSSEE, IIT Bombay +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\documentclass[12pt,compress]{beamer} + +\mode +{ + \usetheme{Warsaw} + \useoutertheme{infolines} + \setbeamercovered{transparent} +} + +\usepackage[english]{babel} +\usepackage[latin1]{inputenc} +%\usepackage{times} +\usepackage[T1]{fontenc} + +% Taken from Fernando's slides. +\usepackage{ae,aecompl} +\usepackage{mathpazo,courier,euler} +\usepackage[scaled=.95]{helvet} + +\definecolor{darkgreen}{rgb}{0,0.5,0} + +\usepackage{listings} +\lstset{language=sh, + basicstyle=\ttfamily\bfseries, + commentstyle=\color{red}\itshape, + stringstyle=\color{darkgreen}, + showstringspaces=false, + keywordstyle=\color{blue}\bfseries} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% DOCUMENT STARTS +\begin{document} + +\begin{frame} + +\begin{center} +\vspace{12pt} +\textcolor{blue}{\huge Using Linux Tools\\Part I} +\end{center} +\vspace{18pt} +\begin{center} +\vspace{10pt} +\includegraphics[scale=0.95]{../images/fossee-logo.png}\\ +\vspace{5pt} +\scriptsize Developed by FOSSEE Team, IIT-Bombay. \\ +\scriptsize Funded by National Mission on Education through ICT\\ +\scriptsize MHRD,Govt. of India\\ +\includegraphics[scale=0.30]{../images/iitb-logo.png}\\ +\end{center} +\end{frame} + +\begin{frame} +\frametitle{Objectives} +\label{sec-2} + +At the end of this tutorial, you will be able to, +\begin{itemize} +\item Know what is linux. +\item Understand the need for linux in today's world. +\item Move around in directories and files. +\item Use basic commands of Linux. +\end{itemize} +\end{frame} + +\begin{frame}[fragile] + \begin{block}{What is the Linux OS?} + \begin{itemize} + \item Free Open Source Operating System + \begin{description} + \item[Free] + Free as in Free Speech + \item[Open-Source] + Permit modifications and redistribution of source code + \end{description} + \item Also called GNU/Linux + \item Unix-inspired + \item Runs on a variety of hardware + \item Linux Kernel + Application software + \end{itemize} + \end{block} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Why Linux?} + \begin{itemize} + \item Free + \item Secure \& versatile + \end{itemize} + + \begin{block}{Why Linux for Scientific Computing?} + \begin{itemize} + \item Free as in Free Speech + \item Can run for \emph{ever} + \item Libraries + \item Parallel Computing + \end{itemize} + \end{block} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Logging in} + \begin{itemize} + \item GNU/Linux does have a GUI + \item Command Line for this module + \item Hit \texttt{Ctrl + Alt + F1} + \item \texttt{logout} command logs you out + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Creating folders} + \begin{itemize} + \item Special characters need to be escaped OR quoted + \end{itemize} + \begin{lstlisting} + $ mkdir software\ engineering + $ mkdir "software engg" + \end{lstlisting} + \begin{itemize} + \item Generally, use hyphens or underscores instead of spaces in names + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Using additional options} + + \begin{itemize} + \item \texttt{-h} or \texttt{--help} gives summary of command usage + \end{itemize} + \begin{lstlisting} + $ ls --help + \end{lstlisting} % $ +\end{frame} + +\begin{frame} + \frametitle{Exercise 1} + \begin{itemize} + \item Which option should be used with ``ls'' command to list all the directories, + sub-directories and files contained in it? + \end{itemize} + Hint: Use ``man'' or ``--help'' +\end{frame} + +\begin{frame} +\frametitle{Summary} +\label{sec-8} + + In this tutorial, we have learnt to, + + +\begin{itemize} +\item Understand the basic structure of linux and it's need. +\item See the current directory in which we are working, using the command ``pwd''. +\item List a directory's contents by using the command ``ls''. +\item Change file timestamps, using the command ``touch''. + \item Use commands like ``mkdir'' and ``rmdir'' to make and remove directories + respectively. +\item Use commands such as ``man'' and ``whatis'' to get a description of + what a particular command does. +\item Search the manual page names and descriptions, using the `` apropos'' command. +\end{itemize} +\end{frame} +\begin{frame}[fragile] +\frametitle{Evaluation} +\label{sec-9} + + +\begin{enumerate} +\item Which is the default directory after logging into the terminal? +\vspace{8pt} +\item How to view file attributes with ``ls'' command? +\end{enumerate} +\end{frame} +\begin{frame} +\frametitle{Solutions} +\label{sec-10} + + +\begin{enumerate} +\item /home/user +\vspace{15pt} +\item ls -l +\end{enumerate} +\end{frame} +\begin{frame} + + \begin{block}{} + \begin{center} + \textcolor{blue}{\Large THANK YOU!} + \end{center} + \end{block} +\begin{block}{} + \begin{center} + For more Information, visit our website\\ + \url{http://fossee.in/} + \end{center} + \end{block} +\end{frame} + +\end{document} + diff --git a/ult/ult_2/script.rst b/ult/ult_2/script.rst new file mode 100644 index 0000000..21db359 --- /dev/null +++ b/ult/ult_2/script.rst @@ -0,0 +1,492 @@ +.. Objectives +.. ---------- + + .. At the end of this tutorial, you will be able to: + + .. 1. Copy files from one location to another. + .. 2. Remove files and directories. + .. 3. Change permissions and ownership of files. + .. 4. Navigate through directories and files. + +.. Prerequisites +.. ------------- + +.. 1. Using Linux tools - Part 1 + + +Script +------ + +.. L1 + +{{{ Show the first slide containing title, name of the production +team along with the logo of MHRD }}} + +.. R1 + +Hello friends and Welcome to the tutorial on +'Using linux tools - Part 2'. + +.. L2 + +{{{ Show slide with objectives }}} + +.. R2 + +At the end of this tutorial, you will be able to, + + 1. Copy files from one location to another. + #. Remove files and directories. + #. Change permissions and ownership of files. + #. Navigate through directories and files. + +.. L3 + +{{{ Switch to the pre-requisite slide }}} + +.. R3 + +Before beginning this tutorial,we would suggest you to complete the +tutorial on "Using Linux tools - Part 1". + +.. R4 + +Let us start with the concept of basic file handling. +Let's begin with removing files. +The ``rm`` command is used to delete files. + +Here's example to remove a file named "foo" from the directory "sdes", + +.. L4 + +{{{ Navigate to /home/user/sdes/ }}} +:: + + rm foo + ls + +.. R5 + +Note that, as such, ``rm`` works only for files and not for directories. +For instance, if you try to remove a directory named ``bar`` using, + +.. L5 +:: + + rm bar + +.. R6 + +we get an error saying, cannot remove `bar`: Is a directory. But ``rm`` +takes additional arguments which can be used to remove a directory and all +of it's content, including sub-directories.We use the ``-r`` option. + +.. L6 +:: + + rm -r bar + ls + +.. R7 + +It removes the directory ``bar`` and all of it's content including +sub-directories, recursively. The ``-r`` stands for recursive. + +Let's say we wish to copy a file, ``foo`` from ``sdes/linux-tools/scripts``, +which is the source location to the target location ``sees/linux-tools``, +how would we do it? + +.. L7 +:: + + pwd + cp linux-tools/scripts/foo linux-tools/ + +.. R8 + +Note, that we haven't changed the name of the file name at the target +location. We could have done that by specifying a new filename at the +target location,as, + +.. L8 +:: + + cp linux-tools/scripts/foo linux-tools/bar + +.. R9 + +This copies the file ``foo`` to the new location, but with the new name, +``bar``. + +But, what would have happened if we had a file named ``bar`` already at the +new location? Let's try doing the copy again, and see what happens. + +.. L9 +:: + + cp linux-tools/scripts/foo linux-tools/bar + +.. R10 + +We get no error message, what happened? ``cp`` actually overwrites files. +In this case, it's not a problem since, we just re-copied the same content, +but in general it could be a problem, and we could lose data. To prevent +this, we use the ``-i`` flag with ``cp``. + +.. L10 +:: + + cp -i linux-tools/scripts/foo linux-tools/bar + +.. R11 + +We are now prompted, whether the file should be over-written. To over-write +say ``y``, else say ``n``. + +Now, let's try to copy the directory ``sdes`` to a new directory called +``course``. How do we do it? + +.. L11 +:: + + cd /home/user + cp -i sdes course + +.. R12 + +``cp`` refuses to copy the directory ``sdes``. We use the option ``-r`` +(recursive) to copy the directory and all it's content. + +.. L12 +:: + + cd /home/user + cp -ir sdes course + ls + +.. R13 + +We see that a new directory named course has been created with all it's +contents. + +Now, If we want to move files, instead of copying them, one way to go about +it, would be to ``cp`` the file to the new location and ``rm`` the old +file. Instead, you can make use of only one command which can do this task at +one go. The ``mv`` command can move files or directories. It also takes +the ``-i`` option to prompt before overwriting. + +.. L14 +:: + + cd /home/user + mv -i sdes/ course/ + +.. R15 + +Let us understand what exactly happened when we used the ``mv`` command + +.. L15 +:: + + ls course + +.. R16 + +We can see that the ``sdes`` directory has been inserted as sub-directory +of the ``course`` directory. The move command doesn't over-write +directories, but the ``-i`` option is useful when moving files around. + +A common way to rename files (or directories), is to copy a file (or a +directory) to the same location, with a new name. + +.. L16 +:: + + mv sdes/linux-tools sdes/linux + +.. R17 + +It renames the ``linux-tools`` directory to just ``linux`` + +While moving around our files and directories, we have been careful to stay +within the ``/home/`` directory, but other than that there are many other +directories too. Let us take this opportunity to understand a few things +about the linux file hierarchy and file permissions. + +.. L17 +:: + + cd / + +{{{ Switch to slide, Linux File Hierarchy }}} + +.. R18 + +The ``/`` directory is called the root directory. All the files and +directories, (even if they are on different physical devices) appear as +sub-directories of the root directory. + +.. L18 + +{{{ Switch to terminal }}} +:: + + ls + +.. R19 + +You can see the various directories present at the top most level. + +.. L19 + +{{{ Pause for sometime and then continue }}} + +.. R20 + +For more information, it is recommended that you look at the ``man`` page +of ``hier``. + +.. L20 +:: + + man hier + +{{{ Pause for sometime and then hit q }}} + +.. R21 + +Let us now look at file permissions. Linux is a multi-user environment and +allows users to set permissions to their files to allow only a set of +people to read or write it. Similarly, it is not "safe" to allow system +files to be edited by any user. All this access control is possible in +Linux. + +To start, in the root directory, say, + +.. L21 +:: + + ls -l + +.. R22 + +You again get a list of all the sub-directories, but this time with a lot +of additional information. Let us try and understand what this output says +Consider the first line of the output, + +.. L22 + +{{{ Highlight the required portions accordingly while narrating }}} + +.. R23 + +The first column denotes the type and the access permissions of the file. +The second is the number of links. The third and fourth are the owner and +group of the file. The next field is the size of the file in bytes. The +next field is the date and time of modification and the last column is the +file name. +We shall look at the permissions of the file now, ie., the first column of +the output. + +The first character in the first column specifies, whether the item is a +file or a directory. Files have a ``-`` as the first character and +directories have a ``d``. + +The next 9 characters define the access permissions of the file. Before +looking at it, we need to briefly study groups and users and ownership. + +We already know what the first character in the first column (in the output +of ``ls -l``) is for. The rest of the 9 characters are actually sets of 3 +characters of each. The first set of 3 characters defines the permissions +of the user, the next 3 is for the group and the last three is for others. +Based on the values of these characters, access is provided or denied to +files, to each of the users. + +So, what does each of the three characters stand for? Let's suppose we are +looking at the set, corresponding to the permissions of the user. In the +three characters, the first character can either be an ``r`` or a ``-``. +Which means, the user can either have the permissions to read the file or +not. If the character is ``r``, then the user has the permissions to read +the file, else not. Similarly, ``w`` stands for write permissions and +decides whether the user is allowed to write to the file. ``x`` stands for +execute permissions. You cannot execute a file, if you do not have the +permissions to execute it. + +Similarly, the next set of characters decides the same permissions for the +members of the group, that the file is associated with. The last set of +characters defines these permissions for the users, who are neither owners +of the file nor in the group, with which the file is associated. + +Now, it's not as if these permissions cannot be changed. If you are the +owner of a file, you can change the permissions of a file, using the +``chmod`` command. + +.. L23 + +.. R24 + +Let's say, we wish to give the execute permissions for a file, to both the +user and the group, how do we go about doing it? To be more explicit, given +a file ``foo.sh``, with the permissions flags as ``-rw-r--r--``, change it +to ``-rwxr-xr--``. + +The following command does it for us, + +.. L24 +:: + + chmod ug+x foo.sh + ls -l foo.sh + +.. R25 + +As you can see, the permissions have been set to the required value. But +what did we exactly do? Let us try and understand. + +.. L25 + +{{{ Switch to slide,Symbolic modes }}} + +.. R26 + +In the command, the parameter ``ug+x`` is the mode parameter to the +``chmod`` command. It specifies the changes that need to be made to the +permissions of the file ``foo.sh``. +The ``u`` and ``g`` stand for the user and group, respectively. The ``x`` +stands for the execute permission and ``+`` stands for adding the +specified permission. So, essentially, we are asking ``chmod`` command to +add the execute permission for the user and group. The permission of others +will remain unchanged. + +So, if we wished to add the execute permission to all the users, instead of +adding it to just the user and group, we would have instead said + +.. L26 +:: + + chmod a+x foo.sh + +.. R27 + +or + +.. L27 +:: + + chmod ugo+x foo.sh + +.. R28 + +Pause the video here, try out the following exercise and resume the video. + +.. L28 + +.. L29 + +{{{ Show slide with exercise 1 }}} + +.. R29 + +Change the permissions of a directory along with all of its +sub-directories and files. + +.. L30 + +{{{ Show slide with solution 1 }}} + +.. R30 + +To change the permissions of a directory along with all of its +sub-directories and files, recursively, we use the ``-R`` option +with the chmod command as shown + + chmod go-r -R / + +.. R31 + +It is important to note that the permissions of a file can only be changed +by a user who is the owner of a file or the superuser. + +What if we wish to change the ownership of a file? The ``chown`` command is +used to change the owner and group. +By default, the owner of a file (or directory) is the user that +created it. The group is a set of users that share the same access +permissions i.e., read, write and execute. +For instance, to change the user and the group of the file +``wonderland.txt`` to ``alice`` and ``users``, respectively, we say. + +.. L31 +:: + + chown fossee:users wonderland.txt + +.. R32 + +We get an error saying, the operation is not permitted. +We have attempted to change the ownership of a file that we own, to a +different user. Logically, this shouldn't be possible, because, this can +lead to problems, in a multi-user system. +Only the superuser is allowed to change the ownership of a file from one +user to another. The superuser or the ``root`` user is the only user +empowered to a certain set of tasks and hence is called the superuser. The +command above would have worked, if you did login as the superuser and +then changed the ownership of the file. + +.. L32 + +.. L33 + +{{{ Show summary slide }}} + +.. R33 + +This brings us to the end of the tutorial.In this tutorial, we have learnt to, + + 1. Copy and move files from one location to another, using the ``cp`` + and ``mv`` commands respectively. + #. Remove files using ``rm`` command. + #. Understand the Linux file hierarchy. + #. Change permissions and ownership of files, using the ``chmod`` + and ``chown`` commands respectively. + +.. L34 + +{{{ Show self assessment questions slide }}} + +.. R34 + +Here are some self assessment questions for you to solve + +1. How to copy all the contents of one folder into another? + +2. How will you rename the file wonderland.txt to alice.txt using the + commands learnt so far? + +.. L35 + +{{{ Solution of self assessment questions on slide }}} + +.. R35 + +And the answers, + +1. We use the ``cp`` command along with a star sign. The star denotes that + it will copy all the files of folder 1 to folder 2. +:: + + cp folder1/* folder2 + +2. To rename a file, we use the ``mv`` command as, +:: + + mv wonderland.txt alice.txt + +.. L36 + +{{{ Show the Thankyou slide }}} + +.. R36 + +Hope you have enjoyed this tutorial and found it useful. +Thank you! + diff --git a/ult/ult_2/ult2.tex b/ult/ult_2/ult2.tex new file mode 100644 index 0000000..9fb0e7e --- /dev/null +++ b/ult/ult_2/ult2.tex @@ -0,0 +1,200 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Using Linux Tools +% +% Author: FOSSEE +% Copyright (c) 2009, FOSSEE, IIT Bombay +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\documentclass[12pt,compress]{beamer} + +\mode +{ + \usetheme{Warsaw} + \useoutertheme{infolines} + \setbeamercovered{transparent} +} + +\usepackage[english]{babel} +\usepackage[latin1]{inputenc} +%\usepackage{times} +\usepackage[T1]{fontenc} + +% Taken from Fernando's slides. +\usepackage{ae,aecompl} +\usepackage{mathpazo,courier,euler} +\usepackage[scaled=.95]{helvet} + +\definecolor{darkgreen}{rgb}{0,0.5,0} + +\usepackage{listings} +\lstset{language=sh, + basicstyle=\ttfamily\bfseries, + commentstyle=\color{red}\itshape, + stringstyle=\color{darkgreen}, + showstringspaces=false, + keywordstyle=\color{blue}\bfseries} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% DOCUMENT STARTS +\begin{document} + +\begin{frame} + +\begin{center} +\vspace{12pt} +\textcolor{blue}{\huge Using Linux Tools\\Part II} +\end{center} +\vspace{18pt} +\begin{center} +\vspace{10pt} +\includegraphics[scale=0.95]{../images/fossee-logo.png}\\ +\vspace{5pt} +\scriptsize Developed by FOSSEE Team, IIT-Bombay. \\ +\scriptsize Funded by National Mission on Education through ICT\\ +\scriptsize MHRD,Govt. of India\\ +\includegraphics[scale=0.30]{../images/iitb-logo.png}\\ +\end{center} +\end{frame} +\begin{frame} +\frametitle{Objectives} +\label{sec-2} + +At the end of this tutorial, you will be able to, +\begin{itemize} +\item Copy files from one location to another. +\item Remove files and directories. +\item Change permissions and ownership of files. +\item Navigate through directories and files. +\end{itemize} +\end{frame} + +\begin{frame} +\frametitle{Pre-requisite} +\label{sec-3} + +Spoken tutorial on - +\begin{itemize} +\item Using Linux tools -- Part I +\end{itemize} +\end{frame} + + +\begin{frame} + \frametitle{Linux File Hierarchy} + \begin{itemize} + \item \texttt{/} is called the root directory + \item The root directory is the topmost level of the hierarchy + \item For details \texttt{man hier} + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Symbolic modes} + \begin{small} + \begin{center} + \begin{tabular}{lll} + Reference & Class & Description \\ + \hline + u & user & the owner of the file \\ + g & group & users who are members of the file's group \\ + o & others & users who are not hte owner of the file or members of the group \\ + a & all & all three of the above; is the same as \emph{ugo} \\ + \end{tabular} + \end{center} + + \begin{center} + \begin{tabular}{ll} + Operator & Description \\ + \hline + + & adds the specified modes to the specified classes \\ + - & removes the specified modes from the specified classes \\ + = & the modes specified are to be made the exact modes for the specified classes \\ + \end{tabular} + \end{center} + + \begin{center} + \begin{tabular}{lll} + Mode & Name & Description \\ + \hline + r & read & read a file or list a directory's contents \\ + w & write & write to a file or directory \\ + x & execute & execute a file or recurse a directory tree \\ + \end{tabular} + \end{center} + \end{small} +\end{frame} + + +\begin{frame} + \frametitle{Exercise 1} + \begin{itemize} + \item Change the permissions of a directory along with all of its + sub-directories and files. + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Solution 1} + \begin{itemize} + \item chmod go-r -R / + \end{itemize} +\end{frame} + +\begin{frame} +\frametitle{Summary} +\label{sec-8} + + In this tutorial, we have learnt to, + + +\begin{itemize} +\item Copy and move files from one location to another, using the ``cp'' + and ``mv'' commands respectively. +\item Remove files using ``rm`` command. +\item Understand the Linux file hierarchy. +\item Change permissions and ownership of files, using the ``chmod'' + and ``chown'' commands respectively. +\end{itemize} +\end{frame} + +\begin{frame}[fragile] +\frametitle{Evaluation} +\label{sec-9} + + +\begin{enumerate} +\item How to copy all the contents of one folder into another? +\vspace{15pt} +\item How will you rename the file wonderland.txt to alice.txt using the + commands learnt so far? +\end{enumerate} +\end{frame} +\begin{frame} +\frametitle{Solutions} +\label{sec-10} + + +\begin{enumerate} +\item cp folder1/* folder2 +\vspace{15pt} +\item mv wonderland.txt alice.txt +\end{enumerate} +\end{frame} +\begin{frame} + + \begin{block}{} + \begin{center} + \textcolor{blue}{\Large THANK YOU!} + \end{center} + \end{block} +\begin{block}{} + \begin{center} + For more Information, visit our website\\ + \url{http://fossee.in/} + \end{center} + \end{block} +\end{frame} + +\end{document} + + diff --git a/ult/ult_2/wonderland.txt b/ult/ult_2/wonderland.txt new file mode 100644 index 0000000..0f62284 --- /dev/null +++ b/ult/ult_2/wonderland.txt @@ -0,0 +1,4047 @@ +Project Gutenberg's Alice's Adventures in Wonderland, by Lewis Carroll + +This eBook is for the use of anyone anywhere at no cost and with +almost no restrictions whatsoever. You may copy it, give it away or +re-use it under the terms of the Project Gutenberg License included +with this eBook or online at www.gutenberg.net + + +Title: Alice's Adventures in Wonderland + Illustrated by Arthur Rackham. With a Proem by Austin Dobson + +Author: Lewis Carroll + +Illustrator: Arthur Rackham + +Release Date: May 19, 2009 [EBook #28885] + +Language: English + +Character set encoding: ISO-8859-1 + +*** START OF THIS PROJECT GUTENBERG EBOOK ALICE'S ADVENTURES IN WONDERLAND *** + + + + +Produced by Jana Srna, Emmy and the Online Distributed +Proofreading Team at http://www.pgdp.net (This file was +produced from images generously made available by the +University of Florida Digital Collections.) + + + + + + + + + + + +ALICE'S ADVENTURES IN WONDERLAND + +[Illustration: "Alice"] + +[Illustration: + + ALICE'S·ADVENTURES + IN·WONDERLAND + BY·LEWIS·CARROLL + ILLUSTRATED·BY + ARTHUR·RACKHAM + + WITH A PROEM BY AUSTIN DOBSON + + LONDON·WILLIAM·HEINEMANN + NEW·YORK·DOUBLEDAY·PAGE·&·Co] + + PRINTED IN ENGLAND + + _'Tis two score years since CARROLL'S art, + With topsy-turvy magic, + Sent ALICE wondering through a part + Half-comic and half-tragic._ + + _Enchanting ALICE! Black-and-white + Has made your deeds perennial; + And naught save "Chaos and old Night" + Can part you now from TENNIEL;_ + + _But still you are a Type, and based + In Truth, like LEAR and HAMLET; + And Types may be re-draped to taste + In cloth-of-gold or camlet._ + + _Here comes afresh Costumier, then; + That Taste may gain a wrinkle + From him who drew with such deft pen + The rags of RIP VAN WINKLE!_ + + _AUSTIN DOBSON._ + + + + All in the golden afternoon + Full leisurely we glide; + For both our oars, with little skill, + By little arms are plied, + While little hands make vain pretence + Our wanderings to guide. + + Ah, cruel Three! In such an hour, + Beneath such dreamy weather, + To beg a tale of breath too weak + To stir the tiniest feather! + Yet what can one poor voice avail + Against three tongues together? + + Imperious Prima flashes forth + Her edict "to begin it"-- + In gentler tone Secunda hopes + "There will be nonsense in it!"-- + While Tertia interrupts the tale + Not _more_ than once a minute. + + Anon, to sudden silence won, + In fancy they pursue + The dream-child moving through a land + Of wonders wild and new, + In friendly chat with bird or beast-- + And half believe it true. + + And ever, as the story drained + The wells of fancy dry. + And faintly strove that weary one + To put the subject by, + "The rest next time--" "It _is_ next time!" + The happy voices cry. + + Thus grew the tale of Wonderland: + Thus slowly, one by one, + Its quaint events were hammered out-- + And now the tale is done, + And home we steer, a merry crew, + Beneath the setting sun. + + Alice! a childish story take, + And with a gentle hand + Lay it where Childhood's dreams are twined + In Memory's mystic band, + Like pilgrim's wither'd wreath of flowers + Pluck'd in a far-off land. + + + + +CONTENTS + + + PAGE + + I. DOWN THE RABBIT-HOLE 1 + + II. THE POOL OF TEARS 13 + + III. A CAUCUS-RACE AND A LONG TALE 24 + + IV. THE RABBIT SENDS IN A LITTLE BILL 35 + + V. ADVICE FROM A CATERPILLAR 49 + + VI. PIG AND PEPPER 64 + + VII. A MAD TEA-PARTY 82 + + VIII. THE QUEEN'S CROQUET-GROUND 96 + + IX. THE MOCK TURTLE'S STORY 111 + + X. THE LOBSTER QUADRILLE 126 + + XI. WHO STOLE THE TARTS? 139 + + XII. ALICE'S EVIDENCE 150 + + + + +LIST OF THE PLATES + + + _To face page_ + + Alice _Frontispiece_ + + The Pool of Tears 22 + + They all crowded round it panting and + asking, "But who has won?" 28 + + "Why, Mary Ann, what are you doing out + here?" 36 + + Advice from a Caterpillar 50 + + An unusually large saucepan flew close + by it, and very nearly carried it off 70 + + It grunted again so violently that she + looked down into its face in some alarm 74 + + A Mad Tea-Party 84 + + The Queen turned angrily away from him + and said to the Knave, "Turn them over" 100 + + The Queen never left off quarrelling + with the other players, and shouting + "Off with his head!" or, "Off with her + head!" 116 + + The Mock Turtle drew a long breath and + said, "That's very curious" 132 + + Who stole the Tarts? 140 + + At this the whole pack rose up into the + air, and came flying down upon her 158 + + + + +CHAPTER I + + +[Sidenote: _Down the Rabbit-Hole_] + +ALICE was beginning to get very tired of sitting by her +sister on the bank, and of having nothing to do: once or twice she had +peeped into the book her sister was reading, but it had no pictures or +conversations in it, "and what is the use of a book," thought Alice, +"without pictures or conversations?" + +So she was considering in her own mind (as well as she could, for the +hot day made her feel very sleepy and stupid) whether the pleasure of +making a daisy-chain would be worth the trouble of getting up and +picking the daisies, when suddenly a White Rabbit with pink eyes ran +close by her. + +There was nothing so _very_ remarkable in that; nor did Alice think it +so _very_ much out of the way to hear the Rabbit say to itself, "Oh +dear! Oh dear! I shall be too late!" (when she thought it over +afterwards, it occurred to her that she ought to have wondered at this, +but at the time it all seemed quite natural); but when the Rabbit +actually _took a watch out of its waistcoat-pocket_, and looked at it, +and then hurried on, Alice started to her feet, for it flashed across +her mind that she had never before seen a rabbit with either a +waistcoat-pocket, or a watch to take out of it, and burning with +curiosity, she ran across the field after it, and was just in time to +see it pop down a large rabbit-hole under the hedge. + +In another moment down went Alice after it, never once considering how +in the world she was to get out again. + +The rabbit-hole went straight on like a tunnel for some way, and then +dipped suddenly down, so suddenly that Alice had not a moment to think +about stopping herself before she found herself falling down what seemed +to be a very deep well. + +[Illustration] + +Either the well was very deep, or she fell very slowly, for she had +plenty of time as she went down to look about her, and to wonder what +was going to happen next. First, she tried to look down and make out +what she was coming to, but it was too dark to see anything; then she +looked at the sides of the well and noticed that they were filled with +cupboards and book-shelves: here and there she saw maps and pictures +hung upon pegs. She took down a jar from one of the shelves as she +passed; it was labelled "ORANGE MARMALADE," but to her disappointment it +was empty; she did not like to drop the jar for fear of killing +somebody underneath, so managed to put it into one of the cupboards as +she fell past it. + +"Well!" thought Alice to herself. "After such a fall as this, I shall +think nothing of tumbling down stairs! How brave they'll all think me at +home! Why, I wouldn't say anything about it, even if I fell off the top +of the house!" (Which was very likely true.) + +Down, down, down. Would the fall _never_ come to an end? "I wonder how +many miles I've fallen by this time?" she said aloud. "I must be getting +somewhere near the centre of the earth. Let me see: that would be four +thousand miles down. I think--" (for, you see, Alice had learnt several +things of this sort in her lessons in the schoolroom, and though this +was not a _very_ good opportunity for showing off her knowledge, as +there was no one to listen to her, still it was good practice to say it +over) "--yes, that's about the right distance--but then I wonder what +Latitude or Longitude I've got to?" (Alice had no idea what Latitude +was, or Longitude either, but thought they were nice grand words to +say.) + +Presently she began again. "I wonder if I shall fall right _through_ the +earth! How funny it'll seem to come out among the people that walk with +their heads downwards! The Antipathies, I think--" (she was rather glad +there _was_ no one listening, this time, as it didn't sound at all the +right word) "--but I shall have to ask them what the name of the country +is, you know. Please, Ma'am, is this New Zealand or Australia?" (and she +tried to curtsey as she spoke--fancy _curtseying_ as you're falling +through the air! Do you think you could manage it?) "And what an +ignorant little girl she'll think me! No, it'll never do to ask: perhaps +I shall see it written up somewhere." + +Down, down, down. There was nothing else to do, so Alice soon began +talking again. "Dinah'll miss me very much to-night, I should think!" +(Dinah was the cat.) "I hope they'll remember her saucer of milk at +tea-time. Dinah, my dear, I wish you were down here with me! There are +no mice in the air, I'm afraid, but you might catch a bat, and that's +very like a mouse, you know. But do cats eat bats, I wonder?" And here +Alice began to get rather sleepy, and went on saying to herself, in a +dreamy sort of way, "Do cats eat bats? Do cats eat bats?" and sometimes, +"Do bats eat cats?" for, you see, as she couldn't answer either +question, it didn't much matter which way she put it. She felt that she +was dozing off, and had just begun to dream that she was walking hand in +hand with Dinah, and saying to her very earnestly, "Now, Dinah, tell me +the truth: did you ever eat a bat?" when suddenly, thump! thump! down +she came upon a heap of sticks and dry leaves, and the fall was over. + +Alice was not a bit hurt, and she jumped up on to her feet in a moment: +she looked up, but it was all dark overhead; before her was another long +passage, and the White Rabbit was still in sight, hurrying down it. +There was not a moment to be lost: away went Alice like the wind, and +was just in time to hear it say, as it turned a corner, "Oh my ears and +whiskers, how late it's getting!" She was close behind it when she +turned the corner, but the Rabbit was no longer to be seen: she found +herself in a long, low hall, which was lit up by a row of lamps hanging +from the roof. + +There were doors all round the hall, but they were all locked; and when +Alice had been all the way down one side and up the other, trying every +door, she walked sadly down the middle, wondering how she was ever to +get out again. + +Suddenly she came upon a little three-legged table, all made of solid +glass; there was nothing on it but a tiny golden key, and Alice's first +idea was that this might belong to one of the doors of the hall; but, +alas! either the locks were too large, or the key was too small, but at +any rate it would not open any of them. However, on the second time +round, she came upon a low curtain she had not noticed before, and +behind it was a little door about fifteen inches high: she tried the +little golden key in the lock, and to her great delight it fitted! + +Alice opened the door and found that it led into a small passage, not +much larger than a rat-hole: she knelt down and looked along the passage +into the loveliest garden you ever saw. How she longed to get out of +that dark hall, and wander about among those beds of bright flowers and +those cool fountains, but she could not even get her head through the +doorway; "and even if my head would go through," thought poor Alice, "it +would be of very little use without my shoulders. Oh, how I wish I could +shut up like a telescope! I think I could, if I only knew how to begin." +For, you see, so many out-of-the-way things had happened lately, that +Alice had begun to think that very few things indeed were really +impossible. + +There seemed to be no use in waiting by the little door, so she went +back to the table, half hoping she might find another key on it, or at +any rate a book of rules for shutting people up like telescopes: this +time she found a little bottle on it ("which certainly was not here +before," said Alice,) and tied round the neck of the bottle was a paper +label, with the words "DRINK ME" beautifully printed on it in large +letters. + +It was all very well to say "Drink me," but the wise little Alice was +not going to do _that_ in a hurry. "No, I'll look first," she said, "and +see whether it's marked '_poison_' or not;" for she had read several +nice little stories about children who had got burnt, and eaten up by +wild beasts, and other unpleasant things, all because they _would_ not +remember the simple rules their friends had taught them: such as, that a +red-hot poker will burn you if you hold it too long; and that, if you +cut your finger _very_ deeply with a knife, it usually bleeds; and she +had never forgotten that, if you drink much from a bottle marked +"poison," it is almost certain to disagree with you, sooner or later. + +However, this bottle was _not_ marked "poison," so Alice ventured to +taste it, and finding it very nice (it had, in fact, a sort of mixed +flavour of cherry-tart, custard, pineapple, roast turkey, coffee, and +hot buttered toast,) she very soon finished it off. + + * * * * * + +"What a curious feeling!" said Alice. "I must be shutting up like a +telescope." + +And so it was indeed: she was now only ten inches high, and her face +brightened up at the thought that she was now the right size for going +through that little door into that lovely garden. First, however, she +waited for a few minutes to see if she was going to shrink any further: +she felt a little nervous about this: "for it might end, you know," said +Alice to herself, "in my going out altogether, like a candle. I wonder +what I should be like then?" And she tried to fancy what the flame of a +candle looks like after the candle is blown out, for she could not +remember ever having seen such a thing. + +After a while, finding that nothing more happened, she decided on going +into the garden at once; but, alas for poor Alice! when she got to the +door, she found she had forgotten the little golden key, and when she +went back to the table for it, she found she could not possibly reach +it: she could see it quite plainly through the glass, and she tried her +best to climb up one of the legs of the table, but it was too slippery; +and when she had tired herself out with trying, the poor little thing +sat down and cried. + +"Come, there's no use in crying like that!" said Alice to herself, +rather sharply. "I advise you to leave off this minute!" She generally +gave herself very good advice (though she very seldom followed it), and +sometimes she scolded herself so severely as to bring tears into her +eyes; and once she remembered trying to box her own ears for having +cheated herself in a game of croquet she was playing against herself, +for this curious child was very fond of pretending to be two people. +"But it's no use now," thought poor Alice, "to pretend to be two people! +Why there's hardly enough of me left to make _one_ respectable person!" + +Soon her eye fell on a little glass box that was lying under the table: +she opened it, and found in it a very small cake, on which the words +"EAT ME" were beautifully marked in currants. "Well, I'll eat it," said +Alice, "and if it makes me grow larger, I can reach the key; and if it +makes me grow smaller, I can creep under the door; so either way I'll +get into the garden, and I don't care which happens!" + +She ate a little bit, and said anxiously to herself, "Which way? Which +way?" holding her hand on the top of her head to feel which way it was +growing, and she was quite surprised to find that she remained the same +size; to be sure, this is what generally happens when one eats cake, +but Alice had got so much into the way of expecting nothing but +out-of-the-way things to happen, that it seemed quite dull and stupid +for life to go on in the common way. + +So she set to work, and very soon finished off the cake. + + * * * * * + + + + +CHAPTER II + + +[Sidenote: _Pool of Tears_] + +"CURIOUSER and curiouser!" cried Alice (she was so much +surprised, that for a moment she quite forgot how to speak good +English); "now I'm opening out like the largest telescope that ever was! +Good-bye, feet!" (for when she looked down at her feet, they seemed to +be almost out of sight, they were getting so far off). "Oh, my poor +little feet, I wonder who will put on your shoes and stockings for you +now, dears? I'm sure _I_ sha'n't be able! I shall be a great deal too +far off to trouble myself about you: you must manage the best way you +can--but I must be kind to them," thought Alice, "or perhaps they won't +walk the way I want to go! Let me see: I'll give them a new pair of +boots every Christmas." + +And she went on planning to herself how she would manage it. "They must +go by the carrier," she thought; "and how funny it'll seem, sending +presents to one's own feet! And how odd the directions will look! + + Alice's Right Foot, Esq. + Hearthrug, + near the Fender, + (with Alice's love). + +Oh dear, what nonsense I'm talking!" + +Just then her head struck against the roof of the hall: in fact she was +now rather more than nine feet high, and she at once took up the little +golden key and hurried off to the garden door. + +Poor Alice! It was as much as she could do, lying down on one side, to +look through into the garden with one eye; but to get through was more +hopeless than ever: she sat down and began to cry again. + +"You ought to be ashamed of yourself," said Alice, "a great girl like +you" (she might well say this), "to go on crying in this way! Stop this +moment, I tell you!" But she went on all the same, shedding gallons of +tears, until there was a large pool all round her, about four inches +deep and reaching half down the hall. + +[Illustration: CURIOUSER AND CURIOUSER] + +After a time she heard a little pattering of feet in the distance, and +she hastily dried her eyes to see what was coming. It was the White +Rabbit returning, splendidly dressed, with a pair of white kid gloves in +one hand and a large fan in the other: he came trotting along in a great +hurry, muttering to himself as he came, "Oh! the Duchess, the Duchess! +Oh! won't she be savage if I've kept her waiting!" Alice felt so +desperate that she was ready to ask help of any one; so, when the +Rabbit came near her, she began, in a low, timid voice, "If you please, +sir----" The Rabbit started violently, dropped the white kid gloves and +the fan, and scurried away into the darkness as hard as he could go. + +Alice took up the fan and gloves, and, as the hall was very hot, she +kept fanning herself all the time she went on talking! "Dear, dear! How +queer everything is to-day! And yesterday things went on just as usual. +I wonder if I've been changed during the night? Let me think: _was_ I +the same when I got up this morning? I almost think I can remember +feeling a little different. But if I'm not the same, the next question +is, who in the world am I? Ah, _that's_ the great puzzle!" And she began +thinking over all the children she knew that were of the same age as +herself, to see if she could have been changed for any of them. + +"I'm sure I'm not Ada," she said, "for her hair goes in such long +ringlets, and mine doesn't go in ringlets at all; and I'm sure I can't +be Mabel, for I know all sorts of things, and she, oh! she knows such a +very little! Besides, _she's_ she, and _I'm_ I, and--oh dear, how +puzzling it all is! I'll try if I know all the things I used to know. +Let me see: four times five is twelve, and four times six is thirteen, +and four times seven is--oh dear! I shall never get to twenty at that +rate! However, the Multiplication Table doesn't signify: let's try +Geography. London is the capital of Paris, and Paris is the capital of +Rome, and Rome--no, _that's_ all wrong, I'm certain! I must have been +changed for Mabel! I'll try and say '_How doth the little----_'" and she +crossed her hands on her lap as if she were saying lessons, and began to +repeat it, but her voice sounded hoarse and strange, and the words did +not come the same as they used to do:-- + + "How doth the little crocodile + Improve his shining tail, + And pour the waters of the Nile + On every golden scale! + + "How cheerfully he seems to grin, + How neatly spreads his claws, + And welcomes little fishes in, + With gently smiling jaws!" + +"I'm sure those are not the right words," said poor Alice, and her eyes +filled with tears again as she went on. "I must be Mabel, after all, and +I shall have to go and live in that poky little house, and have next to +no toys to play with, and oh! ever so many lessons to learn! No, I've +made up my mind about it; if I'm Mabel, I'll stay down here! It'll be no +use their putting their heads down and saying, 'Come up again, dear!' I +shall only look up and say, 'Who am I then? Tell me that first, and +then, if I like being that person, I'll come up: if not, I'll stay down +here till I'm somebody else'--but, oh dear!" cried Alice with a sudden +burst of tears, "I do wish they _would_ put their heads down! I am so +_very_ tired of being all alone here!" + +As she said this she looked down at her hands, and was surprised to see +that she had put on one of the Rabbit's little white kid gloves while +she was talking. "How _can_ I have done that?" she thought. "I must be +growing small again." She got up and went to the table to measure +herself by it, and found that, as nearly as she could guess, she was now +about two feet high, and was going on shrinking rapidly: she soon found +out that the cause of this was the fan she was holding, and she dropped +it hastily, just in time to avoid shrinking away altogether. + +"That _was_ a narrow escape!" said Alice, a good deal frightened at the +sudden change, but very glad to find herself still in existence; "and +now for the garden!" and she ran with all speed back to the little door: +but alas! the little door was shut again, and the little golden key was +lying on the glass table as before, "and things are worse than ever," +thought the poor child, "for I never was so small as this before, never! +And I declare it's too bad, that it is!" + +As she said these words her foot slipped, and in another moment, splash! +she was up to her chin in salt water. Her first idea was that she had +somehow fallen into the sea, "and in that case I can go back by +railway," she said to herself. (Alice had been to the seaside once in +her life, and had come to the general conclusion, that wherever you go +to on the English coast you find a number of bathing machines in the +sea, some children digging in the sand with wooden spades, then a row +of lodging houses, and behind them a railway station.) However, she soon +made out that she was in the pool of tears which she had wept when she +was nine feet high. + +"I wish I hadn't cried so much!" said Alice, as she swam about, trying +to find her way out. "I shall be punished for it now, I suppose, by +being drowned in my own tears! That _will_ be a queer thing, to be sure! +However, everything is queer to-day." + +Just then she heard something splashing about in the pool a little way +off, and she swam nearer to make out what it was: at first she thought +it must be a walrus or hippopotamus, but then she remembered how small +she was now, and she soon made out that it was only a mouse that had +slipped in like herself. + +"Would it be of any use now," thought Alice, "to speak to this mouse? +Everything is so out-of-the-way down here, that I should think very +likely it can talk: at any rate, there's no harm in trying." So she +began: "O Mouse, do you know the way out of this pool? I am very tired +of swimming about here, O Mouse!" (Alice thought this must be the right +way of speaking to a mouse; she had never done such a thing before, but +she remembered having seen in her brother's Latin Grammar, "A mouse--of +a mouse--to a mouse--a mouse--O mouse!") The Mouse looked at her rather +inquisitively, and seemed to her to wink with one of its little eyes, +but it said nothing. + +"Perhaps it doesn't understand English," thought Alice; "I daresay it's +a French mouse, come over with William the Conqueror." (For, with all +her knowledge of history, Alice had no very clear notion how long ago +anything had happened.) So she began again: "Où est ma chatte?" which +was the first sentence in her French lesson-book. The Mouse gave a +sudden leap out of the water, and seemed to quiver all over with fright. +"Oh, I beg your pardon!" cried Alice hastily, afraid that she had hurt +the poor animal's feelings. "I quite forgot you didn't like cats." + +"Not like cats!" cried the Mouse, in a shrill, passionate voice. "Would +_you_ like cats if you were me?" + +"Well, perhaps not," said Alice in a soothing tone: "don't be angry +about it. And yet I wish I could show you our cat Dinah: I think you'd +take a fancy to cats if you could only see her. She is such a dear quiet +thing," Alice went on, half to herself, as she swam lazily about in the +pool, "and she sits purring so nicely by the fire, licking her paws and +washing her face--and she is such a nice soft thing to nurse--and she's +such a capital one for catching mice----oh, I beg your pardon!" cried +Alice again, for this time the Mouse was bristling all over, and she +felt certain it must be really offended. "We won't talk about her any +more if you'd rather not." + +"We, indeed!" cried the Mouse, who was trembling down to the end of his +tail. "As if _I_ would talk on such a subject! Our family always _hated_ +cats: nasty, low, vulgar things! Don't let me hear the name again!" + +[Illustration: _The Pool of Tears_] + +"I won't indeed!" said Alice, in a great hurry to change the subject of +conversation. "Are you--are you fond--of--of dogs?" The Mouse did not +answer, so Alice went on eagerly: "There is such a nice little dog near +our house I should like to show you! A little bright-eyed terrier, you +know, with oh, such long curly brown hair! And it'll fetch things +when you throw them, and it'll sit up and beg for its dinner, and all +sorts of things--I can't remember half of them--and it belongs to a +farmer, you know, and he says it's so useful, it's worth a hundred +pounds! He says it kills all the rats and--oh dear!" cried Alice in a +sorrowful tone, "I'm afraid I've offended it again!" For the Mouse was +swimming away from her as hard as it could go, and making quite a +commotion in the pool as it went. + +So she called softly after it, "Mouse dear! Do come back again, and we +won't talk about cats or dogs either, if you don't like them!" + +When the Mouse heard this, it turned round and swam slowly back to her: +its face was quite pale (with passion, Alice thought), and it said in a +low trembling voice, "Let us get to the shore, and then I'll tell you my +history, and you'll understand why it is I hate cats and dogs." + +It was high time to go, for the pool was getting quite crowded with the +birds and animals that had fallen into it: there were a Duck and a Dodo, +a Lory and an Eaglet, and several other curious creatures. Alice led the +way, and the whole party swam to the shore. + + + + +CHAPTER III + + +[Sidenote: _A Caucus-race and a Long Tale_] + +THEY were indeed a queer-looking party that assembled on +the bank--the birds with draggled feathers, the animals with their fur +clinging close to them, and all dripping wet, cross, and uncomfortable. + +The first question of course was, how to get dry again: they had a +consultation about this, and after a few minutes it seemed quite natural +to Alice to find herself talking familiarly with them, as if she had +known them all her life. Indeed, she had quite a long argument with the +Lory, who at last turned sulky, and would only say, "I am older than +you, and must know better;" and this Alice would not allow without +knowing how old it was, and, as the Lory positively refused to tell its +age, there was no more to be said. + +At last the Mouse, who seemed to be a person of authority among them, +called out "Sit down, all of you, and listen to me! _I'll_ soon make you +dry enough!" They all sat down at once, in a large ring, with the Mouse +in the middle. Alice kept her eyes anxiously fixed on it, for she felt +sure she would catch a bad cold if she did not get dry very soon. + +"Ahem!" said the Mouse with an important air. "Are you all ready? This +is the driest thing I know. Silence all round, if you please! 'William +the Conqueror, whose cause was favoured by the pope, was soon submitted +to by the English, who wanted leaders, and had been of late much +accustomed to usurpation and conquest. Edwin and Morcar, the earls of +Mercia and Northumbria--'" + +"Ugh!" said the Lory, with a shiver. + +"I beg your pardon!" said the Mouse, frowning, but very politely. "Did +you speak?" + +"Not I!" said the Lory hastily. + +"I thought you did," said the Mouse, "--I proceed. 'Edwin and Morcar, +the earls of Mercia and Northumbria, declared for him: and even +Stigand, the patriotic Archbishop of Canterbury, found it advisable--'" + +"Found _what_?" said the Duck. + +"Found _it_," the Mouse replied rather crossly: "of course you know what +'it' means." + +"I know what 'it' means well enough, when _I_ find a thing," said the +Duck; "it's generally a frog or a worm. The question is, what did the +archbishop find?" + +The Mouse did not notice this question, but hurriedly went on, "'--found +it advisable to go with Edgar Atheling to meet William and offer him the +crown. William's conduct at first was moderate. But the insolence of his +Normans--' How are you getting on now, my dear?" it continued, turning +to Alice as it spoke. + +"As wet as ever," said Alice in a melancholy tone; "doesn't seem to dry +me at all." + +"In that case," said the Dodo solemnly, rising to its feet, "I move that +the meeting adjourn, for the immediate adoption of more energetic +remedies----" + +"Speak English!" said the Eaglet. "I don't know the meaning of half +those long words, and, what's more, I don't believe you do either!" And +the Eaglet bent down its head to hide a smile: some of the other birds +tittered audibly. + +"What I was going to say," said the Dodo in an offended tone, "was that +the best thing to get us dry would be a Caucus-race." + +"What _is_ a Caucus-race?" said Alice; not that she much wanted to know, +but the Dodo had paused as if it thought that _somebody_ ought to speak, +and no one else seemed inclined to say anything. + +"Why," said the Dodo, "the best way to explain it is to do it." (And, as +you might like to try the thing yourself some winter day, I will tell +you how the Dodo managed it.) + +First it marked out a race-course, in a sort of circle, ("the exact +shape doesn't matter," it said,) and then all the party were placed +along the course, here and there. There was no "One, two, three, and +away," but they began running when they liked, and left off when they +liked, so that it was not easy to know when the race was over. However, +when they had been running half an hour or so, and were quite dry again, +the Dodo suddenly called "The race is over!" and they all crowded round +it, panting, and asking "But who has won?" + +This question the Dodo could not answer without a great deal of thought, +and it stood for a long time with one finger pressed upon its forehead +(the position in which you usually see Shakespeare, in the pictures of +him), while the rest waited in silence. At last the Dodo said +"_Everybody_ has won, and _all_ must have prizes." + +"But who is to give the prizes?" quite a chorus of voices asked. + +"Why, _she_, of course," said the Dodo, pointing to Alice with one +finger; and the whole party at once crowded round her, calling out in a +confused way, "Prizes! Prizes!" + +Alice had no idea what to do, and in despair she put her hand in her +pocket, and pulled out a box of comfits (luckily the salt water had not +got into it), and handed them round as prizes. There was exactly one +apiece all round. + + _They all crowded round it panting and asking, + "But who has won?"_ + +[Illustration] + +"But she must have a prize herself, you know," said the Mouse. + +"Of course," the Dodo replied very gravely. + +"What else have you got in your pocket?" it went on, turning to Alice. + +"Only a thimble," said Alice sadly. + +"Hand it over here," said the Dodo. + +Then they all crowded round her once more, while the Dodo solemnly +presented the thimble, saying "We beg your acceptance of this elegant +thimble;" and, when it had finished this short speech, they all cheered. + +Alice thought the whole thing very absurd, but they all looked so grave +that she did not dare to laugh; and, as she could not think of anything +to say, she simply bowed, and took the thimble, looking as solemn as she +could. + +The next thing was to eat the comfits; this caused some noise and +confusion, as the large birds complained that they could not taste +theirs, and the small ones choked and had to be patted on the back. +However, it was over at last, and they sat down again in a ring, and +begged the Mouse to tell them something more. + +"You promised to tell me your history, you know," said Alice, "and why +it is you hate--C and D," she added in a whisper, half afraid that it +would be offended again. + +[Illustration] + +"Mine is a long and sad tale!" said the Mouse, turning to Alice and +sighing. + +"It _is_ a long tail, certainly," said Alice, looking down with wonder +at the Mouse's tail; "but why do you call it sad?" And she kept on +puzzling about it while the Mouse was speaking, so that her idea of the +tale was something like this:-- + + "Fury said to + a mouse, That + he met in the + house, 'Let + us both go + to law: _I_ + will prose- + cute _you_.-- + Come, I'll + take no de- + nial: We + must have + the trial; + For really + this morn- + ing I've + nothing + to do.' + Said the + mouse to + the cur, + 'Such a + trial, dear + sir, With + no jury + or judge, + would + be wast- + ing our + breath.' + 'I'll be + judge, + I'll be + jury,' + said + cun- + ning + old + Fury: + 'I'll + try + the + whole + cause, + and + con- + demn + you to + death.' + +"You are not attending!" said the Mouse to Alice severely. "What are you +thinking of?" + +"I beg your pardon," said Alice very humbly: "you had got to the fifth +bend, I think?" + +"I had _not_!" cried the Mouse, angrily. + +"A knot!" said Alice, always ready to make herself useful, and looking +anxiously about her. "Oh, do let me help to undo it!" + +"I shall do nothing of the sort," said the Mouse, getting up and walking +away. "You insult me by talking such nonsense!" + +"I didn't mean it!" pleaded poor Alice. "But you're so easily offended, +you know!" + +The Mouse only growled in reply. + +"Please come back and finish your story!" Alice called after it. And the +others all joined in chorus, "Yes, please do!" but the Mouse only shook +its head impatiently and walked a little quicker. + +"What a pity it wouldn't stay!" sighed the Lory, as soon as it was quite +out of sight; and an old Crab took the opportunity of saying to her +daughter, "Ah, my dear! Let this be a lesson to you never to lose +_your_ temper!" "Hold your tongue, Ma!" said the young Crab, a little +snappishly. "You're enough to try the patience of an oyster!" + +"I wish I had our Dinah here, I know I do!" said Alice aloud, addressing +nobody in particular. "She'd soon fetch it back!" + +"And who is Dinah, if I might venture to ask the question?" said the +Lory. + +Alice replied eagerly, for she was always ready to talk about her pet: +"Dinah's our cat. And she's such a capital one for catching mice, you +ca'n't think! And oh, I wish you could see her after the birds! Why, +she'll eat a little bird as soon as look at it!" + +This speech caused a remarkable sensation among the party. Some of the +birds hurried off at once; one old Magpie began wrapping itself up very +carefully, remarking "I really must be getting home; the night-air +doesn't suit my throat!" and a Canary called out in a trembling voice to +its children "Come away, my dears! It's high time you were all in bed!" +On various pretexts they all moved off, and Alice was soon left alone. + +"I wish I hadn't mentioned Dinah!" she said to herself in a melancholy +tone. "Nobody seems to like her, down here, and I'm sure she's the best +cat in the world! Oh, my dear Dinah! I wonder if I shall ever see you +any more!" And here poor Alice began to cry again, for she felt very +lonely and low-spirited. In a little while, however, she again heard a +little pattering of footsteps in the distance, and she looked up +eagerly, half hoping that the Mouse had changed his mind, and was coming +back to finish his story. + + + + +CHAPTER IV + + +[Sidenote: _The Rabbit sends in a Little Bill_] + +IT was the White Rabbit, trotting slowly back again, and +looking anxiously about as it went, as if it had lost something; and she +heard it muttering to itself, "The Duchess! The Duchess! Oh my dear +paws! Oh my fur and whiskers! She'll get me executed, as sure as ferrets +are ferrets! Where _can_ I have dropped them, I wonder?" Alice guessed +in a moment that it was looking for the fan and the pair of white kid +gloves, and she very good-naturedly began hunting about for them, but +they were nowhere to be seen--everything seemed to have changed since +her swim in the pool, and the great hall, with the glass table and the +little door, had vanished completely. + +Very soon the Rabbit noticed Alice, as she went hunting about, and +called out to her in an angry tone, "Why, Mary Ann, what _are_ you +doing out here? Run home this moment, and fetch me a pair of gloves and +a fan! Quick, now!" And Alice was so much frightened that she ran off at +once in the direction it pointed to, without trying to explain the +mistake it had made. + +"He took me for his housemaid," she said to herself as she ran. "How +surprised he'll be when he finds out who I am! But I'd better take him +his fan and gloves--that is, if I can find them." As she said this, she +came upon a neat little house, on the door of which was a bright brass +plate with the name "W. RABBIT" engraved upon it. She went in without +knocking, and hurried up stairs, in great fear lest she should meet the +real Mary Ann, and be turned out of the house before she had found the +fan and gloves. + +[Illustration: "_Why, Mary Ann, what are you doing out here?_"] + +"How queer it seems," Alice said to herself, "to be going messages for a +rabbit! I suppose Dinah'll be sending me on messages next!" And she +began fancying the sort of thing that would happen: "'Miss Alice! Come +here directly, and get ready for your walk!' 'Coming in a minute, nurse! +But I've got to watch this mouse-hole till Dinah comes back, and see +that the mouse doesn't get out.' Only I don't think," Alice went on, +"that they'd let Dinah stop in the house if it began ordering people +about like that!" + +By this time she had found her way into a tidy little room with a table +in the window, and on it (as she had hoped) a fan and two or three pairs +of tiny white kid gloves: she took up the fan and a pair of the gloves, +and was just going to leave the room, when her eye fell upon a little +bottle that stood near the looking-glass. There was no label this time +with the words "DRINK ME," but nevertheless she uncorked it and put it +to her lips. "I know _something_ interesting is sure to happen," she +said to herself, "whenever I eat or drink anything; so I'll just see +what this bottle does. I do hope it will make me grow large again, for +really I'm quite tired of being such a tiny little thing!" + +It did so indeed, and much sooner than she had expected: before she had +drunk half the bottle, she found her head pressing against the ceiling, +and had to stoop to save her neck from being broken. She hastily put +down the bottle, saying to herself "That's quite enough--I hope I +sha'n't grow any more--As it is, I can't get out at the door--I do wish +I hadn't drunk quite so much!" + +Alas! it was too late to wish that! She went on growing, and growing, +and very soon had to kneel down on the floor: in another minute there +was not even room for this, and she tried the effect of lying down with +one elbow against the door, and the other arm curled round her head. +Still she went on growing, and, as a last resource, she put one arm out +of the window, and one foot up the chimney, and said to herself "Now I +can do no more, whatever happens. What _will_ become of me?" + +Luckily for Alice, the little magic bottle had now had its full effect, +and she grew no larger: still it was very uncomfortable, and, as there +seemed to be no sort of chance of her ever getting out of the room +again, no wonder she felt unhappy. + +"It was much pleasanter at home," thought poor Alice, "when one wasn't +always growing larger and smaller, and being ordered about by mice and +rabbits. I almost wish I hadn't gone down that rabbit-hole--and +yet--and yet--it's rather curious, you know, this sort of life! I do +wonder what _can_ have happened to me! When I used to read fairy-tales, +I fancied that kind of thing never happened, and now here I am in the +middle of one! There ought to be a book written about me, that there +ought! And when I grow up, I'll write one--but I'm grown up now," she +added in a sorrowful tone; "at least there's no room to grow up any more +_here_." + +"But then," thought Alice, "shall I _never_ get any older than I am now? +That'll be a comfort, one way--never to be an old woman--but +then--always to have lessons to learn! Oh, I shouldn't like _that_!" + +"Oh, you foolish Alice!" she answered herself. "How can you learn +lessons in here? Why, there's hardly room for _you_, and no room at all +for any lesson-books!" + +And so she went on, taking first one side and then the other, and making +quite a conversation of it altogether; but after a few minutes she heard +a voice outside, and stopped to listen. + +"Mary Ann! Mary Ann!" said the voice. "Fetch me my gloves this moment!" +Then came a little pattering of feet on the stairs. Alice knew it was +the Rabbit coming to look for her, and she trembled till she shook the +house, quite forgetting that she was now about a thousand times as large +as the Rabbit, and had no reason to be afraid of it. + +Presently the Rabbit came up to the door, and tried to open it; but, as +the door opened inwards, and Alice's elbow was pressed hard against it, +that attempt proved a failure. Alice heard it say to itself "Then I'll +go round and get in at the window." + +"_That_ you won't" thought Alice, and, after waiting till she fancied +she heard the Rabbit just under the window, she suddenly spread out her +hand, and made a snatch in the air. She did not get hold of anything, +but she heard a little shriek and a fall, and a crash of broken glass, +from which she concluded that it was just possible it had fallen into a +cucumber-frame, or something of the sort. + +Next came an angry voice--the Rabbit's--"Pat! Pat! Where are you?" And +then a voice she had never heard before, "Sure then I'm here! Digging +for apples, yer honour!" + +"Digging for apples, indeed!" said the Rabbit angrily. "Here! Come and +help me out of _this_!" (Sounds of more broken glass.) + +"Now tell me, Pat, what's that in the window?" + +"Sure, it's an arm, yer honour." (He pronounced it "arrum.") + +"An arm, you goose! Who ever saw one that size? Why, it fills the whole +window!" + +"Sure, it does, yer honour? but it's an arm for all that." + +"Well, it's got no business there, at any rate: go and take it away!" + +There was a long silence after this, and Alice could only hear whispers +now and then; such as, "Sure, I don't like it, yer honour, at all, at +all!" "Do as I tell you, you coward!" and at last she spread out her +hand again, and made another snatch in the air. This time there were +_two_ little shrieks, and more sounds of broken glass. "What a number of +cucumber-frames there must be!" thought Alice. "I wonder what they'll do +next! As for pulling me out of the window, I only wish they _could_! +I'm sure _I_ don't want to stay in here any longer!" + +She waited for some time without hearing anything more: at last came a +rumbling of little cart-wheels, and the sound of a good many voices all +talking together: she made out the words: "Where's the other +ladder?--Why I hadn't to bring but one; Bill's got the other--Bill! +Fetch it here, lad!--Here, put 'em up at this corner--No, tie 'em +together first--they don't reach half high enough yet--Oh! they'll do +well enough; don't be particular--Here, Bill! catch hold of this +rope--Will the roof bear?--Mind that loose slate--Oh, it's coming down! +Heads below!" (a loud crash)--"Now, who did that?--It was Bill, I +fancy--Who's to go down the chimney?--Nay, _I_ sha'n't! _You_ do +it!--_That_ I won't, then! Bill's to go down--Here, Bill! the master +says you've to go down the chimney!" + +"Oh! So Bill's got to come down the chimney, has he?" said Alice to +herself. "Why, they seem to put everything upon Bill! I wouldn't be in +Bill's place for a good deal: this fireplace is narrow, to be sure; but +I _think_ I can kick a little!" + +She drew her foot as far down the chimney as she could, and waited till +she heard a little animal (she couldn't guess of what sort it was) +scratching and scrambling about in the chimney close above her: then, +saying to herself "This is Bill," she gave one sharp kick, and waited to +see what would happen next. + +The first thing she heard was a general chorus of "There goes Bill!" +then the Rabbit's voice alone--"Catch him, you by the hedge!" then +silence, and then another confusion of voices--"Hold up his head--Brandy +now--Don't choke him--How was it, old fellow? What happened to you? Tell +us all about it!" + +At last came a little feeble, squeaking voice, ("That's Bill," thought +Alice,) "Well, I hardly know--No more, thank ye; I'm better now--but I'm +a deal too flustered to tell you--all I know is, something comes at me +like a Jack-in-the-box, and up I goes like a sky-rocket!" + +"So you did, old fellow!" said the others. + +"We must burn the house down!" said the Rabbit's voice. And Alice +called out as loud as she could, "If you do, I'll set Dinah at you!" + +There was a dead silence instantly, and Alice thought to herself "I +wonder what they _will_ do next! If they had any sense, they'd take the +roof off." After a minute or two they began moving about again, and +Alice heard the Rabbit say "A barrowful will do, to begin with." + +"A barrowful of _what_?" thought Alice. But she had not long to doubt, +for the next moment a shower of little pebbles came rattling in at the +window, and some of them hit her in the face. "I'll put a stop to this," +she said to herself, and shouted out "You'd better not do that again!" +which produced another dead silence. + +Alice noticed with some surprise that the pebbles were all turning into +little cakes as they lay on the floor, and a bright idea came into her +head. "If I eat one of these cakes," she thought, "it's sure to make +_some_ change in my size; and, as it can't possibly make me larger, it +must make me smaller, I suppose." + +So she swallowed one of the cakes, and was delighted to find that she +began shrinking directly. As soon as she was small enough to get through +the door, she ran out of the house, and found quite a crowd of little +animals and birds waiting outside. The poor little Lizard, Bill, was in +the middle, being held up by two guinea-pigs, who were giving it +something out of a bottle. They all made a rush at Alice the moment she +appeared; but she ran off as hard as she could, and soon found herself +safe in a thick wood. + +"The first thing I've got to do," said Alice to herself, as she wandered +about in the wood, "is to grow to my right size again; and the second +thing is to find my way into that lovely garden. I think that will be +the best plan." + +It sounded an excellent plan, no doubt, and very neatly and simply +arranged; the only difficulty was, that she had not the smallest idea +how to set about it; and, while she was peering about anxiously among +the trees, a little sharp bark just over her head made her look up in a +great hurry. + +An enormous puppy was looking down at her with large round eyes, and +feebly stretching out one paw, trying to touch her. "Poor little +thing!" said Alice, in a coaxing tone, and she tried hard to whistle to +it; but she was terribly frightened all the time at the thought that it +might be hungry, in which case it would be very likely to eat her up in +spite of all her coaxing. + +Hardly knowing what she did, she picked up a little bit of stick, and +held it out to the puppy; whereupon the puppy jumped into the air off +all its feet at once, with a yelp of delight, and rushed at the stick, +and made believe to worry it; then Alice dodged behind a great thistle, +to keep herself from being run over; and, the moment she appeared on the +other side, the puppy made another rush at the stick, and tumbled head +over heels in its hurry to get hold of it; then Alice, thinking it was +very like having a game of play with a cart-horse, and expecting every +moment to be trampled under its feet, ran round the thistle again; then +the puppy began a series of short charges at the stick, running a little +way forwards each time and a long way back, and barking hoarsely all the +while, till at last it sat down a good way off, panting, with its +tongue hanging out of its mouth, and its great eyes half shut. + +This seemed to Alice a good opportunity for making her escape; so she +set off at once, and ran till she was quite tired and out of breath, and +till the puppy's bark sounded quite faint in the distance. + +"And yet what a dear little puppy it was!" said Alice, as she leant +against a buttercup to rest herself, and fanned herself with one of the +leaves. "I should have liked teaching it tricks very much, if--if I'd +only been the right size to do it! Oh, dear! I'd nearly forgotten that +I've got to grow up again! Let me see--how _is_ it to be managed? I +suppose I ought to eat or drink something or other; but the great +question is, what?" + +The great question certainly was, what? Alice looked all round her at +the flowers and the blades of grass, but she could not see anything that +looked like the right thing to eat or drink under the circumstances. +There was a large mushroom growing near her, about the same height as +herself; and, when she had looked under it, and on both sides of it, and +behind it, it occurred to her that she might as well look and see what +was on the top of it. + +She stretched herself up on tiptoe, and peeped over the edge of the +mushroom, and her eyes immediately met those of a large blue +caterpillar, that was sitting on the top with its arms folded, quietly +smoking a long hookah, and taking not the smallest notice of her or of +anything else. + + + + +CHAPTER V + + +[Sidenote: _Advice from a Caterpillar_] + +THE Caterpillar and Alice looked at each other for some +time in silence: at last the Caterpillar took the hookah out of its +mouth, and addressed her in a languid, sleepy voice. + +"Who are _you_?" said the Caterpillar. + +This was not an encouraging opening for a conversation. Alice replied, +rather shyly, "I hardly know, sir, just at present--at least I know who +I _was_ when I got up this morning, but I think I must have been changed +several times since then." + +"What do you mean by that?" said the Caterpillar sternly. "Explain +yourself!" + +"I can't explain _myself_, I'm afraid, sir," said Alice, "because I'm +not myself, you see." + +"I don't see," said the Caterpillar. + +"I'm afraid I can't put it more clearly," Alice replied very politely, +"for I can't understand it myself to begin with; and being so many +different sizes in a day is very confusing." + +"It isn't," said the Caterpillar. + +"Well, perhaps you haven't found it so yet," said Alice, "but when you +have to turn into a chrysalis--you will some day, you know--and then +after that into a butterfly, I should think you'll feel it a little +queer, won't you?" + +"Not a bit," said the Caterpillar. + +"Well, perhaps your feelings may be different," said Alice; "all I know +is, it would feel very queer to _me_." + +"You!" said the Caterpillar contemptuously. "Who are _you_?" + +Which brought them back again to the beginning of the conversation. +Alice felt a little irritated at the Caterpillar's making such _very_ +short remarks, and she drew herself up and said, very gravely, "I think +you ought to tell me who _you_ are, first." + +"Why?" said the Caterpillar. + +[Illustration: _Advice from a Caterpillar_] + +Here was another puzzling question; and as Alice could not think of any +good reason, and as the Caterpillar seemed to be in a _very_ +unpleasant state of mind, she turned away. + +"Come back!" the Caterpillar called after her. "I've something important +to say!" + +This sounded promising, certainly: Alice turned and came back again. + +"Keep your temper," said the Caterpillar. + +"Is that all?" said Alice, swallowing down her anger as well as she +could. + +"No," said the Caterpillar. + +Alice thought she might as well wait, as she had nothing else to do, and +perhaps after all it might tell her something worth hearing. For some +minutes it puffed away without speaking, but at last it unfolded its +arms, took the hookah out of its mouth again, and said, "So you think +you're changed, do you?" + +"I'm afraid I am, sir," said Alice; "I can't remember things as I +used--and I don't keep the same size for ten minutes together!" + +"Can't remember _what_ things?" said the Caterpillar. + +"Well, I've tried to say '_How doth the little busy bee_,' but it all +came different!" Alice replied in a very melancholy voice. + +"Repeat '_You are old, Father William_,'" said the Caterpillar. + +Alice folded her hands, and began:-- + + "You are old, Father William," the young man said, + "And your hair has become very white; + And yet you incessantly stand on your head-- + Do you think, at your age, it is right?" + + "In my youth," Father William replied to his son, + "I feared it might injure the brain; + But, now that I'm perfectly sure I have none, + Why, I do it again and again." + + "You are old," said the youth, "as I mentioned before, + And have grown most uncommonly fat; + Yet you turned a back-somersault in at the door-- + Pray, what is the reason of that?" + + "In my youth," said the sage, as he shook his grey locks, + "I kept all my limbs very supple + By the use of this ointment--one shilling the box-- + Allow me to sell you a couple?" + + "You are old," said the youth, "and your jaws are too weak + For anything tougher than suet; + Yet you finished the goose, with the bones and the beak-- + Pray, how did you manage to do it?" + + "In my youth," said his father, "I took to the law + And argued each case with my wife; + And the muscular strength, which it gave to my jaw, + Has lasted the rest of my life." + + "You are old," said the youth, "one would hardly suppose + That your eye was as steady as ever; + Yet you balanced an eel on the end of your nose-- + What made you so awfully clever?" + + "I have answered three questions, and that is enough," + Said his father; "don't give yourself airs! + Do you think I can listen all day to such stuff? + Be off, or I'll kick you down stairs!" + +"That is not said right," said the Caterpillar. + +"Not _quite_ right, I'm afraid," said Alice, timidly; "some of the +words have got altered." + +"It is wrong from beginning to end," said the Caterpillar, decidedly, +and there was silence for some minutes. + +The Caterpillar was the first to speak. + +"What size do you want to be?" it asked. + +"Oh, I'm not particular as to size," Alice hastily replied; "only one +doesn't like changing so often, you know." + +"I _don't_ know," said the Caterpillar. + +Alice said nothing: she had never been so much contradicted in all her +life before, and she felt that she was losing her temper. + +"Are you content now?" said the Caterpillar. + +"Well, I should like to be a _little_ larger, sir, if you wouldn't +mind," said Alice: "three inches is such a wretched height to be." + +"It is a very good height indeed!" said the Caterpillar angrily, rearing +itself upright as it spoke (it was exactly three inches high). + +"But I'm not used to it!" pleaded poor Alice in a piteous tone. And she +thought to herself, "I wish the creatures wouldn't be so easily +offended!" + +"You'll get used to it in time," said the Caterpillar; and it put its +hookah into its mouth and began smoking again. + +This time Alice waited patiently until it chose to speak again. In a +minute or two the Caterpillar took the hookah out of its mouth and +yawned once or twice, and shook itself. Then it got down off the +mushroom, and crawled away into the grass, merely remarking as it went, +"One side will make you grow taller, and the other side will make you +grow shorter." + +"One side of _what_? The other side of _what_?" thought Alice to +herself. + +"Of the mushroom," said the Caterpillar, just as if she had asked it +aloud; and in another moment it was out of sight. + +Alice remained looking thoughtfully at the mushroom for a minute, trying +to make out which were the two sides of it; and as it was perfectly +round, she found this a very difficult question. However, at last she +stretched her arms round it as far as they would go, and broke off a bit +of the edge with each hand. + +"And now which is which?" she said to herself, and nibbled a little of +the right-hand bit to try the effect: the next moment she felt a violent +blow underneath her chin: it had struck her foot! + +[Illustration] + +She was a good deal frightened by this very sudden change, but she felt +that there was no time to be lost, as she was shrinking rapidly; so she +set to work at once to eat some of the other bit. Her chin was pressed +so closely against her foot that there was hardly room to open her +mouth; but she did it at last, and managed to swallow a morsel of the +left-hand bit. + + * * * * * + +"Come, my head's free at last!" said Alice in a tone of delight, which +changed into alarm in another moment, when she found that her shoulders +were nowhere to be found: all she could see, when she looked down, was +an immense length of neck, which seemed to rise like a stalk out of a +sea of green leaves that lay far below her. + +"What _can_ all that green stuff be?" said Alice. "And where have my +shoulders got to? And oh, my poor hands, how is it I ca'n't see you?" +She was moving them about as she spoke, but no result seemed to follow, +except a little shaking among the distant green leaves. + +As there seemed to be no chance of getting her hands up to her head, she +tried to get her head down to them, and was delighted to find that her +neck would bend about easily in any direction, like a serpent. She had +just succeeded in curving it down into a graceful zigzag, and was going +to dive in among the leaves, which she found to be nothing but the tops +of the trees under which she had been wandering, when a sharp hiss made +her draw back in a hurry: a large pigeon had flown into her face, and +was beating her violently with its wings. + +"Serpent!" screamed the Pigeon. + +"I'm _not_ a serpent!" said Alice indignantly. "Let me alone!" + +"Serpent, I say again!" repeated the Pigeon, but in a more subdued tone, +and added with a kind of a sob, "I've tried every way, and nothing seems +to suit them!" + +"I haven't the least idea what you're talking about," said Alice. + +"I've tried the roots of trees, and I've tried banks, and I've tried +hedges," the Pigeon went on, without attending to her; "but those +serpents! There's no pleasing them!" + +Alice was more and more puzzled, but she thought there was no use in +saying anything more till the Pigeon had finished. + +"As if it wasn't trouble enough hatching the eggs," said the Pigeon; +"but I must be on the look-out for serpents night and day! Why, I +haven't had a wink of sleep these three weeks!" + +"I'm very sorry you've been annoyed," said Alice, who was beginning to +see its meaning. + +[Illustration] + +"And just as I'd taken the highest tree in the wood," continued the +Pigeon, raising its voice to a shriek, "and just as I was thinking I +should be free of them at last, they must needs come wriggling down from +the sky! Ugh, Serpent!" + +"But I'm _not_ a serpent, I tell you!" said Alice. "I'm a---- I'm a +----" + +"Well! _What_ are you?" said the Pigeon. "I can see you're trying to +invent something!" + +"I--I'm a little girl," said Alice, rather doubtfully, as she remembered +the number of changes she had gone through that day. + +"A likely story indeed!" said the Pigeon in a tone of the deepest +contempt. "I've seen a good many little girls in my time, but never +_one_ with such a neck as that! No, no! You're a serpent; and there's no +use denying it. I suppose you'll be telling me next that you never +tasted an egg!" + +"I _have_ tasted eggs, certainly," said Alice, who was a very truthful +child; "but little girls eat eggs quite as much as serpents do, you +know." + +"I don't believe it," said the Pigeon; "but if they do, why then +they're a kind of serpent, that's all I can say." + +This was such a new idea to Alice, that she was quite silent for a +minute or two, which gave the Pigeon the opportunity of adding, "You're +looking for eggs, I know _that_ well enough; and what does it matter to +me whether you're a little girl or a serpent?" + +"It matters a good deal to _me_," said Alice hastily; "but I'm not +looking for eggs, as it happens; and if I was, I shouldn't want _yours_: +I don't like them raw." + +"Well, be off, then!" said the Pigeon in a sulky tone, as it settled +down again into its nest. Alice crouched down among the trees as well as +she could, for her neck kept getting entangled among the branches, and +every now and then she had to stop and untwist it. After a while she +remembered that she still held the pieces of mushroom in her hands, and +she set to work very carefully, nibbling first at one and then at the +other, and growing sometimes taller and sometimes shorter, until she had +succeeded in bringing herself down to her usual height. + +It was so long since she had been anything near the right size, that it +felt quite strange at first; but she got used to it in a few minutes, +and began talking to herself, as usual. "Come, there's half my plan done +now! How puzzling all these changes are! I'm never sure what I'm going +to be, from one minute to another! However, I've got back to my right +size: the next thing is, to get into that beautiful garden--how _is_ +that to be done, I wonder?" As she said this, she came suddenly upon an +open place, with a little house in it about four feet high. "Whoever +lives there," thought Alice, "it'll never do to come upon them _this_ +size: why, I should frighten them out of their wits!" So she began +nibbling at the right-hand bit again, and did not venture to go near the +house till she had brought herself down to nine inches high. + + + + +CHAPTER VI + + +[Sidenote: _Pig and Pepper_] + +FOR a minute or two she stood looking at the house, and +wondering what to do next, when suddenly a footman in livery came +running out of the wood--(she considered him to be a footman because he +was in livery: otherwise, judging by his face only, she would have +called him a fish)--and rapped loudly at the door with his knuckles. It +was opened by another footman in livery, with a round face and large +eyes like a frog; and both footmen, Alice noticed, had powdered hair +that curled all over their heads. She felt very curious to know what it +was all about, and crept a little way out of the wood to listen. + +The Fish-Footman began by producing from under his arm a great letter, +nearly as large as himself, and this he handed over to the other, +saying, in a solemn tone, "For the Duchess. An invitation from the +Queen to play croquet." The Frog-Footman repeated, in the same solemn +tone, only changing the order of the words a little, "From the Queen. An +invitation for the Duchess to play croquet." + +Then they both bowed low, and their curls got entangled together. + +Alice laughed so much at this, that she had to run back into the wood +for fear of their hearing her; and, when she next peeped out, the +Fish-Footman was gone, and the other was sitting on the ground near the +door, staring stupidly up into the sky. + +Alice went timidly up to the door and knocked. + +"There's no use in knocking," said the Footman, "and that for two +reasons. First, because I'm on the same side of the door as you are; +secondly, because they're making such a noise inside, no one could +possibly hear you." And certainly there was a most extraordinary noise +going on within--a constant howling and sneezing, and every now and then +a great crash, as if a dish or kettle had been broken to pieces. + +"Please, then," said Alice, "how am I to get in?" + +"There might be some sense in your knocking," the Footman went on +without attending to her, "if we had the door between us. For instance, +if you were _inside_, you might knock, and I could let you out, you +know." He was looking up into the sky all the time he was speaking, and +this Alice thought decidedly uncivil. "But perhaps he can't help it," +she said to herself: "his eyes are so _very_ nearly at the top of his +head. But at any rate he might answer questions. How am I to get in?" +she repeated aloud. + +"I shall sit here," the Footman remarked, "till to-morrow----" + +At this moment the door of the house opened, and a large plate came +skimming out, straight at the Footman's head: it just grazed his nose, +and broke to pieces against one of the trees behind him. + +"----or next day, maybe," the Footman continued in the same tone, +exactly as if nothing had happened. + +"How am I to get in?" asked Alice again in a louder tone. + +"_Are_ you to get in at all?" said the Footman. "That's the first +question, you know." + +[Illustration] + +It was, no doubt: only Alice did not like to be told so. "It's really +dreadful," she muttered to herself, "the way all the creatures argue. +It's enough to drive one crazy!" + +The Footman seemed to consider this a good opportunity for repeating his +remark, with variations. "I shall sit here," he said, "on and off, for +days and days." + +"But what am _I_ to do?" said Alice. + +"Anything you like," said the Footman, and began whistling. + +"Oh, there's no use in talking to him," said Alice desperately: "he's +perfectly idiotic!" And she opened the door and went in. + +The door led right into a large kitchen, which was full of smoke from +one end to the other: the Duchess was sitting on a three-legged stool in +the middle, nursing a baby, the cook was leaning over the fire, stirring +a large cauldron which seemed to be full of soup. + +"There's certainly too much pepper in that soup!" Alice said to herself, +as well as she could for sneezing. + +There was certainly too much of it in the air. Even the Duchess sneezed +occasionally; and the baby was sneezing and howling alternately without +a moment's pause. The only things in the kitchen that did not sneeze, +were the cook, and a large cat which was sitting on the hearth and +grinning from ear to ear. + +"Please would you tell me," said Alice a little timidly, for she was not +quite sure whether it was good manners for her to speak first, "why your +cat grins like that?" + +"It's a Cheshire cat," said the Duchess, "and that's why. Pig!" + +She said the last word with such sudden violence that Alice quite +jumped; but she saw in another moment that it was addressed to the baby, +and not to her, so she took courage, and went on again: + +"I didn't know that Cheshire cats always grinned; in fact, I didn't know +that cats _could_ grin." + +"They all can," said the Duchess; "and most of 'em do." + +"I don't know of any that do," Alice said very politely, feeling quite +pleased to have got into a conversation. + +"You don't know much," said the Duchess; "and that's a fact." + +Alice did not at all like the tone of this remark, and thought it would +be as well to introduce some other subject of conversation. While she +was trying to fix on one, the cook took the cauldron of soup off the +fire, and at once set to work throwing everything within her reach at +the Duchess and the baby--the fire-irons came first; then followed a +shower of saucepans, plates, and dishes. The Duchess took no notice of +them even when they hit her; and the baby was howling so much already, +that it was quite impossible to say whether the blows hurt it or not. + +"Oh, _please_ mind what you're doing!" cried Alice, jumping up and down +in an agony of terror. "Oh, there goes his _precious_ nose"; as an +unusually large saucepan flew close by it, and very nearly carried it +off. + +"If everybody minded their own business," the Duchess said in a hoarse +growl, "the world would go round a deal faster than it does." + +[Illustration: _An unusually large saucepan flew close by it, and very +nearly carried it off_] + +"Which would _not_ be an advantage," said Alice, who felt very glad to +get an opportunity of showing off a little of her knowledge. "Just think +what work it would make with the day and night! You see the earth +takes twenty-four hours to turn round on its axis----" + +"Talking of axes," said the Duchess, "chop off her head." + +Alice glanced rather anxiously at the cook, to see if she meant to take +the hint; but the cook was busily engaged in stirring the soup, and did +not seem to be listening, so she ventured to go on again: "Twenty-four +hours, I _think_; or is it twelve? I----" + +"Oh, don't bother _me_," said the Duchess; "I never could abide +figures!" And with that she began nursing her child again, singing a +sort of lullaby to it as she did so, and giving it a violent shake at +the end of every line: + + "Speak roughly to your little boy, + And beat him when he sneezes: + He only does it to annoy, + Because he knows it teases." + +CHORUS + + (In which the cook and the baby joined): + "Wow! wow! wow!" + +While the Duchess sang the second verse of the song, she kept tossing +the baby violently up and down, and the poor little thing howled so, +that Alice could hardly hear the words: + + "I speak severely to my boy, + I beat him when he sneezes; + For he can thoroughly enjoy + The pepper when he pleases!" + + CHORUS. + + "Wow! wow! wow!" + +"Here! you may nurse it a bit if you like!" the Duchess said to Alice, +flinging the baby at her as she spoke. "I must go and get ready to play +croquet with the Queen," and she hurried out of the room. The cook threw +a frying-pan after her as she went out, but it just missed her. + +Alice caught the baby with some difficulty, as it was a queer-shaped +little creature, and held out its arms and legs in all directions, "just +like a star-fish," thought Alice. The poor little thing was snorting +like a steam-engine when she caught it, and kept doubling itself up and +straightening itself out again, so that altogether, for the first minute +or two, it was as much as she could do to hold it. + +As soon as she had made out the proper way of nursing it, (which was to +twist it up into a knot, and then keep tight hold of its right ear and +left foot, so as to prevent its undoing itself,) she carried it out into +the open air. "If I don't take this child away with me," thought Alice, +"they're sure to kill it in a day or two: wouldn't it be murder to leave +it behind?" She said the last words out loud, and the little thing +grunted in reply (it had left off sneezing by this time). "Don't grunt," +said Alice; "that's not at all a proper way of expressing yourself." + +The baby grunted again, and Alice looked very anxiously into its face to +see what was the matter with it. There could be no doubt that it had a +_very_ turn-up nose, much more like a snout than a real nose; also its +eyes were getting extremely small for a baby: altogether Alice did not +like the look of the thing at all. "But perhaps it was only sobbing," +she thought, and looked into its eyes again, to see if there were any +tears. + +No, there were no tears. "If you're going to turn into a pig, my dear," +said Alice, seriously, "I'll have nothing more to do with you. Mind +now!" The poor little thing sobbed again (or grunted, it was impossible +to say which), and they went on for some while in silence. + +Alice was just beginning to think to herself, "Now, what am I to do with +this creature when I get it home?" when it grunted again, so violently, +that she looked down into its face in some alarm. This time there could +be _no_ mistake about it: it was neither more nor less than a pig, and +she felt that it would be quite absurd for her to carry it any further. + +So she set the little creature down, and felt quite relieved to see it +trot quietly away into the wood. "If it had grown up," she said to +herself, "it would have made a dreadfully ugly child: but it makes +rather a handsome pig, I think." And she began thinking over other +children she knew, who might do very well as pigs, and was just saying +to herself, "if one only knew the right way to change them----" when she +was a little startled by seeing the Cheshire Cat sitting on a bough of a +tree a few yards off. + +[Illustration: _It grunted again so violently that she looked down into +its face in some alarm_] + +The Cat only grinned when it saw Alice. It looked good-natured, she +thought: still it had _very_ long claws and a great many teeth, so she +felt that it ought to be treated with respect. + +[Illustration] + +"Cheshire Puss," she began, rather timidly, as she did not at all know +whether it would like the name: however, it only grinned a little wider. +"Come, it's pleased so far," thought Alice, and she went on. "Would you +tell me, please, which way I ought to go from here?" + +"That depends a good deal on where you want to get to," said the Cat. + +"I don't much care where----" said Alice. + +"Then it doesn't matter which way you go," said the Cat. + +"---- so long as I get _somewhere_," Alice added as an explanation. + +"Oh, you're sure to do that," said the Cat, "if you only walk long +enough." + +Alice felt that this could not be denied, so she tried another question. +"What sort of people live about here?" + +"In _that_ direction," the Cat said, waving its right paw round, "lives +a Hatter: and in _that_ direction," waving the other paw, "lives a March +Hare. Visit either you like: they're both mad." + +"But I don't want to go among mad people," Alice remarked. + +"Oh, you ca'n't help that," said the Cat: "we're all mad here. I'm mad. +You're mad." + +"How do you know I'm mad?" said Alice. + +"You must be," said the Cat, "or you wouldn't have come here." + +Alice didn't think that proved it at all; however, she went on. "And how +do you know that you're mad?" + +"To begin with," said the Cat, "a dog's not mad. You grant that?" + +"I suppose so," said Alice. + +"Well, then," the Cat went on, "you see a dog growls when it's angry, +and wags its tail when it's pleased. Now _I_ growl when I'm pleased, and +wag my tail when I'm angry. Therefore I'm mad." + +"_I_ call it purring, not growling," said Alice. + +"Call it what you like," said the Cat. "Do you play croquet with the +Queen to-day?" + +"I should like it very much," said Alice, "but I haven't been invited +yet." + +"You'll see me there," said the Cat and vanished. + +Alice was not much surprised at this, she was getting so used to queer +things happening. While she was looking at the place where it had been, +it suddenly appeared again. + +"By-the-bye, what became of the baby?" said the Cat. "I'd nearly +forgotten to ask." + +"It turned into a pig," Alice quietly said, just as if it had come back +in a natural way. + +"I thought it would," said the Cat, and vanished again. + +Alice waited a little, half expecting to see it again, but it did not +appear, and after a minute or two she walked on in the direction in +which the March Hare was said to live. "I've seen hatters before," she +said to herself; "the March Hare will be much the most interesting, and +perhaps as this is May, it won't be raving mad--at least not so mad as +it was in March." As she said this, she looked up, and there was the Cat +again, sitting on the branch of a tree. + +"Did you say pig, or fig?" said the Cat. + +"I said pig," replied Alice; "and I wish you wouldn't keep appearing and +vanishing so suddenly: you make one quite giddy." + +"All right," said the Cat; and this time it vanished quite slowly, +beginning with the end of the tail, and ending with the grin, which +remained some time after the rest of it had gone. + +"Well! I've often seen a cat without a grin," thought Alice; "but a grin +without a cat! It's the most curious thing I ever saw in all my life." + +[Illustration] + +She had not gone much farther before she came in sight of the house of +the March Hare: she thought it must be the right house, because the +chimneys were shaped like ears and the roof was thatched with fur. It +was so large a house, that she did not like to go nearer till she had +nibbled some more of the left-hand bit of mushroom, and raised herself, +to about two feet high: even then she walked up towards it rather +timidly, saying to herself, "Suppose it should be raving mad after all! +I almost wish I'd gone to see the Hatter instead!" + + + + +CHAPTER VII + + +[Sidenote: _A Mad Tea-party_] + +THERE was a table set out under a tree in front of the +house, and the March Hare and the Hatter were having tea at it: a +Dormouse was sitting between them, fast asleep, and the other two were +using it as a cushion resting their elbows on it, and talking over its +head. "Very uncomfortable for the Dormouse," thought Alice; "only as +it's asleep, suppose it doesn't mind." + +The table was a large one, but the three were all crowded together at +one corner of it. "No room! No room!" they cried out when they saw Alice +coming. "There's _plenty_ of room!" said Alice indignantly, and she sat +down in a large arm-chair at one end of the table. + +"Have some wine," the March Hare said in an encouraging tone. + +Alice looked all round the table, but there was nothing on it but tea. +"I don't see any wine," she remarked. + +"There isn't any," said the March Hare. + +"Then it wasn't very civil of you to offer it," said Alice angrily. + +"It wasn't very civil of you to sit down without being invited," said +the March Hare. + +"I didn't know it was _your_ table," said Alice; "it's laid for a great +many more than three." + +"Your hair wants cutting," said the Hatter. He had been looking at Alice +for some time with great curiosity, and this was his first speech. + +"You should learn not to make personal remarks," Alice said with some +severity; "it's very rude." + +The Hatter opened his eyes very wide on hearing this; but all he _said_ +was "Why is a raven like a writing-desk?" + +"Come, we shall have some fun now!" thought Alice. "I'm glad they've +begun asking riddles.--I believe I can guess that," she added aloud. + +"Do you mean that you think you can find out the answer to it?" said +the March Hare. + +"Exactly so," said Alice. + +"Then you should say what you mean," the March Hare went on. + +"I do," Alice hastily replied; "at least--at least I mean what I +say--that's the same thing, you know." + +"Not the same thing a bit!" said the Hatter. "Why, you might just as +well say that 'I see what I eat' is the same thing as 'I eat what I +see'!" + +"You might just as well say," added the March Hare, "that 'I like what I +get' is the same thing as 'I get what I like'!" + +"You might just as well say," added the Dormouse, which seemed to be +talking in his sleep, "that 'I breathe when I sleep' is the same thing +as 'I sleep when I breathe'!" + +"It _is_ the same thing with you," said the Hatter; and here the +conversation dropped, and the party sat silent for a minute, while Alice +thought over all she could remember about ravens and writing-desks, +which wasn't much. + +[Illustration: _A Mad Tea Party_] + +The Hatter was the first to break the silence. "What day of the month +is it?" he said, turning to Alice: he had taken his watch out of his +pocket, and was looking at it uneasily, shaking it every now and then, +and holding it to his ear. + +Alice considered a little, and then said "The fourth." + +"Two days wrong!" sighed the Hatter. "I told you butter would not suit +the works!" he added, looking angrily at the March Hare. + +"It was the _best_ butter," the March Hare meekly replied. + +"Yes, but some crumbs must have got in as well," the Hatter grumbled: +"you shouldn't have put it in with the bread-knife." + +The March Hare took the watch and looked at it gloomily: then he dipped +it into his cup of tea, and looked at it again: but he could think of +nothing better to say than his first remark, "It was the _best_ butter, +you know." + +Alice had been looking over his shoulder with some curiosity. "What a +funny watch!" she remarked. "It tells the day of the month, and doesn't +tell what o'clock it is!" + +"Why should it?" muttered the Hatter. "Does _your_ watch tell you what +year it is?" + +"Of course not," Alice replied very readily: "but that's because it +stays the same year for such a long time together." + +"Which is just the case with _mine_," said the Hatter. + +Alice felt dreadfully puzzled. The Hatter's remark seemed to have no +meaning in it, and yet it was certainly English. "I don't quite +understand," she said, as politely as she could. + +"The Dormouse is asleep again," said the Hatter, and he poured a little +hot tea upon its nose. + +The Dormouse shook its head impatiently, and said, without opening its +eyes, "Of course, of course; just what I was going to remark myself." + +"Have you guessed the riddle yet?" the Hatter said, turning to Alice +again. + +"No, I give it up," Alice replied: "what's the answer?" + +"I haven't the slightest idea," said the Hatter. + +"Nor I," said the March Hare. + +Alice sighed wearily. "I think you might do something better with the +time," she said, "than wasting it asking riddles with no answers." + +"If you knew Time as well as I do," said the Hatter, "you wouldn't talk +about wasting _it_. It's _him_." + +"I don't know what you mean," said Alice. + +"Of course you don't!" the Hatter said, tossing his head contemptuously. +"I daresay you never spoke to Time!" + +"Perhaps not," Alice cautiously replied: "but I know I have to beat time +when I learn music." + +"Ah! that accounts for it," said the Hatter. "He won't stand beating. +Now, if you only kept on good terms with him, he'd do almost anything +you liked with the clock. For instance, suppose it were nine o'clock in +the morning, just time to begin lessons: you'd only have to whisper a +hint to Time, and round goes the clock in a twinkling! Half-past one, +time for dinner!" + +("I only wish it was," the March Hare said to itself in a whisper.) + +"That would be grand, certainly," said Alice thoughtfully: "but then--I +shouldn't be hungry for it, you know." + +"Not at first, perhaps," said the Hatter: "but you could keep it to +half-past one as long as you liked." + +"Is that the way _you_ manage?" Alice asked. + +The Hatter shook his head mournfully. "Not I!" he replied. "We +quarrelled last March----just before _he_ went mad, you know----" +(pointing with his teaspoon to the March Hare), "it was at the great +concert given by the Queen of Hearts, and I had to sing + + 'Twinkle, twinkle, little bat! + How I wonder what you're at!' + +You know that song, perhaps?" + +"I've heard something like it," said Alice. + +"It goes on, you know," the Hatter continued, "in this way:-- + + 'Up above the world you fly, + Like a tea-tray in the sky. + Twinkle, twinkle----'" + +Here the Dormouse shook itself, and began singing in its sleep +"_Twinkle, twinkle, twinkle, twinkle_----" and went on so long that they +had to pinch it to make it stop. + +"Well, I'd hardly finished the first verse," said the Hatter, "when the +Queen jumped up and bawled out 'He's murdering the time! Off with his +head!'" + +"How dreadfully savage!" exclaimed Alice. + +"And ever since that," the Hatter went on in a mournful tone, "he won't +do a thing I ask! It's always six o'clock now." + +A bright idea came into Alice's head. "Is that the reason so many +tea-things are put out here?" she asked. + +"Yes, that's it," said the Hatter with a sigh: "it's always tea-time, +and we've no time to wash the things between whiles." + +"Then you keep moving round, I suppose?" said Alice. + +"Exactly so," said the Hatter: "as the things get used up." + +"But what happens when you come to the beginning again?" Alice ventured +to ask. + +"Suppose we change the subject," the March Hare interrupted, yawning. +"I'm getting tired of this. I vote the young lady tells us a story." + +"I'm afraid I don't know one," said Alice, rather alarmed at the +proposal. + +"Then the Dormouse shall!" they both cried. "Wake up, Dormouse!" And +they pinched it on both sides at once. + +The Dormouse slowly opened his eyes. "I wasn't asleep," he said in a +hoarse, feeble voice: "I heard every word you fellows were saying." + +"Tell us a story!" said the March Hare. + +"Yes, please do!" pleaded Alice. + +"And be quick about it," added the Hatter, "or you'll be asleep again +before it's done." + +"Once upon a time there were three little sisters," the Dormouse began +in a great hurry; "and their names were Elsie, Lacie, and Tillie; and +they lived at the bottom of a well----" + +"What did they live on?" said Alice, who always took a great interest in +questions of eating and drinking. + +"They lived on treacle," said the Dormouse, after thinking a minute or +two. + +"They couldn't have done that, you know," Alice gently remarked; "they'd +have been ill." + +"So they were," said the Dormouse; "_very_ ill." + +Alice tried a little to fancy to herself what such an extraordinary way +of living would be like, but it puzzled her too much, so she went on: +"But why did they live at the bottom of a well?" + +"Take some more tea," the March Hare said to Alice, very earnestly. + +"I've had nothing yet," Alice replied in an offended tone, "so I can't +take more." + +"You mean you can't take _less_," said the Hatter; "it's very easy to +take _more_ than nothing." + +"Nobody asked _your_ opinion," said Alice. + +"Who's making personal remarks now?" the Hatter asked triumphantly. + +Alice did not quite know what to say to this: so she helped herself to +some tea and bread-and-butter, and then turned to the Dormouse, and +repeated her question. "Why did they live at the bottom of a well?" + +The Dormouse again took a minute or two to think about it, and then +said, "It was a treacle-well." + +"There's no such thing!" Alice was beginning very angrily, but the +Hatter and the March Hare went "Sh! sh!" and the Dormouse sulkily +remarked: "If you can't be civil, you'd better finish the story for +yourself." + +"No, please go on!" Alice said very humbly. "I won't interrupt you +again. I dare say there may be _one_." + +"One, indeed!" said the Dormouse indignantly. However, he consented to +go on. "And so these three little sisters--they were learning to draw, +you know----" + +"What did they draw?" said Alice, quite forgetting her promise. + +"Treacle," said the Dormouse, without considering at all this time. + +"I want a clean cup," interrupted the Hatter: "let's all move one place +on." + +He moved as he spoke, and the Dormouse followed him: the March Hare +moved into the Dormouse's place, and Alice rather unwillingly took the +place of the March Hare. The Hatter was the only one who got any +advantage from the change: and Alice was a good deal worse off than +before, as the March Hare had just upset the milk-jug into his plate. + +Alice did not wish to offend the Dormouse again, so she began very +cautiously: "But I don't understand. Where did they draw the treacle +from?" + +"You can draw water out of a water-well," said the Hatter; "so I should +think you could draw treacle out of a treacle-well--eh, stupid!" + +"But they were _in_ the well," Alice said to the Dormouse, not choosing +to notice this last remark. + +"Of course they were," said the Dormouse; "----well in." + +This answer so confused poor Alice that she let the Dormouse go on for +some time without interrupting it. + +"They were learning to draw," the Dormouse went on, yawning and rubbing +its eyes, for it was getting very sleepy; "and they drew all manner of +things--everything that begins with an M----" + +"Why with an M?" said Alice. + +"Why not?" said the March Hare. + +Alice was silent. + +The Dormouse had closed its eyes by this time, and was going off into a +dose; but, on being pinched by the Hatter, it woke up again with a +little shriek, and went on: "----that begins with an M, such as +mouse-traps, and the moon, and memory, and muchness--you know you say +things are 'much of a muchness'--did you ever see such a thing as a +drawing of a muchness?" + +"Really, now you ask me," said Alice, very much confused, "I don't +think----" + +"Then you shouldn't talk," said the Hatter. + +This piece of rudeness was more than Alice could bear: she got up in +great disgust and walked off; the Dormouse fell asleep instantly, and +neither of the others took the least notice of her going, though she +looked back once or twice, half hoping that they would call after her: +the last time she saw them, they were trying to put the Dormouse into +the teapot. + +"At any rate I'll never go _there_ again!" said Alice as she picked her +way through the wood. "It's the stupidest tea-party I ever was at in all +my life!" + +Just as she said this, she noticed that one of the trees had a door +leading right into it. "That's very curious!" she thought. "But +everything's curious to-day. I think I may as well go in at once." And +in she went. + +Once more she found herself in the long hall, and close to the little +glass table. "Now I'll manage better this time," she said to herself, +and began by taking the little golden key, and unlocking the door that +led into the garden. Then she set to work nibbling at the mushroom (she +had kept a piece of it in her pocket) till she was about a foot high: +then she walked down the little passage: and _then_--she found herself +at last in the beautiful garden, among the bright flower-beds and the +cool fountains. + + + + +CHAPTER VIII + + +[Sidenote: _The Queen's Croquet-Ground_] + +A LARGE rose-tree stood near the entrance of the garden: +the roses growing on it were white, but there were three gardeners at +it, busily painting them red. Alice thought this a very curious thing, +and she went nearer to watch them, and just as she came up to them she +heard one of them say "Look out now, Five! Don't go splashing paint over +me like that!" + +"I couldn't help it," said Five, in a sulky tone. "Seven jogged my +elbow." + +On which Seven looked up and said, "That's right, Five! Always lay the +blame on others!" + +"_You'd_ better not talk!" said Five. "I heard the Queen say only +yesterday you deserved to be beheaded!" + +"What for?" said the one who had first spoken. + +"That's none of _your_ business, Two!" said Seven. + +"Yes, it _is_ his business!" said Five. "And I'll tell him--it was for +bringing the cook tulip-roots instead of onions." + +Seven flung down his brush, and had just begun "Well, of all the unjust +things----" when his eye chanced to fall upon Alice, as she stood +watching them, and he checked himself suddenly: the others looked round +also, and all of them bowed low. + +"Would you tell me," said Alice, a little timidly, "why you are painting +those roses?" + +Five and Seven said nothing, but looked at Two. Two began in a low +voice, "Why, the fact is, you see, Miss, this here ought to have been a +_red_ rose-tree, and we put a white one in by mistake; and if the Queen +was to find it out, we should all have our heads cut off, you know. So +you see, Miss, we're doing our best, afore she comes, to----" At this +moment, Five, who had been anxiously looking across the garden, called +out "The Queen! The Queen!" and the three gardeners instantly threw +themselves flat upon their faces. There was a sound of many footsteps, +and Alice looked round, eager to see the Queen. + +First came ten soldiers carrying clubs; these were all shaped like the +three gardeners, oblong and flat, with their hands and feet at the +corners: next the ten courtiers; these were ornamented all over with +diamonds, and walked two and two, as the soldiers did. After these came +the royal children; there were ten of them, and the little dears came +jumping merrily along hand in hand, in couples; they were all ornamented +with hearts. Next came the guests, mostly Kings and Queens, and among +them Alice recognised the White Rabbit: it was talking in a hurried, +nervous manner, smiling at everything that was said, and went by without +noticing her. Then followed the Knave of Hearts, carrying the King's +crown on a crimson velvet cushion; and last of all this grand +procession, came THE KING AND QUEEN OF HEARTS. + +Alice was rather doubtful whether she ought not to lie down on her face +like the three gardeners, but she could not remember ever having heard +of such a rule at processions; "and besides, what would be the use of a +procession," thought she, "if people had to lie down upon their faces, +so that they couldn't see it?" So she stood still where she was, and +waited. + +When the procession came opposite to Alice, they all stopped and looked +at her, and the Queen said severely, "Who is this?" She said it to the +Knave of Hearts, who only bowed and smiled in reply. + +"Idiot!" said the Queen, tossing her head impatiently; and turning to +Alice, she went on, "What's your name, child?" + +"My name is Alice, so please your Majesty," said Alice very politely; +but she added, to herself, "Why, they're only a pack of cards, after +all. I needn't be afraid of them!" + +"And who are _these_?" said the Queen, pointing to the three gardeners +who were lying round the rose-tree; for, you see, as they were lying on +their faces, and the pattern on their backs was the same as the rest of +the pack, she could not tell whether they were gardeners, or soldiers, +or courtiers, or three of her own children. + +"How should _I_ know?" said Alice, surprised at her own courage. "It's +no business of _mine_." + +The Queen turned crimson with fury, and, after glaring at her for a +moment like a wild beast, screamed "Off with her head! Off----" + +"Nonsense!" said Alice, very loudly and decidedly, and the Queen was +silent. + +The King laid his hand upon her arm, and timidly said "Consider my dear: +she is only a child!" + +The Queen turned angrily away from him, and said to the Knave "Turn them +over!" + +The Knave did so, very carefully, with one foot. + +"Get up!" said the Queen, in a shrill, loud voice, and the three +gardeners instantly jumped up, and began bowing to the King, the Queen, +the royal children, and everybody else. + +"Leave off that!" screamed the Queen. "You make me giddy." And then, +turning to the rose-tree, she went on, "What _have_ you been doing +here?" + +"May it please your Majesty," said Two, in a very humble tone, going +down on one knee as he spoke, "we were trying----" + +[Illustration: _The Queen turned angrily away from him and said to the +Knave, "Turn them over"_] + +"_I_ see!" said the Queen, who had meanwhile been examining the roses. +"Off with their heads!" and the procession moved on, three of the +soldiers remaining behind to execute the unfortunate gardeners, who ran +to Alice for protection. + +"You shan't be beheaded!" said Alice, and she put them into a large +flower-pot that stood near. The three soldiers wandered about for a +minute or two, looking for them, and then quietly marched off after the +others. + +"Are their heads off?" shouted the Queen. + +"Their heads are gone, if it please your Majesty!" the soldiers shouted +in reply. + +"That's right!" shouted the Queen. "Can you play croquet?" + +The soldiers were silent, and looked at Alice, as the question was +evidently meant for her. + +"Yes!" shouted Alice. + +"Come on, then!" roared the Queen, and Alice joined the procession, +wondering very much what would happen next. + +"It's--it's a very fine day!" said a timid voice at her side. She was +walking by the White Rabbit, who was peeping anxiously into her face. + +"Very," said Alice: "----where's the Duchess?" + +"Hush! Hush!" said the Rabbit in a low hurried tone. He looked anxiously +over his shoulder as he spoke, and then raised himself upon tiptoe, put +his mouth close to her ear, and whispered "She's under sentence of +execution." + +"What for?" said Alice. + +"Did you say 'What a pity!'?" the Rabbit asked. + +"No, I didn't," said Alice: "I don't think it's at all a pity. I said +'What for?'" + +"She boxed the Queen's ears--" the Rabbit began. Alice gave a little +scream of laughter. "Oh, hush!" the Rabbit whispered in a frightened +tone. "The Queen will hear you! You see she came rather late, and the +Queen said----" + +"Get to your places!" shouted the Queen in a voice of thunder, and +people began running about in all directions, tumbling up against each +other; however, they got settled down in a minute or two, and the game +began. Alice thought she had never seen such a curious croquet-ground in +all her life; it was all ridges and furrows; the balls were live +hedgehogs, the mallets live flamingoes, and the soldiers had to double +themselves up and to stand upon their hands and feet, to make the +arches. + +[Illustration] + +The chief difficulty Alice found at first was in managing her flamingo; +she succeeded in getting its body tucked away, comfortably enough, under +her arm, with its legs hanging down, but generally, just as she had got +its neck nicely straightened out, and was going to give the hedgehog a +blow with its head, it _would_ twist itself round and look up in her +face, with such a puzzled expression that she could not help bursting +out laughing: and when she had got its head down, and was going to +begin again, it was very provoking to find that the hedgehog had +unrolled itself and was in the act of crawling away: besides all this, +there was generally a ridge or a furrow in the way wherever she wanted +to send the hedgehog to, and, as the doubled-up soldiers were always +getting up and walking off to other parts of the ground, Alice soon came +to the conclusion that it was a very difficult game indeed. + +The players all played at once without waiting for turns, quarrelling +all the while, and fighting for the hedgehogs; and in a very short time +the Queen was in a furious passion, and went stamping about, and +shouting "Off with his head!" or "Off with her head!" about once in a +minute. + +Alice began to feel very uneasy: to be sure she had not as yet had any +dispute with the Queen, but she knew that it might happen any minute, +"and then," thought she, "what would become of me? They're dreadfully +fond of beheading people here: the great wonder is that there's any one +left alive!" + +She was looking about for some way of escape, and wondering whether she +could get away without being seen, when she noticed a curious +appearance in the air: it puzzled her very much at first, but, after +watching it a minute or two, she made it out to be a grin, and she said +to herself "It's the Cheshire Cat: now I shall have somebody to talk +to." + +"How are you getting on?" said the Cat, as soon as there was mouth +enough for it to speak with. + +Alice waited till the eyes appeared, and then nodded. "It's no use +speaking to it," she thought, "till its ears have come, or at least one +of them." In another minute the whole head appeared, and then Alice put +down her flamingo, and began an account of the game, feeling very glad +she had some one to listen to her. The Cat seemed to think that there +was enough of it now in sight, and no more of it appeared. + +"I don't think they play at all fairly," Alice began, in rather a +complaining tone, "and they all quarrel so dreadfully one can't hear +oneself speak--and they don't seem to have any rules in particular; at +least, if there are, nobody attends to them--and you've no idea how +confusing it is all the things being alive; for instance, there's the +arch I've got to go through next walking about at the other end of the +ground--and I should have croqueted the Queen's hedgehog just now, only +it ran away when it saw mine coming!" + +[Illustration] + +"How do you like the Queen?" said the Cat in a low voice. + +"Not at all," said Alice: "she's so extremely----" Just then she noticed +that the Queen was close behind her listening: so she went on, +"----likely to win, that it's hardly worth while finishing the game." + +The Queen smiled and passed on. + +"Who _are_ you talking to?" said the King, coming up to Alice, and +looking at the Cat's head with great curiosity. + +"It's a friend of mine--a Cheshire Cat," said Alice: "allow me to +introduce it." + +"I don't like the look of it at all," said the King: "however, it may +kiss my hand if it likes." + +"I'd rather not," the Cat remarked. + +"Don't be impertinent," said the King, "and don't look at me like that!" +He got behind Alice as he spoke. + +"A cat may look at a king," said Alice. "I've read that in some book, +but I don't remember where." + +"Well, it must be removed," said the King very decidedly, and he called +to the Queen, who was passing at the moment, "My dear! I wish you would +have this cat removed!" + +The Queen had only one way of settling all difficulties, great or small. +"Off with his head!" she said, without even looking round. + +"I'll fetch the executioner myself," said the King eagerly, and he +hurried off. + +Alice thought she might as well go back and see how the game was going +on, as she heard the Queen's voice in the distance, screaming with +passion. She had already heard her sentence three of the players to be +executed for having missed their turns, and she did not like the look of +things at all, as the game was in such confusion that she never knew +whether it was her turn or not. So she went in search of her hedgehog. + +The hedgehog was engaged in a fight with another hedgehog, which seemed +to Alice an excellent opportunity for croqueting one of them with the +other: the only difficulty was, that her flamingo was gone across to the +other side of the garden, where Alice could see it trying in a helpless +sort of way to fly up into one of the trees. + +By the time she had caught the flamingo and brought it back, the fight +was over, and both the hedgehogs were out of sight: "but it doesn't +matter much," thought Alice, "as all the arches are gone from this side +of the ground." So she tucked it under her arm, that it might not escape +again, and went back for a little more conversation with her friend. + +When she got back to the Cheshire Cat, she was surprised to find quite a +large crowd collected round it: there was a dispute going on between the +executioner, the King, and the Queen, who were all talking at once, +while all the rest were quite silent, and looked very uncomfortable. + +The moment Alice appeared, she was appealed to by all three to settle +the question, and they repeated their arguments to her, though, as they +all spoke at once, she found it very hard indeed to make out exactly +what they said. + +[Illustration] + +The executioner's argument was, that you couldn't cut off a head unless +there was a body to cut it off from: that he had never had to do such a +thing before, and he wasn't going to begin at _his_ time of life. + +The King's argument was, that anything that had a head could be +beheaded, and that you weren't to talk nonsense. + +The Queen's argument was, that if something wasn't done about it in less +than no time, she'd have everybody executed all round. (It was this last +remark that had made the whole party look so grave and anxious.) + +Alice could think of nothing else to say but "It belongs to the Duchess: +you'd better ask _her_ about it." + +"She's in prison," the Queen said to the executioner; "fetch her here." +And the executioner went off like an arrow. + +The Cat's head began fading away the moment he was gone, and by the time +he had come back with the Duchess, it had entirely disappeared; so the +King and the executioner ran wildly up and down looking for it, while +the rest of the party went back to the game. + + + + +CHAPTER IX + + +[Sidenote: _The Mock Turtle's Story_] + +"YOU can't think how glad I am to see you again, you +dear old thing!" said the Duchess, as she tucked her arm affectionately +into Alice's, and they walked off together. + +Alice was very glad to find her in such a pleasant temper, and thought +to herself that perhaps it was only the pepper that had made her so +savage when they met in the kitchen. + +"When _I'm_ a Duchess," she said to herself (not in a very hopeful tone +though), "I won't have any pepper in my kitchen _at all_. Soup does very +well without--Maybe it's always pepper that makes people hot-tempered," +she went on, very much pleased at having found out a new kind of rule, +"and vinegar that makes them sour--and camomile that makes them +bitter--and--barley-sugar and such things that make children +sweet-tempered. I only wish people knew _that_: then they wouldn't be +so stingy about it, you know----" + +She had quite forgotten the Duchess by this time, and was a little +startled when she heard her voice close to her ear. "You're thinking +about something, my dear, and that makes you forget to talk. I can't +tell you just now what the moral of that is, but I shall remember it in +a bit." + +"Perhaps it hasn't one," Alice ventured to remark. + +"Tut, tut, child!" said the Duchess. "Every thing's got a moral, if only +you can find it." And she squeezed herself up closer to Alice's side as +she spoke. + +Alice did not much like her keeping so close to her: first, because the +Duchess was _very_ ugly; and secondly, because she was exactly the right +height to rest her chin on Alice's shoulder, and it was an uncomfortably +sharp chin. However, she did not like to be rude, so she bore it as well +as she could. "The game's going on rather better now," she said, by way +of keeping up the conversation a little. + +"'Tis so," said the Duchess: "and the moral of that is--'Oh, 'tis love, +'tis love, that makes the world go round!'" + +"Somebody said," Alice whispered, "that it's done by everybody minding +their own business!" + +"Ah, well! It means much the same thing," said the Duchess, digging her +sharp little chin into Alice's shoulder as she added, "and the moral of +_that_ is--'Take care of the sense, and the sounds will take care of +themselves.'" + +"How fond she is of finding morals in things!" Alice thought to herself. + +"I dare say you're wondering why I don't put my arm round your waist," +the Duchess said after a pause: "the reason is, that I'm doubtful about +the temper of your flamingo. Shall I try the experiment?" + +"He might bite," Alice cautiously replied, not feeling at all anxious to +have the experiment tried. + +"Very true," said the Duchess: "flamingoes and mustard both bite. And +the moral of that is--'Birds of a feather flock together.'" + +"Only mustard isn't a bird," Alice remarked. + +"Right, as usual," said the Duchess: "what a clear way you have of +putting things!" + +"It's a mineral, I _think_," said Alice. + +"Of course it is," said the Duchess, who seemed ready to agree to +everything that Alice said: "there's a large mustard-mine near here. And +the moral of that is--'The more there is of mine, the less there is of +yours.'" + +"Oh, I know!" exclaimed Alice, who had not attended to this last remark. +"It's a vegetable. It doesn't look like one, but it is." + +"I quite agree with you," said the Duchess; "and the moral of that +is--'Be what you would seem to be'--or if you'd like it put more +simply--'Never imagine yourself not to be otherwise than what it might +appear to others that what you were or might have been was not otherwise +than what you had been would have appeared to them to be otherwise.'" + +"I think I should understand that better," Alice said very politely, "if +I had it written down: but I can't quite follow it as you say it." + +"That's nothing to what I could say if I chose," the Duchess replied, in +a pleased tone. + +"Pray don't trouble yourself to say it any longer than that," said +Alice. + +"Oh, don't talk about trouble!" said the Duchess. "I make you a present +of everything I've said as yet." + +"A cheap sort of present!" thought Alice. "I'm glad they don't give +birthday presents like that!" But she did not venture to say it out +loud. + +"Thinking again?" the Duchess asked with another dig of her sharp little +chin. + +"I've a right to think," said Alice sharply, for she was beginning to +feel a little worried. + +"Just about as much right," said the Duchess, "as pigs have to fly; and +the m----" + +But here, to Alice's great surprise, the Duchess's voice died away, even +in the middle of her favourite word "moral," and the arm that was linked +into hers began to tremble. Alice looked up, and there stood the Queen +in front of them, with her arms folded, frowning like a thunderstorm. + +"A fine day, your Majesty!" the Duchess began in a low, weak voice. + +"Now, I give you fair warning," shouted the Queen, stamping on the +ground as she spoke; "either you or your head must be off, and that in +about half no time! Take your choice!" + +The Duchess took her choice, and was gone in a moment. + +"Let's go on with the game," the Queen said to Alice; and Alice was too +much frightened to say a word, but slowly followed her back to the +croquet-ground. + +The other guests had taken advantage of the Queen's absence, and were +resting in the shade: however, the moment they saw her, they hurried +back to the game, the Queen merely remarking that a moment's delay would +cost them their lives. + +[Illustration: _The Queen never left off quarrelling with the other +players, and shouting "Off with his head!" or, "Off with her head!"_] + +All the time they were playing the Queen never left off quarrelling with +the other players, and shouting "Off with his head!" or "Off with her +head!" Those whom she sentenced were taken into custody by the soldiers, +who of course had to leave off being arches to do this, so that by the +end of half an hour or so there were no arches left, and all the +players, except the King, the Queen, and Alice, were in custody and +under sentence of execution. + +Then the Queen left off, quite out of breath, and said to Alice, "Have +you seen the Mock Turtle yet?" + +"No," said Alice. "I don't even know what a Mock Turtle is." + +"It's the thing Mock Turtle Soup is made from," said the Queen. + +"I never saw one, or heard of one," said Alice. + +"Come on then," said the Queen, "and he shall tell you his history." + +As they walked off together, Alice heard the King say in a low voice, to +the company generally, "You are all pardoned." "Come, _that's_ a good +thing!" she said to herself, for she had felt quite unhappy at the +number of executions the Queen had ordered. + +They very soon came upon a Gryphon, lying fast asleep in the sun. (If +you don't know what a Gryphon is, look at the picture.) "Up, lazy +thing!" said the Queen, "and take this young lady to see the Mock +Turtle, and to hear his history. I must go back and see after some +executions I have ordered," and she walked off, leaving Alice alone +with the Gryphon. Alice did not quite like the look of the creature, but +on the whole she thought it would be quite as safe to stay with it as to +go after that savage Queen: so she waited. + +The Gryphon sat up and rubbed its eyes: then it watched the Queen till +she was out of sight: then it chuckled. "What fun!" said the Gryphon, +half to itself, half to Alice. + +"What _is_ the fun?" said Alice. + +"Why, _she_," said the Gryphon. "It's all her fancy, that: they never +executes nobody, you know. Come on!" + +"Everybody says 'come on!' here," thought Alice, as she went slowly +after it: "I never was so ordered about in my life, never!" + +[Illustration] + +They had not gone far before they saw the Mock Turtle in the distance, +sitting sad and lonely on a little ledge of rock, and, as they came +nearer, Alice could hear him sighing as if his heart would break. She +pitied him deeply. "What is his sorrow?" she asked the Gryphon, and the +Gryphon answered, very nearly in the same words as before, "It's all +his fancy, that: he hasn't got no sorrow, you know. Come on!" + +So they went up to the Mock Turtle, who looked at them with large eyes +full of tears, but said nothing. + +"This here young lady," said the Gryphon, "she wants to know your +history, she do." + +"I'll tell it her," said the Mock Turtle in a deep, hollow tone; "sit +down, both of you, and don't speak a word till I've finished." + +So they sat down, and nobody spoke for some minutes. Alice thought to +herself, "I don't see how he can _ever_ finish, if he doesn't begin." +But she waited patiently. + +"Once," said the Mock Turtle at last, with a deep sigh, "I was a real +Turtle." + +These words were followed by a very long silence, broken only by an +occasional exclamation of "Hjckrrh!" from the Gryphon, and the constant +heavy sobbing of the Mock Turtle. Alice was very nearly getting up and +saying "Thank you, sir, for your interesting story," but she could not +help thinking there _must_ be more to come, so she sat still and said +nothing. + +"When we were little," the Mock Turtle went on at last, more calmly, +though still sobbing a little now and then, "we went to school in the +sea. The master was an old Turtle--we used to call him Tortoise----" + +"Why did you call him Tortoise, if he wasn't one?" Alice asked. + +"We called him Tortoise because he taught us," said the Mock Turtle +angrily: "really you are very dull!" + +"You ought to be ashamed of yourself for asking such a simple question," +added the Gryphon; and then they both sat silent and looked at poor +Alice, who felt ready to sink into the earth. At last the Gryphon said +to the Mock Turtle, "Drive on, old fellow. Don't be all day about it!" +and he went on in these words: + +"Yes, we went to school in the sea, though you mayn't believe it----" + +"I never said I didn't!" interrupted Alice. + +"You did," said the Mock Turtle. + +"Hold your tongue!" added the Gryphon, before Alice could speak again. +The Mock Turtle went on:-- + +"We had the best of educations--in fact, we went to school every +day----" + +"_I've_ been to a day-school, too," said Alice; "you needn't be so proud +as all that." + +"With extras?" asked the Mock Turtle a little anxiously. + +"Yes," said Alice, "we learned French and music." + +"And washing?" said the Mock Turtle. + +"Certainly not!" said Alice indignantly. + +"Ah! then yours wasn't a really good school," said the Mock Turtle in a +tone of relief. "Now at _ours_ they had at the end of the bill, 'French, +music, _and washing_--extra.'" + +"You couldn't have wanted it much," said Alice; "living at the bottom of +the sea." + +"I couldn't afford to learn it," said the Mock Turtle with a sigh. "I +only took the regular course." + +"What was that?" inquired Alice. + +"Reeling and Writhing, of course, to begin with," the Mock Turtle +replied; "and then the different branches of Arithmetic--Ambition, +Distraction, Uglification, and Derision." + +"I never heard of 'Uglification,'" Alice ventured to say. "What is it?" + +The Gryphon lifted up both its paws in surprise. "Never heard of +uglifying!" it exclaimed. "You know what to beautify is, I suppose?" + +"Yes," said Alice doubtfully: "it means--to--make--anything--prettier." + +"Well, then," the Gryphon went on, "if you don't know what to uglify is, +you are a simpleton." + +Alice did not feel encouraged to ask any more questions about it, so she +turned to the Mock Turtle and said, "What else had you to learn?" + +"Well, there was Mystery," the Mock Turtle replied, counting off the +subjects on his flappers, "--Mystery, ancient and modern, with +Seaography: then Drawling--the Drawling-master was an old conger-eel, +that used to come once a week: _he_ taught us Drawling, Stretching, and +Fainting in Coils." + +"What was _that_ like?" said Alice. + +"Well, I can't show it you myself," the Mock Turtle said: "I'm too +stiff. And the Gryphon never learnt it." + +"Hadn't time," said the Gryphon: "I went to the Classical master, +though. He was an old crab, _he_ was." + +"I never went to him," the Mock Turtle said with a sigh: "he taught +Laughing and Grief, they used to say." + +"So he did, so he did," said the Gryphon, sighing in his turn; and both +creatures hid their faces in their paws. + +"And how many hours a day did you do lessons?" said Alice, in a hurry to +change the subject. + +"Ten hours the first day," said the Mock Turtle: "nine the next, and so +on." + +"What a curious plan!" exclaimed Alice. + +"That's the reason they're called lessons," the Gryphon remarked: +"because they lessen from day to day." + +This was quite a new idea to Alice, and she thought over it a little +before she made her next remark. "Then the eleventh day must have been a +holiday." + +"Of course it was," said the Mock Turtle. + +"And how did you manage on the twelfth?" Alice went on eagerly. + +"That's enough about lessons," the Gryphon interrupted in a very decided +tone: "tell her something about the games now." + + + + +CHAPTER X + + +[Sidenote: _The Lobster Quadrille_] + +THE Mock Turtle sighed deeply, and drew the back of one +flapper across his eyes. He looked at Alice, and tried to speak, but, +for a minute or two, sobs choked his voice. "Same as if he had a bone in +his throat," said the Gryphon: and it set to work shaking him and +punching him in the back. At last the Mock Turtle recovered his voice, +and, with tears running down his cheeks, went on again: + +"You may not have lived much under the sea--" ("I haven't," said Alice) +"and perhaps you were never even introduced to a lobster--" (Alice began +to say "I once tasted----" but checked herself hastily, and said "No, +never") "--so you can have no idea what a delightful thing a Lobster +Quadrille is!" + +"No, indeed," said Alice. "What sort of a dance is it?" + +"Why," said the Gryphon, "you first form into a line along the +sea-shore----" + +"Two lines!" cried the Mock Turtle. "Seals, turtles, and so on; then, +when you've cleared the jelly-fish out of the way----" + +"_That_ generally takes some time," interrupted the Gryphon. + +"--you advance twice----" + +"Each with a lobster as a partner!" cried the Gryphon. + +"Of course," the Mock Turtle said: "advance twice, set to partners----" + +"--change lobsters, and retire in same order," continued the Gryphon. + +"Then, you know," the Mock Turtle went on, "you throw the----" + +"The lobsters!" shouted the Gryphon, with a bound into the air. + +"--as far out to sea as you can----" + +"Swim, after them!" screamed the Gryphon. + +"Turn a somersault in the sea!" cried the Mock Turtle, capering wildly +about. + +"Change lobsters again!" yelled the Gryphon. + +"Back to land again, and--that's all the first figure," said the Mock +Turtle, suddenly dropping his voice; and the two creatures, who had been +jumping about like mad things all this time, sat down again very sadly +and quietly, and looked at Alice. + +"It must be a very pretty dance," said Alice, timidly. + +"Would you like to see a little of it?" said the Mock Turtle. + +"Very much indeed," said Alice. + +"Come, let's try the first figure!" said the Mock Turtle to the Gryphon. +"We can do it without lobsters, you know. Which shall sing?" + +"Oh, _you_ sing," said the Gryphon. "I've forgotten the words." + +So they began solemnly dancing round and round Alice, every now and then +treading on her toes when they passed too close, and waving their +forepaws to mark the time, while the Mock Turtle sang this, very slowly +and sadly:-- + + "Will you walk a little faster?" said a whiting to a snail, + "There's a porpoise close behind us, and he's treading on my tail. + See how eagerly the lobsters and the turtles all advance! + They are waiting on the shingle--will you come and join the dance? + Will you, won't you, will you, won't you, will you join the dance? + Will you, won't you, will you, won't you, won't you join the dance? + + "You can really have no notion how delightful it will be, + When they take us up and throw us, with the lobsters, out to sea!" + But the snail replied: "Too far, too far!" and gave a look askance-- + Said he thanked the whiting kindly, but he would not join the dance. + Would not, could not, would not, could not, would not join the dance. + Would not, could not, would not, could not, could not join the dance. + + "What matters it how far we go?" his scaly friend replied; + "There is another shore, you know, upon the other side. + The further off from England the nearer is to France-- + Then turn not pale, beloved snail, but come and join the dance. + Will you, won't you, will you, won't you, will you join the dance? + Will you, won't you, will you, won't you, won't you join the dance?" + +"Thank you, it's a very interesting dance to watch," said Alice, feeling +very glad that it was over at last: "and I do so like that curious song +about the whiting!" + +"Oh, as to the whiting," said the Mock Turtle, "they--you've seen them, +of course?" + +"Yes," said Alice, "I've often seen them at dinn----" she checked +herself hastily. + +"I don't know where Dinn may be," said the Mock Turtle, "but if you've +seen them so often, of course you know what they're like." + +"I believe so," Alice replied thoughtfully. "They have their tails in +their mouths--and they're all over crumbs." + +"You're wrong about the crumbs," said the Mock Turtle: "crumbs would all +wash off in the sea. But they _have_ their tails in their mouths; and +the reason is--" here the Mock Turtle yawned and shut his eyes. "Tell +her about the reason and all that," he said to the Gryphon. + +"The reason is," said the Gryphon, "that they _would_ go with the +lobsters to the dance. So they got thrown out to sea. So they had to +fall a long way. So they got their tails fast in their mouths. So they +couldn't get them out again. That's all." + +"Thank you," said Alice. "It's very interesting. I never knew so much +about a whiting before." + +"I can tell you more than that, if you like," said the Gryphon. "Do you +know why it's called a whiting?" + +"I never thought about it," said Alice. "Why?" + +"_It does the boots and shoes_," the Gryphon replied very solemnly. + +Alice was thoroughly puzzled. "Does the boots and shoes!" she repeated +in a wondering tone. + +"Why, what are _your_ shoes done with?" said the Gryphon. "I mean, what +makes them so shiny?" + +Alice looked down at them, and considered a little before she gave her +answer. "They're done with blacking, I believe." + +"Boots and shoes under the sea," the Gryphon went on in a deep voice, +"are done with whiting. Now you know." + +"And what are they made of?" Alice asked in a tone of great curiosity. + +"Soles and eels, of course," the Gryphon replied rather impatiently: +"any shrimp could have told you that." + +"If I'd been the whiting," said Alice, whose thoughts were still running +on the song, "I'd have said to the porpoise, 'Keep back, please: we +don't want _you_ with us!'" + +"They were obliged to have him with them," the Mock Turtle said: "no +wise fish would go anywhere without a porpoise." + +"Wouldn't it really?" said Alice in a tone of great surprise. + +"Of course not," said the Mock Turtle: "why, if a fish came to _me_, and +told me he was going a journey, I should say, 'With what porpoise?'" + +"Don't you mean 'purpose'?" said Alice. + +"I mean what I say," the Mock Turtle replied in an offended tone. And +the Gryphon added, "Come, let's hear some of _your_ adventures." + +[Illustration: _The Mock Turtle drew a long breath and said, "That's +very curious"_] + +"I could tell you my adventures--beginning from this morning," said +Alice a little timidly: "but it's no use going back to yesterday, +because I was a different person then." + +"Explain all that," said the Mock Turtle. + +"No, no! The adventures first," said the Gryphon in an impatient tone: +"explanations take such a dreadful time." + +So Alice began telling them her adventures from the time when she first +saw the White Rabbit. She was a little nervous about it just at first, +the two creatures got so close to her, one on each side, and opened +their eyes and mouths so _very_ wide, but she gained courage as she went +on. Her listeners were perfectly quiet till she got to the part about +her repeating "_You are old, Father William_," to the Caterpillar, and +the words all coming different, and then the Mock Turtle drew a long +breath, and said, "That's very curious." + +"It's all about as curious as it can be," said the Gryphon. + +"It all came different!" the Mock Turtle repeated thoughtfully. "I +should like to hear her repeat something now. Tell her to begin." He +looked at the Gryphon as if he thought it had some kind of authority +over Alice. + +"Stand up and repeat '_'Tis the voice of the sluggard_,'" said the +Gryphon. + +"How the creatures order one about, and make one repeat lessons!" +thought Alice. "I might as well be at school at once." However, she got +up, and began to repeat it, but her head was so full of the Lobster +Quadrille, that she hardly knew what she was saying, and the words came +very queer indeed:-- + + "'Tis the voice of the Lobster; I heard him declare, + 'You have baked me too brown, I must sugar my hair.' + As a duck with its eyelids, so he with his nose + Trims his belt and his buttons, and turns out his toes. + When the sands are all dry, he is gay as a lark, + And will talk in contemptuous tones of the Shark: + But, when the tide rises and sharks are around, + His voice has a timid and tremulous sound." + +"That's different from what _I_ used to say when I was a child," said +the Gryphon. + +"Well, _I_ never heard it before," said the Mock Turtle: "but it sounds +uncommon nonsense." + +Alice said nothing; she had sat down with her face in her hands, +wondering if anything would _ever_ happen in a natural way again. + +"I should like to have it explained," said the Mock Turtle. + +"She ca'n't explain it," hastily said the Gryphon. "Go on with the next +verse." + +"But about his toes?" the Mock Turtle persisted. "How _could_ he turn +them out with his nose, you know?" + +"It's the first position in dancing," Alice said; but was dreadfully +puzzled by the whole thing, and longed to change the subject. + +"Go on with the next verse," the Gryphon repeated: "it begins '_I passed +by his garden_.'" + +Alice did not dare to disobey, though she felt sure it would all come +wrong, and she went on in a trembling voice: + + "I passed by his garden, and marked, with one eye, + How the Owl and the Panther were sharing a pie: + The Panther took pie-crust, and gravy, and meat, + While the Owl had the dish as its share of the treat. + When the pie was all finished, the Owl, as a boon, + Was kindly permitted to pocket the spoon: + While the Panther received knife and fork with a growl, + And concluded the banquet by----" + +"What _is_ the use of repeating all that stuff," the Mock Turtle +interrupted, "if you don't explain it as you go on? It's by far the most +confusing thing _I_ ever heard!" + +[Illustration] + +"Yes, I think you'd better leave off," said the Gryphon: and Alice was +only too glad to do so. + +"Shall we try another figure of the Lobster Quadrille?" the Gryphon went +on. "Or would you like the Mock Turtle to sing you another song?" + +"Oh, a song, please, if the Mock Turtle would be so kind," Alice +replied, so eagerly that the Gryphon said, in a rather offended tone, +"H'm! No accounting for tastes! Sing her '_Turtle Soup_,' will you, old +fellow?" + +The Mock Turtle sighed deeply, and began, in a voice choked with sobs, +to sing this:-- + + "Beautiful Soup, so rich and green, + Waiting in a hot tureen! + Who for such dainties would not stoop? + Soup of the evening, beautiful Soup! + Soup of the evening, beautiful Soup! + Beau--ootiful Soo--oop! + Beau--ootiful Soo--oop! + Soo--oop of the e--e--evening, + Beautiful, beautiful Soup! + + "Beautiful Soup! Who cares for fish, + Game, or any other dish? + Who would not give all else for two + Pennyworth only of beautiful Soup? + Pennyworth only of beautiful Soup? + Beau--ootiful Soo--oop! + Beau--ootiful Soo--oop! + Soo--oop of the e--e--evening, + Beautiful, beauti--FUL SOUP!" + +"Chorus again!" cried the Gryphon, and the Mock Turtle had just begun +to repeat it, when a cry of "The trial's beginning!" was heard in the +distance. + +"Come on!" cried the Gryphon, and, taking Alice by the hand, it hurried +off, without waiting for the end of the song. + +"What trial is it?" Alice panted as she ran; but the Gryphon only +answered "Come on!" and ran the faster, while more and more faintly +came, carried on the breeze that followed them, the melancholy words:-- + + "Soo--oop of the e--e--evening, + Beautiful, beautiful Soup!" + + + + +CHAPTER XI + + +[Sidenote: _Who Stole the Tarts?_] + +THE King and Queen of Hearts were seated on their throne +when they arrived, with a great crowd assembled about them--all sorts of +little birds and beasts, as well as the whole pack of cards: the Knave +was standing before them, in chains, with a soldier on each side to +guard him; and near the King was the White Rabbit, with a trumpet in one +hand, and a scroll of parchment in the other. In the very middle of the +court was a table, with a large dish of tarts upon it: they looked so +good, that it made Alice quite hungry to look at them--"I wish they'd +get the trial done," she thought, "and hand round the refreshments!" But +there seemed to be no chance of this, so she began looking about her, to +pass away the time. + +Alice had never been in a court of justice before, but she had read +about them in books, and she was quite pleased to find that she knew the +name of nearly everything there. "That's the judge," she said to +herself, "because of his great wig." + +The judge, by the way, was the King; and as he wore his crown over the +wig, he did not look at all comfortable, and it was certainly not +becoming. + +"And that's the jury-box," thought Alice, "and those twelve creatures," +(she was obliged to say "creatures," you see, because some of them were +animals, and some were birds,) "I suppose they are the jurors." She said +this last word two or three times over to herself, being rather proud of +it: for she thought, and rightly too, that very few little girls of her +age knew the meaning of it at all. However, "jurymen" would have done +just as well. + +The twelve jurors were all writing very busily on slates. "What are they +all doing?" Alice whispered to the Gryphon. "They can't have anything to +put down yet, before the trial's begun." + +[Illustration: _Who stole the tarts?_] + +"They're putting down their names," the Gryphon whispered in reply, +"for fear they should forget them before the end of the trial." + +"Stupid things!" Alice began in a loud, indignant voice, but she stopped +hastily, for the White Rabbit cried out "Silence in the court!" and the +King put on his spectacles and looked anxiously round, to see who was +talking. + +Alice could see, as well as if she were looking over their shoulders, +that all the jurors were writing down "stupid things!" on their slates, +and she could even make out that one of them didn't know how to spell +"stupid," and that he had to ask his neighbour to tell him. "A nice +muddle their slates will be in before the trial's over!" thought Alice. + +One of the jurors had a pencil that squeaked. This, of course, Alice +could _not_ stand, and she went round the court and got behind him, and +very soon found an opportunity of taking it away. She did it so quickly +that the poor little juror (it was Bill, the Lizard) could not make out +at all what had become of it; so, after hunting all about for it, he +was obliged to write with one finger for the rest of the day; and this +was of very little use, as it left no mark on the slate. + +"Herald, read the accusation!" said the King. + +On this the White Rabbit blew three blasts on the trumpet, and then +unrolled the parchment scroll, and read as follows: + + "The Queen of Hearts, she made some tarts, + All on a summer day: + The Knave of Hearts, he stole those tarts, + And took them quite away!" + +"Consider your verdict," the King said to the jury. + +"Not yet, not yet!" the Rabbit hastily interrupted. "There's a great +deal to come before that!" + +"Call the first witness," said the King; and the Rabbit blew three +blasts on the trumpet, and called out "First witness!" + +The first witness was the Hatter. He came in with a teacup in one hand +and a piece of bread-and-butter in the other. "I beg pardon, your +Majesty," he began, "for bringing these in; but I hadn't quite finished +my tea when I was sent for." + +"You ought to have finished," said the King. "When did you begin?" + +The Hatter looked at the March Hare, who had followed him into the +court, arm-in-arm with the Dormouse. "Fourteenth of March, I _think_ it +was," he said. + +"Fifteenth," said the March Hare. + +"Sixteenth," said the Dormouse. + +"Write that down," the King said to the jury, and the jury eagerly wrote +down all three dates on their slates, and then added them up, and +reduced the answer to shillings and pence. + +"Take off your hat," the King said to the Hatter. + +"It isn't mine," said the Hatter. + +"_Stolen!_" the King exclaimed, turning to the jury, who instantly made +a memorandum of the fact. + +"I keep them to sell," the Hatter added as an explanation: "I've none of +my own. I'm a hatter." + +Here the Queen put on her spectacles, and began staring hard at the +Hatter, who turned pale and fidgeted. + +"Give your evidence," said the King; "and don't be nervous, or I'll have +you executed on the spot." + +This did not seem to encourage the witness at all: he kept shifting from +one foot to the other, looking uneasily at the Queen, and in his +confusion he bit a large piece out of his teacup instead of the +bread-and-butter. + +Just at this moment Alice felt a very curious sensation, which puzzled +her a good deal until she made out what it was: she was beginning to +grow larger again, and she thought at first she would get up and leave +the court; but on second thoughts she decided to remain where she was as +long as there was room for her. + +"I wish you wouldn't squeeze so," said the Dormouse, who was sitting +next to her. "I can hardly breathe." + +"I can't help it," said Alice very meekly: "I'm growing." + +"You've no right to grow _here_," said the Dormouse. + +"Don't talk nonsense," said Alice more boldly: "you know you're growing +too." + +"Yes, but _I_ grow at a reasonable pace," said the Dormouse; "not in +that ridiculous fashion." And he got up very sulkily and crossed over to +the other side of the court. + +All this time the Queen had never left off staring at the Hatter, and, +just as the Dormouse crossed the court, she said to one of the officers +of the court, "Bring me the list of the singers in the last concert!" on +which the wretched Hatter trembled so, that he shook off both his shoes. + +"Give your evidence," the King repeated angrily, "or I'll have you +executed, whether you're nervous or not." + +"I'm a poor man, your Majesty," the Hatter began, in a trembling voice, +"--and I hadn't begun my tea--not above a week or so--and what with the +bread-and-butter getting so thin--and the twinkling of the tea----" + +"The twinkling of _what_?" said the King. + +"It _began_ with the tea," the Hatter replied. + +"Of course twinkling _begins_ with a T!" said the King sharply. "Do you +take me for a dunce? Go on!" + +"I'm a poor man," the Hatter went on, "and most things twinkled after +that--only the March Hare said----" + +"I didn't!" the March Hare interrupted in a great hurry. + +"You did!" said the Hatter. + +"I deny it!" said the March Hare. + +"He denies it," said the King: "leave out that part." + +"Well, at any rate, the Dormouse said----" the Hatter went on, looking +anxiously round to see if he would deny it too: but the Dormouse denied +nothing, being fast asleep. + +"After that," continued the Hatter, "I cut some more +bread-and-butter----" + +"But what did the Dormouse say?" one of the jury asked. + +"That I can't remember," said the Hatter. + +"You _must_ remember," remarked the King, "or I'll have you executed." + +The miserable Hatter dropped his teacup and bread-and-butter, and went +down on one knee. "I'm a poor man, your Majesty," he began. + +"You're a _very_ poor _speaker_," said the King. + +Here one of the guinea-pigs cheered, and was immediately suppressed by +the officers of the court. (As that is rather a hard word, I will just +explain to you how it was done. They had a large canvas bag, which tied +up at the mouth with strings: into this they slipped the guinea-pig, +head first, and then sat upon it.) + +"I'm glad I've seen that done," thought Alice. "I've so often read in +the newspapers, at the end of trials, 'There was some attempt at +applause, which was immediately suppressed by the officers of the +court,' and I never understood what it meant till now." + +"If that's all you know about it, you may stand down," continued the +King. + +"I can't go no lower," said the Hatter: "I'm on the floor, as it is." + +"Then you may _sit_ down," the King replied. + +Here the other guinea-pig cheered, and was suppressed. + +"Come, that finishes the guinea-pigs!" thought Alice. "Now we shall get +on better." + +"I'd rather finish my tea," said the Hatter, with an anxious look at +the Queen, who was reading the list of singers. + +"You may go," said the King; and the Hatter hurriedly left the court, +without even waiting to put his shoes on. + +"--and just take his head off outside," the Queen added to one of the +officers; but the Hatter was out of sight before the officer could get +to the door. + +"Call the next witness!" said the King. + +The next witness was the Duchess's cook. She carried the pepper-box in +her hand, and Alice guessed who it was, even before she got into the +court, by the way the people near the door began sneezing all at once. + +"Give your evidence," said the King. + +"Sha'n't," said the cook. + +The King looked anxiously at the White Rabbit, who said in a low voice, +"Your Majesty must cross-examine _this_ witness." + +"Well, if I must, I must," the King said with a melancholy air, and, +after folding his arms and frowning at the cook till his eyes were +nearly out of sight, he said in a deep voice, "What are tarts made of?" + +"Pepper, mostly," said the cook. + +"Treacle," said a sleepy voice behind her. + +"Collar that Dormouse," the Queen shrieked out. "Behead that Dormouse! +Turn that Dormouse out of court! Suppress him! Pinch him! Off with his +whiskers." + +For some minutes the whole court was in confusion, getting the Dormouse +turned out, and, by the time they had settled down again, the cook had +disappeared. + +[Illustration] + +"Never mind!" said the King, with an air of great relief. "Call the next +witness." And he added in an undertone to the Queen, "Really, my dear, +_you_ must cross-examine the next witness. It quite makes my forehead +ache!" + +Alice watched the White Rabbit as he fumbled over the list, feeling very +curious to see what the next witness would be like, "--for they haven't +got much evidence _yet_," she said to herself. Imagine her surprise, +when the White Rabbit read out, at the top of his shrill little voice, +the name "Alice!" + + + + +CHAPTER XII + + +[Sidenote: _Alice's Evidence_] + +"HERE!" cried Alice, quite forgetting in the flurry of +the moment how large she had grown in the last few minutes, and she +jumped up in such a hurry that she tipped over the jury-box with the +edge of her skirt, upsetting all the jurymen on to the heads of the +crowd below, and there they lay sprawling about, reminding her very much +of a globe of gold-fish she had accidentally upset the week before. + +"Oh, I _beg_ your pardon!" she exclaimed in a tone of great dismay, and +began picking them up again as quickly as she could, for the accident of +the gold-fish kept running in her head, and she had a vague sort of idea +that they must be collected at once and put back into the jury-box, or +they would die. + +"The trial cannot proceed," said the King in a very grave voice, "until +all the jurymen are back in their proper places--_all_," he repeated +with great emphasis, looking hard at Alice as he said so. + +Alice looked at the jury-box, and saw that, in her haste, she had put +the Lizard in head downwards, and the poor little thing was waving its +tail about in a melancholy way, being quite unable to move. She soon got +it out again, and put it right; "not that it signifies much," she said +to herself; "I should think it would be _quite_ as much use in the trial +one way up as the other." + +As soon as the jury had a little recovered from the shock of being +upset, and their slates and pencils had been found and handed back to +them, they set to work very diligently to write out a history of the +accident, all except the Lizard, who seemed too much overcome to do +anything but sit with its mouth open, gazing up into the roof of the +court. + +"What do you know about this business?" the King said to Alice. + +"Nothing," said Alice. + +"Nothing _whatever_?" persisted the King. + +"Nothing whatever," said Alice. + +"That's very important," the King said, turning to the jury. They were +just beginning to write this down on their slates, when the White Rabbit +interrupted: "_Un_important, your Majesty means, of course," he said in +a very respectful tone, but frowning and making faces at him as he +spoke. + +"_Un_important, of course, I meant," the King hastily said, and went on +himself in an undertone,"important--unimportant--unimportant--important----" +as if he were trying which word sounded best. + +Some of the jury wrote it down "important," and some "unimportant." +Alice could see this, as she was near enough to look over their slates; +"but it doesn't matter a bit," she thought to herself. + +At this moment the King, who had been for some time busily writing in +his note-book, called out "Silence!" and read out from his book, "Rule +Forty-two. _All persons more than a mile high to leave the court._" + +Everybody looked at Alice. + +"_I'm_ not a mile high," said Alice. + +"You are," said the King. + +"Nearly two miles high," added the Queen. + +"Well, I sha'n't go, at any rate," said Alice: "besides, that's not a +regular rule: you invented it just now." + +"It's the oldest rule in the book," said the King. + +"Then it ought to be Number One," said Alice. + +The King turned pale, and shut his note-book hastily. "Consider your +verdict," he said to the jury, in a low trembling voice. + +"There's more evidence to come yet, please your Majesty," said the White +Rabbit, jumping up in a great hurry: "this paper has just been picked +up." + +"What's in it?" said the Queen. + +"I haven't opened it yet," said the White Rabbit, "but it seems to be a +letter, written by the prisoner to--to somebody." + +"It must have been that," said the King, "unless it was written to +nobody, which isn't usual, you know." + +"Who is it directed to?" said one of the jurymen. + +"It isn't directed at all," said the White Rabbit; "in fact, there's +nothing written on the _outside_." He unfolded the paper as he spoke, +and added "It isn't a letter after all: it's a set of verses." + +"Are they in the prisoner's handwriting?" asked another of the jurymen. + +"No, they're not," said the White Rabbit, "and that's the queerest thing +about it." (The jury all looked puzzled.) + +"He must have imitated somebody else's hand," said the King. (The jury +all brightened up again.) + +"Please your Majesty," said the Knave, "I didn't write it, and they +can't prove that I did: there's no name signed at the end." + +"If you didn't sign it," said the King, "that only makes the matter +worse. You _must_ have meant some mischief, or else you'd have signed +your name like an honest man." + +There was a general clapping of hands at this: it was the first really +clever thing the King had said that day. + +"That _proves_ his guilt, of course," said the Queen: "so, off with----" + +"It doesn't prove anything of the sort!" said Alice. "Why, you don't +even know what they're about!" + +"Read them," said the King. + +The White Rabbit put on his spectacles. "Where shall I begin, please +your Majesty?" he asked. + +"Begin at the beginning," the King said gravely, "and go on till you +come to the end; then stop." + +There was dead silence in the court, whilst the White Rabbit read out +these verses:-- + + "They told me you had been to her, + And mentioned me to him: + She gave me a good character, + But said I could not swim. + + He sent them word I had not gone, + (We know it to be true): + If she should push the matter on, + What would become of you? + + I gave her one, they gave him two, + You gave us three or more; + They all returned from him to you, + Though they were mine before. + + If I or she should chance to be + Involved in this affair, + He trusts to you to set them free, + Exactly as we were. + + My notion was that you had been + (Before she had this fit) + An obstacle that came between + Him, and ourselves, and it. + + Don't let him know she liked them best, + For this must ever be + A secret, kept from all the rest, + Between yourself and me." + +"That's the most important piece of evidence we've heard yet," said the +King, rubbing his hands; "so now let the jury----" + +"If any of them can explain it," said Alice, (she had grown so large in +the last few minutes that she wasn't a bit afraid of interrupting him,) +"I'll give him sixpence. _I_ don't believe there's an atom of meaning in +it." + +The jury all wrote down on their slates, "_She_ doesn't believe there's +an atom of meaning in it," but none of them attempted to explain the +paper. + +"If there's no meaning in it," said the King, "that saves a world of +trouble, you know, as we needn't try to find any. And yet I don't +know," he went on, spreading out the verses on his knee, and looking at +them with one eye; "I seem to see some meaning in them after all. +'----_said I could not swim_--' you can't swim can you?" he added, +turning to the Knave. + +The Knave shook his head sadly. "Do I look like it?" he said. (Which he +certainly did _not_, being made entirely of cardboard.) + +"All right, so far," said the King, as he went on muttering over the +verses to himself: "'_We know it to be true_--' that's the jury, of +course--'_If she should push the matter on_'--that must be the +Queen--'_What would become of you?_'--What, indeed!--'_I gave her one, +they gave him two_--' why, that must be what he did with the tarts, you +know----" + +"But it goes on '_they all returned from him to you_,'" said Alice. + +"Why, there they are!" said the King triumphantly, pointing to the tarts +on the table. "Nothing can be clearer than _that_. Then again--'_before +she had this fit_--' you never had _fits_, my dear, I think?" he said to +the Queen. + +"Never!" said the Queen furiously, throwing an inkstand at the Lizard +as she spoke. (The unfortunate little Bill had left off writing on his +slate with one finger, as he found it made no mark; but he now hastily +began again, using the ink, that was trickling down his face, as long as +it lasted.) + +"Then the words don't _fit_ you," said the King, looking round the court +with a smile. There was a dead silence. + +"It's a pun!" the King added in an angry tone, and everybody laughed. + +"Let the jury consider their verdict," the King said, for about the +twentieth time that day. + +"No, no!" said the Queen. "Sentence first--verdict afterwards." + +"Stuff and nonsense!" said Alice loudly. "The idea of having the +sentence first!" + +"Hold your tongue!" said the Queen, turning purple. + +"I won't!" said Alice. + +"Off with her head!" the Queen shouted at the top of her voice. Nobody +moved. + +"Who cares for _you_?" said Alice (she had grown to her full size by +this time). "You're nothing but a pack of cards!" + +[Illustration: _At this the whole pack rose up into the air, and came +flying down upon her_] + +At this the whole pack rose up into the air, and came flying down upon +her: she gave a little scream, half of fright and half of anger, and +tried to beat them off, and found herself lying on the bank, with her +head in the lap of her sister, who was gently brushing away some dead +leaves that had fluttered down from the trees upon her face. + +"Wake up, Alice dear!" said her sister. "Why, what a long sleep you've +had!" + +"Oh, I've had such a curious dream!" said Alice, and she told her +sister, as well as she could remember them, all these strange Adventures +of hers that you have just been reading about; and when she had +finished, her sister kissed her, and said "It _was_ a curious dream, +dear, certainly: but now run in to your tea; it's getting late." So +Alice got up and ran off, thinking while she ran, as well she might, +what a wonderful dream it had been. + + + + +BUT her sister sat still just as she had left her, leaning her head, +watching the setting sun, and thinking of little Alice and all her +wonderful Adventures, till she too began dreaming after a fashion, and +this was her dream: + +First, she dreamed of little Alice herself, and once again the tiny +hands were clasped upon her knee, and the bright eager eyes were looking +up into hers--she could hear the very tones of her voice, and see that +queer little toss of her head to keep back the wandering hair that +_would_ always get into her eyes--and still as she listened, or seemed +to listen, the whole place around her became alive with the strange +creatures of her little sister's dream. + +The long grass rustled at her feet as the White Rabbit hurried by--the +frightened Mouse splashed his way through the neighbouring pool--she +could hear the rattle of the teacups as the March Hare and his friends +shared their never-ending meal, and the shrill voice of the Queen +ordering off her unfortunate guests to execution--once more the pig-baby +was sneezing on the Duchess' knee, while plates and dishes crashed +around it--once more the shriek of the Gryphon, the squeaking of the +Lizard's slate-pencil, and the choking of the suppressed guinea-pigs, +filled the air, mixed up with the distant sobs of the miserable Mock +Turtle. + +So she sat on with closed eyes, and half believed herself in Wonderland, +though she knew she had but to open them again, and all would change to +dull reality--the grass would be only rustling in the wind, and the pool +rippling to the waving of the reeds--the rattling teacups would change +to the tinkling sheep-bells, and the Queen's shrill cries to the voice +of the shepherd boy--and the sneeze of the baby, the shriek of the +Gryphon, and all the other queer noises, would change (she knew) to the +confused clamour of the busy farm-yard--while the lowing of the cattle +in the distance would take the place of the Mock Turtle's heavy sobs. + +Lastly, she pictured to herself how this same little sister of hers +would, in the after-time, be herself a grown woman; and how she would +keep, through all her riper years, the simple and loving heart of her +childhood: and how she would gather about her other little children, +and make _their_ eyes bright and eager with many a strange tale, perhaps +even with the dream of Wonderland of long ago: and how she would feel +with all their simple sorrows, and find a pleasure in all their simple +joys, remembering her own child-life, and the happy summer days. + + +THE END + + + + + ILLUSTRATIONS REPRODUCED BY HENTSCHEL COLOURTYPE + TEXT PRINTED BY BALLANTYNE & COMPANY LTD + AT THE BALLANTYNE PRESS + TAVISTOCK STREET + LONDON + + * * * * * + +Transcriber's Notes: + +Page 8, opening quote added to text (doorway; "and even if) + +Page 33, "she" changed to "she's" (And she's such a) + +Page 37, "quiet" changed to "quite" (I'm quite tired of) + +Page 41, colon changed to period (arm, yer honour.) + +Page 42, "wont" changed to "want" (want to stay) + +Page 66, closing quotation mark added (to-morrow----") + +Page 69, single quotation mark changed to double (cat," said the +Duchess) + +Page 91, word "to" added to text (minute or two to) + +Page 103, word "as" added to the text (just as she had) + +Page 104, "hedge-hog" changed to "hedgehog" (send the hedgehog to) + +Page 126, end parenthesis added ("No, never") + +Page 153, added an apostrophe (What's in it?) + + + + + + +End of Project Gutenberg's Alice's Adventures in Wonderland, by Lewis Carroll + +*** END OF THIS PROJECT GUTENBERG EBOOK ALICE'S ADVENTURES IN WONDERLAND *** + +***** This file should be named 28885-8.txt or 28885-8.zip ***** +This and all associated files of various formats will be found in: + http://www.gutenberg.org/2/8/8/8/28885/ + +Produced by Jana Srna, Emmy and the Online Distributed +Proofreading Team at http://www.pgdp.net (This file was +produced from images generously made available by the +University of Florida Digital Collections.) + + +Updated editions will replace the previous one--the old editions +will be renamed. + +Creating the works from public domain print editions means that no +one owns a United States copyright in these works, so the Foundation +(and you!) can copy and distribute it in the United States without +permission and without paying copyright royalties. Special rules, +set forth in the General Terms of Use part of this license, apply to +copying and distributing Project Gutenberg-tm electronic works to +protect the PROJECT GUTENBERG-tm concept and trademark. Project +Gutenberg is a registered trademark, and may not be used if you +charge for the eBooks, unless you receive specific permission. If you +do not charge anything for copies of this eBook, complying with the +rules is very easy. You may use this eBook for nearly any purpose +such as creation of derivative works, reports, performances and +research. They may be modified and printed and given away--you may do +practically ANYTHING with public domain eBooks. Redistribution is +subject to the trademark license, especially commercial +redistribution. + + + +*** START: FULL LICENSE *** + +THE FULL PROJECT GUTENBERG LICENSE +PLEASE READ THIS BEFORE YOU DISTRIBUTE OR USE THIS WORK + +To protect the Project Gutenberg-tm mission of promoting the free +distribution of electronic works, by using or distributing this work +(or any other work associated in any way with the phrase "Project +Gutenberg"), you agree to comply with all the terms of the Full Project +Gutenberg-tm License (available with this file or online at +http://gutenberg.net/license). + + +Section 1. General Terms of Use and Redistributing Project Gutenberg-tm +electronic works + +1.A. By reading or using any part of this Project Gutenberg-tm +electronic work, you indicate that you have read, understand, agree to +and accept all the terms of this license and intellectual property +(trademark/copyright) agreement. If you do not agree to abide by all +the terms of this agreement, you must cease using and return or destroy +all copies of Project Gutenberg-tm electronic works in your possession. +If you paid a fee for obtaining a copy of or access to a Project +Gutenberg-tm electronic work and you do not agree to be bound by the +terms of this agreement, you may obtain a refund from the person or +entity to whom you paid the fee as set forth in paragraph 1.E.8. + +1.B. "Project Gutenberg" is a registered trademark. It may only be +used on or associated in any way with an electronic work by people who +agree to be bound by the terms of this agreement. There are a few +things that you can do with most Project Gutenberg-tm electronic works +even without complying with the full terms of this agreement. See +paragraph 1.C below. There are a lot of things you can do with Project +Gutenberg-tm electronic works if you follow the terms of this agreement +and help preserve free future access to Project Gutenberg-tm electronic +works. See paragraph 1.E below. + +1.C. The Project Gutenberg Literary Archive Foundation ("the Foundation" +or PGLAF), owns a compilation copyright in the collection of Project +Gutenberg-tm electronic works. Nearly all the individual works in the +collection are in the public domain in the United States. If an +individual work is in the public domain in the United States and you are +located in the United States, we do not claim a right to prevent you from +copying, distributing, performing, displaying or creating derivative +works based on the work as long as all references to Project Gutenberg +are removed. Of course, we hope that you will support the Project +Gutenberg-tm mission of promoting free access to electronic works by +freely sharing Project Gutenberg-tm works in compliance with the terms of +this agreement for keeping the Project Gutenberg-tm name associated with +the work. You can easily comply with the terms of this agreement by +keeping this work in the same format with its attached full Project +Gutenberg-tm License when you share it without charge with others. + +1.D. The copyright laws of the place where you are located also govern +what you can do with this work. Copyright laws in most countries are in +a constant state of change. If you are outside the United States, check +the laws of your country in addition to the terms of this agreement +before downloading, copying, displaying, performing, distributing or +creating derivative works based on this work or any other Project +Gutenberg-tm work. The Foundation makes no representations concerning +the copyright status of any work in any country outside the United +States. + +1.E. Unless you have removed all references to Project Gutenberg: + +1.E.1. The following sentence, with active links to, or other immediate +access to, the full Project Gutenberg-tm License must appear prominently +whenever any copy of a Project Gutenberg-tm work (any work on which the +phrase "Project Gutenberg" appears, or with which the phrase "Project +Gutenberg" is associated) is accessed, displayed, performed, viewed, +copied or distributed: + +This eBook is for the use of anyone anywhere at no cost and with +almost no restrictions whatsoever. You may copy it, give it away or +re-use it under the terms of the Project Gutenberg License included +with this eBook or online at www.gutenberg.net + +1.E.2. If an individual Project Gutenberg-tm electronic work is derived +from the public domain (does not contain a notice indicating that it is +posted with permission of the copyright holder), the work can be copied +and distributed to anyone in the United States without paying any fees +or charges. If you are redistributing or providing access to a work +with the phrase "Project Gutenberg" associated with or appearing on the +work, you must comply either with the requirements of paragraphs 1.E.1 +through 1.E.7 or obtain permission for the use of the work and the +Project Gutenberg-tm trademark as set forth in paragraphs 1.E.8 or +1.E.9. + +1.E.3. If an individual Project Gutenberg-tm electronic work is posted +with the permission of the copyright holder, your use and distribution +must comply with both paragraphs 1.E.1 through 1.E.7 and any additional +terms imposed by the copyright holder. Additional terms will be linked +to the Project Gutenberg-tm License for all works posted with the +permission of the copyright holder found at the beginning of this work. + +1.E.4. Do not unlink or detach or remove the full Project Gutenberg-tm +License terms from this work, or any files containing a part of this +work or any other work associated with Project Gutenberg-tm. + +1.E.5. Do not copy, display, perform, distribute or redistribute this +electronic work, or any part of this electronic work, without +prominently displaying the sentence set forth in paragraph 1.E.1 with +active links or immediate access to the full terms of the Project +Gutenberg-tm License. + +1.E.6. You may convert to and distribute this work in any binary, +compressed, marked up, nonproprietary or proprietary form, including any +word processing or hypertext form. However, if you provide access to or +distribute copies of a Project Gutenberg-tm work in a format other than +"Plain Vanilla ASCII" or other format used in the official version +posted on the official Project Gutenberg-tm web site (www.gutenberg.net), +you must, at no additional cost, fee or expense to the user, provide a +copy, a means of exporting a copy, or a means of obtaining a copy upon +request, of the work in its original "Plain Vanilla ASCII" or other +form. Any alternate format must include the full Project Gutenberg-tm +License as specified in paragraph 1.E.1. + +1.E.7. Do not charge a fee for access to, viewing, displaying, +performing, copying or distributing any Project Gutenberg-tm works +unless you comply with paragraph 1.E.8 or 1.E.9. + +1.E.8. You may charge a reasonable fee for copies of or providing +access to or distributing Project Gutenberg-tm electronic works provided +that + +- You pay a royalty fee of 20% of the gross profits you derive from + the use of Project Gutenberg-tm works calculated using the method + you already use to calculate your applicable taxes. The fee is + owed to the owner of the Project Gutenberg-tm trademark, but he + has agreed to donate royalties under this paragraph to the + Project Gutenberg Literary Archive Foundation. Royalty payments + must be paid within 60 days following each date on which you + prepare (or are legally required to prepare) your periodic tax + returns. Royalty payments should be clearly marked as such and + sent to the Project Gutenberg Literary Archive Foundation at the + address specified in Section 4, "Information about donations to + the Project Gutenberg Literary Archive Foundation." + +- You provide a full refund of any money paid by a user who notifies + you in writing (or by e-mail) within 30 days of receipt that s/he + does not agree to the terms of the full Project Gutenberg-tm + License. You must require such a user to return or + destroy all copies of the works possessed in a physical medium + and discontinue all use of and all access to other copies of + Project Gutenberg-tm works. + +- You provide, in accordance with paragraph 1.F.3, a full refund of any + money paid for a work or a replacement copy, if a defect in the + electronic work is discovered and reported to you within 90 days + of receipt of the work. + +- You comply with all other terms of this agreement for free + distribution of Project Gutenberg-tm works. + +1.E.9. If you wish to charge a fee or distribute a Project Gutenberg-tm +electronic work or group of works on different terms than are set +forth in this agreement, you must obtain permission in writing from +both the Project Gutenberg Literary Archive Foundation and Michael +Hart, the owner of the Project Gutenberg-tm trademark. Contact the +Foundation as set forth in Section 3 below. + +1.F. + +1.F.1. Project Gutenberg volunteers and employees expend considerable +effort to identify, do copyright research on, transcribe and proofread +public domain works in creating the Project Gutenberg-tm +collection. Despite these efforts, Project Gutenberg-tm electronic +works, and the medium on which they may be stored, may contain +"Defects," such as, but not limited to, incomplete, inaccurate or +corrupt data, transcription errors, a copyright or other intellectual +property infringement, a defective or damaged disk or other medium, a +computer virus, or computer codes that damage or cannot be read by +your equipment. + +1.F.2. LIMITED WARRANTY, DISCLAIMER OF DAMAGES - Except for the "Right +of Replacement or Refund" described in paragraph 1.F.3, the Project +Gutenberg Literary Archive Foundation, the owner of the Project +Gutenberg-tm trademark, and any other party distributing a Project +Gutenberg-tm electronic work under this agreement, disclaim all +liability to you for damages, costs and expenses, including legal +fees. YOU AGREE THAT YOU HAVE NO REMEDIES FOR NEGLIGENCE, STRICT +LIABILITY, BREACH OF WARRANTY OR BREACH OF CONTRACT EXCEPT THOSE +PROVIDED IN PARAGRAPH F3. YOU AGREE THAT THE FOUNDATION, THE +TRADEMARK OWNER, AND ANY DISTRIBUTOR UNDER THIS AGREEMENT WILL NOT BE +LIABLE TO YOU FOR ACTUAL, DIRECT, INDIRECT, CONSEQUENTIAL, PUNITIVE OR +INCIDENTAL DAMAGES EVEN IF YOU GIVE NOTICE OF THE POSSIBILITY OF SUCH +DAMAGE. + +1.F.3. LIMITED RIGHT OF REPLACEMENT OR REFUND - If you discover a +defect in this electronic work within 90 days of receiving it, you can +receive a refund of the money (if any) you paid for it by sending a +written explanation to the person you received the work from. If you +received the work on a physical medium, you must return the medium with +your written explanation. The person or entity that provided you with +the defective work may elect to provide a replacement copy in lieu of a +refund. If you received the work electronically, the person or entity +providing it to you may choose to give you a second opportunity to +receive the work electronically in lieu of a refund. If the second copy +is also defective, you may demand a refund in writing without further +opportunities to fix the problem. + +1.F.4. Except for the limited right of replacement or refund set forth +in paragraph 1.F.3, this work is provided to you 'AS-IS' WITH NO OTHER +WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +WARRANTIES OF MERCHANTIBILITY OR FITNESS FOR ANY PURPOSE. + +1.F.5. Some states do not allow disclaimers of certain implied +warranties or the exclusion or limitation of certain types of damages. +If any disclaimer or limitation set forth in this agreement violates the +law of the state applicable to this agreement, the agreement shall be +interpreted to make the maximum disclaimer or limitation permitted by +the applicable state law. The invalidity or unenforceability of any +provision of this agreement shall not void the remaining provisions. + +1.F.6. INDEMNITY - You agree to indemnify and hold the Foundation, the +trademark owner, any agent or employee of the Foundation, anyone +providing copies of Project Gutenberg-tm electronic works in accordance +with this agreement, and any volunteers associated with the production, +promotion and distribution of Project Gutenberg-tm electronic works, +harmless from all liability, costs and expenses, including legal fees, +that arise directly or indirectly from any of the following which you do +or cause to occur: (a) distribution of this or any Project Gutenberg-tm +work, (b) alteration, modification, or additions or deletions to any +Project Gutenberg-tm work, and (c) any Defect you cause. + + +Section 2. Information about the Mission of Project Gutenberg-tm + +Project Gutenberg-tm is synonymous with the free distribution of +electronic works in formats readable by the widest variety of computers +including obsolete, old, middle-aged and new computers. It exists +because of the efforts of hundreds of volunteers and donations from +people in all walks of life. + +Volunteers and financial support to provide volunteers with the +assistance they need are critical to reaching Project Gutenberg-tm's +goals and ensuring that the Project Gutenberg-tm collection will +remain freely available for generations to come. In 2001, the Project +Gutenberg Literary Archive Foundation was created to provide a secure +and permanent future for Project Gutenberg-tm and future generations. +To learn more about the Project Gutenberg Literary Archive Foundation +and how your efforts and donations can help, see Sections 3 and 4 +and the Foundation web page at http://www.pglaf.org. + + +Section 3. Information about the Project Gutenberg Literary Archive +Foundation + +The Project Gutenberg Literary Archive Foundation is a non profit +501(c)(3) educational corporation organized under the laws of the +state of Mississippi and granted tax exempt status by the Internal +Revenue Service. The Foundation's EIN or federal tax identification +number is 64-6221541. Its 501(c)(3) letter is posted at +http://pglaf.org/fundraising. Contributions to the Project Gutenberg +Literary Archive Foundation are tax deductible to the full extent +permitted by U.S. federal laws and your state's laws. + +The Foundation's principal office is located at 4557 Melan Dr. S. +Fairbanks, AK, 99712., but its volunteers and employees are scattered +throughout numerous locations. Its business office is located at +809 North 1500 West, Salt Lake City, UT 84116, (801) 596-1887, email +business@pglaf.org. Email contact links and up to date contact +information can be found at the Foundation's web site and official +page at http://pglaf.org + +For additional contact information: + Dr. Gregory B. Newby + Chief Executive and Director + gbnewby@pglaf.org + + +Section 4. Information about Donations to the Project Gutenberg +Literary Archive Foundation + +Project Gutenberg-tm depends upon and cannot survive without wide +spread public support and donations to carry out its mission of +increasing the number of public domain and licensed works that can be +freely distributed in machine readable form accessible by the widest +array of equipment including outdated equipment. Many small donations +($1 to $5,000) are particularly important to maintaining tax exempt +status with the IRS. + +The Foundation is committed to complying with the laws regulating +charities and charitable donations in all 50 states of the United +States. Compliance requirements are not uniform and it takes a +considerable effort, much paperwork and many fees to meet and keep up +with these requirements. We do not solicit donations in locations +where we have not received written confirmation of compliance. To +SEND DONATIONS or determine the status of compliance for any +particular state visit http://pglaf.org + +While we cannot and do not solicit contributions from states where we +have not met the solicitation requirements, we know of no prohibition +against accepting unsolicited donations from donors in such states who +approach us with offers to donate. + +International donations are gratefully accepted, but we cannot make +any statements concerning tax treatment of donations received from +outside the United States. U.S. laws alone swamp our small staff. + +Please check the Project Gutenberg Web pages for current donation +methods and addresses. Donations are accepted in a number of other +ways including including checks, online payments and credit card +donations. To donate, please visit: http://pglaf.org/donate + + +Section 5. General Information About Project Gutenberg-tm electronic +works. + +Professor Michael S. Hart is the originator of the Project Gutenberg-tm +concept of a library of electronic works that could be freely shared +with anyone. For thirty years, he produced and distributed Project +Gutenberg-tm eBooks with only a loose network of volunteer support. + + +Project Gutenberg-tm eBooks are often created from several printed +editions, all of which are confirmed as Public Domain in the U.S. +unless a copyright notice is included. Thus, we do not necessarily +keep eBooks in compliance with any particular paper edition. + + +Most people start at our Web site which has the main PG search facility: + + http://www.gutenberg.net + +This Web site includes information about Project Gutenberg-tm, +including how to make donations to the Project Gutenberg Literary +Archive Foundation, how to help produce our new eBooks, and how to +subscribe to our email newsletter to hear about new eBooks. diff --git a/ult/ult_3/bar.txt b/ult/ult_3/bar.txt new file mode 100644 index 0000000..c0a5b08 --- /dev/null +++ b/ult/ult_3/bar.txt @@ -0,0 +1,8 @@ +"Bar" as the second term in the series may have developed in +electronics, where a digital signal which is considered "on" with a +negative or zero-voltage condition is identified with a horizontal bar +over the signal label; the notation for an inverted signal foo would +then be pronounced "foo bar". Bar may also be read as beyond all +repair, which is how it is used in the acronym FUBAR. + +source: wikipedia diff --git a/ult/ult_3/foo.txt b/ult/ult_3/foo.txt new file mode 100644 index 0000000..1fe9426 --- /dev/null +++ b/ult/ult_3/foo.txt @@ -0,0 +1,9 @@ +FOO is an abbreviation of Forward Observation Officer, a British Army +term in use as early as the First World War. The etymology of foo is +explored in the Internet Engineering Task Force (IETF) Request for +Comments 3092, which notes usage of foo in 1930s cartoons including +The Daffy Doc (with Daffy Duck) and comic strips, especially Smokey +Stover and Pogo. From there the term migrated into military slang, +where it merged with FUBAR. + +source: wikipedia diff --git a/ult/ult_3/marks.txt b/ult/ult_3/marks.txt new file mode 100644 index 0000000..f97b743 --- /dev/null +++ b/ult/ult_3/marks.txt @@ -0,0 +1,5 @@ +89 92 85 +98 47 67 +67 82 76 +78 97 60 +67 68 69 diff --git a/ult/ult_3/script.rst b/ult/ult_3/script.rst new file mode 100644 index 0000000..adc24b8 --- /dev/null +++ b/ult/ult_3/script.rst @@ -0,0 +1,375 @@ +.. Objectives +.. ---------- + + .. At the end of this tutorial, you will be able to: + + .. 1. Display the contents of files. + .. 2. Read only parts of a file. + .. 3. Look at the statistical information of a file. + +.. Prerequisites +.. ------------- + +.. 1. Using Linux tools - Part 1 +.. 2. Using Linux tools - Part 2 + +Script +------ + +.. L1 + +{{{ Show the first slide containing title, name of the production +team along with the logo of MHRD }}} + +.. R1 + +Hello friends and Welcome to the tutorial on +'Using linux tools - Part 3'. + +.. L2 + +{{{ Show slide with objectives }}} + +.. R2 + +At the end of this tutorial, you will be able to, + + 1. Display the contents of files. + #. Read only parts of a file. + #. Look at the statistical information of a file. + +.. L3 + +{{{ Switch to the pre-requisite slide }}} + +.. R3 + +Before beginning this tutorial,we would suggest you to complete the +tutorial on "Using Linux tools - Part 1" and "Using Linux tools - Part 2". + +.. R4 + +Let us begin with how to read a while as a whole. +The ``cat`` command is the most commonly used command to display the +contents of files. To view the contents of a file, say, ``foo.txt``, we +simply say, + +.. L4 +:: + + cat foo.txt + +.. R5 + +You can see the contents of the file on the terminal. + +The cat command could also be used to concatenate the text of multiple +files. Say, we have two files,``foo.txt`` and ``bar.txt``, + +.. L5 +:: + + cat foo.txt bar.txt + +.. R6 + +It shows the output of both the files concatenated on the standard output. +But if we had a long file,the output of ``cat`` command is not convenient +to read. +Let's look at the ``less`` command which turns out to be more useful in +such a case. + +``less `` allows you to view the contents of a text file one screen at a +time. + +.. L6 +:: + + less wonderland.txt + +.. R7 + +This shows us the file, one screen at a time. + +.. L7 + +.. L8 + +{{{ Show slide with, less }}} + +.. R8 + +``less`` has a list of commands that it allows you to use, once you have +started viewing a file. A few of the common ones have been listed below. + + * q: Quit. + + * [Arrows]/[Page Up]/[Page Down]/[Home]/[End]: Navigation. + + * ng: Jump to line number n. Default is the start of the file. + + * /pattern: Search for pattern. Regular expressions can be used. + + * h: Help. + +.. R9 + +Let us move ahead with the topic. Often we just would like to get some +statistical information about the file, rather than viewing the contents +of the file. The ``wc`` command prints these details for a file. + +.. L9 +:: + + wc wonderland.txt + +.. L10 + +{{{ Highlight the required portions accordingly while narrating }}} + +.. R10 + +As you can see, we get some information about the file. +The first number is the number of lines, the second is the number of words +and the third is the number of characters in the file. + +.. R11 + +Let us now look at a couple of commands that let you see parts of files, +instead of the whole file. The ``head`` and ``tail`` commands let you see +parts of files, as their names suggest, the start and the end of a file, +respectively. + +.. L11 +:: + + head wonderland.txt + +.. R12 + +It prints only the first 10 lines of the file. Similarly tail will print the +last 10 lines of the file. If we wish to change the number of lines that we +wish to view, we use the option ``-n``. + +.. L12 +:: + + head -n 1 wonderland.txt + +.. R13 + +It prints only the first line of the file. Similarly, we could print only +the last line of the file. + +The most common use of the tail command is to monitor a continuously +changing file, for instance a log file. Say you have a process running, +which is continuously logging it's information to a file, for instance the +logs of the system messages. + +.. L13 +:: + + tail -f /var/log/dmesg + +.. R14 + +This will show the last 10 lines of the file as expected, but along with +that, it starts monitoring the file. Any new lines added at the end of the +file, will be shown. To interrupt tail, while it is monitoring, hit +``Ctrl-C``. which will stop any process that is running from your +current shell. + +We looked at a couple of functions that allowed us to view a part of a file, +line-wise. We shall now look at a couple of commands that will allow us to look +at only certain sections of each line of a file and merge those parts. +Let's take the ``/etc/passwd`` file as our example file. It contains +information about each user of the system. + +.. L14 +:: + + cat /etc/passwd + +.. R15 + +In the output, let us look at only the first, fifth, sixth and the last +columns.The first column is the user name, the fifth column is the user info, +the sixth column is the home folder and the last column is the path of the +shell program that the user uses. +Let's say we wish to look at only the user names of all the users in the +file, how do we do it? + +.. L15 +:: + + cut -d : -f 1 /etc/passwd + +.. R16 + +It gives us the required output. Let us understand this operation in detail. +The first option ``-d`` specifies the delimiter between the various fields in +the file, in this case it is the semicolon. If no delimiter is specified, +the TAB character is assumed to be the delimiter. The ``-f`` option specifies, +the field number that we want to choose. +You can print multiple fields, by separating the field numbers with a +comma. + +Pause the video here, try out the following exercise and resume the video. + +.. L16 + +.. L17 + +{{{ Show slide with exercise 3 }}} + +.. R17 + +Print only the first, fifth and the seventh fields of the file ``/etc/passwd``. + +.. R18 + +Switch to the terminal for solution + +.. L18 + +{{{ continue from paused state }}} +{{{ Switch to the terminal }}} + +:: + + cut -d : -f 1,5,7 /etc/passwd + +.. R19 + +We get the correct output. +Instead of choosing by fields, ``cut`` also allows us to choose on the +basis of characters or bytes. For instance, we could get the first 4 +characters of all the entries of the file, ``/etc/passwd`` by saying, + +.. L19 +:: + + cut -c 1-4 /etc/passwd + +.. R20 + +The end limits of the ranges can take sensible default values, if they are +left out. For example, + +.. L20 +:: + + cut -c -4 /etc/passwd + +.. R21 + +It gives the same output as before. If the start position has not been +specified, it is assumed to be the start of the line. Similarly if the end +position is not specified, it is assumed to be the end of the line. + +.. L21 +:: + + cut -c 10- /etc/passwd + +.. R22 + +It prints all the characters from the 10th character up to the end of the +line. +Let us now solve an inverse problem. Let's say we have two columns of data +in two different files, and we wish to view them side by side. + +.. L22 + +.. L23 + +{{{ Show slide with, paste }}} + +.. R23 + +For instance, given a file containing the names of students in a file, +students.txt, and another file with the marks of the students,marks.txt, + +.. R24 + +we wish to view the contents, side by side. The ``paste`` command allows +us to do that. + +.. L24 +:: + + paste students.txt marks.txt + paste -s students.txt marks.txt + +.. R25 + +The first command gives us the output of the two files, next to each other +and the second command gives us the output one below the other. + +Now, this problem is a bit unrealistic because, we wouldn't have the marks +of students in a file, without any information about the student to which +they belong. Let's say our marks file had the first column as the roll +number of the student, followed by the marks of the students. What would we +then do, to get the same output that we got before? + +Essentially we need to use both, the ``cut`` and ``paste`` commands, but +how do we do that? That brings us to the concept of Redirection and Piping +which is covered in the next spoken tutorial. + +.. L25 + +.. L26 + +{{{ Switch to summary slide }}} + +.. R26 + +This brings us to the end of this tutorial. +In this tutorial, we have learnt to, + + 1. Display the contents of files using the ``cat`` command. + #. View the contents of a file one screen at a time using the + ``less`` command. + #. Display specific contents of file using the ``head`` and + ``tail`` commands. + #. Use the ``cut``, ``paste`` and ``wc`` commands. + +.. L27 + +{{{ Show self assessment questions slide }}} + +.. R27 + +Here are some self assessment questions for you to solve + +1. How to view lines from 1 to 15 in wonderland.txt? + +2. In ``cut`` command, how to specify space as the delimiter? + +.. L28 + +{{{ Solution of self assessment questions on slide }}} + +.. R28 + +And the answers, + +1. We can use the head command as, +:: + + head -15 wonderland.txt + +2. We use the -d option with the command as, +:: + + cut -d " " + +.. L29 + +{{{ Show the Thank you slide }}} + +.. R29 + +Hope you have enjoyed this tutorial and found it useful. +Thank you! + diff --git a/ult/ult_3/students.txt b/ult/ult_3/students.txt new file mode 100644 index 0000000..ddacd6b --- /dev/null +++ b/ult/ult_3/students.txt @@ -0,0 +1,5 @@ +Hussain +Dilbert +Anne +Raul +Sven diff --git a/ult/ult_3/ult3.tex b/ult/ult_3/ult3.tex new file mode 100644 index 0000000..2ece836 --- /dev/null +++ b/ult/ult_3/ult3.tex @@ -0,0 +1,170 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Using Linux Tools +% +% Author: FOSSEE +% Copyright (c) 2009, FOSSEE, IIT Bombay +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\documentclass[12pt,compress]{beamer} + +\mode +{ + \usetheme{Warsaw} + \useoutertheme{infolines} + \setbeamercovered{transparent} +} + +\usepackage[english]{babel} +\usepackage[latin1]{inputenc} +%\usepackage{times} +\usepackage[T1]{fontenc} + +% Taken from Fernando's slides. +\usepackage{ae,aecompl} +\usepackage{mathpazo,courier,euler} +\usepackage[scaled=.95]{helvet} + +\definecolor{darkgreen}{rgb}{0,0.5,0} + +\usepackage{listings} +\lstset{language=sh, + basicstyle=\ttfamily\bfseries, + commentstyle=\color{red}\itshape, + stringstyle=\color{darkgreen}, + showstringspaces=false, + keywordstyle=\color{blue}\bfseries} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% DOCUMENT STARTS +\begin{document} + +\begin{frame} + +\begin{center} +\vspace{12pt} + +\textcolor{blue}{\huge Using Linux Tools\\Part III} +\end{center} +\vspace{18pt} +\begin{center} +\vspace{10pt} +\includegraphics[scale=0.95]{../images/fossee-logo.png}\\ +\vspace{5pt} +\scriptsize Developed by FOSSEE Team, IIT-Bombay. \\ +\scriptsize Funded by National Mission on Education through ICT\\ +\scriptsize MHRD,Govt. of India\\ +\includegraphics[scale=0.30]{../images/iitb-logo.png}\\ +\end{center} +\end{frame} +\begin{frame} +\frametitle{Objectives} +\label{sec-2} + +At the end of this tutorial, you will be able to, +\begin{itemize} +\item Display the contents of files. +\item Read only parts of a file. +\item Look at the statistical information of a file. +\end{itemize} +\end{frame} + +\begin{frame} +\frametitle{Pre-requisite} +\label{sec-3} + +Spoken tutorial on - +\begin{itemize} +\item Using Linux tools -- Part I +\item Using Linux tools -- Part II +\end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{\texttt{less}} + \begin{itemize} + \item q: Quit + \item Arrows/Page Up/Page Down/Home/End: Navigation + \item ng: Jump to line number n + \item /pattern: Search. Regular expressions can be used + \item h: Help + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Exercise 1} + \begin{itemize} + \item Print only the first, fifth and the seventh fields of the file ``/etc/passwd''. + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{\texttt{paste}} + \begin{center} + \begin{tabular}{l|l} + \verb~students.txt~ & \verb~marks.txt~ \\ + Hussain & 89 92 85 \\ + Dilbert & 98 47 67 \\ + Anne & 67 82 76 \\ + Raul & 78 97 60 \\ + Sven & 67 68 69 \\ + \end{tabular} + \end{center} +\end{frame} + +\begin{frame} +\frametitle{Summary} +\label{sec-8} + + In this tutorial, we have learnt to, + + +\begin{itemize} +\item Display the contents of files using the ``cat'' command. +\item View the contents of a file one screen at a time using the + ``less'' command. +\item Display specific contents of file using the ``head'' and + ``tail'' commands. +\item Use the ``cut'', ``paste'' and ``wc'' commands. +\end{itemize} +\end{frame} + +\begin{frame}[fragile] +\frametitle{Evaluation} +\label{sec-9} + + +\begin{enumerate} +\item How to view lines from 1 to 15 in wonderland.txt ? +\vspace{15pt} +\item In ``cut'' command, how to specify space as the delimiter ? +\end{enumerate} +\end{frame} +\begin{frame} +\frametitle{Solutions} +\label{sec-10} + + +\begin{enumerate} +\item \$ head -15 wonderland.txt +\vspace{15pt} +\item \$ cut -d " " +\end{enumerate} +\end{frame} +\begin{frame} + + \begin{block}{} + \begin{center} + \textcolor{blue}{\Large THANK YOU!} + \end{center} + \end{block} +\begin{block}{} + \begin{center} + For more Information, visit our website\\ + \url{http://fossee.in/} + \end{center} + \end{block} +\end{frame} + +\end{document} + + diff --git a/ult/ult_3/wonderland.txt b/ult/ult_3/wonderland.txt new file mode 100644 index 0000000..0f62284 --- /dev/null +++ b/ult/ult_3/wonderland.txt @@ -0,0 +1,4047 @@ +Project Gutenberg's Alice's Adventures in Wonderland, by Lewis Carroll + +This eBook is for the use of anyone anywhere at no cost and with +almost no restrictions whatsoever. You may copy it, give it away or +re-use it under the terms of the Project Gutenberg License included +with this eBook or online at www.gutenberg.net + + +Title: Alice's Adventures in Wonderland + Illustrated by Arthur Rackham. With a Proem by Austin Dobson + +Author: Lewis Carroll + +Illustrator: Arthur Rackham + +Release Date: May 19, 2009 [EBook #28885] + +Language: English + +Character set encoding: ISO-8859-1 + +*** START OF THIS PROJECT GUTENBERG EBOOK ALICE'S ADVENTURES IN WONDERLAND *** + + + + +Produced by Jana Srna, Emmy and the Online Distributed +Proofreading Team at http://www.pgdp.net (This file was +produced from images generously made available by the +University of Florida Digital Collections.) + + + + + + + + + + + +ALICE'S ADVENTURES IN WONDERLAND + +[Illustration: "Alice"] + +[Illustration: + + ALICE'S·ADVENTURES + IN·WONDERLAND + BY·LEWIS·CARROLL + ILLUSTRATED·BY + ARTHUR·RACKHAM + + WITH A PROEM BY AUSTIN DOBSON + + LONDON·WILLIAM·HEINEMANN + NEW·YORK·DOUBLEDAY·PAGE·&·Co] + + PRINTED IN ENGLAND + + _'Tis two score years since CARROLL'S art, + With topsy-turvy magic, + Sent ALICE wondering through a part + Half-comic and half-tragic._ + + _Enchanting ALICE! Black-and-white + Has made your deeds perennial; + And naught save "Chaos and old Night" + Can part you now from TENNIEL;_ + + _But still you are a Type, and based + In Truth, like LEAR and HAMLET; + And Types may be re-draped to taste + In cloth-of-gold or camlet._ + + _Here comes afresh Costumier, then; + That Taste may gain a wrinkle + From him who drew with such deft pen + The rags of RIP VAN WINKLE!_ + + _AUSTIN DOBSON._ + + + + All in the golden afternoon + Full leisurely we glide; + For both our oars, with little skill, + By little arms are plied, + While little hands make vain pretence + Our wanderings to guide. + + Ah, cruel Three! In such an hour, + Beneath such dreamy weather, + To beg a tale of breath too weak + To stir the tiniest feather! + Yet what can one poor voice avail + Against three tongues together? + + Imperious Prima flashes forth + Her edict "to begin it"-- + In gentler tone Secunda hopes + "There will be nonsense in it!"-- + While Tertia interrupts the tale + Not _more_ than once a minute. + + Anon, to sudden silence won, + In fancy they pursue + The dream-child moving through a land + Of wonders wild and new, + In friendly chat with bird or beast-- + And half believe it true. + + And ever, as the story drained + The wells of fancy dry. + And faintly strove that weary one + To put the subject by, + "The rest next time--" "It _is_ next time!" + The happy voices cry. + + Thus grew the tale of Wonderland: + Thus slowly, one by one, + Its quaint events were hammered out-- + And now the tale is done, + And home we steer, a merry crew, + Beneath the setting sun. + + Alice! a childish story take, + And with a gentle hand + Lay it where Childhood's dreams are twined + In Memory's mystic band, + Like pilgrim's wither'd wreath of flowers + Pluck'd in a far-off land. + + + + +CONTENTS + + + PAGE + + I. DOWN THE RABBIT-HOLE 1 + + II. THE POOL OF TEARS 13 + + III. A CAUCUS-RACE AND A LONG TALE 24 + + IV. THE RABBIT SENDS IN A LITTLE BILL 35 + + V. ADVICE FROM A CATERPILLAR 49 + + VI. PIG AND PEPPER 64 + + VII. A MAD TEA-PARTY 82 + + VIII. THE QUEEN'S CROQUET-GROUND 96 + + IX. THE MOCK TURTLE'S STORY 111 + + X. THE LOBSTER QUADRILLE 126 + + XI. WHO STOLE THE TARTS? 139 + + XII. ALICE'S EVIDENCE 150 + + + + +LIST OF THE PLATES + + + _To face page_ + + Alice _Frontispiece_ + + The Pool of Tears 22 + + They all crowded round it panting and + asking, "But who has won?" 28 + + "Why, Mary Ann, what are you doing out + here?" 36 + + Advice from a Caterpillar 50 + + An unusually large saucepan flew close + by it, and very nearly carried it off 70 + + It grunted again so violently that she + looked down into its face in some alarm 74 + + A Mad Tea-Party 84 + + The Queen turned angrily away from him + and said to the Knave, "Turn them over" 100 + + The Queen never left off quarrelling + with the other players, and shouting + "Off with his head!" or, "Off with her + head!" 116 + + The Mock Turtle drew a long breath and + said, "That's very curious" 132 + + Who stole the Tarts? 140 + + At this the whole pack rose up into the + air, and came flying down upon her 158 + + + + +CHAPTER I + + +[Sidenote: _Down the Rabbit-Hole_] + +ALICE was beginning to get very tired of sitting by her +sister on the bank, and of having nothing to do: once or twice she had +peeped into the book her sister was reading, but it had no pictures or +conversations in it, "and what is the use of a book," thought Alice, +"without pictures or conversations?" + +So she was considering in her own mind (as well as she could, for the +hot day made her feel very sleepy and stupid) whether the pleasure of +making a daisy-chain would be worth the trouble of getting up and +picking the daisies, when suddenly a White Rabbit with pink eyes ran +close by her. + +There was nothing so _very_ remarkable in that; nor did Alice think it +so _very_ much out of the way to hear the Rabbit say to itself, "Oh +dear! Oh dear! I shall be too late!" (when she thought it over +afterwards, it occurred to her that she ought to have wondered at this, +but at the time it all seemed quite natural); but when the Rabbit +actually _took a watch out of its waistcoat-pocket_, and looked at it, +and then hurried on, Alice started to her feet, for it flashed across +her mind that she had never before seen a rabbit with either a +waistcoat-pocket, or a watch to take out of it, and burning with +curiosity, she ran across the field after it, and was just in time to +see it pop down a large rabbit-hole under the hedge. + +In another moment down went Alice after it, never once considering how +in the world she was to get out again. + +The rabbit-hole went straight on like a tunnel for some way, and then +dipped suddenly down, so suddenly that Alice had not a moment to think +about stopping herself before she found herself falling down what seemed +to be a very deep well. + +[Illustration] + +Either the well was very deep, or she fell very slowly, for she had +plenty of time as she went down to look about her, and to wonder what +was going to happen next. First, she tried to look down and make out +what she was coming to, but it was too dark to see anything; then she +looked at the sides of the well and noticed that they were filled with +cupboards and book-shelves: here and there she saw maps and pictures +hung upon pegs. She took down a jar from one of the shelves as she +passed; it was labelled "ORANGE MARMALADE," but to her disappointment it +was empty; she did not like to drop the jar for fear of killing +somebody underneath, so managed to put it into one of the cupboards as +she fell past it. + +"Well!" thought Alice to herself. "After such a fall as this, I shall +think nothing of tumbling down stairs! How brave they'll all think me at +home! Why, I wouldn't say anything about it, even if I fell off the top +of the house!" (Which was very likely true.) + +Down, down, down. Would the fall _never_ come to an end? "I wonder how +many miles I've fallen by this time?" she said aloud. "I must be getting +somewhere near the centre of the earth. Let me see: that would be four +thousand miles down. I think--" (for, you see, Alice had learnt several +things of this sort in her lessons in the schoolroom, and though this +was not a _very_ good opportunity for showing off her knowledge, as +there was no one to listen to her, still it was good practice to say it +over) "--yes, that's about the right distance--but then I wonder what +Latitude or Longitude I've got to?" (Alice had no idea what Latitude +was, or Longitude either, but thought they were nice grand words to +say.) + +Presently she began again. "I wonder if I shall fall right _through_ the +earth! How funny it'll seem to come out among the people that walk with +their heads downwards! The Antipathies, I think--" (she was rather glad +there _was_ no one listening, this time, as it didn't sound at all the +right word) "--but I shall have to ask them what the name of the country +is, you know. Please, Ma'am, is this New Zealand or Australia?" (and she +tried to curtsey as she spoke--fancy _curtseying_ as you're falling +through the air! Do you think you could manage it?) "And what an +ignorant little girl she'll think me! No, it'll never do to ask: perhaps +I shall see it written up somewhere." + +Down, down, down. There was nothing else to do, so Alice soon began +talking again. "Dinah'll miss me very much to-night, I should think!" +(Dinah was the cat.) "I hope they'll remember her saucer of milk at +tea-time. Dinah, my dear, I wish you were down here with me! There are +no mice in the air, I'm afraid, but you might catch a bat, and that's +very like a mouse, you know. But do cats eat bats, I wonder?" And here +Alice began to get rather sleepy, and went on saying to herself, in a +dreamy sort of way, "Do cats eat bats? Do cats eat bats?" and sometimes, +"Do bats eat cats?" for, you see, as she couldn't answer either +question, it didn't much matter which way she put it. She felt that she +was dozing off, and had just begun to dream that she was walking hand in +hand with Dinah, and saying to her very earnestly, "Now, Dinah, tell me +the truth: did you ever eat a bat?" when suddenly, thump! thump! down +she came upon a heap of sticks and dry leaves, and the fall was over. + +Alice was not a bit hurt, and she jumped up on to her feet in a moment: +she looked up, but it was all dark overhead; before her was another long +passage, and the White Rabbit was still in sight, hurrying down it. +There was not a moment to be lost: away went Alice like the wind, and +was just in time to hear it say, as it turned a corner, "Oh my ears and +whiskers, how late it's getting!" She was close behind it when she +turned the corner, but the Rabbit was no longer to be seen: she found +herself in a long, low hall, which was lit up by a row of lamps hanging +from the roof. + +There were doors all round the hall, but they were all locked; and when +Alice had been all the way down one side and up the other, trying every +door, she walked sadly down the middle, wondering how she was ever to +get out again. + +Suddenly she came upon a little three-legged table, all made of solid +glass; there was nothing on it but a tiny golden key, and Alice's first +idea was that this might belong to one of the doors of the hall; but, +alas! either the locks were too large, or the key was too small, but at +any rate it would not open any of them. However, on the second time +round, she came upon a low curtain she had not noticed before, and +behind it was a little door about fifteen inches high: she tried the +little golden key in the lock, and to her great delight it fitted! + +Alice opened the door and found that it led into a small passage, not +much larger than a rat-hole: she knelt down and looked along the passage +into the loveliest garden you ever saw. How she longed to get out of +that dark hall, and wander about among those beds of bright flowers and +those cool fountains, but she could not even get her head through the +doorway; "and even if my head would go through," thought poor Alice, "it +would be of very little use without my shoulders. Oh, how I wish I could +shut up like a telescope! I think I could, if I only knew how to begin." +For, you see, so many out-of-the-way things had happened lately, that +Alice had begun to think that very few things indeed were really +impossible. + +There seemed to be no use in waiting by the little door, so she went +back to the table, half hoping she might find another key on it, or at +any rate a book of rules for shutting people up like telescopes: this +time she found a little bottle on it ("which certainly was not here +before," said Alice,) and tied round the neck of the bottle was a paper +label, with the words "DRINK ME" beautifully printed on it in large +letters. + +It was all very well to say "Drink me," but the wise little Alice was +not going to do _that_ in a hurry. "No, I'll look first," she said, "and +see whether it's marked '_poison_' or not;" for she had read several +nice little stories about children who had got burnt, and eaten up by +wild beasts, and other unpleasant things, all because they _would_ not +remember the simple rules their friends had taught them: such as, that a +red-hot poker will burn you if you hold it too long; and that, if you +cut your finger _very_ deeply with a knife, it usually bleeds; and she +had never forgotten that, if you drink much from a bottle marked +"poison," it is almost certain to disagree with you, sooner or later. + +However, this bottle was _not_ marked "poison," so Alice ventured to +taste it, and finding it very nice (it had, in fact, a sort of mixed +flavour of cherry-tart, custard, pineapple, roast turkey, coffee, and +hot buttered toast,) she very soon finished it off. + + * * * * * + +"What a curious feeling!" said Alice. "I must be shutting up like a +telescope." + +And so it was indeed: she was now only ten inches high, and her face +brightened up at the thought that she was now the right size for going +through that little door into that lovely garden. First, however, she +waited for a few minutes to see if she was going to shrink any further: +she felt a little nervous about this: "for it might end, you know," said +Alice to herself, "in my going out altogether, like a candle. I wonder +what I should be like then?" And she tried to fancy what the flame of a +candle looks like after the candle is blown out, for she could not +remember ever having seen such a thing. + +After a while, finding that nothing more happened, she decided on going +into the garden at once; but, alas for poor Alice! when she got to the +door, she found she had forgotten the little golden key, and when she +went back to the table for it, she found she could not possibly reach +it: she could see it quite plainly through the glass, and she tried her +best to climb up one of the legs of the table, but it was too slippery; +and when she had tired herself out with trying, the poor little thing +sat down and cried. + +"Come, there's no use in crying like that!" said Alice to herself, +rather sharply. "I advise you to leave off this minute!" She generally +gave herself very good advice (though she very seldom followed it), and +sometimes she scolded herself so severely as to bring tears into her +eyes; and once she remembered trying to box her own ears for having +cheated herself in a game of croquet she was playing against herself, +for this curious child was very fond of pretending to be two people. +"But it's no use now," thought poor Alice, "to pretend to be two people! +Why there's hardly enough of me left to make _one_ respectable person!" + +Soon her eye fell on a little glass box that was lying under the table: +she opened it, and found in it a very small cake, on which the words +"EAT ME" were beautifully marked in currants. "Well, I'll eat it," said +Alice, "and if it makes me grow larger, I can reach the key; and if it +makes me grow smaller, I can creep under the door; so either way I'll +get into the garden, and I don't care which happens!" + +She ate a little bit, and said anxiously to herself, "Which way? Which +way?" holding her hand on the top of her head to feel which way it was +growing, and she was quite surprised to find that she remained the same +size; to be sure, this is what generally happens when one eats cake, +but Alice had got so much into the way of expecting nothing but +out-of-the-way things to happen, that it seemed quite dull and stupid +for life to go on in the common way. + +So she set to work, and very soon finished off the cake. + + * * * * * + + + + +CHAPTER II + + +[Sidenote: _Pool of Tears_] + +"CURIOUSER and curiouser!" cried Alice (she was so much +surprised, that for a moment she quite forgot how to speak good +English); "now I'm opening out like the largest telescope that ever was! +Good-bye, feet!" (for when she looked down at her feet, they seemed to +be almost out of sight, they were getting so far off). "Oh, my poor +little feet, I wonder who will put on your shoes and stockings for you +now, dears? I'm sure _I_ sha'n't be able! I shall be a great deal too +far off to trouble myself about you: you must manage the best way you +can--but I must be kind to them," thought Alice, "or perhaps they won't +walk the way I want to go! Let me see: I'll give them a new pair of +boots every Christmas." + +And she went on planning to herself how she would manage it. "They must +go by the carrier," she thought; "and how funny it'll seem, sending +presents to one's own feet! And how odd the directions will look! + + Alice's Right Foot, Esq. + Hearthrug, + near the Fender, + (with Alice's love). + +Oh dear, what nonsense I'm talking!" + +Just then her head struck against the roof of the hall: in fact she was +now rather more than nine feet high, and she at once took up the little +golden key and hurried off to the garden door. + +Poor Alice! It was as much as she could do, lying down on one side, to +look through into the garden with one eye; but to get through was more +hopeless than ever: she sat down and began to cry again. + +"You ought to be ashamed of yourself," said Alice, "a great girl like +you" (she might well say this), "to go on crying in this way! Stop this +moment, I tell you!" But she went on all the same, shedding gallons of +tears, until there was a large pool all round her, about four inches +deep and reaching half down the hall. + +[Illustration: CURIOUSER AND CURIOUSER] + +After a time she heard a little pattering of feet in the distance, and +she hastily dried her eyes to see what was coming. It was the White +Rabbit returning, splendidly dressed, with a pair of white kid gloves in +one hand and a large fan in the other: he came trotting along in a great +hurry, muttering to himself as he came, "Oh! the Duchess, the Duchess! +Oh! won't she be savage if I've kept her waiting!" Alice felt so +desperate that she was ready to ask help of any one; so, when the +Rabbit came near her, she began, in a low, timid voice, "If you please, +sir----" The Rabbit started violently, dropped the white kid gloves and +the fan, and scurried away into the darkness as hard as he could go. + +Alice took up the fan and gloves, and, as the hall was very hot, she +kept fanning herself all the time she went on talking! "Dear, dear! How +queer everything is to-day! And yesterday things went on just as usual. +I wonder if I've been changed during the night? Let me think: _was_ I +the same when I got up this morning? I almost think I can remember +feeling a little different. But if I'm not the same, the next question +is, who in the world am I? Ah, _that's_ the great puzzle!" And she began +thinking over all the children she knew that were of the same age as +herself, to see if she could have been changed for any of them. + +"I'm sure I'm not Ada," she said, "for her hair goes in such long +ringlets, and mine doesn't go in ringlets at all; and I'm sure I can't +be Mabel, for I know all sorts of things, and she, oh! she knows such a +very little! Besides, _she's_ she, and _I'm_ I, and--oh dear, how +puzzling it all is! I'll try if I know all the things I used to know. +Let me see: four times five is twelve, and four times six is thirteen, +and four times seven is--oh dear! I shall never get to twenty at that +rate! However, the Multiplication Table doesn't signify: let's try +Geography. London is the capital of Paris, and Paris is the capital of +Rome, and Rome--no, _that's_ all wrong, I'm certain! I must have been +changed for Mabel! I'll try and say '_How doth the little----_'" and she +crossed her hands on her lap as if she were saying lessons, and began to +repeat it, but her voice sounded hoarse and strange, and the words did +not come the same as they used to do:-- + + "How doth the little crocodile + Improve his shining tail, + And pour the waters of the Nile + On every golden scale! + + "How cheerfully he seems to grin, + How neatly spreads his claws, + And welcomes little fishes in, + With gently smiling jaws!" + +"I'm sure those are not the right words," said poor Alice, and her eyes +filled with tears again as she went on. "I must be Mabel, after all, and +I shall have to go and live in that poky little house, and have next to +no toys to play with, and oh! ever so many lessons to learn! No, I've +made up my mind about it; if I'm Mabel, I'll stay down here! It'll be no +use their putting their heads down and saying, 'Come up again, dear!' I +shall only look up and say, 'Who am I then? Tell me that first, and +then, if I like being that person, I'll come up: if not, I'll stay down +here till I'm somebody else'--but, oh dear!" cried Alice with a sudden +burst of tears, "I do wish they _would_ put their heads down! I am so +_very_ tired of being all alone here!" + +As she said this she looked down at her hands, and was surprised to see +that she had put on one of the Rabbit's little white kid gloves while +she was talking. "How _can_ I have done that?" she thought. "I must be +growing small again." She got up and went to the table to measure +herself by it, and found that, as nearly as she could guess, she was now +about two feet high, and was going on shrinking rapidly: she soon found +out that the cause of this was the fan she was holding, and she dropped +it hastily, just in time to avoid shrinking away altogether. + +"That _was_ a narrow escape!" said Alice, a good deal frightened at the +sudden change, but very glad to find herself still in existence; "and +now for the garden!" and she ran with all speed back to the little door: +but alas! the little door was shut again, and the little golden key was +lying on the glass table as before, "and things are worse than ever," +thought the poor child, "for I never was so small as this before, never! +And I declare it's too bad, that it is!" + +As she said these words her foot slipped, and in another moment, splash! +she was up to her chin in salt water. Her first idea was that she had +somehow fallen into the sea, "and in that case I can go back by +railway," she said to herself. (Alice had been to the seaside once in +her life, and had come to the general conclusion, that wherever you go +to on the English coast you find a number of bathing machines in the +sea, some children digging in the sand with wooden spades, then a row +of lodging houses, and behind them a railway station.) However, she soon +made out that she was in the pool of tears which she had wept when she +was nine feet high. + +"I wish I hadn't cried so much!" said Alice, as she swam about, trying +to find her way out. "I shall be punished for it now, I suppose, by +being drowned in my own tears! That _will_ be a queer thing, to be sure! +However, everything is queer to-day." + +Just then she heard something splashing about in the pool a little way +off, and she swam nearer to make out what it was: at first she thought +it must be a walrus or hippopotamus, but then she remembered how small +she was now, and she soon made out that it was only a mouse that had +slipped in like herself. + +"Would it be of any use now," thought Alice, "to speak to this mouse? +Everything is so out-of-the-way down here, that I should think very +likely it can talk: at any rate, there's no harm in trying." So she +began: "O Mouse, do you know the way out of this pool? I am very tired +of swimming about here, O Mouse!" (Alice thought this must be the right +way of speaking to a mouse; she had never done such a thing before, but +she remembered having seen in her brother's Latin Grammar, "A mouse--of +a mouse--to a mouse--a mouse--O mouse!") The Mouse looked at her rather +inquisitively, and seemed to her to wink with one of its little eyes, +but it said nothing. + +"Perhaps it doesn't understand English," thought Alice; "I daresay it's +a French mouse, come over with William the Conqueror." (For, with all +her knowledge of history, Alice had no very clear notion how long ago +anything had happened.) So she began again: "Où est ma chatte?" which +was the first sentence in her French lesson-book. The Mouse gave a +sudden leap out of the water, and seemed to quiver all over with fright. +"Oh, I beg your pardon!" cried Alice hastily, afraid that she had hurt +the poor animal's feelings. "I quite forgot you didn't like cats." + +"Not like cats!" cried the Mouse, in a shrill, passionate voice. "Would +_you_ like cats if you were me?" + +"Well, perhaps not," said Alice in a soothing tone: "don't be angry +about it. And yet I wish I could show you our cat Dinah: I think you'd +take a fancy to cats if you could only see her. She is such a dear quiet +thing," Alice went on, half to herself, as she swam lazily about in the +pool, "and she sits purring so nicely by the fire, licking her paws and +washing her face--and she is such a nice soft thing to nurse--and she's +such a capital one for catching mice----oh, I beg your pardon!" cried +Alice again, for this time the Mouse was bristling all over, and she +felt certain it must be really offended. "We won't talk about her any +more if you'd rather not." + +"We, indeed!" cried the Mouse, who was trembling down to the end of his +tail. "As if _I_ would talk on such a subject! Our family always _hated_ +cats: nasty, low, vulgar things! Don't let me hear the name again!" + +[Illustration: _The Pool of Tears_] + +"I won't indeed!" said Alice, in a great hurry to change the subject of +conversation. "Are you--are you fond--of--of dogs?" The Mouse did not +answer, so Alice went on eagerly: "There is such a nice little dog near +our house I should like to show you! A little bright-eyed terrier, you +know, with oh, such long curly brown hair! And it'll fetch things +when you throw them, and it'll sit up and beg for its dinner, and all +sorts of things--I can't remember half of them--and it belongs to a +farmer, you know, and he says it's so useful, it's worth a hundred +pounds! He says it kills all the rats and--oh dear!" cried Alice in a +sorrowful tone, "I'm afraid I've offended it again!" For the Mouse was +swimming away from her as hard as it could go, and making quite a +commotion in the pool as it went. + +So she called softly after it, "Mouse dear! Do come back again, and we +won't talk about cats or dogs either, if you don't like them!" + +When the Mouse heard this, it turned round and swam slowly back to her: +its face was quite pale (with passion, Alice thought), and it said in a +low trembling voice, "Let us get to the shore, and then I'll tell you my +history, and you'll understand why it is I hate cats and dogs." + +It was high time to go, for the pool was getting quite crowded with the +birds and animals that had fallen into it: there were a Duck and a Dodo, +a Lory and an Eaglet, and several other curious creatures. Alice led the +way, and the whole party swam to the shore. + + + + +CHAPTER III + + +[Sidenote: _A Caucus-race and a Long Tale_] + +THEY were indeed a queer-looking party that assembled on +the bank--the birds with draggled feathers, the animals with their fur +clinging close to them, and all dripping wet, cross, and uncomfortable. + +The first question of course was, how to get dry again: they had a +consultation about this, and after a few minutes it seemed quite natural +to Alice to find herself talking familiarly with them, as if she had +known them all her life. Indeed, she had quite a long argument with the +Lory, who at last turned sulky, and would only say, "I am older than +you, and must know better;" and this Alice would not allow without +knowing how old it was, and, as the Lory positively refused to tell its +age, there was no more to be said. + +At last the Mouse, who seemed to be a person of authority among them, +called out "Sit down, all of you, and listen to me! _I'll_ soon make you +dry enough!" They all sat down at once, in a large ring, with the Mouse +in the middle. Alice kept her eyes anxiously fixed on it, for she felt +sure she would catch a bad cold if she did not get dry very soon. + +"Ahem!" said the Mouse with an important air. "Are you all ready? This +is the driest thing I know. Silence all round, if you please! 'William +the Conqueror, whose cause was favoured by the pope, was soon submitted +to by the English, who wanted leaders, and had been of late much +accustomed to usurpation and conquest. Edwin and Morcar, the earls of +Mercia and Northumbria--'" + +"Ugh!" said the Lory, with a shiver. + +"I beg your pardon!" said the Mouse, frowning, but very politely. "Did +you speak?" + +"Not I!" said the Lory hastily. + +"I thought you did," said the Mouse, "--I proceed. 'Edwin and Morcar, +the earls of Mercia and Northumbria, declared for him: and even +Stigand, the patriotic Archbishop of Canterbury, found it advisable--'" + +"Found _what_?" said the Duck. + +"Found _it_," the Mouse replied rather crossly: "of course you know what +'it' means." + +"I know what 'it' means well enough, when _I_ find a thing," said the +Duck; "it's generally a frog or a worm. The question is, what did the +archbishop find?" + +The Mouse did not notice this question, but hurriedly went on, "'--found +it advisable to go with Edgar Atheling to meet William and offer him the +crown. William's conduct at first was moderate. But the insolence of his +Normans--' How are you getting on now, my dear?" it continued, turning +to Alice as it spoke. + +"As wet as ever," said Alice in a melancholy tone; "doesn't seem to dry +me at all." + +"In that case," said the Dodo solemnly, rising to its feet, "I move that +the meeting adjourn, for the immediate adoption of more energetic +remedies----" + +"Speak English!" said the Eaglet. "I don't know the meaning of half +those long words, and, what's more, I don't believe you do either!" And +the Eaglet bent down its head to hide a smile: some of the other birds +tittered audibly. + +"What I was going to say," said the Dodo in an offended tone, "was that +the best thing to get us dry would be a Caucus-race." + +"What _is_ a Caucus-race?" said Alice; not that she much wanted to know, +but the Dodo had paused as if it thought that _somebody_ ought to speak, +and no one else seemed inclined to say anything. + +"Why," said the Dodo, "the best way to explain it is to do it." (And, as +you might like to try the thing yourself some winter day, I will tell +you how the Dodo managed it.) + +First it marked out a race-course, in a sort of circle, ("the exact +shape doesn't matter," it said,) and then all the party were placed +along the course, here and there. There was no "One, two, three, and +away," but they began running when they liked, and left off when they +liked, so that it was not easy to know when the race was over. However, +when they had been running half an hour or so, and were quite dry again, +the Dodo suddenly called "The race is over!" and they all crowded round +it, panting, and asking "But who has won?" + +This question the Dodo could not answer without a great deal of thought, +and it stood for a long time with one finger pressed upon its forehead +(the position in which you usually see Shakespeare, in the pictures of +him), while the rest waited in silence. At last the Dodo said +"_Everybody_ has won, and _all_ must have prizes." + +"But who is to give the prizes?" quite a chorus of voices asked. + +"Why, _she_, of course," said the Dodo, pointing to Alice with one +finger; and the whole party at once crowded round her, calling out in a +confused way, "Prizes! Prizes!" + +Alice had no idea what to do, and in despair she put her hand in her +pocket, and pulled out a box of comfits (luckily the salt water had not +got into it), and handed them round as prizes. There was exactly one +apiece all round. + + _They all crowded round it panting and asking, + "But who has won?"_ + +[Illustration] + +"But she must have a prize herself, you know," said the Mouse. + +"Of course," the Dodo replied very gravely. + +"What else have you got in your pocket?" it went on, turning to Alice. + +"Only a thimble," said Alice sadly. + +"Hand it over here," said the Dodo. + +Then they all crowded round her once more, while the Dodo solemnly +presented the thimble, saying "We beg your acceptance of this elegant +thimble;" and, when it had finished this short speech, they all cheered. + +Alice thought the whole thing very absurd, but they all looked so grave +that she did not dare to laugh; and, as she could not think of anything +to say, she simply bowed, and took the thimble, looking as solemn as she +could. + +The next thing was to eat the comfits; this caused some noise and +confusion, as the large birds complained that they could not taste +theirs, and the small ones choked and had to be patted on the back. +However, it was over at last, and they sat down again in a ring, and +begged the Mouse to tell them something more. + +"You promised to tell me your history, you know," said Alice, "and why +it is you hate--C and D," she added in a whisper, half afraid that it +would be offended again. + +[Illustration] + +"Mine is a long and sad tale!" said the Mouse, turning to Alice and +sighing. + +"It _is_ a long tail, certainly," said Alice, looking down with wonder +at the Mouse's tail; "but why do you call it sad?" And she kept on +puzzling about it while the Mouse was speaking, so that her idea of the +tale was something like this:-- + + "Fury said to + a mouse, That + he met in the + house, 'Let + us both go + to law: _I_ + will prose- + cute _you_.-- + Come, I'll + take no de- + nial: We + must have + the trial; + For really + this morn- + ing I've + nothing + to do.' + Said the + mouse to + the cur, + 'Such a + trial, dear + sir, With + no jury + or judge, + would + be wast- + ing our + breath.' + 'I'll be + judge, + I'll be + jury,' + said + cun- + ning + old + Fury: + 'I'll + try + the + whole + cause, + and + con- + demn + you to + death.' + +"You are not attending!" said the Mouse to Alice severely. "What are you +thinking of?" + +"I beg your pardon," said Alice very humbly: "you had got to the fifth +bend, I think?" + +"I had _not_!" cried the Mouse, angrily. + +"A knot!" said Alice, always ready to make herself useful, and looking +anxiously about her. "Oh, do let me help to undo it!" + +"I shall do nothing of the sort," said the Mouse, getting up and walking +away. "You insult me by talking such nonsense!" + +"I didn't mean it!" pleaded poor Alice. "But you're so easily offended, +you know!" + +The Mouse only growled in reply. + +"Please come back and finish your story!" Alice called after it. And the +others all joined in chorus, "Yes, please do!" but the Mouse only shook +its head impatiently and walked a little quicker. + +"What a pity it wouldn't stay!" sighed the Lory, as soon as it was quite +out of sight; and an old Crab took the opportunity of saying to her +daughter, "Ah, my dear! Let this be a lesson to you never to lose +_your_ temper!" "Hold your tongue, Ma!" said the young Crab, a little +snappishly. "You're enough to try the patience of an oyster!" + +"I wish I had our Dinah here, I know I do!" said Alice aloud, addressing +nobody in particular. "She'd soon fetch it back!" + +"And who is Dinah, if I might venture to ask the question?" said the +Lory. + +Alice replied eagerly, for she was always ready to talk about her pet: +"Dinah's our cat. And she's such a capital one for catching mice, you +ca'n't think! And oh, I wish you could see her after the birds! Why, +she'll eat a little bird as soon as look at it!" + +This speech caused a remarkable sensation among the party. Some of the +birds hurried off at once; one old Magpie began wrapping itself up very +carefully, remarking "I really must be getting home; the night-air +doesn't suit my throat!" and a Canary called out in a trembling voice to +its children "Come away, my dears! It's high time you were all in bed!" +On various pretexts they all moved off, and Alice was soon left alone. + +"I wish I hadn't mentioned Dinah!" she said to herself in a melancholy +tone. "Nobody seems to like her, down here, and I'm sure she's the best +cat in the world! Oh, my dear Dinah! I wonder if I shall ever see you +any more!" And here poor Alice began to cry again, for she felt very +lonely and low-spirited. In a little while, however, she again heard a +little pattering of footsteps in the distance, and she looked up +eagerly, half hoping that the Mouse had changed his mind, and was coming +back to finish his story. + + + + +CHAPTER IV + + +[Sidenote: _The Rabbit sends in a Little Bill_] + +IT was the White Rabbit, trotting slowly back again, and +looking anxiously about as it went, as if it had lost something; and she +heard it muttering to itself, "The Duchess! The Duchess! Oh my dear +paws! Oh my fur and whiskers! She'll get me executed, as sure as ferrets +are ferrets! Where _can_ I have dropped them, I wonder?" Alice guessed +in a moment that it was looking for the fan and the pair of white kid +gloves, and she very good-naturedly began hunting about for them, but +they were nowhere to be seen--everything seemed to have changed since +her swim in the pool, and the great hall, with the glass table and the +little door, had vanished completely. + +Very soon the Rabbit noticed Alice, as she went hunting about, and +called out to her in an angry tone, "Why, Mary Ann, what _are_ you +doing out here? Run home this moment, and fetch me a pair of gloves and +a fan! Quick, now!" And Alice was so much frightened that she ran off at +once in the direction it pointed to, without trying to explain the +mistake it had made. + +"He took me for his housemaid," she said to herself as she ran. "How +surprised he'll be when he finds out who I am! But I'd better take him +his fan and gloves--that is, if I can find them." As she said this, she +came upon a neat little house, on the door of which was a bright brass +plate with the name "W. RABBIT" engraved upon it. She went in without +knocking, and hurried up stairs, in great fear lest she should meet the +real Mary Ann, and be turned out of the house before she had found the +fan and gloves. + +[Illustration: "_Why, Mary Ann, what are you doing out here?_"] + +"How queer it seems," Alice said to herself, "to be going messages for a +rabbit! I suppose Dinah'll be sending me on messages next!" And she +began fancying the sort of thing that would happen: "'Miss Alice! Come +here directly, and get ready for your walk!' 'Coming in a minute, nurse! +But I've got to watch this mouse-hole till Dinah comes back, and see +that the mouse doesn't get out.' Only I don't think," Alice went on, +"that they'd let Dinah stop in the house if it began ordering people +about like that!" + +By this time she had found her way into a tidy little room with a table +in the window, and on it (as she had hoped) a fan and two or three pairs +of tiny white kid gloves: she took up the fan and a pair of the gloves, +and was just going to leave the room, when her eye fell upon a little +bottle that stood near the looking-glass. There was no label this time +with the words "DRINK ME," but nevertheless she uncorked it and put it +to her lips. "I know _something_ interesting is sure to happen," she +said to herself, "whenever I eat or drink anything; so I'll just see +what this bottle does. I do hope it will make me grow large again, for +really I'm quite tired of being such a tiny little thing!" + +It did so indeed, and much sooner than she had expected: before she had +drunk half the bottle, she found her head pressing against the ceiling, +and had to stoop to save her neck from being broken. She hastily put +down the bottle, saying to herself "That's quite enough--I hope I +sha'n't grow any more--As it is, I can't get out at the door--I do wish +I hadn't drunk quite so much!" + +Alas! it was too late to wish that! She went on growing, and growing, +and very soon had to kneel down on the floor: in another minute there +was not even room for this, and she tried the effect of lying down with +one elbow against the door, and the other arm curled round her head. +Still she went on growing, and, as a last resource, she put one arm out +of the window, and one foot up the chimney, and said to herself "Now I +can do no more, whatever happens. What _will_ become of me?" + +Luckily for Alice, the little magic bottle had now had its full effect, +and she grew no larger: still it was very uncomfortable, and, as there +seemed to be no sort of chance of her ever getting out of the room +again, no wonder she felt unhappy. + +"It was much pleasanter at home," thought poor Alice, "when one wasn't +always growing larger and smaller, and being ordered about by mice and +rabbits. I almost wish I hadn't gone down that rabbit-hole--and +yet--and yet--it's rather curious, you know, this sort of life! I do +wonder what _can_ have happened to me! When I used to read fairy-tales, +I fancied that kind of thing never happened, and now here I am in the +middle of one! There ought to be a book written about me, that there +ought! And when I grow up, I'll write one--but I'm grown up now," she +added in a sorrowful tone; "at least there's no room to grow up any more +_here_." + +"But then," thought Alice, "shall I _never_ get any older than I am now? +That'll be a comfort, one way--never to be an old woman--but +then--always to have lessons to learn! Oh, I shouldn't like _that_!" + +"Oh, you foolish Alice!" she answered herself. "How can you learn +lessons in here? Why, there's hardly room for _you_, and no room at all +for any lesson-books!" + +And so she went on, taking first one side and then the other, and making +quite a conversation of it altogether; but after a few minutes she heard +a voice outside, and stopped to listen. + +"Mary Ann! Mary Ann!" said the voice. "Fetch me my gloves this moment!" +Then came a little pattering of feet on the stairs. Alice knew it was +the Rabbit coming to look for her, and she trembled till she shook the +house, quite forgetting that she was now about a thousand times as large +as the Rabbit, and had no reason to be afraid of it. + +Presently the Rabbit came up to the door, and tried to open it; but, as +the door opened inwards, and Alice's elbow was pressed hard against it, +that attempt proved a failure. Alice heard it say to itself "Then I'll +go round and get in at the window." + +"_That_ you won't" thought Alice, and, after waiting till she fancied +she heard the Rabbit just under the window, she suddenly spread out her +hand, and made a snatch in the air. She did not get hold of anything, +but she heard a little shriek and a fall, and a crash of broken glass, +from which she concluded that it was just possible it had fallen into a +cucumber-frame, or something of the sort. + +Next came an angry voice--the Rabbit's--"Pat! Pat! Where are you?" And +then a voice she had never heard before, "Sure then I'm here! Digging +for apples, yer honour!" + +"Digging for apples, indeed!" said the Rabbit angrily. "Here! Come and +help me out of _this_!" (Sounds of more broken glass.) + +"Now tell me, Pat, what's that in the window?" + +"Sure, it's an arm, yer honour." (He pronounced it "arrum.") + +"An arm, you goose! Who ever saw one that size? Why, it fills the whole +window!" + +"Sure, it does, yer honour? but it's an arm for all that." + +"Well, it's got no business there, at any rate: go and take it away!" + +There was a long silence after this, and Alice could only hear whispers +now and then; such as, "Sure, I don't like it, yer honour, at all, at +all!" "Do as I tell you, you coward!" and at last she spread out her +hand again, and made another snatch in the air. This time there were +_two_ little shrieks, and more sounds of broken glass. "What a number of +cucumber-frames there must be!" thought Alice. "I wonder what they'll do +next! As for pulling me out of the window, I only wish they _could_! +I'm sure _I_ don't want to stay in here any longer!" + +She waited for some time without hearing anything more: at last came a +rumbling of little cart-wheels, and the sound of a good many voices all +talking together: she made out the words: "Where's the other +ladder?--Why I hadn't to bring but one; Bill's got the other--Bill! +Fetch it here, lad!--Here, put 'em up at this corner--No, tie 'em +together first--they don't reach half high enough yet--Oh! they'll do +well enough; don't be particular--Here, Bill! catch hold of this +rope--Will the roof bear?--Mind that loose slate--Oh, it's coming down! +Heads below!" (a loud crash)--"Now, who did that?--It was Bill, I +fancy--Who's to go down the chimney?--Nay, _I_ sha'n't! _You_ do +it!--_That_ I won't, then! Bill's to go down--Here, Bill! the master +says you've to go down the chimney!" + +"Oh! So Bill's got to come down the chimney, has he?" said Alice to +herself. "Why, they seem to put everything upon Bill! I wouldn't be in +Bill's place for a good deal: this fireplace is narrow, to be sure; but +I _think_ I can kick a little!" + +She drew her foot as far down the chimney as she could, and waited till +she heard a little animal (she couldn't guess of what sort it was) +scratching and scrambling about in the chimney close above her: then, +saying to herself "This is Bill," she gave one sharp kick, and waited to +see what would happen next. + +The first thing she heard was a general chorus of "There goes Bill!" +then the Rabbit's voice alone--"Catch him, you by the hedge!" then +silence, and then another confusion of voices--"Hold up his head--Brandy +now--Don't choke him--How was it, old fellow? What happened to you? Tell +us all about it!" + +At last came a little feeble, squeaking voice, ("That's Bill," thought +Alice,) "Well, I hardly know--No more, thank ye; I'm better now--but I'm +a deal too flustered to tell you--all I know is, something comes at me +like a Jack-in-the-box, and up I goes like a sky-rocket!" + +"So you did, old fellow!" said the others. + +"We must burn the house down!" said the Rabbit's voice. And Alice +called out as loud as she could, "If you do, I'll set Dinah at you!" + +There was a dead silence instantly, and Alice thought to herself "I +wonder what they _will_ do next! If they had any sense, they'd take the +roof off." After a minute or two they began moving about again, and +Alice heard the Rabbit say "A barrowful will do, to begin with." + +"A barrowful of _what_?" thought Alice. But she had not long to doubt, +for the next moment a shower of little pebbles came rattling in at the +window, and some of them hit her in the face. "I'll put a stop to this," +she said to herself, and shouted out "You'd better not do that again!" +which produced another dead silence. + +Alice noticed with some surprise that the pebbles were all turning into +little cakes as they lay on the floor, and a bright idea came into her +head. "If I eat one of these cakes," she thought, "it's sure to make +_some_ change in my size; and, as it can't possibly make me larger, it +must make me smaller, I suppose." + +So she swallowed one of the cakes, and was delighted to find that she +began shrinking directly. As soon as she was small enough to get through +the door, she ran out of the house, and found quite a crowd of little +animals and birds waiting outside. The poor little Lizard, Bill, was in +the middle, being held up by two guinea-pigs, who were giving it +something out of a bottle. They all made a rush at Alice the moment she +appeared; but she ran off as hard as she could, and soon found herself +safe in a thick wood. + +"The first thing I've got to do," said Alice to herself, as she wandered +about in the wood, "is to grow to my right size again; and the second +thing is to find my way into that lovely garden. I think that will be +the best plan." + +It sounded an excellent plan, no doubt, and very neatly and simply +arranged; the only difficulty was, that she had not the smallest idea +how to set about it; and, while she was peering about anxiously among +the trees, a little sharp bark just over her head made her look up in a +great hurry. + +An enormous puppy was looking down at her with large round eyes, and +feebly stretching out one paw, trying to touch her. "Poor little +thing!" said Alice, in a coaxing tone, and she tried hard to whistle to +it; but she was terribly frightened all the time at the thought that it +might be hungry, in which case it would be very likely to eat her up in +spite of all her coaxing. + +Hardly knowing what she did, she picked up a little bit of stick, and +held it out to the puppy; whereupon the puppy jumped into the air off +all its feet at once, with a yelp of delight, and rushed at the stick, +and made believe to worry it; then Alice dodged behind a great thistle, +to keep herself from being run over; and, the moment she appeared on the +other side, the puppy made another rush at the stick, and tumbled head +over heels in its hurry to get hold of it; then Alice, thinking it was +very like having a game of play with a cart-horse, and expecting every +moment to be trampled under its feet, ran round the thistle again; then +the puppy began a series of short charges at the stick, running a little +way forwards each time and a long way back, and barking hoarsely all the +while, till at last it sat down a good way off, panting, with its +tongue hanging out of its mouth, and its great eyes half shut. + +This seemed to Alice a good opportunity for making her escape; so she +set off at once, and ran till she was quite tired and out of breath, and +till the puppy's bark sounded quite faint in the distance. + +"And yet what a dear little puppy it was!" said Alice, as she leant +against a buttercup to rest herself, and fanned herself with one of the +leaves. "I should have liked teaching it tricks very much, if--if I'd +only been the right size to do it! Oh, dear! I'd nearly forgotten that +I've got to grow up again! Let me see--how _is_ it to be managed? I +suppose I ought to eat or drink something or other; but the great +question is, what?" + +The great question certainly was, what? Alice looked all round her at +the flowers and the blades of grass, but she could not see anything that +looked like the right thing to eat or drink under the circumstances. +There was a large mushroom growing near her, about the same height as +herself; and, when she had looked under it, and on both sides of it, and +behind it, it occurred to her that she might as well look and see what +was on the top of it. + +She stretched herself up on tiptoe, and peeped over the edge of the +mushroom, and her eyes immediately met those of a large blue +caterpillar, that was sitting on the top with its arms folded, quietly +smoking a long hookah, and taking not the smallest notice of her or of +anything else. + + + + +CHAPTER V + + +[Sidenote: _Advice from a Caterpillar_] + +THE Caterpillar and Alice looked at each other for some +time in silence: at last the Caterpillar took the hookah out of its +mouth, and addressed her in a languid, sleepy voice. + +"Who are _you_?" said the Caterpillar. + +This was not an encouraging opening for a conversation. Alice replied, +rather shyly, "I hardly know, sir, just at present--at least I know who +I _was_ when I got up this morning, but I think I must have been changed +several times since then." + +"What do you mean by that?" said the Caterpillar sternly. "Explain +yourself!" + +"I can't explain _myself_, I'm afraid, sir," said Alice, "because I'm +not myself, you see." + +"I don't see," said the Caterpillar. + +"I'm afraid I can't put it more clearly," Alice replied very politely, +"for I can't understand it myself to begin with; and being so many +different sizes in a day is very confusing." + +"It isn't," said the Caterpillar. + +"Well, perhaps you haven't found it so yet," said Alice, "but when you +have to turn into a chrysalis--you will some day, you know--and then +after that into a butterfly, I should think you'll feel it a little +queer, won't you?" + +"Not a bit," said the Caterpillar. + +"Well, perhaps your feelings may be different," said Alice; "all I know +is, it would feel very queer to _me_." + +"You!" said the Caterpillar contemptuously. "Who are _you_?" + +Which brought them back again to the beginning of the conversation. +Alice felt a little irritated at the Caterpillar's making such _very_ +short remarks, and she drew herself up and said, very gravely, "I think +you ought to tell me who _you_ are, first." + +"Why?" said the Caterpillar. + +[Illustration: _Advice from a Caterpillar_] + +Here was another puzzling question; and as Alice could not think of any +good reason, and as the Caterpillar seemed to be in a _very_ +unpleasant state of mind, she turned away. + +"Come back!" the Caterpillar called after her. "I've something important +to say!" + +This sounded promising, certainly: Alice turned and came back again. + +"Keep your temper," said the Caterpillar. + +"Is that all?" said Alice, swallowing down her anger as well as she +could. + +"No," said the Caterpillar. + +Alice thought she might as well wait, as she had nothing else to do, and +perhaps after all it might tell her something worth hearing. For some +minutes it puffed away without speaking, but at last it unfolded its +arms, took the hookah out of its mouth again, and said, "So you think +you're changed, do you?" + +"I'm afraid I am, sir," said Alice; "I can't remember things as I +used--and I don't keep the same size for ten minutes together!" + +"Can't remember _what_ things?" said the Caterpillar. + +"Well, I've tried to say '_How doth the little busy bee_,' but it all +came different!" Alice replied in a very melancholy voice. + +"Repeat '_You are old, Father William_,'" said the Caterpillar. + +Alice folded her hands, and began:-- + + "You are old, Father William," the young man said, + "And your hair has become very white; + And yet you incessantly stand on your head-- + Do you think, at your age, it is right?" + + "In my youth," Father William replied to his son, + "I feared it might injure the brain; + But, now that I'm perfectly sure I have none, + Why, I do it again and again." + + "You are old," said the youth, "as I mentioned before, + And have grown most uncommonly fat; + Yet you turned a back-somersault in at the door-- + Pray, what is the reason of that?" + + "In my youth," said the sage, as he shook his grey locks, + "I kept all my limbs very supple + By the use of this ointment--one shilling the box-- + Allow me to sell you a couple?" + + "You are old," said the youth, "and your jaws are too weak + For anything tougher than suet; + Yet you finished the goose, with the bones and the beak-- + Pray, how did you manage to do it?" + + "In my youth," said his father, "I took to the law + And argued each case with my wife; + And the muscular strength, which it gave to my jaw, + Has lasted the rest of my life." + + "You are old," said the youth, "one would hardly suppose + That your eye was as steady as ever; + Yet you balanced an eel on the end of your nose-- + What made you so awfully clever?" + + "I have answered three questions, and that is enough," + Said his father; "don't give yourself airs! + Do you think I can listen all day to such stuff? + Be off, or I'll kick you down stairs!" + +"That is not said right," said the Caterpillar. + +"Not _quite_ right, I'm afraid," said Alice, timidly; "some of the +words have got altered." + +"It is wrong from beginning to end," said the Caterpillar, decidedly, +and there was silence for some minutes. + +The Caterpillar was the first to speak. + +"What size do you want to be?" it asked. + +"Oh, I'm not particular as to size," Alice hastily replied; "only one +doesn't like changing so often, you know." + +"I _don't_ know," said the Caterpillar. + +Alice said nothing: she had never been so much contradicted in all her +life before, and she felt that she was losing her temper. + +"Are you content now?" said the Caterpillar. + +"Well, I should like to be a _little_ larger, sir, if you wouldn't +mind," said Alice: "three inches is such a wretched height to be." + +"It is a very good height indeed!" said the Caterpillar angrily, rearing +itself upright as it spoke (it was exactly three inches high). + +"But I'm not used to it!" pleaded poor Alice in a piteous tone. And she +thought to herself, "I wish the creatures wouldn't be so easily +offended!" + +"You'll get used to it in time," said the Caterpillar; and it put its +hookah into its mouth and began smoking again. + +This time Alice waited patiently until it chose to speak again. In a +minute or two the Caterpillar took the hookah out of its mouth and +yawned once or twice, and shook itself. Then it got down off the +mushroom, and crawled away into the grass, merely remarking as it went, +"One side will make you grow taller, and the other side will make you +grow shorter." + +"One side of _what_? The other side of _what_?" thought Alice to +herself. + +"Of the mushroom," said the Caterpillar, just as if she had asked it +aloud; and in another moment it was out of sight. + +Alice remained looking thoughtfully at the mushroom for a minute, trying +to make out which were the two sides of it; and as it was perfectly +round, she found this a very difficult question. However, at last she +stretched her arms round it as far as they would go, and broke off a bit +of the edge with each hand. + +"And now which is which?" she said to herself, and nibbled a little of +the right-hand bit to try the effect: the next moment she felt a violent +blow underneath her chin: it had struck her foot! + +[Illustration] + +She was a good deal frightened by this very sudden change, but she felt +that there was no time to be lost, as she was shrinking rapidly; so she +set to work at once to eat some of the other bit. Her chin was pressed +so closely against her foot that there was hardly room to open her +mouth; but she did it at last, and managed to swallow a morsel of the +left-hand bit. + + * * * * * + +"Come, my head's free at last!" said Alice in a tone of delight, which +changed into alarm in another moment, when she found that her shoulders +were nowhere to be found: all she could see, when she looked down, was +an immense length of neck, which seemed to rise like a stalk out of a +sea of green leaves that lay far below her. + +"What _can_ all that green stuff be?" said Alice. "And where have my +shoulders got to? And oh, my poor hands, how is it I ca'n't see you?" +She was moving them about as she spoke, but no result seemed to follow, +except a little shaking among the distant green leaves. + +As there seemed to be no chance of getting her hands up to her head, she +tried to get her head down to them, and was delighted to find that her +neck would bend about easily in any direction, like a serpent. She had +just succeeded in curving it down into a graceful zigzag, and was going +to dive in among the leaves, which she found to be nothing but the tops +of the trees under which she had been wandering, when a sharp hiss made +her draw back in a hurry: a large pigeon had flown into her face, and +was beating her violently with its wings. + +"Serpent!" screamed the Pigeon. + +"I'm _not_ a serpent!" said Alice indignantly. "Let me alone!" + +"Serpent, I say again!" repeated the Pigeon, but in a more subdued tone, +and added with a kind of a sob, "I've tried every way, and nothing seems +to suit them!" + +"I haven't the least idea what you're talking about," said Alice. + +"I've tried the roots of trees, and I've tried banks, and I've tried +hedges," the Pigeon went on, without attending to her; "but those +serpents! There's no pleasing them!" + +Alice was more and more puzzled, but she thought there was no use in +saying anything more till the Pigeon had finished. + +"As if it wasn't trouble enough hatching the eggs," said the Pigeon; +"but I must be on the look-out for serpents night and day! Why, I +haven't had a wink of sleep these three weeks!" + +"I'm very sorry you've been annoyed," said Alice, who was beginning to +see its meaning. + +[Illustration] + +"And just as I'd taken the highest tree in the wood," continued the +Pigeon, raising its voice to a shriek, "and just as I was thinking I +should be free of them at last, they must needs come wriggling down from +the sky! Ugh, Serpent!" + +"But I'm _not_ a serpent, I tell you!" said Alice. "I'm a---- I'm a +----" + +"Well! _What_ are you?" said the Pigeon. "I can see you're trying to +invent something!" + +"I--I'm a little girl," said Alice, rather doubtfully, as she remembered +the number of changes she had gone through that day. + +"A likely story indeed!" said the Pigeon in a tone of the deepest +contempt. "I've seen a good many little girls in my time, but never +_one_ with such a neck as that! No, no! You're a serpent; and there's no +use denying it. I suppose you'll be telling me next that you never +tasted an egg!" + +"I _have_ tasted eggs, certainly," said Alice, who was a very truthful +child; "but little girls eat eggs quite as much as serpents do, you +know." + +"I don't believe it," said the Pigeon; "but if they do, why then +they're a kind of serpent, that's all I can say." + +This was such a new idea to Alice, that she was quite silent for a +minute or two, which gave the Pigeon the opportunity of adding, "You're +looking for eggs, I know _that_ well enough; and what does it matter to +me whether you're a little girl or a serpent?" + +"It matters a good deal to _me_," said Alice hastily; "but I'm not +looking for eggs, as it happens; and if I was, I shouldn't want _yours_: +I don't like them raw." + +"Well, be off, then!" said the Pigeon in a sulky tone, as it settled +down again into its nest. Alice crouched down among the trees as well as +she could, for her neck kept getting entangled among the branches, and +every now and then she had to stop and untwist it. After a while she +remembered that she still held the pieces of mushroom in her hands, and +she set to work very carefully, nibbling first at one and then at the +other, and growing sometimes taller and sometimes shorter, until she had +succeeded in bringing herself down to her usual height. + +It was so long since she had been anything near the right size, that it +felt quite strange at first; but she got used to it in a few minutes, +and began talking to herself, as usual. "Come, there's half my plan done +now! How puzzling all these changes are! I'm never sure what I'm going +to be, from one minute to another! However, I've got back to my right +size: the next thing is, to get into that beautiful garden--how _is_ +that to be done, I wonder?" As she said this, she came suddenly upon an +open place, with a little house in it about four feet high. "Whoever +lives there," thought Alice, "it'll never do to come upon them _this_ +size: why, I should frighten them out of their wits!" So she began +nibbling at the right-hand bit again, and did not venture to go near the +house till she had brought herself down to nine inches high. + + + + +CHAPTER VI + + +[Sidenote: _Pig and Pepper_] + +FOR a minute or two she stood looking at the house, and +wondering what to do next, when suddenly a footman in livery came +running out of the wood--(she considered him to be a footman because he +was in livery: otherwise, judging by his face only, she would have +called him a fish)--and rapped loudly at the door with his knuckles. It +was opened by another footman in livery, with a round face and large +eyes like a frog; and both footmen, Alice noticed, had powdered hair +that curled all over their heads. She felt very curious to know what it +was all about, and crept a little way out of the wood to listen. + +The Fish-Footman began by producing from under his arm a great letter, +nearly as large as himself, and this he handed over to the other, +saying, in a solemn tone, "For the Duchess. An invitation from the +Queen to play croquet." The Frog-Footman repeated, in the same solemn +tone, only changing the order of the words a little, "From the Queen. An +invitation for the Duchess to play croquet." + +Then they both bowed low, and their curls got entangled together. + +Alice laughed so much at this, that she had to run back into the wood +for fear of their hearing her; and, when she next peeped out, the +Fish-Footman was gone, and the other was sitting on the ground near the +door, staring stupidly up into the sky. + +Alice went timidly up to the door and knocked. + +"There's no use in knocking," said the Footman, "and that for two +reasons. First, because I'm on the same side of the door as you are; +secondly, because they're making such a noise inside, no one could +possibly hear you." And certainly there was a most extraordinary noise +going on within--a constant howling and sneezing, and every now and then +a great crash, as if a dish or kettle had been broken to pieces. + +"Please, then," said Alice, "how am I to get in?" + +"There might be some sense in your knocking," the Footman went on +without attending to her, "if we had the door between us. For instance, +if you were _inside_, you might knock, and I could let you out, you +know." He was looking up into the sky all the time he was speaking, and +this Alice thought decidedly uncivil. "But perhaps he can't help it," +she said to herself: "his eyes are so _very_ nearly at the top of his +head. But at any rate he might answer questions. How am I to get in?" +she repeated aloud. + +"I shall sit here," the Footman remarked, "till to-morrow----" + +At this moment the door of the house opened, and a large plate came +skimming out, straight at the Footman's head: it just grazed his nose, +and broke to pieces against one of the trees behind him. + +"----or next day, maybe," the Footman continued in the same tone, +exactly as if nothing had happened. + +"How am I to get in?" asked Alice again in a louder tone. + +"_Are_ you to get in at all?" said the Footman. "That's the first +question, you know." + +[Illustration] + +It was, no doubt: only Alice did not like to be told so. "It's really +dreadful," she muttered to herself, "the way all the creatures argue. +It's enough to drive one crazy!" + +The Footman seemed to consider this a good opportunity for repeating his +remark, with variations. "I shall sit here," he said, "on and off, for +days and days." + +"But what am _I_ to do?" said Alice. + +"Anything you like," said the Footman, and began whistling. + +"Oh, there's no use in talking to him," said Alice desperately: "he's +perfectly idiotic!" And she opened the door and went in. + +The door led right into a large kitchen, which was full of smoke from +one end to the other: the Duchess was sitting on a three-legged stool in +the middle, nursing a baby, the cook was leaning over the fire, stirring +a large cauldron which seemed to be full of soup. + +"There's certainly too much pepper in that soup!" Alice said to herself, +as well as she could for sneezing. + +There was certainly too much of it in the air. Even the Duchess sneezed +occasionally; and the baby was sneezing and howling alternately without +a moment's pause. The only things in the kitchen that did not sneeze, +were the cook, and a large cat which was sitting on the hearth and +grinning from ear to ear. + +"Please would you tell me," said Alice a little timidly, for she was not +quite sure whether it was good manners for her to speak first, "why your +cat grins like that?" + +"It's a Cheshire cat," said the Duchess, "and that's why. Pig!" + +She said the last word with such sudden violence that Alice quite +jumped; but she saw in another moment that it was addressed to the baby, +and not to her, so she took courage, and went on again: + +"I didn't know that Cheshire cats always grinned; in fact, I didn't know +that cats _could_ grin." + +"They all can," said the Duchess; "and most of 'em do." + +"I don't know of any that do," Alice said very politely, feeling quite +pleased to have got into a conversation. + +"You don't know much," said the Duchess; "and that's a fact." + +Alice did not at all like the tone of this remark, and thought it would +be as well to introduce some other subject of conversation. While she +was trying to fix on one, the cook took the cauldron of soup off the +fire, and at once set to work throwing everything within her reach at +the Duchess and the baby--the fire-irons came first; then followed a +shower of saucepans, plates, and dishes. The Duchess took no notice of +them even when they hit her; and the baby was howling so much already, +that it was quite impossible to say whether the blows hurt it or not. + +"Oh, _please_ mind what you're doing!" cried Alice, jumping up and down +in an agony of terror. "Oh, there goes his _precious_ nose"; as an +unusually large saucepan flew close by it, and very nearly carried it +off. + +"If everybody minded their own business," the Duchess said in a hoarse +growl, "the world would go round a deal faster than it does." + +[Illustration: _An unusually large saucepan flew close by it, and very +nearly carried it off_] + +"Which would _not_ be an advantage," said Alice, who felt very glad to +get an opportunity of showing off a little of her knowledge. "Just think +what work it would make with the day and night! You see the earth +takes twenty-four hours to turn round on its axis----" + +"Talking of axes," said the Duchess, "chop off her head." + +Alice glanced rather anxiously at the cook, to see if she meant to take +the hint; but the cook was busily engaged in stirring the soup, and did +not seem to be listening, so she ventured to go on again: "Twenty-four +hours, I _think_; or is it twelve? I----" + +"Oh, don't bother _me_," said the Duchess; "I never could abide +figures!" And with that she began nursing her child again, singing a +sort of lullaby to it as she did so, and giving it a violent shake at +the end of every line: + + "Speak roughly to your little boy, + And beat him when he sneezes: + He only does it to annoy, + Because he knows it teases." + +CHORUS + + (In which the cook and the baby joined): + "Wow! wow! wow!" + +While the Duchess sang the second verse of the song, she kept tossing +the baby violently up and down, and the poor little thing howled so, +that Alice could hardly hear the words: + + "I speak severely to my boy, + I beat him when he sneezes; + For he can thoroughly enjoy + The pepper when he pleases!" + + CHORUS. + + "Wow! wow! wow!" + +"Here! you may nurse it a bit if you like!" the Duchess said to Alice, +flinging the baby at her as she spoke. "I must go and get ready to play +croquet with the Queen," and she hurried out of the room. The cook threw +a frying-pan after her as she went out, but it just missed her. + +Alice caught the baby with some difficulty, as it was a queer-shaped +little creature, and held out its arms and legs in all directions, "just +like a star-fish," thought Alice. The poor little thing was snorting +like a steam-engine when she caught it, and kept doubling itself up and +straightening itself out again, so that altogether, for the first minute +or two, it was as much as she could do to hold it. + +As soon as she had made out the proper way of nursing it, (which was to +twist it up into a knot, and then keep tight hold of its right ear and +left foot, so as to prevent its undoing itself,) she carried it out into +the open air. "If I don't take this child away with me," thought Alice, +"they're sure to kill it in a day or two: wouldn't it be murder to leave +it behind?" She said the last words out loud, and the little thing +grunted in reply (it had left off sneezing by this time). "Don't grunt," +said Alice; "that's not at all a proper way of expressing yourself." + +The baby grunted again, and Alice looked very anxiously into its face to +see what was the matter with it. There could be no doubt that it had a +_very_ turn-up nose, much more like a snout than a real nose; also its +eyes were getting extremely small for a baby: altogether Alice did not +like the look of the thing at all. "But perhaps it was only sobbing," +she thought, and looked into its eyes again, to see if there were any +tears. + +No, there were no tears. "If you're going to turn into a pig, my dear," +said Alice, seriously, "I'll have nothing more to do with you. Mind +now!" The poor little thing sobbed again (or grunted, it was impossible +to say which), and they went on for some while in silence. + +Alice was just beginning to think to herself, "Now, what am I to do with +this creature when I get it home?" when it grunted again, so violently, +that she looked down into its face in some alarm. This time there could +be _no_ mistake about it: it was neither more nor less than a pig, and +she felt that it would be quite absurd for her to carry it any further. + +So she set the little creature down, and felt quite relieved to see it +trot quietly away into the wood. "If it had grown up," she said to +herself, "it would have made a dreadfully ugly child: but it makes +rather a handsome pig, I think." And she began thinking over other +children she knew, who might do very well as pigs, and was just saying +to herself, "if one only knew the right way to change them----" when she +was a little startled by seeing the Cheshire Cat sitting on a bough of a +tree a few yards off. + +[Illustration: _It grunted again so violently that she looked down into +its face in some alarm_] + +The Cat only grinned when it saw Alice. It looked good-natured, she +thought: still it had _very_ long claws and a great many teeth, so she +felt that it ought to be treated with respect. + +[Illustration] + +"Cheshire Puss," she began, rather timidly, as she did not at all know +whether it would like the name: however, it only grinned a little wider. +"Come, it's pleased so far," thought Alice, and she went on. "Would you +tell me, please, which way I ought to go from here?" + +"That depends a good deal on where you want to get to," said the Cat. + +"I don't much care where----" said Alice. + +"Then it doesn't matter which way you go," said the Cat. + +"---- so long as I get _somewhere_," Alice added as an explanation. + +"Oh, you're sure to do that," said the Cat, "if you only walk long +enough." + +Alice felt that this could not be denied, so she tried another question. +"What sort of people live about here?" + +"In _that_ direction," the Cat said, waving its right paw round, "lives +a Hatter: and in _that_ direction," waving the other paw, "lives a March +Hare. Visit either you like: they're both mad." + +"But I don't want to go among mad people," Alice remarked. + +"Oh, you ca'n't help that," said the Cat: "we're all mad here. I'm mad. +You're mad." + +"How do you know I'm mad?" said Alice. + +"You must be," said the Cat, "or you wouldn't have come here." + +Alice didn't think that proved it at all; however, she went on. "And how +do you know that you're mad?" + +"To begin with," said the Cat, "a dog's not mad. You grant that?" + +"I suppose so," said Alice. + +"Well, then," the Cat went on, "you see a dog growls when it's angry, +and wags its tail when it's pleased. Now _I_ growl when I'm pleased, and +wag my tail when I'm angry. Therefore I'm mad." + +"_I_ call it purring, not growling," said Alice. + +"Call it what you like," said the Cat. "Do you play croquet with the +Queen to-day?" + +"I should like it very much," said Alice, "but I haven't been invited +yet." + +"You'll see me there," said the Cat and vanished. + +Alice was not much surprised at this, she was getting so used to queer +things happening. While she was looking at the place where it had been, +it suddenly appeared again. + +"By-the-bye, what became of the baby?" said the Cat. "I'd nearly +forgotten to ask." + +"It turned into a pig," Alice quietly said, just as if it had come back +in a natural way. + +"I thought it would," said the Cat, and vanished again. + +Alice waited a little, half expecting to see it again, but it did not +appear, and after a minute or two she walked on in the direction in +which the March Hare was said to live. "I've seen hatters before," she +said to herself; "the March Hare will be much the most interesting, and +perhaps as this is May, it won't be raving mad--at least not so mad as +it was in March." As she said this, she looked up, and there was the Cat +again, sitting on the branch of a tree. + +"Did you say pig, or fig?" said the Cat. + +"I said pig," replied Alice; "and I wish you wouldn't keep appearing and +vanishing so suddenly: you make one quite giddy." + +"All right," said the Cat; and this time it vanished quite slowly, +beginning with the end of the tail, and ending with the grin, which +remained some time after the rest of it had gone. + +"Well! I've often seen a cat without a grin," thought Alice; "but a grin +without a cat! It's the most curious thing I ever saw in all my life." + +[Illustration] + +She had not gone much farther before she came in sight of the house of +the March Hare: she thought it must be the right house, because the +chimneys were shaped like ears and the roof was thatched with fur. It +was so large a house, that she did not like to go nearer till she had +nibbled some more of the left-hand bit of mushroom, and raised herself, +to about two feet high: even then she walked up towards it rather +timidly, saying to herself, "Suppose it should be raving mad after all! +I almost wish I'd gone to see the Hatter instead!" + + + + +CHAPTER VII + + +[Sidenote: _A Mad Tea-party_] + +THERE was a table set out under a tree in front of the +house, and the March Hare and the Hatter were having tea at it: a +Dormouse was sitting between them, fast asleep, and the other two were +using it as a cushion resting their elbows on it, and talking over its +head. "Very uncomfortable for the Dormouse," thought Alice; "only as +it's asleep, suppose it doesn't mind." + +The table was a large one, but the three were all crowded together at +one corner of it. "No room! No room!" they cried out when they saw Alice +coming. "There's _plenty_ of room!" said Alice indignantly, and she sat +down in a large arm-chair at one end of the table. + +"Have some wine," the March Hare said in an encouraging tone. + +Alice looked all round the table, but there was nothing on it but tea. +"I don't see any wine," she remarked. + +"There isn't any," said the March Hare. + +"Then it wasn't very civil of you to offer it," said Alice angrily. + +"It wasn't very civil of you to sit down without being invited," said +the March Hare. + +"I didn't know it was _your_ table," said Alice; "it's laid for a great +many more than three." + +"Your hair wants cutting," said the Hatter. He had been looking at Alice +for some time with great curiosity, and this was his first speech. + +"You should learn not to make personal remarks," Alice said with some +severity; "it's very rude." + +The Hatter opened his eyes very wide on hearing this; but all he _said_ +was "Why is a raven like a writing-desk?" + +"Come, we shall have some fun now!" thought Alice. "I'm glad they've +begun asking riddles.--I believe I can guess that," she added aloud. + +"Do you mean that you think you can find out the answer to it?" said +the March Hare. + +"Exactly so," said Alice. + +"Then you should say what you mean," the March Hare went on. + +"I do," Alice hastily replied; "at least--at least I mean what I +say--that's the same thing, you know." + +"Not the same thing a bit!" said the Hatter. "Why, you might just as +well say that 'I see what I eat' is the same thing as 'I eat what I +see'!" + +"You might just as well say," added the March Hare, "that 'I like what I +get' is the same thing as 'I get what I like'!" + +"You might just as well say," added the Dormouse, which seemed to be +talking in his sleep, "that 'I breathe when I sleep' is the same thing +as 'I sleep when I breathe'!" + +"It _is_ the same thing with you," said the Hatter; and here the +conversation dropped, and the party sat silent for a minute, while Alice +thought over all she could remember about ravens and writing-desks, +which wasn't much. + +[Illustration: _A Mad Tea Party_] + +The Hatter was the first to break the silence. "What day of the month +is it?" he said, turning to Alice: he had taken his watch out of his +pocket, and was looking at it uneasily, shaking it every now and then, +and holding it to his ear. + +Alice considered a little, and then said "The fourth." + +"Two days wrong!" sighed the Hatter. "I told you butter would not suit +the works!" he added, looking angrily at the March Hare. + +"It was the _best_ butter," the March Hare meekly replied. + +"Yes, but some crumbs must have got in as well," the Hatter grumbled: +"you shouldn't have put it in with the bread-knife." + +The March Hare took the watch and looked at it gloomily: then he dipped +it into his cup of tea, and looked at it again: but he could think of +nothing better to say than his first remark, "It was the _best_ butter, +you know." + +Alice had been looking over his shoulder with some curiosity. "What a +funny watch!" she remarked. "It tells the day of the month, and doesn't +tell what o'clock it is!" + +"Why should it?" muttered the Hatter. "Does _your_ watch tell you what +year it is?" + +"Of course not," Alice replied very readily: "but that's because it +stays the same year for such a long time together." + +"Which is just the case with _mine_," said the Hatter. + +Alice felt dreadfully puzzled. The Hatter's remark seemed to have no +meaning in it, and yet it was certainly English. "I don't quite +understand," she said, as politely as she could. + +"The Dormouse is asleep again," said the Hatter, and he poured a little +hot tea upon its nose. + +The Dormouse shook its head impatiently, and said, without opening its +eyes, "Of course, of course; just what I was going to remark myself." + +"Have you guessed the riddle yet?" the Hatter said, turning to Alice +again. + +"No, I give it up," Alice replied: "what's the answer?" + +"I haven't the slightest idea," said the Hatter. + +"Nor I," said the March Hare. + +Alice sighed wearily. "I think you might do something better with the +time," she said, "than wasting it asking riddles with no answers." + +"If you knew Time as well as I do," said the Hatter, "you wouldn't talk +about wasting _it_. It's _him_." + +"I don't know what you mean," said Alice. + +"Of course you don't!" the Hatter said, tossing his head contemptuously. +"I daresay you never spoke to Time!" + +"Perhaps not," Alice cautiously replied: "but I know I have to beat time +when I learn music." + +"Ah! that accounts for it," said the Hatter. "He won't stand beating. +Now, if you only kept on good terms with him, he'd do almost anything +you liked with the clock. For instance, suppose it were nine o'clock in +the morning, just time to begin lessons: you'd only have to whisper a +hint to Time, and round goes the clock in a twinkling! Half-past one, +time for dinner!" + +("I only wish it was," the March Hare said to itself in a whisper.) + +"That would be grand, certainly," said Alice thoughtfully: "but then--I +shouldn't be hungry for it, you know." + +"Not at first, perhaps," said the Hatter: "but you could keep it to +half-past one as long as you liked." + +"Is that the way _you_ manage?" Alice asked. + +The Hatter shook his head mournfully. "Not I!" he replied. "We +quarrelled last March----just before _he_ went mad, you know----" +(pointing with his teaspoon to the March Hare), "it was at the great +concert given by the Queen of Hearts, and I had to sing + + 'Twinkle, twinkle, little bat! + How I wonder what you're at!' + +You know that song, perhaps?" + +"I've heard something like it," said Alice. + +"It goes on, you know," the Hatter continued, "in this way:-- + + 'Up above the world you fly, + Like a tea-tray in the sky. + Twinkle, twinkle----'" + +Here the Dormouse shook itself, and began singing in its sleep +"_Twinkle, twinkle, twinkle, twinkle_----" and went on so long that they +had to pinch it to make it stop. + +"Well, I'd hardly finished the first verse," said the Hatter, "when the +Queen jumped up and bawled out 'He's murdering the time! Off with his +head!'" + +"How dreadfully savage!" exclaimed Alice. + +"And ever since that," the Hatter went on in a mournful tone, "he won't +do a thing I ask! It's always six o'clock now." + +A bright idea came into Alice's head. "Is that the reason so many +tea-things are put out here?" she asked. + +"Yes, that's it," said the Hatter with a sigh: "it's always tea-time, +and we've no time to wash the things between whiles." + +"Then you keep moving round, I suppose?" said Alice. + +"Exactly so," said the Hatter: "as the things get used up." + +"But what happens when you come to the beginning again?" Alice ventured +to ask. + +"Suppose we change the subject," the March Hare interrupted, yawning. +"I'm getting tired of this. I vote the young lady tells us a story." + +"I'm afraid I don't know one," said Alice, rather alarmed at the +proposal. + +"Then the Dormouse shall!" they both cried. "Wake up, Dormouse!" And +they pinched it on both sides at once. + +The Dormouse slowly opened his eyes. "I wasn't asleep," he said in a +hoarse, feeble voice: "I heard every word you fellows were saying." + +"Tell us a story!" said the March Hare. + +"Yes, please do!" pleaded Alice. + +"And be quick about it," added the Hatter, "or you'll be asleep again +before it's done." + +"Once upon a time there were three little sisters," the Dormouse began +in a great hurry; "and their names were Elsie, Lacie, and Tillie; and +they lived at the bottom of a well----" + +"What did they live on?" said Alice, who always took a great interest in +questions of eating and drinking. + +"They lived on treacle," said the Dormouse, after thinking a minute or +two. + +"They couldn't have done that, you know," Alice gently remarked; "they'd +have been ill." + +"So they were," said the Dormouse; "_very_ ill." + +Alice tried a little to fancy to herself what such an extraordinary way +of living would be like, but it puzzled her too much, so she went on: +"But why did they live at the bottom of a well?" + +"Take some more tea," the March Hare said to Alice, very earnestly. + +"I've had nothing yet," Alice replied in an offended tone, "so I can't +take more." + +"You mean you can't take _less_," said the Hatter; "it's very easy to +take _more_ than nothing." + +"Nobody asked _your_ opinion," said Alice. + +"Who's making personal remarks now?" the Hatter asked triumphantly. + +Alice did not quite know what to say to this: so she helped herself to +some tea and bread-and-butter, and then turned to the Dormouse, and +repeated her question. "Why did they live at the bottom of a well?" + +The Dormouse again took a minute or two to think about it, and then +said, "It was a treacle-well." + +"There's no such thing!" Alice was beginning very angrily, but the +Hatter and the March Hare went "Sh! sh!" and the Dormouse sulkily +remarked: "If you can't be civil, you'd better finish the story for +yourself." + +"No, please go on!" Alice said very humbly. "I won't interrupt you +again. I dare say there may be _one_." + +"One, indeed!" said the Dormouse indignantly. However, he consented to +go on. "And so these three little sisters--they were learning to draw, +you know----" + +"What did they draw?" said Alice, quite forgetting her promise. + +"Treacle," said the Dormouse, without considering at all this time. + +"I want a clean cup," interrupted the Hatter: "let's all move one place +on." + +He moved as he spoke, and the Dormouse followed him: the March Hare +moved into the Dormouse's place, and Alice rather unwillingly took the +place of the March Hare. The Hatter was the only one who got any +advantage from the change: and Alice was a good deal worse off than +before, as the March Hare had just upset the milk-jug into his plate. + +Alice did not wish to offend the Dormouse again, so she began very +cautiously: "But I don't understand. Where did they draw the treacle +from?" + +"You can draw water out of a water-well," said the Hatter; "so I should +think you could draw treacle out of a treacle-well--eh, stupid!" + +"But they were _in_ the well," Alice said to the Dormouse, not choosing +to notice this last remark. + +"Of course they were," said the Dormouse; "----well in." + +This answer so confused poor Alice that she let the Dormouse go on for +some time without interrupting it. + +"They were learning to draw," the Dormouse went on, yawning and rubbing +its eyes, for it was getting very sleepy; "and they drew all manner of +things--everything that begins with an M----" + +"Why with an M?" said Alice. + +"Why not?" said the March Hare. + +Alice was silent. + +The Dormouse had closed its eyes by this time, and was going off into a +dose; but, on being pinched by the Hatter, it woke up again with a +little shriek, and went on: "----that begins with an M, such as +mouse-traps, and the moon, and memory, and muchness--you know you say +things are 'much of a muchness'--did you ever see such a thing as a +drawing of a muchness?" + +"Really, now you ask me," said Alice, very much confused, "I don't +think----" + +"Then you shouldn't talk," said the Hatter. + +This piece of rudeness was more than Alice could bear: she got up in +great disgust and walked off; the Dormouse fell asleep instantly, and +neither of the others took the least notice of her going, though she +looked back once or twice, half hoping that they would call after her: +the last time she saw them, they were trying to put the Dormouse into +the teapot. + +"At any rate I'll never go _there_ again!" said Alice as she picked her +way through the wood. "It's the stupidest tea-party I ever was at in all +my life!" + +Just as she said this, she noticed that one of the trees had a door +leading right into it. "That's very curious!" she thought. "But +everything's curious to-day. I think I may as well go in at once." And +in she went. + +Once more she found herself in the long hall, and close to the little +glass table. "Now I'll manage better this time," she said to herself, +and began by taking the little golden key, and unlocking the door that +led into the garden. Then she set to work nibbling at the mushroom (she +had kept a piece of it in her pocket) till she was about a foot high: +then she walked down the little passage: and _then_--she found herself +at last in the beautiful garden, among the bright flower-beds and the +cool fountains. + + + + +CHAPTER VIII + + +[Sidenote: _The Queen's Croquet-Ground_] + +A LARGE rose-tree stood near the entrance of the garden: +the roses growing on it were white, but there were three gardeners at +it, busily painting them red. Alice thought this a very curious thing, +and she went nearer to watch them, and just as she came up to them she +heard one of them say "Look out now, Five! Don't go splashing paint over +me like that!" + +"I couldn't help it," said Five, in a sulky tone. "Seven jogged my +elbow." + +On which Seven looked up and said, "That's right, Five! Always lay the +blame on others!" + +"_You'd_ better not talk!" said Five. "I heard the Queen say only +yesterday you deserved to be beheaded!" + +"What for?" said the one who had first spoken. + +"That's none of _your_ business, Two!" said Seven. + +"Yes, it _is_ his business!" said Five. "And I'll tell him--it was for +bringing the cook tulip-roots instead of onions." + +Seven flung down his brush, and had just begun "Well, of all the unjust +things----" when his eye chanced to fall upon Alice, as she stood +watching them, and he checked himself suddenly: the others looked round +also, and all of them bowed low. + +"Would you tell me," said Alice, a little timidly, "why you are painting +those roses?" + +Five and Seven said nothing, but looked at Two. Two began in a low +voice, "Why, the fact is, you see, Miss, this here ought to have been a +_red_ rose-tree, and we put a white one in by mistake; and if the Queen +was to find it out, we should all have our heads cut off, you know. So +you see, Miss, we're doing our best, afore she comes, to----" At this +moment, Five, who had been anxiously looking across the garden, called +out "The Queen! The Queen!" and the three gardeners instantly threw +themselves flat upon their faces. There was a sound of many footsteps, +and Alice looked round, eager to see the Queen. + +First came ten soldiers carrying clubs; these were all shaped like the +three gardeners, oblong and flat, with their hands and feet at the +corners: next the ten courtiers; these were ornamented all over with +diamonds, and walked two and two, as the soldiers did. After these came +the royal children; there were ten of them, and the little dears came +jumping merrily along hand in hand, in couples; they were all ornamented +with hearts. Next came the guests, mostly Kings and Queens, and among +them Alice recognised the White Rabbit: it was talking in a hurried, +nervous manner, smiling at everything that was said, and went by without +noticing her. Then followed the Knave of Hearts, carrying the King's +crown on a crimson velvet cushion; and last of all this grand +procession, came THE KING AND QUEEN OF HEARTS. + +Alice was rather doubtful whether she ought not to lie down on her face +like the three gardeners, but she could not remember ever having heard +of such a rule at processions; "and besides, what would be the use of a +procession," thought she, "if people had to lie down upon their faces, +so that they couldn't see it?" So she stood still where she was, and +waited. + +When the procession came opposite to Alice, they all stopped and looked +at her, and the Queen said severely, "Who is this?" She said it to the +Knave of Hearts, who only bowed and smiled in reply. + +"Idiot!" said the Queen, tossing her head impatiently; and turning to +Alice, she went on, "What's your name, child?" + +"My name is Alice, so please your Majesty," said Alice very politely; +but she added, to herself, "Why, they're only a pack of cards, after +all. I needn't be afraid of them!" + +"And who are _these_?" said the Queen, pointing to the three gardeners +who were lying round the rose-tree; for, you see, as they were lying on +their faces, and the pattern on their backs was the same as the rest of +the pack, she could not tell whether they were gardeners, or soldiers, +or courtiers, or three of her own children. + +"How should _I_ know?" said Alice, surprised at her own courage. "It's +no business of _mine_." + +The Queen turned crimson with fury, and, after glaring at her for a +moment like a wild beast, screamed "Off with her head! Off----" + +"Nonsense!" said Alice, very loudly and decidedly, and the Queen was +silent. + +The King laid his hand upon her arm, and timidly said "Consider my dear: +she is only a child!" + +The Queen turned angrily away from him, and said to the Knave "Turn them +over!" + +The Knave did so, very carefully, with one foot. + +"Get up!" said the Queen, in a shrill, loud voice, and the three +gardeners instantly jumped up, and began bowing to the King, the Queen, +the royal children, and everybody else. + +"Leave off that!" screamed the Queen. "You make me giddy." And then, +turning to the rose-tree, she went on, "What _have_ you been doing +here?" + +"May it please your Majesty," said Two, in a very humble tone, going +down on one knee as he spoke, "we were trying----" + +[Illustration: _The Queen turned angrily away from him and said to the +Knave, "Turn them over"_] + +"_I_ see!" said the Queen, who had meanwhile been examining the roses. +"Off with their heads!" and the procession moved on, three of the +soldiers remaining behind to execute the unfortunate gardeners, who ran +to Alice for protection. + +"You shan't be beheaded!" said Alice, and she put them into a large +flower-pot that stood near. The three soldiers wandered about for a +minute or two, looking for them, and then quietly marched off after the +others. + +"Are their heads off?" shouted the Queen. + +"Their heads are gone, if it please your Majesty!" the soldiers shouted +in reply. + +"That's right!" shouted the Queen. "Can you play croquet?" + +The soldiers were silent, and looked at Alice, as the question was +evidently meant for her. + +"Yes!" shouted Alice. + +"Come on, then!" roared the Queen, and Alice joined the procession, +wondering very much what would happen next. + +"It's--it's a very fine day!" said a timid voice at her side. She was +walking by the White Rabbit, who was peeping anxiously into her face. + +"Very," said Alice: "----where's the Duchess?" + +"Hush! Hush!" said the Rabbit in a low hurried tone. He looked anxiously +over his shoulder as he spoke, and then raised himself upon tiptoe, put +his mouth close to her ear, and whispered "She's under sentence of +execution." + +"What for?" said Alice. + +"Did you say 'What a pity!'?" the Rabbit asked. + +"No, I didn't," said Alice: "I don't think it's at all a pity. I said +'What for?'" + +"She boxed the Queen's ears--" the Rabbit began. Alice gave a little +scream of laughter. "Oh, hush!" the Rabbit whispered in a frightened +tone. "The Queen will hear you! You see she came rather late, and the +Queen said----" + +"Get to your places!" shouted the Queen in a voice of thunder, and +people began running about in all directions, tumbling up against each +other; however, they got settled down in a minute or two, and the game +began. Alice thought she had never seen such a curious croquet-ground in +all her life; it was all ridges and furrows; the balls were live +hedgehogs, the mallets live flamingoes, and the soldiers had to double +themselves up and to stand upon their hands and feet, to make the +arches. + +[Illustration] + +The chief difficulty Alice found at first was in managing her flamingo; +she succeeded in getting its body tucked away, comfortably enough, under +her arm, with its legs hanging down, but generally, just as she had got +its neck nicely straightened out, and was going to give the hedgehog a +blow with its head, it _would_ twist itself round and look up in her +face, with such a puzzled expression that she could not help bursting +out laughing: and when she had got its head down, and was going to +begin again, it was very provoking to find that the hedgehog had +unrolled itself and was in the act of crawling away: besides all this, +there was generally a ridge or a furrow in the way wherever she wanted +to send the hedgehog to, and, as the doubled-up soldiers were always +getting up and walking off to other parts of the ground, Alice soon came +to the conclusion that it was a very difficult game indeed. + +The players all played at once without waiting for turns, quarrelling +all the while, and fighting for the hedgehogs; and in a very short time +the Queen was in a furious passion, and went stamping about, and +shouting "Off with his head!" or "Off with her head!" about once in a +minute. + +Alice began to feel very uneasy: to be sure she had not as yet had any +dispute with the Queen, but she knew that it might happen any minute, +"and then," thought she, "what would become of me? They're dreadfully +fond of beheading people here: the great wonder is that there's any one +left alive!" + +She was looking about for some way of escape, and wondering whether she +could get away without being seen, when she noticed a curious +appearance in the air: it puzzled her very much at first, but, after +watching it a minute or two, she made it out to be a grin, and she said +to herself "It's the Cheshire Cat: now I shall have somebody to talk +to." + +"How are you getting on?" said the Cat, as soon as there was mouth +enough for it to speak with. + +Alice waited till the eyes appeared, and then nodded. "It's no use +speaking to it," she thought, "till its ears have come, or at least one +of them." In another minute the whole head appeared, and then Alice put +down her flamingo, and began an account of the game, feeling very glad +she had some one to listen to her. The Cat seemed to think that there +was enough of it now in sight, and no more of it appeared. + +"I don't think they play at all fairly," Alice began, in rather a +complaining tone, "and they all quarrel so dreadfully one can't hear +oneself speak--and they don't seem to have any rules in particular; at +least, if there are, nobody attends to them--and you've no idea how +confusing it is all the things being alive; for instance, there's the +arch I've got to go through next walking about at the other end of the +ground--and I should have croqueted the Queen's hedgehog just now, only +it ran away when it saw mine coming!" + +[Illustration] + +"How do you like the Queen?" said the Cat in a low voice. + +"Not at all," said Alice: "she's so extremely----" Just then she noticed +that the Queen was close behind her listening: so she went on, +"----likely to win, that it's hardly worth while finishing the game." + +The Queen smiled and passed on. + +"Who _are_ you talking to?" said the King, coming up to Alice, and +looking at the Cat's head with great curiosity. + +"It's a friend of mine--a Cheshire Cat," said Alice: "allow me to +introduce it." + +"I don't like the look of it at all," said the King: "however, it may +kiss my hand if it likes." + +"I'd rather not," the Cat remarked. + +"Don't be impertinent," said the King, "and don't look at me like that!" +He got behind Alice as he spoke. + +"A cat may look at a king," said Alice. "I've read that in some book, +but I don't remember where." + +"Well, it must be removed," said the King very decidedly, and he called +to the Queen, who was passing at the moment, "My dear! I wish you would +have this cat removed!" + +The Queen had only one way of settling all difficulties, great or small. +"Off with his head!" she said, without even looking round. + +"I'll fetch the executioner myself," said the King eagerly, and he +hurried off. + +Alice thought she might as well go back and see how the game was going +on, as she heard the Queen's voice in the distance, screaming with +passion. She had already heard her sentence three of the players to be +executed for having missed their turns, and she did not like the look of +things at all, as the game was in such confusion that she never knew +whether it was her turn or not. So she went in search of her hedgehog. + +The hedgehog was engaged in a fight with another hedgehog, which seemed +to Alice an excellent opportunity for croqueting one of them with the +other: the only difficulty was, that her flamingo was gone across to the +other side of the garden, where Alice could see it trying in a helpless +sort of way to fly up into one of the trees. + +By the time she had caught the flamingo and brought it back, the fight +was over, and both the hedgehogs were out of sight: "but it doesn't +matter much," thought Alice, "as all the arches are gone from this side +of the ground." So she tucked it under her arm, that it might not escape +again, and went back for a little more conversation with her friend. + +When she got back to the Cheshire Cat, she was surprised to find quite a +large crowd collected round it: there was a dispute going on between the +executioner, the King, and the Queen, who were all talking at once, +while all the rest were quite silent, and looked very uncomfortable. + +The moment Alice appeared, she was appealed to by all three to settle +the question, and they repeated their arguments to her, though, as they +all spoke at once, she found it very hard indeed to make out exactly +what they said. + +[Illustration] + +The executioner's argument was, that you couldn't cut off a head unless +there was a body to cut it off from: that he had never had to do such a +thing before, and he wasn't going to begin at _his_ time of life. + +The King's argument was, that anything that had a head could be +beheaded, and that you weren't to talk nonsense. + +The Queen's argument was, that if something wasn't done about it in less +than no time, she'd have everybody executed all round. (It was this last +remark that had made the whole party look so grave and anxious.) + +Alice could think of nothing else to say but "It belongs to the Duchess: +you'd better ask _her_ about it." + +"She's in prison," the Queen said to the executioner; "fetch her here." +And the executioner went off like an arrow. + +The Cat's head began fading away the moment he was gone, and by the time +he had come back with the Duchess, it had entirely disappeared; so the +King and the executioner ran wildly up and down looking for it, while +the rest of the party went back to the game. + + + + +CHAPTER IX + + +[Sidenote: _The Mock Turtle's Story_] + +"YOU can't think how glad I am to see you again, you +dear old thing!" said the Duchess, as she tucked her arm affectionately +into Alice's, and they walked off together. + +Alice was very glad to find her in such a pleasant temper, and thought +to herself that perhaps it was only the pepper that had made her so +savage when they met in the kitchen. + +"When _I'm_ a Duchess," she said to herself (not in a very hopeful tone +though), "I won't have any pepper in my kitchen _at all_. Soup does very +well without--Maybe it's always pepper that makes people hot-tempered," +she went on, very much pleased at having found out a new kind of rule, +"and vinegar that makes them sour--and camomile that makes them +bitter--and--barley-sugar and such things that make children +sweet-tempered. I only wish people knew _that_: then they wouldn't be +so stingy about it, you know----" + +She had quite forgotten the Duchess by this time, and was a little +startled when she heard her voice close to her ear. "You're thinking +about something, my dear, and that makes you forget to talk. I can't +tell you just now what the moral of that is, but I shall remember it in +a bit." + +"Perhaps it hasn't one," Alice ventured to remark. + +"Tut, tut, child!" said the Duchess. "Every thing's got a moral, if only +you can find it." And she squeezed herself up closer to Alice's side as +she spoke. + +Alice did not much like her keeping so close to her: first, because the +Duchess was _very_ ugly; and secondly, because she was exactly the right +height to rest her chin on Alice's shoulder, and it was an uncomfortably +sharp chin. However, she did not like to be rude, so she bore it as well +as she could. "The game's going on rather better now," she said, by way +of keeping up the conversation a little. + +"'Tis so," said the Duchess: "and the moral of that is--'Oh, 'tis love, +'tis love, that makes the world go round!'" + +"Somebody said," Alice whispered, "that it's done by everybody minding +their own business!" + +"Ah, well! It means much the same thing," said the Duchess, digging her +sharp little chin into Alice's shoulder as she added, "and the moral of +_that_ is--'Take care of the sense, and the sounds will take care of +themselves.'" + +"How fond she is of finding morals in things!" Alice thought to herself. + +"I dare say you're wondering why I don't put my arm round your waist," +the Duchess said after a pause: "the reason is, that I'm doubtful about +the temper of your flamingo. Shall I try the experiment?" + +"He might bite," Alice cautiously replied, not feeling at all anxious to +have the experiment tried. + +"Very true," said the Duchess: "flamingoes and mustard both bite. And +the moral of that is--'Birds of a feather flock together.'" + +"Only mustard isn't a bird," Alice remarked. + +"Right, as usual," said the Duchess: "what a clear way you have of +putting things!" + +"It's a mineral, I _think_," said Alice. + +"Of course it is," said the Duchess, who seemed ready to agree to +everything that Alice said: "there's a large mustard-mine near here. And +the moral of that is--'The more there is of mine, the less there is of +yours.'" + +"Oh, I know!" exclaimed Alice, who had not attended to this last remark. +"It's a vegetable. It doesn't look like one, but it is." + +"I quite agree with you," said the Duchess; "and the moral of that +is--'Be what you would seem to be'--or if you'd like it put more +simply--'Never imagine yourself not to be otherwise than what it might +appear to others that what you were or might have been was not otherwise +than what you had been would have appeared to them to be otherwise.'" + +"I think I should understand that better," Alice said very politely, "if +I had it written down: but I can't quite follow it as you say it." + +"That's nothing to what I could say if I chose," the Duchess replied, in +a pleased tone. + +"Pray don't trouble yourself to say it any longer than that," said +Alice. + +"Oh, don't talk about trouble!" said the Duchess. "I make you a present +of everything I've said as yet." + +"A cheap sort of present!" thought Alice. "I'm glad they don't give +birthday presents like that!" But she did not venture to say it out +loud. + +"Thinking again?" the Duchess asked with another dig of her sharp little +chin. + +"I've a right to think," said Alice sharply, for she was beginning to +feel a little worried. + +"Just about as much right," said the Duchess, "as pigs have to fly; and +the m----" + +But here, to Alice's great surprise, the Duchess's voice died away, even +in the middle of her favourite word "moral," and the arm that was linked +into hers began to tremble. Alice looked up, and there stood the Queen +in front of them, with her arms folded, frowning like a thunderstorm. + +"A fine day, your Majesty!" the Duchess began in a low, weak voice. + +"Now, I give you fair warning," shouted the Queen, stamping on the +ground as she spoke; "either you or your head must be off, and that in +about half no time! Take your choice!" + +The Duchess took her choice, and was gone in a moment. + +"Let's go on with the game," the Queen said to Alice; and Alice was too +much frightened to say a word, but slowly followed her back to the +croquet-ground. + +The other guests had taken advantage of the Queen's absence, and were +resting in the shade: however, the moment they saw her, they hurried +back to the game, the Queen merely remarking that a moment's delay would +cost them their lives. + +[Illustration: _The Queen never left off quarrelling with the other +players, and shouting "Off with his head!" or, "Off with her head!"_] + +All the time they were playing the Queen never left off quarrelling with +the other players, and shouting "Off with his head!" or "Off with her +head!" Those whom she sentenced were taken into custody by the soldiers, +who of course had to leave off being arches to do this, so that by the +end of half an hour or so there were no arches left, and all the +players, except the King, the Queen, and Alice, were in custody and +under sentence of execution. + +Then the Queen left off, quite out of breath, and said to Alice, "Have +you seen the Mock Turtle yet?" + +"No," said Alice. "I don't even know what a Mock Turtle is." + +"It's the thing Mock Turtle Soup is made from," said the Queen. + +"I never saw one, or heard of one," said Alice. + +"Come on then," said the Queen, "and he shall tell you his history." + +As they walked off together, Alice heard the King say in a low voice, to +the company generally, "You are all pardoned." "Come, _that's_ a good +thing!" she said to herself, for she had felt quite unhappy at the +number of executions the Queen had ordered. + +They very soon came upon a Gryphon, lying fast asleep in the sun. (If +you don't know what a Gryphon is, look at the picture.) "Up, lazy +thing!" said the Queen, "and take this young lady to see the Mock +Turtle, and to hear his history. I must go back and see after some +executions I have ordered," and she walked off, leaving Alice alone +with the Gryphon. Alice did not quite like the look of the creature, but +on the whole she thought it would be quite as safe to stay with it as to +go after that savage Queen: so she waited. + +The Gryphon sat up and rubbed its eyes: then it watched the Queen till +she was out of sight: then it chuckled. "What fun!" said the Gryphon, +half to itself, half to Alice. + +"What _is_ the fun?" said Alice. + +"Why, _she_," said the Gryphon. "It's all her fancy, that: they never +executes nobody, you know. Come on!" + +"Everybody says 'come on!' here," thought Alice, as she went slowly +after it: "I never was so ordered about in my life, never!" + +[Illustration] + +They had not gone far before they saw the Mock Turtle in the distance, +sitting sad and lonely on a little ledge of rock, and, as they came +nearer, Alice could hear him sighing as if his heart would break. She +pitied him deeply. "What is his sorrow?" she asked the Gryphon, and the +Gryphon answered, very nearly in the same words as before, "It's all +his fancy, that: he hasn't got no sorrow, you know. Come on!" + +So they went up to the Mock Turtle, who looked at them with large eyes +full of tears, but said nothing. + +"This here young lady," said the Gryphon, "she wants to know your +history, she do." + +"I'll tell it her," said the Mock Turtle in a deep, hollow tone; "sit +down, both of you, and don't speak a word till I've finished." + +So they sat down, and nobody spoke for some minutes. Alice thought to +herself, "I don't see how he can _ever_ finish, if he doesn't begin." +But she waited patiently. + +"Once," said the Mock Turtle at last, with a deep sigh, "I was a real +Turtle." + +These words were followed by a very long silence, broken only by an +occasional exclamation of "Hjckrrh!" from the Gryphon, and the constant +heavy sobbing of the Mock Turtle. Alice was very nearly getting up and +saying "Thank you, sir, for your interesting story," but she could not +help thinking there _must_ be more to come, so she sat still and said +nothing. + +"When we were little," the Mock Turtle went on at last, more calmly, +though still sobbing a little now and then, "we went to school in the +sea. The master was an old Turtle--we used to call him Tortoise----" + +"Why did you call him Tortoise, if he wasn't one?" Alice asked. + +"We called him Tortoise because he taught us," said the Mock Turtle +angrily: "really you are very dull!" + +"You ought to be ashamed of yourself for asking such a simple question," +added the Gryphon; and then they both sat silent and looked at poor +Alice, who felt ready to sink into the earth. At last the Gryphon said +to the Mock Turtle, "Drive on, old fellow. Don't be all day about it!" +and he went on in these words: + +"Yes, we went to school in the sea, though you mayn't believe it----" + +"I never said I didn't!" interrupted Alice. + +"You did," said the Mock Turtle. + +"Hold your tongue!" added the Gryphon, before Alice could speak again. +The Mock Turtle went on:-- + +"We had the best of educations--in fact, we went to school every +day----" + +"_I've_ been to a day-school, too," said Alice; "you needn't be so proud +as all that." + +"With extras?" asked the Mock Turtle a little anxiously. + +"Yes," said Alice, "we learned French and music." + +"And washing?" said the Mock Turtle. + +"Certainly not!" said Alice indignantly. + +"Ah! then yours wasn't a really good school," said the Mock Turtle in a +tone of relief. "Now at _ours_ they had at the end of the bill, 'French, +music, _and washing_--extra.'" + +"You couldn't have wanted it much," said Alice; "living at the bottom of +the sea." + +"I couldn't afford to learn it," said the Mock Turtle with a sigh. "I +only took the regular course." + +"What was that?" inquired Alice. + +"Reeling and Writhing, of course, to begin with," the Mock Turtle +replied; "and then the different branches of Arithmetic--Ambition, +Distraction, Uglification, and Derision." + +"I never heard of 'Uglification,'" Alice ventured to say. "What is it?" + +The Gryphon lifted up both its paws in surprise. "Never heard of +uglifying!" it exclaimed. "You know what to beautify is, I suppose?" + +"Yes," said Alice doubtfully: "it means--to--make--anything--prettier." + +"Well, then," the Gryphon went on, "if you don't know what to uglify is, +you are a simpleton." + +Alice did not feel encouraged to ask any more questions about it, so she +turned to the Mock Turtle and said, "What else had you to learn?" + +"Well, there was Mystery," the Mock Turtle replied, counting off the +subjects on his flappers, "--Mystery, ancient and modern, with +Seaography: then Drawling--the Drawling-master was an old conger-eel, +that used to come once a week: _he_ taught us Drawling, Stretching, and +Fainting in Coils." + +"What was _that_ like?" said Alice. + +"Well, I can't show it you myself," the Mock Turtle said: "I'm too +stiff. And the Gryphon never learnt it." + +"Hadn't time," said the Gryphon: "I went to the Classical master, +though. He was an old crab, _he_ was." + +"I never went to him," the Mock Turtle said with a sigh: "he taught +Laughing and Grief, they used to say." + +"So he did, so he did," said the Gryphon, sighing in his turn; and both +creatures hid their faces in their paws. + +"And how many hours a day did you do lessons?" said Alice, in a hurry to +change the subject. + +"Ten hours the first day," said the Mock Turtle: "nine the next, and so +on." + +"What a curious plan!" exclaimed Alice. + +"That's the reason they're called lessons," the Gryphon remarked: +"because they lessen from day to day." + +This was quite a new idea to Alice, and she thought over it a little +before she made her next remark. "Then the eleventh day must have been a +holiday." + +"Of course it was," said the Mock Turtle. + +"And how did you manage on the twelfth?" Alice went on eagerly. + +"That's enough about lessons," the Gryphon interrupted in a very decided +tone: "tell her something about the games now." + + + + +CHAPTER X + + +[Sidenote: _The Lobster Quadrille_] + +THE Mock Turtle sighed deeply, and drew the back of one +flapper across his eyes. He looked at Alice, and tried to speak, but, +for a minute or two, sobs choked his voice. "Same as if he had a bone in +his throat," said the Gryphon: and it set to work shaking him and +punching him in the back. At last the Mock Turtle recovered his voice, +and, with tears running down his cheeks, went on again: + +"You may not have lived much under the sea--" ("I haven't," said Alice) +"and perhaps you were never even introduced to a lobster--" (Alice began +to say "I once tasted----" but checked herself hastily, and said "No, +never") "--so you can have no idea what a delightful thing a Lobster +Quadrille is!" + +"No, indeed," said Alice. "What sort of a dance is it?" + +"Why," said the Gryphon, "you first form into a line along the +sea-shore----" + +"Two lines!" cried the Mock Turtle. "Seals, turtles, and so on; then, +when you've cleared the jelly-fish out of the way----" + +"_That_ generally takes some time," interrupted the Gryphon. + +"--you advance twice----" + +"Each with a lobster as a partner!" cried the Gryphon. + +"Of course," the Mock Turtle said: "advance twice, set to partners----" + +"--change lobsters, and retire in same order," continued the Gryphon. + +"Then, you know," the Mock Turtle went on, "you throw the----" + +"The lobsters!" shouted the Gryphon, with a bound into the air. + +"--as far out to sea as you can----" + +"Swim, after them!" screamed the Gryphon. + +"Turn a somersault in the sea!" cried the Mock Turtle, capering wildly +about. + +"Change lobsters again!" yelled the Gryphon. + +"Back to land again, and--that's all the first figure," said the Mock +Turtle, suddenly dropping his voice; and the two creatures, who had been +jumping about like mad things all this time, sat down again very sadly +and quietly, and looked at Alice. + +"It must be a very pretty dance," said Alice, timidly. + +"Would you like to see a little of it?" said the Mock Turtle. + +"Very much indeed," said Alice. + +"Come, let's try the first figure!" said the Mock Turtle to the Gryphon. +"We can do it without lobsters, you know. Which shall sing?" + +"Oh, _you_ sing," said the Gryphon. "I've forgotten the words." + +So they began solemnly dancing round and round Alice, every now and then +treading on her toes when they passed too close, and waving their +forepaws to mark the time, while the Mock Turtle sang this, very slowly +and sadly:-- + + "Will you walk a little faster?" said a whiting to a snail, + "There's a porpoise close behind us, and he's treading on my tail. + See how eagerly the lobsters and the turtles all advance! + They are waiting on the shingle--will you come and join the dance? + Will you, won't you, will you, won't you, will you join the dance? + Will you, won't you, will you, won't you, won't you join the dance? + + "You can really have no notion how delightful it will be, + When they take us up and throw us, with the lobsters, out to sea!" + But the snail replied: "Too far, too far!" and gave a look askance-- + Said he thanked the whiting kindly, but he would not join the dance. + Would not, could not, would not, could not, would not join the dance. + Would not, could not, would not, could not, could not join the dance. + + "What matters it how far we go?" his scaly friend replied; + "There is another shore, you know, upon the other side. + The further off from England the nearer is to France-- + Then turn not pale, beloved snail, but come and join the dance. + Will you, won't you, will you, won't you, will you join the dance? + Will you, won't you, will you, won't you, won't you join the dance?" + +"Thank you, it's a very interesting dance to watch," said Alice, feeling +very glad that it was over at last: "and I do so like that curious song +about the whiting!" + +"Oh, as to the whiting," said the Mock Turtle, "they--you've seen them, +of course?" + +"Yes," said Alice, "I've often seen them at dinn----" she checked +herself hastily. + +"I don't know where Dinn may be," said the Mock Turtle, "but if you've +seen them so often, of course you know what they're like." + +"I believe so," Alice replied thoughtfully. "They have their tails in +their mouths--and they're all over crumbs." + +"You're wrong about the crumbs," said the Mock Turtle: "crumbs would all +wash off in the sea. But they _have_ their tails in their mouths; and +the reason is--" here the Mock Turtle yawned and shut his eyes. "Tell +her about the reason and all that," he said to the Gryphon. + +"The reason is," said the Gryphon, "that they _would_ go with the +lobsters to the dance. So they got thrown out to sea. So they had to +fall a long way. So they got their tails fast in their mouths. So they +couldn't get them out again. That's all." + +"Thank you," said Alice. "It's very interesting. I never knew so much +about a whiting before." + +"I can tell you more than that, if you like," said the Gryphon. "Do you +know why it's called a whiting?" + +"I never thought about it," said Alice. "Why?" + +"_It does the boots and shoes_," the Gryphon replied very solemnly. + +Alice was thoroughly puzzled. "Does the boots and shoes!" she repeated +in a wondering tone. + +"Why, what are _your_ shoes done with?" said the Gryphon. "I mean, what +makes them so shiny?" + +Alice looked down at them, and considered a little before she gave her +answer. "They're done with blacking, I believe." + +"Boots and shoes under the sea," the Gryphon went on in a deep voice, +"are done with whiting. Now you know." + +"And what are they made of?" Alice asked in a tone of great curiosity. + +"Soles and eels, of course," the Gryphon replied rather impatiently: +"any shrimp could have told you that." + +"If I'd been the whiting," said Alice, whose thoughts were still running +on the song, "I'd have said to the porpoise, 'Keep back, please: we +don't want _you_ with us!'" + +"They were obliged to have him with them," the Mock Turtle said: "no +wise fish would go anywhere without a porpoise." + +"Wouldn't it really?" said Alice in a tone of great surprise. + +"Of course not," said the Mock Turtle: "why, if a fish came to _me_, and +told me he was going a journey, I should say, 'With what porpoise?'" + +"Don't you mean 'purpose'?" said Alice. + +"I mean what I say," the Mock Turtle replied in an offended tone. And +the Gryphon added, "Come, let's hear some of _your_ adventures." + +[Illustration: _The Mock Turtle drew a long breath and said, "That's +very curious"_] + +"I could tell you my adventures--beginning from this morning," said +Alice a little timidly: "but it's no use going back to yesterday, +because I was a different person then." + +"Explain all that," said the Mock Turtle. + +"No, no! The adventures first," said the Gryphon in an impatient tone: +"explanations take such a dreadful time." + +So Alice began telling them her adventures from the time when she first +saw the White Rabbit. She was a little nervous about it just at first, +the two creatures got so close to her, one on each side, and opened +their eyes and mouths so _very_ wide, but she gained courage as she went +on. Her listeners were perfectly quiet till she got to the part about +her repeating "_You are old, Father William_," to the Caterpillar, and +the words all coming different, and then the Mock Turtle drew a long +breath, and said, "That's very curious." + +"It's all about as curious as it can be," said the Gryphon. + +"It all came different!" the Mock Turtle repeated thoughtfully. "I +should like to hear her repeat something now. Tell her to begin." He +looked at the Gryphon as if he thought it had some kind of authority +over Alice. + +"Stand up and repeat '_'Tis the voice of the sluggard_,'" said the +Gryphon. + +"How the creatures order one about, and make one repeat lessons!" +thought Alice. "I might as well be at school at once." However, she got +up, and began to repeat it, but her head was so full of the Lobster +Quadrille, that she hardly knew what she was saying, and the words came +very queer indeed:-- + + "'Tis the voice of the Lobster; I heard him declare, + 'You have baked me too brown, I must sugar my hair.' + As a duck with its eyelids, so he with his nose + Trims his belt and his buttons, and turns out his toes. + When the sands are all dry, he is gay as a lark, + And will talk in contemptuous tones of the Shark: + But, when the tide rises and sharks are around, + His voice has a timid and tremulous sound." + +"That's different from what _I_ used to say when I was a child," said +the Gryphon. + +"Well, _I_ never heard it before," said the Mock Turtle: "but it sounds +uncommon nonsense." + +Alice said nothing; she had sat down with her face in her hands, +wondering if anything would _ever_ happen in a natural way again. + +"I should like to have it explained," said the Mock Turtle. + +"She ca'n't explain it," hastily said the Gryphon. "Go on with the next +verse." + +"But about his toes?" the Mock Turtle persisted. "How _could_ he turn +them out with his nose, you know?" + +"It's the first position in dancing," Alice said; but was dreadfully +puzzled by the whole thing, and longed to change the subject. + +"Go on with the next verse," the Gryphon repeated: "it begins '_I passed +by his garden_.'" + +Alice did not dare to disobey, though she felt sure it would all come +wrong, and she went on in a trembling voice: + + "I passed by his garden, and marked, with one eye, + How the Owl and the Panther were sharing a pie: + The Panther took pie-crust, and gravy, and meat, + While the Owl had the dish as its share of the treat. + When the pie was all finished, the Owl, as a boon, + Was kindly permitted to pocket the spoon: + While the Panther received knife and fork with a growl, + And concluded the banquet by----" + +"What _is_ the use of repeating all that stuff," the Mock Turtle +interrupted, "if you don't explain it as you go on? It's by far the most +confusing thing _I_ ever heard!" + +[Illustration] + +"Yes, I think you'd better leave off," said the Gryphon: and Alice was +only too glad to do so. + +"Shall we try another figure of the Lobster Quadrille?" the Gryphon went +on. "Or would you like the Mock Turtle to sing you another song?" + +"Oh, a song, please, if the Mock Turtle would be so kind," Alice +replied, so eagerly that the Gryphon said, in a rather offended tone, +"H'm! No accounting for tastes! Sing her '_Turtle Soup_,' will you, old +fellow?" + +The Mock Turtle sighed deeply, and began, in a voice choked with sobs, +to sing this:-- + + "Beautiful Soup, so rich and green, + Waiting in a hot tureen! + Who for such dainties would not stoop? + Soup of the evening, beautiful Soup! + Soup of the evening, beautiful Soup! + Beau--ootiful Soo--oop! + Beau--ootiful Soo--oop! + Soo--oop of the e--e--evening, + Beautiful, beautiful Soup! + + "Beautiful Soup! Who cares for fish, + Game, or any other dish? + Who would not give all else for two + Pennyworth only of beautiful Soup? + Pennyworth only of beautiful Soup? + Beau--ootiful Soo--oop! + Beau--ootiful Soo--oop! + Soo--oop of the e--e--evening, + Beautiful, beauti--FUL SOUP!" + +"Chorus again!" cried the Gryphon, and the Mock Turtle had just begun +to repeat it, when a cry of "The trial's beginning!" was heard in the +distance. + +"Come on!" cried the Gryphon, and, taking Alice by the hand, it hurried +off, without waiting for the end of the song. + +"What trial is it?" Alice panted as she ran; but the Gryphon only +answered "Come on!" and ran the faster, while more and more faintly +came, carried on the breeze that followed them, the melancholy words:-- + + "Soo--oop of the e--e--evening, + Beautiful, beautiful Soup!" + + + + +CHAPTER XI + + +[Sidenote: _Who Stole the Tarts?_] + +THE King and Queen of Hearts were seated on their throne +when they arrived, with a great crowd assembled about them--all sorts of +little birds and beasts, as well as the whole pack of cards: the Knave +was standing before them, in chains, with a soldier on each side to +guard him; and near the King was the White Rabbit, with a trumpet in one +hand, and a scroll of parchment in the other. In the very middle of the +court was a table, with a large dish of tarts upon it: they looked so +good, that it made Alice quite hungry to look at them--"I wish they'd +get the trial done," she thought, "and hand round the refreshments!" But +there seemed to be no chance of this, so she began looking about her, to +pass away the time. + +Alice had never been in a court of justice before, but she had read +about them in books, and she was quite pleased to find that she knew the +name of nearly everything there. "That's the judge," she said to +herself, "because of his great wig." + +The judge, by the way, was the King; and as he wore his crown over the +wig, he did not look at all comfortable, and it was certainly not +becoming. + +"And that's the jury-box," thought Alice, "and those twelve creatures," +(she was obliged to say "creatures," you see, because some of them were +animals, and some were birds,) "I suppose they are the jurors." She said +this last word two or three times over to herself, being rather proud of +it: for she thought, and rightly too, that very few little girls of her +age knew the meaning of it at all. However, "jurymen" would have done +just as well. + +The twelve jurors were all writing very busily on slates. "What are they +all doing?" Alice whispered to the Gryphon. "They can't have anything to +put down yet, before the trial's begun." + +[Illustration: _Who stole the tarts?_] + +"They're putting down their names," the Gryphon whispered in reply, +"for fear they should forget them before the end of the trial." + +"Stupid things!" Alice began in a loud, indignant voice, but she stopped +hastily, for the White Rabbit cried out "Silence in the court!" and the +King put on his spectacles and looked anxiously round, to see who was +talking. + +Alice could see, as well as if she were looking over their shoulders, +that all the jurors were writing down "stupid things!" on their slates, +and she could even make out that one of them didn't know how to spell +"stupid," and that he had to ask his neighbour to tell him. "A nice +muddle their slates will be in before the trial's over!" thought Alice. + +One of the jurors had a pencil that squeaked. This, of course, Alice +could _not_ stand, and she went round the court and got behind him, and +very soon found an opportunity of taking it away. She did it so quickly +that the poor little juror (it was Bill, the Lizard) could not make out +at all what had become of it; so, after hunting all about for it, he +was obliged to write with one finger for the rest of the day; and this +was of very little use, as it left no mark on the slate. + +"Herald, read the accusation!" said the King. + +On this the White Rabbit blew three blasts on the trumpet, and then +unrolled the parchment scroll, and read as follows: + + "The Queen of Hearts, she made some tarts, + All on a summer day: + The Knave of Hearts, he stole those tarts, + And took them quite away!" + +"Consider your verdict," the King said to the jury. + +"Not yet, not yet!" the Rabbit hastily interrupted. "There's a great +deal to come before that!" + +"Call the first witness," said the King; and the Rabbit blew three +blasts on the trumpet, and called out "First witness!" + +The first witness was the Hatter. He came in with a teacup in one hand +and a piece of bread-and-butter in the other. "I beg pardon, your +Majesty," he began, "for bringing these in; but I hadn't quite finished +my tea when I was sent for." + +"You ought to have finished," said the King. "When did you begin?" + +The Hatter looked at the March Hare, who had followed him into the +court, arm-in-arm with the Dormouse. "Fourteenth of March, I _think_ it +was," he said. + +"Fifteenth," said the March Hare. + +"Sixteenth," said the Dormouse. + +"Write that down," the King said to the jury, and the jury eagerly wrote +down all three dates on their slates, and then added them up, and +reduced the answer to shillings and pence. + +"Take off your hat," the King said to the Hatter. + +"It isn't mine," said the Hatter. + +"_Stolen!_" the King exclaimed, turning to the jury, who instantly made +a memorandum of the fact. + +"I keep them to sell," the Hatter added as an explanation: "I've none of +my own. I'm a hatter." + +Here the Queen put on her spectacles, and began staring hard at the +Hatter, who turned pale and fidgeted. + +"Give your evidence," said the King; "and don't be nervous, or I'll have +you executed on the spot." + +This did not seem to encourage the witness at all: he kept shifting from +one foot to the other, looking uneasily at the Queen, and in his +confusion he bit a large piece out of his teacup instead of the +bread-and-butter. + +Just at this moment Alice felt a very curious sensation, which puzzled +her a good deal until she made out what it was: she was beginning to +grow larger again, and she thought at first she would get up and leave +the court; but on second thoughts she decided to remain where she was as +long as there was room for her. + +"I wish you wouldn't squeeze so," said the Dormouse, who was sitting +next to her. "I can hardly breathe." + +"I can't help it," said Alice very meekly: "I'm growing." + +"You've no right to grow _here_," said the Dormouse. + +"Don't talk nonsense," said Alice more boldly: "you know you're growing +too." + +"Yes, but _I_ grow at a reasonable pace," said the Dormouse; "not in +that ridiculous fashion." And he got up very sulkily and crossed over to +the other side of the court. + +All this time the Queen had never left off staring at the Hatter, and, +just as the Dormouse crossed the court, she said to one of the officers +of the court, "Bring me the list of the singers in the last concert!" on +which the wretched Hatter trembled so, that he shook off both his shoes. + +"Give your evidence," the King repeated angrily, "or I'll have you +executed, whether you're nervous or not." + +"I'm a poor man, your Majesty," the Hatter began, in a trembling voice, +"--and I hadn't begun my tea--not above a week or so--and what with the +bread-and-butter getting so thin--and the twinkling of the tea----" + +"The twinkling of _what_?" said the King. + +"It _began_ with the tea," the Hatter replied. + +"Of course twinkling _begins_ with a T!" said the King sharply. "Do you +take me for a dunce? Go on!" + +"I'm a poor man," the Hatter went on, "and most things twinkled after +that--only the March Hare said----" + +"I didn't!" the March Hare interrupted in a great hurry. + +"You did!" said the Hatter. + +"I deny it!" said the March Hare. + +"He denies it," said the King: "leave out that part." + +"Well, at any rate, the Dormouse said----" the Hatter went on, looking +anxiously round to see if he would deny it too: but the Dormouse denied +nothing, being fast asleep. + +"After that," continued the Hatter, "I cut some more +bread-and-butter----" + +"But what did the Dormouse say?" one of the jury asked. + +"That I can't remember," said the Hatter. + +"You _must_ remember," remarked the King, "or I'll have you executed." + +The miserable Hatter dropped his teacup and bread-and-butter, and went +down on one knee. "I'm a poor man, your Majesty," he began. + +"You're a _very_ poor _speaker_," said the King. + +Here one of the guinea-pigs cheered, and was immediately suppressed by +the officers of the court. (As that is rather a hard word, I will just +explain to you how it was done. They had a large canvas bag, which tied +up at the mouth with strings: into this they slipped the guinea-pig, +head first, and then sat upon it.) + +"I'm glad I've seen that done," thought Alice. "I've so often read in +the newspapers, at the end of trials, 'There was some attempt at +applause, which was immediately suppressed by the officers of the +court,' and I never understood what it meant till now." + +"If that's all you know about it, you may stand down," continued the +King. + +"I can't go no lower," said the Hatter: "I'm on the floor, as it is." + +"Then you may _sit_ down," the King replied. + +Here the other guinea-pig cheered, and was suppressed. + +"Come, that finishes the guinea-pigs!" thought Alice. "Now we shall get +on better." + +"I'd rather finish my tea," said the Hatter, with an anxious look at +the Queen, who was reading the list of singers. + +"You may go," said the King; and the Hatter hurriedly left the court, +without even waiting to put his shoes on. + +"--and just take his head off outside," the Queen added to one of the +officers; but the Hatter was out of sight before the officer could get +to the door. + +"Call the next witness!" said the King. + +The next witness was the Duchess's cook. She carried the pepper-box in +her hand, and Alice guessed who it was, even before she got into the +court, by the way the people near the door began sneezing all at once. + +"Give your evidence," said the King. + +"Sha'n't," said the cook. + +The King looked anxiously at the White Rabbit, who said in a low voice, +"Your Majesty must cross-examine _this_ witness." + +"Well, if I must, I must," the King said with a melancholy air, and, +after folding his arms and frowning at the cook till his eyes were +nearly out of sight, he said in a deep voice, "What are tarts made of?" + +"Pepper, mostly," said the cook. + +"Treacle," said a sleepy voice behind her. + +"Collar that Dormouse," the Queen shrieked out. "Behead that Dormouse! +Turn that Dormouse out of court! Suppress him! Pinch him! Off with his +whiskers." + +For some minutes the whole court was in confusion, getting the Dormouse +turned out, and, by the time they had settled down again, the cook had +disappeared. + +[Illustration] + +"Never mind!" said the King, with an air of great relief. "Call the next +witness." And he added in an undertone to the Queen, "Really, my dear, +_you_ must cross-examine the next witness. It quite makes my forehead +ache!" + +Alice watched the White Rabbit as he fumbled over the list, feeling very +curious to see what the next witness would be like, "--for they haven't +got much evidence _yet_," she said to herself. Imagine her surprise, +when the White Rabbit read out, at the top of his shrill little voice, +the name "Alice!" + + + + +CHAPTER XII + + +[Sidenote: _Alice's Evidence_] + +"HERE!" cried Alice, quite forgetting in the flurry of +the moment how large she had grown in the last few minutes, and she +jumped up in such a hurry that she tipped over the jury-box with the +edge of her skirt, upsetting all the jurymen on to the heads of the +crowd below, and there they lay sprawling about, reminding her very much +of a globe of gold-fish she had accidentally upset the week before. + +"Oh, I _beg_ your pardon!" she exclaimed in a tone of great dismay, and +began picking them up again as quickly as she could, for the accident of +the gold-fish kept running in her head, and she had a vague sort of idea +that they must be collected at once and put back into the jury-box, or +they would die. + +"The trial cannot proceed," said the King in a very grave voice, "until +all the jurymen are back in their proper places--_all_," he repeated +with great emphasis, looking hard at Alice as he said so. + +Alice looked at the jury-box, and saw that, in her haste, she had put +the Lizard in head downwards, and the poor little thing was waving its +tail about in a melancholy way, being quite unable to move. She soon got +it out again, and put it right; "not that it signifies much," she said +to herself; "I should think it would be _quite_ as much use in the trial +one way up as the other." + +As soon as the jury had a little recovered from the shock of being +upset, and their slates and pencils had been found and handed back to +them, they set to work very diligently to write out a history of the +accident, all except the Lizard, who seemed too much overcome to do +anything but sit with its mouth open, gazing up into the roof of the +court. + +"What do you know about this business?" the King said to Alice. + +"Nothing," said Alice. + +"Nothing _whatever_?" persisted the King. + +"Nothing whatever," said Alice. + +"That's very important," the King said, turning to the jury. They were +just beginning to write this down on their slates, when the White Rabbit +interrupted: "_Un_important, your Majesty means, of course," he said in +a very respectful tone, but frowning and making faces at him as he +spoke. + +"_Un_important, of course, I meant," the King hastily said, and went on +himself in an undertone,"important--unimportant--unimportant--important----" +as if he were trying which word sounded best. + +Some of the jury wrote it down "important," and some "unimportant." +Alice could see this, as she was near enough to look over their slates; +"but it doesn't matter a bit," she thought to herself. + +At this moment the King, who had been for some time busily writing in +his note-book, called out "Silence!" and read out from his book, "Rule +Forty-two. _All persons more than a mile high to leave the court._" + +Everybody looked at Alice. + +"_I'm_ not a mile high," said Alice. + +"You are," said the King. + +"Nearly two miles high," added the Queen. + +"Well, I sha'n't go, at any rate," said Alice: "besides, that's not a +regular rule: you invented it just now." + +"It's the oldest rule in the book," said the King. + +"Then it ought to be Number One," said Alice. + +The King turned pale, and shut his note-book hastily. "Consider your +verdict," he said to the jury, in a low trembling voice. + +"There's more evidence to come yet, please your Majesty," said the White +Rabbit, jumping up in a great hurry: "this paper has just been picked +up." + +"What's in it?" said the Queen. + +"I haven't opened it yet," said the White Rabbit, "but it seems to be a +letter, written by the prisoner to--to somebody." + +"It must have been that," said the King, "unless it was written to +nobody, which isn't usual, you know." + +"Who is it directed to?" said one of the jurymen. + +"It isn't directed at all," said the White Rabbit; "in fact, there's +nothing written on the _outside_." He unfolded the paper as he spoke, +and added "It isn't a letter after all: it's a set of verses." + +"Are they in the prisoner's handwriting?" asked another of the jurymen. + +"No, they're not," said the White Rabbit, "and that's the queerest thing +about it." (The jury all looked puzzled.) + +"He must have imitated somebody else's hand," said the King. (The jury +all brightened up again.) + +"Please your Majesty," said the Knave, "I didn't write it, and they +can't prove that I did: there's no name signed at the end." + +"If you didn't sign it," said the King, "that only makes the matter +worse. You _must_ have meant some mischief, or else you'd have signed +your name like an honest man." + +There was a general clapping of hands at this: it was the first really +clever thing the King had said that day. + +"That _proves_ his guilt, of course," said the Queen: "so, off with----" + +"It doesn't prove anything of the sort!" said Alice. "Why, you don't +even know what they're about!" + +"Read them," said the King. + +The White Rabbit put on his spectacles. "Where shall I begin, please +your Majesty?" he asked. + +"Begin at the beginning," the King said gravely, "and go on till you +come to the end; then stop." + +There was dead silence in the court, whilst the White Rabbit read out +these verses:-- + + "They told me you had been to her, + And mentioned me to him: + She gave me a good character, + But said I could not swim. + + He sent them word I had not gone, + (We know it to be true): + If she should push the matter on, + What would become of you? + + I gave her one, they gave him two, + You gave us three or more; + They all returned from him to you, + Though they were mine before. + + If I or she should chance to be + Involved in this affair, + He trusts to you to set them free, + Exactly as we were. + + My notion was that you had been + (Before she had this fit) + An obstacle that came between + Him, and ourselves, and it. + + Don't let him know she liked them best, + For this must ever be + A secret, kept from all the rest, + Between yourself and me." + +"That's the most important piece of evidence we've heard yet," said the +King, rubbing his hands; "so now let the jury----" + +"If any of them can explain it," said Alice, (she had grown so large in +the last few minutes that she wasn't a bit afraid of interrupting him,) +"I'll give him sixpence. _I_ don't believe there's an atom of meaning in +it." + +The jury all wrote down on their slates, "_She_ doesn't believe there's +an atom of meaning in it," but none of them attempted to explain the +paper. + +"If there's no meaning in it," said the King, "that saves a world of +trouble, you know, as we needn't try to find any. And yet I don't +know," he went on, spreading out the verses on his knee, and looking at +them with one eye; "I seem to see some meaning in them after all. +'----_said I could not swim_--' you can't swim can you?" he added, +turning to the Knave. + +The Knave shook his head sadly. "Do I look like it?" he said. (Which he +certainly did _not_, being made entirely of cardboard.) + +"All right, so far," said the King, as he went on muttering over the +verses to himself: "'_We know it to be true_--' that's the jury, of +course--'_If she should push the matter on_'--that must be the +Queen--'_What would become of you?_'--What, indeed!--'_I gave her one, +they gave him two_--' why, that must be what he did with the tarts, you +know----" + +"But it goes on '_they all returned from him to you_,'" said Alice. + +"Why, there they are!" said the King triumphantly, pointing to the tarts +on the table. "Nothing can be clearer than _that_. Then again--'_before +she had this fit_--' you never had _fits_, my dear, I think?" he said to +the Queen. + +"Never!" said the Queen furiously, throwing an inkstand at the Lizard +as she spoke. (The unfortunate little Bill had left off writing on his +slate with one finger, as he found it made no mark; but he now hastily +began again, using the ink, that was trickling down his face, as long as +it lasted.) + +"Then the words don't _fit_ you," said the King, looking round the court +with a smile. There was a dead silence. + +"It's a pun!" the King added in an angry tone, and everybody laughed. + +"Let the jury consider their verdict," the King said, for about the +twentieth time that day. + +"No, no!" said the Queen. "Sentence first--verdict afterwards." + +"Stuff and nonsense!" said Alice loudly. "The idea of having the +sentence first!" + +"Hold your tongue!" said the Queen, turning purple. + +"I won't!" said Alice. + +"Off with her head!" the Queen shouted at the top of her voice. Nobody +moved. + +"Who cares for _you_?" said Alice (she had grown to her full size by +this time). "You're nothing but a pack of cards!" + +[Illustration: _At this the whole pack rose up into the air, and came +flying down upon her_] + +At this the whole pack rose up into the air, and came flying down upon +her: she gave a little scream, half of fright and half of anger, and +tried to beat them off, and found herself lying on the bank, with her +head in the lap of her sister, who was gently brushing away some dead +leaves that had fluttered down from the trees upon her face. + +"Wake up, Alice dear!" said her sister. "Why, what a long sleep you've +had!" + +"Oh, I've had such a curious dream!" said Alice, and she told her +sister, as well as she could remember them, all these strange Adventures +of hers that you have just been reading about; and when she had +finished, her sister kissed her, and said "It _was_ a curious dream, +dear, certainly: but now run in to your tea; it's getting late." So +Alice got up and ran off, thinking while she ran, as well she might, +what a wonderful dream it had been. + + + + +BUT her sister sat still just as she had left her, leaning her head, +watching the setting sun, and thinking of little Alice and all her +wonderful Adventures, till she too began dreaming after a fashion, and +this was her dream: + +First, she dreamed of little Alice herself, and once again the tiny +hands were clasped upon her knee, and the bright eager eyes were looking +up into hers--she could hear the very tones of her voice, and see that +queer little toss of her head to keep back the wandering hair that +_would_ always get into her eyes--and still as she listened, or seemed +to listen, the whole place around her became alive with the strange +creatures of her little sister's dream. + +The long grass rustled at her feet as the White Rabbit hurried by--the +frightened Mouse splashed his way through the neighbouring pool--she +could hear the rattle of the teacups as the March Hare and his friends +shared their never-ending meal, and the shrill voice of the Queen +ordering off her unfortunate guests to execution--once more the pig-baby +was sneezing on the Duchess' knee, while plates and dishes crashed +around it--once more the shriek of the Gryphon, the squeaking of the +Lizard's slate-pencil, and the choking of the suppressed guinea-pigs, +filled the air, mixed up with the distant sobs of the miserable Mock +Turtle. + +So she sat on with closed eyes, and half believed herself in Wonderland, +though she knew she had but to open them again, and all would change to +dull reality--the grass would be only rustling in the wind, and the pool +rippling to the waving of the reeds--the rattling teacups would change +to the tinkling sheep-bells, and the Queen's shrill cries to the voice +of the shepherd boy--and the sneeze of the baby, the shriek of the +Gryphon, and all the other queer noises, would change (she knew) to the +confused clamour of the busy farm-yard--while the lowing of the cattle +in the distance would take the place of the Mock Turtle's heavy sobs. + +Lastly, she pictured to herself how this same little sister of hers +would, in the after-time, be herself a grown woman; and how she would +keep, through all her riper years, the simple and loving heart of her +childhood: and how she would gather about her other little children, +and make _their_ eyes bright and eager with many a strange tale, perhaps +even with the dream of Wonderland of long ago: and how she would feel +with all their simple sorrows, and find a pleasure in all their simple +joys, remembering her own child-life, and the happy summer days. + + +THE END + + + + + ILLUSTRATIONS REPRODUCED BY HENTSCHEL COLOURTYPE + TEXT PRINTED BY BALLANTYNE & COMPANY LTD + AT THE BALLANTYNE PRESS + TAVISTOCK STREET + LONDON + + * * * * * + +Transcriber's Notes: + +Page 8, opening quote added to text (doorway; "and even if) + +Page 33, "she" changed to "she's" (And she's such a) + +Page 37, "quiet" changed to "quite" (I'm quite tired of) + +Page 41, colon changed to period (arm, yer honour.) + +Page 42, "wont" changed to "want" (want to stay) + +Page 66, closing quotation mark added (to-morrow----") + +Page 69, single quotation mark changed to double (cat," said the +Duchess) + +Page 91, word "to" added to text (minute or two to) + +Page 103, word "as" added to the text (just as she had) + +Page 104, "hedge-hog" changed to "hedgehog" (send the hedgehog to) + +Page 126, end parenthesis added ("No, never") + +Page 153, added an apostrophe (What's in it?) + + + + + + +End of Project Gutenberg's Alice's Adventures in Wonderland, by Lewis Carroll + +*** END OF THIS PROJECT GUTENBERG EBOOK ALICE'S ADVENTURES IN WONDERLAND *** + +***** This file should be named 28885-8.txt or 28885-8.zip ***** +This and all associated files of various formats will be found in: + http://www.gutenberg.org/2/8/8/8/28885/ + +Produced by Jana Srna, Emmy and the Online Distributed +Proofreading Team at http://www.pgdp.net (This file was +produced from images generously made available by the +University of Florida Digital Collections.) + + +Updated editions will replace the previous one--the old editions +will be renamed. + +Creating the works from public domain print editions means that no +one owns a United States copyright in these works, so the Foundation +(and you!) can copy and distribute it in the United States without +permission and without paying copyright royalties. Special rules, +set forth in the General Terms of Use part of this license, apply to +copying and distributing Project Gutenberg-tm electronic works to +protect the PROJECT GUTENBERG-tm concept and trademark. Project +Gutenberg is a registered trademark, and may not be used if you +charge for the eBooks, unless you receive specific permission. If you +do not charge anything for copies of this eBook, complying with the +rules is very easy. You may use this eBook for nearly any purpose +such as creation of derivative works, reports, performances and +research. They may be modified and printed and given away--you may do +practically ANYTHING with public domain eBooks. Redistribution is +subject to the trademark license, especially commercial +redistribution. + + + +*** START: FULL LICENSE *** + +THE FULL PROJECT GUTENBERG LICENSE +PLEASE READ THIS BEFORE YOU DISTRIBUTE OR USE THIS WORK + +To protect the Project Gutenberg-tm mission of promoting the free +distribution of electronic works, by using or distributing this work +(or any other work associated in any way with the phrase "Project +Gutenberg"), you agree to comply with all the terms of the Full Project +Gutenberg-tm License (available with this file or online at +http://gutenberg.net/license). + + +Section 1. General Terms of Use and Redistributing Project Gutenberg-tm +electronic works + +1.A. By reading or using any part of this Project Gutenberg-tm +electronic work, you indicate that you have read, understand, agree to +and accept all the terms of this license and intellectual property +(trademark/copyright) agreement. If you do not agree to abide by all +the terms of this agreement, you must cease using and return or destroy +all copies of Project Gutenberg-tm electronic works in your possession. +If you paid a fee for obtaining a copy of or access to a Project +Gutenberg-tm electronic work and you do not agree to be bound by the +terms of this agreement, you may obtain a refund from the person or +entity to whom you paid the fee as set forth in paragraph 1.E.8. + +1.B. "Project Gutenberg" is a registered trademark. It may only be +used on or associated in any way with an electronic work by people who +agree to be bound by the terms of this agreement. There are a few +things that you can do with most Project Gutenberg-tm electronic works +even without complying with the full terms of this agreement. See +paragraph 1.C below. There are a lot of things you can do with Project +Gutenberg-tm electronic works if you follow the terms of this agreement +and help preserve free future access to Project Gutenberg-tm electronic +works. See paragraph 1.E below. + +1.C. The Project Gutenberg Literary Archive Foundation ("the Foundation" +or PGLAF), owns a compilation copyright in the collection of Project +Gutenberg-tm electronic works. Nearly all the individual works in the +collection are in the public domain in the United States. If an +individual work is in the public domain in the United States and you are +located in the United States, we do not claim a right to prevent you from +copying, distributing, performing, displaying or creating derivative +works based on the work as long as all references to Project Gutenberg +are removed. Of course, we hope that you will support the Project +Gutenberg-tm mission of promoting free access to electronic works by +freely sharing Project Gutenberg-tm works in compliance with the terms of +this agreement for keeping the Project Gutenberg-tm name associated with +the work. You can easily comply with the terms of this agreement by +keeping this work in the same format with its attached full Project +Gutenberg-tm License when you share it without charge with others. + +1.D. The copyright laws of the place where you are located also govern +what you can do with this work. Copyright laws in most countries are in +a constant state of change. If you are outside the United States, check +the laws of your country in addition to the terms of this agreement +before downloading, copying, displaying, performing, distributing or +creating derivative works based on this work or any other Project +Gutenberg-tm work. The Foundation makes no representations concerning +the copyright status of any work in any country outside the United +States. + +1.E. Unless you have removed all references to Project Gutenberg: + +1.E.1. The following sentence, with active links to, or other immediate +access to, the full Project Gutenberg-tm License must appear prominently +whenever any copy of a Project Gutenberg-tm work (any work on which the +phrase "Project Gutenberg" appears, or with which the phrase "Project +Gutenberg" is associated) is accessed, displayed, performed, viewed, +copied or distributed: + +This eBook is for the use of anyone anywhere at no cost and with +almost no restrictions whatsoever. You may copy it, give it away or +re-use it under the terms of the Project Gutenberg License included +with this eBook or online at www.gutenberg.net + +1.E.2. If an individual Project Gutenberg-tm electronic work is derived +from the public domain (does not contain a notice indicating that it is +posted with permission of the copyright holder), the work can be copied +and distributed to anyone in the United States without paying any fees +or charges. If you are redistributing or providing access to a work +with the phrase "Project Gutenberg" associated with or appearing on the +work, you must comply either with the requirements of paragraphs 1.E.1 +through 1.E.7 or obtain permission for the use of the work and the +Project Gutenberg-tm trademark as set forth in paragraphs 1.E.8 or +1.E.9. + +1.E.3. If an individual Project Gutenberg-tm electronic work is posted +with the permission of the copyright holder, your use and distribution +must comply with both paragraphs 1.E.1 through 1.E.7 and any additional +terms imposed by the copyright holder. Additional terms will be linked +to the Project Gutenberg-tm License for all works posted with the +permission of the copyright holder found at the beginning of this work. + +1.E.4. Do not unlink or detach or remove the full Project Gutenberg-tm +License terms from this work, or any files containing a part of this +work or any other work associated with Project Gutenberg-tm. + +1.E.5. Do not copy, display, perform, distribute or redistribute this +electronic work, or any part of this electronic work, without +prominently displaying the sentence set forth in paragraph 1.E.1 with +active links or immediate access to the full terms of the Project +Gutenberg-tm License. + +1.E.6. You may convert to and distribute this work in any binary, +compressed, marked up, nonproprietary or proprietary form, including any +word processing or hypertext form. However, if you provide access to or +distribute copies of a Project Gutenberg-tm work in a format other than +"Plain Vanilla ASCII" or other format used in the official version +posted on the official Project Gutenberg-tm web site (www.gutenberg.net), +you must, at no additional cost, fee or expense to the user, provide a +copy, a means of exporting a copy, or a means of obtaining a copy upon +request, of the work in its original "Plain Vanilla ASCII" or other +form. Any alternate format must include the full Project Gutenberg-tm +License as specified in paragraph 1.E.1. + +1.E.7. Do not charge a fee for access to, viewing, displaying, +performing, copying or distributing any Project Gutenberg-tm works +unless you comply with paragraph 1.E.8 or 1.E.9. + +1.E.8. You may charge a reasonable fee for copies of or providing +access to or distributing Project Gutenberg-tm electronic works provided +that + +- You pay a royalty fee of 20% of the gross profits you derive from + the use of Project Gutenberg-tm works calculated using the method + you already use to calculate your applicable taxes. The fee is + owed to the owner of the Project Gutenberg-tm trademark, but he + has agreed to donate royalties under this paragraph to the + Project Gutenberg Literary Archive Foundation. Royalty payments + must be paid within 60 days following each date on which you + prepare (or are legally required to prepare) your periodic tax + returns. Royalty payments should be clearly marked as such and + sent to the Project Gutenberg Literary Archive Foundation at the + address specified in Section 4, "Information about donations to + the Project Gutenberg Literary Archive Foundation." + +- You provide a full refund of any money paid by a user who notifies + you in writing (or by e-mail) within 30 days of receipt that s/he + does not agree to the terms of the full Project Gutenberg-tm + License. You must require such a user to return or + destroy all copies of the works possessed in a physical medium + and discontinue all use of and all access to other copies of + Project Gutenberg-tm works. + +- You provide, in accordance with paragraph 1.F.3, a full refund of any + money paid for a work or a replacement copy, if a defect in the + electronic work is discovered and reported to you within 90 days + of receipt of the work. + +- You comply with all other terms of this agreement for free + distribution of Project Gutenberg-tm works. + +1.E.9. If you wish to charge a fee or distribute a Project Gutenberg-tm +electronic work or group of works on different terms than are set +forth in this agreement, you must obtain permission in writing from +both the Project Gutenberg Literary Archive Foundation and Michael +Hart, the owner of the Project Gutenberg-tm trademark. Contact the +Foundation as set forth in Section 3 below. + +1.F. + +1.F.1. Project Gutenberg volunteers and employees expend considerable +effort to identify, do copyright research on, transcribe and proofread +public domain works in creating the Project Gutenberg-tm +collection. Despite these efforts, Project Gutenberg-tm electronic +works, and the medium on which they may be stored, may contain +"Defects," such as, but not limited to, incomplete, inaccurate or +corrupt data, transcription errors, a copyright or other intellectual +property infringement, a defective or damaged disk or other medium, a +computer virus, or computer codes that damage or cannot be read by +your equipment. + +1.F.2. LIMITED WARRANTY, DISCLAIMER OF DAMAGES - Except for the "Right +of Replacement or Refund" described in paragraph 1.F.3, the Project +Gutenberg Literary Archive Foundation, the owner of the Project +Gutenberg-tm trademark, and any other party distributing a Project +Gutenberg-tm electronic work under this agreement, disclaim all +liability to you for damages, costs and expenses, including legal +fees. YOU AGREE THAT YOU HAVE NO REMEDIES FOR NEGLIGENCE, STRICT +LIABILITY, BREACH OF WARRANTY OR BREACH OF CONTRACT EXCEPT THOSE +PROVIDED IN PARAGRAPH F3. YOU AGREE THAT THE FOUNDATION, THE +TRADEMARK OWNER, AND ANY DISTRIBUTOR UNDER THIS AGREEMENT WILL NOT BE +LIABLE TO YOU FOR ACTUAL, DIRECT, INDIRECT, CONSEQUENTIAL, PUNITIVE OR +INCIDENTAL DAMAGES EVEN IF YOU GIVE NOTICE OF THE POSSIBILITY OF SUCH +DAMAGE. + +1.F.3. LIMITED RIGHT OF REPLACEMENT OR REFUND - If you discover a +defect in this electronic work within 90 days of receiving it, you can +receive a refund of the money (if any) you paid for it by sending a +written explanation to the person you received the work from. If you +received the work on a physical medium, you must return the medium with +your written explanation. The person or entity that provided you with +the defective work may elect to provide a replacement copy in lieu of a +refund. If you received the work electronically, the person or entity +providing it to you may choose to give you a second opportunity to +receive the work electronically in lieu of a refund. If the second copy +is also defective, you may demand a refund in writing without further +opportunities to fix the problem. + +1.F.4. Except for the limited right of replacement or refund set forth +in paragraph 1.F.3, this work is provided to you 'AS-IS' WITH NO OTHER +WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +WARRANTIES OF MERCHANTIBILITY OR FITNESS FOR ANY PURPOSE. + +1.F.5. Some states do not allow disclaimers of certain implied +warranties or the exclusion or limitation of certain types of damages. +If any disclaimer or limitation set forth in this agreement violates the +law of the state applicable to this agreement, the agreement shall be +interpreted to make the maximum disclaimer or limitation permitted by +the applicable state law. The invalidity or unenforceability of any +provision of this agreement shall not void the remaining provisions. + +1.F.6. INDEMNITY - You agree to indemnify and hold the Foundation, the +trademark owner, any agent or employee of the Foundation, anyone +providing copies of Project Gutenberg-tm electronic works in accordance +with this agreement, and any volunteers associated with the production, +promotion and distribution of Project Gutenberg-tm electronic works, +harmless from all liability, costs and expenses, including legal fees, +that arise directly or indirectly from any of the following which you do +or cause to occur: (a) distribution of this or any Project Gutenberg-tm +work, (b) alteration, modification, or additions or deletions to any +Project Gutenberg-tm work, and (c) any Defect you cause. + + +Section 2. Information about the Mission of Project Gutenberg-tm + +Project Gutenberg-tm is synonymous with the free distribution of +electronic works in formats readable by the widest variety of computers +including obsolete, old, middle-aged and new computers. It exists +because of the efforts of hundreds of volunteers and donations from +people in all walks of life. + +Volunteers and financial support to provide volunteers with the +assistance they need are critical to reaching Project Gutenberg-tm's +goals and ensuring that the Project Gutenberg-tm collection will +remain freely available for generations to come. In 2001, the Project +Gutenberg Literary Archive Foundation was created to provide a secure +and permanent future for Project Gutenberg-tm and future generations. +To learn more about the Project Gutenberg Literary Archive Foundation +and how your efforts and donations can help, see Sections 3 and 4 +and the Foundation web page at http://www.pglaf.org. + + +Section 3. Information about the Project Gutenberg Literary Archive +Foundation + +The Project Gutenberg Literary Archive Foundation is a non profit +501(c)(3) educational corporation organized under the laws of the +state of Mississippi and granted tax exempt status by the Internal +Revenue Service. The Foundation's EIN or federal tax identification +number is 64-6221541. Its 501(c)(3) letter is posted at +http://pglaf.org/fundraising. Contributions to the Project Gutenberg +Literary Archive Foundation are tax deductible to the full extent +permitted by U.S. federal laws and your state's laws. + +The Foundation's principal office is located at 4557 Melan Dr. S. +Fairbanks, AK, 99712., but its volunteers and employees are scattered +throughout numerous locations. Its business office is located at +809 North 1500 West, Salt Lake City, UT 84116, (801) 596-1887, email +business@pglaf.org. Email contact links and up to date contact +information can be found at the Foundation's web site and official +page at http://pglaf.org + +For additional contact information: + Dr. Gregory B. Newby + Chief Executive and Director + gbnewby@pglaf.org + + +Section 4. Information about Donations to the Project Gutenberg +Literary Archive Foundation + +Project Gutenberg-tm depends upon and cannot survive without wide +spread public support and donations to carry out its mission of +increasing the number of public domain and licensed works that can be +freely distributed in machine readable form accessible by the widest +array of equipment including outdated equipment. Many small donations +($1 to $5,000) are particularly important to maintaining tax exempt +status with the IRS. + +The Foundation is committed to complying with the laws regulating +charities and charitable donations in all 50 states of the United +States. Compliance requirements are not uniform and it takes a +considerable effort, much paperwork and many fees to meet and keep up +with these requirements. We do not solicit donations in locations +where we have not received written confirmation of compliance. To +SEND DONATIONS or determine the status of compliance for any +particular state visit http://pglaf.org + +While we cannot and do not solicit contributions from states where we +have not met the solicitation requirements, we know of no prohibition +against accepting unsolicited donations from donors in such states who +approach us with offers to donate. + +International donations are gratefully accepted, but we cannot make +any statements concerning tax treatment of donations received from +outside the United States. U.S. laws alone swamp our small staff. + +Please check the Project Gutenberg Web pages for current donation +methods and addresses. Donations are accepted in a number of other +ways including including checks, online payments and credit card +donations. To donate, please visit: http://pglaf.org/donate + + +Section 5. General Information About Project Gutenberg-tm electronic +works. + +Professor Michael S. Hart is the originator of the Project Gutenberg-tm +concept of a library of electronic works that could be freely shared +with anyone. For thirty years, he produced and distributed Project +Gutenberg-tm eBooks with only a loose network of volunteer support. + + +Project Gutenberg-tm eBooks are often created from several printed +editions, all of which are confirmed as Public Domain in the U.S. +unless a copyright notice is included. Thus, we do not necessarily +keep eBooks in compliance with any particular paper edition. + + +Most people start at our Web site which has the main PG search facility: + + http://www.gutenberg.net + +This Web site includes information about Project Gutenberg-tm, +including how to make donations to the Project Gutenberg Literary +Archive Foundation, how to help produce our new eBooks, and how to +subscribe to our email newsletter to hear about new eBooks. diff --git a/ult/ult_4/marks.txt b/ult/ult_4/marks.txt new file mode 100644 index 0000000..f97b743 --- /dev/null +++ b/ult/ult_4/marks.txt @@ -0,0 +1,5 @@ +89 92 85 +98 47 67 +67 82 76 +78 97 60 +67 68 69 diff --git a/ult/ult_4/marks1.txt b/ult/ult_4/marks1.txt new file mode 100644 index 0000000..9a5299d --- /dev/null +++ b/ult/ult_4/marks1.txt @@ -0,0 +1,5 @@ +5 89 92 85 +4 98 47 67 +1 67 82 76 +2 78 97 60 +3 67 68 69 diff --git a/ult/ult_4/script.rst b/ult/ult_4/script.rst new file mode 100644 index 0000000..09de00e --- /dev/null +++ b/ult/ult_4/script.rst @@ -0,0 +1,409 @@ +.. Objectives +.. ---------- + + .. At the end of this tutorial, you will be able to: + + .. 1. Understand what is Redirection and Piping. + .. 2. Learn various features of shell. + +.. Prerequisites +.. ------------- + +.. 1. Using Linux tools - Part 1 +.. 2. Using Linux tools - Part 2 +.. 3. Using Linux tools - Part 3 + +Script +------ + +.. L1 + +{{{ Show the first slide containing title, name of the production +team along with the logo of MHRD }}} + +.. R1 + +Hello friends and Welcome to the tutorial on +'Using linux tools - Part 4'. + +.. L2 + +{{{ Show slide with objectives }}} + +.. R2 + +At the end of this tutorial, you will be able to, + + 1. Understand what is Redirection and Piping. + #. Learn various features of the shell. + +.. L3 + +{{{ Switch to the pre-requisite slide }}} + +.. R3 + +Before beginning this tutorial, we would suggest you to complete the +tutorial on "Using Linux tools from Part 1 to Part 3". + +.. R4 + +Let us begin with the concept of 'Redirection and Piping' which +performs the same operations as the ``cut`` and ``paste`` commands. + +Consider the files ``marks.txt`` and ``students.txt``.The contents of +the files are as following: + +.. L4 + +{{{ Open the terminal }}} +:: + + cat marks1.txt + cat students.txt + +.. R5 + +Now, let us view the contents of both these files side-by-side. + +.. L5 +:: + + cut -d " " -f 2- marks1.txt | paste -d " " students.txt - + +.. R6 + +Now, in order to view the same output in a new file at an other +location, we say, + +.. L6 +:: + + cut -d " " -f 2- marks1.txt > /tmp/m_tmp.txt + paste -d " " students.txt m_tmp.txt + +.. R7 + +First, let us try to understand the second solution,which is a two +step approach. +Later, we shall look at the first solution. + +.. L7 + +.. L8 + +{{{ Show slide, with Redirection }}} + +.. R8 + +The standard output, in general, goes to the display. +Hence, the output of the commands that we type, come out to the display. +This may not be what we always require. + +For instance, in the solution above, we use the cut command and get only +the required columns of the file and write the output to a new temporary +file. The ``>`` character is used to state that we wish to redirect the +output, and it is followed by the location to which we wish to redirect. +For example, + + command > file1 + +.. L9 + +{{{ Show slide, with Redirection... }}} + +.. R9 + +Similarly, the standard input (stdin) can be redirected as, + + command < file1 + +The input and the output redirection could be combined in a single command, +as, + + command < infile > outfile + +There is actually a third kind of standard stream, called the Standard +error (stderr). Any error messages that you get, are coming through this +stream. Like ``stdout``, ``stderr`` also streams to the display by default, +but it could be redirected to a file, as well. + +.. R10 + +For instance, let's reproduce an error using the ``cut`` command used +before. We shall change the ``-f`` option to ``-c`` + +.. L10 + +{{{ Switch to terminal }}} +:: + + cut -d " " -c 2- marks1.txt > /tmp/m_tmp.txt + +.. R11 + +This displays an error saying that the delimiter option should be used +with the fields option only. You may verify this by looking at the +``m_tmp.txt`` file, which is now empty.We can now, redirect the +``stderr`` also to a file, instead of showing it on the display. + +.. L11 +:: + + cut -d " " -f 2- marks1.txt 1> /tmp/m_tmp.txt 2> /tmp/m_err.txt + +.. R12 + +The above command redirects all the errors to the ``m_err.txt`` file +and the output to the ``m_tmp.txt`` file. When redirecting, 1 stands +for ``stdout`` and 2 stands for ``stderr``. + +Let us complete the solution by using the ``paste`` command. + +.. L12 +:: + + paste -d " " students.txt m_tmp.txt + +.. R13 + +So, in two steps we solved the problem of getting rid of the roll numbers +from the marks file and displaying the marks along with the names of the +students. Now, that we know how to redirect output, we could choose to +write the output to a file, instead of showing on the display. + +Let us now look at the first solution. + +.. L13 +:: + + cut -d " " -f 2- marks1.txt | paste -d " " students.txt - + +.. L14 + +{{{ Show slide, with Piping }}} + +.. R14 + +First of all, the hyphen at the end is to ask the paste command to +read the standard input, instead of looking for a FILE. The ``man`` +page of ``paste`` command gives us this information. + +The character ``|`` is called a pipe. +Now, let us observe the ``cut`` command. If we look at the command only +upto the ``|`` character, it appears as a normal ``cut`` command . +So, the ``|`` character here, seems +to be joining the two commands in some way. +Essentially, what we are doing is, to redirect the output of the first +command to ``stdin`` and the second command takes the input from the ``stdin``. + +More generally, + + command1 | command2 + +executes ``command1`` and sends it's output to the ``stdin``, which is then +used as the input for ``command2``. This activity is commonly called piping. + +.. L15 + +{{{ Show slide, with Piping... }}} + +.. R15 + +This is roughly equivalent to using two redirects and a temporary file. + + command1 > tempfile + command2 < tempfile + rm tempfile + +Also, given that a pipe is just a way to send the output of a command to +the ``stdin``, it should be obvious to you that we can use a chain of +pipes. Any number of commands can be piped together and therefore it should + be noted that it is not restricted to only two commands. + +The Bash shell has some nice features, that make our job of using the shell +easier and much more pleasant. Let us have a look at few of them here. + +Bash provides the feature of 'tab completion'. What does tab completion mean? +When you are typing a word, bash helps you to complete the word. +This can be done by entering some portion of the word and thereafter, +pressing the tab key. + +If you do not get the desired word on pressing the tab key, it implies that +either the word doesn't exist or the word cannot be decided unambiguously. +In the latter case, pressing the tab key for a second time,will list out +all the possibilities. + +.. L16 + +{{{ Show slide, with Tab-completion }}} + +.. R16 + +Bash provides tab completion for the following. + + 1. File Names + 2. Directory Names + 3. Executable Names + 4. User Names (when they are prefixed with a ~) + 5. Host Names (when they are prefixed with a @) + 6. Variable Names (when they are prefixed with a $) + +.. R17 + +For example, + +.. L17 + +{{{ Switch to terminal }}} +:: + + pas + ~/ + +.. R18 + +Bash also saves the history of the commands you have typed earlier. +This feature enables you to goto the previously typed commands and +use them as and when necessary. The up and down arrow keys will help +you to navigate +through these commands in the bash history. + +.. L18 +:: + + + +.. R19 + +You may also search incrementally, for commands in your bash history. +``Ctrl-r`` searches for the commands that you have typed earlier. However, +it should be noted that the number of commands saved in the history is +limited, generally upto a 1000 commands. + +.. L19 +:: + + pas + +.. R20 + +Unix recognizes certain special characters, called "meta characters", as +command directives. The shell meta characters are recognized anywhere they +appear in the command line, even if they are not surrounded by a blank space. +For this reason, it is always recommended to use only the characters A-Z, +a-z, 0-9, period, dash and underscore, when naming files and +directories on Unix. If your file or directory has a shell meta character +in the name, you may find it difficult to use this name in a shell command. + +.. L20 + +.. L21 + +{{{ Show slide, with Shell Meta Characters }}} + +.. R21 + +The characters that you see on the slide are the shell meta characters + +.. R22 + +Lets take an example, + +.. L22 + +{{{ Switch to terminal }}} +:: + + ls file.? + +.. R23 + +It means, run on a directory containing the files file, file.c, file.lst, +and myfile would list the files file.c and file.lst. However, + +.. L23 +:: + + ls file.? + +.. R24 + +Run on the same directory would only list file.c because the ? only matches +one character, no more, no less. This helps you save time, while typing. + +For example, if there is a file called +california_cornish_hens_with_wild_rice and no other files whose names begin +with 'c', you could view the file without typing the whole name by typing +this + +.. L24 +:: + + more c* + +.. R25 + +Here, the c* matches that long file name. +File-names containing meta characters can pose many problems and should +never be intentionally created. + +.. L25 + +.. L26 + +{{{ Switch to Summary slide }}} + +.. R26 + +This brings us to the end of the end of this tutorial. +In this tutorial, we have learnt to, + + 1. Use the ``cut`` and ``paste`` commands in redirection. + 2. Use the pipe ( | ) character. + 3. Implement features of shell, like tab-completion and history. + +.. L27 + +{{{ Show self assessment questions slide }}} + +.. R27 + +Here are some self assessment questions for you to solve: + + 1. Bash does not provide tab completion for Host Names. + True of False? + + 2. In a file /home/test.txt ,first line is "data:myscripts:20:30". How do we + view only the minutes (last field, 30). + + - cut -d : -f 4 /home/test.txt + - cut -f 3 /home/test.txt + - cut -d : -f 3 /home/test.txt + - None of these + +.. L28 + +{{{ Solutions for the self assessment questions on slide }}} + +.. R28 + +And the answers: + + 1. False. Bash provides tab completion for Host Names when they are prefixed + with a @ sign. + + 2. The correct option would be +:: + + cut -d : -f 4 /home/test.txt + +.. L29 + +{{{ Show the Thank you slide }}} + +.. R29 + +Hope you have enjoyed this tutorial and found it useful. +Thank you! + diff --git a/ult/ult_4/students.txt b/ult/ult_4/students.txt new file mode 100644 index 0000000..ddacd6b --- /dev/null +++ b/ult/ult_4/students.txt @@ -0,0 +1,5 @@ +Hussain +Dilbert +Anne +Raul +Sven diff --git a/ult/ult_4/ult4.tex b/ult/ult_4/ult4.tex new file mode 100644 index 0000000..7181db5 --- /dev/null +++ b/ult/ult_4/ult4.tex @@ -0,0 +1,243 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Using Linux Tools +% +% Author: FOSSEE +% Copyright (c) 2009, FOSSEE, IIT Bombay +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\documentclass[12pt,compress]{beamer} + +\mode +{ + \usetheme{Warsaw} + \useoutertheme{infolines} + \setbeamercovered{transparent} +} + +\usepackage[english]{babel} +\usepackage[latin1]{inputenc} +%\usepackage{times} +\usepackage[T1]{fontenc} + +% Taken from Fernando's slides. +\usepackage{ae,aecompl} +\usepackage{mathpazo,courier,euler} +\usepackage[scaled=.95]{helvet} + +\definecolor{darkgreen}{rgb}{0,0.5,0} + +\usepackage{listings} +\lstset{language=sh, + basicstyle=\ttfamily\bfseries, + commentstyle=\color{red}\itshape, + stringstyle=\color{darkgreen}, + showstringspaces=false, + keywordstyle=\color{blue}\bfseries} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% DOCUMENT STARTS +\begin{document} + +\begin{frame} + +\begin{center} +\vspace{12pt} +\textcolor{blue}{\huge Using Linux Tools\\Part IV} +\end{center} +\vspace{18pt} +\begin{center} +\vspace{10pt} +\includegraphics[scale=0.95]{../images/fossee-logo.png}\\ +\vspace{5pt} +\scriptsize Developed by FOSSEE Team, IIT-Bombay. \\ +\scriptsize Funded by National Mission on Education through ICT\\ +\scriptsize MHRD,Govt. of India\\ +\includegraphics[scale=0.30]{../images/iitb-logo.png}\\ +\end{center} +\end{frame} +\begin{frame} +\frametitle{Objectives} +\label{sec-2} + +At the end of this tutorial, you will be able to, +\begin{itemize} +\item Understand what is Redirection and Piping. +\item Learn various features of the shell. +\end{itemize} +\end{frame} + +\begin{frame} +\frametitle{Pre-requisite} +\label{sec-3} + +Spoken tutorial on - +\begin{itemize} +\item Using Linux tools -- Part I +\item Using Linux tools -- Part II +\item Using Linux tools -- Part III +\end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Redirection} + + \begin{itemize} + \item The standard output (stdout) stream goes to the display + \item Not always, what we need + \item First solution, redirects output to a file + \item \texttt{>} states that output is redirected; It is + followed by location to redirect + \end{itemize} + \begin{lstlisting} + $ command > file1 + \end{lstlisting} % $ + \begin{itemize} + \item \texttt{>} creates a new file at specified location + \item \texttt{>>} appends to a file at specified location + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Redirection \ldots} + \begin{itemize} + \item Similarly, the standard input (stdin) can be redirected + \end{itemize} + \begin{lstlisting} + $ command < file1 + \end{lstlisting} % $ + \begin{itemize} + \item input and the output redirection could be combined + \end{itemize} + \begin{lstlisting} + $ command < infile > outfile + \end{lstlisting} % $ + \begin{itemize} + \item Standard error (stderr) is the third standard stream + \item All error messages come through this stream + \item \texttt{stderr} can also be redirected + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Piping} + \begin{lstlisting} + $ cut -d " " -f 2- marks1.txt \ + | paste -d " " students.txt - + \end{lstlisting} % $ + \begin{itemize} + \item \texttt{-} instead of FILE asks \texttt{paste} to read from + \texttt{stdin} + \item \texttt{cut} command is a normal command + \item the \texttt{|} seems to be joining the two commands + \item Redirects output of first command to \texttt{stdin}, which + becomes input to the second command + \item This is called piping; \texttt{|} is called a pipe + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Piping \ldots} + \begin{itemize} + \item Roughly same as -- 2 redirects and a temporary file + \end{itemize} + \begin{lstlisting} + $ command1 > tempfile + $ command2 < tempfile + $ rm tempfile + \end{lstlisting} % $ + \begin{itemize} + \item Any number of commands can be piped together + \end{itemize} +\end{frame} + +\subsection{Features of the Shell} + +\begin{frame}[fragile] + \frametitle{Tab-completion} + \begin{itemize} + \item Bash provides tab completion for the following. + \begin{enumerate} + \item File Names + \item Directory Names + \item Executable Names + \item User Names (when they are prefixed with a \~{}) + \item Host Names (when they are prefixed with a @) + \item Variable Names (when they are prefixed with a \$) + \end{enumerate} + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Shell Meta Characters} + \begin{itemize} + \item ``meta characters'' are special command directives + \item File-names shouldn't have meta-characters + \item The following are the shell meta characters -- + \begin{itemize} + \item \verb+/<>!$%^&*|{}[]"'`~;+ + \end{itemize} + \end{itemize} +\end{frame} + +\begin{frame} +\frametitle{Summary} +\label{sec-8} + + In this tutorial, we have learnt to, + + +\begin{itemize} +\item Use the ``cut'' and ``paste'' commands in redirection. +\item Use the pipe ( | ) character. +\item Implement features of shell like tab-completion and history. +\end{itemize} +\end{frame} +\begin{frame}[fragile] +\frametitle{Evaluation} +\label{sec-9} + + +\begin{enumerate} +\item Bash does not provide tab completion for Host Names. \\ + True or False? +\vspace{12pt} +\item In a file /home/test.txt ,first line is "data:myscripts:20:30".How to + view only minutes(last field, 30). +\vspace{5pt} +\begin{itemize} +\item cut -d : -f 4 /home/test.txt +\item cut -f 3 /home/test.txt +\item cut -d : -f 3 /home/test.txt +\item None of these +\end{itemize} +\end{enumerate} +\end{frame} +\begin{frame} +\frametitle{Solutions} +\label{sec-10} + + +\begin{enumerate} +\item False +\vspace{15pt} +\item cut -d : -f 4 /home/test.txt +\end{enumerate} +\end{frame} +\begin{frame} + + \begin{block}{} + \begin{center} + \textcolor{blue}{\Large THANK YOU!} + \end{center} + \end{block} +\begin{block}{} + \begin{center} + For more Information, visit our website\\ + \url{http://fossee.in/} + \end{center} + \end{block} +\end{frame} + +\end{document} + + diff --git a/ult/ult_5/foo.txt b/ult/ult_5/foo.txt new file mode 100644 index 0000000..1fe9426 --- /dev/null +++ b/ult/ult_5/foo.txt @@ -0,0 +1,9 @@ +FOO is an abbreviation of Forward Observation Officer, a British Army +term in use as early as the First World War. The etymology of foo is +explored in the Internet Engineering Task Force (IETF) Request for +Comments 3092, which notes usage of foo in 1930s cartoons including +The Daffy Doc (with Daffy Duck) and comic strips, especially Smokey +Stover and Pogo. From there the term migrated into military slang, +where it merged with FUBAR. + +source: wikipedia diff --git a/ult/ult_5/marks1.txt b/ult/ult_5/marks1.txt new file mode 100644 index 0000000..9a5299d --- /dev/null +++ b/ult/ult_5/marks1.txt @@ -0,0 +1,5 @@ +5 89 92 85 +4 98 47 67 +1 67 82 76 +2 78 97 60 +3 67 68 69 diff --git a/ult/ult_5/script.rst b/ult/ult_5/script.rst new file mode 100644 index 0000000..e112ff7 --- /dev/null +++ b/ult/ult_5/script.rst @@ -0,0 +1,347 @@ +.. Objectives +.. ---------- + + .. At the end of this tutorial, you will be able to: + + .. 1. + .. 2. + +.. Prerequisites +.. ------------- + +.. 1. Using Linux tools - Part 1 +.. 2. Using Linux tools - Part 2 +.. 3. Using Linux tools - Part 3 +.. 4. Using Linux tools - Part 4 + + +Script +------ + +.. L1 + +{{{ Show the first slide containing title, name of the production +team along with the logo of MHRD }}} + +.. R1 + +Hello friends and Welcome to the tutorial on +'Using linux tools - Part 5'. + +.. L2 + +{{{ Show slide with objectives }}} + +.. R2 + +At the end of this tutorial, you will be able to, + + 1. Sort lines of text files + #. Print lines matching a pattern + #. Translate or delete characters + #. Omit repeated lines. + + +.. L3 + +{{{ Switch to the pre-requisite slide }}} + +.. R3 + +Before beginning this tutorial,we would suggest you to complete the +tutorial on "Using Linux tools from Part 1 to Part 4". + +.. R4 + +In this tutorial, we shall learn about text processing. +TO begin with, consider data kept in two files, namely marks1.txt and +students.txt +Let us see what data they contain. Open a terminal and type, + +.. L4 + +{{{ Open the terminal }}} +:: + + cat marks1.txt + cat students.txt + +.. R5 + +Let's say we wish to sort the output in the alphabetical order +of the names of the files. We can use the ``sort`` command for this +purpose. + +We just pipe the previous output to the ``sort`` command as, + +.. L5 +:: + + cut -d " " -f 2- marks1.txt | paste -d " " students.txt -| sort + +.. R6 + +Let's say we wish to sort the names, based on the marks in the first +subject i.e. the first column after the name. ``sort`` command also allows us to +specify the delimiter between the fields and sort the data on a particular +field. ``-t`` option is used to specify the delimiter and ``-k`` option +is used to specify the field. + +.. L6 +:: + + cut -d " " -f 2- marks1.txt | paste -d " " students.txt -| sort -t " " -k 2 + +.. L7 + +{{{ Show slide with, Sort... }}} + +.. R7 + +This command give us a sorted output as required. But, what if we would +like the output to appear in the reverse order. ``-r`` option allows the output +to be sorted in the reverse order and the ``-n`` option is used to choose +a numerical sorting. + +.. R8 + +Let us do it on the terminal and see for ourselves, + +.. L8 + +{{{ Switch to the terminal }}} +:: + + cut -d " " -f 2- marks1.txt | paste -d " " students.txt -| + sort -t " " -k 2 -rn + +.. R9 + +Suppose, While you are compiling the student marklist, Anne walks up to you and +wants to know her marks. You, being a kind person that you are, oblige. +But you do not wish to her to see the marks that others have scored. What +do you do? Here, the ``grep`` command comes to your rescue. + +``grep`` is a command line text search utility. You can use it to search +for Anne and show her, what she scored. ``grep`` allows us to search for a +search string in files. But we could, like any other command, pipe the +output of other commands to it. So, we shall use the previous combination +of cut and paste that we had, to get the marks of students along with their +names and search for Anne in that. + +.. L9 +:: + + cut -d " " -f 2- marks1.txt | paste -d " " students.txt - | grep Anne + +.. R10 + +This will give us only the line containing the word Anne as the output. +The grep command is by default case-sensitive. So, we wouldn't have got +the result if we had searched for anne, with a small a, instead of +Anne, with a capital a. But, what if we didn't know, whether the name was +capitalized or not? ``grep`` allows you to do case-insensitive searches +by using the ``-i`` option. + +.. L10 +:: + + cut -d " " -f 2- marks1.txt | paste -d " " students.txt - | grep -i Anne + +.. R11 + +Now, in another scenario, if we wished to print all the lines, which do +not contain the word Anne, we could use the ``-v`` option. + +.. L11 +:: + + cut -d " " -f 2- marks1.txt | paste -d " " students.txt - | grep -iv Anne + +.. R12 + +grep allows us to do more complex searches, for instance, searching for +sentences starting or ending with a particular pattern and regular +expression based searches. + +{{{ Show slide with, tr }}} + +``tr`` is a command that takes two sets of characters as parameters, and +replaces occurrences of the characters in the first set with the +corresponding elements from the other set. It reads from the standard +output and writes to the standard output. + +For instance, if we wish to replace all the lower case letters in the +students file with upper case, we can do it as, + +.. L12 + +{{{ Switch to the terminal }}} +:: + + cat students.txt | tr a-z A-Z + +.. R13 + +A common task is to remove empty newlines from a file. The ``-s`` flag +causes ``tr`` to compress sequences of identical adjacent characters in its +output to a single token. For example, + +.. L13 +:: + + tr -s '\n' '\n' + +.. R14 + +Hit enter 2-3 times and see that every time we hit enter we get a newline. + +.. L14 +:: + + + + +.. R15 + +It replaces sequences of one or more newline characters with a single newline. + +The ``-d`` flag causes ``tr`` to delete all tokens of the specified set of +characters from its input. In this case, only a single character set +argument is used. The following command removes carriage return characters, +thereby converting a file in DOS/Windows format to the Unix format. + +.. L15 +:: + + cat foo.txt | tr -d '\r' > bar.txt + +.. R16 + +The ``-c`` flag complements the first set of characters. + +.. L16 +:: + + tr -cd '[:alnum:]' + +.. R17 + +It therefore removes all non-alphanumeric characters. + +Let us consider one more scenario.Suppose we have a list of items, say books, +and we wish to obtain a list which names of all the books only once, without +any duplicates. To achieve this, we use the ``uniq`` command. Let us first +have a look at our file + +.. L17 +:: + + cat items.txt + +.. R18 + +Now, let us try and get rid of the duplicate lines from this file using +the ``uniq`` command. + +.. L18 +:: + + uniq items.txt + +.. R19 + +Nothing happens! Why? The ``uniq`` command removes duplicate lines only when +they are next to each other. So, henceforth, we get a sorted file from the +original file and work with that file. + +.. L19 +:: + + sort items.txt | uniq + +.. R20 + +``uniq -u`` command gives the lines which are unique and do not have any +duplicates in the file. ``uniq -d`` outputs only those lines which +have duplicates. + +.. L20 +:: + + uniq -u items-sorted.txt + +.. R21 + +The ``-c`` option displays the number of times each line occurs in the file. + +.. L21 +:: + + uniq -dc items-sorted.txt + +.. L22 + +{{{ Show summary slide }}} + +.. R22 + +This brings us to the end of the end of this tutorial. +In this tutorial, we have learnt to, + + 1. Use the ``sort`` command to sort lines of text files. + #. Use the ``grep`` command to search text pattern. + #. Use the ``tr`` command to translate and/or delete characters. + #. Use the ``uniq`` command to omit repeated lines in a text. + +.. L23 + +{{{ Show self assessment questions slide }}} + +.. R23 + +Here are some self assessment questions for you to solve + + 1. To obtain patterns; one per line, which of the following command is used ? + + - grep -f + - grep -i + - grep -v + - grep -e + + 2. Translate the word 'linux' to upper-case. + + 3. Sort the output of the ``ls -al`` command. + +.. L24 + +{{{ Solution of self assessment questions on slide }}} + +.. R24 + +And the answers, + + 1. In order to obtain patterns one per line, we use the ``grep`` command + alongwith the -f option. + + 2. We use the tr command to change the word into uppercase +:: + + echo 'linux' | tr a-z A-Z + + + 3. We use the sort command as, +:: + + ls -al | sort -n -k5 +The -n means "sort numerically", and the -k5 option means to key off of +column five. + +.. L25 + +{{{ Show the Thank you slide }}} + +.. R25 + +Hope you have enjoyed this tutorial and found it useful. +Thank you! diff --git a/ult/ult_5/students.txt b/ult/ult_5/students.txt new file mode 100644 index 0000000..ddacd6b --- /dev/null +++ b/ult/ult_5/students.txt @@ -0,0 +1,5 @@ +Hussain +Dilbert +Anne +Raul +Sven diff --git a/ult/ult_5/ult5.tex b/ult/ult_5/ult5.tex new file mode 100644 index 0000000..293b76f --- /dev/null +++ b/ult/ult_5/ult5.tex @@ -0,0 +1,178 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Using Linux Tools +% +% Author: FOSSEE +% Copyright (c) 2009, FOSSEE, IIT Bombay +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\documentclass[12pt,compress]{beamer} + +\mode +{ + \usetheme{Warsaw} + \useoutertheme{infolines} + \setbeamercovered{transparent} +} + +\usepackage[english]{babel} +\usepackage[latin1]{inputenc} +%\usepackage{times} +\usepackage[T1]{fontenc} + +% Taken from Fernando's slides. +\usepackage{ae,aecompl} +\usepackage{mathpazo,courier,euler} +\usepackage[scaled=.95]{helvet} + +\definecolor{darkgreen}{rgb}{0,0.5,0} + +\usepackage{listings} +\lstset{language=sh, + basicstyle=\ttfamily\bfseries, + commentstyle=\color{red}\itshape, + stringstyle=\color{darkgreen}, + showstringspaces=false, + keywordstyle=\color{blue}\bfseries} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% DOCUMENT STARTS +\begin{document} + +\begin{frame} + +\begin{center} +\vspace{12pt} +\textcolor{blue}{\huge Using Linux Tools} +\end{center} +\vspace{18pt} +\begin{center} +\vspace{10pt} +\includegraphics[scale=0.95]{../images/fossee-logo.png}\\ +\vspace{5pt} +\scriptsize Developed by FOSSEE Team, IIT-Bombay. \\ +\scriptsize Funded by National Mission on Education through ICT\\ +\scriptsize MHRD,Govt. of India\\ +\includegraphics[scale=0.30]{../images/iitb-logo.png}\\ +\end{center} +\end{frame} +\begin{frame} +\frametitle{Objectives} +\label{sec-2} + +At the end of this tutorial, you will be able to, +\begin{itemize} +\item Sort lines of text files. +\item Print lines matching a pattern. +\item Translate or delete characters. +\item Omit repeated lines. +\end{itemize} +\end{frame} + +\begin{frame} +\frametitle{Pre-requisite} +\label{sec-3} + +Spoken tutorial on - +\begin{itemize} +\item Using Linux tools -- Part I +\item Using Linux tools -- Part II +\item Using Linux tools -- Part III +\item Using Linux tools -- Part IV +\end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{\texttt{sort} \ldots} + \begin{itemize} + \item The command below sorts, based on marks in first subject + \end{itemize} + \begin{lstlisting} + $ cut -d " " -f 2- marks1.txt \ + | paste -d " " students.txt -\ + | sort -t " " -k 2 -rn + \end{lstlisting} % $ + \begin{itemize} + \item \texttt{-t} specifies the delimiter between fields + \item \texttt{-k} specifies the field to use for sorting + \item \texttt{-r} for sorting in the reverse order + \item \texttt{-n} to choose numerical sorting + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{\texttt{tr}} + \begin{itemize} + \item Translates or deletes characters + \item Reads from \texttt{stdin} and outputs to \texttt{stdout} + \item Given, two sets of characters, replaces one with other + \item The following, replaces all lower-case with upper-case + \end{itemize} + \begin{lstlisting} + $ cat students.txt | tr a-z A-Z + \end{lstlisting} % $ +\end{frame} + +\begin{frame} +\frametitle{Summary} +\label{sec-8} + + In this tutorial, we have learnt to, + + +\begin{itemize} +\item Use the ``sort'' command to sort lines of text files. +\item Use the ``grep'' command to search text pattern. +\item Use the ``tr'' command to translate and/or delete characters. +\item Use the ``uniq'' command to omit repeated lines in a text. +\end{itemize} +\end{frame} +\begin{frame}[fragile] +\frametitle{Evaluation} +\label{sec-9} + + +\begin{enumerate} +\item To obtain patterns; one per line, which of the following command is used ? +\vspace{3pt} +\begin{itemize} +\item grep -f +\item grep -i +\item grep -v +\item grep -e +\end{itemize} +\vspace{8pt} +\item Translate the word `linux' to upper-case. +\vspace{8pt} +\item Sort the output of the ``ls -al'' command. +\end{enumerate} +\end{frame} +\begin{frame} +\frametitle{Solutions} +\label{sec-10} + + +\begin{enumerate} +\item grep -f +\vspace{15pt} +\item \$ echo `linux' | tr a-z A-Z +\vspace{15pt} +\item \$ ls -al | sort -n -k5 +\end{enumerate} +\end{frame} +\begin{frame} + + \begin{block}{} + \begin{center} + \textcolor{blue}{\Large THANK YOU!} + \end{center} + \end{block} +\begin{block}{} + \begin{center} + For more Information, visit our website\\ + \url{http://fossee.in/} + \end{center} + \end{block} +\end{frame} + +\end{document} + diff --git a/ult/ult_6/script.rst b/ult/ult_6/script.rst new file mode 100644 index 0000000..0413ada --- /dev/null +++ b/ult/ult_6/script.rst @@ -0,0 +1,296 @@ +.. Objectives +.. ---------- + + .. At the end of this tutorial, you will be able to: + + .. 1. Prepare a simple shell script. + .. 2. Run a script successfully and print it's result. + .. 3. Understand what an environment variable is. + +.. Prerequisites +.. ------------- + +.. 1. Using Linux tools - Part 1 +.. 2. Using Linux tools - Part 2 +.. 3. Using Linux tools - Part 3 +.. 4. Using Linux tools - Part 4 +.. 5. Using Linux tools - Part 5 + + +Script +------ + +.. L1 + +{{{ Show the first slide containing title, name of the production +team along with the logo of MHRD }}} + +.. R1 + +Hello friends and Welcome to the tutorial on +'Using linux tools - Part 6'. + +.. L2 + +{{{ Show slide with objectives }}} + +.. R2 + +At the end of this tutorial, you will be able to, + + 1. Prepare a simple shell script. + #. Run a script successfully and print it's result. + #. Understand what an environment variable is. + +.. L3 + +{{{ Switch to the pre-requisite slide }}} + +.. R3 + +Before beginning this tutorial,we would suggest you to complete the +tutorial on "Using Linux tools from Part 1 to Part 5". + +Let us start with creating a simple shell script. +A shell script is simply a sequence of commands, that are put into a file, +instead of entering them one by one onto the shell. The script can then be +run, to run the sequence of commands in a single shot instead of manually +running, each of the individual commands. +For instance, let's say we wish to create a directory called ``marks`` in the +home folder and save the results of the students into a file +``results.txt``. + +.. R4 + +We open our editor and save the following text to ``results.sh`` + +.. L4 + +{{{ Open an editor and type the following }}} +:: + + #!/bin/bash + mkdir ~/marks + cut -d " " -f 2- marks1.txt | paste -d " " students.txt - | sort > ~/marks/results.txt + +.. R5 + +We can now run the script as, + +.. L5 + +{{{ Open the terminal }}} +:: + + ./results.sh + +.. R6 + +We get an error saying, Permission denied! Why? Can you think of the +reason? Yes, the file doesn't have execute permissions. +We make the file executable and then run it. + +.. L6 +:: + + chmod u+x results.sh + ./results.sh + +.. R7 + +We get back the prompt. We can check the contents of the file +``results.txt`` to see if the script has run. + +So, here, we have our first shell script. The first line of the script is used +to specify the interpreter or shell which should be used to execute the script. +In this case, we are asking it to use the bash shell. +Once, the script has run, we get back the prompt. Here, we had to manually check, +if the contents of the file are correct. It would be useful to have our script +print out messages. For this, we can use the ``echo`` command. We can edit our +``results.sh`` script, as follows. + +.. L7 + +{{{ Open an editor and type the following }}} +:: + + #!/bin/bash + mkdir ~/marks + cut -d " " -f 2- marks1.txt | paste -d " " students.txt - | sort > ~/marks/results.txt + echo "Results generated." + +.. R8 + +Now, on running the script, we get a message on the screen informing us, +when the script has run. + +Let's now say, that we wish to let the user decide the file to which the +results should be written to. The results file, should be specifiable by an +argument in the command line. We can do so, by editing the file, as below. + +.. L8 + +{{{ Make the necessary changes in the previous script }}} + +:: + + #!/bin/bash + mkdir ~/marks + cut -d " " -f 2- marks1.txt | paste -d " " students.txt - | sort > ~/marks/$1 + echo "Results generated." + + +{{{ Highlight the text ``$1`` }}} + +.. R9 + +The ``$1`` above, corresponds to the first command line argument to the +script. So, we can run the script as shown below, to save the results to +``grades.txt``. + +.. L9 +:: + + ./results.sh grades.txt + +.. R10 + +When we run the ``results.sh`` file, we are specifying the location of the +script by using ``./``. But for any of the other commands, +we didn't have to specify their locations. Why? The +shell has a set of locations where it searches, for the command that we are +trying to run. + +.. L10 + +.. L11 + +{{{ Show slide, PATH }}} + +.. R11 + +These set of locations are saved in an "environment" +variable called PATH.let us look at what the value of the PATH variable is. To view the +values of variables, we can use the echo command. + +.. L12 + +{{{ Switch to the terminal }}} +:: + + echo $PATH + +.. R12 + +So, these are all the paths that are searched, when looking to execute a +command. If we put the results.sh script in one of these locations, we +could simply run it, without using the ``./`` at the beginning. + +.. L13 + +{{{ Show slide, variables & comments }}} + +.. R13 + +As expected, it is possible to define our own variables inside our shell +scripts. For example, + +.. L14 + +{{{ Switch to the terminal }}} +:: + + name="FOSSEE" + +.. R14 + +It creates a new variable ``name`` whose value is ``FOSSEE``. To refer to this +variable, inside our shell script, we would refer to it, as ``$name``. +Note that, there is no space around the ``=`` sign. + +.. L15 +:: + + ls $name* + +.. R15 + +.. R16 + +It is possible to store the output of a command in a variable, by enclosing +the command in back-quotes. + +.. L16 +:: + + count=`wc -l wonderland.txt` + +.. R17 + +It saves the number of lines in the file ``wonderland.txt`` in the variable +count. + +The ``#`` character is used to comment out content from a shell script. +Anything that appears after the ``#`` character in a line, is ignored by +the bash shell. + +.. L18 + +.. L19 + +{{{ Switch to 'Summary' slide }}} + +.. R19 + +This brings us to the end of the end of this tutorial. +In this tutorial, we have learnt to, + + 1. Prepare a shell script. + #. Display the result of a script, using the ``echo`` command. + #. Use the environment variable ``PATH``. + #. Create variables and comment out content using the ``#`` sign. + +.. L20 + +{{{ Show self assessment questions slide }}} + +.. R20 + +Here are some self assessment questions for you to solve + + 1. Which sign is used to comment out content from a shell script. + + - $ + - % + - # + - * + + 2. How will you add directory ``/data/myscripts`` to the beginning of + the $PATH environment variable ? + +.. L21 + +{{{ Solution of self assessment questions on slide }}} + +.. R21 + +And the answers, + + 1. We use the ``#`` sign to comment out the content from a shell script. + + 2. In order to add a directory to the beginning of the $PATH variable,we + say, +:: + + $PATH=/data/myscripts:$PATH + +.. L22 + +{{{ Show the Thank you slide }}} + +.. R22 + +Hope you have enjoyed this tutorial and found it useful. +Thank you! + + diff --git a/ult/ult_6/ult6.tex b/ult/ult_6/ult6.tex new file mode 100644 index 0000000..389a602 --- /dev/null +++ b/ult/ult_6/ult6.tex @@ -0,0 +1,176 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Using Linux Tools +% +% Author: FOSSEE +% Copyright (c) 2009, FOSSEE, IIT Bombay +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\documentclass[12pt,compress]{beamer} + +\mode +{ + \usetheme{Warsaw} + \useoutertheme{infolines} + \setbeamercovered{transparent} +} + +\usepackage[english]{babel} +\usepackage[latin1]{inputenc} +%\usepackage{times} +\usepackage[T1]{fontenc} + +% Taken from Fernando's slides. +\usepackage{ae,aecompl} +\usepackage{mathpazo,courier,euler} +\usepackage[scaled=.95]{helvet} + +\definecolor{darkgreen}{rgb}{0,0.5,0} + +\usepackage{listings} +\lstset{language=sh, + basicstyle=\ttfamily\bfseries, + commentstyle=\color{red}\itshape, + stringstyle=\color{darkgreen}, + showstringspaces=false, + keywordstyle=\color{blue}\bfseries} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% DOCUMENT STARTS +\begin{document} + +\begin{frame} + +\begin{center} +\vspace{12pt} +\textcolor{blue}{\huge Using Linux Tools\\Part VI} +\end{center} +\vspace{18pt} +\begin{center} +\vspace{10pt} +\includegraphics[scale=0.95]{../images/fossee-logo.png}\\ +\vspace{5pt} +\scriptsize Developed by FOSSEE Team, IIT-Bombay. \\ +\scriptsize Funded by National Mission on Education through ICT\\ +\scriptsize MHRD,Govt. of India\\ +\includegraphics[scale=0.30]{../images/iitb-logo.png}\\ +\end{center} +\end{frame} +\begin{frame} +\frametitle{Objectives} +\label{sec-2} + +At the end of this tutorial, you will be able to, +\begin{itemize} +\item Prepare a simple shell script. +\item Run a script successfully and print it's result. +\item Understand what an environment variable is. +\end{itemize} +\end{frame} + +\begin{frame} +\frametitle{Pre-requisite} +\label{sec-3} + +Spoken tutorial on - +\begin{itemize} +\item Using Linux tools -- Part I +\item Using Linux tools -- Part II +\item Using Linux tools -- Part III +\item Using Linux tools -- Part IV +\item Using Linux tools -- Part V +\end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{\texttt{PATH}} + \begin{itemize} + \item The shell searches in a set of locations, for the command + \item Locations are saved in ``environment'' variable called PATH + \item \texttt{echo} can show the value of variables + \end{itemize} + \begin{lstlisting} + $ echo $PATH + \end{lstlisting} % $ + \begin{itemize} + \item Put \texttt{results.sh} in one of these locations + \item It can then be run without \texttt{./} + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Variables \& Comments} + \begin{lstlisting} + $ name=FOSSEE + $ count=`wc -l wonderland.txt` + $ echo $count # Shows the value of count + \end{lstlisting} % $ + \begin{itemize} + \item It is possible to create variables in shell scripts + \item Variables can be assigned with the output of commands + \item \alert{NOTE:} There is no space around the \texttt{=} sign + \item All text following the \texttt{\#} is considered a comment + \end{itemize} +\end{frame} + +\begin{frame} +\frametitle{Summary} +\label{sec-8} + + In this tutorial, we have learnt to, + + +\begin{itemize} +\item Prepare a shell script. +\item Display the result of a script, using the ``echo'' command. +\item Use the environment variable ``PATH''. +\item Create variables and comment out content using the ``\#'' sign. +\end{itemize} +\end{frame} + +\begin{frame}[fragile] +\frametitle{Evaluation} +\label{sec-9} + + +\begin{enumerate} +\item Which sign is used to comment out content from a shell script? +\begin{itemize} +\item \$ +\item \% +\item \# +\item * +\end{itemize} +\vspace{8pt} +\item How will you add directory ``/data/myscripts'' to the beginning of + the \$PATH environment variable ? +\end{enumerate} +\end{frame} +\begin{frame} +\frametitle{Solutions} +\label{sec-10} + + +\begin{enumerate} +\item `` \# '' +\vspace{15pt} +\item \$ PATH=/data/myscripts:\$PATH +\end{enumerate} +\end{frame} +\begin{frame} + + \begin{block}{} + \begin{center} + \textcolor{blue}{\Large THANK YOU!} + \end{center} + \end{block} +\begin{block}{} + \begin{center} + For more Information, visit our website\\ + \url{http://fossee.in/} + \end{center} + \end{block} +\end{frame} + +\end{document} + + diff --git a/ult/ult_7/06- track.mp3 b/ult/ult_7/06- track.mp3 new file mode 100644 index 0000000..e69de29 diff --git a/ult/ult_7/clause.sh b/ult/ult_7/clause.sh new file mode 100644 index 0000000..23017f2 --- /dev/null +++ b/ult/ult_7/clause.sh @@ -0,0 +1,20 @@ +#!/bin/sh +# Script to greet the user according to time of day +hour=`date | cut -c12-13` +now=`date +"%A, %d of %B, %Y (%r)"` +if [ $hour -lt 12 ] +then + mess="Good Morning $LOGNAME, Have a nice day!" +fi + +if [ $hour -gt 12 -a $hour -le 16 ] +then + mess="Good Afternoon $LOGNAME" +fi + +if [ $hour -gt 16 -a $hour -le 18 ] +then + mess="Good Evening $LOGNAME" +fi +echo -e "$mess\nIt is $now" + diff --git a/ult/ult_7/dir-test.sh b/ult/ult_7/dir-test.sh new file mode 100644 index 0000000..11479ff --- /dev/null +++ b/ult/ult_7/dir-test.sh @@ -0,0 +1,5 @@ +#!/bin/bash +if test -d $1 +then + echo "Yes, the directory" $1 "is present" +fi diff --git a/ult/ult_7/emerald.mp3 b/ult/ult_7/emerald.mp3 new file mode 100644 index 0000000..e69de29 diff --git a/ult/ult_7/for-1.sh b/ult/ult_7/for-1.sh new file mode 100644 index 0000000..86545b7 --- /dev/null +++ b/ult/ult_7/for-1.sh @@ -0,0 +1,4 @@ +for i in {5..10} +do + echo $i +done diff --git a/ult/ult_7/for-2.sh b/ult/ult_7/for-2.sh new file mode 100644 index 0000000..ad34c9a --- /dev/null +++ b/ult/ult_7/for-2.sh @@ -0,0 +1,4 @@ +for i in `ls *.mp3` +do + echo "$i" +done diff --git a/ult/ult_7/for-3.sh b/ult/ult_7/for-3.sh new file mode 100644 index 0000000..8bb9f8d --- /dev/null +++ b/ult/ult_7/for-3.sh @@ -0,0 +1,4 @@ +for i in *.mp3 +do + echo "$i" +done diff --git a/ult/ult_7/for-5.sh b/ult/ult_7/for-5.sh new file mode 100644 index 0000000..dc17f64 --- /dev/null +++ b/ult/ult_7/for-5.sh @@ -0,0 +1,4 @@ +for i in *.mp3 +do + mv $i `echo $f|tr -s " " "-"|cut -d - -f 2-` +done diff --git a/ult/ult_7/premier.mp3 b/ult/ult_7/premier.mp3 new file mode 100644 index 0000000..e69de29 diff --git a/ult/ult_7/script.rst b/ult/ult_7/script.rst new file mode 100644 index 0000000..4efdfd9 --- /dev/null +++ b/ult/ult_7/script.rst @@ -0,0 +1,401 @@ +.. Objectives +.. ---------- + + .. At the end of this tutorial, you will be able to: + + .. 1. Prepare scripts using 'Control Operators'. + .. 2. Understand what 'Environment Variables' are. + +.. Prerequisites +.. ------------- + +.. 1. Using Linux tools - Part 1 +.. 2. Using Linux tools - Part 2 +.. 3. Using Linux tools - Part 3 +.. 4. Using Linux tools - Part 4 +.. 5. Using Linux tools - Part 5 +.. 6. Using Linux tools - Part 6 + + + +Script +------ + +.. L1 + +{{{ Show the first slide containing title, name of the production +team along with the logo of MHRD }}} + +.. R1 + +Hello friends and Welcome to the tutorial on +'Using linux tools - Part 7'. + +.. L2 + +{{{ Show the 'Objectives' slide }}} + +.. R2 + +At the end of this tutorial, you will be able to, + + 1. Prepare scripts using 'Control Operators'. + 2. Understand what 'Environment Variables' are. + +.. L3 + +{{{ Switch to the pre-requisite slide }}} + +.. R3 + +Before beginning this tutorial, we suggest you to complete the +tutorials, "Using Linux tools, Part 1 to Part 6". + +.. R4 + +We have many 'Control Structures and Operators' available in the linux bash. +Let us look at how to use them. +To write an 'if', or an 'if-else' construct, we need to check or test for a +condition(s). The ``test`` command allows us to test for condition(s). It has +a whole range of tests that can be performed. The man page of ``test`` +gives you the complete listing of various types of tests that can be performed +with it. + +Let's write a simple script with an ``if`` condition that tests whether a +directory with a particular name, exists or not. + +.. L4 + +.. L5 + +{{{ Show slide, 'if' }}} + +.. R5 + +Let us create a script named ``dir-test.sh`` with this code. + + #!/bin/bash + if test -d $1 + then + echo "Yes, the directory" $1 "is present" + fi + +When the script is run with an argument, it will print a message, if a +directory with the said name exists in the current working directory. + +.. R6 + +Let's write a simple script which returns back whether the argument passed +is negative or not. + +.. L6 + +{{{ Open the file sign.sh and show }}} +:: + + #!/bin/bash + if test $1 -lt 0 + then + echo "number is negative" + else + echo "number is non-negative" + fi + +.. R7 + +We can run the file with a set of different inputs and see if it works. + +.. L7 + +{{{ Switch to terminal }}} +:: + + ./sign.sh -11 + +.. R8 + +Instead of using the ``test`` command, square brackets may also be used. + +.. L8 + +.. L9 + +{{{ Show slide, [ ] - alias for test }}} + +.. R9 + +Note that the spacing is important, when using the square brackets. +The left square bracket ( ``[`` ) should be followed by a space and the right +square bracket ( ``]`` ) should be preceded by a space. + +Let's create something interesting using the 'if-else' clause. Let's write a +script, that greets the user, based on the time. + +.. L10 + +{{{ Open the file clause.sh and show }}} +{{{ Highlight the required content wherever necessary, while narrating }}} + +.. R10 + +There are a couple of new things in this script. ``$LOGNAME`` is another +'environment variable', which has the login name of the user. The variables, +``hour`` and ``now`` are actually taking the output of the commands that +are placed in the back quotes. + +Now, let us see how to run loops in bash. We shall look at the ``for`` and +the ``while`` loops. + +.. L11 + +{{{ Show slide, 'for' }}} + +.. R11 + +Suppose we have a set of files, whose file-names contain numbers before the +text, say ``08 - Society.mp3``. We would like to rename these files by +removing the numbers before the text. How would we go about doing that? + +It is clear from the problem statement that we could loop over the list of +files and rename each of them. + +.. R12 + +First, let us look at a simple ``for`` loop, to understand how it works. + +.. L12 + +{{{ Switch to terminal }}} +:: + + for animal in rat cat dog man + do + echo $animal + done + +.. R13 + +We just wrote a list of animals, each name separated by a space +and then printed each name on a separate line. The variable ``animal`` is a +'dummy' or a 'loop variable'. It can then be used to refer to the element of +the list that is currently being dealt with. We could, obviously, use +something as lame as ``i`` in place of ``animal``. + +.. L13 + +.. R14 + +To generate a range of numbers and iterate over them, we do the following. + +.. L14 + +{{{ Open the script ``for-1.sh`` and show }}} + +.. R15 + +Now, let us run the script and see what we get, + +.. L15 + +{{{ Switch to terminal }}} +:: + + sh for-1.sh + +.. R16 + +Now, we use a ``for`` loop to list the files that we are interested in. + +.. L16 + +{{{ Open the script ``for-2.sh`` and show }}} +{{{ Switch to terminal }}} +:: + + sh for-2.sh + +.. R17 + +If the file-names contain spaces, ``for`` assumes, each word separated by a +space,to be a single item in the list and prints it in a separate line. We +could modify the script slightly to overcome this problem. + +.. L17 + +{{{ Open the script ``for-3.sh`` and show }}} +{{{ Switch to terminal }}} +:: + + sh for-3.sh + +.. R18 + +Now, we have each file name printed on a separate line. The file names are +in the form ``dd - Name.mp3`` and it has to be changed to the format +``Name.mp3``. Also, if the name has spaces, we wish to replace it with +hyphens. + +.. L18 + +{{{ Open the script ``for-4.sh`` and show }}} +{{{ Switch to terminal }}} +:: + + sh for-4.sh + +.. R19 + +Now, we simply replace the echo command with a ``mv`` command. + +.. L19 + +{{{ Open the script ``for-5.sh`` and show }}} +{{{ Switch to terminal }}} +:: + + sh for-5.sh + +.. R20 + +We see that we get our required output. All the files have been renamed and +the spaces are removed. +Now let us move ahead with ``while`` loop. +The ``while`` command allows us to continuously execute a block of commands +until the command that is controlling the loop is executing successfully. + +.. L20 + +.. R21 + +Let's start with the lamest example of a ''while'' loop. + +.. L21 + +{{{ Open the script ``while-1.sh`` and show }}} +{{{ Switch to terminal }}} +:: + + sh while-1.sh + +.. R22 + +This, as you can see, is an infinite loop that prints ``True``. + +Say, we wish to write a simple program that takes input from the user +and prints it back, until the input is ``quit``, which then quits the program. + +.. L22 + +{{{ Open the script ``while-2.sh`` and show }}} +{{{ Switch to terminal }}} +:: + + sh while-2.sh + +.. L23 + +{{{ Show slide, Environment Variables }}} + +.. R23 + +'Environment variables' are a way of passing information from the shell to the +programs that are run in it. Standard UNIX variables are split into two +categories,'Environment variables' and 'Shell variables'. In broad terms, +'Shell variables' apply only to the current instance of the shell and are +used to set short-term working conditions; 'Environment variables' have a +farther reaching significance, and are set at login, valid for the duration of +the session. By convention, 'Environment variables' have UPPER CASE and 'Shell +variables' have lower case names. + +You can see an example of environment variables in the slide. + +.. R24 + +To see all the variables and their values, we could use any of the +following, + +.. L24 + +{{{ Switch to terminal }}} +:: + + printenv | less + env + +.. R25 + +We have looked at the 'PATH' variable, in the previous tutorial. We shall now +use the ``export`` command to change it's value. + +.. L25 +:: + + export PATH=$PATH:$HOME/bin + +.. R26 + +Observe the difference in the value of 'PATH' variable before and after +modifying it. + +``export`` command is used to export a variable to the environment of all +the processes that are started from that shell. + +.. L26 + +.. L27 + +{{{ Switch to 'Summary' slide }}} + +.. R27 + +This brings us to the end of this tutorial. +In this tutorial, we have learnt to, + + 1. Prepare scripts using control structures like ``if``, ``if-else``, + ``for`` and ``while``. + 2. Use 'environment variables'. + 3. Export a variable to the environment of all the processes, using + the ``export`` command. + +.. L28 + +{{{ Show self assessment questions slide }}} + +.. R28 + +Here are some self assessment questions for you to solve: + + 1. Print the text ``dog man`` in such a way that the prompt + continues after the text. + + 2. How can you add a new path variable ``/data/myscripts`` to $PATH variable ? + +.. L30 + +{{{ Solutions of self assessment questions on slide }}} + +.. R30 + +And the answers, + + 1. We print the given text using the ``echo`` command by using an additional + option -n as, +:: + + $echo -n dog man + + 2. We can add a new path variable by using the export command as, + +:: + + $export PATH=$PATH://data/myscripts + +.. L31 + +{{{ Show the Thank you slide }}} + +.. R31 + +Hope you have enjoyed this tutorial and found it useful. +Thank you! + diff --git a/ult/ult_7/sign.sh b/ult/ult_7/sign.sh new file mode 100644 index 0000000..246150d --- /dev/null +++ b/ult/ult_7/sign.sh @@ -0,0 +1,7 @@ +#!/bin/bash +if test $1 -lt 0 +then + echo "number is negative" +else + echo "number is non-negative" +fi diff --git a/ult/ult_7/society.mp3 b/ult/ult_7/society.mp3 new file mode 100644 index 0000000..e69de29 diff --git a/ult/ult_7/ult7.tex b/ult/ult_7/ult7.tex new file mode 100644 index 0000000..a306272 --- /dev/null +++ b/ult/ult_7/ult7.tex @@ -0,0 +1,202 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Using Linux Tools +% +% Author: FOSSEE +% Copyright (c) 2009, FOSSEE, IIT Bombay +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\documentclass[12pt,compress]{beamer} + +\mode +{ + \usetheme{Warsaw} + \useoutertheme{infolines} + \setbeamercovered{transparent} +} + +\usepackage[english]{babel} +\usepackage[latin1]{inputenc} +%\usepackage{times} +\usepackage[T1]{fontenc} + +% Taken from Fernando's slides. +\usepackage{ae,aecompl} +\usepackage{mathpazo,courier,euler} +\usepackage[scaled=.95]{helvet} + +\definecolor{darkgreen}{rgb}{0,0.5,0} + +\usepackage{listings} +\lstset{language=sh, + basicstyle=\ttfamily\bfseries, + commentstyle=\color{red}\itshape, + stringstyle=\color{darkgreen}, + showstringspaces=false, + keywordstyle=\color{blue}\bfseries} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% DOCUMENT STARTS +\begin{document} + +\begin{frame} + +\begin{center} +\vspace{12pt} +\textcolor{blue}{\huge Using Linux Tools\\Part VII} +\end{center} +\vspace{18pt} +\begin{center} +\vspace{10pt} +\includegraphics[scale=0.95]{../images/fossee-logo.png}\\ +\vspace{5pt} +\scriptsize Developed by FOSSEE Team, IIT-Bombay. \\ +\scriptsize Funded by National Mission on Education through ICT\\ +\scriptsize MHRD,Govt. of India\\ +\includegraphics[scale=0.30]{../images/iitb-logo.png}\\ +\end{center} +\end{frame} +\begin{frame} +\frametitle{Objectives} +\label{sec-2} + +At the end of this tutorial, you will be able to, +\begin{itemize} +\item Prepare scripts using 'Control Operators'. +\item Understand what 'Environment Variables' are. +\end{itemize} +\end{frame} + +\begin{frame} +\frametitle{Pre-requisite} +\label{sec-3} + +Spoken tutorial on - +\begin{itemize} +\item Using Linux tools -- Part I +\item Using Linux tools -- Part II +\item Using Linux tools -- Part III +\item Using Linux tools -- Part IV +\item Using Linux tools -- Part V +\item Using Linux tools -- Part VI +\end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{\texttt{if}} + \begin{itemize} + \item Print message if directory exists in \texttt{pwd} + \end{itemize} + \begin{lstlisting} + #!/bin/bash + if test -d $1 + then + echo "Yes, the directory" \ + $1 "is present" + fi + \end{lstlisting} % $ +\end{frame} + +\begin{frame}[fragile] + \frametitle{\texttt{[ ]} - alias for \texttt{test}} + \begin{itemize} + \item Square brackets (\texttt{[]}) can be used instead of + \texttt{test} + \item + \end{itemize} + \begin{lstlisting} + #!/bin/bash + if [ $1 -lt 0 ] + then + echo "number is negative" + else + echo "number is non-negative" + fi + \end{lstlisting} % $ + \begin{itemize} + \item \alert{spacing is important, when using the square brackets} + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{\texttt{for}} + \begin{block}{Problem} + Given a set of \texttt{.mp3} files, that have names beginning with + numbers followed by their names --- \texttt{08 - Society.mp3} --- + rename the files to have just the names. Also replace any spaces + in the name with hyphens. + \end{block} + \begin{itemize} + \item Loop over the list of files + \item Process the names, to get new names + \item Rename the files + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Environment Variables} + \begin{itemize} + \item Pass information from shell to programs running in it + \item Behavior of programs can change based on values of variables + \item Environment variables vs. Shell variables + \item Shell variables -- only current instance of the shell + \item Environment variables -- valid for the whole session + \item Convention -- environment variables are UPPER CASE + \end{itemize} +\end{frame} + +\begin{frame} +\frametitle{Summary} +\label{sec-8} + + In this tutorial, we have learnt to, + + +\begin{itemize} +\item Prepare scripts using control structures like ``if'', ``if-else'', + ``for'' and ``while''. +\item Use 'environment variables'. +\item Export a variable to the environment of all the processes, using + the ``export'' command. +\end{itemize} +\end{frame} +\begin{frame}[fragile] +\frametitle{Evaluation} +\label{sec-9} + + +\begin{enumerate} +\item Print the text ``dog man'' in such a way that the prompt + continues after the text. +\vspace{8pt} +\item How can you add a new path variable ``/data/myscripts'' to \$PATH variable ? +\end{enumerate} +\end{frame} +\begin{frame} +\frametitle{Solutions} +\label{sec-10} + + +\begin{enumerate} +\item \$ echo -n dog man +\vspace{15pt} +\item \$ export PATH=\$PATH://data/myscripts +\end{enumerate} +\end{frame} +\begin{frame} + + \begin{block}{} + \begin{center} + \textcolor{blue}{\Large THANK YOU!} + \end{center} + \end{block} +\begin{block}{} + \begin{center} + For more Information, visit our website\\ + \url{http://fossee.in/} + \end{center} + \end{block} +\end{frame} + +\end{document} + + diff --git a/ult/ult_7/while-1.sh b/ult/ult_7/while-1.sh new file mode 100644 index 0000000..485e167 --- /dev/null +++ b/ult/ult_7/while-1.sh @@ -0,0 +1,4 @@ +while true +do + echo "True" +done diff --git a/ult/ult_7/while-2.sh b/ult/ult_7/while-2.sh new file mode 100644 index 0000000..5fbdd11 --- /dev/null +++ b/ult/ult_7/while-2.sh @@ -0,0 +1,7 @@ +while [ "$variable" != "quit" ] +do + read variable + echo "Input - $variable" +done +exit 0 + diff --git a/ult/ult_8/script.rst b/ult/ult_8/script.rst new file mode 100644 index 0000000..ca2c5ec --- /dev/null +++ b/ult/ult_8/script.rst @@ -0,0 +1,339 @@ +.. Objectives +.. ---------- + + .. At the end of this tutorial, you will be able to: + + .. 1. + .. 2. + +.. Prerequisites +.. ------------- + +.. 1. Using Linux tools - Part 1 +.. 2. Using Linux tools - Part 2 +.. 3. Using Linux tools - Part 3 +.. 4. Using Linux tools - Part 4 +.. 5. Using Linux tools - Part 5 +.. 6. Using Linux tools - Part 6 +.. 7. Using Linux tools - Part 7 + + +Script +------ + +.. L1 + +{{{ Show the first slide containing title, name of the production +team along with the logo of MHRD }}} + +.. R1 + +Hello friends and Welcome to the tutorial on +'Using linux tools - Part 8'. + +.. L2 + +{{{ Show slide with objectives }}} + +.. R2 + +At the end of this tutorial, you will be able to, + + 1. Search for files in many different ways. + #. Compare files with same names. + #. Create and extract an archive. + #. Customize a shell. + +.. L3 + +{{{ Switch to the pre-requisite slide }}} + +.. R3 + +Before beginning this tutorial,we would suggest you to complete the +tutorial on "Using Linux tools from Part 1 to Part 7". + +There are a bunch of tools, that will prove to be handy in your day +to day work. These tools will help you quickly perform tasks like searching +for files, comparing files and checking if they are the same, viewing the +exact differences between them, etc. + +.. L4 + +{{{ Show slide, find }}} + +.. R4 + +Let us start with the first tool - 'find' . +The ``find`` command lets you find files in a directory hierarchy. It +offers a very complex feature set allowing you to search for files with a +wide range of restrictions. We shall only look at some of the most +frequently used ones. + +.. R5 + +To find the files, which end with an extension, ``.pdf``, saved in the current +folder and all it's subfolders, we say + +.. L5 + +{{{ Open the terminal }}} +:: + + find . -name "*.pdf" + +.. R6 + +The ``find`` command also lists out the directory and sub-directory names +To list them, we say, + +.. L6 +:: + + find . -type d + +.. R7 + +In short, ``find`` allows you to set limits on file-size, modification time +and whole lot of other things which you can explore on seeing the man page +of ``find``. + +.. L7 + +.. R8 + +Let us now move on to the next tool, the compare tool. + +To compare two files, whether they are identical or not, we can use the +``cmp`` command. Let us consider some situation. Suppose, we run the ``find`` +command to locate some file, and it turns out that we have a file with same +name in different location. + +In this case, if we are unsure, whether both the files are the same, we can use +the ``cmp`` command to check if the files are identical. + +.. L8 +:: + + find . -name quick.c + ./Desktop/programs/quick.c + ./c-folder/quick.c + cmp Desktop/programs/quick.c c-folder/quick.c + +.. L9 + +{{{ Show slide, cmp }}} + +.. R9 + +If the cmp command doesn't return any output, it means that both files are +exactly identical. If there are any differences in the file, it gives you +the exact byte location at which the first difference occurred. + +.. R10 + +Let us now make a small change in one of quick.c file and run the ``cmp`` +command again. + +.. L10 +{{{ Switch to the terminal }}} + +:: + + cmp Desktop/programs/quick.c c-folder/quick.c + +.. R11 + +As we can see, it gives the exact location as to where a change is made. + +Now, we may not be happy with just the knowledge that the files are +different. We may want to see the exact differences between the two files. +The ``diff`` command can be used to find the exact differences between the +files. + +.. L11 + +.. L12 +:: + + diff Desktop/programs/quick.c c-folder/quick.c + +.. R12 + +We get back a line by line difference between the two files. + +.. L13 + +{{{ Show slide, diff }}} + +.. R13 + +The ``>`` mark indicates the content that has been added to the second file, +which was not present in the first file. The ``<`` mark indicates the lines +that were present in the first file, but are not existent in the second file. + +.. L14 + +{{{ Show slide, tar }}} + +.. R14 + +You would often come across (archive) files which are called *tarballs*. A +tar ball is essentially a collection of files, which may or may not be +compressed. Essentially, it eases the job of storing, backing up and +transporting multiple files, at once. + +.. R15 + +The following set of commands extracts the contents of the ``allfiles.tar`` +tarball to the directory extract. + +.. L15 + +{{{ Switch to terminal }}} +:: + + mkdir extract + cp allfiles.tar extract/ + cd extract + tar -xvf allfiles.tar + +.. L16 + +{{{ Show slide, extracting an archive }}} + +.. R16 + +The option, ``x`` tells ``tar`` to extract the files in the archive file +specified by the ``f`` option. The ``v`` option tells ``tar`` to give out a +verbose output. + +.. R17 + +Similarly, if we wish to create a ``tar`` archive, we use the ``c`` option +instead of the ``x`` option. For instance, the command below creates an +archive from all the files with the ``.txt`` extension. + +.. L17 + +{{{ Switch to terminal }}} +:: + + tar -cvzf newarchive.tar *.txt + +.. R18 + +You can also create and extract compressed archives using ``tar``. It +supports a wide variety of compressions like gzip, bzip2, lzma, etc. + +We need to add an additional option to ``tar`` to handle these +compressions. + + ++-------------+------------+ +| Compression | Option | ++-------------+------------+ +| gzip | ``-z`` | +| bzip2 | ``-j`` | +| lzma | ``--lzma`` | ++-------------+------------+ + +.. L18 + +.. R19 + +So, if we wished to create a gzip archive in the previous command, we +change it to the following + +.. L19 +:: + + tar -cvzf newarchive.tar.gz *.txt + +.. L20 + +{{{ Show slide, customizing your shell }}} + +.. R20 + +What would you do, if you want bash to execute a particular command each +time you start it up? For instance, say you want the current directory to +be your Desktop instead of your home folder, each time bash starts up. +Bash reads and executes commands in a whole bunch +of files called start-up files, when it starts up. + +When bash starts up as an interactive login shell, it reads the files +``/etc/profile``, ``~/.bash_profile``, ``~/.bash_login``, and +``~/.profile`` in that order. + +When an interactive shell that is not a login shell is started, bash reads +and executes commands from ~/.bashrc. This can be prevented using the ``--norc`` +option. Instead of using the ``~/.bashrc`` file on start-up, we can force +the bash to use another file, for which the ``--rcfile`` option may be used. + +Now, you know what you should do, to change the current directory to you +Desktop. Just put a ``cd ~/Desktop`` into your ``~/.bashrc`` and you are +set! +But as you know that the start-up files are used for a lot more complex things +than this. You could set (or unset) aliases and a whole bunch of environment +variables in the ``.bashrc``, like changing environment variables etc. + +.. L21 + +{{{ Switch to 'Summary' slide }}} + +.. R21 + +This brings us to the end of the end of this tutorial. +In this tutorial, we have learnt to, + + 1. Make use of the ``find`` command to find files in a directory hierarchy. + #. Find the differences between files with the same name, using the + ``cmp`` and ``diff`` commands. + #. Extract and create compressed archive's using the ``tar`` command. + #. Customize one's shell according to one's choice. + +.. L22 + +{{{ Show self assessment questions slide }}} + +.. R22 + +Here are some self assessment questions for you to solve + + 1. Look at the man page of ``find`` and state the options which + deal with symbolic links. + + 2. How do you append tar files to an archive? + +.. L23 + +{{{ Solution of self assessment questions on slide }}} + +.. R23 + +And the answers, + +1. The -H, -L and -P options with the ``find`` command control + the treatment of symbolic links. + + 2. To append tar files to an archive, we can use the ``tar`` command + either with the ``-A`` option or the ``-r`` option, as, +:: + + $ tar -Af + OR + $ tar -rf + + +.. L24 + +{{{ Show the Thank you slide }}} + +.. R24 + +Hope you have enjoyed this tutorial and found it useful. +Thank you! + + + diff --git a/ult/ult_8/slides.tex~ b/ult/ult_8/slides.tex~ new file mode 100644 index 0000000..7598d67 --- /dev/null +++ b/ult/ult_8/slides.tex~ @@ -0,0 +1,234 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Using Linux Tools +% +% Author: FOSSEE +% Copyright (c) 2009, FOSSEE, IIT Bombay +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\documentclass[12pt,compress]{beamer} + +\mode +{ + \usetheme{Warsaw} + \useoutertheme{infolines} + \setbeamercovered{transparent} +} + +\usepackage[english]{babel} +\usepackage[latin1]{inputenc} +%\usepackage{times} +\usepackage[T1]{fontenc} + +% Taken from Fernando's slides. +\usepackage{ae,aecompl} +\usepackage{mathpazo,courier,euler} +\usepackage[scaled=.95]{helvet} + +\definecolor{darkgreen}{rgb}{0,0.5,0} + +\usepackage{listings} +\lstset{language=sh, + basicstyle=\ttfamily\bfseries, + commentstyle=\color{red}\itshape, + stringstyle=\color{darkgreen}, + showstringspaces=false, + keywordstyle=\color{blue}\bfseries} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% DOCUMENT STARTS +\begin{document} + +\begin{frame} + +\begin{center} +\vspace{12pt} +\textcolor{blue}{\huge Using Linux Tools} +\end{center} +\vspace{18pt} +\begin{center} +\vspace{10pt} +\includegraphics[scale=0.95]{../images/fossee-logo.png}\\ +\vspace{5pt} +\scriptsize Developed by FOSSEE Team, IIT-Bombay. \\ +\scriptsize Funded by National Mission on Education through ICT\\ +\scriptsize MHRD,Govt. of India\\ +\includegraphics[scale=0.30]{../images/iitb-logo.png}\\ +\end{center} +\end{frame} +\begin{frame} +\frametitle{Objectives} +\label{sec-2} + +At the end of this tutorial, you will be able to, +\begin{itemize} +\item Learn certain handy tools that are useful in day-to-day work. +\item Customize a shell. +\end{itemize} +\end{frame} + +\section{Miscellaneous Tools} + +\begin{frame}[fragile] + \frametitle{\texttt{find}} + \begin{itemize} + \item Find files in a directory hierarchy + \item Offers a very complex feature set + \item Look at the \texttt{man} page! + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{\texttt{cmp}} + \begin{itemize} + \item Compare two files + \end{itemize} + \begin{lstlisting} + $ find . -name quick.c + ./Desktop/programs/quick.c + ./c-folder/quick.c + $ cmp Desktop/programs/quick.c \ + c-folder/quick.c + \end{lstlisting} % $ + \begin{itemize} + \item No output when the files are exactly the same + \item Else, gives location where the first difference occurs + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{\texttt{diff}} + \begin{itemize} + \item We know the files are different, but want exact differences + \end{itemize} + \begin{lstlisting} + $ diff Desktop/programs/quick.c \ + c-folder/quick.c + \end{lstlisting} % $ + \begin{itemize} + \item line by line difference between files + \item \texttt{>} indicates content only in second file + \item \texttt{<} indicates content only in first file + \end{itemize} +\end{frame} + +\begin{frame}[fragile] +\frametitle{\texttt{tar}} +\begin{itemize} +\item \emph{tarball} -- essentially a collection of files +\item May or may not be compressed +\item Eases the job of storing, backing-up \& transporting files +\end{itemize} +\end{frame} + +\begin{frame}[fragile] +\frametitle{Extracting an archive} + +\begin{lstlisting} +$ mkdir extract +$ cp allfiles.tar extract/ +$ cd extract +$ tar -xvf allfiles.tar +\end{lstlisting} %$ + +\begin{itemize} +\item \texttt{-x} --- Extract files within the archive +\item \texttt{-f} --- Specify the archive file +\item \texttt{-v} --- Be verbose +\end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Compressed archives} + \begin{itemize} + \item \texttt{tar} can create and extract compressed archives + \item Supports compressions like gzip, bzip2, lzma, etc. + \item Additional option to handle compressed archives + \begin{center} + \begin{tabular}{|l|l|}\hline + Compression & Option \\\hline + gzip & \texttt{-z} \\\hline + bzip2 & \texttt{-j} \\\hline + lzma & \texttt{-{}-lzma} \\\hline + \end{tabular} + \end{center} + \end{itemize} + \begin{lstlisting} + $ tar -cvzf newarchive.tar.gz *.txt + \end{lstlisting} % $ +\end{frame} + + +\begin{frame} +\frametitle{Customizing your shell} +\begin{itemize} +\item Bash reads \texttt{/etc/profile}, + \texttt{\textasciitilde{}/.bash\_profile}, + \texttt{\textasciitilde{}/.bash\_login}, and + \texttt{\textasciitilde{}/.profile} in that order, when starting + up as a login shell. +\item \texttt{\textasciitilde{}/.bashrc} is read, when not a login + shell +\item Put any commands that you want to run when bash starts, in this + file. +\end{itemize} +\end{frame} + + +\begin{frame} +\frametitle{Summary} +\label{sec-8} + + In this tutorial, we have learnt to, + + +\begin{itemize} +\item To make use of the ``find'' command find files in a directory hierarchy. +\item To find the differences between files with the same name, using the + ``cmp'' and ``diff'' commands. +\item To extract and create compressed archive's using the ``tar'' command. +\item Customize one's shell according to one's choice. +\end{itemize} +\end{frame} +\begin{frame}[fragile] +\frametitle{Evaluation} +\label{sec-9} + + +\begin{enumerate} +\item Look at the man page of ``find'' and state the options which + deal with symbolic links. +\vspace{8pt} +\item How do you append tar files to an archive ? +\end{enumerate} +\end{frame} +\begin{frame} +\frametitle{Solutions} + +\begin{enumerate} +\item -H, -L and -P options with the ``find'' command +\vspace{15pt} +\end{enumerate} + +\begin{verbatim} + $ tar -Af tar file +\end{verbatim} + +\end{frame} +\begin{frame} + + \begin{block}{} + \begin{center} + \textcolor{blue}{\Large THANK YOU!} + \end{center} + \end{block} +\begin{block}{} + \begin{center} + For more Information, visit our website\\ + \url{http://fossee.in/} + \end{center} + \end{block} +\end{frame} + +\end{document} + + diff --git a/ult/ult_8/ult8.tex b/ult/ult_8/ult8.tex new file mode 100644 index 0000000..a34bf53 --- /dev/null +++ b/ult/ult_8/ult8.tex @@ -0,0 +1,248 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Using Linux Tools +% +% Author: FOSSEE +% Copyright (c) 2009, FOSSEE, IIT Bombay +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\documentclass[12pt,compress]{beamer} + +\mode +{ + \usetheme{Warsaw} + \useoutertheme{infolines} + \setbeamercovered{transparent} +} + +\usepackage[english]{babel} +\usepackage[latin1]{inputenc} +%\usepackage{times} +\usepackage[T1]{fontenc} + +% Taken from Fernando's slides. +\usepackage{ae,aecompl} +\usepackage{mathpazo,courier,euler} +\usepackage[scaled=.95]{helvet} + +\definecolor{darkgreen}{rgb}{0,0.5,0} + +\usepackage{listings} +\lstset{language=sh, + basicstyle=\ttfamily\bfseries, + commentstyle=\color{red}\itshape, + stringstyle=\color{darkgreen}, + showstringspaces=false, + keywordstyle=\color{blue}\bfseries} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% DOCUMENT STARTS +\begin{document} + +\begin{frame} + +\begin{center} +\vspace{12pt} +\textcolor{blue}{\huge Using Linux Tools} +\end{center} +\vspace{18pt} +\begin{center} +\vspace{10pt} +\includegraphics[scale=0.95]{../images/fossee-logo.png}\\ +\vspace{5pt} +\scriptsize Developed by FOSSEE Team, IIT-Bombay. \\ +\scriptsize Funded by National Mission on Education through ICT\\ +\scriptsize MHRD,Govt. of India\\ +\includegraphics[scale=0.30]{../images/iitb-logo.png}\\ +\end{center} +\end{frame} +\begin{frame} +\frametitle{Objectives} +\label{sec-2} + +At the end of this tutorial, you will be able to, +\begin{itemize} +\item Search for files in many different ways. +\item Compare files with same names. +\item Create and extract an archive. +\item Customize a shell. +\end{itemize} +\end{frame} + +\begin{frame} +\frametitle{Pre-requisite} +\label{sec-3} + +Spoken tutorial on - +\begin{itemize} +\item Using Linux tools -- Part I +\item Using Linux tools -- Part II +\item Using Linux tools -- Part III +\item Using Linux tools -- Part IV +\item Using Linux tools -- Part V +\item Using Linux tools -- Part VI +\item Using Linux tools -- Part VII +\end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{\texttt{`find'}} + \begin{itemize} + \item `find' command helps to find files in a directory hierarchy + \item Offers a very complex feature set\\ For eg: search files by name, owner, date,etc. + \item Look at the \texttt{man} page of `find' + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{\texttt{`cmp'}} + \begin{itemize} + \item Compare two files + \end{itemize} + \begin{lstlisting} + $ find . -name quick.c + ./Desktop/programs/quick.c + ./c-folder/quick.c + $ cmp Desktop/programs/quick.c \ + c-folder/quick.c + \end{lstlisting} % $ + \begin{itemize} + \item No output when the files are exactly the same + \item Else, gives location where the first difference occurs + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{\texttt{`diff'}} + \begin{itemize} + \item We know the files are different, but want exact differences + \end{itemize} + \begin{lstlisting} + $ diff Desktop/programs/quick.c \ + c-folder/quick.c + \end{lstlisting} % $ + \begin{itemize} + \item line by line difference between files + \item \texttt{>} indicates content only in second file + \item \texttt{<} indicates content only in first file + \end{itemize} +\end{frame} + +\begin{frame}[fragile] +\frametitle{\texttt{`tar'}} +\begin{itemize} +\item \emph{tarball} -- essentially a collection of files +\item May or may not be compressed +\item Eases the job of storing, backing-up \& transporting files +\end{itemize} +\end{frame} + +\begin{frame}[fragile] +\frametitle{Extracting an archive} + +\begin{lstlisting} +$ mkdir extract +$ cp allfiles.tar extract/ +$ cd extract +$ tar -xvf allfiles.tar +\end{lstlisting} %$ + +\begin{itemize} +\item \texttt{-x} --- Extract files within the archive +\item \texttt{-f} --- Specify the archive file +\item \texttt{-v} --- Be verbose +\end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Compressed archives} + \begin{itemize} + \item \texttt{tar} can create and extract compressed archives + \item Supports compressions like gzip, bzip2, lzma, etc. + \item Additional option to handle compressed archives + \begin{center} + \begin{tabular}{|l|l|}\hline + Compression & Option \\\hline + gzip & \texttt{-z} \\\hline + bzip2 & \texttt{-j} \\\hline + lzma & \texttt{-{}-lzma} \\\hline + \end{tabular} + \end{center} + \end{itemize} + \begin{lstlisting} + $ tar -cvzf newarchive.tar.gz *.txt + \end{lstlisting} % $ +\end{frame} + + +\begin{frame} +\frametitle{Customizing your shell} +\begin{itemize} +\item Bash reads \texttt{/etc/profile}, + \texttt{\textasciitilde{}/.bash\_profile}, + \texttt{\textasciitilde{}/.bash\_login}, and + \texttt{\textasciitilde{}/.profile} in that order, when starting + up as a login shell. +\item \texttt{\textasciitilde{}/.bashrc} is read, when not a login + shell +\item Put any commands that you want to run when bash starts, in this + file. +\end{itemize} +\end{frame} + + +\begin{frame} +\frametitle{Summary} +\label{sec-8} + + In this tutorial, we have learnt to, + + +\begin{itemize} +\item To make use of the ``find'' command find files in a directory hierarchy. +\item To find the differences between files with the same name, using the + ``cmp'' and ``diff'' commands. +\item To extract and create compressed archive's using the ``tar'' command. +\item Customize one's shell according to one's choice. +\end{itemize} +\end{frame} +\begin{frame}[fragile] +\frametitle{Evaluation} +\label{sec-9} + + +\begin{enumerate} +\item Look at the man page of ``find'' and state the options which + deal with symbolic links. +\vspace{8pt} +\item How do you append tar files to an archive ? +\end{enumerate} +\end{frame} +\begin{frame} +\frametitle{Solutions} + +\begin{enumerate} +\item -H, -L and -P options with the ``find'' command +\vspace{15pt} +\item tar -Af +\end{enumerate} + +\end{frame} +\begin{frame} + + \begin{block}{} + \begin{center} + \textcolor{blue}{\Large THANK YOU!} + \end{center} + \end{block} +\begin{block}{} + \begin{center} + For more Information, visit our website\\ + \url{http://fossee.in/} + \end{center} + \end{block} +\end{frame} + +\end{document} + + + -- cgit From 6a40a59f0a259d9869500d455b2e14acd4e0589d Mon Sep 17 00:00:00 2001 From: Jovina Date: Wed, 1 Feb 2012 13:03:01 +0530 Subject: added 8 ult scripts --- ult/ult_8/slides.tex~ | 234 -------------------------------------------------- 1 file changed, 234 deletions(-) delete mode 100644 ult/ult_8/slides.tex~ diff --git a/ult/ult_8/slides.tex~ b/ult/ult_8/slides.tex~ deleted file mode 100644 index 7598d67..0000000 --- a/ult/ult_8/slides.tex~ +++ /dev/null @@ -1,234 +0,0 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Using Linux Tools -% -% Author: FOSSEE -% Copyright (c) 2009, FOSSEE, IIT Bombay -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\documentclass[12pt,compress]{beamer} - -\mode -{ - \usetheme{Warsaw} - \useoutertheme{infolines} - \setbeamercovered{transparent} -} - -\usepackage[english]{babel} -\usepackage[latin1]{inputenc} -%\usepackage{times} -\usepackage[T1]{fontenc} - -% Taken from Fernando's slides. -\usepackage{ae,aecompl} -\usepackage{mathpazo,courier,euler} -\usepackage[scaled=.95]{helvet} - -\definecolor{darkgreen}{rgb}{0,0.5,0} - -\usepackage{listings} -\lstset{language=sh, - basicstyle=\ttfamily\bfseries, - commentstyle=\color{red}\itshape, - stringstyle=\color{darkgreen}, - showstringspaces=false, - keywordstyle=\color{blue}\bfseries} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% DOCUMENT STARTS -\begin{document} - -\begin{frame} - -\begin{center} -\vspace{12pt} -\textcolor{blue}{\huge Using Linux Tools} -\end{center} -\vspace{18pt} -\begin{center} -\vspace{10pt} -\includegraphics[scale=0.95]{../images/fossee-logo.png}\\ -\vspace{5pt} -\scriptsize Developed by FOSSEE Team, IIT-Bombay. \\ -\scriptsize Funded by National Mission on Education through ICT\\ -\scriptsize MHRD,Govt. of India\\ -\includegraphics[scale=0.30]{../images/iitb-logo.png}\\ -\end{center} -\end{frame} -\begin{frame} -\frametitle{Objectives} -\label{sec-2} - -At the end of this tutorial, you will be able to, -\begin{itemize} -\item Learn certain handy tools that are useful in day-to-day work. -\item Customize a shell. -\end{itemize} -\end{frame} - -\section{Miscellaneous Tools} - -\begin{frame}[fragile] - \frametitle{\texttt{find}} - \begin{itemize} - \item Find files in a directory hierarchy - \item Offers a very complex feature set - \item Look at the \texttt{man} page! - \end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{\texttt{cmp}} - \begin{itemize} - \item Compare two files - \end{itemize} - \begin{lstlisting} - $ find . -name quick.c - ./Desktop/programs/quick.c - ./c-folder/quick.c - $ cmp Desktop/programs/quick.c \ - c-folder/quick.c - \end{lstlisting} % $ - \begin{itemize} - \item No output when the files are exactly the same - \item Else, gives location where the first difference occurs - \end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{\texttt{diff}} - \begin{itemize} - \item We know the files are different, but want exact differences - \end{itemize} - \begin{lstlisting} - $ diff Desktop/programs/quick.c \ - c-folder/quick.c - \end{lstlisting} % $ - \begin{itemize} - \item line by line difference between files - \item \texttt{>} indicates content only in second file - \item \texttt{<} indicates content only in first file - \end{itemize} -\end{frame} - -\begin{frame}[fragile] -\frametitle{\texttt{tar}} -\begin{itemize} -\item \emph{tarball} -- essentially a collection of files -\item May or may not be compressed -\item Eases the job of storing, backing-up \& transporting files -\end{itemize} -\end{frame} - -\begin{frame}[fragile] -\frametitle{Extracting an archive} - -\begin{lstlisting} -$ mkdir extract -$ cp allfiles.tar extract/ -$ cd extract -$ tar -xvf allfiles.tar -\end{lstlisting} %$ - -\begin{itemize} -\item \texttt{-x} --- Extract files within the archive -\item \texttt{-f} --- Specify the archive file -\item \texttt{-v} --- Be verbose -\end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{Compressed archives} - \begin{itemize} - \item \texttt{tar} can create and extract compressed archives - \item Supports compressions like gzip, bzip2, lzma, etc. - \item Additional option to handle compressed archives - \begin{center} - \begin{tabular}{|l|l|}\hline - Compression & Option \\\hline - gzip & \texttt{-z} \\\hline - bzip2 & \texttt{-j} \\\hline - lzma & \texttt{-{}-lzma} \\\hline - \end{tabular} - \end{center} - \end{itemize} - \begin{lstlisting} - $ tar -cvzf newarchive.tar.gz *.txt - \end{lstlisting} % $ -\end{frame} - - -\begin{frame} -\frametitle{Customizing your shell} -\begin{itemize} -\item Bash reads \texttt{/etc/profile}, - \texttt{\textasciitilde{}/.bash\_profile}, - \texttt{\textasciitilde{}/.bash\_login}, and - \texttt{\textasciitilde{}/.profile} in that order, when starting - up as a login shell. -\item \texttt{\textasciitilde{}/.bashrc} is read, when not a login - shell -\item Put any commands that you want to run when bash starts, in this - file. -\end{itemize} -\end{frame} - - -\begin{frame} -\frametitle{Summary} -\label{sec-8} - - In this tutorial, we have learnt to, - - -\begin{itemize} -\item To make use of the ``find'' command find files in a directory hierarchy. -\item To find the differences between files with the same name, using the - ``cmp'' and ``diff'' commands. -\item To extract and create compressed archive's using the ``tar'' command. -\item Customize one's shell according to one's choice. -\end{itemize} -\end{frame} -\begin{frame}[fragile] -\frametitle{Evaluation} -\label{sec-9} - - -\begin{enumerate} -\item Look at the man page of ``find'' and state the options which - deal with symbolic links. -\vspace{8pt} -\item How do you append tar files to an archive ? -\end{enumerate} -\end{frame} -\begin{frame} -\frametitle{Solutions} - -\begin{enumerate} -\item -H, -L and -P options with the ``find'' command -\vspace{15pt} -\end{enumerate} - -\begin{verbatim} - $ tar -Af tar file -\end{verbatim} - -\end{frame} -\begin{frame} - - \begin{block}{} - \begin{center} - \textcolor{blue}{\Large THANK YOU!} - \end{center} - \end{block} -\begin{block}{} - \begin{center} - For more Information, visit our website\\ - \url{http://fossee.in/} - \end{center} - \end{block} -\end{frame} - -\end{document} - - -- cgit From 8478ad4e8956330fea1a3c3c6787bf10790b3661 Mon Sep 17 00:00:00 2001 From: Jovina Date: Tue, 12 Jun 2012 16:04:39 +0530 Subject: Added two files to ULT_6. --- ult/ult_6/marks1.txt | 5 +++++ ult/ult_6/results.sh | 3 +++ ult/ult_6/students.txt | 5 +++++ 3 files changed, 13 insertions(+) create mode 100644 ult/ult_6/marks1.txt create mode 100755 ult/ult_6/results.sh create mode 100644 ult/ult_6/students.txt diff --git a/ult/ult_6/marks1.txt b/ult/ult_6/marks1.txt new file mode 100644 index 0000000..9a5299d --- /dev/null +++ b/ult/ult_6/marks1.txt @@ -0,0 +1,5 @@ +5 89 92 85 +4 98 47 67 +1 67 82 76 +2 78 97 60 +3 67 68 69 diff --git a/ult/ult_6/results.sh b/ult/ult_6/results.sh new file mode 100755 index 0000000..acdac84 --- /dev/null +++ b/ult/ult_6/results.sh @@ -0,0 +1,3 @@ +#!/bin/bash +mkdir ~/marks +cut -d " " -f 2- marks1.txt | paste -d " " students.txt - | sort > ~/marks/results.txt diff --git a/ult/ult_6/students.txt b/ult/ult_6/students.txt new file mode 100644 index 0000000..ddacd6b --- /dev/null +++ b/ult/ult_6/students.txt @@ -0,0 +1,5 @@ +Hussain +Dilbert +Anne +Raul +Sven -- cgit From 21b391bfae3dffae150182ec96ef0ce40bd969f2 Mon Sep 17 00:00:00 2001 From: Primal Pappachan Date: Fri, 29 Jun 2012 14:24:51 +0530 Subject: Edited according to checklist --- Version_Control/vcs1/vcslide1.tex | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/Version_Control/vcs1/vcslide1.tex b/Version_Control/vcs1/vcslide1.tex index 1a5d262..8e6536f 100644 --- a/Version_Control/vcs1/vcslide1.tex +++ b/Version_Control/vcs1/vcslide1.tex @@ -1,7 +1,7 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Version Control Systems % -% Author: FOSSEE +% Author: Primal Pappachan, FOSSEE % Copyright (c) 2012, FOSSEE, IIT Bombay %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -43,12 +43,19 @@ \setbeamercolor{emphbar}{bg=blue!20, fg=black} \newcommand{\emphbar}[1] +\setbeamertemplate{navigation symbols}{} + +\author[Primal Pappachan] {} +\institute[FOSSEE group] {} + +\date[IIT Bombay] {} + \begin{document} \begin{frame} \begin{center} \vspace{12pt} -\textcolor{blue}{\huge Version Control with Hg} +\textcolor{blue}{\huge Version Control with Mercurial} \end{center} \vspace{18pt} \begin{center} @@ -57,7 +64,7 @@ \vspace{5pt} \scriptsize Developed by FOSSEE Team, IIT-Bombay. \\ \scriptsize Funded by National Mission on Education through ICT\\ -\scriptsize MHRD,Govt. of India\\ +\scriptsize MHRD, Govt. of India.\\ \includegraphics[scale=0.15]{../images/iitb-logo.jpg}\\ \end{center} \end{frame} @@ -155,7 +162,6 @@ a.out id1.txt id2.txt identifier.cpp id.txt lex pda1.cpp pda2.cpp pda.cp \frametitle{Installation} \begin{itemize} \item \typ{sudo apt-get install mercurial} - \item TortoiseHg \item \typ{\$ hg} \item \typ{\$ hg version} \end{itemize} @@ -163,17 +169,18 @@ a.out id1.txt id2.txt identifier.cpp id.txt lex pda1.cpp pda2.cpp pda.cp \begin{frame}[fragile] \frametitle{Summary...} +In this tutorial, we have learnt about, \begin{itemize} -\item Understand what is Version Control -\item Identify the need for using Version Control -\item Install Mercurial or hg +\item What is Version Control +\item The need for using Version Control +\item Installing Mercurial or hg \end{itemize} \end{frame} \begin{frame}[fragile] \frametitle{Evaluation} \begin{enumerate} -\item Is Mercurial a Centralized VCS or Distributed VCS? Justify your reasoning. +\item Is Mercurial a Centralized VCS or Distributed VCS? \item How can you verify whether Mercurial has been installed properly? \item What is the command for accessing built-in help system of Mercurial? \end{enumerate} -- cgit From f5232018b9f73a7b2cda36013dab1c993eb1dbc3 Mon Sep 17 00:00:00 2001 From: Primal Pappachan Date: Fri, 29 Jun 2012 14:31:02 +0530 Subject: Two column script after first review --- Version_Control/vcs1/vcs2col.rst | 126 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 Version_Control/vcs1/vcs2col.rst diff --git a/Version_Control/vcs1/vcs2col.rst b/Version_Control/vcs1/vcs2col.rst new file mode 100644 index 0000000..53540ac --- /dev/null +++ b/Version_Control/vcs1/vcs2col.rst @@ -0,0 +1,126 @@ +.. Prerequisites +.. ------------- + +.. None + +.. Author : Primal Pappachan + Internal Reviewer : Kiran Isukapatla + Date: May 10 2012 + +-------- +Script +-------- + + + ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| {{{ Show the first slide containing title, name of the production team along | Hello friends and welcome to the tutorial on 'Version Control with Hg' | +| with the logo of MHRD}}} | | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| {{{Show the slide containing the objectives}}} | At the end of this tutorial you will be able to | +| | | +| | 1. Understand what is Version Control. | +| | | +| | #. Identify the need for using Version Control. | +| | | +| | #. Install Mercurial. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| {{{Show the slide 'what is version control'}}} | First, let's understand what 'Version Control' is. | +| | | +| | 'Version control' is a way to track files over time and share them. | +| | This allows access to earlier versions of a file(s) if and when required. | +| | It therefore enables us to make changes to the content of a file, view it's | +| | change log and collaborate on a single piece of work with a team of people. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| {{{Show the slide 'Home-brewed'}}} | Lets look at an example of home-brewed Version Control system.Version control | +| | is a way of backing up files, before making changes. Most people would have | +| | cooked up their own version control system. But there are more general purpose | +| | tools which can do this task in an organized way. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| {{{Show the slide 'Problems'}}} | Let's look at the various problems associated with this set-up. | +| | | +| | 1. Name and changes made are not related or linked. | +| | | +| | #. Cant track sequence of changes made to a file. | +| | | +| | #. Does not scale. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| {{{Show the slide 'The need for Version Control'}}} | Now, let's move to identifying the needs for a 'Version Control System'. | +| | | +| | We have seen that one of the main motivations to use a Version Control system | +| | is the ability to go back to a working version of a file, when something | +| | goes wrong. Below are a few more advantages of using an automated version | +| | control system. | +| | | +| | 1. By tracking the history of a project, any person may see the evolution | +| | of a project. | +| | | +| | 2. Allows for effective collaboration on a project, as everything is shared. | +| | | +| | 3. Helps to identify which additions have broken down a project and thus | +| | aids in efficient tracking down of the bugs. | +| | | +| | 4. It is good for a one man show as it is for a big group of people working | +| | on a project. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| {{{Show the slide 'How does it work? - Analogy}}} | It is, in some ways, similar to playing a video game. We generally play games | +| | in stages. While playing, we save the game at some instances as per our choice. | +| | We continue playing, but we could, if necessary, choose to go back to one of the | +| | saved states and start over. In this manner, we could change the state of | +| | the game. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| {{{Show the slide 'Mercurial or hg'}}} | mercurial or hg is: | +| | | +| | 1. Easy to learn and use | +| | | +| | #. Lightweight | +| | | +| | #. Scales excellently | +| | | +| | #. Written in Python | +| | | +| | | +| | Some of the Version Control tools available and used widely are: cvs, svn, | +| | git and so on. | +| | | +| | Each of these tools have their own merits and demerits. In this tutorial we | +| | shall learn how to use mercurial or hg. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| {{{Show the slide 'Installation'}}} | Let's now get into Installation | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| sudo apt-get install mercurial | Type sudo apt-get install mercurial | +| | | +| | Type hg | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| $hg | It will give you the list of basic commands. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| $hg version | and 'hg version' gives the version number of mercurial you are presently using. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| {{{Show the 'summary' slide'}}} | This brings us to the end of the tutorial. In this tutorial, we have | +| | learnt: | +| | | +| | 1. What is Version Control. | +| | | +| | #. Identify the need for using Version Control | +| | | +| | #. Install Mercurial. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| {{{Show self assessment questions slide}}} | Here are some self assessment questions for you to solve | +| | | +| | 1. Is Mercurial a Centralized VCS or Distributed Version Control System? | +| | | +| | #. How can you verify whether Mercurial has been installed properly? | +| | | +| | #. What is the command for accessing built-in help system of Mercurial? | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| {{{Show the solutions slide to self assessment questions }}} | And the answers, | +| | | +| | 1. Mercurial is a Distributed Version Control system. | +| | | +| | #. hg version | +| | | +| | #. hg help command | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| {{{Show the thank you slide}}} | Hope you have enjoyed this tutorial and found it useful. | +| | Thank you | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -- cgit From ed20e38641e991e5763cd80f73eb39853c9a5a7b Mon Sep 17 00:00:00 2001 From: Primal Pappachan Date: Fri, 29 Jun 2012 14:31:41 +0530 Subject: after the first review according to checklist --- Version_Control/vcs1/vcs1.rst | 98 ++++++++++++++++++++++++++++--------------- 1 file changed, 65 insertions(+), 33 deletions(-) diff --git a/Version_Control/vcs1/vcs1.rst b/Version_Control/vcs1/vcs1.rst index bd222bb..0be9d8c 100644 --- a/Version_Control/vcs1/vcs1.rst +++ b/Version_Control/vcs1/vcs1.rst @@ -5,16 +5,18 @@ .. Author : Primal Pappachan Internal Reviewer : Kiran Isukapatla - Date: May 10 , 2012 + Date: May 10 2012 + -------- Script -------- .. L1 -{{{ Show the first slide containing title, name of the production team along with the logo of MHRD}}} +{{{ Show the first slide containing title, name of the production team along +with the logo of MHRD}}} -i.. R1 +.. R1 Hello friends and welcome to the tutorial on 'Version Control with Hg' @@ -39,18 +41,23 @@ At the end of this tutorial you will be able to .. R3 -First, let's understand what 'Version Control' is. 'Version control' is a way to track files over time and share them. This allows access to earlier versions of a file(s) if and when required. It therefore enables us to make changes to the content of a file, view it's change log and collaborate on a single piece of work with a team of people. - +First, let's understand what 'Version Control' is. +'Version control' is a way to track files over time and share them. +This allows access to earlier versions of a file(s) if and when required. +It therefore enables us to make changes to the content of a file, view it's +change log and collaborate on a single piece of work with a team of people. + .. L4 {{{Show the slide 'Home-brewed'}}} .. R4 -Let's look at an example of home-brewed Version Control system. - -Version control is a way of backing up files, before making changes. Most people would have cooked up their own version control system, without realizing, there were tools built by others, that performs the task in a more organized and systematic way. +Lets look at an example of home-brewed Version Control system.Version control +is a way of backing up files, before making changes. Most people would have +cooked up their own version control system. But there are more general purpose +tools which can do this task in an organized way. .. L5 @@ -62,7 +69,7 @@ Let's look at the various problems associated with this set-up. 1. Name and changes made are not related or linked. -#. Can’t track sequence of changes made to a file. +#. Cant track sequence of changes made to a file. #. Does not scale. @@ -75,15 +82,21 @@ Let's look at the various problems associated with this set-up. Now, let's move to identifying the needs for a 'Version Control System'. -We have seen that one of the main motivations to use a Version Control system is the ability to go back to a working version of a file, when something goes wrong. Below are a few more advantages of using an automated version control system. +We have seen that one of the main motivations to use a Version Control system +is the ability to go back to a working version of a file, when something +goes wrong. Below are a few more advantages of using an automated version +control system. -1. By tracking the history of a project, any person may see the evolution of a project. +1. By tracking the history of a project, any person may see the evolution + of a project. -#. Allows for effective collaboration on a project, as everything is shared. +2. Allows for effective collaboration on a project, as everything is shared. -#. Helps to identify which additions have broken down a project and thus aids in efficient tracking down of the bugs. +3. Helps to identify which additions have broken down a project and thus + aids in efficient tracking down of the bugs. -#. It is good for a one man show as it is for a big group of people working on a project. +4. It is good for a one man show as it is for a big group of people working + on a project. .. L7 @@ -92,7 +105,11 @@ We have seen that one of the main motivations to use a Version Control system is .. R7 -It is, in some ways, similar to playing a video game. We generally play games in stages. While playing, we save the game at some instances as per our choice. We continue playing, but we could, if necessary, choose to go back to one of the saved states and start over. In this manner, we could change the state of the game. +It is, in some ways, similar to playing a video game. We generally play games +in stages. While playing, we save the game at some instances as per our choice. +We continue playing, but we could, if necessary, choose to go back to one of the +saved states and start over. In this manner, we could change the state of +the game. .. L8 @@ -110,11 +127,12 @@ mercurial or hg is: #. Written in Python -Some of the Version Control tools available and used widely are: -cvs, svn, git and so on. +Some of the Version Control tools available and used widely are: cvs, svn, +git and so on. -Each of these tools have their own merits and demerits. In this tutorial we shall learn how to use mercurial or hg. +Each of these tools have their own merits and demerits. In this tutorial we +shall learn how to use mercurial or hg. .. L9 @@ -124,20 +142,37 @@ Each of these tools have their own merits and demerits. In this tutorial we shal Let's now get into Installation +.. L10 + sudo apt-get install mercurial +.. R10 + +Type sudo apt-get install mercurial + +Type hg + +.. L11 + $hg -and 'hg version' which gives the version number. +.. R11 + +It will give you the list of basic commands. + +.. L12 $hg version +.. R12 -.. L10 +and 'hg version' gives the version number of mercurial you are presently using. + +.. L13 {{{Show the 'summary' slide'}}} -.. R10 +.. R13 This brings us to the end of the tutorial. In this tutorial, we have learnt: @@ -148,28 +183,25 @@ learnt: #. Install Mercurial. -.. L11 +.. L14 {{{Show self assessment questions slide}}} -.. R11 +.. R14 Here are some self assessment questions for you to solve -1. Is Mercurial a Centralized VCS or Distributed -VCS? Justify your reasoning. +1. Is Mercurial a Centralized VCS or Distributed Version Control System? -#. How can you verify whether Mercurial has been -installed properly? +#. How can you verify whether Mercurial has been installed properly? -#. What is the command for accessing built-in help -system of Mercurial? +#. What is the command for accessing built-in help system of Mercurial? -.. L12 +.. L15 {{{Show the solutions slide to self assessment questions }}} -.. R12 +.. R15 And the answers, @@ -180,11 +212,11 @@ And the answers, #. hg help command -.. L13 +.. L16 {{{Show the thank you slide}}} -.. R13 +.. R16 Hope you have enjoyed this tutorial and found it useful. Thank you -- cgit From 5915d64f54244466eec666ec2483ecd4031284fc Mon Sep 17 00:00:00 2001 From: Primal Pappachan Date: Fri, 29 Jun 2012 15:44:24 +0530 Subject: Edited according to the checklist --- Version_Control/vcs2/vcs2.rst | 111 ++++++++++++-------- Version_Control/vcs2/vcs2twocol.rst | 195 ++++++++++++++++++++++++++++++++++++ Version_Control/vcs2/vcslide2.tex | 49 +++++---- 3 files changed, 295 insertions(+), 60 deletions(-) create mode 100644 Version_Control/vcs2/vcs2twocol.rst diff --git a/Version_Control/vcs2/vcs2.rst b/Version_Control/vcs2/vcs2.rst index 57d40bf..9be4fa3 100644 --- a/Version_Control/vcs2/vcs2.rst +++ b/Version_Control/vcs2/vcs2.rst @@ -22,8 +22,8 @@ with the logo of MHRD}}}* .. R1 -Hello friends and welcome to the second part of tutorial on 'Version Control -using Hg' +Hello friends and welcome to the tutorial on 'Version Control +using Mercurial: Let there a Repo!' .. L2 @@ -40,14 +40,14 @@ continue on this tutorial: .. R3 -At the end of this tutorial you will be able to +At the end of this tutorial you will be able to do the following to a repository - 1. initialize a new repository, + 1. initialize it, #. obtain the status of a repository, - #. add new files to a repository, - #. take snapshots of a repository, - #. view the history of a repository, - #. and set your user information for hg + #. add new files to it, + #. take snapshots, + #. view the history, + #. and also set your user information for hg .. L4 @@ -69,15 +69,21 @@ to the files. .. R5 -A repository can either be started using an init command or an existing -repository could be cloned. Let us look at creating our own repository, now. We -can look at obtaining already existing repositories, at a later stage. +A fresh repository can either be started using an init command or an existing +repository could be cloned. It adds a .hg directory to our working directory. + +Let us look at creating our own repository, now. We can look at obtaining +already existing repositories, at a later stage. + +Switch to your terminal Let's say we have a folder called book, which has all the chapters of a book as text files. Let us convert that folder, into a hg repository. .. L6 +*{{{Switch to terminal}}} + ``$ cd book/`` ``$ ls -a`` @@ -100,6 +106,7 @@ repository using the hg init command .. R7 The .hg directory indicates that our book directory is now a hg repository. + Mercurial keeps all the history of the changes made, and a few other config files, etc. in this directory. The directory, book is called our working directory. @@ -112,54 +119,70 @@ directory. We now have a fresh repository, but all our files are not being tracked or watched by mercurial, yet. We need to explicitly ask it to watch the files, -that we want it to. +that we want it to. Let's first see the status of our repo using the command. .. L9 +*{{{Switch to Terminal}}} + ``$hg status`` +*{{{Show the slides 'Status Report'}}} + .. R9 -Gives the status of our repo. As a beginner, use it often. +It gives the status of our repo. As a beginner, use it often. You can use +'hg help commandname' which gives the details about the command. For example, .. L10 +*{{{Switch to terminal}}}* + ``$hg help 'status'`` .. R10 -You can use 'hg help commandname' which gives the details about the command. -For example. +You can see the status codes listed in the help for status command. .. L11 -``$hg help status`` *{{{Show the slides for 'Status Codes'}}}* .. R11 -Let's now to try to discern what each of the status code associated with the -files mean. By looking at the codes, it is clear that our files are not being -tracked by hg yet. Now let's move onto 'Adding Files'. +Let's now to try to understand what each of the status code associated with the +files in our repository mean. .. L12 *{{{Show the slides for 'Adding files'}}}* +.. R12 + +By looking at the codes, it is clear that our files are not being tracked by +hg yet. Now let's move onto 'Adding Files'. + +.. L13 + +*{{{Switch to terminal}}}* + ``$hg add`` -.. R12 + +.. R13 This simply adds all the files in the (working) directory, to the repository. -As expected, the status command shows an A before he file names. We could also +As expected, the status command shows an A before the file names. We could also specify files individually, for example -.. L13 +.. L14 ``$ hg add chapter1.txt`` -.. R13 +*{{{Show the slides for 'Adding files'}}}* + +.. R14 If you have deleted files, hg status will show you the status code !. You can, then, tell hg to stop tracking these files, using the hg remove command. Look @@ -177,6 +200,8 @@ time. We do this by using the commit command. .. L15 +*{{{Switch to Terminal}}}* + ``$ hg commit -u "Primal Pappachan " -m "Initial Commit."`` .. R15 @@ -218,7 +243,7 @@ the change that we just made to our repository. hg log gives the log of the changes made in the form of changesets. A changeset is a set of changes made to the repository between two consecutive commits. It also shows the date at which the commit was made. Please have a look of the -various aspects of the changeset. +various aspects of the changeset mentioned in the slide. .. L19 @@ -240,6 +265,7 @@ add the username details and our editor preferences. .. L20 +*{{{Switch to terminal}}}* ``vim ~/.hgrc`` @@ -265,7 +291,7 @@ Some Recommended Practices for commit messages #. Single line summary, 60 to 65 characters long #. Followed by paragraphs of detailed description - * Why the change? + * Why the change? * What does it effect? * Known bugs/issues? * etc. @@ -280,7 +306,7 @@ This brings us to the end of the tutorial. In this tutorial, we have seen, 1. how to initialize a new repository using hg init, - #. get the status of a repository using hg status and meaning of it's status codes + #. get the status of a repository using hg status and meaning of status codes #. make commits of changes to files, using hg commit #. view the history of the repository using the hg log command, #. set our user information in the global hgrc file. @@ -294,16 +320,17 @@ seen, Here are some self assessment questions for you to solve 1. How can you tell hg to stop tracking deleted files? - 2. What happens when 'hg commit' command is run first time without specifying u + 2. What happens when 'hg commit' command is run first time without specifying + -u paramter? 3. Here's a part of the output that is printed in 'hg log': changeset: 1:2278160e78d4 tag: tip user: Primal Pappachan date: Sat Jan 26 22:16:53 2012 +0530 summary: Added Readme - Try to identify each component of this changeset and it’s - meaning. In the changeset, what is the significance of the - number as well as hexadecimal string? + Try to identify each component of this changeset and it’s meaning. In the + changeset, what is the significance of the number as well as hexadecimal + string in the first line? .. L24 @@ -313,12 +340,20 @@ Here are some self assessment questions for you to solve And the answers, - 1. If you have deleted files, hg status will show you the status code ! - 2. The revision number is a handy notation that is only valid in that repository. The hexadecimal string is the permanent, unchanging identifier that will always identify that exact changeset in every copy of the repository. - 3. If you have set the EMAIL environment variable, this will be used. Next, Mercurial will query your system to find out your - local user name and host name, and construct a username from these components. Since this often results in a username that is not very useful, it will print a warning if it has to do this. If all of these mechanisms fail, Mercurial will - fail, printing an error message. In this case, it will not let you commit until you set up a username. - + 1. If you have deleted files, hg status will show you the status code !. You + can use hg remove command to tell mercurial to stop tracking files. + + 2. If you have set the EMAIL environment variable, this will be used. Next, + Mercurial will query your system to find out your local user name and host + name, and construct a username from these components. Since this often results + in a username that is not very useful, it will print a warning if it has to do + this. If all of these mechanisms fail, Mercurial will fail, printing an error + message. In this case, it will not let you commit until you set up a username. + + 3. The revision number is a handy notation that is only valid in that + repository. The hexadecimal string is the permanent, unchanging identifier + that will always identify that exact changeset in every copy of the repository. + .. L25 *{{{Show the thank you slide}}}* @@ -326,9 +361,7 @@ And the answers, .. R25 Hope you have enjoyed this tutorial and found it useful. Feel free to play -around with Mercurial and read the documentation given by hg help command. When -you are ready to move on, please proceed to the third tutorial on 'Version -Control using Hg' +around with Mercurial and read the documentation given by hg help command. Thank you diff --git a/Version_Control/vcs2/vcs2twocol.rst b/Version_Control/vcs2/vcs2twocol.rst new file mode 100644 index 0000000..d542d2d --- /dev/null +++ b/Version_Control/vcs2/vcs2twocol.rst @@ -0,0 +1,195 @@ +--------------------------------- +Version Control using Hg Part 2 +--------------------------------- + +.. Prerequisites +.. ------------- + +.. Version Control using Hg Part 1 + +.. Author : Primal Pappachan + Internal Reviewer : Kiran Isukapatla + Date: Jan 27, 2012 + +---------------------- +Spoken Tutorial Script +---------------------- + + + ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| *{{{ Show the first slide containing title, name of the production team along | Hello friends and welcome to the tutorial on 'Version Control | +| with the logo of MHRD}}}* | using Mercurial: Let there a Repo!' | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| *{{{Show the slide 'Prerequisite'}}}* | Please make sure that you have gone through the following tutorials before you | +| | continue on this tutorial: | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| *{{{Show the slide 'Objectives'}}}* | At the end of this tutorial you will be able to do the following to a repository | +| | | +| | 1. initialize it, | +| | #. obtain the status of a repository, | +| | #. add new files to it, | +| | #. take snapshots, | +| | #. view the history, | +| | #. and also set your user information for hg | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| *{{{Show the slide for 'We need a repo!'}}}* | To start using Mercurial (or hg) and get the benefits of using a version | +| | control system, we should first have a repository. | +| | | +| | Now, what exactly is a repo? A repo/repository is a folder with contains all | +| | the files and information on all the changes that were made to it. To save disk | +| | space, hg doesn't save all files, but only saves only a series of changes made | +| | to the files. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| *{{{Show the slide 'Initializing a Repo'}}}* | A fresh repository can either be started using an init command or an existing | +| | repository could be cloned. It adds a .hg directory to our working directory. | +| | | +| | Let us look at creating our own repository, now. We can look at obtaining | +| | already existing repositories, at a later stage. | +| | | +| | Switch to your terminal | +| | | +| | Let's say we have a folder called book, which has all the chapters of a book as | +| | text files. Let us convert that folder, into a hg repository. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| *{{{Switch to terminal}}} | We have three chapters in the folder. We convert this folder into a mercurial | +| | repository using the hg init command | +| ``$ cd book/`` | | +| | | +| ``$ ls -a`` | | +| | | +| ``. .. chapter1.txt chapter2.txt chapter3.txt`` | | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| ``$ hg init`` | The .hg directory indicates that our book directory is now a hg repository. | +| | | +| ``$ ls -a`` | Mercurial keeps all the history of the changes made, and a few other config | +| | files, etc. in this directory. The directory, book is called our working | +| ``. .. .hg chapter1.txt chapter2.txt chapter3.txt`` | directory. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| *{{{Show the slides 'Status Report'}}}* | We now have a fresh repository, but all our files are not being tracked or | +| | watched by mercurial, yet. We need to explicitly ask it to watch the files, | +| | that we want it to. Let's first see the status of our repo using the command. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| *{{{Switch to Terminal}}} | It gives the status of our repo. As a beginner, use it often. You can use | +| | 'hg help commandname' which gives the details about the command. For example, | +| ``$hg status`` | | +| | | +| *{{{Show the slides 'Status Report'}}} | | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| *{{{Switch to terminal}}}* | You can see the status codes listed in the help for status command. | +| | | +| ``$hg help 'status'`` | | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| *{{{Show the slides for 'Status Codes'}}}* | Let's now to try to understand what each of the status code associated with the | +| | files in our repository mean. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| *{{{Show the slides for 'Adding files'}}}* | By looking at the codes, it is clear that our files are not being tracked by | +| | hg yet. Now let's move onto 'Adding Files'. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| *{{{Switch to terminal}}}* | This simply adds all the files in the (working) directory, to the repository. | +| | As expected, the status command shows an A before the file names. We could also | +| ``$hg add`` | specify files individually, for example | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| *{{{Show the slides 'Taking Snapshots'}}}* | We have added a set of new files to the repository, but we haven't told | +| | mercurial to remember these changes, i.e., to take a snapshot at this point in | +| | time. We do this by using the commit command. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| *{{{Switch to Terminal}}}* | The -u parameter allows us to specify the user details. It is a general good | +| | practice to use full name followed by the email id. The -m parameter allows us | +| ``$ hg commit -u "Primal Pappachan " -m "Initial Commit."`` | to give the commit message --- a message describing the changes that are being | +| | committed. | +| | | +| | Mercurial has now taken a snapshot of our repository and has attached our | +| | description along with it. To see the status of the files in the repository, | +| | use the hg status command. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| ``$ hg st`` | The command does not return anything, when there are no uncommitted changes. | +| | Also, notice that I have started getting lazy and used only a short name st for | +| | the status command. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| ``{{{Show the slide 'Thumbnail views'}}}`` | To see the history of the changes to our repository, we use hg log. We can view | +| | the change that we just made to our repository. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| ``$ hg log`` | hg log gives the log of the changes made in the form of changesets. A changeset | +| | is a set of changes made to the repository between two consecutive commits. It | +| | also shows the date at which the commit was made. Please have a look of the | +| | various aspects of the changeset mentioned in the slide. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| *{{{Show the slide 'User Information'}}}* | There are two aspects which can be improved upon. Firstly, it is unnecessary to | +| | keep typing the user information each and every time we make a commit. | +| | Secondly, it is not very convenient to enter a multi-line commit message from | +| | the terminal. To solve these problems, we set our user details and editor | +| | preferences in the .hgrc file in our home folder. ($HOME/.hgrc on Unix like | +| | systems and %USERPROFILE%\.hgrc on Windows systems) This is a global setting | +| | for all the projects that we are working on. | +| | | +| | | +| | For linux systems, we open the configuration file in our favorite editor and | +| | add the username details and our editor preferences. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| *{{{Switch to terminal}}}* | We have now set the user-name details for mercurial to use. | +| | | +| ``vim ~/.hgrc`` | | +| | | +| ``[ui]`` | | +| | | +| ``username = Primal Pappachan `` | | +| | | +| ``editor = vim`` | | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| *{{{Show the slide 'Advice: commits, messages'}}}* | Some Recommended Practices for commit messages | +| | | +| | 1. Atomic changes; one change with one commit | +| | #. Single line summary, 60 to 65 characters long | +| | #. Followed by paragraphs of detailed description | +| | | +| | * Why the change? | +| | * What does it effect? | +| | * Known bugs/issues? | +| | * etc. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| *{{{Show the 'Summary' slide}}}* | This brings us to the end of the tutorial. In this tutorial, we have | +| | seen, | +| | | +| | 1. how to initialize a new repository using hg init, | +| | #. get the status of a repository using hg status and meaning of status codes | +| | #. make commits of changes to files, using hg commit | +| | #. view the history of the repository using the hg log command, | +| | #. set our user information in the global hgrc file. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| {{{Show self assessment questions slide}}} | Here are some self assessment questions for you to solve | +| | | +| | 1. How can you tell hg to stop tracking deleted files? | +| | 2. What happens when 'hg commit' command is run first time without specifying | +| | -u paramter? | +| | 3. Here's a part of the output that is printed in 'hg log': | +| | changeset: 1:2278160e78d4 | +| | tag: tip | +| | user: Primal Pappachan | +| | date: Sat Jan 26 22:16:53 2012 +0530 | +| | summary: Added Readme | +| | Try to identify each component of this changeset and it’s meaning. In the | +| | changeset, what is the significance of the number as well as hexadecimal | +| | string in the first line? | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| *{{{Show the solutions slide to self assessment questions }}}* | And the answers, | +| | | +| | 1. If you have deleted files, hg status will show you the status code !. You | +| | can use hg remove command to tell mercurial to stop tracking files. | +| | | +| | 2. If you have set the EMAIL environment variable, this will be used. Next, | +| | Mercurial will query your system to find out your local user name and host | +| | name, and construct a username from these components. Since this often results | +| | in a username that is not very useful, it will print a warning if it has to do | +| | this. If all of these mechanisms fail, Mercurial will fail, printing an error | +| | message. In this case, it will not let you commit until you set up a username. | +| | | +| | 3. The revision number is a handy notation that is only valid in that | +| | repository. The hexadecimal string is the permanent, unchanging identifier | +| | that will always identify that exact changeset in every copy of the repository. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| *{{{Show the thank you slide}}}* | Hope you have enjoyed this tutorial and found it useful. Feel free to play | +| | around with Mercurial and read the documentation given by hg help command. | +| | | +| | Thank you | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ diff --git a/Version_Control/vcs2/vcslide2.tex b/Version_Control/vcs2/vcslide2.tex index 4ab4ecf..c17c7fc 100644 --- a/Version_Control/vcs2/vcslide2.tex +++ b/Version_Control/vcs2/vcslide2.tex @@ -43,45 +43,49 @@ \setbeamercolor{emphbar}{bg=blue!20, fg=black} \newcommand{\emphbar}[1] +\author[Primal Pappachan] {} +\institute[FOSSEE group] {} + +\date[IIT Bombay] {} + \begin{document} \begin{frame} \begin{center} -\vspace{12pt} -\textcolor{blue}{\huge Version Control Using Hg - Part 2} +\vspace{15pt} +\textcolor{blue}{\large Version Control Using Mercurial} \\ +\textcolor{blue}{\huge Let there be a Repo!} \end{center} -\vspace{18pt} +\vspace{15pt} \begin{center} -\vspace{10pt} \includegraphics[scale=0.95]{../images/fossee-logo.png}\\ \vspace{5pt} \scriptsize Developed by FOSSEE Team, IIT-Bombay. \\ \scriptsize Funded by National Mission on Education through ICT\\ -\scriptsize MHRD,Govt. of India\\ +\scriptsize MHRD, Govt. of India\\ \includegraphics[scale=0.15]{../images/iitb-logo.jpg}\\ \end{center} \end{frame} \begin{frame} \frametitle{Prerequisite} - \textbf{Version Control Using Hg} \begin{itemize} - \item Part I + \item \textbf{Version Control Using Mercurial} \end{itemize} \end{frame} \begin{frame} \frametitle{Objectives} - At the end of this tutorial, you will be able to: + At the end of this tutorial, you will be able to do the following to a repository: \begin{itemize} - \item Initialize a new repository, - \item Obtain the status of a repository, - \item Add new files to a repository, - \item Take snapshots of a repository, - \item View the history of a repository, - \item Set your user information for hg + \item Initialize it + \item Obtain the status, + \item Add new files to it, + \item Take snapshots, + \item View the history, + \item \textcolor{blue}{And also} Set your user information for hg \end{itemize} \end{frame} @@ -92,10 +96,8 @@ \frametitle{We need a repo!} \begin{itemize} \item A Repository (repo) is where all the action is! - \item Project files along with a special directory that stores all the - changes - \item We take snapshots of the whole repository; not individual - files. + \item Project files along with a special directory that stores all the changes + \item We take snapshots of the whole repository; not individual files. \end{itemize} \end{frame} @@ -231,8 +233,13 @@ \frametitle{Solutions} \begin{enumerate} \item \small{hg remove} -\item \small{The revision number is a handy notation that is only valid in that repository. The hexadecimal string is the permanent, unchanging identifier that will always identify that exact changeset in every copy of the repository} -\item \small{If you have set the EMAIL environment variable, this will be used. Next, Mercurial will query your system to find out your local user name and host name, and construct a username from these components. Since this often results in a username that is not very useful, it will print a warning if it has to do this. If all of these mechanisms fail, Mercurial will fail, printing an error message. In this case, it will not let you commit until you set up a username.} +\item \small{Initially it looks for the EMAIL environment variable, if it does not exist +it tries to use a combination of local user name and host name. If both +mechanisms fails, an error message will be printed and user will not be +allowed to commit.} +\item \small{The revision number is a handy notation that is only valid in that +repository. The hexadecimal string is the permanent, unchanging identifier that +will always identify that exact changeset in every copy of the repository} \end{enumerate} \end{frame} \begin{frame} @@ -250,4 +257,4 @@ \end{block} \end{frame} -\end{document} \ No newline at end of file +\end{document} -- cgit From 4d2f7e868f8df789af5b5c709b0e80c7d08f8c53 Mon Sep 17 00:00:00 2001 From: Primal Pappachan Date: Fri, 29 Jun 2012 15:45:07 +0530 Subject: dropped old script file --- Version_Control/vcs2/vcs2_rec.rst | 173 -------------------------------------- 1 file changed, 173 deletions(-) delete mode 100644 Version_Control/vcs2/vcs2_rec.rst diff --git a/Version_Control/vcs2/vcs2_rec.rst b/Version_Control/vcs2/vcs2_rec.rst deleted file mode 100644 index 158725d..0000000 --- a/Version_Control/vcs2/vcs2_rec.rst +++ /dev/null @@ -1,173 +0,0 @@ ---------------------------------- -Version Control using Hg Part 2 ---------------------------------- - -.. Prerequisites -.. ------------- - -.. Version Control using Hg Part 1 - -.. Author : Primal Pappachan - Internal Reviewer : Kiran Isukapatla - Date: Jan 27, 2012 - ----------------------- -Spoken Tutorial Script ----------------------- - - - -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| *{{{ Show the first slide containing title, name of the production team along | Hello friends and welcome to the second part of tutorial on 'Version Control | -| with the logo of MHRD}}}* | using Hg' | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| *{{{Show the slide 'Prerequisite'}}}* | Please make sure that you have gone through the following tutorials before you | -| | continue on this tutorial: | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| *{{{Show the slide 'Objectives'}}}* | At the end of this tutorial you will be able to | -| | | -| | 1. initialize a new repository, | -| | #. obtain the status of a repository, | -| | #. add new files to a repository, | -| | #. take snapshots of a repository, | -| | #. view the history of a repository, | -| | #. and set your user information for hg | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| *{{{Show the slide for 'We need a repo!'}}}* | To start using Mercurial (or hg) and get the benefits of using a version | -| | control system, we should first have a repository. | -| | | -| | Now, what exactly is a repo? A repo/repository is a folder with contains all | -| | the files and information on all the changes that were made to it. To save disk | -| | space, hg doesn't save all files, but only saves only a series of changes made | -| | to the files. | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| *{{{Show the slide 'Initializing a Repo'}}}* | A repository can either be started using an init command or an existing | -| | repository could be cloned. Let us look at creating our own repository, now. We | -| | can look at obtaining already existing repositories, at a later stage. | -| | | -| | Let's say we have a folder called book, which has all the chapters of a book as | -| | text files. Let us convert that folder, into a hg repository. | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| ``$ cd book/`` | We have three chapters in the folder. We convert this folder into a mercurial | -| | repository using the hg init command | -| ``$ ls -a`` | | -| | | -| ``. .. chapter1.txt chapter2.txt chapter3.txt`` | | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| ``$ hg init`` | The .hg directory indicates that our book directory is now a hg repository. | -| | Mercurial keeps all the history of the changes made, and a few other config | -| ``$ ls -a`` | files, etc. in this directory. The directory, book is called our working | -| | directory. | -| ``. .. .hg chapter1.txt chapter2.txt chapter3.txt`` | | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| *{{{Show the slides 'Status Report'}}}* | We now have a fresh repository, but all our files are not being tracked or | -| | watched by mercurial, yet. We need to explicitly ask it to watch the files, | -| | that we want it to. | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| ``$hg status`` | Gives the status of our repo. As a beginner, use it often. | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| ``$hg help 'status'`` | You can use 'hg help commandname' which gives the details about the command. | -| | For example. | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| ``$hg help status`` | Let's now to try to discern what each of the status code associated with the | -| | files mean. By looking at the codes, it is clear that our files are not being | -| | tracked by hg yet. Now let's move onto 'Adding Files'. | -| *{{{Show the slides for 'Status Codes'}}}* | | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| ``$hg add`` | This simply adds all the files in the (working) directory, to the repository. | -| | As expected, the status command shows an A before he file names. We could also | -| | specify files individually, for example | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| ``$ hg add chapter1.txt`` | If you have deleted files, hg status will show you the status code !. You can, | -| | then, tell hg to stop tracking these files, using the hg remove command. Look | -| | at hg help remove for more details. | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| *{{{Show the slides 'Taking Snapshots'}}}* | We have added a set of new files to the repository, but we haven't told | -| | mercurial to remember these changes, i.e., to take a snapshot at this point in | -| | time. We do this by using the commit command. | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| ``$ hg commit -u "Primal Pappachan " -m "Initial Commit."`` | The -u parameter allows us to specify the user details. It is a general good | -| | practice to use full name followed by the email id. The -m parameter allows us | -| | to give the commit message --- a message describing the changes that are being | -| | committed. | -| | | -| | Mercurial has now taken a snapshot of our repository and has attached our | -| | description along with it. To see the status of the files in the repository, | -| | use the hg status command. | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| ``$ hg st`` | The command does not return anything, when there are no uncommitted changes. | -| | Also, notice that I have started getting lazy and used only a short name st for | -| | the status command. | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| ``{{{Show the slide 'Thumbnail views'}}}`` | To see the history of the changes to our repository, we use hg log. We can view | -| | the change that we just made to our repository. | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| ``$ hg log`` | hg log gives the log of the changes made in the form of changesets. A changeset | -| | is a set of changes made to the repository between two consecutive commits. It | -| | also shows the date at which the commit was made. Please have a look of the | -| | various aspects of the changeset. | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| *{{{Show the slide 'User Information'}}}* | There are two aspects which can be improved upon. Firstly, it is unnecessary to | -| | keep typing the user information each and every time we make a commit. | -| | Secondly, it is not very convenient to enter a multi-line commit message from | -| | the terminal. To solve these problems, we set our user details and editor | -| | preferences in the .hgrc file in our home folder. ($HOME/.hgrc on Unix like | -| | systems and %USERPROFILE%\.hgrc on Windows systems) This is a global setting | -| | for all the projects that we are working on. | -| | | -| | | -| | For linux systems, we open the configuration file in our favorite editor and | -| | add the username details and our editor preferences. | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| ``vim ~/.hgrc`` | We have now set the user-name details for mercurial to use. | -| | | -| ``[ui]`` | | -| | | -| ``username = Primal Pappachan `` | | -| | | -| ``editor = vim`` | | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| *{{{Show the slide 'Advice: commits, messages'}}}* | Some Recommended Practices for commit messages | -| | | -| | 1. Atomic changes; one change with one commit | -| | #. Single line summary, 60 to 65 characters long | -| | #. Followed by paragraphs of detailed description | -| | | -| | * Why the change? | -| | * What does it effect? | -| | * Known bugs/issues? | -| | * etc. | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| *{{{Show the 'summary' slide'}}}* | This brings us to the end of the tutorial. In this tutorial, we have | -| | seen, | -| | | -| | 1. how to initialize a new repository using hg init, | -| | #. get the status of a repository using hg status and meaning of it's status co | -| | #. make commits of changes to files, using hg commit | -| | #. view the history of the repository using the hg log command, | -| | #. set our user information in the global hgrc file. | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| {{{Show self assessment questions slide}}} | Here are some self assessment questions for you to solve | -| | | -| | 1. How can you tell hg to stop tracking deleted files? | -| | 2. Here's a part of the output that is printed in 'hg log'.Try to identify each | -| | changeset: 1:2278160e78d4 | -| | tag: tip | -| | user: Primal Pappachan | -| | date: Sat Jan 26 22:16:53 2012 +0530 | -| | summary: Added Readme | -| | 3. What happens when 'hg commit' command is run first time without specifying u | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| *{{{Show the solutions slide to self assessment questions }}}* | And the answers, | -| | | -| | 1. If you have deleted files, hg status will show you the status code !. You ca | -| | 2. The revision number is a handy notation that is only valid in that repositor | -| | 3. If you have set the EMAIL environment variable, this will be used. Next, Mer | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| *{{{Show the thank you slide}}}* | Hope you have enjoyed this tutorial and found it useful. Feel free to play | -| | around with Mercurial and read the documentation given by hg help command. When | -| | you are ready to move on, please proceed to the third tutorial on 'Version | -| | Control using Hg' | -| | | -| | Thank you | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -- cgit From 289f61d25fd2487c757930b03652c231519ca048 Mon Sep 17 00:00:00 2001 From: Primal Pappachan Date: Fri, 29 Jun 2012 15:45:32 +0530 Subject: dropped vcs1 old script file --- Version_Control/vcs1/vcs1_rec.rst | 145 -------------------------------------- 1 file changed, 145 deletions(-) delete mode 100644 Version_Control/vcs1/vcs1_rec.rst diff --git a/Version_Control/vcs1/vcs1_rec.rst b/Version_Control/vcs1/vcs1_rec.rst deleted file mode 100644 index 01e264e..0000000 --- a/Version_Control/vcs1/vcs1_rec.rst +++ /dev/null @@ -1,145 +0,0 @@ ---------------------------------- -Version Control using Hg Part I ---------------------------------- - -.. Prerequisites -.. ------------- - -.. None - -.. Author : Primal Pappachan - Internal Reviewer : Kiran Isukapatla - Date: Jan 27, 2012 - ----------------------- -Spoken Tutorial Script ----------------------- - - - -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| *{{{ Show the first slide containing title, name of the production team along | Hello friends and welcome to the first part of tutorial on 'Version Control | -| with the logo of MHRD}}}* | using Hg' | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| *{{{Show the slide containing the objectives}}}* | At the end of this tutorial you will be able to | -| | | -| | 1. Understand what is Version Control | -| | #. Identify the need for using Version Control | -| | #. Install Mercurial and intialize a repository | -| | | -| | | -| | First, let's understand what 'Version Control' is. | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| *{{{Show the slide 'what is version control'}}*} | 'Version control' is a way to track files over time and share them. This allows | -| | access to earlier versions of a file(s) if and when required. It therefore | -| | enables us to make changes to the content of a file, view it's change log and | -| | collaborate on a single piece of work with a team of people. | -| | | -| | As the quote from the famous blog post 'Version Control for masses' says | -| | | -| | "Version control is one of those weird, geeky things that never really gained | -| | much ground in non-geek fields, despite the fact that it’s blindingly useful." | -| | | -| | Over the course of these 3 spoken tutorials, we are going to see a handful of | -| | such things, which are widely used in the programmer world, but not so much in | -| | the scientific computing world, even when if they would be very useful. | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| *{{{Show the slide 'Home-brewed'}}}* | Let's look at an example of home-brewed Version Control system | -| | | -| | Version control is a way of backing up files, before making changes. Most | -| | people would have cooked up their own version control system, without | -| | realizing, there were tools built by others, that performs the task in a more | -| | organized and systematic way. | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| *{{{Show the slide 'Problems'}}}* | Let's look at the various problems associated with this set-up. | -| | | -| | 1. Name and changes made are not related or linked. | -| | #. Can't track sequence of changes made to a file | -| | #. Does not scale | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| *{{{Show the slide 'The need for Version Control'}}}* | Having seen the problems of a home brewed setup, let's now move onto | -| | identifying the needs for a 'Version Control System'. | -| | | -| | 1. To err is Human . . . | -| | #. Tracking the history and evolution of a project | -| | #. To collaborate effectively on a project | -| | #. To efficiently track down bugs and pin-point the | -| | #. changes that caused it | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| *{{{Show the slide 'The need for Version Control'}}}* | We have seen that one of the main motivations to use a Version Control system | -| | is the ability to go back to a working version of a file, when something goes | -| | wrong. Below are a few more advantages of using an automated version control | -| | system. | -| | | -| | 1. By tracking the history of a project, any person may see the evolution of a p | -| | 2. Allows for effective collaboration on a project, as everything is shared. | -| | 3. Helps to identify which additions have broken down a project and thus aids in | -| | 4. It is good for a one man show as it is for a big group of people working on a | -| | | -| | Keeping your stuff version controlled will help avoid accidental deletion of | -| | individual files etc. Hosting it on a remote server will protect your sanity | -| | from a hard disk crash. | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| *{{{Show the slide 'How does it work? - Analogy}}}* | It is, in some ways, similar to playing a video game. We generally play games | -| | in stages. While playing, we save the game at some instances as per our choice. | -| | We continue playing, but we could, if necessary, choose to go back to one of | -| | the saved states and start over. In this manner, we could change the course of | -| | the game. | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| *{{{Show the slide 'Mercurial or hg'}}}* | Some of the Version Control tools available and used widely are: | -| | | -| | 1. cvs(Concurrent Version Systems) | -| | #. svn(subversion) | -| | #. hg(mercurial) | -| | #. git | -| | | -| | | -| | Each of these tools have their own merits and demerits. In this tutorial we | -| | shall learn how to use mercurial or hg which is easy to learn and use and | -| | comparatively light weight. Once you learn how to use hg, you can easily try | -| | other tools and switch to one that you feel most comfortable with. | -| | | -| | Let's now get into Installation. For Linux distributions, Ubuntu and Debian | -| | type the following in command line terminal | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| ``sudo apt-get install mercurial`` | For Windows, | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| ``http://mercurial.selenic.com/downloads/`` | | -| | | -| ``http://hgbook.red-bean.com/read/a-tour-of-mercurial-the-basics.html`` | | -| | | -| .. R 11 | | -| | | -| For any other Operating system, please refer the hg book for installation | | -| instruction - | | -| | | -| Type 'hg' which lists out all the commands | | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| ``$hg`` | and 'hg version' which gives the version number. | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| ``$hg version`` | This brings us to the end of the tutorial. In this tutorial, we have | -| | seen, | -| | | -| *{{{Show the 'summary' slide'}}}* | 1. the motivation to use version control | -| | #. an analogy of version control with playing a video game | -| | #. how to check if mercurial is installed, and it's version using hg version | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| *{{{Show self assessment questions slide}}}* | Here are some self assessment questions for you to solve | -| | | -| | 1. Is Mercurial a Centralized VCS or Distributed VCS? Justify your reasoning. | -| | #. How can you verify whether Mercurial has been installed properly? | -| | #. What is the command for accessing built-in help system of Mercurial? | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| *{{{Show the solutions slide to self assessment questions }}}* | And the answers, | -| | | -| | 1. Mercurial is a Centralized Version Control system. To read more go here, htt | -| | #. $hg version | -| | #. $hg help command | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| *{{{Show the thank you slide}}}* | Hope you have enjoyed this tutorial and found it useful. Feel free to play | -| | around with Mercurial and read the documentation given by hg help command. When | -| | you are ready to move on, please proceed to the second tutorial on 'Version | -| | Control using Hg' | -| | | -| | Thank you | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -- cgit From c6c354145c280f706a4ffce5414ab0cf8ebb98ff Mon Sep 17 00:00:00 2001 From: Radhika Date: Thu, 26 Jul 2012 16:42:15 +0530 Subject: VC 1 pushed for review --- Version_Control/images/folder.png | Bin 45829 -> 0 bytes Version_Control/images/fossee-logo.png | Bin 13587 -> 0 bytes Version_Control/images/iitb-logo.jpg | Bin 325871 -> 0 bytes Version_Control/images/mercurial_logo.png | Bin 6684 -> 0 bytes Version_Control/vcs1/folder.png | Bin 0 -> 45829 bytes Version_Control/vcs1/mercurial_logo.png | Bin 0 -> 6684 bytes Version_Control/vcs1/vcs1.rst | 142 +++++++++++----- Version_Control/vcs1/vcs1_slide.tex | 270 ++++++++++++++++++++++++++++++ Version_Control/vcs1/vcs2col.rst | 126 -------------- Version_Control/vcs1/vcslide1.tex | 212 ----------------------- Version_Control/vcs2/vcs2.rst | 8 +- Version_Control/vcs2/vcs2twocol.rst | 2 +- 12 files changed, 374 insertions(+), 386 deletions(-) delete mode 100644 Version_Control/images/folder.png delete mode 100644 Version_Control/images/fossee-logo.png delete mode 100644 Version_Control/images/iitb-logo.jpg delete mode 100644 Version_Control/images/mercurial_logo.png create mode 100644 Version_Control/vcs1/folder.png create mode 100644 Version_Control/vcs1/mercurial_logo.png create mode 100644 Version_Control/vcs1/vcs1_slide.tex delete mode 100644 Version_Control/vcs1/vcs2col.rst delete mode 100644 Version_Control/vcs1/vcslide1.tex diff --git a/Version_Control/images/folder.png b/Version_Control/images/folder.png deleted file mode 100644 index 42d01a2..0000000 Binary files a/Version_Control/images/folder.png and /dev/null differ diff --git a/Version_Control/images/fossee-logo.png b/Version_Control/images/fossee-logo.png deleted file mode 100644 index 49d1797..0000000 Binary files a/Version_Control/images/fossee-logo.png and /dev/null differ diff --git a/Version_Control/images/iitb-logo.jpg b/Version_Control/images/iitb-logo.jpg deleted file mode 100644 index 2a63fae..0000000 Binary files a/Version_Control/images/iitb-logo.jpg and /dev/null differ diff --git a/Version_Control/images/mercurial_logo.png b/Version_Control/images/mercurial_logo.png deleted file mode 100644 index 4cd736e..0000000 Binary files a/Version_Control/images/mercurial_logo.png and /dev/null differ diff --git a/Version_Control/vcs1/folder.png b/Version_Control/vcs1/folder.png new file mode 100644 index 0000000..42d01a2 Binary files /dev/null and b/Version_Control/vcs1/folder.png differ diff --git a/Version_Control/vcs1/mercurial_logo.png b/Version_Control/vcs1/mercurial_logo.png new file mode 100644 index 0000000..4cd736e Binary files /dev/null and b/Version_Control/vcs1/mercurial_logo.png differ diff --git a/Version_Control/vcs1/vcs1.rst b/Version_Control/vcs1/vcs1.rst index 0be9d8c..11a61f5 100644 --- a/Version_Control/vcs1/vcs1.rst +++ b/Version_Control/vcs1/vcs1.rst @@ -56,29 +56,40 @@ change log and collaborate on a single piece of work with a team of people. Lets look at an example of home-brewed Version Control system.Version control is a way of backing up files, before making changes. Most people would have -cooked up their own version control system. But there are more general purpose -tools which can do this task in an organized way. +cooked up their own version control system. .. L5 -{{{Show the slide 'Problems'}}} +{{{Show the next slide 'Home-brewed'}}} .. R5 +Listing the files in the folder we observe that after a point of time it +becomes difficult to maintain proper names for different versions of a file. + +.. L6 + +{{{Show the slide 'Problems'}}} + +.. R6 + Let's look at the various problems associated with this set-up. 1. Name and changes made are not related or linked. -#. Cant track sequence of changes made to a file. +#. Can't track sequence of changes made to a file. #. Does not scale. +To overcome this problems there are more general purpose tools which can +do this task in an organized way. -.. L6 + +.. L7 {{{Show the slide 'The need for Version Control'}}} -.. R6 +.. R7 Now, let's move to identifying the needs for a 'Version Control System'. @@ -87,23 +98,23 @@ is the ability to go back to a working version of a file, when something goes wrong. Below are a few more advantages of using an automated version control system. -1. By tracking the history of a project, any person may see the evolution - of a project. +1. By tracking the history of a project, any person may see the evolution +of a project. 2. Allows for effective collaboration on a project, as everything is shared. 3. Helps to identify which additions have broken down a project and thus - aids in efficient tracking down of the bugs. +aids in efficient tracking down of the bugs. -4. It is good for a one man show as it is for a big group of people working - on a project. +4. It is good for a one man show as it is for a big group of people working +on a project. -.. L7 +.. L8 {{{Show the slide 'How does it work? - Analogy}}} -.. R7 +.. R8 It is, in some ways, similar to playing a video game. We generally play games in stages. While playing, we save the game at some instances as per our choice. @@ -111,13 +122,19 @@ We continue playing, but we could, if necessary, choose to go back to one of the saved states and start over. In this manner, we could change the state of the game. -.. L8 +.. L9 {{{Show the slide 'Mercurial or hg'}}} -.. R8 +.. R9 + +Some of the Version Control tools available and used widely are: cvs, svn, +git and so on. -mercurial or hg is: +Each of these tools have their own merits and demerits. In this tutorial we +shall learn how to use mercurial or hg. + +Mercurial or hg is: 1. Easy to learn and use @@ -127,24 +144,20 @@ mercurial or hg is: #. Written in Python - -Some of the Version Control tools available and used widely are: cvs, svn, -git and so on. - -Each of these tools have their own merits and demerits. In this tutorial we -shall learn how to use mercurial or hg. - -.. L9 +.. L10 {{{Show the slide 'Installation'}}} -.. R9 +.. R10 Let's now get into Installation .. L10 -sudo apt-get install mercurial +{{{Switch to terminal}}} +:: + + $sudo apt-get install mercurial .. R10 @@ -152,27 +165,29 @@ Type sudo apt-get install mercurial Type hg -.. L11 +.. L12 +:: -$hg + $hg -.. R11 +.. R12 It will give you the list of basic commands. -.. L12 +.. L13 +:: -$hg version + $hg version -.. R12 +.. R13 and 'hg version' gives the version number of mercurial you are presently using. -.. L13 +.. L14 {{{Show the 'summary' slide'}}} -.. R13 +.. R14 This brings us to the end of the tutorial. In this tutorial, we have learnt: @@ -183,25 +198,24 @@ learnt: #. Install Mercurial. -.. L14 +.. L15 {{{Show self assessment questions slide}}} -.. R14 +.. R15 Here are some self assessment questions for you to solve 1. Is Mercurial a Centralized VCS or Distributed Version Control System? -#. How can you verify whether Mercurial has been installed properly? +#. How can you retrive the version of Mercurial installed? -#. What is the command for accessing built-in help system of Mercurial? -.. L15 +.. L16 {{{Show the solutions slide to self assessment questions }}} -.. R15 +.. R16 And the answers, @@ -209,14 +223,56 @@ And the answers, #. hg version -#. hg help command +.. L17 +{{{ Show the SDES & FOSSEE slide }}} -.. L16 +.. R17 + +Software Development techniques for Engineers and Scientists - SDES, is an +initiative by FOSSEE. For more information, please visit the given link. + +Free and Open-source Software for Science and Engineering Education - FOSSEE, is +based at IIT Bombay which is funded by MHRD as part of National Mission on +Education through ICT. + +.. L18 + +{{{ Show the ``About the Spoken Tutorial Project'' slide }}} + +.. R18 + +Watch the video available at the following link. It summarises the Spoken +Tutorial project.If you do not have good bandwidth, you can download and +watch it. + +.. L19 + +{{{ Show the `` Spoken Tutorial Workshops'' slide }}} + +.. R19 + +The Spoken Tutorial Project Team conducts workshops using spoken tutorials, +gives certificates to those who pass an online test. + +For more details, contact contact@spoken-tutorial.org + +.. L20 + +{{{ Show the ``Acknowledgements'' slide }}} + +.. R20 + +Spoken Tutorial Project is a part of the "Talk to a Teacher" project. +It is supported by the National Mission on Education through ICT, MHRD, +Government of India. More information on this mission is available at the +given link. + +.. L21 {{{Show the thank you slide}}} -.. R16 +.. R21 Hope you have enjoyed this tutorial and found it useful. Thank you diff --git a/Version_Control/vcs1/vcs1_slide.tex b/Version_Control/vcs1/vcs1_slide.tex new file mode 100644 index 0000000..24f8ee4 --- /dev/null +++ b/Version_Control/vcs1/vcs1_slide.tex @@ -0,0 +1,270 @@ +\documentclass[17pt,compress]{beamer} +\usepackage{beamerthemesplit} +\mode +{ + \usetheme{Warsaw} + \useoutertheme{infolines} + \setbeamercovered{transparent} + \setbeamertemplate{navigation symbols}{} +} +% Taken from Fernando's slides. +\usepackage{ae,aecompl} +\usepackage[scaled=.95]{helvet} + +\usepackage[english]{babel} +\usepackage[latin1]{inputenc} +\usepackage[T1]{fontenc} + +% change the alerted colour to LimeGreen +\definecolor{LimeGreen}{RGB}{50,205,50} +\setbeamercolor{structure}{fg=LimeGreen} +\author[FOSSEE]{} +\institute[IIT Bombay]{} +\date[]{} +% \setbeamercovered{transparent} + +% theme split +\usepackage{verbatim} +\newenvironment{colorverbatim}[1][]% +{% +\color{blue} +\verbatim +}% +{% +\endverbatim +}% + +\usepackage{mathpazo,courier,euler} +\usepackage{listings} +\lstset{language=sh, + basicstyle=\ttfamily\bfseries, + showstringspaces=false, + keywordstyle=\color{black}\bfseries} + +% logo +\logo{\includegraphics[height=1.30 cm]{3t-logo.pdf}} +\logo{\includegraphics[height=1.30 cm]{fossee-logo.pdf} + +\hspace{7.5cm} +\includegraphics[scale=0.99]{../images/fossee-logo.pdf}\\ +\hspace{281pt} +\includegraphics[scale=0.80]{../images/3t-logo.pdf}} + +%%%from primal's doc +\newcommand{\typ}[1]{\lstinline{#1}} +\newcommand{\inctime}[1]{\addtocounter{time}{#1}{\tiny \thetime\ m}} +%%% + +\begin{document} + +\sffamily \bfseries +\title +[Version Control with hg] +{Version Control with hg} +\author +[FOSSEE] +{\small Talk to a Teacher\\{\color{blue}\url{http://spoken-tutorial.org}}\\\vspace{0.25cm}National Mission on Education + through ICT\\{\color{blue}\url{ http://sakshat.ac.in}} \\ [1.65cm] + Contributed by FOSSEE Team \\IIT Bombay \\[0.3cm] +} + +% slide 1 +\begin{frame} + \titlepage +\end{frame} + +\begin{frame} +\frametitle{Objectives} +\label{sec-2} + +At the end of this tutorial, you will be able to, +\begin{itemize} + \item Understand what is Version Control + \item Identify the need for using Version Control + \item Install Mercurial +\end{itemize} +\end{frame} + +% Introduction to course-need of version control, history, options available. +\section{Introduction} + +\begin{frame}[fragile] + \begin{block}{What is Version Control?} + + A way to track changes made to files over time, by keeping copies + of files as we change them. + + \end{block} +\end{frame} + +%% Home made version control system? +\begin{frame}[fragile] + \frametitle{Home-brewed} + \begin{center} + An example of a \typ{home-brew} Version Control system + \includegraphics[height=1.7in,width=4in]{folder.png} + %%a screen-shot of folder with all crazy names. + \end{center} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Home-brewed contd.} + \begin{itemize} + \item Listing the files in the folder: + \end{itemize} + \begin{lstlisting} + $ ls + a.out id1.txt id2.txt string.txt + identifier.cpp id.txt pda1.cpp + pda2.cpp pda.cpp pda.txt + \end{lstlisting} %%$ + %% listing out the crazy names +\end{frame} + +\begin{frame}[fragile] + \frametitle{Problems} + \begin{block}{} + \begin{itemize} + \item Name and changes made are not related or linked. + \item Can't track sequence of changes made to a file. + \item Does not scale. + \end{itemize} + \end{block} +\end{frame} + +\begin{frame}[fragile] + \frametitle{The need for Version Control} + \begin{itemize} + \item Tracking the history and evolution of a project + \item To collaborate effectively on a project + \item To efficiently track down bugs and pin-point the changes that + caused it + \item Useful for an individual and a group of people + \end{itemize} +\end{frame} + +%% Introduction to how logs are managed in VCS. +%% A analogy in logs and day-to-day life? +\begin{frame}[fragile] + \frametitle{How does it work? --- Analogy} + It is similar to playing an Video game. + \begin{itemize} + \item We play games in stages + \item Once we finish a stage -- \alert{we SAVE} + \item We continue playing + \item But, if necessary, we could choose from one of the saved + states and start from there + %%\item We could alter the course of the game + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Mercurial or \typ{hg}} + \centering + \includegraphics[height=.70in,interpolate=true]{mercurial_logo} + \begin{itemize} + \item Easy to learn and use + \item Lightweight + \item Scales excellently + \item Written in Python + \end{itemize} +\end{frame} + + +\begin{frame} + \frametitle{Installation} + \begin{itemize} + \item \$ sudo apt-get install mercurial + \item \$ hg + \item \$ hg version + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Summary...} + In this tutorial, we have learnt about, + \begin{itemize} + \item What is Version Control + \item The need for using Version Control + \item Installing Mercurial or hg + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Evaluation} + \begin{enumerate} + \item Is Mercurial a Centralized VCS or Distributed VCS? + \item How can you retrive the version of Mercurial installed? + \end{enumerate} +\end{frame} + +\begin{frame} + \frametitle{Solutions} + \begin{enumerate} + \item Mercurial is a Distributed Version Control system. + \item hg version + \end{enumerate} +\end{frame} + +%%% 5 concluding slides %%% +\begin{frame} +\frametitle{SDES \& FOSSEE} +\begin{center} +\begin{itemize} +\item \small{SDES}\\ +\small{\color{LimeGreen}Software Development techniques for Engineers and Scientists} \\ +\scriptsize An initiative by FOSSEE. \\ +\vspace{3pt} +\scriptsize For more information on SDES, please visit {\color{blue}\url{http://fossee.in/sdes}}\\ +\vspace{12pt} +\item \small{FOSSEE}\\ +\small {\color{LimeGreen}Free and Open-source Software for \\Science and Engineering Education} \\ +\scriptsize Based at IIT Bombay, Funded by MHRD.\\ +\vspace{3pt} +\scriptsize Part of National Mission on Education through ICT (NME-ICT). \\ +\end{itemize} +\end{center} +\end{frame} + +\begin{frame} +\frametitle{About the Spoken Tutorial Project} +\begin{itemize} +\item Watch the video available at {\color{blue}\url{http://spoken-tutorial.org /What\_is\_a\_Spoken\_Tutorial}} +\item It summarises the Spoken Tutorial project +\item If you do not have good bandwidth, you can download and watch it +\end{itemize} +\end{frame} + +\begin{frame} +\frametitle{Spoken Tutorial Workshops}The Spoken Tutorial Project Team +\begin{itemize} +\item Conducts workshops using spoken tutorials +\item Gives certificates to those who pass an online test +\item For more details, please write to \\ \hspace {0.5cm}{\color{blue}contact@spoken-tutorial.org} +\end{itemize} +\end{frame} + +\begin{frame} +\frametitle{Acknowledgements} +\begin{itemize} +\item Spoken Tutorial Project is a part of the Talk to a Teacher project +\item It is supported by the National Mission on Education through ICT, MHRD, Government of India +\item More information on this Mission is available at: \\{\color{blue}\url{http://spoken-tutorial.org/NMEICT-Intro}} +\end{itemize} +\end{frame} + +\begin{frame} + \begin{block}{} + \begin{center} + {\Large THANK YOU!} + \end{center} + \end{block} +\begin{block}{} + \begin{center} + For more Information, visit our website\\ + {\color{blue}\url{http://fossee.in/}} + \end{center} + \end{block} +\end{frame} + +\end{document} diff --git a/Version_Control/vcs1/vcs2col.rst b/Version_Control/vcs1/vcs2col.rst deleted file mode 100644 index 53540ac..0000000 --- a/Version_Control/vcs1/vcs2col.rst +++ /dev/null @@ -1,126 +0,0 @@ -.. Prerequisites -.. ------------- - -.. None - -.. Author : Primal Pappachan - Internal Reviewer : Kiran Isukapatla - Date: May 10 2012 - --------- -Script --------- - - - -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| {{{ Show the first slide containing title, name of the production team along | Hello friends and welcome to the tutorial on 'Version Control with Hg' | -| with the logo of MHRD}}} | | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| {{{Show the slide containing the objectives}}} | At the end of this tutorial you will be able to | -| | | -| | 1. Understand what is Version Control. | -| | | -| | #. Identify the need for using Version Control. | -| | | -| | #. Install Mercurial. | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| {{{Show the slide 'what is version control'}}} | First, let's understand what 'Version Control' is. | -| | | -| | 'Version control' is a way to track files over time and share them. | -| | This allows access to earlier versions of a file(s) if and when required. | -| | It therefore enables us to make changes to the content of a file, view it's | -| | change log and collaborate on a single piece of work with a team of people. | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| {{{Show the slide 'Home-brewed'}}} | Lets look at an example of home-brewed Version Control system.Version control | -| | is a way of backing up files, before making changes. Most people would have | -| | cooked up their own version control system. But there are more general purpose | -| | tools which can do this task in an organized way. | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| {{{Show the slide 'Problems'}}} | Let's look at the various problems associated with this set-up. | -| | | -| | 1. Name and changes made are not related or linked. | -| | | -| | #. Cant track sequence of changes made to a file. | -| | | -| | #. Does not scale. | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| {{{Show the slide 'The need for Version Control'}}} | Now, let's move to identifying the needs for a 'Version Control System'. | -| | | -| | We have seen that one of the main motivations to use a Version Control system | -| | is the ability to go back to a working version of a file, when something | -| | goes wrong. Below are a few more advantages of using an automated version | -| | control system. | -| | | -| | 1. By tracking the history of a project, any person may see the evolution | -| | of a project. | -| | | -| | 2. Allows for effective collaboration on a project, as everything is shared. | -| | | -| | 3. Helps to identify which additions have broken down a project and thus | -| | aids in efficient tracking down of the bugs. | -| | | -| | 4. It is good for a one man show as it is for a big group of people working | -| | on a project. | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| {{{Show the slide 'How does it work? - Analogy}}} | It is, in some ways, similar to playing a video game. We generally play games | -| | in stages. While playing, we save the game at some instances as per our choice. | -| | We continue playing, but we could, if necessary, choose to go back to one of the | -| | saved states and start over. In this manner, we could change the state of | -| | the game. | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| {{{Show the slide 'Mercurial or hg'}}} | mercurial or hg is: | -| | | -| | 1. Easy to learn and use | -| | | -| | #. Lightweight | -| | | -| | #. Scales excellently | -| | | -| | #. Written in Python | -| | | -| | | -| | Some of the Version Control tools available and used widely are: cvs, svn, | -| | git and so on. | -| | | -| | Each of these tools have their own merits and demerits. In this tutorial we | -| | shall learn how to use mercurial or hg. | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| {{{Show the slide 'Installation'}}} | Let's now get into Installation | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| sudo apt-get install mercurial | Type sudo apt-get install mercurial | -| | | -| | Type hg | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| $hg | It will give you the list of basic commands. | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| $hg version | and 'hg version' gives the version number of mercurial you are presently using. | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| {{{Show the 'summary' slide'}}} | This brings us to the end of the tutorial. In this tutorial, we have | -| | learnt: | -| | | -| | 1. What is Version Control. | -| | | -| | #. Identify the need for using Version Control | -| | | -| | #. Install Mercurial. | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| {{{Show self assessment questions slide}}} | Here are some self assessment questions for you to solve | -| | | -| | 1. Is Mercurial a Centralized VCS or Distributed Version Control System? | -| | | -| | #. How can you verify whether Mercurial has been installed properly? | -| | | -| | #. What is the command for accessing built-in help system of Mercurial? | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| {{{Show the solutions slide to self assessment questions }}} | And the answers, | -| | | -| | 1. Mercurial is a Distributed Version Control system. | -| | | -| | #. hg version | -| | | -| | #. hg help command | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -| {{{Show the thank you slide}}} | Hope you have enjoyed this tutorial and found it useful. | -| | Thank you | -+----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ diff --git a/Version_Control/vcs1/vcslide1.tex b/Version_Control/vcs1/vcslide1.tex deleted file mode 100644 index 8e6536f..0000000 --- a/Version_Control/vcs1/vcslide1.tex +++ /dev/null @@ -1,212 +0,0 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Version Control Systems -% -% Author: Primal Pappachan, FOSSEE -% Copyright (c) 2012, FOSSEE, IIT Bombay -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\documentclass[14pt,compress]{beamer} - -\mode -{ - \usetheme{Warsaw} - \useoutertheme{infolines} - \setbeamercovered{transparent} -} - -\usepackage[english]{babel} -\usepackage[latin1]{inputenc} -%\usepackage{times} -\usepackage[T1]{fontenc} - -% Taken from Fernando's slides. -\usepackage{ae,aecompl} -\usepackage{mathpazo,courier,euler} -\usepackage[scaled=.95]{helvet} - -\definecolor{darkgreen}{rgb}{0,0.5,0} - -\usepackage{listings} -\lstset{language=bash, - basicstyle=\ttfamily\bfseries, - commentstyle=\color{red}\itshape, - stringstyle=\color{darkgreen}, - showstringspaces=false, - keywordstyle=\color{blue}\bfseries} - -\newcommand{\inctime}[1]{\addtocounter{time}{#1}{\tiny \thetime\ m}} - -\newcommand{\typ}[1]{\lstinline{#1}} - -\newcommand{\kwrd}[1]{ \texttt{\textbf{\color{blue}{#1}}} } - -\setbeamercolor{emphbar}{bg=blue!20, fg=black} -\newcommand{\emphbar}[1] - -\setbeamertemplate{navigation symbols}{} - -\author[Primal Pappachan] {} -\institute[FOSSEE group] {} - -\date[IIT Bombay] {} - -\begin{document} - -\begin{frame} -\begin{center} -\vspace{12pt} -\textcolor{blue}{\huge Version Control with Mercurial} -\end{center} -\vspace{18pt} -\begin{center} -\vspace{10pt} -\includegraphics[scale=0.95]{../images/fossee-logo.png}\\ -\vspace{5pt} -\scriptsize Developed by FOSSEE Team, IIT-Bombay. \\ -\scriptsize Funded by National Mission on Education through ICT\\ -\scriptsize MHRD, Govt. of India.\\ -\includegraphics[scale=0.15]{../images/iitb-logo.jpg}\\ -\end{center} -\end{frame} - -\begin{frame} - \frametitle{Objectives} - At the end of this tutorial, you will be able to: - \begin{itemize} - \item Understand what is Version Control - \item Identify the need for using Version Control - \item Install Mercurial - \end{itemize} -\end{frame} - -%% There are some %$ used just to minimise the effect of $ sign used -%% in lstlisting. In emacs it looks dirty. - -% Introduction to course-need of version control, history, options available. -\section{Introduction} - -\begin{frame} - \frametitle{What is Version Control?} - \begin{block}{} - A way to track changes made to files over time, by keeping copies - of files as we change them. - \end{block} -\end{frame} - -%% Home made version control system? -\begin{frame}[fragile] - \frametitle{Home-brewed} - \begin{center} - An example of a \typ{home-brew} Version Control system - \includegraphics[height=1.8in,width=4.2in]{../images/folder.png} - \end{center} - \begin{lstlisting} -$ ls -a.out id1.txt id2.txt identifier.cpp id.txt lex pda1.cpp pda2.cpp pda.cpp pda.txt string.txt - \end{lstlisting} %%$ - %%a screen-shot of folder with all crazy names. -\end{frame} - -\begin{frame}[fragile] - \frametitle{Problems} - \begin{block}{} - \begin{itemize} - \item Name and changes made are not related or linked. - \item Can't track sequence of changes made to a file. - \item Does not scale. - \end{itemize} - \end{block} -\end{frame} - -\begin{frame}[fragile] - \frametitle{The need for Version Control} - \begin{itemize} - \item \alert{To err is Human} \ldots - \item Tracking the history and evolution of a project - \item To collaborate effectively on a project - \item To efficiently track down bugs and pin-point the changes that - caused it - \end{itemize} -\end{frame} - -%% Introduction to how logs are managed in VCS. -%% A analogy in logs and day-to-day life? -\begin{frame}[fragile] - \frametitle{How does it work? --- Analogy} - It is, in some ways, similar to playing an Video game. - \begin{itemize} - \item We play games in stages - \item Once we finish a stage or a task -- \alert{we SAVE} - \item We continue playing - \item But, if necessary, we could choose from one of the saved - states and start from there - \item We could alter the course of the game - \end{itemize} -\end{frame} - - -\begin{frame} - \frametitle{Mercurial or \typ{hg}} - \begin{center} - \includegraphics[height=.75in,interpolate=true]{../images/mercurial_logo} - \end{center} - \begin{itemize} - \item Easy to learn and use - \item Lightweight - \item Scales excellently - \item Written in Python - \end{itemize} -\end{frame} - -\begin{frame} - \frametitle{Installation} - \begin{itemize} - \item \typ{sudo apt-get install mercurial} - \item \typ{\$ hg} - \item \typ{\$ hg version} - \end{itemize} -\end{frame} - -\begin{frame}[fragile] -\frametitle{Summary...} -In this tutorial, we have learnt about, -\begin{itemize} -\item What is Version Control -\item The need for using Version Control -\item Installing Mercurial or hg -\end{itemize} -\end{frame} - -\begin{frame}[fragile] -\frametitle{Evaluation} -\begin{enumerate} -\item Is Mercurial a Centralized VCS or Distributed VCS? -\item How can you verify whether Mercurial has been installed properly? -\item What is the command for accessing built-in help system of Mercurial? -\end{enumerate} -\end{frame} - -\begin{frame} -\frametitle{Solutions} -\begin{enumerate} -\item Mercurial is a Distributed Version Control system. -\item hg version -\item hg help command -\end{enumerate} -\end{frame} -\begin{frame} - -\begin{block}{} - \begin{center} - \textcolor{blue}{\Large THANK YOU!} - \end{center} - \end{block} -\begin{block}{} - \begin{center} - For more Information, visit our website\\ - \url{http://fossee.in/} - \end{center} - \end{block} -\end{frame} - -\end{document} diff --git a/Version_Control/vcs2/vcs2.rst b/Version_Control/vcs2/vcs2.rst index 9be4fa3..5e4b9d0 100644 --- a/Version_Control/vcs2/vcs2.rst +++ b/Version_Control/vcs2/vcs2.rst @@ -327,10 +327,10 @@ Here are some self assessment questions for you to solve tag: tip user: Primal Pappachan date: Sat Jan 26 22:16:53 2012 +0530 - summary: Added Readme - Try to identify each component of this changeset and it’s meaning. In the - changeset, what is the significance of the number as well as hexadecimal - string in the first line? + summary: Added Readme + Try to identify each component of this changeset and it’s meaning. In the + changeset, what is the significance of the number as well as hexadecimal + string in the first line? .. L24 diff --git a/Version_Control/vcs2/vcs2twocol.rst b/Version_Control/vcs2/vcs2twocol.rst index d542d2d..f3c0556 100644 --- a/Version_Control/vcs2/vcs2twocol.rst +++ b/Version_Control/vcs2/vcs2twocol.rst @@ -168,7 +168,7 @@ Spoken Tutorial Script | | user: Primal Pappachan | | | date: Sat Jan 26 22:16:53 2012 +0530 | | | summary: Added Readme | -| | Try to identify each component of this changeset and it’s meaning. In the | +| | Try to identify each component of this changeset and it’s meaning. In the | | | changeset, what is the significance of the number as well as hexadecimal | | | string in the first line? | +----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -- cgit From f71e9c3a7f4407dcd1ade3858c9a3a07028ce716 Mon Sep 17 00:00:00 2001 From: Radhika Date: Thu, 26 Jul 2012 17:38:41 +0530 Subject: VC 1 Two column script added --- Version_Control/vcs1/vcs1_2col.rst | 152 +++++++++++++++++++++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100644 Version_Control/vcs1/vcs1_2col.rst diff --git a/Version_Control/vcs1/vcs1_2col.rst b/Version_Control/vcs1/vcs1_2col.rst new file mode 100644 index 0000000..8e88b2b --- /dev/null +++ b/Version_Control/vcs1/vcs1_2col.rst @@ -0,0 +1,152 @@ +.. Prerequisites +.. ------------- + +.. None + +.. Author : Primal Pappachan + Internal Reviewer : Kiran Isukapatla + Date: May 10 2012 + +-------- +Script +-------- + + + ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| {{{ Show the first slide containing title, name of the production team along | Hello friends and welcome to the tutorial on 'Version Control with Hg' | +| with the logo of MHRD}}} | | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| {{{Show the slide containing the objectives}}} | At the end of this tutorial you will be able to | +| | | +| | 1. Understand what is Version Control. | +| | | +| | #. Identify the need for using Version Control. | +| | | +| | #. Install Mercurial. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| {{{Show the slide 'what is version control'}}} | First, let's understand what 'Version Control' is. | +| | | +| | 'Version control' is a way to track files over time and share them. | +| | This allows access to earlier versions of a file(s) if and when required. | +| | It therefore enables us to make changes to the content of a file, view it's | +| | change log and collaborate on a single piece of work with a team of people. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| {{{Show the slide 'Home-brewed'}}} | Lets look at an example of home-brewed Version Control system.Version control | +| | is a way of backing up files, before making changes. Most people would have | +| | cooked up their own version control system. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| {{{Show the next slide 'Home-brewed'}}} | Listing the files in the folder we observe that after a point of time it | +| | becomes difficult to maintain proper names for different versions of a file. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| {{{Show the slide 'Problems'}}} | Let's look at the various problems associated with this set-up. | +| | | +| | 1. Name and changes made are not related or linked. | +| | | +| | #. Can't track sequence of changes made to a file. | +| | | +| | #. Does not scale. | +| | | +| | To overcome this problems there are more general purpose tools which can | +| | do this task in an organized way. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| {{{Show the slide 'The need for Version Control'}}} | Now, let's move to identifying the needs for a 'Version Control System'. | +| | | +| | We have seen that one of the main motivations to use a Version Control system | +| | is the ability to go back to a working version of a file, when something | +| | goes wrong. Below are a few more advantages of using an automated version | +| | control system. | +| | | +| | 1. By tracking the history of a project, any person may see the evolution | +| | of a project. | +| | | +| | 2. Allows for effective collaboration on a project, as everything is shared. | +| | | +| | 3. Helps to identify which additions have broken down a project and thus | +| | aids in efficient tracking down of the bugs. | +| | | +| | 4. It is good for a one man show as it is for a big group of people working | +| | on a project. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| {{{Show the slide 'How does it work? - Analogy}}} | It is, in some ways, similar to playing a video game. We generally play games | +| | in stages. While playing, we save the game at some instances as per our choice. | +| | We continue playing, but we could, if necessary, choose to go back to one of the | +| | saved states and start over. In this manner, we could change the state of | +| | the game. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| {{{Show the slide 'Mercurial or hg'}}} | Some of the Version Control tools available and used widely are: cvs, svn, | +| | git and so on. | +| | | +| | Each of these tools have their own merits and demerits. In this tutorial we | +| | shall learn how to use mercurial or hg. | +| | | +| | Mercurial or hg is: | +| | | +| | 1. Easy to learn and use | +| | | +| | #. Lightweight | +| | | +| | #. Scales excellently | +| | | +| | #. Written in Python | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| {{{Switch to terminal}}} | Type sudo apt-get install mercurial | +| :: | | +| | Type hg | +| $sudo apt-get install mercurial | | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| | | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| :: | It will give you the list of basic commands. | +| | | +| $hg | | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| :: | and 'hg version' gives the version number of mercurial you are presently using. | +| | | +| $hg version | | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| {{{Show the 'summary' slide'}}} | This brings us to the end of the tutorial. In this tutorial, we have | +| | learnt: | +| | | +| | 1. What is Version Control. | +| | | +| | #. Identify the need for using Version Control | +| | | +| | #. Install Mercurial. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| {{{Show self assessment questions slide}}} | Here are some self assessment questions for you to solve | +| | | +| | 1. Is Mercurial a Centralized VCS or Distributed Version Control System? | +| | | +| | #. How can you retrive the version of Mercurial installed? | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| {{{Show the solutions slide to self assessment questions }}} | And the answers, | +| | | +| | 1. Mercurial is a Distributed Version Control system. | +| | | +| | #. hg version | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| {{{ Show the SDES & FOSSEE slide }}} | Software Development techniques for Engineers and Scientists - SDES, is an | +| | initiative by FOSSEE. For more information, please visit the given link. | +| | | +| | Free and Open-source Software for Science and Engineering Education - FOSSEE, is | +| | based at IIT Bombay which is funded by MHRD as part of National Mission on | +| | Education through ICT. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| {{{ Show the ``About the Spoken Tutorial Project'' slide }}} | Watch the video available at the following link. It summarises the Spoken | +| | Tutorial project.If you do not have good bandwidth, you can download and | +| | watch it. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| {{{ Show the `` Spoken Tutorial Workshops'' slide }}} | The Spoken Tutorial Project Team conducts workshops using spoken tutorials, | +| | gives certificates to those who pass an online test. | +| | | +| | For more details, contact contact@spoken-tutorial.org | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| {{{ Show the ``Acknowledgements'' slide }}} | Spoken Tutorial Project is a part of the "Talk to a Teacher" project. | +| | It is supported by the National Mission on Education through ICT, MHRD, | +| | Government of India. More information on this mission is available at the | +| | given link. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| {{{Show the thank you slide}}} | Hope you have enjoyed this tutorial and found it useful. | +| | Thank you | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ -- cgit From 18d8394b05bc6cc52cd1a54a59a22163b5147c34 Mon Sep 17 00:00:00 2001 From: Jovina Date: Fri, 3 Aug 2012 11:29:17 +0530 Subject: Added additional slides. --- ult/ult_1/ult1.tex | 207 ++++++++++++++++++++++++++++++++++------------------- 1 file changed, 133 insertions(+), 74 deletions(-) diff --git a/ult/ult_1/ult1.tex b/ult/ult_1/ult1.tex index 9ad3f03..ca6062b 100644 --- a/ult/ult_1/ult1.tex +++ b/ult/ult_1/ult1.tex @@ -1,59 +1,71 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Using Linux Tools -% -% Author: FOSSEE -% Copyright (c) 2009, FOSSEE, IIT Bombay -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\documentclass[12pt,compress]{beamer} - +\documentclass[17pt,compress]{beamer} +\usepackage{beamerthemesplit} \mode { \usetheme{Warsaw} \useoutertheme{infolines} \setbeamercovered{transparent} + \setbeamertemplate{navigation symbols}{} } +% Taken from Fernando's slides. +\usepackage{ae,aecompl} +\usepackage[scaled=.95]{helvet} \usepackage[english]{babel} \usepackage[latin1]{inputenc} -%\usepackage{times} \usepackage[T1]{fontenc} -% Taken from Fernando's slides. -\usepackage{ae,aecompl} -\usepackage{mathpazo,courier,euler} -\usepackage[scaled=.95]{helvet} +% change the alerted colour to LimeGreen +\definecolor{LimeGreen}{RGB}{50,205,50} +\setbeamercolor{structure}{fg=LimeGreen} +\author[FOSSEE]{} +\institute[IIT Bombay]{} +\date[]{} +% \setbeamercovered{transparent} -\definecolor{darkgreen}{rgb}{0,0.5,0} +% theme split +\usepackage{verbatim} +\newenvironment{colorverbatim}[1][]% +{% +\color{blue} +\verbatim +}% +{% +\endverbatim +}% +\usepackage{mathpazo,courier,euler} \usepackage{listings} \lstset{language=sh, basicstyle=\ttfamily\bfseries, - commentstyle=\color{red}\itshape, - stringstyle=\color{darkgreen}, showstringspaces=false, - keywordstyle=\color{blue}\bfseries} + keywordstyle=\color{black}\bfseries} + +% logo +\logo{\includegraphics[height=1.30 cm]{3t-logo.pdf}} +\logo{\includegraphics[height=1.30 cm]{fossee-logo.pdf} + +\hspace{7.5cm} +\includegraphics[scale=0.99]{../images/fossee-logo.pdf}\\ +\hspace{281pt} +\includegraphics[scale=0.80]{../images/3t-logo.pdf}} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% DOCUMENT STARTS \begin{document} -\begin{frame} +\sffamily \bfseries +\title +[Getting started with Linux] +{Getting started with Linux} +\author +[FOSSEE] +{\small Talk to a Teacher\\{\color{blue}\url{http://spoken-tutorial.org}}\\\vspace{0.25cm}National Mission on Education + through ICT\\{\color{blue}\url{ http://sakshat.ac.in}} \\ [1.65cm] + Contributed by FOSSEE Team \\IIT Bombay \\[0.3cm] +} -\begin{center} -\vspace{12pt} -\textcolor{blue}{\huge Using Linux Tools\\Part I} -\end{center} -\vspace{18pt} -\begin{center} -\vspace{10pt} -\includegraphics[scale=0.95]{../images/fossee-logo.png}\\ -\vspace{5pt} -\scriptsize Developed by FOSSEE Team, IIT-Bombay. \\ -\scriptsize Funded by National Mission on Education through ICT\\ -\scriptsize MHRD,Govt. of India\\ -\includegraphics[scale=0.30]{../images/iitb-logo.png}\\ -\end{center} +% slide 1 +\begin{frame} + \titlepage \end{frame} \begin{frame} @@ -62,26 +74,20 @@ At the end of this tutorial, you will be able to, \begin{itemize} -\item Know what is linux. -\item Understand the need for linux in today's world. -\item Move around in directories and files. -\item Use basic commands of Linux. +\item Know what is Linux +\item Understand the need for Linux in today's world +\item Move around in directories and files +\item Use basic commands of Linux \end{itemize} \end{frame} \begin{frame}[fragile] - \begin{block}{What is the Linux OS?} + \begin{block}{What is \textbf{GNU/Linux} Operating System?} \begin{itemize} - \item Free Open Source Operating System - \begin{description} - \item[Free] - Free as in Free Speech - \item[Open-Source] - Permit modifications and redistribution of source code - \end{description} - \item Also called GNU/Linux - \item Unix-inspired - \item Runs on a variety of hardware + \item Free Open Source Operating System\\ + {\color{LimeGreen}{Free}} Free as in Free Speech\\ + {\color{LimeGreen}{Open-Source}} permits modifications \& redistribution of source code + \item Unix-inspired \& runs on a variety of hardware \item Linux Kernel + Application software \end{itemize} \end{block} @@ -90,14 +96,12 @@ At the end of this tutorial, you will be able to, \begin{frame}[fragile] \frametitle{Why Linux?} \begin{itemize} - \item Free - \item Secure \& versatile + \item Free, secure \& versatile \end{itemize} \begin{block}{Why Linux for Scientific Computing?} \begin{itemize} - \item Free as in Free Speech - \item Can run for \emph{ever} + \item Can run forever \item Libraries \item Parallel Computing \end{itemize} @@ -111,11 +115,12 @@ At the end of this tutorial, you will be able to, \item Command Line for this module \item Hit \texttt{Ctrl + Alt + F1} \item \texttt{logout} command logs you out + \item Hit \texttt{Ctrl + Alt + F7} to come back to GUI \end{itemize} \end{frame} \begin{frame}[fragile] - \frametitle{Creating folders} + \frametitle{New folders} \begin{itemize} \item Special characters need to be escaped OR quoted \end{itemize} @@ -132,20 +137,23 @@ At the end of this tutorial, you will be able to, \frametitle{Using additional options} \begin{itemize} - \item \texttt{-h} or \texttt{--help} gives summary of command usage + \item \texttt{-h} or \texttt{---help} gives summary of command usage \end{itemize} \begin{lstlisting} + $ ls -h $ ls --help \end{lstlisting} % $ \end{frame} \begin{frame} \frametitle{Exercise 1} + Which option should be used with 'ls' command to list all\\ \begin{itemize} - \item Which option should be used with ``ls'' command to list all the directories, - sub-directories and files contained in it? + \item the directories,\\ + \item the sub-directories,\\ + \item the files contained in it \end{itemize} - Hint: Use ``man'' or ``--help'' + Hint: Use \texttt{man} or \texttt{---help} \end{frame} \begin{frame} @@ -156,31 +164,37 @@ At the end of this tutorial, you will be able to, \begin{itemize} -\item Understand the basic structure of linux and it's need. -\item See the current directory in which we are working, using the command ``pwd''. -\item List a directory's contents by using the command ``ls''. -\item Change file timestamps, using the command ``touch''. - \item Use commands like ``mkdir'' and ``rmdir'' to make and remove directories - respectively. -\item Use commands such as ``man'' and ``whatis'' to get a description of - what a particular command does. -\item Search the manual page names and descriptions, using the `` apropos'' command. +\item Understand the basic structure of Linux and it's need +\item Use ``pwd'' command, to check the current working directory +\item List a directory's contents by using the command ``ls'' + +\end{itemize} +\end{frame} + +\begin{frame} +\frametitle{Summary...} +\label{sec-9} +\begin{itemize} +\item Use ``mkdir'' to create, ``rmdir'' to delete directories +\item Use ``man'' and ``whatis'' to get a description of a command +\item Use ``apropos'' to search manual page names and descriptions \end{itemize} \end{frame} + \begin{frame}[fragile] \frametitle{Evaluation} -\label{sec-9} +\label{sec-10} \begin{enumerate} -\item Which is the default directory after logging into the terminal? +\item What is the default directory after logging into the terminal? \vspace{8pt} \item How to view file attributes with ``ls'' command? \end{enumerate} \end{frame} \begin{frame} \frametitle{Solutions} -\label{sec-10} +\label{sec-11} \begin{enumerate} @@ -189,20 +203,65 @@ At the end of this tutorial, you will be able to, \item ls -l \end{enumerate} \end{frame} + \begin{frame} +\frametitle{SDES \& FOSSEE} +\begin{center} +\begin{itemize} +\item \small{SDES}\\ +\small{\color{LimeGreen}Software Development techniques for Engineers and Scientists} \\ +\scriptsize An initiative by FOSSEE. \\ +\vspace{3pt} +\scriptsize For more information on SDES, please visit {\color{blue}\url{http://fossee.in/sdes}}\\ +\vspace{12pt} +\item \small{FOSSEE}\\ +\small {\color{LimeGreen}Free and Open-source Software for \\Science and Engineering Education} \\ +\scriptsize Based at IIT Bombay, Funded by MHRD.\\ +\vspace{3pt} +\scriptsize Part of National Mission on Education through ICT (NME-ICT). \\ +\end{itemize} +\end{center} +\end{frame} +\begin{frame} +\frametitle{About the Spoken Tutorial Project} +\begin{itemize} +\item Watch the video available at {\color{blue}\url{http://spoken-tutorial.org /What\_is\_a\_Spoken\_Tutorial}} +\item It summarises the Spoken Tutorial project +\item If you do not have good bandwidth, you can download and watch it +\end{itemize} +\end{frame} + +\begin{frame} +\frametitle{Spoken Tutorial Workshops}The Spoken Tutorial Project Team +\begin{itemize} +\item Conducts workshops using spoken tutorials +\item Gives certificates to those who pass an online test +\item For more details, please write to \\ \hspace {0.5cm}{\color{blue}contact@spoken-tutorial.org} +\end{itemize} +\end{frame} + +\begin{frame} +\frametitle{Acknowledgements} +\begin{itemize} +\item Spoken Tutorial Project is a part of the Talk to a Teacher project +\item It is supported by the National Mission on Education through ICT, MHRD, Government of India +\item More information on this Mission is available at: \\{\color{blue}\url{http://spoken-tutorial.org/NMEICT-Intro}} +\end{itemize} +\end{frame} + +\begin{frame} \begin{block}{} \begin{center} - \textcolor{blue}{\Large THANK YOU!} + {\Large THANK YOU!} \end{center} \end{block} \begin{block}{} \begin{center} For more Information, visit our website\\ - \url{http://fossee.in/} + {\color{blue}\url{http://fossee.in/}} \end{center} \end{block} \end{frame} \end{document} - -- cgit From f9cc50a64cc0e237dbedbe4fdb03cd22fc04e0f1 Mon Sep 17 00:00:00 2001 From: Jovina Date: Fri, 3 Aug 2012 11:37:32 +0530 Subject: Minor changes. --- ult/ult_1/script.rst | 194 ++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 137 insertions(+), 57 deletions(-) diff --git a/ult/ult_1/script.rst b/ult/ult_1/script.rst index 4708de6..c05f6a4 100644 --- a/ult/ult_1/script.rst +++ b/ult/ult_1/script.rst @@ -25,7 +25,7 @@ team along with the logo of MHRD }}} .. R1 Hello friends and Welcome to the tutorial on -'Using linux tools - Part 1'. +'Getting started with Linux'. .. L2 @@ -55,7 +55,7 @@ principles established in Unix. It consists of an important and central piece called the Linux kernel, which, manages system resources like process control, networking, peripherals and file system access. This is complemented by the application software, written on top of the kernel that -give the higher level functionality that facilitate the user to carry out +gives the higher level functionality that facilitates the user to carry out various tasks. .. L4 @@ -71,7 +71,7 @@ The security model used in Linux is based on the UNIX idea of security, which is known to be robust and of proven quality. Also, there are no viruses in the GNU/Linux world. -Python is used a lot for scientific computing. Why? Beause, +Linux is used a lot for scientific computing. Why? Beause, we can share our operating system and the libraries that we are using with our co-workers, without any headaches of licensing. There are a host of tools and libraries, that are useful in day-to-day @@ -92,52 +92,72 @@ You can log-in once you provide your authentication details. It is a popular misconception that GNU/Linux doesn't have a GUI (Graphical user interface). It does have a fully functional GUI, but for the purpose of this course we shall start with using the CLI (Command line interface). + +.. R6 + Once your system has booted up, hit ``Ctrl + Alt + F1`` to switch to the command line interface. -You can log out using the ``logout`` command. +.. L6 -.. R6 +{{{ Hit ``Ctrl + Alt + F1'' and login as ``fossee'' with it's password }}} -Now hit ``Ctrl + Alt + F7`` and come back to the GUI. For the purpose -of the spoken tutorials, we shall use the terminal on the GUI. +.. R7 -.. L6 +To logout from the CLI, you can use the ``logout`` command. + +.. L7 + + logout + +.. R8 + +Now hit ``Ctrl + Alt + F7`` and come back to the GUI. + +.. L8 + +{{{ Hit ``Ctrl + Alt + F7`` }}} + +.. R9 + +For the purpose of spoken tutorials, we shall use the terminal on the GUI. + +.. L9 {{{ Open the terminal }}} -.. R7 +.. R10 Now that we have logged in, where are we? To find out the present working directory, we use the ``pwd`` command. -.. L7 +.. L10 :: pwd -.. R8 +.. R11 Now, to see what is in the current directory, we use the ``ls`` command. -.. L8 +.. L11 :: ls -.. R9 +.. R12 It gives us a list of all the files in our present working directory. ``ls`` command takes the directory, in which we want to see the list of files present, as an argument. To see all the files present in the ``Music`` directory, we say -.. L9 +.. L12 :: ls Music -.. R10 +.. R13 Note that everything in GNU/Linux and the Unix world is case sensitive. @@ -146,106 +166,110 @@ What if we wanted the files to be more organized? Say, we would like to put all our work during this course in a separate directory. Let us now create a directory ``sdes`` by saying -.. L10 +.. L13 :: mkdir sees -.. R11 +.. R14 Type ``ls`` to see that a new directory has been created. -.. L11 +.. L14 :: ls -.. L12 +.. L15 {{{ Switch to slide, New folders }}} -.. R12 +.. R15 Also, note that special characters need to be escaped. For example if we wanted to create a directory with the name ``software engineering``, we do it either as - mkdir software\ engineering + mkdir software \\ engineering or as - mkdir "software engineering" + mkdir "software engg" But it is generally a practice to use hyphens or underscores instead of spaces in filenames and directory names. Also in modern GNU/Linux filesystems all characters except the forward slash are allowed. -.. R13 +.. R16 Now that we have seen how to create a new empty directory and navigate into it, let us create a new blank file. We use the ``touch`` command for this. -.. L13 +.. L16 -{{{ Switch to the termninal }}} +{{{ Switch to the terminal }}} :: pwd cd sees touch first -.. R14 +.. R17 This creates a file named first in our present working directory. Use the ``ls`` command to see that the file has been created. -.. L14 +.. L17 :: ls -.. R15 +.. R18 To get a quick description of the command, we could use the ``whatis`` command. It gives a short one-line description of the command that is passed as an argument to it. For example, -.. L15 +.. L18 :: whatis touch -.. R16 +.. R19 To get a more detailed description of the command, we use the ``man`` command. -.. L16 +.. L19 :: man touch -.. R17 +.. R20 This page gives a detailed description of the command. We can see that the ``touch`` command has a whole host of options that can be passed to it. Every command in Linux has such a list of options that can be passed to the command to do specific tasks. Hit the ``q`` key to quit the ``man`` page. +.. L20 + + q + To see the manual on man itself do, -.. L17 +.. L21 :: man man -.. L18 +.. L21 {{{ Switch to slide, Using additional options }}} -.. R18 +.. R22 As you may have observed, often the ``man`` page is a bit too much for quickly cross checking what option to use for a specific task. For this @@ -255,21 +279,23 @@ command. Pause the video here, try out the following exercise and resume the video. -.. L19 +.. L22 + +.. L23 {{{ Show slide with exercise 1 }}} -.. R19 +.. R23 Which option should be used with ``ls`` command to list all the directories, sub-directories and files contained in it? Hint: Use ``man`` or ``--help`` -.. R20 +.. R24 Switch to terminal for solution. -.. L20 +.. L24 {{{continue from paused state}}} {{{ Switch to the terminal }}} @@ -277,78 +303,87 @@ Switch to terminal for solution. ls -R -.. R21 +.. R25 This lists out all the files in the sub-tree of the current directory, recursively. -.. L21 +.. L25 -.. R22 +.. R26 When you wish to create a new directory deep inside a directory structure, using a ``-p`` option with the ``mkdir`` command would be useful. For example,if we wish to create a folder ``scripts`` inside the directory ``linux-tools`` inside the directory ``sees``, we could simply say, -.. L22 +.. L26 :: pwd mkdir -p sees/linux-tools/scripts -.. R23 +.. R27 Let's now say, we wish to remove a directory or a file. How do we find out what command to use? We use the ``apropos`` command to search for commands based on their descriptions. To search for the command to remove a file/directory say, -.. L23 +.. L27 :: apropos remove -.. R24 +.. R28 This gives us a whole list of commands that have the word ``remove``, in their description. Looking through the list tells us that ``rm`` or ``rmdir`` is the command to use. -.. L24 +.. L28 -.. L25 +.. L29 {{{ Show summary slide }}} -.. R25 +.. R29 This brings us to the end of the tutorial.In this tutorial, we have learnt to, 1. Understand the basic structure of linux and it's need. - #. Move around in directories and files. + #. Use ``pwd'' command, to check the current working directory. + #. List a directory's contents by using the command ``ls''. + +.. L30 + +{{{ Show the Summary... slide }}} + +.. R30 + #. Use commands like ``mkdir`` and ``rmdir`` to make and remove directories respectively. #. Use commands such as ``man`` and ``whatis`` to get a description of what a particular command does. + #. Search the manual page names and descriptions, using the “ apropos” command. -.. L26 +.. L31 {{{ Show self assessment questions slide }}} -.. R26 +.. R31 Here are some self assessment questions for you to solve -1. Which is the default directory after logging into the terminal? +1. What is the default directory after logging into the terminal? 2. How to view file attributes with ls command? -.. L27 +.. L32 {{{ Solution of self assessment questions on slide }}} -.. R27 +.. R32 And the answers, @@ -361,11 +396,56 @@ And the answers, ls -l -.. L28 +.. L33 + +{{{ Show the SDES & FOSSEE slide }}} + +.. R33 + +Software Development techniques for Engineers and Scientists - SDES, is an +initiative by FOSSEE. For more information, please visit the given link. + +Free and Open-source Software for Science and Engineering Education - FOSSEE, is +based at IIT Bombay which is funded by MHRD as part of National Mission on +Education through ICT. + +.. L34 + +{{{ Show the ``About the Spoken Tutorial Project'' slide }}} + +.. R34 + +Watch the video available at the following link. It summarises the Spoken +Tutorial project.If you do not have good bandwidth, you can download and +watch it. + +.. L35 + +{{{ Show the `` Spoken Tutorial Workshops'' slide }}} + +.. R35 + +The Spoken Tutorial Project Team conducts workshops using spoken tutorials, +gives certificates to those who pass an online test. + +For more details, contact contact@spoken-tutorial.org + +.. L36 + +{{{ Show the ``Acknowledgements'' slide }}} + +.. R36 + +Spoken Tutorial Project is a part of the "Talk to a Teacher" project. +It is supported by the National Mission on Education through ICT, MHRD, +Government of India. More information on this mission is available at the +given link. + +.. L37 {{{ Show the Thankyou slide }}} -.. R28 +.. R37 Hope you have enjoyed this tutorial and found it useful. Thank you! -- cgit From a014e540bbc0b532fa22b19c3e68f91020b8f9f5 Mon Sep 17 00:00:00 2001 From: Jovina Date: Fri, 3 Aug 2012 11:45:01 +0530 Subject: Added additional files. --- ult/ult_2/ult2.tex | 220 +++++++++++++++++++++++++++-------------------------- 1 file changed, 113 insertions(+), 107 deletions(-) diff --git a/ult/ult_2/ult2.tex b/ult/ult_2/ult2.tex index 9fb0e7e..6592b34 100644 --- a/ult/ult_2/ult2.tex +++ b/ult/ult_2/ult2.tex @@ -1,70 +1,83 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Using Linux Tools -% -% Author: FOSSEE -% Copyright (c) 2009, FOSSEE, IIT Bombay -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\documentclass[12pt,compress]{beamer} - +\documentclass[17pt,compress]{beamer} +\usepackage{beamerthemesplit} \mode { \usetheme{Warsaw} \useoutertheme{infolines} \setbeamercovered{transparent} + \setbeamertemplate{navigation symbols}{} } +% Taken from Fernando's slides. +\usepackage{ae,aecompl} +\usepackage[scaled=.95]{helvet} \usepackage[english]{babel} \usepackage[latin1]{inputenc} -%\usepackage{times} \usepackage[T1]{fontenc} -% Taken from Fernando's slides. -\usepackage{ae,aecompl} -\usepackage{mathpazo,courier,euler} -\usepackage[scaled=.95]{helvet} - -\definecolor{darkgreen}{rgb}{0,0.5,0} +% change the alerted colour to LimeGreen +\definecolor{LimeGreen}{RGB}{50,205,50} +\setbeamercolor{structure}{fg=LimeGreen} +\author[FOSSEE]{} +\institute[IIT Bombay]{} +\date[]{} +% \setbeamercovered{transparent} + +% theme split +\usepackage{verbatim} +\newenvironment{colorverbatim}[1][]% +{% +\color{blue} +\verbatim +}% +{% +\endverbatim +}% +\usepackage{mathpazo,courier,euler} \usepackage{listings} \lstset{language=sh, basicstyle=\ttfamily\bfseries, - commentstyle=\color{red}\itshape, - stringstyle=\color{darkgreen}, showstringspaces=false, - keywordstyle=\color{blue}\bfseries} + keywordstyle=\color{black}\bfseries} + +% logo +\logo{\includegraphics[height=1.30 cm]{3t-logo.pdf}} +\logo{\includegraphics[height=1.30 cm]{fossee-logo.pdf} + +\hspace{7.5cm} +\includegraphics[scale=0.99]{fossee-logo.pdf}\\ +\hspace{281pt} +\includegraphics[scale=0.80]{3t-logo.pdf}} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% DOCUMENT STARTS \begin{document} -\begin{frame} +\sffamily \bfseries +\title +[Basic File Handling] +{Basic File Handling} +\author +[FOSSEE] +{\small Talk to a Teacher\\{\color{blue}\url{http://spoken-tutorial.org}}\\\vspace{0.25cm}National Mission on Education + through ICT\\{\color{blue}\url{ http://sakshat.ac.in}} \\ [1.65cm] + Contributed by FOSSEE Team \\IIT Bombay \\[0.3cm] +} -\begin{center} -\vspace{12pt} -\textcolor{blue}{\huge Using Linux Tools\\Part II} -\end{center} -\vspace{18pt} -\begin{center} -\vspace{10pt} -\includegraphics[scale=0.95]{../images/fossee-logo.png}\\ -\vspace{5pt} -\scriptsize Developed by FOSSEE Team, IIT-Bombay. \\ -\scriptsize Funded by National Mission on Education through ICT\\ -\scriptsize MHRD,Govt. of India\\ -\includegraphics[scale=0.30]{../images/iitb-logo.png}\\ -\end{center} +% slide 1 +\begin{frame} + \titlepage \end{frame} + \begin{frame} \frametitle{Objectives} \label{sec-2} At the end of this tutorial, you will be able to, \begin{itemize} -\item Copy files from one location to another. -\item Remove files and directories. -\item Change permissions and ownership of files. -\item Navigate through directories and files. +\item Remove files and directories +\item Copy files from one location to another +\item Move files and directories +\item Know the Linux File Hierarchy \end{itemize} \end{frame} @@ -72,9 +85,9 @@ At the end of this tutorial, you will be able to, \frametitle{Pre-requisite} \label{sec-3} -Spoken tutorial on - +Spoken tutorial on, \begin{itemize} -\item Using Linux tools -- Part I +\item Getting started with Linux \end{itemize} \end{frame} @@ -82,63 +95,12 @@ Spoken tutorial on - \begin{frame} \frametitle{Linux File Hierarchy} \begin{itemize} - \item \texttt{/} is called the root directory + \item \texttt{/} is the root directory \item The root directory is the topmost level of the hierarchy - \item For details \texttt{man hier} - \end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{Symbolic modes} - \begin{small} - \begin{center} - \begin{tabular}{lll} - Reference & Class & Description \\ - \hline - u & user & the owner of the file \\ - g & group & users who are members of the file's group \\ - o & others & users who are not hte owner of the file or members of the group \\ - a & all & all three of the above; is the same as \emph{ugo} \\ - \end{tabular} - \end{center} - - \begin{center} - \begin{tabular}{ll} - Operator & Description \\ - \hline - + & adds the specified modes to the specified classes \\ - - & removes the specified modes from the specified classes \\ - = & the modes specified are to be made the exact modes for the specified classes \\ - \end{tabular} - \end{center} - - \begin{center} - \begin{tabular}{lll} - Mode & Name & Description \\ - \hline - r & read & read a file or list a directory's contents \\ - w & write & write to a file or directory \\ - x & execute & execute a file or recurse a directory tree \\ - \end{tabular} - \end{center} - \end{small} -\end{frame} - - -\begin{frame} - \frametitle{Exercise 1} - \begin{itemize} - \item Change the permissions of a directory along with all of its - sub-directories and files. + \item For details \texttt{\em \$man hier} \end{itemize} \end{frame} -\begin{frame} - \frametitle{Solution 1} - \begin{itemize} - \item chmod go-r -R / - \end{itemize} -\end{frame} \begin{frame} \frametitle{Summary} @@ -148,15 +110,14 @@ Spoken tutorial on - \begin{itemize} +\item Remove files using ``rm'' command \item Copy and move files from one location to another, using the ``cp'' - and ``mv'' commands respectively. -\item Remove files using ``rm`` command. -\item Understand the Linux file hierarchy. -\item Change permissions and ownership of files, using the ``chmod'' - and ``chown'' commands respectively. + and ``mv'' commands respectively +\item Learnt the file system hierarchy of Linux \end{itemize} \end{frame} + \begin{frame}[fragile] \frametitle{Evaluation} \label{sec-9} @@ -165,7 +126,7 @@ Spoken tutorial on - \begin{enumerate} \item How to copy all the contents of one folder into another? \vspace{15pt} -\item How will you rename the file wonderland.txt to alice.txt using the +\item How will you rename the file \texttt{\em wonderland.txt} to \texttt{\em alice.txt} using the commands learnt so far? \end{enumerate} \end{frame} @@ -175,26 +136,71 @@ Spoken tutorial on - \begin{enumerate} -\item cp folder1/* folder2 +\item \$ cp folder1/* folder2 \vspace{15pt} -\item mv wonderland.txt alice.txt +\item \$ mv wonderland.txt alice.txt \end{enumerate} \end{frame} + +\begin{frame} +\frametitle{SDES \& FOSSEE} +\begin{center} +\begin{itemize} +\item \small{SDES}\\ +\small{\color{LimeGreen}Software Development techniques for Engineers and Scientists} \\ +\scriptsize An initiative by FOSSEE. \\ +\vspace{3pt} +\scriptsize For more information on SDES, please visit {\color{blue}\url{http://fossee.in/sdes}}\\ +\vspace{10pt} +\item \small{FOSSEE}\\ +\small {\color{LimeGreen}Free and Open-source Software for \\Science and Engineering Education} \\ +\scriptsize Based at IIT Bombay, Funded by MHRD.\\ +\vspace{3pt} +\scriptsize Part of National Mission on Education through ICT \\(NME-ICT). \\ +\end{itemize} +\end{center} +\end{frame} + +\begin{frame} +\frametitle{About the Spoken Tutorial Project} +\begin{itemize} +\item Watch the video available at {\color{blue}\url{http://spoken-tutorial.org /What\_is\_a\_Spoken\_Tutorial}} +\item It summarises the Spoken Tutorial project +\item If you do not have good bandwidth, you can download and watch it +\end{itemize} +\end{frame} + +\begin{frame} +\frametitle{Spoken Tutorial Workshops}The Spoken Tutorial Project Team +\begin{itemize} +\item Conducts workshops using spoken tutorials +\item Gives certificates to those who pass an online test +\item For more details, please write to \\ \hspace {0.5cm}{\color{blue}contact@spoken-tutorial.org} +\end{itemize} +\end{frame} + +\begin{frame} +\frametitle{Acknowledgements} +\begin{itemize} +\item Spoken Tutorial Project is a part of the Talk to a Teacher project +\item It is supported by the National Mission on Education through ICT, MHRD, Government of India +\item More information on this Mission is available at: \\{\color{blue}\url{http://spoken-tutorial.org/NMEICT-Intro}} +\end{itemize} +\end{frame} + \begin{frame} \begin{block}{} \begin{center} - \textcolor{blue}{\Large THANK YOU!} + {\Large THANK YOU!} \end{center} \end{block} \begin{block}{} \begin{center} For more Information, visit our website\\ - \url{http://fossee.in/} + {\color{blue}\url{http://fossee.in/}} \end{center} \end{block} \end{frame} \end{document} - - -- cgit From 72742ed4914c4e26db6798b9e5348663b3fb9a32 Mon Sep 17 00:00:00 2001 From: Jovina Date: Wed, 8 Aug 2012 12:22:13 +0530 Subject: Made changes based on the review. --- ult/ult_2/script.rst | 301 +++++++++++++++------------------------------------ 1 file changed, 86 insertions(+), 215 deletions(-) diff --git a/ult/ult_2/script.rst b/ult/ult_2/script.rst index 21db359..6c866da 100644 --- a/ult/ult_2/script.rst +++ b/ult/ult_2/script.rst @@ -3,16 +3,15 @@ .. At the end of this tutorial, you will be able to: - .. 1. Copy files from one location to another. - .. 2. Remove files and directories. - .. 3. Change permissions and ownership of files. - .. 4. Navigate through directories and files. + .. 1. Remove files and directories. + .. 2. Copy files from one location to another. + .. 3. Move files and directories. + .. 4. Know the Linux File Hierarchy .. Prerequisites .. ------------- -.. 1. Using Linux tools - Part 1 - +.. 1. Getting started with Linux Script ------ @@ -25,7 +24,7 @@ team along with the logo of MHRD }}} .. R1 Hello friends and Welcome to the tutorial on -'Using linux tools - Part 2'. +'Basic File handling'. .. L2 @@ -35,10 +34,10 @@ Hello friends and Welcome to the tutorial on At the end of this tutorial, you will be able to, - 1. Copy files from one location to another. - #. Remove files and directories. - #. Change permissions and ownership of files. - #. Navigate through directories and files. + 1. Remove files and directories. + #. Copy files from one location to another. + #. Move files and directories. + #. Know the Linux File Hierarchy .. L3 @@ -47,7 +46,7 @@ At the end of this tutorial, you will be able to, .. R3 Before beginning this tutorial,we would suggest you to complete the -tutorial on "Using Linux tools - Part 1". +tutorial on "Getting started with Linux". .. R4 @@ -59,9 +58,12 @@ Here's example to remove a file named "foo" from the directory "sdes", .. L4 +{{{ Copy the folder /sdes to your home folder }}} +{{{ Open the terminal }}} {{{ Navigate to /home/user/sdes/ }}} :: + ls rm foo ls @@ -101,6 +103,7 @@ how would we do it? pwd cp linux-tools/scripts/foo linux-tools/ + ls linux-tools/ .. R8 @@ -112,10 +115,11 @@ target location,as, :: cp linux-tools/scripts/foo linux-tools/bar + ls linux-tools/ .. R9 -This copies the file ``foo`` to the new location, but with the new name, +A copy the file ``foo`` is created, but with the new name, ``bar``. But, what would have happened if we had a file named ``bar`` already at the @@ -149,7 +153,8 @@ Now, let's try to copy the directory ``sdes`` to a new directory called .. L11 :: - cd /home/user + cd + pwd cp -i sdes course .. R12 @@ -175,22 +180,22 @@ file. Instead, you can make use of only one command which can do this task at one go. The ``mv`` command can move files or directories. It also takes the ``-i`` option to prompt before overwriting. -.. L14 +.. L13 :: cd /home/user mv -i sdes/ course/ -.. R15 +.. R14 Let us understand what exactly happened when we used the ``mv`` command -.. L15 +.. L14 :: ls course -.. R16 +.. R15 We can see that the ``sdes`` directory has been inserted as sub-directory of the ``course`` directory. The move command doesn't over-write @@ -199,12 +204,13 @@ directories, but the ``-i`` option is useful when moving files around. A common way to rename files (or directories), is to copy a file (or a directory) to the same location, with a new name. -.. L16 +.. L15 :: mv sdes/linux-tools sdes/linux + ls sdes -.. R17 +.. R16 It renames the ``linux-tools`` directory to just ``linux`` @@ -213,279 +219,144 @@ within the ``/home/`` directory, but other than that there are many other directories too. Let us take this opportunity to understand a few things about the linux file hierarchy and file permissions. -.. L17 +.. L16 :: cd / {{{ Switch to slide, Linux File Hierarchy }}} -.. R18 +.. R17 The ``/`` directory is called the root directory. All the files and directories, (even if they are on different physical devices) appear as sub-directories of the root directory. -.. L18 +.. L17 {{{ Switch to terminal }}} :: ls -.. R19 +.. R18 You can see the various directories present at the top most level. -.. L19 +.. L18 {{{ Pause for sometime and then continue }}} -.. R20 +.. R19 For more information, it is recommended that you look at the ``man`` page of ``hier``. -.. L20 +.. L19 :: man hier {{{ Pause for sometime and then hit q }}} -.. R21 - -Let us now look at file permissions. Linux is a multi-user environment and -allows users to set permissions to their files to allow only a set of -people to read or write it. Similarly, it is not "safe" to allow system -files to be edited by any user. All this access control is possible in -Linux. -To start, in the root directory, say, +.. L20 .. L21 -:: - - ls -l -.. R22 - -You again get a list of all the sub-directories, but this time with a lot -of additional information. Let us try and understand what this output says -Consider the first line of the output, - -.. L22 - -{{{ Highlight the required portions accordingly while narrating }}} - -.. R23 - -The first column denotes the type and the access permissions of the file. -The second is the number of links. The third and fourth are the owner and -group of the file. The next field is the size of the file in bytes. The -next field is the date and time of modification and the last column is the -file name. -We shall look at the permissions of the file now, ie., the first column of -the output. - -The first character in the first column specifies, whether the item is a -file or a directory. Files have a ``-`` as the first character and -directories have a ``d``. - -The next 9 characters define the access permissions of the file. Before -looking at it, we need to briefly study groups and users and ownership. - -We already know what the first character in the first column (in the output -of ``ls -l``) is for. The rest of the 9 characters are actually sets of 3 -characters of each. The first set of 3 characters defines the permissions -of the user, the next 3 is for the group and the last three is for others. -Based on the values of these characters, access is provided or denied to -files, to each of the users. - -So, what does each of the three characters stand for? Let's suppose we are -looking at the set, corresponding to the permissions of the user. In the -three characters, the first character can either be an ``r`` or a ``-``. -Which means, the user can either have the permissions to read the file or -not. If the character is ``r``, then the user has the permissions to read -the file, else not. Similarly, ``w`` stands for write permissions and -decides whether the user is allowed to write to the file. ``x`` stands for -execute permissions. You cannot execute a file, if you do not have the -permissions to execute it. - -Similarly, the next set of characters decides the same permissions for the -members of the group, that the file is associated with. The last set of -characters defines these permissions for the users, who are neither owners -of the file nor in the group, with which the file is associated. - -Now, it's not as if these permissions cannot be changed. If you are the -owner of a file, you can change the permissions of a file, using the -``chmod`` command. - -.. L23 - -.. R24 - -Let's say, we wish to give the execute permissions for a file, to both the -user and the group, how do we go about doing it? To be more explicit, given -a file ``foo.sh``, with the permissions flags as ``-rw-r--r--``, change it -to ``-rwxr-xr--``. - -The following command does it for us, +{{{ Show summary slide }}} -.. L24 -:: +.. R21 - chmod ug+x foo.sh - ls -l foo.sh +This brings us to the end of the tutorial.In this tutorial, we have learnt to, -.. R25 + 1. Remove files using ``rm`` command. + #. Copy and move files from one location to another, using the ``cp`` + and ``mv`` commands respectively. + #. Learnt the file system hierarchy of Linux. -As you can see, the permissions have been set to the required value. But -what did we exactly do? Let us try and understand. +.. L22 -.. L25 +{{{ Show self assessment questions slide }}} -{{{ Switch to slide,Symbolic modes }}} +.. R22 -.. R26 +Here are some self assessment questions for you to solve -In the command, the parameter ``ug+x`` is the mode parameter to the -``chmod`` command. It specifies the changes that need to be made to the -permissions of the file ``foo.sh``. -The ``u`` and ``g`` stand for the user and group, respectively. The ``x`` -stands for the execute permission and ``+`` stands for adding the -specified permission. So, essentially, we are asking ``chmod`` command to -add the execute permission for the user and group. The permission of others -will remain unchanged. +1. How to copy all the contents of one folder into another? -So, if we wished to add the execute permission to all the users, instead of -adding it to just the user and group, we would have instead said +2. How will you rename the file wonderland.txt to alice.txt using the + commands learnt so far? -.. L26 -:: +.. L23 - chmod a+x foo.sh +{{{ Solution of self assessment questions on slide }}} -.. R27 +.. R23 -or +And the answers, -.. L27 +1. We use the ``cp`` command along with a star sign. The star denotes that + it will copy all the files of folder 1 to folder 2. :: - chmod ugo+x foo.sh - -.. R28 - -Pause the video here, try out the following exercise and resume the video. - -.. L28 - -.. L29 - -{{{ Show slide with exercise 1 }}} - -.. R29 - -Change the permissions of a directory along with all of its -sub-directories and files. - -.. L30 - -{{{ Show slide with solution 1 }}} - -.. R30 - -To change the permissions of a directory along with all of its -sub-directories and files, recursively, we use the ``-R`` option -with the chmod command as shown - - chmod go-r -R / - -.. R31 - -It is important to note that the permissions of a file can only be changed -by a user who is the owner of a file or the superuser. - -What if we wish to change the ownership of a file? The ``chown`` command is -used to change the owner and group. -By default, the owner of a file (or directory) is the user that -created it. The group is a set of users that share the same access -permissions i.e., read, write and execute. -For instance, to change the user and the group of the file -``wonderland.txt`` to ``alice`` and ``users``, respectively, we say. + cp folder1/* folder2 -.. L31 +2. To rename a file, we use the ``mv`` command as, :: - chown fossee:users wonderland.txt - -.. R32 - -We get an error saying, the operation is not permitted. -We have attempted to change the ownership of a file that we own, to a -different user. Logically, this shouldn't be possible, because, this can -lead to problems, in a multi-user system. -Only the superuser is allowed to change the ownership of a file from one -user to another. The superuser or the ``root`` user is the only user -empowered to a certain set of tasks and hence is called the superuser. The -command above would have worked, if you did login as the superuser and -then changed the ownership of the file. - -.. L32 - -.. L33 + mv wonderland.txt alice.txt -{{{ Show summary slide }}} +.. L24 -.. R33 +{{{ Show the SDES & FOSSEE slide }}} -This brings us to the end of the tutorial.In this tutorial, we have learnt to, +.. R24 - 1. Copy and move files from one location to another, using the ``cp`` - and ``mv`` commands respectively. - #. Remove files using ``rm`` command. - #. Understand the Linux file hierarchy. - #. Change permissions and ownership of files, using the ``chmod`` - and ``chown`` commands respectively. +Software Development techniques for Engineers and Scientists - SDES, is an +initiative by FOSSEE. For more information, please visit the given link. -.. L34 +Free and Open-source Software for Science and Engineering Education - FOSSEE, is +based at IIT Bombay which is funded by MHRD as part of National Mission on +Education through ICT. -{{{ Show self assessment questions slide }}} +.. L25 -.. R34 +{{{ Show the ``About the Spoken Tutorial Project'' slide }}} -Here are some self assessment questions for you to solve +.. R25 -1. How to copy all the contents of one folder into another? +Watch the video available at the following link. It summarises the Spoken +Tutorial project.If you do not have good bandwidth, you can download and +watch it. -2. How will you rename the file wonderland.txt to alice.txt using the - commands learnt so far? +.. L26 -.. L35 +{{{ Show the `` Spoken Tutorial Workshops'' slide }}} -{{{ Solution of self assessment questions on slide }}} +.. R26 -.. R35 +The Spoken Tutorial Project Team conducts workshops using spoken tutorials, +gives certificates to those who pass an online test. -And the answers, +For more details, contact contact@spoken-tutorial.org -1. We use the ``cp`` command along with a star sign. The star denotes that - it will copy all the files of folder 1 to folder 2. -:: +.. L27 - cp folder1/* folder2 +{{{ Show the ``Acknowledgements'' slide }}} -2. To rename a file, we use the ``mv`` command as, -:: +.. R27 - mv wonderland.txt alice.txt +Spoken Tutorial Project is a part of the "Talk to a Teacher" project. +It is supported by the National Mission on Education through ICT, MHRD, +Government of India. More information on this mission is available at the +given link. -.. L36 +.. L28 {{{ Show the Thankyou slide }}} -.. R36 +.. R28 Hope you have enjoyed this tutorial and found it useful. Thank you! -- cgit From 481e3674e6c12660a8a75ee3d1479efa07342d97 Mon Sep 17 00:00:00 2001 From: Jovina Date: Wed, 8 Aug 2012 12:23:20 +0530 Subject: Made changes based on the review. --- ult/ult_3/script.rst | 394 +++++++++++++++++++++++++-------------------------- ult/ult_3/ult3.tex | 260 ++++++++++++++++++++++----------- 2 files changed, 372 insertions(+), 282 deletions(-) diff --git a/ult/ult_3/script.rst b/ult/ult_3/script.rst index adc24b8..089adb9 100644 --- a/ult/ult_3/script.rst +++ b/ult/ult_3/script.rst @@ -3,15 +3,14 @@ .. At the end of this tutorial, you will be able to: - .. 1. Display the contents of files. - .. 2. Read only parts of a file. - .. 3. Look at the statistical information of a file. - + .. 1. Change file permissions + .. 2. Change ownership of files + .. Prerequisites .. ------------- -.. 1. Using Linux tools - Part 1 -.. 2. Using Linux tools - Part 2 +.. 1. Getting started with Linux +.. 2. Basic File Handling Script ------ @@ -23,8 +22,7 @@ team along with the logo of MHRD }}} .. R1 -Hello friends and Welcome to the tutorial on -'Using linux tools - Part 3'. +Hello friends and Welcome to the tutorial on "File permissions and ownership". .. L2 @@ -34,9 +32,8 @@ Hello friends and Welcome to the tutorial on At the end of this tutorial, you will be able to, - 1. Display the contents of files. - #. Read only parts of a file. - #. Look at the statistical information of a file. + 1. Change file permissions + #. Change ownership of files .. L3 @@ -45,174 +42,174 @@ At the end of this tutorial, you will be able to, .. R3 Before beginning this tutorial,we would suggest you to complete the -tutorial on "Using Linux tools - Part 1" and "Using Linux tools - Part 2". - -.. R4 - -Let us begin with how to read a while as a whole. -The ``cat`` command is the most commonly used command to display the -contents of files. To view the contents of a file, say, ``foo.txt``, we -simply say, +former tutorials as being displayed currently. .. L4 -:: - cat foo.txt +.. R4 -.. R5 +Let us now look at file permissions. Linux is a multi-user environment and +allows users to set permissions to their files to allow only a set of +people to read or write it. Similarly, it is not "safe" to allow system +files to be edited by any user. All this access control is possible in +Linux. -You can see the contents of the file on the terminal. +.. R5 -The cat command could also be used to concatenate the text of multiple -files. Say, we have two files,``foo.txt`` and ``bar.txt``, +To start, in the root directory, say, .. L5 + +{{{ Open the terminal }}} :: - cat foo.txt bar.txt + cd / + ls -l .. R6 -It shows the output of both the files concatenated on the standard output. -But if we had a long file,the output of ``cat`` command is not convenient -to read. -Let's look at the ``less`` command which turns out to be more useful in -such a case. - -``less `` allows you to view the contents of a text file one screen at a -time. +You get a list of all the sub-directories, with a lot of additional information. +Let us try and understand the output. .. L6 -:: - - less wonderland.txt - -.. R7 - -This shows us the file, one screen at a time. .. L7 -.. L8 +{{{ Highlight the required portions accordingly while narrating }}} -{{{ Show slide with, less }}} +.. R7 -.. R8 +The first column denotes the type and the access permissions of the file. +The second is the number of links. The third and fourth are the owner and +group of the file. The next field is the size of the file in bytes. The +next field is the date and time of modification and the last column is the +file name. +We shall look at the permissions of the file now, ie., the first column of +the output. + +The first character in the first column specifies, whether the item is a +file or a directory. Files have a ``-`` as the first character and +directories have a ``d``. + +The rest of the 9 characters are actually sets of 3 characters each. The +first set of 3 characters defines the permissions of the user, the next 3 +is for the group and the last three is for others. +Based on the values of these characters, access to files is provided or denied, +to each of the users. + +So, what does each of the three characters stand for? Let's suppose, we are +looking at the set, corresponding to the permissions of the user. In the +three characters, the first character can either be an ``r`` or a ``-``. +Which means, the user can either have the permission to read the file or +not. If the character is ``r``, then the user has the permission to read +the file, else not. Similarly, ``w`` stands for write permissions and +decides whether the user is allowed to write to the file or not. ``x`` stands +for execute permissions. You cannot execute a file, if you do not have the +permission to execute it. + +Similarly, the next set of characters decides the same permissions for the +members of the group, that the file is associated with. The last set of +characters defines these permissions for the users, who are neither owners +of the file nor in the group, with which the file is associated. + +Now, it's not as if these permissions cannot be changed. If you are the +owner of a file, you can change the permissions of a file, using the +``chmod`` command. -``less`` has a list of commands that it allows you to use, once you have -started viewing a file. A few of the common ones have been listed below. - * q: Quit. +.. R8 - * [Arrows]/[Page Up]/[Page Down]/[Home]/[End]: Navigation. +Let's say, we wish to give the execute permissions for a file, to both the +user and the group, how do we go about doing it? To be more explicit, given +a file ``foo.sh``, with the permissions flags as ``-rw-r--r--``, change it +to ``-rwxr-xr--``. - * ng: Jump to line number n. Default is the start of the file. +The following command does it for us, - * /pattern: Search for pattern. Regular expressions can be used. +.. L8 +:: - * h: Help. + chmod ug+x foo.sh + ls -l foo.sh .. R9 -Let us move ahead with the topic. Often we just would like to get some -statistical information about the file, rather than viewing the contents -of the file. The ``wc`` command prints these details for a file. +As you can see, the permissions have been set to the required value. But +what did we exactly do? .. L9 -:: - - wc wonderland.txt .. L10 -{{{ Highlight the required portions accordingly while narrating }}} +{{{ Switch to slide,Symbolic modes }}} .. R10 -As you can see, we get some information about the file. -The first number is the number of lines, the second is the number of words -and the third is the number of characters in the file. - -.. R11 - -Let us now look at a couple of commands that let you see parts of files, -instead of the whole file. The ``head`` and ``tail`` commands let you see -parts of files, as their names suggest, the start and the end of a file, -respectively. +Let us understand these parameters one by one. +The ``u`` is the user who is the owner of the file. +``g`` stands for group which consists of users who are members of the +file’s group. The reference ``o``, which we shall use later in the tutorial, +stands for others who are users of the file but not the owners or members of +a group. .. L11 -:: - head wonderland.txt +{{{ Switch to slide,Symbolic modes... }}} -.. R12 +.. R11 -It prints only the first 10 lines of the file. Similarly tail will print the -last 10 lines of the file. If we wish to change the number of lines that we -wish to view, we use the option ``-n``. +Let us now understand the operators. The plus operator adds the specified modes +to the specified classes. The minus operator removes the specified modes from +the specified classes. And finally the equal-to operator is used where modes +specified are to be made the exact modes for the specified classes. .. L12 -:: - head -n 1 wonderland.txt +{{{ Switch to slide,Symbolic modes... }}} -.. R13 +.. R12 -It prints only the first line of the file. Similarly, we could print only -the last line of the file. +We shall now learn the function of each mode. ``r`` stands for read which reads +a file or lists a directory’s contents. ``w`` is for write by which we can +write to a file or a directory. ``x`` stands for execute. As the name suggests, +it executes a file or recurse a directory tree. + +.. L13 -The most common use of the tail command is to monitor a continuously -changing file, for instance a log file. Say you have a process running, -which is continuously logging it's information to a file, for instance the -logs of the system messages. +{{{ Switch to the terminal }}} +{{{ Highlight the command, chmod ug+x foo.sh }}} -.. L13 -:: +.. R13 - tail -f /var/log/dmesg +In the command, the parameter ``ug+x`` is the mode parameter to the +``chmod`` command. It specifies the changes to be made to the +permissions of the file ``foo.sh``. +The ``u`` and ``g`` stand for the user and group, respectively. The ``x`` +stands for the execute permission and ``+`` stands for adding the +specified permission. So, essentially, we are asking ``chmod`` command to +add the execute permission for the user and group. The permission of others +will remain unchanged. .. R14 -This will show the last 10 lines of the file as expected, but along with -that, it starts monitoring the file. Any new lines added at the end of the -file, will be shown. To interrupt tail, while it is monitoring, hit -``Ctrl-C``. which will stop any process that is running from your -current shell. - -We looked at a couple of functions that allowed us to view a part of a file, -line-wise. We shall now look at a couple of commands that will allow us to look -at only certain sections of each line of a file and merge those parts. -Let's take the ``/etc/passwd`` file as our example file. It contains -information about each user of the system. +So, if we wished to add the execute permission to all the users, instead of +adding it to just the user and group, we would have instead said .. L14 :: - cat /etc/passwd + chmod a+x foo.sh .. R15 -In the output, let us look at only the first, fifth, sixth and the last -columns.The first column is the user name, the fifth column is the user info, -the sixth column is the home folder and the last column is the path of the -shell program that the user uses. -Let's say we wish to look at only the user names of all the users in the -file, how do we do it? +or .. L15 :: - - cut -d : -f 1 /etc/passwd -.. R16 + chmod ugo+x foo.sh -It gives us the required output. Let us understand this operation in detail. -The first option ``-d`` specifies the delimiter between the various fields in -the file, in this case it is the semicolon. If no delimiter is specified, -the TAB character is assumed to be the delimiter. The ``-f`` option specifies, -the field number that we want to choose. -You can print multiple fields, by separating the field numbers with a -comma. +.. R16 Pause the video here, try out the following exercise and resume the video. @@ -220,155 +217,152 @@ Pause the video here, try out the following exercise and resume the video. .. L17 -{{{ Show slide with exercise 3 }}} +{{{ Show slide with exercise }}} .. R17 -Print only the first, fifth and the seventh fields of the file ``/etc/passwd``. +Change the permissions of a directory along with all of its +sub-directories and files. -.. R18 +.. L18 -Switch to the terminal for solution +{{{ Show slide with solution }}} -.. L18 +.. R18 -{{{ continue from paused state }}} -{{{ Switch to the terminal }}} +To change the permissions of a directory along with all of its +sub-directories and files, recursively, we use the ``-R`` option +with the chmod command as shown -:: - - cut -d : -f 1,5,7 /etc/passwd + chmod go-r -R / .. R19 -We get the correct output. -Instead of choosing by fields, ``cut`` also allows us to choose on the -basis of characters or bytes. For instance, we could get the first 4 -characters of all the entries of the file, ``/etc/passwd`` by saying, +It is important to note that the permissions of a file can only be changed +by a user who is the owner of a file or the superuser. +The superuser or the ``root`` user is the only user +empowered to a certain set of tasks and hence is called the superuser. +What if we wish to change the ownership of a file? The ``chown`` command is +used to change the owner and group. +By default, the owner of a file (or directory) is the user that +created it. The group is a set of users that share the same access +permissions i.e., read, write and execute. +For instance, to change the user and the group of the file +``wonderland.txt`` to ``alice`` and ``users``, respectively, we say, .. L19 :: - cut -c 1-4 /etc/passwd + chown alice:users wonderland.txt .. R20 -The end limits of the ranges can take sensible default values, if they are -left out. For example, +We get an error saying, the operation is not permitted. +We have attempted to change the ownership of a file that we own, to a +different user. Logically, this shouldn't be possible, because, this can +lead to problems, in a multi-user system. +Only the superuser is allowed to change the ownership of a file from one +user to another. The command above would have worked, if you did login as +the superuser and then changed the ownership of the file. .. L20 -:: - cut -c -4 /etc/passwd +.. L21 + +{{{ Show Summary slide }}} .. R21 -It gives the same output as before. If the start position has not been -specified, it is assumed to be the start of the line. Similarly if the end -position is not specified, it is assumed to be the end of the line. +This brings us to the end of the tutorial.In this tutorial, we have learnt to, -.. L21 -:: + 1. Chane the permissions of files using the ``chmod'' command. + #. Use the ``chown'' command to change the ownership of files. + +.. L22 - cut -c 10- /etc/passwd +{{{ Show self assessment questions slide }}} .. R22 -It prints all the characters from the 10th character up to the end of the -line. -Let us now solve an inverse problem. Let's say we have two columns of data -in two different files, and we wish to view them side by side. +Here are some self assessment questions for you to solve -.. L22 + 1. For a given file, change mode to r, w, x for all (user, group, others) + + 2. What changes, on specifying only an owner in the "chown" command? + + - Only the owner of the file + - The group ownership of the file + - Neither the owner nor the group .. L23 -{{{ Show slide with, paste }}} +{{{ Solution of self assessment questions on slide }}} .. R23 -For instance, given a file containing the names of students in a file, -students.txt, and another file with the marks of the students,marks.txt, - -.. R24 - -we wish to view the contents, side by side. The ``paste`` command allows -us to do that. +And the answers, -.. L24 +1. The required result can be obtained as, :: - paste students.txt marks.txt - paste -s students.txt marks.txt - -.. R25 - -The first command gives us the output of the two files, next to each other -and the second command gives us the output one below the other. + chmod ugo+rwx wonderland.txt -Now, this problem is a bit unrealistic because, we wouldn't have the marks -of students in a file, without any information about the student to which -they belong. Let's say our marks file had the first column as the roll -number of the student, followed by the marks of the students. What would we -then do, to get the same output that we got before? -Essentially we need to use both, the ``cut`` and ``paste`` commands, but -how do we do that? That brings us to the concept of Redirection and Piping -which is covered in the next spoken tutorial. +2. For ``chown'' command, if only an owner (a username or numeric user ID) + is given, then, that user is made the owner of each given file, and the + files' group is not changed. -.. L25 -.. L26 +.. L24 -{{{ Switch to summary slide }}} +{{{ Show the SDES & FOSSEE slide }}} -.. R26 +.. R24 -This brings us to the end of this tutorial. -In this tutorial, we have learnt to, +Software Development techniques for Engineers and Scientists - SDES, is an +initiative by FOSSEE. For more information, please visit the given link. - 1. Display the contents of files using the ``cat`` command. - #. View the contents of a file one screen at a time using the - ``less`` command. - #. Display specific contents of file using the ``head`` and - ``tail`` commands. - #. Use the ``cut``, ``paste`` and ``wc`` commands. - -.. L27 +Free and Open-source Software for Science and Engineering Education - FOSSEE, is +based at IIT Bombay which is funded by MHRD as part of National Mission on +Education through ICT. -{{{ Show self assessment questions slide }}} +.. L25 -.. R27 +{{{ Show the ``About the Spoken Tutorial Project'' slide }}} -Here are some self assessment questions for you to solve +.. R25 -1. How to view lines from 1 to 15 in wonderland.txt? +Watch the video available at the following link. It summarises the Spoken +Tutorial project.If you do not have good bandwidth, you can download and +watch it. -2. In ``cut`` command, how to specify space as the delimiter? +.. L26 -.. L28 +{{{ Show the `` Spoken Tutorial Workshops'' slide }}} -{{{ Solution of self assessment questions on slide }}} +.. R26 -.. R28 +The Spoken Tutorial Project Team conducts workshops using spoken tutorials, +gives certificates to those who pass an online test. -And the answers, +For more details, contact contact@spoken-tutorial.org -1. We can use the head command as, -:: +.. L27 - head -15 wonderland.txt +{{{ Show the ``Acknowledgements'' slide }}} -2. We use the -d option with the command as, -:: +.. R27 - cut -d " " +Spoken Tutorial Project is a part of the "Talk to a Teacher" project. +It is supported by the National Mission on Education through ICT, MHRD, +Government of India. More information on this mission is available at the +given link. -.. L29 +.. L28 -{{{ Show the Thank you slide }}} +{{{ Show the Thankyou slide }}} -.. R29 +.. R28 Hope you have enjoyed this tutorial and found it useful. Thank you! diff --git a/ult/ult_3/ult3.tex b/ult/ult_3/ult3.tex index 2ece836..82fb652 100644 --- a/ult/ult_3/ult3.tex +++ b/ult/ult_3/ult3.tex @@ -1,130 +1,176 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Using Linux Tools -% -% Author: FOSSEE -% Copyright (c) 2009, FOSSEE, IIT Bombay -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\documentclass[12pt,compress]{beamer} - +\documentclass[17pt,compress]{beamer} +\usepackage{beamerthemesplit} \mode { \usetheme{Warsaw} \useoutertheme{infolines} \setbeamercovered{transparent} + \setbeamertemplate{navigation symbols}{} } +% Taken from Fernando's slides. +\usepackage{ae,aecompl} +\usepackage[scaled=.95]{helvet} \usepackage[english]{babel} \usepackage[latin1]{inputenc} -%\usepackage{times} \usepackage[T1]{fontenc} -% Taken from Fernando's slides. -\usepackage{ae,aecompl} -\usepackage{mathpazo,courier,euler} -\usepackage[scaled=.95]{helvet} +% change the alerted colour to LimeGreen +\definecolor{LimeGreen}{RGB}{50,205,50} +\setbeamercolor{structure}{fg=LimeGreen} +\author[FOSSEE]{} +\institute[IIT Bombay]{} +\date[]{} +% \setbeamercovered{transparent} -\definecolor{darkgreen}{rgb}{0,0.5,0} +% theme split +\usepackage{verbatim} +\newenvironment{colorverbatim}[1][]% +{% +\color{blue} +\verbatim +}% +{% +\endverbatim +}% +\usepackage{mathpazo,courier,euler} \usepackage{listings} \lstset{language=sh, basicstyle=\ttfamily\bfseries, - commentstyle=\color{red}\itshape, - stringstyle=\color{darkgreen}, showstringspaces=false, - keywordstyle=\color{blue}\bfseries} + keywordstyle=\color{black}\bfseries} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% DOCUMENT STARTS -\begin{document} +% logo +\logo{\includegraphics[height=1.30 cm]{3t-logo.pdf}} +\logo{\includegraphics[height=1.30 cm]{fossee-logo.pdf} -\begin{frame} +\hspace{7.5cm} +\includegraphics[scale=0.99]{fossee-logo.pdf}\\ +\hspace{281pt} +\includegraphics[scale=0.80]{3t-logo.pdf}} -\begin{center} -\vspace{12pt} +\begin{document} -\textcolor{blue}{\huge Using Linux Tools\\Part III} -\end{center} -\vspace{18pt} -\begin{center} -\vspace{10pt} -\includegraphics[scale=0.95]{../images/fossee-logo.png}\\ -\vspace{5pt} -\scriptsize Developed by FOSSEE Team, IIT-Bombay. \\ -\scriptsize Funded by National Mission on Education through ICT\\ -\scriptsize MHRD,Govt. of India\\ -\includegraphics[scale=0.30]{../images/iitb-logo.png}\\ -\end{center} +\sffamily \bfseries +\title +[File Permissions and Ownership] +{File Permissions and Ownership} +\author +[FOSSEE] +{\small Talk to a Teacher\\{\color{blue}\url{http://spoken-tutorial.org}}\\\vspace{0.25cm}National Mission on Education + through ICT\\{\color{blue}\url{ http://sakshat.ac.in}} \\ [0.77cm] + Contributed by FOSSEE Team \\IIT Bombay \\[0.3cm] +} + +% slide 1 +\begin{frame} + \titlepage \end{frame} + \begin{frame} \frametitle{Objectives} \label{sec-2} At the end of this tutorial, you will be able to, \begin{itemize} -\item Display the contents of files. -\item Read only parts of a file. -\item Look at the statistical information of a file. +\item Change file permissions +\item Change ownership of files \end{itemize} \end{frame} \begin{frame} -\frametitle{Pre-requisite} +\frametitle{Pre-requisites} \label{sec-3} -Spoken tutorial on - +Spoken tutorial on, \begin{itemize} -\item Using Linux tools -- Part I -\item Using Linux tools -- Part II +\item Getting started with Linux +\item Basic File Handling \end{itemize} \end{frame} \begin{frame}[fragile] - \frametitle{\texttt{less}} - \begin{itemize} - \item q: Quit - \item Arrows/Page Up/Page Down/Home/End: Navigation - \item ng: Jump to line number n - \item /pattern: Search. Regular expressions can be used - \item h: Help - \end{itemize} + \frametitle{Symbolic modes} + \begin{small} + \begin{center} + \begin{tabular}{lll} + Ref. & Class & Description \\ + \hline + u & user & the owner of the file \\ + g & group & users who are members of the \\ + & & file's group \\ + o & others & users who are not the owner of the \\ + & & file or members of the group\\ + a & all & all three of the above; is the same \\ + & & as \emph{ugo} + \end{tabular} + \end{center} + \end{small} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Symbolic modes...} + \begin{small} + \begin{center} + \begin{tabular}{ll} + Operator & Description \\ + \hline + + & adds the specified modes to the \\ + & specified classes \\ + - & removes the specified modes from the \\ + & specified classes \\ + = & modes specified are to be made the \\ + & exact modes for the specified classes + \end{tabular} + \end{center} + \end{small} \end{frame} \begin{frame} - \frametitle{Exercise 1} + \frametitle{Symbolic modes...} + \begin{small} + \begin{center} + \begin{tabular}{lll} + Mode & Name & Description \\ + \hline + r & read & read a file or list a directory's \\ + & & contents \\ + w & write & write to a file or directory \\\vspace{2pt} + x & execute & execute a file or recurse a \\ + & & directory tree + \end{tabular} + \end{center} + \end{small} +\end{frame} + + +\begin{frame} + \frametitle{Exercise} + \begin{itemize} + \item Change the permissions of a directory including, \begin{itemize} - \item Print only the first, fifth and the seventh fields of the file ``/etc/passwd''. + \item All it's sub-directories + \item All files within the directory + \end{itemize} \end{itemize} \end{frame} -\begin{frame}[fragile] - \frametitle{\texttt{paste}} - \begin{center} - \begin{tabular}{l|l} - \verb~students.txt~ & \verb~marks.txt~ \\ - Hussain & 89 92 85 \\ - Dilbert & 98 47 67 \\ - Anne & 67 82 76 \\ - Raul & 78 97 60 \\ - Sven & 67 68 69 \\ - \end{tabular} - \end{center} +\begin{frame} + \frametitle{Solution} + \begin{itemize} + \item \$ chmod go-r -R / + \end{itemize} \end{frame} \begin{frame} \frametitle{Summary} -\label{sec-8} In this tutorial, we have learnt to, - \begin{itemize} -\item Display the contents of files using the ``cat'' command. -\item View the contents of a file one screen at a time using the - ``less'' command. -\item Display specific contents of file using the ``head'' and - ``tail'' commands. -\item Use the ``cut'', ``paste'' and ``wc'' commands. +\item Chane the permissions of files using the ``chmod'' command +\item Use the ``chown'' command to change the ownership of files \end{itemize} \end{frame} @@ -134,9 +180,14 @@ Spoken tutorial on - \begin{enumerate} -\item How to view lines from 1 to 15 in wonderland.txt ? -\vspace{15pt} -\item In ``cut'' command, how to specify space as the delimiter ? +\item For a given file, change mode to r, w, x for all (user, group, others) +\vspace{10pt} +\item What changes, on specifying only an owner in the "chown" command? +\begin{itemize} +\item Only the owner of the file +\item The group ownership of the file +\item Neither the owner nor the group +\end{itemize} \end{enumerate} \end{frame} \begin{frame} @@ -145,26 +196,71 @@ Spoken tutorial on - \begin{enumerate} -\item \$ head -15 wonderland.txt +\item \$ chmod ugo+rwx \vspace{15pt} -\item \$ cut -d " " +\item Only the owner of the file \end{enumerate} \end{frame} + +\begin{frame} +\frametitle{SDES \& FOSSEE} +\begin{center} +\begin{itemize} +\item \small{SDES}\\ +\small{\color{LimeGreen}Software Development techniques for Engineers and Scientists} \\ +\scriptsize An initiative by FOSSEE. \\ +\vspace{3pt} +\scriptsize For more information on SDES, please visit {\color{blue}\url{http://fossee.in/sdes}}\\ +\vspace{10pt} +\item \small{FOSSEE}\\ +\small {\color{LimeGreen}Free and Open-source Software for \\Science and Engineering Education} \\ +\scriptsize Based at IIT Bombay, Funded by MHRD.\\ +\vspace{3pt} +\scriptsize Part of National Mission on Education through ICT \\(NME-ICT) \\ +\end{itemize} +\end{center} +\end{frame} + +\begin{frame} +\frametitle{About the Spoken Tutorial Project} +\begin{itemize} +\item Watch the video available at {\color{blue}\url{http://spoken-tutorial.org /What\_is\_a\_Spoken\_Tutorial}} +\item It summarises the Spoken Tutorial project +\item If you do not have good bandwidth, you can download and watch it +\end{itemize} +\end{frame} + +\begin{frame} +\frametitle{Spoken Tutorial Workshops}The Spoken Tutorial Project Team +\begin{itemize} +\item Conducts workshops using spoken tutorials +\item Gives certificates to those who pass an online test +\item For more details, please write to \\ \hspace {0.5cm}{\color{blue}contact@spoken-tutorial.org} +\end{itemize} +\end{frame} + +\begin{frame} +\frametitle{Acknowledgements} +\begin{itemize} +\item Spoken Tutorial Project is a part of the Talk to a Teacher project +\item It is supported by the National Mission on Education through ICT, MHRD, Government of India +\item More information on this Mission is available at: \\{\color{blue}\url{http://spoken-tutorial.org/NMEICT-Intro}} +\end{itemize} +\end{frame} + \begin{frame} \begin{block}{} \begin{center} - \textcolor{blue}{\Large THANK YOU!} + {\Large THANK YOU!} \end{center} \end{block} \begin{block}{} \begin{center} For more Information, visit our website\\ - \url{http://fossee.in/} + {\color{blue}\url{http://fossee.in/}} \end{center} \end{block} \end{frame} \end{document} - - -- cgit From e447a219a2e4d89c1bb09780519b84b5b1082b11 Mon Sep 17 00:00:00 2001 From: Jovina Date: Wed, 8 Aug 2012 12:25:17 +0530 Subject: Made changes based on the review. --- ult/ult_4/script.rst | 447 +++++++++++++++++++++++++++------------------------ ult/ult_4/ult4.tex | 285 ++++++++++++++++---------------- 2 files changed, 379 insertions(+), 353 deletions(-) diff --git a/ult/ult_4/script.rst b/ult/ult_4/script.rst index 09de00e..4b1bef0 100644 --- a/ult/ult_4/script.rst +++ b/ult/ult_4/script.rst @@ -3,15 +3,17 @@ .. At the end of this tutorial, you will be able to: - .. 1. Understand what is Redirection and Piping. - .. 2. Learn various features of shell. + .. 1. Display the contents of files. + .. 2. Read only parts of a file. + .. 3. Look at the statistical information of a file. .. Prerequisites .. ------------- -.. 1. Using Linux tools - Part 1 -.. 2. Using Linux tools - Part 2 -.. 3. Using Linux tools - Part 3 +.. 1. Getting started with Linux +.. 2. Basic File Handling +.. 3. File permissions and ownership + Script ------ @@ -24,7 +26,7 @@ team along with the logo of MHRD }}} .. R1 Hello friends and Welcome to the tutorial on -'Using linux tools - Part 4'. +'Advanced File Handling'. .. L2 @@ -34,8 +36,9 @@ Hello friends and Welcome to the tutorial on At the end of this tutorial, you will be able to, - 1. Understand what is Redirection and Piping. - #. Learn various features of the shell. + 1. Display the contents of files. + #. Read only parts of a file. + #. Look at the statistical information of a file. .. L3 @@ -43,367 +46,389 @@ At the end of this tutorial, you will be able to, .. R3 -Before beginning this tutorial, we would suggest you to complete the -tutorial on "Using Linux tools from Part 1 to Part 3". +Before beginning this tutorial,we would suggest you to complete the +former tutorials as being displayed currently. .. R4 -Let us begin with the concept of 'Redirection and Piping' which -performs the same operations as the ``cut`` and ``paste`` commands. - -Consider the files ``marks.txt`` and ``students.txt``.The contents of -the files are as following: +Let us begin with how to read a file as a whole. +The ``cat`` command is the most commonly used command for this purpose. +To view the contents of a file, say, ``foo.txt``, we +simply say, .. L4 -{{{ Open the terminal }}} +{{{ Switch to terminal }}} :: - cat marks1.txt - cat students.txt + cat foo.txt .. R5 -Now, let us view the contents of both these files side-by-side. +You can see the contents of the file on the terminal. + +The cat command could also be used to concatenate the text of multiple +files. Say, we have two files,``foo.txt`` and ``bar.txt``, .. L5 :: - cut -d " " -f 2- marks1.txt | paste -d " " students.txt - + cat foo.txt bar.txt .. R6 -Now, in order to view the same output in a new file at an other -location, we say, +It shows the output of both the files concatenated on the standard output. +But if we had a long file,the output of ``cat`` command is not convenient +to read. +Let's look at the ``less`` command which turns out to be more useful in +such a case. + +``less `` allows you to view the contents of a text file one screen at a +time. .. L6 :: - cut -d " " -f 2- marks1.txt > /tmp/m_tmp.txt - paste -d " " students.txt m_tmp.txt + less wonderland.txt + + .. R7 -First, let us try to understand the second solution,which is a two -step approach. -Later, we shall look at the first solution. +This shows us the file, one screen at a time. .. L7 .. L8 -{{{ Show slide, with Redirection }}} +{{{ Show slide with, less }}} .. R8 -The standard output, in general, goes to the display. -Hence, the output of the commands that we type, come out to the display. -This may not be what we always require. +``less`` has a list of commands that it allows you to use, once you have +started viewing a file. A few of the common ones have been listed below. -For instance, in the solution above, we use the cut command and get only -the required columns of the file and write the output to a new temporary -file. The ``>`` character is used to state that we wish to redirect the -output, and it is followed by the location to which we wish to redirect. -For example, + * q: to Quit. - command > file1 + * [Arrows]/[Page Up]/[Page Down]/[Home]/[End]:to Navigate through + the content. -.. L9 + * ng: to jump to a given line number (n).Default, is the first line of + a file. -{{{ Show slide, with Redirection... }}} + * /pattern: Search for pattern. Regular expressions can be used. -.. R9 - -Similarly, the standard input (stdin) can be redirected as, - - command < file1 + * h: for Help. -The input and the output redirection could be combined in a single command, -as, - - command < infile > outfile +.. R9 -There is actually a third kind of standard stream, called the Standard -error (stderr). Any error messages that you get, are coming through this -stream. Like ``stdout``, ``stderr`` also streams to the display by default, -but it could be redirected to a file, as well. +Let us move ahead with the topic. Often, we would like to get only some +statistical information about a file, rather than it's full contents. +The ``wc`` command prints these details for a file. -.. R10 +.. L9 +:: -For instance, let's reproduce an error using the ``cut`` command used -before. We shall change the ``-f`` option to ``-c`` + wc wonderland.txt .. L10 -{{{ Switch to terminal }}} -:: +{{{ Highlight the required portions accordingly while narrating }}} - cut -d " " -c 2- marks1.txt > /tmp/m_tmp.txt +.. R10 + +As you can see, we get some information about the file. +The first number is the number of lines, the second is the number of words +and the third is the number of characters in the file. .. R11 -This displays an error saying that the delimiter option should be used -with the fields option only. You may verify this by looking at the -``m_tmp.txt`` file, which is now empty.We can now, redirect the -``stderr`` also to a file, instead of showing it on the display. +Let us now look at a couple of commands that let's you see parts of files, +instead of the whole file. The ``head`` and ``tail`` commands allow you to see +parts of files. As their names suggest, they display the start and end of a +file, respectively. .. L11 :: - cut -d " " -f 2- marks1.txt 1> /tmp/m_tmp.txt 2> /tmp/m_err.txt + head wonderland.txt .. R12 -The above command redirects all the errors to the ``m_err.txt`` file -and the output to the ``m_tmp.txt`` file. When redirecting, 1 stands -for ``stdout`` and 2 stands for ``stderr``. - -Let us complete the solution by using the ``paste`` command. +It prints only the first 10 lines of the file. Similarly tail will print the +last 10 lines of the file. If we wish to change the number of lines that we +wish to view, we use the option ``-n``. .. L12 :: - paste -d " " students.txt m_tmp.txt + head -n 1 wonderland.txt .. R13 -So, in two steps we solved the problem of getting rid of the roll numbers -from the marks file and displaying the marks along with the names of the -students. Now, that we know how to redirect output, we could choose to -write the output to a file, instead of showing on the display. +It prints only the first line of the file. Similarly, we could print only +the last line of the file. -Let us now look at the first solution. +The most common use of the tail command is to monitor a continuously +changing file, for instance, a log file. Say, you have a process running, +which is continuously logging it's information to a file, for instance, the +logs of the system messages. .. L13 :: - cut -d " " -f 2- marks1.txt | paste -d " " students.txt - - -.. L14 - -{{{ Show slide, with Piping }}} + tail -f /var/log/dmesg .. R14 -First of all, the hyphen at the end is to ask the paste command to -read the standard input, instead of looking for a FILE. The ``man`` -page of ``paste`` command gives us this information. - -The character ``|`` is called a pipe. -Now, let us observe the ``cut`` command. If we look at the command only -upto the ``|`` character, it appears as a normal ``cut`` command . -So, the ``|`` character here, seems -to be joining the two commands in some way. -Essentially, what we are doing is, to redirect the output of the first -command to ``stdin`` and the second command takes the input from the ``stdin``. - -More generally, - - command1 | command2 +This will show the last 10 lines of the file as expected, but along with +that, it starts monitoring the file. Any new lines added at the end of the +file, will be shown. To interrupt tail, while it is monitoring, hit +``Ctrl-C``. -executes ``command1`` and sends it's output to the ``stdin``, which is then -used as the input for ``command2``. This activity is commonly called piping. +We looked at a couple of functions that allowed us to view a part of a file, +line-wise. We shall now look at a couple of commands that will allow us to look +at, only certain sections of each line of a file and merge those parts. +Let's take the ``/etc/passwd`` file as our example file. It contains +information about each user of the system. -.. L15 +.. L14 +:: -{{{ Show slide, with Piping... }}} + cat /etc/passwd .. R15 -This is roughly equivalent to using two redirects and a temporary file. - - command1 > tempfile - command2 < tempfile - rm tempfile +In the output, let us look at only the first, fifth, sixth and the last +columns.The first column is the ``user name``, the fifth column is the +``user info``, the sixth column is the ``home folder`` and the last column +is the ``path of the shell program`` that the user uses. +Let's say, we wish to look at only the user names in the file, how do we do it? -Also, given that a pipe is just a way to send the output of a command to -the ``stdin``, it should be obvious to you that we can use a chain of -pipes. Any number of commands can be piped together and therefore it should - be noted that it is not restricted to only two commands. +.. L15 +:: + + cut -d : -f 1 /etc/passwd -The Bash shell has some nice features, that make our job of using the shell -easier and much more pleasant. Let us have a look at few of them here. +.. R16 -Bash provides the feature of 'tab completion'. What does tab completion mean? -When you are typing a word, bash helps you to complete the word. -This can be done by entering some portion of the word and thereafter, -pressing the tab key. +It gives us the required output. Let us understand this operation in detail. +The first option ``-d`` specifies the delimiter between the various fields in +the file, in this case it is the ``semicolon``. If no delimiter is specified, +the TAB character is assumed to be the delimiter. The ``-f`` option specifies, +the field number that we wish to choose. +You can print multiple fields, by separating the field numbers with a +comma. -If you do not get the desired word on pressing the tab key, it implies that -either the word doesn't exist or the word cannot be decided unambiguously. -In the latter case, pressing the tab key for a second time,will list out -all the possibilities. +Pause the video here, try out the following exercise and resume the video. .. L16 -{{{ Show slide, with Tab-completion }}} - -.. R16 - -Bash provides tab completion for the following. +.. L17 - 1. File Names - 2. Directory Names - 3. Executable Names - 4. User Names (when they are prefixed with a ~) - 5. Host Names (when they are prefixed with a @) - 6. Variable Names (when they are prefixed with a $) +{{{ Show slide with exercise }}} .. R17 -For example, - -.. L17 - -{{{ Switch to terminal }}} -:: - - pas - ~/ +Print only the first, fifth and the seventh fields of the file ``/etc/passwd``. .. R18 -Bash also saves the history of the commands you have typed earlier. -This feature enables you to goto the previously typed commands and -use them as and when necessary. The up and down arrow keys will help -you to navigate -through these commands in the bash history. +Switch to the terminal for solution .. L18 -:: - +{{{ continue from paused state }}} +{{{ Switch to the terminal }}} + +:: + + cut -d : -f 1,5,7 /etc/passwd .. R19 -You may also search incrementally, for commands in your bash history. -``Ctrl-r`` searches for the commands that you have typed earlier. However, -it should be noted that the number of commands saved in the history is -limited, generally upto a 1000 commands. +We get the correct output. +Instead of choosing by fields, ``cut`` also allows us to choose on the +basis of characters or bytes. For instance, we could get the first 4 +characters of all the entries of the file, ``/etc/passwd`` by saying, .. L19 :: - pas + cut -c 1-4 /etc/passwd .. R20 -Unix recognizes certain special characters, called "meta characters", as -command directives. The shell meta characters are recognized anywhere they -appear in the command line, even if they are not surrounded by a blank space. -For this reason, it is always recommended to use only the characters A-Z, -a-z, 0-9, period, dash and underscore, when naming files and -directories on Unix. If your file or directory has a shell meta character -in the name, you may find it difficult to use this name in a shell command. +The end limits of the ranges can take sensible default values, if they are +left out. For example, .. L20 +:: -.. L21 - -{{{ Show slide, with Shell Meta Characters }}} + cut -c -4 /etc/passwd .. R21 -The characters that you see on the slide are the shell meta characters +It gives the same output as before. If the start position has not been +specified, it is assumed to be the start of the line. Similarly if the end +position is not specified, it is assumed to be the end of the line. + +.. L21 +:: + + cut -c 10- /etc/passwd .. R22 -Lets take an example, +It prints all the characters from the 10th character up to the end of the +line. +Let us now solve an inverse problem. Let's say we have two columns of data +in two different files, and we wish to view them side by side. .. L22 -{{{ Switch to terminal }}} -:: +.. L23 - ls file.? +{{{ Show slide with, paste }}} .. R23 -It means, run on a directory containing the files file, file.c, file.lst, -and myfile would list the files file.c and file.lst. However, - -.. L23 -:: - - ls file.? +For instance, consider a file 'students.txt' containing the names of students +and another file 'marks.txt' containing their respective marks. .. R24 -Run on the same directory would only list file.c because the ? only matches -one character, no more, no less. This helps you save time, while typing. - -For example, if there is a file called -california_cornish_hens_with_wild_rice and no other files whose names begin -with 'c', you could view the file without typing the whole name by typing -this +we wish to view the contents, side by side. The ``paste`` command allows +us to do that. .. L24 :: - more c* + paste students.txt marks.txt + paste -s students.txt marks.txt .. R25 -Here, the c* matches that long file name. -File-names containing meta characters can pose many problems and should -never be intentionally created. +The first command gives us the output of the two files, next to each other +and the second command gives us the output one below the other. + +Now, this problem is a bit unrealistic because, we wouldn't have the marks +of students in a file, without any information about the student to which +they belong. Let's say our marks file had the first column as the roll +number of the student, followed by the marks of the students. What would we +do then, to get the same output that we got before? + +Essentially we need to use both the ``cut`` and ``paste`` commands, but +how do we do that? That brings us to the concept of Redirection and Piping +which is covered in the next spoken tutorial. .. L25 .. L26 -{{{ Switch to Summary slide }}} +{{{ Switch to summary slide }}} .. R26 -This brings us to the end of the end of this tutorial. -In this tutorial, we have learnt to, +This brings us to the end of this tutorial. +In this tutorial, we have learnt to, - 1. Use the ``cut`` and ``paste`` commands in redirection. - 2. Use the pipe ( | ) character. - 3. Implement features of shell, like tab-completion and history. + 1. Display the contents of files using the ``cat`` command. + #. View the contents of a file one screen at a time using the + ``less`` command. .. L27 - -{{{ Show self assessment questions slide }}} - -.. R27 -Here are some self assessment questions for you to solve: +{{{ Switch to slide Summary... }}} - 1. Bash does not provide tab completion for Host Names. - True of False? +.. R27 - 2. In a file /home/test.txt ,first line is "data:myscripts:20:30". How do we - view only the minutes (last field, 30). - - - cut -d : -f 4 /home/test.txt - - cut -f 3 /home/test.txt - - cut -d : -f 3 /home/test.txt - - None of these + 1. Display only specific contents of file using the ``head`` and + ``tail`` commands. + #. Use the ``cut``, ``paste`` and ``wc`` commands. + .. L28 -{{{ Solutions for the self assessment questions on slide }}} +{{{ Show self assessment questions slide }}} .. R28 -And the answers: +Here are some self assessment questions for you to solve - 1. False. Bash provides tab completion for Host Names when they are prefixed - with a @ sign. +1. How to view lines from 1 to 15 in ``wonderland.txt``? - 2. The correct option would be -:: - - cut -d : -f 4 /home/test.txt +2. In ``cut`` command, how to specify space as the delimiter? .. L29 -{{{ Show the Thank you slide }}} +{{{ Solution of self assessment questions on slide }}} .. R29 +And the answers, + +1. We can use the head command as, +:: + + head -15 wonderland.txt + +2. We use the -d option with the command as, +:: + + cut -d " " + +.. L30 + +{{{ Show the SDES & FOSSEE slide }}} + +.. R30 + +Software Development techniques for Engineers and Scientists - SDES, is an +initiative by FOSSEE. For more information, please visit the given link. + +Free and Open-source Software for Science and Engineering Education - FOSSEE, is +based at IIT Bombay which is funded by MHRD as part of National Mission on +Education through ICT. + +.. L31 + +{{{ Show the ``About the Spoken Tutorial Project'' slide }}} + +.. R31 + +Watch the video available at the following link. It summarises the Spoken +Tutorial project.If you do not have good bandwidth, you can download and +watch it. + +.. L32 + +{{{ Show the `` Spoken Tutorial Workshops'' slide }}} + +.. R32 + +The Spoken Tutorial Project Team conducts workshops using spoken tutorials, +gives certificates to those who pass an online test. + +For more details, contact contact@spoken-tutorial.org + +.. L33 + +{{{ Show the ``Acknowledgements'' slide }}} + +.. R33 + +Spoken Tutorial Project is a part of the "Talk to a Teacher" project. +It is supported by the National Mission on Education through ICT, MHRD, +Government of India. More information on this mission is available at the +given link. + +.. L34 + +{{{ Show the Thank you slide }}} + +.. R34 + Hope you have enjoyed this tutorial and found it useful. Thank you! diff --git a/ult/ult_4/ult4.tex b/ult/ult_4/ult4.tex index 7181db5..396dceb 100644 --- a/ult/ult_4/ult4.tex +++ b/ult/ult_4/ult4.tex @@ -5,178 +5,132 @@ % Copyright (c) 2009, FOSSEE, IIT Bombay %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\documentclass[12pt,compress]{beamer} +\documentclass[17pt,compress]{beamer} +\usepackage{beamerthemesplit} \mode { \usetheme{Warsaw} \useoutertheme{infolines} \setbeamercovered{transparent} + \setbeamertemplate{navigation symbols}{} } +% Taken from Fernando's slides. +\usepackage{ae,aecompl} +\usepackage[scaled=.95]{helvet} \usepackage[english]{babel} \usepackage[latin1]{inputenc} -%\usepackage{times} \usepackage[T1]{fontenc} -% Taken from Fernando's slides. -\usepackage{ae,aecompl} -\usepackage{mathpazo,courier,euler} -\usepackage[scaled=.95]{helvet} - -\definecolor{darkgreen}{rgb}{0,0.5,0} +% change the alerted colour to LimeGreen +\definecolor{LimeGreen}{RGB}{50,205,50} +\setbeamercolor{structure}{fg=LimeGreen} +\author[FOSSEE]{} +\institute[IIT Bombay]{} +\date[]{} +% \setbeamercovered{transparent} + +% theme split +\usepackage{verbatim} +\newenvironment{colorverbatim}[1][]% +{% +\color{blue} +\verbatim +}% +{% +\endverbatim +}% +\usepackage{mathpazo,courier,euler} \usepackage{listings} \lstset{language=sh, basicstyle=\ttfamily\bfseries, - commentstyle=\color{red}\itshape, - stringstyle=\color{darkgreen}, showstringspaces=false, - keywordstyle=\color{blue}\bfseries} + keywordstyle=\color{black}\bfseries} + +% logo +\logo{\includegraphics[height=1.30 cm]{3t-logo.pdf}} +\logo{\includegraphics[height=1.30 cm]{fossee-logo.pdf} + +\hspace{7.5cm} +\includegraphics[scale=0.99]{fossee-logo.pdf}\\ +\hspace{281pt} +\includegraphics[scale=0.80]{3t-logo.pdf}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % DOCUMENT STARTS \begin{document} -\begin{frame} +\sffamily \bfseries +\title +[Advanced File Handling] +{Advanced File Handling} +\author +[FOSSEE] +{\small Talk to a Teacher\\{\color{blue}\url{http://spoken-tutorial.org}}\\\vspace{0.25cm}National Mission on Education + through ICT\\{\color{blue}\url{ http://sakshat.ac.in}} \\ [1.65cm] + Contributed by FOSSEE Team \\IIT Bombay \\[0.3cm] +} -\begin{center} -\vspace{12pt} -\textcolor{blue}{\huge Using Linux Tools\\Part IV} -\end{center} -\vspace{18pt} -\begin{center} -\vspace{10pt} -\includegraphics[scale=0.95]{../images/fossee-logo.png}\\ -\vspace{5pt} -\scriptsize Developed by FOSSEE Team, IIT-Bombay. \\ -\scriptsize Funded by National Mission on Education through ICT\\ -\scriptsize MHRD,Govt. of India\\ -\includegraphics[scale=0.30]{../images/iitb-logo.png}\\ -\end{center} +% slide 1 +\begin{frame} + \titlepage \end{frame} + \begin{frame} \frametitle{Objectives} \label{sec-2} At the end of this tutorial, you will be able to, \begin{itemize} -\item Understand what is Redirection and Piping. -\item Learn various features of the shell. +\item Display the contents of files +\item Read only parts of a file +\item Look at the statistical information of a file \end{itemize} \end{frame} \begin{frame} -\frametitle{Pre-requisite} +\frametitle{Pre-requisites} \label{sec-3} -Spoken tutorial on - +Spoken tutorial on, \begin{itemize} -\item Using Linux tools -- Part I -\item Using Linux tools -- Part II -\item Using Linux tools -- Part III +\item Getting started with Linux +\item Basic File Handling \end{itemize} \end{frame} \begin{frame}[fragile] - \frametitle{Redirection} - - \begin{itemize} - \item The standard output (stdout) stream goes to the display - \item Not always, what we need - \item First solution, redirects output to a file - \item \texttt{>} states that output is redirected; It is - followed by location to redirect - \end{itemize} - \begin{lstlisting} - $ command > file1 - \end{lstlisting} % $ - \begin{itemize} - \item \texttt{>} creates a new file at specified location - \item \texttt{>>} appends to a file at specified location - \end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{Redirection \ldots} - \begin{itemize} - \item Similarly, the standard input (stdin) can be redirected - \end{itemize} - \begin{lstlisting} - $ command < file1 - \end{lstlisting} % $ - \begin{itemize} - \item input and the output redirection could be combined - \end{itemize} - \begin{lstlisting} - $ command < infile > outfile - \end{lstlisting} % $ - \begin{itemize} - \item Standard error (stderr) is the third standard stream - \item All error messages come through this stream - \item \texttt{stderr} can also be redirected - \end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{Piping} - \begin{lstlisting} - $ cut -d " " -f 2- marks1.txt \ - | paste -d " " students.txt - - \end{lstlisting} % $ - \begin{itemize} - \item \texttt{-} instead of FILE asks \texttt{paste} to read from - \texttt{stdin} - \item \texttt{cut} command is a normal command - \item the \texttt{|} seems to be joining the two commands - \item Redirects output of first command to \texttt{stdin}, which - becomes input to the second command - \item This is called piping; \texttt{|} is called a pipe - \end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{Piping \ldots} - \begin{itemize} - \item Roughly same as -- 2 redirects and a temporary file - \end{itemize} - \begin{lstlisting} - $ command1 > tempfile - $ command2 < tempfile - $ rm tempfile - \end{lstlisting} % $ - \begin{itemize} - \item Any number of commands can be piped together + \frametitle{\texttt{less}} + \begin{itemize} + \item q: Quit + \item Arrows/Page Up/Page Down/Home/End: Navigation + \item ng: Jump to line number n + \item /pattern: Search. Regular expressions can be used + \item h: Help \end{itemize} \end{frame} -\subsection{Features of the Shell} - -\begin{frame}[fragile] - \frametitle{Tab-completion} +\begin{frame} + \frametitle{Exercise 1} \begin{itemize} - \item Bash provides tab completion for the following. - \begin{enumerate} - \item File Names - \item Directory Names - \item Executable Names - \item User Names (when they are prefixed with a \~{}) - \item Host Names (when they are prefixed with a @) - \item Variable Names (when they are prefixed with a \$) - \end{enumerate} + \item Print only the first, fifth and the seventh fields of the file \verb~/etc/passwd~ \end{itemize} \end{frame} \begin{frame}[fragile] - \frametitle{Shell Meta Characters} - \begin{itemize} - \item ``meta characters'' are special command directives - \item File-names shouldn't have meta-characters - \item The following are the shell meta characters -- - \begin{itemize} - \item \verb+/<>!$%^&*|{}[]"'`~;+ - \end{itemize} - \end{itemize} + \frametitle{\texttt{paste}} + \begin{center} + \begin{tabular}{l|l} + \verb~students.txt~ & \verb~marks.txt~ \\ + Hussain & 89 92 85 \\ + Dilbert & 98 47 67 \\ + Anne & 67 82 76 \\ + Raul & 78 97 60 \\ + Sven & 67 68 69 \\ + \end{tabular} + \end{center} \end{frame} \begin{frame} @@ -185,31 +139,31 @@ Spoken tutorial on - In this tutorial, we have learnt to, +\begin{itemize} +\item Display the contents of files using the ``cat'' command. +\item View the contents of a file one screen at a time using the + ``less'' command. +\end{itemize} +\end{frame} +\begin{frame} +\frametitle{Summary...} \begin{itemize} -\item Use the ``cut'' and ``paste'' commands in redirection. -\item Use the pipe ( | ) character. -\item Implement features of shell like tab-completion and history. +\item Display specific contents of file using the ``head'' and + ``tail'' commands. +\item Use the ``cut'', ``paste'' and ``wc'' commands. \end{itemize} \end{frame} + \begin{frame}[fragile] \frametitle{Evaluation} \label{sec-9} \begin{enumerate} -\item Bash does not provide tab completion for Host Names. \\ - True or False? -\vspace{12pt} -\item In a file /home/test.txt ,first line is "data:myscripts:20:30".How to - view only minutes(last field, 30). -\vspace{5pt} -\begin{itemize} -\item cut -d : -f 4 /home/test.txt -\item cut -f 3 /home/test.txt -\item cut -d : -f 3 /home/test.txt -\item None of these -\end{itemize} +\item How to view lines from 1 to 15 in \verb~wonderland.txt~ ? +\vspace{15pt} +\item In ``cut'' command, how to specify space as the delimiter ? \end{enumerate} \end{frame} \begin{frame} @@ -218,22 +172,69 @@ Spoken tutorial on - \begin{enumerate} -\item False +\item \$ head -15 \verb~wonderland.txt~ \vspace{15pt} -\item cut -d : -f 4 /home/test.txt +\item \$ cut -d " " \end{enumerate} \end{frame} + +\begin{frame} +\frametitle{SDES \& FOSSEE} +\begin{center} +\begin{itemize} +\item \small{SDES}\\ +\small{\color{LimeGreen}Software Development techniques for Engineers and Scientists} \\ +\scriptsize An initiative by FOSSEE. \\ +\vspace{3pt} +\scriptsize For more information on SDES, please visit {\color{blue}\url{http://fossee.in/sdes}}\\ +\vspace{10pt} +\item \small{FOSSEE}\\ +\small {\color{LimeGreen}Free and Open-source Software for \\Science and Engineering Education} \\ +\scriptsize Based at IIT Bombay, Funded by MHRD.\\ +\vspace{3pt} +\scriptsize Part of National Mission on Education through ICT \\(NME-ICT) \\ +\end{itemize} +\end{center} +\end{frame} + +\begin{frame} +\frametitle{About the Spoken Tutorial Project} +\begin{itemize} +\item Watch the video available at {\color{blue}\url{http://spoken-tutorial.org /What\_is\_a\_Spoken\_Tutorial}} +\item It summarises the Spoken Tutorial project +\item If you do not have good bandwidth, you can download and watch it +\end{itemize} +\end{frame} + +\begin{frame} +\frametitle{Spoken Tutorial Workshops}The Spoken Tutorial Project Team +\begin{itemize} +\item Conducts workshops using spoken tutorials +\item Gives certificates to those who pass an online test +\item For more details, please write to \\ \hspace {0.5cm}{\color{blue}contact@spoken-tutorial.org} +\end{itemize} +\end{frame} + +\begin{frame} +\frametitle{Acknowledgements} +\begin{itemize} +\item Spoken Tutorial Project is a part of the Talk to a Teacher project +\item It is supported by the National Mission on Education through ICT, MHRD, Government of India +\item More information on this Mission is available at: \\{\color{blue}\url{http://spoken-tutorial.org/NMEICT-Intro}} +\end{itemize} +\end{frame} + \begin{frame} \begin{block}{} \begin{center} - \textcolor{blue}{\Large THANK YOU!} + {\Large THANK YOU!} \end{center} \end{block} \begin{block}{} \begin{center} For more Information, visit our website\\ - \url{http://fossee.in/} + {\color{blue}\url{http://fossee.in/}} \end{center} \end{block} \end{frame} -- cgit From 4e7075d23dfff0583c17afd1cceb9cc44164212c Mon Sep 17 00:00:00 2001 From: Jovina Date: Wed, 8 Aug 2012 12:27:24 +0530 Subject: Made changes based on the review. --- ult/ult_5/script.rst | 333 +++++++++++++++++++++++++-------------------------- ult/ult_5/ult5.tex | 252 +++++++++++++++++++++++++++----------- 2 files changed, 340 insertions(+), 245 deletions(-) diff --git a/ult/ult_5/script.rst b/ult/ult_5/script.rst index e112ff7..2937397 100644 --- a/ult/ult_5/script.rst +++ b/ult/ult_5/script.rst @@ -3,17 +3,15 @@ .. At the end of this tutorial, you will be able to: - .. 1. - .. 2. + .. 1. Understand what is Redirection and Piping. + .. 2. Learn various features of shell. .. Prerequisites .. ------------- -.. 1. Using Linux tools - Part 1 -.. 2. Using Linux tools - Part 2 -.. 3. Using Linux tools - Part 3 -.. 4. Using Linux tools - Part 4 - +.. 1. Getting started with Linux +.. 2. Basic File Handling +.. 4. Advanced file handling Script ------ @@ -26,7 +24,7 @@ team along with the logo of MHRD }}} .. R1 Hello friends and Welcome to the tutorial on -'Using linux tools - Part 5'. +'Redirection and Piping'. .. L2 @@ -36,11 +34,8 @@ Hello friends and Welcome to the tutorial on At the end of this tutorial, you will be able to, - 1. Sort lines of text files - #. Print lines matching a pattern - #. Translate or delete characters - #. Omit repeated lines. - + 1. Understand what is Redirection. + #. Learn the concept of Piping. .. L3 @@ -49,14 +44,15 @@ At the end of this tutorial, you will be able to, .. R3 Before beginning this tutorial,we would suggest you to complete the -tutorial on "Using Linux tools from Part 1 to Part 4". +former tutorials as being displayed currently. .. R4 -In this tutorial, we shall learn about text processing. -TO begin with, consider data kept in two files, namely marks1.txt and -students.txt -Let us see what data they contain. Open a terminal and type, +Let us begin with the concept of 'Redirection and Piping' which +performs the same operations as the ``cut`` and ``paste`` commands. + +Consider the files ``marks.txt`` and ``students.txt``.The contents of +the files are as following: .. L4 @@ -68,274 +64,267 @@ Let us see what data they contain. Open a terminal and type, .. R5 -Let's say we wish to sort the output in the alphabetical order -of the names of the files. We can use the ``sort`` command for this -purpose. - -We just pipe the previous output to the ``sort`` command as, +Now, let us view the contents of both these files side-by-side. .. L5 :: - cut -d " " -f 2- marks1.txt | paste -d " " students.txt -| sort + cut -d " " -f 2- marks1.txt | paste -d " " students.txt - .. R6 -Let's say we wish to sort the names, based on the marks in the first -subject i.e. the first column after the name. ``sort`` command also allows us to -specify the delimiter between the fields and sort the data on a particular -field. ``-t`` option is used to specify the delimiter and ``-k`` option -is used to specify the field. +Now, in order to view the same output in a new file at an other +location, we say, .. L6 :: - cut -d " " -f 2- marks1.txt | paste -d " " students.txt -| sort -t " " -k 2 + cut -d " " -f 2- marks1.txt > /tmp/m_tmp.txt + paste -d " " students.txt m_tmp.txt -.. L7 +.. R7 -{{{ Show slide with, Sort... }}} +First, let us try to understand the second solution,which is a two +step approach. +Later, we shall look at the first solution. -.. R7 +.. L7 + +.. L8 -This command give us a sorted output as required. But, what if we would -like the output to appear in the reverse order. ``-r`` option allows the output -to be sorted in the reverse order and the ``-n`` option is used to choose -a numerical sorting. +{{{ Show slide, with Redirection }}} .. R8 -Let us do it on the terminal and see for ourselves, +The standard output, in general, goes to the display. +But, this may not be what we always require. -.. L8 +For instance, in the solution above, we use the cut command and get only +the required columns of the file and write the output to a new temporary +file. The ``>`` character is used to state that we wish to redirect the +output, and it is followed by the location to which we wish to redirect. +For example, -{{{ Switch to the terminal }}} -:: + command > file1 - cut -d " " -f 2- marks1.txt | paste -d " " students.txt -| - sort -t " " -k 2 -rn +.. L9 + +{{{ Show slide, with Redirection.. }}} .. R9 -Suppose, While you are compiling the student marklist, Anne walks up to you and -wants to know her marks. You, being a kind person that you are, oblige. -But you do not wish to her to see the marks that others have scored. What -do you do? Here, the ``grep`` command comes to your rescue. +Similarly, the standard input (stdin) can be redirected as, + + command < file1 -``grep`` is a command line text search utility. You can use it to search -for Anne and show her, what she scored. ``grep`` allows us to search for a -search string in files. But we could, like any other command, pipe the -output of other commands to it. So, we shall use the previous combination -of cut and paste that we had, to get the marks of students along with their -names and search for Anne in that. +The input and the output redirection could be combined in a single command, +as, -.. L9 -:: + command < infile > outfile - cut -d " " -f 2- marks1.txt | paste -d " " students.txt - | grep Anne +.. L10 -.. R10 +{{{ Show slide, with stderr }}} -This will give us only the line containing the word Anne as the output. -The grep command is by default case-sensitive. So, we wouldn't have got -the result if we had searched for anne, with a small a, instead of -Anne, with a capital a. But, what if we didn't know, whether the name was -capitalized or not? ``grep`` allows you to do case-insensitive searches -by using the ``-i`` option. -.. L10 -:: +.. R10 - cut -d " " -f 2- marks1.txt | paste -d " " students.txt - | grep -i Anne +There is actually a third kind of standard stream, called the Standard +error (stderr). Any error messages that you get, are coming through this +stream. Like ``stdout``, ``stderr`` also streams to the display by default, +but it could be redirected to a file, as well. .. R11 -Now, in another scenario, if we wished to print all the lines, which do -not contain the word Anne, we could use the ``-v`` option. +For instance, let's reproduce an error using the ``cut`` command used +before. We shall change the ``-f`` option to ``-c`` .. L11 + +{{{ Switch to terminal }}} :: - cut -d " " -f 2- marks1.txt | paste -d " " students.txt - | grep -iv Anne + cut -d " " -c 2- marks1.txt > /tmp/m_tmp.txt .. R12 -grep allows us to do more complex searches, for instance, searching for -sentences starting or ending with a particular pattern and regular -expression based searches. - -{{{ Show slide with, tr }}} - -``tr`` is a command that takes two sets of characters as parameters, and -replaces occurrences of the characters in the first set with the -corresponding elements from the other set. It reads from the standard -output and writes to the standard output. - -For instance, if we wish to replace all the lower case letters in the -students file with upper case, we can do it as, +This displays an error saying that the delimiter option should be used +with the fields option only. You may verify this by looking at the +``m_tmp.txt`` file, which is now empty.We can now, redirect the +``stderr`` also to a file, instead of showing it on the display. .. L12 - -{{{ Switch to the terminal }}} :: - cat students.txt | tr a-z A-Z + cut -d " " -f 2- marks1.txt 1> /tmp/m_tmp.txt 2> /tmp/m_err.txt .. R13 -A common task is to remove empty newlines from a file. The ``-s`` flag -causes ``tr`` to compress sequences of identical adjacent characters in its -output to a single token. For example, +The above command redirects all the errors to the ``m_err.txt`` file +and the output to the ``m_tmp.txt`` file. When redirecting, 1 stands +for ``stdout`` and 2 stands for ``stderr``. + +Let us complete the solution by using the ``paste`` command. .. L13 :: - tr -s '\n' '\n' + paste -d " " students.txt m_tmp.txt .. R14 -Hit enter 2-3 times and see that every time we hit enter we get a newline. +So, in two steps we solved the problem of getting rid of the roll numbers +from the marks file and displaying the marks along with the names of the +students. Now, that we know how to redirect output, we could choose to +write the output to a file, instead of showing on the display. + +Let us now look at the first solution. .. L14 :: - - + cut -d " " -f 2- marks1.txt | paste -d " " students.txt - + +.. L15 + +{{{ Show slide, with Piping }}} .. R15 -It replaces sequences of one or more newline characters with a single newline. +First of all, the hyphen at the end is to ask the paste command to +read the standard input, instead of looking for a FILE. The ``man`` +page of ``paste`` command gives us this information. -The ``-d`` flag causes ``tr`` to delete all tokens of the specified set of -characters from its input. In this case, only a single character set -argument is used. The following command removes carriage return characters, -thereby converting a file in DOS/Windows format to the Unix format. +Now, let us observe the ``cut`` command. If we look at the command only +upto the ``|`` character, it appears as a normal ``cut`` command . -.. L15 -:: +.. L16 - cat foo.txt | tr -d '\r' > bar.txt +{{{ Show slide, with Piping.. }}} .. R16 -The ``-c`` flag complements the first set of characters. +So, the ``|`` character here, seems +to be joining the two commands in some way. +Essentially, what we are doing is, to redirect the output of the first +command to ``stdin`` and the second command takes the input from the ``stdin``. +This activity is commonly called piping and the character ``|`` is called +a pipe. -.. L16 -:: +.. L17 - tr -cd '[:alnum:]' +{{{ Show slide, with Piping... }}} .. R17 -It therefore removes all non-alphanumeric characters. +This is roughly equivalent to using two redirects and a temporary file. -Let us consider one more scenario.Suppose we have a list of items, say books, -and we wish to obtain a list which names of all the books only once, without -any duplicates. To achieve this, we use the ``uniq`` command. Let us first -have a look at our file + command1 > tempfile + command2 < tempfile + rm tempfile -.. L17 -:: +Also, given that a pipe is just a way to send the output of a command to +the ``stdin``, it should be obvious to you that we can use a chain of +pipes. Any number of commands can be piped together and therefore it should + be noted that it is not restricted to only two commands. - cat items.txt +.. L18 -.. R18 +{{{ Switch to Summary slide }}} -Now, let us try and get rid of the duplicate lines from this file using -the ``uniq`` command. +.. R18 -.. L18 -:: +This brings us to the end of the end of this tutorial. +In this tutorial, we have learnt to, - uniq items.txt + 1. Use the ``cut`` and ``paste`` commands in redirection. + 2. Use the pipe ( | ) character. + +.. L19 + +{{{ Show self assessment questions slide }}} .. R19 -Nothing happens! Why? The ``uniq`` command removes duplicate lines only when -they are next to each other. So, henceforth, we get a sorted file from the -original file and work with that file. +Here are some self assessment questions for you to solve: -.. L19 -:: +1. How will you redirect the content of a file to a device ? + +2. How to view last field(30), in a file located at /home/test.txt whose + first line is "data:myscripts:20:30" + + - cut -d : -f 4 /home/test.txt + - cut -f 3 /home/test.txt + - cut -d : -f 3 /home/test.txt + + +.. L20 - sort items.txt | uniq +{{{ Solutions for the self assessment questions on slide }}} .. R20 -``uniq -u`` command gives the lines which are unique and do not have any -duplicates in the file. ``uniq -d`` outputs only those lines which -have duplicates. +And the answers: -.. L20 +1. A file can be redirected to a device as, +:: + + cat filename > device +For eg: :: - uniq -u items-sorted.txt - -.. R21 + cat sound.wav > /dev/audio + -The ``-c`` option displays the number of times each line occurs in the file. +2. The correct option would be +:: + + cut -d : -f 4 /home/test.txt .. L21 -:: - uniq -dc items-sorted.txt +{{{ Show the SDES & FOSSEE slide }}} + +.. R21 + +Software Development techniques for Engineers and Scientists - SDES, is an +initiative by FOSSEE. For more information, please visit the given link. + +Free and Open-source Software for Science and Engineering Education - FOSSEE, is +based at IIT Bombay which is funded by MHRD as part of National Mission on +Education through ICT. .. L22 -{{{ Show summary slide }}} +{{{ Show the ``About the Spoken Tutorial Project'' slide }}} .. R22 -This brings us to the end of the end of this tutorial. -In this tutorial, we have learnt to, - - 1. Use the ``sort`` command to sort lines of text files. - #. Use the ``grep`` command to search text pattern. - #. Use the ``tr`` command to translate and/or delete characters. - #. Use the ``uniq`` command to omit repeated lines in a text. +Watch the video available at the following link. It summarises the Spoken +Tutorial project.If you do not have good bandwidth, you can download and +watch it. .. L23 -{{{ Show self assessment questions slide }}} +{{{ Show the `` Spoken Tutorial Workshops'' slide }}} .. R23 -Here are some self assessment questions for you to solve +The Spoken Tutorial Project Team conducts workshops using spoken tutorials, +gives certificates to those who pass an online test. - 1. To obtain patterns; one per line, which of the following command is used ? - - - grep -f - - grep -i - - grep -v - - grep -e - - 2. Translate the word 'linux' to upper-case. - - 3. Sort the output of the ``ls -al`` command. +For more details, contact contact@spoken-tutorial.org .. L24 -{{{ Solution of self assessment questions on slide }}} +{{{ Show the ``Acknowledgements'' slide }}} .. R24 -And the answers, - - 1. In order to obtain patterns one per line, we use the ``grep`` command - alongwith the -f option. - - 2. We use the tr command to change the word into uppercase -:: - - echo 'linux' | tr a-z A-Z - - - 3. We use the sort command as, -:: - - ls -al | sort -n -k5 -The -n means "sort numerically", and the -k5 option means to key off of -column five. +Spoken Tutorial Project is a part of the "Talk to a Teacher" project. +It is supported by the National Mission on Education through ICT, MHRD, +Government of India. More information on this mission is available at the +given link. .. L25 diff --git a/ult/ult_5/ult5.tex b/ult/ult_5/ult5.tex index 293b76f..7f22fc6 100644 --- a/ult/ult_5/ult5.tex +++ b/ult/ult_5/ult5.tex @@ -5,113 +5,174 @@ % Copyright (c) 2009, FOSSEE, IIT Bombay %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\documentclass[12pt,compress]{beamer} - +\documentclass[17pt,compress]{beamer} +\usepackage{beamerthemesplit} \mode { \usetheme{Warsaw} \useoutertheme{infolines} \setbeamercovered{transparent} + \setbeamertemplate{navigation symbols}{} } +% Taken from Fernando's slides. +\usepackage{ae,aecompl} +\usepackage[scaled=.95]{helvet} \usepackage[english]{babel} \usepackage[latin1]{inputenc} -%\usepackage{times} \usepackage[T1]{fontenc} -% Taken from Fernando's slides. -\usepackage{ae,aecompl} -\usepackage{mathpazo,courier,euler} -\usepackage[scaled=.95]{helvet} +% change the alerted colour to LimeGreen +\definecolor{LimeGreen}{RGB}{50,205,50} +\setbeamercolor{structure}{fg=LimeGreen} +\author[FOSSEE]{} +\institute[IIT Bombay]{} +\date[]{} +% \setbeamercovered{transparent} -\definecolor{darkgreen}{rgb}{0,0.5,0} +% theme split +\usepackage{verbatim} +\newenvironment{colorverbatim}[1][]% +{% +\color{blue} +\verbatim +}% +{% +\endverbatim +}% +\usepackage{mathpazo,courier,euler} \usepackage{listings} \lstset{language=sh, basicstyle=\ttfamily\bfseries, - commentstyle=\color{red}\itshape, - stringstyle=\color{darkgreen}, showstringspaces=false, - keywordstyle=\color{blue}\bfseries} + keywordstyle=\color{black}\bfseries} + +% logo +\logo{\includegraphics[height=1.30 cm]{../images/3t-logo.pdf}} +\logo{\includegraphics[height=1.30 cm]{../images/fossee-logo.pdf} +\hspace{7.5cm} +\includegraphics[scale=0.99]{../images/fossee-logo.pdf}\\ +\hspace{281pt} +\includegraphics[scale=0.80]{../images/3t-logo.pdf}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % DOCUMENT STARTS \begin{document} -\begin{frame} +\sffamily \bfseries +\title +[Redirection and Piping] +{Redirection and Piping} +\author +[FOSSEE] +{\small Talk to a Teacher\\{\color{blue}\url{http://spoken-tutorial.org}}\\\vspace{0.25cm}National Mission on Education + through ICT\\{\color{blue}\url{ http://sakshat.ac.in}} \\ [1.65cm] + Contributed by FOSSEE Team \\IIT Bombay \\[0.3cm] +} -\begin{center} -\vspace{12pt} -\textcolor{blue}{\huge Using Linux Tools} -\end{center} -\vspace{18pt} -\begin{center} -\vspace{10pt} -\includegraphics[scale=0.95]{../images/fossee-logo.png}\\ -\vspace{5pt} -\scriptsize Developed by FOSSEE Team, IIT-Bombay. \\ -\scriptsize Funded by National Mission on Education through ICT\\ -\scriptsize MHRD,Govt. of India\\ -\includegraphics[scale=0.30]{../images/iitb-logo.png}\\ -\end{center} +% slide 1 +\begin{frame} + \titlepage \end{frame} + \begin{frame} \frametitle{Objectives} \label{sec-2} At the end of this tutorial, you will be able to, \begin{itemize} -\item Sort lines of text files. -\item Print lines matching a pattern. -\item Translate or delete characters. -\item Omit repeated lines. +\item Understand what is Redirection +\item Learn the concept of Piping \end{itemize} \end{frame} \begin{frame} -\frametitle{Pre-requisite} +\frametitle{Pre-requisites} \label{sec-3} -Spoken tutorial on - +Spoken tutorial on, \begin{itemize} -\item Using Linux tools -- Part I -\item Using Linux tools -- Part II -\item Using Linux tools -- Part III -\item Using Linux tools -- Part IV +\item Getting started with Linux +\item Basic File Handling +\item Advanced file handling \end{itemize} \end{frame} \begin{frame}[fragile] - \frametitle{\texttt{sort} \ldots} + \frametitle{Redirection} + \begin{itemize} - \item The command below sorts, based on marks in first subject + \item The standard output (stdout) stream goes to the display + \item May not be always, what we need + \item \texttt{>} states that output is redirected to the specified location + \item It is followed by location to redirect, \end{itemize} \begin{lstlisting} - $ cut -d " " -f 2- marks1.txt \ - | paste -d " " students.txt -\ - | sort -t " " -k 2 -rn + $ command > file1 \end{lstlisting} % $ +\end{frame} + +\begin{frame}[fragile] + \frametitle{Redirection..} \begin{itemize} - \item \texttt{-t} specifies the delimiter between fields - \item \texttt{-k} specifies the field to use for sorting - \item \texttt{-r} for sorting in the reverse order - \item \texttt{-n} to choose numerical sorting + \item Similarly, the standard input (stdin) can be redirected as + \end{itemize} + \hspace{29pt}\texttt{\$ command < file1} + \begin{itemize} + \item input and output redirection could be combined + \end{itemize} + \hspace{29pt}\texttt{\$ command < infile > outfile} +\end{frame} + +\begin{frame} +\frametitle{stderr} + \begin{itemize} + \item Standard error (stderr) is the third standard stream + \item All error messages come through this stream + \item \texttt{stderr} can also be redirected + \end{itemize} +\end{frame} + +\begin{frame}[fragile] +\frametitle{Piping} +\begin{lstlisting} +$ cut -d " " -f 2- marks1.txt + | paste -d " " students.txt - + \end{lstlisting} % $ + \begin{itemize} + \item \texttt{-} at the end asks \texttt{paste} to read from + \texttt{stdin} instead of FILE + \item \texttt{cut} command here is a normal command + \end{itemize} +\end{frame} + +\begin{frame}[fragile] +\frametitle{Piping..} +\begin{itemize} + \item the \texttt{|} seems to be joining the two commands + \item Redirects output of first command to \texttt{stdin}, which + becomes input to the second command + \item This is called piping; \texttt{|} is called a pipe \end{itemize} \end{frame} \begin{frame}[fragile] - \frametitle{\texttt{tr}} + \frametitle{Piping..} \begin{itemize} - \item Translates or deletes characters - \item Reads from \texttt{stdin} and outputs to \texttt{stdout} - \item Given, two sets of characters, replaces one with other - \item The following, replaces all lower-case with upper-case + \item Roughly same as -- two redirects and a temporary file \end{itemize} \begin{lstlisting} - $ cat students.txt | tr a-z A-Z - \end{lstlisting} % $ + $ command1 > tempfile + $ command2 < tempfile + $ rm tempfile +\end{lstlisting} % $ +\begin{itemize} +\item Any number of commands can be piped together +\end{itemize} \end{frame} + \begin{frame} \frametitle{Summary} \label{sec-8} @@ -120,10 +181,8 @@ Spoken tutorial on - \begin{itemize} -\item Use the ``sort'' command to sort lines of text files. -\item Use the ``grep'' command to search text pattern. -\item Use the ``tr'' command to translate and/or delete characters. -\item Use the ``uniq'' command to omit repeated lines in a text. +\item Use the ``cut'' and ``paste'' commands in redirection +\item Use the pipe ( | ) character \end{itemize} \end{frame} \begin{frame}[fragile] @@ -132,18 +191,16 @@ Spoken tutorial on - \begin{enumerate} -\item To obtain patterns; one per line, which of the following command is used ? -\vspace{3pt} +\item How will you redirect the content of a file to a device ? +\vspace{12pt} +\item How to view last field(30), in a file located at \verb~/home/test.txt~ +whose first line is "data:myscripts:20:30" +\vspace{5pt} \begin{itemize} -\item grep -f -\item grep -i -\item grep -v -\item grep -e +\item cut -d : -f 4 /home/test.txt +\item cut -f 3 /home/test.txt +\item cut -d : -f 3 /home/test.txt \end{itemize} -\vspace{8pt} -\item Translate the word `linux' to upper-case. -\vspace{8pt} -\item Sort the output of the ``ls -al'' command. \end{enumerate} \end{frame} \begin{frame} @@ -152,27 +209,76 @@ Spoken tutorial on - \begin{enumerate} -\item grep -f -\vspace{15pt} -\item \$ echo `linux' | tr a-z A-Z -\vspace{15pt} -\item \$ ls -al | sort -n -k5 +\item \$ cat filename > device\\ +For eg:\\ +\hspace{8pt} \verb~cat sound.wav > /dev/audio~ +\vspace{22pt} +\item \$ cut -d : -f 4 /home/test.txt \end{enumerate} \end{frame} + +\begin{frame} +\frametitle{SDES \& FOSSEE} +\begin{center} +\begin{itemize} +\item \small{SDES}\\ +\small{\color{LimeGreen}Software Development techniques for Engineers and Scientists} \\ +\scriptsize An initiative by FOSSEE. \\ +\vspace{3pt} +\scriptsize For more information on SDES, please visit {\color{blue}\url{http://fossee.in/sdes}}\\ +\vspace{10pt} +\item \small{FOSSEE}\\ +\small {\color{LimeGreen}Free and Open-source Software for \\Science and Engineering Education} \\ +\scriptsize Based at IIT Bombay, Funded by MHRD.\\ +\vspace{3pt} +\scriptsize Part of National Mission on Education through ICT \\(NME-ICT) \\ +\end{itemize} +\end{center} +\end{frame} + +\begin{frame} +\frametitle{About the Spoken Tutorial Project} +\begin{itemize} +\item Watch the video available at {\color{blue}\url{http://spoken-tutorial.org /What\_is\_a\_Spoken\_Tutorial}} +\item It summarises the Spoken Tutorial project +\item If you do not have good bandwidth, you can download and watch it +\end{itemize} +\end{frame} + +\begin{frame} +\frametitle{Spoken Tutorial Workshops}The Spoken Tutorial Project Team +\begin{itemize} +\item Conducts workshops using spoken tutorials +\item Gives certificates to those who pass an online test +\item For more details, please write to \\ \hspace {0.5cm}{\color{blue}contact@spoken-tutorial.org} +\end{itemize} +\end{frame} + +\begin{frame} +\frametitle{Acknowledgements} +\begin{itemize} +\item Spoken Tutorial Project is a part of the Talk to a Teacher project +\item It is supported by the National Mission on Education through ICT, MHRD, Government of India +\item More information on this Mission is available at: \\{\color{blue}\url{http://spoken-tutorial.org/NMEICT-Intro}} +\end{itemize} +\end{frame} + \begin{frame} \begin{block}{} \begin{center} - \textcolor{blue}{\Large THANK YOU!} + {\Large THANK YOU!} \end{center} \end{block} \begin{block}{} \begin{center} For more Information, visit our website\\ - \url{http://fossee.in/} + {\color{blue}\url{http://fossee.in/}} \end{center} \end{block} \end{frame} + \end{document} + -- cgit From 267a675b5f3b6edc08eb23af58fe8628836dd3f9 Mon Sep 17 00:00:00 2001 From: Jovina Date: Wed, 8 Aug 2012 12:36:14 +0530 Subject: Removed ult_6. --- ult/ult_6/marks1.txt | 5 - ult/ult_6/results.sh | 3 - ult/ult_6/script.rst | 296 ------------------------------------------------- ult/ult_6/students.txt | 5 - ult/ult_6/ult6.tex | 176 ----------------------------- 5 files changed, 485 deletions(-) delete mode 100644 ult/ult_6/marks1.txt delete mode 100755 ult/ult_6/results.sh delete mode 100644 ult/ult_6/script.rst delete mode 100644 ult/ult_6/students.txt delete mode 100644 ult/ult_6/ult6.tex diff --git a/ult/ult_6/marks1.txt b/ult/ult_6/marks1.txt deleted file mode 100644 index 9a5299d..0000000 --- a/ult/ult_6/marks1.txt +++ /dev/null @@ -1,5 +0,0 @@ -5 89 92 85 -4 98 47 67 -1 67 82 76 -2 78 97 60 -3 67 68 69 diff --git a/ult/ult_6/results.sh b/ult/ult_6/results.sh deleted file mode 100755 index acdac84..0000000 --- a/ult/ult_6/results.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -mkdir ~/marks -cut -d " " -f 2- marks1.txt | paste -d " " students.txt - | sort > ~/marks/results.txt diff --git a/ult/ult_6/script.rst b/ult/ult_6/script.rst deleted file mode 100644 index 0413ada..0000000 --- a/ult/ult_6/script.rst +++ /dev/null @@ -1,296 +0,0 @@ -.. Objectives -.. ---------- - - .. At the end of this tutorial, you will be able to: - - .. 1. Prepare a simple shell script. - .. 2. Run a script successfully and print it's result. - .. 3. Understand what an environment variable is. - -.. Prerequisites -.. ------------- - -.. 1. Using Linux tools - Part 1 -.. 2. Using Linux tools - Part 2 -.. 3. Using Linux tools - Part 3 -.. 4. Using Linux tools - Part 4 -.. 5. Using Linux tools - Part 5 - - -Script ------- - -.. L1 - -{{{ Show the first slide containing title, name of the production -team along with the logo of MHRD }}} - -.. R1 - -Hello friends and Welcome to the tutorial on -'Using linux tools - Part 6'. - -.. L2 - -{{{ Show slide with objectives }}} - -.. R2 - -At the end of this tutorial, you will be able to, - - 1. Prepare a simple shell script. - #. Run a script successfully and print it's result. - #. Understand what an environment variable is. - -.. L3 - -{{{ Switch to the pre-requisite slide }}} - -.. R3 - -Before beginning this tutorial,we would suggest you to complete the -tutorial on "Using Linux tools from Part 1 to Part 5". - -Let us start with creating a simple shell script. -A shell script is simply a sequence of commands, that are put into a file, -instead of entering them one by one onto the shell. The script can then be -run, to run the sequence of commands in a single shot instead of manually -running, each of the individual commands. -For instance, let's say we wish to create a directory called ``marks`` in the -home folder and save the results of the students into a file -``results.txt``. - -.. R4 - -We open our editor and save the following text to ``results.sh`` - -.. L4 - -{{{ Open an editor and type the following }}} -:: - - #!/bin/bash - mkdir ~/marks - cut -d " " -f 2- marks1.txt | paste -d " " students.txt - | sort > ~/marks/results.txt - -.. R5 - -We can now run the script as, - -.. L5 - -{{{ Open the terminal }}} -:: - - ./results.sh - -.. R6 - -We get an error saying, Permission denied! Why? Can you think of the -reason? Yes, the file doesn't have execute permissions. -We make the file executable and then run it. - -.. L6 -:: - - chmod u+x results.sh - ./results.sh - -.. R7 - -We get back the prompt. We can check the contents of the file -``results.txt`` to see if the script has run. - -So, here, we have our first shell script. The first line of the script is used -to specify the interpreter or shell which should be used to execute the script. -In this case, we are asking it to use the bash shell. -Once, the script has run, we get back the prompt. Here, we had to manually check, -if the contents of the file are correct. It would be useful to have our script -print out messages. For this, we can use the ``echo`` command. We can edit our -``results.sh`` script, as follows. - -.. L7 - -{{{ Open an editor and type the following }}} -:: - - #!/bin/bash - mkdir ~/marks - cut -d " " -f 2- marks1.txt | paste -d " " students.txt - | sort > ~/marks/results.txt - echo "Results generated." - -.. R8 - -Now, on running the script, we get a message on the screen informing us, -when the script has run. - -Let's now say, that we wish to let the user decide the file to which the -results should be written to. The results file, should be specifiable by an -argument in the command line. We can do so, by editing the file, as below. - -.. L8 - -{{{ Make the necessary changes in the previous script }}} - -:: - - #!/bin/bash - mkdir ~/marks - cut -d " " -f 2- marks1.txt | paste -d " " students.txt - | sort > ~/marks/$1 - echo "Results generated." - - -{{{ Highlight the text ``$1`` }}} - -.. R9 - -The ``$1`` above, corresponds to the first command line argument to the -script. So, we can run the script as shown below, to save the results to -``grades.txt``. - -.. L9 -:: - - ./results.sh grades.txt - -.. R10 - -When we run the ``results.sh`` file, we are specifying the location of the -script by using ``./``. But for any of the other commands, -we didn't have to specify their locations. Why? The -shell has a set of locations where it searches, for the command that we are -trying to run. - -.. L10 - -.. L11 - -{{{ Show slide, PATH }}} - -.. R11 - -These set of locations are saved in an "environment" -variable called PATH.let us look at what the value of the PATH variable is. To view the -values of variables, we can use the echo command. - -.. L12 - -{{{ Switch to the terminal }}} -:: - - echo $PATH - -.. R12 - -So, these are all the paths that are searched, when looking to execute a -command. If we put the results.sh script in one of these locations, we -could simply run it, without using the ``./`` at the beginning. - -.. L13 - -{{{ Show slide, variables & comments }}} - -.. R13 - -As expected, it is possible to define our own variables inside our shell -scripts. For example, - -.. L14 - -{{{ Switch to the terminal }}} -:: - - name="FOSSEE" - -.. R14 - -It creates a new variable ``name`` whose value is ``FOSSEE``. To refer to this -variable, inside our shell script, we would refer to it, as ``$name``. -Note that, there is no space around the ``=`` sign. - -.. L15 -:: - - ls $name* - -.. R15 - -.. R16 - -It is possible to store the output of a command in a variable, by enclosing -the command in back-quotes. - -.. L16 -:: - - count=`wc -l wonderland.txt` - -.. R17 - -It saves the number of lines in the file ``wonderland.txt`` in the variable -count. - -The ``#`` character is used to comment out content from a shell script. -Anything that appears after the ``#`` character in a line, is ignored by -the bash shell. - -.. L18 - -.. L19 - -{{{ Switch to 'Summary' slide }}} - -.. R19 - -This brings us to the end of the end of this tutorial. -In this tutorial, we have learnt to, - - 1. Prepare a shell script. - #. Display the result of a script, using the ``echo`` command. - #. Use the environment variable ``PATH``. - #. Create variables and comment out content using the ``#`` sign. - -.. L20 - -{{{ Show self assessment questions slide }}} - -.. R20 - -Here are some self assessment questions for you to solve - - 1. Which sign is used to comment out content from a shell script. - - - $ - - % - - # - - * - - 2. How will you add directory ``/data/myscripts`` to the beginning of - the $PATH environment variable ? - -.. L21 - -{{{ Solution of self assessment questions on slide }}} - -.. R21 - -And the answers, - - 1. We use the ``#`` sign to comment out the content from a shell script. - - 2. In order to add a directory to the beginning of the $PATH variable,we - say, -:: - - $PATH=/data/myscripts:$PATH - -.. L22 - -{{{ Show the Thank you slide }}} - -.. R22 - -Hope you have enjoyed this tutorial and found it useful. -Thank you! - - diff --git a/ult/ult_6/students.txt b/ult/ult_6/students.txt deleted file mode 100644 index ddacd6b..0000000 --- a/ult/ult_6/students.txt +++ /dev/null @@ -1,5 +0,0 @@ -Hussain -Dilbert -Anne -Raul -Sven diff --git a/ult/ult_6/ult6.tex b/ult/ult_6/ult6.tex deleted file mode 100644 index 389a602..0000000 --- a/ult/ult_6/ult6.tex +++ /dev/null @@ -1,176 +0,0 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Using Linux Tools -% -% Author: FOSSEE -% Copyright (c) 2009, FOSSEE, IIT Bombay -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\documentclass[12pt,compress]{beamer} - -\mode -{ - \usetheme{Warsaw} - \useoutertheme{infolines} - \setbeamercovered{transparent} -} - -\usepackage[english]{babel} -\usepackage[latin1]{inputenc} -%\usepackage{times} -\usepackage[T1]{fontenc} - -% Taken from Fernando's slides. -\usepackage{ae,aecompl} -\usepackage{mathpazo,courier,euler} -\usepackage[scaled=.95]{helvet} - -\definecolor{darkgreen}{rgb}{0,0.5,0} - -\usepackage{listings} -\lstset{language=sh, - basicstyle=\ttfamily\bfseries, - commentstyle=\color{red}\itshape, - stringstyle=\color{darkgreen}, - showstringspaces=false, - keywordstyle=\color{blue}\bfseries} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% DOCUMENT STARTS -\begin{document} - -\begin{frame} - -\begin{center} -\vspace{12pt} -\textcolor{blue}{\huge Using Linux Tools\\Part VI} -\end{center} -\vspace{18pt} -\begin{center} -\vspace{10pt} -\includegraphics[scale=0.95]{../images/fossee-logo.png}\\ -\vspace{5pt} -\scriptsize Developed by FOSSEE Team, IIT-Bombay. \\ -\scriptsize Funded by National Mission on Education through ICT\\ -\scriptsize MHRD,Govt. of India\\ -\includegraphics[scale=0.30]{../images/iitb-logo.png}\\ -\end{center} -\end{frame} -\begin{frame} -\frametitle{Objectives} -\label{sec-2} - -At the end of this tutorial, you will be able to, -\begin{itemize} -\item Prepare a simple shell script. -\item Run a script successfully and print it's result. -\item Understand what an environment variable is. -\end{itemize} -\end{frame} - -\begin{frame} -\frametitle{Pre-requisite} -\label{sec-3} - -Spoken tutorial on - -\begin{itemize} -\item Using Linux tools -- Part I -\item Using Linux tools -- Part II -\item Using Linux tools -- Part III -\item Using Linux tools -- Part IV -\item Using Linux tools -- Part V -\end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{\texttt{PATH}} - \begin{itemize} - \item The shell searches in a set of locations, for the command - \item Locations are saved in ``environment'' variable called PATH - \item \texttt{echo} can show the value of variables - \end{itemize} - \begin{lstlisting} - $ echo $PATH - \end{lstlisting} % $ - \begin{itemize} - \item Put \texttt{results.sh} in one of these locations - \item It can then be run without \texttt{./} - \end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{Variables \& Comments} - \begin{lstlisting} - $ name=FOSSEE - $ count=`wc -l wonderland.txt` - $ echo $count # Shows the value of count - \end{lstlisting} % $ - \begin{itemize} - \item It is possible to create variables in shell scripts - \item Variables can be assigned with the output of commands - \item \alert{NOTE:} There is no space around the \texttt{=} sign - \item All text following the \texttt{\#} is considered a comment - \end{itemize} -\end{frame} - -\begin{frame} -\frametitle{Summary} -\label{sec-8} - - In this tutorial, we have learnt to, - - -\begin{itemize} -\item Prepare a shell script. -\item Display the result of a script, using the ``echo'' command. -\item Use the environment variable ``PATH''. -\item Create variables and comment out content using the ``\#'' sign. -\end{itemize} -\end{frame} - -\begin{frame}[fragile] -\frametitle{Evaluation} -\label{sec-9} - - -\begin{enumerate} -\item Which sign is used to comment out content from a shell script? -\begin{itemize} -\item \$ -\item \% -\item \# -\item * -\end{itemize} -\vspace{8pt} -\item How will you add directory ``/data/myscripts'' to the beginning of - the \$PATH environment variable ? -\end{enumerate} -\end{frame} -\begin{frame} -\frametitle{Solutions} -\label{sec-10} - - -\begin{enumerate} -\item `` \# '' -\vspace{15pt} -\item \$ PATH=/data/myscripts:\$PATH -\end{enumerate} -\end{frame} -\begin{frame} - - \begin{block}{} - \begin{center} - \textcolor{blue}{\Large THANK YOU!} - \end{center} - \end{block} -\begin{block}{} - \begin{center} - For more Information, visit our website\\ - \url{http://fossee.in/} - \end{center} - \end{block} -\end{frame} - -\end{document} - - -- cgit From 83cd96fab979b0fb1c815a321ec0cc127e1cf4ea Mon Sep 17 00:00:00 2001 From: Jovina Date: Wed, 8 Aug 2012 12:37:21 +0530 Subject: Removed ult_7. --- ult/ult_7/06- track.mp3 | 0 ult/ult_7/clause.sh | 20 --- ult/ult_7/dir-test.sh | 5 - ult/ult_7/emerald.mp3 | 0 ult/ult_7/for-1.sh | 4 - ult/ult_7/for-2.sh | 4 - ult/ult_7/for-3.sh | 4 - ult/ult_7/for-5.sh | 4 - ult/ult_7/premier.mp3 | 0 ult/ult_7/script.rst | 401 ------------------------------------------------ ult/ult_7/sign.sh | 7 - ult/ult_7/society.mp3 | 0 ult/ult_7/ult7.tex | 202 ------------------------ ult/ult_7/while-1.sh | 4 - ult/ult_7/while-2.sh | 7 - 15 files changed, 662 deletions(-) delete mode 100644 ult/ult_7/06- track.mp3 delete mode 100644 ult/ult_7/clause.sh delete mode 100644 ult/ult_7/dir-test.sh delete mode 100644 ult/ult_7/emerald.mp3 delete mode 100644 ult/ult_7/for-1.sh delete mode 100644 ult/ult_7/for-2.sh delete mode 100644 ult/ult_7/for-3.sh delete mode 100644 ult/ult_7/for-5.sh delete mode 100644 ult/ult_7/premier.mp3 delete mode 100644 ult/ult_7/script.rst delete mode 100644 ult/ult_7/sign.sh delete mode 100644 ult/ult_7/society.mp3 delete mode 100644 ult/ult_7/ult7.tex delete mode 100644 ult/ult_7/while-1.sh delete mode 100644 ult/ult_7/while-2.sh diff --git a/ult/ult_7/06- track.mp3 b/ult/ult_7/06- track.mp3 deleted file mode 100644 index e69de29..0000000 diff --git a/ult/ult_7/clause.sh b/ult/ult_7/clause.sh deleted file mode 100644 index 23017f2..0000000 --- a/ult/ult_7/clause.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh -# Script to greet the user according to time of day -hour=`date | cut -c12-13` -now=`date +"%A, %d of %B, %Y (%r)"` -if [ $hour -lt 12 ] -then - mess="Good Morning $LOGNAME, Have a nice day!" -fi - -if [ $hour -gt 12 -a $hour -le 16 ] -then - mess="Good Afternoon $LOGNAME" -fi - -if [ $hour -gt 16 -a $hour -le 18 ] -then - mess="Good Evening $LOGNAME" -fi -echo -e "$mess\nIt is $now" - diff --git a/ult/ult_7/dir-test.sh b/ult/ult_7/dir-test.sh deleted file mode 100644 index 11479ff..0000000 --- a/ult/ult_7/dir-test.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash -if test -d $1 -then - echo "Yes, the directory" $1 "is present" -fi diff --git a/ult/ult_7/emerald.mp3 b/ult/ult_7/emerald.mp3 deleted file mode 100644 index e69de29..0000000 diff --git a/ult/ult_7/for-1.sh b/ult/ult_7/for-1.sh deleted file mode 100644 index 86545b7..0000000 --- a/ult/ult_7/for-1.sh +++ /dev/null @@ -1,4 +0,0 @@ -for i in {5..10} -do - echo $i -done diff --git a/ult/ult_7/for-2.sh b/ult/ult_7/for-2.sh deleted file mode 100644 index ad34c9a..0000000 --- a/ult/ult_7/for-2.sh +++ /dev/null @@ -1,4 +0,0 @@ -for i in `ls *.mp3` -do - echo "$i" -done diff --git a/ult/ult_7/for-3.sh b/ult/ult_7/for-3.sh deleted file mode 100644 index 8bb9f8d..0000000 --- a/ult/ult_7/for-3.sh +++ /dev/null @@ -1,4 +0,0 @@ -for i in *.mp3 -do - echo "$i" -done diff --git a/ult/ult_7/for-5.sh b/ult/ult_7/for-5.sh deleted file mode 100644 index dc17f64..0000000 --- a/ult/ult_7/for-5.sh +++ /dev/null @@ -1,4 +0,0 @@ -for i in *.mp3 -do - mv $i `echo $f|tr -s " " "-"|cut -d - -f 2-` -done diff --git a/ult/ult_7/premier.mp3 b/ult/ult_7/premier.mp3 deleted file mode 100644 index e69de29..0000000 diff --git a/ult/ult_7/script.rst b/ult/ult_7/script.rst deleted file mode 100644 index 4efdfd9..0000000 --- a/ult/ult_7/script.rst +++ /dev/null @@ -1,401 +0,0 @@ -.. Objectives -.. ---------- - - .. At the end of this tutorial, you will be able to: - - .. 1. Prepare scripts using 'Control Operators'. - .. 2. Understand what 'Environment Variables' are. - -.. Prerequisites -.. ------------- - -.. 1. Using Linux tools - Part 1 -.. 2. Using Linux tools - Part 2 -.. 3. Using Linux tools - Part 3 -.. 4. Using Linux tools - Part 4 -.. 5. Using Linux tools - Part 5 -.. 6. Using Linux tools - Part 6 - - - -Script ------- - -.. L1 - -{{{ Show the first slide containing title, name of the production -team along with the logo of MHRD }}} - -.. R1 - -Hello friends and Welcome to the tutorial on -'Using linux tools - Part 7'. - -.. L2 - -{{{ Show the 'Objectives' slide }}} - -.. R2 - -At the end of this tutorial, you will be able to, - - 1. Prepare scripts using 'Control Operators'. - 2. Understand what 'Environment Variables' are. - -.. L3 - -{{{ Switch to the pre-requisite slide }}} - -.. R3 - -Before beginning this tutorial, we suggest you to complete the -tutorials, "Using Linux tools, Part 1 to Part 6". - -.. R4 - -We have many 'Control Structures and Operators' available in the linux bash. -Let us look at how to use them. -To write an 'if', or an 'if-else' construct, we need to check or test for a -condition(s). The ``test`` command allows us to test for condition(s). It has -a whole range of tests that can be performed. The man page of ``test`` -gives you the complete listing of various types of tests that can be performed -with it. - -Let's write a simple script with an ``if`` condition that tests whether a -directory with a particular name, exists or not. - -.. L4 - -.. L5 - -{{{ Show slide, 'if' }}} - -.. R5 - -Let us create a script named ``dir-test.sh`` with this code. - - #!/bin/bash - if test -d $1 - then - echo "Yes, the directory" $1 "is present" - fi - -When the script is run with an argument, it will print a message, if a -directory with the said name exists in the current working directory. - -.. R6 - -Let's write a simple script which returns back whether the argument passed -is negative or not. - -.. L6 - -{{{ Open the file sign.sh and show }}} -:: - - #!/bin/bash - if test $1 -lt 0 - then - echo "number is negative" - else - echo "number is non-negative" - fi - -.. R7 - -We can run the file with a set of different inputs and see if it works. - -.. L7 - -{{{ Switch to terminal }}} -:: - - ./sign.sh -11 - -.. R8 - -Instead of using the ``test`` command, square brackets may also be used. - -.. L8 - -.. L9 - -{{{ Show slide, [ ] - alias for test }}} - -.. R9 - -Note that the spacing is important, when using the square brackets. -The left square bracket ( ``[`` ) should be followed by a space and the right -square bracket ( ``]`` ) should be preceded by a space. - -Let's create something interesting using the 'if-else' clause. Let's write a -script, that greets the user, based on the time. - -.. L10 - -{{{ Open the file clause.sh and show }}} -{{{ Highlight the required content wherever necessary, while narrating }}} - -.. R10 - -There are a couple of new things in this script. ``$LOGNAME`` is another -'environment variable', which has the login name of the user. The variables, -``hour`` and ``now`` are actually taking the output of the commands that -are placed in the back quotes. - -Now, let us see how to run loops in bash. We shall look at the ``for`` and -the ``while`` loops. - -.. L11 - -{{{ Show slide, 'for' }}} - -.. R11 - -Suppose we have a set of files, whose file-names contain numbers before the -text, say ``08 - Society.mp3``. We would like to rename these files by -removing the numbers before the text. How would we go about doing that? - -It is clear from the problem statement that we could loop over the list of -files and rename each of them. - -.. R12 - -First, let us look at a simple ``for`` loop, to understand how it works. - -.. L12 - -{{{ Switch to terminal }}} -:: - - for animal in rat cat dog man - do - echo $animal - done - -.. R13 - -We just wrote a list of animals, each name separated by a space -and then printed each name on a separate line. The variable ``animal`` is a -'dummy' or a 'loop variable'. It can then be used to refer to the element of -the list that is currently being dealt with. We could, obviously, use -something as lame as ``i`` in place of ``animal``. - -.. L13 - -.. R14 - -To generate a range of numbers and iterate over them, we do the following. - -.. L14 - -{{{ Open the script ``for-1.sh`` and show }}} - -.. R15 - -Now, let us run the script and see what we get, - -.. L15 - -{{{ Switch to terminal }}} -:: - - sh for-1.sh - -.. R16 - -Now, we use a ``for`` loop to list the files that we are interested in. - -.. L16 - -{{{ Open the script ``for-2.sh`` and show }}} -{{{ Switch to terminal }}} -:: - - sh for-2.sh - -.. R17 - -If the file-names contain spaces, ``for`` assumes, each word separated by a -space,to be a single item in the list and prints it in a separate line. We -could modify the script slightly to overcome this problem. - -.. L17 - -{{{ Open the script ``for-3.sh`` and show }}} -{{{ Switch to terminal }}} -:: - - sh for-3.sh - -.. R18 - -Now, we have each file name printed on a separate line. The file names are -in the form ``dd - Name.mp3`` and it has to be changed to the format -``Name.mp3``. Also, if the name has spaces, we wish to replace it with -hyphens. - -.. L18 - -{{{ Open the script ``for-4.sh`` and show }}} -{{{ Switch to terminal }}} -:: - - sh for-4.sh - -.. R19 - -Now, we simply replace the echo command with a ``mv`` command. - -.. L19 - -{{{ Open the script ``for-5.sh`` and show }}} -{{{ Switch to terminal }}} -:: - - sh for-5.sh - -.. R20 - -We see that we get our required output. All the files have been renamed and -the spaces are removed. -Now let us move ahead with ``while`` loop. -The ``while`` command allows us to continuously execute a block of commands -until the command that is controlling the loop is executing successfully. - -.. L20 - -.. R21 - -Let's start with the lamest example of a ''while'' loop. - -.. L21 - -{{{ Open the script ``while-1.sh`` and show }}} -{{{ Switch to terminal }}} -:: - - sh while-1.sh - -.. R22 - -This, as you can see, is an infinite loop that prints ``True``. - -Say, we wish to write a simple program that takes input from the user -and prints it back, until the input is ``quit``, which then quits the program. - -.. L22 - -{{{ Open the script ``while-2.sh`` and show }}} -{{{ Switch to terminal }}} -:: - - sh while-2.sh - -.. L23 - -{{{ Show slide, Environment Variables }}} - -.. R23 - -'Environment variables' are a way of passing information from the shell to the -programs that are run in it. Standard UNIX variables are split into two -categories,'Environment variables' and 'Shell variables'. In broad terms, -'Shell variables' apply only to the current instance of the shell and are -used to set short-term working conditions; 'Environment variables' have a -farther reaching significance, and are set at login, valid for the duration of -the session. By convention, 'Environment variables' have UPPER CASE and 'Shell -variables' have lower case names. - -You can see an example of environment variables in the slide. - -.. R24 - -To see all the variables and their values, we could use any of the -following, - -.. L24 - -{{{ Switch to terminal }}} -:: - - printenv | less - env - -.. R25 - -We have looked at the 'PATH' variable, in the previous tutorial. We shall now -use the ``export`` command to change it's value. - -.. L25 -:: - - export PATH=$PATH:$HOME/bin - -.. R26 - -Observe the difference in the value of 'PATH' variable before and after -modifying it. - -``export`` command is used to export a variable to the environment of all -the processes that are started from that shell. - -.. L26 - -.. L27 - -{{{ Switch to 'Summary' slide }}} - -.. R27 - -This brings us to the end of this tutorial. -In this tutorial, we have learnt to, - - 1. Prepare scripts using control structures like ``if``, ``if-else``, - ``for`` and ``while``. - 2. Use 'environment variables'. - 3. Export a variable to the environment of all the processes, using - the ``export`` command. - -.. L28 - -{{{ Show self assessment questions slide }}} - -.. R28 - -Here are some self assessment questions for you to solve: - - 1. Print the text ``dog man`` in such a way that the prompt - continues after the text. - - 2. How can you add a new path variable ``/data/myscripts`` to $PATH variable ? - -.. L30 - -{{{ Solutions of self assessment questions on slide }}} - -.. R30 - -And the answers, - - 1. We print the given text using the ``echo`` command by using an additional - option -n as, -:: - - $echo -n dog man - - 2. We can add a new path variable by using the export command as, - -:: - - $export PATH=$PATH://data/myscripts - -.. L31 - -{{{ Show the Thank you slide }}} - -.. R31 - -Hope you have enjoyed this tutorial and found it useful. -Thank you! - diff --git a/ult/ult_7/sign.sh b/ult/ult_7/sign.sh deleted file mode 100644 index 246150d..0000000 --- a/ult/ult_7/sign.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -if test $1 -lt 0 -then - echo "number is negative" -else - echo "number is non-negative" -fi diff --git a/ult/ult_7/society.mp3 b/ult/ult_7/society.mp3 deleted file mode 100644 index e69de29..0000000 diff --git a/ult/ult_7/ult7.tex b/ult/ult_7/ult7.tex deleted file mode 100644 index a306272..0000000 --- a/ult/ult_7/ult7.tex +++ /dev/null @@ -1,202 +0,0 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Using Linux Tools -% -% Author: FOSSEE -% Copyright (c) 2009, FOSSEE, IIT Bombay -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\documentclass[12pt,compress]{beamer} - -\mode -{ - \usetheme{Warsaw} - \useoutertheme{infolines} - \setbeamercovered{transparent} -} - -\usepackage[english]{babel} -\usepackage[latin1]{inputenc} -%\usepackage{times} -\usepackage[T1]{fontenc} - -% Taken from Fernando's slides. -\usepackage{ae,aecompl} -\usepackage{mathpazo,courier,euler} -\usepackage[scaled=.95]{helvet} - -\definecolor{darkgreen}{rgb}{0,0.5,0} - -\usepackage{listings} -\lstset{language=sh, - basicstyle=\ttfamily\bfseries, - commentstyle=\color{red}\itshape, - stringstyle=\color{darkgreen}, - showstringspaces=false, - keywordstyle=\color{blue}\bfseries} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% DOCUMENT STARTS -\begin{document} - -\begin{frame} - -\begin{center} -\vspace{12pt} -\textcolor{blue}{\huge Using Linux Tools\\Part VII} -\end{center} -\vspace{18pt} -\begin{center} -\vspace{10pt} -\includegraphics[scale=0.95]{../images/fossee-logo.png}\\ -\vspace{5pt} -\scriptsize Developed by FOSSEE Team, IIT-Bombay. \\ -\scriptsize Funded by National Mission on Education through ICT\\ -\scriptsize MHRD,Govt. of India\\ -\includegraphics[scale=0.30]{../images/iitb-logo.png}\\ -\end{center} -\end{frame} -\begin{frame} -\frametitle{Objectives} -\label{sec-2} - -At the end of this tutorial, you will be able to, -\begin{itemize} -\item Prepare scripts using 'Control Operators'. -\item Understand what 'Environment Variables' are. -\end{itemize} -\end{frame} - -\begin{frame} -\frametitle{Pre-requisite} -\label{sec-3} - -Spoken tutorial on - -\begin{itemize} -\item Using Linux tools -- Part I -\item Using Linux tools -- Part II -\item Using Linux tools -- Part III -\item Using Linux tools -- Part IV -\item Using Linux tools -- Part V -\item Using Linux tools -- Part VI -\end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{\texttt{if}} - \begin{itemize} - \item Print message if directory exists in \texttt{pwd} - \end{itemize} - \begin{lstlisting} - #!/bin/bash - if test -d $1 - then - echo "Yes, the directory" \ - $1 "is present" - fi - \end{lstlisting} % $ -\end{frame} - -\begin{frame}[fragile] - \frametitle{\texttt{[ ]} - alias for \texttt{test}} - \begin{itemize} - \item Square brackets (\texttt{[]}) can be used instead of - \texttt{test} - \item - \end{itemize} - \begin{lstlisting} - #!/bin/bash - if [ $1 -lt 0 ] - then - echo "number is negative" - else - echo "number is non-negative" - fi - \end{lstlisting} % $ - \begin{itemize} - \item \alert{spacing is important, when using the square brackets} - \end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{\texttt{for}} - \begin{block}{Problem} - Given a set of \texttt{.mp3} files, that have names beginning with - numbers followed by their names --- \texttt{08 - Society.mp3} --- - rename the files to have just the names. Also replace any spaces - in the name with hyphens. - \end{block} - \begin{itemize} - \item Loop over the list of files - \item Process the names, to get new names - \item Rename the files - \end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{Environment Variables} - \begin{itemize} - \item Pass information from shell to programs running in it - \item Behavior of programs can change based on values of variables - \item Environment variables vs. Shell variables - \item Shell variables -- only current instance of the shell - \item Environment variables -- valid for the whole session - \item Convention -- environment variables are UPPER CASE - \end{itemize} -\end{frame} - -\begin{frame} -\frametitle{Summary} -\label{sec-8} - - In this tutorial, we have learnt to, - - -\begin{itemize} -\item Prepare scripts using control structures like ``if'', ``if-else'', - ``for'' and ``while''. -\item Use 'environment variables'. -\item Export a variable to the environment of all the processes, using - the ``export'' command. -\end{itemize} -\end{frame} -\begin{frame}[fragile] -\frametitle{Evaluation} -\label{sec-9} - - -\begin{enumerate} -\item Print the text ``dog man'' in such a way that the prompt - continues after the text. -\vspace{8pt} -\item How can you add a new path variable ``/data/myscripts'' to \$PATH variable ? -\end{enumerate} -\end{frame} -\begin{frame} -\frametitle{Solutions} -\label{sec-10} - - -\begin{enumerate} -\item \$ echo -n dog man -\vspace{15pt} -\item \$ export PATH=\$PATH://data/myscripts -\end{enumerate} -\end{frame} -\begin{frame} - - \begin{block}{} - \begin{center} - \textcolor{blue}{\Large THANK YOU!} - \end{center} - \end{block} -\begin{block}{} - \begin{center} - For more Information, visit our website\\ - \url{http://fossee.in/} - \end{center} - \end{block} -\end{frame} - -\end{document} - - diff --git a/ult/ult_7/while-1.sh b/ult/ult_7/while-1.sh deleted file mode 100644 index 485e167..0000000 --- a/ult/ult_7/while-1.sh +++ /dev/null @@ -1,4 +0,0 @@ -while true -do - echo "True" -done diff --git a/ult/ult_7/while-2.sh b/ult/ult_7/while-2.sh deleted file mode 100644 index 5fbdd11..0000000 --- a/ult/ult_7/while-2.sh +++ /dev/null @@ -1,7 +0,0 @@ -while [ "$variable" != "quit" ] -do - read variable - echo "Input - $variable" -done -exit 0 - -- cgit From 644ce971ef1f6b833f1139e7e7a5b137d9895823 Mon Sep 17 00:00:00 2001 From: Jovina Date: Wed, 8 Aug 2012 12:38:29 +0530 Subject: Removed ult_8. --- ult/ult_8/script.rst | 339 --------------------------------------------------- ult/ult_8/ult8.tex | 248 ------------------------------------- 2 files changed, 587 deletions(-) delete mode 100644 ult/ult_8/script.rst delete mode 100644 ult/ult_8/ult8.tex diff --git a/ult/ult_8/script.rst b/ult/ult_8/script.rst deleted file mode 100644 index ca2c5ec..0000000 --- a/ult/ult_8/script.rst +++ /dev/null @@ -1,339 +0,0 @@ -.. Objectives -.. ---------- - - .. At the end of this tutorial, you will be able to: - - .. 1. - .. 2. - -.. Prerequisites -.. ------------- - -.. 1. Using Linux tools - Part 1 -.. 2. Using Linux tools - Part 2 -.. 3. Using Linux tools - Part 3 -.. 4. Using Linux tools - Part 4 -.. 5. Using Linux tools - Part 5 -.. 6. Using Linux tools - Part 6 -.. 7. Using Linux tools - Part 7 - - -Script ------- - -.. L1 - -{{{ Show the first slide containing title, name of the production -team along with the logo of MHRD }}} - -.. R1 - -Hello friends and Welcome to the tutorial on -'Using linux tools - Part 8'. - -.. L2 - -{{{ Show slide with objectives }}} - -.. R2 - -At the end of this tutorial, you will be able to, - - 1. Search for files in many different ways. - #. Compare files with same names. - #. Create and extract an archive. - #. Customize a shell. - -.. L3 - -{{{ Switch to the pre-requisite slide }}} - -.. R3 - -Before beginning this tutorial,we would suggest you to complete the -tutorial on "Using Linux tools from Part 1 to Part 7". - -There are a bunch of tools, that will prove to be handy in your day -to day work. These tools will help you quickly perform tasks like searching -for files, comparing files and checking if they are the same, viewing the -exact differences between them, etc. - -.. L4 - -{{{ Show slide, find }}} - -.. R4 - -Let us start with the first tool - 'find' . -The ``find`` command lets you find files in a directory hierarchy. It -offers a very complex feature set allowing you to search for files with a -wide range of restrictions. We shall only look at some of the most -frequently used ones. - -.. R5 - -To find the files, which end with an extension, ``.pdf``, saved in the current -folder and all it's subfolders, we say - -.. L5 - -{{{ Open the terminal }}} -:: - - find . -name "*.pdf" - -.. R6 - -The ``find`` command also lists out the directory and sub-directory names -To list them, we say, - -.. L6 -:: - - find . -type d - -.. R7 - -In short, ``find`` allows you to set limits on file-size, modification time -and whole lot of other things which you can explore on seeing the man page -of ``find``. - -.. L7 - -.. R8 - -Let us now move on to the next tool, the compare tool. - -To compare two files, whether they are identical or not, we can use the -``cmp`` command. Let us consider some situation. Suppose, we run the ``find`` -command to locate some file, and it turns out that we have a file with same -name in different location. - -In this case, if we are unsure, whether both the files are the same, we can use -the ``cmp`` command to check if the files are identical. - -.. L8 -:: - - find . -name quick.c - ./Desktop/programs/quick.c - ./c-folder/quick.c - cmp Desktop/programs/quick.c c-folder/quick.c - -.. L9 - -{{{ Show slide, cmp }}} - -.. R9 - -If the cmp command doesn't return any output, it means that both files are -exactly identical. If there are any differences in the file, it gives you -the exact byte location at which the first difference occurred. - -.. R10 - -Let us now make a small change in one of quick.c file and run the ``cmp`` -command again. - -.. L10 -{{{ Switch to the terminal }}} - -:: - - cmp Desktop/programs/quick.c c-folder/quick.c - -.. R11 - -As we can see, it gives the exact location as to where a change is made. - -Now, we may not be happy with just the knowledge that the files are -different. We may want to see the exact differences between the two files. -The ``diff`` command can be used to find the exact differences between the -files. - -.. L11 - -.. L12 -:: - - diff Desktop/programs/quick.c c-folder/quick.c - -.. R12 - -We get back a line by line difference between the two files. - -.. L13 - -{{{ Show slide, diff }}} - -.. R13 - -The ``>`` mark indicates the content that has been added to the second file, -which was not present in the first file. The ``<`` mark indicates the lines -that were present in the first file, but are not existent in the second file. - -.. L14 - -{{{ Show slide, tar }}} - -.. R14 - -You would often come across (archive) files which are called *tarballs*. A -tar ball is essentially a collection of files, which may or may not be -compressed. Essentially, it eases the job of storing, backing up and -transporting multiple files, at once. - -.. R15 - -The following set of commands extracts the contents of the ``allfiles.tar`` -tarball to the directory extract. - -.. L15 - -{{{ Switch to terminal }}} -:: - - mkdir extract - cp allfiles.tar extract/ - cd extract - tar -xvf allfiles.tar - -.. L16 - -{{{ Show slide, extracting an archive }}} - -.. R16 - -The option, ``x`` tells ``tar`` to extract the files in the archive file -specified by the ``f`` option. The ``v`` option tells ``tar`` to give out a -verbose output. - -.. R17 - -Similarly, if we wish to create a ``tar`` archive, we use the ``c`` option -instead of the ``x`` option. For instance, the command below creates an -archive from all the files with the ``.txt`` extension. - -.. L17 - -{{{ Switch to terminal }}} -:: - - tar -cvzf newarchive.tar *.txt - -.. R18 - -You can also create and extract compressed archives using ``tar``. It -supports a wide variety of compressions like gzip, bzip2, lzma, etc. - -We need to add an additional option to ``tar`` to handle these -compressions. - - -+-------------+------------+ -| Compression | Option | -+-------------+------------+ -| gzip | ``-z`` | -| bzip2 | ``-j`` | -| lzma | ``--lzma`` | -+-------------+------------+ - -.. L18 - -.. R19 - -So, if we wished to create a gzip archive in the previous command, we -change it to the following - -.. L19 -:: - - tar -cvzf newarchive.tar.gz *.txt - -.. L20 - -{{{ Show slide, customizing your shell }}} - -.. R20 - -What would you do, if you want bash to execute a particular command each -time you start it up? For instance, say you want the current directory to -be your Desktop instead of your home folder, each time bash starts up. -Bash reads and executes commands in a whole bunch -of files called start-up files, when it starts up. - -When bash starts up as an interactive login shell, it reads the files -``/etc/profile``, ``~/.bash_profile``, ``~/.bash_login``, and -``~/.profile`` in that order. - -When an interactive shell that is not a login shell is started, bash reads -and executes commands from ~/.bashrc. This can be prevented using the ``--norc`` -option. Instead of using the ``~/.bashrc`` file on start-up, we can force -the bash to use another file, for which the ``--rcfile`` option may be used. - -Now, you know what you should do, to change the current directory to you -Desktop. Just put a ``cd ~/Desktop`` into your ``~/.bashrc`` and you are -set! -But as you know that the start-up files are used for a lot more complex things -than this. You could set (or unset) aliases and a whole bunch of environment -variables in the ``.bashrc``, like changing environment variables etc. - -.. L21 - -{{{ Switch to 'Summary' slide }}} - -.. R21 - -This brings us to the end of the end of this tutorial. -In this tutorial, we have learnt to, - - 1. Make use of the ``find`` command to find files in a directory hierarchy. - #. Find the differences between files with the same name, using the - ``cmp`` and ``diff`` commands. - #. Extract and create compressed archive's using the ``tar`` command. - #. Customize one's shell according to one's choice. - -.. L22 - -{{{ Show self assessment questions slide }}} - -.. R22 - -Here are some self assessment questions for you to solve - - 1. Look at the man page of ``find`` and state the options which - deal with symbolic links. - - 2. How do you append tar files to an archive? - -.. L23 - -{{{ Solution of self assessment questions on slide }}} - -.. R23 - -And the answers, - -1. The -H, -L and -P options with the ``find`` command control - the treatment of symbolic links. - - 2. To append tar files to an archive, we can use the ``tar`` command - either with the ``-A`` option or the ``-r`` option, as, -:: - - $ tar -Af - OR - $ tar -rf - - -.. L24 - -{{{ Show the Thank you slide }}} - -.. R24 - -Hope you have enjoyed this tutorial and found it useful. -Thank you! - - - diff --git a/ult/ult_8/ult8.tex b/ult/ult_8/ult8.tex deleted file mode 100644 index a34bf53..0000000 --- a/ult/ult_8/ult8.tex +++ /dev/null @@ -1,248 +0,0 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Using Linux Tools -% -% Author: FOSSEE -% Copyright (c) 2009, FOSSEE, IIT Bombay -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\documentclass[12pt,compress]{beamer} - -\mode -{ - \usetheme{Warsaw} - \useoutertheme{infolines} - \setbeamercovered{transparent} -} - -\usepackage[english]{babel} -\usepackage[latin1]{inputenc} -%\usepackage{times} -\usepackage[T1]{fontenc} - -% Taken from Fernando's slides. -\usepackage{ae,aecompl} -\usepackage{mathpazo,courier,euler} -\usepackage[scaled=.95]{helvet} - -\definecolor{darkgreen}{rgb}{0,0.5,0} - -\usepackage{listings} -\lstset{language=sh, - basicstyle=\ttfamily\bfseries, - commentstyle=\color{red}\itshape, - stringstyle=\color{darkgreen}, - showstringspaces=false, - keywordstyle=\color{blue}\bfseries} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% DOCUMENT STARTS -\begin{document} - -\begin{frame} - -\begin{center} -\vspace{12pt} -\textcolor{blue}{\huge Using Linux Tools} -\end{center} -\vspace{18pt} -\begin{center} -\vspace{10pt} -\includegraphics[scale=0.95]{../images/fossee-logo.png}\\ -\vspace{5pt} -\scriptsize Developed by FOSSEE Team, IIT-Bombay. \\ -\scriptsize Funded by National Mission on Education through ICT\\ -\scriptsize MHRD,Govt. of India\\ -\includegraphics[scale=0.30]{../images/iitb-logo.png}\\ -\end{center} -\end{frame} -\begin{frame} -\frametitle{Objectives} -\label{sec-2} - -At the end of this tutorial, you will be able to, -\begin{itemize} -\item Search for files in many different ways. -\item Compare files with same names. -\item Create and extract an archive. -\item Customize a shell. -\end{itemize} -\end{frame} - -\begin{frame} -\frametitle{Pre-requisite} -\label{sec-3} - -Spoken tutorial on - -\begin{itemize} -\item Using Linux tools -- Part I -\item Using Linux tools -- Part II -\item Using Linux tools -- Part III -\item Using Linux tools -- Part IV -\item Using Linux tools -- Part V -\item Using Linux tools -- Part VI -\item Using Linux tools -- Part VII -\end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{\texttt{`find'}} - \begin{itemize} - \item `find' command helps to find files in a directory hierarchy - \item Offers a very complex feature set\\ For eg: search files by name, owner, date,etc. - \item Look at the \texttt{man} page of `find' - \end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{\texttt{`cmp'}} - \begin{itemize} - \item Compare two files - \end{itemize} - \begin{lstlisting} - $ find . -name quick.c - ./Desktop/programs/quick.c - ./c-folder/quick.c - $ cmp Desktop/programs/quick.c \ - c-folder/quick.c - \end{lstlisting} % $ - \begin{itemize} - \item No output when the files are exactly the same - \item Else, gives location where the first difference occurs - \end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{\texttt{`diff'}} - \begin{itemize} - \item We know the files are different, but want exact differences - \end{itemize} - \begin{lstlisting} - $ diff Desktop/programs/quick.c \ - c-folder/quick.c - \end{lstlisting} % $ - \begin{itemize} - \item line by line difference between files - \item \texttt{>} indicates content only in second file - \item \texttt{<} indicates content only in first file - \end{itemize} -\end{frame} - -\begin{frame}[fragile] -\frametitle{\texttt{`tar'}} -\begin{itemize} -\item \emph{tarball} -- essentially a collection of files -\item May or may not be compressed -\item Eases the job of storing, backing-up \& transporting files -\end{itemize} -\end{frame} - -\begin{frame}[fragile] -\frametitle{Extracting an archive} - -\begin{lstlisting} -$ mkdir extract -$ cp allfiles.tar extract/ -$ cd extract -$ tar -xvf allfiles.tar -\end{lstlisting} %$ - -\begin{itemize} -\item \texttt{-x} --- Extract files within the archive -\item \texttt{-f} --- Specify the archive file -\item \texttt{-v} --- Be verbose -\end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{Compressed archives} - \begin{itemize} - \item \texttt{tar} can create and extract compressed archives - \item Supports compressions like gzip, bzip2, lzma, etc. - \item Additional option to handle compressed archives - \begin{center} - \begin{tabular}{|l|l|}\hline - Compression & Option \\\hline - gzip & \texttt{-z} \\\hline - bzip2 & \texttt{-j} \\\hline - lzma & \texttt{-{}-lzma} \\\hline - \end{tabular} - \end{center} - \end{itemize} - \begin{lstlisting} - $ tar -cvzf newarchive.tar.gz *.txt - \end{lstlisting} % $ -\end{frame} - - -\begin{frame} -\frametitle{Customizing your shell} -\begin{itemize} -\item Bash reads \texttt{/etc/profile}, - \texttt{\textasciitilde{}/.bash\_profile}, - \texttt{\textasciitilde{}/.bash\_login}, and - \texttt{\textasciitilde{}/.profile} in that order, when starting - up as a login shell. -\item \texttt{\textasciitilde{}/.bashrc} is read, when not a login - shell -\item Put any commands that you want to run when bash starts, in this - file. -\end{itemize} -\end{frame} - - -\begin{frame} -\frametitle{Summary} -\label{sec-8} - - In this tutorial, we have learnt to, - - -\begin{itemize} -\item To make use of the ``find'' command find files in a directory hierarchy. -\item To find the differences between files with the same name, using the - ``cmp'' and ``diff'' commands. -\item To extract and create compressed archive's using the ``tar'' command. -\item Customize one's shell according to one's choice. -\end{itemize} -\end{frame} -\begin{frame}[fragile] -\frametitle{Evaluation} -\label{sec-9} - - -\begin{enumerate} -\item Look at the man page of ``find'' and state the options which - deal with symbolic links. -\vspace{8pt} -\item How do you append tar files to an archive ? -\end{enumerate} -\end{frame} -\begin{frame} -\frametitle{Solutions} - -\begin{enumerate} -\item -H, -L and -P options with the ``find'' command -\vspace{15pt} -\item tar -Af -\end{enumerate} - -\end{frame} -\begin{frame} - - \begin{block}{} - \begin{center} - \textcolor{blue}{\Large THANK YOU!} - \end{center} - \end{block} -\begin{block}{} - \begin{center} - For more Information, visit our website\\ - \url{http://fossee.in/} - \end{center} - \end{block} -\end{frame} - -\end{document} - - - -- cgit From 55c87f72e138006d614ab814becf6f5b36a4699b Mon Sep 17 00:00:00 2001 From: Jovina Date: Wed, 8 Aug 2012 13:15:35 +0530 Subject: Added ult part 6. --- ult/ult_6/script.rst | 279 +++++++++++++++++++++++++++++++++++++++++++++++++++ ult/ult_6/ult_6.tex | 244 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 523 insertions(+) create mode 100644 ult/ult_6/script.rst create mode 100644 ult/ult_6/ult_6.tex diff --git a/ult/ult_6/script.rst b/ult/ult_6/script.rst new file mode 100644 index 0000000..020f3a6 --- /dev/null +++ b/ult/ult_6/script.rst @@ -0,0 +1,279 @@ +.. Objectives +.. ---------- + + .. At the end of this tutorial, you will be able to: + + .. 1. Understand various features of shell + .. 2. Learn about shell meta characters + +.. Prerequisites +.. ------------- + +.. 1. Getting started with Linux +.. 2. Basic File Handling +.. 4. Advanced file handling + +Script +------ + +.. L1 + +{{{ Show the first slide containing title, name of the production +team along with the logo of MHRD }}} + +.. R1 + +Hello friends and Welcome to the tutorial on +'Redirection and Piping'. + +.. L2 + +{{{ Show slide with objectives }}} + +.. R2 + +At the end of this tutorial, you will be able to, + + 1. Understand various features of shell + #. Learn about shell meta characters + +.. L3 + +{{{ Switch to the pre-requisite slide }}} + +.. R3 + +Before beginning this tutorial,we would suggest you to complete the +former tutorials as being displayed currently. + +.. L4 + +{{{ Show slide, with Tab-completion }}} + +.. R4 + +The Bash shell has some nice features, that make our job of using the shell +easier and much more pleasant. We shall look at a few of them, here. + + +Bash provides the feature of tab completion. What does tab completion mean? +When you are trying to type a word, bash can complete the word for you, if you +have entered enough portion of the word (to complete it unambiguously) and +then hit the tab key. + +If on hitting the tab key, the word doesn't get completed, either the word +doesn't exist or the word cannot be decided unambiguously. If the case is the +latter one, hitting the tab key a second time, will list the possibilities. + +.. L5 + +{{{ Show slide, with Tab-completion.. }}} + +.. R5 + +Bash provides tab completion for the following. + + File Names + Directory Names + Executable Names + User Names (when they are prefixed with a ~) + Host Names (when they are prefixed with a @) + Variable Names (when they are prefixed with a $) + +.. R6 + +For example, + +.. L6 + +{{{ Switch to terminal }}} +:: + + + pas + PA + ~/ + +.. L7 + +{{{ Show slide, with History }}} + +.. R7 + +Bash also saves the history of the commands you have typed. So, you can go +back to a previously typed command. Use the up and down arrow keys to navigate +in your bash history. +You can also search incrementally, for commands in your bash history. Ctrl-r +search for the commands that you have typed before. But, note that the number +of commands saved in the history is limited, generally upto a 1000 commands. + +.. L8 + +{{{ Switch to terminal }}} +:: + + pas + +.. R8 + +.. L9 + +{{{ Show slide, with Shell Meta Characters }}} + +.. R9 + +Unix recognizes certain special characters, called "meta characters," as +command directives. The shell meta characters are recognized anywhere they +appear in the command line, even if they are not surrounded by blank space. +For that reason, it is safest to only use the characters A-Z, a-z, 0-9, and +the period, dash, and underscore characters when naming files and directories + on Unix. If your file or directory has a shell meta character in the name, +you will find it difficult to use the name in a shell command. + +The characters that you see on the slide are the shell meta characters + + / < > ! $ % ^ & * | { } [ ] " ' ` ~ ; + +.. R10 + +Let's take an example, + +.. L10 + +{{{ Switch to terminal }}} +:: + + ls file.* + +.. R11 + +It means, run on a directory containing the files file, file.c, file.lst, and +myfile would list the files file.c and file.lst. However, + +.. L11 + +:: + + ls file.? + +.. R12 + +Run on the same directory would only list file.c because the ? only +matches one character, no more, no less. This can save you a great deal of +typing time. + +For example, if there is a file called california_cornish_hens_with_wild_rice +and no other files whose names begin with 'c', you could view the file without +typing the whole name by typing this + +.. L12 + +:: + + more c* + +.. R13 + +Here, the c* matches that long file name. + +File-names containing metacharacters can pose many problems and should never +be intentionally created. + +.. L13 + +.. L14 + +{{{ Switch to Summary slide }}} + +.. R14 + +This brings us to the end of the end of this tutorial. +In this tutorial, we have learnt to, + +1. Implement features of tab-completion and history. +#. Make use of the shell meta characters. + +.. L15 + +{{{ Show self assessment questions slide }}} + +.. R15 + +Here are some self assessment questions for you to solve: + +1. Bash does not provide tab completion for Host Names. True of False? + +2. State the command which will list all the files in the current working + directory that end in either .c or .h + +.. L16 + +{{{ Solutions for the self assessment questions on slide }}} + +.. R16 + +And the answers: + +1. False. Bash provides tab completion for Host Names when they are prefixed + with a @ sign. + + +2. The command which will find the files ending either in .c or .h is, +:: + + ls *.[ch] + + +.. L17 + +{{{ Show the SDES & FOSSEE slide }}} + +.. R17 + +Software Development techniques for Engineers and Scientists - SDES, is an +initiative by FOSSEE. For more information, please visit the given link. + +Free and Open-source Software for Science and Engineering Education - FOSSEE, is +based at IIT Bombay which is funded by MHRD as part of National Mission on +Education through ICT. + +.. L18 + +{{{ Show the ``About the Spoken Tutorial Project'' slide }}} + +.. R18 + +Watch the video available at the following link. It summarises the Spoken +Tutorial project.If you do not have good bandwidth, you can download and +watch it. + +.. L19 + +{{{ Show the `` Spoken Tutorial Workshops'' slide }}} + +.. R19 + +The Spoken Tutorial Project Team conducts workshops using spoken tutorials, +gives certificates to those who pass an online test. + +For more details, contact contact@spoken-tutorial.org + +.. L20 + +{{{ Show the ``Acknowledgements'' slide }}} + +.. R20 + +Spoken Tutorial Project is a part of the "Talk to a Teacher" project. +It is supported by the National Mission on Education through ICT, MHRD, +Government of India. More information on this mission is available at the +given link. + +.. L21 + +{{{ Show the Thank you slide }}} + +.. R21 + +Hope you have enjoyed this tutorial and found it useful. +Thank you! diff --git a/ult/ult_6/ult_6.tex b/ult/ult_6/ult_6.tex new file mode 100644 index 0000000..c42fa21 --- /dev/null +++ b/ult/ult_6/ult_6.tex @@ -0,0 +1,244 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Using Linux Tools +% +% Author: FOSSEE +% Copyright (c) 2009, FOSSEE, IIT Bombay +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\documentclass[17pt,compress]{beamer} +\usepackage{beamerthemesplit} +\mode +{ + \usetheme{Warsaw} + \useoutertheme{infolines} + \setbeamercovered{transparent} + \setbeamertemplate{navigation symbols}{} +} +% Taken from Fernando's slides. +\usepackage{ae,aecompl} +\usepackage[scaled=.95]{helvet} + +\usepackage[english]{babel} +\usepackage[latin1]{inputenc} +\usepackage[T1]{fontenc} + +% change the alerted colour to LimeGreen +\definecolor{LimeGreen}{RGB}{50,205,50} +\setbeamercolor{structure}{fg=LimeGreen} +\author[FOSSEE]{} +\institute[IIT Bombay]{} +\date[]{} +% \setbeamercovered{transparent} + +% theme split +\usepackage{verbatim} +\newenvironment{colorverbatim}[1][]% +{% +\color{blue} +\verbatim +}% +{% +\endverbatim +}% + +\usepackage{mathpazo,courier,euler} +\usepackage{listings} +\lstset{language=sh, + basicstyle=\ttfamily\bfseries, + showstringspaces=false, + keywordstyle=\color{black}\bfseries} + +% logo +\logo{\includegraphics[height=1.30 cm]{../images/3t-logo.pdf}} +\logo{\includegraphics[height=1.30 cm]{../images/fossee-logo.pdf} + +\hspace{7.5cm} +\includegraphics[scale=0.99]{../images/fossee-logo.pdf}\\ +\hspace{281pt} +\includegraphics[scale=0.80]{../images/3t-logo.pdf}} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% DOCUMENT STARTS +\begin{document} + +\sffamily \bfseries +\title +[Features of the Shell] +{Features of the Shell} +\author +[FOSSEE] +{\small Talk to a Teacher\\{\color{blue}\url{http://spoken-tutorial.org}}\\\vspace{0.25cm}National Mission on Education + through ICT\\{\color{blue}\url{ http://sakshat.ac.in}} \\ [1.65cm] + Contributed by FOSSEE Team \\IIT Bombay \\[0.3cm] +} + +% slide 1 +\begin{frame} + \titlepage +\end{frame} + +\begin{frame} +\frametitle{Objectives} +\label{sec-2} + +At the end of this tutorial, you will be able to, +\begin{itemize} +\item Understand various features of the shell +\item Learn about shell meta characters +\end{itemize} +\end{frame} + +\begin{frame} +\frametitle{Pre-requisites} +\label{sec-3} + +Spoken tutorial on, +\begin{itemize} +\item Getting started with Linux +\item Basic File Handling +\end{itemize} +\end{frame} + +\begin{frame}[fragile] +\frametitle{Tab-completion} +\begin{itemize} +\item Hit tab to complete an incompletely typed word +\item Tab twice to list all possibilities when ambiguous completion +\end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Tab-completion..} + \begin{itemize} + \item Bash provides tab completion for the following + \begin{enumerate} + \item File Names + \item Directory Names + \item Executable Names + \item User Names (when prefixed with a \~{}) + \item Host Names (when prefixed with a @) + \item Variable Names (when prefixed with a \$) + \end{enumerate} + \end{itemize} +\end{frame} + +\begin{frame}[fragile] +\frametitle{History} +\begin{itemize} +\item Bash saves history of commands typed +\item Up and down arrow keys allow to navigate history +\item \texttt{Ctrl-r} searches for commands used +\item No. of commands limited, generally upto 1000 +\end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Shell Meta Characters} + \begin{itemize} + \item ``meta characters'' are special command directives + \item No meta-characters in file-names + \item While naming files, use characters A-Z, a-z, 0-9, . , - , \_ + \item shell meta characters -- \\ + \verb+/<>!$%^&*|{}[]"'`~;+ + \end{itemize} +\end{frame} + +\begin{frame} +\frametitle{Summary} +\label{sec-8} + + In this tutorial, we have learnt to, + + +\begin{itemize} +\item Implement features of shell like tab-completion and history +\item Make use of the shell meta characters +\end{itemize} +\end{frame} +\begin{frame}[fragile] +\frametitle{Evaluation} +\label{sec-9} + + +\begin{enumerate} +\item Bash does not provide tab completion for Host Names. True or False? +\vspace{12pt} +\item State the command which will list all the files in the current working + directory that end in either \verb~.c~ or \verb~.h~ +\end{enumerate} +\end{frame} +\begin{frame} +\frametitle{Solutions} +\label{sec-10} + + +\begin{enumerate} +\item False +\vspace{15pt} +\item \$ ls *.[ch] +\end{enumerate} +\end{frame} + +\begin{frame} +\frametitle{SDES \& FOSSEE} +\begin{center} +\begin{itemize} +\item \small{SDES}\\ +\small{\color{LimeGreen}Software Development techniques for Engineers and Scientists} \\ +\scriptsize An initiative by FOSSEE. \\ +\vspace{3pt} +\scriptsize For more information on SDES, please visit {\color{blue}\url{http://fossee.in/sdes}}\\ +\vspace{10pt} +\item \small{FOSSEE}\\ +\small {\color{LimeGreen}Free and Open-source Software for \\Science and Engineering Education} \\ +\scriptsize Based at IIT Bombay, Funded by MHRD.\\ +\vspace{3pt} +\scriptsize Part of National Mission on Education through ICT \\(NME-ICT) \\ +\end{itemize} +\end{center} +\end{frame} + +\begin{frame} +\frametitle{About the Spoken Tutorial Project} +\begin{itemize} +\item Watch the video available at {\color{blue}\url{http://spoken-tutorial.org /What\_is\_a\_Spoken\_Tutorial}} +\item It summarises the Spoken Tutorial project +\item If you do not have good bandwidth, you can download and watch it +\end{itemize} +\end{frame} + +\begin{frame} +\frametitle{Spoken Tutorial Workshops}The Spoken Tutorial Project Team +\begin{itemize} +\item Conducts workshops using spoken tutorials +\item Gives certificates to those who pass an online test +\item For more details, please write to \\ \hspace {0.5cm}{\color{blue}contact@spoken-tutorial.org} +\end{itemize} +\end{frame} + +\begin{frame} +\frametitle{Acknowledgements} +\begin{itemize} +\item Spoken Tutorial Project is a part of the Talk to a Teacher project +\item It is supported by the National Mission on Education through ICT, MHRD, Government of India +\item More information on this Mission is available at: \\{\color{blue}\url{http://spoken-tutorial.org/NMEICT-Intro}} +\end{itemize} +\end{frame} + +\begin{frame} + + \begin{block}{} + \begin{center} + {\Large THANK YOU!} + \end{center} + \end{block} +\begin{block}{} + \begin{center} + For more Information, visit our website\\ + {\color{blue}\url{http://fossee.in/}} + \end{center} + \end{block} +\end{frame} + + +\end{document} + -- cgit From d0c0139c362aa0d04073fbb901ee81b3c47bf158 Mon Sep 17 00:00:00 2001 From: Jovina Date: Wed, 8 Aug 2012 14:52:54 +0530 Subject: Added ULT part 7. --- ult/ult_7/foo.txt | 9 ++ ult/ult_7/marks1.txt | 5 + ult/ult_7/script.rst | 393 +++++++++++++++++++++++++++++++++++++++++++++++ ult/ult_7/script2col.rst | 210 +++++++++++++++++++++++++ ult/ult_7/students.txt | 5 + ult/ult_7/ult7.tex | 249 ++++++++++++++++++++++++++++++ 6 files changed, 871 insertions(+) create mode 100644 ult/ult_7/foo.txt create mode 100644 ult/ult_7/marks1.txt create mode 100644 ult/ult_7/script.rst create mode 100644 ult/ult_7/script2col.rst create mode 100644 ult/ult_7/students.txt create mode 100644 ult/ult_7/ult7.tex diff --git a/ult/ult_7/foo.txt b/ult/ult_7/foo.txt new file mode 100644 index 0000000..1fe9426 --- /dev/null +++ b/ult/ult_7/foo.txt @@ -0,0 +1,9 @@ +FOO is an abbreviation of Forward Observation Officer, a British Army +term in use as early as the First World War. The etymology of foo is +explored in the Internet Engineering Task Force (IETF) Request for +Comments 3092, which notes usage of foo in 1930s cartoons including +The Daffy Doc (with Daffy Duck) and comic strips, especially Smokey +Stover and Pogo. From there the term migrated into military slang, +where it merged with FUBAR. + +source: wikipedia diff --git a/ult/ult_7/marks1.txt b/ult/ult_7/marks1.txt new file mode 100644 index 0000000..9a5299d --- /dev/null +++ b/ult/ult_7/marks1.txt @@ -0,0 +1,5 @@ +5 89 92 85 +4 98 47 67 +1 67 82 76 +2 78 97 60 +3 67 68 69 diff --git a/ult/ult_7/script.rst b/ult/ult_7/script.rst new file mode 100644 index 0000000..b4cb55c --- /dev/null +++ b/ult/ult_7/script.rst @@ -0,0 +1,393 @@ +.. Objectives +.. ---------- + + .. At the end of this tutorial, you will be able to: + + .. 1. Sort lines of text files + .. 2. Print lines matching a pattern + .. 3. Translate or delete characters + .. 4. Omit repeated lines + + +.. Prerequisites +.. ------------- + +.. 1. Getting started with Linux +.. 2. Redirection and Piping + + + +Script +------ + +.. L1 + +{{{ Show the first slide containing title, name of the production +team along with the logo of MHRD }}} + +.. R1 + +Hello friends and Welcome to the tutorial on 'Text Processing'. + +.. L2 + +{{{ Show slide with objectives }}} + +.. R2 + +At the end of this tutorial, you will be able to, + + 1. Sort lines of text files + #. Print lines matching a pattern + #. Translate or delete characters + #. Omit repeated lines. + + +.. L3 + +{{{ Switch to the pre-requisite slide }}} + +.. R3 + +Before beginning this tutorial,we would suggest you to complete the +former tutorials as being displayed currently. + +.. R4 + +In this tutorial, we shall learn about text processing. +TO begin with, consider data kept in two files, namely marks1.txt and +students.txt +Let us see what data they contain. Open a terminal and type, + +.. L4 + +{{{ Open the terminal }}} +:: + + cat marks1.txt + cat students.txt + +.. R5 + +Let's say we wish to sort the output in the alphabetical order +of the names of the files. We can use the ``sort`` command for this +purpose. + +We just pipe the previous output to the ``sort`` command as, + +.. L5 +:: + + cut -d " " -f 2- marks1.txt | paste -d " " students.txt -| sort + +.. R6 + +Let's say we wish to sort the names, based on the marks in the first +subject i.e. the first column after the name. ``sort`` command also allows us to +specify the delimiter between the fields and sort the data on a particular +field. ``-t`` option is used to specify the delimiter and ``-k`` option +is used to specify the field. + +.. L6 +:: + + cut -d " " -f 2- marks1.txt | paste -d " " students.txt -| sort -t " " -k 2 + +.. L7 + +{{{ Show slide with, Sort... }}} + +.. R7 + +This command give us a sorted output as required. But, what if we would +like the output to appear in the reverse order. ``-r`` option allows the output +to be sorted in the reverse order and the ``-n`` option is used to choose +a numerical sorting. + +.. R8 + +Let us do it on the terminal and see for ourselves, + +.. L8 + +{{{ Switch to the terminal }}} +:: + + cut -d " " -f 2- marks1.txt | paste -d " " students.txt -| + sort -t " " -k 2 -rn + +.. R9 + +Suppose, While you are compiling the student marklist, Anne walks up to you and +wants to know her marks. You, being a kind person that you are, oblige. +But you do not wish to her to see the marks that others have scored. What +do you do? Here, the ``grep`` command comes to your rescue. + +``grep`` is a command line text search utility. You can use it to search +for Anne and show her, what she scored. ``grep`` allows us to search for a +search string in files. But we could, like any other command, pipe the +output of other commands to it. So, we shall use the previous combination +of cut and paste that we had, to get the marks of students along with their +names and search for Anne in that. + +.. L9 +:: + + cut -d " " -f 2- marks1.txt | paste -d " " students.txt - | grep Anne + +.. R10 + +This will give us only the line containing the word Anne as the output. +The grep command is by default case-sensitive. So, we wouldn't have got +the result if we had searched for anne, with a small a, instead of +Anne, with a capital a. But, what if we didn't know, whether the name was +capitalized or not? ``grep`` allows you to do case-insensitive searches +by using the ``-i`` option. + +.. L10 +:: + + cut -d " " -f 2- marks1.txt | paste -d " " students.txt - | grep -i Anne + +.. R11 + +Now, in another scenario, if we wished to print all the lines, which do +not contain the word Anne, we could use the ``-v`` option. + +.. L11 +:: + + cut -d " " -f 2- marks1.txt | paste -d " " students.txt - | grep -iv Anne + +.. R12 + +grep allows us to do more complex searches, for instance, searching for +sentences starting or ending with a particular pattern and regular +expression based searches. + +{{{ Show slide with, tr }}} + +``tr`` is a command that takes two sets of characters as parameters, and +replaces occurrences of the characters in the first set with the +corresponding elements from the other set. It reads from the standard +output and writes to the standard output. + +For instance, if we wish to replace all the lower case letters in the +students file with upper case, we can do it as, + +.. L12 + +{{{ Switch to the terminal }}} +:: + + cat students.txt | tr a-z A-Z + +.. R13 + +A common task is to remove empty newlines from a file. The ``-s`` flag +causes ``tr`` to compress sequences of identical adjacent characters in its +output to a single token. For example, + +.. L13 +:: + + tr -s '\n' '\n' + +.. R14 + +Hit enter 2-3 times and see that every time we hit enter we get a newline. + +.. L14 +:: + + + + +.. R15 + +It replaces sequences of one or more newline characters with a single newline. + +The ``-d`` flag causes ``tr`` to delete all tokens of the specified set of +characters from its input. In this case, only a single character set +argument is used. The following command removes carriage return characters, +thereby converting a file in DOS/Windows format to the Unix format. + +.. L15 +:: + + cat foo.txt | tr -d '\r' > bar.txt + +.. R16 + +The ``-c`` flag complements the first set of characters. + +.. L16 +:: + + tr -cd '[:alnum:]' + +.. R17 + +It therefore removes all non-alphanumeric characters. + +Let us consider one more scenario.Suppose we have a list of items, say books, +and we wish to obtain a list which names of all the books only once, without +any duplicates. To achieve this, we use the ``uniq`` command. Let us first +have a look at our file + +.. L17 +:: + + cat items.txt + +.. R18 + +Now, let us try and get rid of the duplicate lines from this file using +the ``uniq`` command. + +.. L18 +:: + + uniq items.txt + +.. R19 + +Nothing happens! Why? The ``uniq`` command removes duplicate lines only when +they are next to each other. So, henceforth, we get a sorted file from the +original file and work with that file. + +.. L19 +:: + + sort items.txt | uniq + +.. R20 + +``uniq -u`` command gives the lines which are unique and do not have any +duplicates in the file. ``uniq -d`` outputs only those lines which +have duplicates. + +.. L20 +:: + + uniq -u items-sorted.txt + +.. R21 + +The ``-c`` option displays the number of times each line occurs in the file. + +.. L21 +:: + + uniq -dc items-sorted.txt + +.. L22 + +{{{ Show summary slide }}} + +.. R22 + +This brings us to the end of the end of this tutorial. +In this tutorial, we have learnt to, + + 1. Use the ``sort`` command to sort lines of text files. + #. Use the ``grep`` command to search text pattern. + #. Use the ``tr`` command to translate and/or delete characters. + #. Use the ``uniq`` command to omit repeated lines in a text. + +.. L23 + +{{{ Show self assessment questions slide }}} + +.. R23 + +Here are some self assessment questions for you to solve + +1. To obtain patterns; one per line, which of the following command is used ? + + - grep -f + - grep -i + - grep -v + - grep -e + +2. Translate the word 'linux' to upper-case. + +3. Sort the output of the ``ls -al`` command. + +.. L24 + +{{{ Solution of self assessment questions on slide }}} + +.. R24 + +And the answers, + +1. In order to obtain patterns one per line, we use the ``grep`` command + alongwith the -f option. + +2. We use the tr command to change the word into uppercase +:: + + echo 'linux' | tr a-z A-Z + + +3. We use the sort command as, +:: + + ls -al | sort -n -k5 +The -n means "sort numerically", and the -k5 option means to key off of +column five. + +.. L25 + +{{{ Show the SDES & FOSSEE slide }}} + +.. R25 + +Software Development techniques for Engineers and Scientists - SDES, is an +initiative by FOSSEE. For more information, please visit the given link. + +Free and Open-source Software for Science and Engineering Education - FOSSEE, is +based at IIT Bombay which is funded by MHRD as part of National Mission on +Education through ICT. + +.. L26 + +{{{ Show the ``About the Spoken Tutorial Project'' slide }}} + +.. R26 + +Watch the video available at the following link. It summarises the Spoken +Tutorial project.If you do not have good bandwidth, you can download and +watch it. + +.. L27 + +{{{ Show the `` Spoken Tutorial Workshops'' slide }}} + +.. R27 + +The Spoken Tutorial Project Team conducts workshops using spoken tutorials, +gives certificates to those who pass an online test. + +For more details, contact contact@spoken-tutorial.org + +.. L28 + +{{{ Show the ``Acknowledgements'' slide }}} + +.. R28 + +Spoken Tutorial Project is a part of the "Talk to a Teacher" project. +It is supported by the National Mission on Education through ICT, MHRD, +Government of India. More information on this mission is available at the +given link. + +.. L29 + +{{{ Show the Thank you slide }}} + +.. R29 + +Hope you have enjoyed this tutorial and found it useful. +Thank you! diff --git a/ult/ult_7/script2col.rst b/ult/ult_7/script2col.rst new file mode 100644 index 0000000..b15e85c --- /dev/null +++ b/ult/ult_7/script2col.rst @@ -0,0 +1,210 @@ +.. Objectives +.. ---------- + + .. At the end of this tutorial, you will be able to: + + .. 1. Sort lines of text files + .. 2. Print lines matching a pattern + .. 3. Translate or delete characters + .. 4. Omit repeated lines + + +.. Prerequisites +.. ------------- + +.. 1. Getting started with Linux +.. 2. Redirection and Piping + + + +Script +------ + + + ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| {{{ Show the first slide containing title, name of the production | Hello friends and Welcome to the tutorial on 'Text Processing'. | +| team along with the logo of MHRD }}} | | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| {{{ Show slide with objectives }}} | At the end of this tutorial, you will be able to, | +| | | +| | 1. Sort lines of text files | +| | #. Print lines matching a pattern | +| | #. Translate or delete characters | +| | #. Omit repeated lines. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| {{{ Switch to the pre-requisite slide }}} | Before beginning this tutorial,we would suggest you to complete the | +| | former tutorials as being displayed currently. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| {{{ Open the terminal }}} | In this tutorial, we shall learn about text processing. | +| :: | TO begin with, consider data kept in two files, namely marks1.txt and | +| | students.txt | +| cat marks1.txt | Let us see what data they contain. Open a terminal and type, | +| cat students.txt | | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| :: | Let's say we wish to sort the output in the alphabetical order | +| | of the names of the files. We can use the ``sort`` command for this | +| cut -d " " -f 2- marks1.txt | paste -d " " students.txt -| sort | purpose. | +| | | +| | We just pipe the previous output to the ``sort`` command as, | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| :: | Let's say we wish to sort the names, based on the marks in the first | +| | subject i.e. the first column after the name. ``sort`` command also allows us to | +| cut -d " " -f 2- marks1.txt | paste -d " " students.txt -| sort -t " " -k 2 | specify the delimiter between the fields and sort the data on a particular | +| | field. ``-t`` option is used to specify the delimiter and ``-k`` option | +| | is used to specify the field. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| {{{ Show slide with, Sort... }}} | This command give us a sorted output as required. But, what if we would | +| | like the output to appear in the reverse order. ``-r`` option allows the output | +| | to be sorted in the reverse order and the ``-n`` option is used to choose | +| | a numerical sorting. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| {{{ Switch to the terminal }}} | Let us do it on the terminal and see for ourselves, | +| :: | | +| | | +| cut -d " " -f 2- marks1.txt | paste -d " " students.txt -| | | +| sort -t " " -k 2 -rn | | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| :: | Suppose, While you are compiling the student marklist, Anne walks up to you and | +| | wants to know her marks. You, being a kind person that you are, oblige. | +| cut -d " " -f 2- marks1.txt | paste -d " " students.txt - | grep Anne | But you do not wish to her to see the marks that others have scored. What | +| | do you do? Here, the ``grep`` command comes to your rescue. | +| | | +| | ``grep`` is a command line text search utility. You can use it to search | +| | for Anne and show her, what she scored. ``grep`` allows us to search for a | +| | search string in files. But we could, like any other command, pipe the | +| | output of other commands to it. So, we shall use the previous combination | +| | of cut and paste that we had, to get the marks of students along with their | +| | names and search for Anne in that. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| :: | This will give us only the line containing the word Anne as the output. | +| | The grep command is by default case-sensitive. So, we wouldn't have got | +| cut -d " " -f 2- marks1.txt | paste -d " " students.txt - | grep -i Anne | the result if we had searched for anne, with a small a, instead of | +| | Anne, with a capital a. But, what if we didn't know, whether the name was | +| | capitalized or not? ``grep`` allows you to do case-insensitive searches | +| | by using the ``-i`` option. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| :: | Now, in another scenario, if we wished to print all the lines, which do | +| | not contain the word Anne, we could use the ``-v`` option. | +| cut -d " " -f 2- marks1.txt | paste -d " " students.txt - | grep -iv Anne | | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| {{{ Switch to the terminal }}} | grep allows us to do more complex searches, for instance, searching for | +| :: | sentences starting or ending with a particular pattern and regular | +| | expression based searches. | +| cat students.txt | tr a-z A-Z | | +| | {{{ Show slide with, tr }}} | +| | | +| | ``tr`` is a command that takes two sets of characters as parameters, and | +| | replaces occurrences of the characters in the first set with the | +| | corresponding elements from the other set. It reads from the standard | +| | output and writes to the standard output. | +| | | +| | For instance, if we wish to replace all the lower case letters in the | +| | students file with upper case, we can do it as, | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| :: | A common task is to remove empty newlines from a file. The ``-s`` flag | +| | causes ``tr`` to compress sequences of identical adjacent characters in its | +| tr -s '\n' '\n' | output to a single token. For example, | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| :: | Hit enter 2-3 times and see that every time we hit enter we get a newline. | +| | | +| | | +| | | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| :: | It replaces sequences of one or more newline characters with a single newline. | +| | | +| cat foo.txt | tr -d '\r' > bar.txt | The ``-d`` flag causes ``tr`` to delete all tokens of the specified set of | +| | characters from its input. In this case, only a single character set | +| | argument is used. The following command removes carriage return characters, | +| | thereby converting a file in DOS/Windows format to the Unix format. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| :: | The ``-c`` flag complements the first set of characters. | +| | | +| tr -cd '[:alnum:]' | | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| :: | It therefore removes all non-alphanumeric characters. | +| | | +| cat items.txt | Let us consider one more scenario.Suppose we have a list of items, say books, | +| | and we wish to obtain a list which names of all the books only once, without | +| | any duplicates. To achieve this, we use the ``uniq`` command. Let us first | +| | have a look at our file | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| :: | Now, let us try and get rid of the duplicate lines from this file using | +| | the ``uniq`` command. | +| uniq items.txt | | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| :: | Nothing happens! Why? The ``uniq`` command removes duplicate lines only when | +| | they are next to each other. So, henceforth, we get a sorted file from the | +| sort items.txt | uniq | original file and work with that file. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| :: | ``uniq -u`` command gives the lines which are unique and do not have any | +| | duplicates in the file. ``uniq -d`` outputs only those lines which | +| uniq -u items-sorted.txt | have duplicates. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| :: | The ``-c`` option displays the number of times each line occurs in the file. | +| | | +| uniq -dc items-sorted.txt | | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| {{{ Show summary slide }}} | This brings us to the end of the end of this tutorial. | +| | In this tutorial, we have learnt to, | +| | | +| | 1. Use the ``sort`` command to sort lines of text files. | +| | #. Use the ``grep`` command to search text pattern. | +| | #. Use the ``tr`` command to translate and/or delete characters. | +| | #. Use the ``uniq`` command to omit repeated lines in a text. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| {{{ Show self assessment questions slide }}} | Here are some self assessment questions for you to solve | +| | | +| | 1. To obtain patterns; one per line, which of the following command is used ? | +| | | +| | - grep -f | +| | - grep -i | +| | - grep -v | +| | - grep -e | +| | | +| | 2. Translate the word 'linux' to upper-case. | +| | | +| | 3. Sort the output of the ``ls -al`` command. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| {{{ Solution of self assessment questions on slide }}} | And the answers, | +| | | +| | 1. In order to obtain patterns one per line, we use the ``grep`` command | +| | alongwith the -f option. | +| | | +| | 2. We use the tr command to change the word into uppercase | +| | :: | +| | | +| | echo 'linux' | tr a-z A-Z | +| | | +| | | +| | 3. We use the sort command as, | +| | :: | +| | | +| | ls -al | sort -n -k5 | +| | The -n means "sort numerically", and the -k5 option means to key off of | +| | column five. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| {{{ Show the SDES & FOSSEE slide }}} | Software Development techniques for Engineers and Scientists - SDES, is an | +| | initiative by FOSSEE. For more information, please visit the given link. | +| | | +| | Free and Open-source Software for Science and Engineering Education - FOSSEE, is | +| | based at IIT Bombay which is funded by MHRD as part of National Mission on | +| | Education through ICT. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| {{{ Show the ``About the Spoken Tutorial Project'' slide }}} | Watch the video available at the following link. It summarises the Spoken | +| | Tutorial project.If you do not have good bandwidth, you can download and | +| | watch it. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| {{{ Show the `` Spoken Tutorial Workshops'' slide }}} | The Spoken Tutorial Project Team conducts workshops using spoken tutorials, | +| | gives certificates to those who pass an online test. | +| | | +| | For more details, contact contact@spoken-tutorial.org | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| {{{ Show the ``Acknowledgements'' slide }}} | Spoken Tutorial Project is a part of the "Talk to a Teacher" project. | +| | It is supported by the National Mission on Education through ICT, MHRD, | +| | Government of India. More information on this mission is available at the | +| | given link. | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ +| {{{ Show the Thank you slide }}} | Hope you have enjoyed this tutorial and found it useful. | +| | Thank you! | ++----------------------------------------------------------------------------------+----------------------------------------------------------------------------------+ diff --git a/ult/ult_7/students.txt b/ult/ult_7/students.txt new file mode 100644 index 0000000..ddacd6b --- /dev/null +++ b/ult/ult_7/students.txt @@ -0,0 +1,5 @@ +Hussain +Dilbert +Anne +Raul +Sven diff --git a/ult/ult_7/ult7.tex b/ult/ult_7/ult7.tex new file mode 100644 index 0000000..3d981a6 --- /dev/null +++ b/ult/ult_7/ult7.tex @@ -0,0 +1,249 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Using Linux Tools +% +% Author: FOSSEE +% Copyright (c) 2009, FOSSEE, IIT Bombay +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\documentclass[17pt,compress]{beamer} +\usepackage{beamerthemesplit} +\mode +{ + \usetheme{Warsaw} + \useoutertheme{infolines} + \setbeamercovered{transparent} + \setbeamertemplate{navigation symbols}{} +} +% Taken from Fernando's slides. +\usepackage{ae,aecompl} +\usepackage[scaled=.95]{helvet} + +\usepackage[english]{babel} +\usepackage[latin1]{inputenc} +\usepackage[T1]{fontenc} + +% change the alerted colour to LimeGreen +\definecolor{LimeGreen}{RGB}{50,205,50} +\setbeamercolor{structure}{fg=LimeGreen} +\author[FOSSEE]{} +\institute[IIT Bombay]{} +\date[]{} +% \setbeamercovered{transparent} + +% theme split +\usepackage{verbatim} +\newenvironment{colorverbatim}[1][]% +{% +\color{blue} +\verbatim +}% +{% +\endverbatim +}% + +\usepackage{mathpazo,courier,euler} +\usepackage{listings} +\lstset{language=sh, + basicstyle=\ttfamily\bfseries, + showstringspaces=false, + keywordstyle=\color{black}\bfseries} + +% logo +\logo{\includegraphics[height=1.30 cm]{../images/3t-logo.pdf}} +\logo{\includegraphics[height=1.30 cm]{../images/fossee-logo.pdf} + +\hspace{7.5cm} +\includegraphics[scale=0.99]{../images/fossee-logo.pdf}\\ +\hspace{281pt} +\includegraphics[scale=0.80]{../images/3t-logo.pdf}} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% DOCUMENT STARTS +\begin{document} + +\sffamily \bfseries +\title +[Text Processing] +{Text Processing} +\author +[FOSSEE] +{\small Talk to a Teacher\\{\color{blue}\url{http://spoken-tutorial.org}}\\\vspace{0.25cm}National Mission on Education + through ICT\\{\color{blue}\url{ http://sakshat.ac.in}} \\ [1.65cm] + Contributed by FOSSEE Team \\IIT Bombay \\[0.3cm] +} + +% slide 1 +\begin{frame} + \titlepage +\end{frame} + +\begin{frame} +\frametitle{Objectives} +\label{sec-2} + +At the end of this tutorial, you will be able to, +\begin{itemize} +\item Sort lines of text files +\item Print lines matching a pattern +\item Translate or delete characters +\item Omit repeated lines +\end{itemize} +\end{frame} + +\begin{frame} +\frametitle{Pre-requisites} +\label{sec-3} + +Spoken tutorial on, +\begin{itemize} +\item Getting started with Linux +\item Redirection and Piping +\end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{\texttt{sort}} +\verb~$ cut -d " " -f 2- marks1.txt \~ +\verb~| paste -d " " students.txt -\~ +\verb~| sort -t " " -k 2 -rn~ + \begin{itemize} + \item \texttt{-t} the delimiter between fields + \item \texttt{-k} field to use for sorting + \item \texttt{-r} for sorting in the reverse order + \item \texttt{-n} to choose numerical sorting + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{\texttt{tr}} + \begin{itemize} + \item Translates or deletes characters + \item Reads from \texttt{stdin} and outputs to \texttt{stdout} + \item Given, two sets of characters, replaces one with other + \end{itemize} +\end{frame} + +\begin{frame} +\frametitle{Summary} +\label{sec-8} + + In this tutorial, we have learnt to, + + +\begin{itemize} +\item Use the ``sort'' command to sort lines of text files +\item Use the ``grep'' command to search text pattern +\end{itemize} +\end{frame} + +\begin{frame} +\frametitle{Summary..} +\begin{itemize} +\item Use the ``tr'' command to translate and/or delete characters +\item Use the ``uniq'' command to omit repeated lines in a text +\end{itemize} +\end{frame} + +\begin{frame}[fragile] +\frametitle{Evaluation} +\label{sec-9} + + +\begin{enumerate} +\item To obtain patterns; one per line, which of the following command is used ? +\vspace{3pt} +\begin{itemize} +\item grep -f +\item grep -i +\item grep -v +\item grep -e +\end{itemize} +\end{enumerate} +\end{frame} + +\begin{frame}[fragile] +\frametitle{Evaluation..} +\begin{enumerate} +\setcounter{enumi}{1} +\item Translate the word `linux' to upper-case. +\vspace{8pt} +\item Sort the output of the ``ls -al'' command. +\end{enumerate} +\end{frame} + +\begin{frame} +\frametitle{Solutions} +\label{sec-10} + + +\begin{enumerate} +\item grep -f +\vspace{15pt} +\item \$ echo `linux' | tr a-z A-Z +\vspace{15pt} +\item \$ ls -al | sort -n -k5 +\end{enumerate} +\end{frame} + +\begin{frame} +\frametitle{SDES \& FOSSEE} +\begin{center} +\begin{itemize} +\item \small{SDES}\\ +\small{\color{LimeGreen}Software Development techniques for Engineers and Scientists} \\ +\scriptsize An initiative by FOSSEE. \\ +\vspace{3pt} +\scriptsize For more information on SDES, please visit {\color{blue}\url{http://fossee.in/sdes}}\\ +\vspace{10pt} +\item \small{FOSSEE}\\ +\small {\color{LimeGreen}Free and Open-source Software for \\Science and Engineering Education} \\ +\scriptsize Based at IIT Bombay, Funded by MHRD.\\ +\vspace{3pt} +\scriptsize Part of National Mission on Education through ICT \\(NME-ICT) \\ +\end{itemize} +\end{center} +\end{frame} + +\begin{frame} +\frametitle{About the Spoken Tutorial Project} +\begin{itemize} +\item Watch the video available at {\color{blue}\url{http://spoken-tutorial.org /What\_is\_a\_Spoken\_Tutorial}} +\item It summarises the Spoken Tutorial project +\item If you do not have good bandwidth, you can download and watch it +\end{itemize} +\end{frame} + +\begin{frame} +\frametitle{Spoken Tutorial Workshops}The Spoken Tutorial Project Team +\begin{itemize} +\item Conducts workshops using spoken tutorials +\item Gives certificates to those who pass an online test +\item For more details, please write to \\ \hspace {0.5cm}{\color{blue}contact@spoken-tutorial.org} +\end{itemize} +\end{frame} + +\begin{frame} +\frametitle{Acknowledgements} +\begin{itemize} +\item Spoken Tutorial Project is a part of the Talk to a Teacher project +\item It is supported by the National Mission on Education through ICT, MHRD, Government of India +\item More information on this Mission is available at: \\{\color{blue}\url{http://spoken-tutorial.org/NMEICT-Intro}} +\end{itemize} +\end{frame} + +\begin{frame} + + \begin{block}{} + \begin{center} + {\Large THANK YOU!} + \end{center} + \end{block} +\begin{block}{} + \begin{center} + For more Information, visit our website\\ + {\color{blue}\url{http://fossee.in/}} + \end{center} + \end{block} +\end{frame} + + +\end{document} -- cgit