开开 发表于 2009-7-28 14:37

一些Linux 的 Tips zz

swordlea

版主

发贴: 652
积分: 0
来自: 论坛神游夜
注册日期: 2006-05-16
发表时间: 2006-11-23 09:28:10

--------------------------------------------------------------------------------
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. {} \; (Solaris)
find . -exec chown -R OWNER. {} \; (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 自动补起为 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
<---- 以上言论仅代表本人立场 ---->



__________________
- Is life always this hard,or it just when you're a kid?
- Always like this.
   

andy

普通会员

发贴: 104
积分: 0
来自:
注册日期: 2006-05-17
发表时间: 2006-11-23 09:33:23

--------------------------------------------------------------------------------
好贴要顶!
<---- 以上言论仅代表本人立场 ---->
页: [1]
查看完整版本: 一些Linux 的 Tips zz