shell命令集合

进程相关

  • nohup

守护进程启动

nohup execShell >> ps.log 2>&1 &

查看nohup启动的进程

jobs -l
  • awk

awk提取进程ID

ps aux | grep download | grep -v grep | awk '{print $2}'

杀掉某进程

ps -ef | grep pm2 | grep -v grep  | awk '{print $2}' | xargs kill -9
  • lsof

查看使用某端口的进程

lsof -i:8080

  • netstat

查看使用某端口的进程

netstat -ap | grep 8080

找到进程ID后,查看其占用的端口

netstat -nap|grep 7779

目录相关命令

  • cd

进入指定目录

  • ls

查看一级目录

  • tree

查看多级目录

控制深度 tree -L 3

  • pwd

显示当前工作目录

  • mkdir

  • 普通目录 mkdir test

  • 递归目录 mkdir -P test/test1

  • 创建指定权限目录 mkdir -m 777 test3

  • rm

删除文件

自定义回收站功能

myrm(){ D=/tmp/$(date +%Y%m%d%H%M%S); mkdir -p $D; mv "$@" $D && echo "moved to $D ok"; }
alias rm='myrm'
  • mv

移动

  • cp

复制

sed

tr

docker rmi `docker images | grep none | awk '{print $3}' | tr "\n" " "`

touch

常用来新建文件

cat

查看文件内容

显示行号

cat -n test.log  

nl

nl test.log

cat -n test.log

more

逐页阅读

  • space下一页
  • b上一页

less

less 与 more 类似

less 在查看之前不会加载整个文件。

head -n 5 vim.md

tail

tail -n 5 vim.md

which

查找某个文件命令

  • which 查看可执行文件的位置
  • whereis 查看文件的位置
  • locate 配合数据库查看文件位置。
  • find 实际搜寻硬盘查询文件名称。

whereis

whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)

和find相比,whereis查找的速度非常快,这是因为linux系统会将 系统内的所有文件都记录在一个数据库文件中, 当使用whereis和下面即将介绍的locate时,会从数据库中查找数据,而不是像find命令那样,通 过遍历硬盘来查找,效率自然会很高。

但是该数据库文件并不是实时更新,默认情况下时一星期更新一次 ,因此,我们在用whereis和locate 查找文件时,有时会找到已经被删除的数据, 或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有被更新。

locate

locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案。 其方法是先建立一个包括系统内所有档案名称及路径的数据库,之后当寻找时就只需查询这个数据库, 而不必实际深入档案系统之中了。在一般的 distribution 之中,数据库的建立都被放在 crontab 中自动执行。

locate 查找的是本地数据库,效率较高,但数据库更新不够实时

更新数据库命令

  • linux

    $ updatedb
    
  • macOX系统

    sudo /usr/libexec/locate.updatedb
    

建立链接

sudo ln -s /usr/libexec/locate.updatedb /usr/local/bin/updatedb
updatedb

find

查找文件

find . -name 'filename'

查找目录下的所有文件中是否含有某个字符串

find . | xargs grep -r "查找的字符串"

curl

发起一个 HTTP 请求

curl -X POST http://localhost:3000/api/posts --data '{"title":"controller", "content": "what is controller"}' --header 'Content-Type:application/json; charset=UTF-8'

HTTP 请求的内容就会是下面这样的

POST /api/posts HTTP/1.1
Host: localhost:3000
Content-Type: application/json; charset=UTF-8
{"title": "controller", "content": "what is controller"}

下载shell脚本并运行

curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh

传递参数

curl http://foo.com/script.sh | bash -s arg1 arg2

date

date "+%Y-%m-%d"

dig命令详解

dig跟nslookup都是DNS查询工具

dig,其实是一个缩写,即Domain Information Groper。

基本的命令格式

dig @dnsserver name querytype

举个栗子

用google-DNS来查baidu.com的A记录

