google 一下"linux常用命令",列了许多常用命令,可是记性不好,或者不是运用不是很熟练得情况下,很多问题未必知道如何解决,于是想到使用案例分析,既能解释常用命令,又能为某些常见的案例找到解决方式。
无论程序员或者管理员,经常需要查看log file,但大部分情况下,log file可能很大,而我们只需要查看最后的几行记录,用“tail Logfilename” 就是我们所需的,不过这个简单命令只能查看你打开文件前的最后几行记录,如果文件是实时更新的,就需在tail后 加上“-f”, 全行命令如下:
tail -f debug.log
(-f: output appended data as the file grows)
用以上命令会在你查看记录的时候在terminal上实时更新最新的最后几行记录。
对于查看log file,tail 命令的确很方便,因为一般log file只需要查看最后几笔记录。但若“tail”来查看别的大文件,就未必方便了。
例如有一个mysql的拷贝文件,拷贝数据库把整个server的所有数据库全弄到一个拷贝文件里了。很愚蠢的做法,但没办法,就有人这么省事。于是哪天不幸需要恢复数据的时候,就头疼了。因为不可能真的把所有的数据库恢复了,就算是可以,也需要n个小时,而我们所需的数据只是其中一个table。虽然知道要恢复的table名,但文件太大,linux(unix)上有限制不超过(2MB),大于这个文件就读不出来了。这个时候,单一的linux命令是无法让你找到所需的表名的,必须综合运用几个linux命令。
首先,将拷贝文件分成n个大小的2mb的文件:
split -b 2 m mysql.sql
(-b, --bytes=SIZE: put SIZE bytes per output file. SIZE may have a multiplier suffix: b for 512, k for 1K, m for 1 Meg.)
split会自动分离文件,并自动给每个文件取个文件名,所以无需计算要分成几个,分成什么文件名。
在split命令分完文件后,用查找命令找一下所需的文件:
find . -name "*.sql" | xargs grep 'tablename'
(-name pattern: search files with the given pattern.)
通过这个命令,就知道所需要的数据在那个文件,然后打开此文件查找。如果文件仍然太大,不方便,再重复以上步骤n次,就能找出所需数据。
“find“ 这个命令在linux下查找文件非常方便。比如你知道一个function “helloWorld()”,但不知道这在那个文件里面,便可通过find 查询:
find . -type f | xargs grep 'helloWorld()'
(-type f: search all files)
linux会把所有调用到这个function的文件全列出来。 甚至在你已知文件类型,便可用类似于上边的命令用定义文件名的类型来查找,例如
find . -name "*.txt" | xargs grep 'helloWorld()'
最后简单解释一下为什么在find后使用xargs。用find查询到结果可能有很多,甚至超过系统的限制导致出错。在find后加入xargs则可优化查询进程,令grep每次只获取一部分文件而不是全部,这样避免出现错误。
3/05/2009
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment