Linux指令记忆计划 [长期更新]

2017-08-07 15:56:34 Linux 7255 0

本文将陈述 常用50+条 Linux命令的含义及其应用场景

网络状态与测试

ab

web测压指标

吞吐率(Requests per second)
并发连接数(The number of concurrent connections)
并发用户数(Concurrency Level)
用户平均请求等待时间(Time per request)
服务器平均请求等待时间(Time per request:across all concurrent requests)

-c:指定一次向服务器发出请求数[并发连接数]
-n:指定测试会话使用的请求数[并发用户数]

ab -c 100 -n 1000 web网页地址

wrk

In github
压测工具,可用于流量回放、预发环境上线前自行压测

wrk使用支持多线程并发,比ab的单线程要快。

-c, --connections: 总的http并发数
-d, --duration:    持续压测时间, 比如: 2s, 2m, 2h
-t, --threads:     总线程数
-s, --script:      luajit脚本,使用方法往下看
-H, --header:      添加http header, 比如. "User-Agent: wrk"
    --latency:     在控制台打印出延迟统计情况
    --timeout:     http超时时间

可以把 curl 请求粘贴上来,进行压测
示例curl

curl 'http://puppeteer.hlzblog.top/api/comic/list?page=1' \
  -H 'Accept: */*' \
  -H 'Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6' \
  -H 'Origin: http://comic.pre.hlzblog.top' \
  -H 'Proxy-Connection: keep-alive' \
  -H 'Referer: http://comic.pre.hlzblog.top/' \
  -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.33' \
  --compressed \
  --insecure

--compressed--insecure 这种附加参数删除掉

对应 wrk 压测
请注意!!!用来模拟的这个curl接口是我漫画服务的,请不要压太高
示例使用 8线程 ; 发起50个客户端连接 ; 持续压测30

wrk -t8 -c50 -d30s \
  'http://puppeteer.hlzblog.top/api/comic/list?page=1' \
  -H 'Accept: */*' \
  -H 'Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6' \
  -H 'Origin: http://comic.pre.hlzblog.top' \
  -H 'Proxy-Connection: keep-alive' \
  -H 'Referer: http://comic.pre.hlzblog.top/' \
  -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.33'

外网压测结果,(被压测的是 2C/4G 服务器, 8Mbps 带宽)

Running 30s test @ http://puppeteer.hlzblog.top/api/comic/list?page=1
  8 threads and 50 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   392.98ms  272.68ms   1.95s    71.40%
    Req/Sec    17.01     12.72   120.00     81.58%
  3774 requests in 30.10s, 30.19MB read
  Socket errors: connect 0, read 0, write 0, timeout 11
Requests/sec:    125.37
Transfer/sec:      1.00MB

请注意,QPS急剧下降说明已到压测瓶颈

netstat

用来打印Linux中网络系统的状态信息,可让你得知整个Linux系统的网络情况

-a或--all:显示所有连线中的Socket
-l或--listening:显示监控中的服务器的Socket
-t或--tcp:显示TCP传输协议的连线状况
-u或--udp:显示UDP传输协议的连线状况
-n或--numeric:直接使用ip地址,而不通过域名服务器

查看当前已监听的socket服务:一般配合iptables 查看端口是否被监听,防火墙是否开放了对应端口

netstat -al | more

压缩解压

tar

Linux下,常用的压缩、解压指令 之一

gzip 解压
tar  -zxvf  待解压的gzip文件名

如果gzip添加的压缩文件用的绝对路径
那么请需要以在末尾添加 -C ./ 参数使其落到当前相对路径下

tar zxvf 20191201.tar.gz -C ./
gzip 压缩

注意:添加的如果是添加的绝对路径的文件
请使用刚刚gzip解压的命令操作

tar  -zcvf  待生成的gzip压缩文件名  待压缩的文件或者目录名

