Tag: Tutorial

  • Linux Tutorial Series – 89 – Checkpoint

    Here is the video version, if you prefer it:

    Going on, we will talk about text editors. This is not that important to you if you are not a software engineer or someone other than a “regular” Linux user, like an aspiring information security expert or a “wannabe” system administrator. If you are just using Linux instead of Windows for everyday things, you don’t need this material, in my opinion.

  • Linux Tutorial Series – 88 – Review

    Here is the video version, if you prefer it:

    We looked at history and variables. In particular, we looked at:

    • history is used to look at history; use CTRL + R for reverse search in history and CTRL + J to copy the command to your clipboard
    • Dot files (files whose filenames begin with a dot) are hidden by default
    • Variables are named parts of computer memory where values are stored
    • Environment variables are variables passed to the shell by the operating system
    • Shell variables are local to the shell
    • Command path stores all of the places to look for executables
    • Interactive shells require user input, non-interactive don’t
    • Login shells exist to do some things only once
    • Your Terminal application is an interactive, non-login shell
    • Place almost all changes you want permanently in .bashrc file in your home directory

    Let’s carry on with our Linux journey!

  • Linux Tutorial Series – 87 – User environment related files

    Here is the video version, if you prefer it:

    I wanted to list out all files related to the user environment and write a short description when each of them is read. By read, I mean “the file is read and its contents are interpreted as commands which are executed.” Why would this be useful? Just so that you have seen the file name at least once, so that when it pops out in some tutorial, you have a vague idea about what it is used for. Of course, Google the name of the file to be sure what it does, but having some general context doesn’t hurt.

    Here we go…

    Files read by login shells:

    • /etc/profile
    • /etc/profile.d
    • ~/.profile
    • ~/.bash_profile
    • ~/.bash_login

    Note that .bash_profile and .bash_login may not exist in your home directory (they don’t exist in my home directory).

    Files read by interactive shells:

    • /etc/bash.bashrc
    • ~/.bashrc

    As stated in one of the previous articles I wrote, write all of the changes of your environment to ~/.bashrc.

    You may wonder what is the difference between the files in the etc directory and the home (~) directory. If you modify the files in the etc directory your changes apply to the entire system (to all users), while if you modify the files in your home directory the changes apply only to your user. (“Diff between /etc/profile and ~/.bash_profile,” n.d.)⁠ Hence the suggestion to modify .bashrc in your home directory, since then it only applies to you.

    Also, a word of caution – it is always a good idea to copy the files you are modifying (using cp for example) so that you can rename them to the original file name if something goes awry with the modified version.

    I refer you again to read the superbly written answer here: (“Why is /etc/profile not invoked for non-login shells?,” n.d.)⁠

    Hope you learned something useful!

    References

    Diff between /etc/profile and ~/.bash_profile. (n.d.). Retrieved February 7, 2020, from https://www.linuxquestions.org/questions/linux-newbie-8/diff-between-etc-profile-and-~-bash_profile-609191/

    Why is /etc/profile not invoked for non-login shells? (n.d.). Retrieved February 7, 2020, from https://askubuntu.com/questions/247738/why-is-etc-profile-not-invoked-for-non-login-shells

  • Linux Tutorial Series – 86 – Shell variables

    Here is the video version, if you prefer it:

    Let’s talk about shell variables today. Shell variables are temporary variables specific to the shell you are currently running. (Ward, 2014)⁠ Think of it like this – shell variables are temporary, environment variables are permanent.

    Here is an example of setting and printing out the contents of a shell variable:

    mislav@mislavovo-racunalo:~$ VARIABLE=stuff

    mislav@mislavovo-racunalo:~$ echo $VARIABLE

    stuff

    If I try to print the contents of VARIABLE in another shell, I get:

    mislav@mislavovo-racunalo:~$ echo $VARIABLE

    What’s that I get? An empty line. Because in another shell (in another Terminal window), the variable VARIABLE doesn’t exist.

    Hope you learned something useful!

    References

    Ward, B. (2014). How Linux Works: What Every Superuser Should Know (2nd ed.). No Starch Press. Pages 21-22

  • Linux Tutorial Series – 85 – Permanent changes to your environment via .bashrc

    Here is the video version, if you prefer it:

    If you want to make permanent changes to your environment, here is how to do it:

    In virtually all use cases, you should modify .bashrc file located in your home directory (i.e. /home/mislav/.bashrc). The reason for that is that both login shells and interactive non-login shells read these files explicitly (and execute the commands within them). (“Why is /etc/profile not invoked for non-login shells?,” n.d.)⁠

    Here are some lines I have added (appended) to my .bashrc file (in /home/mislav/.bashrc):

    # added for Python

    export PATH=$PATH:~/Python-3.7.4/bin

    # added for Java

    export PATH=$PATH:/usr/lib/jvm/jdk1.8.0_231/bin:/usr/lib/jvm/jdk1.8.0_231/db/bin:/usr/lib/jvm/jdk1.8.0_231/jre/bin:/home/mislav/Downloads/hadoop-2.10.0/bin:/home/mislav/Downloads/hadoop-2.10.0/sbin

    These are the lines I added. They add certain directories to my PATH variable. The general syntax for adding to my PATH variable is:

    export PATH=$PATH:newPath

    where newPath is a path (or multiple paths delimited by a colon) where I want to look for executables. The $PATH get substituted for the contents of the variable PATH.

    When writing this article, I found myself Googling quite a lot to make sure I really understood what files were read by what kinds of shells. A really great read on this is found here: (“Why is /etc/profile not invoked for non-login shells?,” n.d.). The main thing I got from the aforementioned reference is to place all of my changes in .bashrc, but it is such a great answer that I would urge you to read it if you have the time.⁠

    Hope you learned something useful!

    References

    Why is /etc/profile not invoked for non-login shells? (n.d.). Retrieved February 7, 2020, from https://askubuntu.com/questions/247738/why-is-etc-profile-not-invoked-for-non-login-shells

  • Linux Tutorial Series – 83 – Modifying environment variables

    Here is the video version, if you prefer it:

    If you ever want to modify environment variables (and you may sometimes) or some tutorial you find on the World Wide Web advises you to do so, it is useful to know what is going on.

    When modifying environment variables, you are, in most cases, adding something to already existing environment variables. Here is how to do it: (modeled after (Ward, 2014)⁠)

    mislav@mislavovo-racunalo:~$ printenv | grep VARIABLE

    mislav@mislavovo-racunalo:~$ VARIABLE=value

    mislav@mislavovo-racunalo:~$ export VARIABLE

    mislav@mislavovo-racunalo:~$ printenv | grep VARIABLE

    VARIABLE=value

    The commands we are focusing on here are VARIABLE=value and export VARIABLE. Those commands introduce a new variable named VARIABLE with the value value and export VARIABLE places variable VARIABLE in the environment.

    The changes you just made to your environment are non-permanent. Meaning, when you close your Terminal window, the variable VARIABLE will disappear from the environment. There is a way to make these changes permanent, but it is a topic for another post.

    Hope you learned something useful!

    References

    Ward, B. (2014). How Linux Works: What Every Superuser Should Know (2nd ed.). No Starch Press. Pages 21-22

  • Linux Tutorial Series – 82 – The command path

    Here is the video version, if you prefer it:

    Let’s talk about a special kind of environment variable – the PATH variable, also known as the command path. (Ward, 2014)⁠ This variable stores all the places your operating system will look for executables. (“How to set your $PATH variable in Linux,” n.d.)⁠ To recall, executables are a type of a command (executable is another name for an “ordinary” program (just like Firefox)). What this means is that every time you modify or append something to your PATH variable, you are, in essence, telling the operating system: “Look for the executable in this directory as well”. If you have multiple directories containing the same executable, the operating system will take the first one it finds.

    Here is how the PATH variable looks like:

    mislav@mislavovo-racunalo:~/Linux_folder$ echo $PATH

    /home/mislav/anaconda3/condabin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/mislav/Python-3.7.4/bin:/usr/lib/jvm/jdk1.8.0_231/bin:/usr/lib/jvm/jdk1.8.0_231/db/bin:/usr/lib/jvm/jdk1.8.0_231/jre/bin:/home/mislav/Downloads/hadoop-2.10.0/bin:/home/mislav/Downloads/hadoop-2.10.0/sbin

    I put $ in front of PATH to get the contents of the PATH variable. Here we see that all the folders where to look for executables are separated with a colon. So the structure of the PATH variable looks like this: path1:path2:path3

    This is convenient for the operating system because it tells the operating system where to look for executables. Otherwise, it would have to search through the entire computer looking for your executable. Yikes! Better help the good ol’ operating system by telling it where to look for. 

    Hope you learned something useful!

    References

    How to set your $PATH variable in Linux. (n.d.). Retrieved February 27, 2020, from https://opensource.com/article/17/6/set-path-linux

    Ward, B. (2014). How Linux Works: What Every Superuser Should Know (2nd ed.). No Starch Press. Pages 22-23

  • Linux Tutorial Series – 81 – Environment variables

    Here is the video version, if you prefer it:

    Today we will talk about a special kind of operating system variables. As we already know, the operating system (and other computer programs) use variables, which are places in computer memory that store values relevant to a computer program. A special kind of operating system variables are environment variables. Let’s explain what “environment variables” mean.

    Environment variables are the variables that the operating system passes to your shell programs. (Ward, 2014)⁠ What that means is that when you run your shell program, it has access to the environment variables. A shell program then uses those environment variables to read its configuration and options from them.

    Here are some examples of environment variables I got by running printenv, which is used to print all (or a part of) your environment. (“PRINTENV(1),” n.d.)⁠

    mislav@mislavovo-racunalo:~/Linux_folder$ printenv

    SHELL=/bin/bash

    SESSION_MANAGER=local/mislavovo-racunalo:@/tmp/.ICE-unix/6698,unix/mislavovo-racunalo:/tmp/.ICE-unix/6698

    ...

    Here we can see SHELL and SESSION_MANAGER as names of my environment variables, while the strings right of the equal sign are the values of the variables.

    Takeaway: Environment variables are passed by the operating system to your shell programs and they store configuration and options that shell programs take into account when they are executed.

    Hope you learned something useful!

    References

    PRINTENV(1). (n.d.). Retrieved February 7, 2020, from http://man7.org/linux/man-pages/man1/printenv.1.html

    Ward, B. (2014). How Linux Works: What Every Superuser Should Know (2nd ed.). No Starch Press. Pages 21-22

  • Linux Tutorial Series – 80 – Variables – what’s that?

    Here is the video version, if you prefer it:

    Let’s talk about variables. What are those? Variables, generally speaking, are a part of your computer memory which hold different values at different times, depending on the execution of a computer program. We are talking about some “regular” program here (like Firefox). So I can have a variable called number_of_open_tabs and it can be equal to 5 and if I close one tab, then number_of_open_tabs equals 4. The takeaway is that variables hold some values which are relevant for a computer program. Every variable has a name (i.e. number_of_open_tabs) and a value (i.e. 4).

    OK, OK. But what does that have to do with the operating system? Well, the operating system has its own variables. Those variables are relevant for the operation of the operating system. 

    This was important to know conceptually.

    Hope you learned something new!