Linux-KVM虛擬化

来源:https://www.cnblogs.com/yanjieli/archive/2018/11/05/9908465.html
-Advertisement-
Play Games

kvm安裝 1、在宿主機上準備好yum(只需要本地鏡像yum就可以) 2、查看CPU是否支持inter或AMD的虛擬技術 3、安裝kvm 4、確認是否有裝在kvm模塊,沒有裝載可以使用modprobe kvm來裝載 5、啟動並設置為開機自啟動 kvm安裝虛擬機 圖形安裝 第一步、 安裝方式: --我 ...


kvm安裝

1、在宿主機上準備好yum(只需要本地鏡像yum就可以)

2、查看CPU是否支持inter或AMD的虛擬技術

# cat /proc/cpuinfo |grep -E "vmx|svm"

3、安裝kvm

# yum install qemu-kvm libvirt virt-install libvirt-python virt-manager virt-install libvirt-client virt-viewer

4、確認是否有裝在kvm模塊,沒有裝載可以使用modprobe kvm來裝載

# lsmod |grep kvm
kvm_intel             170181  0 
kvm                   554609  1 kvm_intel
irqbypass              13503  1 kvm

5、啟動並設置為開機自啟動

# systemctl start libvirtd
# systemctl status libvirtd
# systemctl enable libvirtd

kvm安裝虛擬機

圖形安裝

 --和xen一樣的命令,打開虛擬機管理器
# virt-manager   

第一步、

安裝方式:         --我這裡選擇第一個,使用iso直接安裝

 

第二步、

安裝路徑:/data/CentOS-7-x86_64-DVD-1611.iso                  --寫上iso的路徑

 

第三步、

記憶體大小: 800M          -- 記憶體如果較小,安裝時無法使用圖形安裝方式,只能使用文本安裝方式

cpu個數:2                 --不能大於宿主機器的cpu核數

 

第四步、

硬碟大小:20G          --我這裡定義20G大小;它的預設路徑會在/var/lib/libvirt/images/kvm1.qcow2

 

第五步、

name:kvm1              --自定義一個虛擬機名稱

網路現在只能選擇default --這是一個nat網路(私有網路),橋接網路不能選,需要後面單獨配置後才能選擇

命令行安裝

# virt-install --hvm --name "kvm1" --memory 800 --vcpus 2  --disk=/var/lib/libvirt/images/kvm1.qcow2,size=20 -l /share/CentOS-7-x86_64-DVD-1611.iso --network bridge=virbr0

--hvm 指使用全虛擬化

kvm主要的管理命令

virsh help  
virsh help domain
virsh help network
virsh help monitor   --因為參數很多,可以用象domain,network,monitor這種關鍵字,只查看與關鍵字有關的參數幫助
......
# virsh  list
 Id    Name                           State
----------------------------------------------------
 1     kvm1                           running

# virsh list --all
 Id    Name                           State
----------------------------------------------------
 1     kvm1                           running
 -     kvm2                           shut off

啟動、關閉、重啟相關

# virsh  start kvm1       --啟動一個虛擬機
# virsh shutdown kvm1 --正常關閉一個虛擬機(把服務都停掉,再關電源)
# virsh reboot kvm1 --正常重啟一個虛擬機,先shutdown再start
# virsh  destroy kvm1     --強制關閉一個虛擬機,類似斷電,可以瞬間關閉虛擬機     

# virsh  reset kvm1       --相當於是先destroy,再start

保存、暫停相關

# virsh save kvm1 /etc/libvirt/qemu/kvm1.save      --把kvm1關閉,並把當前狀態保存為一個文件    

# virsh restore /etc/libvirt/qemu/kvm1.save    --通過保存的文件,恢復當時save時的狀態

# virsh suspend kvm1    --暫停kvm1的狀態

# virsh resume kvm1    --由暫停切換為繼續的狀態

連接虛擬機相關

方法一:

# virt-manager 打開管理器,雙擊你要連接的虛擬機

方法二:

# virt-viewer  kvm1   --連接一個已經啟動的虛擬機,並使用圖形查看

方法三:

# ssh x.x.x.x   --非圖形方式就可以連,但需要虛擬機配置好ip

方法四:

非圖形方式也可以使用console連(此方法不需要虛擬機配置ip都可以連),但需要配置授權

