03-28 周四 Linux 并行工具使用xargs和parallel

news/2024/4/28 20:52:52/文章来源:https://blog.csdn.net/lk142500/article/details/137099714

简介

 程序猿日常工作开发中,免不了要和linux服务器打交道的,如何高效的使用shell命令来实现我们的功能呢,比如说如下的场景:

  • 高效统计一个目录下每个目录的空间占用
  • 高效将一个服务器上的文件拷贝到其他多个服务器上。
  • 高效的启动多个服务器上的进程。

 诸如此类的场景,如果手动,一个一个ssh-scp,太枯燥了。因此,我们便需要高效的并行工具,启动多进程的方式来实现我们的目标。

在Linux中,并发查询多个目录的磁盘占用可以通过多种方法实现。以下是一些可以提高效率的策略:

xargs

使用xargs-P参数并行执行
xargs命令可以将标准输入数据转换为命令行参数,并执行指定的命令。结合-P参数,可以指定并行进程的数量。

find /path/to/search -type d -print0 | xargs -0 -I {} -P 10 du -sh {}

在这个例子中,find命令用于查找所有目录,-print0xargs -0确保了文件名中的特殊字符(如空格)被正确处理。-P 10指定了并行进程的数量,这里设置为10,你可以根据系统资源调整这个数值。
 再提供另外两个实践
 统计数据模型加载时间

ls  | grep 256  | xargs -t  -n 1 sh -c 'egrep "module data load time" $0 | tail -n 50'

 使用5个进程统计当前目录下各个目录的空间大小

ls | grep -v \^[a-k] |xargs -I {} -P 5 sh -c "du -sh {}"

使用ls| grep -v 来过滤需要的目录,其中a-k已经统计过了。
 下面是结合xargs和rsync将当前目录下的所有目录同步到远端机器上。

# 使用rsync同步imagenet目录到远端的gpfs目录下。
rsync -rvza -e "ssh -p 31022" imagenet root@10.106.11.11:/gpfs
rsync -rvza -e "ssh -p 31022" valfull root@10.106.11.11:/gpfs/imagenet
# 这个是代码目录/mnt/sf-nfs/self-define/tanke/ddl/demo_code
ls | xargs -P 3 -I {} rsync -rvza -e "ssh -p 31022" {} root@10.106.11.11:/gpfs/demo_code
ls -l1 | grep '^d' | sort -k 9 | awk -F " " '{print $9}' | xargs -I {} -P 48 sh -c "du -sh {}"

 下面是一些其他的例子
xargs 是一个非常有用的命令行工具,它可以构建并执行命令行,这些命令行由标准输入或管道传递的数据生成。以下是一些 xargs 的示例命令及其解释:

  1. 基本使用

    echo -e "apple\nbanana\ncherry" | xargs echo "Fruit: "
    

    这个命令会将 “apple”、“banana” 和 “cherry” 作为输入,并通过 xargs 传递给 echo 命令,输出为 “Fruit: apple”、“Fruit: banana” 和 “Fruit: cherry”。

  2. 使用 -I 选项进行替换

    echo -e "apple\nbanana\ncherry" | xargs -I % echo "Fruit: %"
    

    -I 选项允许你指定一个替换字符串(在这里是 %),它在命令中被输入项替换。输出结果与上一个例子相同,但使用了不同的方法。

  3. 限制并行进程数

    find . -name "*.txt" | xargs -P 5 rm -f
    

    -P 选项允许你指定同时运行的最大进程数。在这个例子中,find 命令查找所有 .txt 文件,然后 xargs 并行删除这些文件,最多同时运行 5 个 rm 进程。

  4. 使用 -n 选项指定每次调用的参数数量

    seq 10 | xargs -n 2 echo "Number: "
    

    -n 选项指定每次调用命令时传递的参数数量。在这个例子中,seq 10 生成 10 个数字,xargs 每次传递两个数字给 echo 命令,输出为 “Number: 1 2”、“Number: 3 4” 等。

  5. 使用 -d 选项定义输入项分隔符

    echo -e "apple,banana,cherry" | xargs -d ',' echo "Fruit: "
    

    -d 选项允许你指定输入项的分隔符。在这个例子中,分隔符是逗号 ,xargs 会为每个水果名称执行 echo 命令。

  6. 使用 -p 选项进行交互式执行

    ls | xargs -p rm -f
    

    -p 选项会在执行每个命令之前提示用户确认。在这个例子中,ls 列出当前目录的文件,xargs 准备删除这些文件,但在删除前会询问用户。

  7. 结合 xargsawk 进行复杂操作

    find . -type f -name "*.txt" | awk -F '/' '{print $NF}' | sort | uniq | xargs -I % touch %
    

    这个命令链首先查找所有 .txt 文件,然后 awk 提取文件名,sortuniq 去除重复项,最后 xargs 为每个唯一的文件名创建一个新的空文件。

  8. 使用 -0--null 选项处理包含空格和特殊字符的文件名

    find . -type f -print0 | xargs -0 rm -f
    

    -0 选项告诉 xargs 输入项是以 null 字符分隔的,这对于处理包含空格、引号或其他特殊字符的文件名非常有用。

