LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 3049|回复: 0

Debian参考手册 第八章 Debian技巧

[复制链接]
发表于 2003-2-24 23:58:23 | 显示全部楼层 |阅读模式
Debian参考手册

~~~~~~~~~
第八章 Debian技巧
~~~~~~~~~

8.1 启动系统
============
参阅LDP BootPrompt-HOWTO(http://www.tldp.org/HOWTO/BootPrompt-HOWTO.html)获得有关系统提示的详细信息。

8.1.1“我忘了root密码!”(1)
----------------------------
只要能访问控制台键盘,不需要root密码就可以启动系统登录到root帐号。(假设BIOS或lilo之类的启动引导器在启动时不需要密码。)

整个过程不需要另外的启动盘或对BIOS设置进行修改。在此,“Linux”仅是一个标签,它代表启动Debian默认安装的Linux内核。

在lilo启动屏幕中,一但出现boot:(对某些系统而言,必须按下shift键以阻止自动启动),就输入:

    boot: Linux init=/bin/sh

它会指示系统启动内核后运行/bin/sh而不是init。现在你已获得root特权和root shell。由于当前/是以只读方式挂载,而其它的硬盘分区均未挂载,故你必须完成下列步骤才能获得一个有适当功能的系统。

    init-2.03# mount -n -o remount,rw /
    init-2.03# mount -avt nonfs,noproc,nosmbfs
    init-2.03# cd /etc
    init-2.03# vi passwd
    init-2.03# vi shadow

(如果在/etc/passwd文件中所有用户的第二个域的数据为“x”,就表明系统使用了影子密码(shadow passwords),必须编辑/etc/shadow。)要删除root密码,请编辑密码文件中第二个数据域,将它设置为空白。重启系统不用密码就能登录到root。当系统启动进入runlevel 1时,Debian(至少是Potato以后的版本)需要密码,一些较老的版本则不需要。

在/bin下装一个小编辑器是个好习惯,因为有时/usr是无法访问的(参阅〖11.2 应急的编辑器〗)。

如果安装sash软件包,当系统无法启动时,还可执行:

    boot: Linux init=/bin/sash

当/bin/sh不可用时,sash可作为sh的交互式替代品,它是静态链接,内建了许多标准工具(在系统提示符下输入“help”可获得参考列表)。

8.1.2“我忘了root密码!”(2)
----------------------------
从急救盘启动系统。假设/dev/hda3是原始root分区,可用下面的方法编辑密码文件,与上述方法一样容易。

    # mkdir fixit
    # mount /dev/hda3 fixit
    # cd fixit/etc
    # vi shadow
    # vi passwd

与上面的方法相比,该方法的好处在于不需要知道lilo密码(如果有的话)。但如果系统没有预先设置为从软盘或CD启动,就需要访问BIOS的权限。

8.1.3 无法启动系统
------------------
没在安装过程中制作启动盘?没关系。如果lilo损坏了,从Debian安装套件中拿出启动盘,用它来启动系统。假设你的root分区在/dev/hda12,你想进入runlevel 3,在启动提示符后输入:

    boot: rescue root=/dev/hda12 3

接下来,系统使用软盘上的内核启动,你可登录到一个几乎拥有全部功能的系统了。(可能有少量特性或模块不可用。)

如果想做张自定义启动盘,参阅急救盘中的readme.txt文档。

8.1.4 “我不想直接启动到X!”
-----------------------------
玩unstable/sid很有趣,但在启动进程中执行不稳定的xdm、gdm、kdm和wdm会让你焦头烂额。

首先,在启动提示符后输入如下指令获得root shell:

    boot: Linux vga=normal s

其中,Linux代表你要启动的内核镜像,“vga=normal”告诉lilo在普通VGA屏幕下运行,“s”(或“S”)是传给init的参数,告诉它进入单用户模式。在提示符后输入root密码。

有多种方法禁用X启动deaemons:

    ·run update-rc.d ?dm stop 99 1 2 3 4 5 6

    ·insert "exit 0" at the start of all /etc/init.d/?dm files.
   
    ·rename all /etc/rc2.d/S99?dm files to /etc/rc2.d/K99?dm.
   
    ·remove all /etc/rc2.d/S99?dm files.
   
    ·run :>/etc/X11/default-display-manager

其中,rc2.d必须与/etc/inittab中指定的runlevel一致。?dm表示所有的xdm、gdm、kdm和wdm。

在Debian下只有第一种方法“最正确”。最后一种方法比较简单但只适用于Debian,而且还需要使用dpkg-reconfigure重新设置一次。其它方法都是通用的中止daemons的方法。

你仍可在任何控制台shell中输入startx启动X。

8.1.5 其它用于启动提示符的技巧
------------------------------
使用lilo启动提示符,可指定系统启动到特定的runlevel和配置。详情参阅BootPrompt-HOWTO(LDP http://www.tldp.org/HOWTO/BootPrompt-HOWTO.html)。

如果希望系统启动到runlevel 4,可以lilo启动提示符后输入:

    boot: Linux 4

如果希望系统启动到正常功能的单用户模式,而且你知道root密码,可在lilo启动提示符后输入下列任一参数。

    boot: Linux S
    boot: Linux 1
    boot: Linux -s

如果希望系统以少于实际内存数的内存启动(也就是说机器有64MB内存,只分配48MB给系统使用),在lilo启动提示符后输入:

    boot: Linux mem=48M

注意,不要指定大于实际内存数的内存,否则内核会崩溃。如果你有多于64MB的内存,如128MB,应在系统启动时执行mem=128或在/etc/lilo.conf中添加类似的命令行,否则旧内核或使用旧BIOS的主板将无法使用大于64MB的内存。

8.1.6 如何设置启动参数(GRUB)
-----------------------------
GRUB是Hurd项目开发的新型启动管理器,比Lilo更灵活,不过启动参数也与之稍有不同。

    grub> find /vmlinuz
    grub> root (hd0,0)
    grub> kernel /vmlinuz root=/dev/hda1
    grub> initrd /initrd
    grub> boot

请注意Hurd中的设备名:

    HURD/GRUB           Linux               MSDOS/Windows
     (fd0)               /dev/fd0            A:
     (hd0,1)             /dev/hda1           C: (usually)
     (hd0,4)             /dev/hda4           F: (usually)
     (hd1,4)             /dev/hdb4           ?

详情参阅/usr/share/doc/grub/README.Debian和/usr/share/doc/grub-doc/html/。



8.2 活动记录
============
8.2.1 记录shell活动
比起普通的个人电脑环境,Unix环境的系统管理包含了更多细致的任务。必须掌握所有基本的配置方法以便进行系统故障恢复。基于X的GUI配置工具看上去又好又方便,但不适用于紧急状况。

记录shell活动是个好习惯,特别是root用户。

Emacs:使用M-x shell在缓冲区中开始记录,使用C-x C-w将缓冲区中的记录写入文件。

Shell:使用screen命令和“^A H”,参阅〖8.6.23 用screen来定制控制台〗或脚本命令:

    $ script
    Script started, file is typescript
     ... do whatever ...
     Control-D
    $ col -bx <typescript >savefile
    $ vi savefile

还可使用下面的方法:

    $ bash -i 2>&1 | tee typescript

8.2.2 记录X活动
---------------
如果需要X应用程序的活动记录图,包括xterm屏显,可使用gimp(GUI)。它可以对每个窗口或整个屏幕进行拍照。还可以使用xwd(xbase-clients)、import(imagemagick)或scrot(scrot)。



8.3 拷贝及创建子目录
====================

8.3.1 拷贝整个子目录的基本命令
------------------------------
如果想重新整理文件组织结构,可使用下面的方法移动文件及文件链接:

    标准方法:
    # cp -a /source/directory /dest/directory # requires GNU cp
    # (cd /source/directory && tar cf - . ) | \
            (cd /dest/directory && tar xvfp - )
    如果包含硬链接,则需要更严谨的方法:
    # cd /path/to/old/directory
    # find . -depth -print0 | afio -p -xv -0a /mount/point/of/new/directory
    如果是远程操作:
    # (cd /source/directory && tar cf - . ) | \
            ssh user@host.dom (cd /dest/directory && tar xvfp - )
    如果没有链接文件:
    # scp -pr user1@host1.dom:/source/directory \
              user2@host2.dom:/dest/directory

其中,scp <==> rcp,ssh <==> rsh。

下面的有关拷贝整个子目录的信息由Manoj Srivastava<srivasta@debian.org>发表于debian-user@lists.debian.org。

8.3.2 cp
--------
传统上,cp并不能真正完成这个任务,因为它既没对符号链接进行区别对待,又不能保存硬链接。另一件需要注意的事就是稀疏文件(有洞的文件)。

GNU cp克服了这缺陷,然而对于非GNU系统,cp仍存在问题。而且使用cp无法生成小巧轻便的文档包。

    % cp -a . newdir

8.3.3 tar
---------
Tar克服了cp在处理符号链接时出现的问题,然而,cpio可以处理特殊文件,传统的tar却不行。

对于某个有多重硬链接的文件,tar的处理方法是只将其中一个链接拷贝到磁带上,所以日后你只能找回拷贝中所保留那个的链接所指的文件;cpio会为每个链接做一个拷贝,日后你可以找回任意一个链接所指的文件。

在Potato和Woody中,操作.bz2文件的tar命令参数有所变化,所以请在脚本中使用--bzip2而不要简写为-I(Potato)或-j(Woody)。

8.3.4 pax
---------
全新的,符合POSIX(IEEE Std 1003.2-1992,pages 380–388 (section 4.48) and pages 936–940 (section E.4.48))标准的,众望所归的,轻便的文档包交互工具。pax可以读、写以及列出文档包的成员,并能拷贝文件目录层次。pax的操作独立于特定的文档包格式,支持各种各样不同的文档包格式。

pax工具刚刚成形,还很新。

    # apt-get install pax
    $ pax -rw -p e . newdir
     或
    $ find . -depth  | pax -rw -p e  newdir

8.3.5 cpio
----------
从cpio或tar文档包提取/放入文件。该文档包可以是硬盘上的另一个文件,也可以是磁带或管道。

    $ find . -depth -print0 | cpio --null --sparse -pvd new-dir

8.3.6 afio
----------
afio更善于处理cpio格式的文档包。通常它比cpio要快,且提供了更多磁带选项,并且能更友好的处理有讹误的输入数据。它支持交互式处理多卷文档包。用afio制作压缩文档包比压缩tar或cpio文档包更安全。在备份处理脚本中afio是更佳的“文档处理引擎”。

    $ find . -depth -print0 | afio -px -0a new-dir

对所有的磁带备份我都使用afio。



8.4 差异备份与数据同步
======================
要进行差异备份和数据同步可使用下列几种方法:

    ·rcs:备份并进行历史记录,只支持文本。

    ·rdiff-backup: 备份并进行历史记录。支持链接。

    ·rsync:单路同步

    ·unison:双路同步

    ·cvs:多路同步服务器备份并进行历史记录,只支持文本,技术成熟。参阅〖12.1 CVS〗。

    ·arch:多路同步服务器备份并进行历史记录,但包括“处于工作中的目录”。

    ·subversion:多路同步服务器备份并进行历史记录,专用于Apache。

有关将这些方法与文档包操作结合应用的讨论参阅〖8.3 拷贝及创建子目录〗,有关自动进行备份的讨论参阅〖8.6.22 日程安排(cron,at)〗。

我只讲解两个较容易使用的工具。

8.4.1 使用rdiff进行差异备份
---------------------------
rdiff-backup提供了简单好用的方法对任何文件包括链接进行历史差异备份。例如要对~/ to /mnt/backup目录下的所有文件做备份:

    $ rdiff-backup --include ~/tmp/keep --exclude ~/tmp  ~/ /mnt/backup

从该文档包中取出3天前的旧数据恢复到~/old目录:

    $ rdiff-backup -r 3D /mnt/backup ~/old

参阅rdiff-backup(1)。

8.4.2 使用RCS进行定期差异备份
-----------------------------
changetrack会定期对RCS文档包中基于文本格式的配置文件的变化进行记录。参阅changetrack(1)。

    # apt-get install changetrack
    # vi changetrack.conf



8.5 系统冻结恢复
================

8.5.1 中止一个进程
------------------
运行top看看什么进程的活动有异常。按“P”以cpu使用率排序,“M”以内存使用率排序,“k”可以中止一个进程。还有一种方法,使用BSD风格的ps aux | less或System V风格的ps -efH | less。System V风格的排列会显示父进程ID PPID,这对中止出错的(死掉的)子进程十分有用。

知道了进程的ID,就可使用kill中止(或发信号给)某个进程,killall的作用正如其名一样。经常使用的信号有:

    1: HUP,重启daemon
   15: TERM,普通中止
    9: KILL,强令中止

8.5.2 ALT-SysRq
---------------
内核编译选项“Magic SysRq key”提供系统强心针。在i386机器上按下ALT-SysRq组合键后,试试按下列各键r 0 k e i s u b,奇迹产生了:

Un'r'aw让键盘从X崩溃中重生。将控制台loglevel改为'0'以减少错误信息。sa'k'(system attention key)中止当前虚拟控制台的所有进程。t'e'rminate中止当前终端除init外的所有进程。k'i'll中止除init外的所有进程。

'S'ync,'u'mount和re'b'oot帮你逃离真正的险境。

本文写作之时,Debian默认安装的内核并未将该选项编译进去,需要重新编译内核激活该功能。详情参阅/usr/share/doc/kernel-doc-version/Documentation/sysrq.txt.gz或/usr/src/kernel-version/Documentation/sysrq.txt.gz。



8.6 记住这些可爱的小命令
========================

8.6.1 Pager
-----------
less就是pager(文件内容浏览器)。按“h”可获得帮助。它比more更有用。在shell启动脚本中运行eval $(lesspipe)或eval $(lessfile)可让less活力四射。详情参阅/usr/share/doc/lessf/LESSOPEN。使用-R选项可输出生癖字符and enables ANSI color escape sequences.参阅less(1)。

对于某些编码系统(EUC)w3m可能是更好的选择。

8.6.2 释放内存
--------------
free和top能让你了解内存资源的许多有用信息。别担心“Mem:”行中“used”的大小,看看它下面的数字(本例的数字是38792)。

    $ free -k # for 256MB machine
                 total       used       free     shared    buffers cached
    Mem:        257136     230456      26680      45736     116136 75528
    -/+ buffers/cache:      38792     218344
    Swap:       264996          0     264996

物理内存的准确大小可通过grep '^Memory' /var/log/dmesg得到,本例将显示“Memory: 256984k/262144k available (1652k kernel code, 412k reserved, 2944k data, 152k init)”。

    Total         = 262144k = 256M (1k=1024, 1M=1024k)
    Free to dmesg = 256984k = Total - kernel - reserved - data - init
    Free to shell = 257136k = Total - kernel - reserved - data

约有5MB内存系统不能使用,因为内核需要它。

8.6.3 设定时间(BIOS)
---------------------
    # date MMDDhhmmCCYY
    # hwclock --utc
    # hwclock --systohc
    # hwclock --show

设定系统时间和硬件时间为MM/DD hh:mm, CCYY。显示时间为本地时间而硬件时间使用UTC。

8.6.4 设定时间(NTP)
--------------------
参考:Managing Accurate Date and Time HOWTO。(http://www.tldp.org/HOWTO/TimePrecision-HOWTO/index.html)

8.6.4.1 拥有永久Internet连接的系统设置时间
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
设置系统时钟通过远程服务器自动对时:

    # ntpdate server

如果你的系统拥有永久的Internet连接,应该将该命令加入/etc/cron.daily。

8.6.4.2 偶尔进行Internet连接的系统设置时间
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
使用chrony软件包。

8.6.5 如何禁用屏幕保护程序
--------------------------
对于Linux控制台:

    # setterm -powersave off

启动kon2(kanji)控制台可执行:

    # kon -SaveTime 0

运行X可执行:

    # xset s off
     或
    # xset -dpms
     或
    # xscreensaver-command -prefs

参阅相关的帮助页面。

8.6.6 搜索系统管理数据库
------------------------
Glibc提供了getent(1)搜索管理数据库的各类项目。例如passwd、group、hosts、services、protocols或networks。

    getent database [key ...]

8.6.7 禁用声音(响铃)
---------------------
最直接的方法是拔掉PC喇叭;-),对于Bash shell可执行:

    echo "set bell-style none">> ~/.inputrc

8.6.8 控制台上的错误信息
------------------------
不想看屏幕显示的错误信息,首选的方法是检查/etc/init.d/klogd,在该脚本中设置KLOGD="-c 3"然后运行/etc/init.d/klogd restart。另一种方法是执行dmesg -n3。

这儿是各种错误级别的含义:

    ·0: KERN_EMERG, 系统不可用
    ·1: KERN_ALERT, 必须立即执行
    ·2: KERN_CRIT, 紧急状态
    ·3: KERN_ERR, 错误状态
    ·4: KERN_WARNING, 警告状态
    ·5: KERN_NOTICE, 正常状态且十分重要
    ·6: KERN_INFO, 报告
    ·7: KERN_DEBUG, debug-level信息

如果你很厌恶详细而无用的错误信息,可以试试这个小补丁shutup-abit-bp6(位于样例脚本子目录)。

另一个该看看的地方是/etc/syslog.conf,检查一下是否有信息记录被发送到了控制台设备。

8.6.9 正确设置控制台类型
------------------------
在类Unix系统中,访问控制台屏幕通常要调用库例程,这就为用户提供了一种独立于终端的方式来优化字符的屏幕更新过程。参阅ncurses(3X)和terminfo(5)。

在Debian系统中,有大量预定义项目:

    $ toe | less                  # 所有项目
    $ toe /etc/terminfo/ | less   # 用户可再配置的项目

你的选择可导出到环境变量TERM。

当登录到远程Debian系统时,如果xterm的terminfo项目在非Debian的xterm中失效,请将终端类型改为支持较少特性的版本如“xterm-r6”。
参阅/usr/share/doc/libncurses5/FAQ。“dumb”是terminfo的最小公分母。

8.6.10 恢复控制台的健壮性
-------------------------
如果执行$ cat some-binary-file后屏幕一片混乱(命令的返回值与你的输入大相径庭):

   $ reset

8.6.11 将DOS下的文本文件转换为Unix类型
--------------------------------------
将DOS文本文件(行尾=^M^J)转换成Unix文本文件(行尾=^J)。

    # apt-get install sysutils
    $ dos2unix dosfile

8.6.12 正规表达式的置换
-----------------------
将所有文件FILES...中的所有FROM_REGEX字段替换成TO_REGEX字段。

    $ perl -i -p -e 's/FROM_REGEX/TO_REGEX/g;' FILES ...

-i表示“就地编辑”,-p表示“在FILES...各文件中循环”。如果置换很复杂,应使用参数-i.bak而非-i,这有助于出错恢复;它会将每个原始文件保存为以.bak为后缀的备份文件。

8.6.13 提取源文件修改部分合并到更新包
-------------------------------------
下面的操作将根据文件位置,提取源文件的修改部分并创建统一的diff文件file.patch0或file.patch1:

    $ diff -u file.old file.new1 > file.patch0
    $ diff -u old/file new1/file > file.patch1

diff文件(也称补丁文件)通常用于发送程序更新。收到的补丁文件可使用下面的方法更新另一个文件:

    $ patch -p0 file < file.patch0
    $ patch -p1 file < file.patch1

如果有3个版本的源代码,使用diff3来合并效率更高:

    $ diff3 -m file.mine file.old file.yours > file

8.6.14 分割大文件
-----------------
    $ split -b 650m file   # 将大文件分块成多个650MB的小文件
    $ cat x* >largefile    # 将所有小文件合并成一个大文件

8.6.15 精巧的管道命令辅助脚本
-----------------------------
下列脚本做为管道的一部分十分有用。

    find /usr | egrep -v "/usr/var|/usr/tmp|/usr/local"
                         # find all files in /usr excluding some files
    xargs -n 1 command   # run command for all items from stdin
    xargs -n 1 echo|     # split white-space-separated items into lines
    grep -e pattern|     # extract lines containing pattern
    cut -d: -f3 -|       # extract third field separated by :  
                         # (passwd file etc.)
    col -bx |            # remove backspace and expand tabs to spaces
    expand -|            # expand tabs
    sort -u|             # sort and remove duplicates
    tr '\n' ' '|         # concatenate lines into one line
    tr '\r' ''|          # remove CR
    tr 'A-Z' 'a-z'|      # convert uppercase to lowercase
    sed 's/^/# /'|       # make each line a comment
    sed 's/\.ext//g'|    # remove .ext
    sed  -n -e 2p|       # print the second line
    head -n 2 -|         # print the first 2 lines
    tail -n 2 -|         # print the last 2 lines

8.6.16 从网页上获取文本或邮件列表文档
-------------------------------------
下面的操作将网页转化为文本文件。从网上拷贝配置文件时十分有用。

    $ lynx -dump http://www.remote-site.com/help-info.html >textfile

links和w3m也可以这么用,只是生成的文本样式可能略有不同。

如果是邮件列表文档,可使用munpack从文本获得mime内容。

8.6.17 打印网页
---------------
下面的操作将网页内容打印成PostScript文件或发送到打印机。

    $ apt-get install html2ps
    $ html2ps URL | lpr

参阅〖3.6.1 lpr/lpd〗。还可使用a2ps和mpage软件包生成PostScript文件。

8.6.18 打印帮助页面
-------------------
下面的操作将帮助页面打印成PostScript文件或发送到打印机。

    $ man -Tps some-man-page | lpr
    $ man -Tps some-man-page | mpage -2 | lpr

8.6.19 合并两个Postscript或PDF文件
----------------------------------
可以将两个Postscript文件或PDF文件合并。

    $ gs -q -dNOPAUSE -dBATCH -sDEVICE=pswrite \
      -sOutputFile=bla.ps -f foo1.ps foo2.ps
    $ gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite \
      -sOutputFile=bla.pdf -f foo1.pdf foo2.pdf

8.6.20 命令耗时
---------------
显示某进程的耗时

    # time some-command >/dev/null
    real    0m0.035s       # time on wall clock (elapsed real time)
    user    0m0.000s       # time in user mode
    sys     0m0.020s       # time in kernel mode

8.6.21 nice命令
---------------
使用nice(来自GNU shellutils软件包)可设置命令启动时的nice值。renice(bsdutils)或top可以重设进程的nice值。nice值为19代表最慢的(优先级最低的)进程;负值就“not-nice”,如-20代表非常快的(优先级高的)进程。只有超级用户可以设定负nice值。

    # nice  -19 top                                         # very nice
    # nice --20 cdrecord -v -eject speed=2 dev=0,0 disk.img # very fast

有时极端的nice值对系统弊大于利,所以使用该命令要小心。

8.6.22 日程安排(cron,at)
--------------------------
在Linux下使用cron和at进行任务日程安排。参阅at(1)、crontab(5)、crontab(8)。

执行命令crontab -e创建或编辑crontab文件,为规律事务(按周期循环的事务)安排日程。下面的一个crontab文件样例:

    # use /bin/sh to run commands, no matter what /etc/passwd says
    SHELL=/bin/sh
    # mail any output to `paul', no matter whose crontab this is
    MAILTO=paul
    # Min Hour DayOfMonth Month DayOfWeek command (Day... are OR'ed)
    # run at 00:05, every day
    5  0  *  * *   $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
    # run at 14:15 on the first of every month -- output mailed to paul
    15 14 1  * *   $HOME/bin/monthly
    # run at 22:00 on weekdays(1-5), annoy Joe. % for newline, last % for cc:
    0 22 *   * 1-5 mail -s "It's 10pm" joe%Joe,%%Where are your kids?%.%%
    23 */2 1 2 *   echo "run 23 minutes after 0am, 2am, 4am ..., on Feb 1"
    5  4 *   * sun echo "run at 04:05 every sunday"
    # run at 03:40 on the first Monday of each month
    40 3 1-7 * *   [ "$(date +%a)" == "Mon" ] && command -args

执行at命令为偶然任务(只执行一次的任务)安排日程:

    $ echo 'command -args'| at 3:40 monday

8.6.23 用screen来定制控制台
---------------------------
screen程序允许在单一的物理终端或终端模拟窗口运行多个伪终端,每个伪终端都拥有自己的交互式shell。即便可以使用Linux伪终端或多个xterm窗口,研究一下如何设置screen丰富的特性仍很有益,这些特性包括:

    ·回溯历史显示,
    ·拷贝和粘贴,
    ·输出到日志,
    ·图形入口,
    ·将终端与整个屏幕会话分离,稍后再连接。

8.6.23.1 远程访问方案
^^^^^^^^^^^^^^^^^^^^^
如果你经常从远程终端登录到Linux机器或使用VT100终端程序,screen的detach(分离)特性将简化你的生活。

1.通过拔号连接登录,运行了一个非常复杂的screen会谈,打开了好几个窗口,有编辑器和其它一些程序。
2.突然你需要离开终端一下,但你并不想挂断连接中止工作。
3.输入^A d离开会话,然后登出系统。(或者更简单些,输入^A DD离开会话并自动登出系统)
4.当你回来时,需要再次登录,可输入命令screen -r,screen会如魔法般地重新连接上所有打开的窗口。

8.6.23.2 典型的screen命令

一但打开了screen程序,除了命令按键(默认为^A)所有的键盘输入都被送到当前窗口,所有的screen命令均按特定方式输入:^A加一个单键命令[加一些参数]的。常用的命令有:

    ^A ?     显示帮助屏幕(显示命令集)
    ^A c     创建并切换到新窗口
    ^A n     跳到下一个窗口
    ^A p     跳到上一个窗口
    ^A 0     跳到0号窗口
    ^A w     显示窗口列表
    ^A a     将Ctrl-A做为键盘输入发送到当前窗口
    ^A h     对当前窗口做硬拷贝写入到文件
    ^A H     开始/中止将当前窗口事件记录到文件
    ^A ^X    锁定终端(密码保护)
    ^A d     从终端分离屏幕会话
    ^A DD    分离屏幕会话并退出登录

以上只是screen命令的一个很小的子集。只要是你认为screen能干的事,没准它真就可以!详情参阅screen(1)。

8.6.23.3 screen会话中的退格键和Ctrl-H
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
在运行screen时,如果发现退格键和/或Ctrl-H无法正常工作,可编辑/etc/screenrc,找到这行:

    bindkey -k kb stuff "\177"

将这注释掉(例如在句首添加“#”)。

8.6.23.4 X下与screen等价的程序
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
找找xmove。参阅xmove(1)。

8.6.24 网络测试基础
-------------------
安装netkit-ping、traceroute、dnsutils、ipchains(适用于2.2版内核)、iptables(适用于2.4版内核)和net-tools软件包,然后执行:

    $ ping yahoo.com            # 检查Internet连接
    $ traceroute yahoo.com      # 跟踪IP数据包
    $ ifconfig                  # 检查主机设置
    $ route -n                  # 检查路由设置
    $ dig [@dns-server.com] host.dom [{a|mx|any}] |less
          # 检查dns-server.com的host.dom DNS记录
          # 查找{mx|any}记录
    $ ipchains  -L -n |less     # 检查包过滤(2.2 kernel)
    $ iptables -L -n |less      # 检查包过滤(2.4 kernel)
    $ netstat -a                # 查找系统上所有打开的端口
    $ netstat -l --inet         # 查找系统监听的端口
    $ netstat -ln --tcp         # 查找系统监听的TCP端口(端口数字)

8.6.25 从本地缓冲池中收邮件
---------------------------
从本地缓冲池中收的邮件:

    # exim -q    # flush waiting mail
    # exim -qf   # flush all mail
    # exim -qff  # flush even frozen mail

-qff选项用在/etc/ppp/ip-up.d/exim脚本中效果更好。

8.6.26 删除本地缓冲池中的冻结邮件
---------------------------------
删除本地缓冲池中的冻结邮件并返回出错信息:

    # exim -Mg `mailq | grep frozen | awk '{ print $3 }'`

8.6.27 再分发mbox中的信件
-------------------------
如果home目录没有空间继续处理邮件,就需要对磁盘空间进行扩容,扩容完成后需要手工分发/var/mail/username目录中的邮件到home目录中的分类邮箱,执行:

    # /etc/init.d/exim stop
    # formail -s procmail </var/mail/username
    # /etc/init.d/exim start

8.6.28 清空文件内容
-------------------
要清空某些文件如日志文件的内容,千万不要使用rm删除文件然后再创建一个新的空文件,因为在两次操作的间隔,系统可能需要访问该文件。下面是清空文件内容的安全方法:

    $ :>file-to-be-cleared

8.6.29 空文件
-------------
下面的命令可以创建空文件:

    $ dd if=/dev/zero    of=filename bs=1k count=5 # 5KB of zero content
    $ dd if=/dev/urandom of=filename bs=1m count=7 # 7MB of random content
    $ touch filename #  create 0B file (if file exists, updates mtime)

8.6.30 chroot
-------------
假设你在/dev/hda1上安装了一个完整的Linux发行版(可能是Debian的某个发布版或是Red Hat的发行版),当前你正在运行/dev/hda2上安装的另一个Linux系统。采用共享同一个内核的方法,可以运行/dev/hda1上的系统,又不用重启正在运行的/dev/hda2上的系统。

    # mount /dev/hda1 /mnt/target
     ... 假设/dev/hda1中有一个完整的系统
    # chroot /mnt/target
     ... 现在/dev/hda1下的内容被看成是位于root目录。
    # mount proc /proc              # just in case
     ... 运行/dev/hda1中的命令

该方法可实现在同一台机器上同时安装stable/testing/unstable。同样,当运行需大量内存的程序如dselect时,可在主机上运行该程序,同时将子机硬盘通过NFS方式挂载到主机并开放读/写权限,在主机上使用chroot方法操作子机。

在Woody中使用debootstrap命令很容易构造chroot体系:

    # mkdir potatochroot
    # debootstrap potato potatochroot
    # chroot potatochroot
    # apt-setup # set-up /etc/apt/sources.list

pbuilder是一个更专业化的chroot软件包,它可以构造一个chroot体系并在chroot中编译软件包。该体系可用于检查软件包编译时关联关系是否正确,并确保编译生成的软件包中没有不必要的或错误的关联关系。

参阅http://lists.debian.org/debian-user/2002/debian-user-200204/msg01010.html

8.6.31 怎样检查硬链接
---------------------
检查两个文件是否是指向同一个文件的两个硬链接:

    $ ls -li file1 file2

8.6.32 挂载硬盘上的镜像文件
----------------------------
如果file.img文件是硬盘内容的镜像文件,而且原始硬盘的配置参数为xxxx=(bytes/sector) * (sectors/cylinder),那么,下面的命令将其挂载到/mnt:

    # mount -o loop,offset=xxxx file.img /mnt

注意绝大部分的硬盘都是512 bytes/sector。

8.6.33 Samba
------------
获取Windoze文件的基本方法:

    # mount -t smbfs -o username=myname,uid=my_uid,gid=my_gid \
            //server/share /mnt/smb  # mount Windows files to Linux
    # smbmount //server/share /mnt/smb \
            -o "username=myname,uid=my_uid,gid=my_gid"
    # smbclient -L 192.168.1.2 # list the shares on a computer

可从Linux检查Samba网上邻居:

    # smbclient -N -L ip_address_of_your_PC | less
    # nmblookup -T "*"



=========================================
Debian Reference

CVS, 2003-01-31-07:53:52
Osamu Aoki osamu@debian.org
Editor: David Sewell dsewell@virginia.edu
中文翻译:LYOO iamlyoo@163.com
          2003/02/24
=========================================
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表