 |
|
 |
|
 |
| 你很陌生但是很适用的10个linux命令 |
来源: www.ixdba.net 
作者: IXDBA.NET官方
时间:2008-02-01 阅读:153
|
|
一般来说,你可能需要几年甚至上十年来精通Linux shell命令。这里是10个你可能从未听过或者用过的命令。
1.pgrep, 一般如下:
# ps -ef | egrep ^root | awk {print $2}
1
2
3
4
5
20
21
38
39
...
事实上,你可以这样:
# pgrep -u root
1
2
3
4
5
20
21
38
39
...
2.pstree, 以树形格式来列出进程。这个命令对于已经在运行的WebSphere或其它大型任务的应用程序非常有用的。
# pstree
init-+-acpid
|-atd
|-crond
|-cups-config-dae
|-cupsd
|-dbus-daemon-1
|-dhclient
|-events/0-+-aio/0
| |-kacpid
| |-kauditd
| |-kblockd/0
| |-khelper
| |-kmirrord
| `-2*[pdflush]
|-gpm
|-hald
|-khubd
|-2*[kjournald]
|-klogd
|-kseriod
|-ksoftirqd/0
|-kswapd0
|-login---bash
|-5*[mingetty]
|-portmap
|-rpc.idmapd
|-rpc.statd
|-2*[sendmail]
|-smartd
|-sshd---sshd---bash---pstree
|-syslogd
|-udevd
|-vsftpd
|-xfs
`-xinetd
3.bc是一个相当准确的计算器语言。我发现它可以让你用shell脚本来执行平方根操作。而expr
不支持平方根.
# ./sqrt
Usage: sqrt number
# ./sqrt 64
8
# ./sqrt 132112
363
# ./sqrt 1321121321
36347
Here is the script:
# cat sqrt
#!/bin/bash
if [ $# -ne 1 ]
then
echo Usage: sqrt number
exit 1
else
echo -e "sqrt($1)\nquit\n" | bc -q -i
fi
4.split, 你想把一个大文件分成小的文件块吗?也许是mysqldump导出的文件? split是能够帮你完成任务的命令。
下面我就将一个250MB的文件分成很多个以LF_为前缀2MB大小的文件。
# ls -lh largefile
-rw-r--r-- 1 root root 251M Feb 19 10:27 largefile
# split -b 2m largefile LF_
# ls -lh LF_* | head -n 5
-rw-r--r-- 1 root root 2.0M Feb 19 10:29 LF_aa
-rw-r--r-- 1 root root 2.0M Feb 19 10:29 LF_ab
-rw-r--r-- 1 root root 2.0M Feb 19 10:29 LF_ac
-rw-r--r-- 1 root root 2.0M Feb 19 10:29 LF_ad
-rw-r--r-- 1 root root 2.0M Feb 19 10:29 LF_ae
# ls -lh LF_* | wc -l
126
5.nl 显示行数。在发现nl以前我一直用head命令来这样获取我的程序文件的头。
# head spider.h
/*
* This file define a set of standard spider extensions
*
* Version : 20 18.2.07
*
* Authors : Equal Null
* Copyright (c) 2003-2007 Equal Null, All Rights Reserved.
*/#ifndef _LINUX_SPIDER_H
# nl wireless.h | head
1 /*
2 * This file define a set of standard spider extensions
3 *
4 * Version : 20 18.2.07
5 *
6 * Authors : Equal Null
7 * Copyright (c) 2003-2007 Equal Null, All Rights Reserved.
8 */#ifndef _LINUX_SPIDER_H
www.ixdba.net
6.mkfifo命令是最酷的一个。你肯定知道如何通过grep或者perl来创建一个输出信息的管道(pipeline)。
但是你知道如何用一个命令管道(named pipe)来联通两个命令吗?首先,让我们创建一个管道,并写入如下:

然后从中读取:

7.ldd,想知道java已经连接到了哪个Linux线程库吗?
# ldd /usr/java/jre1.5.0_11/bin/java
libpthread.so.0 => /lib/tls/libpthread.so.0 (0x00bd4000)
libdl.so.2 => /lib/libdl.so.2 (0x00b87000)
libc.so.6 => /lib/tls/libc.so.6 (0x00a5a000)
/lib/ld-linux.so.2 (0x00a3c000)
8.col,想将man帮助文件的页面保存为文本文件吗?
# PAGER=cat
# man less | col -b > less.txt
9.xmlwf,需要知道一个xml文档是否符合格式吗?(或者可能是一个配置文件...)
# curl -s http://www.wbwb.net > bnn.html
# xmlwf bnn.html
# perl -i -pe s@
@
@g bnn.html
# xmlwf bnn.html
bcc.html:104:2: mismatched tag
10.lsof 列举出打开的文件。你可以用它来做很多事情。比如找出哪些端口是打开的:
# lsof | grep TCP
portmap 2587 rpc 4u IPv4 5544 TCP *:sunrpc (LISTEN)
rpc.statd 2606 root 6u IPv4 5585 TCP *:668 (LISTEN)
sshd 2788 root 3u IPv6 5991 TCP *:ssh (LISTEN)
sendmail 2843 root 4u IPv4 6160 TCP badhd:smtp (LISTEN)
vsftpd 9337 root 3u IPv4 34949 TCP *:ftp (LISTEN)
cupsd 16459 root 0u IPv4 41061 TCP badhd:ipp (LISTEN)
sshd 16892 root 3u IPv6 61003 TCP wbwb.net:ssh->wbwb.net:4661 (ESTABLISHED)
使用lsof -i TCP命令也可得到相同信息。
或找出一个用户打开文件的数目。这个命令对于运行Oracle, DB2, 或WebSphere这样的大型应用程序是非常重要:
# lsof | grep root | awk {print $NF} | sort | uniq | wc -l
179
这里的sort | uniq也可以写成sort -u,运行结果都相同.
|
|
|
|
| |
|
|
|
| | |
|