On this page... (hide)

  1.   1.  系统管理
    1.   1.1  Debian部分用户组的含义
    2.   1.2  包管理器“没有可用的公钥”问题
    3.   1.3  曾经正常的软件总报错怎么办
    4.   1.4  从源代码包安装软件
    5.   1.5  让apt-get等命令行程序使用代理的方法
    6.   1.6  Linux用超线程注意事项
    7.   1.7  配置网络的方法
    8.   1.8  无线网络的设置
    9.   1.9  查看当前占用的网络带宽的方法
    10.   1.10  DHCP自动修改DNS设置的问题
    11.   1.11  Debian下设置程序开机自动运行的方法
    12.   1.12  监控服务状态,崩溃时自动重启进程的方法
    13.   1.13  删除系统中多余包
    14.   1.14  Debian系统配制工具,再不会无所适从了,debian也很亲切呀!
    15.   1.15  版本降级的方法
  2.   2.  系统调优
    1.   2.1  Debian DNS解析缓慢的问题(禁用ipv6的方法)
    2.   2.2  打开DMA通道
    3.   2.3  自动更新程序启动菜单
    4.   2.4  安装苹果字体
    5.   2.5  安装微软字体
    6.   2.6  Gnome下自定义启动程序快捷键
  3.   3.  软件设置
    1.   3.1  命令行下编辑器
    2.   3.2  Debian : disable X的方法
    3.   3.3  xwmconfig
    4.   3.4  适合配置低的机器跑的窗口管理器
    5.   3.5  Debian下配置tor代理的方法(转载)
    6.   3.6  安装Flash Player
    7.   3.7  让lftp支持编码转换
    8.   3.8  聊天工具
    9.   3.9  Freemind的安装方法
    10.   3.10  jEdit的安装方法
    11.   3.11  Linux下玩Windows游戏的方法
    12.   3.12  Linux下使用3322.org动态域名的方法
    13.   3.13  VMware启动报错问题
    14.   3.14  Debian安装Java的方法
  4.   4.  使用技巧
    1.   4.1  文件名编码转换
    2.   4.2  分区对拷
    3.   4.3  从光盘制作光盘镜像文件
    4.   4.4  需要的文件在哪个包里可以找到呢?
    5.   4.5  远程使用xwindows的简单方法
    6.   4.6  查看进程之间的继承关系
    7.   4.7  Bash中修正错误指令
    8.   4.8  如何临时增加交换空间?
    9.   4.9  察看某个命令使用了什么库文件
    10.   4.10  查看当前正在运行的内核版本
    11.   4.11  查看当前正在运行的Debian版本
    12.   4.12  发现文件系统中的重复文件
    13.   4.13  使openbsd-inetd服务自启动
    14.   4.14  批量杀死进程

这里只是放置一些关于Debian的零散技巧,如果需要完整的Debian安装指南,可以参考我的安装过程,在MyDebian

1.  系统管理

1.1  Debian部分用户组的含义

一些有趣的用户组:

  • 如果pam_wheel.so不带任何group=参数,root group就是su默认的wheel group。
  • adm group可以阅读日志文件。
  • cdrom group可在本地赋予一组用户访问CD-ROM驱动器的权限。
  • floppy group可在本地赋予一组用户访问软盘驱动器的权限。
  • audio group可在本地赋予一组用户访问声音设备的权限。
  • src group拥有源代码以及/usr/src目录下的文件。它可以在本地赋予某个用户管理系统源代码的权限。
  • 对于管理桌面或低级别的系统管理员,可设置他们为staff成员,该类成员可以在/usr/local下工作并且可以在/home下创建目录。

完整列表参阅Securing Debian Manual的“FAQ”章节,亦见于Woody中的harden-doc软件包。新的base-passwd (>3.4.6)软件包亦包含了权威列表:/usr/share/doc/base-passwd/users-and-groups.html。

如果要修改某用户所属的用户组情况,可以直接编辑/etc/group文件。之后重新登陆即会更新所使用用户的信息。

1.2  包管理器“没有可用的公钥”问题

Debian的包管理器利用了数字签名的方法来保证包的完整性,于是在大的版本升级后,常常会造成原有公钥失效的情形,造成apt-get或者aptitude等报出类似下面的错误:

正在读取软件包列表... 完成
W: 以下 key ID 没有可用的公钥:
A70DAF536070D3A1
W: 您可能需要运行 apt-get update 来解决这些问题

解决的办法是在root下执行:

 gpg --keyserver wwwkeys.eu.pgp.net --recv-keys A70DAF536070D3A1 && apt-key add /root/.gnupg/pubring.gpg && apt-get update

如果还不行,就Google一下吧。

1.3  曾经正常的软件总报错怎么办

原来挺正常的功能一次apt-get upgrade以后忽然不大对劲,或是总报错。如果不是在使用unstable版本,那么十有八九此时正好赶上大规模软件包升级,比如gnome2.6到2.8等等,而sourceslist指定的镜像正好正在镜像,升级还不够完整。一般来说,过几天再upgrade一次就有希望恢复以前的正常状态。

1.4  从源代码包安装软件

