Linux servers - Exercise 6 ============== *Disclaimer:* -------------- This exercise is a part of [Linux Server Administration (ICT4TN021, spring 2018) // Linux-palvelimet (ICT4TN021, kevät 2018)](http://www.haaga-helia.fi/fi/opinto-opas/opintojaksokuvaukset/ICT4TN021) school course organized as a part of Information Technology studies in Haaga-Helia university of Applied Sciences, Helsinki, Finland. Course lecturer [Tero Karvinen](http://terokarvinen.com/) has defined the original assignment descriptions in Finnish presented in this document in English. Answers and translations have been written by Pekka Helenius (me, ~ Fincer). *Table of contents:* -------------- - [a) **Hello World** Write and execute "Hello world" in three code languages of your choice. Set up a necessary development environments.](https://github.com/Fincer/linux-server-setup/blob/master/exercises/h6.md#a-write-and-execute-hello-world-in-three-code-languages-of-your-choice-set-up-a-necessary-development-environments) - [Perl (hello.pl)](https://github.com/Fincer/linux-server-setup/blob/master/exercises/h6.md#perl-hellopl) - [Python 3 (hello.py)](https://github.com/Fincer/linux-server-setup/blob/master/exercises/h6.md#python-3-hellopy) - [C (hello.c)](https://github.com/Fincer/linux-server-setup/blob/master/exercises/h6.md#c-helloc) - [b) **Custom program** (optional) Write a simple program for some practical purpose with each language. Ideas: utilize the key benefits of your language of choice. Take an input value from a user, generate a calculation and print the output (input-processing-layout).](https://github.com/Fincer/linux-server-setup/blob/master/exercises/h6.md#b-optional-write-a-simple-program-for-some-practical-purpose-with-each-language-ideas-utilize-the-key-benefits-of-your-language-of-choice-take-an-input-value-from-a-user-generate-a-calculation-and-print-the-output-input-processing-layout) -------------- **a)** Write and execute "Hello world" in three code languages of your choice. Set up a necessary development environments. -------------- **Answer:** Let's write "Hello World" in the following three languages: `perl`, `python 3` and `C`. We need to install required development tools: ``` sudo apt-get -y install perl python gcc ``` (GCC = [Gnu Compiler Collection](https://gcc.gnu.org/) + [Wikipedia](https://en.wikipedia.org/wiki/GNU_Compiler_Collection)) Let's write the codes into a subfolder `hello-world` in user's home dir: ``` [newuser@goauldhost: ~ ]$ mkdir ~/hello-world [newuser@goauldhost: ~ ]$ cd hello-world/ [newuser@goauldhost: hello-world ]$ touch hello{.c,.py,.pl} ``` - `hello.py` = "Hello World" written in Python 3 - `hello.pl` = "Hello World" written in Perl - `hello.c` = "Hello World" written in C Hello World program written in three languages (nano editor used): ### Perl (hello.pl) ``` #!/usr/bin/env perl # Declare runtime environment above # Include these to find common warnings, syntax errors etc in the code import strict; import warnings; # Print Hello World! with a newline print "Hello World!\n"; ``` ### Python 3 (hello.py) ``` #!/usr/bin/env python3 # Declare runtime environment above # Print Hello World! print("Hello World!"); ``` **NOTE!** Pay attention when referring to python executable. On some Linux distributions, python still refers to `python2`, and on some, python refers to `python3`. Practices differ. It can be safer to use 'python3' or 'python2' instead of just 'python' if not sure. In a simple program like "Hello world" this python issue doesn't really matter. However, if any python libraries are imported into the code, you must know which python environment to use, Python 2 or Python 3. ### C (hello.c) ``` // Include Standard Input Output Library #include // Declare main function for the program. int type for returning a integer int main() { // Print Hello World! (stdout in CLI) printf("Hello World!"); // Return boolean value "true" to the execution environment return 0; } ``` `hello.c` requires compiling from source code to executable binary file. Therefore, we compile the source code with the following command in `hello-world` folder: ``` gcc -o hello hello.c ``` after which our `hello` binary can be executed with ``` ~/hello-world/hello ``` **NOTE:** You can check file details by issuing the following command: ``` file ~/hello-world/hello hello: ELF 64-bit LSB pie executable x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=8e76492bc5ce6c65df8ec5ce7be42645fae2ab70, not stripped ``` All programs give output string "Hello World!" (stdout data stream) in our shell environment: ``` [newuser@goauldhost: hello-world ]$ pwd /home/newuser/hello-world [newuser@goauldhost: ~ ]$ python hello.py Hello World! [newuser@goauldhost: ~ ]$ perl hello.pl Hello World! [newuser@goauldhost: ~ ]$ ./hello Hello World! ``` **b)** (optional) Write a simple program for some practical purpose with each language. Ideas: utilize the key benefits of your language of choice. Take an input value from a user, generate a calculation and print the output (input-processing-layout). -------------- **Answer:** This could have been very interesting assignment to work out. Unfortunately, my working laptop was broken so that I was not effectively able to write new code. I have worked with [a perl program which generates random port and TCP/UDP sequences for knockd daemon](../other/random_port.pl). In addition, I have worked with some updates to Wine Configuration window (winecfg, part of Wine program) in C language: ![winecfg-update](https://i.imgur.com/SihmPUA.jpg) See: [Fincer/winecfg_patch](https://github.com/Fincer/winecfg_patch) Some Python and bash based program-related scripts and code updates are available here: - [PlayOnLinux patches](https://github.com/Fincer/linux-patches-and-scripts/tree/master/playonlinux). - Little CMake script targeted for compiling C++ code can be found [here](https://github.com/Fincer/linux-patches-and-scripts/tree/master/xclipshow) - Some basic scripting to convert videos with ffmpeg in KDE DE: [ffmpeg-fileconversion-video](https://github.com/Fincer/linux-patches-and-scripts/blob/master/kde-servicemenus-multimediatools/ffmpeg-fileconversion-video.sh) etc.