这些例子展示了 xargs 的多种用法,包括基本的文本处理、并行执行、交互式确认以及处理特殊字符和空格。在使用 xargs 时,请确保理解每个选项的含义,以避免意外的行为。

parallel

. 使用parallel命令
parallel是一个shell工具,用于在多个核心上并行执行任务。如果你的系统安装了parallel,可以使用以下命令:

find /path/to/search -type d | parallel du -sh {}

parallel会自动根据系统的核心数来决定并行任务的数量。你也可以使用--jobs参数来手动指定并行任务数。

parallel 是一个非常强大的命令行工具,它允许你并行执行任务。以下是一些 parallel 的例子,展示了不同参数的用法:

  1. 基本使用

    parallel echo ::: a b c
    

    这个命令会并行地输出 abc。默认情况下,parallel 会尝试使用所有可用的 CPU 核心。

  2. 指定任务数

    parallel -j 4 echo ::: a b c d e f g h
    

    使用 -j 参数来指定同时运行的任务数。在这个例子中,parallel 会尝试同时运行 4 个任务。

  3. 使用百分比

    parallel -j 50% echo ::: a b c d e f g h
    

    使用百分比来指定任务数。在这个例子中,parallel 会使用系统可用 CPU 核心的 50% 来运行任务。

  4. 串行任务

    parallel -j 1 echo ::: a b c
    

    设置 -j 1 会使得所有任务串行执行,即使有多个输入项。

  5. 使用不同的任务模板

    parallel 'echo {} is a fruit' ::: apple orange banana
    

    这个命令会输出每个水果名称后面跟着 “is a fruit”。{} 是一个占位符,代表输入项。

  6. 使用重定向文件作为输入

    parallel 'echo {} is a fruit' :::: fruits.txt
    

    使用 ::: 从文件 fruits.txt 中读取输入项。

  7. 并行删除多个文件

    parallel 'rm {}' ::: /path/to/file1 /path/to/file2 /path/to/file3
    

    使用 parallel 并行删除指定的文件。请谨慎使用,因为 rm 命令会永久删除文件。

  8. 使用shell命令作为任务

    parallel 'bash -c "echo {}; sleep 1"' ::: a b c
    

    执行一个复杂的shell命令,这里每个任务都会输出一个字母,然后暂停1秒。

  9. 限制内存使用

    parallel -j 4 --block 20% 'bash -c "echo {}; sleep 1"' ::: a b c
    

    使用 --block 参数来限制任务的内存使用。在这个例子中,每个任务将尝试使用不超过系统可用内存的 20%。

  10. 使用嵌套循环

    parallel 'echo {} is {}' ::: a b c ::: 1 2 3
    

    使用两个输入列表,parallel 会将第一个列表中的每个元素与第二个列表中的每个元素组合,并执行命令。

这些例子展示了 parallel 的一些基本用法和参数。在实际使用中,你可能需要根据具体任务调整参数。在使用 parallel 时,请确保理解每个参数的含义,以避免意外的行为。

编写脚本或使用循环

你可以编写一个简单的shell脚本或使用循环结构来并发执行du命令。