用“apt-get source 软件包名”通常能够得到.dsc、.tar.gz和.diff.gz三个文件,并且apt-get会自动执行“dpkg-source -x 文件包名.dsc”把压缩包解开。会得到一个以软件包名作为名称的目录。首先安装fakeroot包,之后进入软件包源码目录,如果gcc以及libc等编译相关的软件包都已经齐备,那么运行下面指令可以得到一个编译好的deb包:

 dpkg-buildpackage -rfakeroot -us -uc

再在root下安装这个生成的deb就行了。如果其中出现问题,请注意系统给出的各种提示,通常是相关的包没有安装全导致的。

1.5  让apt-get等命令行程序使用代理的方法

注册如下环境变量:

# export ftp_proxy=ftp://你的FTP代理地址:端口/
# export http_proxy=http://你的HTTP代理地址:端口/

1.6  Linux用超线程注意事项

要使用带SMP功能的内核才行,启用超线程成功后应该可以在/proc/cpuinfo 看到2个CPU的信息才对。

1.7  配置网络的方法

配置文件:/etc/network/interface

  • 配置为dhcp方式 ( 动态获取 IP ) :
# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)

# The loopback interface
# automatically added when upgrading
auto lo
iface lo inet loopback

# The first NIC
# automatically added when upgrading
auto eth0
iface eth0 inet dhcp # 指定為 dhcp 型態
  • 配置为static方式 ( 手动指定IP )
# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)

# The loopback interface
# automatically added when upgrading
auto lo
iface lo inet loopback

# The first NIC
# automatically added when upgrading
auto eth0 # 指定網卡
iface eth0 inet static
address 192.168.0.100 # 指定 IP Address ,視您的環境而定。
netmask 255.255.255.0 # 網路遮罩,通常 C Class 網路這樣設定即可。
gateway 192.168.0.1 # 指定 Default gateway,視您的環境而定。

DNS配置文件:/etc/resolv.conf

启用一个网卡,可以使用ifup eth0或者ifconfig eth0 up这样的指令;对应的ifdown eth0和ifconfig eth0 down则是停用一个网卡。

1.8  无线网络的设置

(最新的建议是用wicd来搞无线网络设置,据说会轻松很多。)

首先当然得搞定网卡驱动,这个就不说了。建议安装wireless-tools这个包,这样就有了iwconfig, iwlist等一堆指令,帮助配置无线网络,而且这个包中的指令还常常会被一些图形化的配置工具所调用。

如果使用KDE,则有kwifimanager可以用;而gnome下则有/usr/bin/network-admin的图形化配置工具可以使用(这是gnome-system-tools包中的工具,支持WEP无线加密方式),基本能够完成图形化无线网络设置,只是还不能搞定WPA加密方式。

另外的办法是手动修改修改配置文件,在/etc/network/interfaces文件里面添加类似下面这样的内容:

auto eth0
iface eth0 inet dhcp
pre-up modprobe airport
post-down rmmod airport
post-down rmmod orinoco
post-down rmmod hermes
wireless-essid any
wireless-mode managed
wireless-ap any
wireless-nick DebianPC
wireless-key s:MyPassowrd

其中采用的是dhcp的地址获取方式,pre-up和post-down开头的行是在ifup的时候载入无线网卡驱动的内核模块(示例中载入的是ibook的无线网卡驱动)、ifdown的时候卸载这些模块,这样无线网卡可以自动关闭,从而在不用的时候节省电能。

再往下的以wireless开头的行则是无线网络设置的一些参数,示例中的设置是无需密码认证的开放式AP对应的客户端设置方式。WEP共享密钥方式的设置办法我还没有调通……

为了搞定WEP,似乎可以借助于linux-wlan这个项目,只是似乎这个项目的网络配置体系要在interfaces这一套之外单独配置,所以暂时还没有试验。

1.9  查看当前占用的网络带宽的方法

需要另装软件实现(Debian 发行版中都有对应的包),可以选择使用 bmon 、 ifstat 或者 vnstat 。这三个软件的实现原理有所区别,可以依据自己只是需要查看当前的带宽使用情况还是打算设置一个带宽监控服务来进行选择。

1.10  DHCP自动修改DNS设置的问题

配置网络为通过DHCP自动获取IP地址设置时,系统会自动从DHCP服务器获取DNS服务器设置,并且覆盖/etc/resolv.conf中的设置。当DHCP指定的DNS服务器性能不佳时,我们就需要手动指定DNS服务,这样就得禁止DHCP客户端覆盖本地DNS设置。

其关键就在/etc/dhclient-script这个脚本中。手动编辑这个脚本,注意与“make_resolv_conf()”相关的行,根据需要把“make_resolv_conf()”的函数体部分注释掉就行了。我的机器上因为没装resolvconf包,因此将脚本文件的第52到55行注释掉就行了。修改后的上下文大概是这样的:

else
  make_resolv_conf() {
#    echo search $new_domain_name >/etc/resolv.conf
#    for nameserver in $new_domain_name_servers; do
#      echo nameserver $nameserver >>/etc/resolv.conf
#    done
    return 0
  }

1.11  Debian下设置程序开机自动运行的方法