dig @8.8.8.8 www.baidu.com A

注意

  • dig默认使用/etc/resolv.conf里的地址作为上连DNS服务器
  • querytype可以设置A/AAAA/PTR/MX/ANY等值,默认是查询A记录。

一些常用选项

  • -c选项,可以设置协议类型(class),包括IN(默认)、CH和HS。
  • -f选项,dig支持从一个文件里读取内容进行批量查询,这个非常体贴和方便。文件的内容要求一行为一个查询请求。
  • -4和-6两个选项,用于设置仅适用哪一种作为查询包传输协议,分别对应着IPv4和IPv6。
  • -t选项,用来设置查询类型,默认情况下是A,也可以设置MX等类型
  • -q选项,其实它本身是一个多余的选项,但是它在复杂的dig命令中又是那么的有用。-q选项可以显式设置你要查询的域名,这样可以避免和其他众多的参数、选项相混淆,提高了命令的可读性
  • -x选项,是逆向查询选项。可以查询IP地址到域名的映射关系。

dig特有的查询选项(query option)

和刚才的选项不同,dig还有一批所谓的“查询选项”,这批选项的使用与否,会影响到dig的查询方式或输出的结果信息,因此对于这批选项,dig要求显式的在其前面统一的加上一个“+”(加号),这样dig识别起来会更方便,同时命令的可读性也会更强。 dig总共有42个查询选项,涉及到DNS信息的方方面面,如此多的查询选项,本文不会一一赘述,只会挑出最最常用的几个重点讲解。

  • 【TCP代替UDP】

众所周知,DNS查询过程中的交互是采用UDP的。如果你希望采用TCP方式,需要这样:

dig +tcp www.baidu.com
  • 【默认追加域】

大家直接看例子,应该就能理解“默认域”的概念了,也就能理解+domain=somedomain的作用了:

dig +domain=baidu.com image
  • 【跟踪dig全过程】

dig非常著名的一个查询选项就是+trace,当使用这个查询选项后,dig会从根域查询一直跟踪直到查询到最终结果,并将整个过程信息输出出来。

dig +trace www.baidu.com
  • 【精简dig输出】

使用+nocmd的话,可以节省输出dig版本信息。

使用+short的话,仅会输出最精简的CNAME信息和A记录,其他都不会输出

使用+nocomment的话,可以节省输出dig的详情注释信息。

使用+nostat的话,最后的统计信息也不会输出。

du

常用于清理磁盘空间

  • df – display free disk space
  • du – display disk usage statistics

查看子目录占用空间大小

du -lh –max-depth=1

df

参考du

man

命令手册

sed

修改文件的内容

sed – stream editor, 流式处理方式

centos下

sed -i "s/oldstring/newstring/g" `grep oldstring -rl yourdir`

Mac OS下

sed -i "" "s/oldstring/newstring/g" `grep oldstring -rl yourdir`

scp

同步文件

从本地到远程

scp local_file remote_username@remote_ip:remote_folder

从远程到本地

scp remote_username@remote_ip:remote_folder local_file

rsync

同步远目录

基于scp实现,支持断点续传

rsync -e “ssh -i ~/.ssh/authorized_keys” -avr src/ root@remote_ip:/opt

telnet

连接tcp服务器

$ telnet ${ipaddress} ${port} 

nc

查看进程信息

杀进程常用

ps -ef | grep pm2 | awk '{print $2}' | xargs kill -9

netstat

查看网络端口占用

netstat -an | grep 3000

lsof

查看网络端口占用

lsof -i:3000

grep

查找文件中是否包含某个字符串

xargs

之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就有了xargs命令

例如:

find /sbin -perm +700 | ls -l       这个命令是错误的
find /sbin -perm +700 | xargs ls -l   这样才是正确的

xargs 可以读入 stdin 的资料,并且以空白字元或断行字元作为分辨,将 stdin 的资料分隔成为 arguments 。