13,420
edits
Changes
no edit summary
==Part 2: Automating Routine Tasks (Shell Scripting)==
{|cellpadding="15" width="100%"
|- valign="top"
|width="50%"|You may have learned about creating and running Bash Shell Scripts in your ULI101 course. Shell scripts help Linux users and system administrators to automatic repetitive tasks to become more efficient and to help them save time. You will be reviewing and building a basic Bash Shell script to generate your newly-installed Linux host machine. Take time to view Shell Scripting Tips on the right-hand side, and run the online tutorial to learn how to create simple shell scripts. # Make certain to log out of your root account and remain as a regular user.# Open a Shell terminal and use a text editor (such as <b><code><span style="color:#3366CC;font-size:1.2em;">vi</span></code></b> or <b><code><span style="color:#3366CC;font-size:1.2em;">nano</span></code></b>) to create a Bash Shell script called: <b><code><span style="color:#3366CC;font-size:1.2em;">report.bash</span></code></b> in your current directory.# Enter the following text content into your text-editing session: <pre style="font-family:courier;font-weight:bold;padding-left:4px;margin-left:15px;">#!/bin/bash # Forces script to run in the bash shell # Author: *** INSERT YOUR NAME ***# Date: *** CURRENT DATE ***## Purpose: To present sysadmin to create an software inventory# report containing selected elements## USAGE: ./report.bash if [ $USER != "root" ] # checks to see if user is root, and exits script if notthen echo "You must be logged in as root to run the command." >&2 # >&2 is a "redirection trick" to convert output as stderr echo "Either login as root or issue command \"sudo ./report1.bash\"" >&2 exit 1fi</pre> <ol><li value="4">Save your editing session, assign your report.bash file read and execute permissions (at least for the owner) and run by typing: <b><code><span style="color:#3366CC;font-size:1.2em;">./report.bash</span></code></b></li><li>Did it run? If not what do you think you need to do in order to run the Bash Shell Script?</li><li>Issue the command <b><code><span style="color:#3366CC;font-size:1.2em;">su</span></code></b> and run the Bash shell again. Did it work?</li><li>Reopen your text-editing session for report.bash and add the following lines of code to the bottom of the shell script file:</ol> <pre style="font-family:courier;font-weight:bold;padding-left:4px;margin-left:15px;"># Create report title echo "SOFTWARE ASSET REPORT FOR INSTALLED LINUX SYSTEM" > /root/report.txtecho "Date: $(date +'%A %B %d, %Y (%H:%M:%p)')" >> /root/report.txtecho >> /root/report.txt </pre> <ol><li value="8">Save and run the bash shell script. View the contents of the file called "report.txt" that was generated. Notice how the redirection symbol > is used at the beginning of the report, and then the other redirection symbol >> is used to help "grow" the report with the other content.</li><li>The only remaining content of the report would be the system information. We can use a shell scripting trick called "command substitution" $( .. ) in order place results from an command to be used by another command (like echo). Re-edit the shell script and add the following code at the bottom of the shell script file:</li></ol> <pre style="font-family:courier;font-weight:bold;padding-left:4px;margin-left:15px;">echo >> /root/report.txtecho "Hostname: $(hostname)" >> /root/report.txtecho >> /root/report.txtecho >> /root/report.txtecho "Kernel Version: $(uname -rv)" >> /root/report.txtecho >> /root/report.txt</pre> <ol><li value="10">Save, run the script, and view the resulting file contents.</li><li>Edit the shell script and issue the build the report to include empty lines, titles, and content for the remaining commands: <b><code><span style="color:#3366CC;font-size:1.2em;">ps aux</span></code></b> and <b><code><span style="color:#3366CC;font-size:1.2em;">ifconfig</span></code></b>.</li><li>Save, run and confirm that the shell script is working correctly.</li><li>What would be the use of keeping this shell script as a Linux system administrator?</li></ol> <ol><li value="14">Here are some more "complex" Bash Shell scripts, that perform the same task. Although you are not require to understand some of these other tricks, it is recommended that you view the contents of the scripts and save them for future consideration or exmaples.</li><li>The <b><code>wget</code></b> command can be used to quickly download files from the Internet. Issue the following command:<blockquote><b><code><span style="pointer-events: none;cursor: default;color:#3366CC;font-size:1.2em;">wget https://scs.senecac.on.ca/~murray.saul/text-report.bash</span></code></b></blockquote></li><li>Verify that the file '''text-report.bash''' was downloaded to your current directory.</li><li>Assign read and execute permissions for this file by issuing the command: <b><code>chmod u+rx text-report.bash</code></b></li><li>Run this Bash Shell script by issuing the command: <b><code>./text-report.bash</code></b></li><li>Check to see if it created a report in your current directory. What is the purpose of the report?</li><li>Use the <b>vi</b> text editor to view the contents of the file <b>text-report.bash</b>. Can you understand how this script works?<br><br></li><li>Use the <b><code>wget</code></b> command to download, study, and run the following shell scripts on-line:<blockquote><b><code><span style=" pointer-events:none;cursor:default;color:#3366CC;font-size:1.2em;">https://scs.senecac.on.ca/~murray.saul/report.bash<br>https://scs.senecac.on.ca/~murray.saul/report3.bash</span></code></b></blockquote></li><li>Try to understand what these Bash Shell scripts do.</li><li>You have completed lab1. Proceed to Completing The Lab, and follow the instructions for "lab sign-off".</li></ol>|width="40%"|{{Admon/tip|Bash Shell Scripting Tips:|<br><ul><li>'''She-bang line on first line of shell script:'''<br><br>Shell scripts have evolved of the past 40 years. To avoid running a newer shell script on an older shell, it is recommended to force running the shell script in the correct shell. In order to do this, on the first line at the very beginning of the shell script, you add the '''#!''' ('''# as in "shhhh" - a comment''', and''' ! is referred to as "bang" run a commmand''': in this case, '''run the command: /bin/bash'''). You can issue the Linux command '''which bash''' to get the correct location. If there is no bash shell on that machine, the shell script will not run (as a precaution - the Linux admin will know how to make a fix to the shell script if required)<br>. </li><li>'''Variables:'''<br><br> There are 3 types of variables that can be used in shell scripting: '''ENVIRONMENT''' (eg. $USER), '''user-defined''' ($varName), and '''positional parameters''' (eg. $1, $2... containing arguments after shell script or by using set command (eg. '''set $(ls)''' ). Using dollar sign ('''$''') in front of variable expands the value assigned.<br><br></li><li>Command Substitution:<br><br>A very useful trick to take output from a command to be used as an argument for another command. Examples include:<br>'''file $(ls)'''<br>'''set $(ls);echo $#;echo $*'''<br>'''echo "hostname: $(hostname)"'''<br><br><li>'''Logic Control Flow Statements:'''<br><br>The '''test''' command can be used to see if a condition is true or false<br>(i.e. test $USER = "root") . The '''$?''' special shell variable stores the result (zero if true, non-zero if false). Square brackets '''[ ]''' can be used to represent the test command with the condition <u>inside</u> the brackets (spaces separating brackets).Can use '''if''' / '''if-else''' / '''if-elif-else''' statements with brackets. The '''exit''' command can be used to terminate the shell script with a false value.<br><br>Examples:|}}
# Disabling SELinux is quite simple, just edit the file '''/etc/selinux/config''' and set SELINUX to disabled.
# Add additional text regarding disabling SELinux<br><br>
#The CentOS software is updated frequently to add features, fix bugs, and upgrade security. Perform a system update to get the latest versions of the packages installed: Start the Firefox web browser, turn off popup window blocking (select '''Edit''', '''Preferences''', then select the '''Content''' tab and uncheck the box to '''Block Popups'''), then return to your web-browser, load a page, and when prompted, login to SeneNET.
#Open a terminal and type <b><code><span style="color:#3366CC;font-size:1.2em;">su</span></code></b> to start a shell as root. Enter the command <b><code><span style=" pointer-events:none;cursor:default;color:#3366CC;font-size:1.2em;">yum update</span></code></b> This will download and install all of the packages that have been updated since the installation DVD image was created. If you complete this command at Seneca it should run quite fast as Seneca College hosts a CentOS Repository mirror (a copy of all of the current CentOS packages, on a local web server).
|width="40%" |{{Admon/important|SELinux|SELinux stands for '''Security-Enhanced Linux'''. It is a component that helps to better secure the system to protect against intrusion (hackers). SELinux is enabled upon the default install of CentOS. SELinux can be a good thing, if you take care of it and know how it works. For this course it is strongly recommended that you '''disable SELinux by default''' because we won't have the time to reconfigure it every time the labs make it necessary.}}
|}
'''Answer the Investigation 3 observations / questions in your lab log book.'''