\documentclass[letterpaper]{article}
\nonstopmode
\akai
\usepackage{linuxdoc-sgml}
\usepackage{qwertz}
\usepackage{url}
\usepackage[latin1]{inputenc}
\usepackage{t1enc}
\usepackage[english]{babel}
\usepackage{epsfig}
\usepackage{null}
\def\addbibtoc{
\addcontentsline{toc}{section}{\numberline{\mbox{}}\relax\bibname}
}%end-preamble
\setcounter{page}{1}
\title{SMB HOWTO}
\author{§@ªÌ: David Wood, {\ttfamily \onlynameurl{dwood@plugged.net.au}}\\ 
Ä¶ªÌ: J.S. Lin, {\ttfamily \onlynameurl{r6921068@ms.cc.ntu.edu.tw}}}
\date{v1.0, 10 August 1996}
\abstract{³o¬O SMB HOWTO $\{$¦p¦ó¨Ï¥Î SMB$\}$.  ³o¤å¥ó´y­z¦b Linux ¤W¦p¦ó¨Ï¥Î Session Message Block (SMB) protocol$\{$¨ó©w$\}$, ¤]¥s°µ NetBIOS ©Î LanManager protocol.}


\begin{document}
\maketitle
\tableofcontents

\section{¤¶²Ð}

³o¬O SMB HOWTO $\{$¦p¦ó¨Ï¥Î SMB$\}$ .  ³o¤å¥ó´y­z¦b Linux ¤W¦p¦ó¨Ï¥Î Session Message Block (SMB) protocol, ¤]¥s°µ NetBIOS ©Î LanManager protocol.

¥»¤å¥óªººûÅ@ªÌ¬O David Wood (\onlynameurl{dwood@plugged.net.au}).  ¦AªÌ,­×§ï©Î­×¥¿¥i¥H±H¨ì¨º,¥H«K¤U¤@ª©¥]²[¶i¥h.

SMB protocol ³Q¨Ï¥Î¦b Microsoft Windows 3.11, NT ©M 95 ¥Î¨Ó¤À¨ÉºÏºÐ¤Î¦L¾÷.  ¨Ï¥Î Andrew Tridgell ©Ò°µªº Samba ¤u¨ã®M¥ó, UNIX (¥]§t Linux) ¾÷¾¹¯à¤À¨ÉºÏºÐ»P¦Lªí¾÷µ¹ Windows ¥D¾÷.

§^¤H¨Ï¥Î Samba ¦³¥|¼ËªF¦è¥i¥H°µ:

\begin{enumerate}
\item ¤À¨É linux ºÏºÐµ¹ Windows ¾÷¾¹.
\item ¤À¨É Windows ºÏºÐµ¹ linux ¾÷¾¹.
\item ¤À¨É linux ¦Lªí¾÷µ¹ Windows ¾÷¾¹.
\item ¤À¨É Windows ¦Lªí¾÷µ¹ linux ¾÷¾¹.
\end{enumerate}


³o¨ÇªF¦è³£¤w¥]§t¦b¥»¤å¥ó¤¤.

Disclaimer: procedures ©M script ­n¹À¹ï§@ªÌ¬O¥i¥H¥¿±`¹B§@ªº,©Î­n¹À¥Ñ¨º¨Ç(procedures©Mscript)ªº´£¨ÑªÌ³ø§i¥i¥H¥¿±`¹B§@. ¥H¦b³oùØªº¸ê°T°µ¤£¦Pªº³]©w¥i¯à·|¤£¯à¥¿±`¹B§@.¦pªG§A¾D¹JÃþ¦üªº§x¹Ò,§A¥i¥H e-mail µ¹§@ªÌ,´£¥X«ØÄ³¨Ó§ï¶i¥»¤å¥ó, ¦ý§@ªÌ¨Ã¤£§@¥ô¦ó«OÃÒ.§A¹w´Á¤°»ò©O? §@ªÌ²¦³º¥u¬O­ÓÅU°Ý.....






\section{¶i¤@¨B¸ê°T}

³o­Ó HOWTO ³]ªk¥h¸ÑÄÀ¦p¦ó³]©w°ò¥»ªº SMBÀÉ¥H¤Î¦C¦LªA°È¦b linux ¾÷¾¹¤W. Samba ¬O­Ó«D±`½ÆÂø¥B§¹¾ãªº¥]¸Ë. ¦b³o­Ó¦a¤è¨S¦³­n³]ªk¥h½Æ»s©Ò¦³ªº Samba ¤å¥ó.

