Linux 常用命令:从资源限制到网络传输

文摘   2024-11-06 09:00   广东  

点击上方【蓝字】关注博主

 在 Linux 系统中,命令行工具是不可或缺的利器,它们能帮助我们更高效地管理系统、进行开发测试、传输文件,甚至解决跨平台兼容性问题。本文将介绍几个常用的 Linux 命令行工具,包括 ulimit、uptime、curl、scp、dos2unix 和 unix2dos。

01

前导 

本系列主要讲解Linux运行时命令,包括网络、磁盘、内存、CPU相关参数等,主要是为了分享怎么通过常见的 Linux 命令去排查相关问题。比如:

  1. 发现机器的CPU负荷比较高,那么怎么查到是哪个进程CPU占用率比较高?

  2. 磁盘IO的写入很频繁,怎么查到是哪个进程或线程对磁盘IO频繁的操作?

本系列就是分享诸如这类问题的排查技巧。注意,本系列的核心方向不是去讲解Linux的命令查找、显示当前目录等(比如ls、cat等)基础命令操作。本系列的重点分享内容包括:

  1. Linux基础命令和工具。

  2. CPU性能监控。

  3. 内存性能监控。

  4. 文件IO性能监控。

  5. 网络IO性能监控。

强烈推荐:Linux 大牛,Netflix 高级性能架构师 Brendan Gregg的博客http://www.brendangregg.com。《性能之巅》书籍就是他出版的,主要分为:CPU、内存、磁盘、网络四大块。


02

ulimit 用户资源 

ulimit 是一个用于控制系统资源使用限制的命令,在 Linux 和类 Unix 操作系统中非常常见。ulimit 主要用于设置或显示用户进程可用的系统资源限制。这些限制可以帮助防止单个用户或进程消耗过多系统资源,从而影响系统的整体性能和稳定性。

