shell
常用通配符
*表示匹配任意一个或多个字符
? 表示匹配任意一个字符
[] 匹配括号内任何单字符
重定向
包含输入,输出,错误重定向
输入重定向
< 和 <<可用来输入重定向
<
<<
输出重定向
> 和 >> 可用来输出重定向
错误重定向
用2> 和 2>>实现
管道
管道可以把一个命令的输出当作下一个命令的输入
引用字符
有转义字符,单引号和双引号
转义字符 将单个字符当作普通字符
单引号 单引号之间所有特殊字符含义将被忽略
双引号 和单引号功能类似 区别是保留了部分特殊字符的含义
基础运维命令
打包 压缩 解压缩
tar
命令选项
-c 创建新的压缩文件
-f 该选项后紧跟压缩文件的文件名(自己给压缩文件起的名字)
-r 将文件追加到已压缩文件的末尾(可以和-f连用)
-x 解压压缩文件,后跟压缩文件名
-u 更新压缩文件中被压缩的某个文件
-z 用gzip命令压缩或解压缩
-w 还原文件时,将文件修改时间改为当前时间
-j 调用bzip2命令压缩或解压缩
-Z 调用compress命令过滤压缩文件
-v 压缩或解压过程,显示各个文件名
-p 压缩或解压缩过程,保持文件属性不变
--exclude filename 压缩过程不将指定的文件压缩
-t 查看压缩包内容 和-f连用
例子
-c -x -r -f的用法
-u的用法
注意-v和-f,如果放在一块写,-v要放在f前面,否则报错
-t的用法
仅解压压缩包内某个文件
gzip
gzip是gunzip的硬链接,gzip只能压缩文件,不能压缩目录,即使指定目录,也只能压缩目录下所有文件,而不是目录,gzip的压缩文件默认后缀为.gz
选项
-d 解压
-r 递归压缩
-t 检查压缩文件完整性
-v 显示每个压缩文件的文件名和压缩比
-l 显示压缩文件信息
-num 指定压缩级别 -1或-fast表示最低压缩级别 -9或-best表示最高压缩级别 默认压缩级别为6
例子
bzip2
类似gzip,但bunzip2是bzip2的软链接,生成压缩文件默认后缀为.bz2,
选项
-d 同gzip 解压
-t 同gzip 校验完整性
-v 同tar gzip 压缩过程中显示压缩的文件信息
-k gzip bzip压缩文件默认会删除原始文件 -k可保留原始文件
-f 当目标压缩文件已存在时 压缩默认不会覆盖 如果要覆盖可用-f强制覆盖
-num 压缩级别 同gzip
查找 搜索文件
find
选项
-name 表示搜索的目标文件名 支持正则搜索
-lname 查找名字匹配的链接文件 可正则
-empty 查找空文件或空目录
-path 查找路径名匹配的文件 可正则
-user/-group 查找某用户/用户组所属的文件
-type 查找的文件类型
-exec 对查找的文件执行命令 文件名用{}表示
-ok 对找到的目标文件执行命令 提示用户是否执行 而不是直接执行
-/+mtime +n表示n天以前改动的文件 -n表示n天前到今天改动的文件
-o 相当于逻辑运算or
-a 相当于逻辑运算and
例子
prune用法
xargs
linux命令可以从两个地方读取要处理的内容:命令行参数或标准输入
cat a表示cat从文件传入内容,文件a不存在时会报错,而不会转而从标准输入读取内容,只能cat a -同时cat标准输入和文件a的内容,-表示从标准输入读取数据。
有的命令不支持从标准输入读取,而只支持从命令行读取输入,比如rm kill。对于kill 有几种方式实现:
1 kill ps -ef|grep 'abc'
2 for proc_id in $(ps -aux|grep 'abc'|awk '{print$2}'); do kill -9 $proc_id; done
3 ps -aux|grep 'abc'|xargs kill
其中xargs功能是将管道读取到的(即从标准输入读取到的)内容按空格(默认空格)分割成多个参数并,作为标准输入命令行参数提供给xargs后面跟的命令,这和管道不同,管道只是标准输出变成标准输入,和命令行参数没有关系,看个例子
xargs -i -t
xargs会将所有分割的参数作为一个整体传给命令多个参数的最后一个参数,如果用mv等需要多个参数的命令则不行。
-i 将xargs分割的每个参数作为一个单独参数 然后对每个参数循环执行命令
-t 对每个执行的命令会在执行前打印到stderr再执行
-p 和-t类似 执行命令前询问你
-d 执行xargs分隔符,默认是空格作为分隔符
xargs后如果不加命令默认会执行echo 也可以理解为默认到stdout 用-t验证是加了echo的
分批执行 即将xargs分割的所有参数 几个作为一批 循环传给后面的命令 可以用-n
-n 3或-n3表示所有参数以三个为一批传给后面的命令
需注意xargs默认不会对空白处理。
一种处理方法是指定分隔符,不用默认的空格分割,ls的每个文件名前后应该有个换行,可以-d指定用换行符作为xargs的分隔符
另一种处理方法是用xargs的-i将find或ls的结果作为一个整体,忽略其中的空格,注意-i和{}用,括号外要有引号
xargs和find命令都属于一个包findutils find和xargs连用也可以
文件连接 合并 排序 去重
join
将两个文件中指定列中内容相同的行连接
paste
直接将多个文件行左右连接起来 和join不同 不是只对指定列相同的行合并
sort
-n 使用纯数字排序,默认用字母顺序排序
-t 指定分隔符
-k -k3表示以分隔符分隔结果的第三个元素排序
-r 反向排序
uniq
删除重复行
-c 显示重复行出现次数
-d 显示重复行有哪些
注意 uniq只能删除相邻的相同行 如果不相邻的相同行无法去重 可以和sort连用
系统运维监控类命令
查询进程的线程数
检测僵尸进程
僵尸进程是已死掉的进程,kill的进程变成孤儿进程,孤儿进程会被1号进程(init或systemd)处理,1号进程周期调用wait清理僵尸进程
看占cpu或内存最多的几个进程
看cpu最高前10进程
注意没有用ps的按cpu排序,排序用了sort的-k3,-r表示倒序排列,-n表示排序按数字大小而非字母表顺序排序
看内存最高前10进程
和cpu的类似,以第四列排序,sort -k3改成sort -k4即可
网络故障排查类命令
wget
wget是一个文件下载工具
下载单个文件
wget http://some_domain/url/xxx.tar.gz
限速下载
wget默认可能占用大量甚至全部带宽,可限速下载,用--limit-rate=xxx(MB/KB/...)进行限速
wget -c断点下载
下载文件很大但网速很慢,可用断点下载,假选项-c即可自动断点下载。当网断了,不用手动,-c可以自动继续下载
断点续传是在http请求头加入range头告诉服务器 客户端已经下载了多少字节 等文件所有碎片下载完成后再拼接起来
一般apache nginx服务器默认开启断点传输 具体应该可配置 没细看
wget -S可打印服务器http响应头,若响应头包含"Accept-Ranges"则说明服务器支持断点传输
指定下载文件的文件名
wget下载的文件默认名称为以/作为分隔符分割结果的最后一个元素,这有时候不是文件名,若希望指定下载文件名,可用-O选项
curl
显示服务器的header信息
curl可用显示服务器的请求头 加选项-I即可仅显示header 而不显示请求返回内容
获取请求的返回码
curl -s -o /dev/null -w %{http_code}"\n" http://www.baidu.com
-s 表示安静模式 不输出错误 不显示进度条
-o 指定输出结果目的地
-w 表示输出一些定义的元数据 格式是%{variable_name} 可供使用的变量有很多比如http_code http_connect time_total time_appconnect time_redirect等
curl实现地址重定向
当请求的页面从原本站点移动到其他站点,可使用-L选项,源请求会自动重定向到移动到的其他站点,比如某些http请求会自动重定向到https
抓取网页并保存到本地
curl也能向wget那样保存请求相应内容为文件
-o后跟文件名
-O后不用跟东西 默认文件名为远端服务器的文件名
curl断点传输
加配置项-C -即可实现自动断点传输
限制传输速度
和wget类似 也可以限速 配置项也一样 --limit-rate
scp
可双向传输
-r 传输目录下所有文件
-P 指定连接端口 默认端口22
-l 5 限速 单位是Kbit/s
mtr
一般检查网络连通性 可用ping 不通再用traceroute 或者用nslookup看dns解析。多个命令组合用较麻烦 可以尝试使用mtr命令
左边一列是跳的ip地址 右边好几列 从左往右依次如下
Loss 丢包率百分比
snt 发送的包数量
Last 最后一个包延时
Avg 平均延时
Best 最佳延时
Wrst 最差延时