¶i¤@¨B¸ê°T,½Ð¬Ý¥H¤U¤å¥ó:
\begin{itemize}
\item Samba ¤å¥ó, ¥i¨ú±o©ó Samba µo¦æ®M¥ó$\{$distribution$\}$ªº³¡¤À. ¦¹µo¦æ®M¥ó¥i¨ú±o¦b:
\nameurl{ftp://nimbus.anu.edu.au/pub/tridge/samba/}{ftp://nimbus.anu.edu.au/pub/tridge/samba/}
\item The linux Printing HOWTO.
\item The Print2Win Mini-HOWTO.
\end{itemize}







\section{¦w¸Ë}

³Ì·s Samba ªº­ì©lµ{¦¡¥i¥H¨ú±o¦Û:

\nameurl{ftp://nimbus.anu.edu.au/pub/tridge/samba/}{ftp://nimbus.anu.edu.au/pub/tridge/samba/}

µM¦Ó,¦pªG¤w¦w¸Ë linux ªº Redhat ª©¥»,§A¥i¥H¨Ï¥Î³nÅé®M¥ó$\{$package$\}$ ¨Ó¦w¸Ë¥¦.¦³¨Ç¨ä¥Lª©¥»¤]¥]§t Samba ªºbinaries$\{$¤G¤¸ÀÉµ{¦¡$\}$.

¥H¤U¨â­Ó daemon$\{$ºÞ²zºëÆF$\}$ ¹ï Samba ³nÅé®M¥ó ¬O¥²­nªº. ¥¦­Ì¤@¯ë¬O³Q¦w¸Ë¦b /usr/sbin ,¦Ó¥i¦b¶}¾÷®É,±q¨t²Î°_°Êªº scripts©Îinetd¨Ó°õ¦æ. scriptªº¨Ò¤l³Q®i¥Ü¦b \ref{sec-daemons} {(°õ¦æ Daemons)}. 

\par
\addvspace{\medskipamount}
\nopagebreak\hrule
\begin{verbatim}
        smbd (The SMB daemon)
        nmbd (´£¨Ñ NetBIOS nameserver ªº¤ä´©µ¹ clients)
\end{verbatim} 
\nopagebreak\hrule 
\addvspace{\medskipamount}


¤@¯ë¦Ó¨¥,¥H¤Uªº Samba ªº binaries ³Q¦w¸Ë¦b /usr/bin, ÁöµM»¡¥¦ªº¦ì¸m¬O¥i¿ï¾Ü©Ê.

\par
\addvspace{\medskipamount}
\nopagebreak\hrule
\begin{verbatim}
        smbclient       (¤@ºØ¨Ñµ¹ UNIX ¾÷¾¹¥Îªº SMB  client{µ{¦¡})
        smbprint        (¤@ºØ script ¥Î¦b¦C¦L©ó SMB ¥D¾÷{host}¤Wªº¦Cªí¾÷)
        smbprint.sysv   (¦P¤W, ¦ý¬O´£¨Ñµ¹ SVR4 UNIX ¾÷¾¹¥Îªº)
        smbstatus       (¦C¥X¹ï·í¦a¥D¾÷¤§¥Ø«e SMB ³sµ²±¡ªp)
        smbrun          (¤@ºØ 'glue' script ¥Î¨ÓÂ²©ö¦a°õ¦æÀ³¥Îµ{¦¡©ó SMB ¥D¾÷)
\end{verbatim} 
\nopagebreak\hrule 
\addvspace{\medskipamount}


¦AªÌ,¤@ºØ¥s 'print' ªº script ³Q¥]¨ç¦b¥» HOWTO ¤§¤¤, ¨ä¥Î¨Ó·í§@¤@ºØ¦³¥Îªº front end$\{$«eºÝ¤¶­±$\}$ µ¹ smbprint script¥Î.

Samba ³nÅé®M¥ó¬OÂ²©ö¦w¸Ëªº.Â²³æ¦a±q¤W­zªº¦ì§}¨ú±o­ì©l½X, ¥B¾\Åª¦bµo¦æ®M¥ó¤¤ªº README ÀÉ®×. ¦bµo¦æ®M¥ó¤¤¤]¦³¤@­Ó docs/INSTALL.txt ÀÉ´£¨Ñ¤@­ÓÂ²³æªº³v¨B¦w¸Ë«ü¥Ü.

±µµÛ¦w¸Ë«á, §â daemons ©ñ¨ì /usr/sbin ¦Ó binaries ©ñ¨ì /usr/bin. ¦Ó man pages$\{$¤â¥U­¶$\}$ Â\¦b /usr/local/man.

·í§A¦b°µ Samba ³nÅé®M¥ó, §A¦b Makefile ¤¤·|¦³°O¸ü²ÕºAÀÉ,smb.conf,ªº¦ì¸m. ³o¤@¯ë¬O¦b /etc¤U, ¦ý¥i¥H§â¥¦Â\¨ì§A³ßÅwÂ\ªº¥ô·N¦ì¸m. ¹ï©ó³o¨Ç¨Ï¥Î¤èªk$\{$directions$\}$, §Ú­Ì±N°²³]§A°O¸ü²Õ¸üÀÉ¦ì¸m¦¨ /etc/smb.conf, log ÀÉ¦ì¸m¬° log file = /var/log/samba-log.\%m ,¦Ó lock ¥Ø¿ý¬° lock directory = /var/lock/samba.

