Tag Archives | Bash

Docker 19.03.3 duyuruldu

İşletim sistemi imajlarını versiyonlayan, Apache versiyon 2 lisanslı, Go dili ile yazılmış bir sanallaştırma ve konteyner teknolojisi olan Docker‘in 19.03.3 sürümü duyuruldu. Docker Template 0.1.6 için destek eklenen yeni sürümde, var olmayan konteynere bağlanırken “geçersiz parametre” döndürmek için bir düzeltme gerçekleştirildiği bildiriliyor. Docker; kişilere ya da kuruluşlara çeşitli gereksinimlerini, çoklu problemlerini çözmelerine izin veren eksiksiz bir konteyner platformu sunuyor. Debian, Ubuntu gibi dağıtımlar için ayrı ayrı uygulamalar sunan Docker; BT liderlerinin mimarlık ve altyapı kilitlenmesi korkusu olmaksızın tüm uygulama portföylerini kendi hızlarıyla etkin bir maliyet ile oluşturup yönetebilecekleri bir ortam sağlayan, kurumsal kullanıma hazır bir konteyner platformudur. Docker ayrıca, yeni uygulamalar oluşturmak için zaman ve kaynak ayırma imkanı da sağlar. Bilindiği gibi Docker’in Community Edition (CE) ve Enterprise Edition (EE) olmak üzere iki sürümü bulunuyor. Docker 19.03.3 hakkında daha ayrıntılı bilgi edinmek için sürüm duyurusunu ya da sürüm notlarını inceleyebilirsiniz.

Continue Reading →

Docker 19.03.3 edinmek için aşağıdaki linklerden yararlanabilirsiniz.

0

How to write practical shell scripts

In the last post, we talked about regular expressions and we saw how to use them in sed and awk for text processing, and we discussed before Linux sed command and awk command. During the series, we wrote small shell scripts, but we didn’t mix things up, I think we should take a small step further and write a useful shell script. However, the scripts in this post will help you to empower your scriptwriting skills. You can send messages to someone by phone or email, but one method, not commonly used anymore, is sending a message directly to the user’s terminal. We are going to build a bash script that will send a message to a user who is logged into the Linux system. For this simple shell script, only a few functions are required. Most of the required commands are common and have been covered in our series of shell scripting; you can review the previous posts.

Continue Reading →

Sending Messages

First, we need to know who is logged in. This can be done using the who command which retrieves all logged in users.

who

shell scripts who command

To send a message you need the username and his current terminal.

You need to know if messages are allowed or not for that user using the mesg command.

mesg

mesg command

If the result shows “is y” that means messaging is permitted. If the result shows “is n”, that means messaging is not permitted.

To check any logged user message status, use the who command with -T option.

who -T

If you see a dash (-) that means messages are turned off and if you see plus sign (+) that means messages are enabled.

To allow messages, type mesg command with the “y” option like this

mesg y

allow messages

Sure enough, it shows “is y” which means messages are permitted for this user.

Of course, we need another user to be able to communicate with him so in my case I’m going to connect to my PC using SSH and I’m already logged in with my user, so we have two users logged onto the system.

Let’s see how to send a message.

Write Command

The write command is used to send messages between users using the username and current terminal.

For those users who logged into the graphical environment (KDE, Gnome, Cinnamon or any), they can’t receive messages. The user must be logged onto the terminal

We will send a message to testuser user from my user likegeeks like this:

write testuser pts/1

write command

Type the write command followed by the user and the terminal and hit Enter.

When you hit Enter, you can start typing your message. After finishing the message, you can send the message by pressing the Ctrl+D key combination which is the end of file signal. I recommend you to review the post about signals and jobs.

Receive message

The receiver can recognize which user on which terminal sends the message. EOF means that the message is finished.

I think now we have all the parts to build our shell script.

Creating The Send Script

Before we create our shell script, we need to determine whether the user we want to send a message to him is currently logged on the system, this can be done using the who command to determine that.

logged=$(who | awk -v IGNORECASE=1 -v usr=$1 '{ if ($1==usr) { print $1 }exit }')

We get the logged in users using the who command and pipe it to awk and check if it is matching the entered user.

The final output from the awk command is stored in the variable logged.

Then we need to check the variable if it contains something or not:

if [ -z $logged ]; then

echo "$1 is not logged on."

echo "Exit"

exit

fi

I recommend you to read the post about the if statement and how to use it Bash Script.

Check logged user

The logged variable is tested to check if it is a zero or not.

If it is zero, the script prints the message, and the script is terminated.

If the user is logged, the logged variable contains the username.

