Debian/常用命令与典型错误

来自站长百科
跳转至: 导航、​ 搜索

Debian | Debian安装 | Debian使用 | Debian系统升级 | Debian常见问题

常用命令[ ]

Pager[ ]

less 就是默认的 pager(文件内容浏览器)。按“h”可获得帮助。它比 more 更有用。在 shell 启动脚本中运行 eval $(lesspipe) 或 eval $(lessfile) 可以让 less 活力四射。使用 -R 选项可输出生癖字符 and enables ANSI color escape sequences。

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

释放内存[ ]

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

     $ free -k # 用 256MB 内存的机器
                  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内存系统不能使用,因为内核需要它。

设定时间(BIOS)[ ]

     # date MMDDhhmmCCYY
     # hwclock --utc --systohc
     # hwclock --show

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

如果硬件(BIOS)时间设置为 GMT,在文件 /etc/default/rcS 中改变设置 UTC=yes。

拥有永久 Internet 连接的系统设置时间[ ]

设置系统时钟通过远程服务器自动对时:

# ntpdate server

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

如何禁用屏幕保护程序[ ]

禁用屏幕保护程序,使用下面的命令。

对于 Linux 控制台:

# setterm -powersave off

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

# kon -SaveTime 0

运行X可执行:

# xset s off

# xset -dpms

# xscreensaver-command -prefs

搜索系统管理数据库[ ]

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

getent database [key ...]

禁用声音(响铃)[ ]

对于 Bash shell 可执行:

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

控制台上的错误信息[ ]

不想看屏幕显示的错误信息,首选的方法是检查 /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 信息

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

正确设置控制台类型[ ]

在类 Unix 系统中,访问控制台屏幕通常要调用库例程,这就为用户提供了一种独立于终端的方式来优化字符的屏幕更新过程。

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

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

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

当登录到远程Debian系统时,如果 xterm 的 terminfo 项目在非 Debian 的 xterm 中失效,请将终端类型改为支持较少特性的版本如“xterm-r6”。

让控制台恢复正常状态[ ]

如果执行 cat some-binary-file 后屏幕一片混乱(当你输入命令时,无法看到正常的回显(echo)):

$ reset

将DOS下的文本文件转换为 Unix 类型[ ]

DOS文本文件(行尾=^M^J)转换成 Unix 文本文件(行尾=^J)。

# apt-get install sysutils
$ dos2unix dosfile

使用recode转化文本文件[ ]

下面将在 DOS、 Mac 和 Unix 的文本文件中转换行结尾格式:

     $ recode /cl../cr <dos.txt >mac.txt
     $ recode /cr.. <mac.txt >unix.txt
     $ recode ../cl <unix.txt >dos.txt

自由的 recode 在各种各样的字符集和界面中转换:

$ recode charset1/surface1..charset2/surface2 \<input.txt >output.txt

使用的通用字符集设置是:

  • us — ASCII (7 bits)
  • l1 — ISO Latin-1 (ISO-8859-1, Western Europe, 8 bits)
  • EUCJP — EUC-JP for Japanese (Unix)
  • SJIS — Shift-JIS for Japanese (Microsoft)
  • ISO2022JP — Mail encoding for Japanese (7 bits)
  • u2 — UCS-2 (Universal Character Set, 2 bytes)
  • u8 — UTF-8 (Universal Transformation Format, 8 bits)

使用的通用界面:

  • /cr — Carriage return as end of line (Mac text)
  • /cl — Carriage return line feed as end of line (DOS text)
  • / — Line feed as end of line (Unix text)
  • /d1 — Human readable bytewise decimal dump
  • /x1 — Human readable bytewise hexidecimal dump
  • /64 — Base64 编码文本
  • /QP — Quoted-Printable 编码文本

正规表达式的置换[ ]

将所有文件 FILES ...中的所有 FROM_REGEX 字段替换成 TO_TEXT 字段。

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

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

使用脚本来编辑文件[ ]

下面的脚本将删除 5–10 行以及 16–20 行。

     #!/bin/bash
     ed $1 <<EOF
     16,20d
     5,10d
     w
     q
     EOF

在此,ed 命令与 vi 命令模式下的是一样的,从外部编辑文件的方式使它更适于脚本化。

提取源文件修改部分合并到更新包[ ]

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

