使用Samba或NFS实现文件共享

news2024/9/19 10:46:26

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 

一、SAMBA文件共享服务

1987年,微软公司和英特尔公司共同定制了SMB(Server Messages Block)服务器消息块协议,旨在解决局域网内的文件或打印机等资源的共享问题。Tridgwell为了解决此问题,基于SMB协议开发出了SMBServer服务程序。这是一款开源的文件共享软件,经过简单的配置就能实现Linux与Windows系统之间的文件共享工作;后更名为Samba;Samba服务程序已经成为的在Linux系统与Windows系统之间共享文件最佳选择;

首先安装Samba服务程序,顺手再安装一个samba-client软件包,这用于测试共享目录的客户端程序:

[root@Linux ~]# yum install samba samba-client

查看Samba服务程序的主配置文件:其中24-29行代表共享该登录用户的家目录内容,虽然某些情况下可以更方便的共享文件,但这个默认操作有点危险,建议删掉;31-36行是用SMB协议共享本地的打印机设备,方便局域网内的用户可以远程使用,当前我们没有打印机设备,因此也删掉;最的38-42行依然为共享打印机设备的参数,删除;

 [root@Linux ~]# vim /etc/samba/smb.conf
 1 # See smb.conf.example for a more detailed config file or
   2 # read the smb.conf manpage.
   3 # Run 'testparm' to verify the config is correct after
   4 # you modified it.
   5 #
   6 # Note:
   7 # SMB1 is disabled by default. This means clients without support for SMB2 or
   8 # SMB3 are no longer able to connect to smbd (by default).
   9 
  10 [global]                    # 全局参数
  11         workgroup = SAMBA       # 工作组名称
  12         security = user         # 安全验证的方式,总共有4种
  13 
  14         passdb backend = tdbsam # 定义用户后台的类型,总共有3种
  15 
  16         printing = cups         # 打印服务协议
  17         printcap name = cups    # 打印服务名称
  18         load printers = yes     # 是否加载打印机
  19         cups options = raw      # 打印机的选项    
  20 
  21         # Install samba-usershares package for support
  22         include = /etc/samba/usershares.conf
  23 
  24 #[homes]                        # 共享名称
  25 #       comment = Home Directories  # 描述信息
  26 #       valid users = %S, %D%w%S    # 可用账户
  27 #       browseable = No             # 指定共享信息是否在"网上邻居"中可见
  28 #       read only = No              # 是否只读
  29 #       inherit acls = Yes          # 是否继承访问控制列表
  30 
  31 #[printers]                     # 共享名称
  32 #       comment = All Printers      # 描述信息
  33 #       path = /var/tmp             # 共享路径
  34 #       printable = Yes             # 是否可打印
  35 #       create mask = 0600          # 文件权限
  36 #       browseable = No             # 指定共享信息是否在"网上邻居"中可见
  37 
  38 #[print$]                       # 共享名称
  39 #       comment = Printer Drivers   # 描述信息
  40 #       path = /var/lib/samba/drivers   # 共享路径
  41 #       write list = @printadmin root   # 可写入文件的用户列表
  42 #       force group = @printadmin       # 用户组列表

还能删!16-19行所提到的cups全称叫做Common UNIX Printing System,中文名也叫UNIX打印系统服务,依然是用于打印机或打印服务机器的,删除;

  [root@Linux ~]# vim /etc/samba/smb.conf
 ...
  10 [global]
  11         workgroup = SAMBA
  12         security = user
  13 
  14         passdb backend = tdbsam
  15 
  16 #        printing = cups
  17 #        printcap name = cups
  18 #        load printers = yes
  19 #        cups options = raw

上述security参数代表用户登录samba时的验证方式,共有四种:

  • share:代表主机无需验证口令,相当于vsftpd服务的匿名公开访问模式。方便但不安全
  • user:代表登录samba服务时需要使用账号密码进行验证默认方式
  • domain:通过控制器进行身份验证,限制用户的来源域;
  • server:代表使用独立主机验证来访用户的提供的口令,相当于集中管理账户,不常用

