def ln(src, dest, options = {})
    fu_check_options options, OPT_TABLE['ln']
    fu_output_message "ln#{options[:force] ? ' -f' : ''} #{[src,dest].flatten.join ' '}" if options[:verbose]
    return if options[:noop]
    fu_each_src_dest0(src, dest) do |s,d|
      remove_file d, true if options[:force]
      File.link s, d
    end
  end
Options: force noop verbose

<b><tt>ln(old, new, options = {})</tt></b>

Creates a hard link +new+ which points to +old+.
If +new+ already exists and it is a directory, creates a link +new/old+.
If +new+ already exists and it is not a directory, raises Errno::EEXIST.
But if :force option is set, overwrite +new+.

FileUtils.ln 'gcc', 'cc', :verbose => true
FileUtils.ln '/usr/bin/emacs21', '/usr/bin/emacs'

<b><tt>ln(list, destdir, options = {})</tt></b>

Creates several hard links in a directory, with each one pointing to the
item in +list+.  If +destdir+ is not a directory, raises Errno::ENOTDIR.

include FileUtils
cd '/sbin'
FileUtils.ln %w(cp mv mkdir), '/bin'   # Now /sbin/cp and /bin/cp are linked.