Linux 实用技巧

Author: 李文龙 lwl888@263.net Date: 2000年 第29期

  Linux虽然“不复杂”,但要用好它却还有不少“讲究”。原因是要用好还涉及到相当数量的技巧。笔者在此收集、整理了一些Linux技巧,希望能为大家“用顺”Linux提供方便。
#1    1.在Redhat下显示彩色目录及文件列表
  用ls --color --F命令,参数--color指示用彩色显示,参数-F会在文件/目录名后加一个字符来指示它的类别。 
  建议初学者用man ls看看详细信息。比如用-l参数列出文件/目录的绝大部分信息(长格式显示);用-a参数列出所有文件;包括首字符为“.”的隐含文件;用-N参数不处理文件名直接显示,这样在中文环境下就可以显示中文文件名了。还要注意ls与其它命令搭配使用可以生出很多技巧(最简单的如“ls -l | more”)。 
  为了方便起见,你可以编辑/etc/bashrc或home目录下的.bashrc,加入一行: 
  alias ls=″ls --color -F -N″ 
  重新运行一下bash会立即生效,如果加在/etc/bashrc里则对所有使用bash shell的用户有效。如果使用的是其它的shell,则去找对应的配置文件。注意它不是/etc/aliases文件,那是sendmail的别名配置文件。 
  ls显示的颜色是可以修改的,请参考“Colours with Linux terminals”,它里面有个shell脚本可以显示所有的ANSI颜色。你可以去看一下/etc/DIR_COLORS或$HOME/.dir_colors,要注意两个文件的作用范围不同。
  也可以用dircolors -p命令列出设置,更详细信息见“man dircolors”。 
#1    2.列出除某些类型文件外的当前目录内所有文件
  使用Ksh,用ls !(*.Z)命令可以显示所有文件,除了*.Z文件。
  这个命令在一个目录里有许多种类型文件时很有用。
#1    3.删除一个目录下的所有文件和子目录及子目录下的所有文件
  用rm -rf /tmp/example命令
  这些都是给懒人们准备的,新手最好多用man命令学习。要是你英语不好,就只好等待中文版了。
#1    4.快速进入某些目录 
  键入 cd~(或cd SHOME)可进入用户的home目录. 
  键入 cd - 可进入上一次所在的目录. 
#1    5.显示环境变量
  echo S HOME 显示家目录 
  echo S PATH 显示可执行文件搜索路径
  env 显示所有环境变量(可能很多,最好用″env | more″,″env | grep PATH″等)
  修改环境变量,在bash下用export,在csh下用setenv。比如:
  export PATH=SPATH:/usr/local/bin
  要想知道export的具体用法,可以用shell的help命令:help export
#1    6.查找文件
  使用find命令,比如:
  find /usr -name XF86* 在/usr目录下(包含子目录)查找名字前四个字母为XF86的文件
  find . -name netscape -print 在当前目录下(包含子目录)查找名为netscape的文件
  find /home -nouser 在/home目录下查找没有用户属主的文件(用户账号被删除但有遗留文件)
  find /var -newer test 在/var目录下查找比test文件日期更新的文件
  find命令有很多参数,注意用man命令查看。
  更快速的查找文件是使用locate,第一次使用locate之前用updatedb来更新文件/目录名数据库。
  它把文件/目录信息写到数据库中,以后查找起来就特别快。updatedb放在crontab中而且缺省配置是在半夜自动执行。locate存在轻微的安全性问题,因为普通用户可以用它来取得自己不能访问的目录/文件的部分信息。现在有个secure locate,把uid/gid也保存到数据库中,用户在locate时先比较权限。
#1    7.控制台下回卷屏幕
  如何查看已经卷过屏幕的信息呢?试试这两个按键组合:shift+PageUp和shift+PageDown,它们对xterm/nxterm/cxterm/xxgdb都有效。而KDE带的KVT已经做得很好了。 
#1    8.查看文件内容的特殊方法
  相信你对最基本的cat和less已经很熟悉了,如果有特殊的要求呢:
  如果你只想看文件的前5行,可以使用head命令,如:
  head -5 /etc/passwd
  如果你想查看文件的后10行,可以使用tail命令,如:
  tail -10 /etc/passwd
  tail -f /var/log/messages
  参数-f使tail不停地去读最新的内容,这样有实时监视的效果,当你在ppp拨号的过程中用它岂不是很方便!
  查看文件中间一段,你可以使用sed命令,如: 
  sed -n ′5,10p′ /etc/passwd 
  这样你就可以只查看文件的第5行到第10行。 
#1    9.启动一个程序时让它立即进入后台运行方式
  看过前面一篇bash的介绍应该明白Ctrl+z/bg/fg的用法。有些程序工作起来挺费时间,在它后面加个&符号看看,例如“updatedb &”,“netscape &”等等。这样这个shell会释放出来干别的活。请注意这样出来的程序父进程仍然是这个shell,若你退出这个shell,这些程序也会被kill掉。建议退出shell之前用jobs命令查看后台作业。
