Простой сервер HTTP на основе командной строки для обмена локальной файловой системой.
Минимальная требуемая версия Go — 1.18.
go build main.go
Создаст исполняемый файл "main" в текущей директории.
Запустить сервер на порту 8080, корневая директория — текущая рабочая директория:
ghfs -l 8080
Запустить сервер на порту 8080, корневая директория — /usr/share/doc:
ghfs -l 8080 -r /usr/share/doc
Запустить сервер на стандартном порту, корневая директория — /var/tmp, и разрешить загрузку файлов в ./data:
ghfs -r /var/tmp -u /data
# или
ghfs -r /var/tmp --upload-dir /var/tmp/data
Поделиться файлами из /etc, но также монтировать /usr/share/doc в URL-путь /doc
ghfs -r /etc -a :/doc:/usr/share/doc
```Запустить сервер на порту 8080, обслуживание по протоколу HTTPS
```sh
ghfs -k /путь/к/ключу/сертификата -c /путь/к/файлу/сертификата -l 8080
Не показывать скрытые директории и файлы Unix, начинающиеся с .
.
Совет: оберните символы-шаблоны кавычками, чтобы предотвратить расширение оболочкой.
ghfs -H '.*'
Показать журнал доступа на консоль:
ghfs -L -
Http Basic Auth:
ghfs --auth /files --user user1:pass1 --user-sha1 user2:8be52126a6fde450a7162a3651d589bb51e9579d
Поделиться /data, разрешить права на загрузку файлов в /data/upload для пользователей "admin" и "root", остальные — только для чтения:
ghfs -r /data --user admin:adminpass root:rootpass user1:user1pass user2:user2pass --upload-user :/upload:admin:root
Запустите 2 виртуальных хоста:
ghfs --listen-plain 80 --listen-tls 443 -c /cert/server1.pem -k /cert/server1.key --hostname server1.example.com -r /var/www/server1 ,, --listen-plain 80 --listen-tls 443 -c /cert/server2.pem -k /cert/server2.key --hostname server2.example.com -r /var/www/server2
ghfs [опции]
```-l|--listen <ip|port|:port|ip:port|socket> ...
IP и порт, на которых сервер прослушивает, например ":80" или "127.0.0.1:80".
Если указаны --cert и --key, порт прослушивает соединения TLS.
Если порт не указан, используется "80" для режима чистого HTTP или "443" для режима TLS.
Если значение содержит "/", то оно рассматривается как файл Unix-сокета.
Флаг "-l" или "--listen" может быть опущен.
--listen-plain <ip|port|:port|ip:port|socket> ...
Аналогично --listen, но заставляет использовать режим без TLS.
--listen-tls <ip|port|:port|ip:port|socket> ...
Аналогично --listen, но заставляет использовать режим TLS, что приведет к ошибке, если не указаны сертификат или ключ.
--hostname <hostname> ...
Указывает имя хоста, связанное с текущим виртуальным хостом.
Если значение начинается с ".", оно рассматривается как суффикс, чтобы соответствовать всем уровням поддоменов. Например ".example.com"
Если значение заканчивается на ".", оно рассматривается как префикс, чтобы соответствовать всем уровням суффиксных доменов.
-r|--root <directory>
Корневая директория сервера.
По умолчанию используется текущая рабочая директория.
-R|--empty-root
Использовать виртуальную пустую директорию как корневую директорию.
Полезно для размещения только псевдонимов директорий.
-a|--alias <разделитель><url-путь><разделитель><fs-путь> ...
Устанавливает псевдоним пути.
Монтирует файловую системную директорию к URL-пути.
Например ":/doc:/usr/share/doc"--prefix <path> ...
Обслуживает файлы под определённым под-URL-пути.
Может быть полезно, если сервер находится за прокси-сервером и
получает запросы без удалённого пути прокси-сервера.
-/|--auto-dir-slash [<status-code>=301]
Если запрошенная страница списка директорий не содержит завершающего "/" в URL,
перенаправляет на URL с этим суффиксом.
Если запрошен файл с завершающим "/" в URL,
перенаправляет на URL без этого суффикса.
--default-sort <sortBy>
По умолчанию сортирует файлы и директории.
Доступные ключи сортировки:
- `n` сортировка по имени в порядке возрастания
- `N` сортировка по имени в порядке убывания
- `e` сортировка по типу (суффиксу) в порядке возрастания
- `E` сортировка по типу (суффиксу) в порядке убывания
- `s` сортировка по размеру в порядке возрастания
- `S` сортировка по размеру в порядке убывания
- `t` сортировка по времени изменения в порядке возрастания
- `T` сортировка по времени изменения в порядке убывания
- `_` без сортировки
Сортировка директорий:
- `/<key>` директории перед файлами
- `<key>/` директории после файлов
- `<key>` директории перемешаны с файлами
```-I|--dir-index <file> ...
Указывает файл по умолчанию для индекса директории.```--global-restrict-access [<allowed-host> ...]
Ограничение доступа с третьих сторон для всех путей URL путем обнаружения
заголовка запроса `Referer` или `Origin`.
Если заголовок запроса пуст, страница списка директорий все еще доступна.
Если разрешенный хост не указан, содержимое файла может быть доступно только
с текущего хоста. Обратите внимание, что это не поможет ограничить доступ с
других хостов, которые указывают домен на ваш хост и могут соответствовать
текущему виртуальному хосту, если не указать разрешенный хост явно.
"Хост" может быть именем хоста, что означает использование порта по умолчанию,
или формой "хост:порт".--restrict-access <separator><url-path>[<separator><allowed-host>...] ...
Аналогично --global-restrict-access, но для конкретного URL-пути (и подпутей).
Например: "#/url/path#example1.com#example2.com".
--restrict-access-dir <separator><fs-path>[<separator><allowed-host>...] ...
Аналогично --global-restrict-access, но для пути файловой системы (и подпутей).
Например: "#/fs/path#example1.com#example2.com".
--global-header <name>:<value> ...
Добавляет пользовательский заголовок HTTP-ответа.
--header <separator><url-path><separator><name><separator><value> ...
Добавляет пользовательский заголовок HTTP-ответа для конкретного URL-пути (и подпутей).
--header-dir <separator><fs-path><separator><name><separator><value> ...
Аналогично --header, но использует путь файловой системы вместо URL-пути.
--user [<username>]:[<password>] ...
Указывает пользователей для текущего виртуального хоста для Basic Auth, пустое имя пользователя и/или пароль допустимы.
--user-base64 [<username>]:[<base64-password>] ...
--user-md5 [<username>]:<md5-password> ...
--user-sha1 [<username>]:<sha1-password> ...
--user-sha256 [<username>]:<sha256-password> ...
--user-sha512 [<username>]:<sha512-password> ...
Указывает пользователей для Basic Auth с зашифрованным паролем.--global-auth
Использование Basic Auth для всех путей URL.
--auth <url-path> ...
--auth-user <separator><url-path>[<separator><allowed-username>...] ...
Использование Basic Auth для конкретных путей URL (и подпутей).
--auth-dir <fs-path> ...
--auth-dir-user <separator><fs-path>[<separator><allowed-username>...] ...
Использование Basic Auth для конкретных путей файловой системы (и подпутей).
--index <url-path> ...
--index-user <separator><url-path>[<separator><allowed-username>...] ...
Устанавливает URL-пути (и подпути) для разрешения индексации файлов директории.
--index по умолчанию равен "/".
Установите на "" для отключения индексации.
--index-dir <fs-path> ...
--index-dir-user <separator><fs-path>[<separator><allowed-username>...] ...
Аналогично --index, но использует путь файловой системы вместо URL-пути.-U|--global-upload
Разрешает загрузку файлов для всех URL-путей.
Используйте с осторожностью.
-u|--upload <url-path> ...
--upload-user <separator><url-path>[<separator><allowed-username>...] ...
Устанавливает URL-пути (и подпути) для разрешения загрузки файлов.
Используйте с осторожностью.
--upload-dir <fs-path> ...
--upload-dir-user <separator><fs-path>[<separator><allowed-username>...] ...
Аналогично --upload, но использует путь файловой системы вместо URL-пути.
Используйте с осторожностью.
Примечания к опциям загрузки:
Если файл с таким именем уже существует и является обычным файлом,
будет попытка его удалить, если удаление разрешено (например, с помощью --delete),
в противном случае будет попытка добавить или увеличить числовую суффиксу.
Для режима загрузки директорий поддиректории будут загружены только если создание директорий разрешено.
--global-mkdir
Разрешает создание поддиректорий под всеми URL-пути.
--mkdir <url-path> ...
--mkdir-user <separator><url-path>[<separator><allowed-username>...] ...
Разрешает создание поддиректорий под конкретными URL-пути (и подпути).
--mkdir-dir <fs-path> ...
--mkdir-dir-user <separator><fs-path>[<separator><allowed-username>...] ...
Аналогично --mkdir, но использует путь файловой системы вместо URL-пути.
Примечания к опциям создания директорий:
Чтобы избежать неоднозначности, имена, которые тенируются альтернативными элементами, не могут быть созданы.--global-delete
Разрешает удаление элементов под всеми URL-пути.
--delete <url-path> ...
--delete-user <separator><url-path>[<separator><allowed-username>...] ...
Разрешает удаление элементов под конкретными URL-пути (и подпути).
--delete-dir <fs-path> ...
--delete-dir-user <separator><fs-path>[<separator><allowed-username>...] ...
Аналогично --delete, но использует путь файловой системы вместо URL-пути.
Примечания к опциям удаления:
Чтобы избежать неоднозначности, альтернативные элементы под путем не могут быть удалены.
Непосредственные файлы/директории внутри альтернативных элементов все еще могут быть удалены.
Чтобы избежать неоднозначности, файлы/директории, которые тенируются альтернативными элементами, не могут быть удалены.
-A|--global-archive
Разрешает пользователю загрузку всего содержимого текущей директории для всех путей URL.
Ссылка для загрузки появляется в верхней части страницы.
Убедитесь, что нет циклических ссылок.
--archive <url-path> ...
--archive-user <separator><url-path>[<separator><allowed-username>...] ...
Разрешает пользователю загрузку всего содержимого текущей директории для конкретных путей URL (и поддиректорий).
--archive-dir <fs-path> ...
--archive-dir-user <separator><fs-path>[<separator><allowed-username>...] ...
Аналогично --archive, но использует путь файловой системы вместо пути URL.--global-cors
Разрешает запросы CORS для всех путей URL.
--cors <url-path> ...
Разрешает запросы CORS для конкретных путей URL (и подкаталогов).
--cors-dir <fs-path> ...
Разрешает запросы CORS для конкретных путей файловой системы (и подкаталогов).-c|--cert <file> ...
Указывает файл сертификата TLS.
-k|--key <file> ...
Указывает файл ключа сертификата TLS.
--theme <file>
Указывает архив ZIP как пользовательскую тему для отображения страницы и активов вместо встроенных.
Содержимое темы кэшируется в памяти во время выполнения.
--theme-dir <directory>
Указывает директорию, содержащую файлы темы.
Содержимое темы будет оцениваться для каждого запроса.
Это удобно для разработки тем.
Примечания к параметрам темы:
--theme и --theme-dir взаимоисключающие.
--theme-dir имеет приоритет.
Имя файла шаблона страницы всегда "index.html".
Используйте "?asset=<asset-path>", чтобы ссылаться на актив в теме.
--hsts [<max-age>]
Включает HSTS (HTTP Strict Transport Security).
Доступно только если текущий виртуальный хост прослушивает как обычный HTTP, так и TLS на стандартных портах.
--to-https [<target-port>]
Перенаправляет запросы HTTP на порт HTTPS TLS.
Целевой порт должен быть указан в --listen-tls текущего виртуального хоста.
Если целевой порт не указан, будет использован первый элемент из --listen-tls.
-S|--show <wildcard> ...
-SD|--show-dir <wildcard> ...
-SF|--show-file <wildcard> ...
Если указано, файлы или директории, соответствующие маскам (кроме скрытых по опции hide), будут отображаться.-H|--hide <wildcard> ...
-HD|--hide-dir <wildcard> ...
-HF|--hide-file <wildcard> ...
Если указано, файлы или директории, соответствующие маскам, не будут отображаться.```markdown
-L|--access-log <file>
Файл журнала доступа.
Установите "-" для использования stdout.
Установите пустое значение для отключения журнала доступа.```markdown
-E|--error-log <file>
Файл журнала ошибок.
Установите "-" для использования stderr.
Установите пустое значение для отключения журнала ошибок.
По умолчанию равно "-".
--config <file>
Указание опций из внешнего файла.
Содержимое файла — это список опций в любом другом формате,
такой же, как и на командной строке,
разделённый пробелами.
Приоритет внешнего конфигурационного файла ниже, чем у аргументов, указанных на командной строке.
Если опция указана на командной строке, то внешний конфигурационный файл этой опции будет игнорирован.
Установите "-" для использования stdin.
,,
Для указания нескольких виртуальных хостов с опциями, разделите опции этих хостов этим знаком.
Вышеуказанные опции могут быть указаны для каждого виртуального хоста.
Если несколько виртуальных хостов используют одинаковый IP и порты,
используйте --hostname для идентификации их по запросу.
Если имя хоста запроса не соответствует ни одному виртуальному хосту,
сервер попытается использовать первый виртуальный хост без имени хоста,
в противном случае использует первый виртуальный хост.
Создаёт профиль Go's CPU pprof в указанном пути файла.
Указывает путь файла PID. PID будет записан в файл при запуске приложения.
Указывает размер очереди для хранения журналов, которые ещё не были записаны в место назначения.
Если очередь заполнена, отправка журналов будет заблокирована до тех пор, пока в очереди не появится свободное место.
По умолчанию равно 256.
### GHFS_QUIET
Чтобы предотвратить вывод дополнительной информации на консоль, такой как доступные URL и т.д.,
укажите значение "1".
## Клавиатурные сокращения для стандартной темы
- `←`, `→`: перемещение фокуса между элементами пути
- `Ctrl`/`Opt` + `←`: перемещение фокуса к первому элементу пути
- `Ctrl`/`Opt` + `→`: перемещение фокуса к последнему элементу пути
- `↑`, `↓`: перемещение фокуса между элементами файла
- `Ctrl`/`Opt` + `↑`: перемещение фокуса к первому элементу файла
- `Ctrl`/`Opt` + `↓`: перемещение фокуса к последнему элементу файла
- Повторное ввод одного и того же символа будет искать следующий файл, который начинается с этого префикса. + `Shift` для обратного направления.
- Однократные вводы будут запоминаться как строка на короткое время для поиска следующего файла с таким префиксом. + `Shift` для обратного направления.
- При включённой загрузке, вставка изображения или текстового содержимого (`Ctrl`/`Cmd` + `v`) загрузит это содержимое как файл.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )