Beruflich Dokumente
Kultur Dokumente
Making files is easy under the UNIX operating system. Therefore, users tend to create numerous files using
large amounts of file space. It has been said that the only standard thing about all UNIX systems is the
message-of-the-day telling users to clean up their files. -- System V.2 administrator's guide
Extremely Useful
Commands
System Commands
Connectivity
Miscellaneous
Shell Scripts
INTRODUCTION
This is my unix command help file which has been built up over the years. This file was
built primarily for my own reference and is not intended to be an authoratative guide to
all commands for AIX - often if there is a very short description for a command, you can
take this as RTFM. I am not a systems administrator, but have been called on to do the
job occasionally (and install a box or two) - this helpfile should be ideal for people who
use AIX, but aren't responsible for the deep magic required for hardware configuration.
You may find this file helpful despite the numerous omissions nonetheless. This file was
originally a plain text file but I have converted to HTML using Lemmy (A vi clone for
Windows).
Because it has been hand-converted from the original text document, there's a few
hangovers from it that I just can't be bothered to remove such as the caps headings.
Additionally, some browsers may not render certain characters.
I've tried (and quite probably failed) to keep several conventions within this document any command, if mentioned in the description of another command should have a
bookmark link to the description of that command; all examples are in blue text apologies to lynx users, but examples should be written so that they're recognisable
anyway (and if you're using lynx, you probably know unix quite well anyway so I don't
really know why I'm apologising ;-). If a command has more than one useful option, I've
tried to put them into <UL> Unordered list tags.
If a command stands almost alone, or is complex within itself, it doesn't appear in this file
but in it's own separate file (with a link if I've converted it to html. Examples are vi and
awk.
pg
- used to control input by pages - like the dos /p argument. pg performs the same
function as the more command but has different control, as it is based on ex
Helpful keys for pg:
1 (go to top)
$ (go to bottom)
h (help)
/ (Search)
? (Search back)
q (quit)
-1 (back a page)
pwd
- show present working directory. e.g.
$ pwd
/usr/live/data/epx/vss2
To change the current working directory use cd
cd
- change directory (without arguments, this is the same as $ cd $HOME or $ cd ~)
cp
<source> <destination> - copies a file from one location to another. e.g.
$ cp /etc/hosts /etc/hosts.backup # make a backup of the hosts file
$ cp /etc/motd /tmp/jon/ # Copy file /etc/motd to directory /tmp/jon/
Options
-f (to force the copy to occur)
-r (to recursively copy a directory)
-p (to attempt to preserve permissions when copying)
synonym: copy
mv
<source> <destination> - move a file from one location to another. e.g.
$ mv /tmp/jon/handycommands.txt . # move handycommands in /tmp/jon to
current directory
$ mv -f vihelp vihelp.txt # Move file vihelp to vihelp.txt (forced)
Options
-f (to force the move to occur)
-r (to recursively move a directory)
-p (to attempt to preserve permissions when moving)
synonym: move
.
rm
<filename> - removes a file. e.g.
$ rm /tmp/jon/*.unl # remove all *.unl files in /tmp/jon
$ rm -r /tmp/jon/usr # remove all files recursively Options
du
Recursively lists directories and their sizes. e.g.
$ du /etc # list recursively all directories off /etc
712 /etc/objrepos
64 /etc/security/audit
536 /etc/security
104 /etc/uucp
8 /etc/vg
232 /etc/lpp/diagnostics/data
240 /etc/lpp/diagnostics
248 /etc/lpp
16 /etc/aliasesDB
16 /etc/acct
8 /etc/ncs
8 /etc/sm
8 /etc/sm.bak
4384 /etc
The sizes displayed are in 512K blocks. To view this in 1024K blocks use the
option -k
lp -d<Printername> <Filename>
send file to printer. e.g. $ lp -dhplas14 /etc/motd # send file /etc/motd to printer
hplas14
$ lp /etc/motd # send file /etc/motd to default printer
cat
- print a file to stdout (screen). e.g.
$ cat /etc/motd # display file /etc/motd to screen
******************************************************************
*************
**
**
* Welcome to AIX Version 4.1! *
**
**
* Please see the README file in /usr/lpp/bos for information pertinent to *
* this release of the AIX Operating System. *
**
**
******************************************************************
*************
cat is also useful for concatenating several files. e.g.
$ cat fontfile IN* > newfile # appends fontfile and all files beginning with IN to
newfile
Though this might seem an essentially useless command, because most unix
See also tee which allows splitting of the input stream and output to several
different places at once.
Wildcards
B Bib Baby Fox Fib
There are various wildcards which you may use. One is '*' which means 0 or more
characters. e.g. 'B*' will match 'B,Bib and Baby' from the list above, another
wildcard is '?' which matches 1 character, e.g. '?ib' will match 'Bib and Fib'.
Wildcards differ depending on the program in use: awk derivatives
(awk,sed,grep,ex,vi,expr and others) have the following special characters:
^ beginning of the line
$ end of the line
. any character
* one or more of the preceding character
.* any number of characters
\n Carriage return
\t Tab character
\<char> Treat <char> as is (so, \$ would try to match a '$')
Given the following four lines:
Chargeable calls in bundle: $47.50
Chargeable calls out of bundle: $20.50
Other bundle charges: $0.00
Total Charge: $20.50
$ grep "^Charg.*bundle.*\$.*"
would match the first two lines.
In english - match all lines which start with 'Charg', then have any number of
characters and then the word 'bundle', then have any number of characters, and
then a dollar symbol, and then have any number of characters following to the end
of the line
which <command>
- show where the source of a command is held. Almost the same as type and
whence
chmod <Octal Permissions> <file(s)>
- change file permissions. e.g.
$ chmod 666 handycommands
changes the permissions (seen by ls -l) of the file handycommands to -rw-rw-rwr = 4, w = 2, x = 1. In the above example if we wanted read and write permission
for a particular file then we would use r + w = 6. If we then wanted to have the
file have read-write permissions for User, Group and All, then we would have
permissions of 666. Therefore the command to change is that above.
$ chmod 711 a.out
Changes permissions to: -rwx--x--x
Additional explanation of file permissions and user/group/all meaning are given
in the description of ls -l
You may specify chmod differently - by expressing it in terms of + and variables. For example
$ chmod u+s /usr/bin/su
will modify the "sticky bit" on su, which allows it to gain the same access on the
file as the owner of it. What it means is "add s permission to user". So a file that
started off with permissions of "-rwxr-xr-x" will change to "rwsr-xr-x" when the
above command is executed. You may use "u" for owner permissions, "g" for
group permissions and "a" for all.
chown <Login Name> <file(s)>
- Change ownership of a file. Must be done as root. e.g.
chown informix *.dat # change all files ending .dat to be owned by informix
chgrp <Group Name> <file(s)>
- Change group ownership of a file. Must be done as root. e.g.
chgrp sys /.netrc # change file /.netrc to be owned by the group sys
mvdir <Source Directory> <Destination Directory>
- move a directory - can only be done within a volume group. To move a directory
between volume groups you need to use mv -r
or find <dirname> -print | cpio -pdumv <dirname2>; rm -r <dirname>
cpdir <Source Directory> <Destination Directory>
- copy a directory. See mvdir
rmdir <Directory>
- this is crap - use rm -r instead
mkdir <Directory>
- Creates a directory. e.g.
$ mkdir /tmp/jon/ # create directory called /tmp/jon/
find <pathname> -name "searchkey" -print
- search for files - e.g.
$ find . -name "system.log" -print # will find all files (with full path names) called
system.log - Wildcards are allowed, e.g.
$ find /tmp -name "sl.*" -atime +0 -print # will print out all files in /tmp/ that start
sl. and which haven't been accessed for a day. Helpful for finding lost files, or
finding stuff in enormous directories. Other useful options include:
-atime +<days> - finds files that haven't been accessed for 1+days also,
ctime (creation time) and mtime (modify time)
-prune - stay in current directory - don't look in dirs off the directory
specified in path names - e.g.
$ find /tmp -user "compgnc" -prune -print # will find all files in /tmp
which user compgnc owns and will not search lower directories (e.g.
/tmp/usr)
-size +<blocks> - finds files that are bigger than <blocks>
-exec rm {} \; - remove all files found...dangerous command - e.g.
$ find /tmp -name "sl.*" -atime +0 -prune -print -exec rm {} \; # will
remove all files in /tmp starting 'sl.' that haven't been accessed for a day.
Spacing of this command is important! Most exec commands are possible:
$ find /usr2/calltest -name "*.4gl" -print -exec grep "CHECK" {} \; | pg
-ok - like exec only it prompts for confirmation after each occurence. e.g.
$ find /tmp/disk7 -name "*" -print -ok doswrite -a {} {} \; # Please note
that you MUST end any exec or ok option with an escaped semicolon (\;).
-user <username> - finds all files owned by <username>
-group <groupname> - finds all files with a group of <groupname>
ln -s <Directory> <symbolic link>
- create a symbolic link to a different directory from current directory: e.g.
$ ln -s /usr/uniplex/compgnc /u/compgnc/uni # would create a link called 'uni' in
the directory /u/compgnc. From then on, typing cd uni would cd to
/usr/uniplex/compgnc. You can also give two files the same name. e.g.
$ ln make.e_enquiry makefile # would link the two files so that they are identical,
and when you change one, you change the other. You may also create a symbolic
link to a host(!). Instead of typing 'rlogin hpserver' every time, by typing
$ ln -s /usr/bin/rsh hpserver # will create a link so that whenever you type
'hpserver' it will execute a remote shell on the machine.
Option -f forces the link to occur
head -<Number> <FileName>
- prints out the first few line of a file to screen. Specify number to indicate how
many lines (default is 10). e.g. If you sent something to a labels printer and it
wasn't lined up, then you could print the first few labels again using:
$ head -45 label1.out | lp -dlocal1
tail -<Number> <FileName>
- prints out the end of a file. Very similar to head but with a very useful option '-f'
which allows you to follow the end of a file as it is being created.e.g.
$ tail -f vlink.log # follow end of vlink.log file as it is created.
wc -<options> <FileName>
- Word Count (wc) program. Counts the number of chars, words, and lines in a
file or in a pipe. Options:
-l (lines)
-c (chars)
-w (words)
Part 1: Permissions - see chmod for explanation of these. If the first field
is set, then the file in question is not really a file at all, but something else,
key:
o -: normal file
o d: directory
o l: symbolic link created by 'ln'
o c or b: device of some sort
You may sometimes see an 's' where the 'x' should be in the permissions this is normally on executable files which change other files. e.g.
Permissions of 'sqlexec' the file that executes all informix queries should
be '-rwsr-sr-x' - this then accesses tables with permissions of '-rw-rw----'.
where the table files are owned by informix (group informix). the 's' flags
allows changing of the database tables on a program level, but not on a
unix level. (can change contents via sqlexec but not use 'rm' command on
db file).
Useful options (and there are loads more). All may be combined except where
specified:
ls -a show files starting with '.' too
ls -A show files starting with '.' but not '.' or '..'
ls -c must be used with either option l and/or t - displays/sorts by
modification time
ls -d do not show subdirectory listings
ls -i display the i-node number of each file
ls -t Put the listing in time order (see options u and c)
ls -r Put the listing in reverse order - usually used with a -t
ls -u must be used with either options l and/or t - displays/sorts by lastaccess time
vi <filename>
- love it or loathe it - the standard operating system text-file editor. See Related
help file. Vi You can also use 'view' which forces Read only (-R opt). vi
+<number> enters the file at the specified line no. Also, vi +/<Search pattern>
will enter the file and move to the first occurrence of <Search pattern>. e.g.
$ vi +/"love it or loathe it" handycommands
Users new to vi hate it. I personally managed to get through University without
using it ever (I used Joe's own editor instead). If I accidentally went into vi, I had
to ^Z and kill the job. Sigh. Five years of using vi means that I'm getting a little
better at it now... (I'm actually typing this now in a vi-clone for Windows).
grep <pattern> <file(s)>
- a phenomenally useful command which matches strings within files - e.g.
$ grep D7523 mcall_reps.out # will find all the lines in mcall_reps.out that have
the string "D7523" in it. Also incredibly useful for things like pipes,e.g.
$ du | grep cred # (in /home directory will show all users that have 'cred' in their
title). You may use regular expression matching - e.g.
$ grep "main.*{" x.c # would match any line containing 'main' and an open curly
brackets at any point in the line afterwards. There are two variations to grep fgrep and egrep which do virtually the same things as grep, but are either faster
(having less options) or more complex (but slower). See also section on Wildcards
Options:
-v : show all lines that do not contain pattern.
-y : don't bother matching case
-i : don't bother matching case
-c : show count of matching lines rather than the lines themselves
-l : show filename's instead of matching lines.
ksh -o vi
- The Korn Shell - pros might notice that I don't mention using the C-Shell at all I've never used it, so that's why it doesn't appear. A Shell is a program that you run
your commands in. Typing exit will end the current shell. The -o vi option of the
korn shell allows vi commands to work at the shell prompt after pressing escape.
For example, pressing escape and then 'k' will bring up the last command used in
the shell.
awk
- this would be a damn useful command if I knew how to use it properly. see
alternative page awkhelp
man <command>
- look at the manual, e.g.
$ man ps # will list the manual page for the command ps
- similar to whoami except that it does a direct check to see who you are - who
only checks /etc/utmp so any su commands will be ignored.
ps
- list processes currently running, by default on the current shell. Useful with
options:
-t <tty> - show all processes running on a terminal
-ef - show all processes
-u <loginname> - show all processes owned by a user
-flp <processid> - show as much information as you can about a process
number
-aux - show processes in order of usage of the processors. Useful to see
what processes are hogging system resources.
fuser -u <filename>
- show who is using a file.(system hogging command). Useful when trying to
work out who has locked a row or table in an informix database for example.
lpstat -p <printer>
- show the current status of a printer and any jobs in the queue. lpstat without
arguments prints all of them.
enable <printer>
- enable a printer queue. You must be root or a member of the printq group to run
this command.
disable <printer>
- disable a printer queue. You must be root or a member of the printq group to run
this command.
enq <various parameters>
- examine spool queue for printers.
uname -a
- will show you what machine you're currently on.
ipcs
- list semaphores and shared memory.
ipcrm -s <semaphorenumber>
- remove semaphore or shared memory.
crontab
- use -l to list all regular scheduled jobs. To alter them, use option -e
at <now + ?? seconds/minutes/hours/days/years>
- perform a job at a specified time. (Useful for running something at a later date).
at retains the current environment. e.g.
$ at now + 5 minutes
echo "Phone Julie McNally" > /dev/tty616
^D
job compjmd.389748732 will be run at ???
Will echo to tty616 the message "Phone Julie McNally" in 5 minutes. e.g.2
$ at 0331235930
echo "April fools day!" > /dev/console
^D
will echo "April fools day!" to the console at 11:59 and 30 seconds, on the 31st of
march. Format for this is: [YYYY]MMDDhhmmss. at jobs are sometimes used in
the place of crontab's because if the machine is off when the crontab is meant to
take place, the job never happens. at jobs automatically start when the machine is
switched on if the machine was down at the time. typing at -l will show you all
the at jobs you have queued, at -r <atjob> will remove an at job (only the owner
or root is allowed to do this).
date
- show current date and time. This command may also be used to set the system
clock (ONLY WHEN EVERYONE IS LOGGED OFF) with a root user id. A date
change is never simple, even when adjusting things by an hour. The safest way to
do it is to change the date then reboot the machine because otherwise the crontab
daemon may start doing jobs at odd times. I believe there might be a 'go slow/fast'
option to set the clock, and the clock will then run 'slower/quicker' until it catches
up with the required time.
last <username>
- shows a list of recent logins. It looks at /var/adm/wtmp so it only shows initial
logins, and not whether those users have been su'd to.
fileplace -pv <filename>
- show the physical (as in disk location) location of a file. Useful for tracing
informix files, and perhaps for working out whether defragmentation copying is
required.
SYSTEM COMMANDS
kill -<Signal> <process>
- sends a signal (normally a kill) to a process. kill -9 terminates the job no
questions asked, kill -15 tries to clear up as much as possible - e.g. remove
semaphores and such-like. Other signals may be sent as well, see manual and
/usr/include/sys/signal.h to see what signals you can send to a process.
renice <priority> <process>
- make a process not hog the system so much by setting its nice value.
smit
- system admin program for AIX
df
- list volume groups + usage. see also lsvg. Usually used with the -k flag so the
number of blocks is displayed in 1024-blocks.
cu -l <device>
- log on to device such as a pad or a modem. See related files /etc/uucp/* and
/etc/locks and /etc/services
stty sane
- Changes terminal settings back to normal. If a tetra module for example crashes
your screen so that no keys function except ^C which doesn't even do very much
then typing ^Jstty sane^J should cure the problem. To fully cure the problem you
also need to type stty tab3 (and stty -ixon if you're feeling a little overzealous)
stty
- allows you to change terminal settings such as the interrupt key, quit key, etc.
e.g.
$ stty intr ^A # would change the interrupt key to being control-A
$ stty quit ^L #would set the quit key (normally ^\) to control-L. other key
changes are:
erase (normally ^H)
xon (normally ^Q)
xoff (normally ^S)
eof (normally ^D)
To really annoy a systems administrator, change interrupt to 't' and quit to '^D' .
hehehehehehe
lscfg
- show all connected devices
lsvg
- list volume groups (see related file diskhelp)
lspv
- list physical disks (and see related file diskhelp)
lspv without arguments will produce a list of all the hard-disks used. lspv <harddisk-name> will produce a list of information about the hard disk. lspv -l <harddisk-name> will show any logical volumes which are mapped on to that drive.
lsdev
- list devices. Options:
-C list Configured devices
-P list Possible devices
produces different output when you are root.
mkdev
- make devices. e.g. To make a tty:
# Script to add a tty. Options that need amending are:
# -l name of tty to be created - e.g '-l tty600' wil create
# a tty called 'tty600'
# -p RAN name
# -w Port number on RAN
# -a Attributes (e.g. to set up auto login, etc.)
mkdev -c tty -t 'tty' -s 'rs232' -l tty433 -p sa2 -w 2 -a term='wyse50' -a
forcedcd='enable' -a login='enable' -a speed='19200'
e.g. To create a printer (raw device):
mkdev -c printer -t 'osp' -s 'rs232' -p 'sa3' -w '10' -l label2 -a xon='yes' -a dtr='no'
-a col=500
It is highly recommended that you make and change devices using smit
chdev
- change devices. See mkdev
cc
- c compiler, use with
-o <object> to specify a target instead of a.out
-O optimise
-w or -W all warning flags.
shutdown
- shutdown the system so that it may be switched off. Rather obviously, this may
only be run by root. Options:
-f shuts the system down immediately (rather than waiting for a minute)
-R reboot the system immediately after halt
oslevel
- show the current revision of the operating system.
CONNECTIVITY
exit
- end current shell process. If you log in, then type this command, it will return
you to login. ^D (control-D) and logout (in some shells) does the same.
rlogin
- login to a remote machine, e.g.
$ rlogin hollandrs # log in to machine called hollandrs
Useful with -l option to specify username - e.g.
$ rlogin cityrs -l ismsdev # log in to machine cityrs as user ismsdev For further
info about trust network see .rhosts file and /etc/resolv.conf (I think).
telnet
- very similar to rlogin except that it is more flexible (just type telnet with no
arguments and then '?' to see the options). Useful because you can specify a telnet
to a different port.
ftp
- File Transfer Protocol - a quick and easy method for transferring files between
machines. The .netrc file in your $HOME directory holds initial commands. type
ftp without arguments and then '?' to see options)
rcp
- Remote copy. Copies a file from one unix box to another, as long as they trust
each other (see .rhosts file or /etc/resolv.conf I think). Options
-f (to force the copy to occur)
-r (to recursively copy a directory)
-p (to attempt to preserve permissions when copying)
su - <loginname>
- switch user, option '-' means that the users .profile is run, without option you
merely assume the id and permissions of the user, without (for example) changing
PATH and DBPATH, e.g.
$ su - root # become root
$ su root # gain permissions of root but don't change the current environment
variables
$ su - vlink # switch to user vlink
If you are root, you may su to any other user without being prompted for a
password. su without arguments is the same as 'su root'. Note that the 'su' option is
not available on all UNIX machines as it can crash some of them.
ping <hostname>
- check that <hostname> is alive and well (do not expect an immediate response
from a machine that is linked over an ISDN line). Firewalls often block ping
packets after the Ping of Death so quite often you'll find you can't ping internet
sites either. Options include:
-q ping quietly
-i<no> wait no of seconds between each packet sending. The default is 1
second. If you are using ping to keep an ISDN line up then using
something like $ ping -i 5 -q hollandrs is ideal.
-f Never use this! Sends as many packets as it possibly can as fast as
possible, used for network debugging and is likely to slow networks
horribly when used. Known as 'flood' pinging.
-c <no> send no of packets before giving up
To check that your machine can ping, try pinging 127.0.0.1 - this acts as a
feedback loop, checking the network card's ability to ping.
rsh <hostname> <commands>
- remote shell - e.g.
$ rsh altos more /tmp/chk # will run the command more the file /tmp/chk on the
machine called altos. Useful in pipes for example. rsh on its own will execute a
login. Use option '-l' to specify logon name. You can also use rcmd and remsh on
other flavours of unix.
host <ip address>
- lookup the ip address in the /etc/hosts file and give its name
SCREEN COMMUNICATION
echo
- a command mainly used in shell scripts. Examples:
$ echo "Hello" # will print Hello on your screen
$ echo "Hello" > /dev/tty616 # will print Hello on someone elses screen (warning
- can crash their screen!)
$ echo $DESTF10 # will print the value of the environment variable DESTF10
$ echo "\033Fdemo demo" # will echo demo to the status bar at the top of a wyse
terminal
See also file shellscripts
read
- will read text from standard input and place it in the variable name specified.
See file shellscripts
line
- waits until the user presses return before carrying on (writes what is typed to
standard output). If used in a crontab/at job this instruction is ignored. See file
shellscripts
talk <user>
- set up an interactive communication dialogue box between two users. Looks
good but isn't really that useful.
write <user>
- writes a message to someone elses screen. Try typing 'write root' and then type a
message, finishing with control-D.
banner <message>
- writes <message> in huge letters across your screen! (max: 10 chars per word)
wall <message>
- send a message to all people on a system. Can only be executed by root (I think).
tput <argument>
- tty type independent attribute setting (requires TERM variable and TERMCAP
to be set). I only know these few bits:
tput cnorm - turns the screen cursor on
tput civis - turns the screen cursor off
tput clear - clears the screen
tput smso - turns all new text to bold
tput rmso - turns all bold text off
tee (-a) <filename>
- command used in pipes to take a copy of the standard output. e.g.
$ ls | tee /tmp/x # would output ls normally and put a copy in /tmp/x. The option 'a' is used to append rather than replace files.
MISCELLANEOUS
strip <binary compiled file>
- Removes all linking information within a compiled program - basically a way of
cutting down the size of an executable.
yes <word>
- yes outputs the word 'yes' as fast as its' little legs can go. Never called on it's
own. Always used in pipes. For example:
$ yes | rm *.o # would confirm 'yes' whenever rm prompts for confirmation. You
can also use it to output a different word e.g.
$ yes please # would output 'please' to the screen until you kill it (prob.
immediately).
sed '<pattern>'
- used by myself for quick substitutions when tr doesn't seem to be doing its job
properly. The syntax of the pattern is similar to vi ex command line. E.g. To
substitute all spaces with colon symbols the command is
sed 's/ /:/g' file1 # substitute all occurrences of spaces with colons in file1 and
output to stdout.
-------------- End of HandyCommands File ------------