<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
            <title type="text">高先生的IC-CAD学习笔记</title>
    <updated>2022-10-24T22:06:07+08:00</updated>
        <id>http://43.142.104.170:8090</id>
        <link rel="alternate" type="text/html" href="http://43.142.104.170:8090" />
        <link rel="self" type="application/atom+xml" href="http://43.142.104.170:8090/atom.xml" />
    <rights>Copyright © 2026, 高先生的IC-CAD学习笔记</rights>
    <generator uri="https://halo.run/" version="1.5.4">Halo</generator>
            <entry>
                <title><![CDATA[解决 /lib64/libc.so.6: version `GLIBC_2.14‘/version `GLIBC_2.14‘ not found 的问题]]></title>
                <link rel="alternate" type="text/html" href="http://43.142.104.170:8090/archives/jie-jue-lib64libcso6versionglibc214versionglibc214notfound-de-wen-ti" />
                <id>tag:http://43.142.104.170:8090,2022-10-24:jie-jue-lib64libcso6versionglibc214versionglibc214notfound-de-wen-ti</id>
                <published>2022-10-24T21:43:29+08:00</published>
                <updated>2022-10-24T22:06:07+08:00</updated>
                <author>
                    <name>高风亮节</name>
                    <uri>http://43.142.104.170:8090</uri>
                </author>
                <content type="html">
                        <![CDATA[<h1 id="%E6%96%B9%E6%B3%95%E4%B8%80%EF%BC%9A" tabindex="-1">方法一：</h1><h2 id="1%E3%80%81download" tabindex="-1">1、download</h2><p>wget <a href="http://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.gz" target="_blank">http://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.gz</a><br />wget <a href="http://ftp.gnu.org/gnu/glibc/glibc-2.16.tar.gz" target="_blank">http://ftp.gnu.org/gnu/glibc/glibc-2.16.tar.gz</a></p><h2 id="2%E3%80%81%E8%A7%A3%E5%8E%8B%E7%BC%A9" tabindex="-1">2、解压缩</h2><p>tar xvf glibc-2.14.tar.gz<br />tar xvf glibc-2.16.tar.gz</p><h2 id="3%E3%80%81%E5%AE%89%E8%A3%85" tabindex="-1">3、安装</h2><p>cd glibc-2.14<br />mkdir build<br />cd build<br />…/configure --prefix=/usr/local/glibc-2.14<br />make -j4<br />make install</p><p>cd glibc-2.16<br />mkdir build<br />cd build<br />…/configure --prefix=/usr/local/glibc-2.16<br />make -j4<br />make install</p><h2 id="4%E3%80%81%E6%8B%B7%E8%B4%9D%E9%93%BE%E6%8E%A5%E5%BA%93" tabindex="-1">4、拷贝链接库</h2><p>cp /usr/local/glibc-2.14/lib/libc-2.16.so /lib64/<br />cp /usr/local/glibc-2.16/lib/libc-2.16.so /lib64/</p><h2 id="5%E3%80%81%E5%88%9B%E5%BB%BA%E8%BD%AF%E8%BF%9E%E6%8E%A5" tabindex="-1">5、创建软连接</h2><p>cd /lib64/<br />mv libc.so.6 libc.so.6.bakup_bak<br />此时会报错<br />ls: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory<br />解决方法：<br />/sbin/sln <a href="http://libc-2.16.so" target="_blank">libc-2.16.so</a> /lib64/libc.so.6</p><h2 id="6%E3%80%81%E6%9F%A5%E7%9C%8B%E6%94%AF%E6%8C%81%E7%9A%84%E7%89%88%E6%9C%AC" tabindex="-1">6、查看支持的版本</h2><p>strings /lib64/libc.so.6 |grep GLIBC</p><h2 id="7%E3%80%81%E5%A6%82%E6%9E%9Cssh%E8%BF%9E%E6%8E%A5%E6%8A%A5%E9%94%99" tabindex="-1">7、如果ssh连接报错</h2><p>vi /etc/environment<br />LANG=en_US.utf-8<br />LC_ALL=</p><p>source /etc/environment<br />localedef -v -c -i en_US -f UTF-8 en_US.UTF-8</p><h1 id="%E6%96%B9%E6%B3%95%E4%BA%8C%EF%BC%9A" tabindex="-1">方法二：</h1><h2 id="1%E3%80%81download-1" tabindex="-1">1、Download</h2><p>wget <a href="http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-utils-2.17-55.el6.x86_64.rpm" target="_blank">http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-utils-2.17-55.el6.x86_64.rpm</a><br />wget <a href="http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-static-2.17-55.el6.x86_64.rpm" target="_blank">http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-static-2.17-55.el6.x86_64.rpm</a><br />wget <a href="http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-2.17-55.el6.x86_64.rpm" target="_blank">http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-2.17-55.el6.x86_64.rpm</a><br />wget <a href="http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-common-2.17-55.el6.x86_64.rpm" target="_blank">http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-common-2.17-55.el6.x86_64.rpm</a><br />wget <a href="http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-devel-2.17-55.el6.x86_64.rpm" target="_blank">http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-devel-2.17-55.el6.x86_64.rpm</a><br />wget <a href="http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-headers-2.17-55.el6.x86_64.rpm" target="_blank">http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-headers-2.17-55.el6.x86_64.rpm</a><br />wget <a href="http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/nscd-2.17-55.el6.x86_64.rpm" target="_blank">http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/nscd-2.17-55.el6.x86_64.rpm</a></p><h2 id="2%E3%80%81%E5%AE%89%E8%A3%85" tabindex="-1">2、安装</h2><p>rpm -Uvh *-2.17-55.el6.x86_64.rpm --force --nodeps</p><h2 id="3%E3%80%81%E6%9F%A5%E7%9C%8B" tabindex="-1">3、查看</h2><p>strings /lib64/libc.so.6 | grep GLIBC</p>]]>
                </content>
            </entry>
            <entry>
                <title><![CDATA[转载：IC设计之脚本语言]]></title>
                <link rel="alternate" type="text/html" href="http://43.142.104.170:8090/archives/转载ic设计之脚本语言" />
                <id>tag:http://43.142.104.170:8090,2022-10-13:转载ic设计之脚本语言</id>
                <published>2022-10-13T14:27:22+08:00</published>
                <updated>2022-10-13T17:16:52+08:00</updated>
                <author>
                    <name>高风亮节</name>
                    <uri>http://43.142.104.170:8090</uri>
                </author>
                <content type="html">
                        <![CDATA[<p>本文主要是想简单介绍一些常用的脚本（script）语言，学以致用，一个看似复杂的脚本，其实也是由很多简单的linux指令&amp;语法构成，掌握后，对提高学习工作效率有很大帮助</p><p>目前，我在工作中接触得最多脚本&amp;编程类语言如下</p><p>Cshell bashell perl tcl skill makefile C++ Verilog<br />我当时自学的时候发现把以上的电子书初略看了一下 ，发现对于初学者来说确实不那么友好，看完后久了没接触就忘得差不多了，现在脑子里回忆下，就只剩下一个大概印象，语言的这种东西啊，真的还是得平时积累memo，多看多写。</p><p>后来发现很多脚本语言都与C语言类似，后悔当初没有好好学习C++</p><p>什么是shell？</p><p>Shell 是一个用 C 语言编写的程序，既是一种命令语言，又是一种程序设计语言。<br />Linux 的 Shell 种类有很多，我常见的是Bashell 和 Cshell</p><p>Bourne Shell（/usr/bin/sh或/bin/sh）<br />Bourne Again Shell（/bin/bash）<br />C Shell（/usr/bin/csh）<br />K Shell（/usr/bin/ksh）<br />Shell for Root（/sbin/sh）<br />先简单介绍一下Bashell吧，Bash 也是大多数Linux系统默认的Shell</p><p>下图是以synopsys的hspice工具环境变量设置</p><p>我用bashell写的<br /><img src="/upload/2022/10/a1bc095e000d03da9a51cf4f734b510e_v2-9c90ab9960912172a636f621d350e174_1440w.webp" alt="a1bc095e000d03da9a51cf4f734b510e_v2-9c90ab9960912172a636f621d350e174_1440w" /></p><p>#! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序</p><p>从脚本第一句能看出来#!/bin/bash，是用bashell写的，一般读脚本前我都会有意识看一下</p><p>alias命令</p><p>Linux alias命令用于设置指令的别名。<br />export命令</p><p>Linux export命令用于设置或显示环境变量。<br />比如：export Synopsys_Dir=/opt/synopsys<br />export的效力仅及于该次登陆操作。注销或者重新开一个窗口，export命令给出的环境变量都不存在了<br />输入export可以查看当前的所有环境变量。<br />如果你要在某个环境变量（比如PATH）中加入一些新的路径（如/bin/bash），可以使用如下命令格式<br />export PATH=/bin/bash:$PATH<br />执行命令</p><p>执行一个bashell脚本<br />1 bash filename<br />2 sh filename<br />3 ./filename<br />区别：在bash&amp;sh命令下，filename文件可以无&quot;执行权限&quot;，即没有rwx中的x权限。<br />对于./命令，filename文件必须要有x执行权限。<br />source命令</p><p>source命令是bash shell的内置命令，从c shell而来<br />. shell 与source命令相同，从Bourne shell而来<br />source 会强制执行脚本中的全部权限，忽略文件的权限<br />source 可以影响脚本的父shell权限，export只能影响子shell权限<br />其实上图的Bashell也可换用Cshell来写，里面的命令也有所不同<br /><img src="/upload/2022/10/05f16ee8daa1237a0f6faad27f928b8f_v2-b9c8091a7cde56b40f2047fc12f11f5d_1440w.webp" alt="05f16ee8daa1237a0f6faad27f928b8f_v2-b9c8091a7cde56b40f2047fc12f11f5d_1440w" /></p><p>export换成setenv，其实类似</p><p>关于shell的话，我觉得最容易入手的脚本，也是我目前最常用的脚本语言</p><p>比如下图我用cshell，写的一个calibre lvs验证脚本<br /><img src="/upload/2022/10/5c0f5ea2f7f0739fd5578547972aef07_v2-52502962055c3b1d0f532b6cb7ab8dd5_1440w.webp" alt="5c0f5ea2f7f0739fd5578547972aef07_v2-52502962055c3b1d0f532b6cb7ab8dd5_1440w" /></p><p>linux指令结合cshell语法，（foreach/if else/pushd popd sed awk ）等，在工作中用处实在是太广了</p><p>接下来是perl语言</p><p>我觉得perl是真的强大，有秒杀shell的感觉，唯一缺点就是语法太苦涩了，看完我表示太难了</p><p>现在，我只会写一些简单的perl脚本，下图举了一个例子</p><p>#! /usr/bin/perl<br />如果一直都需要警告(warning),可以在 #! 这一行加上-w，如： #! /usr/bin/perl –w</p><p>$line就是变量 ，STDIN是用户输入的内容 eq 就是 = 的意思<br /><img src="/upload/2022/10/c6196b2909cc1bb6e72adb574a414f23_v2-3cd699b8ef8c79f8f6855ab03ca9993a_1440w.webp" alt="c6196b2909cc1bb6e72adb574a414f23_v2-3cd699b8ef8c79f8f6855ab03ca9993a_1440w" /></p><p>当输入内容是\n时，那么结果输出：That was just a blank line!\n</p><p>如果输入是123时，那么结果输出：That line of input was: 123</p><p>上图举了个简单的例子，perl的语法中有很多函数，调用子程序，特别有意思</p><p>比如用perl写一个tree的脚本</p><p>[crazy@crazy_one calibre]$ tree -L 2<br />.<br />├── a.csh<br />├── cds.lib -&gt; …/cds.lib<br />├── celllist<br />├── inv1<br />│   ├── CDL<br />│   ├── DRC<br />│   ├── GDS<br />│   └── LVS<br />├── inv2<br />│   ├── CDL<br />│   ├── DRC<br />│   ├── GDS<br />│   └── LVS<br />├── inv3<br />│   ├── CDL<br />│   ├── DRC<br />│   ├── GDS<br />│   └── LVS<br />└── run_all.csh<br />perl用途：在IC设计中一些需要统计仿真结果，文本格式转换的地方非常适用，执行速度快，比如用perl来处理各种log，在模拟IC中统计LPE抽出信息&amp;各种条件下的仿真结果等</p><p>关于tcl脚本</p><p>Tcl = Tool Command Language (tickle) ，接触mentor和synopsy的工具的人应该有所了解<br /><img src="/upload/2022/10/c5352a1ab8c7b53a8a4eb9152d013d06_v2-6fae3f1148756c658c738acae1f3f55e_1440w.webp" alt="c5352a1ab8c7b53a8a4eb9152d013d06_v2-6fae3f1148756c658c738acae1f3f55e_1440w" /></p><p>tcl脚本中一些语法还是比较容易理解，在数字ic后端中分析时序，desin的信息等，非常推荐初学者学习</p><p>关于skill<br />Cadence提供二次开发的SKILL语言，它是一种基于通用人工智能语言—Lisp的交互 式高级编程语言 。SKILL可以与底层系统交互，也提供了访问Cadence各个工具的丰富接口。用户可以通过Skill语言来访问，并且可以开发自己的基于Cadence平台的工具。</p><p>下图是一个 Skill 程序的栗子，这个程序是用来把版图中不在格点上的图形，移到格点上<br /><img src="/upload/2022/10/704e736ddfa2a3145a11f82a0feee4a3_v2-64c1f4cf797787cf2766a22be0f02bb9_1440w.webp" alt="704e736ddfa2a3145a11f82a0feee4a3_v2-64c1f4cf797787cf2766a22be0f02bb9_1440w" /></p><p>skill的话用途也很广泛，在一些需要鼠标点击操作的地方，可以通过skill实现脚本自动化操作，提高效率，自动化，这个也是未来IC设计发展的趋势。</p><p>之前看过一篇关于将人工智能机器学习应用在IC设计中的文章，事实也不是没有可能，目前看来不成熟，没有大数据还是有点难以实现，涉及到专利的问题，核心技术非公开</p><p>关于makefile</p><p>Linux 的程序员应该很了解，主要是GNU make的用法、语法 ，使用Makefile的好处是能够使用一行命令来完成“自动化编译” ，make 是一个命令工具，它解释 Makefile 中的指令(应该说是规则)，Makefile 中描述了工程中所有文件的编译顺序、规则。</p><p>makefile 关系到了整个工程的编译规则。一个工程中的源文件不计数，其按类型、 功能、模块分别放在若干个目录中，makefile 定义了一系列的规则来指定，哪些文件需要先编译，哪些文件需要后编译，哪些文件需要重新编译，甚至于进行更复杂的功能 操作，因为 makefile 就像一个 Shell 脚本一样，其中也可以执行操作系统的命令。<br />makefile 带来的好处就是——“自动化编译”，一旦写好，只需要一个 make 命令，整个工程完全自动编译，极大的提高了软件开发的效率</p><p>之前有用makefile写过仿真教程 ，北冥有鱼：VCS和Verdi联合仿真教程</p><p>其实很多脚本语言深入的用法，我也不是很清楚，时间和精力有限，个人建议掌握一种常用的脚本语言，在工作中的话，正好可以学以致用。</p>]]>
                </content>
            </entry>
            <entry>
                <title><![CDATA[hcell简明教程]]></title>
                <link rel="alternate" type="text/html" href="http://43.142.104.170:8090/archives/hcell-jian-ming-jiao-cheng" />
                <id>tag:http://43.142.104.170:8090,2022-10-13:hcell-jian-ming-jiao-cheng</id>
                <published>2022-10-13T14:06:44+08:00</published>
                <updated>2022-10-13T14:22:50+08:00</updated>
                <author>
                    <name>高风亮节</name>
                    <uri>http://43.142.104.170:8090</uri>
                </author>
                <content type="html">
                        <![CDATA[<h2 id="1%E3%80%81%E4%BB%80%E4%B9%88%E6%98%AFhcells%3F" tabindex="-1">1、什么是HCElls?</h2><ul><li><p>HCELL = Hierarchically Corresponding Cell</p></li><li><p>使用-hcell option可以显著提高Calibre性能，缩短LVS运行时间。</p></li></ul><p>layout 太过于复杂，而电脑配置如果有限，calibre LVS运行时经常因为内存不足而中断，无法继续。此时需要用到hcells，他可以简化schematic和layout的层次，有效的提高calibre的性能，同时也会缩短LVS所需要的时间。hcell英文意思是hierarchically corresponding cell，层次化对应的单元。</p><p>通常在layout(版图)和source中相对应的hcell列表应该是比较简单的，且这些cell在层次化的结构中出现了很多次。一个详细的hcell列表是没用必要的，这是因为在Calibre LVS时层次化的单元会被选择性的打散以提高性能，而密集的单元会影响calibre的性能。在hcell列表中的cells则不会被打平，指定某些像通孔(via)或其它一些小的单元也会阻碍calibre LVS的性能。</p><p>在calibre LVS hcells中，layout(版图) cell name和相对应的source cell name可能是一样的，也可能不同。可以指定一对多的关系，即一个layout(版图) cell name对应多个不同的source cell name。当然也可以指定多对一的关系，即一个source cell name对应多个layout(版图) cell name。但是多对多的关系是不被允许的。</p><h2 id="2%E3%80%81%E6%96%87%E4%BB%B6%E6%A0%BC%E5%BC%8F" tabindex="-1">2、文件格式</h2><p>下面举个例子说明一下 hcells 文件的格式。</p><p>一对多：同一layout cell name 对应不同的source cell name</p><pre><code class="language-">//layout sourceABC DEFABC GHIABC JKL</code></pre><p>多对一的例子:不同的layout cell name 对应不同的 source cell name</p><pre><code class="language-">//layout sourceUVW XYZRST XYZOPQ XYZ</code></pre><p>多对多不允许:</p><pre><code class="language-">//layout sourceUVW XYZRST XYZOPQ XYZOPQ GHI</code></pre><p>这种会提示:</p><pre><code class="language-">error. OPQ mapped previously to XYZwhich is mapped to three different names.</code></pre><h2 id="3%E3%80%81calibre%E5%9B%BE%E5%BD%A2%E7%95%8C%E9%9D%A2%E7%94%A8%E6%B3%95" tabindex="-1">3、calibre图形界面用法</h2><p>calibre Interactive –LVS 界面，点左面的 Input，选择 H-cells (netlist的右边)选项卡，在Use H-Cells file前面打钩，如果有已经写好的hcell.txt文件，就点后面的 …选择事先写好的上hcell文件;如果没有的画，在那里输入你想要的hcell文件的名字，如hcell.txt，点后面的view，会提示你文件不存在是否创建，点是，就可以打开一个编辑界面，进行hcells的编写。Calibre LVS其它的设置和使用和平时一样.</p><h2 id="4%E3%80%81calibre%E5%91%BD%E4%BB%A4%E8%A1%8C%E7%94%A8%E6%B3%95" tabindex="-1">4、calibre命令行用法</h2><pre><code class="language-">calibre -lvs -hier 64 -tuobo 16 -nowait -hcell ./design.hcells lvs.tHCELL文件格式**一对多：**同一layout cell name对应不同的source cell name</code></pre><h2 id="5%E3%80%81%E6%95%B0%E5%AD%97eda-tool-cmd" tabindex="-1">5、数字EDA Tool cmd</h2><ul><li>Innovus cmd:</li></ul><pre><code class="language-">set file0 [open ../dataout/[dbgDesignName].hcells w]foreach cell [dbGet top.insts.cell.name -u] {  puts $file0 &quot;$cell $cell&quot;}close $file0</code></pre><ul><li>ICC2/FC cmd:</li></ul><pre><code class="language-">set file0 [open ../dataout/$DesignName.hcells w]foreach cell [lsort -u [get_attribute [get_flat_cells -all] ref_name]] {  puts $file0 &quot;$cell #cell&quot;}close $file0 </code></pre><h2 id="6%E3%80%81%E5%8F%82%E8%80%83%E6%96%87%E7%8C%AE" tabindex="-1">6、参考文献</h2><pre><code class="language-">Fusion Compiler/ IC Compiler II User GuideCSDN/微信公众号读芯树</code></pre>]]>
                </content>
            </entry>
            <entry>
                <title><![CDATA[git简明教程]]></title>
                <link rel="alternate" type="text/html" href="http://43.142.104.170:8090/archives/git简明教程" />
                <id>tag:http://43.142.104.170:8090,2022-10-12:git简明教程</id>
                <published>2022-10-12T10:16:57+08:00</published>
                <updated>2022-10-12T10:17:14+08:00</updated>
                <author>
                    <name>高风亮节</name>
                    <uri>http://43.142.104.170:8090</uri>
                </author>
                <content type="html">
                        <![CDATA[<h1 id="1%E3%80%81%E5%AE%89%E8%A3%85" tabindex="-1">1、安装</h1><p>yum -y install git #安装git工具</p><h1 id="2%E3%80%81%E9%85%8D%E7%BD%AEgit" tabindex="-1">2、配置git</h1><p>git config --global <a href="http://user.name" target="_blank">user.name</a> “test”    #your namegit config<br />global user.email “<a href="mailto:test@test.com" target="_blank">test@test.com</a>”  #your emailgit config<br />global core.editor vim      # your favourite editor<br />git config --global color.ui true</p><h1 id="3%E3%80%81git%E4%BD%BF%E7%94%A8" tabindex="-1">3、git使用</h1><h2 id="3.1%E3%80%81%E5%88%9D%E5%A7%8B%E5%8C%96%E3%80%81%E6%9F%A5%E7%9C%8B%E7%8A%B6%E6%80%81%E5%92%8C%E6%97%A5%E5%BF%97" tabindex="-1">3.1、初始化、查看状态和日志</h2><p>git init  //如果别人的内容里面已经包含一些 git 记录, 则不需要进行初始化; 如果别人的实验/项目中没有使用 git , 首先需要切换到实验/项目的目录中, 然后输入下面命令进行初始化。<br />git log       //查看日志<br />git status  //查看状态是否有新的文件或已修改的文件未被跟踪，如果有请及时存档<br />git add mygitfile2    //提交文件<br />git add -A                //提交所有<br />git add *                  //提交所有<br />跟踪代码源文件可能会跟踪了一些不必要的文件, 例如编译产生的 .o 文件, 和最后产生的可执行文件，git在添加跟踪文件之前可以作筛选：<br />ls-a   <a href="//xn--jvv205a.gitignore" target="_blank">//查看.gitignore</a> 文件是否存在<br />vim .gitignore  <a href="//xn--5p0an15a.gitignore" target="_blank">//编辑.gitignore</a> 文件.给出需要被 git 忽略的文件和文件类型<br />git status  //确认是否没有新的文件或已修改的文件未被跟踪<br />git  commit  //确认无误后，存档。提交工程当前的状态<br />执行上条命令后, 将会弹出文本编辑器, 需要在第一行中添加本次存档的注释, 例如，“fix bug for xxxfile”.<br />git log  //查看刚才的注释是否已经添加上</p><h2 id="3.2%E3%80%81%E4%B8%8B%E8%BD%BD%E5%88%AB%E4%BA%BA%E6%8F%90%E4%BE%9B%E7%9A%84%E6%BA%90%E4%BB%A3%E7%A0%81" tabindex="-1">3.2、下载别人提供的源代码</h2><p>git clone /path/to/repository                                             //本地<br />git clone test@remoteserver1:/path/to/repository                   //远端<br />你的本地仓库由 git 维护的三棵“树”组成。第一个是你的 工作目录，它持有实际文件；第二个是 暂存区（Index），它像个缓存区域，临时保存你的改动；最后是 HEAD，它指向你最后一次提交的结果。</p><h2 id="3.3%E3%80%81%E8%AF%BB%E6%A1%A3" tabindex="-1">3.3、读档</h2><p>git log  //查看已有的存档<br />git reset–hard b87c  //b87c 是hash code的前缀,你不需要输入整个hash code，每一份存档都有一个hash code，hash code是一种编码方式<br />注意：使用 git reset 的hard模式之前请再三确认选择的存档是不是你的真正目标，如果你读入了一个较早的存档, 那么比这个存档新的所有记录都将被删除!<br />git branch  //使用分支功能。查看所有分支,master 是主分支, 使用 git init 初始化之后会自动建立主分支<br />读档<br />git checkout b87c  //b87c 是上文hash code的前缀，你不需要输入整个hash code，此时处于一个虚构的分支中，可以 查看 b87c 存档的内容或者切换到其它分支。</p><p>gitcheckout 分支名 //切换到其他分支<br />gitcheckout -B 分支名 //把修改结果保存到一个新的分支中, 如果分支已存在, 其内容将会被覆盖，不同的分支之间不会相互干扰。</p><h2 id="3.4%E3%80%81%E6%B7%BB%E5%8A%A0%E5%92%8C%E6%8F%90%E4%BA%A4" tabindex="-1">3.4、添加和提交</h2><p>你可以提出更改（把它们添加到暂存区），使用如下命令：<br />git add mygitfile<br />git add *<br />这是 git 基本工作流程的第一步；使用如下命令以实际提交改动：<br />git commit -m “代码提交信息”<br />现在，你的改动已经提交到了 HEAD，但是还没到你的远端仓库。</p><h2 id="3.5%E3%80%81%E6%8E%A8%E9%80%81%E6%94%B9%E5%8A%A8" tabindex="-1">3.5、推送改动</h2><p>你的改动现在已经在本地仓库的 HEAD 中了。执行如下命令以将这些改动提交到远端仓库：<br />git push origin master<br />可以把 master 换成你想要推送的任何分支。</p><p>如果你还没有克隆现有仓库，并欲将你的仓库连接到某个远程服务器，你可以使用如下命令添加：<br />git remote add origin remoteserver1<br />如此你就能够将你的改动推送到所添加的服务器上去了。</p><h2 id="3.6%E3%80%81%E5%88%86%E6%94%AF" tabindex="-1">3.6、分支</h2><p>分支是用来将特性开发绝缘开来的。在你创建仓库的时候，master 是“默认的”分支。在其他分支上进行开发，完成后再将它们合并到主分支上。<br />创建一个叫做“feature_x”的分支，并切换过去：<br />git checkout -b feature_x<br />切换回主分支：<br />git checkout master<br />再把新建的分支删掉：<br />git branch -d feature_x<br />除非你将分支推送到远端仓库，不然该分支就是 不为他人所见的：<br />git push origin <branch></p><h2 id="3.7%E3%80%81%E6%9B%B4%E6%96%B0%E4%B8%8E%E5%90%88%E5%B9%B6" tabindex="-1">3.7、更新与合并</h2><p>要更新你的本地仓库至最新改动，执行：<br />git pull<br />以在你的工作目录中 获取（fetch） 并 合并（merge） 远端的改动。<br />要合并其他分支到你的当前分支（例如 master），执行：<br />git merge <branch><br />在这两种情况下，git 都会尝试去自动合并改动。遗憾的是，这可能并非每次都成功，并可能出现冲突（conflicts）。 这时候就需要你修改这些文件来手动合并这些冲突（conflicts）。改完之后，你需要执行如下命令以将它们标记为合并成功：<br />git add mygitfile<br />在合并改动之前，你可以使用如下命令预览差异：<br />git diff &lt;source_branch&gt; &lt;target_branch&gt;</p><h2 id="3.8%E3%80%81%E6%A0%87%E7%AD%BE" tabindex="-1">3.8、标签</h2><p>为软件发布创建标签是推荐的。这个概念早已存在，在 SVN 中也有。你可以执行如下命令创建一个叫做 1.0.0 的标签：<br />git tag 1.0.0 1b2e1d63ff<br />1b2e1d63ff 是你想要标记的提交 ID 的前 10 位字符。可以使用下列命令获取提交 ID：<br />git log<br />你也可以使用少一点的提交 ID 前几位，只要它的指向具有唯一性。</p><h2 id="3.9%E3%80%81%E6%9B%BF%E6%8D%A2%E6%9C%AC%E5%9C%B0%E6%94%B9%E5%8A%A8" tabindex="-1">3.9、替换本地改动</h2><p>假如你操作失误（当然，这最好永远不要发生），你可以使用如下命令替换掉本地改动：<br />git checkout – mygitfile<br />此命令会使用 HEAD 中的最新内容替换掉你的工作目录中的文件。已添加到暂存区的改动以及新文件都不会受到影响。</p><p>假如你想丢弃你在本地的所有改动与提交，可以到服务器上获取最新的版本历史，并将你本地主分支指向它：<br />git fetch origin<br />git reset --hard origin/master</p><h2 id="3.10%E3%80%81%E5%85%B6%E4%BB%96" tabindex="-1">3.10、其他</h2><p>内建的图形化 git：gitk<br />彩色的 git 输出：git config color.ui true<br />显示历史记录时，每个提交的信息只显示一行：git config format.pretty oneline<br />交互式添加文件到暂存区：git add -i<br />git diff   //比较同一个文件在不同版本中的区别<br />gitbisect   //进行二分搜索来寻找一个bug在哪次提交中被引入<br />git help   //查询git更多功能和使用<br />man git  //查询git更多功能和使用</p>]]>
                </content>
            </entry>
            <entry>
                <title><![CDATA[SVN简明教程]]></title>
                <link rel="alternate" type="text/html" href="http://43.142.104.170:8090/archives/svn简明教程" />
                <id>tag:http://43.142.104.170:8090,2022-10-11:svn简明教程</id>
                <published>2022-10-11T18:01:13+08:00</published>
                <updated>2022-10-11T18:01:35+08:00</updated>
                <author>
                    <name>高风亮节</name>
                    <uri>http://43.142.104.170:8090</uri>
                </author>
                <content type="html">
                        <![CDATA[<h1 id="1%E3%80%81%E5%AE%89%E8%A3%85" tabindex="-1">1、安装</h1><p>yum -y install subversion<br />svn --version     //查看版本</p><h1 id="2%E3%80%81%E5%88%9B%E5%BB%BAsvn%E7%89%88%E6%9C%AC%E5%BA%93" tabindex="-1">2、创建svn版本库</h1><p>mkdir /home/svn<br />创建svn项目<br />svnadmin create /home/svn/mytestsvn</p><h1 id="3%E3%80%81%E4%BF%AE%E6%94%B9%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6" tabindex="-1">3、修改配置文件</h1><p>cd  /home/svn/mytestsvn/conf<br />里面有三个配置文件：authz/passwd/svnserve.conf</p><h2 id="3.1%E3%80%81authz" tabindex="-1">3.1、authz</h2><p>[groups]<br />ana=user01,ueser02<br />dig=user11,user12</p><p>[/]<br />@dig=rw</p><p>[/trunk/analog]<br />@ana=rw<br />[/trunk/common]<br />@ana=r<br />[groups]配置段中配置行格式如下：<br />&lt;用户组&gt; = &lt;用户列表&gt;<br />版本库路径权限段的段名格式如下：<br />[&lt;版本库名&gt;:&lt;路径&gt;]</p><h2 id="3.2%E3%80%81passwd" tabindex="-1">3.2、passwd</h2><p>[users]<br />user01 = abc123<br />uuser02 = abc123<br />user03 = abc123<br />user04 = abc123<br />格式：&lt;用户名&gt; = &lt;口令&gt;</p><h2 id="3.3%E3%80%81svnserve.conf" tabindex="-1">3.3、svnserve.conf</h2><p>[general]<br />anon-access = none<br />auth-access = write<br />password-db = passwd<br />authz-db = authz<br />realm = /home/svn/mytestsvn<br />• anon-access: 控制非鉴权用户访问版本库的权限，取值范围为 “write”、“read” 和 “none”。 即 “write” 为可读可写，“read” 为只读，“none” 表示无访问权限，默认值：read。<br />• auth-access: 控制鉴权用户访问版本库的权限。取值范围为 “write”、“read” 和 “none”。 即&quot;write&quot;为可读可写，&quot;read&quot;为只读，&quot;none&quot;表示无访问权限，默认值：write。<br />• authz-db: 指定权限配置文件名，通过该文件可以实现以路径为基础的访问控制。 除非指定绝对路径，否则文件位置为相对conf目录的相对路径，默认值：authz。<br />• realm: 指定版本库的认证域，即在登录时提示的认证域名称。若两个版本库的认证域相同，建议使用相同的用户名口令数据文件。默认值：一个UUID(Universal Unique IDentifier，全局唯一标示)。</p><h1 id="4%E3%80%81%E5%90%AF%E5%8A%A8svn-server" tabindex="-1">4、启动svn server</h1><p>svnserve -d -r 目录 --listen-port 端口号<br />-r: 配置方式决定了版本库访问方式。<br />–listen-port: 指定SVN监听端口，不加此参数，SVN默认监听3690<br />svnserver -d -r /home/svn/mytestsvn    //单项目模式，可以用svn://192.168.3.93/访问版本库<br />svnserver -d -r /home/svn                   //多项目模式，可以用svn://192.168.3.93/mytesysvn访问版本库</p><h1 id="5%E3%80%81%E6%A3%80%E5%87%BA%E6%93%8D%E4%BD%9C" tabindex="-1">5、检出操作</h1><p>svn checkout svn://192.168.3.93/mytestsvn --username=user01<br />ll mytestsvn</p><h1 id="6%E3%80%81%E8%A7%A3%E5%86%B3%E5%86%B2%E7%AA%81" tabindex="-1">6、解决冲突</h1><p>比如提交special.notes文件<br />svn diff<br />svn commit -m “change special.note first”<br />如果其他人改过，提交失败，建议使用：<br />svn update<br />系统提示当前版本是6<br />svn update -r6<br />svn commit -m “change special.notes second”</p><h1 id="7%E3%80%81%E6%8F%90%E4%BA%A4%E6%93%8D%E4%BD%9C" tabindex="-1">7、提交操作</h1><p>cd /home/svn/mytestsvn/trunk<br />cat readme<br />This is a SVN tutorial file.<br />svn status<br />?       readme<br />此时 readme的状态为？，说明它还未加到版本控制中。<br />将文件readme加到版本控制，等待提交到版本库。<br />svn add readme<br />A         readme<br />查看工作副本中的状态<br />svn status<br />A       readme<br />此时 readme的状态为A,它意味着这个文件已经被成功地添加到了版本控制中。<br />为了把 readme 存储到版本库中，使用 commit -m 加上注释信息来提交。<br />如果你忽略了 -m 选项， SVN会打开一个可以输入多行的文本编辑器来让你输入提交信息。<br />svn commit -m “SVN readme.”<br />Adding         readme<br />Transmitting file data .<br />Committed revision 1.<br />svn commit -m “SVN readme.”<br />现在 readme 被成功地添加到了版本库中，并且修订版本号自动增加了1。</p><h1 id="8%E3%80%81%E7%89%88%E6%9C%AC%E5%9B%9E%E9%80%80" tabindex="-1">8、版本回退</h1><p>svn status<br />M       readme<br />这时我们发现修改错误，要撤销修改，通过 svn revert 文件 readme 回归到未修改状态。<br />svn revert readme<br />Reverted ‘readme’<br />再查看状态。<br />svn status<br />进行 revert 操作之后，readme 文件恢复了原始的状态。 revert 操作不单单可以使单个文件恢复原状， 而且可以使整个目录恢复原状。恢复目录用 -R 命令，如下。<br />svn revert -R trunk<br />但是，假如我们想恢复一个已经提交的版本怎么办。<br />为了消除一个旧版本，我们必须撤销旧版本里的所有更改然后提交一个新版本。这种操作叫做 reverse merge。<br />首先，找到仓库的当前版本，现在是版本 22，我们要撤销回之前的版本，比如版本 21。<br />svn merge -r 22:21 readme</p><h1 id="9%E3%80%81%E6%9F%A5%E7%9C%8B%E5%8E%86%E5%8F%B2%E4%BF%A1%E6%81%AF" tabindex="-1">9、查看历史信息</h1><p>通过svn命令可以根据时间或修订号去除过去的版本，或者某一版本所做的具体的修改。以下四个命令可以用来查看svn 的历史：<br />svn log: 用来展示svn 的版本作者、日期、路径等等。<br />svn diff: 用来显示特定修改的行级详细信息。<br />svn cat: 取得在特定版本的某文件显示在当前屏幕。<br />svn list: 显示一个目录或某一版本存在的文件。</p><h2 id="9.1%E3%80%81-svn-log" tabindex="-1">9.1、 svn log</h2><p>svn log -r 6:8   //查看特定的某两个版本之间的信息<br />svn log trunk/readme  //查看某一个版本的信息<br />如果希望得到目录的信息要加 -v。<br />如果希望显示限定N条记录的目录信息，使用 svn log -l N -v。<br />svn log -l 5 -v</p><h2 id="9.2%E3%80%81svn-diff" tabindex="-1">9.2、svn diff</h2><p>检查本地修改<br />比较工作拷贝与版本库<br />比较版本库与版本库<br />（1）、不带任何参数，它将会比较你的工作文件与缓存在 .svn 的&quot;原始&quot;拷贝。<br />svn diff<br />（2）、比较工作拷贝和版本库<br />比较你的工作拷贝和版本库中版本号为 3 的文件 rule.txt。<br />svn diff -r 3 rule.txt<br />（3）、比较版本库与版本库<br />通过 -r(revision) 传递两个通过冒号分开的版本号，这两个版本会进行比较。<br />比较 svn 工作版本中版本号2和3的这个文件的变化。<br />svn diff -r 2:3 rule.txt</p><h2 id="9.3%E3%80%81svn-cat" tabindex="-1">9.3、svn cat</h2><p>如果只是希望检查一个过去版本，不希望查看他们的区别，可使用svn cat<br />svn cat -r 版本号 rule.txt<br />这个命令会显示在该版本号下的该文件内容</p><h2 id="9.4%E3%80%81svn-list" tabindex="-1">9.4、svn list</h2><p>svn list 可以在不下载文件到本地目录的情况下来察看目录中的文件：<br />svn list <a href="http://192.168.3.93/mytestsvn" target="_blank">http://192.168.3.93/mytestsvn</a>  //显示server的目录文件<br />README<br />branches/<br />clients/<br />tags/</p><h1 id="10%E3%80%81svn%E5%88%86%E6%94%AFbranch" tabindex="-1">10、svn分支branch</h1><p>cd /home/mytestsvn  //进入目录<br />ls  //显示文件<br />branches  tags  trunk<br />svn copy trunk/ branches/my_branch  //copy分支<br />A         branches/my_branch<br />svn status  //查看状态<br />A  +    branches/my_branch<br />A  +    branches/my_branch/readme2<br />A  +    branches/my_branch/readme</p><p>svn commit -m “add my_branch”  //提交新增的分支到版本库<br />Adding         branches/my_branch<br />Replacing      branches/my_branch/readme2<br />Adding         branches/my_branch/readme<br />Committed revision 9.<br />接着我们就到 进行开发，切换到分支路径并创建readme2 文件。<br />cd branches/my_branch/  //进入my_branch 分支<br />ls  //显示文件<br />readme readme2<br />svn status //查看状态<br />?      readme<br />svn add readme //将readme加入版本控制<br />A         readme<br />svn commit -m “add readme” //提交到版本库中<br />Adding         readme<br />Transmitting file data .<br />Committed revision 10.<br />svn merge …/branches/my_branch/ //切换到 trunk，执行 svn update，然后将 my_branch 分支合并到 trunk 中<br />— Merging r10 into ‘.’:<br />A    readme<br />— Recording mergeinfo for merge of r10 into ‘.’:<br />G   .<br />此时查看目录，可以看到 trunk 中已经多了 my_branch 分支创建的 readme 文件。<br />svn commit -m “add readme”  //将合并好的 trunk 提交到版本库中<br />Adding         readme<br />Transmitting file data .<br />Committed revision 11.</p><h1 id="11%E3%80%81svn%E6%A0%87%E7%AD%BEtag" tabindex="-1">11、svn标签tag</h1><p>svn copy trunk/ tags/v1.0 //创建标签<br />A         tags/v1.0<br />上面的代码成功完成，新的目录将会被创建在 tags 目录下。<br />ls tags/  //查看tags内容<br />v1.0<br />ls tags/v1.0/  //查看tags/v1.0/内容<br />readme2  readme<br />svn status  //查看状态<br />A  +    tags/v1.0<br />svn commit -m “tags v1.0” //提交tag内容<br />Adding         tags/v1.0<br />Transmitting file data …<br />Committed revision 14.</p>]]>
                </content>
            </entry>
            <entry>
                <title><![CDATA[定时批量删除文件linux+windows]]></title>
                <link rel="alternate" type="text/html" href="http://43.142.104.170:8090/archives/定时批量删除文件" />
                <id>tag:http://43.142.104.170:8090,2022-10-11:定时批量删除文件</id>
                <published>2022-10-11T17:22:51+08:00</published>
                <updated>2022-10-11T17:32:12+08:00</updated>
                <author>
                    <name>高风亮节</name>
                    <uri>http://43.142.104.170:8090</uri>
                </author>
                <content type="html">
                        <![CDATA[<h1 id="%E4%B8%80%E3%80%81linux%E7%89%88" tabindex="-1">一、linux版</h1><h2 id="1%E3%80%81%E6%89%8B%E5%8A%A8%E5%88%A0%E9%99%A4" tabindex="-1">1、手动删除</h2><p>find /home/data -mtime +30 -name “<em>.tar.gz&quot; -exec rm -rf { } ;<br />说明：<br />将/hyome/data/目录下所有30天前带&quot;.tar.gz&quot;的文件删除。<br />find：linux的查找命令，用户查找指定条件的文件；<br />/hyome/data/：想要进行清理的任意目录；<br />-mtime：标准语句写法；<br />+30：查找30天前的文件，这里用数字代表天数；<br />&quot;</em>.log”：希望查找的数据类型，“<em>&quot;表示查找所有文件；<br />-exec：固定写法；<br />rm -rf：强制删除文件，包括目录；<br />{} ; ：固定写法，一对大括号+空格++; *<br />第二种方法：find /home/data -mtime +30 -name &quot;</em>.tar.gz”  | xargs rm -rf</p><h2 id="2%E3%80%81%E5%88%9B%E5%BB%BAshell%E8%84%9A%E6%9C%AC" tabindex="-1">2、创建shell脚本</h2><p>vii /home/bin/autodel.run<br />#!/bin/bash<br />find /home/data/ -mtime +30 -name “*.log” -exec rm -rf {} ;<br />echo “The file before 30 days is deleted successfully……………”</p><h2 id="3%E3%80%81%E5%88%9B%E5%BB%BA%E8%AE%A1%E5%88%92%E4%BB%BB%E5%8A%A1%EF%BC%9A" tabindex="-1">3、创建计划任务：</h2><p>#crontab -e<br />00 06 * * * /home/bin/autodel.run &gt;/dev/null 2&gt;&amp;1<br />这里的设置是每天凌晨06点00分执行autodel.run文件进行数据清理任务</p><h1 id="%E4%BA%8C%E3%80%81windows%E7%89%88" tabindex="-1">二、windows版</h1><h2 id="1%E3%80%81%E5%88%9B%E5%BB%BA%E6%89%B9%E5%A4%84%E7%90%86%E8%84%9A%E6%9C%AC" tabindex="-1">1、创建批处理脚本</h2><p>创建autodel.bat放在D盘根目录下：<br />@echo off<br />set SrcDir=D:\bdshare<br />set DaysAgo=30<br />forfiles /p %SrcDir% /s /m <em>.</em> /d -%DaysAgo% /c “cmd /c del /f /q /a @path”</p><h2 id="2%E3%80%81%E5%88%9B%E5%BB%BA%E5%AE%9A%E6%97%B6%E4%BB%BB%E5%8A%A1" tabindex="-1">2、创建定时任务</h2><p>管理工具–任务计划程序<br />或者控制面板-计划任务<br />或者直接在开始菜单栏搜索任务计划程序<br />创建基本任务<br /><img src="/upload/2022/10/image-1665480032443.png" alt="image-1665480032443" /><br />设置触发时间间隔<br /><img src="/upload/2022/10/image-1665480067555.png" alt="image-1665480067555" /><br />设置触发开始时间<br /><img src="/upload/2022/10/image-1665480086866.png" alt="image-1665480086866" /><br />操作<br /><img src="/upload/2022/10/image-1665480114481.png" alt="image-1665480114481" /><br />浏览找到批处理文件，参数可不填<br /><img src="/upload/2022/10/image-1665480135281.png" alt="image-1665480135281" /><br /><img src="/upload/2022/10/image-1665480145854.png" alt="image-1665480145854" /><br />可以看到创建的定时任务了<br /><img src="/upload/2022/10/image-1665480168013.png" alt="image-1665480168013" /></p>]]>
                </content>
            </entry>
            <entry>
                <title><![CDATA[SSH免密登陆]]></title>
                <link rel="alternate" type="text/html" href="http://43.142.104.170:8090/archives/ssh免密登陆" />
                <id>tag:http://43.142.104.170:8090,2022-10-11:ssh免密登陆</id>
                <published>2022-10-11T10:40:22+08:00</published>
                <updated>2022-10-11T10:40:38+08:00</updated>
                <author>
                    <name>高风亮节</name>
                    <uri>http://43.142.104.170:8090</uri>
                </author>
                <content type="html">
                        <![CDATA[<h1 id="%E4%B8%80%E3%80%81%E5%9C%A8%E4%B8%8D%E5%90%8C%E7%9A%84%E6%9C%BA%E5%99%A8%E4%B8%8A%E7%99%BB%E5%BD%95%E5%90%8C%E4%B8%80%E8%B4%A6%E5%8F%B7(%E5%AE%B6%E7%9B%AE%E5%BD%95mount%E7%9A%84%E5%90%8C%E4%B8%80%E4%BD%8D%E7%BD%AE%E6%97%B6)" tabindex="-1">一、在不同的机器上登录同一账号(家目录mount的同一位置时)</h1><h2 id="1.1%E3%80%81%E5%88%9B%E5%BB%BA%E5%AF%86%E9%92%A5%E5%AF%B9" tabindex="-1">1.1、创建密钥对</h2><p>ssh-keygen -t rsa<br />敲下回车后会有3个交互：<br />第一个文件名，默认是id_rsa，如需要修改直接输入一个文件名便可。<br />第二个与第三各是密码与确认密码，是以后使用该公钥时要输入的密码，一般不设置。安全要求高的自己设置便可。最后会生成两个文件id_rsa，id_rsa.pub。以.pub结尾的是公钥，另一个是私钥。<br />ls -al ./ssh  可以查看一下是否创建成功</p><h2 id="1.2%E3%80%81%E5%88%9B%E5%BB%BAauthorized_keys-%E6%96%87%E4%BB%B6" tabindex="-1">1.2、创建authorized_keys 文件</h2><p>cd .ssh<br />cp id_rsa.pub  authorized_keys</p><h2 id="1.3%E3%80%81%E7%A1%AE%E4%BF%9Dselinux%E6%98%AF%E5%BC%80%E5%90%AF%E7%8A%B6%E6%80%81" tabindex="-1">1.3、确保selinux是开启状态</h2><p>Getenforce        //查看当前状态<br />Setrnforce 0      //临时关闭<br />永久关闭selinux<br />永久关闭SElinux<br />方法一：vi /etc/selinux/config<br />将文件中的SELINUX=“” 改为 disabled ，然后重启。<br />SELINUX=enforcing　　//修改此处为disabled<br />方法二：sed -i ‘s/^SELINUX=enforcing/SELINUX=disabled/g’/etc/selinux/config<br />如果你想要将远程NFS的家目录共享到本机，需要开启：<br />setsebool -P use_nfs_home_dirs 1</p><h2 id="1.4%E3%80%81%E7%99%BB%E5%BD%95%E6%B5%8B%E8%AF%95" tabindex="-1">1.4、登录测试</h2><p>ssh -X test@remote1</p><h2 id="1.5%E3%80%81%E5%88%9B%E5%BB%BA%E7%AE%80%E7%9F%AD%E5%91%BD%E4%BB%A4" tabindex="-1">1.5、创建简短命令</h2><p>在.cshrc里面添加<br />alias sst ‘ssh -X test@remote1’<br />Source ~/.cshrc<br />sst</p><h1 id="%E4%BA%8C%E3%80%81%E4%B8%8D%E5%90%8C%E6%9C%BA%E5%99%A8%E4%B9%8B%E9%97%B4%E5%85%8D%E5%AF%86%E7%99%BB%E9%99%86" tabindex="-1">二、不同机器之间免密登陆</h1><h2 id="2.1%E3%80%81%E5%88%9B%E5%BB%BA%E5%AF%86%E9%92%A5%E5%AF%B9" tabindex="-1">2.1、创建密钥对</h2><p>ssh-keygen -t rsa</p><h2 id="2.2%E3%80%81copy%E5%85%AC%E9%92%A5%E5%88%B0%E8%BF%9C%E7%AB%AF%E6%9C%BA%E5%99%A8" tabindex="-1">2.2、copy公钥到远端机器</h2><p>ssh-copy-id -i .ssh/id_rsa.pub test@remote2<br />-i：指定使用的公钥文件</p><h2 id="2.3%E3%80%81%E7%99%BB%E5%BD%95%E5%88%B0%E8%BF%9C%E7%A8%8B%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8D%E7%94%A8%E8%BE%93%E5%85%A5%E5%AF%86%E7%A0%81" tabindex="-1">2.3、登录到远程服务器不用输入密码</h2><p>ssh -X test@remote2<br />本机会将这一登录信息保存在~/.ssh/known_hosts文件当中。</p><h1 id="%E4%B8%89%E3%80%81ssh%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E4%BB%8B%E7%BB%8D" tabindex="-1">三、ssh配置文件介绍</h1><h2 id="3.1%E3%80%81%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6" tabindex="-1">3.1、配置文件</h2><p>SSH 的配置文件与用户实际执行 ssh 命令时传入的参数协同作用。按照优先级，低优先级的配置项可视作默认值；而高优先级的配置项则会覆盖默认值。按优先级，有如下排序：<br />1、用户实际执行 ssh 时传入的参数；<br />2、用户的 SSH 配置文件 ${HOME}/.ssh/config；<br />3、系统的 SSH 配置文件 /etc/ssh/ssh_config。</p><h2 id="3.2%E3%80%81ssh_config%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E8%AF%B4%E6%98%8E" tabindex="-1">3.2、ssh_config配置文件说明</h2><p>/etc/ssh/ssh_config配置文件<br />选项参数                                   说明<br />Host *                                    选项“Host”只对能够匹配后面字串的计算机有效。“<em>”表示所有的计算机。<br />ForwardAgent no                           设置连接是否经过验证代理（如果存在）转发给远程计算机。<br />ForwardX11 no                             设置X11连接是否被自动重定向到安全的通道和显示集（DISPLAY set）<br />RhostsAuthentication no                   设置是否使用基于rhosts的安全验证<br />RhostsRSAAuthentication no                设置是否使用用RSA算法的基于rhosts的安全验证<br />RSAAuthentication yes                     设置是否使用RSA算法进行安全验证<br />PasswordAuthentication yes                设置是否使用口令验证<br />FallBackToRsh no                          设置如果用ssh连接出现错误是否自动使用rsh<br />UseRsh no                                 设置是否在这台计算机上使用“rlogin/rsh”<br />BatchMode no                              如果设为“yes”，passphrase/password（交互式输入口令）的提示将被禁止。当不能交互式输入口令的时候，这个选项对脚本文件和批处理任务十分有用<br />CheckHostIP yes                           设置ssh是否查看连接到服务器的主机的IP地址以防止DNS欺骗。建议设置为“yes”<br />StrictHostKeyChecking no                  如果设置成“yes”，ssh就不会自动把计算机的密匙加入“$HOME/.ssh/known_hosts”文件，并且一旦计算机的密匙发生了变化，就拒绝连接<br />IdentityFile ~/.ssh/identity              设置从哪个文件读取用户的RSA安全验证标识<br />Port 22                                   设置连接到远程主机的端口<br />Cipher blowfish                           设置加密用的密码<br />EscapeChar ~                              设置escape字符<br />Host参数通配符：<br />'</em>’ 代表 0～n 个非空白字符。<br />‘?’ 代表一个非空白字符。<br />‘!’ 表示例外通配。<br /><em>，匹配所有主机名。<br /><em>.example.com，匹配以 .example.com 结尾。<br />!</em>.dialup.example.com,</em>.example.com，以 ! 开头是排除的意思。<br />192.168.0.?，匹配 192.168.0.[0-9] 的 IP。<br />HostName IdentityFile 文件名称可以使用以下转义符：<br />‘%d’ 本地用户目录<br />‘%u’ 本地用户名称<br />‘%l’ 本地主机名<br />‘%h’ 远程主机名<br />‘%r’ 远程用户名<br />/etc/ssh/sshd_config配置文件<br />参数选项                                                         说明<br />Port 22                                                         SSH 预设使用 22 这个 port，您也可以使用多的 port ！<br />Protocol 2,1                                                    选择的 SSH 协议版本，可以是 1 也可以是 2 ，如果要同时支持两者，就必须要使用 2,1 这个分隔了！<br />ListenAddress 0.0.0.0                                           监听的主机适配卡！举个例子来说，如果您有两个 IP，分别是 192.168.0.100 及 192.168.2.20 ，那么只想要开放 192.168.0.100 时，就可以写如同下面的样式：<br />ListenAddress 192.168.0.100                                     只监听来自 192.168.0.100 这个 IP 的SSH联机。如果不使用设定的话，则预设所有接口均接受 SSH<br />PidFile /var/run/sshd.pid                                       可以放置 SSHD 这个 PID 的档案！左列为默认值<br />LoginGraceTime 600                                              当使用者连上 SSH server 之后，会出现输入密码的画面，在该画面中，在多久时间内没有成功连上 SSH server ，就断线！时间为秒！<br />Compression yes                                                 是否可以使用压缩指令？<br />HostKey /etc/ssh/ssh_host_key                                   SSH version 1 使用的私钥<br />HostKey /etc/ssh/ssh_host_rsa_key                               SSH version 2 使用的 RSA 私钥<br />HostKey /etc/ssh/ssh_host_dsa_key                               SSH version 2 使用的 DSA 私钥<br />KeyRegenerationInterval 3600                                    由前面联机的说明可以知道， version 1 会使用 server 的 Public Key ，每隔一段时间来重新建立一次！时间为秒！<br />ServerKeyBits 768                                               Server key 的长度！<br />SyslogFacility AUTH                                             当有人使用 SSH 登入系统的时候，SSH会记录信息<br />LogLevel INFO                                                   登录记录的等级—》全部<br />PermitRootLogin no                                              是否允许 root 登入！预设是允许的，但是建议设定成 no！<br />UserLogin no                                                    在 SSH 底下本来就不接受 login 这个程序的登入！<br />StrictModes yes                                                 当使用者的 host key 改变之后，Server 就不接受联机<br />RSAAuthentication yes                                           是否使用纯的 RSA 认证！？仅针对 version 1 ！<br />PubkeyAuthentication yes                                        是否允许 Public Key ？只有 version 2<br />AuthorizedKeysFile   .ssh/authorized_keys                       设定若要使用不需要密码登入的账号时，那么那个账号的存放档案所在档名！<br />RhostsAuthentication no                                         本机系统不使用 .rhosts ， .rhosts 不安全！<br />IgnoreRhosts yes                                                是否取消使用 ~/.ssh/.rhosts 来做为认证！<br />RhostsRSAAuthentication no                                      针对 version 1 ，使用 rhosts 档案在/etc/hosts.equiv配合 RSA 演算方式来进行认证！<br />HostbasedAuthentication no                                      这个项目与上面的项目类似，不过是给 version 2 使用的！<br />IgnoreUserKnownHosts no                                         是否忽略家目录内的 ~/.ssh/known_hosts 这个档案所记录的主机内容<br />PasswordAuthentication yes                                      密码验证当然是需要的！<br />PermitEmptyPasswords no                                         上面那一项如果设定为 yes 的话，这一项就最好设定为 no ，这个项目在是否允许以空的密码登入！<br />ChallengeResponseAuthentication yes                             挑战任何的密码认证！所以，任何 login.conf 规定的认证方式，均可适用！<br />PAMAuthenticationViaKbdInt yes                                  是否启用其它的 PAM 模块！启用这个模块将会导致 PasswordAuthentication 设定失效！<br />与Kerberos 有关的参数设定！底下不用设定<br />KerberosAuthentication no<br />KerberosOrLocalPasswd yes<br />KerberosTicketCleanup yes<br />KerberosTgtPassing no<br />有关在 X-Window 底下使用的相关设定<br />X11Forwarding yes<br />X11DisplayOffset 10<br />X11UseLocalhost yes<br />PrintMotd no                                                    登入后是否显示出一些信息呢？例如上次登入的时间、地点等，预设是 yes ，但是，如果为了安全，可以考虑改为 no ！<br />PrintLastLog yes                                                显示上次登入的信息！预设也是 yes<br />KeepAlive yes                                                   一般而言，如果设定这项目的话，那么 SSH Server 会传送KeepAlive 的讯息给 Client 端，以确保两者的联机正常！在这个情况下，任何一端死掉后， SSH 可以立刻知道！而不会有僵尸程序的发生！<br />UsePrivilegeSeparation yes                                      使用者的权限设定项目！<br />MaxStartups 10                                                  同时允许几个尚未登入的联机画面<br />DenyUsers *                                                     设定受抵挡的使用者名称<br />AllowUsers *                                                    设定允许的使用者名称</p><h2 id="3.3%E3%80%81config%E6%96%87%E4%BB%B6%E8%AF%B4%E6%98%8E" tabindex="-1">3.3、config文件说明</h2><p>在~/.ssh/下创建config文件，并填写如下：<br />Host remote2<br />HostName 192.168.3.92<br />Port 22<br />User test<br />IdentityFile ~/.ssh/id_rsa<br />就可以直接使用下面来直接访问<br />ssh remote2<br />注意，上述的密钥为私钥。</p>]]>
                </content>
            </entry>
            <entry>
                <title><![CDATA[如何让scp支持断点续传]]></title>
                <link rel="alternate" type="text/html" href="http://43.142.104.170:8090/archives/如何让scp支持断点续传" />
                <id>tag:http://43.142.104.170:8090,2022-10-10:如何让scp支持断点续传</id>
                <published>2022-10-10T15:21:38+08:00</published>
                <updated>2022-10-10T15:37:43+08:00</updated>
                <author>
                    <name>高风亮节</name>
                    <uri>http://43.142.104.170:8090</uri>
                </author>
                <content type="html">
                        <![CDATA[<h1 id="1%E3%80%81scp%E9%80%9A%E5%B8%B8%E7%94%A8%E6%B3%95" tabindex="-1">1、scp通常用法</h1><p>scp 本地地址 目标地址<br />举例：<br />上传<br />scp testfile test@remote1:/home/test<br />scp -r testdir test@remote:/home/test<br />下载<br />scp test@remote1:/home/test/testfile ./<br />scp -r test@remote:/home/test/testdir ./<br />常用参数：<br />-r：递归拷贝目录<br />-q：不显示进度<br />-l：限制传输带宽，单位是kbits/s<br />scp -r -l 200 /home/test/testdir test@remote1:/home/test/<br />rsync<br />常用参数：<br />–progress： 显示拷贝进度<br />–partial：保留不完整文件，实现断点续传<br />–partial-dir=DIR：指定不完整文件的存储目录，而不是默认存储到目的地目录。<br />-P：包含–progress和–partial<br />–rsh=ssh：使用ssh方式传输文件，注意：如果之前设置过ssh免密码登录，那么此时也就不需要密码了，非常方便<br />-v：显示详细信息<br />-a：归档模式。也就是以递归方式传输文件，并保持所有文件属性。<br />-r：递归方式传输文件<br />-e, --rsh=COMMAND 指定使用rsh、ssh方式进行数据同步</p><h1 id="2%E3%80%81%E9%87%8D%E6%96%B0%E5%AE%9A%E4%B9%89scp" tabindex="-1">2、重新定义scp</h1><p>bashrc<br />alias rscp=‘rsync -v -P -e ssh’<br />.cshrc<br />alias rscp ‘rsync -v -P -e ssh’</p><h1 id="3%E3%80%81%E9%87%8D%E6%96%B0load%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F%E9%85%8D%E7%BD%AE" tabindex="-1">3、重新load环境变量配置</h1><p>source ~/.bashrc<br />source ~/.cshrc</p><h1 id="4%E3%80%81%E8%B0%83%E7%94%A8%E5%91%BD%E4%BB%A4" tabindex="-1">4、调用命令</h1><p>rscp 本地地址 目标地址</p>]]>
                </content>
            </entry>
            <entry>
                <title><![CDATA[Centos 7安装 VNC服务及调整VNC分辨率]]></title>
                <link rel="alternate" type="text/html" href="http://43.142.104.170:8090/archives/centos7安装vnc服务及调整vnc分辨率" />
                <id>tag:http://43.142.104.170:8090,2022-10-08:centos7安装vnc服务及调整vnc分辨率</id>
                <published>2022-10-08T14:10:49+08:00</published>
                <updated>2022-10-08T14:13:18+08:00</updated>
                <author>
                    <name>高风亮节</name>
                    <uri>http://43.142.104.170:8090</uri>
                </author>
                <content type="html">
                        <![CDATA[<h2 id="1%E3%80%81%E5%AE%89%E8%A3%85-vnc-%E6%9C%8D%E5%8A%A1" tabindex="-1">1、安装 VNC 服务</h2><p>yum install tigervnc tigervnc-server tigervnc-server-module  –y</p><h2 id="2%E3%80%81%E5%A4%8D%E5%88%B6-vnc-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6" tabindex="-1">2、复制 vnc 配置文件</h2><p>cp  /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:1.service</p><h2 id="3%E3%80%81%E7%BC%96%E8%BE%91-vnc-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6" tabindex="-1">3、编辑 vnc 配置文件</h2><p>vi vncserver@:1.service<br />ExecStart=/usr/sbin/runuser -l <ins>root</ins> -c “/usr/bin/vncserver %i”<br />PIDFile=/<ins>root</ins>/.vnc/%H%i.pid</p><h2 id="4%E3%80%81%E7%B3%BB%E7%BB%9F%E5%8A%A0%E8%BD%BD" tabindex="-1">4、系统加载</h2><p>systemctl daemon-reload</p><h2 id="5%E3%80%81%E8%AE%BE%E7%BD%AE-vnc-%E5%AF%86%E7%A0%81" tabindex="-1">5、设置 vnc 密码</h2><p>vncpasswd</p><h2 id="6%E3%80%81%E5%85%B3%E9%97%AD%E9%98%B2%E7%81%AB%E5%A2%99" tabindex="-1">6、关闭防火墙</h2><p>systemctl stop firewalld//一次性关闭<br />systemctl disable firewalld//永久关闭</p><h2 id="7%E3%80%81%E5%90%AF%E5%8A%A8-vnc-%E6%9C%8D%E5%8A%A1" tabindex="-1">7、启动 vnc 服务</h2><p>systemctl start vncserver@:1.service//启动<br />systemctl status vncserver@:1.service//查看状态<br />systemctl enable vncserver@:1.service//开机自启动</p><h2 id="8%E3%80%81%E6%9F%A5%E7%9C%8B-vnc-%E6%9C%8D%E5%8A%A1" tabindex="-1">8、查看 vnc 服务</h2><p>vncserver -list</p><h2 id="9%E3%80%81%E6%9F%A5%E7%9C%8B-vnc-%E7%AB%AF%E5%8F%A3" tabindex="-1">9、查看 vnc 端口</h2><p>netstat -anpt | grep 5901</p><h2 id="10%E3%80%81%E5%A2%9E%E5%8A%A0gnome%E5%90%AF%E5%8A%A8%E9%A1%B9" tabindex="-1">10、增加gnome启动项</h2><p>在~/.vnc/xstartup末尾增加：<br />gnome-session&amp;</p><h2 id="11%E3%80%81%E9%87%8D%E5%90%AF%E6%9C%8D%E5%8A%A1" tabindex="-1">11、重启服务</h2><p>systemctl restart vncserver@:1.service//重新启动<br />systemctl status vncserver@:1.service//查看状态</p><h2 id="12%E3%80%81vnc-%E8%BF%9E%E6%8E%A5" tabindex="-1">12、vnc 连接</h2><p>用客户端访问IP:1测试是否可以连接</p><h2 id="13%E3%80%81%E8%B0%83%E6%95%B4vnc%E5%88%86%E8%BE%A8%E7%8E%87" tabindex="-1">13、调整VNC分辨率</h2><p>配置文件路径：~/.vnc/config<br />vi ~/.vnc/config<br />修改<br />#gemotry=2000x1200<br />为<br />geometry=1920x1000<br />重启VNC服务:<br />systemctl restart vncserver@:1.service<br />或者<br />systemctl stop vncserver@:1.service<br />systemctl start vncserver@:1.service</p>]]>
                </content>
            </entry>
            <entry>
                <title><![CDATA[转载学习笔记：Linux下svn命令基础讲解]]></title>
                <link rel="alternate" type="text/html" href="http://43.142.104.170:8090/archives/linux下svn命令基础讲解" />
                <id>tag:http://43.142.104.170:8090,2022-09-30:linux下svn命令基础讲解</id>
                <published>2022-09-30T14:57:59+08:00</published>
                <updated>2022-09-30T15:18:41+08:00</updated>
                <author>
                    <name>高风亮节</name>
                    <uri>http://43.142.104.170:8090</uri>
                </author>
                <content type="html">
                        <![CDATA[<p>----原文来自fasteda.cn 作者：张长瑞<br />svn help</p><p>Bash<br />svn help — 求助！<br />svn import</p><p>svn import — 递归提交一个路径的拷贝到版本库。</p><p>例子：</p><p>Bash<br />svn import -m “New import”  myproj <a href="http://xn--IP-im8ckc/repos/trunk/misc" target="_blank">http://IP地址/repos/trunk/misc</a><br />svn checkout</p><p>svn checkout （co）— 从版本库取出一个工作拷贝。</p><p>例子：</p><p>1.取出一个工作拷贝到本地目录：</p><p>Bash<br />svn checkout  file:///var/svn/repos/test<br />2. 检出两个目录到两个单独的工作拷贝：</p><p>Bash<br />svn checkout file:///var/svn/repos/test  file:///var/svn/repos/quiz<br />3. 支持断点续传，Ctrl+c后，执行同样的命令，继续传输数据。</p><ol start="4"><li>检出某已版本的数据：</li></ol><p>Bash<br />svn checkout -r 2  file:///var/svn/repos/test<br />svn commit</p><p>svn commit（ci） — 将修改从工作拷贝发送到版本库。</p><p>例子：</p><p>Bash<br />svn ci –m “”  file:///var/svn/repos/test<br />-m参数为输入的日志记录信息</p><p>svn add</p><p>svn add — 添加文件、目录或符号链。</p><p>例子：</p><p>Bash<br />svn add [file/dir]<br />可以只添加一个目录而不包括其内容：</p><p>Bash<br />svn add --depth=empty [otherdir]<br />添加所有的文件内容：</p><p>Bash<br />svn add * --force<br />A         for.c<br />A         something/test/flash.v<br />A         otherdir/docs/baz.doc<br />svn delete</p><p>svn delete（del, remove, rm） — 从工作拷贝或版本库删除一个项目。</p><p>例子：</p><p>1.删除一个文件</p><p>Bash<br />svn  delete  myfile<br />#D         myfile<br />svn  commit  -m  “Deleted file ‘myfile’.”<br />2.直接删除一个URL，你需要提供一个日志信息：</p><p>Bash<br />svn delete -m “Deleting file ‘yourfile’”  file:///var/svn/repos/test/yourfile<br />3. 强制删除本地已修改文件的例子：</p><p>Bash<br />svn delete --force over-there<br />svn merge</p><p>svn merge —工作拷贝回退到指定版本。</p><p>例子：</p><p>Bash<br />svn merge -r rHEAD:109 file:///var/svn/repos/test/yourfile<br />**rHEAD:109  从当前最新版本回退到109版。操作完成后本地的工作拷贝会更新到109版。</p><p>svn copy</p><p>svn copy（cp） — 拷贝工作拷贝的一个文件或目录到版本库。</p><p><strong>你只可以在单个版本库中拷贝文件，Subversion还不支持跨版本库的拷贝。</strong></p><p>+commit</p><p>svn move</p><p>svn move（mv, rename, ren） — 移动一个文件或目录。</p><p>+commit</p><p>svn update</p><p>svn update（up） — 更新到某个版本。</p><p>例子：</p><p>svn update后面没有目录，默认将当前目录以及子目录下的所有文件都更新到最新版本 。</p><p>Bash<br />svn update -r 200 test.php<br />(将版本库中的文件test.php还原到版本200)</p><p>svn diff</p><p>svn diff(di) — 比较两条路径的区别。</p><p>例子：</p><ol><li><pre><code>比较BASE和你的工作拷贝(svn diff最经常的用法)：</code></pre></li></ol><p>Bash<br />svn diff COMMITTERS<br />2.     查看文件COMMITTERS在修订版本9115修改的内容：</p><p>Bash<br />svn diff -c 9115 COMMITTERS<br />3.     察看你的工作拷贝对旧的修订版本的修改：</p><p>Bash<br />Svn diff -r 3900 COMMITTERS<br />4.     修订版本3000和35000比较：</p><p>Bash<br />svn diff -r 3000:3500 <a href="http://svn.collab.net/repos/svn/trunk/COMMITTERS" target="_blank">http://svn.collab.net/repos/svn/trunk/COMMITTERS</a><br />svn export</p><p>svn export — 导出一个干净的目录树。</p><p>例子：</p><p>Bash<br />svn export file:///var/svn/repos my-export<br />svn list</p><p>svn  list(ls) — 列出版本库目录的条目。列出库的相应目录中有哪些文件。</p><p>+上（-v）后显示详细内容内容:</p><p>最后一次提交的修订版本号</p><p>最后一次提交的作者</p><p>如果锁定，字符为“O”(更多细节见svn info)</p><p>大小(单位字节)</p><p>最后提交的日期时间</p><p>svn log</p><p>svn log — 显示提交日志信息。</p><p>例子：</p><p>1.可以在顶级目录运行svn log看到工作拷贝中所有修改的路径的日志信息：</p><p>Bash<br />svn log<br />2. 检验一个特定文件所有的日志信息：</p><p>Bash<br />svn log foo.c<br />3. 如果你手边没有工作拷贝，你可以查看一个URL的日志</p><p>Bash<br />svn log <a href="http://svn.xxx.com/repos/test/foo.c" target="_blank">http://svn.xxx.com/repos/test/foo.c</a><br />svn status</p><p>svn  status（stat, st） — 打印工作拷贝文件和目录的状态。</p><p>’ ’   没有修改。</p><p>‘A’   项目预定添加</p><p>‘D’   项目预定删除</p><p>‘M’   项目已经修改了。</p><p>‘R’   项目在工作拷贝中已经被替换了。这意味着文件预定要删除，然后有一个同样名称的文件要在同一个位置替换它。</p><p>‘C’   项目的内容(相对于属性)与更新得到的数据冲突了。</p><p>‘?’    项目不在版本控制之下。</p><p>例子：</p><p>1.查看项目所有文件的更新信息（包括mv掉的项目）</p><p>Bash<br />svn status --show-updates (-u) wc<br />#没有-u 则简单的查看当前文件状态</p><p>#（-v）更详细的显示信息，包括版本库的修订版本号与修改人名</p><p>svn info</p><p>svn info — 显示本地或远程条目的信息。</p><p>显示：名称、路径、Repository root、版本库的UUID、版本号、类型（文件或目录）、上次修改人，上次修订版本，上次修改日期等</p><p>可以直接查库（链接）</p><p>svn cat</p><p>svn cat — 输出特定文件或URL的内容。</p><p>Bash<br />svn cat [file]<br />场景一：</p><p>功能要切回到之前的某一个版本。</p><p>有两种方法可以实现：</p><p>方法1： 用svn merge</p><ol><li><p>先 svn up，保证更新到最新的版本，如20；</p></li><li><p>然后用 svn log ，查看历史修改，找出要恢复的版本，如10 。如果想要更详细的了解情况，可以使用svn diff -r 10:20 [文件或目录];</p></li><li><p>回滚到版本号10：svn merge -r 20:10 [文件或目录]，注意版本号之间的顺序，这个叫反向合并；</p></li><li><p>查看当前工作版本中的文件，如test.cpp和版本号10中文件的差别：svn diff -r 10 test.cpp， 有差别则手动改之；</p></li><li><p>若无差别，则提交：svn ci -m“back to r 10，xxxxx” [文件或目录]。这时svn库中会生成新的版本，如21。</p></li></ol><p>方法2: 用svn up</p><p>前2步如方法1，然后直接 svn up -r 10。当前的工作版本就是版本10了。但是注意，这时svn库中会并不会生成新的版本，下次在本地svn up之后，还是会回到之前的版本。</p>]]>
                </content>
            </entry>
            <entry>
                <title><![CDATA[转载学习笔记：Cliosoft SOS 使用手册]]></title>
                <link rel="alternate" type="text/html" href="http://43.142.104.170:8090/archives/cliosoftsos使用手册" />
                <id>tag:http://43.142.104.170:8090,2022-09-30:cliosoftsos使用手册</id>
                <published>2022-09-30T14:45:47+08:00</published>
                <updated>2022-09-30T15:18:04+08:00</updated>
                <author>
                    <name>高风亮节</name>
                    <uri>http://43.142.104.170:8090</uri>
                </author>
                <content type="html">
                        <![CDATA[<p>----原文来自fasteda.cn 作者：张长瑞<br />SOS 是 Cliosoft 针对集成电路设计现状，提出的于现有 EDA 工具无缝连接的一种解决方案，实现多时区直接设计数据协同设计，不同工程师之间数据协同工作，版本管理，版本控制，工作区管理，发布涉及版本数据等项目管理功能。</p><p>使用 SOS 前需要将 sos 工具以及 license 进行 load 操作。无论是 module 或者其他 load 方式，需要在 $PATH 中出现 SOS 绝对路径，确保 sos，sosadmin 等工具可以直接启动。</p><p>建立一个 Server</p><p>注:Server 的建立一般是依据不同的工艺进行，每一个工艺建立一个 Server</p><p>利用拥有权限的账户 load 整合 SOS 程序以及 license，然后启动 sosadmin<br /><img src="/upload/2022/09/image.png" alt="image" /></p><p>正常启动 sosadmin 之后会出现如上所示的对话框。</p><p>点击 “New” 后出现下图所示对话框<br /><img src="/upload/2022/09/image-1664520392988.png" alt="image-1664520392988" /></p><p>此时，你需要考虑的是存储空间是否充足，如果存储空间充足，可以使用 local 方式，如果存储空间并不是很理想，就使用 Cache 模式。<br /><img src="/upload/2022/09/image-1664520405987.png" alt="image-1664520405987" /></p><p>这一块就是设置是否需要使用 cache 方式建立 Server，使用 cache 方式建立的 Server 在用户 populate 之后所有的文件都是以 link 方式存在的，所有的文件都是 link 到 cache 存储空间，因此更节省存储。</p><p>依次填写相关信息，在填写之前可以直接选择 Recommend 按键来实现自动填写，然后根据自动填写的内容进行修改。</p><p>注：无论是 Host name 选项还是 Cache Host 选项，都需要 dns 解析 hostname，否则无法成功建立。所有端口不可重复使用。</p><p>填写好之后点击 OK 即可，如使用 cache 方式，大致内容如下图所示：<br /><img src="/upload/2022/09/image-1664520415804.png" alt="image-1664520415804" /></p><p>在 Server 创建好之后，需要启动 Server，点击主窗口<br />Startup</p><p>按钮启动 Server。启动后选中新建的 Server，点击<br />Ping</p><p>按钮确定是否启动成功。</p><p>建立 Project</p><p>在建立好 Server 后并且成功启动后，就可以直接建立 Project。</p><p>选择建立好的 Server，点击 Projects<br /><img src="/upload/2022/09/image-1664520442896.png" alt="image-1664520442896" /></p><p>弹出如下对话框：<br /><img src="/upload/2022/09/image-1664520499106.png" alt="image-1664520499106" /></p><p>点击 New 添加一个新的 Project。<br /><img src="/upload/2022/09/image-1664520506412.png" alt="image-1664520506412" /></p><p>填写 Project 的名字，选择 Project 存放数据的路径，以及这个 Project 的 Admin 用户，多个 Admin 用户之间用逗号分隔。Comments 内容可写一些项目描述，这个内容并没有具体的意义，也不对新建的 Project 内容有任何影响。填写好之后，点击 OK，出现如下所示的对话框。<br /><img src="/upload/2022/09/image-1664520518867.png" alt="image-1664520518867" /></p><p>这时，一个 Project 在 SOS 上的基本框架建立完毕。</p><p>配置 Project 的配置信息（sosd.cfg）</p><p>在新建好的 Project 中根据<br /><img src="/upload/2022/09/image-1664520527127.png" alt="image-1664520527127" /></p><p>显示的路径进入到相关目录下，进入到 setup 目录，找到 sosd.cfg 文件，Vim 编辑。</p><p>注：初始的 sosd.cfg 文件并没有多少信息，需要手工进行添加。在 sosd.cfg 配置文件中 - - 代表注释。</p><p>根据项目要求，设置是否为 openworld<br /><img src="/upload/2022/09/image-1664520535549.png" alt="image-1664520535549" /></p><p>可以添加修改 ADMIN 用户信息<br /><img src="/upload/2022/09/image-1664520545605.png" alt="image-1664520545605" /></p><p>ACL 权限控制，我这里分了 schematic 与 layout 两个组，根据权限信息添加人员，人员于人员之间用逗号分隔，最后用分号结尾。<br /><img src="/upload/2022/09/image-1664520553361.png" alt="image-1664520553361" /></p><p>权限基本设置完毕。高级权限请参考 SOS 相关手册。修改完成后需要在主窗口对该 Server 进行一次 config Reread 操作，点击 Reread Config 按钮即可，会提示配置信息是否出错。</p><p>为 Project 建立基本的数据信息并 link 工艺信息。</p><p>依次建立 Server 目录、Project 目录以及个人目录。</p><p>mkdir –p /sos 目录 /server 目录 /project 目录 / ADMIN 用户目录 /</p><p>Admin 用户建立好目录之后进行基础数据和信息的配置。</p><p>使用对应 sosd.cfg 中的 ADMIN 用户进入到 ADMIN 用户目录后，一次根据 Project 建立需要的目录信息。</p><p>例如：mkdir project project_tmp project_sim ANA_STD</p><p>建立一个 cds.lib 文件（touch cds.lib）.</p><p>使用 vim 工具修改 cds.lib 文件，内容大致如下。<br /><img src="/upload/2022/09/image-1664520572676.png" alt="image-1664520572676" /></p><p>因为经常集成 virtuoso 使用，所有空行上面的一些 DEFINE 都是一些 virtuoso 的基本内容</p><p>主要看 INCLUDE 一项，指向工艺的绝对路径下的 cds.lib 文件，在指向文件前，要先编辑工艺下的 cds.lib，因为有一些工艺的 cds.lib 文件自带了一些定向内容，但是变量设置方面可能出问题，如果有问题，可以将原 cds.lib 中的设置信息转移到这个文件中。</p><p>SOFTINCLUDE 一项指定的 cds.lib.local 是用户可以自定义一些 cds.lib 的内容，但是在 sos 服务器中并不存在，每个用户可以自定义，自行引用，也可以不定义。</p><p>在最下面的四行 DEFINE 目的是将 SOS 中的目录对应到本地目录。</p><p>Create 信息到 SOS。</p><p>使用 ADMIN 用户 load 相关的 sos 工具与 license，使用启动命令 sos 启动 sos 工具。启动后界面如下：<br /><img src="/upload/2022/09/image-1664520580755.png" alt="image-1664520580755" /></p><p>依次点击 File-new workarea<br /><img src="/upload/2022/09/image-1664520592156.png" alt="image-1664520592156" /></p><p>选择 Server Name，即为之前建立的 Server，选择 Project Name，即为之前建立的 Project。<br /><img src="/upload/2022/09/image-1664520605904.png" alt="image-1664520605904" /></p><p>图上所示的权限为选择哪种存放的方式，如果选择 Local Copies 则所有的文件都会存在本地目录中，大量占用存储空间，选择 Links to Smart Cache 方式即为 Links 方式，如文章前面所说，全部文件都 link 到 Cache 存储中。</p><pre><code>     我们这里选择 links to smart cache 方式。     点击 OK，建立完成。     注：在建立 Server 的时候如果没有建立 Cache Server，这里则不可选择 links 方式，只能选择 local copies 方式。但是后期可更改为 link 方式，需要人力比较大。     在左边的</code></pre><p>Hierarchy</p><p>下会显示当前目录信息，依次选中（四个文件夹，一个 cds.lib 文件，其他不需要），点击 Create 上传到 SOS 服务器。</p><pre><code>     Create 完毕后，点击选择</code></pre><p><img src="/upload/2022/09/image-1664520638509.png" alt="image-1664520638509" /></p><p>根目录，选择菜单栏 Tree 选项，如下图：<br /><img src="/upload/2022/09/image-1664520646100.png" alt="image-1664520646100" /></p><p>在 Populate 完成后，返回 terminal，ll –a 查看 cds.lib 文件是否为 LINK 文件，如果是，操作完毕。</p><p>其他用户进行配置并 Populate 数据信息。</p><p>其他有权限用户在使用过程中，建立目录、建立 workarea 的方式同上，区别在于普通权限用户无需 Create 目录结构到 SOS 服务器中，只需要在建立 workarea 之后 populate 即可。</p><p>5）与 virtuoso 进行 SOS 集成。</p><pre><code>       所有需要集成使用的用户，需要在加载 virtuoso 工具、sos 工具及对应 license 后，输入 setup_cds_libmgr_menu 命令，按 Y 确认将 SOS 集成到 virtuoso 中，如下图所示为集成成功，在左侧 Library 中显示相关工艺信息则 cds.lib 文件内容书写正确，如未出现工艺信息，则需要修改 cds.lib 文件。</code></pre><p><img src="/upload/2022/09/image-1664520659828.png" alt="image-1664520659828" /></p><p>权限管理</p><p>在 SOS 所有操作都进行完毕后，需要对目录操作权限进行一次设定，需要用 ADMIN 权限用户在对应的 ADMIN 目录中打开 SOS 程序。</p><p>选择根目录，点击菜单栏 Modify Attrs – Source File/Dir……（Source File/Directory）配置目录 Owner 以及 Write Access 权限，确保只有 Owner 用户可以修改根目录结构，其他用户无法修改。<br /><img src="/upload/2022/09/image-1664520668121.png" alt="image-1664520668121" /></p><p>按此操作，依次选择目录，对目录的 Owner 或者 Group 进行权限管控，确保没有权限的用户或者组无法进行非法访问。</p><p>用户操作。</p><p>用户在使用 virtuoso 操作之前，需要进行一次 Updata，在操作的过程中，如果需要修改某些内容，需要对内容进行一次 check out 对操作的内容进行一次锁定，在操作完成后 check in 解除锁定。</p><p>用户新建的内容需要先 Create 写入到 SOS 服务器中。</p><p>总结：以上即为 SOS 进行数据管理和权限管理的基本操作，高级操作请在本基础上参考 SOS 相关操作手册。建议 SOS 使用单独的服务器存放数据，对于 Cache 数据的存放目录，需要 SOS 服务器与用户登录的服务器均可以同时访问并且建议路径保持一致。</p><p>建议使用 Link 方式建立 Server 并且要求研发用户以 Link 的方式 Check 数据，这样可以降低存储空间的使用率，也可以更好的管理 SOS。</p><p>使用 Link 方式也存在一定的不足，如发生需要数据迁移的需求时，需要所有用户将需要用的数据 Create 和 Check in，然后管理员切换到 local copies 方式全部 check 出数据然后进行迁移。</p>]]>
                </content>
            </entry>
            <entry>
                <title><![CDATA[Hello Halo]]></title>
                <link rel="alternate" type="text/html" href="http://43.142.104.170:8090/archives/hello-halo" />
                <id>tag:http://43.142.104.170:8090,2022-09-22:hello-halo</id>
                <published>2022-09-22T10:08:43+08:00</published>
                <updated>2022-09-22T10:08:43+08:00</updated>
                <author>
                    <name>高风亮节</name>
                    <uri>http://43.142.104.170:8090</uri>
                </author>
                <content type="html">
                        <![CDATA[<h2 id="hello-halo">Hello Halo</h2><p>如果你看到了这一篇文章，那么证明你已经安装成功了，感谢使用 <a href="https://halo.run">Halo</a> 进行创作，希望能够使用愉快。</p><h2 id="相关链接">相关链接</h2><ul><li>官网：<a href="https://halo.run">https://halo.run</a></li><li>文档：<a href="https://docs.halo.run">https://docs.halo.run</a></li><li>社区：<a href="https://bbs.halo.run">https://bbs.halo.run</a></li><li>主题仓库：<a href="https://halo.run/themes.html">https://halo.run/themes.html</a></li><li>开源地址：<a href="https://github.com/halo-dev/halo">https://github.com/halo-dev/halo</a></li></ul><p>在使用过程中，有任何问题都可以通过以上链接找寻答案，或者联系我们。</p><blockquote><p>这是一篇自动生成的文章，请删除这篇文章之后开始你的创作吧！</p></blockquote>]]>
                </content>
            </entry>
</feed>