# virsh console kvm1   --字元連接一個虛擬機,但是現在連接不了;因為需要一個串口的授權才可以;

授權做法:

1,在kvm1虛擬機里操作(註意不是在宿主機上操作)
# grubby --update-kernel=ALL --args="console=ttyS0"
# reboot
2,在宿主機virsh console kvm1連接使用 
3,退出的方式
exit只是退出登錄的用戶而已
要完全退出這個console連接,需要使用的是ctrl+ ] (也就是右中框號的這個鍵)

虛擬機相關的文件

以kvm1為例:

配置文件在:

/etc/libvirt/qemu/kvm1.xml

磁碟文件預設在:

/var/lib/libvirt/images/kvm1.qcow2

打開虛擬機配置文件的做法:

方法一:

# vim /etc/libvirt/qemu/kvm1.xml

方法二:

# virsh edit kvm1      --此方法預設是調用vi,所以沒有顏色,你可以做個軟鏈接,讓訪問vi實際鏈接到vim就可以了

命令刪除一個虛擬機的做法(假設kvm3)

# virsh destroy kvm3

# virsh undefine kvm3

# rm -rf /var/lib/libvirt/images/kvm3.img

kvm的克隆

--註意:克隆都需要源虛擬機器是關閉或者暫停狀態

圖形克隆

  • 先關閉kvm1或 virsh suspend kvm1暫停kvm1(使用virsh resume kvm1恢復)
  • virt-manager--》右鍵點kvm1--》選擇clone-->修改克隆後的名字或其它參數--》點clone

文本克隆

 1、拷貝配置文件和磁碟文件

# cp /etc/libvirt/qemu/kvm1.xml /etc/libvirt/qemu/kvm3.xml

# cp /var/lib/libvirt/images/kvm1.qcow2 /var/lib/libvirt/images/kvm3.qcow2

 2、修改拷貝的配置文件

# vim /etc/libvirt/qemu/kvm3.xml

<domain type='kvm'>
  <name>kvm3</name>        --名字改成kvm3
  <uuid>811d69e8-b1d8-cfbf-684a-69f2e0af6b88</uuid>    --uuid隨便改幾個數字
  <memory unit='KiB'>1048576</memory>
  <currentMemory unit='KiB'>1048576</currentMemory>
  <vcpu placement='static'>2</vcpu>
  <os>
    <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
  </features>
  <clock offset='utc'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw' cache='none'/>
      <source file='/var/lib/libvirt/images/kvm3.qcow2'/>   --磁碟路徑改成kvm3.qcow2的路徑
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
    </disk>
    <disk type='block' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <target dev='hdc' bus='ide'/>
      <readonly/>
      <address type='drive' controller='0' bus='1' target='0' unit='0'/>
    </disk>
    <controller type='usb' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
    </controller>
    <controller type='ide' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
    </controller>
    <interface type='bridge'>
      <mac address='52:54:00:5c:3a:2d'/>   --網卡地址隨便改下,只改後三位
      <source bridge='br0'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target port='0'/>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <input type='tablet' bus='usb'/>
    <input type='mouse' bus='ps2'/>
    <graphics type='vnc' port='-1' autoport='yes'/>
    <sound model='ich6'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </sound>
    <video>
      <model type='cirrus' vram='9216' heads='1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </memballoon>
  </devices>
</domain>

3、保存後,使用virsh list --all查看不到的,需要define一下

# virsh define /etc/libvirt/qemu/kvm3.xml
# virsh list --all        --再查就可以查看到kvm3
 Id    Name                           State
----------------------------------------------------
 -     kvm1                           shut off
 -     kvm1-clone                     shut off
 -     kvm2                           shut off
 -     kvm3                           shut off

4、再啟動

# virsh start kvm3   --可以啟動克隆的機器了

命令克隆

# virt-clone -o kvm1 -n kvm4 -f /var/lib/libvirt/images/kvm4.img 
Allocating kvm4.img  7% [-          ]  34 MB/s | 957 MB     05:29 ETA

--把kvm1克隆成kvm4,指定磁碟路徑為/var/lib/libvirt/images/kvm4.img;如果kvm1有多個硬碟,那麼克隆時也要對應的克隆成多個路徑

kvm網路管理

只查看與網路有關的幫助參數

# virsh  help network
# virsh net-list --all
Name                 State      Autostart
-----------------------------------------
default              active     yes     --這是一個NAT網路,私有網路
# virsh net-info default
Name            default
UUID            704eb1b7-3feb-4a38-8642-9c3fe2f023bb
Active:         yes
Persistent:     yes
Autostart:      yes
Bridge:         virbr0

default網段的配置文件的路徑為:

/etc/libvirt/qemu/networks/default.xml
# virsh net-destroy default        --停掉default網路,由virsh net-list --all去查看,狀態變為inactive
# virsh net-start  default         --啟動default網路,狀態變為active

圖形增加私有網路

virt-manager打開圖形--》edit --》connections details --》 virtual networks--》點左下角的+號增加一個私有網路(選擇名字,網路分配地址範圍,dhcp的分配範圍)

註意:這裡最後一步有三種網路:

1、isolated 相當vmware的hostonly,沒有NAT,也沒有網關(完全和vmware的hostonly類型一樣)

2、NAT 有網關,有NAT,可以通過宿主上外網(和vmware的NAT類型一樣)

3、routed 也是相當於hostonly,在isolated的基礎上就是加了一個網關(仍然是和vmware的hostonly一致,但多了一個網關)

把上面的步驟做完後,直接在宿主機用ifconfig或virsh net-list --all,就可以看到新加的網路了

手動增加私有網路

1、拷貝一個網路配置文件並編輯

# cp /etc/libvirt/qemu/networks/default1.xml /etc/libvirt/qemu/networks/default2.xml
# vim /etc/libvirt/qemu/networks/default2.xml
<network> <name>default2</name> --修改名字為default2 <uuid>243166ddb-e2fd-9983-1997-5e8efdc06c42</uuid> --uuid隨便修改一下 <bridge name='virbr2' stp='on' delay='0' /> --virbr1改成virbr2 <mac address='52:54:00:AF:27:25'/> --MAC地址改一下,只改後面三位 <ip address='192.168.101.1' netmask='255.255.255.0'> --IP改為101 <dhcp> <range start='192.168.101.128' end='192.168.101.254' /> --dhcp地址範圍也改成101的 </dhcp> </ip> </network>

2、定義一下,然後就可以使用virsh  net-list --all去查看,狀態為inactive,autostart的狀態為no

# virsh net-define /etc/libvirt/qemu/networks/default2.xml

3、啟動

# virsh net-start default2

4、查看

# ifconfig virbr2 |head -2    --查看就有了    
virbr2    Link encap:Ethernet  HWaddr 52:54:00:AF:27:25  
          inet addr:192.168.101.1  Bcast:192.168.101.255  Mask:255.255.255.0
# ls /etc/libvirt/qemu/networks/autostart/
default1.xml   default.xml

5、設置為開機自動啟動

# virsh net-autostart default2

# ls /etc/libvirt/qemu/networks/autostart/    --這裡就會多了default2.xml了,其實都是網路配置文件的軟鏈接
default1.xml  default2.xml   default.xml

剛加的網路配置文件都在下麵的目錄

# ls /etc/libvirt/qemu/networks
autostart  default1.xml  default2.xml  default.xml

修改一個網路

1、編輯配置文件

# vim /etc/libvirt/qemu/networks/default2.xml    


<network>
  <name>default2</name>
  <uuid>243166ddb-e2fd-9982-1996-5e8efdc06c42</uuid>
  <forward dev='eth0' mode='route'>
    <interface dev='eth0'/>
  </forward>
  <bridge name='virbr2' stp='on' delay='0' />
  <mac address='52:54:00:AF:166:45'/>
  <ip address='192.168.102.1' netmask='255.255.255.0'>    --我這裡把以前的192.168.101.0的IP範圍都改成了192.168.102.0
    <dhcp>
      <range start='192.168.102.128' end='192.168.102.254' />
    </dhcp>
  </ip>
</network>

保存後,使用ifconfig virbr1 查看,還是192.168.102.1, 沒有改變

需要做下麵三步:

2、定義一個網路,使你的修改被他知道

# virsh net-define /etc/libvirt/qemu/networks/default2.xml  --定義一個網路,使你的修改被他知道
Network default2 defined from /etc/libvirt/qemu/networks/default3.xml

3、停一下這個網路

# virsh net-destroy default2    --停一下這個網路
Network default2 destroyed

4、再啟動這個網路

