Linux的一些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的一些Tips)