目录

10个容易遗忘但好用的Linux命令

1) pgrep

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

1
$ pgrep -u  username_xx

​ 这个命令相当于:

1
2
##效果待定,awk命令不熟悉(逃
ps -ef | egrep '^username_xx' | awk '{print $2}'   

2)pstree

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

3)bc

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

1
2
3
4
5
6
7
8
#!/bin/bash
if [ $# == 0 ]
then    echo 'Usage: sqrt number'    
	exit 1
else    
	echo -e "sqrt($1)\nquit\n" | bc -q -i
fi
#运行方式:./squar.sh   或者 ./square.sh  10.00

4)split

​ 把一个很大的文件分割成一些小的文件,注意,split执行后源文件仍然在的。

1
2
3
4
5
6
#例如把上文的square.sh分割成多个文件,先查看大小,发现是124字节
ls -al 
#sqx_为前缀,会得到3个文件:sqx_aa,sqx_ab,sqx_ac
split  -b   50  square.sh   sqx_  
#把文件重新合并,使用cat命令即可
cat  sqx_*  > square.sh.new

5)nl

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

1
2
3
4
5
6
7
#不加后续的head命令也可以
benjamin@ubuntu:~$ nl square.sh | head -n 5
     1	#!/bin/bash
     2	if [ $# == 0 ]
     3	then    echo 'Usage: sqrt number'    
     4		exit 1
     5	else 

6)mkfifo

​ mkfifo的作用是创建一个有名管道,平时使用的较多的是无名管道,例如“ls | grep txt”.

​ 有名管道创建后可以像文件一样存在文件夹中,像是一个缓存区。

​ 使用举例如下:

1
2
3
4
5
6
#在终端窗口1执行如下命令,ls没有输出内容
mkfifo  pipex
ls  >  pipex

#打开终端窗口2执行如下命,会看到 ls 命令输出的内容
cat  <   pipex 

拓展:常用的管道命令有==>

  • cut、grep、sort、wc、uniq
  • tee:重定向,既能在屏幕输出,又能保存到文件中
  • tr、col、join、paste、expand、split

7)ldd

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

1
2
###假设有个文件calc.so,命令后接文件名即可,具体参数选项可参照命令help内容
ldd calc.so

8)col

​ Linux col命令用于过滤控制字符。

​ 在许多UNIX说明文件里,都有RLF控制字符。当我们运用shell特殊字符">“和”»",把说明文件的内容输出成纯文本文件时,控制字符会变成乱码,col指令则能有效滤除这些控制字符。

​ 下面以 man 命令帮助文档为例,讲解col 命令的使用。

​ 将man 命令的帮助文档保存为man_help,使用-b 参数过滤所有控制字符。在终端中使用如下命令:

1
2
#man命令用法,man + linux命令
man man | col -b > man_help 

9)xmlwf

​ 这个命令可以让你检查一下一个XML文档是否是所有的tag都是正常的。

10)lsof

​ 这个命令可以列出打开了的文件,执行lsof | grep TCP

1
2
3
4
5
[benjamin@RHELSVR5 ~]# lsof | grep TCP
httpd       548    apache    4u     IPv6   14300967    TCP *:http (LISTEN)
httpd       548    apache    6u     IPv6   14300972    TCP *:https (LISTEN)
httpd       561    apache    4u     IPv6   14300967    TCP *:http (LISTEN)
httpd       561    apache    6u     IPv6   14300972    TCP *:https (LISTEN)

还可以代替netstat命令查看本机开放的网络端口,执行lsof -n -P -i TCP -s TCP:LISTEN

1
2
3
4
5
6
[benjamin@Mac-mini]#  lsof -n -P -i TCP -s TCP:LISTEN
COMMAND     PID     USER   FD   TYPE    DEVICE   SIZE/OFF NODE NAME
PicGo      4627 benjamin   55u  IPv4 0x37a9d32411      0t0  TCP 127.0.0.1:36677 (LISTEN)
nginx     40321 benjamin    8u  IPv4 0x37a9d32411      0t0  TCP *:1935 (LISTEN)
nginx     40321 benjamin    9u  IPv4 0x37a9d32411      0t0  TCP *:12306 (LISTEN)
nginx     40322 benjamin    8u  IPv4 0x37a9d32411      0t0  TCP *:1935 (LISTEN)

杀死占用指定端口的进程:

比如hugo服务的默认预览端口1313被占用了,执行下方指令:

1
2
3
4
5
sudo lsof -i :1313
# 输出端口相关的进程列表,第一列就是command,比如说是nginx
ps -ef | grep hugo 
# 输出所有nginx的进程,第二列就是PID,找到对应的那个nginx进程PID,比如4366
sudo kill  -9  4366