早期,samba服务使用pam模块调用本地账户和密码信息,后在5、6版本时替换成了smboasswd命令设置独立的samba服务账号和密码口令。到RHEL 7/8版本又进行了一次改革,将传统的验证方式换成了tdbsam数据库,这是专门用于保存samba服务账号口令的数据库,需要使用pdbedit命令进行独立的添加操作;

1、配置共享资源

Samba服务程序的主配置文件与Apache服务相似,包括全局配置参数和区域配置参数。全局配置参数用于设置整体的资源共享环境,对立面的每一个资源都有效。区域配置参数则用于设置单独的共享资源,且仅对该资源有效。创建共享资源的方法简单,写入参数即可:

参数作用
[database]共享名称为database
commont = Do not arbitrarily modify the database file警告用户不要随意修改数据库
path = /home/database共享目录为/home/database
public = no关闭"所有人可见"
writable = yes允许写入操作

第1步创建用于访问共享资源的账户信息。在RHEL 8系统中,Samba服务程序默认使用的是用户口令认证模式(user);可确保仅让有密码且受信任的用户访问共享资源;不过只有在建立账户信息数据库后才能使用此模式;Samba服务程序的数据库要求账户必须在当前系统中已经存在,否则日后创建文件时将导致文件的权限属性混乱,引发错误;

pdbedit命令用于管理samba服务程序的账户信息数据库,语法:"pdbedit [选项] 账户";第一次写入数据库需要使用-a参数;使用的参数及作用如下:

参数作用
-a 用户名建立Samba用户
-x 用户名删除Samba用户
-L列出用户列表
-Lv列出用户详细信息的列表
 [root@Linux ~]# id linuxprobe
 uid=1002(linuxprobe) gid=1002(linuxprobe) groups=1002(linuxprobe)
 [root@Linux ~]# pdbedit -a -u linuxprobe
 new password:   # 输入该账户在Samba服务数据库中的密码
 retype new password:    # 再次输入进行确认
 Unix username:        linuxprobe
 NT username:          
 Account Flags:        [U          ]
 User SID:             S-1-5-21-2480315105-886177666-1809780899-1000
 Primary Group SID:    S-1-5-21-2480315105-886177666-1809780899-513
 Full Name:            
 Home Directory:       \\LINUX\linuxprobe
 HomeDir Drive:        
 Logon Script:         
 Profile Path:         \\LINUX\linuxprobe\profile
 Domain:               LINUX
 Account desc:         
 Workstations:         
 Munged dial:          
 Logon time:           0
 Logoff time:          Wed, 06 Feb 2036 23:06:39 CST
 Kickoff time:         Wed, 06 Feb 2036 23:06:39 CST
 Password last set:    Tue, 09 Jul 2024 11:11:45 CST
 Password can change:  Tue, 09 Jul 2024 11:11:45 CST
 Password must change: never
 Last bad password   : 0
 Bad password count  : 0
 Logon hours         : F

第2步创建用于共享资源的文件目录;考虑文件读写权限问题与SELinux安全上下文所带来的限制。在samba的帮助手册中告诉用户正确的文件上下文值应该是samba_share_t,修改完后执行restorecon命令使其生效;

 [root@Linux ~]# mkdir /home/database
 [root@Linux ~]# chown -Rf linuxprobe:linuxprobe /home/databse
 [root@Linux ~]# semanage fcontext -a -t samba_share_t /home/database
 [root@Linux ~]# restorecon -Rv /home/database

第3步设置SELinux服务与策略,使其允许通过Samba服务程序访问普通用户家目录

 [root@Linux ~]# getsebool -a | grep samba
 ...
 samba_enable_home_dir --> off
 [root@Linux ~]# setsebool -P samba_enable_home_dir on

第4步:在Samba的服务程序的主配置文件中;写入以下共享信息

 [root@Linux ~]# vim /etc/samba/smb.conf
 [global]
     workgroup = SAMBA
     security = user
     passdb backend = tdbsam
     include = /etc/samba/usershares.conf
     
 [database]
     comment = Do not arbitrarily modify the database file
     path = /home/database
     public = no
     writable = yes

