﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-paulwong-随笔分类-LINUX-SHELL</title><link>http://www.blogjava.net/paulwong/category/55363.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 23 Mar 2026 13:00:10 GMT</lastBuildDate><pubDate>Mon, 23 Mar 2026 13:00:10 GMT</pubDate><ttl>60</ttl><item><title>Linux 查看本机软件硬件信息的命令</title><link>http://www.blogjava.net/paulwong/archive/2026/03/23/451765.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Mon, 23 Mar 2026 03:45:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2026/03/23/451765.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/451765.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2026/03/23/451765.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/451765.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/451765.html</trackback:ping><description><![CDATA[<h1><br /></h1>
  <h2>🖥️ 硬件信息</h2>
  <ul>
    <li><strong>CPU 信息</strong>
      <ul>
        <li><code>lscpu</code> &#8594; 显示 CPU 架构、核心数、线程数</li>
        <li><code>cat /proc/cpuinfo</code> &#8594; 查看详细 CPU 型号、频率</li>
      </ul>
    </li>
    <li><strong>内存信息</strong>
      <ul>
        <li><code>free -h</code> &#8594; 显示内存使用情况</li>
        <li><code>cat /proc/meminfo</code> &#8594; 查看详细内存参数</li>
      </ul>
    </li>
    <li><strong>硬盘信息</strong>
      <ul>
        <li><code>lsblk</code> &#8594; 查看磁盘分区和挂载</li>
        <li><code>df -h</code> &#8594; 查看磁盘使用情况</li>
        <li><code>fdisk -l</code> &#8594; 查看磁盘分区表</li>
      </ul>
    </li>
    <li><strong>PCI/USB 设备</strong>
      <ul>
        <li><code>lspci</code> &#8594; 列出所有 PCI 设备</li>
        <li><code>lsusb</code> &#8594; 列出所有 USB 设备</li>
      </ul>
    </li>
    <li><strong>主板/BIOS</strong>
      <ul>
        <li><code>dmidecode</code> &#8594; 显示 BIOS、主板、内存插槽等信息</li>
      </ul>
    </li>
  </ul>
  <h2>📦 软件信息</h2>
  <ul>
    <li><strong>操作系统版本</strong>
      <ul>
        <li><code>cat /etc/os-release</code> &#8594; 查看发行版信息</li>
        <li><code>uname -a</code> &#8594; 查看内核版本和架构</li>
      </ul>
    </li>
    <li><strong>已安装软件</strong>
      <ul>
        <li>Debian/Ubuntu: <code>dpkg -l</code> 或 <code>apt list --installed</code></li>
        <li>RHEL/CentOS/AlmaLinux: <code>rpm -qa</code> 或 <code>dnf list installed</code></li>
      </ul>
    </li>
    <li><strong>服务与进程</strong>
      <ul>
        <li><code>systemctl list-units --type=service</code> &#8594; 查看正在运行的服务</li>
        <li><code>ps aux</code> &#8594; 查看当前进程</li>
      </ul>
    </li>
    <li><strong>网络信息</strong>
      <ul>
        <li><code>ip addr</code> &#8594; 查看网卡和 IP 地址</li>
        <li><code>ss -tuln</code> &#8594; 查看端口监听情况</li>
      </ul>
    </li>
  </ul>
  <h2>🔍 综合工具</h2>
  <ul>
    <li><code>inxi -Fx</code> &#8594; 一次性显示完整的硬件和系统信息</li>
    <li><code>neofetch</code> &#8594; 美观地显示系统信息</li>
  </ul><img src ="http://www.blogjava.net/paulwong/aggbug/451765.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2026-03-23 11:45 <a href="http://www.blogjava.net/paulwong/archive/2026/03/23/451765.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux删除多余的旧内核</title><link>http://www.blogjava.net/paulwong/archive/2025/01/05/451537.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Sun, 05 Jan 2025 04:01:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2025/01/05/451537.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/451537.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2025/01/05/451537.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/451537.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/451537.html</trackback:ping><description><![CDATA[linux每次升级后都会留下多余的内核, 一键删除的方法(Centos):@import url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
