Linux使用技巧集
1、处理特殊的文件名
假设Linux系统中有一个文件名叫“-ee”,如果我们想对它进行操作,例如要删除它,按照一般的删除方法在命令行中输入rm -ee命令,界面会提示我们是“无效选项”(invalid
option),原来由于文件名的第一个字符为“-”,Linux把文件名当作选项了,我们可以使用“--”符号来解决这个问题,输入“rm --
-ee”命令便可顺利删除名为“-ee”的文件。如果是其他特殊字符的话可以在特殊字符前加一个“”符号,或者用双引号把整个文件名括起来。
2、直接进行Linux的安装工作
在安装Linux操作系统时,可以利用该系统光盘中的一个名为“loadlin.exe”的软件,将Linux核心直接调入内存,由Linux核心代替当前操作系统来接管计算机,并进入Linux的安装界面。在安装Linux时,我们只要在运行对话框中输入“loadlin
E:imagesvmlinuz root=/dev/ram initrd=E:imagesinitrd.img”这个命令就可以直接安装Linux了;其中“E:imagesvmlinuz”为Linux的核心名。
3、消除Xwindows下的死机现象
我们可以用两个常用的方法来消除这种现象:第一,用键盘上的复合键“Ctrl+Alt+Backspace”来关闭当前正在运行的任务;第二,首先按住键盘上的“Ctrl+Alt+F2”复合键,让系统切换到另一个操作台,然后登录到系统,再执行“#ps
-ax/grep startx”命令,这将会列出你的Xserver的进程标识,接着在命令行中输入如下命令就能消除Xwindows下的死机现象:#kill
-9 PID_Number,最后通过“Alt+F1”复合键返回到原来的平台。
4、快速关闭Linux系统
最新版本的Linux/UNIX系统借鉴了大型机的威廉希尔官方网站
,采用了抗掉电的日志式文件系统,可以自动跟踪保存用户数据,自动同步刷新文件系统,用户完全可以随手关闭电源,从而达到快速关闭系统的目的。
5、巧妙使用“rm”命令
我们可以使用带“-r”参数的“rm”命令来删除一个非空目录,例如我们在命令行中输入“rm -r bbb”这样的命令,表示系统将把bbb目录中包含的所有文件和子目录全部删除掉。
6、巧妙使用“Tab”键
大家知道在Linux字符界面中输入命令时,有时需要输入很多字符,如果经常这样逐个地输入字符,比较麻烦。假设键入的字符足以确定该目录下一个惟一的文件时,我们只需按键盘上的“Tab”键就可以自动补齐该文件名的剩下部分,例如要把目录/ccc下的文件“ddddddd-1.2.3.tar.gz”解包时,当我们在命令行中键入到“tar
xvfz /ccc/d”时,如果该文件是该目录下惟一以“d”打头的文件的话就可以直接按下“Tab”键,这时命令会被自动补齐为:tar xvfz
/ccc/ddddddd-1.2.3.tar.gz ,从而提高了输入效率。
7、多用鼠标拷贝与粘贴来提高操作速度
Linux系统安装后,每次启动到字符界面时都会自动运行一个叫“gpm”的程序,该程序运行后就可以用鼠标来拷贝与粘贴了。具体做法是按住鼠标左键拖动使要拷贝的地方突出显示,这时突出显示的区域已经被拷贝,再按鼠标右键拷贝的内容就会被粘贴在光标所在位置了。如果我们在Xwindow下运行Linux系统,拷贝与粘贴的操作与在Windows
9x系统下一样。
8、快速启动Linux系统
在DOS下,有一种简单快速启动Linux的方法,那就是load Linux。loadlin.exe是DOS下的可执行程序,它可以在纯DOS环境下迅速启动Linux,而且无需重启计算机,通常我们可以在光盘的“/kernels”目录下找到这个程序。如果不知这个程序被放置于安装盘的何处,可以使用“find
-name loadlin*”命令来寻找。找到之后将其复制到DOS分区中,同时还需要复制一份你所使用的Linux内核文件。可以通过Windows直接从光盘复制,也可在Linux环境下使用“mcopy”命令将文件复制到DOS分区;接着再编写一个名为“Linux.bat”的批处理文件,文件内容如下:c:loadlin
c:vmlinuz root=/dev/hda1 ro(我们假设loadlin.exe和vmlinuz这两个内核文件都在c盘根目录下,“root”为Linux的根设备,而且Linux处于硬盘第一分区,所以设备名为“/dev/hda1”,“ro”意为readonly)。以后在DOS下要启动Linux时,运行“Linux.bat”就可以了。
问:Linux为何无法支持34GB以上的IDE硬盘?
答:这是kernel版本的问题,在核心版本2.2.14之前对于IDE接口的硬盘只能支持到34GB,到核心版本2.2.14以上(包括2.2.14版本)便能支持34GB以上IDE接口的硬盘。
问:Linux中如何检测CPU型号?
答:键入cat /proc/cpuinfo命令即可获知系统配备了几个CPU、CPU的型号、制造商、运行频率、cache的大小、有无fpu等信息。
问:如何让鼠标的按键符合左手使用的方向?
答:其实,在x-window中,我们可以通过对鼠标的设定来达到鼠标按键方向对调的效果。你可以在.xinitrc中加上下面一行内容就可调整鼠标按键方向:
xmodmap -e "pointer = 3 2 1"
问:如何处理才能在开机后就去执行一个程序?
答:请在/etc/rc.d/rc.local中写入你要执行的程序。例如一开机便启动MySQL数据库,请在/etc/rc.d/rc.local下键入:
/usr/local/bin/mysql.server start即可。注意,请不要使用:exec /usr/local/bin/mysql.server
start
因为exec会使得后面要执行的程序取代目前的程序,如此一来,放在/usr/local/bin/mysql.server start后面的程序就都不会执行了。
问:如何使得系统在一段时间不操作后能自动退出?
答:当系统管理员?root账户拥有者 在离开计算机时,出于安全考虑,最好能让系统在隔一段时间后能自动退出。为了能做到这一点,你必须为一个叫做"TMOUT"的Linux变量设置指定时间?时间单位是秒 。编辑"/etc/profile"文件,在有"HISTFILESIZE="字样的那一行的后面加上下面一行内容:
TMOUT=3600
加入的这一行代表的含义是1小时?60×60=3600秒 。当你把这行内容放入你的"/etc/profile"文件后,在系统连续一小时不用时,系统会自动通知系统中的所有用户系统将退出。你也可以把该变量设置放在用户的各自的".bashrc"文件中,使得系统能在指定的一段时间不用后能自动退出。
该变量参数被设置在系统中后,你必须先退出系统,然后再以root帐户重新登录后,该项设置才会生效。
问:在Linux下如何更改系统时间?
答:若你要改时间,以root身份执行:
date -s HH?MM?SS (更改时间,其中HH、MM、SS分别为时、分、秒)
clock -w(写入Cmos)
如此即可,若你是时区设错的话,则可到#timeconfig中重新设定。
1、处理特殊的文件名
假设Linux系统中有一个文件名叫“-ee”,如果我们想对它进行操作,例如要删除它,按照一般的删除方法在命令行中输入rm
-ee命令,界面会提示我们是“无效选项”(invalid option),原来由于文件名的第一个字符为“-”,Linux把文件名当作选项了,我们可以使用“--”符号来解决这个问题,输入“rm
-- -ee”命令便可顺利删除名为“-ee”的文件。如果是其他特殊字符的话可以在特殊字符前加一个“”符号,或者用双引号把整个文件名括起来。
2、直接进行Linux的安装工作
在安装Linux操作系统时,可以利用该系统光盘中的一个名为“loadlin.exe”的软件,将Linux核心直接调入内存,由Linux核心代替当前操作系统来接管计算机,并进入Linux的安装界面。在安装Linux时,我们只要在运行对话框中输入“loadlin
E:imagesvmlinuz root=/dev/ram initrd=E:imagesinitrd.img”这个命令就可以直接安装Linux了;其中“E:imagesvmlinuz”为Linux的核心名。
3、消除Xwindows下的死机现象
我们可以用两个常用的方法来消除这种现象:第一,用键盘上的复合键“Ctrl+Alt+Backspace”来关闭当前正在运行的任务;第二,首先按住键盘上的“Ctrl+Alt+F2”复合键,让系统切换到另一个操作台,然后登录到系统,再执行“#ps
-ax/grep startx”命令,这将会列出你的Xserver的进程标识,接着在命令行中输入如下命令就能消除Xwindows下的死机现象:#kill
-9 PID_Number,最后通过“Alt+F1”复合键返回到原来的平台。
4、快速关闭Linux系统
最新版本的Linux/UNIX系统借鉴了大型机的威廉希尔官方网站
,采用了抗掉电的日志式文件系统,可以自动跟踪保存用户数据,自动同步刷新文件系统,用户完全可以随手关闭电源,从而达到快速关闭系统的目的。
5、巧妙使用“rm”命令
我们可以使用带“-r”参数的“rm”命令来删除一个非空目录,例如我们在命令行中输入“rm
-r bbb”这样的命令,表示系统将把bbb目录中包含的所有文件和子目录全部删除掉。
6、巧妙使用“Tab”键
大家知道在Linux字符界面中输入命令时,有时需要输入很多字符,如果经常这样逐个地输入字符,比较麻烦。假设键入的字符足以确定该目录下一个惟一的文件时,我们只需按键盘上的“Tab”键就可以自动补齐该文件名的剩下部分,例如要把目录/ccc下的文件“ddddddd-1.2.3.tar.gz”解包时,当我们在命令行中键入到“tar
xvfz /ccc/d”时,如果该文件是该目录下惟一以“d”打头的文件的话就可以直接按下“Tab”键,这时命令会被自动补齐为:tar xvfz
/ccc/ddddddd-1.2.3.tar.gz ,从而提高了输入效率。
7、多用鼠标拷贝与粘贴来提高操作速度
Linux系统安装后,每次启动到字符界面时都会自动运行一个叫“gpm”的程序,该程序运行后就可以用鼠标来拷贝与粘贴了。具体做法是按住鼠标左键拖动使要拷贝的地方突出显示,这时突出显示的区域已经被拷贝,再按鼠标右键拷贝的内容就会被粘贴在光标所在位置了。如果我们在Xwindow下运行Linux系统,拷贝与粘贴的操作与在Windows
9x系统下一样。
8、快速启动Linux系统
在DOS下,有一种简单快速启动Linux的方法,那就是load
Linux。loadlin.exe是DOS下的可执行程序,它可以在纯DOS环境下迅速启动Linux,而且无需重启计算机,通常我们可以在光盘的“/kernels”目录下找到这个程序。如果不知这个程序被放置于安装盘的何处,可以使用“find
-name loadlin*”命令来寻找。找到之后将其复制到DOS分区中,同时还需要复制一份你所使用的Linux内核文件。可以通过Windows直接从光盘复制,也可在Linux环境下使用“mcopy”命令将文件复制到DOS分区;接着再编写一个名为“Linux.bat”的批处理文件,文件内容如下:c:loadlin
c:vmlinuz root=/dev/hda1 ro(我们假设loadlin.exe和vmlinuz这两个内核文件都在c盘根目录下,“root”为Linux的根设备,而且Linux处于硬盘第一分区,所以设备名为“/dev/hda1”,“ro”意为readonly)。以后在DOS下要启动Linux时,运行“Linux.bat”就可以了。
对于那些用惯了Windows的朋友,初用Linux时可能有处处不方便的感觉,以下是我使用Linux的一些经验技巧,相信对初学者会有所帮助的。
1.使用虚拟控制台
登录后按Alt+F2键这时又可以看到“login:”提示符,这个就是第二个虚拟控制台。一般新安装的Linux有四个虚拟控制台,可以用Alt+F1~Alt+F4来访问。虚拟控制台最有用的时候是当一个程序出错锁住输入时可以切换到其他虚拟控制台登录进入后杀掉这个出错的进程。
2.拷贝与粘贴
适用于字符界面。Linux每次启动时都会自动运行一个叫gpm的程序,该程序运行后就可以用鼠标来拷贝与粘贴了。具体做法是按住鼠标左键拖动使要拷贝的地方反白,这时反白的区域已经被拷贝,再按鼠标右键拷贝的内容就会被粘贴在光标所在位置了。
如果系统启动时,未运行gpm,您可以在进入字符界面后再进行设置:#ntsysv。将会出现一对话框,先用键盘上的下键头移到gpm选项,然后按空格键将其选中(选中项前有一星号),最后重启,重新登陆即可。
3.快速进入某些目录
键入cd ~可进入用户的home目录;键入cd -可进入上一个进入的目录。
4.软驱的使用
(1)如果是Linux的ext2文件系统用如下命令:#mount -t ext2 /dev/fd0/mnt/floppy;若是dos格式的软盘则用命令:#mount
-t msdos/dev/fd0/mnt/floppy。然后就可以在/mnt/floppy里访问软盘的内容了;
(2)注意在取出软盘之前要先卸掉软盘上的文件系统:#umount /mnt/floppy,否则会导致信息丢失;
(3)在软盘上建立文件系统可用如下命令:#mke2fs /dev/fd0H1440;
(4)格式化1.44M的软盘:#fdformat /fd0H1440。
5.使用光驱
(1)使用光驱前,要先mount一下:#mount /dev/cdrom /mnt/cdrom,然后您就可以进入/mnt/cdrom目录下读取光盘内容了;
(2)当您想退出光盘时,须使用umout命令,否则光驱就会一直处于死锁状态:#umount /mnt/cdrom。还有一方法可直接退出光盘:#eject。
6.显示文件的类型
用命令file可以使你知道某个文件究竟是ELF格式的可执行文件,还是shell script文件或是其他的什么格式,例如:#file startx。
7.命令文件的路径
当你键入一些命令如find、reboot、mount、startx时是否想过这些文件究竟放在哪个目录里?用命令whereis可以实现。如:#whereis
startx。
8.查找文件
find命令要加一些参数才能查到文件。如:在/usr里查找文件XF86Setup:#find /usr -name XF86Setup -print。
9.一次解开.tar.gz文件
解开.tar.gz文件一般要先用gunzip解压再用tar解包,在Linux下可以一次完成。如:#tar zxpvf sample.tar.gz。
10.Linux里的Norton Commander
在提示符下键入命令mc后你就会看到一个与Norton Commander很相似的界面,实际上功能也很相似甚至更强大,比如可以直接对.tar.gz压缩包里的文件进行操作(有点像ZipMagic)。
11.启动后直接进入X-windows
编辑/etc/inittab文件,把id:3:initdefautl改为id:4:initdefautl。不过搜索路径可能会有些问题,关机时你得直接进入/sbin里去执行shutdown。
12.后台运行X程序
执行一个X程序时别忘了在后面加一个&号,如#netscape&。否则的话在你退出执行的程序之前再无法在那个终端窗口里输入命令了。
13. 强行退出X-windows
有时候在X里由于程序出错鼠标键盘都不起作用,这时候不用着急,因为在Linux下几乎不会像在Win95里那样恶性死机,你只须键入Ctrl+Alt+BackSpace键就可以回到字符界面下了。
14.显卡的配置(命令:Xconfigurator,注意:X是大写!)
此命令是一图型界面的对话框,您可以根据实际情况选择配置参数。
15.声卡的配置(命令:sndconfig)
此命令也是一图型界面的对话框,您可以根据实际情况选择配置参数,不过Linux兼容的声卡种类比较少。
16.Linux的在线帮助(命令:man 命令名)
Linux提供了几千页的在线帮助文档,内容几乎覆盖了Linux的方方面面,对于初学者很有帮助!例如:#man mount。
相信以上几点介绍,能给读者带来帮助和启迪!(山东 尹植平)
作为桌面操作系统,Linux的人机界面可真是不敢恭维,但是,作为网络操作系统,其易用性(对于NOS而言)和高性能恐怕是很难有能出其右的。当然,这并不是说它的操作很简单,而是说若能掌握一些技巧,无论是系统设置还是网络管理都能变得轻松自如、随心所欲。
禁止终端模式下的显示器自动节能
大部分PC上安装Linux后,在终端模式下也能实现自动关闭显示器的功能,但是假如我们要在显示器上即时显示一些信息,如:网络流量、包分析等,这个功能就变得非常讨厌了。采用修改CMOS和系统属性都无法解决,解决的办法是用setterm,设置终端的命令,如setterm
--blank,就能关闭自动节能这一特性。
将man帮助文档存为普通txt文件
Man的地位在Linux中可谓至关重要,比Windows里的中看不中用的Help好多了。但是它所显示的信息却不是普通的文本,如果直接将这些文字重定向到一个文本文件,你会发现,在man中高亮显示的文字就变成了两个,而且有不计其数的制表符,这使我们的打印、编辑都变得非常不便。不过使用下面这样一条语句就能得到tcsh命令的普通帮助文本:man
tcsh|col -b >tcsh.txt,再也不会有那些讨厌的重复字符了。
IDE硬盘的优化
Linux可能更加注重数据的安全性而非性能,这对NOS来说是完全必要的,但是打开IDE硬盘的一些有用的优化应该没什么害处吧。看看这个命令:hdparm,它的作用是显示、设置硬盘(包括光驱)的参数。我们可以先用hdparm
-i /dev/hda查看hda这块硬盘的参数设置,再根据情况来修改,如:hdparm - c 1可将硬盘的I/O读写支持由16位改为32位,hdparm
-m 16是开启硬盘的MultiCount。在执行这条命令之前最好先用-i参数确定你的硬盘所能支持的最大MultiCount数。主要优化的就是这两项了,其他的不敢确定也别乱来。可以用hdparm
-t /dev/had在优化前后测试硬盘性能。
允许root从远程登录
Linux的默认安全设置是root不能从远程工作站登录,这使我们对Linux服务器进行远程管理造成了不小的麻烦,/etc/securtty正是控制这一机制的关键文件,在这个配置文件的root小节中加入pts/0、pts/1等你希望root能够登录的终端名就行了。
恢复被覆盖的MBR(主引导扇区)的Linux引导程序LILO
如果LILO安装在MBR,那么先装Linux再安装Windows,LILO就会被覆盖,这时我们将无法从硬盘引导Linux,怎么办?我们可以启动到Windows命令行模式,从Linux光盘上拷贝loadlin.exe和vmlinuz两个文件到Windows分区,然后执行loadlin
vmlinuz root=/dev/had? rw。这条命令的作用是从指定的分区启动Linux,并将根分区(1)设为读写模式,这样就可以修改Linux的大部分设置或者恢复LILO。要注意的是这种情况启动的Linux并不完整,如:MSDOS、VFAT文件系统的支持、网络等都无法使用,不过没关系,只要能这样启动,我们可以利用mkbootdisk来创建Linux启动盘,用这张启动盘启动Linux,就能完全使用Linux了。启动Linux以后,只要将/etc/lilo.conf文件的第一项boot=/dev/hda?改为boot=/dev/hda,然后执行lilo就能恢复从MBR启动Linux。
配置文件一览表 文件位置及名称
作用
/etc/rc.d/rc.sysinit
系统启动时的公用服务配置
/etc/rc.d/rc.local
系统启动时的本地服务配置
/etc/bashrc、/etc/profile
bash shell的公用配置
/home/username/.bashrc
各用户私人bash shell配置
/etc/securetty
终端安全设置
/etc/hosts
主机名与ip地址的对应文件
/etc/resolv.conf
dns服务器配置
/etc/squid.conf或/etc/squid/squid.conf
squid代理服务器软件配置
/etc/smb.conf或/etc/samba/smb.conf
基于smb的网上邻居配置
/etc/dhcpd.conf
linux下的dhcp服务器配置文件
/etc/filesystems
系统支持的文件系统列表
/etc/fstab
当前系统中已激活分区的信息
/etc/host.conf
指定系统搜索dns记录的配置文件
/etc/lilo.conf
启动程序lilo的配置文件
Linux系统的大部分控制都是基于配置文件的,了解这些配置文件能更有利于使用Linux。
将Linux加入到Win NT/2000的启动选单中
Linux的启动选单不错,可惜不能显示中文,而且不能选择启动NT还是Win 98,所以我认为启动选单还是用NT系列的好。其实做起来很简单,安装完所有Windows系列操作系统后再装Linux,并在安装时选择将LILO安装到Linux所在的分区而非MBR,然后利用启动盘启动Linux,将Windows分区mount为/mnt/dos;然后执行dd
if=/dev/hda? bs=512 count=1 of=/mnt/dos/ bootsect.lin,这样在Windows分区就有了一个bootsect.lin文件,它记录了Linux分区的启动信息,然后在Windows
NT的启动配置文件boot.ini中加入C:BOOTSECT.LIN = "红帽子Linux 7.0",再启动电脑的时候,我们发现,在Windows
NT启动选单中多了“红帽子Linux 7.0”这个选项,选择它就能启动我们的Linux。需要注意的是NT在启动时仍然只识别8.3格式的文件,所以不要把bootsect.lin改为长文件名。
用Squid来控制文件类型的访问
Linux的一大好处就是能够非常方便地对IP网络进行路由,很多Linux系统就是专门用作Internet接入路由器。但是,iptables或ipchain等包过滤软件只能控制用户访问哪些站点,而无法控制用户访问哪些文件。使用Linux下的代理服务器软件Squid可以很容易地做到这一点,Squid.conf文件中的urlpath_regex项就是控制每种注册的MIME文件访问的,例如以下语句:
#给出需要控制访问的MIME文件类型(访问控制列表即acl)
acl denymine urlpath_regex .exe .zip
#禁止这类文件的访问
http_access deny denymine
这样就禁止了这条语句以后的所有用户对相应站点zip、exe文件的访问,当然你可以加入其他文件类型,如MP3等。再利用iptables之类的ReDirect重定向功能,强迫用户通过Squid代理上网,即所谓“透明代理”,就可完全控制用户对站点的访问了。
让系统使用默认的彩色文件显示
Linux终端下的不同类型文件的彩色显示让我们感觉非常方便,但有时可能不小心丢失这一功能,在配置文件中加入alias ls="ls
--color -F -N"就能保证这一功能的正常使用。
利用cron保持某些分区的激活状态
cron相当于Win 98的计划任务,它能根据用户的要求定时执行某些命令。如果你mount了一些NTFS分区,并经常访问这个分区(如Web
Server对一些文件的访问),很有可能因为时间过长而无法正确读写数据,这时可以利用cron的定时访问功能,保证该分区总是激活的。根据个人经验,网络上的NTFS分区最好让cron每15分钟访问一次,否则就有可能出现需要该分区数据时出现mount失败的情况。
注:本文中凡未经说明的都以RedHat Linux为准。
RPM 有五种基本的操作方式(不包括创建软件包): 安装, 卸载, 升级, 查询,和验证。 下面我们就来逐一的讲解吧。
一、 安装RPM包
RPM 软件包通常具有类似foo-1.0-1.i386.rpm 的文件名。其中包括 软件包的名称(foo),版本号(1.0),发行号(1),
和 硬件平台(i386)。安装一个软件包只需简单的键入以下命令:
$ rpm -ivh foo-1.0-1.i386.rpm
foo ####################################
RPM安装完毕后会打印出软件包的名字(并不一定与文件名相同), 而后打印一连串的#号以表示安装进度。虽然软件包的安装被设计的尽量简单易行, 但还是可能会发生如下的错误:
1、 软件包已被安装
如果您的软件包已被安装, 将会出现以下信息:
$ rpm -ivh foo-1.0-1.i386.rpm
foo package foo-1.0-1 is already installed
error: foo-1.0-1.i386.rpm cannot be installed
如果您仍旧要安装该软件包,可以在命令行上使用--replacepkgs 选项,RPM将忽略该错误信息强行安装。
2、文件冲突
如果您要安装的软件包中有一个文件已在安装其它软件包时安装,会出现以下错误信息:
# rpm -ivh foo-1.0-1.i386.rpm
foo /usr/bin/foo conflicts with file from bar-1.0-1
error: foo-1.0-1.i386.rpm cannot be installed
要想让RPM 忽略该错误信息, 请使用--replacefiles 命令行选项。
3、未解决依赖关系
RPM软件包可能依赖于其它软件包,也就是说要求在安装了特定的软件包之后才能安装该软件包。如果在您安装某个软件包时存在这种未解决的依赖关系。会产生以下信息:
$ rpm -ivh bar-1.0-1.i386.rpm
failed dependencies: foo is needed by bar-1.0-1
您必须安装完所依赖的软件包,才能解决这个问题。如果您想强制安装(这是个坏主意, 因为安装后的软件包未必能正常运行), 请使用--nodeps 命令行选项。
二、卸载RPM包
卸载软件包就象安装软件包时一样简单:
$ rpm -e foo
注意这里使用软件包的名字name ``foo'', 而不是软件包文件的名字file ``foo-1.0-1.i386.rpm''。
如果其它软件包依赖于您要卸载的软件包,卸载时则会产生错误信息。如:
$ rpm -e foo
removing these packages would break dependencies:foo is needed by bar-1.0-1
若让RPM忽略这个错误继续卸载(这可不是一个好主意,因为依赖于该软件包的程序可能无法运行),请使用--nodeps 命令行选项。
三、升级RPM包
升级软件包和安装软件包十分类似:.
$ rpm -Uvh foo-2.0-1.i386.rpm
foo ####################################
RPM将自动卸载已安装的老板本的foo 软件包,您不会看到有关信息。事实上您可能总是使用 -U 来安装软件包,因为即便以往未安装过该软件包,也能正常运行。因为RPM
执行智能化的软件包升级,自动处理配置文件,您将会看到如下信息:
saving /etc/foo.conf as /etc/foo.conf.rpmsave
这表示您对配置文件的修改不一定能向上兼容。 因此,RPM 会先备份老文件再安装新文件。您应当尽快解决这两个配置文件的不同之处,以使系统能持续正常运行。
因为升级实际包括软件包的卸载与安装两个过程,所以您可能会碰到由这两个操作引起的错误。另一个你可能碰到的问题是:当您使用旧版本的软件包来升级新版本的软件时,RPM会产生以下错误信息:
$ rpm -Uvh foo-1.0-1.i386.rpm
foo package foo-2.0-1 (which is newer) is already installed
error: foo-1.0-1.i386.rpm cannot be installed
如果你确有需要将该软件包”降级,加入 --oldpackage 命令选项就可以了。
四、 查询已安装的软件包
使用命令rpm -q来查询已安装软件包的数据库。简单的使用命令 rpm -q foo 会打印出foo软件包 的包名
,版本号,和发行号:
$ rpm -q foo
foo-2.0-1
除了指定软件包名以外,您还可以使用以下选项来指明要查询哪些软件包的信 息。 这些选项被称之为 “软件包指定选项“。
· -a 查询所有已安装的软件包
· -f 将查询包含有文件. 的软件包
· -p 查询软件包文件名为的软件包
还可以指定查询软件包时所显示的信息。它们被称作信息选择选项:
· -i 显示软件包信息,如描述, 发行号, 尺寸, 构建日期, 安装日期, 平台, 以及其它一些各类信息。
· -l 显示软件包中的文件列表。
· -s 显示软件包中所有文件的状态。
· -d 显示被标注为文档的文件列表(man 手册, info 手册, README's, etc)。
· -c 显示被标注为配置文件的文件列表。这些是您要在安装完毕以后加以定制的文件(sendmail.cf, passwd, inittab, etc)。
对于那些要显示文件列表的文件, 您可以增加-v 命令行选项以获得如同 ls -l 格式的输出。
五、 验证软件包
验证软件包是通过比较已安装的文件和软件包中的原始文件信息来进行的。验证主要是比较文件的尺寸, MD5 校验码,
文件权限, 类型, 属主和用户组等。
rpm-V命令用来验证一个软件包。您可以使用任何包选择选项来查询您要验证的软件包。 命令rpm -V foo 将用来验证foo软件包。又如:
· 验证包含特定文件的软件包:
rpm -Vf /bin/vi
· 验证所有已安装的软件包:
rpm -Va
· 根据一个RPM包来验证:
rpm -Vp foo-1.0-1.i386.rpm
如果您担心你的RPM数据库已被破坏,就可以使用这种方式。
如果一切均校验正常将不会产生任何输出。如果有不一致的地方,就会显示出来。 输出格式是8位长字符串, ``c'' 用以指配置文件, 接着是文件名.
8位字符的每一个 用以表示文件与RPM数据库中一种属性的比较结果 。``.'' (点) 表示测试通过。.下面的字符表示对RPM软件包进行的某种测试失败:
显示字符 错误源
5 MD5 校验码
S 文件尺寸
L 符号连接
T 文件修改日期
D 设备
U 用户
G 用户组
M 模式e (包括权限和文件类型)
如果有错误信息输出, 您应当认真加以考虑,是通过删除还是重新安装来解决出现的问题。
六、教你一招
RPM不仅是安装/卸载程序的工具,它还是系统维护和诊断的一把好手。看过下面几个例子你就会领教它的厉害了。
· 如果您误删了一些文件, 但您不能肯定到底都删除了那些文件,怎么办? 您可以键入:
rpm -Va
rpm会在屏幕上显示出文件删除的情况。若你发现一些文件丢失了或已被损坏, 您就可以重新安装或先卸载再安装该软件包。
· 如果您碰到了一个自己不认识的文件,要想查处它属于哪个软件包,您可以输入以下命令
rpm -qf /usr/X11R6/bin/xjewel
输出的结果会是:
xjewel-1.6-1
· 如果发生综合以上两个例子的情况,如文件/usr/bin/paste出了问题。您想知道哪个软件包中包含该文件,您这时可以简单的键入:
rpm -Vf /usr/bin/paste
· 如果您想了解正在使用的程序的详细信息, 您可以键入如下命令来获得软件包中关于该程序的文档信息:
rpm -qdf /usr/bin/ispell
输出结果为:
/usr/man/man4/ispell.4
/usr/man/man4/english.4
/usr/man/man1/unsq.1
/usr/man/man1/tryaffix.1
/usr/man/man1/sq.1
/usr/man/man1/munchlist.1
/usr/man/man1/ispell.1
/usr/man/man1/findaffix.1
/usr/man/man1/buildhash.1
/usr/info/ispell.info.gz
/usr/doc/ispell-3.1.18-1/README
· 您发现了一个新的koules RPM,但您不知道它是做什么的,您可以键入如下命令:
rpm -qip koules-1.2-2.i386.rpm
· 现在您想了解koules的 RPM包在系统里安装了哪些文件, 您可以键入:
rpm -qlp koules-1.2-2.i386.rpm输出结果为:
/usr/man/man6/koules.6
/usr/lib/games/kouleslib/start.raw
/usr/lib/games/kouleslib/end.raw
/usr/lib/games/kouleslib/destroy2.raw
/usr/lib/games/kouleslib/destroy1.raw
/usr/lib/games/kouleslib/creator2.raw
/usr/lib/games/kouleslib/creator1.raw
/usr/lib/games/kouleslib/colize.raw
/usr/lib/games/kouleslib
/usr/games/koules
以上只是几个常见例子。随着您进一步的使用RPM,您会发现它的各种功能选项组合可以实现更为强大的RPM包管理功能。
RPM不仅在安装,升级,卸载方面工作出色,而且在查询方面比其它软件包管理工具更胜一筹。这从以下几种情况可以看出:
* 当你在浏览系统文件时,发现一个文件,想知道它来自哪个软件包时,可以用RPM来查询得知;
* 当你的朋友给你发送来一个软件包,但你不知道这是个什么样的软件包,不知道它做些什么,安装些什么,来源是哪里。这时,你可以用RPM查询搞定;
* 几个月前你安装了XFree86窗口软件,但现在你忘了它的版本号,也不知它的说明文档在哪里。这时,你可以用RPM查询一下这个软件包,得到这方面的信息。
RPM的查询还有一个高级功能,即定制输出功能。你可用--queryformat(或-qf)来定制一下输出格式,这样,RPM查询得到的信息将以你定制的格式输出,这样很是方便,尤适合于程序的自动处理。
命令格式
查询RPM格式的软件包,可使用如下命令格式:
rpm -q [查询选项1 查询选项2...]
注: 也可使用--query代替-q,效果相同。
选项列表
选项详解
指定用选项中ftp与http相关的四个选项(--ftpproxy,--ftpport,--httpproxy,--httpport)和通用选项的解释,请参见<<精通RPM之二--安装篇>>,本文不再赘述。下面对指定用选项做些解释:
指定用选项可分为如下几类:
一、软件包选择类
此类选项在一次只能选择一个,选择多个时RPM将提示错误:
rpm: one type of query/verify may be performed at a time
从查询方面看,一个是查询那些已安装的软件包,一个是查询未安装的软件包。
1. 查询已安装的软件包,使用下列选项:
(1) -a (或--all) : 查询所有已安装的软件包
# rpm -q -a
setup-2.0.2-1
filesystem-1.3.4-5
basesystem-6.0-5
agrep-2.04-5
aktion-0.3.6-2
amor-0.5-1
dhcpcd-1.3.17pl2-1
ldconfig-1.9.5-15
glibc-2.1.2-12
chkconfig-1.0.6-2
......
#
注: 本例查找当前系统中安装的所有软件包,输出很多,仅列出几个,剩下的省略掉了(以......表示)。
(2) -g (或--group) : 查询有哪些软件包属于指定类别
RPM根据软件功用的不同,将软件分为以下若干类:(括号内为注释)
Amusements/Games (娱乐/游戏)
Amusements/Graphics(娱乐/图形)
Applications/Archiving (应用/档案)
Applications/Communications (应用/通讯)
Applications/Databases (应用/数据库)
Applications/Editors (应用/编辑器)
Applications/Emulators (应用/仿真器)
Applications/Engineering (应用/工程)
Applications/File (应用/文件)
Applications/Internet (应用/因特网)
Applications/Multimedia (应用/多媒体)
Applications/Productivity (应用/产品)
Applications/Publishing (应用/印刷)
Applications/System (应用/系统)
Applications/Text (应用/文本)
Development/Debuggers (开发/调试器)
Development/Languages (开发/语言)
Development/Libraries (开发/函数库)
Development/System (开发/系统)
Development/Tools (开发/工具)
Documentation (说明文档)
System Environment/Base (系统环境/基础)
System Environment/Daemons (系统环境/守护)
System Environment/Kernel (系统环境/内核)
System Environment/Libraries (系统环境/函数库)
System Environment/Shells (系统环境/接口)
User Interface/Desktops (用户界面/桌面)
User Interface/X (用户界面/X窗口)
User Interface/X Hardware Support (用户界面/X硬件支持)
Other (其它)
注意: 类别是大小写敏感的,这一点输入时要小心。如果用户想要查询当前系统安装了哪些游戏类的软件包,可这样做:
# rpm -q -g Amusements/Games
clanbomber-1.01-1
kdegames-1.1.2-1
xbill-2.0-6
xboard-4.0.0-3
xboing-2.4-7
xgammon-0.98-14
xjewel-1.6-11
xpat2-1.04-10
xpilot-3.6.2-6
xpuzzles-5.4.1-7
xtrojka-1.2.3-6
#
如果用户想查询若干类别的软件包时,可以把类别都列出来,一起查询,如:
# rpm -q -g Applications/Editors Applications/File
emacs-20.3-15
emacs-nox-20.3-15
emacs-X11-20.3-15
vim-common-5.6-12
vim-minimal-5.6-12
vim-X11-5.6-12
fileutils-4.0-3
bzip2-0.9.5d-1
findutils-4.1-32
git-4.3.17-6
gzip-1.2.4-15
slocate-1.4-7
stat-1.5-12
file-3.26-6
#
注: 本例查询结果中前6个为"应用/编辑器"类别,后8个为"应用/文件"类别。
(3) -f (或--file) : 查询有哪些软件包拥有指定文件这个选项非常有用。当用户不清楚某个文件属于哪个软件包时,可试试这个选项。假如我记不清/usr/sbin/ftpd这个文件在哪个包中,现在用RPM查询:
# rpm -qf /usr/sbin/ftpd
inet6-apps-0.36-3
#
现在知道了,它在inet6-apps-0.36-3包中。命令中-qf是-q -f的缩写,当选项仅带一个减号时,多个选项可以合并在一起,如-a
-b -c三个选项可写作-abc,执行效果相同。
(4) --whatrequires : 查询有哪些包需要指定功能
本选项指示RPM从所有已安装的软件包中,查询有哪些软件包提供了用户指定的功能,命令行上可输入一个或多个功能。
# rpm -q --whatrequires /bin/ps libc.so.6 | head
autofs-3.1.3-2
agrep-2.04-5
aktion-0.3.6-2
amor-0.5-1
chkconfig-1.0.6-2
libtermcap-2.0.8-16
bash-2.03-10
ncurses-4.2-18
info-3.12f-4
fileutils-4.0-3
#
注: 本例从系统中查询哪些软件包需要/bin/ps和libc.so.6功能,通过管道输出前10行内容。
(5) --whatprovides : 查询有哪些包提供指定功能
本选项指示RPM从所有已安装的软件包中,查询有哪些软件包提供了用户指定的功能。命令行上可输入一个或多个功能。
# rpm -q --whatprovides libc.so.6 /bin/ps
glibc-2.1.2-12
no package provides /bin/ps
#
注: 本例从系统中查询有哪些软件包提供libc.so.6与/bin/ps功能,结果是glibc-2.1.2-12包提供了libc.so.6,而没有包提供/bin/ps功能。
( 6) --triggeredby : 查询有哪些包被指定的包触发本选项指示RPM从所有已安装的软件包中,查询有哪些包可被用户指定的包触发。指定的包可输入一个或多个。
# rpm -q --triggeredby file
foo-8.0-1
#
注: 本例查询后得知,安装或卸载foo-8.0-1包,将会触发与file包相关的脚本程序执行。
2. 查询未安装的软件包: (仅有一个选项可用)
(1) -p : 查询指定包裹文件的信息
使用本选项,通过指定一个或多个包裹文件名,RPM就可以获取相应包裹的有关信息。包裹文件可以是一般形式,也可是ftp/http形式。
# rpm -qp -l --ftpport 2121 ftp://zzz:pass@linux/zhsoft/file-3.26-6.i386.rpm
/usr/bin/file
/usr/man/man1/file.1
/usr/man/man4/magic.4
/usr/share/magic
#
注: 本例查询ftp形式的包裹,显示其文件列表(-l选项使然,下面要讲到)。ftp用户名zzz,密码为pass,远程机为linux,文件名为/zhsoft/file-3.26-6.i386.rpm,ftp使用2121端口。
二、信息显示类
本类选项可同时选择多个,以显示多种信息。
1. -i : 显示软件包信息
当用户需要了解软件包的头部信息时,要使用该选项。
# rpm -qi file
Name: file Relocations: /usr
Version : 3.26 Vendor: Red Hat Software
Release : 6 Build Date: 1999年03月23日 星期二 05时32分29秒
Install date: 2001年10月14日 星期日 21时18分25秒 Build Host: porky.devel.redhat.com
Group : Applications/File Source RPM: file-3.26-6.src.rpm
Size: 211946 License: distributable
Packager: Red Hat Software
Summary : A utility for determining file types.
Description :
The file command is used to identify a particular file according to the
type of data contained by the file. File can identify many different
file types, including ELF binaries, system libraries, RPM packages, and
different graphics formats.
You should install the file package, since the file command
is such a
useful utility.
#
上述输出中,包含多个域,各个域的含义为:
Name : 软件名;Relocations : 重定位目录前缀(一个或多个);
Version : 版本号;Vendor : 开发商;
Release : 释出号;Build Date : 包建立时间;
Install date : 安装时间; Build host : 包建立主机;
Group: 类别; Source RPM : 源代码包;
Size : 大小; License : 许可证;
Packager : 打包者;
Summary : 软件简介;
Description : 详细描述。
2. -l (或--list) : 显示软件包文件列表
当用户想知道软件包包含哪些文件时,要使用该选项。输出时,一行一个文件名,形成文
件列表。下例列出file包中文件:
# rpm -qlv file
-rwxr-xr-x root root23948 3月 23 1999 /usr/bin/file
-rwxr-xr-x root root12023 3月 23 1999 /usr/man/man1/file.1
-rwxr-xr-x root root 6625 3月 23 1999 /usr/man/man4/magic.4
-rwxr-xr-x root root 169350 3月 23 1999 /usr/share/magic
#
注: 本例列文件时选用了通用选项-v,这样列出的格式同ls命令列出的格式,从中可以看到各个文件的权限,属主,属组,大小,最后修改时间及文件名等信息。
3. -d (或--docfiles) : 显示软件包说明文档RPM将软件包中的文件分为三类,一是配置文件,一是说明文档,再一是其它文件(包括可执行程序及数据文件等)。通过-d选项,可列出包中所有说明文档。下例列出file包中说明文档:
# rpm -qd file
/usr/man/man1/file.1
/usr/man/man4/magic.4
#
4. -c (或--configfiles) : 显示软件包配置文件使用本选项可列出包中所有配置文件。下例列出lze包中的配置文件:
# rpm -qc lze
/etc/funkey.def
/etc/inputme.def
#
5. -s (或--state) : 显示软件包文件状态RPM已安装的软件包中各个文件可拥有如下4种状态:
* normal(正常): 这表明文件未被其它软件包修改过。
* replaced(已替换): 这表明文件已被其它软件包修改替换过了,不再是原先的文件了。* not installed(未安装): 这表明文件未安装。有一种原因可导致这种情况发生,这就是当安装软件包时使用了--excludedocs选项(或是通过设置%_excludedocs宏为1),说明文档未被安装到系统中。当用RPM查询此软件包状态时,所有说明文档均显示此状态。
* net shared(网络共享): 这表明文件处于网络共享状态。这一状态是RPM用来支持NFS(网络文件系统)的,用于避免一个NFS客户端系统删除一个正在共享的文件时,另一NFS客户端系统无法正常使用含此文件的软件包。有两种情况可使文件在此状态,一是文件安装在真实网络共享的目录里,二是文件安装在RPM资源配置文件中%_netsharedpath宏所确定的目录里。
# rpm -i --excludedocs file-3.26-6.i386.rpm
# rpm -qs file
normal/usr/bin/file
not installed /usr/man/man1/file.1
not installed /usr/man/man4/magic.4
normal/usr/share/magic
#
注: 本例先安装file包裹文件,选用--excludedocs表明不安装说明文档。而后再查询file包文件的状态,可以看到其说明文档均为not
installed(未安装),其它文件为normal(正常)状态。
6. -R (或--requires) : 显示软件包所需的功能
所谓功能,可以是软件包标识,可以是文件(如共享库libc.so.6等),也可以是虚拟的名字。软件包的依赖关系,就是依靠功能来实现的。RPM安装软件包时,如果所需功能不存在,则其依赖关系不满足,RPM将中断安装过程。
# rpm -q -R lze
/bin/sh
ld-linux.so.2
libc.so.6
libc.so.6(GLIBC_2.0)
libc.so.6(GLIBC_2.1)
#
注: 本例查询lze包所需的功能。
7. --provides : 显示软件包提供的功能
一个软件包,可以提供若干功能,这些功能可以是动态链接库等实际的文件,也可以是虚拟的名字(只要其它软件包可以用就行了)。如果想查询某个包提供了哪些功能,要用--provides
选项。
下面的例子查询一个包裹文件所提供的功能:
# rpm -qp --provides zlib-1.1.3-6.i386.rpm
libz.so.1
libz.so.1(GCC.INTERNAL)
#
注: 本包裹文件提供的功能是libz.so.1动态链接库。
8. --conflicts : 显示软件包冲突的功能
何谓冲突?冲突就是不同软件包之间不能共存的现象。RPM制作软件包时,可以记录下与本软件包不能共存的功能,这样安装该包时,若冲突的功能已然存在,则RPM将中止安装。
下面的例子查询at-3.1.7-8包是否有与其冲突的功能:
# rpm -q --conflicts at-3.1.7-8
crontabs <= 1.5
#
注: 本例显示at包与版本号小于1.5的crontabs包有冲突存在。
9. --scripts : 显示软件包内置的脚本程序
scripts即脚本,指的是用SHELL语言编写的程序。选用本选项时,RPM将输出软件包所含的各类脚本程序的内容。总共有5类这样的脚本程序,即安装前脚本程序(preinstall),安装后脚本程序(postinstall),卸载前脚本程序(preuninstall),卸载后脚本程序(postuninstall)和校验脚本程序(verify)。
下面的例子列出zsh包的脚本程序:
# rpm -q --scripts zsh-3.0.7-4 | nl
1 postinstall script (through /bin/sh):
2 if [ ! -f /etc/shells ] ; then
3 echo "/bin/zsh" > /etc/shells
4 else
5 echo "/bin/zsh" >> /etc/shells
6 fi
7 /sbin/install-info /usr/info/zsh.info.gz /usr/info/dir \
8 --entry="* zsh: (zsh). An enhanced bourne shell."
9 preuninstall script (through /bin/sh):
10 if [ "$1" = 0 ] ; then
11 /sbin/install-info --delete /usr/info/zsh.info.gz /usr/info/dir \
12 --entry="* zsh: (zsh). An enhanced bourne shell."
13 fi
14 postuninstall script (through /bin/sh):
15 if [ "$1" = 0 ] ; then
16 if [ -f /etc/shells ] ; then
17 TmpFile=`/bin/mktemp /tmp/.zshrpmXXXXXX`
18 grep -v '^/bin/zsh$' /etc/shells > $TmpFile
19 cp -f $TmpFile /etc/shells
20 rm -f $TmpFile
21 chmod 644 /etc/shells
22 fi
23 fi
#
注: 本例利用管道威廉希尔官方网站
给查询的每行输出加上了行号,便于观察解释。
第2-8行: 为安装后脚本程序(postinstall)的源代码;
第10-13行: 为卸载前脚本程序(preuninstall)的源代码;
第15-23行: 为卸载后脚本程序(postuninstall)的源代码。
例中所有脚本程序均通过/bin/sh解释执行,本例没有安装前脚本程序(preinstall)和
校验脚本程序(verify)。
10. --triggers : 显示软件包内置的触发脚本程序
触发脚本程序是scripts类脚本程序的扩展,它用于软件包之间的交互控制。触发脚本
程序有安装时触发脚本程序(triggerin),卸载前触发脚本程序(triggerun)和卸载后触发脚
本程序(triggerpostun)三种。
下面的例子列出zsh包中的触发脚本程序:
# rpm -q --triggers zsh-3.0.7-4
triggerpostun script (through /bin/sh) -- zsh <= 3.0.7-2
if [ ! -f /etc/shells ] ; then
echo "/bin/zsh" > /etc/shells
else
echo "/bin/zsh" >> /etc/shells
fi
#
注: 输出的第1行说明脚本程序的类别(为卸载后触发脚本程序triggerpostun),用什么程序解释(一般为/bin/sh),和触发的条件(在--之后描述)。本例的触发条件为zsh的版本小于或等于3.0.7-2。如果条件成立,则此脚本程序将会执行。
输出的第2-6行为卸载后触发脚本程序的源代码。
11. --changelog : 显示软件维护记录
changelog即软件维护记录,用它来记录什么人,什么时间,改动了软件的什么地方。通
过查看维护记录,开发者或用户可以了解软件的开发进展情况。
下面的例子查询lze包的维护情况:
# rpm -q --changelog lze-6.0-2
* 五 5月 01 1998 雨亦奇
- 增加多窗口操作
* 一 3月 24 1997 雨亦奇
- 增加块操作命令
#
注: 从本例中就可以看出来,维护记录的书写有一定的规范:以星号(*)开头的行记录维护时间,维护人及其电子邮箱,而以减号(-)开头的行则记录维护的具体内容。
12. --dump : 显示软件包中所有文件的属性信息
如果用户想查看某个软件包内文件的属性信息,请用--dump选项。
# rpm -q --dump file
/usr/bin/file 23948 922138347 abaf6cfd51588ac7c484526fbdb84e5b 0100755
root root 0 0 0 X
/usr/man/man1/file.1 12023 922138346 76d9ff6567ab64a53eab50911272f5c1
0100755 root root 0 1 0 X
/usr/man/man4/magic.4 6625 922138346 b8d126803709f0da7f39f5125a132cd3
0100755root root 0 1 0 X
/usr/share/magic 169350 922138346 3bd2eaf3c5e0e84153ba7df38b7561fc 0100755
root root 0 0 0 X
#
现在根据例子的输出,解释一下RPM包中各个文件所拥有的属性信息:(以第1行为例)
/usr/bin/file : 为文件名;
23948 : 指文件大小(字节数);
922138347 : 指文件最后修改时间(秒数);
abaf6cfd51588ac7c484526fbdb84e5b : 指根据文件内容计算出的MD5检查和;
0100755 : 指文件存取权限;
root : 指文件属主;
root : 指文件属组;
0 : 配置文件标志,为0表示该文件非配置文件,为1表明该文件是配置文件;
0 : 说明文档标志,为0表示该文件非说明文档,为1表明该文件是说明文档;
0 : 指文件类型,为0表示普通文件,非0表示设备文件,包含主从设备号;
X : 符号连接内容,如果文件不是符号连接,则此值为X。
三、定制输出类
定制输出是RPM一项强有力的功能,当用户想要RPM按自己的格式输出软件包信息时,可以通过使用--qf(或--queryformat)选项来实现定制。
定制输出要指定格式化的字符串(类似printf的格式串),该字符串以单引号'或双引号"引住。格式串中可包括普通文本,含转义符的文本,功能标签和数组循环三种不同的组件。
* 普通文本
格式串中的普通文本将按原样输出。
* 含转义符的文本
RPM定义的转义符为\,称作反斜杠。当RPM遇到此字符时,会根据预先定义的转义序列,把后面的字符解释后输出。
转义序列如下:
\a : 输出响铃字符(值为7),效果是喇叭鸣叫一声。
\b : 输出退格符(值为8),效果是删除光标前面一个字符,且光标后退一个字符位置。
\f : 输出换页符(值为12),根据终端解释的不同,效果也不相同,有的是实现清屏操作,有的则是换一行。
\n : 输出换行符(值为10),效果是光标移到下一行。
\r : 输出回车符(值为13),效果是光标回到行首。
\t : 输出跳格(值为9),根据终端解释的不同,效果也不同,有的是输出一个空格,有的 则输出最多8个空格。
\v : 输出垂直方向的跳格(值为11),用处不大。
\\ : 输出反斜杠(\)这个字符。
* 功能标签
RPM内置了很多功能标签,如NAME表示软件名,VERSION表示版本号,RELEASE表示释出号等。输出功能标签所表示的内容时,需用这样一种格式:
%[输出宽度]{功能标签}
注:输出宽度可选,正值表示右对齐输出,负值表示左对齐输出。
如格式串中使用%{NAME}时将输出软件名,使用%20{NAME}时则右对齐输出软件名,宽度为20,而使用%-20{NAME}时则按宽度为20左对齐输出软件名。看看下面的实际例子就会明白:
# rpm -q --qf "%{NAME}:%20{NAME}:%-20{NAME}:\n" file
file:file:file:
#
功能标签书写不区分大小写,即NAME也可输作name,Name等等。功能标签还可以带有选项,选项用":选项名"表示,选项名有大小写之分。如%{FILEMODES}默认以数字形式输出,如采用perms选项,即%{FILEMODES:perms},输出结果将采用rwx的形式。请看下面的例子:
# rpm -q --qf "%{filenames} %{FILEMODES:perms}\n" file
/usr/bin/file -rwxr-xr-x-
#
注: %{filenames}表示包中的文件名。
RPM常用功能标签表
注: 可用rpm --querytags命令查到RPM内置的所有功能标签。
* 数组循环
对于功能标签是数组的,可以用数组循环(用[与]括住的部分)来输出数组的全部内容。数组循环内部可包含功能标签,普通文本和含转义符的文本。RPM将根据循环内部一个或多个数组类型的功能标签所拥有的单元个数,取其最小值,循环同样次数,输出解释或转义后的数据。对于功能标签仅含一个单元的,若想输出多次,则需要在功能标签前面加个等号(=)。
下面的例子以数组循环的方式,输出file包所含的各个文件的文件名及权限,同时输出每一个文件时都要先输出软件包标识。
# rpm -q --qf "[%{=NAME}-%{=VERSION}-%{=RELEASE} : %-20{FILENAMES}
: %{FILEMODES:perms}\n]" file
file-3.26-6 : /usr/bin/file : -rwxr-xr-x-
file-3.26-6 : /usr/man/man1/file.1 : -rwxr-xr-x-
file-3.26-6 : /usr/man/man4/magic.4 : -rwxr-xr-x-
file-3.26-6 : /usr/share/magic : -rwxr-xr-x-
#
通过使用定制输出,我们可以很方便地查找出系统中占用空间最大的软件包。
# rpm -q -a --qf "%{NAME} %{SIZE}\n" | sort -nr +1 | head -1
kernel-source 65824967
#
注: -a项选择所有已安装的软件包,--qf项定制查询格式, 格式串中用功能标签NAME输出软件名,用SIZE输出软件大小,查询得到的数据通过管道送sort命令,对第2列降序排序后由head命令取第1行内容,这即是占用空间最大的软件包。
评论
查看更多