[ 上一页 ] [ 目录 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 下一页 ]


Debian 参考手册
第 4 章 - Debian 指南


这一节为真正的新手提供一个熟悉的 Debian 世界,如果您已经使用了一段时间的 类 unix 操作系统,那么您应该已经了解我在这里所说的一切。那么请用这个来做一个实战 检验。


4.1 开始了

在您的电脑上安装完 Debian 系统以后,您需要学习一点东西以便使用它,让我们来给您 做一个快速的培训。


4.1.1 用超级用户登录到命令提示符

在重新启动系统的时候,您处在一个图形的登录界面,或者字符界面的登录界面,这个 取决于您初始安装时所选择了那些软件包,简单的说,如果您现在处在图形登录界面, 那么按下 Ctrl-Alt-F1 [3] 来获得字符界面。

假设您的主机名是 foo,那么登录提示符看起来是这样的:

     foo login:

输入 root,然后按回车键,然后会提示输入密码,就是您在安装过程中所输入的 密码。在& debian; 系统中,按照 Unix 的习惯,密码是不可见的。然后系统就会输出欢迎 信息而且给出 root 的命令提示符等待您的输入。 [4]

     foo login: root
     Password:
     Last login: Sun Oct 26 19:04:09 2003 on tty3
     Linux foo 2.4.22-1-686 #6 Sat Oct 4 14:09:08 EST 2003 i686 GNU/Linux
     
     Most of the programs included with the Debian GNU/Linux system are
     freely redistributable; the exact distribution terms for each program
     are described in the individual files in /usr/share/doc/*/copyright
     
     an GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
     permitted by applicable law.
     
     root@foo:root#

您现在已经准备好通过 root 的命令提示符进行系统的管理。这个 root 帐户也被称为超级 用户或者特权用户。拥有这个帐户,您将可以做任何事情:

通过和别人共享 root 用户的密码来共享 root 帐户是一个非常糟糕的想法。而使用程序比如 sudo(8)是共享管理权限的好方法。

请注意,优先使用非特权用户登录被认为是一个好的 Unix 习惯,哪怕是您要进行管理活动, 在必要的时候您也可以使用 sudosuper 或者 su -c 来 获得有限的 root 权限。 参阅 更安全地工作 – sudo, 第 9.2.4 节. [5]


4.1.2 设置最小的新手环境

我认为学习一个电脑系统就像学习一门新的外语。尽管书本指南是有帮助的,但是您需要 练习使用帮助工具。在这个情况下,我认为安装一些额外的软件包是一个好主意,比如 mcvimlynxdoc-linux-textdebian-policy。 [6]

     # apt-get update
      ...
     # apt-get install mc vim lynx doc-linux-text debian-policy
      ...

如果您已经安装了这些软件包,那么什么都不需要安装了。


4.1.3 添加一个用户

在安装过程中,您通常已经创建了一个非特权用户来接收发送给 root 帐户的 e-mail。 [7] 因此您也不希望用这个特殊的帐户来进行下面的训练,那么您需要创建另外一个帐户。

假设您希望新帐户的名字叫 penguin, 输入:

     root@foo:root# adduser penguin
     ... 回答所有的问题

这样就可以了。 [8] 在更进一步之前,我们先来学习一点东西


4.1.4 在不同的控制台之间切换

在默认的 Debian 系统中,有 6 个独立的伪终端,比如,您可以把 PC 的 VGA 字符终端当作 6 个可以选择的 VT-100 终端来使用。从一个切换终端到另外一个,你只需要同时按下左 Alt 键 和 F1–F6 键。任何一个伪终端都可以让不同的用户独立登录。多用户环境是 Unix 的 一个很优秀的、使人迷恋的特性。

如果你偶然的在装有 X 装口系统的系统上按下了 Alt-F7,控制台就会切换到图形界面,然后 再按下 Ctrl-Alt-F1 可以重新回到字符界面。您可以尝试在在不同的控制台之间切换,然后 再换回到原来的那个,您慢慢就会习惯于这样做。


4.1.5 怎样关闭机器

就像任何其它现代的操作系统一样,任何文件操作都会在内存当中缓存数据,Debian 操作系统也需要一个适当的过程,让电脑电源关闭之前保证这些文件的一致性,您可以在 root 命令提示符下使用下面的命令来关闭系统。

     # shutdown -h now

上面是在正常的多用户模式下面的方法。如果您是处在单用户模式,您可以在 root 用户的 命令提示符下使用下面的命令:

     # poweroff -i -f

可选择的其它方式,比如您可以用 Ctrl-Alt-Delete 来关闭系统 [9]

等待系统在屏幕上输出"System halted"之后您就可以关闭电源了。如果 APM 和 ACPI 选项在 BIOS 和 Linux 内核里面都配置好了的话,系统会自动关闭电源。可以看 多内存和关机自动断电, 第 3.8.4 节 获 得详细信息。


4.1.6 玩的时间

现在您已经准备好使用 Debian 系统了,而不用担心有任何冒险,因为您使用的非特权用 户penguin。 [10]

让我们先登录到 penguin 用户。 如果您现在正在 root 用户的命令提示符下面,输入 Crtl-D [11] 在 root 用户提示符下面关闭 root 的 shell 以后我们就返回了登录提示符。输入您刚创建的新 用户名 penguin 和对应的密码。 [12] 您将会获得如下的命令提示符

     penguin@foo:penguin$

从现在开始,为了简单起见我们将使用简化的命令提示符,我们将使用:

我们将先用简单的方法 Midnight Commander (MC), 第 4.2 节 来学习 Debian,稍后使用较好的方法 类 Unix 工作环境, 第 4.3 节


4.2 Midnight Commander (MC)

Midnight Commander (MC)是 Linux 控制台和其它终端环境中的 GNU“瑞士军刀”。这给予了新 受一个菜单驱动控制台的体验,它比 Unix 标准命令容易学的多。

用命令来研究 Debian 系统。这个是最好的学习方法。请不使用键盘而只用鼠标和回车键 来访问下面的地址:


4.2.1 提高 MC

为了让 MC 在退出的时候改变工作目录,您需要修改 ~/.bashrc(或者 /etc/bash.bashrc,查看 .bashrc),使用 -P 选项在它的 手册里面可以获取更详细的信息mc(1). [13]


4.2.2 启动 MC

     $ mc

在MC中用户可轻而易举使用菜单完成所有的文件操作。可以按 F1 获得帮助,您可以只用鼠 标和功能键来操作 MC [14]


4.2.3 MC 里的文件管理器

默认状态下,所有文件列于两个目录面板。一种实用的方式是将右边窗口设定为“information”,用来查看文件访问权限等信息。下面是一些基本的击键。如果gpm daemon在运行,你还可以使用鼠标。(在MC中进行剪切和粘贴操作时别忘了按下shift键。)


4.2.4 MC 里的命令行技巧


4.2.5 MC 里面的编辑器

内置编辑器的剪切-粘贴方式很有意思。按 F3 在起始处做标记,再次按 F3 在终止处做标记,这时中间的选中部分会高亮显示。然后你可以移动光标到某处按下 F6,被选中部分就会移到该处。如果你按下的是 F5,选中部分就会拷贝到该处。F2 用来存盘,F10 退出,所有方向键的作为和它们的名字一样直观。

该编辑器可直接打开某个文件:

     $ mc -e filename_to_edit
     $ mcedit filename_to_edit

虽然它不是多窗口编辑器,但你可利用 Linux 多控制台的特性达到相同的效果。要在窗口间进行拷贝操作,可使用 Alt-Fn 切换虚拟控制台,然后使用“File->Insert file”或“File->Copy to file”将一个文件中的内容拷贝到另一个文件。

可指定任何外部编辑器作为内置编辑器。

许多程序使用环境变量 EDITORVISUAL 来决定使用哪个编辑器。如果你用不惯 vim,可在 ~/.bashrc 中加上几行来指定新的 mcedit

     ...
     export EDITOR=mcedit
     export VISUAL=mcedit
     ...

我强烈推荐将它们设定为 vim。在 Linux/Unix 世界里就该使用 vi(m) 命令。 [15]


4.2.6 MC 里的阅读器

非常精巧的阅读器。它是在文档中搜索单词的利器。在 /usr/share/doc 目录下我总是用它,面对大量的 Linux 资料用它浏览是最快的方法。阅读器可以直接找开文件:

     $ mc -v filename_to_view

4.2.7 MC 的自动启动特性

在文件上按 Enter,会激活相关的程序操作该文件。这是 MC 的一个极方便的特点。

     executable file:        执行命令
     man, html file:    将文件内容传入阅读器程序
     tar, gz, deb file: 象浏览子目录一样浏览它的内容

为了使这些阅读器和虚拟文件的属性能够被查看,不要将可阅读文件设成可执行文件。可在 MC 文件菜单中改变文件属性或使用 chmod 命令。


4.2.8 MC 里的 FTP 虚拟文件系统

MC 可通过 FTP 访问文件。按 F9 转到菜单栏,输入’p’激活 FTP 虚拟文件系统。按 username:passwd@hostname.domainname 格式输入 URL,远程文件目录就会以本地目录的方式显示出来。

在 URL 里试着用 http.us.debian.org/debian 来浏览 Debian 存档文件。看Debian 文件, 第 2.1 节 就知道这些是怎么被识别的了。


4.3 类 Unix 工作环境

尽管 MC 让您能够做绝大多数的事情,但是利用 shell 来学习命令行工具,和熟悉类 Unix 系统 的工作环境还是很重要的。 [16]


4.3.1 特殊的按键组合

在类 Unix 环境里,有一些按键有特殊的意思。 [17]

默认的 shell,bash, 有历史编辑和 tab 补齐功能。

其他一些需要记住的按键组合。

这里,为了在 Linux 字符界面下使用鼠标,您需要使用 gpm 服务。 [19] 查看鼠标设置, 第 3.3 节


4.3.2 基本 Unix 命令

让我们来学习基本的 Unix 命令。 [20] 使用非特权用来执行下面的所有的命令。 penguin :

请用上面的这些命令来查看您的系统的目录和其他的信息,以此来熟练一些操作。如果您 对上面的这些控制台命令有任何不明白的地方,请首先阅读帮助手册,比如下面的命令就是 好的开始:

     $ man man
     $ man bash
     $ man ls

现在也是时候启动 vim 然后按下 F1 键了。您最少也应该阅读开始的 35 行。然后把光标移动到 |tutor|,再按下 Ctrl-]就可以做在线测试了。查看编辑器, 第 11 章可以学到更多关于编辑器的知识。

请注意许多来自于 GNU 和 BSD 的类 Unix 命令都会在您进行如下操作的时候(或者您没有给出任何参数)给出简单的帮助:

     $ commandname --help
     $ commandname -h

您也可以参照Debian 小技巧, 第 8 章里的例子来进行自我测试。


4.3.3 命令执行

现在您已经比较了解应该如何使用 Debian 系统了。让我们来更深入的了解 Debian 系统 的命令执行结构。 [27]


4.3.4 简单的命令

一个简单的命令是如下面的序列

  • 可变的声明 (可选)

  • 命令的名字

  • 参数 (可选)

  • 重定向 (可选:> , >> , < , <<, 等等)

  • 控制操作 (可选:&& , || ; <换新行> , ; , & , ( , ) )

  • 想了解更多复杂命令的解释和应用请查看命令行处理, 第 13.2.6 节


    4.3.5 命令执行和环境变量

    典型的使用 shell 来执行命令情况如下: [28]

         $ date
         Sun Oct 26 08:17:20 CET 2003
         $ LC_ALL=fr_FR date
         dim oct 26 08:17:39 CET 2003
    

    这里 date 程序是在前台执行的。环境变量 LC_ALL 是:

    绝大多数的命令并没有预先定义各种环境变量。像上面的例子选择如下方式:

         $ LC_ALL=fr_FR
         $ date
         dim oct 26 08:17:39 CET 2003
    

    正如您所看到的,命令的输出和环境变量设置有关,上面产生的是法语输出。如果您 想这个环境变量在子进程中也能够得到继承的话(e.g.,执行 shell 脚本的时候),您需要 使用下面的方式。

         $ export LC_ALL
    

    4.3.6 命令搜索路径

    当您在 shell 提示符里面输入一个命令的时候,shell 就会在 PATH 环境变量所列出的目录里面去查找。PATH 环境变量的值也被叫做 shell 的查找目录。

    在默认安装的 Debian 中,用户的 PATH 环境变量里面也许没有包含 /sbin/。因此如果您想运行一些命令比如 /sbin/ 目录下的 ifconfig,您就必须在 PATH 环境变量里面包含它。PATH 环境变量一般是在初始化文件 ~/.bash_profile 里面设置的,参看Bash 设置, 第 3.2 节


    4.3.7 命令行选项

    一些命令带有参数,参数部分以-或者--开始的被称做选项。可以用来控制命令的行为。

         $ date
         Mon Oct 27 23:02:09 CET 2003
         $ date -R
         Mon, 27 Oct 2003 23:02:40 +0100
    

    这里命令行参数 -R 改变了命令 date 的表现以让它输出符合 RFC-2822 的日期字符串。


    4.3.8 Shell 通配符

    通常您需要用命令来处理一组文件,但是您又不想输出所有的文件名。shell 通配符使得这个成为可能。

    作为练习。请尝试着运行下面的命令并思考一下:

         $ mkdir junk; cd junk; touch 1.txt 2.txt 3.c 4.h .5.txt
         $ echo *.txt
         1.txt 2.txt
         $ echo *
         1.txt 2.txt 3.c 4.h
         $ echo *.[hc]
         3.c 4.h
         $ echo .*
         . .. .5.txt
         $ echo .[^.]*
         .5.txt
         $ echo [^1-3]*
         4.h
         $ cd ..; rm -rf junk
    

    4.3.9 命令返回值

    每个命令都返回一个值和它返回的状态。

    返回值可以在命令执行后马上用 shell 用变量 $? 来访问。

         $ [ 1 = 1 ] ; echo $?
         0
         $ [ 1 = 2 ] ; echo $?
         1
    

    请注意,在 shell 中的逻辑上下文中使用这些返回值的时候 success 被看做逻辑值 TRUE。这个多少有一点不直观,因为 success 等价于值 zero

    参看Shell 条件表达式, 第 13.2.5 节


    4.3.10 典型的命令序列

    在我们阅读了这些惯用的 shell 命令以后,让我们试者记住它们。参看Shell 参数, 第 13.2.3 节Shell 重定向, 第 13.2.4 节Shell 条件表达式, 第 13.2.5 节,和命令行处理, 第 13.2.6 节


    4.3.10.1 command &

    command 在子 shell 的 background 运行。后台任务让多成程序能够运行在一个 shell 里面。

    管理这些后台任务的请求需要 shell 内建的: jobsfgbgkill。请查看 bash(1) 这一小节中的“SIGNALS”,“JOB CONTROL”,“SHELL BUILTIN COMMANDS”。的相关内容。 [29]


    4.3.10.2 command1 | command2

    command1 的标准输出被直接输入到 command2 的标准输入。 两个命令都可能并行地运行。这个被称作pipeline


    4.3.10.3 command1 ; command2

    command1command2 被有序的执行。


    4.3.10.4 command1 && command2

    command1 如果执行成功的话那么再执行 command2。只有当 command1并且command2 都运行成功的话上面的命令序列才会成功返回。


    4.3.10.5 command1 || command2

    command1 被执行以后,如果不成功的话,command2 也会被执行。当 command1 或者command2 有一个执行成功的话,上面的序列就会返回真值。


    4.3.10.6 command > foo

    command 的标准输出重定向到文件 foo。(覆盖内容)


    4.3.10.7 command >> foo

    command 的标准输出重定向到文件 foo。(追加)


    4.3.10.8 command > foo 2>&1

    同时把 command 的标准输出和标准出错信息重定向到文件 foo


    4.3.10.9 command < foo

    command 的标准输入重定向到一个文件 foo

         $ </etc/motd pager
         ... (the greetings)
         $ pager </etc/motd
         ... (the greetings)
         $ pager /etc/motd
         ... (the greetings)
         $ cat /etc/motd | pager
         ... (the greetings)
    

    尽管上面 4 个方法都显示同样的内容,但是最后一个多运行了 cat 命令。而且不必要的浪费了资源。


    4.3.11 命令别名

    您可以给一个命令序列起一个别名。比如:

         $ alias la='ls -la'
    

    现在, la 就成了 ls -la 命令的简写用来列出所有文件的详细信息。

    您可以用 type 来显示命令的详细路径或者其他身份。比如:

         $ type ls
         ls is hashed (/bin/ls)
         $ type la
         la is aliased to `ls -la'
         $ type echo
         echo is a shell builtin
         $ type file
         file is /usr/bin/file
    

    这里 ls 在最近被查找过了,而 file 没有,因此 ls 被"hashed",i.e.,shell 有一个内部的记录可以用来快速的找到 ls 的地址。


    4.4 类 Unix 文本处理

    在类 Unix 的系统中,有几个文本处理工具经常用到。

    查看正规表达式的置换, 第 8.6.13 节精巧的管道命令辅助脚本, 第 8.6.18 节短小的 Perl 脚本, 第 8.6.20 节 可以找到一些脚本的例子。


    4.4.1 正则表达式

    正则表达式用在很多文本处理工具里面。它们和 shell 的通配符比较相似(查看Shell 通配符, 第 4.3.8 节),但是它们更复杂也更强大。

    正则表达式是由文本字符和元字符组成的,用来描述匹配模式。元字符是有特殊意义的字符。它们有两种主要的形式 BRE 和 ERE,主要取决于类 Unix 文本处理, 第 4.4 节里面是如何描述的。

    在扩展的正则表达式(EREs)里面元字符包括"\ . [ ] ^ $ * + ? ( ) { } |"。正则表达式表示:

    在BREs里面元字符"+ ? ( ) { } |"不再具有它们特殊的含义,而是使用的有反斜杠的版本"\+ \? \( \) \{ \} \|"。因此分组(r1|r2)需要被表示成\(r1|r2\)。 因为 emacs,虽然基本上是 BRE,但是它把"+ ?"当作元字符。因此不需要特别表示它们。查看替换表达式, 第 4.4.2 节来了解构造分组是如何使用的。

    举个例子,grep 可以用正则表达式来搜索文本:

         $ egrep 'GNU.*LICENSE|Yoyodyne' /usr/share/common-licenses/GPL
                             GNU GENERAL PUBLIC LICENSE
         		    GNU GENERAL PUBLIC LICENSE
         	Yoyodyne, Inc., hereby disclaims all copyright interest in the program
    

    4.4.2 替换表达式

    在替换表达式里面,下面的字符有特殊的含义:

    在 Perl 里面,$n 替换了 \n& 也没有特殊的含义。

    举个例子:

         $ echo zzz1abc2efg3hij4 | \
           sed -e 's/\(1[a-z]*\)[0-9]*\(.*\)$/=&=/'
         zzz=1abc2efg3hij4=
         $ echo zzz1abc2efg3hij4 | \
           sed -e 's/\(1[a-z]*\)[0-9]*\(.*\)$/\2===\1/'
         zzzefg3hij4===1abc
         $ echo zzz1abc2efg3hij4 | \
           perl -pe 's/(1[a-z]*)[0-9]*(.*)$/$2===$1/'
         zzzefg3hij4===1abc
         $ echo zzz1abc2efg3hij4 | \
           perl -pe 's/(1[a-z]*)[0-9]*(.*)$/=&=/'
         zzz=&=
    

    请特别注意这些括号正则表达式的格式,以及这些被匹配的文本在文本处理工具里面是如何使用的。

    这些正则表达式可以用来控制光标的运动和编辑器里面的文本替换。

    请阅读所有相关手册来学习这些命令。


    4.5 类 Unix 文件系统

    在 GNU/Linux 和其他的类 Unix 操作系统里面文件都被放在目录。 [30] 所有的文件目录都被排列在一棵很大的树里面, 即文件层次树,他的根是/

    这些文件和目录可以跨多个设备。mount(8)命令可以把一些设备挂载到文件系统树里面来。反之umount(8)可以把设备卸载。


    4.5.1 Unix 文件基础

    这里是一些最基础的:

    关于文件层次的详细信息以及最好的操作练习可以在这里找到 Filesystem Hierarchy Standard。作为一个初学者,您需要记住下面的事实:


    4.5.2 Debian 中的文件系统概念

    按照 Unix 的传统, Debian 为存放物理数据的磁盘或者其它存储设备,还有这些硬件设 备之间的交互提供文件系统,比如控制台屏幕和远程串行终端就用联合的方式表示。

    每个在 Debian 系统上的文件,目录,命名管道,或者物理设备都有一个数据结构被称作 inode,它被用来描述设备用用的属性,比如设备所有者,所属于的组, 上次访问时间等等。参看 /usr/include/linux/fs.h 来获得 struct inode 在 Debian GNU/Linux系统中的详细信息。

    这些表现出来的统一的物理入口是非常强大的,因为它们使得可以使用同样的命令和同样 的操作来访问完全不同的设备。

    您所有的文件都可以在一个次方上面,----或者您有 20 个磁盘,有些是在网络上其它的计算机上面, 在 GNU/Linux 系统中每个文件和目录都与其拥有者(主人)和拥有组相关联。所有的文件信息都保存在一个称为 inode 的数据结构中。


    4.5.3 文件和目录的访问权限

    文件和目录的访问权限对如下 3 类用户进行了分别定义:

    每个文件均拥有下列三种权限:

    每个目录均拥有下列三种权限:

    在此,对目录的 execute 权限,不仅意味着允许查看目录下文件的内容,还允许查看文件的其它信息如文件大小、修改时间。

    ls可用来显示目录和文件的这些信息。参阅 ls(1)。使用 ls-l 选项,就会按如下顺序显示下列信息:

    在 root 账号下可使用 chown 改变文件的拥有者。要改变文件的所属组,可以文件拥有者或 root 的身份运行 chgrp。要改变目录的访问权限,可以文件拥有者或 root 的身份运行 chmod

         # chown newowner foo
         # chgrp newgroup foo
         # chmod  [ugoa][+-=][rwx][,...] foo
    

    细节请参见 chown(1)chgrp(1)chmod(1)

    例如,可以 root 帐号下创建一个目录树,并使其拥有者为 foo,所属组为 bar

         # cd /some/location/
         # chown -R foo:bar .
         # chmod -R ug+rwX,o=rX .
    

    下面是 3 个更特殊的权限:

    在此,如果隐藏在特殊权限后面的执行权限标位没有设置,则 ls -l 的输出中,这些标识位将使用大写字母。

    为可执行文件设置 set user ID 位将允许用户以该文件拥有者的 ID 来执行该文件(例如以 root 身份)。同样,为可执行文件设置 set group ID 将允许用户以该文件所属组的ID来执行该文件(例如以 root 身份)。因为这些设置将引起安全风险,所以使用这些特性时要格外小心。

    为目录设置 set group ID,则该目录会使用 BSD-like 文件创建方案,即目录中所有新创建的文件均属于该目录所属的 group

    为目录设置 sticky bit 可防止非文件拥有者移动目录中的文件。为确保全局可写目录如 /tmp 或组可写目录中的文件内容不被修改,不仅要关闭文件的 权限,还应设置目录的 sticky bit,否则,任何对该目录有写权限的用户均可以将该文件移动到别处,然后在原地创建一个同名文件。

    这儿有一些有关文件权限的有趣例子。

         $ ls -l /etc/passwd /etc/shadow /dev/ppp /usr/sbin/pppd
         crw-rw----    1 root     dip      108,   0 Jan 18 13:32 /dev/ppp
         -rw-r--r--    1 root     root         1051 Jan 26 08:29 /etc/passwd
         -rw-r-----    1 root     shadow        746 Jan 26 08:29 /etc/shadow
         -rwsr-xr--    1 root     dip        234504 Nov 24 03:58 /usr/sbin/pppd
         $ ls -ld /tmp /var/tmp /usr/local /var/mail /usr/src
         drwxrwxrwt    4 root     root         4096 Feb  9 16:35 /tmp
         drwxrwsr-x   10 root     staff        4096 Jan 18 13:31 /usr/local
         drwxrwsr-x    3 root     src          4096 Jan 19 08:36 /usr/src
         drwxrwsr-x    2 root     mail         4096 Feb  2 22:19 /var/mail
         drwxrwxrwt    3 root     root         4096 Jan 25 02:48 /var/tmp
    

    chmod(1) 命令里,有一种替代的数字模式来描述文件权限。这种数字模式使用 3 到 4 个八进制数字(以 8 为基)。 每个数字相应如下:

    这听起来复杂,但实际上相当简单。 从 ls -l 命令的输出中,看第(2-10)列,把它们作为二进制(以2为基)文件权限(“-”表示“0”,“rwx” 表示“1”)的表示方式来读, 这种数字模式值将使你理解八进制(以 8 为基)的文件权限表示。 [33] 例如,尝试:

         $ touch foo bar
         $ chmod u=rw,go=r foo
         $ chmod 644 bar
         $ ls -l foo bar
         -rw-r--r--    1 penguin  penguin  0 Nov  3 23:30  foo
         -rw-r--r--    1 penguin  penguin  0 Nov  3 23:30  bar
    

    默认的文件权限掩码使用 shell 内建命令 umask 设置。 参见 builtins(7)


    4.5.4 时间戳

    GNU/Linux 的文件有3种类型的时间戳:

    注意 ctime 并非文件创建时间。

    注意,在 Debian 系统中,即便是简单的读文件通常会引起文件的写操作,从而更新 inode 上的 atime 信息。使用 noatime 选项来挂载文件系统,可使用系统忽略该操作,从而加速文件的访问和读取。参阅 mount(8)

    使用 touch(1) 命令来改变存在文件的时间戳。


    4.5.5 链接

    在2种方法将文件 foo 关联到不同的文件名 bar

    下面的例子显示了链接数的改变和使用 rm 命令时产生的微妙差异。

         $ echo "Original Content" > foo
         $ ls -l foo
         -rw-r--r--    1 osamu    osamu           4 Feb  9 22:26 foo
         $ ln foo bar     # 硬链接 
         $ ln -s foo baz  # 符号链接
         $ ls -l foo bar baz
         -rw-r--r--    2 osamu    osamu           4 Feb  9 22:26 bar
         lrwxrwxrwx    1 osamu    osamu           3 Feb  9 22:28 baz -> foo
         -rw-r--r--    2 osamu    osamu           4 Feb  9 22:26 foo
         $ rm foo
         $ echo "New Content" > foo
         $ cat bar
         Original Content
         $ cat baz
         New Content
    

    上例中符号链接均拥有名义上的文件访问权限“rwxrwxrwx”,它们的有效访问权限均由它们所指向的文件来定义。

    . 链接到它所属的目录,因此任何新目录的链接数都从 2 开始计算。.. 链接到父目录,因些目录链接数会随新的子目录数的增长而增长。


    4.5.6 命名管道(FIFOs)

    命名管道是一个行为象一个管道的文件。把某些东西放入命名管道文件,它从另外的一端出来。因此,它被称为 FIFO,或 First-In-First-Out:首先放入管道的东西将首先从另外一端出来。

    如果写东西到一个命名管道,在写的东西在管道被读出之前,写的进程不会中止。如果从一个命名管道读,读的进程在中止之前,一直处于等待状态,直到有东西可以读为止。命名管道的大小始终为零 --- 它不储存数据,象 shell | 一样,它仅仅连接两个进程。然而, 这个管道有一个名字,两个进程没有必要在同一个命令行运行,或者由同一个用户运行。

    做下面的操作来尝试:

         $ cd; mkfifo mypipe
         $ echo "hello" >mypipe & # 放入后台
         [1] 5952
         $ ls -l mypipe
         prw-r--r--    1 penguin penguin  0 2003-11-06 23:18 mypipe
         $ cat mypipe
         hello
         [1]+  Done                    echo hello >mypipe
         $ ls mypipe
         prw-r--r--    1 penguin penguin  0 2003-11-06 23:20 mypipe
         $ rm mypipe
    

    4.5.7 套接字

    套接字类似于命名管道(FIFO),它允许进程交换信息。 对于套接字,那些进程不必要在同时运行,也没有必要是同一个祖先进程的子进程。 它是进程间通讯的端点。 信息交换可以通过网络发生在不同的主机之间。


    4.5.8 设备文件

    设备文件是系统上物理的或者虚拟的设备,比如说硬盘、显卡、显示器或者键盘。 一个虚拟设备的例子是控制台,由 /dev/console 表示。

    有两种类型的设备:

    设备文件可以被读写,尽管设备文件包含二进制数据,而这些二进制数据对人类来说是费解的乱码。 向设备文件直接写数据,有时侯对解决硬件连接故障有用。 比如说,将一个文本文件导出到打印机设备 /dev/lp0, 或者发送调制解调器命令到一个适当的串口 /dev/ttyS0。 但是,除非是慎重的操作,它有可能造成一个大的破坏。 所以请小心。


    4.5.8.1 /dev/null 等等

    /dev/null 是一个特殊的设备文件,它忽略写给它的任何东西。 如果不需要某些东西,把它扔到 /dev/null。 它本质上是一个无底洞。 如果从 /dev/null 读东西,将会立即得到文件结束符(EOF)。

    /dev/zero 是类似的,只是从它读的话,将会得到 \0 字符(不与数字零的 ASCII 码相同)。 参阅 空文件, 第 8.6.34 节


    4.5.8.2 设备号

    按例子执行 ls,将显示设备号。

         $ ls -l /dev/hda /dev/ttyS0 /dev/zero
         brw-rw----    1 root     disk       3,   0 Mar 14  2002 /dev/hda
         crw-rw----    1 root     dialout    4,  64 Nov 15 09:51 /dev/ttyS0
         crw-rw-rw-    1 root     root       1,   5 Aug 31 03:03 /dev/zero
    

    在这里:

    在老的系统中,安装过程使用 /sbin/MAKEDEV 命令来创建设备号。 参阅 MAKEDEV(8)

    在新的系统中, /dev 下的文件系统通过设备文件系统自动生成, 设备文件系统与 /proc 文件系统类似。


    4.5.9 /proc 文件系统

    /proc 文件系统是一个伪文件系统,它包含系统信息和正在运行的进程信息。

    当注意到一个特殊的文件 /proc/kcore 时,人们经常恐慌,因为它通常很巨大。 该文件(或多或少)是计算机内存的一个拷贝。 它被用来调试内核, 实际上它并不存在,所以不必担心它的大小。

    参阅 通过 proc 文件系统调整内核, 第 7.3 节proc(5)


    4.6 X 窗口系统

    参阅 X, 第 9.4 节


    4.6.1 启动 X 窗口系统

    X 窗口系统能够使用类似 xdm 的图形登录守护启动,或者在控制台下输入如下的命令启动:

         $ exec startx
    

    4.6.2 X 窗口系统下的菜单

    X 环境能够与许多窗口管理器协作,各个窗口管理器的用户界面有很大不同。 请记住,右击根窗口将显示一个选择菜单。这个功能总是存在。

    如果没有发现菜单条目,请安装适当的软件包。参阅 Debian 软件包管理基础, 第 6.2 节


    4.6.3 X 窗口系统键盘序列

    当运行 X 窗口系统时,下面是一些需要记住的重要键盘序列。


    4.7 进一步学习

    目前,推荐阅读来自 The Linux Documentation Project: Guides 的关键用户手册。

    更多资源参阅 Debian 技术支持, 第 15 章


    [ 上一页 ] [ 目录 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 下一页 ]


    Debian 参考手册

    CVS, 星期四 一月 18 11:53:48 UTC 2007

    Osamu Aoki osamu#at#debian.org
    译者:
    Hao "Lyoo" Liu iamlyoo#at#163.net
    Ming Hua minghua#at#rice.edu
    肖盛文 atzlinux#at#163.com
    Haifeng Chen optical.dlz#at#gmail.com
    解彦博 xieyanbo#at#gmail.com
    easthero easthero#at#gmail.com
    作者, 第 A.1 节