linux分享
324笔记
理解linux的数据流
执行linux命令时,linux默认为用户进程提供了3种数据流
- stdin
- 标准输入、0
- 一般是键盘输入数据
- 比如cat命令等待用户输入
- stdout
- 标准输出、1
- 程序执行结果,输出到终端
- stderr
- 标准错误输出,代号,2
- 程序执行结果,输出到终端
标准输入重定向
cat < /etc/passwd # 输入重定向,原本是来自于终端的键盘输入,改为了,可以是来自于文件的输入
比如用在数据库的,数据导入
mysql < /opt/back.sql
练习数据流
[root@localhost ~~10:49:49]#llllllllllll /tmp
-bash: llllllllllll: command not found
[root@localhost ~~10:49:58]#
[root@localhost ~~10:50:00]#ls /opt/ > /tmp/ll.txt
[root@localhost ~~10:50:21]#cat /tmp/ll.txt
log
messages
[root@localhost ~~10:50:33]#ls /opt/ >> /tmp/ll.txt
[root@localhost ~~10:51:06]#ls /opt/ >> /tmp/ll.txt
[root@localhost ~~10:51:07]#ls /opt/ >> /tmp/ll.txt
[root@localhost ~~10:51:08]#cat /tmp/ll.txt
log
messages
log
messages
log
messages
log
messages
[root@localhost ~~10:51:16]#cat -n /tmp/ll.txt
1 log
2 messages
3 log
4 messages
5 log
6 messages
7 log
8 messages
[root@localhost ~~10:51:26]#
[root@localhost ~~10:51:34]#ls /jianqiang > /tmp/ll.txt
ls: cannot access /jianqiang: No such file or directory
[root@localhost ~~10:51:49]#
[root@localhost ~~10:51:54]#ls /jianqiang > /tmp/ll.txt
ls: cannot access /jianqiang: No such file or directory
[root@localhost ~~10:52:04]#ls /jianqiang > /tmp/ll.txt
ls: cannot access /jianqiang: No such file or directory
[root@localhost ~~10:52:04]#ls /jianqiang > /tmp/ll.txt
ls: cannot access /jianqiang: No such file or directory
[root@localhost ~~10:52:05]#
[root@localhost ~~10:52:21]#ls /jianqiang > /tmp/ll.txt 2>&1
[root@localhost ~~10:52:41]#ls /jianqiang > /tmp/ll.txt 2>&1
[root@localhost ~~10:52:42]#ls /jianqiang > /tmp/ll.txt 2>&1
[root@localhost ~~10:52:42]#ls /jianqiang > /tmp/ll.txt 2>&1
[root@localhost ~~10:52:43]#cat /tmp/ll.txt
ls: cannot access /jianqiang: No such file or directory
[root@localhost ~~10:52:56]#ls /jianqiang >> /tmp/ll.txt 2>&1
[root@localhost ~~10:53:03]#ls /jianqiang >> /tmp/ll.txt 2>&1
[root@localhost ~~10:53:03]#ls /jianqiang >> /tmp/ll.txt 2>&1
[root@localhost ~~10:53:04]#cat /tmp/ll.txt
ls: cannot access /jianqiang: No such file or directory
ls: cannot access /jianqiang: No such file or directory
ls: cannot access /jianqiang: No such file or directory
ls: cannot access /jianqiang: No such file or directory
[root@localhost ~~10:53:06]#
[root@localhost ~~10:53:17]#jianqiang /opt &>> /tmp/ll.txt
[root@localhost ~~10:53:42]#jianqiang /opt &>> /tmp/ll.txt
[root@localhost ~~10:53:44]#cat /tmp/ll.txt
ls: cannot access /jianqiang: No such file or directory
ls: cannot access /jianqiang: No such file or directory
ls: cannot access /jianqiang: No such file or directory
ls: cannot access /jianqiang: No such file or directory
-bash: jianqiang: command not found
-bash: jianqiang: command not found
[root@localhost ~~10:53:52]#
后台运行命令
[root@localhost ~~10:59:08]#ping baidu.com > /tmp/ll.txt &
[1] 1651
[root@localhost ~~10:59:22]#jobs
[1]+ Running ping baidu.com > /tmp/ll.txt &
[root@localhost ~~10:59:32]#fg 1
ping baidu.com > /tmp/ll.txt
^Z
[1]+ Stopped ping baidu.com > /tmp/ll.txt
[root@localhost ~~11:00:06]#ps -ef |grep ping
root 1651 1535 0 10:59 pts/0 00:00:00 ping baidu.com
root 1653 1535 0 11:00 pts/0 00:00:00 grep --color=auto ping
[root@localhost ~~11:00:25]#jobs
[1]+ Stopped ping baidu.com > /tmp/ll.txt
[root@localhost ~~11:00:44]#bg 1
[1]+ ping baidu.com > /tmp/ll.txt &
nohup命令
用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行
nohup 命令,在默认情况下(非重定向时),会输出一个名叫 nohup.out 的文件到当前目录下
如果当前目录的 nohup.out 文件不可写,输出重定向到$HOME/nohup.out 文件中
一般和&符一起使用
linux资源管理
机器负载查看
uptime命令
系统负载指的是在单位时间内,系统分配给CPU处理的进程数量,必然是数量越多,负载值越高,机器的压力越大
[root@localhost ~~16:04:47]#uptime
16:04:51 up 3:12, 3 users, load average: 0.16, 0.05, 0.05
[root@localhost ~~16:04:51]#
理想化的状态是每个CPU都在运行着进程,充分让cpu工作起来,效率最大化,你得先看看你机器上有几个CPU(几个核,就是有几个cpu可以工作)
发现是8核的
[root@localhost ~~16:04:51]#lscpu |grep -i '^cpu(s)'
CPU(s): 8
# 以及用top命令,按下数字1,查看几核。
top
2. 如何理解uptime看到的负载
分别是1、5、15分钟内的平均负载情况,表示是1~15分钟内CPU的负载变化情况。
1. 三个值如果差不多,表示系统很稳定的运行中,15分钟以内,CPU都没有很忙
2. 如果1分钟内的值,远大于15分钟的值,表示机器在1分钟内压力在直线上升
3. 如果1分钟内的值,小于15分钟的值,表示系统的负载正在下降中
查看当前机器是几核的cpu
[root@localhost ~~16:04:51]#lscpu |grep -i '^cpu(s)'
CPU(s): 8
通过cpu的文件,确定是几颗CPU
[root@localhost ~~16:08:43]#cat /proc/cpuinfo |grep 'core id' | sort |uniq|wc -l
4
stress压力测试命令
运行多进程,测试查看cpu压力
安装stress工具
yum install stress -y
使用stress命令,给机器进行压力测试,这个命令会让你的机器,cpu达到100%,以此实现最高压的环境
# --cpu 4 让4个cpu
stress --cpu 1 --timeout 600 #这是一个cpu100%
stress --cpu 4 --timeout 600 #这是4个cpu100%
free命令
[root@localhost ~~16:14:57]#free
-m 以MB形式显示
-h 以GB形式显示
total used free shared buff/cache available
Mem: 4028428 146124 3688096 11872 194208 3632804
Swap: 2097148 0 2097148
[root@localhost ~~16:15:05]#free -m
total used free shared buff/cache available
Mem: 3934 142 3602 11 189 3548
Swap: 2047 0 2047
[root@localhost ~~16:15:13]#free -h
total used free shared buff/cache available
Mem: 3.8G 142M 3.5G 11M 189M 3.5G
Swap: 2.0G 0B 2.0G
[root@localhost ~~16:15:17]#
cache,缓存的和buffer,缓冲区的
cache是:把磁盘读取的数据保存在内存中,再次读取就不用读取磁盘,而是直接从内存中读取,加速数据读取过程,
Cache,==缓存==,Cached是给==读取数据==时加速的
cache是指,把读取磁盘而来,的数据保存在内存中,再次读取,下一次不用读取硬盘,而直接从内存中读取,加速数据读取过程。
buffer,==缓冲区==,buffers是给==写入数据==加速的
总结cache、buffer
这俩都是计算机的重要属性,不仅在内存,磁盘里有使用,后面的网站架构篇,也多处使用到缓存的概念。
cache解决的时间问题,提高数据读取速度
cache利用的是内存极快的速度特性,读写速度是磁盘的很多倍。
buffer解决的是空间问题,给数据写入提供一个暂存空间
磁盘对碎片化的数据处理,是很低效的,我们后面学习磁盘管理,即可更深入理解
buffer利用的是内存的存储特性。
图解cache
查看机器负载
df 命令查看磁盘的空间
-h表示可读性较高的形式展示大小
[root@localhost ~~16:33:51]#df -h
文件系统 容量 已用 可用 已用% 挂载点
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 17G 3.6G 14G 22% /
devtmpfs 2.0G 0 2.0G 0% /dev
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 2.0G 12M 2.0G 1% /run
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/sda1 1014M 130M 885M 13% /boot
tmpfs 394M 0 394M 0% /run/user/0
[root@localhost ~~16:33:54]#
监控磁盘io动态
iotop命令是一个用来监视磁盘I/O使用状况的top类工具。
iotop具有与top相似的UI,其中包括PID、用户、I/O、进程等相关信息
yum install iotop -y 安装命令
常用命令参数
-o:只显示有io操作的进程
-b:批量显示,无交互,主要用作记录到文件。
-n NUM:显示NUM次,主要用于非交互式模式。
-d SEC:间隔SEC秒显示一次。
-p PID:监控的进程pid。
-u USER:监控的进程用户。
-k 以kB单位显示读写数据信息
3.常用快捷键
左右箭头:改变排序方式,默认是按IO排序。
r:改变排序顺序。
o:只显示有IO输出的进程。
p:进程/线程的显示方式的切换,切换pid、tid
a:显示累积使用量
q:退出。
网络资源监控
网络端口查看
- ip地址,对应了tcp/ip协议的,ip地址号
- 端口号,对应了应用层的 如80(伴随着http协议的服务,如nginx这样的网站服务)端口
好比你发快递,记住发送人是谁,收件人是谁,具体这个快递是经过了山路十八弯,还是去南极跑了一圈,你不用管,你关心最后快递能送到即可
你只需要关心,你和对方的服务器,是否能通信即可
tcp和udp的区别
tcp 安全传输,熟读慢,
tcp 用在如网站的通信,比如你要登录淘宝网,淘宝网需要保留你的用户信息,因此你和淘宝网之间,就有了一个长链接,相互确认身份,要建立一个可靠的连接
udp 传输速度快,不管你要不要,直接给你传过去,
比如有一个黑客,疯狂的发出udp类型的请求
大量的让对方机器接收到无用的流量,导致网卡瘫痪,机器故障
netstat命令
network status,网络状态命令
命令:netstat
作用:查看网络连接状态
语法:netstat -tnlp
选项:
-t:表示只列出tcp 协议的连接;(你可以看到你的nginx的运行)
-n:表示将地址从字母组合转化成ip 地址,将协议转化成端口号来显示;(netsta默认会看到机器的主机名 -n 直接显示ip)
-l :表示过滤出"state(状态)"列中其值为LISTEN(监听)的连接;(你的nginx是否监听了0.0.0.0:80)确认端口在运行中,等待客户来访问
-p:表示显示发起连接的进程pid 和进程名称; (显示使用该端口的进程的id号)
-u :查看udp连接 (ntpd服务)
netstat -tunlp |grep nginx
netstat -tunlp | grep ntp
ss命令
用法和netstat一模一样
ss -tunlp |grep nginx
备注
在高并发场景下,也就是机器的链接数特别多的时候,使用ss性能比netstat更高一些。
iftop
yum install iftop -y
用起来和top命令很像,动态的掌握服务器的流量情况
能够看到你机器,有多少流量进来,有多少流量出去
df 查看磁盘信息
-h表示可读性较高的形式展示大小
ip地址
ifconfig
ip addr show