bz2 与gzip` 的命令与功能 几乎一致, -z变成 -j 即可

zip

Linux下,常用的压缩、解压指令 之二

压缩
zip  待生成的gzip压缩文件名  待压缩的文件或者目录名  -R
解压
unzip  待生成的gzip压缩文件名

网络下载

这些工具基本都是: 工具名 + url 的方式,直接能获取到对应网站输出的页面内容

curl

它是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载,所以是综合传输工具

查看下载进度并存入数据到固定文件
curl http://www.hlzblog.top/ -o blog_index.html --progress
请求一个页面,并只输出响应头信息
curl -I http://www.hlzblog.top/

wget

如果是由于网络的原因下载失败,wget会不断的尝试,直到整个文件下载完毕
如果是服务器打断下载过程,它会再次联到服务器上从停止的地方继续下

-c, –continue 接着下载没下载完的文件

断点续传
wget -c http://www.hlzblog.top/

文件与目录

touch

创建文本

touch access.log

mkdir

创建目录

mkdir haleyleozhang

ls

显示对应目录相关信息

-a:显示所有档案及目录(ls内定将档案名或目录名称为“.”的视为影藏,不会列出)
-l:所有输出信息用单列格式输出,不输出为多列
\<directory_name> 目录名,默认,当前目录

ls -al  /var/www

pwd

查看当前所在目录

cat

显示对应文本内容

cat access.log

whereis

定位指令的二进制程序、源代码文件和man手册页等相关文件的路径

whereis php

du

查看使用空间

-h或--human-readable 以K,M,G为单位,提高信息的可读性

du -h 文件名或者目录名

df

检查linux服务器的文件系统的磁盘空间占用情况

-h 方便阅读方式显示

df -h

find

用来在指定目录下查找文件

-maxdepth<目录层级>:设置最大目录层级
-mindepth<目录层级>:设置最小目录层级
-name<文件名>:查找对应文件或目录,可用*模糊匹配
-print 只显示结果,不显示过程

find / -name nginx* -maxdepth 8 -mindepth 3 -print

more

以全屏幕的方式按页显示文本文件的内容

Space键:显示文本的下一屏内容
Enier键:只显示文本的下一行内容
B键:显示上一屏内容
Q键:退出

less

less命令允许用户向前或向后浏览文件,而more命令只能向前浏览

PageUp键 向上翻页
PageDown键 向下翻页
Q键:退出

head

显示文件的开头的内容
-n <数字>:指定显示头部内容的行数;

head -n 10 access.log

tail

显示文件的结尾的内容

-n <数字>:指定显示头部内容的行数

tail -n 10 access.log

-f或;--follow:显示文件最新追加的内容。“name”表示以文件名的方式监视文件的变化

tail -f access.log

vim

文本编辑器vim 是vi的升级版本

进入编辑器

vim access.log

下述命令在进入编辑器后操作
i 键 进入可编辑状态
esc键 退出可编辑状态(未进入可编辑状态)

未进入可编辑状态时

:set nu 显示文本侧边的行数
:q 退出
:q! 强制退出
:数字 跳到对应行号
:w 保存
/字符串 查询对应字符串 -> 回车后 -> n下一个匹配字符串,N上一个匹配字符串
dd (连续按两次d)删除单号
u键 撤销上一次的操作,比如刚刚 dd 删除了一行,我现在按u键会恢复文本状态到操作之前
v键 选择区间开始 ,再次按v 取消选中操作
y键 复制选中区域。连按两次,复制单行内容
p键 粘贴刚刚复制过的内容,或者粘贴刚刚被删除的内容【剪切操作】
^ (即shift+6) 跳到行首
$ (即shift+4) 跳到行尾
]] (连续按两次 ] 键)跳到文末
[[(连续按两次 ] 键)跳到文首

系统监控

lsof

是一个列出当前系统打开文件的工具
在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件

查看 4040 端口运行的情况

lsof -i:4040 

查看所属 root 用户进程所打开的文件类型为 txt 的文件

lsof -a -u root -d txt

watch

以周期性的方式执行给定的指令,指令输出以全屏方式显示

-n 指定指令执行的间隔时间(秒)
-d 高亮显示指令输出信息不同之处

watch -n 1 -d  '需要周期性执行的指令'

示例:监控访问日志的变化:实现类似 tail -f 的功能

watch -n 1 -d 'tail -n 10 access.log'

示例:监控当前用户 后台进程的变化

uptime

显示依次为:现在时间、系统已经运行了多长时间、目前有多少登陆用户、系统在过去的1分钟、5分钟和15分钟内的平均负载

uptime

top

实时动态地查看系统的整体运行情况

top

结果如下

w

显示目前登入系统的用户信息

awk

awk '/正则/{print 单行匹配出来的第几项,可以用在这里}' 文件名

它是按行进行匹配,所以搜索出来的结果是一行一行的
匹配,最常见的方案就是使用正则提取信息

通过正则匹配,匹配出示例日志中的 spider 数据

awk '/.*?spider.*/{print $0}' 20180326.log 

然后可以通过管道输出最后五条数据到命令行上显示出来

awk '/.*?spider.*/{print $0}' 20180326.log  | tail -5

示例写入到文本中,后续可以再跑脚本,进行一些数据的统计

awk '/.*?(spider.*)/{print $1}' 20180326.log  > daily_spider.log

系统安全

history

输入的命令历史记录,都存在 ~/.bash_history 文件中,你可以通过 vim 等 编译器 或 下述方法操作它

-c 清空当前历史命令

history -c

n 打印最近的n条历史命令 ,示例显示最近20条

history 20

iptables

防火墙,详情点击链接 CSDN iptalbes 相关

hostname

设置系统的主机名称

修改前
root@VM_5_63_centos
修改后
root@online

用户通过 logout 退出,重新登录即可看到效果

工具

tmux

tmux是指通过一个终端登录远程主机并运行后,在其中可以开启多个控制台的终端复用软件 查看详情

安装
yum install tmux
新建一个会话
tmux new -s <name>
查看会话列表
tmux attach
关闭某个会话
tmux kill-session  -t <name>
热键 ctrl + b 按过之后 再按下面其中一个键

d 退出
n 切标签页
s 切窗口
c 新建窗口
, 给窗口取别名
[ 看前面的内容 ,右上角会出现 类似 [0/654] 这样的东西,表明你现在的位置

进入编辑模式后:

ctrl + v 往下翻
alt + v 往上翻
ctrl +c 退出

xargs

它的作用是将参数列表转换成小块分段传递给其他命令,以避免参数列表过长的问题。可单独使用,也可使用管道符、重定位符等与其他命令配合使用

root@dev:/data/www/www/blog_v3# cat test.txt

a b c d e f g
h i j k l m n
o p q
r s t
u v w x y z

-n 选项多行输出:

root@dev:/data/www/www/blog_v3# cat test.txt | xargs -n3

a b c
d e f
g h i
j k l
m n o
p q r
s t u
v w x
y z

示例,删除所有test开头的git中的tag

# tag 一览
root@dev:/data/www/www/blog_v3# git tag -l 
# - 结果
alphy_20190220_0013
alphy_20190222_1558
alphy_20190225_2307
alphy_20190315_1439
alphy_20190316_1703
alphy_20190322_1117
alphy_20190325_1748
alphy_20190326_0930
test_20190324_0120
test_20190324_0124
test_20190324_0134
# 实现删除含有test的分支
root@dev:/data/www/www/blog_v3# git tag -l | grep test | xargs -n 1 git push origin :
# - 结果
Total 0 (delta 0), reused 0 (delta 0)
To git@github.com:HaleyLeoZhang/blog_v3.git
 * [new tag]         test_20190324_0120 -> test_20190324_0120
Total 0 (delta 0), reused 0 (delta 0)
To git@github.com:HaleyLeoZhang/blog_v3.git
 * [new tag]         test_20190324_0124 -> test_20190324_0124
Total 0 (delta 0), reused 0 (delta 0)
To git@github.com:HaleyLeoZhang/blog_v3.git
 * [new tag]         test_20190324_0134 -> test_20190324_0134

持续更新中

注:若无特殊说明,文章均为云天河原创,请尊重作者劳动成果,转载前请一定要注明出处