Linux运维基础学习笔记-第一章
目录
- 通配符
- 输入输出重定向
- 管道符
- 三种引用符
1.1基础命令格式
多行输入一个命令,使用\分隔
cp –i \
>f1
>f2
1.1.1通配符
1.1.1.1 通配符*
匹配一个多多个字符
ls *.txt
cp doc/* /opt
ls –al /etc/*/*/*.conf
1.1.1.2 通配符?
匹配任意单一字符
ls a?.txt
ls a??.txt
1.1.1.3 通配符[ ]
匹配方括号内的内容
ls /dev/sda[12345]
ls /dev/sda[1-5]
1.1.1.4 组合使用
ls [0-9]?.conf
ls [xyz]*.txt
1.1.2输入输出重定向
1.1.2.1输入重定向
wc < /etc/test.txt
>1 1 7 #行数 单词数 字符数
[root@localhost leoblog]# wc << aa
> dasd
> sdasd
> aa
2 2 11 #将aa间内容作为输入
1.1.2.2输出重定向
ps –ef ? ps.txt
cat f1 f2 f3 > f4 #f1f2f3合并为f4 >>为追加
2> 或2>> 错误重定向
1> 将正确的输出重定向到某个文件
2> 将错误的输出重定向到某个文件
2>&1 标准错误重定向到标准输出
2>1和2>&1的写法有什么区别:
• 2>1的作用是把标准错误的输出重定向到1,但这个1不是标准输出,而是一个文件!!!,文件名就是1;
• 2>&1的作用是把标准错误的输出重定向到标准输出1,&指示不要把1当作普通文件,而是fd=1即标准输出来处理
&>/dev/null 正确输出或错误输出结果都不要
1.1.3管道符
ls –al /etc/* | more
ps aux | grep httpd | wc -l
1.1.4三种引用符
1.1.4.1 转义符\
mv c\:\\backup backup
mv abc\?\* abc
1.1.4.2 单引号''
字符间所有特殊含义都将忽略
mv 'c:\backup' backup
1.1.4.3 双引号""
与单引号基本相同,除了$ \ ` 仍然保留特殊含义
1.2基础运维类命令
1.2.1压缩与解压缩
1.2.1.1 tar
主选项 | 含义 |
-c | 创建新文件 |
-r | 将要归档文件追加到文件末尾 |
-t | 列出已经归档的文件列表 |
-x | 从归档文件中还原出文件 |
-u | 更新文件 |
辅助选项 | 含义 |
-z | 调用gzip |
-w | 在还原文件时,将文件修改时间设定为现在时间 |
-j | 调用bzip2 |
-Z | 调用compress命令过滤文档 |
-f | -f后面不能更其他选项 |
-v | 显示过程 |
-p | 保持文件属性不发生变化 |
-N “yyyy/mm/dd” | 指定日期之后的文件才压缩 |
--exclude f1 | 指定f1文件不打包 |
tar –cvf /opt/leo.tar /etc
tar –zvf /opt/leo.tar.gz /etc
tar –jvf /opt/leo.tar.bz2 /etc
tar –zcvf /opt/leo.tar.bz2 /opt
tar –N "2019/1/1" -zcvf log.tar.gz /var/log
自动备份脚本
#!/bin/bash
datetime=`date +%Y_%m_%d`
days=7
backup_user=`whoami`
#备份文件路径
backup_dir=/opt
#需备份文件
backup_file=/leo/txt
#备份日志
backup_log=${backup_user}_$datetime.log
#备份名称
backup_filename=${backip_user}_$datetime.tar.gz
#远程路径
romote_path=/opt/backup
remote_ip="192.168.1.101"
cd ${backup_dir}
mkdir -p ${backup_user}
cd ${backup_user}
echo "备份开始${datetime}" > ${backup_log}
echo "--------------" > ${backup_log}
#备份目录及日志文件
tar -zcvf ${backup_filename} ${backup_file} ${backup_log}
#删除备份过程的日志
#-type f,表示只找file,文件类型的,目录和其他字节啥的不要
#-exec 把find到的文件名作为参数传递给后面的命令行,代替{}的部分
#替换当前的shell却没有创建一个新的进程。进程的pid保持不变
#-exec后便跟的命令行,必须用“ \;”结束
find ${backup_dir}/${backup_user} -type f -name "*.log" -exec rm {} \;
#删除7天前的备份
find ${backup_dir}/${backup_user} -type f -name "*.tar.gz" -mtime +$days -exec rm -rf {} \;
#将备份远程至服务器
rsync -avzPl ${backup_dir}/${backup_user}/${backup_filename} ${remote_ip}:${romote_path}
1.1.2.2 gzip/gunzip
只能压缩文件不能压缩目录
选项 | 含义 |
-d | 解压 |
-r | 递归 |
-t | 检查完整性 |
-v | 显示过程 |
-l | 显示压缩文件信息 |
-num | 压缩级别:-1或-fast最低,-9最高,默认-6 |
zip –r /opt/leo.zip /opt/leo
gzip -9v /opt/leo.zip #对leo.zip进行压缩,级别9
gzip –d 等价于 gunzip
1.1.2.3 bzip2/bunzip2
类似于gzip/gunzip
选项 | 含义 |
-d | 解压 |
-v | 显示详细 |
-k | 默认解压会删除原文件,若要保存,使用此选项 |
-f | 解压后有与现文件重名,默认不覆盖,若要覆盖,使用此选项 |
-t | 测试完整性 |
-压缩级别 | 1-9,数字越大,压缩级别越高 |
1.2.2查找搜索文件find
格式 | 含义 |
-name ‘字符串’ | 查找匹配字符串的文件 |
-lname ‘字符串’ | 查找匹配字符串的链接文件 |
-gid n | 查找ID为n 的用户组文件 |
-uid n | 查找ID为n 的用户文件 |
-empty | 查找为空的目录或文件 |
-path ‘字符串’ | 查找路径下匹配字符串的文件 |
-group ‘字符串’ | 查找属于用户组的下符合字符串的文件 |
-depth | 优先查找当前目录 |
-prune 目录 | 查找时忽略指定目录,与-depth同时使用,-prune 目录会被忽略 |
-size n | 查找文件大小为n |
-user ‘字符串’ | 查找属于该用户匹配字符串的文件 |
-mtime +n或-n | 按时间查找 |
-type | 按文件类型查找:b(快设备文件),c(字符设备文件),f(普通文件),l(链接文件),d(目录),p(管道),s(socket文件) |
| 查找结果标准输出 |
-ok | 会询问是否执行 |
-exec | 查找结果传入后面命令 -exec {} \; |
-o 是或者的意思 -a 是而且的意思 -not 是相反的意思
#系统中所有大小为0的普通文件,并列出完整信息
find / -type f –size 0 –exec ls –al {} \;
#在系统根目录下查找不在/varlog和/usr/bin 目录下的所有的普通文件
find / \( -path /var/log -o –path /usr/bin \ ) –prune –o –name “main.c” –print
#查找修改时间7天以前的 文件,以交互的方式删除
find /var/log –type f –mtime +7 –ok rm { } \;
#查找以大写字母开始,紧接着一个小写字母和2个数字,最后以txt结尾的文件
find / -name “[A-Z][a-z][0--9][0--9]*.txt” -print
1.2.3传递参数xargs
#批量重命名
ls | xargs –t –i mv { } { }.bak
-i 接受分批的结果
-t 打印执行过程,类似-p,但是-p 会询问
#-d指定参数的分隔符,默认以空白(空格TAb回车)作为分隔符
echo ‘11@22@33’ | xagrs –d ‘@’
#删除文件名中间带空格的文件,如’leo leo.txt’
#-print 0使用\0来分隔而不是\n,再xargs -0配对
# xargs -0相当于xargs –d “\0”
find –name “* *.txt” –print0 | xargs -0 rm –rf
方法二:
find –name “* *.txt” | xagrs –i rm –rf “{}”
1.2.4文件的连接,合并,排序,去重
1.2.4.1文件连接命令join
事例文件:
[root@localhost test]# cat 1.txt
name1 alvin1
name2 alvin2
name3 alvin3
name4 alvin4
[root@localhost test]# cat 2.txt
name1 100
name2 101
name3 102
cccccccccccccccc
(1) join
显示匹配的行,并将值合并(ccc和name4不匹配所以不显示
[root@localhost test]# join 1.txt 2.txt
name1 alvin1 100
name2 alvin2 101
name3 alvin3 102
(2) -a
用第1个文件的内容去匹配,若匹配则显示匹配的行,并合并其值;不匹配的行也显示,但其值为空
[root@localhost test]# join -a1 1.txt 2.txt
name1 alvin1 100
name2 alvin2 101
name3 alvin3 102
name4 alvin4
用第2个文件的内容去匹配,若匹配则显示匹配的行,并合并其值;不匹配的行也显示,但其值为空
[root@localhost test]# join -a2 1.txt 2.txt
name1 alvin1 100
name2 alvin2 101
name3 alvin3 102
cccccccccccccccc
(3) -o
对于匹配的行,输出"第1个文件的第2部分,第2个文件的第2部分"的部分
[root@localhost test]# join -o 1.2 2.2 1.txt 2.txt
alvin1 100
alvin2 101
alvin3 102
1.2.4.2合并文件paste
直接合并2个文件,以tab分隔
1.2.4.3文本内容排序sort
参数 | 含义 |
-n | 使用纯数字排序,默认字母顺序排序 |
-r | 反序 |
-u | 相同的数据仅出现一条 |
-t | 分隔符,默认tab |
-k | 以区间排序 |
[root@localhost test]# cat /etc/passwd | head -n 3 | sort -t ":" -k3 -n
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
1.2.4.4删除文件中的重复行uniq
-c或--count 在每列旁边显示重复的次数
-d: 或--repeated 仅显示重复的行
uniq无法删除重复不相邻的
先使用sort排序将相同的行排列在一起,在uniq删除
1.3系统运维监控类命令
1.3.1查询Java进程下的线程数
for pid in `ps -ef | grep -v grep | grep "java" | awk '{print$2}'`
do
echo ${pid} > /tmp/pid.txt
cat /proc/${pid}/status| grep Threads > /tmp/Thread.txt
paste /tmp/pid.txt /tmp/Thread.txt
done
sort -k3 -rn
1.3.2kill僵尸进程
ps -e -o stat,ppid,pid,cmd | grep -e ^[Zz] | awk '{print $2}' | xargs kill -9
1.3.3查询CPU或内存占用最多的程序
ps aux | head -1 ; ps aux | sort -rn -k4 | head -10 #内存
ps aux | head -1 ; ps aux | sort -rn –k3 | head -10 #CPU
1.4网络故障排除
1.4.1 下载wget
1.下载限速
wget –limit-rate=1M
2.断点续传
wget-c
3.测试服务器是否支持断点续传
wget –S 网址 2>&1 | grep Ranges
4.下载文件重命名
wget –O
1.4.2http命令行工具curl
1.4.2.1显示网址header信息
curl –I
1.4.2.2常见http状态码
状态码 | 状态码英文名称 | 含义 |
100 | Continue | 继续。客户端应继续其请求 |
101 | Switching Protocols | 切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议 |
200 | OK | 请求成功 |
201 | Created | 已创建。成功请求并创建了新的资源 |
202 | Accepted | 已接受。已经接受请求,但未处理完成 |
203 | Non-Authoritative Information | 非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本 |
204 | No Content | 无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档 |
205 | Reset Content | 重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域 |
206 | Partial Content | 部分内容。服务器成功处理了部分GET请求 |
300 | Multiple Choices | 多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端 |
301 | Moved Permanently | 资源(网页等)被永久转移到其它URL |
302 | Found | 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI |
305 | Use Proxy | 使用代理。所请求的资源必须通过代理访问 |
400 | Bad Request | 客户端请求的语法错误,服务器无法理解 |
401 | Unauthorized | 请求要求用户的身份认证 |
403 | Forbidden | 服务器理解请求客户端的请求,但是拒绝执行此请求 |
404 | Not Found | 请求的资源(网页等)不存在 |
405 | Method Not Allowed | 客户端请求中的方法被禁止 |
408 | Request Time-out | 服务器等待客户端发送的请求时间过长,超时 |
500 | Internal Server Error | 内部服务器错误 |
501 | Not Implemented | 服务器不支持请求的功能,无法完成请求 |
502 | Bad Gateway | 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应 |
503 | Service Unavailable | 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中 |
504 | Gateway Time-out | 充当网关或代理的服务器,未及时从远端服务器获取请求 |
505 | HTTP Version not supported | 服务器不支持请求的HTTP协议的版本,无法完成处理 |
1.4.2.3显示网址状态码
curl -s -o /dev/null -w %{http_code}"\n" http://www.baidu.com
-s 静默 -o指定输出结果到某个文件
-w 输出定义的元数据 http_connect、http_code,time_total,time_ connect
size_download、size_upload、contet_type
1.4.2.4url地址重定向
curl –L –I
1.4.2.5抓取网页内容保存本地
curl –o
curl –O 重命名
1.4.2.6断点续传,限速
curl –C 断点
curl –limit-rate 2M 限速
1.4.3linux间传输文件工具scp
使用的ssh协议
格式:
1.远程传本地
scp 远程用户名@ip:文件绝对路径 本地系统路径
2.本地传远程
scp 本地文件路径 远程用户名@ip:文件绝对路径
参数:
-r 目录及子目录
-P 指定端口,默认ssh端口22
-l 限速,单位K
1.4.4动态路由追踪及网络故障排查工具mtr
常用参数:
mtr -s 用来指定ping数据包的大小
mtr -n no-dns不对IP地址做域名反解析
mtr -a 来设置发送数据包的IP地址,这个用于主机有多个IP时。
mtr -i 使用这个参数来设置ICMP返回之间的要求默认是1秒
mtr -c 指定发送多少个数据包
mtr -4 IPv4
mtr -6 IPv6
在MTR运行过程中,可以输入快捷字母切换模式例如:
?或 h:显示帮助菜单。
d:切换显示模式。
n:切换启用或禁用 DNS 域名解析。
u:切换使用 ICMP或 UDP 数据包进行探测。
返回结果各列数据说明:
第一列:显示的是IP地址或本机域名,这点和traceroute很像
第二列: Loss%到达此节点的数据包丢包率,显示的每个对应IP的丢包率。
第三列:snt:100设置发送数据包的数量,默认值是10 通过参数 -c来自定义数量。
第四列:last显示的最近一次的返回时延
第五列:Avg平均值这个应该是发送ping包的平均时延
第六列:Best最好或者说时延最低的
第七列:Wrst最差或者说时延最大的
第八列:StDev是标准偏差