本章为那些初涉Linux世界的新手指出了基本方向。如果你接触Linux已有一段时间,可以当成是一次实战测验。
到Debian Documentation Project
(DDP)
看看,那儿有最权威的Debian参考资料。其中的许多文档都安装在/usr/share/doc/
下。还可以到/usr/share/doc-base/
看看,那儿有这些文档的打印文件。在~/.bash_profile
中添加export
CDPATH=.:/usr/share/doc:/usr/src/local,这样更容易访问这些文档目录。
到Linux Documentation Project
(LDP)
看看,那儿有最权威的通用Linux参考资料。LDP资料通常安装在/usr/share/doc/HOWTO/
目录下。
浏览本地或远程FTP站点的文档,可在Midnight Commander中按下F9(参阅Midnight Commander (MC), 第 4.3 节)。
在普通Linux系统中,有6个独立的伪终端(pseudo-terminals)。同时按下Left-Alt键和F1–F6键可在这些伪终端间切换。每个伪终端均需单独登录。多用户环境是Unix最鲜明的特征,而且一用就上瘾。
使用普通用户帐号工作是个很好的Unix习惯。不得不承认,我过去常仅仅为图方便而滥用超级用户帐号(root)。
现在,我通常使用一个普通用户帐号,使用sudo、super或su -c来获得有限的root访问权限。
系统安装完毕,我通常会添加一个普通用户帐号,如果用户名为“penguin”,
# adduser penguin
就会创建一个这样帐号。
使用vigr命令编辑/etc/group
:
adm:x:4:admin src:x:40:admin, debian, ... ...
在系统默认安装状态下,adm用户组成果对/var/log
下的许多日志文件具有读权限,并可使用xconsole
。staff用户组拥有/home
,适用于进行用户帐号维护工作的用户,而src用户组拥有/usr/src
,用来存放那些完成内核编译等工作的用户。有关用户及用户组的规范描述可参阅最新的users-and-groups
。
我个人使用adm用户组存放那些具有管理员职责和单独su
特权的用户(参阅“为什么GNU
su
命令不支持wheel group”, 第 9.2.2
节),而将CVS用户放在src用户组(参阅CVS, 第 12.1 节)。
用adduser
,addgroup
,vipw
,vipw
-s
,vigr
,以及vigr
-s
检查一下用户及用户组是否配置得当。
和其它现代操作系统一样,系统的工作文件均缓存于内存,所以在切断电源之前Linux需要完成特别的关机程序。下面就是多用户模式下使用的关机命令:
# shutdown -h now
这是单用户模式下使用的关机命令:
# poweroff -i -f
等待屏幕上显示“System halted”字样之后切断电源。如果在BIOS和Linux中开启了apm,系统会自动切断电源。详情参阅多内存和关机自动断电, 第 3.7.4 节。
bash
是默认shell,它能记住使用过的命令。只需按up-arrow键就能进入记忆模式,使用上下箭头找你想输入的命令。其它需要牢记的重要击键有:
Ctrl-U: 删除行首到光标间的内容 Ctrl-D: 中止输入 Lt-click-and-drag-mouse: 选择并拷贝到剪贴板(gpm) Ctrl-click-mouse: 将剪贴板内容粘贴到光标处(gpm)
对于常规Linux系统控制台,上述命令中通常指的是左边的Ctrl和Alt键。
典型的命令执行方法是使用如下shell命令行序列:
$ LC_ALL=fr ls -la
在此,ls
程序在前台执行环境变量LC_ALL设置为fr
Here, program ls
is executed in the foreground job with the
environment variable LC_ALL set to fr for French and
the command line argument set to -la for listing everything in
detail. If the command line is post-fixed by & sign then the
command is executed in the background job. The background job allows user to
run multiple programs in a single shell.
The execution of the command can be managed by following key strokes.
Ctrl-C: 中止程序 Ctrl-Z: 暂停程序 Ctrl-S: 停止屏幕输出 Ctrl-Q: 恢复屏幕输出 Ctrl-Alt-Del: 重启/关闭系统(参阅/etc/inittab)
有关如何管理程序运行,可参阅bash(1)
中的jobs、fg、bg和kill。
下列是最基本的Unix命令:
ls, ls -al, ls -d, pwd, cd, cd ~user, cd -, cat /etc/passwd, less, bg, fg, kill, killall, uname -a, type commandname, sync, netstat, ping, traceroute, top, vi, ps aux, tar, zcat, grep, ifconfig, ...
在命令提示符后输入man或info加相关命令名,可查看该命令的意思。许多Linux命令可使用下列调用获得简要帮助信息:
$ commandname --help $ commandname -h
whatis commandname可以显示任何命令的单行概述,这些内容来自于相关帮助文件的开头。
从控制台启动X Window系统:
# exec startx
右键点击root窗口可以唤出选择菜单。
可在Linux控制台中使用的重要击键(plus、minus指数字键盘上的按键):
Alt-F1 thru F6: 切换到其它伪终端 Ctrl-Alt-F1 thru F6: 切换到其它伪终端 (在X-window、DOSEMU等运行环境中) Alt-F7: 切换回X-window Ctrl-Alt-minus: 降低X-window的显示分辩率 Ctrl-Alt-plus: 提高X-window的显示分辩率 Ctrl-Alt-Backspace: 中止X-windows Alt-X, Alt-C, Alt-V: 通用的Windows/Mac剪切、拷贝、粘贴键 在某些程序如Netscape Composer中,组合键中的Ctrl键换成了Alt键
Midnight Commander (MC)是Linux控制台和其它终端环境中的GNU“瑞士军刀”。
# apt-get install mc
接着按照其手册页面mc(1)
中描述的方法修改~/.bashrc
(或/etc/bash.bashrc
,
.bashrc
会调用它),打开-P选项,这使得MC不必退出就能更改其工作目录。
如果处于kon
或Kterm
for
Japanese等使用某些图形特性的终端,MC运行会出一些问题,可在MC命令行中加上-a加以预防。
$ mc
在MC中用户可轻而易举使用菜单完成所有的文件操作。
默认状态下,所有文件列于两个目录面板。一种实用的方式是将右边窗口设定为“information”,用来查看文件访问权限等信息。下面是一些基本的击键。如果gpm
daemon在运行,你还可以使用鼠标。(在MC中进行剪切和粘贴操作时另忘了按下shift键。)
cd
命令可改变焦点屏幕中的目录位置。
cp
或mv
命令结合使用。
内置编辑器的剪切-粘贴方式很有意思。按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”将一个文件中的内容拷贝到另一个文件。
可指定任何外部编辑器作为内置编辑器。
许多程序使用环境变量EDITOR或VISUAL来决定使用哪个编辑器。如果你用不惯vim,可在~/.bashrc
中加上几行来指定新的mcedit:
... export EDITOR=mcedit export VISUAL=mcedit ...
我强烈推荐将它们设定为vim。在Linux/Unix世界里就该使用vi(m)命令。
非常精巧的阅读器。它是在文档中搜索单词的利器。在/usr/share/doc
目录下我总是用它,面对大量的Linux资料用它浏览是最快的方法。阅读器可以直接找开文件:
$ mc -v filename_to_view
(注意,有些不规范的软件包仍将它们的文档放在/usr/doc
目录下。)
在文件上按Enter,会激活相关的程序操作该文件。这是MC的一个极方便的特点。
executable: 执行命令 man, html file: 将文件内容传入阅读器程序 tar, gz, rpm file: 象浏览子目录一要浏览它的内容
为了使这些文件特性生效,不要将可阅读文件设成可执行文件。可在MC文件菜单中改变文件属性或使用chmod
命令。
MC可通过FTP访问文件。按F9转到菜单栏,输入p激活FTP虚拟文件系统。按username:passwd@hostname.domainname格式输入URL,远程文件目录就会以本地目录的方式显示出来。
在GNU/Linux系统中每个文件和目录都与其拥有者(主人)和拥有组相关联。所有的文件信息都保存在一个称为inode的数据结构中。
文件和目录的访问权限对如下3类用户进行了分别定义:
每个文件均拥有下列三种权限:
每个目录均拥有下列三种权限:
在此,对目录的execute权限,不仅意味着允许查看目录下文件的内容,还允许获文件的其它信息如文件大小、修改时间。
ls
可用来获取目录和文件的这些信息。参阅ls(1)
。使用ls
的-l选项,就会按如下顺序显示下列信息:
在root账号下可使用chown
改变文件的拥有者,参阅chown(1)
。要改变文件的所属组,可以文件拥有者或root的身份运行chgrp
,参阅chgrp(1)
。要改变目录的访问权限,可以文件拥有者或root的身份运行chmod
,参阅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
GNU/Linux的文件有3种类型的时间戳:
注意ctime并非文件创建时间。
注意,在GNU/Linux系统中,即便是简单的读文件通常会引起文件的写操作,从而更新inode上的atime信息。使用noatime选项来挂载文件系统,可使用系统忽略该操作,从而加速文件的访问和读取。参阅mount(8)
。
在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 # hardlink $ ln -s foo baz # symlink $ 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开始计算。..
链接到父目录,因些目录链接数会随新的子目录数的增长而增长。
许多Unix入门级参考书出自在O'Reilly,在计算机的各个领域,想买到优秀的指导书,O'Reilly不会让你失望。LDP的文档Tips-HOWTO
是另一个极好的资源。更多资源参阅Debian技术支持, 第 15 章。
Debian 参考手册
CVS, 星期一 四月 3 22:58:51 UTC 2005osamu@debian.org
iamlyoo@163.net