第5步:Samba服务程序的配置工作基本完毕。Samba服务程序在Linux系统中的名字为smb,所以重启并加入到启动项中:

 [root@Linux ~]# systemctl restart smb
 [root@Linux ~]# systemctl enable smb
 Created symlink /etc/systemd/system/multi-user.target.wants/smb.service → /usr/lib/systemd/system/smb.service.

避免防火墙会限制用户访问,因此决定将iptables防火墙清空,再把Samba服务添加到firewalld防火墙:

[root@Linux ~]# iptables -F
[root@Linux ~]# iptables-save 
[root@Linux ~]# firewall-cmd --zone=public --permanent --add-service=samba
success
[root@Linux ~]# firewall-cmd --reload 
success

第6步:在服务器本地检查samba服务是否启动;使用"systemctl status smb"查看,若想进一步看samba服务都共享出去了哪些共享目录,使用smbclient命令来查看共享详情,-U参数指定了用户名称,建议一会用哪位用户进行挂载,就哪位用户身份进行查看;-L参数列举共享清单:

[root@Linux ~]# smbclient -U linuxprobe -L 10.0.0.2
Password for [SAMBA\linuxprobe]:

	Sharename       Type      Comment
	---------       ----      -------
	database        Disk      Do not arbitrarily modify the database file
	IPC$            IPC       IPC Service (Samba 4.19.4)
SMB1 disabled -- no workgroup available

2、Windows挂载共享

无论Samba共享服务是部署Windows系统上还是部署在Linux系统上,通过Windows系统进行访问时,其步骤都是一样的。假设Samba共享服务部署在Linux系统上,并通过Windows系统来访问Samba服务。Samba共享服务器和Windows客户端的IP地址可以根据下表来设置:

主机名称操作系统IP地址
Samba共享服务器RHEL 810.0.0.2
Linux客户端RHEL 810.0.0.2
Windows客户端Windows 10192.168.10.10

要在Windows系统中访问共享资源,只需要点击开始按钮后输入两个反斜杠,然后再加服务器的IP地址即可

现在就能看到登录界面了;正确写入linuxprobe账户名以及使用pdbedit命令设置的密码后,就可以登录到共享界面中了;尝试执行查看、写入、更名、删除文件等操作

由于系统缓存的原因,有可能在第二次登录时提供了正确的账户和密码,依然会报错,这时候重新启动一下即可。

3、Linux挂载共享

Samba服务程序还可以实现Linux系统之间的文件共享。按照下表来设置Samba服务程序所在主机(即Samba共享服务器)和Linux客户端使用的IP地址,然后在客户端安装支持文件共享服务的软件包:

主机名称操作系统IP地址
Samba共享服务器RHEL 810.0.0.2
Linux客户端RHEL 810.0.0.2
Windows客户端Windows 10192.168.10.10
[root@Linux ~]# yum install cifs-utils

安装好后,在客户端上创建一个用于挂载Samba服务共享资源的目录,可以与服务器上的共享名称同名,这样便于日后查找。mount 命令的-t参数指定协议类型,-o参数指定用户名和密码,最后追加上服务器IP地址和共享名称和本地挂载目录即可。服务器IP地址后面的共享名称指的是配置文件中[database]的值,而不是服务区本地挂载的目录名称,虽然一样,但我们应该认出他们的区别。

[root@Linux ~]# mkdir /database
[root@Linux ~]# mount -t cifs -o username=linuxprobe,password=redhat //10.0.0.2/database /database
[root@Linux ~]# df -h
...
//10.0.0.2/database		17G		3.9G  	14G		23%		/database

按照Samba服务的用户名、密码、共享域的顺序将相关信息写入到一个认证文件,让/etc/fstab文件和系统自动加载它。最后把这个文件权限修改为为仅root管理员才能查看:

[root@Linux ~]# vim auth.smb
username=linuxprobe
password=redhat
domain=MYGROUP
[root@Linux ~]# chmod 600 auth.smb

挂载信息写入到/etc/fstab文件中,确保在服务重启后依然生效:

[root@Linux ~]# vim /etc/fstab
...
//10.0.0.2/database					/database	cifs	credentials=/root/auth.smb
[root@Linux ~]# mount -a

Linux客户端成功地挂载了Samba服务的共享资源。进入到挂载目录/database就能看到Windows系统访问Samba服务程序时留下的文件了。当然,也可以对该文件进行读写操作并保存;

[root@Linux ~]# cat /database/Memo.txt
i can edit it.

二、NFS网络文件系统

NFS网络文件系统服务可以将远程Linux系统上的文件系统资源挂载到本地主机的目录上,从而使得本地主机(Linux客户端)基于TCP/IP协议,像使用本地主机上的资源那样读写远程Linux系统上的共享文件。

由于RHEL 8系统中默认安装了NFS服务,外加NFS服务的配置步骤也简单;首先检查系统是否安装NFS软件包

[root@Linux ~]# yum install nfs-utils

第1步:使用两台Linux主机(一台充当NFS服务器,一台充当NFS客户端)配置IP地址;

主机名称操作系统IP地址
NFS服务端RHEL 810.0.0.2
NFS客户端RHEL 810.0.0.3

配置好防火墙,以免默认的防火墙策略禁止正常的NFS共享服务;

[root@Linux ~]# iptables -F
[root@Linux ~]# iptables-save
[root@Linux ~]# firewall-cmd --permanent --zone=public --add-service=nfs
success
[root@Linux ~]# firewall-cmd --permanent --zone=public --add-service=rpc-bind
success
[root@Linux ~]# firewall-cmd --permanent --zone=public --add-service=mountd
success
[root@Linux ~]# firewall-cmd --reload

第2步在NFS服务器上建立用于NFS共享的目录,并设置足够的权限确保其他人有写入权限

[root@localhost ~]# mkdir /nfsfile
[root@localhost ~]# chmod -R 777 /nfsfile
[root@localhost ~]# echo "Welcome to linuxprobe.com" > /nfsfile/readme

第3步:NFS服务程序的配置文件为/etc/exports,默认情况下里面没有任何内容;可按照"共享目录的路径 允许访问的NFS客户端(共享权限参数)"的格式,定义要共享的目录与相应的权限;配置NFS服务程序配置文件的参数

参数作用
ro只读
rw只写
root_squash当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户
no_root_squash当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员
all_suqash无论NFS客户端使用什么账号访问,均映射为NFS服务器的匿名用户
aync同时将数据写入到内存与硬盘中,保证不丢失数据
async
[root@localhost ~]# vim /etc/exports
/nfsfile 10.0.0.*(rw,sync,root_squash)

第4步启动和启用NFS服务程序。由于在使用NFS服务进行文件共享之前,需要使用RPC(Remote Procedure Call,远程过程调用)服务将NFS服务器的IP地址和端口号等信息发送给客户端。因此,在启动NFS服务之前,还需要顺带重启并启用rpcbind服务程序,并将这两个服务一并加入开机自启项;

[root@localhost ~]# systemctl restart rpcbind
[root@localhost ~]# systemctl enable rpcbind
[root@localhost ~]# systemctl start nfs-server
[root@localhost ~]# systemctl enable nfs-server
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.

NFS客户端的配置步骤:先使用showmount命令查询NFS服务器的远程共享信息,必要的参数如下;其输出格式为"共享的目录名称 允许使用的客户端地址"

参数作用
-e显示NFS服务器的共享列表
-a显示本机挂载的文件资源的情况NFS资源的情况
-v显示版本号
[root@localhost ~]# showmount -e 10.0.0.2
Export list for 10.0.0.2:
/nfsfile 10.0.0.*

然后在NFS客户端创建一个挂载目录。使用mount目录结合-t参数,指定要挂载的文件系统的类型,并在命令后写上服务器的IP地址、服务器上的共享目录以及要挂载到本地系统(及客户端)的目录