<div><br />
</div>
<div>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; border-image: none; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->dnf&nbsp;remove&nbsp;$(dnf&nbsp;repoquery&nbsp;--installonly&nbsp;--latest-limit=-<span style="color: #800000; ">2</span>)</div>
</div>
<div><br />
</div>
<div><br />
</div><img src ="http://www.blogjava.net/paulwong/aggbug/451537.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2025-01-05 12:01 <a href="http://www.blogjava.net/paulwong/archive/2025/01/05/451537.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>REDHEAD 8 LINUX 软件集合</title><link>http://www.blogjava.net/paulwong/archive/2022/06/23/450773.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Thu, 23 Jun 2022 09:27:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2022/06/23/450773.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/450773.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2022/06/23/450773.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/450773.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/450773.html</trackback:ping><description><![CDATA[<div><a href="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/deploying_different_types_of_servers/index" target="_blank">https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/deploying_different_types_of_servers/index</a><br /><br /><br /></div><img src ="http://www.blogjava.net/paulwong/aggbug/450773.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2022-06-23 17:27 <a href="http://www.blogjava.net/paulwong/archive/2022/06/23/450773.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LINUX YUM</title><link>http://www.blogjava.net/paulwong/archive/2022/06/23/450772.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Thu, 23 Jun 2022 09:21:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2022/06/23/450772.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/450772.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2022/06/23/450772.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/450772.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/450772.html</trackback:ping><description><![CDATA[列出某个软件的所有版本号：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->yum&nbsp;module&nbsp;list&nbsp;nginx<br /><br />Red&nbsp;Hat&nbsp;Enterprise&nbsp;Linux&nbsp;8&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;x86_64&nbsp;-&nbsp;AppStream&nbsp;(RPMs)<br />Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stream&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Profiles&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Summary<br />nginx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.14&nbsp;[d]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;common&nbsp;[d]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nginx&nbsp;webserver<br />nginx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;common&nbsp;[d]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nginx&nbsp;webserver<br />nginx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;common&nbsp;[d]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nginx&nbsp;webserver<br />nginx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.20&nbsp;[e]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;common&nbsp;[d]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nginx&nbsp;webserver<br /><br />Hint:&nbsp;[d]efault,&nbsp;[e]nabled,&nbsp;[x]disabled,&nbsp;[i]nstalled</div><br /><br />设定某个版本为默认版本<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->yum&nbsp;module&nbsp;enable&nbsp;nginx:1.20</div><br /><br />安装默认版本<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->yum&nbsp;install&nbsp;nginx</div><br /><br /><br /><img src ="http://www.blogjava.net/paulwong/aggbug/450772.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2022-06-23 17:21 <a href="http://www.blogjava.net/paulwong/archive/2022/06/23/450772.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>openJDK无法进行jmap</title><link>http://www.blogjava.net/paulwong/archive/2022/05/19/450751.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Thu, 19 May 2022 05:53:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2022/05/19/450751.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/450751.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2022/05/19/450751.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/450751.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/450751.html</trackback:ping><description><![CDATA[<a href="https://blog.csdn.net/qq_32447301/article/details/85109014" target="_blank">https://blog.csdn.net/qq_32447301/article/details/85109014</a><br /><img src ="http://www.blogjava.net/paulwong/aggbug/450751.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2022-05-19 13:53 <a href="http://www.blogjava.net/paulwong/archive/2022/05/19/450751.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LINUX下循环读取文件参数并CURL远程API</title><link>http://www.blogjava.net/paulwong/archive/2021/08/26/435954.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Thu, 26 Aug 2021 07:40:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2021/08/26/435954.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/435954.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2021/08/26/435954.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/435954.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/435954.html</trackback:ping><description><![CDATA[一系列参数存于文本文件，需在LINUX下循环读取，之后以此参数进行CURL远程API调用，同时需记录每次CURL的总时间<br /><br />参数文件，test1.json<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->{"ADDRESS_FREE":"XXX","NAME":{"SURNAME":"XXX","FIRST_NAME":"XXX"}}<br />{"ADDRESS_FREE":"XXX","NAME":{"SURNAME":"XXX","FIRST_NAME":"XXX"}}<br />{"ADDRESS_FREE":"XXX","NAME":{"SURNAME":"XXX","FIRST_NAME":"XXX"}}</div><br />test1.sh<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#!&nbsp;/bin/bash<br /><br />RESULT_FILE="result.csv"<br />echo&nbsp;""&nbsp;&gt;&nbsp;$RESULT_FILE<br />i=1<br />while&nbsp;read&nbsp;line&nbsp;||&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">[&nbsp;"$line"&nbsp;</span><span style="color: #800000; font-weight: bold; ">]</span>]&nbsp;#In&nbsp;case&nbsp;the&nbsp;file&nbsp;has&nbsp;an&nbsp;incomplete&nbsp;(missing&nbsp;newline)&nbsp;last&nbsp;line,&nbsp;you&nbsp;could&nbsp;use&nbsp;this&nbsp;alternative:<br />do&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"$i"<br />&nbsp;&nbsp;&nbsp;&nbsp;printf&nbsp;"$i;$line;"&nbsp;&gt;&gt;&nbsp;$RESULT_FILE<br />&nbsp;&nbsp;&nbsp;&nbsp;curl&nbsp;-w&nbsp;%{time_total}&nbsp;-o&nbsp;/dev/null&nbsp;-X&nbsp;POST&nbsp;-H&nbsp;"Content-Type:application/json"&nbsp;-d&nbsp;"$line"&nbsp;http://ip:port&nbsp;&nbsp;&gt;&gt;&nbsp;$RESULT_FILE<br />&nbsp;&nbsp;&nbsp;&nbsp;#printf&nbsp;"\n\r"&nbsp;&gt;&gt;&nbsp;$RESULT_FILE<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;""&nbsp;&gt;&gt;&nbsp;$RESULT_FILE<br />&nbsp;&nbsp;&nbsp;&nbsp;#i=$((&nbsp;$i&nbsp;+&nbsp;1&nbsp;))<br />&nbsp;&nbsp;&nbsp;&nbsp;((&nbsp;i++&nbsp;))<br />done&nbsp;&lt;&nbsp;test1.json</div><br />Reference:<br /><a href="https://stackoverflow.com/questions/30988586/creating-an-array-from-a-text-file-in-bash" target="_blank">https://stackoverflow.com/questions/30988586/creating-an-array-from-a-text-file-in-bash</a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><img src ="http://www.blogjava.net/paulwong/aggbug/435954.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2021-08-26 15:40 <a href="http://www.blogjava.net/paulwong/archive/2021/08/26/435954.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux sha512sum command</title><link>http://www.blogjava.net/paulwong/archive/2021/07/14/435926.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Wed, 14 Jul 2021 05:41:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2021/07/14/435926.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/435926.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2021/07/14/435926.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/435926.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/435926.html</trackback:ping><description><![CDATA[检查file的SHA512值：<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->sha512sum&nbsp;[OPTION] [FILE]</div><br /><img src ="http://www.blogjava.net/paulwong/aggbug/435926.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2021-07-14 13:41 <a href="http://www.blogjava.net/paulwong/archive/2021/07/14/435926.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Bash get filename from given path on Linux or Unix</title><link>http://www.blogjava.net/paulwong/archive/2021/05/21/435879.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Fri, 21 May 2021 06:10:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2021/05/21/435879.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/435879.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2021/05/21/435879.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/435879.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/435879.html</trackback:ping><description><![CDATA[<a href="https://www.cyberciti.biz/faq/bash-get-filename-from-given-path-on-linux-or-unix/" target="_blank">https://www.cyberciti.biz/faq/bash-get-filename-from-given-path-on-linux-or-unix/</a><img src ="http://www.blogjava.net/paulwong/aggbug/435879.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2021-05-21 14:10 <a href="http://www.blogjava.net/paulwong/archive/2021/05/21/435879.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TCP 連線狀態機制與流程</title><link>http://www.blogjava.net/paulwong/archive/2020/12/29/435758.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Tue, 29 Dec 2020 02:04:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2020/12/29/435758.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/435758.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2020/12/29/435758.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/435758.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/435758.html</trackback:ping><description><![CDATA[<p style="padding: 0px 0px 0.5em; margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; line-height: 1.7em; color: #666666; font-family: Roboto, sans-serif;"><a href="https://dev.twsiyuan.com/2017/09/tcp-states.html" target="_blank">https://dev.twsiyuan.com/2017/09/tcp-states.html</a><br />在開發基於 HTTP 的網路應用服務時，當有大量連線要求，或是與長連線 (Persistent connection) 要求時，常常遇到底層 TCP 的連線斷線錯誤，導致服務不穩定。因此研究了解 TCP 的連線狀態機制，並嘗試用自己的方式整理筆記，希望能從基礎知識中找到解決錯誤的線索，或是任何能更進一步優化服務的手段。</p><p style="padding: 0px 0px 0.5em; margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; line-height: 1.7em; color: #666666; font-family: Roboto, sans-serif;">僅紀錄 TCP 連線狀態以及建立或是斷開連線流程，關於進一步的 TCP 封包協定可參考 Reference 連線。</p><h2>TCP 建立連線 (Open)</h2><p style="padding: 0px 0px 0.5em; margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; line-height: 1.7em; color: #666666; font-family: Roboto, sans-serif;">通常的 TCP 連線建立流程與狀態，需要三次的訊息交換來建立連線 (three-way handshaking)：</p><div style="margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; color: #666666; font-family: Roboto, sans-serif;"><a href="https://2.bp.blogspot.com/-2mx35jqEZGM/Wa5u2IscCeI/AAAAAAAAcuM/EffX5Qq_ByE0RU6C5OYNfIfD8UX5iO1fwCHMYCw/s1600/tcp-open-state-flow.png" style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px transparent; color: #337ab7; text-decoration-line: none;"><img alt="TCP 建立連線流程圖" src="https://2.bp.blogspot.com/-2mx35jqEZGM/Wa5u2IscCeI/AAAAAAAAcuM/EffX5Qq_ByE0RU6C5OYNfIfD8UX5iO1fwCHMYCw/s780/tcp-open-state-flow.png" title="TCP 建立連線流程圖" style="padding: 0px; margin: 0px auto; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: middle; background: 0px 0px; display: block; max-width: 100%; height: auto;" /></a><p style="padding: 0px; margin-top: 0px; margin-bottom: 0px; box-sizing: border-box; border: 0px; outline: 0px; font-size: smaller; vertical-align: baseline; background: 0px 0px; line-height: 1.7em; text-align: center; font-style: italic;">TCP 建立連線流程圖</p></div><p style="padding: 0px 0px 0.5em; margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; line-height: 1.7em; color: #666666; font-family: Roboto, sans-serif;">其中左邊通常為 server，右邊則為 client，文字流程描述：</p><ol style="padding: 0px; margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; color: #666666; font-family: Roboto, sans-serif;"><li style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">Server 建立 TCB，開啟監聽連線，進入狀態 LISTENING</li><li style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">Client 發出連線要求&nbsp;<em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">SYN</em>，進入狀態 SYN-SENT，等待回應</li><li style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">Server 收到&nbsp;<em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">SYN</em>&nbsp;要求，回應連線傳送&nbsp;<em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">SYN</em>+<em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">ACK</em>，並進入狀態 SYN-RCVD (SYN-RECEIVED)</li><li style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">Client 收到&nbsp;<em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">SYN</em>+<em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">ACK</em>&nbsp;確認完成連線進入狀態 ESTABLISHED，並送出&nbsp;<em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">ACK</em></li><li style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">Server 收到&nbsp;<em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">ACK</em>&nbsp;確認連線完成，也進入狀態 ESTABLISHED</li><li style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">雙方開始傳送交換資料</li></ol><p style="padding: 0px 0px 0.5em; margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; line-height: 1.7em; color: #666666; font-family: Roboto, sans-serif;">該些名詞與狀態說明：</p><ul style="padding: 0px; margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; color: #666666; font-family: Roboto, sans-serif;"><li style="padding: 0px; margin: 0px 0px 0px 20px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">CLOSED：連線關閉狀態</li><li style="padding: 0px; margin: 0px 0px 0px 20px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">LISTENING：監聽狀態，被動等待連線</li><li style="padding: 0px; margin: 0px 0px 0px 20px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">SYN-SENT：主動送出連線要求 SYN，並等待對方回應</li><li style="padding: 0px; margin: 0px 0px 0px 20px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">SYN-RCVD：收到連線要求 SYN，送出己方的 SYN+ACK 後，等待對方回應</li><li style="padding: 0px; margin: 0px 0px 0px 20px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">ESTABLISHED：確定完成連線，可開始傳輸資料</li><li style="padding: 0px; margin: 0px 0px 0px 20px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">TCB：Transmission Control Block，see&nbsp;<a href="https://en.wikipedia.org/wiki/Transmission_Control_Protocol#Resource_usage" style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px transparent; color: #337ab7; text-decoration-line: none;">wiki</a></li><li style="padding: 0px; margin: 0px 0px 0px 20px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;"><em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">SYN</em>：Synchronous，表示與對方建立連線的同步符號</li><li style="padding: 0px; margin: 0px 0px 0px 20px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;"><em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">ACK</em>：Acknowledgement，表示發送的數據已收到無誤</li></ul><p style="padding: 0px 0px 0.5em; margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; line-height: 1.7em; color: #666666; font-family: Roboto, sans-serif;">在建立連線時，可能會發生雙方同步建立連線的情形 (Simultaneous open)，常見於 P2P 的應用中，其 TCP 建立連線的流程不太一樣：</p><div style="margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; color: #666666; font-family: Roboto, sans-serif;"><a href="https://2.bp.blogspot.com/-nnxA1swfqQY/Wa5u2c-OG5I/AAAAAAAAcuQ/Tkw_aIM24mIdWqc7vvJsrWGJqZ6J3swPgCHMYCw/s1600/tcp-simultaneous-open-state-flow.png" style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px transparent; color: #337ab7; text-decoration-line: none;"><img alt="TCP 同步建立連線流程圖" src="https://2.bp.blogspot.com/-nnxA1swfqQY/Wa5u2c-OG5I/AAAAAAAAcuQ/Tkw_aIM24mIdWqc7vvJsrWGJqZ6J3swPgCHMYCw/s780/tcp-simultaneous-open-state-flow.png" title="TCP 同步建立連線流程圖" style="padding: 0px; margin: 0px auto; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: middle; background: 0px 0px; display: block; max-width: 100%; height: auto;" /></a><p style="padding: 0px; margin-top: 0px; margin-bottom: 0px; box-sizing: border-box; border: 0px; outline: 0px; font-size: smaller; vertical-align: baseline; background: 0px 0px; line-height: 1.7em; text-align: center; font-style: italic;">TCP 同步建立連線流程圖</p></div><p style="padding: 0px 0px 0.5em; margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; line-height: 1.7em; color: #666666; font-family: Roboto, sans-serif;">畫成 TCP 狀態流程圖會是這樣：</p><div style="margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; color: #666666; font-family: Roboto, sans-serif;"><a href="https://2.bp.blogspot.com/-h1UBJNPvlcI/Wa5u2QYeR9I/AAAAAAAAcuU/s18PlBSPCEABhRF6fdohXTbC8gBGqAOmwCHMYCw/s1600/tcp-open-state-diagram.png" style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px transparent; color: #337ab7; text-decoration-line: none;"><img alt="TCP Open 狀態圖" src="https://2.bp.blogspot.com/-h1UBJNPvlcI/Wa5u2QYeR9I/AAAAAAAAcuU/s18PlBSPCEABhRF6fdohXTbC8gBGqAOmwCHMYCw/s780/tcp-open-state-diagram.png" title="TCP Open 狀態圖" style="padding: 0px; margin: 0px auto; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: middle; background: 0px 0px; display: block; max-width: 100%; height: auto;" /></a><p style="padding: 0px; margin-top: 0px; margin-bottom: 0px; box-sizing: border-box; border: 0px; outline: 0px; font-size: smaller; vertical-align: baseline; background: 0px 0px; line-height: 1.7em; text-align: center; font-style: italic;">TCP Open 狀態圖</p></div><h2>TCP 斷開連線 (Close)</h2><p style="padding: 0px 0px 0.5em; margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; line-height: 1.7em; color: #666666; font-family: Roboto, sans-serif;">TCP 關閉流程如下，比建立連線還要複雜一些，需要經過四次的訊息交換 (four-way handshaking)，要注意的是可以是由 server 發起主動關閉，抑或是 client 發起主動關閉：</p><div style="margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; color: #666666; font-family: Roboto, sans-serif;"><a href="https://2.bp.blogspot.com/-EVTQe_4Vk00/Wa5u2iHmHQI/AAAAAAAAcuY/LnHrPzqczAQMs_dRnwzCuI_aQGyID_MMQCHMYCw/s1600/tcp-close-state-flow.png" style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px transparent; color: #337ab7; text-decoration-line: none;"><img alt="TCP 關閉連線流程圖" src="https://2.bp.blogspot.com/-EVTQe_4Vk00/Wa5u2iHmHQI/AAAAAAAAcuY/LnHrPzqczAQMs_dRnwzCuI_aQGyID_MMQCHMYCw/s780/tcp-close-state-flow.png" title="TCP 關閉連線流程圖" style="padding: 0px; margin: 0px auto; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: middle; background: 0px 0px; display: block; max-width: 100%; height: auto;" /></a><p style="padding: 0px; margin-top: 0px; margin-bottom: 0px; box-sizing: border-box; border: 0px; outline: 0px; font-size: smaller; vertical-align: baseline; background: 0px 0px; line-height: 1.7em; text-align: center; font-style: italic;">TCP 關閉連線流程圖</p></div><p style="padding: 0px 0px 0.5em; margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; line-height: 1.7em; color: #666666; font-family: Roboto, sans-serif;">其中左邊通常為 client 狀態 (由 client 主動發起關閉連線)，右邊則為 server 狀態，文字流程描述：</p><ol style="padding: 0px; margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; color: #666666; font-family: Roboto, sans-serif;"><li style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">Client 準備關閉連線，發出&nbsp;<em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">FIN</em>，進入狀態 FIN-WAIT-1</li><li style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">Server 收到&nbsp;<em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">FIN</em>，發回收到的&nbsp;<em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">ACK</em>，進入狀態 CLOSE-WAIT，並通知 App 準備斷線</li><li style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">Client 收到&nbsp;<em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">ACK</em>，進入狀態 FIN-WAIT-2，等待 server 發出&nbsp;<em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">FIN</em></li><li style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">Server 確認 App 處理完斷線請求，發出&nbsp;<em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">FIN</em>，並進入狀態 LAST-ACK</li><li style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">Client 收到&nbsp;<em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">FIN</em>，並回傳確認的&nbsp;<em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">ACK</em>，進入狀態 TIME-WAIT，等待時間過後正式關閉連線</li><li style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">Server 收到&nbsp;<em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">ACK</em>，便直接關閉連線</li></ol><p style="padding: 0px 0px 0.5em; margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; line-height: 1.7em; color: #666666; font-family: Roboto, sans-serif;">該些名詞與狀態說明：</p><ul style="padding: 0px; margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; color: #666666; font-family: Roboto, sans-serif;"><li style="padding: 0px; margin: 0px 0px 0px 20px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">ESTABLISHED：連線開啟狀態</li><li style="padding: 0px; margin: 0px 0px 0px 20px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">CLOSE-WAIT：等待連線關閉狀態，等待 App 回應</li><li style="padding: 0px; margin: 0px 0px 0px 20px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">LAST-ACK：等待連線關閉狀態，等待遠端回應&nbsp;<em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">ACK</em>&nbsp;後，便關閉連線</li><li style="padding: 0px; margin: 0px 0px 0px 20px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">FIN-WAIT-1：等待連線關閉狀態，等待遠端回應&nbsp;<em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">ACK</em></li><li style="padding: 0px; margin: 0px 0px 0px 20px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">FIN-WAIT-2：等待連線關閉狀態，等待遠端回應&nbsp;<em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">FIN</em></li><li style="padding: 0px; margin: 0px 0px 0px 20px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">TIME-WAIT：等待連線關閉狀態，等段一段時候，保證遠端有收到其 ACK 關閉連線 (網路延遲問題)</li><li style="padding: 0px; margin: 0px 0px 0px 20px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">CLOSED：連線關閉狀態</li><li style="padding: 0px; margin: 0px 0px 0px 20px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;"><em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">FIN</em>：表示關閉連線的同步符號</li><li style="padding: 0px; margin: 0px 0px 0px 20px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;"><em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">ACK</em>：Acknowledgement，表示發送的數據已收到無誤</li></ul><p style="padding: 0px 0px 0.5em; margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; line-height: 1.7em; color: #666666; font-family: Roboto, sans-serif;">有可能連線的雙方同時發起關閉，雖然機率還蠻低的：</p><div style="margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; color: #666666; font-family: Roboto, sans-serif;"><a href="https://2.bp.blogspot.com/-QvO1WNqd01w/Wa5u21Cmx5I/AAAAAAAAcuc/jRp47O6GvSwIffpwcdge21j1_Lfs0kO2ACHMYCw/s1600/tcp-simultaneous-close-state-flow.png" style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px transparent; color: #337ab7; text-decoration-line: none;"><img alt="TCP 同步關閉連線流程圖" src="https://2.bp.blogspot.com/-QvO1WNqd01w/Wa5u21Cmx5I/AAAAAAAAcuc/jRp47O6GvSwIffpwcdge21j1_Lfs0kO2ACHMYCw/s780/tcp-simultaneous-close-state-flow.png" title="TCP 同步關閉連線流程圖" style="padding: 0px; margin: 0px auto; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: middle; background: 0px 0px; display: block; max-width: 100%; height: auto;" /></a><p style="padding: 0px; margin-top: 0px; margin-bottom: 0px; box-sizing: border-box; border: 0px; outline: 0px; font-size: smaller; vertical-align: baseline; background: 0px 0px; line-height: 1.7em; text-align: center; font-style: italic;">TCP 同步關閉連線流程圖</p></div><p style="padding: 0px 0px 0.5em; margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; line-height: 1.7em; color: #666666; font-family: Roboto, sans-serif;">這邊多一個狀態：</p><ul style="padding: 0px; margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; color: #666666; font-family: Roboto, sans-serif;"><li style="padding: 0px; margin: 0px 0px 0px 20px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">CLOSING：等待連線關閉狀態，等待遠端回應&nbsp;<em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">ACK</em></li></ul><p style="padding: 0px 0px 0.5em; margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; line-height: 1.7em; color: #666666; font-family: Roboto, sans-serif;">畫成 TCP 狀態流程圖會是這樣：</p><div style="margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; color: #666666; font-family: Roboto, sans-serif;"><a href="https://2.bp.blogspot.com/-VCsQkhIyQGw/Wa5u3IDGhRI/AAAAAAAAcug/plhn7GLFVmUFbXb0DkZ6gE0AZgrRa6MyQCHMYCw/s1600/tcp-close-state-diagram.png" style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px transparent; color: #337ab7; text-decoration-line: none;"><img alt="TCP Close 狀態圖" src="https://2.bp.blogspot.com/-VCsQkhIyQGw/Wa5u3IDGhRI/AAAAAAAAcug/plhn7GLFVmUFbXb0DkZ6gE0AZgrRa6MyQCHMYCw/s780/tcp-close-state-diagram.png" title="TCP Close 狀態圖" style="padding: 0px; margin: 0px auto; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: middle; background: 0px 0px; display: block; max-width: 100%; height: auto;" /></a><p style="padding: 0px; margin-top: 0px; margin-bottom: 0px; box-sizing: border-box; border: 0px; outline: 0px; font-size: smaller; vertical-align: baseline; background: 0px 0px; line-height: 1.7em; text-align: center; font-style: italic;">TCP Close 狀態圖</p></div><h2>查詢現在電腦的 TCP 狀態</h2><p style="padding: 0px 0px 0.5em; margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; line-height: 1.7em; color: #666666; font-family: Roboto, sans-serif;">查詢目前所有的連線狀態 (Windows &amp; Linux)：</p><pre prettyprinted"="" style="padding: 9.5px; margin-top: 0px; margin-bottom: 10px; box-sizing: border-box; border: 1px solid #cccccc; outline: 0px; font-size: 13px; vertical-align: baseline; background: #ffffff; white-space: pre-wrap; line-height: 1.42857; font-family: Menlo, &quot;Bitstream Vera Sans Mono&quot;, &quot;DejaVu Sans Mono&quot;, Monaco, Consolas, monospace; word-break: break-all; overflow-wrap: break-word; color: #333333; border-radius: 4px; overflow: auto;"><code style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline; background: 0px 0px transparent; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; color: inherit; border-radius: 0px;"><span style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">netstat </span><span style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">-</span><span style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">a</span></code></pre><h2>Reference</h2><ul style="padding: 0px; margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; color: #666666; font-family: Roboto, sans-serif;"><li style="padding: 0px; margin: 0px 0px 0px 20px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;"><a href="https://community.apigee.com/articles/7970/tcp-states-explained.html" style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px transparent; color: #337ab7; text-decoration-line: none;">TCP states - explained</a></li><li style="padding: 0px; margin: 0px 0px 0px 20px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;"><a href="https://www.youtube.com/watch?v=Ad38n2hYOuA" style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px transparent; color: #337ab7; text-decoration-line: none;">TCP tutorial tcp state diagram for connection establishment closing</a></li><li style="padding: 0px; margin: 0px 0px 0px 20px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;"><a href="https://www.isi.edu/touch/pubs/infocomm99/infocomm99-web/" style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px transparent; color: #337ab7; text-decoration-line: none;">The TIME-WAIT state in TCP and Its Effect on Busy Servers</a></li><li style="padding: 0px; margin: 0px 0px 0px 20px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;"><a href="https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.1.0/com.ibm.zos.v2r1.halu101/constatus.htm" style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px transparent; color: #337ab7; text-decoration-line: none;">TCP connection status</a></li><li style="padding: 0px; margin: 0px 0px 0px 20px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;"><a href="http://tcpipguide.com/free/t_TCPOperationalOverviewandtheTCPFiniteStateMachineF-2.htm" style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px transparent; color: #337ab7; text-decoration-line: none;">TCP Operational Overview and the TCP Finite State Machine (FSM)</a></li><li style="padding: 0px; margin: 0px 0px 0px 20px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;"><a href="https://en.wikipedia.org/wiki/Transmission_Control_Protocol" style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px transparent; color: #337ab7; text-decoration-line: none;">Transmission Control Protocol<br /></a></li></ul><img src ="http://www.blogjava.net/paulwong/aggbug/435758.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2020-12-29 10:04 <a href="http://www.blogjava.net/paulwong/archive/2020/12/29/435758.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LINUX SHELL之SCL</title><link>http://www.blogjava.net/paulwong/archive/2020/11/05/435715.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Thu, 05 Nov 2020 08:42:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2020/11/05/435715.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/435715.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2020/11/05/435715.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/435715.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/435715.html</trackback:ping><description><![CDATA[什么是SCL<br /><a href="https://blog.51cto.com/hashlinux/1772066" target="_blank">https://blog.51cto.com/hashlinux/1772066</a><br /><br />CentOS/RHEL 开发环境之 devtoolset<br /><a href="http://blog.fungo.me/2016/03/centos-development-env/" target="_blank">http://blog.fungo.me/2016/03/centos-development-env/</a><br /><br />How can I make a Red Hat Software Collection persist after a reboot/logout?<br /><a href="https://access.redhat.com/solutions/527703" target="_blank">https://access.redhat.com/solutions/527703</a><img src ="http://www.blogjava.net/paulwong/aggbug/435715.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2020-11-05 16:42 <a href="http://www.blogjava.net/paulwong/archive/2020/11/05/435715.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux shell 中检查文件夹是否存在</title><link>http://www.blogjava.net/paulwong/archive/2020/09/25/435673.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Fri, 25 Sep 2020 03:11:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2020/09/25/435673.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/435673.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2020/09/25/435673.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/435673.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/435673.html</trackback:ping><description><![CDATA[To check if a directory exists in a shell script, you can use the following:<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->if&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">&nbsp;-d&nbsp;"$DIRECTORY"&nbsp;</span><span style="color: #800000; font-weight: bold; ">]</span><span style="color: #008000; ">;</span><span style="color: #008000; ">&nbsp;then</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;#&nbsp;Control&nbsp;will&nbsp;enter&nbsp;here&nbsp;if&nbsp;$DIRECTORY&nbsp;exists.<br />fi</div><br />Or to check if a directory doesn't exist:<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->if&nbsp;<span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">&nbsp;!&nbsp;-d&nbsp;"$DIRECTORY"&nbsp;</span><span style="color: #800000; font-weight: bold; ">]</span><span style="color: #008000; ">;</span><span style="color: #008000; ">&nbsp;then</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;#&nbsp;Control&nbsp;will&nbsp;enter&nbsp;here&nbsp;if&nbsp;$DIRECTORY&nbsp;doesn't&nbsp;exist.<br />fi</div><img src ="http://www.blogjava.net/paulwong/aggbug/435673.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2020-09-25 11:11 <a href="http://www.blogjava.net/paulwong/archive/2020/09/25/435673.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux shell 中函数的调用</title><link>http://www.blogjava.net/paulwong/archive/2020/09/25/435672.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Fri, 25 Sep 2020 03:06:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2020/09/25/435672.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/435672.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2020/09/25/435672.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/435672.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/435672.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->function&nbsp;fun1(){<br />&nbsp;&nbsp;return&nbsp;34<br />}<br /><br />function&nbsp;fun2(){<br />&nbsp;&nbsp;local&nbsp;res=$(fun1)<br />&nbsp;&nbsp;echo&nbsp;$res<br />}</div><br />上面调用fun1时，打印结果却不返回34，这是为何？原来函数只是返回结果成功与否的值，并不能自定义。因此要改成下面这种写法<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->function&nbsp;fun1(){<br />&nbsp;&nbsp;echo&nbsp;34<br />}<br /><br />function&nbsp;fun2(){<br />&nbsp;&nbsp;local&nbsp;res=$(fun1)<br />&nbsp;&nbsp;echo&nbsp;$res<br />}</div><br /><a href="https://stackoverflow.com/questions/17336915/return-value-in-a-bash-function" target="_blank">https://stackoverflow.com/questions/17336915/return-value-in-a-bash-function</a><br /><img src ="http://www.blogjava.net/paulwong/aggbug/435672.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2020-09-25 11:06 <a href="http://www.blogjava.net/paulwong/archive/2020/09/25/435672.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>向所有服务器发送相同命令</title><link>http://www.blogjava.net/paulwong/archive/2020/09/24/435670.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Thu, 24 Sep 2020 02:52:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2020/09/24/435670.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/435670.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2020/09/24/435670.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/435670.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/435670.html</trackback:ping><description><![CDATA[先在主控机执行ssh-keygen，再向被控机传输key，<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->ssh-copy-id&nbsp;-i&nbsp;~/.ssh/id_rsa.pub&nbsp;user1@ip</div><br />样例脚本transfer-artemis.sh如下：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#!/bin/bash<br /><br />loop_server(){<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;((i=2<span style="color: #008000; ">;</span><span style="color: #008000; ">&nbsp;i&lt;=8;&nbsp;i++))</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;do<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ipd=10.10.31.1${i}2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;${ipd}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$1&nbsp;${ipd}<br />&nbsp;&nbsp;&nbsp;&nbsp;done<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;((i=1<span style="color: #008000; ">;</span><span style="color: #008000; ">&nbsp;i&lt;=2;&nbsp;i++))</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;do<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ipd=10.20.31.1${i}2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;${ipd}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$1&nbsp;${ipd}<br />&nbsp;&nbsp;&nbsp;&nbsp;done<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br />start_artemis_cmd(){<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"ssh&nbsp;user1@${1}&nbsp;'/opt/myapp/artemis/apache-artemis-2.15.0/instance/bin/artemis-service&nbsp;start'"<br />&nbsp;&nbsp;&nbsp;&nbsp;ssh&nbsp;user1@${1}&nbsp;'/opt/myapp/artemis/apache-artemis-2.15.0/instance/bin/artemis-service&nbsp;start'<br />}<br /><br />stop_artemis_cmd(){<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"ssh&nbsp;user1@${1}&nbsp;'/opt/myapp/apache-activemq-5.15.10/bin/activemq&nbsp;stop'"<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"ssh&nbsp;user1@${1}&nbsp;'/opt/myapp/artemis/apache-artemis-2.15.0/instance/bin/artemis-service&nbsp;stop'"<br />&nbsp;&nbsp;&nbsp;&nbsp;ssh&nbsp;user1@${1}&nbsp;'/opt/myapp/apache-activemq-5.15.10/bin/activemq&nbsp;stop'<br />&nbsp;&nbsp;&nbsp;&nbsp;ssh&nbsp;user1@${1}&nbsp;'/opt/myapp/artemis/apache-artemis-2.15.0/instance/bin/artemis-service&nbsp;stop'<br />}<br /><br />scp_artemis_cmd(){<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"ssh&nbsp;user1@${1}&nbsp;'rm&nbsp;-rf&nbsp;/opt/myapp/artemis'"<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"scp&nbsp;-r&nbsp;/opt/myapp/artemis&nbsp;user1@${1}:/opt/myapp/"<br />&nbsp;&nbsp;&nbsp;&nbsp;ssh&nbsp;user1@${1}&nbsp;'rm&nbsp;-rf&nbsp;/opt/myapp/artemis'<br />&nbsp;&nbsp;&nbsp;&nbsp;scp&nbsp;-r&nbsp;/opt/myapp/artemis&nbsp;user1@${1}:/opt/myapp/<br />}<br /><br />stop_artemis(){<br />&nbsp;&nbsp;&nbsp;&nbsp;loop_server&nbsp;stop_artemis_cmd<br />}<br /><br />start_artemis(){<br />&nbsp;&nbsp;&nbsp;&nbsp;loop_server&nbsp;start_artemis_cmd<br />}<br /><br />scp_artemis(){&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;loop_server&nbsp;scp_artemis_cmd<br />}<br /><br />#start_artemis&nbsp;"Hello&nbsp;start_artemis"<br /><br />$1</div><br />执行命令：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->./transfer-artemis.sh&nbsp;start_artemis</div><img src ="http://www.blogjava.net/paulwong/aggbug/435670.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2020-09-24 10:52 <a href="http://www.blogjava.net/paulwong/archive/2020/09/24/435670.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux nohup命令详解</title><link>http://www.blogjava.net/paulwong/archive/2020/09/02/435652.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Wed, 02 Sep 2020 03:52:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2020/09/02/435652.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/435652.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2020/09/02/435652.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/435652.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/435652.html</trackback:ping><description><![CDATA[nohup命令及其输出文件<br /><br />nohup命令：如果你正在运行一个进程，而且你觉得在退出帐户时该进程还不会结束，那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思( n ohang up)。<br /><br />一般都是在linux下nohup格式：&nbsp;&nbsp;<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->nohup&nbsp;command</div><br />或者<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->nohup&nbsp;command&nbsp;&amp;</div><br />这之间的差别是带&amp;的命令行，即使terminal（终端）关闭，或者电脑死机程序依然运行（前提是你把程序递交到服务器上）；<br /><br />它把标准输出（STDOUT）和标准错误（STDERR）结果输出到nohup.txt文件这个看似很方便，但是当输出很大的时候，nohup.txt文件会非常大，或者多个后台命令的时候大家都会输出到nohup.txt文件，不利于查找结果和调试程序。<br /><br />所以能够重定向输出会非常方便。下面要介绍标准输出，标准输入 和标准错误了。<br /><br />其实我们一直都在用，只是没有注意到，&nbsp;<br /><br />比如<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->&gt;./command.sh&nbsp;&gt;&nbsp;output</div><br />#这其中的&gt;就是标准输出符号，其实是 1&gt;output 的缩写<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->&gt;./command.sh&nbsp;2&gt;&nbsp;output</div><br />＃这里的2&gt;就是将标准错误输出到output文件里。<br /><br />而0&lt; 则是标准输入了。<br /><br />下面步入正题，重定向后台命令<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->&gt;nohup&nbsp;./command.sh&nbsp;&gt;&nbsp;output&nbsp;2&gt;&amp;1&nbsp;&amp;</div><br />解释：前面的nohup 和后面的&amp;我想大家都能明白了把。<br /><br />主要是中间的 2&gt;&amp;1的意思<br /><br />这个意思是把标准错误（2）重定向到标准输出中（1），而标准输出又导入文件output里面， &nbsp; www.2cto.com<br /><br />所以结果是标准错误和标准输出都导入文件output里面了。<br /><br />至于为什么需要将标准错误重定向到标准输出的原因，那就归结为标准错误没有缓冲区，而stdout有。<br /><br />这就会导致 &gt;output 2&gt;output 文件output被两次打开，而stdout和stderr将会竞争覆盖，这肯定不是我门想要的.<br /><br />这就是为什么有人会写成：<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->nohup&nbsp;./command.sh&nbsp;&gt;output&nbsp;2&gt;output</div>出错的原因了<br /><br />##########################<br /><br />最后谈一下/dev/null文件的作用<br /><br />这是一个无底洞，任何东西都可以定向到这里，但是却无法打开。<br /><br />所以一般很大的stdou和stderr当你不关心的时候可以利用stdout和stderr定向到这里<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->&gt;./command.sh&nbsp;&gt;/dev/null&nbsp;2&gt;&amp;1</div><img src ="http://www.blogjava.net/paulwong/aggbug/435652.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2020-09-02 11:52 <a href="http://www.blogjava.net/paulwong/archive/2020/09/02/435652.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何找出LINUX中消耗CPU最大的应用的PID</title><link>http://www.blogjava.net/paulwong/archive/2020/08/14/435642.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Fri, 14 Aug 2020 03:52:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2020/08/14/435642.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/435642.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2020/08/14/435642.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/435642.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/435642.html</trackback:ping><description><![CDATA[有时查看LINUX时，会发现当前CPU消耗连续保持80%，如何找出是哪个应用呢？<br />
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->top&nbsp;-i&nbsp;//输出应用列表，并隐藏IDEL的应用<br />
P&nbsp;//在列表时，按P，则按CPU的使用排序</div><br /><br />How To Check CPU Utilization In Linux With Command Line<br /><a href="https://phoenixnap.com/kb/check-cpu-usage-load-linux" target="_blank">https://phoenixnap.com/kb/check-cpu-usage-load-linux</a><img src ="http://www.blogjava.net/paulwong/aggbug/435642.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2020-08-14 11:52 <a href="http://www.blogjava.net/paulwong/archive/2020/08/14/435642.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LINUX SHELL</title><link>http://www.blogjava.net/paulwong/archive/2020/07/06/435591.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Mon, 06 Jul 2020 01:23:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2020/07/06/435591.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/435591.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2020/07/06/435591.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/435591.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/435591.html</trackback:ping><description><![CDATA[!!<br /><a href="https://tecadmin.net/tutorial/bash-scripting/" target="_blank">https://tecadmin.net/tutorial/bash-scripting/</a><br /><br />Shell 教程<br /><a href="https://www.runoob.com/linux/linux-shell.html" target="_blank">https://www.runoob.com/linux/linux-shell.html</a><br /><br />Check existence of input argument in a Bash shell script<br /><a href="https://stackoverflow.com/questions/6482377/check-existence-of-input-argument-in-a-bash-shell-script" target="_blank">https://stackoverflow.com/questions/6482377/check-existence-of-input-argument-in-a-bash-shell-script</a><br /><br />How to Check if a File or Directory Exists in Bash<br /><a href="https://linuxize.com/post/bash-check-if-file-exists/" target="_blank">https://linuxize.com/post/bash-check-if-file-exists/</a><br /><br />bash string compare to multiple correct values<br /><a href="https://stackoverflow.com/questions/21157435/bash-string-compare-to-multiple-correct-values" target="_blank">https://stackoverflow.com/questions/21157435/bash-string-compare-to-multiple-correct-values</a><br /><br />Bash &#8211; Check If Two Strings are Equal<br /><a href="https://tecadmin.net/tutorial/bash/examples/check-if-two-strings-are-equal/" target="_blank">https://tecadmin.net/tutorial/bash/examples/check-if-two-strings-are-equal/</a><br /><br /><br /><br /><img src ="http://www.blogjava.net/paulwong/aggbug/435591.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2020-07-06 09:23 <a href="http://www.blogjava.net/paulwong/archive/2020/07/06/435591.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux查看程序端口占用情况</title><link>http://www.blogjava.net/paulwong/archive/2014/10/13/418668.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Mon, 13 Oct 2014 03:52:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2014/10/13/418668.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/418668.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2014/10/13/418668.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/418668.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/418668.html</trackback:ping><description><![CDATA[<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 19.5px; font-size: 13px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #fefef2;">今天发现服务器上Tomcat 8080端口起不来，老提示端口已经被占用。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 19.5px; font-size: 13px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #fefef2;">使用命令：</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 19.5px; font-size: 13px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #fefef2;">ps -aux | grep tomcat</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 19.5px; font-size: 13px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #fefef2;">发现并没有8080端口的Tomcat进程。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 19.5px; font-size: 13px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #fefef2;">使用命令：netstat &#8211;apn</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 19.5px; font-size: 13px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #fefef2;">查看所有的进程和端口使用情况。发现下面的进程列表，其中最后一栏是PID/Program name&nbsp;</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 19.5px; font-size: 13px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #fefef2;"><a href="http://www.blogjava.net/images/blogjava_net/hankchen/WindowsLiveWriter/Linux_7E54/clip_image002_2.jpg" style="margin: 0px; padding: 0px; color: #075db3;"><img title="clip_image002" height="214" alt="clip_image002" src="http://www.blogjava.net/images/blogjava_net/hankchen/WindowsLiveWriter/Linux_7E54/clip_image002_thumb.jpg" width="687" border="0" style="margin: 0px; padding: 0px; border: 0px; display: inline; width: 687px; height: 214px;" /></a></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 19.5px; font-size: 13px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #fefef2;">发现8080端口被PID为9658的Java进程占用。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 19.5px; font-size: 13px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #fefef2;">进一步使用命令：ps -aux | grep java，或者直接：ps -aux | grep pid 查看</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 19.5px; font-size: 13px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #fefef2;"><a href="http://www.blogjava.net/images/blogjava_net/hankchen/WindowsLiveWriter/Linux_7E54/clip_image004_2.jpg" style="margin: 0px; padding: 0px; color: #075db3;"><img title="clip_image004" height="47" alt="clip_image004" src="http://www.blogjava.net/images/blogjava_net/hankchen/WindowsLiveWriter/Linux_7E54/clip_image004_thumb.jpg" width="592" border="0" style="margin: 0px; padding: 0px; border: 0px; display: inline; width: 592px; height: 47px;" /></a></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; line-height: 19.5px; font-size: 13px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #fefef2;">就可以明确知道8080端口是被哪个程序占用了！然后判断是否使用KILL命令干掉！<br style="margin: 0px; padding: 0px;" /><br style="margin: 0px; padding: 0px;" /><br style="margin: 0px; padding: 0px;" />方法二：直接使用 netstat &nbsp; -anp &nbsp; | &nbsp; grep&nbsp;&nbsp;portno<br style="margin: 0px; padding: 0px;" />即：netstat &#8211;apn | grep 8080</p><img src ="http://www.blogjava.net/paulwong/aggbug/418668.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2014-10-13 11:52 <a href="http://www.blogjava.net/paulwong/archive/2014/10/13/418668.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>