Tandem OSS Training Jan 2810
Short Description
Download Tandem OSS Training Jan 2810...
Description
Introduction to OSS
Part 2
Recap from Introduction to OSS Part 1
Introduction to OSS
OSS File System Basics
Basic Commands and Utilities
OSS File Editing
© 2002 hp (524907-001)
2
Command Scripting
Module 5
Running OSS Commands from the Guardian Environment and Vice Versa Guardian OSH
Guardian files, programs, and objects
© 2002 hp (524907-001)
OSS gtacl
OSS files, programs, and objects
4
Invoking TACL Commands from OSS (1 of 2) The gtacl utility creates a Guardian process from the OSS shell environment
Uses Guardian process creation API to:
Create a Guardian process with TACL-like options Create a Guardian TACL process that will execute a single TACL command
Syntax:
© 2002 hp (524907-001)
$ gtacl -p
[]
$ gtacl -c
[]
5
Invoking TACL Commands from OSS (2 of 2)
option -p
Starts Guardian process from
Default: Starts TACL process Can be used with -cpu #, -gpri #, -name /G/name, -debug, … ,options
option -c
Creates a TACL process that executes a single command and then returns to the OSS shell is command passed to the TACL process
Might require either double or single quotes (" or ') if string contains spaces or metacharacters (details later)
© 2002 hp (524907-001)
6
OSS gtacl Utility Examples (1 of 2) /users/member[62]: gtacl -name /G/mytac -gpri 150 -cpu 0 -p tacl TACL 1> logon member Password: Last Logon: 22 MAY 1997, 16:38 TACL (T9205D40 - 12JUL96), Operating System D40, Release D43.02 : : $DATA MEMBERA 1> status *,term Process Pri PFR %WT Userid Program file Hometerm $MYTAC 0,72 150 R 000 230,1 $SYSTEM.SYS77.TACL $ZTNT.#PTY004F $Z10R 3,46 171 001 230,1 $SYSTEM.SYS77.TACL $ZTNT.#PTY004F $Z11M X 3,288 170 001 230,1 /bin/gtacl $ZTNT.#PTY004F X 3,292 170 000 230,1 /bin/sh $ZTNT.#PTY004F 3,296 170 001 230,1 $SYSTEM.SYS77.OSH $ZTNT.#PTY004F $DATA MEMBERA 2> EOF! Are you sure you want to stop this TACL (\SOFTED.$MYTAC)?y /users/member[63]: gtacl -p fup copy taclcstm ?TACL MACRO == TACL created this file for your protection. 2 RECORDS TRANSFERRED /users/member[64]: gtacl -p edit "\$data.member.taclcstm;lu a;e" TEXT EDITOR - T9601D20 - (01JUN93) CURRENT FILE IS $DATA.MEMBER.TACLCSTM ?TACL MACRO == TACL created this file for your protection. /users/member[65]:
© 2002 hp (524907-001)
7
OSS gtacl Utility Examples (2 of 2) /users/member[66]: gtacl -c time January 31, 2001 19:11:06 /users/member[67]: gtacl -c Process Pri PFR $Z10Z 3,36 170 R $Z10R 3,46 171 $Z10Y X 3,288 170 X 3,292 170 3,296 170
"status *,term" %WT Userid Program file 000 34,100 $SYSTEM.SYS77.TACL 001 34,100 $SYSTEM.SYS77.TACL 001 34,100 /bin/gtacl 000 34,100 /bin/sh 001 34,100 $SYSTEM.SYS77.OSH
Hometerm $ZTNT.#PTY004F $ZTNT.#PTY004F $ZTNT.#PTY004F $ZTNT.#PTY004F $ZTNT.#PTY004F
/users/member[68]: gtacl -c 'fileinfo $data.membera.*' $DATA.MEMBERA TACLCSTM
Code 101
EOF 2048
Last Modification 31JAN2001 10:32:16
Owner 34,100
RWEP AAAA
PExt 8
SExt 32
/users/member[69]:
© 2002 hp (524907-001)
8
Shell Scripts
Shell commands can be stored in ASCII text files (such as command files).
Can be programmed like TACL macros.
Needs to be secured for execution: $ chmod
my_script
Executed by typing in the filename such as: $ $ $
u+x
my_script . my_script ./my_script
# Executes in subshell # Executes in current shell # When my_script is not in PATH
Commands can be stacked by using the semicolon (;)
© 2002 hp (524907-001)
9
Comments and Metacharacters
Comments # This is a comment to let you know what I am doing.
Metacharacters $
`
‘
“
\
The slash “\” is used to escape the other metacharacters. The semicolon “;” is used to separate commands The ampersand “&” executes a command in the background The braces “{ }” are used for command grouping (for body of a function) The parens “()” are used to group commands for a subshell or to identify a function (details later)
© 2002 hp (524907-001)
10
Variables
Name can be any sequence of letters and digits.
First character must be a letter.
Hyphen “-” is not allowed.
Declaration and initialization: $ me=Liew $ xyz=" HH”
# Note absence of blanks # Quotes needed with embedded blanks
Display with echo statement and use of “$”: $ echo This is Mr. $me
Removed with the unset command: $ unset me
No special concatenation operator: $ me=$me" Goon-Loong" # me has "Liew Goon-Loong" $ me=$me "Sir" # me becomes "Liew Goon-Loong Sir" $ me=$me$xyz # me becomes "Liew Goon-Loong Sir HH"
© 2002 hp (524907-001)
11
alias Command
The alias command is a mechanism for defining new commands.
Usage examples:
Defined in this manner: $ alias w=who $ alias duh=`who; date`
To obtain a listing of defined aliases: $ alias
To obtain a listing of a specific alias: $ alias w
Invoked by referring to the name: $ w
Can be used to stack multiple commands: $ alias w="who;date; time"
© 2002 hp (524907-001)
12
Control Structures These control structures allow conditional testing and looping:
if then fi
if then else fi
for in do done
for do done
while do done
until do done
case in esac
© 2002 hp (524907-001)
13
if Statement
Test command is used to ascertain TRUE or FALSE
TRUE is 0 and FALSE is 1
In place of test, the bracket pair [ ] can be used
Examples: if test 6 = 6 then echo "equal" else echo "not equal" fi # [ ] is short form for test if [ 6 = 6 ] then echo "Same same, both the same" else echo "Not the same" fi
© 2002 hp (524907-001)
14
test Command Options
General form test
or
[
condition
]
Some options for condition are:
condition
-a file — # True if file exists -d file — # True if file exists and is a directory -e file — # True if file exists -f file — # True if file exists and is a regular file -n string — # True if the length of string is nonzero -p file — # True if file exists and is a named pipe (FIFO) -r file — # True if file exists and process has read permission -s file — # True if file exists and has a size > 0 -u file — # True if file exists and its set-user ID bit is set -w file — # True if file exists and process has write permission -x file — # True if file exists and is executable -z string — # True if string is null
Use man pages for test to obtain more options
© 2002 hp (524907-001)
15
Loops
for loop # This script demos use of the for ....do loop. for season in Spring Summer Autumn Winter do echo "Season is " $season done Echo
while loop # Script to demo while construct and use of expr utility. number=0 while [ "$number" -lt 5 ] do echo "$number" number=`expr $number + 1 ` done echo
© 2002 hp (524907-001)
16
until Loop Example: # Script to demo until construct and use of expr utility. number=0 until [ "$number" -gt 5 ] do echo "$number" number=`expr $number + 1 ` done echo
© 2002 hp (524907-001)
17
case Structure Example: # Script to demo use of case construct. echo "Enter A, B, or C: \c" read letter # More on read command later case "$letter" in a | A) echo "You entered A." ;; b | B) echo "You entered B." ;; c | C) echo "You entered C." ;; * ) echo "Not A or B or C." ;; esac
© 2002 hp (524907-001)
18
Arguments
Arguments are positional and space separated
$0 is the name of the script file
$# is the argument count
$n is the nth. argument’s value
$@ is the argument list (like %*% in TACL)
$* is also the argument list
$$ is PID number of the current process
$! is PID number of the most recent background task
$? is the exit status of the last executed task or the True or False value from the last execution of the test command
© 2002 hp (524907-001)
19
Argument Usage Example: # Script to demo argument usage. # Usage: arg1 arg2 arg3 echo "arg count is: $#" echo "arg list is: $@" for arg in $@ do echo $arg done
© 2002 hp (524907-001)
20
read Command Syntax: read [ -r ]
variablename …
where -r specifies that the read command treat a \ (backslash) character as just part of the input line, not as a control character.
Reads from standard input
Input items are moved to the target variables
If there is only one target, then all input items are moved to that target
Line continuation is a slash (\), unless the -r flag is used
Default item separator is white space
IFS (Internal Field Separator) environment variable is used to specify separators
© 2002 hp (524907-001)
21
Miscellaneous Statements
for, while, or until loops can be interrupted with:
break continue return
break transfers control to the statement after the done statement, terminating execution of the loop
continue transfers control to the done statement, which continues execution of the loop
return terminates the function or script
exit provides a return code to the parent:
Used to terminate a script Non-zero return code represents false, meaning failure Zero return code represents true, meaning success
© 2002 hp (524907-001)
22
Arithmetic on Shell Variables x=1 x=$x+1 echo $x 1+1
expr 6
5 + 1
x=1 expr $x + 1 2
© 2002 hp (524907-001)
expr 17 * 6 102
23
let Command x=5 let x=x+1 echo $x 6
X=5 y=6 let "x = x + 1" "y = y - 2" echo $x $y 6 4
let "x = (x + 10) * y"
let (( x = x + 6 ))
echo $x
echo $x
64
70
© 2002 hp (524907-001)
24
select Command
Useful for continuously displaying a menu to the user Displays each word, preceded by its relative numeric position in list The variable PS3 is displayed as a prompt (default: #?) User keys in a numeric value; var holds corresponding wordi from list Execution stops with break statement or when user enters Control^Y
select var in word1 word2 … wordn do command command … done
PS3="Pick one of the above numeric options: " select choice in Add Delete Quit do case "$choice" in Add) echo Acting on Add function;; Delete) echo Acting on Delete function;; Quit) break;; *) echo Wrong choice;; esac done
1
© 2002 hp (524907-001)
25
Debugging Scripts sh -x myscript execute the script and show all the statements that get executed with the variables and wildcards already expanded. check for syntax errors without actually executing the program. sh -n myscript If this returns nothing then your program is free of syntax errors.
© 2002 hp (524907-001)
26
OSS Development
Module 6
OSS Development Environment
HP NonStop Server
Workstation Editor (for example, CodeWright)
Editor (vi, ed)
FTP (for example, FTPC32)
Enterprise Toolkit (ETK) Enterprise Plug-in Eclipse
Visual Inspect (VI)
© 2002 hp (524907-001)
C C++ COBOL
Compilers
Inspect, eInspect
28
Editing Source Files
EDIT files
ASCII text files
EDIT/TEDIT editors work on only EDIT files
OSS programs can access OSS and Guardian files
Type 180, exist in OSS and Guardian name space
Guardian programs can access only Guardian files
Type 101, exist only in Guardian name space
vi and ed editors work only ASCII text files
Conversion programs:
EDITTOC converts EDIT file to ASCII text file CTOEDIT converts ASCII text file to EDIT file cp /G/vol/subvol/ converts EDIT file to ASCII text file
© 2002 hp (524907-001)
29
pax Utility
Portable Archive Interchange (pax) utility
POSIX-compliant program Supports ustar and cpio archive formats Reads, writes, and lists members of an archive file Copies directory hierarchies Supports both disk and tape media
Command syntax Read:
pax -r [-cdiknuv] [-f archive] ...
Write: pax -w [-adituvX] [-b blocksize] [-f archive] ... List:
pax –f archive
Notes
ustar format is written by default Standard input/output is assumed if -f flag not provided
© 2002 hp (524907-001)
30
tar Utility
Useful for file transfers
Packs files into archive file on source machine Extracts files from archive file on destination machine
Examples:
To archive all .c and .h files in current directory: $ tar -cvf tarfile *.c *.h
To archive files in sourcedir directory: $ tar -cvf tarfile sourcedir
To list archive files in tarfile archive file: $ tar -tvf tarfile
To extract only .c and .h files from tarfile archive: $ tar -xvf tarfile *.c *.h
© 2002 hp (524907-001)
31
Transferring Files to OSS
On the UNIX/Windows workstation:
Create pax file $ pax -w -v -f src.pax [files . . .]
FTP file to OSS environment $ > > >
ftp quote oss cd src put src.pax src.pax
On the OSS host:
Change to src directory $ cd src
Extract archive files $ pax -r -v -f src.pax
© 2002 hp (524907-001)
32
Retrieving Files from OSS
On the OSS host:
Create archive file in src directory $ cd src $ pax -w -v -f paxfile [files . . .]
On the UNIX/Windows workstation:
Get pax file using FTP $ > > >
ftp quote oss cd src get paxfile paxfile
Read pax file $ pax -r -v -f paxfile
© 2002 hp (524907-001)
33
Native C and C++ Compilers
TNS native C compiler
TNS native C++ compiler
ccomp, cppcomp for Guardian environment c89 for OSS environment
Compiler drivers TNS/E
More powerful than TNS C++ preprocessor Can use forward declarations of class specializations Can use nested templates
Compiler drivers TNS/R
Accepts K&R C and ISO/ANSI C
nmc, nmcPlus for Guardian environment c89 for OSS environment
Guardian and OSS environment cross compilers
© 2002 hp (524907-001)
34
Native c89 C Compiler
Accepts C/C++ language source files that comply with ISO/ANSI C standard.
Is supplied with standard header files and run-time libraries
Reads input files using OSS APIs
Supports NonStop extensions
Embedded SQL Guardian procedure calls
Supports WIDE data model and native memory model
Use /G syntax to access Guardian files
32-bit integers and 32-bit pointers
Available on OSS and Guardian environments
© 2002 hp (524907-001)
35
Native c89 C Compilation System
Components
sqlcfe — Processes embedded NonStop SQL/MP source statements cfe — Preprocesses C/C++ source code into binary ucode uopt — Optimizes binary ucode ugen — Processes binary ucode into binary assembly code as1— Processes binary assembly code into object code nld — Links object and library files into an executable program sqlcomp — Further processes non-SRL executable file
Input to c89
C source files and object files generated by c89 C Libraries of object files produced by the ar utility or by native compilers in either the OSS or Guardian environments
© 2002 hp (524907-001)
36
Input/Output Files
OSS files
.L — Compilation listing .o — Object file .a — Archive file .srl — Shared run-time library (SRL) .c — C source file .C — C++ source file .cc — C++ source file .cpp — C++ source file
Guardian files in /G
© 2002 hp (524907-001)
37
pp re ss
Compiling/Linking Flow
no su
prog.c
prog.L
eld
-W
a.out
c89
prog.o
ar
eld
executable
lib.a prog.o prog2.o prog3.o © 2002 hp (524907-001)
38
c89 Command Options (1 of 2)
-c — Compiles source file and suppresses binding
-g — Produces symbolic information for debug
-o — Produces named output file
-D — Defines name value
-U — Undefines name value
-E — Expands preprocessor directives without compiling
-I
-L — Changes search order for libraries
-O — Optimizes executable
-W — Uses options specific to NonStop systems
— Changes search order for header files
© 2002 hp (524907-001)
39
c89 Command Options (2 of 2)
-Wnolink
— Suppresses linking with nld
-Wextensions
— Enables NonStop extensions
-Wnld= or –Weld= — Passes arguments to nld/eld utility
-Woptimize=
— Specifies optimization level 0, 1, or 2 (default is 1)
-Wsystype=
— Execution environment, default OSS
-Wsqlcomp=[args] — Invokes NonStop SQL/MP compiler, sqlcomp
-Wrunnamed
— Directs nld/eld to set RUNNAMED ON
-Wfieldalign
— Controls alignment within structures
-Winnerlist
— Shows generated instructions for each statement
-Wsuppress
— Default mode, suppresses listing
© 2002 hp (524907-001)
40
c89 Command Examples
To compile test.c and produce a.out executable: $ c89 test.c
To create native SRL, called mylib, in current directory: $ c89 -Wsrl -Wnld=-ul -o mylib mylib.c
To compile source code modules x.c, y.c, and z.c; bind object files into executable called tst; and produce symbolic information for debugging: $ c89 -g -o tst x.c y.c z.c
To compile a source file having HP NonStop SQL/MP statements, without sqlcomp phase: $ c89 srvr.c -Wsql
To compile a source file having SQL/MP statements, including sqlcomp phase: $ c89 srvr.c -Wsql -Wsqlcomp="catalog \$data.applcat"
© 2002 hp (524907-001)
41
The make Program
Compatible with the UNIX make program
Default make file names
make file rules
Default rules kept in /usr/share/mk/posix.mk
Macros typically defined in the UNIX make file
makefile, Makefile, s.makefile, and s.Makefile
CC = cc
Macros defined in the OSS make file
CC = c89 CFLAGS = -Wextensions
© 2002 hp (524907-001)
42
COBOL Compilers
cobol — Compiles standard TNS COBOL85 programs
nmcobol — Compiles G native COBOL85 programs
ecobol — Compiles H & J native COBOL85 programs
Use man utility to find out information about compilation options
© 2002 hp (524907-001)
43
OSS Development Utilities
ar
— File archiver, for example: $ ar tv libc.a
nm
— Displays binary file symbolic information, for example: $ nm object.o
strip
— Removes the symbolic debugging information and symbol tables from an executable file
strings
— Finds printable strings in files
lex
— Lexical analyzer program generator
yacc
— Parser program generator
nld & eld — Native link editor
noft & enoft
© 2002 hp (524907-001)
— Native object file tool
44
Creating a Guardian Executable in the OSS Environment
Use -Wsystype=guardian to generate a Guardian object file
Macros predefined:
_TANDEM_SOURCE _GUARDIAN_TARGET
Attributes turned on:
HIGHPIN HIGHREQUESTER
WIDE model only
Example: $ c89
-Wsystype=guardian
-o
/G/data/fred/newprog
prog.c
$ exit TACL> run newprog
© 2002 hp (524907-001)
45
Debugging a Program
Run program under control of the Inspect debugger
Inspect
Use Inspect (or native inspect) or Visual Inspect debugger Source-level process debugging $ run -debug program Equivalent to RUND or RUNV program from TACL
eInspect
gtacl –p einspect
© 2002 hp (524907-001)
46
Visual Inspect
Powerful, easy-to-use visual interface
Improved data structure handling and COBOL support
Better windows management
System-level and application-level debugging
Support for distributed, multiprocess applications
Improved program navigation
Support for postmortem debugging
© 2002 hp (524907-001)
47
SQL/MX Processes OSS Environment
MXCI
Guardian Environment
MXCMP
MXRTDSRV
DML Statements
NonStop Kernel Environment
© 2002 hp (524907-001)
DP2
DP2
SQL/MX Database
SQL/MX Catalog 48
Compiling a C/C++ SQL/MX Program (option 1) MyProg.sql
SQL/MX C/C++ Source File
mxsqlc
SQL/MX C/C++ Preprocessor
MyProg.c or MyProg.cpp
Annotated C/C++ Source File
eld Linker
SQL/MX object
eld
MyProg.exe
mxCompileUserModule /usr/bin/c89
MyProg.o
© 2002 hp (524907-001)
C/C++ Compiler
C/C++ object
SQL/MX Compiler
SQL/MX executable
MyProg.exe
49
Compiling a C/C++ SQL/MX Program (option 2) SQL/MX C/C++ Source File SQL/MX C/C++ Preprocessor
Annotated C/C++ Source File
SQL/MX Module Definition File
C/C++ Compiler
SQL/MX Compiler
C/C++ Executable © 2002 hp (524907-001)
SQL/MX Module File 50
OSS-Hosted SQL/MX C/C++ Preprocessor
Running the preprocessor mxsqlc myProg.sql -c myProg.cpp -m myProg.m -l myProg.lst
mxsqlc [ [ [ [ [ [
© 2002 hp (524907-001)
source-file -c out-file ] -m module-definition-file ] -l list-file ] -p ] -t timestamp ] -d flag [=value] ]
51
SQL/MX Compiler (1 of 2)
Installed in $system.system
Compiler functions are as follows:
Expands SQL object names by using the current default settings Expands any view definitions Performs type checking for C/C++, NMCOBOL and SQL data types Checks SQL object references to verify their existence Determines an optimized execution plan and access path for each DML statement Generates executable code for the execution plans and creates an SQL module Places the module in the /usr/tandem/sqlmx/USER MODULES subdirectory or embedded in executable file Generates a list of the SQL statements in the program file Returns a completion code
© 2002 hp (524907-001)
52
SQL/MX Compiler (2 of 2)
Running the SQL/MX compiler for module files
mxcmp -e -v myProg.m
Running the SQL/MX compiler for embedded modules
mxCompileUserModule -e -v myProg.exe
Running the SQL/MX compiler from c89
c89 -Wsqlmx -Wmxcmp -o sqlprog.exe sqlprog.ec
Running the SQL/MX compiler from ecobol
ecobol -Wsqlmx -Wmxcmp -o sqlprog.exe sqlprog.ecob © 2002 hp (524907-001)
53
$RECEIVE Handling
Same usage as within Guardian requesters/servers
For servers:
For requesters:
Use FILE_OPEN_ to open $RECEIVE Use REPLY[x] to return response Use FILE_OPEN_ to open server process by name Use WRITEREAD[x] for two-way communication
Usage:
Server: Requester:
$ run -name=/G/ $ run
Issue: How can requesters and servers be folded into the Pathway environment? © 2002 hp (524907-001)
54
Pathway Specifics (1 of 2)
Requester:
Consider using PATHSEND APIs Replace FILE_OPEN_ and WRITEREAD[x] with:
SERVERCLASS_SEND_ SERVERCLASS_SEND_INFO_
Server:
Can still use REPLY[x] Needs PATHWAY configuration update
© 2002 hp (524907-001)
55
Pathway Specifics (2 of 2)
Server configuration needs: set server processtype OSS set server cwd set server stdin
set server stdout set server stderr set server program
These conflict with processtype OSS: set server IN set server OUT
© 2002 hp (524907-001)
56
dot1test
/bin/unsupported/dot1test
Allows you to call APIs interactively (OSS version of lispproc). Example: /home/software/tome: dot1test Welcome to dot1test, version 2.25 30NOV96. *** type "help new" for a list of the latest features & bug fixes in dot1test proc name : open path : /bin/ls oflag : O_RDONLY mode: open() succeeded, returned fildes == 3. proc name :
© 2002 hp (524907-001)
57
NonStop + Open Source Higher productivity through Unix/linux like environment. 200+ Open Source ready to run out of the box on Sseries and NonStop Integrity. Porting time and effort dramatically reduced. “Runtime” Open Source opening a wide range of applications to run on NonStop without porting efforts.
© 2002 hp (524907-001)
58
Getting started. Download Open Source from: Connect: http://www.connect-community.org/ Internet: Java, Perl, Php or python based Open Source. ITUG downloads are delivered as file.tar.z .z: You can use winzip, gzip or jar. .tar: use pax or tar utilities in OSS Extract the download under / and read: /usr/local/Floss//README_FLOSS
Your software is ready to use! No need to run Configure or make
© 2002 hp (524907-001)
59
200+ Open Source on S & NS Series GUI apps X11 Samba vnc Gvim LPRng
Productivity Editors Vim nano Emacs ed
App servers Apache Zope © 2002 hp (524907-001)
Security bash Openssl cscope Openssh wget sudo findutils Dev tools Gnupg dmalloc stunnel Languages cvs Perl floss Python make ruby php 60
Active community Special Interest Group "Open SIG“ register at http://www.connect-community.org/ Now regroups Java, OSS and Open Source interests. You can still also use the Tandem Newsgroup:
news:comp.sys.tandem
Remember Open Source is often not supported but you can get help in many various ways (FAQ, Newsgroup, Project page, …). NED/GMCSC supported Open Source:
NonStop XML Parser = Apache Xerces C++ 2.4.0 NonStop Fast XML Parser = Expat 1.95.7 NonStop Soap Client = gSOAP 2.6 NS/JSP = Apache Tomcat LDAP client SDK = Mozilla's Directory SDK 3.0 XSLT Version 2.0 Stylesheet Processor for C++
© 2002 hp (524907-001)
61
Integration into OSS If you want minimum impact on the OSS behavior, place /usr/local/bin at the end of the PATH: export PATH=$PATH:/usr/local/bin If placing /usr/local/bin at the beginning of the PATH: export PATH=/usr/local/bin:$PATH Then Open Source commands will be used instead of OSS commands (e.g. if you install grep from Floss). Most Open Source can be installed as a regular user. This makes sure you won’t alter any existing system directory or settings.
© 2002 hp (524907-001)
62
Integration into OSS: Documentation Open Source man(ual) pages are often delivered in /usr/local/man. Default search order: But the OSS man commands also scans other /usr/share/man/manX directories by default:
/usr/local/man/manX /usr/share/man/catX /usr/local/man/catX
So if you install OpenSource “grep”, man will find the OpenSource grep man page first:
/usr/local/man/man1/grep.1
View more...
Comments