Checking If The User Accepts Messages

To check if messages are allowed or not, use the who command with -T option.

check=$(who -T | grep -i -m 1 $1 | awk '{print $2}')

if [ "$check" != "+" ]; then

echo "$1 disable messaging."

echo "Exit"

exit

fi

Check message allowed

Notice that we use the who command with -T. This shows a (+) beside the username if messaging is permitted. Otherwise, it shows a (-) beside the username, if messaging is not permitted.

Finally, we check for a messaging indicator if the indicator is not set to plus sign (+).

Checking If Message Was Included

You can check if the message was included or not like this:

if [ -z $2 ]; then

echo "Message not found"

echo "Exit"

exit

fi

Getting the Current Terminal

Before we send a message, we need to get the user current terminal and store it in a variable.

terminal=$(who | grep -i -m 1 $1 | awk '{print $2}')

Then we can send the message:

echo $2 | write $logged $terminal

Now we can test the whole shell script to see how it goes:

$ ./senderscript likegeeks welcome

Let’s see the other shell window:

Send message

Good!  You can now send simple one-word messages.

Sending a Long Message

If you try to send more than one word:

$ ./senderscript likegeeks welcome to shell scripting

One word message

It didn’t work. Only the first word of the message is sent.

To fix this problem, we will use the shift command with the while loop.

shift

while [ -n "$1" ]; do

message=$message' '$1

shift

done

And now one thing needs to be fixed, which is the message parameter.

echo $whole_message | write $logged $terminal

So now the whole script should be like this:

If you try now:

$ ./senderscript likegeeks welcome to shell scripting

Complete message

Awesome!! It worked. Again, I’m not here to make a script to send the message to the user, but the main goal is to review our shell scripting knowledge and use all the parts we’ve learned together and see how things work together.

Monitoring Disk Space

Let’s build a script that monitors the biggest top ten directories.

If you add -s option to the du command, it will show summarized totals.

$ du -s /var/log/

The -S option is used to show the subdirectories totals.

$ du -S /var/log/

du command

You should use the sort command to sort the results generated by the du command to get the largest directories like this:

$ du -S /var/log/ | sort -rn

sort command

The -n to sort numerically and the -r option to reverse the order so it shows the bigger first.

The N command is used to label each line with a number:

sed '{11,$D; =}' |

sed 'N; s/\n/ /' |

Then we can clean the output using the awk command:

awk '{printf $1 ":" "\t" $2 "\t" $3 "\n"}'

Then we add a colon and a tab so it appears much better.

$ du -S /var/log/ |

sort -rn |

sed '{11,$D; =}' |

# pipe the first result for another one to clean it

sed 'N; s/\n/ /' |

# formated printing using printf

awk '{printf $1 ":" "\t" $2 "\t" $3 "\n"}'

Format output with sed and awk

Suppose we have a variable called  MY_DIRECTORIES that holds 2 folders.

MY_DIRECTORIES=”/home /var/log”

We will iterate over each directory from MY_DIRECTORIES variable and get the disk usage using du command.

So the shell script will look like this:

Monitor disk usage

Good!! Both directories /home and /var/log are shown on the same report.

You can filter files, so instead of calculating the consumption of all files, you can calculate the consumption for a specific extension like *.log or whatever.

One thing I have to mention here, in production systems, you can’t rely on disk space report instead, you should use disk quotas.

Quota package is specialized for that, but here we are learning how bash scripts work.

Again the shell scripts we’ve introduced here is for showing you how shell scripting work, there are a ton of ways to implement any task in Linux.

My post is finished! I tried to reduce the post length and make everything as simple as possible, hope you like it.

Keep coming back. Thank you.

0

Docker 19.03.2 duyuruldu

İşletim sistemi imajlarını versiyonlayan, Apache versiyon 2 lisanslı, Go dili ile yazılmış bir sanallaştırma ve konteyner teknolojisi olan Docker‘in 19.03.2 sürümü duyuruldu. Gelecekteki sürümünün v2 schema1 desteğini tamamen kaldıracağı söylenen yazılımda, aufs depolama sürücüsü de kullanımdan kaldırılmış bulunuyor. Windows’ta var olmayan bir dizinin “COPY – from” dizininin düzeltildiği söyenirken, bağlam yaratmada tutarlı çıktılar üretildiği belittildi. HTTP proxy env değişkeni desteği düzeltilen sürümde, ağdaki panik oluşumunun engellendiği söyleniyor. Docker; kişilere ya da kuruluşlara çeşitli gereksinimlerini, çoklu problemlerini çözmelerine izin veren eksiksiz bir konteyner platformu sunuyor. Debian, Ubuntu gibi dağıtımlar için ayrı ayrı uygulamalar sunan Docker; BT liderlerinin mimarlık ve altyapı kilitlenmesi korkusu olmaksızın tüm uygulama portföylerini kendi hızlarıyla etkin bir maliyet ile oluşturup yönetebilecekleri bir ortam sağlayan, kurumsal kullanıma hazır bir konteyner platformudur. Docker ayrıca, yeni uygulamalar oluşturmak için zaman ve kaynak ayırma imkanı da sağlar. Bilindiği gibi Docker’in Community Edition (CE) ve Enterprise Edition (EE) olmak üzere iki sürümü bulunuyor. Docker 19.03.2 hakkında daha ayrıntılı bilgi edinmek için sürüm duyurusunu ya da sürüm notlarını inceleyebilirsiniz.