¦w¸Ë²ÕºA$\{$configuration$\}$ÀÉ, smb.conf. ¥h Samba ©Ò¦bªºªº¥Ø¿ý. ¬Ý¤@¤U¦b¨ä¤l¥Ø¿ý example/simple ¦Ó¥BÅª¤@¤U README ÀÉ. ½Æ»s¦b¨º­Ó¥Ø¿ý¤Uªº smb.conf ÀÉ¨ì /etc ¤U. ª`·N! ¦pªG§A¦³¤@ linux µo¦æ®M¥ó¤w¦w¸Ë¦n Samba, §A¤]³\¤w¦³ Samba ²ÕºAÀÉ¦b /etc ¤U. ©Î³\§AÀ³¸Ó±q¨º­ÓÀÉ¶}©l.



¦pªG§A¤£·Q§â²ÕºAÀÉ©ñ¦b /etc ¥Ø¿ý¤U,¥i¥H§â¥¦Â\¦b§A·Q­nÂ\ªº¦a¤è,µM«á¦b /etc ¤U°µ¤@¤U symlink$\{$²Å¸¹³sµ²$\}$:

\par
\addvspace{\medskipamount}
\nopagebreak\hrule
\begin{verbatim}
        ln -s /path/to/smb.conf /etc/smb.conf
\end{verbatim} 
\nopagebreak\hrule 
\addvspace{\medskipamount}





\section{°õ¦æ³o¨â­Ó daemon\label{sec-daemons}}

³o¨â­Ó daemon ¬O /usr/sbin/smbd ©M /usr/sbin/nmbd. 

§A¥i¥H°õ¦æ Samba daemon ±q inetd ©Î·í¦¨³æ¿Wªºµ{§Ç. ¦pªG§A¥¿³]©w¤@­Ó¥Ã¤[ÀÉ®×¦øªA¾¹,§AÀ³¸Ó±q inetd ¨Ó°õ¦æ,©Ò¥H¦pªG¥L­Ì¦º±¼,¨º±N­«·s¶}©l.¦pªG§A¥u¬O°¸º¸·Q­n¨Ï¥Î SMB ¦øªA¾¹,©ÎªÌ¥Î¨t²ÎºÞ²z¨Ó»²§U,·í§A»Ý­n®É,§A¥i¥HÂÇ¥Ñ¨Ï¥Î /etc/rc.d/init.d script,©Î¬Æ¦Üª½±µ¤â°Êªº. 

­n±q inetd ¨Ó°õ¦æ daemon , ½Ð©ñ¥H¤U´X¦æ¦b inetd ²ÕºAÀÉ, /etc/inetd.conf:

\begin{tscreen}
\par
\addvspace{\medskipamount}
\nopagebreak\hrule
\begin{verbatim}
    # SAMBA NetBIOS services (for PC file and print sharing)
    netbios-ssn stream tcp nowait root /usr/sbin/smbd smbd
    netbios-ns dgram udp wait root /usr/sbin/nmbd nmbd
\end{verbatim} 
\nopagebreak\hrule 
\addvspace{\medskipamount}
\end{tscreen}


µM«á¤U«ü¥O¥H«K­«·s±Ò°Ê inetd daemon :

\par
\addvspace{\medskipamount}
\nopagebreak\hrule
\begin{verbatim}
    kill -HUP 1
\end{verbatim} 
\nopagebreak\hrule 
\addvspace{\medskipamount}


­n±q¨t²Î±Ò°Êªº script ¨Ó°õ¦æ daemon, ½Ð§â¥H¤Uªº script ¸m©ó¤@­Ó¥s°µ /etc/rc.d/init.d/smb ÀÉ, ¦Ó¥B symbolically link ¨ìµùÄÀ$\{$comments$\}$©Ò»¡©úªºÀÉ®×:

\begin{tscreen}
\par
\addvspace{\medskipamount}
\nopagebreak\hrule
\begin{verbatim}
    #!/bin/sh

    #
    # /etc/rc.d/init.d/smb - starts and stops SMB services.
    #
    # The following files should be synbolic links to this file:
    # symlinks: /etc/rc.d/rc1.d/K35smb  (Kills SMB services on shutdown)
    #           /etc/rc.d/rc3.d/S91smb  (Starts SMB services in multiuser mode)
    #           /etc/rc.d/rc6.d/K35smb  (Kills SMB services on reboot)
    #

    # Source function library.
    . /etc/rc.d/init.d/functions

    # Source networking configuration.
    . /etc/sysconfig/network

    # Check that networking is up.
    [ ${NETWORKING} = "no" ] && exit 0

    # See how we were called.
    case "$1" in
      start)
        echo -n "Starting SMB services: "
        daemon smbd -D  
        daemon nmbd -D 
        echo
        touch /var/lock/subsys/smb
        ;;
      stop)
        echo -n "Shutting down SMB services: "
        killproc smbd
        killproc nmbd
        rm -f /var/lock/subsys/smb
        echo ""
        ;;
      *)
        echo "Usage: smb {start|stop}"
        exit 1
    esac
\end{verbatim} 
\nopagebreak\hrule 
\addvspace{\medskipamount}
\end{tscreen}







\section{¤@¯ë²ÕºA³]©w (/etc/smb.conf)}

¦b linux (©Î¨ä¥L UNIX¾÷¾¹)¤Wªº Samba ²ÕºA³]©w¬O³Q³æ¤@ÀÉ®×, /etc/smb.conf ,©Ò±±¨î. ³o­ÓÀÉ¨M©w§A·Q­n­þ­Ó¨t²Î¸ê·½¤À¨Éµ¹¥~­±¥@¬É¥H¤Î§A·Q¹ï¥L­Ì°µ¤°»ò­­¨î.

¦]¬°¥H¤U³¹¸`±N·|³B²z¤À¨É linux ºÏºÐ»P¦Lªí¾÷µ¹ Windows ¾÷¾¹, ¥»¤p¸`©Ò®i¥Üªº smb.conf ÀÉ¾¨¶q¬O§A©Ò¯à¨ú±o¸ûÂ²³æªº, ¥¦¥u¬O¥H¤¶²Ð©Ê¬°¥Øªº.

¥Ø«eÁÙ¤£­n¾á¤ß²Ó¸`³¡¤À. «á­±ªº³¹¸`±N·|¤¶²Ð¥D­nªº·§©À.

¦bÀÉ®×¤¤ªº¨Cªº¬q¸¨$\{$section$\}$·|¦³­Ó¬q¸¨¼ÐÀY¶}©l, ¨ä¼ÐÀY¹³¬O {[}global], {[}homes], {[}printers] µ¥µ¥.

{[}global] ¬q¸¨©w¸q¤@¨ÇÅÜ¼Æ, ¦Ó Samba ±N¥Î¨Ó©w¸q©ó©Ò¦³¸ê·½¤§¤À¨É.

{[}homes] ¬q¸¨¤¹³\»·ºÝ¨Ï¥ÎªÌ¨Ó¦s¨ú¦b·í¦a(linux)¾÷¾¹¤W¤§¥L­Ìªº(¥B¥u¦³¥L­Ìªº) home directories$\{$®a¥Ø¿ý$\}$. ¤]´N¬O, ¦pªG¤@­Ó Windows ¨Ï¥ÎªÌ±q¥L­Ìªº Windows ¾÷¾¹­n³]ªk³s±µ¨ì³o­Ó¤À¨É, ¥L­Ì±N¬O³s±µ¨ì¥L­Ì¦Û¤v­Ó¤Hªº home directiory. ­n°µ³o¼Ë¨Æ±¡,©Ò­nª`·Nªº¬O,¥L­Ì¥²¶·¦blinux box¤W¦³­Ó±b¸¹.

