Basics of Unix Commands for Software Engineers: A Guide for Mac and Windows Users

Sumeet Panchal
3 min readJul 31, 2024

--

CLI

As a software engineer, understanding Unix commands can significantly enhance your productivity and efficiency, regardless of whether you are working on a Mac or Windows machine. Unix commands provide powerful tools for managing files, processes, and system resources directly from the command line. This blog will cover the basics of Unix commands and their usage on both Mac and Windows platforms.

Table of Contents

1. Introduction to Unix Commands
2. Setting Up Your Environment
— Mac
— Windows
3. Basic Unix Commands
— Navigation
— File Operations
— Text Processing
— System Monitoring
4. Practical Examples
5. Conclusion

1. Introduction to Unix Commands

Unix commands are the foundation of many operating systems, including Linux and macOS. They allow users to perform a wide range of tasks directly from the command line, making automating processes, managing files, and troubleshooting issues easier.

2. Setting Up Your Environment

Mac
The macOS is a Unix-based operating system that comes with a powerful terminal pre-installed. To access the terminal:
1. Open Finder.
2. Navigate to Applications > Utilities.
3. Double-click Terminal.

Alternatively, you can use Spotlight Search (Cmd + Space) and type Terminal to open it.

Windows
Windows does not natively support Unix commands, but you can use tools like Windows Subsystem for Linux (WSL) or Git Bash to access a Unix-like environment.

Setting up WSL:
1. Open PowerShell as an administrator.
2. Run the command: wsl — install.
3. Follow the prompts to install a Linux distribution (e.g., Ubuntu).
4. Restart your computer and open the Linux distribution from the Start menu.

Setting up Git Bash:
1. Download Git for Windows from the [official site](https://gitforwindows.org/).
2. Run the installer and follow the instructions.
3. Open `Git Bash` from the Start menu.

3. Basic Unix Commands

Navigation
- pwd: Print Working Directory

 pwd

- ls: List Directory Contents

ls
ls -l # Long format
ls -a # Include hidden files

- cd: Change Directory

 cd /path/to/directory
cd .. # Move up one directory
cd ~ # Move to the home directory

File Operations
- touch: Create an Empty File

touch filename.txt

- cp: Copy Files and Directories

cp source.txt destination.txt
cp -r source_dir/ destination_dir/

- mv: Move/Rename Files and Directories

mv oldname.txt newname.txt
mv /path/to/file /new/path/

- rm: Remove Files and Directories

rm filename.txt
rm -r directory/

Text Processing
- cat: Concatenate and Display Files

cat filename.txt

- grep: Search Text Using Patterns

grep ‘pattern’ filename.txt

- awk: Pattern Scanning and Processing Language

awk ‘{print $1}’ filename.txt

- sed: Stream Editor for Filtering and Transforming Text

sed ‘s/old/new/g’ filename.txt

System Monitoring
- top: Display Active Processes

top

- ps: Report a Snapshot of Current Processes

ps aux

- df: Report File System Disk Space Usage

df -h

- du: Estimate File Space Usage

du -sh /path/to/directory

4. Practical Examples

Example 1:
Creating and Navigating Directories

1. Create a directory:

mkdir my_project

2. Navigate into the directory:

cd my_project

3. Create a new file:

touch index.html

4. List the contents:

ls -l

Example 2:
Searching for a Pattern in Files

1. Create a sample file:

echo “Hello, Unix commands!” > sample.txt

2. Search for the word “Unix”:

grep ‘Unix’ sample.txt

Example 3:
Monitoring System Resources

1. Display active processes:

top

2. Check disk space usage:

df -h

5. Conclusion

Mastering basic Unix commands is essential for any software engineer. These commands can help you navigate the file system, manage files, process text, and monitor system resources efficiently. Whether you’re using a Mac or Windows machine, setting up a Unix-like environment is straightforward and provides powerful tools to enhance your workflow.

Happy coding!

--

--

Sumeet Panchal
Sumeet Panchal

Written by Sumeet Panchal

Programming enthusiast specializing in Android and React Native, passionate about crafting intuitive mobile experiences and exploring innovative solutions.

No responses yet