[root@localhost /]# mkdir nfsfile
[root@localhost /]# mount -t nfs 10.0.0.2:/nfsfile /nfsfile
[root@localhost /]# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 1.9G     0  1.9G   0% /dev
tmpfs                    1.9G     0  1.9G   0% /dev/shm
tmpfs                    1.9G   13M  1.9G   1% /run
tmpfs                    1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/mapper/centos-root   17G  3.9G   14G  23% /
/dev/sda1               1014M  185M  830M  19% /boot
tmpfs                    378M   24K  378M   1% /run/user/0
10.0.0.2:/nfsfile         35G  7.6G   28G  22% /nfsfile

挂载成功后就应该能够顺利地看到在执行前面的操作时写入的文件内容了。如果希望一直有效,则写入fstab文件中;

[root@localhost /]# cat /nfsfile/readme 
Welcome to linuxprobe.com
[root@localhost /]# vim /etc/fstab 
#
# /etc/fstab
# Created by anaconda on Tue Jul  2 00:30:23 2024
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=beecf916-556f-4ad8-a04b-8a32026c9dde /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
10.0.0.2:/nfsfile				/nfsfile	nfs	defaults	0 0

三、AutoFs自动挂载服务

如果在/etc/fstab中挂载的资源太多,会带来很多负载。若长期不使用,也会导致服务器硬件资源的浪费。

autofs自动挂载服务可以解决这一问题。与mount命令不同,autofs服务程序是一种Linux系统守护进程,当检测到用户试图访问一个尚未挂载的文件系统时,将自动挂载该文件系统

[root@Linux ~]# yum install autofs

在autofs服务程序的主配置文件中需要按照"挂载目录 子配置文件"的格式进行填写。挂载目录是设备挂载位置的上一级目录。例如:光盘设备一般挂载到/media/cdrom目录中,那么挂载目录写成/media即可。对应的子配置文件则是对这个挂载目录内的挂载设备信息作进一步说明。子配置文件需要用户自行定义,文件名字没有严格要求,但建议以.misc结束

[root@Linux ~]# cat /etc/auto.master
#
# Sample auto.master file
# This is a 'master' automounter map and it has the following format:
# mount-point [map-type[,format]:]map [options]
# For details of the format look at auto.master(5).
#
/media  /etc/iso.misc
/misc	/etc/auto.misc
...

在子配置文件中,应按照"挂载目录 挂载文件类型与权限 :设备名称"的格式进行填写。例如:要把光盘设备挂载到/media/iso目录中,可将挂载目录写成iso,而-fstype为文件系统格式参数,iso9660为光盘设备格式,ro、nosuid及nodev为光盘设备具体权限参数,/dev/cdrom则是定义要挂载的设备名称。配置完成后再顺手将autofs服务程序加入到开机自启项中;

[root@Linux ~]# vim /etc/iso.misc
iso   -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom
[root@Linux ~]# systemctl start autofs
[root@Linux ~]# systemctl enable autofs
Created symlink /etc/systemd/system/multi-user.target.wants/autofs.service → /usr/lib/systemd/system/autofs.service.

先查看当前的光盘设备的挂载情况,发现/media目录中根本没有iso子目录:

[root@Linux ~]# umount /dev/cdrom
[root@Linux ~]# df -h
...
[root@Linux media]# cd /media
[root@Linux media]# ls
[root@Linux media]# 

但是,我们却可以使用cd命令切换到这个iso子目录中,而且光盘设备会被立即挂载上,也就能顺利查看光盘的内容了:

[root@Linux iso]# cd iso
[root@Linux iso]# ls
AppStream	EULA ...
[root@Linux iso]# df -h
...
/dev/sro		6.7G	6.7G	0	100%	/media/iso

光盘设备的名称变成/dev/sr0;实际上和/dev/cdrom是连接方式,只是名称不同而已

[root@Linux ~]# ls -l /dev/cdrom
lrwxrwxrwx. 1 root root 3 Jul 2 00:38 /dev/cdrom -> sr0

下面对NFS服务操作:

首先把NFS共享目录卸载,然后在autofs服务程序的主配置文件中会有一条"/misc /etc/auto.misc"参数,这个auto.misc相当于自动挂载的参考文件,而它默认就已经存在,所以这步不用操作:

[root@Linux ~]# umount /nfsfile
[root@Linux ~]# vim /etc/auto.master
...
/media  /etc/iso.misc
/misc	/etc/auto.misc

接下来找到这个对应的auto.misc文件,填写本地挂载的路径和NFS服务器的挂载信息

[root@Linux ~]# vim /etc/auto.misc
...
nfsfile		10.0.0.2:/nfsfile

重启autofs程序服务,进入到/misc/nfsfile目录时,共享信息便会自动挂载:

[root@Linux ~]# systemctl restart autofs
[root@Linux ~]# cd /misc/nfsfile
[root@Linux nfsfile]# df -h 
...
10.0.0.2:/nfsfile		6.7G	6.7G	0	100%	/media/iso

致谢

在此,我要对所有为知识共享做出贡献的个人和机构表示最深切的感谢。同时也感谢每一位花时间阅读这篇文章的读者,如果文章中有任何错误,欢迎留言指正。 

学习永无止境,让我们共同进步!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1926207.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

板级调试小助手(2)ZYNQ自定义IP核构建属于自己的DDS外设

一、前言 在上期文章中讲述了小助手的系统结构和原理。在PYNQ的框架开发中,我们一般可以将PL端当做PS端的一个外设,通过读写寄存器的方式来操作外设的功能,就类似于在开发ARM和DSP中操作外设一样,不同时的是,我们可以通…

关于前端数据库可视化库的选择,vue3+antd+g2plot录课计划

之前:antdv 现在:g2plot https://g2plot.antv.antgroup.com/manual/introduction 录课内容:快速入门 图表示例: 选择使用比较广泛的示例类型,录课顺序如下: 1、折线图2、面积图3、柱形图4、条形图5、饼…

[Qt] Qt Creator中,新建QT文件时选择界面模版下的各选项

在Qt Creator中,新建文件时选择界面模版下的各选项具有特定的意义,这些选项主要帮助开发者根据项目需求快速生成不同类型的文件。以下是对这些选项的详细解释: 0. Qt Item Model 意义:列表模型是Qt中用于表示和操作数据的强大抽…

Ubuntu下载安装chrome浏览器

方法一:wget下载并安装 1、创建文件夹存安装包 cd /root/Downloads mkdir chrome 2、下载安装包到文件夹内 wget -c https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb -P /root/Downloads/chrome 3、安装 cd chrome sudo dpkg -i go…

从0开始的STM32HAL库学习5