¥H¤Uªº smb.conf ÀÉ®×¼Ë¥»¤¹³\»·ºÝ¨Ï¥ÎªÌ¨Ó¥Î·í¦a¾÷¾¹¤W¥L­Ìªº home directories ¦Ó¥B¼g¨ì¤@­Ó¼È¦sªº¥Ø¿ý. ¹ï¤@­Ó Windows ¨Ï¥ÎªÌ,­n·Q¬Ý¨ì³o¨Ç¤À¨É, linux box ¥²¶·¬O¦b°Ï°ìºô¸ô$\{$local network$\}$¤º. µM«á,¨Ï¥ÎªÌÂ²³æ¦a±q Windows File Manager ©Î Windows Explorer ³s±µ¨ìºô¸ôºÏºÐ.

¦b¥H¤U¬q¸¨­nª`·Nªº¬O, ¹ï³o­ÓÀÉ¤§ÃB¥~¶µ¥Ø±N·|¥Î¨Ó¤¹³\§ó¦h¸ê·½³Q¤À¨É.

\begin{tscreen}
\par
\addvspace{\medskipamount}
\nopagebreak\hrule
\begin{verbatim}
; /etc/smb.conf
;
; Make sure and restart the server after making changes to this file, ex:
; /etc/rc.d/init.d/smb stop
; /etc/rc.d/init.d/smb start

[global]
; Uncomment this if you want a guest account
; guest account = nobody
   log file = /var/log/samba-log.%m
   lock directory = /var/lock/samba
   share modes = yes

[homes]
   comment = Home Directories
   browseable = no
   read only = no
   create mode = 0750

[tmp]
   comment = Temporary file space
   path = /tmp
   read only = no
   public = yes
\end{verbatim} 
\nopagebreak\hrule 
\addvspace{\medskipamount}
\end{tscreen}







\section{¤À¨É Linux ºÏºÐµ¹ Windows ¾÷¾¹}

¥H¤W©Ò®i¥Üªº smb.conf ¼Ë¥»ÀÉ, ¤À¨É linux ºÏºÐµ¹ Windows ¨Ï¥ÎªÌ¬O«Ü®e©öªº. µM¦Ó, ¹³ Samba ¨ä¥LªºªF¦è, §A¥i¥H±±¨î¨ì«Ü¤jªºµ{«×. ¥H¤U¦³¨Ç¨Ò¤l :

¬°¤F¤À¨É¥Ø¿ýµ¹¤j®a¨Ï¥Î, ´N«Ø¥ß­ÓÃþ¦ü¤W­z {[}tmp] ¬q¸¨, ¥ç§Y¥[¤J¹³³o­ÓªºªF¦è¨ì smb.conf:

\begin{tscreen}
\par
\addvspace{\medskipamount}
\nopagebreak\hrule
\begin{verbatim}
[public]
   comment = Public Stuff
   path = /home/public
   public = yes
   writable = yes
   printable = yes
\end{verbatim} 
\nopagebreak\hrule 
\addvspace{\medskipamount}
\end{tscreen}


¬°¤F¨Ï¥H¤W¥Ø¿ý¨Ñ¤j²³¥iÅª¨ú,¦ý¥u¦³¸s²Õ¦¨­û$\{$group staff$\}$¥i¼g¤J,½Ð­×§ï¨ä¶µ¥Ø¹³³o¼Ë:

\begin{tscreen}
\par
\addvspace{\medskipamount}
\nopagebreak\hrule
\begin{verbatim}
[public]
   comment = Public Stuff
   path = /home/public
   public = yes
   writable = yes
   printable = no
   write list = @staff
\end{verbatim} 
\nopagebreak\hrule 
\addvspace{\medskipamount}
\end{tscreen}


¨ä¥Lª±ºÏºÐ¤À¨Éªº§Þ¥©,½Ð¬Ý Samba ¤å¥ó©Î man pages.






\section{¤À¨É Windows ºÏºÐµ¹ Linux ¾÷¾¹}

¤@ºØµ¹ UNIX ¾÷¾¹¥Îªº SMB client µ{¦¡³Q¥]§t¦b Samba µo¦æ®M¥ó¤§¤¤.¥¦´£¨Ñ¤@ºØ¦b©R¥O¦C¤Uªº¹³ftpªº¤¶­±.

·Q­n¬Ý¦bµ¹©wªº¥D¾÷¤W¦³­þ¨Ç¤À¨É¥i¨ú±o, °õ¦æ:

\par
\addvspace{\medskipamount}
\nopagebreak\hrule
\begin{verbatim}
    /usr/sbin/smbclient -L host
\end{verbatim} 
\nopagebreak\hrule 
\addvspace{\medskipamount}


³oùØªº 'host' ¬O§A·Q­nÂsÄýªº¾÷¾¹¦W¤l. ³o±N·|¦^À³¤@¦ê 'service' ªº¦WºÙ - ¤]´N¬O, ¥¦©Ò¤À¨Éµ¹§AªººÏºÐ©Î¦Lªí¾÷ªº¦WºÙ. °£«D SMB ¦øªA¾¹¨S¦³¦w¥þ¤Wªº³]©w, §_«h¥¦±N­n¨D§A¿é¤J±K½X. µ¹¥¦ 'guest' ±b¸¹ªº±K½X©Î¬O§A­Ó¤H¦b¨º¥x¾÷¾¹¤W±b¸¹ªº±K½X.

Á|­Ó¨Ò¤l:

\par
\addvspace{\medskipamount}
\nopagebreak\hrule
\begin{verbatim}
    smbclient -L zimmerman
\end{verbatim} 
\nopagebreak\hrule 
\addvspace{\medskipamount}


³o­Ó«ü¥Oªº¿é¥XÀ³¸Ó¬Ý°_¨Ó¹³¬O³o¼Ë:

\begin{tscreen}
\par
\addvspace{\medskipamount}
\nopagebreak\hrule
\begin{verbatim}
Server time is Sat Aug 10 15:58:27 1996
Timezone is UTC+10.0
Password: 
Domain=[WORKGROUP] OS=[Windows NT 3.51] Server=[NT LAN Manager 3.51]

Server=[ZIMMERMAN] User=[] Workgroup=[WORKGROUP] Domain=[]

        Sharename      Type      Comment
        ---------      ----      -------
        ADMIN$         Disk      Remote Admin
        public         Disk      Public 
        C$             Disk      Default share
        IPC$           IPC       Remote IPC
        OReilly        Printer   OReilly
        print$         Disk      Printer Drivers


This machine has a browse list:

        Server               Comment
        ---------            -------
        HOPPER               Samba 1.9.15p8
        KERNIGAN             Samba 1.9.15p8
        LOVELACE             Samba 1.9.15p8
        RITCHIE              Samba 1.9.15p8
        ZIMMERMAN            
\end{verbatim} 
\nopagebreak\hrule 
\addvspace{\medskipamount}
\end{tscreen}


³o­Ó browse list ¦C¥X¨ä¥L¦³¸ê·½¤À¨Éµ¹ºô¸ôªº SMB ¦øªA¾¹.

­n¨Ï¥Î¦¹ client, ½Ð°õ¦æ:

\par
\addvspace{\medskipamount}
\nopagebreak\hrule
\begin{verbatim}
    /usr/sbin/smbclient service <password>
\end{verbatim} 
\nopagebreak\hrule 
\addvspace{\medskipamount}


³oùØªº 'service' ¬O¤@¥x¾÷¾¹©M¤À¨É¦WºÙ. Á|¨Ò¦Ó¨¥,¦pªG§A³]ªk³s¨ì¤@¥x¥s°µ zimmerman ªº¾÷¾¹¤W¤§¥H 'public' ¬°¤À¨É¦WºÙªº¥Ø¿ý ,¦¹ service ­n¥s°µ  $\backslash$$\backslash$zimmerman$\backslash$public. µM¦Ó,¦]¬° shell ­­¨î, §A·|»Ý­n²æÂ÷ backslashes, ©Ò¥H§A­n¹³³o¼Ëªºµ²§ô:

\par
\addvspace{\medskipamount}
\nopagebreak\hrule
\begin{verbatim}
    /usr/sbin/smbclient \\\\zimmerman\\public mypasswd
\end{verbatim} 
\nopagebreak\hrule 
\addvspace{\medskipamount}


³o¼Ëªº 'mypasswd' ¬O§Aªº±K½X¤§¤å¦r¦ê$\{$literal string$\}$.

§A±N·|¦³ smbclient ªº´£¥Ü²Å¸¹$\{$prompt$\}$¥X²{:

\begin{tscreen}
\par
\addvspace{\medskipamount}
\nopagebreak\hrule
\begin{verbatim}
Server time is Sat Aug 10 15:58:44 1996
Timezone is UTC+10.0
Domain=[WORKGROUP] OS=[Windows NT 3.51] Server=[NT LAN Manager 3.51]
smb: \> 
\end{verbatim} 
\nopagebreak\hrule 
\addvspace{\medskipamount}
\end{tscreen}


Áä¤J 'h' ¨ú±oÃö©ó¨Ï¥Î smbclient ªº help:

\begin{tscreen}
\par
\addvspace{\medskipamount}
\nopagebreak\hrule
\begin{verbatim}
smb: \> h
ls             dir            lcd            cd             pwd            
get            mget           put            mput           rename         
more           mask           del            rm             mkdir          
md             rmdir          rd             prompt         recurse        
translate      lowercase      print          printmode      queue          
cancel         stat           quit           q              exit           
newer          archive        tar            blocksize      tarmode        
setmode        help           ?              !              
smb: \> 
\end{verbatim} 
\nopagebreak\hrule 
\addvspace{\medskipamount}
\end{tscreen}


¦pªG§A¯à¨Ï¥Îftp,§AÀ³¸Ó¤£»Ý­n¬d¸ß smbclient ªº man pages.






\section{¤À¨É Linux ¦Lªí¾÷µ¹ Windows ¾÷¾¹}

¬°¤F¤À¨É Linux ¦Lªí¾÷µ¹ Windows ¾÷¾¹, §A¥²¶·½T©w§Aªº¦Lªí¾÷¤w¸g¸Ë³]¦n. ¦pªG§A¯à±q linux ¤W¦C¦L,³]©w SMB ªº¦Lªí¾÷¤À¨É±N·|«Üª½±µ.

½Ð¨£ Printing HOWTO ¨Ó³]©w·í¦aªº¦C¦L.

¦]¬°§@ªÌ¨Ï¥Î³Q³s±µ¨ì Windows NT ¾÷¾¹ªº¦Lªí¾÷, ³o¤p¸`¤£À³¸Ó³Qµø¬°«Ü§¹¾ãªº,¦Ó¥u¬O«ØÄ³.¥ô¦ó¦³¸Ô²Ó¸ê®Æ¥i¤À¨É¥X¨Óªº¤H, ½Ð±N³o¨Ç¸ê®Æ±H¨ì
\onlynameurl{dwood@plugged.net.au}
¨Ï±o³o¤p¸`¯à°÷§¹¦¨.

¥[¤J¦C¦L³]©w¨ì§Aªº smb.conf:

\begin{tscreen}
\par
\addvspace{\medskipamount}
\nopagebreak\hrule
\begin{verbatim}
[global]
   printing = bsd
   printcap name = /etc/printcap
   load printers = yes
   log file = /var/log/samba-log.%m
   lock directory = /var/lock/samba

[printers]
   comment = All Printers
   security = server
   path = /var/spool/lpd/lp
   browseable = no
   printable = yes
   public = yes
   writable = no
   create mode = 0700

[ljet]
   security = server
   path = /var/spool/lpd/lp
   printer name = lp
   writable = yes
   public = yes
   printable = yes
   print command = lpr -r -h -P %p %s
\end{verbatim} 
\nopagebreak\hrule 
\addvspace{\medskipamount}
\end{tscreen}


½T»{¦Lªí¾÷ªº¸ô®|(¥»¨Ò¤l¤¤¬O¦b{[}ljet]¤U)­n»P /etc/printcap¤¤ªº spool ¥Ø¿ý¬Û²Å¦X!

ª`·N:  ¨Ï¥Î Samba ¨Ó¤À¨É UNIX boxes ¤Wªº¦Lªí¾÷µ¹ Windows NT ¾÷¾¹¦³¤@¨Ç°ÝÃD. ¨ä¤¤¤@­Ó°ÝÃD¬O¨Ï¥Î NT ¾A·í¦a¬Ý¨ì¤À¨Éªº¦Lªí¾÷. ·Q­n­×¥¿³o­Ó°ÝÃD, ½Ð¬Ý Samba µo¦æ®M¥ó¤Wªº»¡©ú, §Y docs/WinNT.txt ÀÉ®×.¨ä¥L¬O³B²z±K½Xªº°ÝÃD. ¹ï©ó³oÂZ¤H°ÝÃDªº¤F¸Ñ»P¤£¯à¦¨¥\ªº­×¥¿,½Ð¬Ý¬Û¦P¤å¥ó¤Wªº»¡©ú.






