Cloud Commander is an orthodox web file manager with console and editor. Will help you manage the server and work with files, directories and programs in browser from any computer, mobile or tablet.
- Open Source (MIT License).
- Has 2 classic panels.
- Optional authorization.
- Client works in web browser.
- Server works on Windows, Linux, Mac OS and Android (with help of Termux).
- Could be used local or remotely.
- Adapting to screen size.
- 3 built-in editors with support of syntax highlighting: Dword, Edward and Deepword.
- Console with support of default OS command line.
- Written in JavaScript/Node.js.
The installation of file manager is very simple.
- install latest version of node.js.
- install
cloudcmd
vianpm
with:
npm i cloudcmd -g
When in trouble use:
npm i cloudcmd -g --force
For starting just type in console:
cloudcmd
Cloud Commander supports command line parameters:
Parameter | Operation |
---|---|
-h, --help |
display help and exit |
-v, --version |
display version and exit |
-s, --save |
save configuration |
-o, --online |
load scripts from remote servers |
-a, --auth |
enable authorization |
-u, --username |
set username |
-p, --password |
set password |
-c, --config |
configuration file path |
--editor |
set editor: "dword", "edward" or "deepword" |
--packer |
set packer: "tar" or "zip" |
--root |
set root directory |
--prefix |
set url prefix |
--port |
set port number |
--minify |
enable minification |
--progress |
show progress of file operations |
--html-dialogs |
use html dialogs |
--open |
open web browser when server started |
--one-panel-mode |
set one panel mode |
--config-dialog |
enable config dialog |
--console |
enable console |
--terminal |
enable terminal |
--terminal-path |
set terminal path |
--no-server |
do not start server |
--no-auth |
disable authorization |
--no-online |
load scripts from local server |
--no-open |
do not open web browser when server started |
--no-minify |
disable minification |
--no-progress |
do not show progress of file operations |
--no-html-dialogs |
do not use html dialogs |
--no-one-panel-mode |
unset one panel mode |
--no-config-dialog |
disable config dialog |
--no-console |
disable console |
--no-terminal |
disable terminal |
If no parameters given Cloud Commander reads information from ~/.cloudcmd.json
and use
port from it (8000
default). if port variables PORT
or VCAP_APP_PORT
isn't exist.
To begin use, type in address bar of your browser:
http://localhost:8000
If you installed Cloud Commander with npm
, stop application and
re-install it:
npm install cloudcmd -g
Then start it again, clear cache of your browser and reload page.
Key | Operation |
---|---|
F1 |
help |
F2 |
rename |
F3 |
view |
Shift + F3 |
view as markdown |
F4 |
edit |
F5 |
copy |
F6 |
rename/move |
F7 |
new directory |
Shift + F7 |
new file |
F8 , Delete |
remove |
Shift + Delete |
remove without prompt |
F9 |
menu |
F10 |
config |
* |
select/unselect all |
+ |
expand selection |
- |
shrink selection |
Ctrl + x |
cut to buffer |
Ctrl + с |
copy to buffer |
Ctrl + v |
paste from buffer |
Ctrl + z |
clear buffer |
Ctrl + r |
refresh |
Ctrl + d |
clear local storage |
Ctrl + a |
select all files in a panel |
Ctrl + m |
rename selected files |
Ctrl + u |
swap panels |
Ctrl + F3 |
sort by name |
Ctrl + F5 |
sort by date |
Ctrl + F6 |
sort by size |
Up , Down , Enter |
file system navigation |
Alt + Left/Right |
show content of directory under cursor in target panel |
Alt + g |
go to directory |
Ctrl + \ |
go to the root directory |
Tab |
move via panels |
Page Up |
up on one page |
Page Down |
down on one page |
Home |
to begin of list |
End |
to end of list |
Space |
select current file (and get size of directory) |
Insert |
select current file (and move to next) |
F9 |
context menu |
~ |
console |
Ctrl + Click |
open file on new tab |
- View images.
- View text files.
- Playing audio.
- Playing video.
Key | Operation |
---|---|
F3 |
open |
Esc |
close |
Key | Operation |
---|---|
F4 |
open |
Esc |
close |
For more details see Edward hot keys.
Key | Operation |
---|---|
~ |
open |
Ctrl + p |
paste path of current directory |
Esc |
close |
For more details see console hot keys.
Terminal
disabled and not installed by default. To use it you should install gritty with:
npm i gritty -g
And then set the path of a terminal with:
cloudcmd --terminal --terminal-path `gritty --path` --save
On Windows you need to install windows-build-tools
before:
npm install --global windows-build-tools
Then get path of a gritty
with:
gritty --path
It will returns something like:
C:\Users\coderaiser\AppData\Roaming\npm\node_modules\gritty
Set this path as --terminal-path
with:
cloudcmd --save --terminal --terminal-path "C:\Users\coderaiser\AppData\Roaming\npm\node_modules\gritty"
After that you can use terminal
in the same way as a console
.
Key | Operation |
---|---|
Shift + ~ |
open |
Shift + Esc |
close |
Every program executed in console
or terminal
has these environment
variables:
ACTIVE_DIR
- directory that contains cursorPASSIVE_DIR
- directory with no cursorCURRENT_NAME
- name of a file under cursorCURRENT_PATH
- path to file under cursor
On Unix
you can use it this way:
~> echo $CURRENT_PATH
/home/coderaiser/cloudcmd/bin/cloudcmd.js
Key | Operation |
---|---|
F10 |
open |
Esc |
close |
When you change one of options file ~/.cloudcmd.json
would be saved.
It could be edited manually with any text editor.
Here is description of options:
{
"auth" : false, /* enable http authentication */
"username" : "root", /* username for authentication */
"password" : "toor", /* password hash in sha-1 for authentication*/
"algo" : "sha512WithRSAEncryption", /* cryptographic algorithm */
"editor" : "edward", /* default, could be "dword" or "edward" */
"packer" : "tar", /* default, could be "tar" or "zip" */
"diff" : true, /* when save - send patch, not whole file */
"zip" : true, /* zip text before send / unzip before save */
"localStorage" : true, /* local storage */
"buffer" : true, /* buffer for copying files */
"dirStorage" : true, /* store directory listing to localStorage */
"minify" : false, /* minification of js,css,html and img */
"online" : true, /* load js files from cdn or local path */
"open" : false /* open web browser when server started */
"cache" : true, /* add cache-control */
"showKeysPanel" : true, /* show classic panel with buttons of keys */
"port" : 8000, /* http port */
"ip" : null, /* ip or null(default) */
"root" : "/", /* root directory */
"prefix" : "", /* url prefix */
"progress" : true, /* show progress of file operations */
"htmlDialogs" : true, /* use html dialogs */
"onePanelMode" : false, /* set one panel mode */
"configDialog" : true, /* enable config dialog */
"console" : true, /* enable console */
"terminal" : false, /* disable terminal */
"terminalPath" : '', /* path of a terminal */
}
Some config options can be overridden with environment variables
such:
CLOUDCMD_TERMINAL
- enable terminalCLOUDCMD_TERMINAL_PATH
- set terminal pathCLOUDCMD_CONFIG_DIALOG
- enable config dialog
Right mouse click button shows context menu with items:
- View
- Edit
- Rename
- Delete
- Pack
- Extract
- Upload To Cloud
- Download
- Cut
- Copy
- Paste
- New (File, Directory)
- Upload
- Upload From Cloud
- (Un)Select All
- Log Out (available when the
authorization
is enabled)
Key | Operation |
---|---|
F9 |
open |
Esc |
close |
Cloud Commander could work in one panel mode when screen size can not accommodate second panel or via --one-panel-mode
options flag.
It could happen when mobile device, tablet or small window size used to work with file manager.
Cloud Commander could be used as middleware for node.js
applications based on socket.io and express:
Init package.json
:
npm init -y
Install dependencies:
npm i cloudcmd express socket.io -S
And create index.js
:
const http = require('http');
const cloudcmd = require('cloudcmd');
const io = require('socket.io');
const app = require('express')();
const port = 1337;
const prefix = '/cloudcmd';
const server = http.createServer(app);
const socket = io.listen(server, {
path: `${prefix}/socket.io`
});
const config = {
prefix /* base URL or function which returns base URL (optional) */
};
const plugins = [
__dirname + '/plugin.js'
];
app.use(cloudcmd({
socket, /* used by Config, Edit (optional) and Console (required) */
config, /* config data (optional) */
plugins, /* optional */
}));
server.listen(port);
And you are ready to go.
Standard practices say no non-root process gets to talk to the Internet on a port less than 1024. Anyway I suggest you to start Cloud Commander as non-root. How it could be solved? There is a couple easy and fast ways. One of them is port forwarding.
Just run shell/addtables.sh
for default options.
iptables -t nat -L # look rules before
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8000
iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 4430
iptables -t nat -L # look rules after
You should see something like this ( 8000 and 4430 should be in config as port and sslPort )
target prot opt source destination
REDIRECT tcp -- anywhere anywhere tcp dpt:http redir ports 8000
REDIRECT tcp -- anywhere anywhere tcp dpt:https redir ports 4430
If you would want to get things back just clear rules ( 1 and 2 it's rule numbers, in your list they could differ).
iptables -t nat -D PREROUTING 2
iptables -t nat -D PREROUTING 1
Get nginx. On Linux it could be done this way:
sudo apt-get install nginx #for ubuntu and debian
Then make host file /etc/nginx/sites-available/io.cloudcmd.io ( io.cloudcmd.io is your domain name) with content:
server {
listen 80;
client_max_body_size 100m;
server_name io.cloudcmd.io;
access_log /var/log/nginx/io.cloudcmd.io.access.log;
location / {
proxy_pass http://127.0.0.1:8000/;
}
}
If you want add SSL, add a couple lines to server block:
server {
listen 443;
client_max_body_size 100m;
ssl on;
ssl_certificate /home/coderaiser/cloudcmd/ssl/ssl.crt;
ssl_certificate_key /home/coderaiser/cloudcmd/ssl/ssl.key;
server_name io.cloudcmd.io;
access_log /var/log/nginx/io.cloudcmd.io.access.log;
location / {
proxy_pass http://127.0.0.1:8000/;
}
}
For WebSocket support (nginx >= v1.3.13) modify server block:
location / {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://127.0.0.1:8000/;
}
If you need redirection from http to https, it's simple:
server {
listen 80;
server_name admin.cloudcmd.io;
rewrite ^ https://io.cloudcmd.io$request_uri? permanent; #301 redirect
access_log /var/log/nginx/io.cloudcmd.io.access.log;
}
# create symlink of this file
ln -s ./sites-available/io.cloudcmd.io ./sites-enabled
# restart nginx
/etc/init.d/nginx restart
Cloud Commander
could be easily deployed to Heroku.
Cloud Commander
could be used as docker container this way:
docker run -v ~:/root -v /:/mnt/fs -t -p 8000:8000 coderaiser/cloudcmd
Config would be read from home directory, hosts root file system would be mount to /mnt/fs
,
8000
port would be exposed to hosts port.
Also you could use docker compose with docker-compose.yml
:
version: '2'
services:
web:
ports:
- 8000:8000
volumes:
- ~:/root
- /:/mnt/fs
image: coderaiser/cloudcmd
When you create this file run:
docker-compose up
There is a lot ways to be involved in Cloud Commander
development:
- if you find a bug or got idea to share create issue;
- if you fixed a bug, typo or implemented new feature create pull request;
- if you know languages you can help with site translations;
- 2017.03.06, v6.8.0
- 2017.03.04, v6.7.0
- 2017.02.24, v6.6.3
- 2017.02.24, v6.6.2
- 2017.02.24, v6.6.1
- 2017.02.22, v6.6.0
- 2017.02.21, v6.5.6
- 2017.02.21, v6.5.5
- 2017.02.17, v6.5.4
- 2017.02.17, v6.5.3
- 2017.02.15, v6.5.2
- 2017.02.14, v6.5.1
- 2017.02.14, v6.5.0
- 2017.02.06, v6.4.0
- 2017.02.02, v6.3.1
- 2017.01.27, v6.3.0
- 2017.01.26, v6.2.2
- 2017.01.24, v6.2.1
- 2017.01.24, v6.2.0
- 2017.01.20, v6.1.0
- 2017.01.17, v6.0.3
- 2017.01.08, v6.0.2
- 2017.01.06, v6.0.1
- 2016.12.29, v6.0.0
- 2016.12.27, v5.13.0
- 2016.12.23, v5.12.4
- 2016.12.23, v5.12.3
- 2016.12.19, v5.12.2
- 2016.12.19, v5.12.1
- 2016.12.16, v5.12.0
- 2016.12.05, v5.11.1
- 2016.12.01, v5.10.2
- 2016.12.01, v5.10.2
- 2016.11.22, v5.10.1
- 2016.11.18, v5.10.0
- 2016.11.10, v5.9.1
- 2016.11.10, v5.9.0
- 2016.11.09, v5.8.0
- 2016.11.06, v5.7.6
- 2016.11.06, v5.7.5
- 2016.10.27, v5.7.4
- 2016.10.27, v5.7.3
- 2016.10.24, v5.7.2
- 2016.10.24, v5.7.1
- 2016.10.18, v5.7.0
- 2016.09.22, v5.6.2
- 2016.09.06, v5.6.1
- 2016.07.19, v5.6.0
- 2016.06.29, v5.5.1
- 2016.06.15, v5.5.0
- 2016.06.10, v5.4.3
- 2016.06.09, v5.4.2
- 2016.05.25, v5.4.1
- 2016.05.15, v5.4.0
- 2016.05.11, v5.3.2
- 2016.03.28, v5.3.1
- 2016.03.28, v5.3.0
- 2016.03.18, v5.2.3
- 2016.03.10, v5.2.2
- 2016.03.07, v5.2.1
- 2016.03.05, v5.2.0
- 2016.02.26, v5.1.5
- 2016.02.25, v5.1.4
- 2016.02.24, v5.1.3
- 2016.02.21, v5.1.2
- 2016.02.21, v5.1.1
- 2016.02.20, v5.1.0
- 2016.02.13, v5.0.15
- 2016.02.10, v5.0.14
- 2016.02.10, v5.0.13
- 2016.02.10, v5.0.12
- 2016.02.06, v5.0.11
- 2016.02.04, v5.0.10
- 2016.02.02, v5.0.9
- 2016.02.01, v5.0.8
- 2016.01.20, v5.0.7
- 2016.01.15, v5.0.6
- 2016.01.11, v5.0.5
- 2015.12.26, v5.0.4
- 2015.12.08, v5.0.3
- 2015.12.01, v5.0.2
- 2015.11.15, v5.0.1
- 2015.11.15, v5.0.0
- 2015.11.11, v4.7.7
- 2015.11.06, v4.7.6
- 2015.10.29, v4.7.5
- 2015.10.27, v4.7.4
- 2015.10.24, v4.7.3
- 2015.10.14, v4.7.2
- 2015.10.14, v4.7.1
- 2015.10.05, v4.7.0
- 2015.09.28, v4.6.0
- 2015.09.27, v4.5.7
- 2015.09.24, v4.5.6
- 2015.09.23, v4.5.5
- 2015.09.22, v4.5.4
- 2015.09.16, v4.5.3
- 2015.09.03, v4.5.2
- 2015.08.28, v4.5.1
- 2015.08.26, v4.5.0
- 2015.08.25, v4.4.0
- 2015.08.21, v4.3.5
- 2015.08.19, v4.3.4
- 2015.08.17, v4.3.3
- 2015.08.17, v4.3.2
- 2015.08.13, v4.3.1
- 2015.08.11, v4.3.0
- 2015.07.24, v4.2.0
- 2015.07.23, v4.1.2
- 2015.07.23, v4.1.1
- 2015.07.21, v4.1.0
- 2015.07.13, v4.0.0
- 2015.07.09, v3.8.1
- 2015.07.06, v3.8.0
- 2015.07.04, v3.7.2
- 2015.07.04, v3.7.1
- 2015.07.03, v3.7.0
- 2015.07.01, v3.6.0
- 2015.06.27, v3.5.0
- 2015.06.22, v3.4.0
- 2015.06.20, v3.3.0
- 2015.06.12, v3.2.0
- 2015.06.11, v3.1.4
- 2015.06.11, v3.1.3
- 2015.06.10, v3.1.2
- 2015.06.09, v3.1.1
- 2015.06.09, v3.1.0
- 2015.06.04, v3.0.4
- 2015.06.02, v3.0.3
- 2015.05.31, v3.0.2
- 2015.05.29, v3.0.1
- 2015.05.28, v3.0.0
- 2015.05.22, v2.9.3
- 2015.05.22, v2.9.2
- 2015.05.19, v2.9.1
- 2015.05.15, v2.9.0
- 2015.05.14, v2.8.0
- 2015.04.24, v2.7.1
- 2015.04.24, v2.7.0
- 2015.04.17, v2.6.0
- 2015.04.14, v2.5.1
- 2015.04.09, v2.5.0
- 2015.04.03, v2.4.2
- 2015.03.28, v2.4.1
- 2015.03.28, v2.4.0
- 2015.03.26, v2.3.1
- 2015.03.26, v2.3.0
- 2015.03.19, v2.2.1
- 2015.03.13, v2.2.0
- 2015.02.02, v2.1.0
- 2014.12.09, v2.0.0
- 2014.11.21, v1.5.1
- 2014.11.19, v1.5.0
- 2014.11.05, v1.4.1
- 2014.10.28, v1.4.0
- 2014.10.02, v1.3.2
- 2014.09.22, v1.3.1
- 2014.09.18, v1.3.0
- 2014.08.29, v1.2.0
- 2014.07.18, v1.1.1
- 2014.07.10, v1.1.0
- 2014.07.03, v1.0.0
- 2014.06.16, v0.9.2
- 2014.06.11, v0.9.1
- 2014.06.10, v0.9.0
- 2014.04.28, v0.8.4
- 2014.03.19, v0.8.3
- 2014.03.03, v0.8.2
- 2014.02.13, v0.8.1
- 2014.02.13, v0.8.0
- 2013.12.09, v0.7.0
- 2013.11.08, v0.6.0
- 2013.10.17, v0.5.0
- 2013.09.27, v0.4.0
- 2013.08.01, v0.3.0
- 2013.04.22, v0.2.0
- 2013.03.01, v0.1.9
- 2012.12.12, v0.1.8
- 2012.10.01, v0.1.7
- 2012.08.24, v0.1.6
- 2012.08.06, v0.1.5
- 2012.07.27, v0.1.4
- 2012.07.19, v0.1.3
- 2012.07.14, v0.1.2
- 2012.07.11, v0.1.1
- 2012.07.09, v0.1.0
- Olena Zalitok for logo and favicon.
- TarZak
- Russian and Ukrainian translations;
- config template and style;
- change order of directories and files;
- add ability do not hide path and header when files are scrolling;