$ diff -u file.old file.new > file.patch0
$ diff -u old/file new/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

分割大文件[ ]

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

从文本格式的表格中抽取数据[ ]

假设有一个文本文件名为 DPL,其中存放着所有前 Debian 项目领导人的名字和他们的上台日期,表格格式是以空格做为分隔的。

     Ian     Murdock   August  1993
     Bruce   Perens    April   1996
     Ian     Jackson   January 1998
     Wichert Akkerman  January 1999
     Ben     Collins   April   2001
     Bdale   Garbee    April   2002
     Martin  Michlmayr March   2003

Awk 经常用于从这类文件中提取数据

     $ awk '{ print $3 }' <DPL                   # month started
     August
     April
     January
     January
     April
     April
     March
     $ awk '($1=="Ian") { print }' <DPL          # DPL called Ian
     Ian     Murdock   August  1993
     Ian     Jackson   January 1998
     $ awk '($2=="Perens") { print $3,$4 }' <DPL # When Perens started
     April 1996

象 Bash 这种 Shell 也能够用来分析这种文件:

     $ while read first last month year; do 
         echo $month
       done <DPL

跟第一个 Awk 例子有相同的输出

在这里,read 内建命令使用字符 $IFS (internal field separators 内部列分隔符)来将行分开为单词。

如果你改变 IFS 为 ":",你能够用 shell 漂亮的分析 /etc/passwd:

     $ oldIFS="$IFS"   # 保存旧值
     $ IFS=":"
     $ while read user password uid gid rest_of_line; do
         if [ "$user" = "osamu" ]; then 
           echo "$user's ID is $uid"
         fi
       done < /etc/passwd
     osamu's ID is 1001
     $ IFS="$oldIFS"   # 恢复旧值

(如果使用 Awk 作同样的事情,使用 FS=":" 来设置列分隔符。)

shell 也使用 IFS 来分开参数扩展、命令替换和算术扩展的结果集。 但在被单引号或双引号引用的单词内,不会发生这种情况。 默认的 IFS 值是: <space>、 <tab> 和 <newline> 。

请小心使用这个 shell IFS 技巧。 当 shell 解释部分脚本作为它的输入时,奇怪的事情将会发生。

     $ IFS=":,"                        # 使用 ":" 和 "," 作为 IFS
     $ echo IFS=$IFS,   IFS="$IFS"     # echo 是 Bash 内建的
     IFS=  , IFS=:,
     $ date -R                         # 只是一个命令输出
     Sat, 23 Aug 2003 08:30:15 +0200
     $ echo $(date -R)                 # 子 shell --> 输入到主 shell
     Sat  23 Aug 2003 08 30 36 +0200
     $ unset IFS                       # 重设 IFS 为默认的
     $ echo $(date -R)
     Sat, 23 Aug 2003 08:30:50 +0200

精巧的管道命令辅助脚本[ ]

下列脚本做为管道的一部分十分有用。

  • find /usr | egrep -v "/usr/var|/usr/tmp|/usr/local" # 查找 /usr 下的所有文件,排除某些文件
  • xargs -n 1 command # 将所有项作为标准输入来执行命令
  • xargs -n 1 echo | # 将空格隔离的项分开为行
  • xargs echo | # 合并所有的行到一行里面
  • grep -e pattern| # 提取含有 pattern 的行
  • cut -d: -f3 -| # 提取用 : 分开的第 3 列(比如说 passwd 文件)
  • awk '{ print $3 }' | # 提取用空格分开的第 3 列
  • awk -F'\t' '{ print $3 }' | # 提取用 tab 分开的第 3 列
  • col -bx | # 删除退格键,扩展 tab 为空格
  • expand -| # 扩展 tab
  • sort -u| # 排序并删除重复行
  • tr '\n' ' '| # 将多行连接为一行
  • tr '\r' | # 删除 CR
  • tr 'A-Z' 'a-z'| # 转化大写字母为小写
  • sed 's/^/# /'| # 将每行变为注释
  • sed 's/\.ext//g'| # 删除 .ext
  • sed -n -e 2p| # 显示第 2 行
  • head -n 2 -| # 显示头两行
  • tail -n 2 -| # 显示最后两行

循环每一个文件的脚本片段[ ]

