<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Aaron Ji's blog (Posts about shell)</title><link>https://blog.jiya.net/</link><description></description><atom:link href="https://blog.jiya.net/categories/shell.xml" rel="self" type="application/rss+xml"></atom:link><language>en</language><copyright>Contents © 2025 &lt;a href="mailto:me@jiya.net"&gt;Aaron Ji&lt;/a&gt; </copyright><lastBuildDate>Wed, 19 Feb 2025 06:17:18 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Linux Usage</title><link>https://blog.jiya.net/posts/2021/06/linux-command-usage.html</link><dc:creator>Aaron Ji</dc:creator><description>&lt;div id="outline-container-org561b407" class="outline-2"&gt;
&lt;h2 id="org561b407"&gt;linux 查看端口占用&lt;/h2&gt;
&lt;div class="outline-text-2" id="text-org561b407"&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;   lsof -i:端口号
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="outline-container-org8ed3aea" class="outline-2"&gt;
&lt;h2 id="org8ed3aea"&gt;Linux 启动程序的时候报 &lt;code&gt;Text file busy&lt;/code&gt;&lt;/h2&gt;
&lt;div class="outline-text-2" id="text-org8ed3aea"&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;lsof | grep exec
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;
查看文件被占用的进程号，然后 &lt;code&gt;kill&lt;/code&gt; 便可。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="outline-container-org767697e" class="outline-2"&gt;
&lt;h2 id="org767697e"&gt;macOS 查看路由&lt;/h2&gt;
&lt;div class="outline-text-2" id="text-org767697e"&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;netstat -nr -f inet
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="outline-container-org35a4619" class="outline-2"&gt;
&lt;h2 id="org35a4619"&gt;Add sudo permission to normal account&lt;/h2&gt;
&lt;div class="outline-text-2" id="text-org35a4619"&gt;
&lt;p&gt;
Create new file under &lt;code&gt;/etc/sudoers.d/&lt;/code&gt; directory, then add following text.
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
user ALL=(ALL) NOPASSWD: ALL
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
Note that &lt;code&gt;user&lt;/code&gt; is the account name of the user.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="outline-container-org15ab24c" class="outline-2"&gt;
&lt;h2 id="org15ab24c"&gt;kill process with pattern in bulk&lt;/h2&gt;
&lt;div class="outline-text-2" id="text-org15ab24c"&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;kill $(ps aux | grep './process_pattern' | awk '{print $2}');
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="outline-container-orge64ff1e" class="outline-2"&gt;
&lt;h2 id="orge64ff1e"&gt;Install Mosh on Alma/CentOS/RHEL&lt;/h2&gt;
&lt;div class="outline-text-2" id="text-orge64ff1e"&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;yum install epel-release -y