例如Tomcat5,安装在/usr/share/tomcat下面每次开机都要去/usr/share/tomcat/bin下去运行startup.sh才能启动Tomcat,如何设置才能让Tomcat能开机后自已就启动起来?建一个快捷方式到你的运行级别就可以了例如

ln -s /usr/share/tomcat/bin/startup.sh /etc/rc2.d/S99tomcat
ln -s /usr/share/tomcat/bin/shutdown.sh /etc/rc6.d/K0tomcat

说明:S打头表示开机时进入这个运行级别时会自动以start参数运行,K打头的表示进入这个运行级别就自动以stop的参数运行。自动运行的顺序按照文件名的名称进行排序。文件名的名称没有特殊要求。

通常的做法是S|K[0-9][0-9].*的格式,第一个为S或者K,第二、三个字符中00-99,用来控制运行的顺序,再后就是一个通俗易懂的名字了。而且,这个链接所指向的文件必须是可执行的。

1.12  监控服务状态,崩溃时自动重启进程的方法

除了用强大又完善的 MONIT 或者 daemontools 之外,也可以利用 shell 脚本加上 cron 来大致实现同样的效果。

其中 shell 脚本大致这样写:

#!/bin/bash
if pgrep myprocess  >/dev/null ;then
   echo "service is alive"
else
   echo "service is dead"
   /path/to/myprocess &
fi

利用 crontab -e 创建一个新的 cron 服务,每分钟执行一次刚才创建的 shell 脚本。crontab 里大致这样写:

*/1 *  *  *  *  希望执行的指令完整路径及参数

1.13  删除系统中多余包

有一个小程序叫deborphan,可以从你的Debian中找到没有用的库。如果要一次删除,可以用:

deborphan | xargs dpkg --purge

其它的程序只能你自己一点一点删了,用aptitude可以选,仔细选选能删掉很多东西的。

1.14  Debian系统配制工具,再不会无所适从了,debian也很亲切呀!

都是命令行的配制工具(内容摘自 LinuxSir.org 的 Debian 版面):

rcconf
系统引导是你想要启动的服务,很有用工具。

base-config
基系统配制,第一次启动后,碰到的就是它吧,配制的方面很多哦,呵呵。

debconf Debian 包裹配制系统

dpkg-reconfigure 配制一个已经安装的包裹
很有用哦,任何安装的包裹都可以用它来配制。

apt-get install etherconf
dpkg-reconfiguration etherconf
网络的配制,包括主机名,IP,DHCP,DNS,GATEWAY,NETMASK。。。等。

如果如果你用lan上网,这几个文件很重要:
/etc/hostname主机名
/etc/network/interfaces 网络配制
/etc/resolv.conf DNS配制
如:
nameserver 202.96.104.18
nameserver 202.96.103.36

dpkg-reconfiguration xserver-xfree86
鼠标,键盘,显示器和显卡配制,能不能进X,全看它了。
或手工修改/etc/X11/XF86Config-4,作用一样。

modconf
大家肯定会在刚开始装系统时碰到那个另人望而生畏的基于表单的模块选取界面(我还曾专门写一贴,关于如何选取模块),就是它了。Debian想的非常周到,它把你须要的模块都做好了,只等你动手选了,以后忘了选或想移除模块,千万不要靠重装来解决问题,呵呵。

当然也可以手动添加了:
/etc/modules
这里写的都是你引导时要加载的内核模块,可以自己添加,
/etc/modules.conf
模块配制,这个不用自己改,
在你修改了/etc/modules后,可用 update-modules 来重建 /etc/modules.conf 和 /etc/chandev.conf。

几个好用的命令:
modprobe - high level handling of loadable modules
用来加载模块
modprobe -c 显示当前正被使用的模块配制
modprobe -l 显示能匹配的模块列表,你可以找你需要的模块
modprobe modname 加载模块
modprobe -r modname 移除模块

insmod - install loadable kernel module
给正在运行的内核安装一个可加载模块。
rmmod
从正在运行的内核卸载模块。
lsmod
列出已加载的模块。
modinfo modname
显示每个模块的信息,很有趣。

apt-setup
配制apt源,就是安装时的你看到的那个,帮助你写/etc/apt/source.list

apt-get install aptconf
dpkg-reconfigure aptconf
配制apt,如禁用哪个apt源,自定义添加apt源(就象是个储藏室)等,找的是你的source.list,好玩。

apt-get install timezoneconf
dpkg-reconfigure timezoneconf
配制时区,日期,和时间。(新版本 Debian 应该用 dpkg-reconfigure tzdata

apt-get install localeconf
dpkg-reconfigure localeconf
配制locale,不用我说了吧。

locale
查看本地的locale

dpkg-reconfigure locales
功能同localeconf

cpanel,别人提醒的,呵呵,凑个数
中文图形配制工具。

呵呵,我怎么知道的呢?
呵呵,apt-cache search debconf
记得多看看男人(man)呀,不要花太多的心思在mm上呀 :)

1.15  版本降级的方法