# virsh net-start default2    --再啟這個網路
Network default2 started

ifconfig virbr2查看,成功修改成192.168.102.1

上面的第一步和第二步可以統一成一步來做:

# virsh  net-edit default2   --使用這個命令打開,修改,然後就直接net-destroy和net-start,不需要去net-define

刪除一個網路

圖形刪除一個網路

virt-manager打開圖形--》edit --》connections details --》 virtual networks--》選擇你要刪除的網路,然後左下角,先停,再刪除就可以了

命令刪除一個網路

# virsh net-destroy default2    --停掉要刪除的網路,用virsh net-list --all命令去查就變成了inactive狀態

# virsh net-undefine default2  --這下就刪除了這個網路定義了,並且物理上的配置文件也沒了

增加一個橋接網路

把物理網卡enp2s0橋接到br0(這個名字是自己定義的)

1、在宿主機上創建一個橋接網路

# systemctl stop NetworkManager
# systemctl status NetworkManager
# systemctl disable NetworkManager
# vim /etc/sysconfig/network-scripts/ifcfg-br0  --此文件不存在,br0這個名字是自定義的
DEVICE=br0        --名字對應好
TYPE=Bridge        --這裡的Birdge,B要大寫,後面的irdge要小寫
BOOTPROTO=static
IPADDR=172.16.13.X
NETMASK=255.255.255.0
GATEWAY=172.16.13.254
DNS1=114.114.114.114
ONBOOT=yes

2、把一個物理網卡加到一個橋接網路里,這裡是把enp2s0加到br0

# vim /etc/sysconfig/network-scripts/ifcfg-enp2s0     --原物理網卡enp2s0里的配置只留下這三句就可以了
DEVICE="enp2s0"
ONBOOT="yes"
BRIDGE=br0

3、重啟網路

/etc/init.d/network restart 或者 systemctl restart network

在宿主機上ifconfig 查看就會有br0這個網卡,有IP;而原enp2s0網卡沒有IP;這是正常的

修改虛擬機的網卡連接

圖形修改

virt-manager打開圖形,雙擊你要修改的虛擬機--》點擊左上的一個!號(centos7里看到的是一個像燈泡一樣的符號)按鈕show virtual hardware detail-->>找個網卡,修改成你想要改的網路

命令修改

# virsh edit kvm3

    <interface type='network'>
      <mac address='52:54:00:07:8d:e5'/>
      <source network='default'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>

改成下麵的樣子

    <interface type='bridge'>        --network改成了bridge
      <mac address='52:54:00:07:8d:e5'/>
      <source bridge='br0'/>        --network改成了bridge;default改成了br0
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
# virsh shutdown kvm1

# virsh start kvm1    --重啟後,虛擬機就是橋接網路

kvm磁碟管理

圖形添加硬碟設備

virt-manager--》 雙擊打開kvm4--》點左上角的燈泡符號show virtual hardware details --》點左下角add devices 直接添加,並寫上相關參數就可以(註意參數,device type都選擇virtio,不需要重啟虛擬機,可以直接生效,並且磁碟名叫vda,vdb,vdc...;如果你第一次加硬碟選擇IDE disk,需要重啟,並且磁碟名叫sda,sdb,sdc...)

註意:用圖形方式線上刪除磁碟後,還要去物理上把它的磁碟xxx.qcow2文件給rm掉

命令添加硬碟設備

1、使用dd命令創建一個磁碟文件

# dd if=/dev/zero of=/var/lib/libvirt/images/kvm4-2.img bs=1M count=1 seek=4000000
--seek是指跳過多少個BS塊,這裡就是產生一個4T大小的文件(實際大小隻1M)
# qemu-img info /var/lib/libvirt/images/kvm4-2.img
image: /var/lib/libvirt/images/kvm4-2.img
file format: raw                --格式為raw(這是老版本的預設格式,新版本是qcow2格式)
virtual size: 3.8T (4194305048576 bytes)
disk size: 1.0M
# cd /var/lib/libvirt/images/
# qemu-img convert -f raw -O qcow2 kvm4-2.img kvm4-2.qcow2    --把kvm4-2.img文件轉換成一個新文件kvm4-2.qcow2(格式也轉換成qcow2)
# rm kvm4-2.img -rf    --原來的這個文件不用了就可以刪除掉了
# qemu-img info /var/lib/libvirt/images/kvm4-2.qcow2 
image: /var/lib/libvirt/images/kvm4-2.qcow2
file format: qcow2                 --轉化後的新文件格式就為qcow2格式了
virtual size: 3.8T (4194305048576 bytes)
disk size: 256K
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false

