<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML ><HEAD ><TITLE >Advanced Topics </TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK REL="HOME" TITLE="From VMS to Linux HOWTO" HREF="index.html"><LINK REL="PREVIOUS" TITLE="Mail and Internet Tools " HREF="mail-and-internet-tools.html"><LINK REL="NEXT" TITLE="Configuring " HREF="configuring.html"></HEAD ><BODY CLASS="SECT1" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#840084" ALINK="#0000FF" ><DIV CLASS="NAVHEADER" ><TABLE SUMMARY="Header navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TH COLSPAN="3" ALIGN="center" >From VMS to Linux HOWTO</TH ></TR ><TR ><TD WIDTH="10%" ALIGN="left" VALIGN="bottom" ><A HREF="mail-and-internet-tools.html" ACCESSKEY="P" >Prev</A ></TD ><TD WIDTH="80%" ALIGN="center" VALIGN="bottom" ></TD ><TD WIDTH="10%" ALIGN="right" VALIGN="bottom" ><A HREF="configuring.html" ACCESSKEY="N" >Next</A ></TD ></TR ></TABLE ><HR ALIGN="LEFT" WIDTH="100%"></DIV ><DIV CLASS="SECT1" ><H1 CLASS="SECT1" ><A NAME="ADVANCED-TOPICS" ></A >8. Advanced Topics</H1 ><P >Here the game gets tough. Learn these features, then you'll be ready to say that you `know something about Linux' ;-)</P ><DIV CLASS="SECT2" ><H2 CLASS="SECT2" ><A NAME="PERMISSIONS" ></A >8.1. Permissions and Ownership</H2 ><P >Files and directories have permissions (`protections') and ownership, just like under VMS. If you can't run a program, or can't modify a file, or can't access a directory, it's because you don't have the permission to do so, and/or because the file doesn't belong to you. Let's have a look at the following example:</P ><P > <TABLE BORDER="1" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="SCREEN" >$ ls -l /bin/ls -rwxr-xr-x 1 root bin 27281 Aug 15 1995 /bin/ls*</PRE ></FONT ></TD ></TR ></TABLE > </P ><P >The first field shows the permissions of the file <TT CLASS="LITERAL" >ls</TT > (owner root, group bin). There are three types of ownership: owner, group, and others (similar to VMS owner, group, world), and three types of permissions: read, write (and delete), and execute.</P ><P >From left to right, <TT CLASS="LITERAL" >-</TT > is the file type (<TT CLASS="LITERAL" >-</TT > = ordinary file, <TT CLASS="LITERAL" >d</TT > = directory, <TT CLASS="LITERAL" >l</TT > = link, etc); <TT CLASS="LITERAL" >rwx</TT > are the permissions for the file owner (read, write, execute); <TT CLASS="LITERAL" >r-x</TT > are the permissions for the group of the file owner (read, execute); <TT CLASS="LITERAL" >r-x</TT > are the permissions for all other users (read, execute).</P ><P >To change a file's permissions:</P ><P > <TABLE BORDER="1" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="SCREEN" >$ chmod <whoXperm> <file></PRE ></FONT ></TD ></TR ></TABLE > </P ><P >where who is <TT CLASS="LITERAL" >u</TT > (user, that is owner), <TT CLASS="LITERAL" >g</TT > (group), <TT CLASS="LITERAL" >o</TT > (other), X is either <TT CLASS="LITERAL" >+</TT > or <TT CLASS="LITERAL" >-</TT >, perm is <TT CLASS="LITERAL" >r</TT > (read), <TT CLASS="LITERAL" >w</TT > (write), or <TT CLASS="LITERAL" >x</TT > (execute). Examples:</P ><P > <TABLE BORDER="1" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="SCREEN" >$ chmod u+x file</PRE ></FONT ></TD ></TR ></TABLE > </P ><P >this sets the execute permission for the file owner. Shortcut: <TT CLASS="LITERAL" >chmod +x file</TT >.</P ><P > <TABLE BORDER="1" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="SCREEN" >$ chmod go-wx file</PRE ></FONT ></TD ></TR ></TABLE > </P ><P >this removes write and execute permission for everyone except the owner.</P ><P > <TABLE BORDER="1" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="SCREEN" >$ chmod ugo+rwx file</PRE ></FONT ></TD ></TR ></TABLE > </P ><P >this gives everyone read, write, and execute permission. </P ><P >A shorter way to refer to permissions is with numbers: <TT CLASS="LITERAL" >rwxr-xr-x</TT > can be expressed as 755 (every letter corresponds to a bit: <TT CLASS="LITERAL" >---</TT > is 0, <TT CLASS="LITERAL" >--x</TT > is 1, <TT CLASS="LITERAL" >-w-</TT > is 2...).</P ><P >For a directory, <TT CLASS="LITERAL" >rx</TT > means that you can <TT CLASS="LITERAL" >cd</TT > to that directory, and <TT CLASS="LITERAL" >w</TT > means that you can delete a file in the directory (according to the file's permissions, of course), or the directory itself. All this is only part of the matter---RMP.</P ><P >To change a file's owner:</P ><P > <TABLE BORDER="1" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="SCREEN" >$ chown username file</PRE ></FONT ></TD ></TR ></TABLE > </P ><P >To sum up, a table:</P ><P > <TABLE BORDER="1" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="SCREEN" >VMS Linux Notes ------------------------------------------------------------------------------ SET PROT=(O:RW) file.txt $ chmod u+rw file.txt $ chmod 600 file.txt SET PROT=(O:RWED,W) file $ chmod u+rwx file $ chmod 700 file SET PROT=(O:RWED,W:RE) file $ chmod 755 file SET PROT=(O:RW,G:RW,W) file $ chmod 660 file SET FILE/OWNER_UIC=JOE file $ chown joe file SET DIR/OWNER_UIC=JOE [.dir] $ chown joe dir/</PRE ></FONT ></TD ></TR ></TABLE > </P ></DIV ><DIV CLASS="SECT2" ><H2 CLASS="SECT2" ><A NAME="MULTITASKING" ></A >8.2. Multitasking: Processes and Jobs</H2 ><P >More about running programs. There are no `batch queues' under Linux as you're used to; multitasking is handled very differently. Again, this is what the typical command line looks like:</P ><P > <TABLE BORDER="1" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="SCREEN" >$ command -s1 -s2 ... -sn par1 par2 ... parn < input > output &</PRE ></FONT ></TD ></TR ></TABLE > </P ><P >where <TT CLASS="LITERAL" >-s1</TT >, ..., <TT CLASS="LITERAL" >-sn</TT > are the program switches, <TT CLASS="LITERAL" >par1</TT >, ..., <TT CLASS="LITERAL" >parn</TT > are the program parameters.</P ><P >Now let's see how multitasking works. Programs, running in foreground or background, are called `processes'.</P ><P > <P ></P ><UL ><LI ><P > To launch a process in background: <TABLE BORDER="1" BGCOLOR="#E0E0E0" WIDTH="90%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="SCREEN" >$ progname [-switches] [parameters] [< input] [> output] & [1] 234</PRE ></FONT ></TD ></TR ></TABLE > the shell tells you what the `job number' (the first digit; see below) and PID (Process IDentifier) of the process are. Each process is identified by its PID. </P ></LI ><LI ><P > To see how many processes there are: <TABLE BORDER="1" BGCOLOR="#E0E0E0" WIDTH="90%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="SCREEN" >$ ps -ax</PRE ></FONT ></TD ></TR ></TABLE > This will output a list of currently running processes. </P ></LI ><LI ><P > To kill a process: <TABLE BORDER="1" BGCOLOR="#E0E0E0" WIDTH="90%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="SCREEN" >$ kill <PID></PRE ></FONT ></TD ></TR ></TABLE > You may need to kill a process when you don't know how to quit it the right way... ;-). Sometimes, a process will only be killed by one of the following: <TABLE BORDER="1" BGCOLOR="#E0E0E0" WIDTH="90%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="SCREEN" >$ kill -15 <PID> $ kill -9 <PID></PRE ></FONT ></TD ></TR ></TABLE > </P ></LI ></UL > </P ><P >In addition to this, the shell allows you to stop or temporarily suspend a process, send a process to background, and bring a process from background to foreground. In this context, processes are called `jobs'.</P ><P > <P ></P ><UL ><LI ><P > To see how many jobs there are: <TABLE BORDER="1" BGCOLOR="#E0E0E0" WIDTH="90%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="SCREEN" >$ jobs</PRE ></FONT ></TD ></TR ></TABLE > jobs are identified by the numbers the shell gives them, not by their PID. </P ></LI ><LI ><P > To stop a process running in foreground: <TABLE BORDER="1" BGCOLOR="#E0E0E0" WIDTH="90%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="SCREEN" >$ CTRL-C</PRE ></FONT ></TD ></TR ></TABLE > (it doesn't always work) </P ></LI ><LI ><P > To suspend a process running in foreground: <TABLE BORDER="1" BGCOLOR="#E0E0E0" WIDTH="90%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="SCREEN" >$ CTRL-Z</PRE ></FONT ></TD ></TR ></TABLE > (ditto) </P ></LI ><LI ><P > To send a suspended process into background (it becomes a job): <TABLE BORDER="1" BGCOLOR="#E0E0E0" WIDTH="90%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="SCREEN" >$ bg <job></PRE ></FONT ></TD ></TR ></TABLE > </P ></LI ><LI ><P > To bring a job to foreground: <TABLE BORDER="1" BGCOLOR="#E0E0E0" WIDTH="90%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="SCREEN" >$ fg <job></PRE ></FONT ></TD ></TR ></TABLE > </P ></LI ><LI ><P > To kill a job: <TABLE BORDER="1" BGCOLOR="#E0E0E0" WIDTH="90%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="SCREEN" >$ kill <%job></PRE ></FONT ></TD ></TR ></TABLE > </P ></LI ></UL > </P ></DIV ><DIV CLASS="SECT2" ><H2 CLASS="SECT2" ><A NAME="AEN542" ></A >8.3. Files, Revisited</H2 ><P >More information about files.</P ><P > <P ></P ><UL ><LI ><P > <EM >stdin, stdout, stderr</EM >: under UNIX, every system component is treated as if it were a file. Commands and programs get their input from a `file' called <TT CLASS="LITERAL" >stdin</TT > (standard input; usually, the keyboard), put their output on a `file' called <TT CLASS="LITERAL" >stdout</TT > (usually, the screen), and error messages go to a `file' called <TT CLASS="LITERAL" >stderr</TT > (usually, the screen). Using <TT CLASS="LITERAL" ><</TT > and <TT CLASS="LITERAL" >></TT > you redirect input and output to a different file. Moreover, <TT CLASS="LITERAL" >>></TT > appends the output to a file instead of overwriting it; <TT CLASS="LITERAL" >2></TT > redirects error messages (stderr); 2>&1 redirects stderr to stdout, while 1>&2 redirects stdout to stderr. There's a `black hole' called <TT CLASS="LITERAL" >/dev/null</TT >: everything redirected to it disappears; </P ></LI ><LI ><P > <EM >wildcards</EM >: '<TT CLASS="LITERAL" >*</TT >' is almost the same. Usage: * matches all files except the hidden ones; .* matches all hidden files; *.* matches only those that have a '.' in the middle, followed by other characters; p*r matches both `peter' and `piper'; *c* matches both `picked' and `peck'. '<TT CLASS="LITERAL" >%</TT >' becomes '<TT CLASS="LITERAL" >?</TT >'. There is another wildcard: the <TT CLASS="LITERAL" >[]</TT >. Usage: <TT CLASS="LITERAL" >[abc]*</TT > matches files starting with a, b, c; <TT CLASS="LITERAL" >*[I-N,1,2,3]</TT > matches files ending with I, J, K, L, M, N, 1, 2, 3; </P ></LI ><LI ><P > <TT CLASS="LITERAL" >mv</TT > (<TT CLASS="LITERAL" >RENAME</TT >) doesn't work for multiple files; that is, <TT CLASS="LITERAL" >mv *.xxx *.yyy</TT > won't work; </P ></LI ><LI ><P > use <TT CLASS="LITERAL" >cp -i</TT > and <TT CLASS="LITERAL" >mv -i</TT > to be warned when a file is going to be overwritten. </P ></LI ></UL > </P ></DIV ><DIV CLASS="SECT2" ><H2 CLASS="SECT2" ><A NAME="PRINT-QUEUES" ></A >8.4. Print Queues</H2 ><P >Your prints are queued, like under VMS. When you issue a print command, you may specify a printer name. Example:</P ><P > <TABLE BORDER="1" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="SCREEN" >$ lpr file.txt # this goes to the standard printer $ lpr -Plaser file.ps # this goes to the printer named 'laser'</PRE ></FONT ></TD ></TR ></TABLE > </P ><P >To handle the print queues, you use the following commands:</P ><P > <TABLE BORDER="1" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="SCREEN" > VMS Linux ------------------------------------------------------------------------------ $ PRINT file.ps $ lpr file.ps $ PRINT/QUEUE=laser file.ps $ lpr -Plaser file.ps $ SHOW QUEUE $ lpq $ SHOW QUEUE/QUEUE=laser $ lpq -Plaser $ STOP/QUEUE $ lprm <item> </PRE ></FONT ></TD ></TR ></TABLE > </P ></DIV ></DIV ><DIV CLASS="NAVFOOTER" ><HR ALIGN="LEFT" WIDTH="100%"><TABLE SUMMARY="Footer navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" ><A HREF="mail-and-internet-tools.html" ACCESSKEY="P" >Prev</A ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="index.html" ACCESSKEY="H" >Home</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" ><A HREF="configuring.html" ACCESSKEY="N" >Next</A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" >Mail and Internet Tools</TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" > </TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" >Configuring</TD ></TR ></TABLE ></DIV ></BODY ></HTML >