在 dist-upgrade 和 upgrade 的时候,有时候会因为软件包下载不全等问题,使得软件包依赖无法满足,导致系统升级没完全完成,apt-get 天天提示有未满足的依赖的尴尬状况。这时可参考“Debian 版本升级/降级”一文把没完全安装完的软件包降级来解决。

主要的要点是,先搞清楚低版本软件包的版本号(通过 apt-get 工作记录,或者去 Debian 官网查发行版配套的软件包版本号都行),然后用如下命令实现软件包降级:

 aptitude install <PACKAGE>=<VERSION>

2.  系统调优

2.1  Debian DNS解析缓慢的问题(禁用ipv6的方法)

在LinuxSir上看到有同样使用Debian的网友反映在使用2.6内核的系统中,dns解析速度十分缓慢的问题。我的ibook在单位用的时候没有碰到这个问题,但是在家里用的时候同样有此问题。网友建议google:debian slow dns,还真让我google出来了答案。

基本上这个问题源于firefox在启用了ipv6支持时会首先试图用ipv6的方式进行dns查询,这样在我家不支持ipv6的局域网上,就会造成长时间的浏览器软挂起现象。可以通过firefox的专家属性设定来禁止其用ipv6方式进行dns查询。方法如下:

  • 在firefox的地址栏输入about:config,寻找network.dns.disableIPv6项,设置为true。问题就解决了。

对firefox之外的应用程序,则基本上得采取禁用2.6内核的ipv6模块的方法,其中比较好的方案是这样的::

  1. 编辑/etc/modprobe.d/aliases
  2. 把alias net-pf-10 ipv6
  3. 换成alias net-pf-10 off
  4. 然后update-modules或者重启

在 OpenVZ 下,没法按照标准的方法控制内核模块载入,那么可以参考文章 How to disable IPV6 in debian,也即执行以下三组命令之后重启系统,即可实现对系统最常见的服务禁用 ipv6:

echo net.ipv6.conf.all.disable_ipv6=1 > /etc/sysctl.d/disableipv6.conf
sed '/::/s/^/#/' /etc/hosts >/etc/dipv6-tmp;cp -a /etc/hosts /etc/hosts-backup && mv /etc/dipv6-tmp /etc/hosts
sed '/ipv6=yes/s/yes/no/' /etc/avahi/avahi-daemon.conf >/etc/avahi/dipv6-tmp;cp -a /etc/avahi/avahi-daemon.conf /etc/avahi/avahi-daemon.conf-backup && mv /etc/avahi/dipv6-tmp /etc/avahi/avahi-daemon.conf

2.2  打开DMA通道

其实现在2.6内核基本上都默认打开DMA支持,如果没有打开或者使用的是2.4的内核,那么系统启动的时候会有提示让处理DMA问题。否则不用管这个条目。

首先安装hdparm工具包:apt-get install hdparm

试验打开DMA通道:hdparm -X66 -d1 -u1 -m16 -c3 /dev/hda

用命令:hdparm -t /dev/hda来测试优化效果。

如果没有问题,那么将打开DMA通道的命令写入系统启动脚本。

在/etc/init.d/加入脚本dma-start.sh,内容如下:

#!/bin/sh
#This script start DMA support.
hdparm -X66 -d1 -u1 -m16 -c3 /dev/hda

之后给这个脚本提供可执行权限:chmod +r+x dma-start.sh

让系统启动时自动运行这个脚本: update-rc.d dma-start.sh start 90 1 2 3 4 5 . stop 52 0 6 . 一定要注意哪个点号,不能少啊。

这样系统启动后应该就已经自动打开DMA通道模式了,在IBM TP600E上测试速度翻了3倍。

2.3  自动更新程序启动菜单

有的程序安装后不会自动生成程序启动菜单的对应项,安装menu这个包也许能好点。

Gnome的“应用程序”菜单中的对应项都保存在/usr/share/applications 目录下。

2.4  安装苹果字体

传说Ubuntu里只要将苹果丽黑Pro字体放到字体目录(/usr/share/fonts)中,并像下面那样更新字体缓存,然后重启系统就可以使用了。Debian下应该也可以这么干。

 cd /usr/share/fonts/apple/
sudo mkfontscale
sudo mkfontdir
sudo fc-cache -fv

2.5  安装微软字体

在sources.list文件里面加入“deb http://debian.okey.net/debian-fonts/ ./”,然后apt-get update,就可以在apt-cache里找到microsoft有关的字体包了。

2.6  Gnome下自定义启动程序快捷键

(后来发现,其实根本不用这么麻烦地一个一个定义快捷键,直接安装“Gnome Do”这个软件包,并将“gnome-do --quiet”加入启动Session使之每次进入X自动运行之后,按Win+空格,叫出Gnome Do,然后大致输入启动程序的名字就可以了。当然Gnome Do还有无数强大的功能,不仅仅是用来启动程序而已。)

如果不只在Gnome下应用,可以直接使用xbindkeys这个软件包,否则就得使用Gnome的配置管理工具:

在 Metacity 中定义快捷键 (摘自:http://www.gnome-cn.org/documents/howto/helpcenterhowto.2005-09-11.7029796570/

为 Metacity 添加任何想要运行的命令的快捷键都是完全有可能的。假设我们想让 Control-e 启动 gedit 。

  1. 运行 gconf-editor
  2. 去到 “Apps->Metacity->keybinding Commands”
    • 这里有一包含二十个命令 slot 。我们想让其中之一(比如是 command_3)来运行 gedit:双击(或右击在弹出菜单中选择 “Edit key”),这样就可以编辑该键了。在“key value”,输入“gedit”。按“确定”。
    • 注意到 gconf-editor 的屏幕下方有一些解释性文本。
    • 我们有了自己的命令了,但现在还要告知 Metacity 按下什么键来运行这个命令。来到“Global keybingdings” (在列表的左方)。如您所见,有许多绑定键。选择“run_command_3”-大约在这个列表的中间。
    • 选择该行并双击或选择“Edit key”。改动键值为 \<Control\>e 按“确定”。
    • 完成!试试按下 ctrl-e ,应该会出现 gedit 窗口。
  3. 当您在编辑之时,Gconf 会立刻保存设置,并马上通知应用程序(这里是Metacity),因此,无须保存或重启任何东西。

This How-to applies to: GNOME 2.6, GNOME 2.8, GNOME 2.10, GNOME 2.12

3.  软件设置

3.1  命令行下编辑器

又小又强的编辑器:nano,语法加亮设置

3.2  Debian : disable X的方法

从Debian 5.0 Lenny开始,gdm等成为rcconf所管理的一个服务,因此只要在rcconf里面去掉gdm的自动启动就能避免在系统启动时自动进入X了。下面所记录的方法则适用于旧版本的Debian。

引自:http://blog.yam.com/checko/archives/329747.html

玩 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重新設定 display manager。其它方法都是通用的中止daemons的方法。

你仍可在任何控制台 (console) shell中輸入startx啟動 X。

3.3  xwmconfig

xwmconfig

3.4  适合配置低的机器跑的窗口管理器

有人推荐使用默认设置的IceWM:

apt-get install menu
apt-get install icewm
cd /etc/X11/icewm
rm menu
ln -s programs menu

另外还有几乎免配置的FVWM实现FVWM-Crystal,现在也成了Debian官方发行版的组成部分;也有些人认为xfce是又快又好看的窗口管理器(参考Design your own desktop with Xfce 4.4 – part 2 « Xubuntu Blog可以把xfce弄得像Mac OSX的样子)。

3.5  Debian下配置tor代理的方法(转载)

软件: tor + privoxy

tor这个包应该已经进入Debian官方,如果一时没有找到,可以到http://mirror.noreply.org/pub/tor 下载deb包。

$ apt-get install tor privoxy

然后就是简单的设置:

forward-socks4a / localhost:9050 . (注意后面的点要加上)

将上面一行加到/etc/privoxy/config 里,任何地方都可以只要顶头没有加"#"

完成新的设置后重起

$ /etc/init.d/privoxy restart

设置你的浏览器proxy的http 和https:

  • ip 127.0.0.1
  • port: 8118

这样就完成了,可以上wikipedia了。注意:这个只对http和https有用,对ftp要不进行设置。

用mozilla-firefox直连上网,用mozilla代理上网,这样用起来上网就好多了。

3.6  安装Flash Player

参考:http://tetralet.luna.com.tw/index.php?op=ViewArticle&articleId=50&blogId=1

3.7  让lftp支持编码转换

#cat .lftp/rc
debug 3
set ftp:charset GBK
set file:charset UTF-8
alias nosetcharset " set ftp:charset ; set file:charset "

3.8  聊天工具

Gaim这个程序默认支持MSN以及Icq、Yahoo Messenger等等,为了让她支持QQ,可以使用OpenQ,当然还有LumaQQ和EVA也可以用。

3.9  Freemind的安装方法

Debian官方的包往往不是最新版,可以添加如下安装源:

deb http://eric.lavar.de/comp/linux/debian/ experimental/
deb-src http://eric.lavar.de/comp/linux/debian/ experimental/

3.10  jEdit的安装方法

在/etc/apt/sources.list文件添加如下两行,再利用apt-get或者其他软件包管理工具安装jedit包即可:

deb http://dl.sourceforge.net/sourceforge/jedit ./
deb-src http://dl.sourceforge.net/sourceforge/jedit ./

3.11  Linux下玩Windows游戏的方法

Cedega 5.2在Debian 4.0下的一个怪问题:

在Ubuntu 6.06下安装好了Cedega 5.2(其实就是以前的WineX),也加载了它的引擎,在启动游戏时出现了一个错误:

Traceback (most recent call last):
  File "/usr/lib/transgaming_cedega/Point2Play_gui.py", line 2979, in ?
    gddb_file = detected[0]
TypeError: unsubscriptable object

布羅格的烘培機上面说加上"--gddb"参数(参数紧跟着cedega指令,后面再写游戏启动文件的名字)就可以了。据说是5.2的一个BUG,升级到5.2.1就好了,不知是不是真的(肯定不是这样,因为我用的5.2.6)。

另外,Linux下运行Office除了考虑用Wine之外,还可以考虑CrossOver Office这个商业解决方案,会方便很多。

如果只是想要在Linux下面比较方便地运行IE,那么也许连CrossOver Office也用不着,直接用开源的解决方案IEs4Linux就可以了。

3.12  Linux下使用3322.org动态域名的方法

除了在http://www.3322.org 官方下载专用客户端之外,官方还提供了完全使用HTTP请求的方式来修改与动态域名绑定的IP,官方的说明使用了lynx,全部指令如下:

  lynx -mime_header -auth=UserName:PassWord "http://www.3322.org/dyndns/update?system=dyndns&hostname=MyHost.3322.org"

3322.org的系统稍微有点奇怪的一点是注册的时候用户名明明是大写的时候,有时在客户端或者lynx用的时候,必须大写改小写才能登录成功。如果出现用户名密码登录不了的时候,要考虑更换大小写来试试。

3.13  VMware启动报错问题

Debian Testing下安装成功、编译模块成功,但是键入vmware脚本启动报错,如下:

 /usr/lib/vmware/bin/vmware: /usr/lib/vmware/lib/libpng12.so.0/libpng12.so.0: no version information available (required by /usr/lib/libcairo.so.2)

网上介绍有手工调整链接库等方法,其实问题来自于libdbus包的冲突,在我的系统中能看到同时安装了libdbus-1-2和libdbus-1-3两个包,包把1-2那个卸载了vmware就一切正常了:)

