summaryrefslogtreecommitdiff
path: root/README.md
blob: 3a062241fabb423888a8c999fff8a6eb047f9cfe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# Custom C Shell

A simple Unix-like shell implemented in C with basic file system operations, directory management, and file manipulation commands.

## Table of Contents
- [About](#about)
- [Features](#features)
- [Installation](#installation)
- [Usage](#usage)
- [Available Commands](#available-commands)
- [File Structure](#file-structure)
- [Known Issues](#known-issues)
- [Contributing](#contributing)
- [Author](#author)
- [License](#license)

## About

This project is a custom shell written in C, designed to mimic basic Unix shell functionalities. It supports file operations, directory manipulation, and essential shell commands like `ls`, `cd`, `cp`, `mv`, `rm`, and more.  

The goal of this project is to enhance understanding of:
- System calls
- File handling
- Process management in C

## Features

- **File and Directory Management** – Create, delete, and navigate directories and files.
- **File Copy and Move** – Copy and move files between directories.
- **Ownership Management** – Change file permissions.
- **Recursive Directory Deletion** – Delete directories and their contents recursively.
- **View Current Directory** – Display the present working directory.
- **Basic Command Execution** – Execute a set of predefined commands.
- **Screen Clearing** – Clear the terminal screen with the `clr` command.
- **Graceful Exit** – Exit the shell cleanly.

## Installation

1. Clone the repository:
   ```sh
   git clone https://github.com/nasrlol/unixshell
   cd unixshell
   ```

2. Compile the shell:
   ```sh
   gcc -o custom_shell main.c
   ```

3. Run the shell:
   ```sh
   ./custom_shell
   ```

## Usage

After running the shell (`./custom_shell`), you can execute the following commands:

### Available Commands

| Command                      | Description                                      |
|------------------------------|--------------------------------------------------|
| `ls [directory]`             | List files in a directory                        |
| `mkdir [directory_name]`     | Create a new directory                           |
| `rmdir [directory_name]`     | Recursively delete a directory and its contents |
| `rm [file_name]`             | Delete a file                                   |
| `cp [source] [destination]`  | Copy files from source to destination           |
| `mv [source] [destination]`  | Move files from source to destination           |
| `chown [file]`               | Change file ownership (permissions)             |
| `pwd`                        | Print the current working directory             |
| `cd [directory]`             | Change the working directory                    |
| `clr`                        | Clear the terminal                              |
| `echo [message]`             | Display a message                               |
| `exit`                       | Exit the shell                                  |

## File Structure

```
 unixshell
 ├── main.c          # Main source file for the shell
 ├── shell.h         # Header file (definitions & prototypes)
 ├── commands.c      # Functions handling shell commands
 ├── utils.c         # Utility functions
 ├── README.md       # Documentation
 ├── LICENSE         # License information
```

## Known Issues

- Some commands may not fully replicate the behavior of a standard Unix shell.
- Does not support piping (`|`) and complex command chaining.

## Contributing

Contributions are welcome! If you’d like to improve this project, follow these steps:

1. Fork the repository
2. Create a new branch
3. Make your changes and test them
4. Submit a pull request

## Author

**Appie (nasrlol)**  
- GitHub: [@nasrlol](https://github.com/nasrlol)  
- Website: [nasrlol.dev](https://nasrlol.dev)  

## License

This project is licensed under the **MIT License**. See the [LICENSE](LICENSE) file for details.