文档章节

TDB文件介绍

o
 osc_9wm81b2v
发布于 2019/04/15 10:06
字数 1573
阅读 35
收藏 0

行业解决方案、产品招募中!想赚钱就来传!>>>

samba在运行时,Samba 存储许多信息,从本地密码到希望从中收到信息的一系列客户端。这类数据其中一些是暂时的,在 Samba 重启时可能会被丢弃,但是另一些却是永久的,不会被丢弃。这类数据可能是很大的,也可能是不经常访问只是在内存中保留,或者在重启时保持存在。要满足这些要求,Samba 团队创建了 Trivial Database。它实际上是一个键值存储,这意味着数据通过惟一键的方式存储和检索,且没有像在关系数据库中那样的表联接。键值存储 — 尤其是 TDB — 被设计成将数据存储到磁盘并将其取回的一种快速方式。

查看samba下tdb文件,只列出/var/lib/samba下面的,还有很多其他目录存在samba tdb文件。

[root@node1 samba]# cd /var/lib/samba/
[root@node1 samba]# ll
total 2236
-rw——- 1 root root   421888 Apr 23 15:10 account_policy.tdb
drwxr-xr-x 1 root root        0 Nov 28 00:21 drivers
-rw-r–r– 1 root root   425984 Apr 23 15:10 gencache.tdb
-rw——- 1 root root      696 Apr 23 15:10 group_mapping.tdb
drwxr-xr-x 1 root root      456 Apr 23 15:10 lock
drwxr-xr-x 1 root root        0 Apr 23 15:10 printing
drwx—— 1 root root       86 Apr 23 17:21 private
-rw——- 1 root root   528384 Apr 23 15:10 registry.tdb
-rw——- 1 root root   421888 Apr 23 15:10 share_info.tdb
-rw-r–r– 1 root root   483328 Apr 23 17:43 smbprofile.tdb
drwxr-x— 1 root wbpriv      0 Nov 28 00:21 winbindd_privileged

至于这些tdb文件如何查看数据,以及修改备份,下面介绍samba自带的几个tdb工具。

**tdbtool工具介绍**

tdbtool工具可以在命令行上接受命令,也可以打开交互式控制台类似shell一样。要在命令行上完成任务,请运行 tdbtool example.tdb command options,其中 example.tdb 是文件名,command 是命令,针对命令的选项位于最后。要使用 tdb shell,只需单独运行 tdbtool 或在命令行上传递文件的名称。个人建议使用交互式控制台方式。以下是tdbtool参数介绍

tdbtool:
create    dbname     : create a database
open      dbname     : open an existing database
transaction_start    : start a transaction
transaction_commit   : commit a transaction
transaction_cancel   : cancel a transaction
erase                : erase the database
dump                 : dump the database as strings
keys                 : dump the database keys as strings
hexkeys              : dump the database keys as hex values
info                 : print summary info about the database
insert    key  data  : insert a record
move      key  file  : move a record to a destination tdb
storehex  key  data  : store a record (replace), key/value in hex format
store     key  data  : store a record (replace)
show      key        : show a record by key
delete    key        : delete a record by key
list                 : print the database hash table and freelist
free                 : print the database freelist
freelist_size        : print the number of records in the freelist
check                : check the integrity of an opened database
repack               : repack the database
speed                : perform speed tests on the database
! command            : execute system command
1 | first            : print the first record
n | next             : print the next record
q | quit             : terminate
\n                   : repeat ‘next’ command

下面分别介绍:

1、创建数据库

[root@node1 tdbtest]# tdbtool
tdb> create hello
[root@node1 tdbtest]# ll
total 4
-rw——- 1 root root 696 Apr 23 15:53 hello
2、打开数据库

tdb> open hello
3、插入数据

tdb> insert name zhangsan
4、查询数据

tdb> show name

key 4 bytes
name
data 8 bytes
[000] 7A 68 61 6E 67 73 61 6E                           zhangsan
5、查看所有数据

tdb> dump

key 5 bytes
name1
data 4 bytes
[000] 6C 69 73 69                                       lisi

key 4 bytes
name
data 8 bytes
[000] 7A 68 61 6E 67 73 61 6E                           zhangsan
总共2条KEY/VALUES键值对,既2条数据信息。