3.14  Debian安装Java的方法

如果是在x86体系下,可以直接去http://www.blackdown.org 找deb包安装,如果嫌blackdown的包不够新或者找不到合适的版本,则参考下面链接:

另外也有IBM的Java实现以及诸多开源的虚拟机环境,其中一个是gij,可能被系统默认安装。这样在系统中同时有sun的虚拟机和gij等虚拟机的时候,就要使用如下命令来选择默认的Java运行环境:

update-alternatives --config java

到2006年11月的时候,Testing发行版也已经包括了1.5.0的Sun的JDK的包,建议至少安装其中的sun-java5-jdk sun-java5-plugin sun-java5-fonts。

为Java虚拟机准备中文字体

刚装好的Java虚拟机里面中文常会显示为方框,因为中文字体没有给它设置好,Java 1.5可以这么搞:

在linuxsir发现一个非常简单的办法:-)

  1. 建立目录:$JAVA_HOME/jre/lib/fonts/fallback;
  2. cp中文字体到刚才建立的目录中,或者在这个目录中建立到中文字体的连接;
  3. 大功告成。
  4. 如仍有问题,export JAVA_FONTS=$JAVA_HOME/jre/lib/fonts即可。

至于Java1.4,可以像下面这样搞定:

  1. 安装上面提到的安装源提供的microsoft字体
  2. 把simsun.ttf 复制到JAVA_HOME/jre/lib/fonts下,修改其中的fonts.dir,加入
simsun.ttf -misc-simsun-medium-r-normal-*-*-110-*-*-c-*-iso8859-1
simsun.ttf -misc-simsun-medium-r-normal--0-0-0-0-c-0-gb2312.1980-0
  1. 打开JAVA_HOME/jre/lib/font.properties.zh (Java似乎是根据当前的locale决定参考哪个配置文件,

我的locale是zh.GBK,所以我改的就是font.properties.zh)改动是这样,动作比较大,请看我的文件:

# @(#)font.properties.zh.Turbo.linux 1.4 02/06/10
#
# Copyright 2002 Sun Microsystems, Inc. All rights reserved.
#

# Component Font Mappings
#
#serif.0=-b&h-lucidabright-medium-r-normal--*-%d-*-*-p-*-iso8859-1
#serif.1=-tlc-song-medium-r-normal--*-%d-*-*-c-*-gbk-0
serif.0=-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-iso8859-1
serif.1=-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-gb2312.1980-0
serif.italic.0=-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-iso8859-1
serif.italic.1=-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-gb2312.1980-0

serif.bold.0=-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-iso8859-1
serif.bold.1=-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-gb2312.1980-0

serif.bolditalic.0=-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-iso8859-1
serif.bolditalic.1=-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-gb2312.1980-0

sansserif.0=-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-iso8859-1
sansserif.1=-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-gb2312.1980-0

sansserif.italic.0=-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-iso8859-1
sansserif.italic.1=-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-gb2312.1980-0

sansserif.bold.0=-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-iso8859-1
sansserif.bold.1=-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-gb2312.1980-0

sansserif.bolditalic.0=-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-iso8859-1
sansserif.bolditalic.1=-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-gb2312.1980-0

monospaced.0=-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-iso8859-1
monospaced.1=-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-gb2312.1980-0

monospaced.italic.0=-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-iso8859-1
monospaced.italic.1=-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-gb2312.1980-0

monospaced.bold.0=-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-iso8859-1
monospaced.bold.1=-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-gb2312.1980-0

monospaced.bolditalic.0=-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-iso8859-1
monospaced.bolditalic.1=-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-gb2312.1980-0

dialog.0=-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-iso8859-1
dialog.1=-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-gb2312.1980-0

dialog.italic.0=-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-iso8859-1
dialog.italic.1=-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-gb2312.1980-0

dialog.bold.0=-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-iso8859-1
dialog.bold.1=-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-gb2312.1980-0

