linux几个不常用但是很有用的命令

pgrep

pgrep名字前有个p,我们可以猜到这和进程相关,又是grep,当然这是进程相关的grep命令。不过,这个命令主要是用来列举进程ID的

想要找到 SSH 服务器的 PID

  1. > pgrep ssh
  2. 1529
  3. 28439
  4. 28442
  5. 28719

pgrep会在每一行打印一个匹配的进程。-d选项允许你指定一个分隔符

  1. > pgrep ssh -d " "
  2. 1529 28439 28442 28719 28810 28813

-l选项告诉pgrep显示名称和 ID:

  1. > pgrep -l ssh
  2. 1529 sshd
  3. 28439 sshd
  4. 28442 sshd
  5. 28719 sshd

pstree

这个命令可以以树形的方式列出进程

  1. > systemd─┬─NetworkManager───2*[{NetworkManager}]
  2. ├─VGAuthService
  3. ├─abrt-watch-log
  4. ├─abrtd
  5. ├─agetty
  6. ├─atd
  7. ├─auditd───{auditd}
  8. ├─crond
  9. ├─dbus-daemon───{dbus-daemon}
  10. ├─firewalld───{firewalld}
  11. ├─gssproxy───5*[{gssproxy}]
  12. ├─irqbalance
  13. ├─java───28*[{java}]
  14. ├─lsmd
  15. ├─lvmetad
  16. ├─master─┬─pickup
  17. └─qmgr
  18. ├─mcelog
  19. ├─nginx───nginx
  20. ├─ntpd
  21. ├─polkitd───6*[{polkitd}]
  22. ├─redis-server───4*[{redis-server}]
  23. ├─rngd
  24. ├─rpcbind
  25. ├─rsyslogd───2*[{rsyslogd}]
  26. ├─smartd
  27. ├─sshd─┬─sshd───sshd───sftp-server
  28. └─sshd─┬─bash───pstree
  29. └─sftp-server
  30. ├─systemd-journal
  31. ├─systemd-logind
  32. ├─systemd-udevd
  33. ├─tuned───4*[{tuned}]
  34. └─vmtoolsd───2*[{vmtoolsd}]

bc

这个命令主要是做一个精度比较高的数学运算的。比如开平方根等。下面是一个我们利用bc命令写的一个脚本(文件名:sqrt)

  1. #!/bin/bash
  2. if [ $# -ne 1 ]
  3. then
  4. echo 'Usage: sqrt number'
  5. exit 1
  6. else
  7. echo -e "sqrt($1)\nquit\n" | bc -q -i
  8. fi
  1. > ./sqrt.sh 123.00
  2. sqrt(123.00)
  3. 11.09
  4. quit

split

如果你有一个很大的文件,你想把其分割成一些小的文件,那么这个命令就是干这件事的了

  1. > split -b 100m mysql.tar
  2. > ls -lh
  3. -rw-r--r--. 1 root root 517M Jun 21 22:35 mysql.tar
  4. -rw-r--r--. 1 root root 100M Jun 21 22:35 xaa
  5. -rw-r--r--. 1 root root 100M Jun 21 22:35 xab
  6. -rw-r--r--. 1 root root 100M Jun 21 22:35 xac
  7. -rw-r--r--. 1 root root 100M Jun 21 22:35 xad
  8. -rw-r--r--. 1 root root 100M Jun 21 22:35 xae
  9. -rw-r--r--. 1 root root 17M Jun 21 22:35 xaf

文件合并

  1. > cat xa* > mysql.tar

nl

nl命令其它和cat命令很像,只不过它会打上行号

  1. > nl rumenz.sh
  2. 1 123
  3. 2 345
  4. 3 rumenz.com
  5. 4 111
  6. 5 222

ldd

这个命令可以知道你的一个可执行文件所使用了动态链接库

  1. > ldd /usr/bin/ls
  2. linux-vdso.so.1 => (0x00007ffdb51ba000)
  3. libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f4518ead000)
  4. libcap.so.2 => /lib64/libcap.so.2 (0x00007f4518ca8000)
  5. libacl.so.1 => /lib64/libacl.so.1 (0x00007f4518a9f000)
  6. libc.so.6 => /lib64/libc.so.6 (0x00007f45186d1000)
  7. libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f451846f000)
  8. libdl.so.2 => /lib64/libdl.so.2 (0x00007f451826b000)
  9. /lib64/ld-linux-x86-64.so.2 (0x00007f45190d4000)
  10. libattr.so.1 => /lib64/libattr.so.1 (0x00007f4518066000)
  11. libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f4517e4a000)

col

这个命令可以让你把man文件转成纯文本文件。如下示例:

  1. > PAGER=cat
  2. > man ls | col -b > ls.txt

lsof

可以列出打开了的文件。

  1. > lsof rumenz.txt 显示开启文件rumenz.txt的进程
  2. > lsof -c nginx 显示出以字母nginx开头进程现在打开的文件
  3. > lsof -p 1234 列出进程号为1234的进程所打开的文件
  4. > lsof -g gname/gid 显示归属gnamegid的进程情况
  5. > lsof -u uname/uid 显示归属unameuid的进程情况
  6. > lsof +d /usr/local/ 显示目录下被进程开启的文件
  7. > lsof +D /usr/local/ 同上,但是会搜索目录下的目录,时间较长
  8. > lsof -d 4 显示使用fd4的进程
  9. > lsof -i 用以显示符合条件的进程情况

返回笔记列表
入门小站