飞道科技

飞道科技文档总汇

linux 命令

  1. pipe
  2. netstat
  3. ss
  4. curl
  5. wget
  6. rsync
  7. find
  8. grep
  9. tree
  10. ps

大部分命令的帮助文档都可以通过 命令名 -h/--helpman 命令名 查看, 推荐优先阅读其英文 man 手册, 可以结合其它中文资料. man.linuxde.net 网站仅供一般性参考, 翻译不太好.

pipe

pipe 管道命令操作符是: “ ”, 它仅能处理经由前面一个指令传出的正确输出信息, 也就是 standard output 的信息, 将其递给下一个命令, 作为标准的输入 standard input. 但是对于 stdandard error 信息没有直接处理能力.

https://www.cnblogs.com/blackay03/p/7838317.html

netstat

打印网络状态信息

netstat 帮助网址

netstat [OPTION]

netstat -a     # 列出所有连接信息
netstat -at    # 列出所有tcp协议连接信息
netstat -au    # 列出所有udp协议连接信息
netstat -l     # 只显示监听端口信息
netstat -lt    # 只列出所有tcp协议监听端口信息
netstat -lu    # 只列出所有udp协议监听端口信息
netstat -n     # 以数字形式显示连接中的地址信息
netstat -anp   # 以数字形式显示连接中的地址信息, 显示进程号和程序名
netstat -anp | grep "java" | wc -l           #查看java进程数

ss

打印网络状态信息, 和netstat类似, 但更好用

ss 帮助网址

ss  [OPTION]

#-a 显示所有 -t 显示tcp协议 -l 显示监听状态
ss -t -a
ss -t -a -l
ss -t -a -l |grep 5672
ss -antup

curl

命令行文件传输工具, 支持 http,https,ftp 等众多协议, 支持断点续传

curl 帮助网址

如果请求比较复杂不知道有哪些参数和Header, 可以打开浏览器的开发者工具后访问页面, 切换到Network栏, 找到并选择请求行, 点击右键Copy–Copy as cURL, 粘贴出来稍加修改, 如图

chrome devtool network tab

curl [OPTION] <url>

# 调用服务 -X 指定http方法 -H http头 --data-binary/-d 参数
curl -XPOST -H 'Content-Type: text/json; charset=UTF-8' --data-binary '{"msg":{"usercode":"guest","userpw":"111111","spaceid":"bjfeidao_353","logintypenew":"usercode"},"spaceid":"bjfeidao_353","type":"loginservice.userlogin"}' 'http://192.168.40.181/sendmessage'

# 由于header中有gzip压缩, 使用 --compressed 解压
curl -XGET 'http://61.163.79.140:15100/nongfu_t/getip' -H 'Pragma: no-cache' -H 'Accept-Encoding: gzip, deflate' -H 'Content-Type: text/json; charset=UTF-8' -H 'Cache-Control: no-cache' -H 'X-Requested-With: XMLHttpRequest' -H 'Connection: keep-alive' -H 'Referer: http://172.16.15.43:8000/pages/test.html' --data-binary '{}' --compressed

curl -XGET 'http://61.163.79.140:15100/nongfu_t/getip' -H 'Pragma: no-cache' -H 'Content-Type: text/json; charset=UTF-8' -H 'Cache-Control: no-cache' -H 'X-Requested-With: XMLHttpRequest' -H 'Connection: keep-alive' -H 'Referer: http://172.16.15.43:8000/pages/test.html' --data-binary '{}'

# 发短信
curl -v -X POST -H "Content-Type:application/x-www-form-urlencoded;charset=UTF-8" -d "account=username001&password=password001&mobile=15038089285&content=您的验证码是:abcd。请不要把验证码泄露给其他人并尽快完成操作。"  http://106.ihuyi.cn/webservice/sms.php?method=Submit

# 调用文件服务下载 -O 保存的文件名和服务器上的相同
curl -v 'http://192.168.40.181/fsweb/getfile?productid=bjfeidao_353&id=451ca78b307346c1a627401f5c6aac25.jpeg' -H 'Accept-Encoding: gzip, deflate' -H 'Accept: image/webp,image/apng,image/*,*/*;q=0.8' --compressed -O

