{"id":30578598,"url":"https://github.com/witchoy/linuxcommands","last_synced_at":"2025-08-29T03:47:16.133Z","repository":{"id":311014093,"uuid":"1039641757","full_name":"Witchoy/LinuxCommands","owner":"Witchoy","description":"DIY Linux commands I made in C","archived":false,"fork":false,"pushed_at":"2025-08-21T15:59:41.000Z","size":25,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-21T17:09:33.466Z","etag":null,"topics":["c","learning","linux-commands"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Witchoy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-08-17T17:12:11.000Z","updated_at":"2025-08-21T15:59:44.000Z","dependencies_parsed_at":"2025-08-21T17:10:18.414Z","dependency_job_id":"9ebf905c-7797-4d41-b087-f4e1c6c5bcd1","html_url":"https://github.com/Witchoy/LinuxCommands","commit_stats":null,"previous_names":["witchoy/linuxcommands"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/Witchoy/LinuxCommands","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Witchoy%2FLinuxCommands","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Witchoy%2FLinuxCommands/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Witchoy%2FLinuxCommands/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Witchoy%2FLinuxCommands/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Witchoy","download_url":"https://codeload.github.com/Witchoy/LinuxCommands/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Witchoy%2FLinuxCommands/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272621054,"owners_count":24965647,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-29T02:00:10.610Z","response_time":87,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c","learning","linux-commands"],"created_at":"2025-08-29T03:46:53.430Z","updated_at":"2025-08-29T03:47:16.098Z","avatar_url":"https://github.com/Witchoy.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Linux Commands : Rewritten from Scratch\n\nThis repository is a personal learning journey where I re-implement classic **Linux command-line tools** in C.  \nThe goal is to understand how these commands work under the hood by rebuilding them step by step.\n\n---\n\n## 📚 Learning Ladder\n\nI’ve organized the project into **stages**, each focusing on a new concept:\n\n### Stage 1, Hello, stdout\nLearn to send text to the terminal.\n- 1. `echo`, print arguments  \n- 2. `yes`, print a string repeatedly until stopped  \n- 3. `true / false`, return exit code 0 or 1  \n\n### Stage 2, Reading files\nLearn to open, read, and display files.\n- 4. `cat`, print file contents to stdout  \n- 5. `head`, print first N lines of a file  \n- 6. `tail`, print last N lines of a file  \n- 7. `wc`, count lines, words, characters  \n\n### Stage 3, Filesystem basics\nLearn about paths, metadata, and file operations.\n- 8. `pwd`, print current working directory  \n- 9. `basename / dirname`, split a file path  \n- 10. `stat`, show file info (size, permissions, etc.)  \n- 11. `touch`, create a file or update timestamp  \n\n### Stage 4, Directory handling\nLearn to interact with directories and their contents.\n- 12. `ls` (basic), list files in current directory  \n- 13. `du` (basic), show size of files/directories  \n- 14. `rm` (basic), delete a file  \n- 15. `mv` (basic), rename a file  \n- 16. `cp` (basic), copy a file  \n\n### Stage 5, System interaction\nLearn about process control and system info.\n- 17. `date`, get current date/time  \n- 18. `sleep`, wait N seconds  \n- 19. `clear`, clear terminal  \n- 20. `whoami`, print current user  \n- 21. `hostname`, print machine name  \n- 22. `uptime`, read `/proc/uptime`\n\n---\n\n## 🗂️ Repository Structure\n\n```\n.\n├── Final_Builds/           # Compiled binaries of finished commands\n├── Stage_1/                # First commands (echo, yes, true, false)\n├── Stage_2/                # File reading commands (cat, head, tail, wc)\n└── ...                     # Future stages (filesystem, directories, system)\n```\n\n---\n\n## ⚙️ How to Build\n\nEach command has its own `Makefile`. To build, run the shell script with:\n\n```bash\nsh build_all.sh\n```\n\nthen, to try **echo**:\n```bash\ncd Final_Builds/\n./my_echo \"Hello World!\"\n```\n\n---\n\n## 🎯 Goals\n\n- Practice **C programming** with real-world examples  \n- Learn **system calls** like `open`, `read`, `write`, and `close`  \n- Understand **how Linux utilities are built** step by step  \n- Document progress as I go  \n\n---\n\n## 🚀 Final Builds\n\nWhen a command is completed, its executable is stored in:\n\n```\nFinal_Builds/\n```\n\nThis way you can run all finished commands from one place.\n\n---\n\n## 📝 Notes\n\nThis is a **learning project**. The reimplemented commands may not cover all edge cases or options that the GNU coreutils versions support, but they work for the basics and help me understand the internals.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwitchoy%2Flinuxcommands","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwitchoy%2Flinuxcommands","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwitchoy%2Flinuxcommands/lists"}