Continue Reading →

Docker 19.03.2 edinmek için aşağıdaki linklerden yararlanabilirsiniz.

0

31+ Examples for sed Linux Command in Text Manipulation

In the previous post, we talked about bash functions and how to use them from the command line directly and we saw some other cool stuff. Today we will talk about a very useful tool for string manipulation called sed or sed Linux command. Sed is used to work with text files like log files, configuration files, and other text files. In this post, we are going to focus on sed Linux command which is used for text manipulation, which is a very important step in our bash scripting journey. Linux system provides some tools for text processing, one of those tools is sed. We will discuss the 31+ examples with pictures to show the output of every example.

Continue Reading →

Understand sed Linux Command

The sed command is a non-interactive text editor. Sed Linux command edits data based on the rules you provide, you can use it like this:

sed options file

You are not limited to use sed to manipulate files, you apply it to the STDIN directly like this:

echo "Welcome to LikeGeeks page" | sed 's/page/website/'

sed Linux command

The s command replaces the first text with the second text pattern. In this case, the string “website” was replaced with the word “page”, so the result will be as shown.

The above example was a very basic example to demonstrate the tool. We can use sed Linux command to manipulate files as well.

This is our file:

sed manipulate file

sed 's/test/another test/' ./myfile

The results are printed to the screen instantaneously, you don’t have to wait for processing the file to the end.

If your file is huge enough, you will see the result before the processing is finished.

Sed Linux command doesn’t update your data. It only sends the changed text to STDOUT. The file still untouched. If you need to overwrite the existing content, you can check our previous post which was talking about redirections.

Using Multiple sed Linux Commands in The Command Line

To run multiple sed commands, you can use the -e option like this:

sed -e 's/This/That/; s/test/another test/' ./myfile

sed multiple commands

Sed command must be separated by a semicolon without any spaces.

Also, you can use a single quotation to separate commands like this:

sed -e '

> s/This/That/

> s/test/another test/' myfile

sed separate commands

The same result, no big deal. 

Reading Commands From a File

You can save your sed commands in a file and use them by specifying the file using -f option.

cat mycommands

s/This/That/

s/test/another test/

sed -f mycommands myfile

read commands from file

Substituting Flags

Look at the following example carefully:

cat myfile

sed 's/test/another test/' myfile

sed substitute flag

The above result shows the first occurrence in each line is only replaced. To substitute all occurrences of a pattern, use one of the following substitution flags.

The flags are written like this:

s/pattern/replacement/flags

There are four types of substitutions:

  • g, replace all occurrences.
  • A number, the occurrence number for the new text that you want to substitute.
  • p, print the original content.
  • w file: means write the results to a file.

You can limit your replacement by specifying the occurrence number that should be replaced like this:

sed 's/test/another test/2' myfile

sed number flag

As you can see, only the second occurrence on each line was replaced.

The g flag means global, which means a global replacement for all occurrences:

sed 's/test/another test/g' myfile

sed global flag

The p flag prints each line contains a pattern match, you can use the -n option to print the modified lines only.

cat myfile

sed -n 's/test/another test/p' myfile

sed supress lines

The w flag saves the output to a specified file:

sed 's/test/another test/w output' myfile

send output to file

The output is printed on the screen, but the matching lines are saved to the output file.

Replace Characters

Suppose that you want to search for bash shell and replace it with csh shell in the /etc/passwd file using sed, well, you can do it easily:

sed 's/\/bin\/bash/\/bin\/csh/' /etc/passwd

Oh!! that looks terrible.

Luckily, there is another way to achieve that. You can use the exclamation mark (!) as string delimiter like this:

sed 's!/bin/bash!/bin/csh!' /etc/passwd

Now it’s easier to read.