curl -v 'http://192.168.40.181/fsweb/getfile?productid=bjfeidao_353&id=451ca78b307346c1a627401f5c6aac25.jpeg'  -H 'Accept: image/webp,image/apng,image/*,*/*;q=0.8' -O

# 调用文件服务上传base64格式
curl -v -X POST -H 'Content-Type: text/json; charset=utf-8'  -H 'X-Requested-With: XMLHttpRequest' -d '{"file_string":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAM1BMVEUAAAAAYK8AYa8AYK8AYa8AYa8AYq8AYa8AYK8AYa8AYK8AYa8AX68AYK8AYa8AYrD////iTE1+AAAAD3RSTlMAYMAg0PCA4BCgQJBwMLCPnbs3AAAAAWJLR0QQlbINLAAAAAlwSFlzAAAAYAAAAGAA8GtCzwAAAAd0SU1FB+EFEhIHN8tiNjUAAABxSURBVBjTbY9ZEsAgCEMBQezK/W/biN2m0/y9GCIQQSwBCdNQ0TilJdlOkurWHR3xRjTBxTzQ52zqL0zo05ZdnlGKwGDjRWRUwaht8XXe7DaKrtdAGs4V6YuDRPZ7sSxlkxfjW9J3QPvq/rCVv+M+5x+Chwj6tH3bvQAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxOC0wMi0yOFQxMzozMzozNSswODowMFuyIKcAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTctMDUtMThUMTg6MDc6NTUrMDg6MDBefiDLAAAAAElFTkSuQmCC"}' http://192.168.40.181/fsweb/upload?productid=boai

curl -v -X POST -H 'Content-Type: text/json; charset=utf-8'  -H 'X-Requested-With: XMLHttpRequest' -d '{"file_string":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAM1BMVEUAAAAAYK8AYa8AYK8AYa8AYa8AYq8AYa8AYK8AYa8AYK8AYa8AX68AYK8AYa8AYrD////iTE1+AAAAD3RSTlMAYMAg0PCA4BCgQJBwMLCPnbs3AAAAAWJLR0QQlbINLAAAAAlwSFlzAAAAYAAAAGAA8GtCzwAAAAd0SU1FB+EFEhIHN8tiNjUAAABxSURBVBjTbY9ZEsAgCEMBQezK/W/biN2m0/y9GCIQQSwBCdNQ0TilJdlOkurWHR3xRjTBxTzQ52zqL0zo05ZdnlGKwGDjRWRUwaht8XXe7DaKrtdAGs4V6YuDRPZ7sSxlkxfjW9J3QPvq/rCVv+M+5x+Chwj6tH3bvQAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxOC0wMi0yOFQxMzozMzozNSswODowMFuyIKcAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTctMDUtMThUMTg6MDc6NTUrMDg6MDBefiDLAAAAAElFTkSuQmCC","productid":"boai"}' http://192.168.40.181/fsweb/upload

curl -v -XPOST 'http://192.168.40.181/fsweb/upload' -H 'Pragma: no-cache' -H 'Accept-Encoding: gzip, deflate' -H 'Content-Type: text/json; charset=UTF-8' -H 'Accept: */*' -H 'Cache-Control: no-cache' -H 'X-Requested-With: XMLHttpRequest' -H 'Connection: keep-alive' --data-binary '{"productid":"bjfeidao_353","file_string":"data:image/png;base64,此处替换为文件base64值"}' --compressed

# 其它示例
curl http://man.linuxde.net/text.iso --silent -O # --silent不显示进度 -O 下载保持原有文件名

curl http://man.linuxde.net/test.iso -o filename.iso --progress # --progress 显示进度条 -o 将下载数据写入到指定名称的文件

# -C - 断点续传
curl http://192.168.40.181/public/apk/ggpt/com.victop.ggpt.apk --silent -O -C -

