1CRSH(1) User Contributed Perl Documentation CRSH(1)
2
3
4
6 crsh - Cluster administration tool
7
9 This documentation is for version: 4.14
10
12 crsh [-a '<command>'] [-K <seconds>] [-q] [-c '<filename>'] [-x <cols>]
13 [-C '<filename>'] [--debug [[...] || <INTEGER>]] [-d] [-e
14 '<[user@]<host>[:port]>'] [--fillscreen] [-f '<font>'] [-h] [-L
15 '[tag]'] [-H] [-o '<STRING>'] [-p <port>] [-Q] [-y <rows>] [-s] [-r
16 '<filename>'] [-t '<STRING>'] [-g] [-T '<title>'] [-u] [-?] [-A] [-l
17 '<username>'] [-v]
18
20 The command opens an administration console and an xterm to all
21 specified hosts. Any text typed into the administration console is
22 replicated to all windows. All windows may also be typed into
23 directly.
24
25 This tool is intended for (but not limited to) cluster administration
26 where the same configuration or commands must be run on each node
27 within the cluster. Performing these commands all at once via this
28 tool ensures all nodes are kept in sync.
29
30 Connections are opened using rsh which must be correctly installed and
31 configured.
32
33 Extra caution should be taken when editing files as lines may not
34 necessarily be in the same order; assuming line 5 is the same across
35 all servers and modifying that is dangerous. It's better to search for
36 the specific line to be changed and double-check all terminals are as
37 expected before changes are committed.
38
39 Further Notes
40 Please also see "KNOWN BUGS".
41
42 · The dotted line on any sub-menu is a tear-off, i.e. click on it and
43 the sub-menu is turned into its own window.
44
45 · Unchecking a hostname on the Hosts sub-menu will unplug the host
46 from the cluster control window, so any text typed into the console
47 is not sent to that host. Re-selecting it will plug it back in.
48
49 · If your window manager menu bars are obscured by terminal windows
50 see the "screen_reserve_XXXXX" options in the
51 $HOME/.clusterssh/config file (see "FILES").
52
53 · If the terminals overlap too much see the "terminal_reserve_XXXXX"
54 options in the $HOME/.clusterssh/config file (see "FILES").
55
56 · When using ClusterSSH on a large number of systems to connect to a
57 single system using an SSH utility (e.g. you issue a command to to
58 copy a file using scp from the remote computers to a single host)
59 and when these connections require authentication (i.e. you are
60 going to authenticate with a password), the sshd daemon at that
61 location may refuse connections after the number "MaxStartups"
62 limit in sshd_config is exceeded. (If this value is not set, it
63 defaults to 10). This is expected behavior; sshd uses this
64 mechanism to prevent DoS attacks from unauthenticated sources.
65 Please tune sshd_config and reload the SSH daemon, or consider
66 using the ~/.ssh/authorized_keys mechanism for authentication if
67 you encounter this problem.
68
69 · If client windows fail to open, try running:
70
71 "crsh -e {single host name}"
72
73 This will test the mechanisms used to open windows to hosts. This
74 could be due to either the "-xrm" terminal option which enables
75 "AllowSendEvents" (some terminals do not require this option, other
76 terminals have another method for enabling it - see your terminal
77 documentation) or the configuration of "rsh".
78
80 Some of these options may also be defined within the configuration
81 file. Default options are shown as appropriate.
82
83 --action '<command>', -a '<command>'
84 Run the command in each session, e.g. "-a 'vi /etc/hosts'" to drop
85 straight into a vi session.
86
87 --autoclose <seconds>, -K <seconds>
88 Number of seconds to wait before closing finished terminal windows.
89
90 --autoquit, -q
91 Toggle automatically quitting after the last client window has
92 closed (overriding the config file).
93
94 --cluster-file '<filename>', -c '<filename>'
95 Use supplied file as additional cluster file (see also "FILES").
96
97 --cols <cols>, -x <cols>
98 Number of columns
99
100 --config-file '<filename>', -C '<filename>'
101 Use supplied file as additional configuration file (see also
102 "FILES").
103
104 --debug [[...] || <INTEGER>]
105 Enable debugging. Either a level can be provided or the option can
106 be repeated multiple times. Maximum level is 9.
107
108 --dump-config, -d
109 Dump the current configuration in the same format used by the
110 $HOME/.clusterssh/config file.
111
112 --evaluate '<[user@]<host>[:port]>', -e '<[user@]<host>[:port]>'
113 Display and evaluate the terminal and connection arguments to
114 display any potential errors. The <hostname> is required to aid
115 the evaluation.
116
117 --fillscreen
118 Resize terminal windows to fill the whole available screen
119
120 --font '<font>', -f '<font>'
121 Specify the font to use in the terminal windows. Use standard X
122 font notation such as "5x8".
123
124 --help, -h
125 Show basic help text and exit
126
127 --list '[tag]', -L '[tag]'
128 List available cluster tags. Tag is optional. If a tag is provided
129 then hosts for that tag are listed. NOTE: format of output changes
130 when using "--quiet" or "-Q" option.
131
132 --man, -H
133 Show full help text (the man page) and exit
134
135 --options '<STRING>', -o '<STRING>'
136 Specify arguments to be passed to ssh when making the connection.
137 NOTE: options for ssh should normally be put into the ssh
138 configuration file; see "ssh_config" and $HOME/.ssh/config for more
139 details.
140
141 Default: -x -o ConnectTimeout=10
142
143 --port <port>, -p <port>
144 Specify an alternate port for connections.
145
146 --quiet, -Q
147 Do not output extra text when using some options
148
149 --rows <rows>, -y <rows>
150 Number of rows
151
152 --show-history, -s
153 Show history within console window.
154
155 --tag-file '<filename>', -r '<filename>'
156 Use supplied file as additional tag file (see also "FILES")
157
158 --term-args '<STRING>', -t '<STRING>'
159 Specify arguments to be passed to terminals being used.
160
161 --tile, -g
162 Toggle window tiling (overriding the config file).
163
164 --title '<title>', -T '<title>'
165 Specify the initial part of the title used in the console and
166 client windows.
167
168 --unique-servers, -u
169 Toggle connecting to each host only once when a hostname has been
170 specified multiple times.
171
172 --usage, -?
173 Show synopsis and exit
174
175 --use-all-a-records, -A
176 If a hostname resolves to multiple IP addresses, toggle whether or
177 not to connect to all of them, or just the first one (see also
178 config file entry).
179
180 --username '<username>', -l '<username>'
181 Specify the default username to use for connections (if different
182 from the currently logged in user). NOTE: will be overridden by
183 <user>@<host>.
184
185 --version, -v
186 Show version information and exit
187
189 The following arguments are supported:
190
191 [user@]<hostname>[:port] ...
192 Open an xterm to the given hostname and connect to the
193 administration console. The optional port number can be used if
194 the server is not listening on the standard port.
195
196 <tag> ...
197 Open a series of xterms defined by <tag> in one of the
198 supplementary configuration files (see "FILES").
199
200 Note: specifying a username on a cluster tag will override any
201 usernames defined in the cluster.
202
204 The following key shortcuts are available within the console window,
205 and all of them may be changed via the configuration files.
206
207 Control-Shift-plus
208 Open the 'Add Host(s) or Cluster(s)' dialogue box. Multiple host
209 or cluster names can be entered, separated by spaces.
210
211 Alt-n
212 Paste in the hostname part of the specific connection string to
213 each client, minus any username or port, e.g.
214
215 "scp /etc/hosts server:files/<Alt-n>.hosts"
216
217 would replace the <Alt-n> with the client's name in each window.
218
219 Alt-l
220 Paste in the hostname of the server cssh is being run on
221
222 Alt-q
223 Quit the program and close all connections and windows.
224
225 Alt-r
226 Retile all the client windows.
227
228 Alt-u
229 Paste in the username for the connection
230
231 Alt-1
232 Alt-2
233 Alt-3
234 Alt-4
235 Run the matching user defined macro on the server and send the
236 output to the client
237
239 Open up a session to 3 servers
240 $ crsh server1 server2 server3
241
242 Open up a session to a cluster of servers identified by the tag 'farm1'
243 and give the controlling window a specific title, where the tag is
244 defined in one of the default configuration files
245 $ crsh -T 'Web Farm Cluster 1' farm1
246
247 Connect to different servers using different login names. NOTE: this
248 can also be achieved by setting up appropriate options in the
249 configuration files. Do not close the console when the last terminal
250 exits.
251 $ crsh user1@server1 admin@server2
252
253 Open up a cluster defined in a non-default configuration file
254 $ crsh -c $HOME/cssh.extra_clusters db_cluster
255
256 Override the configured/default port to use 2022 instead
257 $ crsh -p 2022 server1 server2
258
260 /etc/clusters, $HOME/.clusterssh/clusters
261 These files contain a list of tags to server names mappings. When
262 any name is used on the command line it is checked to see if it is
263 a tag. If it is a tag, then the tag is replaced with the list of
264 servers. The format is as follows:
265
266 <tag> [user@]<server>[:port] [user@]<server>[:port] [...]
267
268 e.g.
269
270 # List of servers in live
271 live admin1@server1 admin2@server2:2022 server3 server4
272
273 All comments (marked by a #) and blank lines are ignored. Tags may
274 be nested, but be aware of using recursive tags as they are not
275 checked for.
276
277 Servers can be defined using expansion macros:
278
279 "webservers websvr{a,b,c}"
280
281 would be expanded to
282
283 "webservers websvra websvrb websvrc"
284
285 and
286
287 "webservers websvr{6..9}"
288
289 would be expanded to
290
291 "webservers websvr6 websvr7 websvr8 websvr9"
292
293 Extra cluster files may also be specified either as an option on
294 the command line (see "cluster-file") or in the user's
295 $HOME/.clusterssh/config file (see "extra_cluster_file"
296 configuration option).
297
298 NOTE: the last tag read overwrites any pre-existing tag of that
299 name.
300
301 NOTE: there is a special cluster tag called "default" - any tags or
302 hosts included within this tag will be automatically opened if
303 nothing is specified on the command line.
304
305 /etc/tags, $HOME/.clusterssh/tags
306 Very similar to clusters files but the definition is reversed. The
307 format is:
308
309 <host> <tag> [...]
310
311 This allows one host to be specified as a member of a number of
312 tags. This format can be clearer than using clusters files.
313
314 Extra tag files may be specified either as an option (see
315 "tag-file") or within the user's $HOME/.clusterssh/config file (see
316 "extra_tag_file" configuration option).
317
318 NOTE: All tags are added together
319
320 /etc/csshrc & $HOME/.clusterssh/config
321 This file contains configuration overrides - the defaults are as
322 marked. Default options are overwritten first by the global file,
323 and then by the user file.
324
325 NOTE: values for entries do not need to be quoted unless it is
326 required for passing arguments, e.g.
327
328 "terminal_allow_send_events="-xrm '*.VT100.allowSendEvents:true'""
329
330 should be written as
331
332 "terminal_allow_send_events=-xrm '*.VT100.allowSendEvents:true'"
333
334 auto_close = 5
335 Close terminal window after this many seconds. If set to 0
336 will instead wait on input from the user in each window before
337 closing. See also --autoclose and --no-autoclose
338
339 auto_quit = 1
340 Automatically quit after the last client window closes. Set to
341 0 to disable. See also --autoquit
342
343 auto_wm_decoration_offsets = no
344 Enable or disable alternative algorithm for calculating
345 terminal positioning.
346
347 comms = rsh
348 Sets the default communication method (initially taken from the
349 name of the program, but can be overridden here).
350
351 console_position = <null>
352 Set the initial position of the console - if empty then let the
353 window manager decide. Format is '+<x>+<y>', i.e. '+0+0' is
354 top left hand corner of the screen, '+0-70' is bottom left hand
355 side of screen (more or less).
356
357 external_command_mode = 0600
358 File mode bits for the external_command_pipe.
359
360 external_command_pipe = <null>
361 Define the full path to an external command pipe that can be
362 written to for controlling some aspects of ClusterSSH, such as
363 opening sessions to more clusters.
364
365 Commands:
366
367 "open <tag|hostname>" - open new sessions to provided tag or
368 hostname
369
370 "retile" - force window retiling
371
372 e.g.: "echo 'open localhost'" /path/to/external_command_pipe >>
373
374 external_cluster_command = <null>
375 Define the full path to an external command that can be used to
376 resolve tags to host names. This command can be written in any
377 language. The script must accept a list of tags to resolve and
378 output a list of hosts (space separated on a single line). Any
379 tags that cannot be resolved should be returned unchanged.
380
381 A non-0 exit code will be counted as an error, a warning will
382 be printed and output ignored.
383
384 If the external command is given a "-L" option it should output
385 a list of tags (space separated on a single line) it can
386 resolve
387
388 extra_cluster_file = <null>
389 Define an extra cluster file in the format of /etc/clusters.
390 Multiple files can be specified, separated by commas. Both ~
391 and $HOME are acceptable as a reference to the user's home
392 directory, e.g.
393
394 "extra_cluster_file = ~/clusters, $HOME/clus"
395
396 extra_tag_file = <null>
397 Define an extra tag file in the format of /etc/tags. Multiple
398 files can be specified, separated by commas. Both ~ and $HOME
399 are acceptable as a reference to the user's home directory,
400 e.g.
401
402 "extra_tag_file = ~/tags, $HOME/tags"
403
404 key_addhost = Control-Shift-plus
405 Default key sequence to open AddHost menu. See "KEY SHORTCUTS"
406 for more information.
407
408 hide_menu = 0
409 If set to 1, hide the menu bar (File, Hosts, Send, Help) in the
410 console.
411
412 key_clientname = Alt-n
413 Default key sequence to send cssh client names to client. See
414 "KEY SHORTCUTS" for more information.
415
416 key_localname = Alt-l
417 Default key sequence to send hostname of local server to
418 client. See "KEY SHORTCUTS" for more information.
419
420 key_paste = Control-v
421 Default key sequence to paste text into the console window.
422 See "KEY SHORTCUTS" for more information.
423
424 key_quit = Control-q
425 Default key sequence to quit the program (will terminate all
426 open windows). See "KEY SHORTCUTS" for more information.
427
428 key_retilehosts = Alt-r
429 Default key sequence to retile host windows. See "KEY
430 SHORTCUTS" for more information.
431
432 key_username = Alt-u
433 Default key sequence to send username to client. See "KEY
434 SHORTCUTS" for more information.
435
436 key_user_1 = Alt-1
437 key_user_2 = Alt-2
438 key_user_3 = Alt-3
439 key_user_4 = Alt-4
440 Default key sequence to send user defined macros to client. If
441 the matching macro_user_1 macro is undefined, the sequence is
442 passed straight to the terminal. See "KEY SHORTCUTS" for more
443 information.
444
445 macro_servername = %s
446 macro_hostname = %h
447 macro_username = %u
448 macro_newline = %n
449 macro_version = %v
450 macro_user_1 = %1
451 macro_user_2 = %2
452 macro_user_3 = %3
453 macro_user_4 = %4
454 Change the replacement macro used when either using a 'Send'
455 menu item, or when pasting text into the main console.
456
457 macro_user_1_command =
458 macro_user_2_command =
459 macro_user_3_command =
460 macro_user_4_command =
461 User defined macros - the macro is run through the shell on the
462 server and the output is sent to the client. For example,
463
464 "macro_user_1_command=echo echo macro_user_1"
465
466 would send the text C<echo macro_user_1> into the terminal session.
467
468 "macro_user_1_command=env | grep CSSH"
469
470 would send the CSSH environment variables to the client.
471
472 The following environment variables are set in the shell of the
473 macro process
474
475 "CSSH_SERVERNAME"
476 "CSSH_HOSTNAME"
477 "CSSH_USERNAME"
478 "CSSH_CONNECTION_STRING"
479 "CSSH_CONNECTION_PORT"
480 "CSSH_VERSION"
481 macros_enabled = yes
482 Enable or disable macro replacement. Note: this affects all
483 the "macro_*" variables above.
484
485 max_addhost_menu_cluster_items = 6
486 Maximum number of entries in the 'Add Host' menu cluster list
487 before scrollbars are used
488
489 max_host_menu_items = 30
490 Maximum number of hosts to put into the host menu before
491 starting a new column
492
493 menu_host_autotearoff = 0
494 menu_send_autotearoff = 0
495 When set to non-0 will automatically tear-off the host or send
496 menu at program start
497
498 mouse_paste = Button-2 (middle mouse button)
499 Default key sequence to paste text into the console window
500 using the mouse. See "KEY SHORTCUTS" for more information.
501
502 rsh = /path/to/rsh
503 ssh = /path/to/ssh
504 telnet = /path/to/telnet
505 Set the path to the specific binary to use for the
506 communication method, else uses the first match found in $PATH
507
508 rsh_args = <blank>
509 ssh_args = "-x -o ConnectTimeout=10"
510 telnet_args = <blank>
511 Sets any arguments to be used with the communication method
512 (defaults to ssh arguments).
513
514 NOTE: The given defaults are based on OpenSSH, not commercial
515 ssh software.
516
517 NOTE: Any "generic" change to the method (e.g., specifying the
518 ssh port to use) should be done in the medium's own config file
519 (see "ssh_config" and $HOME/.ssh/config).
520
521 screen_reserve_top = 0
522 screen_reserve_bottom = 60
523 screen_reserve_left = 0
524 screen_reserve_right = 0
525 Number of pixels from the screen's side to reserve when
526 calculating screen geometry for tiling. Setting this to
527 something like 50 will help keep cssh from positioning windows
528 over your window manager's menu bar if it draws one at that
529 side of the screen.
530
531 terminal = /path/to/xterm
532 Path to the X-Windows terminal used for the client.
533
534 terminal_args = <blank>
535 Arguments to use when opening terminal windows. Otherwise
536 takes defaults from $HOME/.Xdefaults or $HOME/.Xresources file.
537
538 terminal_chdir = 0
539 When non-0, set the working directory for each terminal as per
540 'terminal_chdir_path'
541
542 terminal_chdir_path = $HOME/.clusterssh/work/%s
543 Path to use as working directory for each terminal when
544 'terminal_chdir' is enabled. The path provided is passed
545 through the macro parser (see the section above on
546 'macros_enabled'.
547
548 terminal_font = 6x13
549 Font to use in the terminal windows. Use standard X font
550 notation.
551
552 terminal_reserve_top = 5
553 terminal_reserve_bottom = 0
554 terminal_reserve_left = 5
555 terminal_reserve_right = 0
556 Number of pixels from the terminal's side to reserve when
557 calculating screen geometry for tiling. Setting these will
558 help keep cssh from positioning windows over your scroll and
559 title bars or otherwise overlapping the windows too much.
560
561 terminal_colorize = 1
562 If set to 1 (the default), then "-bg" and "-fg" arguments will
563 be added to the terminal invocation command-line. The terminal
564 will be colored in a pseudo-random way based on the host name;
565 while the color of a terminal is not easily predicted, it will
566 always be the same color for a given host name. After a while,
567 you will recognize hosts by their characteristic terminal
568 color.
569
570 terminal_bg_style = dark
571 If set to "dark", the terminal background will be set to black
572 and the foreground to the pseudo-random color. If set to
573 "light", then the foreground will be black and the background
574 the pseudo-random color. If terminal_colorize is "zero", then
575 this option has no effect.
576
577 terminal_size = 80x24
578 Initial size of terminals to use. NOTE: the number of lines
579 (24) will be decreased when resizing terminals for tiling, not
580 the number of characters (80).
581
582 terminal_title_opt = -T
583 Option used with "terminal" to set the title of the window
584
585 terminal_allow_send_events = -xrm '*.VT100.allowSendEvents:true'
586 Option required by the terminal to allow XSendEvents to be
587 received
588
589 title = cssh
590 Title of windows to use for both the console and terminals.
591
592 unmap_on_redraw = no
593 Tell Tk to use the UnmapWindow request before redrawing
594 terminal windows. This defaults to "no" as it causes some
595 problems with the FVWM window manager. If you are experiencing
596 problems with redraws, you can set it to "yes" to allow the
597 window to be unmapped before it is repositioned.
598
599 use_all_a_records = 0
600 If a hostname resolves to multiple IP addresses, set to 1 to
601 connect to all of them, not just the first one found. See also
602 "--use-all-a-records"}
603
604 use_hotkeys = 1
605 Setting to 0 will disable all hotkeys.
606
607 use_natural_sort = 0
608 Windows will normally sort in alphabetical order, i.e.: host1,
609 host11, host2. Setting to this 1 will change the sort order,
610 i.e.: host1, host2, host11. NOTE: You must have the perl module
611 Sort::Naturally installed.
612
613 user = $LOGNAME
614 Sets the default user for running commands on clients.
615
616 window_tiling = 1
617 Perform window tiling (set to 0 to disable)
618
619 window_tiling_direction = right
620 Direction to tile windows, where "right" means starting top
621 left and moving right and then down, and anything else means
622 starting bottom right and moving left and then up
623
624 NOTE: The key shortcut modifiers must be in the form "Control",
625 "Alt" or "Shift", e.g. with the first letter capitalised and the
626 rest lower case. Keys may also be disabled individually by setting
627 to the word "null".
628
629 $HOME/.clusterssh/send_menu
630 This (optional) file contains items to populate the send menu. The
631 default entry could be written as:
632
633 <send_menu>
634 <menu title="Use Macros">
635 <toggle/>
636 <accelerator>ALT-p</accelerator>
637 </menu>
638 <menu title="Remote Hostname">
639 <command>%s</command>
640 <accelerator>ALT-n</accelerator>
641 </menu>
642 <menu title="Local Hostname">
643 <command>%s</command>
644 <accelerator>ALT-l</accelerator>
645 </menu>
646 <menu title="Username">
647 <command>%u</command>
648 <accelerator>ALT-u</accelerator>
649 </menu>
650 <menu title="Test Text">
651 <command>echo "ClusterSSH Version: %v%n</command>
652 </menu>
653 </send_menu>
654
655 Submenus can also be specified as follows:
656
657 <send_menu>
658 <menu title="Default Entries">
659 <detach>yes</detach>
660 <menu title="Hostname">
661 <command>%s</command>
662 <accelerator>ALT-n</accelerator>
663 </menu>
664 </menu>
665 </send_menu>
666
667 Caveats:
668
669 There is currently no strict format checking of this file.
670 The format of the file may change in the future
671 If the file exists, the default entry (Hostname) is not added
672
673 The following replacement macros are available (note: these can be
674 changed in the configuration file):
675
676 %s Hostname part of the specific connection string to each client,
677 minus any username or port
678
679 %u Username part of the connection string to each client
680
681 %h Hostname of server where cssh is being run from
682
683 %n "RETURN" code
684
685 NOTE: requires XML::Simple to be installed
686
688 If you have any ideas about how to fix the below bugs, please get in
689 touch and/or provide a patch.
690
691 · Swapping virtual desktops can cause a redraw of all the terminal
692 windows. This is due to a lack of distinction within Tk between
693 switching desktops and minimising/maximising windows. Until Tk can
694 tell the difference between the two events, there is no fix (apart
695 from rewriting everything directly in X).
696
698 If you have issues running crsh, first try:
699
700 "crsh -e [user@]<hostname>[:port]"
701
702 This performs two tests to confirm cssh is able to work properly with
703 the settings provided within the $HOME/.clusterssh/config file (or
704 internal defaults).
705
706 1. Test the terminal window works with the options provided
707
708 2. Test rsh works to a host with the configured arguments
709
710 Configuration options to watch for in ssh are:
711
712 · SSH doesn't understand "-o ConnectTimeout=10" - remove the option
713 from the $HOME/.clusterssh/config file
714
715 · OpenSSH-3.8 using untrusted ssh tunnels - use "-Y" instead of "-X"
716 or use "ForwardX11Trusted yes" in $HOME/.ssh/ssh_config (if you
717 change the default ssh options from "-x" to "-X")
718
720 A web site for comments, requests, bug reports and bug fixes/patches is
721 available at: <https://github.com/duncs/clusterssh>
722
723 If you require support, please run the following commands and create an
724 issue via: <https://github.com/duncs/clusterssh/issues>
725
726 "perl -V"
727
728 "perl -MTk -e 'print $Tk::VERSION,$/'"
729
730 "perl -MX11::Protocol -e 'print $X11::Protocol::VERSION,$/'"
731
732 "cat /etc/csshrc $HOME/.clusterssh/config"
733
734 Using the debug option (--debug) will turn on debugging output. Repeat
735 the option to increase the amount of debug. However, if possible
736 please only use this option with one host at a time, e.g. "cssh --debug
737 <host>" due to the amount of output produced (in both main and child
738 windows).
739
741 <https://github.com/duncs/clusterssh/wiki/>, "ssh", Tk::overview,
742 X11::Protocol, "perl"
743
745 Duncan Ferguson, "<duncan_j_ferguson at yahoo.co.uk>"
746
748 Copyright 1999-2018 Duncan Ferguson.
749
750 This program is free software; you can redistribute it and/or modify it
751 under the terms of either: the GNU General Public License as published
752 by the Free Software Foundation; or the Artistic License.
753
754 See http://dev.perl.org/licenses/ for more information.
755
756
757
758perl v5.30.1 2020-01-28 CRSH(1)