\section{¤À¨É Windows ¦Lªí¾÷µ¹ Linux ¾÷¾¹}

¬°¤F¤À¨É Windows ¾÷¾¹¤Wªº¦Lªí¾÷, §A¥²¶·°µ¥H¤U¨BÆJ:

a) §A¥²¶·¦b /etc/printcap ¤º¦³¾A·íªº°O¿ý,¦Ó¥B¥L­Ì¥²¶·»P·í¦a¥Ø¿ýµ²ºc (¹³ spool ¥Ø¿ýµ¥) ¬Û²Å¦X.

b) §A¥²¶·¦³ script ÀÉ /usr/bin/smbprint. ³o·|ÀHªþ¦b Samba source, ¦ý¤£¬OÀHªþ©ó©Ò¦³ Samba binary µo¦æ®M¥ó. ¤@­Óµy·L­×§ïª©¥»¦b¥H¤U°Q½×.

c) ¦pªG§A·Q­nÂà´« ASCII ÀÉ¨ì Postscript,§A¥²¶·¦³netscript,©Î»P¨äµ¥®Äªº. netscipt ¬O¤@ºØ Postscript Âà´«¾¹¦Ó¥B¤@¯ë¬O¦w¸Ë¦b /usr/bin.

d) §A¥i¥H§Æ±æÂÇ¥Ñ¦³©ö©ó¨Ï¥Îªº frond end ¨Ó¨Ï Samba ¦C¦L§ó®e©ö. ¤@ºØ¥Î©ó³B²z ASCII, Postscript ©Î«Ø¥ß Postscript ªºÂ²³æ perl script ¦b¤U­±µ¹©w. 

