A Luser's Guide to ITS Disclaimer: I write this as friendly advice to new users of ITS, and the term "[1]luser" is not meant degeneratively. I'm still discovering ITS myself, and while I know PDP-10 assembly language, [2]TECO and DDT from my TOPS-20 days, I'm probably still an ITS luser myself. I'm working on it, though... [2] http://www.hactrn.net/sra/alice/ ITS is an open system [3]Alice's PDP-10 [with feelin'] You can hack anything you want, with TECO and DDT. You can hack anything you want, with TECO and DDT. $U in and begin to hack. Twiddle bits in a core dump and write 'em back. You can hack anything you want, with TECO and DDT. (But be careful typing <RET>) With TECO and DDT! [3] http://www.hactrn.net/sra/alice/alices.pdp10 It is important to understand right away that ITS is a very open system. While you may not be able to log in without an account, you can still read people's mail after just connecting to the system, and once you are logged in "you can hack anything you want with TECO and DDT", or indeed shoot yourself in the foot rather severely. There is no file protection. If you write/delete files in some of the system directories, this is logged, but this is about it. Luckily files can exist in more than one generation/version, so if you overwrite a file the old one (may) still be around. There is little process protection. Although processes can't poke eachother by mistake, users can, e.g., take over other users' processes, debug them, etc. This is good, since it lets hackers help others. There is little system protection. For example, anyone (logged in) can take the system down by using the [4]LOCK program. The minimum warning time is five minutes, allowing others to undo the shutdown if necessary, but since all programs can be patched at runtime, the limit can also be circumvented (if you know how). So some "[5]ethics" are necessary. Try not to break things, but do explore and experiment! And don't forget to have fun! [5] http://hacks.mit.edu/Hacks/misc/ethics.html What not to do * Don't overwrite files in other directories than your own. If you do it anyway, please let someone know so they can perhaps do something about it. ([6]Here is a piece of TECO for your EMACS init file to help against involuntary disasters.) * Please try to shut the system down nicely if you have to, instead of crashing it (or its host system). This minimizes the risk of filesystem breakage. [6] http://victor.se/bjorn/its/emacs.php What to do 1. Connect using Telnet, or preferrably [7]Supdup. [8]Supdup (the Super-Duper Image Telnet protocol) allows ITS programs (such as EMACS and PEEK) to display faster and better on your terminal (window) than using Telnet. 2. If you don't get a * prompt, press 〈CTRL〉-Z (henceforth ^Z) to get attention from the ITS system. 3. You are now talking to PWORD, a replacement for HACTRN which allows only a small number of commands. Try pressing ?. If you want to log in, use the :LOGIN command. Once you have successfully logged in, you're talking to the real HACTRN. 4. You will notice that what we these days mean by "commands" start with : (colon). Once you have logged in, you can also use DDT commands such as ^A, $L (where $ means 〈ESCAPE〉), etc. Please study the [9]DDT Primer and Reference Manual (see below), and for the gory details, the file [10].INFO.;DDTORD > - here are some quick basics: + ^Z stops the program which is running. To let it continue, use :PROCEED or $P (that's 〈ESCAPE〉 P). + ^D forgets what you typed so far on the input line. Something like ^U in bash, but doesn't erase the line, just prints XXX?. (And ^U does something entirely different in HACTRN.) + ^^ ([11]〈CTRL〉-^) is the escape character for Supdup (at least the C version). + ^_ is (probably) the Help character in EMACS, but also a special [12]escape character in ITS, so you have to type it twice! + The key marked 〈BACKSPACE〉 or 〈RUBOUT〉 or 〈DELETE〉 is different from ^H (〈CTRL〉-H). The first typically removes the previous character. The latter (^H) typically moves backwards through a file, or in DDT, resumes the current program (but for full details, try :DDTDOC ^H). 5. Some useful commands (not case sensitive, but traditionally in upper case): [7] http://victor.se/bjorn/its/supdup.tar.gz [8] http://victor.se/bjorn/its/supdup.php [9] http://victor.se/bjorn/its/ddt.html [10] http://victor.se/bjorn/its/ddtord.html [11] http://victor.se/bjorn/its/telnet.sng [12] http://victor.se/bjorn/its/itstty_a5.text :DDTDOC Shows documentation for DDT commands (i.e. not for programs). Try :DDTDOC ^F to get documentation for the ^F command, or just :DDTDOC for interactive mode. :WHAT Answers questions, both silly and useful. Try :WHAT is this or :WHAT source for NAME, or :WHAT bus (for MIT buses in '87 or so). :LUSER This command calls for help from more knowledgable hackers, if any are logged in. :SEND :SEND user message^C sends a message to user. If the user is logged in, the message is displayed on his/her terminal. If you get a message and don't see it or want to re-read it, press ^A in HACTRN. (:SEND is similar to write in u*ix, but better.) :KILL kills the current "job" (subprocess). To see which jobs you have, use :JOBS (or $$V); to switch between them, use :JOB (or $J) (or :JOB jobname or jobname$J). :EMACS This is the original EMACS! Not really as powerful as the follow-ups (FSF Emacs, XEmacs), but leaner and meaner. Written in the "write-only" language TECO. Try M-x Teach Emacs to learn. :PEEK Similar to top in u*ix, but show more kinds of information. Try pressing ?. Pressing Q quits. :FINGER, :F, :NAME, :N, :WHEN, :WHOIS These commands show information about who is logged in, and take an optional user name as argument, showing info also about non-logged-in users. :PRINT :PRINT file prints file on your terminal, similar to more in u*ix. Try :PRINT HACK;MD NEWS! :LISTF lists the files in the default directory. Also try :LF, which is different. + For a fun introduction to more commands, read [13]The HACTRN by Guy L. Steele. + For a gentle introduction to more commands, read [14]Getting Started Computing at the AI Lab (PDF new 101222] ) especially chapter 6. + For a serious introduction to DDT/HACTRN, read the [15]DDT Primer and Reference Manual, e.g. by using the command :INFO DDT. + For historical information, read the [16]Wikipedia article. 6. Directories are flat (i.e., no subdirectories). Initially you'll share home directory with other users. Do M-x List Directories in EMACS to list them. 7. File names have four components. Each can be up to six characters. 1. Device, ended by : (colon), e.g. DSK: or MD: (ITS host name) 2. Directory, ended by ; (semicolon), e.g. USERS1;, .TEMP.;, or HACK;. 3. "FN1" (File Name 1), the "main file name". 4. "FN2" (File Name 2), separated from FN1 by a space. FN2 is used for file type (e.g. BIN) or more often for file version/generation. Example: "MD:.INFO.;DDTORD >". Sometimes filenames are shown in another order, as DIR; DEV: FN1 FN2. 8. About file versions: + If you write a file FOO >, you create the next version of FOO. If FOO 41 exists, you create FOO 42. + If you read a file FOO >, you read the latest version (or largest version number). + The FN2 "<" represents the oldest (lowest) version. + So you may need to clean up once in a while, e.g. by using the H command in DIRED (in EMACS). 9. If your connection is lost and you connect again, your old job (set of processes) is probably still around. + Sometimes ITS detects your disconnection, "detaches" your old job from its "terminal", and offers you to attach it when you log in the next time. If you get prompted --Attach Your Detached Tree-- when you log in, just press 〈SPACE〉 to say "yes" (or 〈RUBOUT〉 for "no"). + Sometimes ITS doesn't detect your disconnection. When you log in again, your visible username will have a "0" (or "1", "2" etc) at the end, and if you try :FINGER you see your old job without the "0". You can then "reattach" the old job (replace your new job with the old one) by using the command :REATTACH uname/K where uname is your username (without the "0" etc). [13] http://victor.se/bjorn/its/hactrn.php [14] http://victor.se/bjorn/its/AI_WP_235.pdf [15] http://victor.se/bjorn/its/ddt.html [16] http://en.wikipedia.org/wiki/Incompatible_Timesharing_System Quick Ref for various commands LOCK The program used for (among other things) shutting down the system cleanly. 1. Type :LOCK to start it, and it prompts you with _ (underscore). 2. To schedule a shutdown, give the command nDOWN, where n is the number of minutes to wait (minimum 5). 3. You are now asked if you really want the system to go down. Answer y if you really do. 4. You are then asked to enter a brief message to users, ended by ^C. Please do. The system will start shutting down when either the n minutes have passed, or all users have logged out. (Please do not quit KLH10 or shut down the host system until ITS has shut down completely, which is visible on its console or by observing the CPU usage of kn10-ks going up towards 100%.) To cancel a shutdown, use the REVIVE command of LOCK. _________________________________________________________ From HUMOR;JARGON 68 [August 1983]: LUSER See USER. USER n. A programmer who will believe anything you tell him. One who asks questions. Identified at MIT with "loser" by the spelling "luser". See REAL USER. [Note by GLS: I don't agree with RF's definition at all. Basically, there are two classes of people who work with a program: there are implementors (hackers) and users (losers). The users are looked down on by hackers to a mild degree because they don't understand the full ramifications of the system in all its glory. (A few users who do are known as real winners.) It is true that users ask questions (of necessity). Very often they are annoying or downright stupid.] _________________________________________________________ © [17]Björn Victor [18]<Bjorn@Victor.se> [17] http://victor.se/bjorn/ [18] mailto:Bjorn@Victor.se [19]Valid HTML 4.01! [20]Valid CSS! Latest update: December 22, 2010. [19] http://validator.w3.org/check?uri=http%3A%2F%2Fvictor.se%2Fbjorn%2Fits%2Fluser.php [20] http://jigsaw.w3.org/css-validator/validator?uri=http%3A%2F%2Fvictor.se%2Fbjorn%2Fits%2Fluser.php