1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
|
.. 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 can do the
same operations as the ``cut`` and ``paste`` commands.
Consider the files ``marks.txt`` and ``students.txt``, which has the
following contents
.. L4
{{{ Open the terminal }}}
::
cat marks1.txt
cat students.txt
.. R5
Let us view the contents of both the files side-by-side
.. L5
::
cut -d " " -f 2- marks1.txt | paste -d " " students.txt -
.. R6
Now, in order to view the same ouput in a file at a new location, we say,
.. L6
::
cut -d " " -f 2- marks1.txt > /tmp/m_tmp.txt
paste -d " " students.txt m_tmp.txt
.. R7
Let's first try to understand the second solution, which is a two step
solution. 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 always be what we 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 introduce an error into the ``cut`` command used
before. We change the ``-f`` option to ``-c``
.. L10
{{{ Switch to terminal }}}
::
cut -d " " -c 2- marks1.txt > /tmp/m_tmp.txt
.. R11
This prints an error that says the delimiter option should be used with the
fields option only, and you can verify that the ``m_tmp.txt`` file is
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 ``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, what is happening with the ``cut`` command. If we look at the command only
up to the ``|`` character, it is a normal ``cut`` command . So, the ``|`` seems
to be joining the 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 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 the 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 you need not be
restricted to two commands.
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 and you have entered enough portion of the
word, bash can complete the word for you, by hitting 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.
.. 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. So, you can go
back to a previously typed command and use the up and down arrow keys to
navigate in your bash history.
.. L18
::
<UP-ARROW>
.. R19
You can also search incrementally, for commands in your bash history.
``Ctrl-r`` searches 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.
.. 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 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.
.. L20
.. L21
{{{ Show slide, with Shell Meta Characters }}}
.. R21
The characters that you can 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 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
.. 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.
#. Use the pipe ( | ) character.
#. 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
.. L28
{{{ Solution of self assessment questions on slide }}}
.. R28
And the answers,
.. L29
{{{ Show the Thank you slide }}}
.. R29
Hope you have enjoyed this tutorial and found it useful.
Thank you!
|