File Manager
Browse, upload, edit, and organise files on your Linux server visually with the CtrlOps GUI file manager. In-place unzip and full root access.
The File Manager turns your server's filesystem into something you can click through, just like Finder or Explorer. Upload a file with a click, double-click a folder to enter, edit a config file in place, and unzip an archive without typing a single command. If you would rather move files from a terminal, our scp and rsync command builder writes the exact command for you. For an overview of the visual file manager before you start, see the feature page.
Browse, upload, edit, and manage server files
- Browse any folder on your server, all the way down to single files.
- Upload single files, multiple files, or whole folders.
- Download any file to your computer.
- Create new folders.
- Rename, copy, move, and delete any item, and set its read, write, and execute permissions.
- Edit text files (configs, scripts, env files) right inside the app.
- Unzip
.ziparchives in place with one click. - Search and filter the current folder.
Open the File Manager
Open app → Click your server → File Manager tab (default tab when you connect)
You land in the user's home directory. From there, navigate by clicking folders, using the breadcrumb at the top, or typing a path.
Tour the toolbar
The top of the File Manager has two rows of controls, and there's a status bar along the bottom.
Top row (display options)
| Control | What it does |
|---|---|
| Hidden Items (eye icon toggle) | Show or hide dotfiles like .env or .bashrc |
| Show Files (file icon toggle) | Show files (on) or only show folders (off) |
| Add Application | Open the deploy form to create a new app folder. See the Application Deployment page |
| Refresh | Reload the current folder |
Second row (navigation)
| Control | What it does |
|---|---|
| Go to Root | Jump straight to / |
| Breadcrumb path | Click any segment to jump there. The current folder is highlighted in green |
| Up arrow | Go to the parent folder. Disabled when you're already at root |
| Search | Filter the current folder by filename. "Items: N" shows the live count |
| Folder | Create a new folder in the current path |
| Upload | Pick files from your computer to upload here |
| Upload Dir | Pick a folder from your computer to upload here, including its contents |
| Terminal | Open a terminal in the folder you're browsing, as a panel beside the file list |
Move around the filesystem
A few ways to get where you need to go:
- Click a folder to open it.
- Click a breadcrumb segment at the top to jump back several levels in one click.
- Click the up arrow to step up one folder.
- Click Go to Root to jump to
/.
Upload files
Use the Upload buttons in the toolbar to get files onto the server.
Open the destination folder
Browse to the folder where you want the files to land.
Click Upload (for files) or Upload Dir (for a whole folder)
A native file picker opens.
Pick what to upload
Select one or more files (or a folder) and confirm.
Wait for the progress message
You'll see "Uploading (1/3): filename.txt" as each file moves across. When done, a toast shows "Upload initiated for N item(s)" and the file list refreshes automatically.
Download a file
You can download from either the card view or the list view.
| View | How |
|---|---|
| Grid (cards) | Hover over the file card, then click the Download icon in the footer |
| List (table) | Click the three-dot menu in the file's row, then choose Download |
| Right-click | Right-click the file, then choose Download from the context menu |
You'll be prompted by your browser or OS to choose where to save it.
Create a folder
Open the parent folder
Browse to where you want the new folder to live.
Click Folder
A small modal opens with a single field labelled Folder Name.
Name it and confirm
Type a name (no spaces or special characters in most server filesystems) and click the confirm button. The new folder appears immediately.
The file and folder menu
Right-click any file or folder, or use the three-dot menu on its card or row, for the same set of actions.
| Action | What it does |
|---|---|
| Edit | Opens the file in the built-in editor. See Edit a text file |
| Download | Saves the file to your computer |
| Rename (pencil icon) | Opens a small modal with the current name pre-filled. Edit and confirm |
| Copy | Copies the item, ready to paste elsewhere |
| Move | Moves the item to another folder |
| Paste here | Drops whatever you copied or cut into the folder you're in |
| Copy path | Copies the full server path to your clipboard. Useful for pasting into the AI Terminal |
| Permissions | Sets who can read, write, and execute the item. See Set file permissions |
| Delete (red trash icon) | Asks "Delete <filename>? This action cannot be undone." Click OK to remove it |
Delete is permanent. Files removed here are not sent to a trash folder, they are gone for good. If the file is important, download a copy first.
Edit a text file
Use this for config files, env files, scripts, or anything else you want to tweak without leaving the app.
Open the file's menu
In list view, click the three-dot menu in the file's row. In grid view, the same option is available via right-click.
Click Edit Content
A modal opens titled Editing: filename. The full file contents load in a dark, monospaced text area.
Make your changes
Edit the text directly. The footer has three buttons:
| Button | What it does |
|---|---|
| Reload | Discard your changes and re-fetch the file from the server |
| Cancel | Close the modal without saving |
| Save | Save your changes and close the modal |
Click Save
A toast confirms "File saved successfully". If something goes wrong, you'll see "Failed to save file: ..." with the error.
For a syntax-highlighted experience on big files, you may prefer to download, edit locally, and re-upload. The built-in editor is meant for quick tweaks.
Set file permissions
Linux decides who can touch a file with three permissions - read, write, and execute - set separately for the file's owner, its group, and everyone else. Getting them right is usually a chmod command and a guess at the number. Here it's a grid of checkboxes.
This is the tool for the awkward case: you want to give someone your backend folder, but not the .env sitting in it. Give them what they need on the folder, then take read away from that one file, and the secret stays out of reach even though the directory doesn't.
Open the Permissions dialog
Right-click the file or folder → Click Permissions
It's also in the three-dot menu on the item's card or row.
Set read, write, and execute
Tick what each class of user should have:
| Class | Who it is |
|---|---|
| Owner | The user who owns the file |
| Group | Everyone in the file's group |
| Others | Every other account on the server |
| Permission | On a file | On a folder |
|---|---|---|
| Read | View the contents | List what's inside |
| Write | Change the contents | Create and delete items inside |
| Execute | Run it as a program | Enter the folder |
Apply
Confirm and CtrlOps sets the mode on the server. No chmod typed, and no working out what the number should have been.
Sensible defaults: 600 for anything secret like an .env file or a private key, 644 for ordinary files and configs, 755 for scripts and folders. Our chmod calculator converts between those numbers and the rwx letters if you want to check one. The full background is in Permissions & Access Control.
The File Manager sees exactly what your SSH user sees. If that account doesn't own the file, changing its mode will fail, the same as it would in a shell.
Unzip a .zip archive
Find the archive
Browse to the folder containing the .zip file. The blue Expand ZIP icon appears in the card footer for any .zip file.
Click Expand ZIP
The icon spins while the archive is being extracted. The contents land in a new folder named after the zip (without the .zip extension).
Wait for the toast
A success toast confirms "Expanded filename.zip". The file list refreshes to show the new folder.
Open a terminal in the current folder
Sometimes the fastest fix is a single command, and switching tabs means losing your place in the file tree.
Click Terminal at the right end of the navigation row, next to New folder and Upload. A terminal opens as a panel beside the file list, already in the folder you're browsing, so there's no cd to type however deep you are. The file list stays on screen next to it, so you keep your place.
You can also right-click a folder and choose Open in Terminal to start in that folder instead of the one you're in.
The panel is built for quick actions. For the full terminal, including the AI assistant and saved Scripts, open the AI Terminal tab.
Use git without the command line
The bar along the bottom of the File Manager tracks whichever folder you're browsing. When that folder is a git repository, it turns into a git client: branch, changes, and the sync buttons, all without leaving the file list.
The git status bar
| Element | What it shows / does |
|---|---|
| Branch name | The branch currently checked out in this folder |
| Up and down arrows | How many commits you're ahead of and behind the remote |
| Fetch | Ask the remote what's changed, without touching your working copy |
| Changed files count | How many files in the folder have uncommitted changes |
| Discard (trash icon) | Throw away local changes and go back to the last commit |
| Folders, files, size | Always shown, repository or not. The contents of the folder you're in |
The same bar is where you stage and commit, pull, push, and switch to another branch or create one. The everyday loop of pull, edit a file, commit, push never needs a shell.
CtrlOps runs git on the server as your SSH user. Pull and push use whatever credentials that user already has there, deploy keys included. Nothing is copied to your machine and nothing is relayed through CtrlOps.
Set up version control
Pointing the bar at a folder that isn't a repository yet opens a setup window instead. It reports what it found first, for example "git 2.43.0 is installed, but /home is not a repository."
Browse to the folder
Open the folder you want the repository in. The bar tracks whichever folder you're looking at.
Click the git bar
The Set up version control window opens with two tabs: Initialize and Clone.
Choose Initialize or Clone
Initialize starts a fresh repository in this folder. Clone pulls an existing one down from a remote.
Fill in the details and confirm
Check the Repository path, set the Initial branch (main by default), and click Initialize repository. The window tells you exactly what it will run, for example git init -b main in that folder. When it finishes, the bar switches to showing the branch.
git has to be installed on the server. If it isn't, the setup window says so, and you can install it from the AI Terminal with sudo apt install git (or sudo yum install git).
Don't initialize or clone inside a web root like /var/www/html. A .git folder served over HTTP leaks your source and your history. The Security Audit module checks for exactly this, under Git In Web Root.
The git bar keeps a folder in sync. It doesn't build or restart anything, so deploying an app is still the Application Deployment tab.
Search and sort
- Search: type any part of a filename in the search box. Matches update live, and "Items: N" shows the count of visible files.
- Sort: folders always appear first, followed by files in alphabetical order. There is no manual sort selector.
Tips
Toggle Hidden Items on when you need to edit .env files or .bashrc. Off by default to keep the view clean.
Copy Path is your shortcut to the AI Terminal. Copy a file's path here, then paste it after cat, tail -f, or vi in the terminal. For a file in the folder you're already browsing, the Terminal button is quicker: it opens right there.
Big folder uploads can take a while. Keep the tab open until the success toast appears, otherwise the upload may be cut short.
Troubleshooting
The Hidden Items toggle in the top toolbar is off. Click the eye icon to turn it on.
The user you're connected as doesn't own that file. Check the file's mode with Permissions in its right-click menu. If you don't own it, either reconnect as a user who does, or use the AI Terminal with sudo to remove it.
Network blips and very large files are the usual causes. Click Refresh to see what made it across, then re-upload only the missing items. If it keeps failing, the destination folder may be out of space, check the Infrastructure Details tab.
The user doesn't have write permission on that file, or the disk is full. Open Permissions in the file's right-click menu to see and fix the mode, or check the disk in the Infrastructure Details tab.
The unzip command needs the unzip package on the server. If it's missing, open the AI Terminal and run sudo apt install unzip (or sudo yum install unzip), then try again.
The user CtrlOps is logged in as may not have read permission for some files. Folders and files you can't read are simply hidden from the list, no error is shown.
That folder has no .git directory yet. Click the bar and the Set up version control window opens, where Initialize starts a fresh repository and Clone pulls an existing one down. If the window says git is missing instead, install it on the server first with sudo apt install git.
CtrlOps runs git as your SSH user, so the push uses whatever credentials that user already has on the server. Add the server's public key to your repository as a deploy key with write access, then try again. You can copy that key from the SSH Management tab.
MCP Servers
Extend the CtrlOps AI Assistant with external tool servers - docs, GitHub repos, local files, and anything else that speaks MCP.
Application Deployment
Connect your GitHub account, pick a repo and branch, and deploy Node.js, React, or Next.js apps to your Linux server. No CI/CD setup required.