summaryrefslogtreecommitdiff
path: root/ult/ult_4/script.rst
diff options
context:
space:
mode:
Diffstat (limited to 'ult/ult_4/script.rst')
-rw-r--r--ult/ult_4/script.rst409
1 files changed, 409 insertions, 0 deletions
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<TAB><TAB>
+ ~/<TAB><TAB>
+
+.. 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
+::
+
+ <UP-ARROW>
+
+.. 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
+::
+
+ <Ctrl-r> 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!
+