Posted in bash

Changing directories

Everyone knows the command cd – everyone uses it several times a day. (OK – not everyone, but every Linux user.) Most of us know, that we can change back to the last directory with

$ cd -


$ pwd
$ cd /opt/sensors/bmp280
$ pwd
$ cd -
$ pwd

But what if you cd in your project directory and then need to change back into your docs directory? You have to type the whole path. Or do you?

Continue reading “Changing directories”

Posted in bash

Make and Change into Directory

Several times a day I have to create a directory and have immediately change into this directory. After a while I found it rather annoying to type every time

$ mkdir new_directory
$ cd new_directory

So I created a shell function to reduce the typing:

mcd ()
    mkdir -p "$@" && cd "$@"

Now I have to type only

$ mcd new_directory

and magically I’m in the newly created directory.

Posted in Linux commands

“find” with Style, Part 3: Displaying File Attributes

If you search files with the find command, you get a list of filenames:

$ find . -name '*.py'

If you need the file attributes (like size, file permissions, …) you can do some tricks to let ls do the job. Or do you?

find has the parameter -ls which does this:

$ find . -name '*.py' -ls

Posted in bash

Make a Directory with Actual Date

For different workflows I like to have directories with the actual date as name. To this end I created a little bash function called mkdd (make date directory), which I put into my .bashrc:

mkdd ()
    D=$(date '+%F')
    mkdir $D
    cd $D

This function creates the directory with the actual date in ISO format and changes into it:

$ pwd
$ mkdd
$ pwd
Posted in Linux commands

Following log files

tail is a well known command to show the last lines of a file:

$ tail bmp280.log
2017-04-02T11:32:03 1491125523 20.62 1014.21
2017-04-02T11:33:02 1491125582 20.63 1014.23
2017-04-02T11:34:03 1491125643 20.62 1014.23
2017-04-02T11:35:03 1491125703 20.62 1014.23
2017-04-02T11:36:02 1491125762 20.63 1014.19
2017-04-02T11:37:03 1491125823 20.63 1014.23
2017-04-02T11:38:02 1491125882 20.63 1014.24
2017-04-02T11:39:04 1491125944 20.63 1014.25
2017-04-02T11:40:03 1491126003 20.63 1014.26
2017-04-02T11:41:02 1491126062 20.64 1014.27

If the default of ten lines is too few or too much you can adjust this with the parameter -n:

$ tail -n 25 bmp280.log

But the real power of tail are the parameters -f und -F. These parameters follow the end of the file while the file grows:

$ tail -f *.log
==> bmp280.log <==
2017-04-02T11:39:04 1491125944 20.63 1014.25
==> temp_humi.log <==
2017-04-02T11:39:05 1473343255 26.36 63.13 1 3.06
==> bmp280.log <==
2017-04-02T11:40:04 1491126004 20.63 1014.25
==> temp_humi.log <==
2017-04-02T11:40:05 1491126005 26.36 63.13 1 3.06

If the file does not exist yet, the parameter -F tells tail to wait until the file exists:

$ tail -F sensor_01.log
tail: cannot open ‘sensor_01.log’ for reading: No such file or directory

The message is just a warning. As soon as the log file is written, the lines appear.

Sometimes the lines with the filenames are difficult to find. But here grep is your friend:

$ tail -f *.log | grep -E --color '|==>.*<=='

Now the lines with the file names are coloured.