2、編輯虛擬機的配置文件

# virsh edit kvm4
<devices>與</devices>之間加上下麵的一段,也可以把其它磁碟的配置定義拷貝一段進行修改


    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2' />       --格式為qcow2
      <source file='/var/lib/libvirt/images/kvm4-2.qcow2'/>  --路徑名稱改成kvm4-2.qcow2
      <target dev='vdb' bus='virtio'/>    --新加的硬碟,就叫vdb
      <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>    --slot也改一下,我這裡是把0x07改成0x09(只要這個編號沒有被重覆占用就可以)    
    </disk>

3、重啟虛擬機後(有可能reboot還不行,需要force off再啟動),登錄使用fdisk就能查看到這個4T大小的硬碟了

遷移磁碟目錄

比如宿主機的/var目錄空間不夠,想把磁碟文件改到氣他目錄(如/data/kvm/目錄)

# virsh destroy kvm1  --先停掉kvm1

# mv /var/lib/libvirt/images/kvm1.qcow2 /data/kvm/


# virsh edit kvm1
......
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2' />
      <source file='/data/kvm/kvm1.qcow2'/>    --把這個路徑改成mv後的新路徑
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
    </disk>
......


# virsh start kvm1

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • findfs 查找指定捲標或者UUID的文件系統對應的設備文件。findfs將搜索系統中的磁碟,尋找具有標簽匹配標簽或與UUID相等的文件系統。如果找到文件系統,文件系統的設備名稱將列印在stdout上。 此命令的適用範圍:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUS ...
  • 昨晚更新了一下內核,今晚開機就無法進系統了...提示如下圖: 解決方案:開機啟動時按Esc,然後選擇下麵的舊版本的內核啟動即可。 (成功進入系統後,你可以選擇改變開機預設選擇的內核)。 uname -r 查看當前內核版本 rpm -qa|grep kernel 查看系統已安裝的內核 vim /boo ...
  • 什麼是Shell     簡單來說Shell其實就是一個 命令解釋器 ,而它的作用就是解釋並執行用戶輸入的命令及程式。用戶每輸入一條命令,Shell就解釋執行一次。這種方式很容易讓大家想起在Windows環境中使用的command命令,我們在cmd視窗輸入一條命令,按下Enter ...
  • nl命令在linux系統中用來計算文件中行號。nl 可以將輸出的文件內容自動的加上行號!其預設的結果與 cat n 有點不太一樣, nl 可以將行號做比較多的顯示設計,包括位數與是否自動補齊 0 等等的功能。 一.命令格式: nl [參數]... [文件]... 二.命令參數: |參數|描述| | ...
  • 1. 主從複製1.1. mysql主從的原理1.1.1. Replication 線程Mysql的 Replication 是一個非同步的複製過程(mysql5.1.7以上版本分為非同步複製和半同步兩種模式),從一個 Mysql instace(我們稱之為 Master)複製到另一個 Mysql ins ...
  • 一 PIP簡介 pip類似RedHat裡面的yum,使用PIP安裝軟體非常便捷快速。 二 PIP下載安裝 方式一: 方式二: 三 PIP常見使用 3.1 pip安裝軟體 如:安裝Redis 附PIP批量安裝軟體: 如果需要安裝的包比較多的時候,單獨安裝比較繁瑣,可通過一次安裝的方法。首先新建一個文本 ...
  • 操作步驟 32位操作系統: 1、將2003系統C:\WINDOWS\system32目錄下的mstsmhst.dll、mstsmmc.dll、tsmmc.msc拷貝到Windows7系統中的C:\WINDOWS\system32目錄下; 2、使用管理員許可權運行cmd,註冊dll文件: regsvr3 ...
  • 一、命令介紹 我們使用man cat命令,可以看到cat命令的用途是連接文件或標準輸入並列印,簡單來說cat命令是用來查看純文本文件(通常為內容較少的文件),與重定向符號配合使用,可以實現創建文件與合併文件。 二、實例 1.使用 cat命令查看文件 我們使用cat命令查看study.txt這個文件 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...