技术开发 频道

闻所未闻 10个你不曾用过的Linux命令

  【IT168 应用】这也许需要几年甚至是几十年,才能真正掌握Linux shell 命令。这里有10个你从来没有听说或使用过的命令。他们在没有特定的顺序。我最喜欢的是mkfifo。

  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, 在tree 格式中列出进程,当有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, 你需要将大的文件分解称若干小部分?split是你的命令,下面是将250MB文件分解为2M的块儿,所有开始于LF_前缀。

  # 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 wireless.h
/*
* This file define a set of standard wireless extensions
*
* Version : 20 17.2.06
*
* Authors : Jean Tourrilhes - HPL
* Copyright (c) 1997-2006 Jean Tourrilhes, All Rights Reserved.
*/#ifndef _LINUX_WIRELESS_H
# nl wireless.h
| head
1 /*
2 * This file define a set of standard wireless extensions
3 *
4 * Version : 20 17.2.06
5 *
6 * Authors : Jean Tourrilhes - HPL
7 * Copyright (c) 1997-2006 Jean Tourrilhes, All Rights Reserved.
8
*/9 #ifndef _LINUX_WIRELESS_H

  6、mkfifo 是最酷的一个,你一定知道如何创建管道 输送grep的结果到LESS,可能甚至perl。但是你知道如何使2个命令通过1个命名管道沟通?看下图,创建管道,开始写到它。

闻所未闻 10个你不曾用过的Linux命令

  然后读取它:

闻所未闻 10个你不曾用过的Linux命令

  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, 想保存帮助页面为纯文本?

# PAGER=cat
# man less
| col -b > less.txt

  9、xmlwf, 需要知道一个XML文档或许是配置文件是否合理?

# curl -s 'http://bashcurescancer.com' > bcc.html
# xmlwf bcc.html
# perl
-i -pe 's@<br/>@<br>@g' bcc.html
# xmlwf bcc.html
bcc.html:
104:2: mismatched tag

  10、lsof 列出打开文件,你可以用它做很多很cool的事情,比如查找哪个接口是开放的?

# 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 badhd.mshome.net:ssh->kontiki.mshome.net:4661 (ESTABLISHED)
Note: OpenBSD
101 pointed out that “lsof -i TCP” a better way to obtain this same information. Thanks!Or find the number of open files a user has. Very important for running big applications like Oracle, DB2, or WebSphere:
# lsof
| grep ' root ' | awk '{print $NF}' | sort | uniq | wc -l
179

  提示,匿名评论者指出应该用“sort -u”代替sort | uniq,本人忘记了-u flag,谢谢!

0
相关文章