1 '\" te
   2 .\"  Copyright (c) 1999 Sun Microsystems, Inc. All Rights Reserved.
   3 .\" The contents of this file are subject to the terms of the Common Development and Distribution License (the "License").  You may not use this file except in compliance with the License.
   4 .\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE or http://www.opensolaris.org/os/licensing.  See the License for the specific language governing permissions and limitations under the License.
   5 .\" When distributing Covered Code, include this CDDL HEADER in each file and include the License file at usr/src/OPENSOLARIS.LICENSE.  If applicable, add the following below this CDDL HEADER, with the fields enclosed by brackets "[]" replaced with your own identifying information: Portions Copyright [yyyy] [name of copyright owner]
   6 .TH FSDB_UDFS 1M "Nov 26, 2017"
   7 .SH NAME
   8 fsdb_udfs \- udfs file system debugger
   9 .SH SYNOPSIS
  10 .LP
  11 .nf
  12 \fBfsdb \fR [\fB-F\fR] udfs [\fIgeneric_option\fR] [\fB-o \fR\fIspecific_option\fR] \fIspecial\fR
  13 .fi
  14 
  15 .SH DESCRIPTION
  16 .LP
  17 The \fBfsdb_udfs\fR command is an interactive tool that can be used to patch up
  18 a damaged \fBudfs\fR file system. \fBfsdb_udfs\fR has conversions to translate
  19 block and i-numbers into their corresponding disk addresses. Mnemonic offsets
  20 to access different parts of an inode are also included. Mnemonic offsets
  21 greatly simplify the process of correcting control block entries or descending
  22 the file system tree.
  23 .sp
  24 .LP
  25 \fBfsdb\fR contains several error-checking routines to verify inode and block
  26 addresses. These can be disabled if necessary by invoking \fBfsdb\fR with the
  27 \fB-o\fR option or by using the \fBo\fR command.
  28 .sp
  29 .LP
  30 \fBfsdb\fR reads one block at a time, and therefore works with raw as well as
  31 block \fBI/O\fR devices. A buffer management routine is used to retain commonly
  32 used blocks of data in order to reduce the number of read system calls. All
  33 assignment operations result in an immediate write-through of the corresponding
  34 block. In order to modify any portion of the disk, \fBfsdb\fR must be invoked
  35 with the \fB-w\fR option.
  36 .sp
  37 .LP
  38 Wherever possible, \fBadb\fR-like syntax has been adopted to promote the use of
  39 \fBfsdb\fR through familiarity.
  40 .SH OPTIONS
  41 .LP
  42 The following options are supported:
  43 .sp
  44 .ne 2
  45 .na
  46 \fB\fB-o\fR \fIspecific_option\fR\fR
  47 .ad
  48 .RS 22n
  49 Specify \fBudfs\fR file system specific options in a comma-separated list with
  50 no intervening spaces. The following specific options are supported:
  51 .sp
  52 .ne 2
  53 .na
  54 \fBo\fR
  55 .ad
  56 .RS 12n
  57 Override some error conditions.
  58 .RE
  59 
  60 .sp
  61 .ne 2
  62 .na
  63 \fBp=\fIstring\fR\fR
  64 .ad
  65 .RS 12n
  66 Set prompt to \fIstring\fR.
  67 .RE
  68 
  69 .sp
  70 .ne 2
  71 .na
  72 \fBw\fR
  73 .ad
  74 .RS 12n
  75 Open for write.
  76 .RE
  77 
  78 .sp
  79 .ne 2
  80 .na
  81 \fB?\fR
  82 .ad
  83 .RS 12n
  84 Display usage.
  85 .RE
  86 
  87 .RE
  88 
  89 .SH USAGE
  90 .LP
  91 Numbers are considered hexadecimal by default. The user has control over how
  92 data is to be displayed or accepted. The \fBbase\fR command displays or sets
  93 the input and output base. Once set, all input defaults to this base and all
  94 output displays in this base. The base can be overridden temporarily for input
  95 by preceding hexadecimal numbers by \fB0x\fR, preceding decimal numbers with a
  96 \fB0t\fR, or octal numbers with a \fB0\fR. Hexadecimal numbers beginning with
  97 \fBa\fR-\fBf\fR or \fBA\fR-\fBF\fR must be preceded with a \fB0x\fR to
  98 distinguish them from commands.
  99 .sp
 100 .LP
 101 Disk addressing by \fBfsdb\fR is at the byte level. However, \fBfsdb\fR offers
 102 many commands to convert a desired inode, directory entry, block, and so forth,
 103 to a byte address. After the address has been calculated, \fBfsdb\fR records
 104 the result in the current address (\fBdot\fR).
 105 .sp
 106 .LP
 107 Several global values are maintained by \fBfsdb\fR\fB\fR:
 108 .RS +4
 109 .TP
 110 .ie t \(bu
 111 .el o
 112 Current base (referred to as \fBbase\fR)
 113 .RE
 114 .RS +4
 115 .TP
 116 .ie t \(bu
 117 .el o
 118 Current address (referred to as \fBdot\fR)
 119 .RE
 120 .RS +4
 121 .TP
 122 .ie t \(bu
 123 .el o
 124 Current inode (referred to as \fBinode\fR)
 125 .RE
 126 .RS +4
 127 .TP
 128 .ie t \(bu
 129 .el o
 130 Current count (referred to as \fBcount\fR)
 131 .RE
 132 .RS +4
 133 .TP
 134 .ie t \(bu
 135 .el o
 136 Current type (referred to as \fBtype\fR)
 137 .RE
 138 .sp
 139 .LP
 140 Most commands use the preset value of \fBdot\fR in their execution. For
 141 example,
 142 .sp
 143 .in +2
 144 .nf
 145  > 2:inode
 146 .fi
 147 .in -2
 148 .sp
 149 
 150 .sp
 151 .LP
 152 first sets the value of dot (\fB\&.\fR) to \fB2\fR, colon (\fB:\fR), signifies
 153 the start of a command, and the \fBinode\fR command sets \fBinode\fR to
 154 \fB2\fR. A count is specified after a comma (\fB,\fR). Once set, count remains
 155 at this value until a new command is encountered that resets the value back to
 156 \fB1\fR (the default).
 157 .sp
 158 .LP
 159 So, if
 160 .sp
 161 .in +2
 162 .nf
 163 > 2000,400/X
 164 .fi
 165 .in -2
 166 .sp
 167 
 168 .sp
 169 .LP
 170 is entered, \fB400\fR hex longs are listed from \fB2000\fR, and when completed,
 171 the value of dot is \fB 2000 + 400 * sizeof\fR (long). If a RETURN is then
 172 entered, the output routine uses the current values of \fBdot\fR, \fBcount\fR,
 173 and \fBtype\fR and displays \fB400 \fRmore hex longs. An asterisk (\fB*\fR)
 174 causes the entire block to be displayed. An example showing several commands
 175 and the use of RETURN would be:
 176 .sp
 177 .in +2
 178 .nf
 179 > 2:ino; 0:dir?d
 180 .fi
 181 .in -2
 182 .sp
 183 
 184 .sp
 185 .LP
 186 or
 187 .sp
 188 .in +2
 189 .nf
 190 > 2:ino; 0:db:block?d
 191 .fi
 192 .in -2
 193 .sp
 194 
 195 .sp
 196 .LP
 197 The two examples are synonymous for getting to the first directory entry of the
 198 root of the file system. Once there, subsequently entering a RETURN, plus
 199 (\fB+\fR), or minus (\fB-\fR)  advances to subsequent entries. Notice that
 200 .sp
 201 .in +2
 202 .nf
 203 > 2:inode; :ls
 204 .fi
 205 .in -2
 206 .sp
 207 
 208 .sp
 209 .LP
 210 or
 211 .sp
 212 .in +2
 213 .nf
 214 > :ls /
 215 .fi
 216 .in -2
 217 .sp
 218 
 219 .sp
 220 .LP
 221 is again synonymous.
 222 .SS "Expressions"
 223 .LP
 224 The following symbols are recognized by \fBfsdb\fR:
 225 .sp
 226 .ne 2
 227 .na
 228 \fBRETURN\fR
 229 .ad
 230 .RS 13n
 231 Update the value of dot by the current value of \fItype\fR and \fIdisplay\fR
 232 using the current value of \fIcount\fR.
 233 .RE
 234 
 235 .sp
 236 .ne 2
 237 .na
 238 \fB\fI#\fR\fR
 239 .ad
 240 .RS 13n
 241 Update the value of dot by specifying a numeric expression. Specify numeric
 242 expressions using addition, subtraction, multiplication, and division
 243 operators ( \fB+\fR, \fB-\fR, \fB*\fR, and \fB%\fR). Numeric expressions are
 244 evaluated from left to right and can use parentheses. After evaluation, the
 245 value of dot is updated.
 246 .RE
 247 
 248 .sp
 249 .ne 2
 250 .na
 251 \fB, \fIcount\fR\fR
 252 .ad
 253 .RS 13n
 254 Update the count indicator. The global value of \fIcount\fR is updated to
 255 \fIcount\fR. The value of \fIcount\fR remains until a new command is run. A
 256 \fIcount\fR specifier of \fB*\fR attempts to show a blocks's worth of
 257 information. The default for \fIcount\fR is \fB1\fR.
 258 .RE
 259 
 260 .sp
 261 .ne 2
 262 .na
 263 \fB? \fI f\fR\fR
 264 .ad
 265 .RS 13n
 266 Display in structured style with format specifier \fBf\fR. See \fBFormatted
 267 Output\fR.
 268 .RE
 269 
 270 .sp
 271 .ne 2
 272 .na
 273 \fB/ \fIf\fR\fR
 274 .ad
 275 .RS 13n
 276 Display in unstructured style with format specifier \fBf\fR. See \fBFormatted
 277 Output\fR.
 278 .RE
 279 
 280 .sp
 281 .ne 2
 282 .na
 283 \fB\&.\fR
 284 .ad
 285 .RS 13n
 286 Display the value of dot.
 287 .RE
 288 
 289 .sp
 290 .ne 2
 291 .na
 292 \fB+\fIe\fR\fR
 293 .ad
 294 .RS 13n
 295 Increment the value of dot by the expression \fIe\fR. The amount actually
 296 incremented is dependent on the size of type: \fBdot = dot + \fR\fIe \fR\fB*
 297 \fR\fBsizeof\fR (\fItype\fR) The default for \fIe\fR is \fB1\fR.
 298 .RE
 299 
 300 .sp
 301 .ne 2
 302 .na
 303 \fB\(mi\fIe\fR\fR
 304 .ad
 305 .RS 13n
 306 Decrement the value of dot by the expression \fIe \fR. See \fB+\fR.
 307 .RE
 308 
 309 .sp
 310 .ne 2
 311 .na
 312 \fB*\fIe\fR\fR
 313 .ad
 314 .RS 13n
 315 Multiply the value of dot by the expression \fIe\fR. Multiplication and
 316 division don't use \fItype\fR. In the above calculation of dot, consider the
 317 \fBsizeof\fR (\fItype\fR) to be \fB1\fR.
 318 .RE
 319 
 320 .sp
 321 .ne 2
 322 .na
 323 \fB%\fIe\fR\fR
 324 .ad
 325 .RS 13n
 326 Divide the value of dot by the expression \fIe\fR. See \fB*\fR.
 327 .RE
 328 
 329 .sp
 330 .ne 2
 331 .na
 332 \fB< \fIname\fR\fR
 333 .ad
 334 .RS 13n
 335 Restore an address saved in register \fIname\fR. \fIname\fR must be a single
 336 letter or digit.
 337 .RE
 338 
 339 .sp
 340 .ne 2
 341 .na
 342 \fB> \fIname\fR\fR
 343 .ad
 344 .RS 13n
 345 Save an address in register \fIname\fR. \fIname\fR must be a single letter or
 346 digit.
 347 .RE
 348 
 349 .sp
 350 .ne 2
 351 .na
 352 \fB= \fIf\fR\fR
 353 .ad
 354 .RS 13n
 355 Display indicator. If \fIf\fR is a legitimate format specifier (see
 356 \fBFormatted Output\fR), then the value of dot is displayed using format
 357 specifier \fIf\fR. Otherwise, assignment is assumed. See \fB= [s] [e]\fR.
 358 .RE
 359 
 360 .sp
 361 .ne 2
 362 .na
 363 \fB= [\fIs\fR] [\fIe\fR]\fR
 364 .ad
 365 .RS 13n
 366 Change the value of dot using an assignment indicator. The address pointed to
 367 by dot has its contents changed to the value of the expression \fIe\fR or to
 368 the \fBASCII\fR representation of the quoted (\fB"\fR) string \fIs\fR. This can
 369 be useful for changing directory names or \fBASCII\fR file information.
 370 .RE
 371 
 372 .sp
 373 .ne 2
 374 .na
 375 \fB=+ \fIe\fR\fR
 376 .ad
 377 .RS 13n
 378 Change the value of dot using an incremental assignment. The address pointed to
 379 by dot has its contents incremented by expression \fIe\fR.
 380 .RE
 381 
 382 .sp
 383 .ne 2
 384 .na
 385 \fB=- e\fR
 386 .ad
 387 .RS 13n
 388 Change the value of dot using a decremental assignment. Decrement the contents
 389 of the address pointed to by dot by expression \fIe\fR.
 390 .RE
 391 
 392 .SS "Commands"
 393 .LP
 394 A command must be prefixed by a colon (\fB:\fR). Only enough letters of the
 395 command to uniquely distinguish it are needed. Multiple commands can be entered
 396 on one line by  separating them by a SPACE, TAB, or semicolon (\fB;\fR).
 397 .sp
 398 .LP
 399 To view a potentially unmounted disk in a reasonable manner, \fBfsdb\fR
 400 supports the \fBcd\fR, \fBpwd\fR, \fBls\fR, and \fBfind\fR commands. The
 401 functionality of each of these commands basically matches that of its UNIX
 402 counterpart. See \fBcd\fR(1), \fBpwd\fR(1), \fBls\fR(1), and \fBfind\fR(1) for
 403 details. The \fB*\fR, \fB,\fR, \fB?\fR, and \fB-\fR wildcard characters are
 404 also supported.
 405 .sp
 406 .LP
 407 The following commands are supported:
 408 .sp
 409 .ne 2
 410 .na
 411 \fBbase[=\fIb\fR]\fR
 412 .ad
 413 .sp .6
 414 .RS 4n
 415 Display or set the base. All input and output is governed by the current base.
 416 Without the \fB=\fR \fIb\fR, displays the current base. Otherwise, sets the
 417 current base to \fIb\fR. Base is interpreted using the old value of base, so to
 418 ensure correctness use the \fB0\fR, \fB0t\fR, or \fB0x\fR prefix when changing
 419 the base. The default for base is hexadecimal.
 420 .RE
 421 
 422 .sp
 423 .ne 2
 424 .na
 425 \fBblock\fR
 426 .ad
 427 .sp .6
 428 .RS 4n
 429 Convert the value of dot to a block address.
 430 .RE
 431 
 432 .sp
 433 .ne 2
 434 .na
 435 \fBcd [\fIdir\fR]\fR
 436 .ad
 437 .sp .6
 438 .RS 4n
 439 Change the current directory to directory  \fIdir\fR. The current values of
 440 inode and dot are also updated. If \fBdir\fR is not specified, changes
 441 directories to inode 2, root (\fB/\fR).
 442 .RE
 443 
 444 .sp
 445 .ne 2
 446 .na
 447 \fBdirectory\fR
 448 .ad
 449 .sp .6
 450 .RS 4n
 451 If the current inode is a directory, converts the value of dot to a directory
 452 slot offset in that directory, and dot now points to this entry.
 453 .RE
 454 
 455 .sp
 456 .ne 2
 457 .na
 458 \fBfile\fR
 459 .ad
 460 .sp .6
 461 .RS 4n
 462 Set the value of dot as a relative block count from the beginning of the file.
 463 The value of dot is updated to the first byte of  this block.
 464 .RE
 465 
 466 .sp
 467 .ne 2
 468 .na
 469 \fBfind \fIdir\fR [\fB-name\fR \fIn\fR] | [\fB-inum\fR\fI i\fR]\fR
 470 .ad
 471 .sp .6
 472 .RS 4n
 473 Find files by name or i-number. Recursively searches directory \fIdir\fR and
 474 below for file names whose i-number matches \fBi\fR or whose name matches
 475 pattern \fIn\fR. Only one of the two options (\fB-name\fR or \fB-inum\fR) can
 476 be used at one time. The find \fB-print\fR is not necessary or accepted.
 477 .RE
 478 
 479 .sp
 480 .ne 2
 481 .na
 482 \fBfill=\fIp\fR\fR
 483 .ad
 484 .sp .6
 485 .RS 4n
 486 Fill an area of disk with pattern \fIp\fR. The area of disk is delimited by dot
 487 and count.
 488 .RE
 489 
 490 .sp
 491 .ne 2
 492 .na
 493 \fBinode\fR
 494 .ad
 495 .sp .6
 496 .RS 4n
 497 Convert the value of dot to an inode address. If successful, the current value
 498 of inode is updated as well as the value of dot. As a convenient shorthand, if
 499 \fB:inode\fR appears at the beginning of the line, the value of dot is set to
 500 the current inode and that inode is displayed in inode format.
 501 .RE
 502 
 503 .sp
 504 .ne 2
 505 .na
 506 \fBls [ \fB-R\fR ] [\fB-l\fR ] \fIpat1\fR \fIpat2\fR...\fR
 507 .ad
 508 .sp .6
 509 .RS 4n
 510 List directories or files. If no file is specified, the current directory is
 511 assumed. Either or both of the options can be used (but, if used, must be
 512 specified before the filename specifiers). Wild card characters are available
 513 and multiple arguments are acceptable. The long listing shows only the i-number
 514 and the name; use the inode command with \fB?i\fR to get more information.
 515 .RE
 516 
 517 .sp
 518 .ne 2
 519 .na
 520 \fBoverride\fR
 521 .ad
 522 .sp .6
 523 .RS 4n
 524 Toggle the value of override. Some error conditions might be overridden if
 525 override is toggled to \fBon\fR.
 526 .RE
 527 
 528 .sp
 529 .ne 2
 530 .na
 531 \fBprompt "\fIp\fR"\fR
 532 .ad
 533 .sp .6
 534 .RS 4n
 535 Change the \fBfsdb\fR prompt to \fIp\fR. \fIp\fR must be enclosed in quotes.
 536 .RE
 537 
 538 .sp
 539 .ne 2
 540 .na
 541 \fBpwd\fR
 542 .ad
 543 .sp .6
 544 .RS 4n
 545 Display the current working directory.
 546 .RE
 547 
 548 .sp
 549 .ne 2
 550 .na
 551 \fBquit\fR
 552 .ad
 553 .sp .6
 554 .RS 4n
 555 Quit \fBfsdb\fR.
 556 .RE
 557 
 558 .sp
 559 .ne 2
 560 .na
 561 \fBtag\fR
 562 .ad
 563 .sp .6
 564 .RS 4n
 565 Convert the value of dot and if this is a valid tag, print the volume structure
 566 according to the tag.
 567 .RE
 568 
 569 .sp
 570 .ne 2
 571 .na
 572 \fB!\fR
 573 .ad
 574 .sp .6
 575 .RS 4n
 576 Escape to the shell.
 577 .RE
 578 
 579 .SS "Inode Commands"
 580 .LP
 581 In addition to the above commands, several other commands deal with inode
 582 fields and operate directly on the current inode (they still require the colon
 583 (\fB:\fR). They can be used to more easily display or change the particular
 584 fields. The value of dot is only used by the \fB:db\fR and \fB:ib\fR commands.
 585 Upon completion of the command, the value of dot is changed so that it points
 586 to that particular field. For example,
 587 .sp
 588 .in +2
 589 .nf
 590 > :ln=+1
 591 .fi
 592 .in -2
 593 .sp
 594 
 595 .sp
 596 .LP
 597 increments the link count of the current inode and sets the value of dot to the
 598 address of the link count field.
 599 .sp
 600 .LP
 601 The following inode commands are supported:
 602 .sp
 603 .ne 2
 604 .na
 605 \fBat\fR
 606 .ad
 607 .RS 8n
 608 Access time
 609 .RE
 610 
 611 .sp
 612 .ne 2
 613 .na
 614 \fBbs\fR
 615 .ad
 616 .RS 8n
 617 Block size
 618 .RE
 619 
 620 .sp
 621 .ne 2
 622 .na
 623 \fBct\fR
 624 .ad
 625 .RS 8n
 626 Creation time
 627 .RE
 628 
 629 .sp
 630 .ne 2
 631 .na
 632 \fBgid\fR
 633 .ad
 634 .RS 8n
 635 Group id
 636 .RE
 637 
 638 .sp
 639 .ne 2
 640 .na
 641 \fBln\fR
 642 .ad
 643 .RS 8n
 644 Link number
 645 .RE
 646 
 647 .sp
 648 .ne 2
 649 .na
 650 \fBmt\fR
 651 .ad
 652 .RS 8n
 653 Modification time
 654 .RE
 655 
 656 .sp
 657 .ne 2
 658 .na
 659 \fBmd\fR
 660 .ad
 661 .RS 8n
 662 Mode
 663 .RE
 664 
 665 .sp
 666 .ne 2
 667 .na
 668 \fBmaj\fR
 669 .ad
 670 .RS 8n
 671 Major device number
 672 .RE
 673 
 674 .sp
 675 .ne 2
 676 .na
 677 \fBmin\fR
 678 .ad
 679 .RS 8n
 680 Minor device number
 681 .RE
 682 
 683 .sp
 684 .ne 2
 685 .na
 686 \fBnm\fR
 687 .ad
 688 .RS 8n
 689 This command actually operates on the directory name field. Once      poised at
 690 the desired directory entry (using the \fBdirectory\fR command), this command
 691 allows you to change or display the directory name. For example,
 692 .sp
 693 .in +2
 694 .nf
 695  > 7:dir:nm="foo"
 696 .fi
 697 .in -2
 698 .sp
 699 
 700 gets the \fB7\fRth directory entry of the current inode and changes its name to
 701 \fBfoo\fR. Directory names cannot be made larger than the field allows. If an
 702 attempt is made to make a directory name larger than the field allows,, the
 703 string is truncated to fit and a warning message is displayed.
 704 .RE
 705 
 706 .sp
 707 .ne 2
 708 .na
 709 \fBsz\fR
 710 .ad
 711 .RS 8n
 712 File size
 713 .RE
 714 
 715 .sp
 716 .ne 2
 717 .na
 718 \fBuid\fR
 719 .ad
 720 .RS 8n
 721 User \fBID\fR
 722 .RE
 723 
 724 .sp
 725 .ne 2
 726 .na
 727 \fBuniq\fR
 728 .ad
 729 .RS 8n
 730 Unique \fBID\fR
 731 .RE
 732 
 733 .SS "Formatted Output"
 734 .LP
 735 Formatted output comes in two styles and many format types. The two styles of
 736 formatted output are: structured and unstructured. Structured output is used to
 737 display inodes, directories, and so forth. Unstructured output displays raw
 738 data.
 739 .sp
 740 .LP
 741 Format specifiers are preceded by the slash (\fB/\fR) or question mark
 742 (\fB?\fR) character. \fItype\fR is updated as necessary upon completion.
 743 .sp
 744 .LP
 745 The following format specifiers are preceded by the \fB?\fR character:
 746 .sp
 747 .ne 2
 748 .na
 749 \fBi\fR
 750 .ad
 751 .RS 5n
 752 Display as inodes in the current base.
 753 .RE
 754 
 755 .sp
 756 .ne 2
 757 .na
 758 \fBd\fR
 759 .ad
 760 .RS 5n
 761 Display as directories in the current base.
 762 .RE
 763 
 764 .sp
 765 .LP
 766 The following format specifiers are preceded by the \fB/\fR character:
 767 .sp
 768 .ne 2
 769 .na
 770 \fBb\fR
 771 .ad
 772 .RS 9n
 773 Display as bytes in the current base.
 774 .RE
 775 
 776 .sp
 777 .ne 2
 778 .na
 779 \fBc\fR
 780 .ad
 781 .RS 9n
 782 Display as characters.
 783 .RE
 784 
 785 .sp
 786 .ne 2
 787 .na
 788 \fBo | O\fR
 789 .ad
 790 .RS 9n
 791 Display as octal shorts or longs.
 792 .RE
 793 
 794 .sp
 795 .ne 2
 796 .na
 797 \fBd | D\fR
 798 .ad
 799 .RS 9n
 800 Display as decimal shorts or longs.
 801 .RE
 802 
 803 .sp
 804 .ne 2
 805 .na
 806 \fBx | X\fR
 807 .ad
 808 .RS 9n
 809 Display as hexadecimal shorts or longs.
 810 .RE
 811 
 812 .SH EXAMPLES
 813 .LP
 814 \fBExample 1 \fRUsing fsdb as a calculator for complex arithmetic
 815 .sp
 816 .LP
 817 The following command displays \fB2010\fR in decimal format, and is an example
 818 of using \fBfsdb\fR as a calculator for complex arithmetic.
 819 
 820 .sp
 821 .in +2
 822 .nf
 823 > 2000+400%(20+20)=D
 824 .fi
 825 .in -2
 826 .sp
 827 
 828 .LP
 829 \fBExample 2 \fRUsing fsdb to display an i-number in inode fomat
 830 .sp
 831 .LP
 832 The following command displays the i-number \fB386\fR in inode format.\fB386\fR
 833 becomes the current inode.
 834 
 835 .sp
 836 .in +2
 837 .nf
 838 > 386:ino?i
 839 .fi
 840 .in -2
 841 .sp
 842 
 843 .LP
 844 \fBExample 3 \fRUsing fsdb to change the link count
 845 .sp
 846 .LP
 847 The following command changes the link count for the current inode to \fB4\fR.
 848 
 849 .sp
 850 .in +2
 851 .nf
 852 > :ln=4
 853 .fi
 854 .in -2
 855 .sp
 856 
 857 .LP
 858 \fBExample 4 \fRUsing fsdb to increment the link count
 859 .sp
 860 .LP
 861 The following command increments the link count by \fB1\fR.
 862 
 863 .sp
 864 .in +2
 865 .nf
 866 > :ln=+1
 867 .fi
 868 .in -2
 869 .sp
 870 
 871 .LP
 872 \fBExample 5 \fRUsing fsdb to display the creation time as a hexadecimal long
 873 .sp
 874 .LP
 875 The following command displays the creation time as a hexadecimal long.
 876 
 877 .sp
 878 .in +2
 879 .nf
 880 > :ct=X
 881 .fi
 882 .in -2
 883 .sp
 884 
 885 .LP
 886 \fBExample 6 \fRUsing fsdb to display the modification time in time format
 887 .sp
 888 .LP
 889 The following command displays the modification time in time format.
 890 
 891 .sp
 892 .in +2
 893 .nf
 894 > :mt=t
 895 .fi
 896 .in -2
 897 .sp
 898 
 899 .LP
 900 \fBExample 7 \fRUsing fsdb to display in ASCII
 901 .sp
 902 .LP
 903 The following command displays, in \fBASCII\fR, block \fB0\fR of the file
 904 associated with the current inode.
 905 
 906 .sp
 907 .in +2
 908 .nf
 909 > 0:file/c
 910 .fi
 911 .in -2
 912 .sp
 913 
 914 .LP
 915 \fBExample 8 \fRUsing fsdb to display the directory enteries for the root inode
 916 .sp
 917 .LP
 918 The following command displays the first block's directory entries for the root
 919 inode of this file system. This command stops prematurely if the \fBEOF\fR is
 920 reached.
 921 
 922 .sp
 923 .in +2
 924 .nf
 925 > 2:ino,*?d
 926 .fi
 927 .in -2
 928 .sp
 929 
 930 .LP
 931 \fBExample 9 \fRUsing fsdb to change the current inode
 932 .sp
 933 .LP
 934  The following command changes the current inode to that associated with the
 935 \fB5\fRth directory entry (numbered from \fB0\fR) of the current inode. The
 936 first logical block of the file is then displayed in \fBASCII\fR.
 937 
 938 .sp
 939 .in +2
 940 .nf
 941 > 5:dir:inode; 0:file,*/c
 942 .fi
 943 .in -2
 944 .sp
 945 
 946 .LP
 947 \fBExample 10 \fRUsing fsdb to change the i-number
 948 .sp
 949 .LP
 950  The following command changes the i-number for the \fB7\fRth directory slot in
 951 the root directory to \fB3\fR.
 952 
 953 .sp
 954 .in +2
 955 .nf
 956 > 2:inode; 7:dir=3
 957 .fi
 958 .in -2
 959 .sp
 960 
 961 .LP
 962 \fBExample 11 \fRUsing fsdb to change the name field
 963 .sp
 964 .LP
 965 The following command changes the \fIname\fR field in the directory slot to
 966 \fBname\fR.
 967 
 968 .sp
 969 .in +2
 970 .nf
 971  > 7:dir:nm="name"
 972 .fi
 973 .in -2
 974 .sp
 975 
 976 .LP
 977 \fBExample 12 \fRUsing fsdb to display the a block
 978 .sp
 979 .LP
 980 The following command displays the \fB3\fRrd block of the current inode as
 981 directory entries.
 982 
 983 .LP
 984 \fBExample 13 \fRUsing fsdb to set the contents of address
 985 .sp
 986 .LP
 987 The following command sets the contents of address \fB2050\fR to
 988 \fB0xffffffff\fR. \fB0xffffffff\fR can be truncated, depending on the current
 989 type.
 990 
 991 .sp
 992 .in +2
 993 .nf
 994 > 2050=0xffff
 995 .fi
 996 .in -2
 997 .sp
 998 
 999 .LP
1000 \fBExample 14 \fRUsing fsdb to place an ASCII string at an address
1001 .sp
1002 .LP
1003 The following command places the \fBASCII\fR string \fBthis is some text\fR at
1004 address \fB1c92434\fR.
1005 
1006 .sp
1007 .in +2
1008 .nf
1009 > 1c92434="this is some text"
1010 .fi
1011 .in -2
1012 .sp
1013 
1014 .SH SEE ALSO
1015 .LP
1016 \fBclri\fR(1M), \fBfsck_udfs\fR(1M), \fBdir\fR(4),  \fBattributes\fR(5)