下面的方法将循环处理匹配 *.ext 的每一个文件,确保适当处理文件名包含空格的奇怪文件,并且执行相同的操作。

Shell 循环 (在 PS2=" " 时使用多行格式的例子。 如果在一行内输入这些命令,需要在每一个换行处加一个分号。):

     for x in *.ext; do
       if test -f "$x"; then
         command "$x"
       fi
     done

find 和 xargs 结合:

find . -type f -maxdepth 1 -name '*.ext' -print0 | \
xargs -0 -n 1 command

加 -exec 选项的 find 和一个命令结合:

find . -type f -maxdepth 1 -name '*.ext' \
-exec command '{}' \;

加 -exec 选项的 find 和一个短的 shell 脚本结合:

find . -type f -maxdepth 1 -name '*.ext' \
-exec sh -c "command '{}' && echo 'successful'" \;

短小的 Perl 脚本[ ]

虽然任何 Awk 脚本均可使用 a2p(1) 自动重写成 Perl, 但最好用手工的方法将一行 Awk 脚本转化为一行 perl 脚本。例如:

awk '($2=="1957") { print $3 }' |

与下列任意一行相当:

  • perl -ne '@f=split; if ($f[1] eq "1957") { print "$f[2]\n"}' |
  • perl -ne 'if ((@f=split)[1] eq "1957") { print "$f[2]\n"}' |
  • perl -ne '@f=split; print $f[2] if ( $f[1]==1957 )' |
  • perl -lane 'print $F[2] if $F[1] eq "1957"' |

其实上面各行中所有 perl 参数中的空格均可去掉,这得益于 Perl 的数字字符串自动转换功能。

perl -lane 'print$F[2]if$F[1]eq+1957' |

从网页上获取文本或邮件列表文档[ ]

下面的操作将网页转化为文本文件。从网上拷贝配置文件时十分有用。

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

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

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

打印网页[ ]

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

$ apt-get install html2ps
$ html2ps URL | lpr

打印帮助页面[ ]

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

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

合并两个 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

命令耗时[ ]

显示某进程的耗时

     # time some-command >/dev/null
     real    0m0.035s       # 挂钟时间(过去的真实时间)
     user    0m0.000s       # 用户模式时间
     sys     0m0.020s       # 核心模式时间

nice 命令[ ]

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

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

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

日程安排(cron,at)[ ]

在 Linux 下使用 cron 和 at 进行任务日程安排。

执行命令 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

用screen来定制控制台[ ]

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

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

远程访问方案[ ]

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

通过拔号连接登录,运行了一个非常复杂的 screen 会谈,打开了好几个窗口,有编辑器和其它一些程序。

突然你需要离开终端一下,但你并不想挂断连接中止工作。

输入^A d离开会话,然后登出系统。(或者更简单些,输入^A DD离开会话并自动登出系统)

当你回来时,需要再次登录,可输入命令 screen -r,screen 会如魔法般地重新连接上所有打开的窗口。

典型的 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 会话中的退格键和Ctrl-H[ ]

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

bindkey -k kb stuff "\177"

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

网络测试基础[ ]

安装 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 记录
           # 查找{a|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 端口(端口数字)

从本地缓冲池中清空(flush)邮件[ ]

从本地缓冲池中清空邮件:

  • # exim4 -q # 清空待读邮件
  • # exim4 -qf # 清空所有邮件
  • # exim4 -qff # 清空冻结邮件

-qff 选项用在 /etc/ppp/ip-up.d/exim 脚本中效果更好。 在 Woody 和更老的版本中,使用 exim 代替 exim4。

删除本地缓冲池中的冻结邮件[ ]

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

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

在 Woody 和更老的版本中,使用 exim 代替 exim4。

再分发 mbox 中的信件[ ]

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

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

在 Woody 和更老的版本中,使用 exim 代替 exim4。

清空文件内容[ ]

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

$ :>file-to-be-cleared

空文件[ ]

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

     $ dd if=/dev/zero    of=filename bs=1k count=5 # 5KB 零内容
     $ dd if=/dev/urandom of=filename bs=1M count=7 # 7MB 随机内容
     $ touch filename #  创建一个 0 B 大小的文件 (如果文件存在,更新该文件的修改时间)