#!/bin/bash
directories=(/path/to/dir1 /path/to/dir2 /path/to/dir3)
for i in "${directories[@]}"; dodu -sh "$i" &
done
wait

这个脚本会并发地对每个目录执行du -sh命令,&将命令放入后台执行。wait命令用于等待所有后台任务完成。

使用subprocess模块(Python)

如果你熟悉Python编程,可以使用subprocess模块来并发执行多个du命令。

import subprocessdirectories = ["/path/to/dir1", "/path/to/dir2", "/path/to/dir3"]
processes = []for directory in directories:p = subprocess.Popen(["du", "-sh", directory])processes.append(p)for proc in processes:proc.wait()

这段Python代码会创建多个进程来并发执行du命令,并等待它们全部完成。

请注意,过多的并发可能会对系统性能产生影响,特别是在磁盘I/O密集型操作如du命令时。确保在执行并发任务时,系统资源充足,以避免不必要的性能下降。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_1026186.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习人工智能:Attention Is All You Need-2-Transformer模型;Attention机制;位置编码

3.2 注意力机制Attention 注意力函数可以描述为将查询和一组键值对映射到输出的过程,其中查询、键、值和输出都是向量。输出被计算为值的加权和,其中每个值的权重由查询与相应键的兼容性函数计算得出。 3.2.1 缩放点积注意力 Scaled Dot-Product Attenti…

Python——jieba优秀的中文分词库(基础知识+实例)

Hello,World! 从去年开始学习Python,在长久的学习过程中,发现了许多有趣的知识,不断充实自己。今天我所写的内容也是极具趣味性,关于优秀的中文分词库——jieba库。 🏔关于Jieba 🐒…

BUG定位---一起学习吧之测试

判断一个BUG是前端还是后端的,通常需要根据BUG的具体表现、发生的环境以及相关的技术栈来进行分析。以下是一些常用的判断方法: 错误发生的位置: 如果BUG涉及的是页面的布局、样式、交互效果等,那么很可能是前端的BUG。如果BUG与…

鸿蒙HarmonyOS应用开发之NDK工程构建概述

OpenHarmony NDK默认使用CMake作为构建系统,随包提供了符合OpenHarmony工具链的基础配置文件 ohos.toolchain.cmake ,用于预定义CMake变量来简化开发者配置。 常用的NDK工程构建方式有: 从源码构建 源码构建也有不同方式: 可以使…

29---Nor Flash电路设计

视频链接 Nor Flash硬件电路设计01_哔哩哔哩_bilibili NOR FLASH电路设计 1、NOR FLASH介绍 NOR Flash最早是由Intel公司于1988年开发出的。 NOR Flash虽容量小但速度快,最大特点是支持芯片内执行(XIP),即程序可以直接在NOR flash的片内…

Spring Cloud Gateway Server MVC

之前你如果要用spring cloud gateway ,就必须是webflux 的,也就是必须是异步响应式编程。不能和spring mvc 一起使用。现在spring cloud 新出了一个可以不用webflux的gateway。 具体使用mvc的gateway步骤如下 普通的Eureka Client的项目 如果你只是想测…

前端Webpack5高级进阶课程

课程介绍 本套视频教程主要内容包含React/Vue最新版本脚手架分析、基于Webpack5编写自己的loader和plugin等,让你开发时选择更多样,最后,用不到一百行的代码实现Webpack打包。通过本套视频教程的学习,可以帮你彻底打通Webpack的任…

CCleaner2024最新版本win系统清理工具功能介绍及下载

CCleaner是一款在计算机领域广受欢迎的系统清理和优化工具。它以其强大的功能、简洁的操作界面和显著的效果,赢得了众多用户的青睐。下面,我将从功能、特点、使用方法以及优势等方面对CCleaner进行详细介绍。 CCleaner下载如下: https://wm.…

一题学会BFS和DFS,手撕不再怕

先复习一下什么是BFS和DFS,各位读者接着往下看就行 BFS算法 BFS类似于树的层次遍历过程,从根节点开始,沿着树的宽度遍历树的节点。如果所有节点均被访问,则算法中止。 舍去空间换时间。 算法思路队列(先进先出) 1…