# ------------ftp操作------------
# 列出目录 -u 指定用户名密码
curl -u anonymous:123456 ftp://192.168.40.198
# 上传 -T 指定文件
curl -u username001:password001 -T filename001 ftp://192.168.40.198/文件流转/
# 下载具体文件
curl -O ftp://192.168.40.198/文件流转/gxd/gxd.zip

wget

下载工具, 支持断点续传

wget 帮助网址

linux工具之curl与wget高级使用 http://lizhenliang.blog.51cto.com/7876557/1650663

wget [OPTION]... [URL]...

wget -c http://www.linuxde.net/testfile.zip   # -c 支持断点续传

wget --limit-rate=300k http://www.linuxde.net/testfile.zip # 限速下载

wget -i filelist.txt # -i 下载多个文件, filelist.txt 写入文件下载来源

# --miror 镜像下载 -p 下载html页面中引用的文件 --convert-links 下载后将html中引用文件的url转换成本地相对路径url -P 本地保存目录
wget --mirror -p --convert-links -P /tmp http://www.daokes.com

# ------------ftp操作------------
# -r 递归下载目录 -nH 保存时去掉目录名中的主机信息 -P 保存到/tmp目录 --restrict-file-names=nocontrol 处理下载中的中文乱码
wget -r -nH -P /tmp --restrict-file-names=nocontrol ftp://username001:123456@192.168.40.198/文件流转/1-研究院/css3.0

# 匿名下载
wget -r -nH -P /tmp --restrict-file-names=nocontrol ftp://192.168.40.198/文件流转/1-研究院/css3.0

# 下载到目录 /tmp, 只保留目标文件夹名, 去掉/文件流转/1-研究院/ --cut-dirs=2 保存时不创建主机信息后2层目录结构
wget -r -nH -P /tmp --restrict-file-names=nocontrol --cut-dirs=2 ftp://username001:123456@192.168.40.198/文件流转/1-研究院/css3.0

rsync

文件同步/备份工具

rsync 帮助网址

rsync [OPTION] src dst

# src 后加/表示在 dst 不创建 src 目录, 只复制 src 目录下的内容到 dst 下
rsync -avP /tmp/server_py/ /data/server_py

