Course Description: This course provides an in-depth exploration of Linux programming, covering essential concepts, tools, and techniques for developing applications and scripts in a Linux environment. Students will gain hands-on experience with system programming, shell scripting, and using Linux-specific libraries.
Course Objectives:
- Understand the fundamentals of the Linux operating system.
- Develop proficiency in Linux shell scripting.
- Learn the basics of system programming in Linux.
- Gain experience with Linux development tools and libraries.
- Build and debug applications in a Linux environment.
Week 1: Introduction to Linux
- Overview of the Linux operating system and its components
- Basic Linux commands and file system navigation
- Using text editors (vim, nano) in Linux
- Understanding file permissions and ownership
- Practical exercises in basic Linux command usage
Week 2: Shell Scripting Basics
- Introduction to shell scripting and the Bash shell
- Writing and executing basic shell scripts
- Using variables, loops, and conditionals in scripts
- Script debugging techniques
- Practical exercises in writing simple shell scripts
Week 3: Advanced Shell Scripting
- Functions and modular scripting
- Handling user input and command-line arguments
- Working with files and directories in scripts
- Using awk, sed, and grep for text processing
- Practical exercises in advanced shell scripting
Week 4: Introduction to C Programming in Linux
- Overview of the C programming language
- Setting up the development environment (gcc, make)
- Writing, compiling, and running C programs
- Understanding and using pointers and memory management
- Practical exercises in basic C programming
Week 5: System Programming Basics
- Introduction to system programming concepts
- Using system calls and library functions
- File I/O operations in C (open, read, write, close)
- Error handling in system programming
- Practical exercises in basic system programming
Week 6: Process Management
- Understanding processes and process control in Linux
- Creating and managing processes with fork(), exec(), and wait()
- Inter-process communication (IPC) mechanisms: pipes, signals
- Practical exercises in process management
Week 7: Thread Programming
- Introduction to threading and parallelism
- Using the pthread library for thread creation and management
- Synchronization techniques: mutexes, semaphores, and condition variables
- Practical exercises in thread programming
Week 8: Network Programming
- Basics of network programming and socket API
- Creating and managing sockets for TCP/IP communication
- Writing simple client-server applications
- Practical exercises in network programming
Week 9: File Systems and Device Programming
- Understanding Linux file systems and file operations
- Working with directories and special files
- Introduction to device drivers and kernel modules
- Practical exercises in file system programming
Week 10: Debugging and Profiling
- Using gdb for debugging C programs
- Introduction to strace and ltrace for system call tracing
- Profiling applications with tools like gprof and Valgrind
- Practical exercises in debugging and profiling
Week 11: Advanced Topics in Linux Programming
- Introduction to dynamic linking and shared libraries
- Using makefiles and build automation
- Introduction to Linux security programming (e.g., SELinux, AppArmor)
- Practical exercises in advanced Linux programming topics
Week 12: Final Project and Review
- Comprehensive project integrating various Linux programming concepts
- Application of techniques learned throughout the course
- Peer review and feedback sessions
- Final project presentations and critique
- Course review and Q&A
Assessment:
- Weekly assignments and quizzes (40%)
- Midterm project (20%)
- Final project (30%)
- Class participation and attendance (10%)