一些Tips


收集整理了一些技巧提示,以帮助新手快速上路。

1.虚拟控制台
  登录后按Alt+F2键这时又可以看到"login:"提示符, 这个就是第二个虚拟控制台.再按Alt+F1又回到第一
个控制台,来回切换很方便。查看/etc/inittab文件可以找到一下几行:
      #Run gettys in standard runlevels
      1:12345:respawn:/sbin/mingetty tty1
      2:2345:respawn:/sbin/mingetty tty2
      3:2345:respawn:/sbin/mingetty tty3
      4:2345:respawn:/sbin/mingetty tty4
      5:2345:respawn:/sbin/mingetty tty5
      6:2345:respawn:/sbin/mingetty tty6
  也就是说初始化的时候定义了6个虚拟控制台,你可以编辑这个文件来增加或减少虚拟控制台。在Xwin下
使用虚拟控制台则要用Ctrl+Alt+F?来切换。Xwindow占用虚拟控制台后的第一个控制台,缺省就是tty7,所
以要切换回Xwin则按Alt+F7(当你改变了虚拟控制台的数目时则要改变)。如果启动了第二个Xserver则应该
是Alt+F8,等等。

2.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"。

3.只列子目录的方法:
  ls -F | grep /$ 或者 alias sub = "ls -F | grep /$"(linux)
  ls -l  | grep "^d" 或者 ls -lL | grep "^d" (Solaris)
  find . -type d
  find . -type d | sort
  参考dtree

4.列出除了某些类型文件的当前目录所有文件
  使用Ksh,用ls !(*.Z)可以显示所有文件,除了*.Z文件。
  这个命令在一个目录里有许多种类型的文件的时候很有用.

5.计算文件数和目录数
  下面的语句可以帮你计算有多少个文件和多少个目录..
  ls -l * | grep "^-" | wc -l   <---- to count files
  ls -l *  | grep "^d" | wc -l  <----- to count dir
  还可以将以上的语句变成script或做个alias

6.复制子目录及子目录下的所有文件
  在用cp时加上-r参数,如"cp -r /mnt/floppy/* /usr/local/"
  要参考的重要参数是-f -s

7.文件/目录改名
  简单地用move命令移到新名字下即可。例如"mv /usr/oldname /usr/newname"

