前言
感觉自己年纪越来越大,记性越来越不好使了, 所以想做个备忘。将自己常用的一些 shell 指令记一下。 一方面是有时候想用的时候,忘记了。 一方面是有些指令略长, 有时候也会忘记了一部分细节。 所谓好记性不如烂笔头。 还是做下备忘比较靠谱。 (天天用就还好,没那么容易忘,问题是有些指令半个月一个月才用一次,每次都会忘记一部分细节,也是蛋疼)
常用指令
1.查看程序重启是不是 oom 导致的
有时候程序会无缘无故重启,这时候就要看 error log,是 panic 还是 fatal, 但是有时候 error log 也是空的,但是这时候就要看是不是因为内存原因被系统杀死了,所以查看指令如下:1
sudo dmesg -T | egrep -i -B100 'killed process'
如果发现是 Out of memory
:1
2[Sun Jun 28 00:01:32 2020] Out of memory: Kill process 14458 (dataflow) score 265 or sacrifice child
[Sun Jun 28 00:01:32 2020] Killed process 14458 (dataflow) total-vm:1573556kB, anon-rss:1029640kB, file-rss:0kB, shmem-rss:0kB
那么就要考虑是不是机器的内存不够用了。要不要升内存之类的。
2.使用 rz 上传文件,并且覆盖文件
我们有时候会需要往服务器上传文件,正常指令是这样子的:1
rz -E
但是他并不会覆盖源文件, 所以如果要覆盖源文件的话,那么就是加上参数 -y
:1
2[kbz@centos156 lang]$ sudo rz -E -y
z waiting to receive.**B0100000023be50
3.netstat 工具检测开放端口
有时候我们要检查某一个端口有没有开放,这时候就可以用这个:1
netstat -anlp | grep [port]
比如1
2
3[kbz@centos156 ~]$ netstat -anlp | grep 28881
(No info could be read for "-p": geteuid()=1003 but you should be root.)
tcp6 0 0 :::28881 :::* LISTEN -
4.使用 alias 别名来保存
有时候一些指令太长了,又要经常打,好麻烦,所以可以用别名来保存, 具体看 linux 使用 alias 来简化 docker 命令
5.grep 多级查询
有时候我们需要进行多次过滤的查询,那么就可以用 grep 配合管道来实现。 比如一下两个是一样的效果1
2
3
4[kbz@VM_32_5_centos ~]$ cat /var/log/supervisor/data.info.lo* | grep 'replace it' | grep '30241' | grep 'e6844a71057d059ab4402f8f9c1ab849' | wc -l
21678
[kbz@VM_32_5_centos ~]$ cat /var/log/supervisor/data.info.lo* | grep 'replace it' | grep '30241' | grep -c 'e6844a71057d059ab4402f8f9c1ab849'
21678
6.使用 locate 快速查找文件
有时候想要在服务器查找某一个文件,或者某一个目录,就要用这个命令 locate, 会比较快。
比如我想在服务器上找到 zookeeper 这个服务所在的目录,就可以这样做:
1 | [kbz@centos156 ~]$ locate zookeeper |
非常快,比 find --name
更快, locate命令其实是find -name的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/locatedb,这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb 命令,手动更新数据库。 还可以指定目录,比如:1
locate /etc/sh
搜索etc目录下所有以sh开头的文件
7.grep 从多个文件查询字符串
这个也很简单,多个文件,就用 * 通配符,比如:1
$ grep 'paypal agreement execute error:' '2017-11-'*.log
8.查看某个进程有没有启动
1 | ps -aux | grep 'bitdatasrv' |
比如:1
2
3
4[kbz@localhost supervisor]$ ps -aux | grep 'bitdatasrv'
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.7/FAQ
kbz 837 0.0 0.0 61200 760 pts/4 S+ 07:38 0:00 grep bitdatasrv
airdroid 32235 0.2 0.0 260432 14048 ? Sl 06:35 0:08 /data/server/goSrv/bitdatasrv/bitdatasrv
9.设置软链接
比如给 nginx 配置文件设置软链接:1
sudo ln -s ../sites/www.com.conf www.com.conf
10.拷贝文件夹
1 | cp -r /source/a /target/a |
其实有几个参数可以参考:
-b
同名,备分原来的文件-f
强制覆盖同名文件-r
按递归方式保留原目录结构复制文件
11.使用 tail -f 追踪实时log
这个几乎是最常见的,而且可以通过 -n 来显示最后的几条,比如:1
tail -f -n 1000 a.log
显示 a.log 的 最后1000 行,并实时跟进这个log的更新,并显示到console上。
12.删除目录
1 | rm -rf dir |
强行删除目录dir下的所有文件、子目录下的所有文件和目录、删除dir本身。
13.解压zip包
以前经常要把前端打的zip包传到服务器上,并解压。最简单的就是:1
unzip xxx.zip
解压 xxx.zip 到当前目录。 还有一个用法就是解压到指定目录 -d
:
unzip xxx.zip -d ..
或者 unzip -d .. xxx.zip
其实就是解压 xxx.zip 到上级目录, 因为有时候会覆盖文件,这时候shell会提示是否覆盖,这时候就要手动打 y(覆盖一个) 或者 a(覆盖全部), 如果用 -o 参数,那么就会在不提示的情况下进行覆盖:1
unzip -o xxx.zip
解压 xxx.zip 到当前目录并且在不提示的情况下进行全部覆盖, 或者是:1
unzip -o -d /tmp/ xxx.zip
解压到 /tmp/目录,并且在不提示的情况下进行全部覆盖。
14.获取出口 ip
1 | [kbz@centos156 ~]$ curl http://members.3322.org/dyndns/getip |
15.获取线路
一般用来查看,挂代理是否成功,比如:1
2
3
4
5
6
7
8
9
10[kbz@ip-11-0-2-38 ~]$ curl cip.cc
IP : 54.xxx.xxx.31
地址 : 日本 东京都 东京
运营商 : amazon.com
数据二 : 日本 | 东京都亚马逊(Amazon)公司数据中心
数据三 :
URL : http://www.cip.cc/54.xx.xx.31