# 使用 ssh 通道传输文件, 需要双方机器安装好 rsync
rsync -avP -e ssh root@192.168.40.202:/data/feidao/* /tmp
# 非标准ssh端口
rsync -avP -e 'ssh -p 1234' root@192.168.40.202:/data/feidao/* /tmp

# --delete 删除那些DST中有而SRC没有的文件(小心使用, 有时你可能需要在目标位置保留那些文件)
# --exclude 同步时排除指定名称的文件或目录
rsync -avP -e ssh --delete --exclude=node_modules root@192.168.40.202:/data/feidao/* /tmp

# --delete-before 传输之前删除 --delete-after 传输之后删除 --del/--delete-during 传输过程中删除 --delete-delay 传输过程中查找删除的文件, 之后删除
# if none of the --delete-WHEN options are specified, rsync will choose the --delete-during algorithm when talking to rsync 3.0.0 or newer, and the --delete-before algorithm when talking to an older rsync

# --exclude-from 排除包含在ex.txt中的文件(按行写, 支持通配符如*) --include-from 包含指定文件
rsync -avP -e ssh --delete --exclude-from=ex.txt root@192.168.40.202:/data/feidao/* /tmp

# 同步时排除文件, 且 --delete-excluded 删除排除的文件
rsync -avP -e ssh --delete-excluded --exclude=feidao-common* /tmp/server_py/ root@192.168.40.202:/tmp/server_py

# -b 同步时备份原文件 --backup-dir 备份到指定位置, 建议使用绝对路径
alias now='date +%Y%m%d%H%M%S'
now=`date +%Y%m%d%H%M%S`
rsync -avPb --backup-dir=/data/back/server-py-`now` /tmp/server_py/ /data/server_py


# 运维常用的更新服务器
alias now='date +%Y%m%d%H%M%S'
# 如果不用/, 可能不会删掉dst中  计划删除的文件
# 如果  用/, 可能  会删掉dst中不计划删除的文件
rsync -avPb -e ssh --delete --backup-dir=/tmp/server_py-`now` /tmp/server_py/* root@192.168.40.202:/tmp/server_py/
rsync -avPb -e ssh --delete --backup-dir=/tmp/server_py-`now` /tmp/server_py/  root@192.168.40.202:/tmp/server_py/

rsync -avPb -e ssh --delete --backup-dir=/tmp/server_py-`now` /tmp/server_py/lib/  root@192.168.40.202:/tmp/server_py/lib
# rsync -avPb -e ssh --delete --backup-dir=server_py-`now` /tmp/server_py/  root@192.168.40.202:/tmp/server_py/    相对路径, 多次同步时  会生成复杂的嵌套结构
# rsync -avPb -e ssh --delete --backup-dir=server_py-`now` /tmp/server_py/* root@192.168.40.202:/tmp/server_py/    相对路径, 多次同步时不会生成复杂的嵌套结构

find

文件查找工具

find 帮助网址

https://www.cnblogs.com/peida/archive/2012/11/16/2773289.html

https://www.cnblogs.com/xqzt/p/5427173.html

http://blog.csdn.net/wirelessqa/article/details/11866987

find [OPTION] [path...] [expression]

OPTION
    [-H] [-L] [-P] [-D debugopts] [-Olevel]
    -O 指定对查询表达式采用的优化级别, 有3个级别. 1 基于名字匹配 2 基于名字匹配之后基于 -type or -xtype 等

path    路径, 相对或绝对

expression 表达式, 可以包含以下组成部分
    OPTIONS 指定命令的选项, 如 -regextype 设置使用哪种类型的正则解析引擎, -maxdepth 设置递归搜索的目录深度
    TESTS 查询条件, 如 -name 指定搜索的文件名, -type 指定文件类型
    ACTIONS 针对查找结果执行的动作, 如 -print 打印结果, -exec 执行指定的命令
    OPERATORS 操作符, 如 ! 表达式非, -o 表达式或

一般初学者在不同的shell环境下使用时可能遇到最多的错误提示 'paths must precede expression', 把表达式加上引号''解决, 另外有时候如果没查到结果, 可以加上引号试试
如 find . -name *.c -print 改为 find . -name '*.c' -print 或 find . -name \*.c -print

# 在 /tmp 目录下查找, 下载nginx代码做测试对象
cd /tmp
wget -c http://nginx.org/download/nginx-1.12.2.tar.gz
tar -zxf nginx-1.12.2.tar.gz

find /tmp -name nginx
find /tmp -name nginx.*
find /tmp ! -name 'nginx.*'
find /tmp -name 'nginx*'
find /tmp -name *.c


# -iname 查找时忽略大小写
find /home -iname "*.txt"

# 当前目录及子目录下查找所有以.txt和.pdf结尾的文件
find . -name "*.txt" -o -name "*.pdf"

# -path 匹配文件路径
find /usr/ -path "*local*"

# -regex 正则匹配 -iregex 忽略大小写的正则
find . -regex ".*\(\.txt\|\.pdf\)$"

# -maxdepth <目录层级>:设置最大目录层级;-mindepth<目录层级>:设置最小目录层级;
find / -maxdepth 3 -name "docker"

# 搜索最近七天内被访问过的所有文件  -atime(时间戳) -type 文件类型
find . -type f -atime -7

UNIX/Linux文件系统每个文件都有三种时间戳:
访问时间(-atime/天,-amin/分钟):用户最近一次访问时间。
修改时间(-mtime/天,-mmin/分钟):文件数据最后一次修改时间。
变化时间(-ctime/天,-cmin/分钟):文件元数据(例如权限等)最后一次修改时间。

# 搜索大于10KB的文件  -size 根据文件大小搜索
find . -type f -size +10k

# -delete 删除匹配的结果
find . -type f -name "*.txt" -delete

# -exec {} 用于与 -exec 选项结合使用来匹配所有文件
# 把当前目录下所有root用户的文件更改属主为 usera
find . -type f -user root -exec chown usera {} \;

# 找出当前目录下所有的 .txt 文件并删除
find ./ -name "*.txt" -ok rm {} \;
# 上例中, -ok和-exec行为一样, 不过它会给出提示, 是否执行相应的操作

# 查找当前目录时 -path ./src/emacs -prune 跳过src/emacs子文件夹及其中的所有内容, 打印出找到的其它所有文件名
find . -path ./src/emacs -prune -o -print

# 查找当前目录或者子目录下名称匹配ngx*的文件或目录, -path ./nginx-1.12.2/src -prune 指定跳过./nginx-1.12.2/src目录
find ./ -path ./nginx-1.12.2/src -prune -o -name 'ngx*'
find ./ -path ./nginx-1.12.2/src -prune -o -name 'ngx*' -print

# 查找 ./nginx-1.12.2 目录下所有以 ngx* 命名的目录及文件 mv 到 /tmp/back 下, 针对多次 mv 的名字冲突, 使用 -S 加后缀不覆盖之前的文件
find ./nginx-1.12.2 -path ./nginx-1.12.2/src -prune -o -name 'ngx*' -exec mv -b -S _1  {} /tmp/back \;
find ./nginx-1.12.2 -path ./nginx-1.12.2/src -prune -o -name 'ngx*' -print

grep

使用正则表达式搜索文本, 并把匹配的行打印出来

grep 帮助网址

grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]

OPTIONS
# 选择正则解析引擎
-E, --extended-regexp 扩展正则
-F, --fixed-strings, --fixed-regexp
-G, --basic-regexp 基本正则
-P, --perl-regexp Perl 兼容正则, 这个好像比 -E 速度快些
-r 递归目录
--include/--exclude/--exclude-from 搜索时包含或排除指定文件
-v/--invert-match 反转匹配, 显示不匹配的数据
find nginx-1.12.2|grep -v stream

# 标记匹配颜色 --color=auto
grep "nginx" file_name --color=auto

# 使用正则表达式 -E
grep -E "[1-9]+"

# -o 只输出文件中匹配到的部分 -c 输出匹配到的行数
grep -o -E "[a-z]+\."

# -n 输出匹配字符串所在的行号
grep -n -o -E "[a-z]+\."

# -w 匹配完整字符串
grep -w "nginx"

其它示例

目标字符串是soa的一段日志

[polymer] 2017-12-28 19:13:29,161 [FeidaoAkkaSystem-exec-dispatcher-441] … { “key” : “p_group_id” , “value” : { “type” : “string” , “fieldLength” : 50 , “serverDateFlag” : 0 , “sele…(length=1234567890123).msgId=a24b62a9-2da2-498d-add1-1fbbdfb46b22.actionId=fb413ae0-75fa-4067-8823-16f79ac6f2a5.耗时=197ms.

需要匹配 “(length=……)” 字样, 其中 “=” 后数字长度大于等于8

grep -P \(length=[0-9]{8\,}\) a.log

grep -P \(length=[0-9]{8}\) a.log

grep -P '\(length=[0-9]{8,}.*\)' a.log
grep -P '\(length=[0-9]{8,}\)' a.log

tree

显示目录结构

tree 帮助网址

tree [OPTION] [path]

# -N 原样输出不可识别字符如中文 -a 显示隐藏文件
tree -Na /tmp

# -D 显示修改时间 -d 只显示目录
tree -ND
tree -NDd

# -P 只显示匹配模式的文件   -I 不显示匹配模式的文件
tree -N -P *.c
tree -N -I *.c

# -i 不以树形结构显示, -f 显示文件完整路径
tree -Nfi

ps

查看进程信息

ps 帮助网址

# 显示所有进程
# unix posix 兼容语法, 选项加 -, 语法格式可以混用, 有个别选项会冲突
ps -e
ps -ef
ps -eF
ps -ely

# BSD 语法, 选项无 -
ps ax
ps alx
ps aux

# 查看进程树
ps -efjH
ps axjf

# 显示线程信息
ps -eLf
ps axms
输出结果
LWP 线程ID 别名 spid, tid
NLWP 进程中的线程个数 别名 thcount