Limiting sed

Sed command processes your entire file. However, you can limit the sed command to process specific lines, there are two ways:

  • A range of lines.
  • A pattern that matches a specific line.

You can type one number to limit it to a specific line:

sed '2s/test/another test/' myfile

sed restricted

Only line two is modified.

What about using a range of lines:

sed '2,3s/test/another test/' myfile

replace range of lines

Also, we can start from a line to the end of the file:

sed '2,$s/test/another test/' myfile

sed replace to the end

Or you can use a pattern like this:

sed '/likegeeks/s/bash/csh/' /etc/passwd

sed pattern match

Awesome!!

You can use regular expressions to write this pattern to be more generic and useful.

Delete Lines

To delete lines, the delete (d) flag is your friend.

The delete flag deletes the text from the stream, not the original file.

sed '2d' myfile

sed delete line

Here we delete the second line only from myfile.

What about deleting a range of lines?

sed '2,3d' myfile

delete multiple line

Here we delete a range of lines, the second and the third.

Another type of ranges:

sed '3,$d' myfile

delete to the end

Here we delete from the third line to the end of the file.

All these examples never modify your original file.

sed '/test 1/d' myfile

delete pattern match

Here we use a pattern to delete the line if matched on the first line.

If you need to delete a range of lines, you can use two text patterns like this:

sed '/second/,/fourth/d' myfile

delete range of lines

From the second to the fourth line are deleted.

Insert and Append Text

You can insert or append text lines using the following flags:

  • The (i) flag.
  • The  (a) flag.

echo "Another test" | sed 'i\First test '

sed insert text

Here the text is added before the specified line.

echo "Another test" | sed 'a\First test '

sed append

Here the text is added after the specified line.

Well, what about adding text in the middle?

Easy, look at the following example:

sed '2i\This is the inserted line.' myfile

sed insert line

And the appending works the same way, but look at the position of the appended text:

sed '2a\This is the appended line.' myfile

sed append line

The same flags are used but with a location of insertion or appending.

Modifying Lines

To modify a specific line, you can use the (c) flag like this:

sed '3c\This is a modified line.' myfile

sed modify line

You can use a regular expression pattern and all lines match that pattern will be modified.

sed '/This is/c Line updated.' myfile

sed pattern match

Transform Characters

The transform flag (y) works on characters like this:

sed 'y/123/567/' myfile

sed transform character

The transformation is applied to all data and cannot be limited to a specific occurrence.

Print Line Numbers

You can print line number using the (=) sign like this:

sed '=' myfile

sed line numbers

However, by using -n combined with the equal sign, the sed command displays the line number that contains matching.

sed -n '/test/=' myfile

hide lines

Read Data From a File

You can use the (r) flag to read data from a file.

You can define a line number or a text pattern for the text that you want to read.

cat newfile

sed '3r newfile' myfile

read data from file

The content is just inserted after the third line as expected.

And this is using a text pattern:

sed '/test/r newfile' myfile

read match pattern

Cool right?

Useful Examples

We have a file that contains text with a placeholder and we have another file that contains the data that will be filled in that placeholder.

We will use the (r) and (d) flags to do the job.

The word DATA in that file is a placeholder for a real content which is stored in another file called data.

We will replace it with the actual content:

Sed '/DATA>/ {

r newfile

d}' myfile

repalce placeholder

Awesome!! as you can see, the placeholder location is filled with the data from the other file.

This is just a very small intro about sed command. Actually, sed Linux command is another world by itself.

The only limitation is your imagination.

I hope you enjoy what’ve introduced today about the string manipulation using sed Linux command.

Thank you.

0

Docker 19.03.1 duyuruldu

İşletim sistemi imajlarını versiyonlayan, Apache versiyon 2 lisanslı, Go dili ile yazılmış bir sanallaştırma ve konteyner teknolojisi olan Docker‘in 19.03.1 sürümü duyuruldu. Gelecekteki sürümünün v2 schema1 desteğini tamamen kaldıracağı söylenen yazılımda, aufs depolama sürücüsü de kullanımdan kaldırılmış bulunuyor. Docker Engine Community Edition (CE) ve Docker Engine Enterprise Edition (EE) ile ilgili daha fazla bilgi edinmek için sürüm notlarının incelenebileceği söyleniyor. Docker; kişilere ya da kuruluşlara çeşitli gereksinimlerini, çoklu problemlerini çözmelerine izin veren eksiksiz bir konteyner platformu sunuyor. Debian, Ubuntu gibi dağıtımlar için ayrı ayrı uygulamalar sunan Docker; BT liderlerinin mimarlık ve altyapı kilitlenmesi korkusu olmaksızın tüm uygulama portföylerini kendi hızlarıyla etkin bir maliyet ile oluşturup yönetebilecekleri bir ortam sağlayan, kurumsal kullanıma hazır bir konteyner platformudur. Docker ayrıca, yeni uygulamalar oluşturmak için zaman ve kaynak ayırma imkanı da sağlar. Bilindiği gibi Docker’in Community Edition (CE) ve Enterprise Edition (EE) olmak üzere iki sürümü bulunuyor. Docker 19.03.1 hakkında daha ayrıntılı bilgi edinmek için sürüm duyurusunu ya da sürüm notlarını inceleyebilirsiniz.