dialog.bolditalic.0=-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-iso8859-1
dialog.bolditalic.1=-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-gb2312.1980-0

dialoginput.0=-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-iso8859-1
dialoginput.1=-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-gb2312.1980-0

dialoginput.italic.0=-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-iso8859-1
dialoginput.italic.1=-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-gb2312.1980-0

dialoginput.bold.0=-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-iso8859-1
dialoginput.bold.1=-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-gb2312.1980-0

dialoginput.bolditalic.0=-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-iso8859-1
dialoginput.bolditalic.1=-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-gb2312.1980-0

# Missing Glyph Character
#
default.char=274f

# Component Font Character Encodings
#
fontcharset.serif.0=sun.io.CharToByteISO8859_1
fontcharset.serif.1=sun.awt.motif.CharToByteX11GBK

fontcharset.sansserif.0=sun.io.CharToByteISO8859_1
fontcharset.sansserif.1=sun.awt.motif.CharToByteX11GBK

fontcharset.monospaced.0=sun.io.CharToByteISO8859_1
fontcharset.monospaced.1=sun.awt.motif.CharToByteX11GBK

fontcharset.dialog.0=sun.io.CharToByteISO8859_1
fontcharset.dialog.1=sun.awt.motif.CharToByteX11GBK

fontcharset.dialoginput.0=sun.io.CharToByteISO8859_1
fontcharset.dialoginput.1=sun.awt.motif.CharToByteX11GBK

# Exclusion Ranges
#

# XFontSet Information
#
fontset.serif.plain=\
-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-iso8859-1,\
-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-gb2312.1980-0

fontset.serif.italic=\
-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-iso8859-1,\
-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-gb2312.1980-0

fontset.serif.bold=\
-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-iso8859-1,\
-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-gb2312.1980-0

fontset.serif.bolditalic=\
-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-iso8859-1,\
-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-gb2312.1980-0

fontset.sansserif.plain=\
-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-iso8859-1,\
-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-gb2312.1980-0

fontset.sansserif.italic=\
-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-iso8859-1,\
-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-gb2312.1980-0

fontset.sansserif.bold=\
-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-iso8859-1,\
-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-gb2312.1980-0

fontset.sansserif.bolditalic=\
-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-iso8859-1,\
-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-gb2312.1980-0

fontset.monospaced.plain=\
-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-iso8859-1,\
-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-gb2312.1980-0

fontset.monospaced.italic=\
-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-iso8859-1,\
-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-gb2312.1980-0

fontset.monospaced.bold=\
-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-iso8859-1,1\
-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-gb2312.1980-0

fontset.monospaced.bolditalic=\
-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-iso8859-1,\
-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-gb2312.1980-0

fontset.dialog.italic=\
-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-iso8859-1,\
-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-gb2312.1980-0

fontset.dialog.bold=\
-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-iso8859-1,\
-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-gb2312.1980-0

fontset.dialog.bolditalic=\
-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-iso8859-1,\
-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-gb2312.1980-0

fontset.dialog.plain=\
-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-iso8859-1,\
-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-gb2312.1980-0

fontset.dialoginput.italic=\
-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-iso8859-1,\
-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-gb2312.1980-0

fontset.dialoginput.bold=\
-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-iso8859-1,\
-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-gb2312.1980-0

fontset.dialoginput.bolditalic=\
-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-iso8859-1,\
-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-gb2312.1980-0

fontset.dialoginput.plain=\
-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-iso8859-1,\
-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-gb2312.1980-0

fontset.default=\
-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-iso8859-1,\
-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-gb2312.1980-0

appendedfontpath=/usr/lib/X11/fonts/TrueType

其中,appendedfontpath=/usr/lib/X11/fonts/TrueType是我在美化时设置字体的目录,它是加入XF86Config-4的那个路径,但是j2sdk默认不是这样,它是我改过的路径。

如果一切顺利,此时Java就会用simsun字体来显示中文了。

4.  使用技巧

4.1  文件名编码转换

