
Creating Files and Folders with mkdir and touch – Simple Examples
Table of Contents
- What’s This All About?
- Dramatic Real-World Problem: The “Where’s My Folder?!” Panic
- Why Files and Folders Matter (More Than You Think)
- How Does
mkdir
andtouch
Actually Work? - Tree of Use Cases – When and Why
- Step-By-Step: Fast Setup with
mkdir
&touch
- Mini Glossary (The Real-World, No-Nonsense Edition)
- Examples and Cases: The Good, Bad, and the Geeky (Comic Metaphor Table)
- Beginner Mistakes, Myths, and Similar Tools
- “Use This If…” Decision Tree
- Fun Facts & Weird Tricks with
mkdir
&touch
- Automation, Scripting, and New Opportunities
- One Day in the Life of a Sysadmin: The Folder Fiasco
- Wrap Up: Recommendations & Next Steps
What’s This All About?
Ever gotten lost in a sea of files, or watched an app crash just because a folder didn’t exist? Or maybe you’re spinning up a slick new VPS or Docker container and realize—wait, why is everything in /tmp
? This post is for you. We’re going to break down two command-line MVPs: mkdir
and touch
. These aren’t just for “hello world” tutorials—they’re everyday tools for devs, sysadmins, and anyone who likes their cloud servers organized instead of chaos-central. Read on for real-world advice, fast setups, and a few geeky tricks you’ll actually use.
Dramatic Real-World Problem: The “Where’s My Folder?!” Panic
Picture this: It’s 2AM. Your production server is running hot, your app is logging errors, and your client just texted you “Why can’t I upload files?!” You SSH in, tail the logs, and see this beauty: No such file or directory. You realize the deploy script forgot to create the /var/www/uploads
folder. Oops. Your heart sinks. Your coffee’s gone cold. It’s the little things—like missing folders—that can take down the best of us.
Why Files and Folders Matter (More Than You Think)
- Stability: Apps expect folders. If they’re missing, things break. Fast.
- Security: Permissions on files and folders keep your stuff safe (or not).
- Automation: Good scripts create what they need, every time. No more “it works on my machine” sadness.
- Scaling: Docker, Kubernetes, VPS, dedicated—doesn’t matter. You need predictable file structures, always.
How Does mkdir
and touch
Actually Work?
Breaking It Down
mkdir
(“make directory”): Creates a new folder at the path you specify. That’s it. No magic, just a new spot in the filesystem.touch
: Creates a new, empty file if it doesn’t exist. If it does exist, it updates the file’s “last modified” timestamp. Handy for scripts, logs, and triggering builds.
Quick Command Reference
mkdir myfolder
→ Makes a folder calledmyfolder
.touch file.txt
→ Makes an empty file calledfile.txt
(or updates the timestamp).mkdir -p /path/to/my/folder
→ Recursively makes all folders in the path (no “missing folder” errors).touch logs/error.log
→ Createslogs
if it exists, then the file. (Iflogs
doesn’t exist, you get an error!)
How Does It Work Under the Hood?
Both commands talk to the kernel to update the filesystem’s structure. mkdir
adds a new directory inode; touch
creates a new file inode, or just updates the timestamp if it’s already there. Most Linux, BSD, and macOS systems have them built-in. Windows (via WSL or Git Bash) supports them too.
Tree of Use Cases – When and Why
- Server setup scripts 👷♂️
- Create app folders, log directories, temp storage before deploys
- Dockerfile and Init Scripts 🐳
- Ensure every container has the right folders before
CMD
runs
- Ensure every container has the right folders before
- Daily Admin Tasks 🗂️
- Bulk create user home dirs, archive logs, prep for backups
- DevOps Pipelines 🚀
- Automate folder and file creation as part of CI/CD workflows
- Quick Fixes 🛠️
- “I need an empty file here, just for a flag or lock”
Benefits
- Never get “No such file or directory” errors again
- Reduce manual setup, speed up server launches
- Standardize folder structures across all environments (dev, staging, prod)
- Enable better scripting, fewer surprises
Step-By-Step: Fast Setup with mkdir
& touch
1. Open Your Terminal / SSH
All you need is a shell. If you’re on a VPS, dedicated box, or Docker container, just SSH in.
2. Plan Your Structure (Just Like LEGO)
/var/www/ ├── html/ ├── logs/ └── uploads/
3. Make Folders (with mkdir
)
mkdir -p /var/www/html /var/www/logs /var/www/uploads
Tip: The -p
flag makes parent directories as needed and skips errors if they already exist. Super handy for automation.
4. Make Files (with touch
)
touch /var/www/logs/access.log /var/www/logs/error.log
Instant empty log files, ready for your web server or app to start writing.
5. Set Permissions (Bonus Round)
chown -R www-data:www-data /var/www/uploads
Set the right user/group so your app can write files. Don’t skip this!
6. Script It!
Drop your commands into a bash script for repeatability:
#!/bin/bash
mkdir -p /var/www/{html,logs,uploads}
touch /var/www/logs/{access.log,error.log}
chown -R www-data:www-data /var/www/uploads
Run it after every deploy, or bake it into your Dockerfile RUN
steps.
7. Test Your Setup
ls -l /var/www/logs
See your new folders and files, ready for action!
Mini Glossary (The Real-World, No-Nonsense Edition)
- mkdir: “Make Directory”. The command that creates a new folder (directory) in your filesystem. Not a typo, not magic, just “make a place to put stuff”.
- touch: “Touch a File”. Not the touchscreen kind. It means “poke this file so it exists (and update its timestamp if it already does)”.
- -p: “Parents”. With
mkdir
, this means “create all missing folders in the path”. - inode: The kernel’s way of tracking files and folders. You don’t need to care, but it’s how
mkdir
andtouch
work. - Permissions: Who can read, write, or execute files and folders. Set with
chmod
andchown
.
Examples and Cases: The Good, Bad, and the Geeky (Comic Metaphor Table)
Hero | Comic-Style Situation | Power Move Command | Results (Happy Ending or Disaster?) |
---|---|---|---|
🥷 The Ninja Admin | Needs to prep folders before a midnight deploy. Moves with stealth, no errors. | mkdir -p /var/app/{logs,tmp,data} |
✔️ All folders created, no “file not found” drama. Deploy goes smoothly. |
🤦 The Forgetful Dev | Wrote app code assuming /uploads exists. It doesn’t. |
touch /uploads/image.jpg (but /uploads missing) |
❌ “No such file or directory”. App crashes. QA shakes head. |
🧙 The Scripting Wizard | Automates daily log rotation with a script. Wants zero errors. | mkdir -p /backup/logs && touch /backup/logs/rotation.log |
✔️ Daily backups happen. Logs in place. No sweat. |
😱 The Last-Minute Hero | Server boots, but app won’t start—missing config file! | touch /etc/myapp/config.yaml |
😅 File created, app starts with defaults. Disaster (barely) averted. |
Beginner Mistakes, Myths, and Similar Tools
Classic Rookie Moves:
- Forgetting
-p
withmkdir
: If any parent folder is missing, it fails. Always add-p
in scripts. - Assuming
touch
makes folders: It doesn’t! You’ll get an error if the folder doesn’t exist. - Wrong permissions: Making folders as root but app runs as
www-data
. Fix withchown
. - Overwriting files:
touch
won’t erase data, but be careful with scripts that create files—don’t nuke important stuff!
Common Myths:
- “
touch
can make folders.” Nope, it’s files only. - “
mkdir
will fill folders with stuff.” It just makes empty directories. You put content in later.
Similar Tools:
install -d
: Likemkdir -p
, plus can set ownership in one go. Handy for scripts.cp -r
: Copy entire directory trees (not just make them).rsync
: For serious folder sync/backup needs. [rsync project]find
: Locate and batch-process files/folders. [findutils]
“Use This If…” Decision Tree
Start 🟢 │ ├──► Do you just need to create a folder? │ │ │ YES ──► Usemkdir
(add-p
for nested/recursive). │ │ │ NO │ │ └──► Do you need a new, empty file (or to update its timestamp)? │ YES ──► Usetouch
. │ NO │ ┌────► Do you need to copy or move files/folders? │ │ │ YES ──► Usecp
ormv
. │ │ │ NO │ │ └────► Do you need to sync directories or backup? │ YES ──► Usersync
. │ NO ──► Time to rethink your problem! 🚩
Still need a server to try this on? Order a VPS at MangoHost or grab a dedicated server and start creating your folder empire.
Fun Facts & Weird Tricks with mkdir
& touch
- Batch create files/folders:
mkdir folder{1..5}
makesfolder1
tofolder5
in one go. - Bulk files:
touch file{a..d}.txt
createsfilea.txt
throughfiled.txt
. - Timestamp tricks:
touch -t 202406151200 file.txt
sets file’s modified time to June 15, 2024, 12:00. - Hidden files:
touch .env
creates a hidden environment file (dotfiles FTW). - Multi-level folders:
mkdir -p a/b/c/d
in a single command—great for deep structures. - Docker ENTRYPOINT: Many Docker images use
mkdir -p
andtouch
in their startup scripts to ensure containers have what they need. - Zero-byte “flag” files:
touch deployed.ok
can signal successful deploys in scripts.
Automation, Scripting, and New Opportunities
Want to automate your life? mkdir
and touch
are a staple in every sysadmin and DevOps engineer’s toolkit. Here’s why:
- Idempotency: Scripts using
mkdir -p
andtouch
can run safely multiple times. No weird side effects. - Portability: Works the same almost everywhere: Linux, macOS, BSD, Docker, even Windows with WSL/Git Bash.
- Speed: Lightning fast—no waiting for UIs or file browsers.
- Scalability: Automate folder/file creation across hundreds of servers with Ansible, Bash, or even Python.
Example Script: Deploy-Ready Folder Setup
#!/bin/bash
# Prepare app directories and logs for deployment
mkdir -p /srv/myapp/{config,logs,uploads}
touch /srv/myapp/logs/{access.log,error.log}
chown -R myappuser:myappgroup /srv/myapp
Pro tip: Plug this into your cloud-init, Dockerfile, or Ansible playbook for instant, repeatable setups.
One Day in the Life of a Sysadmin: The Folder Fiasco
Once upon a deploy, an admin named Alex was rolling out a new web app on a fresh VPS. The code was perfect, the configs were tuned, but the app just wouldn’t start. Alex checked the logs—except there were no logs. Why? The /var/log/myapp/
directory didn’t exist. With a quick mkdir -p /var/log/myapp
and touch /var/log/myapp/error.log
, the app roared to life. Alex sipped coffee, smiled, and added those two lines to the deploy script. Crisis averted. Productivity restored!
Wrap Up: Recommendations & Next Steps
- If you’re not using
mkdir -p
andtouch
in your setup scripts, you’re working too hard. - Add them to every server or container launch, and you’ll dodge 90% of “file not found” errors.
- Automate everything: Use them in bash, Ansible, Dockerfiles, and deploy scripts.
- Ready to put this to work? Order a VPS at MangoHost or grab a dedicated server and start building your next project the right way.
- Want more? Check the official mkdir man page and touch man page for ALL the nerdy flags.
Bottom line: mkdir
and touch
are small but mighty. Use them wisely, and your servers will always be clean, stable, and ready for anything the cloud throws your way.

This article incorporates information and material from various online sources. We acknowledge and appreciate the work of all original authors, publishers, and websites. While every effort has been made to appropriately credit the source material, any unintentional oversight or omission does not constitute a copyright infringement. All trademarks, logos, and images mentioned are the property of their respective owners. If you believe that any content used in this article infringes upon your copyright, please contact us immediately for review and prompt action.
This article is intended for informational and educational purposes only and does not infringe on the rights of the copyright owners. If any copyrighted material has been used without proper credit or in violation of copyright laws, it is unintentional and we will rectify it promptly upon notification. Please note that the republishing, redistribution, or reproduction of part or all of the contents in any form is prohibited without express written permission from the author and website owner. For permissions or further inquiries, please contact us.