Homework 2: Writing Your Own Shell
Total Page:16
File Type:pdf, Size:1020Kb
Load more
Recommended publications
-
Lab Work 06. Linux Shell. Files Globbing & Streams Redirection
LAB WORK 06. LINUX SHELL. FILES GLOBBING & STREAMS REDIRECTION. 1. PURPOSE OF WORK • Learn to use shell file globbing (wildcard); • Learn basic concepts about standard UNIX/Linux streams redirections; • Acquire skills of working with filter-programs. • Get experience in creating composite commands that have a different functional purpose than the original commands. 2. TASKS FOR WORK NOTE. Start Your UbuntuMini Virtual Machine on your VirtualBox. You need only Linux Terminal to complete the lab tasks. Before completing the tasks, make a Snapshot of your Virtual Linux. If there are problems, you can easily go back to working condition! 2.0. Create new User account for this Lab Work. • Login as student account (user with sudo permissions). • Create new user account, example stud. Use adduser command. (NOTE. You can use the command “userdel –rf stud” to delete stud account from your Linux.) $ sudo adduser stud • Logout from student account (logout) and login as stud. 2.1. Shell File Globbing Study. 2.2. File Globbing Practice. (Fill in a Table 1 and Table 2) 2.3. Command I/O Redirection Study. 2.4. Redirection Practice. (Fill in a Table 3 and Table 4) © Yuriy Shamshin, 2021 1/20 3. REPORT Make a report about this work and send it to the teacher’s email (use a docx Report Blank). REPORT FOR LAB WORK 06: LINUX SHELL. FILES GLOBBING & STREAMS REDIRECTION Student Name Surname Student ID (nV) Date 3.1. Insert Completing Table 1. File globbing understanding. 3.2. Insert Completing Table 2. File globbing creation. 3.3. Insert Completing Table 3. Command I/O redirection understanding. -
CS2043 - Unix Tools & Scripting Cornell University, Spring 20141
CS2043 - Unix Tools & Scripting Cornell University, Spring 20141 Instructor: Bruno Abrahao January 31, 2014 1 Slides evolved from previous versions by Hussam Abu-Libdeh and David Slater Instructor: Bruno Abrahao CS2043 - Unix Tools & Scripting Vim: Tip of the day! Line numbers Displays line number in Vim: :set nu Hides line number in Vim: :set nonu Goes to line number: :line number Instructor: Bruno Abrahao CS2043 - Unix Tools & Scripting Counting wc How many lines of code are in my new awesome program? How many words are in this document? Good for bragging rights Word, Character, Line, and Byte count with wc wc -l : count the number of lines wc -w : count the number of words wc -m : count the number of characters wc -c : count the number of bytes Instructor: Bruno Abrahao CS2043 - Unix Tools & Scripting Sorting sort Sorts the lines of a text file alphabetically. sort -ru file sorts the file in reverse order and deletes duplicate lines. sort -n -k 2 -t : file sorts the file numerically by using the second column, separated by a colon Example Consider a file (numbers.txt) with the numbers 1, 5, 8, 11, 62 each on a separate line, then: $ sort numbers.txt $ sort numbers.txt -n 1 1 11 5 5 8 62 11 8 62 Instructor: Bruno Abrahao CS2043 - Unix Tools & Scripting uniq uniq uniq file - Discards all but one of successive identical lines uniq -c file - Prints the number of successive identical lines next to each line Instructor: Bruno Abrahao CS2043 - Unix Tools & Scripting Character manipulation! The Translate Command tr [options] <char_list1> [char_list2] Translate or delete characters char lists are strings of characters By default, searches for characters in char list1 and replaces them with the ones that occupy the same position in char list2 Example: tr 'AEIOU' 'aeiou' - changes all capital vowels to lower case vowels Instructor: Bruno Abrahao CS2043 - Unix Tools & Scripting Pipes and redirection tr only receives input from standard input (stdin) i.e. -
Unix, Standard I/O and Command Line Arguments Overview Redirection
Unix, Standard I/O and command line arguments For any programming assignments I give you, I expect a program that reads and writes to standard input and output, taking any extra parameters from the command line. This handout explains how to do that. I have also appended a small appendix of useful Unix commands. I recommend that you go to a Unix terminal and type in and run all of the examples in the gray boxes. You can do this from the Terminal application on a MacIntosh, or from a terminal window in GNU/Linux or any Unix-like operating system, from Cygwin in Windows maybe, or by connecting to bingsuns using SSH. Overview Most programming languages feature “standard,” or default, input and output channels where I/O goes unless otherwise specified. In C, the functions scanf(), gets() and getchar() read from standard input, while printf(), puts() and putchar() write to standard output. In Tcl, the gets and puts commands read and write standard input and output. In awk and perl, you just sort of use the force and your program receives a line of input from somewhere. Letʼs stick with C for the time being.1 When a program runs from a terminal, standard input is usually the userʼs keyboard input, while standard output is displayed as text on-screen. Unix and Unix-like operating systems allow you to intercept the standard I/O channels of a program to redirect them into files or other programs. This gives you the ability to chain many simple programs to do something genuinely useful. -
Chapter 5. Writing Your Own Shell
Chapter 5. Writing Your Own Shell You really understand something until you program it. GRR Introduction Last chapter covered how to use a shell program using UNIX commands. The shell is a program that interacts with the user through a terminal or takes the input from a file and executes a sequence of commands that are passed to the Operating System. In this chapter you are going to learn how to write your own shell program. Shell Programs A shell program is an application that allows interacting with the computer. In a shell the user can run programs and also redirect the input to come from a file and output to come from a file. Shells also provide programming constructions such as if, for, while, functions, variables etc. Additionally, shell programs offer features such as line editing, history, file completion, wildcards, environment variable expansion, and programing constructions. Here is a list of the most popular shell programs in UNIX: sh Shell Program. The original shell program in UNIX. csh C Shell. An improved version of sh. tcsh A version of Csh that has line editing. ksh Korn Shell. The father of all advanced shells. bash The GNU shell. Takes the best of all shell programs. It is currently the most common shell program. In addition to commandline shells, there are also Graphical Shells such as the Windows Desktop, MacOS Finder, or Linux Gnome and KDE that simplify theDraft use of computers for most of the users. However, these graphical shells are not substitute to command line shells for power users who want to execute complex sequences of commands repeatedly or with parameters not available in the friendly, but limited graphical dialogs and controls. -
Essential Skills for Bioinformatics: Unix/Linux PIPES a Simple Program with Grep and Pipes
Essential Skills for Bioinformatics: Unix/Linux PIPES A simple program with grep and pipes • Suppose we are working with a FASTA file and a program warns that it contains non-nucleotide characters in sequences. We can check for non-nucleotide characters easily with a Unix one-liner using pipes and the grep. • The grep Unix tool searches files or standard input for strings that match patterns. These patterns can be simple strings, or regular expressions. See man grep for more details. A simple program with grep and pipes • tb1-protein.fasta • Approach: - remove all header lines (those that begin with >) - the remaining sequences are piped to grep - print lines containing non-nucleotide characters A simple program with grep and pipes • “^>”: regular expression pattern which matches all lines that start with a > character. • -v: invert the matching lines because we want to exclude lines starting with > • |: pipe the standard output to the next command with the pipe character | • “[^ACGT]”: When used in brackets, a caret symbol (^) matches anything that’s not one of the characters in these brackets. [^ACGT] matches any character that’s not A, C, G, or T. • -i: We ignore case. • --color: to color the matching non-nucleotide character. • Both regular expressions are in quotes, which is a good habit to get into. Combining pipes and redirection • Large bioinformatics programs will often use multiple streams simultaneously. Results are output via the standard output stream while diagnostic messages, warnings, or errors are output to the standard error stream. In such cases, we need to combine pipes and redirection to manage all streams from a running program. -
Bash Redirections Cheat Sheet
Bash Redirections Cheat Sheet Redirection Description cmd > file Redirect the standard output (stdout) of cmd to a file. cmd 1> file Same as cmd > file. 1 is the default file descriptor (fd) for stdout. cmd 2> file Redirect the standard error (stderr) of cmd to a file. 2 is the default fd for stderr. cmd >> file Append stdout of cmd to a file. cmd 2>> file Append stderr of cmd to a file. cmd &> file Redirect stdout and stderr of cmd to a file. Another way to redirect both stdout and stderr of cmd to a file. This is not the same cmd > file 2>&1 as cmd 2>&1 > file. Redirection order matters! cmd > /dev/null Discard stdout of cmd. cmd 2> /dev/null Discard stderr of cmd. cmd &> /dev/null Discard stdout and stderr of cmd. cmd < file Redirect the contents of the file to the standard input (stdin) of cmd. cmd << EOL line1 Redirect a bunch of lines to the stdin. If 'EOL' is quoted, text is treated literally. This line2 is called a here-document. EOL cmd <<- EOL <tab>foo Redirect a bunch of lines to the stdin and strip the leading tabs. <tab><tab>bar EOL cmd <<< "string" Redirect a single line of text to the stdin of cmd. This is called a here-string. exec 2> file Redirect stderr of all commands to a file forever. exec 3< file Open a file for reading using a custom file descriptor. exec 3> file Open a file for writing using a custom file descriptor. exec 3<> file Open a file for reading and writing using a custom file descriptor. -
Lab 2: Implementing a Shell COMPSCI 310: Introduction to Operating Systems
Lab 2: Implementing a Shell COMPSCI 310: Introduction to Operating Systems 1 Shells are cool Unix [2] embraces the philosophy: Write programs that do one thing and do it well. Write programs to work together. The idea of a shell command interpreter is central to the Unix programming environment. In partic- ular, the shell executes commands that you enter in response to its prompt in a terminal window, which is called the controlling terminal. $ echo Hello Hello Each command is a character string naming a program or a built-in function to run, followed by zero or more arguments separated by spaces, and (optionally) a few special control directives. If the command names a program to run, then the shell spawns a new child process and executes that program, passing in the arguments. The shell can also direct a process to take its input from a file and/or write its output to a file. It also uses pipes to direct the output of one process to the input of another. Thus you can use a shell as an interactive scripting language that combines subprograms to perform more complex functions. $ echo Hello Hello #(NOTE: This isa shell comment, just like comments in Java,C, Python,...) # echo isa program that simply ``echoes'' on the terminal whatever it receives as input. $ echo Hello | wc 1 1 6 # wc isa command that outputs the number of words, lines and bytes in its input; try ``man wc'' to learn more. Shell can also read and execute a list of commands from a file, called a shell script. -
Qshell and Openssh for IBM System I
Qshell and OpenSSH for IBM System i Bob Bittner ISV Strategy and Rochester, MN OMNI Enablement [email protected] 15-May-2007 +1.507.253.6664 QShell In the beginning... (1970) Ken Thompson wrote the original Unix shell, and it was good. ..but not that good. It was replaced by Stephen Bourne’s shell, sh. This sh was better, but not good enough. David Korn wrote ksh, and it was much better. More recent developers wrote the Bourne-Again shell, bash. Qshell is a native i5/OS ported version of Korn shell 1 Qshell What is it for? What is it? How do you use it? Customization Cool (really useful) stuff Tricky stuff More stuff Qshell - What is it for? Interactive command environment Familiar to Unix users New utilities for i5/OS Run shell scripts Typical batch routines Text processing Scripts ported from Unix Capture output Automate input IFS files Run Java programs Run PERL scripts 2 Qshell - What is it? Qshell for iSeries Native i5/OS ported version of Korn shell Ted Holt & Fred Kulack ISBN: 1583470468 Compatible with Bourne & Korn shells Based on POSIX and X/Open standards Runs UNIX commands interactively or from a script (text file) No charge option (#30) of i5/OS Installed by default QShell and Utilities • Interpreter (qsh) • Reads commands from an input source qsh • Interprets each command (line) • Directs input and output as requested • Many built-in functions • Utilities (or commands) • External programs • Provide additional functions • Some quite simple, some very complex java tail pax sed head awk grep 3 Qshell -
Lab 4: Socket Programming: Netcat Part
Lab 4: Socket Programming: netcat part Overview The goal of this lab is to familiarize yourself with application level programming with sockets, specifically stream or TCP sockets, by implementing a client/server socket application, netcat part. Additionally, this lab will introduce you to advanced file manipulation in C using file pointers and file streams. This lab is the first in a sequence that result in a small implementation of a BitTorrent client. The programming in this assignment will be in C requiring standard sockets, and thus you will not need to have root access. You should be able to develop your code on any CS lab machine or your personal machine, but all code will be tested on the CS lab. Deliverables Your submission should minimally include the following programs and files: • netcat part.c • Makefile • README Your README file should contain a short header containing your name, username, and the assignment title. The README should additionally contain a short description of your code, tasks accomplished, and how to compile, execute, and interpret the output of your programs. Additionally, if there are any short answer questions in this lab write-up, you should provide well marked answers in the README, as well as indicate that you’ve completed any of the extra credit (so that I don’t forget to grade it). Submission Instructions To submit this lab you will use handin43. You can retrieve relevant files via update43. 1 netcat part partial file transfers In this lab you will familiarize yourself with basic socket programming and C file I/O primitives by im- plementing a form of netcat for partial file transferring, so dubbed netcat part. -
IBM Tape Device Drivers IBM
IBM Tape Device Drivers IBM Installation and User's Guide GC27-2130-21 IBM Tape Device Drivers IBM Installation and User's Guide GC27-2130-21 ii IBM Tape Device Drivers: Installation and User's Guide Twenty-second Edition (November 2015) This twenty-second edition of the IBM Tape Device Drivers Installation and User's Guide, GC27-2130-21, replaces and makes obsolete the following manual: IBM Tape Device Drivers Installation and User's Guide, GC27-2130-20. © Copyright IBM Corp. 2007, 2015 iii iv IBM Tape Device Drivers: Installation and User's Guide Read this first Accessing online technical support For online technical support for your Library, visit: v www.ibm.com/support. Registering for My Notification My Notification registration provides email notification when firmware levels have been updated and are available for download and installation. To register for My Notification: 1. Visit the web at http://www-01.ibm.com/software/support/einfo.html. 2. Click My Notifications. Note: Library firmware and tape drive firmware are verified and released together. When updating to the latest firmware, verify that all installed components such as tape drives, and library are at the latest levels noted on the Support website. Mixing different levels of library and tape drive firmware is not supported and can cause unpredictable results. Contacting IBM technical support In the USA: Call 1-800-IBM_SERV (1-800-426-7378). All other Countries/Regions: Visit www.ibm.com/support To open a Service Request online: Under Support & downloads, click Open a service request. © Copyright IBM Corp. 2007, 2015 v vi IBM Tape Device Drivers: Installation and User's Guide Preface These publications and URLs provide user information and installation assistance for IBM® tape drive, medium changer, and library device drivers. -
PHP Batch Jobs on IBM I
PHP Batch Jobs on IBM i Alan Seiden Consulting alanseiden.com Alan’s PHP on IBM i focus • Consultant to innovative IBM i and PHP users • PHP project leader, Zend/IBM Toolkit • Contributor, Zend Framework DB2 enhancements • Award-winning developer • Authority, web performance on IBM i Alan Seiden Consulting 2 PHP Batch Jobs on IBM i Founder, Club Seiden club.alanseiden.com Alan Seiden Consulting 3 PHP Batch Jobs on IBM i Contact information Alan Seiden [email protected] 201-447-2437 alanseiden.com twitter: @alanseiden Alan Seiden Consulting 4 PHP Batch Jobs on IBM i Where to download these slides From my site http://alanseiden.com/presentations On SlideShare http://slideshare.net/aseiden The latest version will be available on both sites Alan Seiden Consulting 5 PHP Batch Jobs on IBM i What we’ll discuss today • Quick overview, Zend Server for IBM i • PHP for Batch (non-web) Tasks on IBM i • “batch” = command line or scheduled PHP • PHP as a utility language • Running web tasks in the background for better perceived speed • Tips and techniques Alan Seiden Consulting 6 PHP Batch Jobs on IBM i PHP/web Alan Seiden Consulting 7 PHP Batch Jobs on IBM i PHP was built for server-side web apps • Started as a web development language in 1995 • Over time, the open source community and Zend made PHP more and more powerful • Currently one of the most popular web languages § It’s everywhere, eBay, Wikipedia, Facebook… § But it’s not limited to the web § It would be a shame to restrain PHP’s power to only the web • On IBM i, PHP’s power is available -
Redirection and Pipes
Redirection and Pipes ● Unix. Philosophy ● Make each program do one thing well. To do a new job, build afresh rather than complicate old programs by adding new features. ● Expect the output of every program to become the input to another, as yet unknown, program. Don't clutter output with extraneous information. Avoid stringently columnar or binary input formats. Don't insist on interactive input. ● Pipe Examples Shell Redirection and Pipes ● zcat `man -w bash` | man2html > sh.html ● tar cf – current | gzip > current.tar.gz ● Unix always assigns the lowest unused file descriptor ● dup(fd) copies the file descriptor fd to the lowest available IO redirect ● close(0); fd=open(...) ● fd=open(...), close(0), dup(fd) ● fd=open(...),dup2(fd,0) execve ●The program invoked inherits the calling process's PID, and any open file descriptors that are not set to close on exec. Signals pending on the calling process are cleared. Any signals set to be caught by the calling process are reset to their default behaviour. redirecting IO in shell ● fork() ● open required redirection file descriptors in child ● dup or dup2 standard io in child ● exec code file in child Pipes who | sort Pipes ● NAME pipe - create pipe SYNOPSIS #include <unistd.h> int pipe(int filedes[2]); DESCRIPTION pipe creates a pair of file descriptors, pointing to a pipe inode, and places them in the array pointed to by filedes. filedes[0] is for reading, filedes[1] is for writing. RETURN VALUE On success, zero is returned. On error, -1 is returned, and errno is set appropriately. Pipes