¥H¤U /etc/printcap ¶µ¥Ø¥Î¦b Windows NT ¥D¾÷¤W HP 5MP ¦Lªí¾÷. ³o¨Ç¶µ¥Ø¦p¤U:

\par
\addvspace{\medskipamount}
\nopagebreak\hrule
\begin{verbatim}
        cm - comment
             {»¡©ú}
        lp - device name to open for output
             {¬°¤F¿é¥X,¦Ó­n¶}±Òªº³]³Æ¦WºÙ}
        sd - the printer's spool directory (on the local machine)
             {¦Lªí¾÷ªº spool ¥Ø¿ý (¦b·í¦aªº¾÷¾¹¤W)}
        af - the accounting file
             {±b¸¹ÀÉ®×}
        mx - the maximum file size (zero is unlimited)
             {³Ì¤jÀÉ®×¤j¤p (¹sªí¥Ü¨S­­¨î)}
        if - name of the input filter (script)
             {¿é¤J¹LÂo¤§¦WºÙ (script)}
\end{verbatim} 
\nopagebreak\hrule 
\addvspace{\medskipamount}


­n¨ú±o§ó¦h¸ê°T,½Ð¬Ý Printing HOWTO ©ÎªÌÃö©ó printcap ªº man page.

\begin{tscreen}
\par
\addvspace{\medskipamount}
\nopagebreak\hrule
\begin{verbatim}
# /etc/printcap
#
# //zimmerman/oreilly via smbprint
#
lp:\
        :cm=HP 5MP Postscript OReilly on zimmerman:\
        :lp=/dev/lp1:\
        :sd=/var/spool/lpd/lp:\
        :af=/var/spool/lpd/lp/acct:\
        :mx#0:\
        :if=/usr/bin/smbprint:
\end{verbatim} 
\nopagebreak\hrule 
\addvspace{\medskipamount}
\end{tscreen}


½Ð½T©w spool ©M accounting$\{$±b¸¹$\}$ ªº¥Ø¿ý¦s¦b¥B¥i¼g¤J. ½Ð½T«H¬Y¦æ¦³¾A·íªº¸ô®|«ü¨ì smbprint script (¦b¤U­±·|µ¹) ¦Ó¥B½T©w¾A·íªº³]³Æ³Q«ü¨ì ( /dev ¤U¬Y­ÓÀÉ).