yum install mosh -y
# or
dnf install mosh
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="outline-container-org7253adb" class="outline-2"&gt;
&lt;h2 id="org7253adb"&gt;See which package provides us the &lt;code&gt;semanage&lt;/code&gt; command on CentOS/RHEL&lt;/h2&gt;
&lt;div class="outline-text-2" id="text-org7253adb"&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;yum whatprovides semanage
# or
dnf whatprovides semanage
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="outline-container-orged3085f" class="outline-2"&gt;
&lt;h2 id="orged3085f"&gt;Linux netstat see the top connections of process&lt;/h2&gt;
&lt;div class="outline-text-2" id="text-orged3085f"&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;netstat -anp  | awk '{print $7}' |sort | uniq -c | sort -k1 -nr
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="outline-container-org2d61c6d" class="outline-2"&gt;
&lt;h2 id="org2d61c6d"&gt;Linux netstat see the top connections of peers&lt;/h2&gt;
&lt;div class="outline-text-2" id="text-org2d61c6d"&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;netstat -nat|awk '{print$5}'|awk -F : '{print$1}'|sort|uniq -c|sort -rn
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="outline-container-org7b7e59d" class="outline-2"&gt;
&lt;h2 id="org7b7e59d"&gt;use openssl generate random bytes&lt;/h2&gt;
&lt;div class="outline-text-2" id="text-org7b7e59d"&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;# base64
openssl rand -base64 32
# or hex
openssl rand -hex 32
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="outline-container-org33daa91" class="outline-2"&gt;
&lt;h2 id="org33daa91"&gt;Fix terminal after displaying a binary file&lt;/h2&gt;
&lt;div class="outline-text-2" id="text-org33daa91"&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;# https://unix.stackexchange.com/questions/79684/fix-terminal-after-displaying-a-binary-file
alias reset='/usr/bin/reset; stty sane; tput rs1; clear; echo -e "\033c"'
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="outline-container-orgd8ff011" class="outline-2"&gt;
&lt;h2 id="orgd8ff011"&gt;查看服务日志&lt;/h2&gt;
&lt;div class="outline-text-2" id="text-orgd8ff011"&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;journalctl -u service-name -o cat -e # 查看日志
journalctl -u service-name -o cat -f # 实时日志
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;
referer to: &lt;a href="https://unix.stackexchange.com/questions/79684/fix-terminal-after-displaying-a-binary-file/79686#79686"&gt;https://unix.stackexchange.com/questions/79684/fix-terminal-after-displaying-a-binary-file/79686#79686&lt;/a&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="outline-container-orgdb766f0" class="outline-2"&gt;
&lt;h2 id="orgdb766f0"&gt;k3s&lt;/h2&gt;
&lt;div class="outline-text-2" id="text-orgdb766f0"&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;k3s kubectl get ns

k3s kubectl -n &amp;lt;NAMESPACE&amp;gt; get pods

# k3s kubectl -n &amp;lt;NAMESPACE&amp;gt; exec  -ti &amp;lt;POD&amp;gt; bash
k3s kubectl exec -it &amp;lt;POD&amp;gt; -n &amp;lt;NAMESPACE&amp;gt; -- bash


k3s kubectl cp &amp;lt;NAMESPACE&amp;gt;/&amp;lt;POD&amp;gt;:/tmp/foo /tmp/bar
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="outline-container-orgade1a12" class="outline-2"&gt;
&lt;h2 id="orgade1a12"&gt;kubernetes&lt;/h2&gt;
&lt;div class="outline-text-2" id="text-orgade1a12"&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;kubectl get ns

kubectl -n &amp;lt;NAMESPACE&amp;gt; get pods

kubectl exec -it &amp;lt;POD&amp;gt; -n &amp;lt;NAMESPACE&amp;gt; -- bash

kubectl exec -it &amp;lt;POD&amp;gt; -n &amp;lt;NAMESPACE&amp;gt; -- sh


# 注意：复制文件的时候，需要带完整路径，包括目的地址
kubectl cp -n  &amp;lt;NAMESPACE&amp;gt; &amp;lt;POD&amp;gt;:tmp/foo /tmp/bar
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="outline-container-orgd52dee7" class="outline-2"&gt;
&lt;h2 id="orgd52dee7"&gt;docker&lt;/h2&gt;
&lt;div class="outline-text-2" id="text-orgd52dee7"&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;docker exec -it ix-gitea-gitea-1 bash
docker exec -it ix-gitea-postgres-1 bash
&lt;/pre&gt;&lt;/div&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;docker volume ls
docker volume inspect &amp;lt;volume_name&amp;gt;
docker volume rm &amp;lt;volume_name&amp;gt;
docker volume prune # remove unused volume, be careful
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="outline-container-org76d3af4" class="outline-2"&gt;
&lt;h2 id="org76d3af4"&gt;Router OS docker 镜像构建与导入&lt;/h2&gt;
&lt;div class="outline-text-2" id="text-org76d3af4"&gt;
&lt;ul class="org-ul"&gt;
&lt;li&gt;Go 编译&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;env GOOS=linux GOARCH=arm64 go build
&lt;/pre&gt;&lt;/div&gt;

&lt;ul class="org-ul"&gt;
&lt;li&gt;镜像构建&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;docker buildx build --no-cache --platform linux/arm64 --output=type=docker -t tencent-dns-arm64:20250219 -f Dockerfile .
&lt;/pre&gt;&lt;/div&gt;