6、列出key值

tdb> keys
key 5 bytes: name1
key 4 bytes: name
7、修改values值

tdb> store name zhang
Storing key:

key 4 bytes
name
data 5 bytes
[000] 7A 68 61 6E 67                                    zhang
将name值由zhangsan 修改为zhang,查看修改结果

tdb> dump

key 5 bytes
name1
data 4 bytes
[000] 77 61 6E 67 77 75                                 lisi

key 4 bytes
name
data 5 bytes
[000] 7A 68 61 6E 67                                    zhang

8、删除某个key值

tdb> delete name
tdb> dump

key 5 bytes
name1
data 4 bytes
[000] 6C 69 73 69                                       lisi
将key值为name的删掉后,查看只剩下name1记录。

9、检查数据完整性

tdb> check
Database integrity is OK and has 2 records.
10、复制数据到另外的数据库(后者数据库必须存在)

tdb> move name2 hello1

key 5 bytes
name2
data 6 bytes
[000] 77 61 6E 67 77 75                                 wangwu
record moved
查看hello1记录

tdb> open hello1
tdb> dump

key 5 bytes
name2
data 6 bytes
[000] 77 61 6E 67 77 75                                 wangwu
11、执行系统命令

tdb> ! pwd
/root/tdbtest
tdb> ! date
Mon Apr 23 16:36:18 CST 2018
12、支持事务处理

开启事务

tdb> transaction_start
tdb> insert name3 test
tdb> show name3

key 5 bytes
name3
data 4 bytes
[000] 74 65 73 74                                       test
取消事务

tdb> transaction_cancel
tdb> show name3
fetch failed
提交事务

tdb> transaction_start
tdb> insert name3 test
tdb> transaction_commit
tdb> show name3

key 5 bytes
name3
data 4 bytes
[000] 74 65 73 74                                       test

**tdbdump 工具介绍**

tdbdump是用来查看tdb文件中的所有键值对数据的工具

已hello为例, 查看所有数据

[root@node1 tdbtest]# tdbdump hello
{
key(5) = “name1”
data(4) = “lisi”
}
{
key(5) = “name2”
data(6) = “wangwu”
}
{
key(5) = “name3”
data(4) = “test”
}
每个键值对数据key data 数字为字节数

**tdbbackup 工具介绍**

tdbbackup工具为tdb数据库文件的备份工具。

– 备份hello数据库

[root@node1 tdbtest]# tdbbackup hello
[root@node1 tdbtest]# ll
total 828
-rw——- 1 root root 831488 Apr 23 16:42 hello
-rw——- 1 root root   8192 Apr 23 16:38 hello1
-rw——- 1 root root   8192 Apr 23 17:25 hello.bak
hello.bak就是备份文件。这里发现两者文件大小不一样,通过md5对比。因为是不同的文件,文件MD5值肯定是不一样的,但是文件内容是完全一样的。

查看文件md5

[root@node1 tdbtest]# md5sum hello
8c55e7dabbeab30e3cd96e96b59fb052  hello
[root@node1 tdbtest]# md5sum hello.bak
c20b4f9b01f5715bbec8f950cf394f51  hello.bak
查看文件内容md5

[root@node1 tdbtest]# tdbdump hello | md5sum
88be32a888d3cd63132e09a0de8d69de  –
[root@node1 tdbtest]# tdbdump hello.bak | md5sum
88be32a888d3cd63132e09a0de8d69de  –

– 恢复hello数据

模拟删除数据

[root@node1 tdbtest]# ll
total 828
-rw——- 1 root root 831488 Apr 23 16:42 hello
-rw——- 1 root root   8192 Apr 23 16:38 hello1
-rw——- 1 root root   8192 Apr 23 17:25 hello.bak
[root@node1 tdbtest]# >hello
[root@node1 tdbtest]# ll
total 16
-rw——- 1 root root    0 Apr 23 17:33 hello
-rw——- 1 root root 8192 Apr 23 16:38 hello1
-rw——- 1 root root 8192 Apr 23 17:25 hello.bak