#1    10.使用nohup(不挂起)命令
  如果想进程在你退出系统后还能执行,可以使用nohup命令如:
  % nohup tar -cf /dev/tape /home &
  如logout退出后再重新登录的话,使用“ps”命令可以看到进程还在执行。注意,要想把命令真正放到后台运行,nohup必须与&操作同时使用。有些软件自己能处理SIGHUP信号,如wget,对它们则无须用nohup。
  你还可以用nohup来实现ppp回拨:先拨号上去,然后以nohup执行一个自制的脚本,如“sleep 60; ppp-start-script”等等。最后logout退出并挂断电话等着就是。
#1    11.快速查找某个程序运行中的PID号/关机
  例如想查找inetd可以用:ps aux | grep inetd命令;又如想找到最耗内存的进程可以用: ps aux | sort +4n命令。找到进程的PID之后就可以用kill命令给它发信号,或者强制杀死它。如:kill -9 xxx(某个进程的PID)。
  在Linux下还提供了一个killall命令,可以直接使用进程的名字而不是PID号,如killall -HUP inetd;又如killall xdm。killall会把信号发给以指定名字的程序运行的所有进程。用killall -l可以列出所有可用的信号。
  下面给大家介绍一下qps,它是用qt写的图形界面,综合了free、top、ps及kill的特点,还可以看到进程的Socket/Memory Map/Files信息。还有为KDE写的ktop,优点是列出了父子进程的关系。
  shutdown -r now 杀掉所有进程立即重新启动;
  shutdown -h now 杀掉所有进程立即停机;
  shutdown -h +5 ″Warning: After 5 minutes I'll shutdown″ 给用户发消息并在5分钟后停机。
  相关命令有reboot,halt,poweroff,init等。
  要想实现软件关掉电源,则你的PC机必须是ATX结构的,然后去配置编译内核,打开charactor device/Advanced Power Management support/Power off on shutdown这一项。
#1    12.查找Xwindow下的字体信息,特别是字符映射表(内码)
  xlsfonts 列出所有字体;
  xfontsel 分类列出所有字体并显示示范文本;
    xfd 显示某个字体文件中的所有字符及内码,比如用 xfd -fn hanzigb16fs 查看中文内码,再用xfd -fn cclib16st查看cxterm所用字库的内码与XF86的不同(注意最高位)。 
#1    13.添加/删除用户
  可以用useradd username(或者adduser username)添加一个名为username的用户,然后用passwd username指定口令。用户的信息记录在/etc/passwd文件里,由于每个用户都可以(而且必须能)读出这个文件然后就可以crack出其它用户的密码,为安全考虑现在都使用shadow。
  真正的口令密码记录在/etc/shadow里,而这个文件只有以root权限才能读出。Redhat 5.1以下版本没有直接使用shadow,需要用pwconv转换一下,如果要变回来,可以用pwunconv。提示:在/etc/skel目录记录了一个用户应该有的基本文件(可以用ls -a /etc/skel/查看),useradd会自动把这些文件复制到用户的家目录下并置上适当的权限(除非添加用户时用了-m参数: useradd -m xxx)。如果你在这个目录下键一个public_html的目录,则以后添加的用户在它的家目录下都会自动有个同名的目录,这样每个用户都有了“个人主页”。
  删除用户可以用userdel username或userdel -r username命令(有些发行版可能是deluser),-r参数会删除这个用户的家目录,但是在系统里别的地方还可能有此用户的信息,所以在删除用户之前最好还要用find / -user username等方式去查找相关信息。
  如果要临时禁止一个用户,可以在/etc/passwd文件中此用户的密码这一项第一个字符前添加一个*号。
  如果把密码域改为空,则此用户不需要密码就可以进入系统,当你忘记root口令时,可以用软盘启动把原来的root安装上来,直接去改passwd文件。
  长用户名的问题,在Redhat发行版中已经做得很好了,也允许用户名中有空格。如果你手上的发行版不支持,可以到/usr/include/utmpbits.h里把UT_NAMEDSIZE改为32,重新编译相关程序。
  另一个直观的配置工具是linuxconf,比如可以用它来配置pppuser等等。这里只能给一些线索,你可以多看″man useradd″,″man shadow″,″man group″,″man userdel″......
#1    14.列出一个目录占用的空间
  可以用du或du -s或du -k命令。
  du -s | sort -n 可以迅速发现那个目录是最大的。
  用df可以看到已安装的文件系统的空间大小及剩余空间大小。
  如果你用quota限制了用户空间大小的话,可以用quota -v查看用户的磁盘空间信息。
#1    15.如何驱动声卡
  RedHat 自带的2.0.34-1 kernel中用了模块化的声卡驱动,有许多声卡都只需要恰当地配置 /etc/conf.modules 就行了,不需要重建 kernel,也不需要其它软件;但是 sndconfig 配置程序只支持 sb声卡,其它声卡要按照/usr/dos/rhsound-1.5/README.modules.usage 的要求自己写/etc/conf.modules,如对OPTI929/930/931 系列要加
  alias sound mad16
  options mad16 io=xxx irq=xxx dma=xxx cdtype=0
  options sb mad16=1
  options opl3 io=xxx
  注意对mad16.o模块用depend sb.o。修改设置后不需要重启动,用lsmod看看已经启动的modules,用rmmod卸载sound,sb等,再play sound时,kerneld将会自动加载,用lsmod查看,应该有
  mad16
  opl3
  sb
  sound
  在RedHat5.1中,只要使用支持清单中的声卡,这样配置都没有问题,你马上就可以听到优美的声音。