例如,最实用的用法是从 Debian 启动软盘的 shell 中执行下列命令将硬盘 /dev/hda 的内容完全清空。

# dd if=/dev/urandom of=/dev/hda; dd if=/dev/zero of=/dev/hda

chroot[ ]

chroot 程序,chroot(8),不需要重启系统,就可以在单独的系统上同时运行多个不同的 GNU/Linux 环境。

还可以在较快主机的 chroot 下运行某些需耗大量系统资源内存的程序如 apt-get 或 dselect,并将较慢子机的硬盘通过 NFS 方式挂载到主机,开放读/写权限,在主机上以 chroot 方式操作子机。

用chroot来运行不同版本的 Debian[ ]

在 Sarege 中使用 debootstrap 命令很容易构造 chroot Debian 体系。对于 Sarge 的后续发行版,用 cdebootstrap 命令加上适当的选项来代替 debootstrap。例如,在一台拥有快速 Internet 连接的机器的 /sid-root 下创建一个 Sid chroot:

     main # cd /; mkdir /sid-root
     main # debootstrap sid /sid-root http://ftp.debian.org/debian/
     ... 看它下载整个系统
     main # echo "proc /sid-root/proc proc none 0 0" >> /etc/fstab
     main # mount /sid-root/proc
     main # mount /dev/ /sid-root/dev -o bind
     main # cp /etc/hosts /sid-root/etc/hosts
     main # chroot /sid-root /bin/bash
     chroot # cd /dev; /sbin/MAKEDEV generic; cd -
     chroot # apt-setup # 创建 /etc/apt/sources.list 文件
     chroot # vi /etc/apt/sources.list # 将源指向 unstable
     chroot # dselect  # 可以使用 aptitude,安装 mc 和 vim :-)

现在你就拥有了一个全功能 Debian 子系统,可以尽情享受而不必担心主 Debian 受到不利影响。

该 debootstrap 应用技巧还可以实现在没有 Debian 安装盘的情况下,从另一个 GNU/Linux 发行版下安装 Debian。参阅 http://www.debian.org/releases/stable/i386/apcs04

设置chroot登录[ ]

输入chroot /sid-root /bin/bash 非常简单,但这将保留当前的所有环境变量,你可能并不希望这样并且有时还会出问题。更好的方法是,在别的虚拟终端上执行另一个登录进程,登录到 chroot 目录。

在默认的 Debian 系统中,从 tty1 到 tty6 运行 Linux 控制台,tty7 运行 X Window 系统,在本例中,我们将 tty8 设置成 chroot 控制台。按照用 chroot 来运行不同版本的 Debian, 创建好 chroot 系统后,就可以在主系统的 root shell 中输入:

     main # echo "8:23:respawn:/usr/sbin/chroot /sid-root "\
            "/sbin/getty 38400 tty8" >> /etc/inittab
     main # init q    # 重启 init

配置chroot下的X[ ]

想在chroot下安全地运行最新版的 X 和 GNOME 吗?完全可以!下面的例子将实现在虚拟终端 vt9 下运行 GDM。

首先,按照用 chroot 来运行不同版本的 Debian, 安装好 chroot 系统,从主系统的 root 下拷贝关键配置文件到 chroot 系统。

     main # cp /etc/X11/XF86Config-4 /sid-root/etc/X11/XF86Config-4
     main # chroot /sid-root # or use chroot console
     chroot # cd /dev; /sbin/MAKEDEV generic; cd -
     chroot # apt-get install gdm gnome x-window-system
     chroot # vi /etc/gdm/gdm.conf # do s/vt7/vt9/ in [servers] section
     chroot # /etc/init.d/gdm start

在此,编辑 /etc/gdm/gdm.conf,使其在 vt7 到 vt9 上创建虚拟终端。

现在可以很容易地能过切换 Linux 虚拟终端来实现在主系统的 X 环境和 chroot 系统的 X 环境之间转换,例如使用 Ctrl-Alt-F7 和 Ctrl-Alt-F9。

[FIXME] 在 chroot 系统下 gdm 的 init 脚本中添加一条注释和一条链接。

使用 chroot 来运行其它发行版[ ]

很容易创建一个包含其它发行版的 chroot 环境。使用其它发行版的安装程序将它们安装到单独的硬盘分区中。例如 root 分区位于 /dev/hda9:

     main # cd /; mkdir /other-dist
     main # mount -t ext3 /dev/hda9 /other-dist
     main # chroot /other-dist /bin/bash