旋转编码计数器 修改中断代码 void EXTI0_IRQHandler(void) {/* USER CODE BEGIN EXTI0_IRQn 0 */if(__HAL_GPIO_EXTI_GET_FLAG(PB0_Pin)){if(HAL_GPIO_ReadPin(PB1_GPIO_Port, PB1_Pin)GPIO_PIN_RESET){count--;}/* USER CODE END EXTI0_IRQn 0 */HAL_GPIO_EXTI_IRQHandler…

【论文极速读】 可微分检索索引(Differential Search Index, DSI)

【论文极速读】 可微分检索索引(Differential Search Index, DSI) FesianXu 20240714 at WeChat Search Team 前言 最近从朋友处得知了DSI这个概念,所谓的可微分检索索引DSI,就是通过语言模型将检索过程中的索引和召回…

virtualbox的ubuntu默认ipv4地址为10.0.2.15的修改以及xshell和xftp的连接

virtualbox安装Ubuntu后,默认的地址为10.0.2.15 我们查看virtualbox的设置发现是NAT 学过计算机网络的应该了解NAT技术,为了安全以及缓解ip使用,我们留了部分私有ip地址。 私有IP地址网段如下: A类:1个A类网段&…

持续学习的综述: 理论、方法与应用(三:泛化分析)

前文连接:持续学习的综述: 理论、方法与应用(一) 前文连接:持续学习的综述: 理论、方法与应用(二:理论基础) 泛化分析 目前持续学习的理论研究主要是在增量任务的训练集上进行的,假…

Java面试题:MVCC

MVCC 保证事务的隔离性 排它锁: 一个事务获取了数据行的排他锁,其他事务就不能再获取该行的其他锁 MVCC: 多版本并发控制 维护一个数据的多个版本,使读写不存在冲突 具体实现依靠 隐藏字段 mysql中隐藏了三个隐藏字段 db_trx_id:最近修改事务 db_roll_ptr:指向上一个…

【Linux】Linux必备的基础指令

目录 Linux必备的基础指令一 、 什么是Linux二、 Linux常用命令2.1 ls2.2 pwd2.3 cd2.4 touch2.5 cat2.6 mkdir2.7 rm 三、 Linux重要指令3.1 cp3.2 mv3.3 tail3.4 vim3.5 grep3.6 ps3.7 netstat Linux必备的基础指令 一 、 什么是Linux 系统编程&⽹络编程 Linux⾃⾝提供…

适合创业公司使用的wordpress主题

对于创业公司来说,‌选择一个适合的WordPress主题至关重要,‌它不仅能够提升公司网站的外观和用户体验,‌还能帮助优化搜索引擎排名,‌从而吸引更多的潜在客户。‌以下是一些推荐的WordPress主题,‌特别适合创业公司使…

【vue3-命名规范以及注意事项】

使用多字组件名 使用详细的道具定义props 在提交的代码中,prop定义应该总是尽可能详细,至少指定类型。 在声明期间,道具名应该始终使用camelCase。当在in-DOM模板中使用时,props应该是串式的。单文件组件模板和JSX可以使用keba…

【leetcode】整数反转

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−2^31, 2^31 − 1] ,就返回 0。 假设环境不允许存储 64 位整数(有符号或无符号)。 示例 1: …

C语言丢失精度 如何实现高精度计算

(1)int 类型举例 int :占4个字节,也就是32位,及最大值是2^32-11024*1024*1024*4-14294967295 以上说法错误,因为Int是有符号类型整数,所以最高位是符号位,及int的最大值应该是2^31…

[BJDCTF2020]EasySearch1

知识点: 1.swp泄露 2.md5碰撞 3.PHP代码审计 4.SSI代码执行漏洞 // Apache SSI 远程命令执行漏洞复现 看着像sql注入,不过注入无果,扫一下目录试试~ 发现是swp泄露. SWP文件泄露漏洞是指在使用 Vim编辑器 编辑一个文件时,Vim会在…

​前端Vue自定义签到获取积分弹框组件设计与实现

摘要 随着前端技术的不断演进,开发的复杂性日益凸显。传统的整体式开发方式在面临功能迭代和修改时,常常牵一发而动全身,导致开发效率低下和维护成本高昂。组件化开发作为一种解决方案,通过实现模块的独立开发和维护,…

代码随想录(day6)哈希表-求两个数组的交集

什么是红黑树,参考链接【数据结构】史上最好理解的红黑树讲解,让你彻底搞懂红黑树-CSDN博客 题目: 注意:字典用{}符合、元组用()符号、列表用[]符号 table.get(num,0)1的意思 class Solution(object):def intersection(self, n…

夹子音转换器matlab

操作过程点击此处观看 上段时间补习了一下傅里叶变化的知识,突发奇想可以根据此做一款声音转换器,使用工科神器Matlab进行完成,并且开发了可操作界面如下图所示: 功能实现与描述 软件中可以实现声音的录制、回放、文件的保存与…

vmware workstation 虚拟机安装

vmware workstation 虚拟机安装 VMware Workstation Pro是VMware(威睿公司)发布的一代虚拟机软件,中文名称一般称 为"VMware 工作站".它的主要功能是可以给用户在单一的桌面上同时运行不同的操作系统,它也是可进 行开发…

6-7 宠物领养开发及相关代码

6-7 宠物领养开发及相关代码(react区块链实战) 来到ant-design https://ant.design/index-cn https://ant.design/components/layout-cn/ 来到布局 选择一个简单的布局即可 会显示出所有的相关界面的代码 根据对应界面的代码在我们的react项目woniu-…