&lt;ul class="org-ul"&gt;
&lt;li&gt;导出，注意文件扩展名为 tar&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;docker save tencent-dns-arm64:20250219 &amp;gt; tencent-dns-arm64-20250219.tar
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;
然后在 Router OS 里面导入对应镜像，创建 Container 即可。
&lt;/p&gt;

&lt;p&gt;
ipv6 subnet 计算器
&lt;/p&gt;

&lt;p&gt;
&lt;a href="https://www.site24x7.com/tools/ipv6-subnetcalculator.html"&gt;https://www.site24x7.com/tools/ipv6-subnetcalculator.html&lt;/a&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="outline-container-org572eec9" class="outline-2"&gt;
&lt;h2 id="org572eec9"&gt;openresty 构建&lt;/h2&gt;
&lt;div class="outline-text-2" id="text-org572eec9"&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;/configure&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nv"&gt;--prefix=/usr/local/openresty&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nv"&gt;--sbin-path=/usr/sbin/nginx&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nv"&gt;--modules-path=/usr/lib/nginx/modules&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nv"&gt;--conf-path=/etc/nginx/nginx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;conf&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="nv"&gt;--error-log-path=/var/log/nginx/error&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;log&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nv"&gt;--http-log-path=/var/log/nginx/access&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;log&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="nv"&gt;--pid-path=/var/run/nginx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;pid&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nv"&gt;--lock-path=/var/run/nginx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;lock&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="nv"&gt;--http-client-body-temp-path=/var/cache/nginx/client_temp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nv"&gt;--http-proxy-temp-path=/var/cache/nginx/proxy_temp&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nv"&gt;--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nv"&gt;--http-scgi-temp-path=/var/cache/nginx/scgi_temp&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nv"&gt;--user=nginx&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nv"&gt;--group=nginx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nv"&gt;--with-compat&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nv"&gt;--with-threads&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;--with-http_addition_module&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nv"&gt;--with-http_auth_request_module&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="nv"&gt;--with-http_dav_module&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;--add-module=/home/jiya/workspace/nginx-dav-ext-module&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nv"&gt;--with-http_flv_module&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;--with-http_gunzip_module&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="nv"&gt;--with-http_gzip_static_module&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;--with-http_mp4_module&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;--with-http_random_index_module&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="nv"&gt;--with-http_realip_module&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="nv"&gt;--with-http_secure_link_module&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nv"&gt;--with-http_slice_module&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nv"&gt;--with-http_ssl_module&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;--with-http_stub_status_module&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;--with-http_sub_module&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;--with-http_v2_module&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nv"&gt;--with-mail&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nv"&gt;--with-mail_ssl_module&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nv"&gt;--with-stream&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nv"&gt;--with-stream_realip_module&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nv"&gt;--with-stream_ssl_module&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nv"&gt;--with-stream_ssl_preread_module&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nv"&gt;--add-dynamic-module=/home/jiya/workspace/ngx_http_geoip2_module&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="outline-container-org05caefb" class="outline-2"&gt;
&lt;h2 id="org05caefb"&gt;端口映射&lt;/h2&gt;
&lt;div class="outline-text-2" id="text-org05caefb"&gt;
&lt;table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"&gt;


&lt;colgroup&gt;
&lt;col class="org-right"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;

&lt;col class="org-left"&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th scope="col" class="org-right"&gt;端口&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt;备注&lt;/th&gt;
&lt;th scope="col" class="org-left"&gt; &lt;/th&gt;
&lt;th scope="col" class="org-left"&gt; &lt;/th&gt;
&lt;th scope="col" class="org-left"&gt; &lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="org-right"&gt;28080&lt;/td&gt;
&lt;td class="org-left"&gt;HTTP 端口，用于 cloudflare 代理转发&lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;td class="org-left"&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description><category>linux</category><category>shell</category><guid>https://blog.jiya.net/posts/2021/06/linux-command-usage.html</guid><pubDate>Thu, 03 Jun 2021 12:06:00 GMT</pubDate></item></channel></rss>