{
    "content": [
        {
            "type": "text",
            "text": "# NNADMIN (man)\n\n## NAME\n\nnnadmin - nn database administration\n\n## SYNOPSIS\n\nnnadmin [ commands ]\n\n## DESCRIPTION\n\nnnadmin  is  a  control program for the nnmaster(1M) daemon which is responsible for building\nand maintaining the database used by the nn(1) news reader.\n\n## Sections\n\n- **NAME**\n- **SYNOPSIS**\n- **DESCRIPTION**\n- **SHELL ESCAPES**\n- **MAIN MENU** (11 subsections)\n- **THE MASTER MENU** (6 subsections)\n- **THE DUMP MENU** (5 subsections)\n- **THE LOG MENU** (17 subsections)\n- **THE GROUP MENU** (8 subsections)\n- **INDIVIDUAL GROUP FLAGS** (3 subsections)\n- **DATABASE STATISTICS DISPLAY**\n- **MASTER INDEX ENTRIES**\n- **RAW DATABASE DISPLAY**\n- **FILES**\n- **SEE ALSO**\n- **WARNINGS**\n- **BUGS**\n- **AUTHOR**\n\nUse structuredContent.sections for detailed options, examples, and full documentation.\n"
        }
    ],
    "structuredContent": {
        "command": "NNADMIN",
        "section": "",
        "mode": "man",
        "summary": "nnadmin - nn database administration",
        "synopsis": "nnadmin [ commands ]",
        "tldr_summary": null,
        "tldr_examples": [],
        "tldr_source": null,
        "flags": [],
        "examples": [],
        "see_also": [
            {
                "name": "nn",
                "section": "1",
                "url": "https://www.chedong.com/phpMan.php/man/nn/1/json"
            },
            {
                "name": "nncheck",
                "section": "1",
                "url": "https://www.chedong.com/phpMan.php/man/nncheck/1/json"
            },
            {
                "name": "nngrep",
                "section": "1",
                "url": "https://www.chedong.com/phpMan.php/man/nngrep/1/json"
            },
            {
                "name": "nntidy",
                "section": "1",
                "url": "https://www.chedong.com/phpMan.php/man/nntidy/1/json"
            },
            {
                "name": "nnquery",
                "section": "1M",
                "url": "https://www.chedong.com/phpMan.php/man/nnquery/1M/json"
            },
            {
                "name": "nnusage",
                "section": "1M",
                "url": "https://www.chedong.com/phpMan.php/man/nnusage/1M/json"
            },
            {
                "name": "nnmaster",
                "section": "8",
                "url": "https://www.chedong.com/phpMan.php/man/nnmaster/8/json"
            }
        ],
        "section_outline": [
            {
                "name": "NAME",
                "lines": 2,
                "subsections": []
            },
            {
                "name": "SYNOPSIS",
                "lines": 2,
                "subsections": []
            },
            {
                "name": "DESCRIPTION",
                "lines": 31,
                "subsections": []
            },
            {
                "name": "SHELL ESCAPES",
                "lines": 6,
                "subsections": []
            },
            {
                "name": "MAIN MENU",
                "lines": 2,
                "subsections": [
                    {
                        "name": "C)onf",
                        "lines": 3
                    },
                    {
                        "name": "E)xpire [Y]",
                        "lines": 3
                    },
                    {
                        "name": "G)roups",
                        "lines": 2
                    },
                    {
                        "name": "I)nit [Y]",
                        "lines": 2
                    },
                    {
                        "name": "L)og",
                        "lines": 2
                    },
                    {
                        "name": "M)aster",
                        "lines": 2
                    },
                    {
                        "name": "Q)uit",
                        "lines": 2
                    },
                    {
                        "name": "S)tat",
                        "lines": 3
                    },
                    {
                        "name": "U)pdate",
                        "lines": 2
                    },
                    {
                        "name": "V)alidate",
                        "lines": 5
                    },
                    {
                        "name": "W)akeup",
                        "lines": 8
                    }
                ]
            },
            {
                "name": "THE MASTER MENU",
                "lines": 10,
                "subsections": [
                    {
                        "name": "F)iles",
                        "lines": 2
                    },
                    {
                        "name": "G)roup",
                        "lines": 3
                    },
                    {
                        "name": "K)ill",
                        "lines": 2
                    },
                    {
                        "name": "O)ptions",
                        "lines": 3
                    },
                    {
                        "name": "S)tat",
                        "lines": 3
                    },
                    {
                        "name": "T)race",
                        "lines": 2
                    }
                ]
            },
            {
                "name": "THE DUMP MENU",
                "lines": 3,
                "subsections": [
                    {
                        "name": "A)ll",
                        "lines": 2
                    },
                    {
                        "name": "E)mpty",
                        "lines": 6
                    },
                    {
                        "name": "I)gnored",
                        "lines": 3
                    },
                    {
                        "name": "N)on-empty",
                        "lines": 4
                    },
                    {
                        "name": "in(W)alid",
                        "lines": 2
                    }
                ]
            },
            {
                "name": "THE LOG MENU",
                "lines": 12,
                "subsections": [
                    {
                        "name": "A - admin to master communication",
                        "lines": 3
                    },
                    {
                        "name": "B - bad articles",
                        "lines": 3
                    },
                    {
                        "name": "C - collection statistics",
                        "lines": 4
                    },
                    {
                        "name": "E - fatal errors",
                        "lines": 4
                    },
                    {
                        "name": "M - nnmaster messages.",
                        "lines": 2
                    },
                    {
                        "name": "N - NNTP related messages",
                        "lines": 4
                    },
                    {
                        "name": "O - old articles",
                        "lines": 3
                    },
                    {
                        "name": "R - reports",
                        "lines": 7
                    },
                    {
                        "name": "T - trace output",
                        "lines": 3
                    },
                    {
                        "name": "U - usage statistics",
                        "lines": 9
                    },
                    {
                        "name": "V - validation errors",
                        "lines": 3
                    },
                    {
                        "name": "X - expire statistics",
                        "lines": 9
                    },
                    {
                        "name": "G)roup",
                        "lines": 2
                    },
                    {
                        "name": "(1-9) tail",
                        "lines": 2
                    },
                    {
                        "name": "space",
                        "lines": 2
                    },
                    {
                        "name": "(.) all",
                        "lines": 2
                    },
                    {
                        "name": "(@) clean [Y]",
                        "lines": 4
                    }
                ]
            },
            {
                "name": "THE GROUP MENU",
                "lines": 7,
                "subsections": [
                    {
                        "name": "D)ata",
                        "lines": 3
                    },
                    {
                        "name": "E)xpire",
                        "lines": 2
                    },
                    {
                        "name": "F)iles",
                        "lines": 2
                    },
                    {
                        "name": "G)roup",
                        "lines": 2
                    },
                    {
                        "name": "H)eader",
                        "lines": 2
                    },
                    {
                        "name": "R)ecollect",
                        "lines": 5
                    },
                    {
                        "name": "V)alidate",
                        "lines": 2
                    },
                    {
                        "name": "Z)ap [Y]",
                        "lines": 4
                    }
                ]
            },
            {
                "name": "INDIVIDUAL GROUP FLAGS",
                "lines": 18,
                "subsections": [
                    {
                        "name": "C)ontrol",
                        "lines": 4
                    },
                    {
                        "name": "D)irectory missing",
                        "lines": 7
                    },
                    {
                        "name": "M)oderated",
                        "lines": 7
                    }
                ]
            },
            {
                "name": "DATABASE STATISTICS DISPLAY",
                "lines": 20,
                "subsections": []
            },
            {
                "name": "MASTER INDEX ENTRIES",
                "lines": 30,
                "subsections": []
            },
            {
                "name": "RAW DATABASE DISPLAY",
                "lines": 41,
                "subsections": []
            },
            {
                "name": "FILES",
                "lines": 18,
                "subsections": []
            },
            {
                "name": "SEE ALSO",
                "lines": 3,
                "subsections": []
            },
            {
                "name": "WARNINGS",
                "lines": 8,
                "subsections": []
            },
            {
                "name": "BUGS",
                "lines": 4,
                "subsections": []
            },
            {
                "name": "AUTHOR",
                "lines": 6,
                "subsections": []
            }
        ],
        "sections": {
            "NAME": {
                "content": "nnadmin - nn database administration\n",
                "subsections": []
            },
            "SYNOPSIS": {
                "content": "nnadmin [ commands ]\n",
                "subsections": []
            },
            "DESCRIPTION": {
                "content": "nnadmin  is  a  control program for the nnmaster(1M) daemon which is responsible for building\nand maintaining the database used by the nn(1) news reader.\n\nnnadmin allows you to display extracts from the log file, display the \"raw\" contents  of  the\ndatabase,  make  consistency  checks on the database, instruct the running nnmaster to expire\none or more groups, alter the options of the running nnmaster, and much more.\n\nnnadmin runs in two modes: interactive and non-interactive.\n\nIn interactive mode, simple one line menus are used to show the  available  operations  which\nare then selected by typing the letter associated with the command (normally the first letter\nin the command name).\n\nIn non-interactive mode, the commands argument will be used as a series of key-strokes  which\nare  interpreted exactly as if they were typed in from the keyboard in interactive mode.  For\nexample, to stop the nnmaster, the following invocation of nnadmin can be used:\nnnadmin MK\nwhich will select the (M)aster submenu from the main menu, and then the (K)ill entry from the\nsubmenu.\n\nIn  non-interactive mode, the menus are not displayed and the commands are not echoed!  nnad‐\nmin will exit when there are no more key-strokes to be read from the commands  argument.   It\nis  not  possible to specify a group name in the commands argument, so the functionalities of\nnnadmin that relates to specific groups are only available in interactive mode.\n\nSome \"dangerous\" commands will require that you confirm them by following them by \"Y\" on  the\ncommand  line.   The  most  noteable are IY (initialize database) and EY (expire all groups).\nThese commands will be marked with a [Y] following the command name.\n\nYou can also invoke an interactive nnadmin using the :admin command in nn.\n",
                "subsections": []
            },
            "SHELL ESCAPES": {
                "content": "At all prompts you can hit `!' to spawn a subshell.\n\nThe working directory of the subshell will be changed to the database directory when  invoked\nfrom  the MASTER or DUMP menus, and it will changed to the group's spool directory (if it ex‐\nists) when invoked from the GROUP menu.\n",
                "subsections": []
            },
            "MAIN MENU": {
                "content": "From the main menu (identified by the ADMIN prompt) you can select the following operations:\n",
                "subsections": [
                    {
                        "name": "C)onf",
                        "content": "Show current configuration parameters such as directories,  files,  programs,  network\nusage, etc.\n"
                    },
                    {
                        "name": "E)xpire [Y]",
                        "content": "Send  a  request to the nnmaster daemon to schedule (and run) expire for all groups in\nthe database.\n"
                    },
                    {
                        "name": "G)roups",
                        "content": "Enter the GROUP submenu.\n"
                    },
                    {
                        "name": "I)nit [Y]",
                        "content": "Send a request to the nnmaster daemon to recollect all groups in the database.\n"
                    },
                    {
                        "name": "L)og",
                        "content": "Enter the LOG submenu.\n"
                    },
                    {
                        "name": "M)aster",
                        "content": "Enter the MASTER submenu.\n"
                    },
                    {
                        "name": "Q)uit",
                        "content": "Quit nnadmin.\n"
                    },
                    {
                        "name": "S)tat",
                        "content": "Print general statistics about the database.  See the section on  Database  Statistics\nbelow.\n"
                    },
                    {
                        "name": "U)pdate",
                        "content": "Update the incore copy of the database master index.\n"
                    },
                    {
                        "name": "V)alidate",
                        "content": "Make  a thorough consistency check on the database.  If inconsistencies are found in a\ngroup, you will be asked whether a request should be sent to the  nnmaster  daemon  to\nrecollect  the group (in non-interactive mode, requests will be sent automatically for\nall corrupted groups).\n"
                    },
                    {
                        "name": "W)akeup",
                        "content": "Send a wakeup signal to the nnmaster daemon to have it receive messages  sent  to  it,\nperform the required actions, and then collect articles as necessary.\n\nZ (silent validation)\nThis  operation  is identical to the Validate operation, expect that no output is pro‐\nduced during the consistency check; this operation is used by the nnmaster to  execute\nthe -C option.\n"
                    }
                ]
            },
            "THE MASTER MENU": {
                "content": "The  master menu (identified by the MASTER prompt) provides access to overall database infor‐\nmation, and to send control messages to the nnmaster daemon.\n\nC)heck In interactive mode and in verbose batch mode (nnadmin MC), print  a  message  telling\nwhether  nnmaster  is  running or not.  In silent batch mode (nnadmin =MC) exit with a\nstatus code of 0 if nnmaster is running and 1 otherwise; this may be useful is  admin‐\nistrative scripts.\n\nD)ump  Enter the DUMP submenu.\n",
                "subsections": [
                    {
                        "name": "F)iles",
                        "content": "Print a listing (using ls(1)) of all the data and index files in the database.\n"
                    },
                    {
                        "name": "G)roup",
                        "content": "Print  the master index entry for a single group identified by its internal group num‐\nber.\n"
                    },
                    {
                        "name": "K)ill",
                        "content": "Stop the nnmaster when it has finished its current task.\n"
                    },
                    {
                        "name": "O)ptions",
                        "content": "Change the runtime options of the running nnmaster daemon.  Currently, only the  value\nof the -r and -e options can be modified.\n"
                    },
                    {
                        "name": "S)tat",
                        "content": "Print  general  statistics about the database.  See the section on Database Statistics\nbelow.\n"
                    },
                    {
                        "name": "T)race",
                        "content": "Turn the trace option -t on or off in the running nnmaster.\n"
                    }
                ]
            },
            "THE DUMP MENU": {
                "content": "The dump menu (identified by the DUMP prompt) allows you to print the master index entry  for\nvarious selections of groups in the database.\n",
                "subsections": [
                    {
                        "name": "A)ll",
                        "content": "Print all groups in the database.\n"
                    },
                    {
                        "name": "E)mpty",
                        "content": "Print the empty groups in the database.\n\nH)oles Print  the  groups  where  the `min' field in the active file is not the first article\nsaved in the database (because it doesn't exist or because  it  is  ignored  for  some\nother reason, e.g. bad or old).\n"
                    },
                    {
                        "name": "I)gnored",
                        "content": "Print  groups  which  are  ignored, either in the GROUPS file or because of some other\ncondition (mainly no spool directory).\n"
                    },
                    {
                        "name": "N)on-empty",
                        "content": "Print the non-empty groups in the database.\n\nV)alid Print the groups which are present in the active file.\n"
                    },
                    {
                        "name": "in(W)alid",
                        "content": "Print the groups in the database which are not present in the active file.\n"
                    }
                ]
            },
            "THE LOG MENU": {
                "content": "The log menu (identified by the LOG prompt) enables you the extract specific entries from the\nlog file, and to truncate the log file.\n\nThe entries in the log file share the following format:\n<class>: <date> <time> (<user>): <message>\nwhere  <class> identifies the message class, the <date> and <time> specify when the entry was\nmade, the <user> specifies who created the entry (the letter \"M\" denote  the  nnmaster),  and\nthe <message> is the text of the entry.\n\nTo  extract the log file entries of a specific class, simply enter the letter identifying the\nclass:\n",
                "subsections": [
                    {
                        "name": "A - admin to master communication",
                        "content": "This class of messages are related to the sending of messages from an nnadmin  program\nto the nnmaster daemon.\n"
                    },
                    {
                        "name": "B - bad articles",
                        "content": "Reports  about  bad  articles which have been ignored or removed (controlled by the -b\nand -B options to nnmaster).\n"
                    },
                    {
                        "name": "C - collection statistics",
                        "content": "Statistics about collection of new articles.  The message has the format:\nCollect: nnn art, ppp gr, ttt s\nmeaning that nnn articles in ppp groups were collected in ttt seconds (real time).\n"
                    },
                    {
                        "name": "E - fatal errors",
                        "content": "Fatal errors encountered during operation.  These errors require  manual  intervention\nto be fixed (some of the fatal errors occur if thing that \"cannot happen\" happens any‐\nway, and may indicate a bug in the software).\n"
                    },
                    {
                        "name": "M - nnmaster messages.",
                        "content": "Master start/stop messages.\n"
                    },
                    {
                        "name": "N - NNTP related messages",
                        "content": "Various messages related to the NNTP part of the nnmaster, mostly about  lost  connec‐\ntions  and  failed attempts to connect to the NNTP server.  These messages should only\nappear if you use NNTP, and your NNTP server is down for some reason.\n"
                    },
                    {
                        "name": "O - old articles",
                        "content": "Reports related to ignoring (and removing) old articles  when  building  the  database\n(controlled by the -O and -B options to nnmaster).\n"
                    },
                    {
                        "name": "R - reports",
                        "content": "Non-fatal  error  which  enables the nnmaster to continue operation, but may prevent a\nuser to run nn (file access problems).  Reported problems should be checked.  The most\ncommon report message will probably be\nsome.group: no directory\nwhich  indicates  that the spool directory for that group has disappeared (most likely\nbecause it has been rmgroup'ed).\n"
                    },
                    {
                        "name": "T - trace output",
                        "content": "Messages produced as a result of using the -t option on the nnmaster.  This is primar‐\nily for debugging purposes.\n"
                    },
                    {
                        "name": "U - usage statistics",
                        "content": "If nn is compiled with the STATISTICS option enabled, an entry will be made in the log\nfile every time a user has spent more than five minutes on news reading.  The  message\nwill have the following format:\nUSAGE hours.minutes\nSince it is possible to suspend nn, or leave the terminal while nn is active, nn tries\nto be intelligent when it calculates the usage time so it will reflect the actual time\nspent  on  news reading.  The usage statistics can be summarized using the nnusage(1M)\nprogram.\n"
                    },
                    {
                        "name": "V - validation errors",
                        "content": "When inconsistencies are detected in the database during validation, an entry for each\ncorrupted group will be entered in the log file.\n"
                    },
                    {
                        "name": "X - expire statistics",
                        "content": "Messages  similar  to the Collect statistics reporting the result of running expire on\nthe database.  Reports related to ignoring, removing, renumbering, and reactivation of\ngroups are also given class X.\n\nTo  extract  a  specific  entry class, grep(1) is used, so it may take a while on a large log\nfile.\n\nThere are also a few special operations on the log file:\n"
                    },
                    {
                        "name": "G)roup",
                        "content": "Extract the entries which refers to a specified group.\n"
                    },
                    {
                        "name": "(1-9) tail",
                        "content": "Invoke tail(1) to extract the last 10-90 entries in the log file.\n"
                    },
                    {
                        "name": "space",
                        "content": "Equivalent to 1 (list last 10 lines of log).\n"
                    },
                    {
                        "name": "(.) all",
                        "content": "Display the complete log file.\n"
                    },
                    {
                        "name": "(@) clean [Y]",
                        "content": "Move the Log file to Log.old, and create a new empty Log file.  If you want  to  clean\nout  the  old log file as well, simply repeat the clean operation (this will result in\nan empty Log.old file.)\n"
                    }
                ]
            },
            "THE GROUP MENU": {
                "content": "When you enter the group menu (identified by the GROUP prompt), nnadmin will prompt  you  for\nthe  name of a news group, which you can enter with the usual completion feature described in\nthe nn(1) manual.  You can then perform the following operations on the specified group:\n\nC)learflag\nClear a group specific flag.  See the section on group flags below.\n",
                "subsections": [
                    {
                        "name": "D)ata",
                        "content": "Dump the contents of the data file containing the extracted article  headers  for  the\ngroup.\n"
                    },
                    {
                        "name": "E)xpire",
                        "content": "Request the nnmaster to run expire on the group.\n"
                    },
                    {
                        "name": "F)iles",
                        "content": "List the files (using ls(1)) containing the index and data for the group.\n"
                    },
                    {
                        "name": "G)roup",
                        "content": "Switch to another group.\n"
                    },
                    {
                        "name": "H)eader",
                        "content": "Dump the master index entry for the group.\n"
                    },
                    {
                        "name": "R)ecollect",
                        "content": "Request the nnmaster to recollect all articles in the group.\n\nS)etflag\nSet a group specific flag.  See the section on group flags below.\n"
                    },
                    {
                        "name": "V)alidate",
                        "content": "Perform validation on the group's database information.\n"
                    },
                    {
                        "name": "Z)ap [Y]",
                        "content": "Remove group from news system - this will be done by running the rmgroup program which\nmust reside in the NEWSLIB directory.  Of course, this should be done with great cau‐\ntion.\n"
                    }
                ]
            },
            "INDIVIDUAL GROUP FLAGS": {
                "content": "You  can set and clear the following flags for individual groups to control the future behav‐\niour of nnmaster on that group.\n\nNotice that these flags will be reset to their default value if you reinitialize the database\nusing  nnmaster  -I.  To change these flags permanently, they should be set or cleared in the\nGROUPS file.\n\nA)lwaysdigest\nNormally, nnmaster will only attempt to split digests into individual articles  if  it\ncan easily recognize an article as a digest.  This requires that the word \"digest\" ap‐\npears somewhere in the subject line, and that one of the first few lines in  the  body\nof the article loosely matches the subject.  A few news groups frequently receives di‐\ngests which break one or both of these requirements.  To have nnmaster split these di‐\ngests  into  individual  articles  anyway, you can turn on the \"always digest\" flag on\nthese news groups.  This will instruct nnmaster to treat all articles in the group  as\ndigests  (naturally,  articles  which are then found not to contain other articles are\nstill treated as normal articles.)\n",
                "subsections": [
                    {
                        "name": "C)ontrol",
                        "content": "This is a special flag for the control group.  It  indicates  that  the  \"Newsgroups:\"\nfield in the article header cannot be trusted (it does not specify the groups to which\nthe article has been posted.)\n"
                    },
                    {
                        "name": "D)irectory missing",
                        "content": "This flag indicates that the spool directory for the news group cannot be  found  (the\ngroup has probably been removed with rmgroup(1M)).  It is set automatically be the nn‐\nmaster if it cannot access the directory.  When the flag is set,  nnmaster  completely\nignores  the  group,  so it can be used to disable news collection in specific groups.\nIf you recreate the group or the directory manually, you must also clear this flag  to\nhave the nnmaster recognize the group again.\n"
                    },
                    {
                        "name": "M)oderated",
                        "content": "Indicates  that  the  group is moderated.  This flag is normally initialized automati‐\ncally from the active file, and it should not be changed lightly.\n\nN)everdigest\nThis is the opposite of the \"always digest\" flag; when set, the  nnmaster  will  never\nattempt to split any articles in that group into subarticles.\n"
                    }
                ]
            },
            "DATABASE STATISTICS DISPLAY": {
                "content": "When  you  select the (S)tat operation in the main or master menus, you will get some general\nstatistics about the database:\n\ninitialized\nThe time when the database was last rebuild using nnmaster -I.\n\nlastscan, lastsize\nThe time stamp on the active file and its size the last time the nnmaster read it.\n\nno of groups\nThe total number of groups in the database.\n\nArticles\nThe total number of articles in all groups.  This is not an exact number,  because  it\nwill count split digests as a single article (making the number too small), and it may\ncount some articles that have been expired (making the number too large).\n\nDisk usage\nThe total number of (1 kbyte) disk blocks occupied by the database.\n",
                "subsections": []
            },
            "MASTER INDEX ENTRIES": {
                "content": "The master index entries displayed when you select the (H)eader operation in the  master  and\ngroup menus contain the following information:\n\ngroupname  groupnumber\nThe  first  line of the display will show the name of the group and the internal group\nnumber which is used to identify the group in the database.\n\nfirst/last art\nThis is the numbers of the first and last article that are  currently  stored  in  the\ndatabase.\n\nactive info\nThis  is the numbers of the first and last article in the news system as read from the\nactive file.  They will normally match the numbers above, but they  may  differ  while\nthe  nnmaster is working on the group (or it has not yet collected all the articles in\nthe group).\n\nOffsets: index->..., data->...\nThese values show the starting position for the next write operation on the index  and\ndata  files.   They  are  primarily used for consistency checking and recovery after a\nsystem crash, but after an \"expire by rewrite\" operation (expire method  2)  which  is\nperformed \"in-situ\", the data and index files may physically be longer than the actual\ndata stored in them.\n\nFlags:\nThis shows the current flags set for this group.  If no flags are set,  the  field  is\nomitted from the display.  One extra flag which was not explained above is the BLOCKED\nflag; it is a temporary locking flag set on a group by the nnmaster while it is updat‐\ning the database files for that group to prevent nn clients to access that group.\n",
                "subsections": []
            },
            "RAW DATABASE DISPLAY": {
                "content": "When  you  select  the (D)ata operation on the group menu, you will get a combined display of\nthe raw data and index files for that group.  The index file contains a single 32  bit  value\nfor each existing article number.  This value is an offset into the data file pointing to the\nheader for the corresponding article.\n\nWhen nn want to access the article from number N to the last article, it looks up the  offset\nfor article number N in the index file, and uses this as the starting point for reading arti‐\ncle header information in the data file.  It then simply reads to the end of the data file in\nwhich  the  article headers for articles number N+1, N+2, and so on follows immediately after\nthe header for article number N.\n\nThe article header information is presented in a very terse form; each of  the  output  lines\nare described below for reference purposes:\n\noffset = xxxx    , article # = nnnnn   (type)\nThis shows the offset into the data file and the article number.  The offset is stored\nin the index file for quick access.  If no type is printed it  is  a  normal  article.\nOther types are: \"digest header\" and \"digest sub-article\".\n\nxpost(count):  nnn, nnn, nnn, ...\nCross-postings to other groups are encoded as a list of internal group numbers.\n\nts=nn hp=nn fp=nn lp=nn ref=nn[+Re] lines=nn\nThese values are used by nn to sort, present, and access an article:\nts  is  the time stamp on the article; it is a simple encoding of the posting date and\ntime found in the Date: field.\nhp, fp, and lp are offsets into the file containing the article text: the header posi‐\ntion,  first text position, and last text position.  The first will be zero for normal\narticles, but not for articles in a split digest.  The  last  will  be  equal  to  the\nlength of the file for normal articles, but not inside digests.\nref  is the number of references on the Reference: line.  If \"+Re\" follows the number,\nthe subject line contained a \"Re:\" prefix which has been removed.\n\nSender(length): name\nThe name of the sender in \"ready to print\" format, i.e. reduced to  16  characters  as\nexplained in the nn manual.\n\nSubj(length): subject\nThis is the full subject line from the article header (except for Re: prefixes in var‐\nious formats).\n",
                "subsections": []
            },
            "FILES": {
                "content": "The $db, $lib, and $news used below are synonyms for the DBDIRECTORY, LIBDIRECTORY, and the\nnews system's lib directories respectively.\n$db/MASTER        Database master index\n$db/GROUPS        News group names in MASTER file order\n$db/DATA/nnn.x    Index file for group number nnn\n$db/DATA/nnn.d    Data file for group number nnn\n$master/GATE      Message channel from nnadmin to nnmaster\n$master/MPID      The process id of the nnmaster daemon.\n$Log              The log file (truncate it regularly!)\n\nThe  MASTER file contains a record for each news group, occurring in the same sequence as the\ngroup names in the GROUPS file.  The sequence also defines the group numbers used to identify\nthe files in the database and in a few other places.\n\nThe  GATE  file  will  be created by nnadmin when needed, and removed by nnmaster when it has\nread it.  Therefore, to send a message to the nnmaster requires that you are allowed to write\nin the $master directory.\n",
                "subsections": []
            },
            "SEE ALSO": {
                "content": "nn(1), nncheck(1), nngrep(1), nntidy(1)\nnnquery(1M), nnusage(1M), nnmaster(8)\n",
                "subsections": []
            },
            "WARNINGS": {
                "content": "The  GATE  file  is  created with the owner and modes of the user that runs nnadmin which may\ncause problems if the owner of the nnmaster process (normally \"news\") is not allowed to  read\nthe  created  GATE  file (a \"umask\" of 022 is ok.)  Unless you allow ordinary users to create\nfiles in the LIB directory where the GATE file resides, only the owner of the directory (nor‐\nmally  \"news\") and \"root\" can use nnadmin to send messages to the nnmaster.  However, to send\na wakeup signal to the master, anybody can run\nnnmaster -w\n",
                "subsections": []
            },
            "BUGS": {
                "content": "The user interface is completely out of line with the rest of the nn family, and the  way  to\nrun  nnadmin in the non-interactive mode is a bit bizarre.  This is not likely to change, be‐\ncause I believe there are more important things to do!\n",
                "subsections": []
            },
            "AUTHOR": {
                "content": "Kim F. Storm, Texas Instruments A/S, Denmark\nE-mail: storm@texas.dk\n\n\n\n4th Berkeley Distribution                    Release 6.6                                 NNADMIN(1m)",
                "subsections": []
            }
        }
    }
}