(改写自:http://www.linuxeden.com/doc/print.php/21809

convmv包提供了convmv指令可以用来完成文件名的编码转换。常用参数有:

  • -f ENCODING 原文件的文件名编码
  • -t ENCODING 目标文件的文件名编码
  • -r 递归地处理子目录
  • --list 列出已知的编码。要支持更多的中文或日文编码,安装 Perl-HanExtra
  • --nosmart 如果文件名已经是 utf-8 那么 convmv 会自动探测出来,不做处理,但是如果不想让 convmv 自动探测,就使用这个选项
  • --help 输出帮助信息

(与gbk对应的编码名称是cp936,与gb2312对应的是euc-cn。)

设想这样的场景

  1. 你以前用过 redhat 9 甚至更老的系统,你的系统中默认编码是 gb2312,你的文件名有不少是中文的。然后你跟随 fedora 的脚步,升级到了最新的 fedora core,默认编码是 utf8。你发现过去留下来那些文件的文件名都变成了乱码,或者?#38750;法的 utf-8 序列?
  2. 你全新安装了最新的 fedora core 3 系统,然后按照网上各种各样的说法,在安装 fcitx 的时候把默认编码从 utf8 改成了 gb2312 或者 gbk 甚至是 gb18030,这种改动真的是非常简单,并且在 mount 的时候要多一句 mount -o iocharset=cp936 (命令行真是长得太过分了)。然后突然有一天,你不得不换用其他语言登录系统。和上面一样,所有中文的文件名都变成了?#38750;法的 utf-8 序列?
  3. 你用着 utf-8 默认编码。然后,你开了一个 ftp,让大家上传些东西;或者你用着古老的 samba 2.x 版本。你会发现别人上传的文件名是中文的文件都变成了问号。还有,如果不是用版上那位可敬的同志修改的 gftp 下载文件,那么下载到的东西凡是中文文件名就都不可识别了,?#38750;法的 utf-8 序列?

convmv 可以处理单个文件,某个目录树以及其中的文件,甚至整个文件系统,将其中的文件名和目录名转为另一种编码。它只对文件名进行操作,而不修改文件内容。它会正确处理链接,将链接目标指向转换后的文件。如果某个目录中只有一部分文件名是 utf-8,而另外一部分是传统的编码, convmv 也可以处理这种情况棗它会自动判断编码类型,只转换需要的那一些。

如果某些文件名已经是 utf-8 编码了,你却禁止 convmv 自动判断编码类型,导致这些文件名也被转换了一次,那么可以用 convmv 来将它们恢复原状,只要将 -f 和 -t 反过来用就可以了。

--qfrom 选项十分有用,它的意思是处理过程中不要输出原文件名。因为这些文件名在你当前的终端中是乱码,它会把终端搞得一团糟。

类似地,iconv指令用于转换文件内容的编码。

4.2  分区对拷

tar -cvBpf

可以实现分区对拷,和分区备份。(系统分区需要在单用户模式,root分区需要使用其它的内核启动)

比如:要把hda3 的内容全盘复制到hda4

  1. 把hda3 挂到/source
  2. 把hda4 挂到/dest
  3. 然后运行
cd /source
tar -cvBpf - * | (cd /dest ; tar -xvBpf -)

就完成了分区对考

接着就只要修改/etc/fstab就可以了

4.3  从光盘制作光盘镜像文件

将光盘放入光驱,执行下面的命令:

#cp /dev/cdrom /home/sunky/mydisk.iso
#dd if=/dev/cdrom of=/home/sunky/mydisk.iso

4.4  需要的文件在哪个包里可以找到呢?

我的系统缺少某个文件,但是要安装哪个 package 才能得到它呢?上网方便的可以直接去 http://www.debian.org/distrib/packages#search_contents 查询。如果需要在自己机器上查询,可以安装 apt-file 这个 package,具体用法:

# /usr/bin/apt-file update 更新数据库
$ /usr/bin/apt-file search <filename> 查找文件
$ /usr/bin/apt-file list <package name> 列出 package 的内容,类似于 dpkg-L,不同的是apt-file的对象可以是系统。

4.5  远程使用xwindows的简单方法

只要服务器端启用了Forward X11,那么“ssh -X desthost”,然后再启动自己所需要的图形界面应用程序应该就可以了。有时候可能得用“-Y”参数来代替“-X”。

4.6  查看进程之间的继承关系

用pstree指令。

4.7  Bash中修正错误指令

比如输入“mkdri”,然后按ctrl+t,bash会帮助纠正到最接近的命令“mkdir”。

4.8  如何临时增加交换空间?

假如产生一个64MB的空文件,以便作为临时的交换空间:

#dd if=/dev/zero of=/swapfile bs=1024 count=65536
#mkswap /swapfile 65536
#sync
#swapon /swapfile

永久添加文件形式的交换空间的完整步骤:(磁盘可以不用重新分区,但性能稍低于独立的 swap 分区的方式。在阿里云上比较有用。)

1.进入目录
cd /var/
2.获取要增加的SWAP文件块(这里以1GB为例)
dd if=/dev/zero of=swapfile bs=1024 count=1038336
3.创建SWAP文件
/sbin/mkswap swapfile
4.激活SWAP文件
/sbin/swapon swapfile
5.查看SWAP信息是否正确
/sbin/swapon –s
6.添加到fstab文件中让系统引导时自动启动
echo "/var/swapfile swap swap defaults 0 0" >>/etc/fstab

4.9  察看某个命令使用了什么库文件

 #ldd /sbin/useradd

4.10  查看当前正在运行的内核版本

 uname -r
或者
 cat /proc/version

4.11  查看当前正在运行的Debian版本

 cat /etc/debian_version

更通用的办法是(支持各种 Linux 发行版):

 lsb_release -a

4.12  发现文件系统中的重复文件

Debian中有一个成为perforate的包,里面提供一个称为finddup的脚本指令搜索重复文件。

4.13  使openbsd-inetd服务自启动

 update-rc.d openbsd-inetd defaults

4.14  批量杀死进程

 ps x|grep gas|grep -v grep |awk '{print $1}'|xargs kill -9

这个指令表示杀掉全部带有 gas 关键字的进程。

GlossyBlue theme adapted by David Gilbert
Powered by PmWiki