[root@node1 tdbtest]# tdbbackup -v hello
restoring hello
[root@node1 tdbtest]# ll
total 24
-rw——- 1 root root 8192 Apr 23 17:33 hello
-rw——- 1 root root 8192 Apr 23 16:38 hello1
-rw——- 1 root root 8192 Apr 23 17:25 hello.bak

看到文件大小一致了,现在对比md5值

[root@node1 tdbtest]# md5sum hello
c20b4f9b01f5715bbec8f950cf394f51  hello
[root@node1 tdbtest]# md5sum hello.bak
c20b4f9b01f5715bbec8f950cf394f51  hello.bak
[root@node1 tdbtest]# tdbdump hello |md5sum
88be32a888d3cd63132e09a0de8d69de  –
[root@node1 tdbtest]# tdbdump hello.bak |md5sum
88be32a888d3cd63132e09a0de8d69de  –
看到MD5值与之前备份之前一致了。查看数据

[root@node1 tdbtest]# tdbdump hello
{
key(5) = “name1”
data(4) = “lisi”
}
{
key(5) = “name2”
data(6) = “wangwu”
}
{
key(5) = “name3”
data(4) = “test”
}

下一篇: 虚IP切换原理
o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
程序猿媛一:Android滑动翻页+区域点击事件

滑动翻页+区域点击事件 ViewPager+GrideView 声明:博文为原创,文章内容为,效果展示,思路阐述,及代码片段。文尾附注源码获取途径。 转载请保留原文出处“http://my.oschina.net/gluoyer...

花佟林雨月
2013/11/09
4.1K
1
Ajax 文件上传组件--fineuploader

Fine Uploader 是一个采用Ajax技术实现的文件上传组件,支持拖拽文件上传。使用很简便,只需在页面中引入相应的CSS+JavaScript,剩下的就只服务器端处理逻辑。在其提供的下载包中已经有多种语...

匿名
2012/10/27
1.5W
2
php开源框架--CorePHP

简介: CorePHP框架是一个快速,安全,灵活的php开源框架,主要是为了简化和快速开发小型项目和开源系统二次开发而诞生。它既可以完美的支持MVC模式,又可以不受限制的支持传统编程模式。它是...

shooke
2012/12/27
2.8K
1
磁盘映像文件操作工具--vidma

vidma 是一个用来操作虚拟磁盘映像文件的工具,可显示映像文件的基本信息并可重新更改大小。当前支持的格式只有 VDI (Virtual Disk Image) ,该格式主要用于 VirtualBox....

匿名
2013/01/03
789
0
易客CRM控制面板

易客CRM运行环境专用控制面板介绍 易客CRM(http://www.c3crm.com)控制面板是采用快手和AAuto编程语言开发,针对xampp运行环境开发的控制面板,功能介绍如下: 1、服务启动apache和mysql,自动...

dfar2008
2013/06/27
2.9K
0

没有更多内容

加载失败,请刷新页面

加载更多

spring集成kafka

1、引入依赖jar包 <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId></dependency> 2、配置kafka信息 spring: kafka: bootstra......

简到珍
7分钟前
0
0
Spring Security 原理分析(一)

Spring Security 初始化 在普通的spring mvc 框架中,我们需要 @Configuration@EnableWebSecuritypublic class MyWebSecurityConfiguration extends WebSecurityConfigurerAdapter 手动添......

街角的小丑
15分钟前
6
0
查看 Linux 系统服务的 5 大方法

Linux 系统服务有时也称为守护程序,是在Linux启动时自动加载并在Linux退出时自动停止的系统任务。 在本文中,良许将为大家介绍如何列出 Linux 系统里所有运行的服务,以及如何检查某个服务的...

良许Linux
20分钟前
9
0
如何显示已上演的更改? - How do I show the changes which have been staged?

问题: I staged a few changes to be committed; 我上演了一些改变来承诺; how can I see the diff of all files which are staged for the next commit? 如何查看为下一次提交而暂存的所有...

技术盛宴
29分钟前
25
0
HashMap 的 defaultLoadFactor 的一种推导计算思路

1. 为啥需要 defaultLoadFactor 现在主流的 HashMap,一般的实现思路都是开放地址法+链地址法的方式来实现。 即数组 + 链表的实现方式,通过计算哈希值,找到数组对应的位置,如果已存在元素...

zhxhash
33分钟前
23
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部