¤U­Ó¬O smbprint script ¥»¨­. ¥¦³q±`³QÂ\¦b /usr/bin ¦Ó¥B¬O¦]¬° Andrew Tridgell ªº½t¬G,¦Ó¾Ú§Ú©Òª¾¬O¥L³Ð³y¤F Samba. ¥¦ÀHªþ¦b Samba source µo¦æ®M¥ó, ¦ý¦b¬Y¨Ç binary µo¦æ®M¥ó¨Ã¨S¦³, ©Ò¥H¦b³o§Ú¦A³y¤@­Ó. 

§A¥i¥H§Æ±æ¥J²Ó¦a¬Ý³o­Ó. ¦³¬Y¨Ç¸û¤pªº­×§ï¤w¸gÃÒ©ú¥¦­Ì¬O«Ü¦³¥Îªº.

\begin{tscreen}
\par
\addvspace{\medskipamount}
\nopagebreak\hrule
\begin{verbatim}
#!/bin/sh -x

# This script is an input filter for printcap printing on a unix machine. It
# uses the smbclient program to print the file to the specified smb-based 
# server and service.
# For example you could have a printcap entry like this
#
# smb:lp=/dev/null:sd=/usr/spool/smb:sh:if=/usr/local/samba/smbprint
#
# which would create a unix printer called "smb" that will print via this 
# script. You will need to create the spool directory /usr/spool/smb with
# appropriate permissions and ownerships for your system.

# Set these to the server and service you wish to print to 
# In this example I have a WfWg PC called "lapland" that has a printer 
# exported called "printer" with no password.

#
# Script further altered by hamiltom@ecnz.co.nz (Michael Hamilton)
# so that the server, service, and password can be read from 
# a /usr/var/spool/lpd/PRINTNAME/.config file.
#
# In order for this to work the /etc/printcap entry must include an 
# accounting file (af=...):
#
#   cdcolour:\
#       :cm=CD IBM Colorjet on 6th:\
#       :sd=/var/spool/lpd/cdcolour:\
#       :af=/var/spool/lpd/cdcolour/acct:\
#       :if=/usr/local/etc/smbprint:\
#       :mx=0:\
#       :lp=/dev/null:
#
# The /usr/var/spool/lpd/PRINTNAME/.config file should contain:
#   server=PC_SERVER
#   service=PR_SHARENAME
#   password="password"
#
# E.g.
#   server=PAULS_PC
#   service=CJET_371
#   password=""

#
# Debugging log file, change to /dev/null if you like.
#
logfile=/tmp/smb-print.log
# logfile=/dev/null


#
# The last parameter to the filter is the accounting file name.
#
spool_dir=/var/spool/lpd/lp
config_file=$spool_dir/.config

# Should read the following variables set in the config file:
#   server
#   service
#   password
#   user
eval `cat $config_file`

#
# Some debugging help, change the >> to > if you want to same space.
#
echo "server $server, service $service" >> $logfile

(
# NOTE You may wish to add the line `echo translate' if you want automatic
# CR/LF translation when printing.
        echo translate
        echo "print -"
        cat
) | /usr/bin/smbclient "\\\\$server\\$service" $password -U $user -N -P >> $logfile
\end{verbatim} 
\nopagebreak\hrule 
\addvspace{\medskipamount}
\end{tscreen}


¤j³¡¤À linux µo¦æ®M¥óÀHªþ nenscript ¨ä¥Î¨ÓÂà´« ASCII ¤å¥ó¦¨ Postscript. ¥H¤U perl script ¸g¥Ñ smbprint ¨Ï§ó®e©ö´£¨Ñ¤@ºØÂ²³æ¤¶­±µ¹ linux ªº¦C¦L.

\par
\addvspace{\medskipamount}
\nopagebreak\hrule
\begin{verbatim}
Usage: print [-a|c|p] <filename>
       -a prints <filename> as ASCII
       -c prints <filename> formatted as source code
       -p prints <filename> as Postscript
        If no switch is given, print attempts to
        guess the file type and print appropriately.
\end{verbatim} 
\nopagebreak\hrule 
\addvspace{\medskipamount}


¨Ï¥Î smbprint ¨Ó¦C¦L ASCII ÀÉ®×«K©óºIÂ_¹Lªøªº¦æ. ¦pªG¥i¯àªº¸Ü,³o­Ó script ºIÂ_ªø¦æ©óªÅ¥ÕÁä³B(¨ú¥N¦b¦rªº¤¤¶¡). 

®æ¦¡¤Æ¹Lªº­ì©l½X¬O³Q nenscript ³B²z¹L. ¥¦³B²z ASCII ÀÉ¦Ó¥B¥Î­Ó¯S¿ïªº¼ÐÀY(¹³ date,filenameµ¥)®æ¦¡¤Æ¦¨¨âÄæ. ¥¦¤]¥i­pºâ¦æ¼Æ. ¨Ï¥Î³o·í§@¨Ò¤l, ¨ä¥L®æ¦¡«¬ºA¥i¥H¹F¦¨ªº.

Postscript ¤å¥ó¤w¸g¾A·í¦a®æ¦¡¤Æ¤F,©Ò¥H¥¦­Ìª½±µ³q¹L.

\begin{tscreen}
\par
\addvspace{\medskipamount}
\nopagebreak\hrule
\begin{verbatim}
#!/usr/bin/perl

# Script:   print
# Authors:  Brad Marshall, David Wood
#           Plugged In Communications
# Date:     960808
#
# Script to print to oreilly which is currently on zimmerman
# Purpose:  Takes files of various types as arguments and 
# processes them appropriately for piping to a Samba print script.
#
# Currently supported file types:
# 
# ASCII      - ensures that lines longer than $line_length characters wrap on
#              whitespace.
# Postscript - Takes no action.
# Code       - Formats in Postscript (using nenscript) to display
#              properly (landscape, font, etc).
#

# Set the maximum allowable length for each line of ASCII text.
$line_length = 76;

# Set the path and name of the Samba print script
$print_prog = "/usr/bin/smbprint";

# Set the path and name to nenscript (the ASCII-->Postscript converter)
$nenscript = "/usr/bin/nenscript";

unless ( -f $print_prog ) {
        die "Can't find $print_prog!";
}
unless ( -f $nenscript ) {
        die "Can't find $nenscript!";
}

&ParseCmdLine(@ARGV);

# DBG
print "filetype is $filetype\n";