8.删除一个目录下的所有文件和子目录及子目录下的所有文件
  rm -rf /tmp/example
  这些都是给懒人们准备的,新手最好多用man命令学习。要是英语不好,等中文发行版出来 :-(

9.快速进入某些目录
  键入 cd ~ (或cd $HOME)可进入用户的home目录.
  键入 cd - 可进入上一次所在的目录.

10.显示环境变量
   echo $HOME    显示家目录
   echo $PATH    显示可执行文件搜索路径
   env           显示所有环境变量(可能很多,最好用"env | more","env | grep PATH"等)
   修改环境变量,在bash下用export,在csh下用setenv。比如:
   export PATH=$PATH:/usr/local/bin
   要想知道export的具体用法,可以用shell的help命令:help export

11.显示文件的类型
   用file命令,比如"file /bin/mount","file xxx.gz","file netscape","file initrd.img"等等。
   相关的配置文件在/etc/magic或者/usr/share/magic

12.查找命令文件的路径
   比如你要查找mount命令的具体路径,可以用
   type mount
   whereis mount 这个命令还可以找出与这个命令文件相关的文件如manuals page。

13.查找文件
   使用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时先比较权限。

14.控制台下回卷屏幕
   如何查看已经卷过屏幕的信息呢?试试这两个按键组合:shift+PageUp和shift+PageDown
   对xterm/nxterm/cxterm/xxgdb都有效。而KDE带的KVT已经做得很好了。

15.查看文件内容的特殊方法
   相信最基本的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行。

16.取消^M字符
   当你FTP一些DOS文件到unix下时,你经常会看见每行文件后面有个讨厌的^M 字符,
   有两个简单的方法可以取消它。
   用"vi"打开此文件,在Command mode下敲入:
     :%s/^V^M//g
   或者,在UNIX SHELL下敲入:
     sed 's/^V^M//g' foo > foo.new

17.利用Find命令改变所有权
   想要改变当前目录下所有文件的所有权,可以这样:
     find . -exec chown OWNER.[GROUP] {} \; (Solaris)
     find . -exec chown -R OWNER.[GROUP] {} \; (Linux)

18.改变xterm/cxterm下字体大小
   同时按下Ctrl键和鼠标右键会弹出一个菜单让你选择,也可以在启动xterm时指定字体,
   如"xterm -fn 8x16 &"
   提示:难道你不想试试Ctrl+鼠标左键会有什么吗?!

19.启动一个程序时让它立即进入后台运行方式
   看过前面一篇bash的介绍应该明白Ctrl+z/bg/fg的用法。有些程序工作起来挺费时间,在它后面加
   个&符号看看,例如"updatedb &","netscape &"等等。这样这个shell会释放出来干别的活。注意
   这样出来的程序父进程仍然是这个shell,若你退出这个shell,这些程序也会被kill掉(除非这个程序
   自己特别处理能脱离shell)。建议退出shell之前用jobs命令查看后台作业。

20.使用nohup命令(不挂起)
   如果你想进程在你退出系统后还能执行,可以使用NOHUP命令如:
     % nohup tar -cf /dev/tape /home &
   你logout退出后再重新登录的话,使用'ps'命令可以看到进程还在执行
   注意,要想把命令真正放到后台运行,nohup必须与&操作同时使用。
   有些软件自己能处理SIGHUP信号,如wget,则对它们无须用nohup。
   如果你愿开动脑筋的话,还可以用nohup来实现ppp回拨:先拨号上去,然后以nohup执行一个自制的
   脚本,如"sleep 60; ppp-start-script"等等。最后logout退出并挂断电话等着就是。

21.快速调出历史命令
   看了上一篇bash的介绍,想必对history,!,!!这些用法很熟悉了。其实你还可以用上下光标键
   来调出历史命令,然后用左右光标键移动并可编辑命令行。

22.产生一个以当日日期为后缀的文件
    file=`date   '+%m%d'` | touch todayis.$file
   或者做一个shell脚本:
     #!/usr/bin/sh
     file=`date  '+%M%d'`
     touch todayis.$file
     exit 0
   注意定义file变量中的“`”不是“ '”,而是左上角数字键1傍边那个(左单引号)。

23.将man/info的内容存为文本文件
   以man tcsh为例:
   1) man tcsh | col -b > tcsh.txt
   2) nroff -man tcsh.man | col -b > tcsh.txt
   以info emacs为例
   info emacs -o emacs.txt -s
   提示,如果安装了KDE的话用kdehelp去看man page和info page是很方便的。
   嫌KDE太大的话还有TkMan可以选择,也是图形/超文本方式的,有搜索引擎,功能更强。
   新来者要多去看man和info哟!

24.关于rpm的小技巧
   1)安装rpm包时显示进度
     用-vh参数,如rpm -ivh ipchains-1.3.6-1.i386.rpm
     如果用glint或xrpm则不必。
   2)直接通过ftp来安装rpm包
     如rpm -i ftp://ftp.xxx.xxx
   3)校验所有的rpm包,查找丢失的文件
     rpm -Va
   4)查找一个文件属于哪个rpm包
     例如:rpm -qf /usr/bin/who
   5)列出一个rpm包的描述信息
     例如:rpm -qpi mon-0.37j-1.i386.rpm
   6)列出一个rpm包的文件信息
     例如:rpm -qpl mon-0.37j-1.i386.rpm

25.快速展开xxx.tar.gz/xxx.tgz压缩的包
   tar zvfx xxx.tgz 在当前目录下展开这个包
   tar zvft xxx.tgz 只测试不展开
   tar zvfx xxx.tgz -C /new-dir 展开后放到/new-dir目录下
   tar zvfc test.tgz /test 把/test目录下所有的文件及子目录打包成test.tgz
   tar的参数很多,要仔细学习。

26.拷贝与粘贴文本
   如果启动了gpm这个守护神(deamon)程序的话,可以用鼠标左键来选择文本,然后就可以用鼠标
   中键把它粘贴到你所想要的地方。如果是两键鼠标则在配置是要选择防真3键鼠标,之后同时按
   下左右键模拟中键。在文本终端下应该用鼠标右键来粘贴。

27.快速查找某个程序运行中的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列出所有可用的信号。
   提到ps忍不住给大家介绍一下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这一项。

28.查找Xwindow下的字体信息,特别是字符映射表(内码)
   xlsfonts 列出所有字体
   xfontsel 分类列出所有字体并显示示范文本
   xfd 显示某个字体文件中的所有字符及内码,比如用 xfd -fn hanzigb16fs 看看中文内码
   再用xfd -fn cclib16st看看cxterm所用字库的内码与XF86的不同(注意最高位)。

29.查找日期为某一天的文件
   A=`find ~ -print` | ls -l --full-time $A 2>/dev/null | grep "Jun 27"  | grep 1998
   Linux的命令很厉害的呀!
   给你写了下面这个script,用着方便点儿。你把它存成一个随便什么名字的文件,置上x属性就行了。
   #!/bin/sh
   # Copyright by Ming Gong(宫敏) for news://news.freesoft.cei.gov.cn/chinese.com.linux
   # GPL V2, Jun 30, 1998
   # The right of usage, distribution and modification is here by granted by the author.
   # The author deny any responsibilities and liabilities related to the code.
   #
   OK=0
   A=`find $1 -print`
   if expr $3 == 1 >/dev/null  ; then M=Jan ; OK=1 ; fi
   if expr $3 == 2 >/dev/null  ; then M=Feb ; OK=1 ; fi
   if expr $3 == 3 >/dev/null  ; then M=Mar ; OK=1 ; fi
   if expr $3 == 4 >/dev/null  ; then M=Apr ; OK=1 ; fi
   if expr $3 == 5 >/dev/null  ; then M=May ; OK=1 ; fi
   if expr $3 == 6 >/dev/null  ; then M=Jun ; OK=1 ; fi
   if expr $3 == 7 >/dev/null  ; then M=Jul ; OK=1 ; fi
   if expr $3 == 8 >/dev/null  ; then M=Aug ; OK=1 ; fi
   if expr $3 == 9 >/dev/null  ; then M=Sep ; OK=1 ; fi
   if expr $3 == 10 >/dev/null  ; then M=Oct ; OK=1 ; fi
   if expr $3 == 11 >/dev/null  ; then M=Nov ; OK=1 ; fi
   if expr $3 == 12 >/dev/null  ; then M=Dec ; OK=1 ; fi
   if expr $3 == 1 >/dev/null  ; then M=Jan ; OK=1 ; fi

   if expr $OK == 1 > /dev/null ; then
     ls -l --full-time $A 2>/dev/null | grep "$M $4" | grep $2 ;
   else
     echo Usage: $0 path Year Month Day;
     echo Example: $0 ~ 1998 6 30;
   fi

30.使用软盘/光盘等移动介质
     刚从跺死/瘟都死转过来的朋友,手拿着软盘/光盘不知道该如何办,因为Linux下没有A盘D盘的
   概念.我自己刚开始学习Linux时也是这样(以前从来就没有做过root  :-)。如果你手头有讲Linux
   的书,仔细去看设备及文件系统的相关章节。简单地说,你需要把软盘/光盘设备上的文件系统安
   装到Linux目录树上的一个点上,称之为安装点(mount point),通常是一个目录。安装Linux后会
   有个缺省的安装点/mnt,在它下面还有/mnt/floppy和/mnt/cdrom。你可以用
       mount -t ext2 /dev/fd0 /mnt/floppy  <--把linux文件系统格式的软盘安装上来
       mount -t msdos /dev/fd0 /mnt/floppy <--把dos文件系统格式的软盘安装上来
       mount -t vfat /dev/fd0  /mnt/floppy <--vfat支持瘟95/98的长文件名
       mount /dev/hdb /mnt/cdrom  <--把以从盘方式接在第一个IDE口上的光驱上的光盘安装上来
       mount /dev/cdrom /mnt/cdrom  <-- /dev/cdrom是指向光驱设备的一个连接
       mount /mnt/cdrom    <--可以这么用是因为在/etc/fstab里已经定义了
       umount /mnt/floppy  <--在拿出软盘之前先要把它卸载
       umount /mnt/cdrom   <--不卸载就拿不出光盘
   当然你也可以自己建一些安装点,比如"mkdir /mnt/smb","mkdir /scd"然后
       mount -t iso9660 /dev/scd0 /scd  <--/dev/scd0: SCSI光驱
       smbmount //fjj/download /mnt/smb
   等等,熟悉之后就可以灵活运用。
   单用mount而不跟任何参数可以显示已经安装的文件系统,或者查看/etc/mtab文件
   初学者还经常问到如何格式化磁盘,在Linux里概念有些不同,称之为制作文件系统(make filesystem)
   应该用mkfs命令,由于现在的Linux都使用ext2格式,最好直接使用mke2fs,比如mke2fs /dev/fd0
   mke2fs /dev/hdb2等等。如果要对软盘低级格式化,则可以用fdformat,而硬盘在出厂时已经格式化,
   无须低级格式化(那是危险的)。检查文件系统则用e2fsck,如e2fsck -av /dev/fd0。
   哈,这个根本算不上Tips,不过有些初学者总是不喜欢看书思考,甚至还问如何添加/删除用户。

31.添加/删除用户
   用useradd username(或者adduser username)添加一个名为username的用户,然后用passwd username
   指定口令。用户的信息记录在/etc/passwd文件里,由于每个用户都可以(而且必须能)读出这个文件然
   后就可以crack出其它用户的密码,为安全考虑现在都使用shadow。在/etc/passwd下用户的口令变为x
   真正的口令密文记录在/etc/shadow里,而这个文件只有以root权限才能读出。Redhat 5.1以下版本没
   有直接使用shadow,需要用pwconv转换一下,如果要变回来,可以用pwunconv。提示:在/etc/skel目
   录记录了一个用户应该有的基本文件(ls -a /etc/skel/看看都有什么),useradd会自动把这些文件复
   制到用户的家目录下并置上适当的权限(除非添加用户时用了-m参数: useradd -m xxx)。如果你在这个
   目录下键一个public_html的目录,则以后添加的用户在它的家目录下都会自动有个同名的目录,这样
   每个用户都有了“个人主页”。
   删除用户可以用userdel usrname或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"......
   再一次建议新来者多看书多思考多看看man page,否则不大容易找到/etc/skel是干什么的。

32.列出一个目录占用的空间
   du或du -s或du -k
   du -S | sort -n 可以迅速发现那个目录是最大的。
   用df可以看到已安装的文件系统的空间大小及剩余空间大小。
   quota -v查看用户的磁盘空间信息,如果你用quota限制了用户空间大小的话。

33.命令补起(TAB键的妙用)
   很多shell都有这个功能。
   1) 只需输入文件或目录名的前几个字符, 然后按TAB
      键,如无相重的,完整的文件名立即自动在命令行
      出现;如有相重的,再按一下TAB键,系统会列出
      当前目录下所有以这几个字符开头的名字.例如
      cd /mnt/cd<tab键> 自动补起为 cd /mnt/cdrom
   2) 在命令行下,只需输入例如"m",再连续按两次TAB
      键,系统将列出所有以"m"开头的命令,(包括自定义
      的Bshell命令函数),对查找某些记不清楚的命令特
      有用.例如输入"ftp",将查到ftp,ftpcount,ftpwho
      ftpshut等本不熟悉的命令.

34.在redhat5.0中没有setenv,用set设定的变量在程序中用getenv读不出来.
   用哪个函数可以读出用set设定的环境变量?
   set env;export env
   然后在用getenv去读。

35.让grep搜寻文件及所有子目录下的文件里的内容
   例如搜寻ZhXwin下所有C原代码中的"Chinput"(试试取消下行的-q参数):
   find /download/ZhXwin -name *.c -exec grep -q -s Chinput {} \; -print
   查找所有文件则可以用:
   find . -type f -exec grep -s chinese {} \; -print
   如果喜欢图形界面,KDE带的kfind很不错。

36.查看启动时的log信息
   首先去查看/etc/syslog.conf文件,找到对应的文件。
   (更详细的信息去看"man syslogd" "man syslog.conf" 以及"man klogd")
   通常在SlackWare下为/var/adm/messages,在Redhat下为/var/log/messages。
   这些文件可能会很大,要注意备份和删除。
   前面已经提到用tail(tail -f)查看这些文件的方法,另外还有个logscanner工具,挺不错的。
 

建议大家去读一下The Linux Tips Howto,并且去订阅Linux Gazette
收集整理这些文档的时候看到一个新开的站点:Linux Tips & Tricks
 

-------------------
头疼医头,脚疼医脚。
  ????????????? ?

本文转自中文Linux论坛