常用 ulimit 选项

  1. 查看当前限制:

    ulimit -a
  2. 设置资源限制:

    ulimit -<type> <value>

    其中 <type> 表示想要设置的资源类型,<value> 是新的限制值。常见的资源类型包括:

    例如,要将最大文件大小限制设置为 100 MB:

    ulimit -f 102400
  • -c : 设置核心转储文件的大小(以字节为单位)

  • -d : 设置数据段的大小(以字节为单位)

  • -f : 设置文件的最大大小(以字节为单位)

  • -l : 设置最大可以锁定在内存中的地址空间大小(以字节为单位)

  • -m : 设置最大可用内存大小(以字节为单位)

  • -n : 设置最大打开文件数

  • -s : 设置栈大小(以字节为单位)

  • -t : 设置最大进程运行时间(以秒为单位)

  • -u : 设置每个用户进程的最大进程数

  • -v : 设置最大虚拟内存大小(以字节为单位)

  • -x : 设置最大锁定内存的数量(以字节为单位)

  • 设置软限制和硬限制:

    ulimit -H -<type>  # 查看硬限制
    ulimit -S -<type> # 查看软限制

    修改软限制(例如,设置最大打开文件数为 2048):

    ulimit -S -n 2048

    修改硬限制(例如,设置最大打开文件数的硬限制为 4096,通常需要 root 权限):

    ulimit -H -n 4096
    • 软限制:是当前使用的限制值,可以被用户临时修改。

    • 硬限制:是系统允许设置的最大限制值,只有超级用户(root)可以修改。

    Linux系统对每个登录的用户都限制其最大进程数和打开的最大文件句柄数。为了提高性能,可以根据硬件资源的具体情况设置各个用户的最大进程数和打开的最大文件句柄数。可以用ulimit -a来显示当前的各种系统对用户使用资源的限制:

    $ 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
    03

    uptime 机器启动时间+负载 

    uptime 命令查看机器从上次启动以来的启动时间、登录用户、平均负载等情况,通常用于在线上应急或者技术攻关中,确定操作系统的重启时间。

    uptime 命令用法: 直接运行 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

    uptime 命令可以与 top 或 htop 命令结合使用,提供更详细的系统资源使用情况和进程列表。比如在监控系统性能时,可以同时使用这些工具来获取系统的实时状态和负载情况。

    04

    curl 命令 

    curl 是一个常用的命令行工具,用于向服务器发送和接收数据。它支持多种协议,如 HTTP、HTTPS、 FTP、SFTP、SMTP 等。curl 的功能非常强大,适用于从网页下载数据、与 REST API 交互、测试服务器响应等场景。

    基本用法:发送一个简单的 GET 请求并获取网页内容。

    curl http://www.sina.com

    下面是 curl 命令常用参数的表格汇总:

    参数说明示例使用
    -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

    由于当前的线上服务较多地使用了RESTful风格的API,所以集成测试就需要进行HTTP调用,查看返回的结果是否符合预期,curl命令当然是首选的测试方法。
    使用方式:

    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响应码
    05

    scp 远程拷贝 

    scp是 secure copy 的缩写,scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令,是一种用于在 Linux 和 Unix 系统之间进行安全文件传输的命令行工具。它基于 SSH 协议,因此在传输文件时提供了加密和安全性。scp 允许用户从远程主机下载文件到本地,或将本地文件上传到远程主机。

    scp 命令的常用参数表格:

    参数说明示例使用
    -r递归复制整个目录scp -r /path/to/local/directory username@remote_host:/path/to/remote/destination
    -P指定连接远程主机的端口(注意是大写的 -Pscp -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

    scp命令是Linux系统中功能强大的文件传输命令,可以实现从本地到远程,以及从远程到本地的双向文件传输,用起来非常方便,常用来在线上定位问题时将线卜的一些文件下载到本地进行详查,或者将本地的修改上传到服务器上。

    前提:

    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/
    06

    dos2unix和unix2dos命令 

    dos2unix 和 unix2dos 是两个用于处理文本文件格式转换的命令行工具,主要用于在不同操作系统之间转换文本文件的换行符格式。这在跨平台开发中尤其有用,例如将 Windows 系统上的文本文件转换为 Unix/Linux 系统上的格式,或者反之。通常在Windows系统开发的脚本和配置,UNIX系统下都需要转换。

    dos2unix: 功能是将 Windows 风格的换行符(CRLF,即 \r\n)转换为 Unix 风格的换行符(LF,即 \n)。用于将从 Windows 系统生成的文本文件转换为 Unix/Linux 系统可接受的格式。

    dos2unix filename

    unix2dos :功能是将 Unix 风格的换行符(LF,即 \n)转换为 Windows 风格的换行符(CRLF,即 \r\n)。用于将 Unix/Linux 系统上的文本文件转换为 Windows 系统可接受的格式。

    unix2dos filename

    dos2unix 和 unix2dos 命令的常用参数:

    命令参数说明示例使用
    dos2unix-c指定转换的文件格式(可以是 asciiunixmacwindowsdos2unix -c=mac filename
    dos2unix-o仅处理文件,不显示任何输出dos2unix -o filename
    dos2unix-q静默模式,不显示错误信息dos2unix -q filename
    unix2dos-c指定转换的文件格式(可以是 asciiunixmacwindowsunix2dos -c=mac filename
    unix2dos-o仅处理文件,不显示任何输出unix2dos -o filename
    unix2dos-q静默模式,不显示错误信息unix2dos -q filename

    常用参数是-c 用于指定文件格式,-o 和 -q 用于控制输出行为。这两个工具对于确保文本文件在不同操作系统之间的兼容性是非常有用的,特别是在开发和文件传输的场景中。

    转换整个目录:

    find . -type f -exec dos2unix {} \;
    # find ./ -type f 此命令是显示当前目录下所有的文件



    07

    总结

    本文主要介绍了几个常用的 Linux 命令行工具,包括 ulimituptimecurlscpdos2unix 和 unix2dos。这些命令在系统管理、开发测试、文件传输和跨平台兼容性方面都发挥着重要作用。

    • ulimit 命令:用于控制系统资源使用限制,可以有效防止单个用户或进程消耗过多资源,保护系统稳定性。

    • uptime 命令:用于查看系统运行时间和负载情况,帮助评估系统性能,并及时发现系统是否存在过载问题。

    • curl 命令:用于向服务器发送和接收数据,可以用来测试 API、下载数据、与 RESTful API 交互等。

    • scp 命令:用于在 Linux 和 Unix 系统之间进行安全文件传输,可以实现从本地到远程,以及从远程到本地的双向文件传输。

    • dos2unix 和 unix2dos 命令:用于处理文本文件格式转换,可以将 Windows 风格的换行符转换为 Unix 风格的换行符,反之亦然,确保文本文件在不同操作系统之间的兼容性。

    公众号: Lion 莱恩呀

    微信号: 关注获取

    扫码关注 了解更多内容

    点个 在看 你最好看


    Lion 莱恩呀
    专注分享高性能服务器后台开发技术知识,涵盖多个领域,包括C/C++、Linux、网络协议、设计模式、中间件、云原生、数据库、分布式架构等。目标是通过理论与代码实践的结合,让世界上看似难以掌握的技术变得易于理解与掌握。
     最新文章