Creating an empty file or updating its timestamp requires no special software in Linux. If you are wondering what does touch do in linux, the answer is simple: it is a command-line utility that creates empty files or modifies file timestamps without editing content.
You can use it to mark files as recently modified, set specific dates, or quickly generate placeholder files for testing. This guide covers everything you need to know about the touch command, from basic usage to advanced options.
What Does Touch Do In Linux
The touch command is part of the GNU Core Utilities, included in almost every Linux distribution. Its primary job is to change the access, modification, or change timestamps of a file. If the file does not exist, touch creates an empty file with the specified name.
Think of it as a lightweight tool that does not open or edit the file’s contents. It only touches the metadata—the timestamps that track when a file was last accessed or modified.
Core Functions Of Touch
- Create empty files: The most common use case. Running
touch filenamecreates a blank file if it does not exist. - Update timestamps: If the file already exists, touch updates its access and modification times to the current time.
- Set custom timestamps: You can specify a specific date and time instead of using the current moment.
- Change only access or modification time: Use flags to update one timestamp without affecting the other.
- Prevent file creation: The
-cflag stops touch from creating a new file if the target does not exist.
Basic Syntax And Usage
The general syntax is:
touch [options] file1 file2 ...
Here are the most common options:
| Option | Description |
|---|---|
-a |
Change only the access time |
-m |
Change only the modification time |
-c |
Do not create the file if it does not exist |
-t |
Use a specific timestamp (format: [[CC]YY]MMDDhhmm[.ss]) |
-r |
Use the timestamp of a reference file |
Practical Examples
1. Create a single empty file:
touch newfile.txt
This creates an empty file named newfile.txt in the current directory. If the file already exists, its timestamps update to the current time.
2. Create multiple files at once:
touch file1.txt file2.txt file3.txt
You can list several filenames separated by spaces. Touch creates all of them in one command.
3. Update only the access time:
touch -a existingfile.log
This changes the access timestamp without altering the modification time.
4. Update only the modification time:
touch -m existingfile.log
Useful when you want to mark a file as recently changed without actually editing it.
5. Set a custom timestamp:
touch -t 202503151430.45 myfile.txt
This sets the timestamp to March 15, 2025, at 2:30:45 PM. The format is YYYYMMDDhhmm.ss.
6. Use a reference file’s timestamp:
touch -r reference.txt target.txt
This copies the timestamps from reference.txt to target.txt. Both files will have identical access and modification times.
7. Avoid creating a new file:
touch -c missingfile.txt
If missingfile.txt does not exist, touch does nothing. No error message appears unless you use verbose mode.
Understanding Linux File Timestamps
Linux tracks three timestamps for every file:
- Access time (atime): When the file was last read or accessed.
- Modification time (mtime): When the file content was last changed.
- Change time (ctime): When the file metadata (like permissions or ownership) was last modified.
The touch command can update atime and mtime, but not ctime directly. Changing metadata through chmod or chown updates ctime automatically.
Why Timestamps Matter
Timestamps help you track file activity. Backup tools use mtime to decide which files need copying. Build systems like Make rely on timestamps to determine if source files have changed. Log rotation scripts check timestamps to archive old files.
By using touch, you can simulate file activity for testing or force a rebuild of a project without editing actual code.
Common Use Cases For Touch
Creating Placeholder Files
When setting up a project structure, you might need empty files for configuration, logs, or testing. Touch lets you create them instantly.
Example: touch config.ini error.log data.csv
Forcing File Compilation
In software development, tools like Make compare timestamps to decide what to recompile. If you update a header file’s timestamp, Make thinks it changed and rebuilds dependent objects.
Example: touch header.h && make
Testing Scripts And Cron Jobs
When writing scripts that process files by date, you can use touch to create files with specific timestamps for testing.
Example: touch -t 202501010000 oldfile.log creates a file dated January 1, 2025.
Updating Log File Timestamps
Some applications check if a log file is recent. If you archive old logs, you can use touch to mark them as current for testing purposes.
Advanced Touch Options
Using The Date Command With Touch
You can combine touch with the date command for dynamic timestamps:
touch -t $(date -d "yesterday" +%Y%m%d%H%M.%S) file.txt
This sets the file’s timestamp to exactly 24 hours ago.
Touch With Wildcards
Use shell wildcards to update multiple files matching a pattern:
touch *.txt
This updates timestamps for all .txt files in the current directory. If no .txt files exist, touch creates a file literally named *.txt (which is rarely desired).
Verbose Mode
Some versions of touch support the -v flag to show what was changed:
touch -v myfile.txt
Output: touch: setting times of 'myfile.txt' to 2025-03-15 14:30:45.000000000 +0000
Common Mistakes And How To Avoid Them
- Accidentally creating files: If you mistype a filename, touch creates it. Use
-cto prevent creation. - Overwriting timestamps unintentionally: When using
-t, double-check the format. Wrong syntax sets the timestamp to an unexpected value. - Using touch on directories: By default, touch works on files. To update a directory’s timestamp, you need the
-hflag (on some systems) or usetouch -c directory/. - Forgetting the
-rreference file exists: If the reference file is missing, touch throws an error.
Touch Vs Other File Creation Methods
You can create empty files with other commands, but touch is the simplest:
- Redirection:
> newfile.txtcreates a file but also truncates it if it exists. Touch does not truncate. - Echo:
echo "" > newfile.txtcreates a file with a newline character. Touch creates a truly empty file. - Cat:
cat /dev/null > newfile.txtworks but is more verbose.
For timestamp manipulation, touch is the only standard tool that does not require external utilities.
Touch In Scripts And Automation
Touch is invaluable in shell scripts. Here are a few patterns:
Create a lock file:
touch /tmp/script.lock
Ensure a log directory exists with a placeholder:
mkdir -p /var/log/myapp && touch /var/log/myapp/.keep
Update a timestamp to trigger a process:
touch /etc/cron.d/myjob
Frequently Asked Questions
Can touch create files with spaces in the name?
Yes, but you must quote the filename: touch "my file.txt" or escape the space: touch my\ file.txt.
Does touch work on symbolic links?
By default, touch follows symbolic links and updates the target file’s timestamp. Use the -h flag to update the link itself (if supported).
What is the difference between touch and mkdir?
Touch creates files; mkdir creates directories. They serve different purposes. You cannot use touch to create a directory.
How do I check if touch changed the timestamp?
Use stat filename to view all timestamps before and after running touch.
Can I use touch to set a timestamp in the future?
Yes, touch accepts any valid date. Setting a future timestamp is possible but may confuse some applications that expect realistic dates.
Performance And Limitations
Touch is extremely fast because it only modifies metadata, not file content. It can handle thousands of files in a single command without noticeable delay.
One limitation: touch cannot change the change time (ctime) directly. The kernel updates ctime whenever metadata changes, so you cannot set it to an arbitrary value.
Another limitation: on some filesystems (like FAT32), timestamp resolution is limited to 2 seconds. Touch may not achieve sub-second precision.
Touch On Different Linux Distributions
Touch behaves consistently across all major distributions (Ubuntu, Fedora, Debian, Arch, etc.) because it is part of GNU coreutils. The only differences might be in default options or the presence of additional flags in newer versions.
To check your version: touch --version
Conclusion
Now you understand what does touch do in linux. It is a simple yet powerful command for creating empty files and manipulating timestamps. Whether you are setting up a project, testing scripts, or forcing a rebuild, touch saves time and effort.
Practice with the examples above to get comfortable. Once you master touch, you will find yourself using it daily in your Linux workflow.
Remember the key flags: -a, -m, -c, -t, and -r. They give you full control over file timestamps without any bloat.
Happy touching!