<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" xmlns:content="http://purl.org/rss/1.0/modules/content/">

  <channel>
    <title>inasayang&#39;s blog</title>
    <link>/</link>
    <description>Recent blog posts on inasayang&#39;s blog</description>
    
    <generator>Hugo (https://gohugo.io)</generator>
    
    <language>zh-cn</language>
    
    <managingEditor>xiayangzzw@gmail.com (inasayang)</managingEditor>
    
    <webMaster>xiayangzzw@gmail.com (inasayang)</webMaster>
    
    <lastBuildDate>Sat, 24 Aug 2024 00:00:00 Z</lastBuildDate>
    
    <atom:link href="/tags/linux/index.xml" rel="self" type="application/rss+xml" />
    

    <item>
      <title>Linux | 如何在终端使用Progress bar</title>
      <link>/posts/240824_terminalprogressbar/</link>
      <pubDate>Sat, 24 Aug 2024 00:00:00 Z</pubDate>
      
      <author>xiayangzzw@gmail.com (inasayang)</author>

      
      
      
      

      <description>
      
      </description>
      <content:encoded>&lt;p&gt;原理：使用 ANSI 转义序列来控制光标位置&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#c6d0f5;background-color:#303446;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#81c8be&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#ef9f76&#34;&gt;time&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#81c8be&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#ef9f76&#34;&gt;sys&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ca9ee6&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#8caaee&#34;&gt;progress_bar&lt;/span&gt;(total):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#ca9ee6&#34;&gt;for&lt;/span&gt; i &lt;span style=&#34;color:#99d1db;font-weight:bold&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#99d1db&#34;&gt;range&lt;/span&gt;(total &lt;span style=&#34;color:#99d1db;font-weight:bold&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ef9f76&#34;&gt;1&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        percent &lt;span style=&#34;color:#99d1db;font-weight:bold&#34;&gt;=&lt;/span&gt; (i &lt;span style=&#34;color:#99d1db;font-weight:bold&#34;&gt;/&lt;/span&gt; total) &lt;span style=&#34;color:#99d1db;font-weight:bold&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#ef9f76&#34;&gt;100&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#737994;font-style:italic&#34;&gt;# bar = &amp;#39;█&amp;#39; * (i // 2) + &amp;#39;-&amp;#39; * (total // 2 - i // 2)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        bar &lt;span style=&#34;color:#99d1db;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6d189&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#8caaee&#34;&gt;\u2588&lt;/span&gt;&lt;span style=&#34;color:#a6d189&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#99d1db;font-weight:bold&#34;&gt;*&lt;/span&gt; (i &lt;span style=&#34;color:#99d1db;font-weight:bold&#34;&gt;//&lt;/span&gt; &lt;span style=&#34;color:#ef9f76&#34;&gt;2&lt;/span&gt;) &lt;span style=&#34;color:#99d1db;font-weight:bold&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6d189&#34;&gt;&amp;#39;-&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#99d1db;font-weight:bold&#34;&gt;*&lt;/span&gt; (total &lt;span style=&#34;color:#99d1db;font-weight:bold&#34;&gt;//&lt;/span&gt; &lt;span style=&#34;color:#ef9f76&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#99d1db;font-weight:bold&#34;&gt;-&lt;/span&gt; i &lt;span style=&#34;color:#99d1db;font-weight:bold&#34;&gt;//&lt;/span&gt; &lt;span style=&#34;color:#ef9f76&#34;&gt;2&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        sys&lt;span style=&#34;color:#99d1db;font-weight:bold&#34;&gt;.&lt;/span&gt;stdout&lt;span style=&#34;color:#99d1db;font-weight:bold&#34;&gt;.&lt;/span&gt;write(&lt;span style=&#34;color:#e78284&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#a6d189&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#8caaee&#34;&gt;\r&lt;/span&gt;&lt;span style=&#34;color:#a6d189&#34;&gt;Progress: |&lt;/span&gt;&lt;span style=&#34;color:#a6d189&#34;&gt;{&lt;/span&gt;bar&lt;span style=&#34;color:#a6d189&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#a6d189&#34;&gt;| &lt;/span&gt;&lt;span style=&#34;color:#a6d189&#34;&gt;{&lt;/span&gt;percent&lt;span style=&#34;color:#a6d189&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#a6d189&#34;&gt;.2f&lt;/span&gt;&lt;span style=&#34;color:#a6d189&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#a6d189&#34;&gt;%&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        sys&lt;span style=&#34;color:#99d1db;font-weight:bold&#34;&gt;.&lt;/span&gt;stdout&lt;span style=&#34;color:#99d1db;font-weight:bold&#34;&gt;.&lt;/span&gt;flush()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        time&lt;span style=&#34;color:#99d1db;font-weight:bold&#34;&gt;.&lt;/span&gt;sleep(&lt;span style=&#34;color:#ef9f76&#34;&gt;0.1&lt;/span&gt;)  &lt;span style=&#34;color:#737994;font-style:italic&#34;&gt;# 模拟工作&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#99d1db&#34;&gt;print&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;progress_bar(&lt;span style=&#34;color:#ef9f76&#34;&gt;100&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;\r&lt;/code&gt;：这个字符的作用是将光标移动到当前行的开头，而不是换到下一行。这样可以覆盖当前行的内容，实现动态更新。&lt;strong&gt;必须写在字符串的最前面，以确保光标移动到当前行的开头。&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;使用 &lt;code&gt;i // 2&lt;/code&gt; 的原因是为了将进度条的长度控制在一个合适的范围内,减少进度条的字符数量，易于阅读&lt;/li&gt;
&lt;/ul&gt;</content:encoded>
      
      <category>linux</category>
      
      <category>python</category>
      
      
      <guid isPermaLink="true">/posts/240824_terminalprogressbar/</guid>
    </item>
    

    <item>
      <title>Linux | tmpfs &amp; tmpdir</title>
      <link>/posts/230226_linuxtmpfs/</link>
      <pubDate>Sun, 26 Feb 2023 00:00:00 Z</pubDate>
      
      <author>xiayangzzw@gmail.com (inasayang)</author>

      
      
      
      

      <description>
      
      </description>
      <content:encoded>&lt;h2 id=&#34;tmpfs&#34; &gt;
&lt;div&gt;
    &lt;a href=&#34;#tmpfs&#34;&gt;
        #
    &lt;/a&gt;
    tmpfs
&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;T&lt;/strong&gt;e&lt;strong&gt;mp&lt;/strong&gt;orary &lt;strong&gt;F&lt;/strong&gt;ile &lt;strong&gt;S&lt;/strong&gt;ystem的简称，数据存储在易失性内存中，而不是一个持久的存储设备。一个类似的结构是RAM磁盘，它显示为一个虚拟磁盘驱动器，并承载一个磁盘文件系统。&lt;/p&gt;
&lt;p&gt;存储在tmpfs中的所有内容都是临时性的，即不会在非易失性存储器如硬盘上直接创建文件（尽管根据操作系统的页面替换策略，交换空间被用作备份存储）。重启时，tmpfs中的所有内容都会丢失。&lt;/p&gt;
&lt;p&gt;临时文件所使用的内存会随着它所包含的文件而增长和缩小。&lt;/p&gt;
&lt;p&gt;许多 Unix 发行版默认为文件系统的 /tmp 分支或共享内存启用和使用 tmpfs。可以通过 df 观察到。&lt;/p&gt;
&lt;p&gt;而在几乎所有的Linux发行版上，都会在/run/或/var/run/上挂载一个tmpfs，以存储临时的运行时文件，如PID文件和Unix域套接字。临时的系统文件，如固件变量，存放在/sys。&lt;/p&gt;
&lt;p&gt;由于RAM的速度比磁盘存储的速度高，tmpfs允许缓存在其中时速度更快，导致整个系统的效率更高，尽管带有页面缓存的操作系统看到的好处较少，因为如果可用内存足够，最近使用的文件页面会保留在内存中。由于RAM在重启时被清除，tmpfs防止系统变得过于杂乱，而不需要用户手动删除临时文件。此外，在RAM中存储文件可以防止磁盘过快填充，并通过减少写入量延长固态硬盘的寿命。&lt;/p&gt;
&lt;p&gt;使用RAM来存储文件，而不是物理磁盘，这可以提高性能，减少由于磁盘故障造成的数据丢失风险。与物理磁盘相比，tmpfs的一个优点是速度更快，因为读写是在内存中进行的，而不是在较慢的物理磁盘上。然而，需要注意的是，tmpfs受到系统可用内存数量的限制，文件系统可能需要定期调整大小或清除，以避免内存耗尽。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;┌───────────┬──────────────┬────────────────┐
│ /dev/shm  │ always tmpfs │ Linux specific │
├───────────┼──────────────┼────────────────┤
│ /tmp      │ can be tmpfs │ FHS 1.0        │
├───────────┼──────────────┼────────────────┤
│ /var/tmp  │ never tmpfs  │ FHS 1.0        │
└───────────┴──────────────┴────────────────┘
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;tmp&#34; &gt;
&lt;div&gt;
    &lt;a href=&#34;#tmp&#34;&gt;
        ##
    &lt;/a&gt;
    /tmp
&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;/tmp是一个目录，被系统和应用程序用来存储只在短时间内需要的临时文件。这些文件通常在系统重新启动时被删除。正因为如此，/tmp经常被用来存储运行中的应用程序需要的文件，如日志文件或临时数据。&lt;/p&gt;
&lt;h3 id=&#34;vartmp&#34; &gt;
&lt;div&gt;
    &lt;a href=&#34;#vartmp&#34;&gt;
        ##
    &lt;/a&gt;
    /var/tmp
&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;/var/tmp用于长期存储临时文件，这些文件应在重启后持续存在。&lt;/p&gt;
&lt;p&gt;一般来说，存储在/var/tmp中的文件不会被自动删除，而且它们的目的是在重启后仍然存在。然而，在某些情况下，/var/tmp中的文件可能会被删除，例如，当系统管理员进行系统维护或磁盘空间变满时。&lt;/p&gt;
&lt;p&gt;值得注意的是，Linux文件系统层次标准（FHS）建议不要自动删除/var/tmp中的文件。然而，一些系统管理员可能会选择配置他们的系统来删除/var/tmp中一定时间内没有被访问或修改的文件。&lt;/p&gt;
&lt;h3 id=&#34;devshm&#34; &gt;
&lt;div&gt;
    &lt;a href=&#34;#devshm&#34;&gt;
        ##
    &lt;/a&gt;
    /dev/shm
&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;/dev/shm是基于Unix的操作系统中的一个特殊目录，用于创建和访问共享内存段。共享内存是一种技术，它允许多个进程访问一个共同的内存区域，该区域可用于在它们之间共享数据。&lt;/p&gt;
&lt;p&gt;在基于Unix的系统中，/dev/shm是一个虚拟文件系统，它提供了一个使用RAM磁盘的共享内存实现。当一个进程在/dev/shm中创建一个共享内存段时，操作系统会在RAM盘中创建一个新的文件，该文件有一个代表共享内存段的唯一名称。然后，这个文件可以被其他有必要权限的进程作为共享内存段使用，以访问它。&lt;/p&gt;
&lt;p&gt;通过/dev/shm使用共享内存的好处是，它比其他进程间的通信方法（如管道或套接字）更快，因为数据不在进程间复制。相反，进程可以直接访问同一区域的内存，这可以提高性能并减少开销。&lt;/p&gt;
&lt;p&gt;需要注意的是，/dev/shm中的共享内存段的内容是不稳定的，当系统重启或创建共享内存段的进程明确删除这些内存段时，这些内容就会丢失。因此，确保使用/dev/shm中的共享内存段的进程正确管理它们的创建和删除，以避免任何数据丢失或系统不稳定是很重要的。&lt;/p&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Tmpfs&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;https://en.wikipedia.org/wiki/Tmpfs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://superuser.com/questions/45342/when-should-i-use-dev-shm-and-when-should-i-use-tmp&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;https://superuser.com/questions/45342/when-should-i-use-dev-shm-and-when-should-i-use-tmp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Temporary_folder&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;https://en.wikipedia.org/wiki/Temporary_folder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;chatGPT&lt;/li&gt;
&lt;/ol&gt;</content:encoded>
      
      <category>linux</category>
      
      <category>tmpfs</category>
      
      
      <guid isPermaLink="true">/posts/230226_linuxtmpfs/</guid>
    </item>
    
  </channel>
</rss>
