设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客

实用技巧:在Windows世界中使用Linux

2013-5-14 15:04| 发布者: joejoe0332| 查看: 2848| 评论: 0|原作者: developerWorks|来自: developerWorks

摘要:   每一年,Linux 新闻记者和爱好者都会公开讨论,下一年是否会成为 “Linux 桌面” 之年。尽管购买一台已在运行 Linux 的新机器或将现有的 Windows 系统迁移到 Linux 比以往更加容易,但简单地安装和启动 Linux 还 ...

  永久挂载 Windows 共享

  可将 Windows 共享手动挂载在系统上的目录上,方法是以 root 用户身份使用 mount 命令或使用 sudo 应用程序,如 清单 3 中所示。mount 命令的 -t 选项及其 cifs 参数指定您挂载的文件系统类型,而且在此情况下,会导致一般性的 mount 命令调用 /bin/mount.cifs 命令。使用您系统的 package-management 命令安装 cifs-utils 程序包,该程序包是 Samba 套件的一部分。

  清单 3. 挂载并列出手动挂载的 Windows 共享的内容

  1. # mkdir /mnt/PUBLIC 
  2. # mount -t cifs //winserver2008/Public /mnt/PUBLIC 
  3. Password: 
  4. # ls -l /mnt/PUBLIC 
  5. total 1 
  6. drwxr-xr-x. 1 root root   0 Jan 27 16:19 Desktop 
  7. -rwxr-xr-x. 1 root root 174 Jan 19  2008 desktop.ini 
  8. drwxr-xr-x. 1 root root   0 Jan 19  2008 Documents 
  9. drwxr-xr-x. 1 root root   0 Jan 27 23:38 Downloads 
  10. drwxr-xr-x. 1 root root   0 Jan 19  2008 Favorites 
  11. drwxr-xr-x. 1 root root   0 Jan 19  2008 Music 
  12. drwxr-xr-x. 1 root root   0 Jan 19  2008 Pictures 
  13. drwxr-xr-x. 1 root root   0 Jan 27 23:37 Software 
  14. drwxr-xr-x. 1 root root   0 Jan 19  2008 Videos 

清单 3 中的示例 mount 命令使远程共享可通过 /mnt/PUBLIC 目录使用,但具有一些缺点:

  • 简单地将此命令添加到 /etc/fstab 文件中无法自动挂载该共享,因为您在执行 mount 命令后会被提示输入密码。如果尚未确定要用于验证的特定用户,就必须为用于执行 su 或 sudo 命令的用户提供远程 Windows 密码。
  • 以 root 用户身份执行 mount 命令,将共享挂载为 root 用户所有的资源。如果仅希望读取该共享中的文件,尽管可通过此方式挂载共享,但您只能以 root 用户身份向挂载的共享写入数据,这通常很不方便。

要解决这些问题,可在执行 mount 命令时指定特殊的 CIFS 相关选项,以挂载一个 CIFS 共享。这些选项包括:

  • username=<login> - 指定将用于对远程共享进行验证的用户。可将此选项缩写为 user=。
  • password=<login> - 指定将对远程共享进行验证的用户(您将该用户指定为将使用的用户)的密码。
  • uid=<UID> - 指定将拥有所挂载共享中的文件和目录的用户 ID (UID)。如果在 Linux 桌面上使用密码文件身份验证方式,则可使用 grep 命令在系统的密码文件中搜索您的登录名,以找到您的 UID,如以下示例中所示。
$ grep wvh /etc/passwd

wvh:x:500:500:William von Hagen:/home/wvh:/bin/bash

UID 是密码文件条目中的第三个字段(在本例中为 efficiently500)。

  • gid=<GID> - 指定将拥有所挂载共享中的文件和目录的用户的组 ID (GID)。如果在 Linux 桌面上使用密码文件身份验证方式,则可使用 grep 命令在系统的密码文件中搜索您的登录名,以找到您的 GID。GID 是密码文件条目中的第四个字段,如上面的示例中所示。

下面给出了一个使用这些选项的示例 mount 命令,出于格式化用途将该命令分为两行:

# mount -t cifs -o username=wvh,password=MYPASSWORD,uid=500,gid=500 \
//win2008server/Public /mnt/PUBLIC

可从 CLI 使用一条类似这样的命令或向 /etc/fstab 文件添加一个类似条目,以在启动系统时自动挂载该文件系统。以下是与前面的 mount 等效的 /etc/fstab 文件条目:

//win2008server/Public /mnt/PUBLIC cifs \
username=wvh,password=MYPASSWORD,uid=500,gid=500 0 0

此命令将在 /etc/fstab 文件中显示为一行,但在本例中出于格式化用途而分为多行。遗憾的是,此命令具有明显的安全问题,因为您必须在 /etc/fstab 条目中公开密码,而文件 /etc/fstab 通常可供系统上的每个用户读取。要解决此问题,可使用 credentials 挂载选项将用户名和密码放在指定的文本文件中。例如:

//win2008server/Public /mnt/PUBLIC cifs \
credentials=/etc/cred.wvh,uid=500,gid=500 0 0

