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
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
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!
|