Commit | Line | Data |
---|---|---|
ba8cfc9e KM |
1 | .\" Copyright (c) 1988 Regents of the University of California. |
2 | .\" All rights reserved. | |
3 | .\" | |
57a981eb | 4 | .\" This code is derived from software contributed to Berkeley by |
ba8cfc9e | 5 | .\" Computer Consoles Inc. |
57a981eb | 6 | .\" |
ba8cfc9e | 7 | .\" Redistribution and use in source and binary forms are permitted |
57a981eb KB |
8 | .\" provided that the above copyright notice and this paragraph are |
9 | .\" duplicated in all such forms and that any documentation, | |
10 | .\" advertising materials, and other materials related to such | |
11 | .\" distribution and use acknowledge that the software was developed | |
12 | .\" by the University of California, Berkeley. The name of the | |
13 | .\" University may not be used to endorse or promote products derived | |
14 | .\" from this software without specific prior written permission. | |
15 | .\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR | |
16 | .\" IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED | |
17 | .\" WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. | |
ba8cfc9e | 18 | .\" |
57a981eb | 19 | .\" @(#)fsdb.8 6.2 (Berkeley) %G% |
ba8cfc9e KM |
20 | .\" |
21 | .TH FSDB 8 "" | |
22 | .UC 7 | |
23 | .SH NAME | |
24 | fsdb \- file system debugger | |
25 | .SH SYNOPSIS | |
26 | .B /etc/fsdb | |
27 | .RB [ options ] | |
28 | special | |
29 | .SH OPTIONS | |
30 | The options available to | |
31 | .I fsdb\^ | |
32 | are: | |
33 | .RS | |
34 | .PD 0 | |
35 | .TP 13 | |
36 | .B -? | |
37 | display usage | |
38 | .TP 13 | |
39 | .B -o | |
40 | override some error conditions | |
41 | .TP 13 | |
42 | .B "-p'string'\^" | |
43 | set prompt to string | |
44 | .TP 13 | |
45 | .B -w | |
46 | open for write | |
47 | .PD | |
48 | .RE | |
49 | .SH DESCRIPTION | |
50 | Since | |
51 | .I fsdb | |
52 | reads the disk raw, | |
53 | it is able to circumvent normal | |
54 | file system security. | |
55 | Extreme caution is advised | |
56 | in determining its availability | |
57 | on the system. | |
58 | Suggested permissions are 600 | |
59 | and owned by bin. | |
60 | .PP | |
61 | .I Fsdb\^ | |
62 | can be used | |
63 | to patch up | |
64 | a damaged file system | |
65 | after a crash. | |
66 | It has conversions | |
67 | to translate block and i-numbers | |
68 | into their corresponding disk addresses. | |
69 | Also included are mnemonic offsets | |
70 | to access different parts | |
71 | of an inode. | |
72 | These greatly simplify the process | |
73 | of correcting control block entries | |
74 | or descending the file system tree. | |
75 | .PP | |
76 | .I Fsdb\^ | |
77 | contains several error-checking routines | |
78 | to verify inode and block addresses. | |
79 | These can be disabled if necessary | |
80 | by invoking | |
81 | .I fsdb\^ | |
82 | with the | |
83 | .IR \-o | |
84 | option | |
85 | or by the use of the | |
86 | .IR o | |
87 | command. | |
88 | .PP | |
89 | .I Fsdb\^ | |
90 | reads a block at a time | |
91 | and will therefore work with raw as well as block | |
92 | I/O. | |
93 | A buffer management routine | |
94 | is used to retain commonly used | |
95 | blocks of data | |
96 | in order to reduce the number of read system calls. | |
97 | All assignment operations result | |
98 | in an immediate write-through | |
99 | of the corresponding block. | |
100 | Note that in order to modify | |
101 | any portion of the disk, | |
102 | .IR fsdb | |
103 | must be invoked with the | |
104 | .IR -w | |
105 | option. | |
106 | .PP | |
107 | Wherever possible, | |
108 | .IR adb- like | |
109 | syntax was adopted | |
110 | to promote the use | |
111 | of | |
112 | .IR fsdb | |
113 | through familiarity. | |
114 | .PP | |
115 | Numbers are considered hexadecimal by default. | |
116 | However, the user has control over how data is | |
117 | to be displayed | |
118 | or accepted. | |
119 | The | |
120 | .IR base | |
121 | command will display | |
122 | or set the input/output base. | |
123 | Once set, | |
124 | all input will default to this base | |
125 | and all output will be shown in this base. | |
126 | The base can be overriden temporarily for input by | |
127 | preceding hexadecimal numbers with '0x', preceding | |
128 | decimal numbers with '0t', or | |
129 | octal numbers with '0'. | |
130 | Hexadecimal numbers beginning with a-f or A-F must | |
131 | be preceded with '0x' | |
132 | to distinguish them from commands. | |
133 | .PP | |
134 | Disk addressing by | |
135 | .IR fsdb | |
136 | is at the byte level. | |
137 | However, | |
138 | .IR fsdb | |
139 | offers many commands to convert | |
140 | a desired inode, directory entry, | |
141 | block, superblock etc. to a | |
142 | byte address. | |
143 | Once the address has been calculated, | |
144 | .IR fsdb | |
145 | will record the result in | |
146 | .IR dot | |
147 | (see next paragraph). | |
148 | .PP | |
149 | Several global values are maintained by | |
150 | .IR fsdb : | |
151 | the current base (referred to as | |
152 | .IR base ), | |
153 | the current address (referred to as | |
154 | .IR dot ), | |
155 | the current inode (referred to as | |
156 | .IR inode ), | |
157 | the current count (referred to as | |
158 | .IR count ), | |
159 | and the current type (referred to as | |
160 | .IR type ). | |
161 | Most commands use the preset value of | |
162 | .IR dot | |
163 | in | |
164 | their execution. | |
165 | For example, | |
166 | .RS | |
167 | .PD 0 | |
168 | .TP 7.2n | |
169 | > 2:inode | |
170 | .PD | |
171 | .RE | |
172 | will first set the value of | |
173 | .IR dot | |
174 | to 2, ':' will alert the start of a command, | |
175 | and the | |
176 | .IR inode | |
177 | command will set | |
178 | .IR inode | |
179 | to 2. | |
180 | A count is specified after a ','. | |
181 | Once set, | |
182 | .IR count | |
183 | will remain at this value | |
184 | until a new command is encountered | |
185 | which will then reset the value back to 1 (the default). | |
186 | So, if | |
187 | .RS | |
188 | .PD 0 | |
189 | .TP 7.2n | |
190 | > 2000,400/X | |
191 | .PD | |
192 | .RE | |
193 | is typed, | |
194 | 400 hex longs are listed | |
195 | from 2000, | |
196 | and when completed, | |
197 | the value of | |
198 | .IR dot | |
199 | will be 2000 + 400 * sizeof (long). | |
200 | If a carriage-return is then typed, | |
201 | the output routine will use the | |
202 | current values of | |
203 | .IR dot , | |
204 | .IR count , | |
205 | and | |
206 | .IR type | |
207 | and display 400 more hex longs. | |
208 | A '*' will cause the entire block to | |
209 | be displayed. | |
210 | .PP | |
211 | End of fragment, block and file are maintained by | |
212 | .IR fsdb. | |
213 | When displaying data as fragments or blocks, | |
214 | an error message will be displayed when the end of fragment | |
215 | or block is reached. | |
216 | When displaying data using the | |
217 | .IR db, | |
218 | .IR ib, | |
219 | .IR directory, | |
220 | or | |
221 | .IR file | |
222 | commands an error message is displayed if the | |
223 | end of file is reached. | |
224 | This is mainly needed | |
225 | to avoid passing the | |
226 | end of a directory or file | |
227 | and getting unknown and unwanted results. | |
228 | .PP | |
229 | An example showing several commands and | |
230 | the use of carriage-return would be: | |
231 | .RS | |
232 | .PD 0 | |
233 | .TP 7.2n | |
234 | > 2:ino; 0:dir?d | |
235 | .br | |
236 | or | |
237 | .PD | |
238 | .RE | |
239 | .RS | |
240 | .PD 0 | |
241 | .TP 7.2n | |
242 | > 2:ino; 0:db:block?d | |
243 | .PD | |
244 | .RE | |
245 | The two examples are synonymous for getting to the first | |
246 | directory entry of the root of the file system. | |
247 | Once there, | |
248 | subsequent carriage-returns (or +, -) will advance to subsequent | |
249 | entries. | |
250 | Note that | |
251 | .RS | |
252 | .PD 0 | |
253 | .TP 7.2n | |
254 | > 2:inode; :ls | |
255 | .br | |
256 | or | |
257 | .PD | |
258 | .RE | |
259 | .RS | |
260 | .PD 0 | |
261 | .TP 7.2n | |
262 | > :ls / | |
263 | .PD | |
264 | .RE | |
265 | is again synonymous. | |
266 | .SH EXPRESSIONS | |
267 | .PP | |
268 | The symbols recognized by | |
269 | .I fsdb\^ | |
270 | are: | |
271 | .TP 7.2n | |
272 | .B carriage-return | |
273 | update the value of | |
274 | .IR dot | |
275 | by the current value of | |
276 | .IR type | |
277 | and display using the current value of | |
278 | .IR count . | |
279 | .TP 7.2n | |
280 | .B # | |
281 | numeric expressions may be composed of +, -, *, and % operators | |
282 | (evaluated left to right) and may use parentheses. Once evaluated, | |
283 | the value of | |
284 | .IR dot | |
285 | is updated. | |
286 | .TP 7.2n | |
287 | .BI , " count"\^ | |
288 | count indicator. The global value of | |
289 | .IR count | |
290 | will be updated to | |
291 | .IR count . | |
292 | The value of | |
293 | .IR count | |
294 | will remain until a new command is run. | |
295 | A count specifier of '*' will attempt to show a | |
296 | .IR blocks's | |
297 | worth of information. | |
298 | The default for | |
299 | .IR count | |
300 | is 1. | |
301 | .TP 7.2n | |
302 | .BI ? " f\^" | |
303 | display in structured style with format | |
304 | specifier | |
305 | .IR f | |
306 | (see FORMATTED OUTPUT section). | |
307 | .TP 7.2n | |
308 | .BI / " f\^" | |
309 | display in unstructured style with format | |
310 | specifier | |
311 | .IR f | |
312 | (see FORMATTED OUTPUT section). | |
313 | .TP 7.2n | |
314 | .B . | |
315 | the value of | |
316 | .IR dot . | |
317 | .TP 7.2n | |
318 | .BI + "e\^" | |
319 | increment the value of | |
320 | .IR dot | |
321 | by the expression | |
322 | .IR e. | |
323 | The amount actually incremented is dependent | |
324 | on the size of | |
325 | .IR type : | |
326 | .br | |
327 | .nf | |
328 | dot = dot + e * sizeof (type) | |
329 | .fi | |
330 | The default for | |
331 | .IR e | |
332 | is 1. | |
333 | .TP 7.2n | |
334 | .BI - "e\^" | |
335 | decrement the value of | |
336 | .IR dot | |
337 | by the expression | |
338 | .IR e | |
339 | (see +). | |
340 | .TP 7.2n | |
341 | .BI * "e\^" | |
342 | multiply the value of | |
343 | .IR dot | |
344 | by the expression | |
345 | .IR e. | |
346 | Multiplication and division don't | |
347 | use | |
348 | .IR type. | |
349 | In the above calculation of | |
350 | .IR dot , | |
351 | consider the | |
352 | sizeof ( | |
353 | .IR type ) | |
354 | to be 1. | |
355 | .TP 7.2n | |
356 | .BI % "e\^" | |
357 | divide the value of | |
358 | .IR dot | |
359 | by the expression | |
360 | .IR e | |
361 | (see *). | |
362 | .TP 7.2n | |
363 | .BI < " name\^" | |
364 | restore an address saved in register | |
365 | .IR name . | |
366 | .IR name | |
367 | must be a single letter or digit. | |
368 | .TP 7.2n | |
369 | .BI > " name\^" | |
370 | save an address in register | |
371 | .IR name . | |
372 | .IR name | |
373 | must be a single letter or digit. | |
374 | .TP 7.2n | |
375 | .BI = " f" | |
376 | display indicator. | |
377 | If | |
378 | .IR f | |
379 | is a legitimate format specifier | |
380 | (see FORMATTED OUTPUT | |
381 | section), | |
382 | then the value of | |
383 | .IR dot | |
384 | is displayed using | |
385 | format specifier | |
386 | .IR f . | |
387 | Otherwise, | |
388 | assignment is assumed | |
389 | (see next item). | |
390 | .TP 7.2n | |
391 | .BI = " [s] [e]\^" | |
392 | assignment indicator. | |
393 | The address pointed to by | |
394 | .IR dot | |
395 | has its contents changed to the value of the | |
396 | expression | |
397 | .IR e | |
398 | or to the | |
399 | .IR ASCII | |
400 | representation of the | |
401 | quoted (") string | |
402 | .IR s. | |
403 | This may be useful for changing | |
404 | directory names or | |
405 | .IR ASCII | |
406 | file information. | |
407 | .TP 7.2n | |
408 | .BI =+ " e\^" | |
409 | incremental assignment. | |
410 | The address pointed to by | |
411 | .IR dot | |
412 | has its contents incremented by expression | |
413 | .IR e . | |
414 | .TP 7.2n | |
415 | .BI =- " e\^" | |
416 | decremental assignment. | |
417 | The address pointed to by | |
418 | .IR dot | |
419 | has its contents decremented by expression | |
420 | .IR e . | |
421 | .SH COMMANDS | |
422 | .PP | |
423 | A command must be prefixed by a ':' character. | |
424 | Only enough letters of the command | |
425 | to uniquely | |
426 | distinguish it are needed. | |
427 | Multiple commands may be entered | |
428 | on one line by separating | |
429 | them by a space, tab or ';'. | |
430 | .PP | |
431 | In order to view a potentially | |
432 | unmounted disk in a reasonable | |
433 | manner, | |
434 | .I fsdb\^ | |
435 | offers the | |
436 | .IR cd , | |
437 | .IR pwd , | |
438 | .IR ls | |
439 | and | |
440 | .IR find | |
441 | commands. | |
442 | The functionality of these | |
443 | commands substantially matches those of | |
444 | its | |
445 | .IR UNIX | |
446 | counterparts | |
447 | (see individual command for details). | |
448 | The '*', '?', and '[-]' wild card | |
449 | characters are available. | |
450 | .TP 7.2n | |
451 | .BI base=b | |
452 | display or set base. As stated above, | |
453 | all input and output is governed by | |
454 | the current | |
455 | .IR base . | |
456 | If the '=b' is left off, | |
457 | the current | |
458 | .IR base | |
459 | is displayed. | |
460 | Otherwise, the current | |
461 | .IR base | |
462 | is set | |
463 | to | |
464 | .IR b. | |
465 | Note that this is interpreted | |
466 | using the old value of | |
467 | .IR base , | |
468 | so to ensure correctness use the '0', '0t', or '0x' | |
469 | prefix when changing the | |
470 | .IR base. | |
471 | The default for | |
472 | .IR base | |
473 | is hexadecimal. | |
474 | .TP 7.2n | |
475 | .B block | |
476 | convert the value of | |
477 | .IR dot | |
478 | to a block address. | |
479 | .TP 7.2n | |
480 | .B cd dir | |
481 | change the current directory | |
482 | to directory | |
483 | .IR dir. | |
484 | The current values of | |
485 | .IR inode | |
486 | and | |
487 | .IR dot | |
488 | are also updated. | |
489 | If no | |
490 | .IR dir | |
491 | is specified, | |
492 | then change directories to | |
493 | inode 2 ("/"). | |
494 | .TP 7.2n | |
495 | .B cg | |
496 | convert the value of | |
497 | .IR dot | |
498 | to a cylinder group. | |
499 | .TP 7.2n | |
500 | .B directory | |
501 | If the current | |
502 | .IR inode | |
503 | is a directory, | |
504 | then the value of | |
505 | .IR dot | |
506 | is converted to a directory | |
507 | slot offset in that directory | |
508 | and | |
509 | .IR dot | |
510 | now points to | |
511 | this entry. | |
512 | .TP 7.2n | |
513 | .B file | |
514 | the value of | |
515 | .IR dot | |
516 | is taken as | |
517 | a relative block count from the | |
518 | beginning of the file. | |
519 | The value of | |
520 | .IR dot | |
521 | is updated to the first byte | |
522 | of this block. | |
523 | .IR | |
524 | .TP 7.2n | |
525 | .BI find " dir [-name n] [-inum i]\^" | |
526 | find files by name or i-number. | |
527 | .IR find | |
528 | recursively searches | |
529 | directory | |
530 | .IR dir | |
531 | and below for filenames whose | |
532 | i-number matches | |
533 | .IR i | |
534 | or whose name | |
535 | matches pattern | |
536 | .IR n . | |
537 | Note that only one of the two options | |
538 | (-name or -inum) | |
539 | may be used at one time. | |
540 | Also, the -print is not needed or | |
541 | accepted. | |
542 | .TP 7.2n | |
543 | .BI fill "=p\^" | |
544 | fill an area of disk with pattern | |
545 | .IR p. | |
546 | The area of disk | |
547 | is delimited by | |
548 | .IR dot | |
549 | and | |
550 | .IR count . | |
551 | .TP 7.2n | |
552 | .B fragment | |
553 | convert the value of | |
554 | .IR dot | |
555 | to | |
556 | a fragment address. | |
557 | The only difference between the | |
558 | .IR fragment | |
559 | command and the | |
560 | .IR block | |
561 | command is the amount that | |
562 | is able to be displayed. | |
563 | .TP 7.2n | |
564 | .B inode | |
565 | convert the value of | |
566 | .IR dot | |
567 | to an inode address. | |
568 | If successful, | |
569 | the current value of | |
570 | .IR inode | |
571 | will be updated as well as | |
572 | the value of | |
573 | .IR dot. | |
574 | As a convenient shorthand, | |
575 | if ':inode' appears at the | |
576 | beginning of the line, | |
577 | the value of | |
578 | .IR dot | |
579 | is set to the current | |
580 | .IR inode | |
581 | and that inode is displayed | |
582 | in inode format. | |
583 | .TP 7.2n | |
584 | .BI ls " [-R] [-l] pat1 pat2 ...\^" | |
585 | list directories or files. | |
586 | If no file is specified, | |
587 | the current directory is assumed. | |
588 | Either or both of the | |
589 | options may be used (but, if used, | |
590 | .IR must | |
591 | be specified before the | |
592 | filename specifiers). | |
593 | Also, as stated above, | |
594 | wild card characters are | |
595 | available and multiple | |
596 | arguments may be given. | |
597 | The long listing shows only | |
598 | the i-number and the name; | |
599 | use the | |
600 | .IR inode | |
601 | command with '?i' | |
602 | to get more information. | |
603 | .TP 7.2n | |
604 | .B override | |
605 | toggle the value of override. | |
606 | Some error conditions may be | |
607 | overriden | |
608 | if override is toggled on. | |
609 | .TP 7.2n | |
610 | .BI prompt " p\^" | |
611 | change the fsdb prompt to | |
612 | .IR p. | |
613 | .IR p | |
614 | must be surrounded by (")s. | |
615 | .TP 7.2n | |
616 | .B pwd | |
617 | display the current working directory. | |
618 | .TP 7.2n | |
619 | .B quit | |
620 | quit | |
621 | .IR fsdb . | |
622 | .TP 7.2n | |
623 | .B sb | |
624 | the value of | |
625 | .IR dot | |
626 | is taken as a cylinder group | |
627 | number and then converted to | |
628 | the address of the superblock | |
629 | in that cylinder group. | |
630 | As a shorthand, ':sb' at | |
631 | the beginning of a line | |
632 | will set the value of | |
633 | .IR dot | |
634 | to | |
635 | .IR the | |
636 | superblock and display it | |
637 | in superblock format. | |
638 | .TP 7.2n | |
639 | .B ! | |
640 | escape to shell | |
641 | .SH INODE COMMANDS | |
642 | In addition to the above commands, | |
643 | there are several commands that deal with inode | |
644 | fields and operate directly on the current | |
645 | .IR inode | |
646 | (they still require the ':'). | |
647 | They may be used to more easily display | |
648 | or change the particular fields. | |
649 | The value of | |
650 | .IR dot | |
651 | is only used by the ':db' | |
652 | and ':ib' commands. | |
653 | Upon completion of the command, | |
654 | the value of | |
655 | .IR dot | |
656 | is changed to point to | |
657 | that particular field. | |
658 | For example, | |
659 | .RS | |
660 | .PD 0 | |
661 | .TP 7.2n | |
662 | > :ln=+1 | |
663 | .PD | |
664 | .RE | |
665 | would | |
666 | increment the link count of the current | |
667 | .IR inode | |
668 | and set the value of | |
669 | .IR dot | |
670 | to the address of the link | |
671 | count field. | |
672 | .TP 7.2n | |
673 | .B at | |
674 | access time. | |
675 | .TP 7.2n | |
676 | .B bs | |
677 | block size. | |
678 | .TP 7.2n | |
679 | .B ct | |
680 | creation time. | |
681 | .TP 7.2n | |
682 | .B db | |
683 | use the current value of | |
684 | .IR dot | |
685 | as a direct block index, | |
686 | where direct blocks number from | |
687 | 0 - 11. | |
688 | In order to display the block | |
689 | itself, you need to 'pipe' this | |
690 | result into the | |
691 | .IR block | |
692 | or | |
693 | .IR fragment | |
694 | command. | |
695 | For example, | |
696 | .br | |
697 | .nf | |
698 | > 1:db:block,20/X | |
699 | .fi | |
700 | would get the contents of | |
701 | data block field 1 from the inode and | |
702 | convert it to a block address. | |
703 | 20 longs are then displayed in hexadecimal | |
704 | (see FORMATTED OUTPUT section). | |
705 | .TP 7.2n | |
706 | .B gid | |
707 | group id. | |
708 | .TP 7.2n | |
709 | .B ib | |
710 | use the current value of | |
711 | .IR dot | |
712 | as an indirect block index | |
713 | where indirect blocks number from | |
714 | 0 - 2. | |
715 | This will only get the indirect block itself | |
716 | (the block containing the pointers to the actual blocks). | |
717 | Use the | |
718 | .IR file | |
719 | command and start at block 12 to get to the actual | |
720 | blocks. | |
721 | .TP 7.2n | |
722 | .B ln | |
723 | link count. | |
724 | .TP 7.2n | |
725 | .B mt | |
726 | modification time. | |
727 | .TP 7.2n | |
728 | .B md | |
729 | mode. | |
730 | .TP 7.2n | |
731 | .B maj | |
732 | major device number. | |
733 | .TP 7.2n | |
734 | .B min | |
735 | minor device number. | |
736 | .TP 7.2n | |
737 | .B nm | |
738 | although listed here, | |
739 | this command actually | |
740 | operates on the directory | |
741 | name field. | |
742 | Once poised at the desired | |
743 | directory entry (using the | |
744 | .IR directory | |
745 | command), | |
746 | this command will allow | |
747 | you to change or display | |
748 | the directory name. | |
749 | For example, | |
750 | .br | |
751 | .nf | |
752 | > 7:dir:nm="foo" | |
753 | .fi | |
754 | will get the 7th directory | |
755 | entry of the current | |
756 | .IR inode | |
757 | and change its name to foo. | |
758 | Note that names | |
759 | cannot be made larger than the | |
760 | field is set up for. | |
761 | If an attempt is made, | |
762 | the string is truncated to fit | |
763 | and a warning message to this | |
764 | effect is displayed. | |
765 | .TP 7.2n | |
766 | .B sz | |
767 | file size. | |
768 | .TP 7.2n | |
769 | .B uid | |
770 | user id. | |
771 | .SH FORMATTED OUTPUT | |
772 | .PP | |
773 | There are two styles | |
774 | and many format types. | |
775 | The two styles are structured and | |
776 | unstructured. | |
777 | Structured output is used to display | |
778 | inodes, directories, superblocks and the | |
779 | like. | |
780 | Unstructured just displays | |
781 | raw data. | |
782 | The following table shows the | |
783 | different ways of displaying: | |
784 | .TP 7.2n | |
785 | .B ? | |
786 | .RS | |
787 | .PD 0 | |
788 | .TP 13 | |
789 | .B c | |
790 | display as cylinder groups | |
791 | .TP 13 | |
792 | .B i | |
793 | display as inodes | |
794 | .TP 13 | |
795 | .B d | |
796 | display as directories | |
797 | .TP 13 | |
798 | .B s | |
799 | display as superblocks | |
800 | .PD | |
801 | .RE | |
802 | .TP 7.2n | |
803 | .B / | |
804 | .RS | |
805 | .PD 0 | |
806 | .TP 13 | |
807 | .B b | |
808 | display as bytes | |
809 | .TP 13 | |
810 | .B c | |
811 | display as characters | |
812 | .TP 13 | |
813 | .B o O | |
814 | display as octal shorts or longs | |
815 | .TP 13 | |
816 | .B d D | |
817 | display as decimal shorts or longs | |
818 | .TP 13 | |
819 | .B x X | |
820 | display as hexadecimal shorts or longs | |
821 | .PD | |
822 | .RE | |
823 | .PP | |
824 | The format specifier immediately follows | |
825 | the '/' or '?' character. | |
826 | The values displayed by '/b' and all '?' | |
827 | formats are displayed in the current | |
828 | .IR base . | |
829 | Also, | |
830 | .IR type | |
831 | is appropriately updated | |
832 | upon completion. | |
833 | .SH EXAMPLES | |
834 | .TP 16 | |
835 | > 2000+400%(20+20)=D | |
836 | will display 2010 in decimal (use of | |
837 | .IR fsdb | |
838 | as a calculator | |
839 | for complex arithmetic). | |
840 | .TP 16 | |
841 | > 386:ino?i | |
842 | display i-number 386 in an inode format. | |
843 | This now becomes the current | |
844 | .IR inode . | |
845 | .TP 16 | |
846 | > :ln=4 | |
847 | changes the link count for the | |
848 | current | |
849 | .IR inode | |
850 | to 4. | |
851 | .TP 16 | |
852 | > :ln=+1 | |
853 | increments the link count by 1. | |
854 | .TP 16 | |
855 | > :ct=X | |
856 | display the creation time as a hexadecimal long. | |
857 | .TP 16 | |
858 | > :mt=t | |
859 | display the modification time in time format. | |
860 | .TP 16 | |
861 | > 0:file/c | |
862 | displays, in | |
863 | .IR ASCII , | |
864 | block zero of the file associated | |
865 | with the | |
866 | current | |
867 | .IR inode . | |
868 | .TP 16 | |
869 | > 2:ino,*?d | |
870 | displays the first blocks worth of directory entries for | |
871 | the root inode of this file system. | |
872 | It will stop prematurely if the eof is reached. | |
873 | .TP 16 | |
874 | > 5:dir:inode; 0:file,*/c | |
875 | changes the current inode to that | |
876 | associated with the 5th directory entry | |
877 | (numbered from zero) | |
878 | of the current | |
879 | .IR inode. | |
880 | The first logical block of the file | |
881 | is then displayed in | |
882 | .IR ASCII . | |
883 | .TP 16 | |
884 | > :sb | |
885 | displays the superblock of this file system. | |
886 | .TP 16 | |
887 | > 1:cg?c | |
888 | displays cylinder group information and summary | |
889 | for cylinder group 1. | |
890 | .TP 16 | |
891 | > 2:inode; 7:dir=3 | |
892 | changes the i-number for the | |
893 | seventh directory slot in the root directory to 3. | |
894 | .TP 16 | |
895 | > 7:dir:nm="name" | |
896 | changes the name field | |
897 | in the directory slot to | |
898 | .IR name . | |
899 | .TP 16 | |
900 | > 2:db:block,*?d | |
901 | displays the third block of the current | |
902 | .IR inode | |
903 | as directory entries. | |
904 | .TP 16 | |
905 | > 3c3:fragment,20:fill=0x20 | |
906 | get fragment 3c3 and fill 20 | |
907 | .IR type | |
908 | elements | |
909 | with 0x20. | |
910 | .TP 16 | |
911 | > 2050=0xffff | |
912 | set the contents of address 2050 to 0xffffffff. | |
913 | 0xffffffff may be truncated depending on the current | |
914 | .IR type. | |
915 | .TP 16 | |
916 | > 1c92434="this is some text" | |
917 | will place the | |
918 | .IR ASCII | |
919 | for the string at | |
920 | 1c92434. | |
921 | .SH SEE ALSO | |
922 | fsck(8), dir(4), fs(5). | |
923 | .SH BUGS | |
924 | .PP | |
925 | Extreme caution is advised in | |
926 | determining the availability | |
927 | of | |
928 | .IR fsdb | |
929 | on the system. | |
930 | Suggested permissions are 600 and | |
931 | owned by bin. |