Skip to main content
Every sandbox has a complete Linux filesystem. Use sandbox.files to read, write, and manage files and directories.

Quick Reference

OperationMethod
Read filesandbox.files.read(path)
Write filesandbox.files.write(path, data)
List directorysandbox.files.list(path)
Check existencesandbox.files.exists(path)
Get file infosandbox.files.get_info(path)
Deletesandbox.files.remove(path)
Rename/Movesandbox.files.rename(old, new)
Create directorysandbox.files.make_dir(path)
Watch for changessandbox.files.watch_dir(path)

Basic Example

from moru import Sandbox

sandbox = Sandbox.create()

# Write a file
sandbox.files.write("/home/user/hello.txt", "Hello, World!")

# Read it back
content = sandbox.files.read("/home/user/hello.txt")
print(content)  # Hello, World!

# List directory
entries = sandbox.files.list("/home/user")
for entry in entries:
    print(f"{entry.name}: {entry.type}")

# Check if file exists
if sandbox.files.exists("/home/user/hello.txt"):
    print("File exists!")

# Get file info
info = sandbox.files.get_info("/home/user/hello.txt")
print(f"Size: {info.size} bytes")
print(f"Modified: {info.modified_time}")

# Delete the file
sandbox.files.remove("/home/user/hello.txt")

sandbox.kill()

File Information

The EntryInfo object contains file metadata:
PropertyTypeDescription
namestringFile or directory name
pathstringFull path
type"file" or "dir"Entry type
sizenumberSize in bytes
modenumberUnix permission mode
permissionsstringPermission string (e.g., -rw-r--r--)
ownerstringOwner username
groupstringGroup name
modified_timedatetimeLast modification time
symlink_targetstring?Target if entry is a symlink

User Context

By default, operations run as the user user. Specify a different user:
# Write as root
sandbox.files.write("/etc/myconfig", "data", user="root")

# Read as specific user
content = sandbox.files.read("/home/alice/file.txt", user="alice")

Request Timeout

Set a timeout for file operations:
# 30-second timeout for this operation
content = sandbox.files.read("/large/file.bin", request_timeout=30)

Working Directory

The default working directory is /home/user. Use absolute paths for clarity:
# These are equivalent
sandbox.files.write("/home/user/file.txt", "data")
sandbox.commands.run("echo 'data' > file.txt")

Next Steps