if ($filetype eq "ASCII") {
        &wrap($line_length);
} elsif ($filetype eq "code") {
        &codeformat;
} elsif ($filetype eq "ps") {
        &createarray;
} else {
        print "Sorry..no known file type.\n";
        exit 0;
}
# Pipe the array to smbprint
open(PRINTER, "|$print_prog") || die "Can't open $print_prog: $!\n";
foreach $line (@newlines) {
        print PRINTER $line;
}
# Send an extra linefeed in case a file has an incomplete last line.
print PRINTER "\n";
close(PRINTER);
print "Completed\n";
exit 0;

# --------------------------------------------------- #
#        Everything below here is a subroutine        #
# --------------------------------------------------- #

sub ParseCmdLine {
        # Parses the command line, finding out what file type the file is

        # Gets $arg and $file to be the arguments (if the exists)
        # and the filename
        if ($#_ < 0) {
                &usage;
        }
        # DBG
#       foreach $element (@_) {
#               print "*$element* \n";
#       }

        $arg = shift(@_);
        if ($arg =~ /\-./) {
                $cmd = $arg;
        # DBG
#       print "\$cmd found.\n";

                $file = shift(@_);
        } else {
                $file = $arg;
        }
        
        # Defining the file type
        unless ($cmd) {
                # We have no arguments

                if ($file =~ /\.ps$/) {
                        $filetype = "ps";
                } elsif ($file =~ /\.java$|\.c$|\.h$|\.pl$|\.sh$|\.csh$|\.m4$|\.inc$|\.html$|\.htm$/) {
                        $filetype = "code";
                } else {
                        $filetype = "ASCII";
                }

                # Process $file for what type is it and return $filetype 
        } else {
                # We have what type it is in $arg
                if ($cmd =~ /^-p$/) {
                        $filetype = "ps";
                } elsif ($cmd =~ /^-c$/) {
                        $filetype = "code";
                } elsif ($cmd =~ /^-a$/) {
                        $filetype = "ASCII"
                }
        }
}

sub usage {
        print "
Usage: print [-a|c|p] <filename>
       -a prints <filename> as ASCII
       -c prints <filename> formatted as source code
       -p prints <filename> as Postscript
        If no switch is given, print attempts to
        guess the file type and print appropriately.\n
";
        exit(0);
}

sub wrap {
        # Create an array of file lines, where each line is < the 
        # number of characters specified, and wrapped only on whitespace

        # Get the number of characters to limit the line to.
        $limit = pop(@_);

        # DBG
        #print "Entering subroutine wrap\n";
        #print "The line length limit is $limit\n";

        # Read in the file, parse and put into an array.
        open(FILE, "<$file") || die "Can't open $file: $!\n";
        while(<FILE>) {
                $line = $_;
                
                # DBG
                #print "The line is:\n$line\n";

                # Wrap the line if it is over the limit.
                while ( length($line) > $limit ) {
                        
                        # DBG
                        #print "Wrapping...";

                        # Get the first $limit +1 characters.
                        $part = substr($line,0,$limit +1);

                        # DBG
                        #print "The partial line is:\n$part\n";

                        # Check to see if the last character is a space.
                        $last_char = substr($part,-1, 1);
                        if ( " " eq $last_char ) {
                            # If it is, print the rest.

                            # DBG
                            #print "The last character was a space\n";

                            substr($line,0,$limit + 1) = "";
                            substr($part,-1,1) = "";
                            push(@newlines,"$part\n");
                        } else {
                             # If it is not, find the last space in the 
                             # sub-line and print up to there.

                            # DBG
                            #print "The last character was not a space\n";

                             # Remove the character past $limit
                             substr($part,-1,1) = "";
                             # Reverse the line to make it easy to find
                             # the last space.
                             $revpart = reverse($part);
                             $index = index($revpart," ");
                             if ( $index > 0 ) {
                               substr($line,0,$limit-$index) = "";
                               push(@newlines,substr($part,0,$limit-$index) 
                                   . "\n");
                             } else {
                               # There was no space in the line, so
                               # print it up to $limit.
                               substr($line,0,$limit) = "";
                               push(@newlines,substr($part,0,$limit) 
                                   . "\n");
                             }
                        }
                }
                push(@newlines,$line);
        }
        close(FILE);
}

sub codeformat {
        # Call subroutine wrap then filter through nenscript
        &wrap($line_length);
        
        # Pipe the results through nenscript to create a Postscript
        # file that adheres to some decent format for printing
        # source code (landscape, Courier font, line numbers).
        # Print this to a temporary file first.
        $tmpfile = "/tmp/nenscript$$";
        open(FILE, "|$nenscript -2G -i$file -N -p$tmpfile -r") || 
                die "Can't open nenscript: $!\n";
        foreach $line (@newlines) {
                print FILE $line;
        }
        close(FILE);
        
        # Read the temporary file back into an array so it can be
        # passed to the Samba print script.
        @newlines = ("");
        open(FILE, "<$tmpfile") || die "Can't open $file: $!\n";
        while(<FILE>) {
                push(@newlines,$_);
        }
        close(FILE);
        system("rm $tmpfile");
}

sub createarray {
        # Create the array for postscript
        open(FILE, "<$file") || die "Can't open $file: $!\n";
        while(<FILE>) {
                push(@newlines,$_);
        }
        close(FILE);
}
\end{verbatim} 
\nopagebreak\hrule 
\addvspace{\medskipamount}
\end{tscreen}







\section{ª©Åv}

1996 ¦~ªº HOWTO ª©Åv¬OÄÝ©ó David Wood. ¥¦¥i¥H¥Î¥ô¦ó«¬¦¡ªº¦A­«ÂÐ²£¥Í¥H¤Î¦Û¥Ñªº´²¼½,¥u­n³o­ÓÀÉ­ì«Ê¤£°Ê,¥]§t³o¬q±Ô­z.






\section{·P¿E}

¥u­n§A¼g«Hµ¹§Ú´£¨Ñ·N¨£, §Ú±N·|¦b³o(¤å¥ó)ªº¤U¤@ª©·P¿E§A.



\end{document}