一个 credentials 文件的格式如下所示:

username=wvh
password=MYPASSWORD

然后可使用以下命令,使 /etc/cred.wvh 文件仅可供 root 用户(必须以其身份执行 mount 命令的用户)读取:

# chmod 600 /etc/cred.wvh

  使用 credentials 挂载选项,可在每次挂载文件系统时必须指定用户名和密码,与不向每个能访问系统的人公开该信息之间实现很好的平衡。

  使用 sudo 按需挂载 Windows 共享

  如果只希望偶尔挂载一个共享,可将 noauto 选项添加到上一节示例中所示的挂载选项列表中。此选项可在每次重新启动系统时避免自动挂载指定的 Windows 共享。然后,在希望访问该共享中的文件时,必须从命令行挂载该共享。

  必须始终以 root 用户身份执行 mount 命令,这通常意味着任何希望挂载该共享的人都必须知道该系统上的 root 密码。如果不希望在每次重新启动系统时自动挂载该共享,且希望限制需要知道 root 密码的用户(或只是限制必须使用该命令的次数),则可使用 sudo 命令使一个普通用户能够挂载该共享。为此,使用 visudo 命令编辑 /etc/sudoers 文件,这会将一个以下格式的条目添加到 /etc/sudoers 文件的末尾。

wvh  ALL=/bin/mount /mnt/PUBLIC, /bin/umount /mnt/PUBLIC

  此条目使用户 wvh 能够使用 sudo 命令执行 /bin/mount /mnt/PUBLIC 和 /bin/umount /mnt/PUBLIC 命令,但不允许该用户使用 mount 或 umount 命令挂载或卸载任何其他文件系统。如果希望给定系统上的所有用户都能够挂载或卸载 /mnt/PUBLIC 共享,可将用户名 wvh 替换为一般性的 %users 表达式。在此情况下,请确保用户希望更新的文件可由关联的 /etc/fstab 条目中的 anongid 所标识的组写入数据,并且所有用户都属于这个组。

  备注:另一种挂载 Windows 共享的方法是使用一个支持 CIFS 文件系统的 File system in User Space (FUSE) 程序包。smbnetfs 和 fusesmb 程序包很流行,但已很久未更新了,且需要大量配置才能使它们正常工作。(参见 参考资料 获取这些项目的链接。)

  在 Linux 系统上使用 Windows 文本文件

  大部分人都认为文本文件在每个计算机系统上都是一种标准的文件类型,因此可安全地用于配置文件、可在任何操作系统上读取的便笺等。不幸的是,情况不 是这样的。尽管 Windows 和 Linux 系统上的文本文件使用了相同的字符集,但用于标识文本的行尾的字符却不同。Windows 和 DOS 系统使用两个字符来标识文本的行尾:一个回车字符 (Ctrl-M) 和一个换行符 (Ctrl-J)。Linux 和所有类似 UNIX 的系统都使用单个字符来标识文本的行尾:换行符。如果使用 Linux 实用程序打开在 Windows 系统上创建的文本文件,将会在每行末尾看到一个 Ctrl-M 字符,该字符常常显示为 ^M 或 \r。这个额外的字符可能会让需要读取这类文件的 Linux 实用程序难以理解。

  Linux 提供了两个命令来自动更改文本文件中的行结束符。dos2unix 命令(位于大部分 Linux 发行版中都提供的一个具有相同名称的程序包中)自动转换在 Windows(或 DOS)中创建的文本文件,以使用 Linux 和 UNIX 约定来标记文本的行尾,这会删除所有的 Ctrl-M 字符。一个同名的程序包中有一个等效的程序 unix2dos,可将 Linux 和 UNIX 文本文件转换为 Windows 格式的文本文件。

  如果您是 Emacs 文本编辑器的爱好者,可以将 清单 4 中所示的 Emacs 命令添加到 Emacs 配置文件 (~/.emacs) 中。然后就能够执行 dos-file、mac-file 和 unix-file 命令,将一个文本缓冲区的上下文转换为使用该命令指定的文本文件格式。

  清单 4. 更改文本文件类型的 Emacs 命令

  1. ; Functions for changing buffer modes 
  2. (defun dos-file () 
  3. "Change the current buffer to Latin 1 with DOS line-ends." 
  4. (interactive) 
  5. (set-buffer-file-coding-system 'iso-latin-1-dos t)) 
  6. (defun mac-file () 
  7. "Change the current buffer to Latin 1 with Mac line-ends." 
  8. (interactive) 
  9. (set-buffer-file-coding-system 'iso-latin-1-mac t)) 
  10. (defun unix-file () 
  11. "Change the current buffer to Latin 1 with Unix line-ends." 
  12. (interactive) 
  13. (set-buffer-file-coding-system 'iso-latin-1-unix t)) 

  备注:清单 4 中所示的样例 Emacs 命令假设您使用的是 Latin 1 字符集。如果在文本文件中使用另一个字符集,则将需要修改这些命令以反映该字符集。


酷毙
1

雷人

鲜花

鸡蛋

漂亮

刚表态过的朋友 (1 人)

  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部