使用 chroot来编译软件包[ ]

这儿有一个很特殊的 chroot 软件包 pbuilder,它构造一个 chroot 系统并在其中编译软件包。该体系可用于检查软件包编译时关联关系是否正确,并确保编译生成的软件包中没有不必要的或错误的关联关系。

怎样检查硬链接[ ]

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

$ ls -li file1 file2

mount硬盘上的镜像文件[ ]

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

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

Samba[ ]

获取 Windows 文件的基本方法:

     # mount -t smbfs -o username=myname,uid=my_uid,gid=my_gid \
             //server/share /mnt/smb  # 挂载 Windows 的文件到 Linux
     # smbmount //server/share /mnt/smb \
             -o "username=myname,uid=my_uid,gid=my_gid"
     # smbclient -L 192.168.1.2 # 列出某个计算机的共享目录

可从 Linux 检查 Samba网上邻居:

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

外来文件系统的操作工具[ ]

Linux 内核支持多种外来文件系统,想访问它们只需将其挂载到合适的文件系统下就行了。对某些文件系统,还提供专门工具不需要挂载,只依靠用户空间的程序,不需要内核提供文件系统支持,就能完成访问。

  • mtools: for MS-DOS filesystem (MS-DOS, Windows)
  • cpmtools: for CP/M filesystem
  • hfsutils: for HFS filesystem (native Macintosh)
  • hfsplus: for HFS+ filesystem (modern Macintosh)

对于创建和检查 MS-DOS FAT 文件系统 dosfstools 非常有用。

需要注意的典型错误[ ]

这里有一些危险行为的例子。如果你是使用特权账号 root 的话,负面影响将会更大。

rm -rf .*[ ]

在象"rm -rf .*" 的命令行参数中使用通配符文件名,有可能造成危险的结果, 因为 ".*" 扩展为 "." 和 ".."。 比较幸运的是,在 Debian 发行版中,当前版本的 "rm" 命令会检查文件名参数的健全性,会拒绝删除 "." 和 ".."。 但这种检查并不一定在其它地方存在。 尝试下面的操作来参看通配符文件名是怎样工作的。

  • "echo *" : 列出当前目录下所有不以点开头的文件和目录
  • "echo .[^.]*" : 列出当前目录下所有以点开头的文件和目录
  • "echo .*" : 列出父目录下的所有东西以及父目录自身

rm /etc/passwd[ ]

由于你的过失,丢失象 /etc/passwd 这样的重要文件,是一件非常痛苦的事。Debian 系统周期性的将他们备份到 /var/backups/。 当你恢复这些文件的时候,你需要设置适当的权限。

# cp /var/backups/passwd /etc/passwd
# chmod 644 /etc/passwd

参考来源[ ]

http://www.debian.org/doc/manuals/debian-reference/ch-tips.zh-cn.html

Debian使用手册导航

Debian安装

安装Debian GNU/Linux前准备 | 获取系统安装介质 | 使用Debian安装程序 | 启动进入新 Debian 系统 | 内核及其它信息 | 为Debian准备分区 | 安装指南 | 在Debian上安装Apache+Mysql+PHP

Debian使用

Debian 文件 | Debian基本操作 | Midnight Commander (MC) | 类Unix工作环境 | 类Unix文本处理 | 类Unix文件系统 | Debian生存命令 | Debian进阶 | Debian其他特性 | Debian下的Linux内核 | 启动系统 | Debian/活动记录及拷贝、创建子目录 | 差量备份、数据同步与系统冻结恢复 |常用命令与典型错误| 系统初始化 | 访问限制(Restricting access) | 刻录机 | 本地化

Debian升级

Debian系统升级 | 发行版升级到stable、testing或unstable

Debian技术支持

Debian技术支持

Debian常见问题

定义与概述 | 兼容性问题 | Debian 的软件系统 | Debian 的 FTP | Debian 的包管理系统 |Debian 的包管理工具 |更新系统 | Debian 与内核 | 定制 Debian GNU/Linux 的安装 |获取 Debian GNU/Linux 的支持 | 为 Debian 项目捐赠 | 作为商品销售Debian以及对其的展望