Continue Reading →

Docker 19.03.1 edinmek için aşağıdaki linklerden yararlanabilirsiniz.

0

Docker 19.03.0 duyuruldu

İşletim sistemi imajlarını versiyonlayan, Apache versiyon 2 lisanslı, Go dili ile yazılmış bir sanallaştırma ve konteyner teknolojisi olan Docker‘in 19.03.0 sürümü duyuruldu. Windows için cihaz desteği eklenen yazılımda, Docker Assemble 0.36.0 ile Docker Kümesi 1.0.0-rc2 için de destek eklendiği bildiriliyor. Docker Engine Community Edition (CE) ve Docker Engine Enterprise Edition (EE) ile ilgili daha fazla bilgi edinmek için sürüm notlarının incelenebileceği söyleniyor. Docker; kişilere ya da kuruluşlara çeşitli gereksinimlerini, çoklu problemlerini çözmelerine izin veren eksiksiz bir konteyner platformu sunuyor. Debian, Ubuntu gibi dağıtımlar için ayrı ayrı uygulamalar sunan Docker; BT liderlerinin mimarlık ve altyapı kilitlenmesi korkusu olmaksızın tüm uygulama portföylerini kendi hızlarıyla etkin bir maliyet ile oluşturup yönetebilecekleri bir ortam sağlayan, kurumsal kullanıma hazır bir konteyner platformudur. Docker ayrıca, yeni uygulamalar oluşturmak için zaman ve kaynak ayırma imkanı da sağlar. Bilindiği gibi Docker’in Community Edition (CE) ve Enterprise Edition (EE) olmak üzere iki sürümü bulunuyor. Docker 19.03.0 hakkında daha ayrıntılı bilgi edinmek için sürüm duyurusunu ya da sürüm notlarını inceleyebilirsiniz.

Continue Reading →

Docker 19.03.0 edinmek için aşağıdaki linklerden yararlanabilirsiniz.

0

Docker 18.09.8 duyuruldu

İşletim sistemi imajlarını versiyonlayan, Apache versiyon 2 lisanslı, Go dili ile yazılmış bir sanallaştırma ve konteyner teknolojisi olan Docker‘in 18.09.8 sürümü duyuruldu. Çeşitli hata düzeltmeleri ve iyileştirmelerle gelen yeni sürümün çeşitli kabuk tamamlama komut dosyası güncellemeleri içerdiği belirtiliyor. Docker Engine Community Edition (CE) ve Docker Engine Enterprise Edition (EE) ile ilgili daha fazla bilgi edinmek için sürüm notlarının incelenebileceği söyleniyor. İstemci ve konteyner çalışma zamanının şimdi Docker Engine 18.09’daki arka plan programından ayrı paketlerde yer aldığı açıklanıyor. Docker; kişilere ya da kuruluşlara çeşitli gereksinimlerini, çoklu problemlerini çözmelerine izin veren eksiksiz bir konteyner platformu sunuyor. Debian, Ubuntu gibi dağıtımlar için ayrı ayrı uygulamalar sunan Docker; BT liderlerinin mimarlık ve altyapı kilitlenmesi korkusu olmaksızın tüm uygulama portföylerini kendi hızlarıyla etkin bir maliyet ile oluşturup yönetebilecekleri bir ortam sağlayan, kurumsal kullanıma hazır bir konteyner platformudur. Docker ayrıca, yeni uygulamalar oluşturmak için zaman ve kaynak ayırma imkanı da sağlar. Bilindiği gibi Docker’in Community Edition (CE) ve Enterprise Edition (EE) olmak üzere iki sürümü bulunuyor. Docker 18.09.8 hakkında daha ayrıntılı bilgi edinmek için sürüm duyurusunu inceleyebilirsiniz.

Continue Reading →

Docker 18.09.8 edinmek için aşağıdaki linklerden yararlanabilirsiniz.

0