点击上方【蓝字】关注博主
“ 在 Linux 系统中,命令行工具是不可或缺的利器,它们能帮助我们更高效地管理系统、进行开发测试、传输文件,甚至解决跨平台兼容性问题。本文将介绍几个常用的 Linux 命令行工具,包括 ulimit、uptime、curl、scp、dos2unix 和 unix2dos。”
前导
本系列主要讲解Linux运行时命令,包括网络、磁盘、内存、CPU相关参数等,主要是为了分享怎么通过常见的 Linux 命令去排查相关问题。比如:
发现机器的CPU负荷比较高,那么怎么查到是哪个进程CPU占用率比较高?
磁盘IO的写入很频繁,怎么查到是哪个进程或线程对磁盘IO频繁的操作?
本系列就是分享诸如这类问题的排查技巧。注意,本系列的核心方向不是去讲解Linux的命令查找、显示当前目录等(比如ls、cat等)基础命令操作。本系列的重点分享内容包括:
Linux基础命令和工具。
CPU性能监控。
内存性能监控。
文件IO性能监控。
网络IO性能监控。
强烈推荐:Linux 大牛,Netflix 高级性能架构师 Brendan Gregg的博客http://www.brendangregg.com。《性能之巅》书籍就是他出版的,主要分为:CPU、内存、磁盘、网络四大块。
ulimit 用户资源
查看当前限制:
ulimit -a
设置资源限制:
ulimit -<type> <value>
ulimit -f 102400
-c : 设置核心转储文件的大小(以字节为单位)
-d : 设置数据段的大小(以字节为单位)
-f : 设置文件的最大大小(以字节为单位)
-l : 设置最大可以锁定在内存中的地址空间大小(以字节为单位)
-m : 设置最大可用内存大小(以字节为单位)
-n : 设置最大打开文件数
-s : 设置栈大小(以字节为单位)
-t : 设置最大进程运行时间(以秒为单位)
-u : 设置每个用户进程的最大进程数
-v : 设置最大虚拟内存大小(以字节为单位)
-x : 设置最大锁定内存的数量(以字节为单位)
设置软限制和硬限制:
ulimit -H -<type> # 查看硬限制
ulimit -S -<type> # 查看软限制
ulimit -S -n 2048
ulimit -H -n 4096
软限制:是当前使用的限制值,可以被用户临时修改。
硬限制:是系统允许设置的最大限制值,只有超级用户(root)可以修改。
$ ulimit -a
real-time non-blocking time (microseconds, -R) unlimited
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 15397
max locked memory (kbytes, -l) 65536
max memory size (kbytes, -m) unlimited
open files (-n) 1048576
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 15397
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
# 设置用户的最大进程数:
ulimit -u 1024
# 设置用户可以打开的最大文件句柄数:
ulimit -n 65530
uptime 机器启动时间+负载
uptime
14:55:30 up 5 days, 2:34, 2 users, load average: 0.05, 0.02, 0.01
当前时间(14:55:30):系统当前的时间。
系统运行时间(up 5 days, 2:34):系统已经运行的时间,这里表示系统已运行了5天2小时34分钟。
当前登录用户数(2 users):当前有多少用户登录到系统。
负载平均值(load average: 0.05, 0.02, 0.01):系统在过去1分钟、5分钟和15分钟内的负载平均值。负载平均值是一个表示系统处理请求的压力指标,数值越高表示系统负载越重。
负载平均值详解:
负载平均值是指系统队列中的进程数。这些进程要么正在运行,要么正在等待 CPU 时间。
如果负载平均值与 CPU 核心数接近,通常表示系统在合理负载范围内。如果负载平均值远高于 CPU 核心数,则说明系统可能过载,可能需要优化或增加资源。
系统的平均负载是指在特定的时间间隔内队列中运行的平均进程数。如果一个进程满足以条件,它就会位于运行队列中。
它没有在等待I/O操作的结果。
它没有主动进入等待状态(也就是没有调用
wait
相关的系统API )没有被停止(例如:等待终止)。
如果每个CPU内核的当前活动进程数不大于3的话,那么系统的性能还算可以支持。如果每个CPU内核的任务数大于5,那么这台机器的性能有严重问题。如果你的linux主机是1个双核CPU的话,当Load Average 为6的时候说明机器已经被充分使用了。
负载说明(现针对单核情况,不是单核时则乘以核数):
load<1
:没有等待。load==1
:系统已无额外的资源跑更多的进程了。load>1
:进程都堵着等待资源。
load < 0.7
时:系统很闲,要考虑多部署一些服务。0.7 < load < 1
时:系统状态不错。load == 1
时:系统马上要处理不多来了,赶紧找一下原因。load > 5
时:系统已经非常繁忙了。
不同load值说明的问题:
1分钟
load >5
,5分钟load < 3
,15分钟load <1
:短期内繁忙,中长期空闲,初步判断是一个抖动或者是拥塞前兆。1分钟
load >5
,5分钟load >3
,15分钟load <1
:短期内繁忙,中期内紧张,很可能是一个拥塞的开始。1分钟
load >5
,5分钟load >5
,15分钟load >5
:短中长期都繁忙,系统正在拥塞。1分钟
load <1
,5分钟load>3
,15分钟load >5
:短期内空闲,中长期繁忙,不用紧张,系统拥塞正在好转。
补充:
查看cpu信息:
cat /proc/cpuinfo
。直接获取cpu核数:
grep 'model name' /proc/cpuinfo | wc -l
。
curl 命令
curl http://www.sina.com
参数 | 说明 | 示例使用 |
---|---|---|
-X | 指定请求方法 | curl -X POST http://example.com/resource -d "key=value" |
-d | 发送 POST 请求时传递的数据 | curl -d "key=value" http://example.com/resource |
-F | 发送文件或表单数据 | curl -F "file=@path/to/local/file" http://example.com/upload |
-O | 下载文件并将其保存为原文件名 | curl -O http://example.com/file.zip |
-o | 下载文件并指定保存的文件名 | curl -o myfile.zip http://example.com/file.zip |
-I | 仅显示响应头 | curl -I http://example.com |
-i | 显示请求和响应头 | curl -i http://example.com |
-H | 添加自定义请求头 | curl -H "Authorization: Bearer YOUR_TOKEN" http://example.com/secure |
-v | 显示详细的请求和响应信息,便于调试 | curl -v http://example.com |
-k | 忽略 SSL 证书验证 | curl -k https://example.com |
--cert | 指定客户端证书 | curl --cert client.crt --key client.key https://example.com |
--key | 指定客户端证书的私钥 | curl --cert client.crt --key client.key https://example.com |
-L | 跟随 HTTP 重定向 | curl -L http://example.com/redirect |
--limit-rate | 限制下载速度 | curl --limit-rate 100k http://example.com/largefile.zip |
-u | 指定用户名和密码进行基本认证 | curl -u username:password http://example.com |
-T | 上传文件 | curl -T localfile.zip http://example.com/upload |
-e | 设置 Referer 请求头 | curl -e http://referer.com http://example.com |
--proxy | 使用指定的代理服务器 | curl --proxy http://proxyserver:port http://example.com |
-A | 设置用户代理(User-Agent) | curl -A "Mozilla/5.0" http://example.com |
-G | 发送 GET 请求时附加查询参数 | curl -G -d "key=value" http://example.com/resource |
-s | 静默模式,不显示进度条和错误信息 | curl -s http://example.com |
--data-urlencode | 对数据进行 URL 编码 | curl --data-urlencode "key=value" http://example.com |
-w | 在输出中写入自定义格式的文本 | curl -w "%{http_code}" -o /dev/null -s http://example.com |
curl -i "http://www.sina.com" # 打印请求响应头信息
curl -I "http://www.sina.com" # 仅返回http头
curl -v "http://www.sina.com" # 打印更多的调试信息
curl -verbose "http://www.sina.com" # 打印更多的调试信息
curl -d 'abc=def' "http://www.sina.com" # 使用post方法提交http请求
curl -sw '%{http_code}' "http://www.sina.com" # 打印http响应码
scp 远程拷贝
参数 | 说明 | 示例使用 |
---|---|---|
-r | 递归复制整个目录 | scp -r /path/to/local/directory username@remote_host:/path/to/remote/destination |
-P | 指定连接远程主机的端口(注意是大写的 -P ) | scp -P 2222 /path/to/local/file username@remote_host:/path/to/remote/destination |
-p | 保持文件的修改时间、访问时间和权限 | scp -p /path/to/local/file username@remote_host:/path/to/remote/destination |
-q | 安静模式,不显示传输进度 | scp -q /path/to/local/file username@remote_host:/path/to/remote/destination |
-C | 启用压缩以加速传输 | scp -C /path/to/local/file username@remote_host:/path/to/remote/destination |
-o | 传递额外的 SSH 选项 | scp -o "StrictHostKeyChecking=no" /path/to/local/file username@remote_host:/path/to/remote/destination |
-i | 指定私钥文件进行认证 | scp -i ~/.ssh/private_key /path/to/local/file username@remote_host:/path/to/remote/destination |
-v | 显示详细的调试信息 | scp -v /path/to/local/file username@remote_host:/path/to/remote/destination |
sudo apt-get install openssh-server
scp Lion@122.152.222.180:/home/Lion/test.txt . #下载122.152.222.180的文件
scp mi9.aac Lion@122.152.222.180:/home/Lion/ #上传文件到122.152.222.180
#下载test整个目录到本地
scp -r Lion@122.152.222.180:/home/Lion/test .
#上传本地test整个目录到122.152.222.180
scp -r test Lion@122.152.222.180:/home/Lion/
dos2unix和unix2dos命令
dos2unix filename
unix2dos filename
命令 | 参数 | 说明 | 示例使用 |
---|---|---|---|
dos2unix | -c | 指定转换的文件格式(可以是 ascii 、unix 、mac 、windows ) | dos2unix -c=mac filename |
dos2unix | -o | 仅处理文件,不显示任何输出 | dos2unix -o filename |
dos2unix | -q | 静默模式,不显示错误信息 | dos2unix -q filename |
unix2dos | -c | 指定转换的文件格式(可以是 ascii 、unix 、mac 、windows ) | unix2dos -c=mac filename |
unix2dos | -o | 仅处理文件,不显示任何输出 | unix2dos -o filename |
unix2dos | -q | 静默模式,不显示错误信息 | unix2dos -q filename |
find . -type f -exec dos2unix {} \;
# find ./ -type f 此命令是显示当前目录下所有的文件
总结
ulimit 命令:用于控制系统资源使用限制,可以有效防止单个用户或进程消耗过多资源,保护系统稳定性。
uptime 命令:用于查看系统运行时间和负载情况,帮助评估系统性能,并及时发现系统是否存在过载问题。
curl 命令:用于向服务器发送和接收数据,可以用来测试 API、下载数据、与 RESTful API 交互等。
scp 命令:用于在 Linux 和 Unix 系统之间进行安全文件传输,可以实现从本地到远程,以及从远程到本地的双向文件传输。
dos2unix 和 unix2dos 命令:用于处理文本文件格式转换,可以将 Windows 风格的换行符转换为 Unix 风格的换行符,反之亦然,确保文本文件在不同操作系统之间的兼容性。
公众号: Lion 莱恩呀
微信号: 关注获取
扫码关注 了解更多内容
点个 在看 你最好看