CSCI 2930 Unix Tools


This section of the course (Spring 2017) meets on Tuesdays from 11:00-11:50AM in Ritter 115.

General Description

Students in this one-hour course will learn how to use Unix command-line tools to solve difficult data-processing problems quickly and easily. We will also discuss the design principles that underlie this approach to programming, and how they lead to good software engineering practice: modularity, simplicity, portability, reusability.

The prerequisite is a C- or better in CSCI 1300, or instructor permission.

Topics and Course Outline

  1. Philosophy
    1. Small, reusable tools that do one job well
    2. Read from stdin, write to stdout
    3. Plain text as a universal interface
    4. Rapid prototyping
  2. Bash programming
    1. Command line basics (cp, rm, touch, ...)
    2. Pipes and filters
    3. Regular expressions
    4. Environment variables
    5. Loops and conditionals
    6. Backticks
  3. Data munging with pipelines
    1. Bread and butter (grep, tr, sed, sort, ...)
    2. Tabular data (cut, paste, join, ...)
    3. Multiple files (globbing, find, xargs)
    4. Understanding Unicode
    5. Higher-order programming; bash as a filter
    6. Parsing SGML with Unix tools
  4. Command-line software engineering
    1. make
    2. diff and patch
    3. git and github
    4. Open source culture

Student Learning Outcomes

After successfully completing this course, students will be able to:

Textbook Information

The course lecture notes, developed together with John Paul Montano, are free to download here.

Homework and Exams

There will be a number of ungraded homework assignments throughout the semester. The best way to learn how to use these tools is through lots of practice, much more than we can get in just one hour a week. You should commit to working with Linux in your day-to-day life.

I will give a number of quizzes (roughly 4-5, depending on our pace through the material). Together those quizzes will count for 50% of your final grade. The other 50% will be based on a semester project of your choosing. This should be a significant text-processing challenge; preferably one that solves some real-world problem that helps you or someone else. I have infinitely many ideas for projects – more on this in class.

Students are expected to be honest in their academic work. The University reserves the right to penalize any student whose academic conduct at any time is, in its judgment, detrimental to the University. Such conduct shall include cases of plagiarism, collusion, cheating, giving or receiving or offering or soliciting information in examinations, or the use of previously prepared material in examinations or quizzes. Violations should be reported to your course instructor, who will investigate and adjudicate them according to the policy on academic honesty of the College of Arts and Sciences. If the charges are found to be true, the student may be liable for academic or disciplinary probation, suspension, or expulsion by the University. Students should review the College of Arts and Sciences policy on Academic Honesty.

In recognition that people learn in a variety of ways and that learning is influenced by multiple factors (e.g., prior experience, study skills, learning disability), resources to support student success are available on campus. Students who think they might benefit from these resources can find out more about:

Students who believe that, due to a disability, they could benefit from academic accommodations are encouraged to contact Disability Services at 314-977-8885 or visit the Student Success Center. Confidentiality will be observed in all inquiries. Course instructors support student accommodation requests when an approved letter from Disability Services has been received and when students discuss these accommodations with the instructor after receipt of the approved letter.