红外遥控器的使用和详细解释

infrared.c #include "infrared.h"/* 红外 --- PA8*/void Infrared_Init(void) {GPIO_InitTypeDef GPIO_InitStruct; EXTI_InitTypeDef EXTI_InitStruct;NVIC_InitTypeDef NVIC_InitStruct;//使能SYSCFG时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, E…

如何绕过CDN查真实IP

1.多地ping看是否有cdn 2.邮件订阅或者rss订阅 二级域名可能不会做cdnnslookup http://xxx.com 国外dns查找域名历史解析记录,因为域名在上CDN之前用的IP,很有可能就是CDN的真实源IP地址6.phpinfo上显示的信息 cloudflare github可以获取真实IP一个网站…

JAVA电商平台 免 费 搭 建 B2B2C商城系统 多用户商城系统 直播带货 新零售商城 o2o商城 电子商务 拼团商城 分销商城

在数字化时代,电商行业正经历着前所未有的变革。鸿鹄云商的saas云平台以其独特的架构和先进的理念,为电商行业带来了全新的商业模式和营销策略。该平台涉及多个平台端,包括平台管理、商家端、买家平台、微服务平台等,涵盖了pc端、…

鸿蒙雄起!风口就在当下,你如何抉择?

近年来,华为自主研发的鸿蒙操作系统(HarmonyOS)引起了广泛的关注和讨论。鸿蒙系统不仅标志着华为在软件领域的一次重大突破,也预示着全球智能设备市场格局的潜在变化。本文将深入探讨鸿蒙系统的兴起、其在市场上的表现以及对程序员…

【技巧】PyTorch限制GPU显存的可使用上限

转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn] 从 PyTorch 1.4 版本开始,引入了一个新的功能 torch.cuda.set_per_process_memory_fraction(fraction, device),这个功能允许用户为特定的 GPU 设备设置进程可使用的显存上限比例。 测试代…

第十篇【传奇开心果系列】Python自动化办公库技术点案例示例:深度解读Python自动化操作Excel

传奇开心果博文系列 系列博文目录Python自动化办公库技术点案例示例系列博文目录 前言一、重要作用解说二、Python操作Excel的常用库介绍三、数据处理和分析示例代码四、自动化报表生成示例代码五、数据导入和导出示例代码六、数据可视化示例代码八、数据校验和清洗示例代码九、…

开源项目ChatGPT-Next-Web的容器化部署(二)-- jenkins CI构建并推送镜像

一、背景 接着上文已制作好了Dockerfile,接下来就是docker build/tag/push等一系列操作了。 不过在这之前,你还必须在jenkins等CI工具中,拉取源码,然后build构建应用。 因为本文的重点不是讲述jenkins ci工具,所以只…

【动手学深度学习】深入浅出深度学习之线性神经网络

目录 🌞一、实验目的 🌞二、实验准备 🌞三、实验内容 🌼1. 线性回归 🌻1.1 矢量化加速 🌻1.2 正态分布与平方损失 🌼2. 线性回归的从零开始实现 🌻2.1. 生成数据集 &#x…

优酷造车!影视制作车实现片场协同办公、实时粗剪

3月28日,第十一届中国网络视听大会在成都开幕,会场外,一台长12米的“变形金刚”吸引了众多与会嘉宾。这是优酷发布的行业首款影视制作车,该车为导演和后期工种提供一站式软硬件服务和舒适的集体办公环境。优酷工作人员介绍&#x…

centos中安装docker启动chatwoot

安装docker 1.首先,确保系统处于最新状态: yum update2.安装依赖 yum install -y yum-utils device-mapper-persistent-data lvm23.添加 Docker 的官方 GPG 密钥: yum-config-manager --add-repo https://download.docker.com/linux/cent…

OCR研究背景及相关论文分享

光学字符识别(Optical Character Recognition,OCR)是指使用光学方法将图像中的文字转换为机器可编辑的文本的技术。OCR技术的研究和应用已有数十年的历史,其背景和发展受到多方面因素的影响。 技术需求背景 1.自动化文档处理&am…