我需要编写一个 bash 脚本,其中我必须创建一个文件,其中包含主机 IP 地址的详细信息及其与相应 MAC 地址的映射。
当主机的 IP 地址可用时,是否有任何可能的方法可以找出任何(远程)主机的 MAC 地址?
我一直在使用rsync脚本将一台主机上的数据与另一台主机上的数据同步。数据中有许多小文件,几乎占 1.2TB。
为了同步这些文件,我一直在使用以下rsync命令:
rsync -avzm --stats --human-readable --include-from proj.lst /data/projects REMOTEHOST:/data/
Run Code Online (Sandbox Code Playgroud)
proj.lst 的内容如下:
+ proj1
+ proj1/*
+ proj1/*/*
+ proj1/*/*/*.tar
+ proj1/*/*/*.pdf
+ proj2
+ proj2/*
+ proj2/*/*
+ proj2/*/*/*.tar
+ proj2/*/*/*.pdf
...
...
...
- *
Run Code Online (Sandbox Code Playgroud)
作为测试,我选择了其中的两个项目(8.5GB 数据)并执行了上面的命令。作为一个顺序过程,它需要 14 分 58 秒才能完成。因此,对于 1.2TB 的数据,需要几个小时。
如果我可以rsync并行处理多个进程(使用&,xargs或parallel),它将节省我的时间。
我尝试使用以下命令parallel(在cding 到源目录之后),执行时间为 12 分 37 秒:
parallel --will-cite -j 5 rsync -avzm --stats --human-readable {} REMOTEHOST:/data/ ::: …Run Code Online (Sandbox Code Playgroud) 我阅读了一些关于“ifconfig”命令的文章/教程,其中大部分都包含一个通用语句 -
“ifconfig 已被 ip 命令弃用”
并建议学习ip命令。但是他们都没有解释“ip”命令如何比“ifconfig”更强大。
它们之间有什么区别?
我有一个很长的 IP 地址列表,它们没有按顺序排列。我需要找到特定 IP 地址之前/之后有多少个 IP 地址。我怎样才能做到这一点?
我编写了一个 bash 脚本,格式如下:
#!/bin/bash
start=$(date +%s)
inFile="input.txt"
outFile="output.csv"
rm -f $inFile $outFile
while read line
do
-- Block of Commands
done < "$inFile"
end=$(date +%s)
runtime=$((end-start))
echo "Program has finished execution in $runtime seconds."
Run Code Online (Sandbox Code Playgroud)
该while循环将从读取$inFile,上线执行一些活动和转储结果$outFile。
由于$inFile有 3500 多行长,脚本完全执行需要 6-7 个小时。为了尽量减少这个时间,我计划在这个脚本中使用多线程或分叉。如果我创建 8 个子进程,$inFile将同时处理 8 行。
如何才能做到这一点?
当history执行命令时,它显示最近执行的命令的列表。是否有任何规定可以让我们看到执行这些特定命令的时间?
我有List.csv以下格式的 csv 文件命名:
Location,IP Address,Host Name,Domain,Domain Name, User Name,Manufacturer,Model,System Type, Serial Number, Operating System,RAM (GB),Processor Type,Processor Frequency
H1,xx.xx.xx.xx,PC1,domain.com,DOMAIN,User1,LENOVO,4089AZ8,X86-based PC,L90RA96,Microsoft Windows 7 Professional ,2,Pentium(R) Dual-Core CPU E5800,3.20GHz
H3,xx.xx.xx.xx,PC2,domain.com,DOMAIN,User2,LENOVO,4089AZ8,X86-based PC,L906W3P,Microsoft Windows 7 Professional ,2,Pentium(R) Dual-Core CPU E5800,3.20GHz
H2,xx.xx.xx.xx,PC3,domain.com,DOMAIN,User3,LENOVO,4089A76,X86-based PC,L929410,Microsoft Windows 7 Professional ,2,Pentium(R) Dual-Core CPU E5400,2.70GHz
H2,xx.xx.xx.xx,PC4,domain.com,DOMAIN,User4,Hewlett-Packard,Z800,x64-based PC,SGH007QT16,Microsoft Windows 7 Professional ,12,Intel(R) Xeon(R) CPU W5590,3.33GHz
Run Code Online (Sandbox Code Playgroud)
如果您查看该MODEL列,它会带有一些无法解释模型名称的值。我创建了另一个文件 ,model-list.csv其中包含这些值及其相应的模型名称。它看起来像:
Manufacturer,Value,Model Name
Lenovo, 4089AZ8, ThinkCentre
Lenovo, 4089A76, ThinkCentre
HP, Z800, HP Z800 Workstation
Run Code Online (Sandbox Code Playgroud)
我希望List.csv文件中的值被model-list.csv. 由于文件中有 …
我知道mkdir -p /path/to/new/directory将创建一个新目录以及父目录(如果需要)的事实。
如果我必须创建一个新文件及其父目录(其中部分或所有父目录不存在),我可以使用mkdir -p /path/to/directory && touch /path/to/directory/NEWFILE. 但是,还有其他命令可以实现这一目标吗?
我计划从本地 Linux 机器在远程 Windows 系统上运行 bash 脚本。为此,我必须从本地计算机登录到 Windows 计算机,然后执行 bash 脚本。
首先,这可能吗?如果是,那么怎么做呢?
bash ×4
linux ×3
shell-script ×3
command ×1
command-line ×1
csv ×1
gnu-parallel ×1
ip ×1
mac-address ×1
mkdir ×1
networking ×1
parallelism ×1
remote ×1
rhel ×1
rsync ×1
shell ×1
ssh ×1
timestamps ×1
windows ×1