> (you don't have to strictly follow this form)

**Use case**

Support manually snapshot for Keeper.

**Describe the solution you'd like**

Throught 4lw commands, such as `csnp`.


IFourLetterCommand(keeper_dispatcher_)
    {
    }
    String name() override { return "dump"; }
    String run() override;
    ~DumpCommand() override = default;
};
struct EnviCommand : public IFourLetterCommand
{
    explicit EnviCommand(KeeperDispatcher & keeper_dispatcher_)
        : IFourLetterCommand(keeper_dispatcher_)
    {
    }
    String name() override { return "envi"; }
    String run() override;
    ~EnviCommand() override = default;
};
struct DataSizeCommand : public IFourLetterCommand
{
    explicit DataSizeCommand(KeeperDispatcher & keeper_dispatcher_):
        IFourLetterCommand(keeper_dispatcher_)
    {
    }
    String name() override { return "dirs"; }
    String run() override;
    ~DataSizeCommand() override = default;
};
struct IsReadOnlyCommand : public IFourLetterCommand
{
    explicit IsReadOnlyCommand(KeeperDispatcher & keeper_dispatcher_)