Archive for the ‘linux笔记’ Category
适合旧电脑的Mini Linux选择
Written by admin on 2009/05/22 – 15:24 -最近在研究适合低配置电脑的Mini Linux,我手头有一台P2 233+128M+8.4G配置的“破”电脑,想寻找适合其运行的Linux系统,需要Xwin、浏览网页、中文支持、文字处理等最基本操作。
众所周知,现在主流的Linux发行版比如Ubuntu、Federa等对于旧电脑来说也是非常庞大的系统,低配硬件不足以支持其运行Xwin等,所以我把目光转向了Mini Linux,选择对象有Puppy、Deli、slitaz。
经过初步考察发现三者均能很好的适应低配置硬件,但是Deli已经停止开发一段时间了,slitaz对于中文支持不是很好,所以仅剩下Puppy了。
我在以后会发布一些关于使用Puppy的经验与大家分享。
使用更新命令yum时出现故障的解决方法
Written by admin on 2009/05/15 – 08:00 -近日在运行系统更新命令yum update时候出现了如下错误提示:
Component: pirut
Summary: TBe8ae967a sqlitesack.py:94:_read_db_obj:TypeError: unsubscriptable object
Traceback (most recent call last):
File “/usr/sbin/pup”, line 407, in _apply
output = self.applyChanges(self.mainwin)
File “/usr/lib/python2.4/site-packages/pirut/__init__.py”, line 813, in applyChanges
self.checkDeps(mainwin)
File “/usr/lib/python2.4/site-packages/pirut/__init__.py”, line 550, in checkDeps
(result, msgs) = self.buildTransaction()
File “/usr/lib/python2.4/site-packages/yum/__init__.py”, line 647, in buildTransaction
(rescode, restring) = self.resolveDeps()
File “/usr/lib/python2.4/site-packages/yum/depsolve.py”, line 704, in resolveDeps
for po, dep in self._checkFileRequires():
File “/usr/lib/python2.4/site-packages/yum/depsolve.py”, line 939, in _checkFileRequires
if not self.tsInfo.getOldProvides(filename) and not self.tsInfo.getNewProvides(filename):
File “/usr/lib/python2.4/site-packages/yum/transactioninfo.py”, line 414, in getNewProvides
for pkg, hits in self.pkgSack.getProvides(name, flag, version).iteritems():
File “/usr/lib/python2.4/site-packages/yum/packageSack.py”, line 300, in getProvides
return self._computeAggregateDictResult(”getProvides”, name, flags, version)
File “/usr/lib/python2.4/site-packages/yum/packageSack.py”, line 470, in _computeAggregateDictResult
sackResult = apply(method, args)
File “/usr/lib/python2.4/site-packages/yum/sqlitesack.py”, line 861, in getProvides
return self._search(”provides”, name, flags, version)
File “/usr/lib/python2.4/site-packages/yum/sqlitesack.py”, line 43, in newFunc
return func(*args, **kwargs)
File “/usr/lib/python2.4/site-packages/yum/sqlitesack.py”, line 837, in _search
for pkg in self.searchFiles(name, strict=True):
File “/usr/lib/python2.4/site-packages/yum/sqlitesack.py”, line 43, in newFunc
return func(*args, **kwargs)
File “/usr/lib/python2.4/site-packages/yum/sqlitesack.py”, line 586, in searchFiles
self._sql_pkgKey2po(rep, cur, pkgs)
File “/usr/lib/python2.4/site-packages/yum/sqlitesack.py”, line 470, in _sql_pkgKey2po
pkg = self._packageByKey(repo, ob['pkgKey'])
File “/usr/lib/python2.4/site-packages/yum/sqlitesack.py”, line 413, in _packageByKey
po = self.pc(repo, cur.fetchone())
File “/usr/lib/python2.4/site-packages/yum/sqlitesack.py”, line 68, in __init__
self._read_db_obj(db_obj)
File “/usr/lib/python2.4/site-packages/yum/sqlitesack.py”, line 94, in _read_db_obj
setattr(self, item, _share_data(db_obj[item]))
TypeError: unsubscriptable object
Local variables in innermost frame:
item: name
db_obj: None
这个问题是由于yum的原数据损坏导致的,需要先删除原数据和数据库缓存,然后重建,问题即可解决
解决方法,依次运行以下命令:
yum clean metadata
yum clean dbcache
yum makecache
Centos下telnet服务的安装
Written by admin on 2009/04/03 – 08:00 -本人linux环境:CentOS 5.3
在终端中使用 #rpm -q telnet 和 #rpm -q telnet-server 命令查询是否安装了telnet的client和server端。
一般client默认已经安装了,但是server端需要安装,安装命令:#yum install telnet-server
安装完毕后,需要开启服务:#gedit /etc/xinetd.d/telnet
将其中的disable = yes 的 yes 改成 no
开机启动设置: #gedit /etc/rc.d/rc.local
添加: /sbin/service xinetd start
接下来激活telnet并测试是否安装成功,运行命令: #/sbin/service xinetd restart
测试服务,找一台其他机器,输入命令:telnet IP
如果配置正确,系统提示输入远程机器的用户名和密码 (默认情况root用户是不能通过telnet直接登录的)
Login:
Password:
为了安全起见,我们需要改变端口,限制登录ip。
改变端口:
命令:#gedit /etc/services
找到如下内容:
telnet 23/tcp
telnet 23/udp
将端口改成你希望的,比如:
telnet 1000/tcp
telnet 1000/udp
限制登录ip:
命令:#gedit /etc/xinetd.d/telnet
修改成如下格式:
service telnet
{
disable = no #激活 telnet 服务,no
bind = 192.168.1.1 #本机ip
only_from = 192.168.0.0/16 #只允许 192.168.0.0 ~ 192.168.255.255 这个网段进入
only_from = .edu.cn #只有教育网才能进入!
no_access = 210.45.160.{115,116} #这两个ip不可登陆
access_times = 8:00-12:00 20:00-23:59 # 每天只有这两个时间段开放服务
……
}
设置完毕,重新启动telnet服务,命令:#/sbin/service xinetd restart
端口修改的话,命令格式:telnet ip port (注意ip与port之间没有冒号,例如:telnet 192.168.1.1 1000)
linux简单设置samba,提供windows共享
Written by admin on 2008/09/02 – 08:00 -首先,启动samba服务,并且确保linux启动时自动启动。
我使用centos5.2,默认安装了samba,安装目录/etc/samba
其中有2个配置文件:smb.conf和smbusers,主要修改也在这两个文件中。
另外还有记录密码的passdb.tdb,这个文件不需要手动设置。
创建samba用户:
由于我们设置的是以“用户”为验证模式,所以该帐户必须是linux系统帐户中存在的。
先创建一个新用户(linux用户),比如linuxsmb,账户目录/home/linuxsmb。
帐户可操作自己的用户目录,所以共享也设置在这个目录中,否则如果设置在其他用户目录/home/user1或者其他目录时,会有windows共享时无权操作的问题。
随后建立samba用户:smbpasswd -a linuxsmb
设置共享密码后即可。
随后打开smbusers文件,会看到其中增加了一行 linuxsmb = linuxsmb
然后修改smb.conf文件:
在[global]中设置工作组和服务器信息:
workgroup = mygroup
server string = Samba Server Version %v
共享目录设置,一般在文件最后部分:
[smbtest] //共享名称,可以是任意
path = /home/linuxsmb //共享目录,应该是linuxsmb用户有权操作的目录
writeable = yes //写权限
browseable = yes //可见
guest account = linuxsmb //用户访问帐户
重新启动samba,使设置生效。
然后在windows中访问共享,比如//192.168.1.100(samba服务器ip),会要求输入samba帐户的用户名和密码,此处的我们填写linuxsmb帐户用户名和密码。如果能够访问,那么就设置成功了。
——————————
smbpasswd关于samba帐户的操作:
smbpasswd -a USERNAME 增加用户
smbpasswd -x USERNAME 删除用户
smbpasswd -d username 禁用用户
CentOS下删除无依赖关系软件包方法
Written by admin on 2008/08/02 – 08:00 -由于经常安装和卸载软件后,会造成一些已经无依赖关系的软件包。
安装yum-utils:
#yum install yum-utils
然后执行:#package-cleanup –leaves
会出现无效软件包的列表,删除列表中的软件包即可。删除后还会生成新的无依赖关系软件包,所以之后再执行一次,直到没有列表出现!
利用Openvpn快速建立虚拟局域网
Written by admin on 2008/07/12 – 08:00 -服务器端CentOS5.1,客户端windowsXP Sp2,两台电脑分别安放在不同的局域网内。
需要点对点组建成VPN,最简单方法如下:
配置服务器端CenOS:
在安装openvpn之前,先要安装openssl,用户数据加密;安装lzo,用于数据压缩。
下载lzo:
http://www.oberhumer.com/opensource/lzo/download/
(我下载的是最新的lzo-2.03.tar.gz包)
安装lzo:
#tar zxvf lzo-2.03.tar.gz
#cd lzo-2.03
#./configure
#make
#make install
安装openssl,
我通过CentOS自带的添加删除程序,安装了openssl的development包,文件名:openssl-devel-0.9.8b-10.el5.i386
然后下载openvpn,我安装的是最新版的2.1_rc7,文件名:openvpn-2.1_rc7.tar.gz
下载地址:http://openvpn.net/index.php/downloads.html
安装openvpn:
#tar zxvf openvpn-2.1_rc7.tar.gz
#cd openvpn-2.1_rc7.tar.gz
#./configure –with-lzo-headers=/usr/local/include –with-lzo-lib=/usr/local/lib
#make
#make install
安装完成后,创建openvpn存放启动和key文件的目录:
#mkdir /etc/openvpn
#cd /etc/openvpn
#/usr/local/sbin/openvpn –genkey –secret static.key
(有可能生成的static.key文件不在/etc/openvpn下,如果不在就cp过去。这个文件需要同时存在于服务器和客户端上,内容必须一样。)
然后创建server配置文件:
#gedit /etc/openvpn/server.conf
内容:
dev tun (路由模式)
ifconfig 192.168.xx.1 192.168.xx.2 (前个ip表示本服务器的ip,后一个ip我也没搞懂什么意思,待研究,现在只知道是客户端的ip。xx是网段,1-254之间的数字,但与你现在的局域网网段不要重复。)
secret /etc/openvpn/static.key (刚才生成的key文件)
然后保存。
随后启动vpn服务器,运行:
#/usr/local/sbin/openvpn –config /etc/openvpn/server.conf
如果不报错,可以ping一下自己的ip,也就是192.168.xx.1,如果ping通则说明服务器端启动正常。
然后,如果与外网间有路由器,需要映射UDP 1194端口。
如果希望开机启动openvpn服务器端,则在/etc/rc.d/rc.local文件中加入如下行:
/usr/local/sbin/openvpn –daemon –config /etc/openvpn/server.conf
————————-
配置windows客户端:
下载windows版本openvpn:
http://openvpn.net/index.php/downloads.html
文件名:openvpn-2.1_rc7-install.exe
安装时一直点下一步即可,当然你也可自定义一些选项。
安装完成,将服务器端生成的static.key文件复制到windows客户端的openvpn/config目录,然后改名称key.txt。
(打开key.txt时发现linux下生成的key文件在windows的txt下有若干“方块”,表示换行。我将其全部删除,并手动换行。)
然后在同目录下创建client.ovpn文件,文件内容如下:
remote www.domain.com(或者服务器外网ip)
dev tun
ifconfig 192.168.xx.2 192.168.xx.1(正好与服务器端相反)
secret key.txt (key文件)
随后在“开始”“程序”“openvpn”菜单中运行“OpenVpn GUI”,在右下角出现了小图标,鼠标右键点击“Connect”,连接成功的话,可以ping一下服务器的vpn ip。如果ping通则表示安装成功了。
linux下的删除命令rm
Written by admin on 2008/07/01 – 08:00 -rm -R *
删除目录及目录下所有文件,但会有确认是否删除的提示,对于很多目录和文件时候会很不方便。
所以rm -Rf * 就可去除提示,直接删除。但必须注意操作安全。
CentOS安装LumaQQ
Written by admin on 2008/06/23 – 08:00 -下载lumaQQ:http://lumaqq.linuxsir.org/download/2006/lumaqq_2006M2-linux_gtk2_x86_no_jre.tar.gz
下载jre,不推荐在sun的网站下载,速度较慢!文件名:jre-6u6-linux-i586-rpm.bin,可搜索下载。
接下来在终端中用su或者root身份运行下载的jre:
sh jre-6u6-linux-i586-rpm.bin
安装后gedit /etc/environment
添加如下内容:
CLASSPATH=/usr/java/jre1.6.0_06/lib
JAVA_HOME=/usr/java/jre1.6.0_06
然后解压缩LumaQQ到/usr/local目录下,tar zxvf lumaqq_2006M2-linux_gtk2_x86_no_jre.tar.gz -C /usr/local
创建快捷方式
sudo gedit /usr/share/applications/LumaQQ.desktop
在新增的文件内加入下面这几行
[Desktop Entry]
Name=LumaQQ
Comment=QQ Client
Exec=/usr/local/LumaQQ/lumaqq
Icon=/usr/local/LumaQQ/QQ.png
Terminal=false
Type=Application
Categories=Application;Network;
关于linux下的复制命令cp
Written by admin on 2008/05/26 – 08:00 -功能说明:复制文件或目录。
语 法:cp [-abdfilpPrRsuvx][-S <备份字尾字符串>][-V <备份方式>][--help][--spares=<使用时机>][--version][源文件或目录][目标文件或目录] [目的目录]
补充说明:cp指令用在复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到该目录中。若同时指定多个文件或目录,而最后的目的地并非是一个已存在的目录,则会出现错误信息。
参 数:
-a或–archive 此参数的效果和同时指定”-dpR”参数相同。
-b或–backup 删除,覆盖目标文件之前的备份,备份文件会在字尾加上一个备份字符串。
-d或–no-dereference 当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录。
-f或–force 强行复制文件或目录,不论目标文件或目录是否已存在。
-i或–interactive 覆盖既有文件之前先询问用户。
-l或–link 对源文件建立硬连接,而非复制文件。
-p或–preserve 保留源文件或目录的属性。
-P或–parents 保留源文件或目录的路径。
-r 递归处理,将指定目录下的文件与子目录一并处理。
-R或–recursive 递归处理,将指定目录下的所有文件与子目录一并处理。
-s或–symbolic-link 对源文件建立符号连接,而非复制文件。
-S<备份字尾字符串>或–suffix=<备份字尾字符串> 用”-b”参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,预设的备份字尾字符串是符号”~”。
-u或–update 使用这项参数后只会在源文件的更改时间较目标文件更新时或是 名称相互对应的目标文件并不存在,才复制文件。
-v或–verbose 显示指令执行过程。
-V<备份方式>或–version-control=<备份方式> 用”-b”参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,这字符串不仅可用”-S”参数变更,当使用”-V”参数指定不同备份方式时,也会产生不同字尾的备份字串。
-x或–one-file-system 复制的文件或目录存放的文件系统,必须与cp指令执行时所处的文件系统相同,否则不予复制。
–help 在线帮助。
–sparse=<使用时机> 设置保存稀疏文件的时机。
–version 显示版本信息。
————————-
文件覆盖时不提示overwrite的方法:
\cp -R -f source target
cp命令默认是不会提示overwrite?的,但是cp的-i选项会提示,
而一般Linux的起动文件~/.bashrc中会把cp命名成
alias cp=’cp -i’
这样在Linux下输入cp命令实际上运行的是cp -i
加上一个“\”符号就是让此次的cp命令不使用别名(cp -i)运行。
就不会有overwrite?的提示了,至于保留链接,cp命令没有这样的功能,你可以写一个简单的脚本,cp之前判断一下就可以了。
hddtemp结合sensors-applet监控硬盘温度
Written by admin on 2008/05/06 – 08:00 -许多linux发行版都集成了hddtemp,并且默认已经安装上,只要在终端执行 hddtemp /dev/hd*或者sd*,即可显示驱动器的信息和温度。
我的硬盘挂接在第一个ide口的master,所以是hda,
执行hddtemp /dev/hda后得到:
/dev/hda: WDC WD2500JB-OOREAO: 40C
但是这种在终端中执行命令查看的方式很不直观。
所以需要配合sensors-applet来实现直接在菜单条上实时显示和监控。
先前已经安装了sensors-applet所以不再阐述,安装方法:http://www.99ks.com/?p=78
如果系统没有安装hddtemp或者hddtemp版本太低,可以下载最新的版本,下载地址:http://download.savannah.gnu.org/releases/hddtemp/
并且编译安装,(安装方法不再阐述),安装后应该需要重新启动,然后执行hddtemp /dev/hd*或者sd*察看是否有返回信息,如果有则安装成功。
但是我碰到了一些问题,我即安装了hddtemp并且执行命令能得到返回信息,而且sensors-applet也已经安装成功,正确监控了CPU、主板、风扇的工作情况,但是就是没有出现硬盘监控的选项。
后来baidu和google了N多回,发现hddtemp必须工作在daemon模式下开启7634端口才能正确的被sensors-applet所显示。
检测是否在daemon模式的方法是在终端执行telnet localhost 7634,看有否硬盘信息和温度的返回。如果没有则说明未开启,执行hddtemp -d /dev/hda命令,然后再执行telnet localhost 7634看看,此时应该有返回信息了。在hddtemp的参数-d,就是开启daemon模式的。
将hddtemp -d /dev/hda 命令加入到/etc/rc.d/rc.local 文件中,保存并重新启动后,看看sensors-applet的sensors窗卡中有否hddtemp?
如图所示:
如果出现了hddtemp则说明一切ok了。
我解决这个问题的思路是:
原本两个程序都安装并且正确运行了,可hddtemp就是没有在sensors-applet中出现,随后发现需要在daemon模式下,于是执行命令在daemon下运行,可sensors-applet必须重新关闭再打开才有hddtemp选项,说明原先的配置在启动时,要么是没有加载入daemon模式,要么就是daemon模式的hddtemp在applet之后加载了。
所以必须在启动时先载入daemon模式的hddtemp再载入applet,才能解决问题。
我的方法是将命令直接写在启动文件,这个方法可能不是最好,如有更好的方法请告知。
另外还有题外话。技术方面的问题,特别是linux技术方面,在google中寻找的效率要比baidu高许多许多,但前提是英语要过得去,多半难题得在英文网站上找到答案。baidu很难检索到是因为国内linux群体过于弱小,经验积累不足,文档缺乏有关。希望国内linux群体,包括Unix系的BSD等群体能逐渐壮大。

