• [技术干货] 创建多线程的几种方法
    创建多线程的几种方法 Python创建多线程主要有如下两种方法:函数类接下来,我们就来揭开多线程的神秘面纱。用函数创建多线程 在Python3中,Python提供了一个内置模块 threading.Thread,可以很方便地让我们创建多线程。threading.Thread() 一般接收两个参数:线程函数名:要放置线程让其后台执行的函数,由我们自已定义,注意不要加();线程函数的参数:线程函数名所需的参数,以元组的形式传入。若不需要参数,可以不指定。举个例子1 import time 2 from threading import Thread 3 ​ 4自定义线程函数。5 def target(name="Python"): 6 for i in range(2): 7 print("hello", name) 8 time.sleep(1) 9 ​ 10创建线程01,不指定参数11 thread_01 = Thread(target=target) 12启动线程0113 thread_01.start() 14 ​ 15 ​ 16创建线程02,指定参数,注意逗号17 thread_02 = Thread(target=target, args=("MING",)) 18启动线程0219 thread_02.start() 可以看到输出1 hello Python 2 hello MING 3 hello Python 4 hello MING 2. 用类创建多线程 相比较函数而言,使用类创建线程,会比较麻烦一点。首先,我们要自定义一个类,对于这个类有两点要求,必须继承 threading.Thread 这个父类;必须复写 run 方法。这里的 run 方法,和我们上面线程函数的性质是一样的,可以写我们的业务逻辑程序。在 start() 后将会调用。来看一下例子 为了方便对比,run函数我复用上面的main。1 import time 2 from threading import Thread 3 ​ 4 class MyThread(Thread): 5 def init(self, type="Python"): 6 # 注意:super().init() 必须写 7 # 且最好写在第一行 8 super().init() 9 self.type=type 10 ​ 11 def run(self): 12 for i in range(2): 13 print("hello", self.type) 14 time.sleep(1) 15 ​ 16 if name == 'main': 17 # 创建线程01,不指定参数 18 thread_01 = MyThread() 19 # 创建线程02,指定参数 20 thread_02 = MyThread("MING") 21 ​ 22 thread_01.start() 23 thread_02.start() 当然结果也是一样的。1 hello Python 2 hello MING 3 hello Python 4 hello MING 3. 线程对象的方法 上面介绍了当前 Python 中创建线程两种主要方法。创建线程是件很容易的事,但要想用好线程,还需要学习线程对象的几个函数。经过我的总结,大约常用的方法有如下这些:1如上所述,创建一个线程2 t=Thread(target=func) 3 ​ 4启动子线程5 t.start() 6 ​ 7阻塞子线程,待子线程结束后,再往下执行8 t.join() 9 ​ 10判断线程是否在执行状态,在执行返回True,否则返回False11 t.is_alive() 12 t.isAlive() 13 ​ 14设置线程是否随主线程退出而退出,默认为False15 t.daemon = True 16 t.daemon = False 17 ​ 18设置线程名19 t.name = "My-Thread"
  • [技术干货] linux中创建逻辑卷
    LVM是管理磁盘的一种方式,核心特点是灵活调整大小,通常都是空间不够用,进行充。LVM整体流程物理硬盘(分区不分区都行)->变成物理卷(PV)->加入卷组(WG)-> 卷组中抽调空间,制作逻辑卷(L)->格式化->挂载准备工作以LVM方式分区,装系统。boot分区一般为标准分区。默认是centos卷组,root和swap逻辑分区。1.pvdisplay查看现有的物理卷物理卷的名字是/dev/sda2物理卷使用的磁盘分区是/dev/sda2一般都是对应的PE Size * Total PE / 1024 大概就是 PV Size也许有细微的差别2.vgdisplay查看现有的卷组有一个名字叫做centos的卷组,这个卷组的空间大概有29G,所有空间都被使用了卷组的名字centos,刚才装系统时候看到过3.lvdisplay查看逻辑卷第一个逻辑卷的路径/dev/centos/swap名字是swap,大小有2G第二个逻辑卷的路径/dev/centos/root名字是root 大小27G逻辑卷的两个名字在刚才装系统时候也看到过这两个逻辑卷都属于centos卷组4.lsblk验证这样的结构关系5.假设根的空间不够了, 也就是逻辑卷/dev/centos/root的27G空间用完了,需要扩充lvextend -L +5g /dev/centos/root扩充尖败,因为cent0s卷组没有空间了,需要把物理卷的空间加入到卷组中此时只有/dev/sda2这一块物理卷,并且它的空间已经都给了 centos卷组所以现在需要添加新的磁盘,并且把新的磁盘变成物理卷,然后分配给centos卷组。6.添加一块20G的新硬盘,并且把新加的硬盘变成物理卷lsblk查看系统是否识别到硬盘(20G的sdb)pvcreate /dev/sdbpvdisplay查看,显示"/dev/sdb"is a new physical volume7.给centos卷组增加空间vgdisplay查看vgextend centos/dev/sdb再次使用vgdisplay查看8.扩展根的空间lsblk查看日前根的大小lvextend -L +5g /dev/centos/rootlsblk再次查看,已经多了5G,并且是跨逃两块磁盘空间同时vgdisplay查看,centos卷组的可用空间少了5G,20G变成15G但是此时df-hT查看/, 还是原来的27G9.注意!!!调整逻辑卷大小之后,也需要对文件系统调整大小进行匹配。xfs_growfs /dev/centos root显示data blocks changed如果使用的是ext4,则xfs_growfs换成resize2fs10.以上操作的都是装系统时候已经存在的centos卷组和两个逻辑卷,接下来自己创建卷组和逻辑卷。由于第7步中刚才添加的硬盘sdb的所有空间已经分配给了centos卷组,我们再添加一块硬盘来操作。11.再添加一块10G的硬盘,并且把新加的硬盘变成物理卷lsblk查看系统是否识别到硬盘(10G的sdc)pvcreate /dev/sdcpvdisplayi查看,显示/dev/sdc"is a new physical volume"12.创建自己的卷组sydnsijqvgcreate sydnsjjg /dev/sdcvgdisplay可以看到,卷组创建成功,可用空间10G左右13.创建自己的逻辑卷语法lvcreate -L 大小 -n 逻辑卷名字 卷组名字lvcreate -L 4G-n wodel sydnsjjqlvdisplay查看可以看到/dev/sydnsjjq/wode1.逻辑卷创建成功14,给自己的逻辑卷格式化mkfs.xfs /dev/sydnsjjq/wodel15.挂载自己的逻辑卷创建挂载点 mkdir /mnt/wodel此时df-hT还看不到临l时挂载mount /dev/sydnsjjq/wodel /mnt/wodel16.如果自己的逻辑卷不够用,需要扩充,跟刚才扩充根的方法完全一样。17.删除操作卸载逻辑卷 umount /mnt/vodel/删除卷组 vgremove sydnsjjq移除物理卷 pvremove /dev/sdcroot@localhost ~# umount /mnt/wodel/root@localhost ~# vgremove sydnsjjqDo you really want to remove volume group "sydnsjjq' containing 1 logical volumes?[y/n:yDo you really want to remove active logical volume sydnsjjq/wodel?y/n:yLogical volume "wodel" successfully removedVolume group "sydnsjjq" successfully removedroot@localhost ~# pvremove /dev/sdcLabels on physical volume "/dev/sdc"successfullywiped.18.删除之后验证
  • [技术干货] vdo详解
    VDO(Virtual Data Optimizer)是一种用于数据优化和压缩的开源工具,可以显著降低存储空间的消耗,同时提升数据访问性能。在本文中,我们将深入探讨VDO的功能和使用方法,并通过代码示例展示其具体应用。一、VDO概述VDO基于Linux内核的压缩和去重技术,通过对数据进行去重和压缩,实现存储空间的高效利用。它可以作为文件系统下的一层存储层,对用户数据进行透明处理,无需修改上层应用程序。此外,VDO还支持快照、克隆等高级功能,进一步提升了存储的灵活性和可靠性。二、VDO安装与配置在使用VDO之前,需要确保系统中已经安装了相关的软件包。可以通过以下命令安装VDO工具集:sudo apt-get install vdo安装完成后,可以通过以下命令创建一个VDO卷:sudo vdo create --name myvdo --device /dev/sdb1 --size 10G其中,--name参数指定了VDO卷的名称,--device参数指定了用于创建VDO卷的块设备,--size参数指定了VDO卷的大小。创建完成后,可以通过以下命令将VDO卷格式化为文件系统:sudo mkfs.ext4 /dev/mapper/myvdo这里使用了ext4文件系统,也可以根据实际需求选择其他文件系统。三、VDO的使用挂载VDO卷可以使用以下命令将VDO卷挂载到文件系统中:sudo mount /dev/mapper/myvdo /mnt/myvdo这样,就可以在/mnt/myvdo目录下访问VDO卷中的数据了。添加数据到VDO卷向VDO卷中添加数据的方法与操作普通文件系统相同,只需要将数据文件复制到VDO卷的挂载目录中即可:cp mydata.txt /mnt/myvdo/读取VDO卷中的数据可以通过以下命令从VDO卷中读取数据:cat /mnt/myvdo/mydata.txtVDO会对数据进行透明解压缩和去重处理,用户无需关心底层细节。卸载VDO卷当不再需要使用VDO卷时,可以通过以下命令将其卸载:sudo umount /mnt/myvdo四、VDO的高级功能快照功能VDO支持创建快照,可以记录某一时刻的VDO卷状态,并在后续时间点进行恢复。以下是创建一个名为snap1的快照的示例代码:sudo vdo snapshot create --name snap1 --vdoname myvdo可以通过以下命令查看已创建的快照列表:sudo vdo snapshot list --vdoname myvdo要恢复到某个快照的状态,可以使用以下命令:sudo vdo snapshot revert --name snap1 --vdoname myvdo克隆功能VDO还支持克隆功能,可以创建一个与原始VDO卷完全相同的副本。以下是创建一个名为myclone的克隆卷的示例代码:sudo vdo clone create --name myclone --source myvdo --size 10G这样,就创建了一个与原始卷myvdo相同的克隆卷myclone。克隆卷可以用于数据备份、迁移等场景。
  • [技术干货] Linux中的PV、VG和LV详解
    在Linux操作系统中,PV(物理卷)、VG(卷组)和LV(逻辑卷)是LVM(逻辑卷管理)的核心概念。LVM是Linux下的一个逻辑卷管理工具,它允许用户动态地调整文件系统的大小,从而实现存储资源的灵活管理。本文将详细介绍PV、VG和LV的原理、操作及相关代码。一、PV(物理卷)物理卷(Physical Volume,简称PV)是LVM的基本存储单元,它可以是硬盘分区、整个硬盘或者回环文件。在创建PV时,需要使用pvcreate命令。例如,将/dev/sdb1分区创建为物理卷: sudo pvcreate /dev/sdb1可以通过pvdisplay命令查看物理卷的详细信息: sudo pvdisplay二、VG(卷组)卷组(Volume Group,简称VG)是一个或多个物理卷的集合,它用于组合多个物理卷的存储空间,以形成一个连续的可用存储空间。在创建VG时,需要使用vgcreate命令。例如,将物理卷/dev/sdb1和/dev/sdb2创建为一个名为myvg的卷组: sudo vgcreate myvg /dev/sdb1 /dev/sdb2可以通过vgdisplay命令查看卷组的详细信息: sudo vgdisplay三、LV(逻辑卷)逻辑卷(Logical Volume,简称LV)是建立在卷组之上的逻辑存储单元,它可以被格式化并挂载到文件系统中。在创建LV时,需要使用lvcreate命令。例如,在myvg卷组中创建一个大小为1G的逻辑卷mylv: sudo lvcreate -L 1G -n mylv myvg可以通过lvdisplay命令查看逻辑卷的详细信息: sudo lvdisplay四、逻辑卷的操作与管理格式化逻辑卷:在创建逻辑卷后,需要对其进行格式化,以便在其上建立文件系统。例如,使用ext4文件系统格式化逻辑卷: sudo mkfs.ext4 /dev/myvg/mylv挂载逻辑卷:格式化逻辑卷后,可以将其挂载到文件系统中的指定目录。首先,创建一个挂载点,如/mnt/mylv: sudo mkdir /mnt/mylv接着,将逻辑卷挂载到/mnt/mylv目录:sudo mount /dev/myvg/mylv /mnt/mylv卸载逻辑卷:当不再需要使用逻辑卷时,可以将其卸载。例如,卸载/mnt/mylv目录下的逻辑卷:sudo umount /mnt/mylv扩展逻辑卷:随着数据的增长,可能需要扩展逻辑卷的大小。首先,使用lvextend命令扩展逻辑卷的容量:sudo lvextend -L +1G /dev/myvg/mylv接着,使用resize2fs命令调整文件系统以适应新的逻辑卷大小:sudo resize2fs /dev/myvg/mylv
  • [技术干货] Linux系统命令之whereis详解
    【Linux系统命令之whereis详解】 whereis是Linux系统中的一个常用命令,用于查找指定命令的二进制程序、源代码和帮助文档所在的位置。该命令可以帮助用户快速找到特定命令的相关信息。以下是 whereis命令的详细解释:  命令格式: whereis [选项] 命令名 常用选项: -b:只查找可执行文件。 -m:只查找帮助文档文件。 -s:只查找源代码文件。 示例: 查找命令的二进制程序、帮助文档和源代码文件: whereis ls 该命令将显示 ls命令的二进制程序、帮助文档和源代码文件所在的位置。 只查找命令的二进制程序: whereis -b ls 该命令将只显示 ls命令的二进制程序所在的位置。 只查找命令的帮助文档文件: whereis -m ls 该命令将只显示 ls命令的帮助文档文件所在的位置。 只查找命令的源代码文件: whereis -s ls 该命令将只显示 ls命令的源代码文件所在的位置。  whereis命令是一个非常实用的工具,特别是在查找命令所在位置和相关文档时。它能够帮助用户更加方便地定位所需的命令和相关信息。在日常使用中,可以结合 which和 locate等命令一起使用,以便更全面地查找特定命令和文件。 ———————————————— 原文链接:https://blog.csdn.net/tiansyun/article/details/134025611 
  • [技术干货] Linux系统常用unzip命令详解
    【Linux系统常用unzip命令详解】 unzip命令是Linux系统中用于解压缩ZIP格式压缩文件的常用工具。它能够快速、方便地将ZIP文件解压到当前目录或指定目录。以下是 unzip命令的详细解释和常用选项: 命令格式: unzip [选项] 文件名.zip 常用选项:  -d 目标目录:指定解压缩后的目标目录。 -l:列出ZIP文件中的内容,但不解压缩。 -q:安静模式,不显示解压缩过程。 -o:覆盖已存在的文件而不询问。 -n:不覆盖已存在的文件。 -j:只解压缩文件,不解压目录。 -p:保留原文件的权限和时间戳。 -r:递归地解压缩子目录中的ZIP文件。 示例:  解压缩文件到当前目录:  unzip filename.zip 解压缩文件到指定目录:  unzip filename.zip -d /path/to/target_directory 列出ZIP文件中的内容:  unzip -l filename.zip 静默模式解压缩文件:  unzip -q filename.zip 覆盖已存在的文件:  unzip -o filename.zip 不覆盖已存在的文件:  unzip -n filename.zip 只解压缩文件,不解压目录:  unzip -j filename.zip 保留原文件的权限和时间戳:  unzip -p filename.zip 递归地解压缩子目录中的ZIP文件:  unzip -r filename.zip unzip命令是一个非常实用的工具,特别是在处理ZIP格式的压缩文件时。通过合理使用不同的选项,你可以在Linux系统上高效地解压缩和管理ZIP文件。 ———————————————— 原文链接:https://blog.csdn.net/tiansyun/article/details/134025610 
  • [技术干货] Linux下的性能监控分析工具atop-安装部署篇
    【Linux性能监控分析工具atop的安装部署篇】  atop是一款功能强大的Linux性能监控和分析工具,它可以实时显示系统资源使用情况,并可以保存历史记录供后续分析。以下是atop在CentOS 7上的安装部署教程:  步骤 1:安装EPEL仓库  atop可以通过EPEL仓库进行安装,因此首先需要安装EPEL仓库。使用以下命令安装EPEL仓库:  sudo yum install epel-release 步骤 2:安装atop  安装EPEL仓库后,可以使用yum命令来安装atop:  sudo yum install atop 步骤 3:启动atop服务  atop安装完成后,默认并不会自动启动服务,需要手动启动并设置开机自启。使用以下命令启动atop服务并设置开机自启:  sudo systemctl start atop sudo systemctl enable atop 步骤 4:使用atop  atop安装完成并启动后,可以使用以下命令来查看实时的系统资源使用情况:  sudo atop 按 q键可以退出atop界面。  步骤 5:保存历史记录  atop默认不会将数据保存到日志文件中。如果需要保存历史记录以供后续分析,可以编辑atop的配置文件 /etc/atop/atop.daily:  sudo vi /etc/atop/atop.daily 在文件中找到并取消以下两行的注释,使得atop每天保存一份日志文件:  #LOGOPTS="-w /var/log/atop/atop_$(date +%Y%m%d) -b 600" #SAVEMDAYS=1 保存并退出配置文件。  步骤 6:创建日志文件目录  atop的日志文件默认保存在 /var/log/atop/目录下,因此需要创建该目录:  sudo mkdir /var/log/atop 步骤 7:配置定时任务  为了使atop每天自动保存日志文件,需要配置定时任务。使用以下命令编辑定时任务:  sudo crontab -e 在文件末尾添加以下行,设置每天凌晨0点执行atop的日志保存:  0 0 * * * /usr/bin/atop -a -w /var/log/atop/atop_$(date +%Y%m%d) -b 600 保存并退出定时任务配置。  至此,atop的安装和部署就完成了。现在,atop会每天自动保存系统资源使用情况的日志文件,并可以通过 sudo atop命令实时查看当前的系统状态。这个工具可以帮助你更好地了解系统的性能表现和瓶颈,以便进行进一步的优化和调整。 ———————————————— 原文链接:https://blog.csdn.net/tiansyun/article/details/134025653 
  • [技术干货] Linux系统命令之locate详解
    Linux系统命令之locate详解】 locate是Linux系统中用于快速查找文件的命令。它通过预先构建的数据库进行文件搜索,比传统的 find命令快速得多。以下是 locate命令的详细解释和使用方法: 1. 命令格式: locate [OPTIONS] PATTERN 2. 命令功能: locate命令用于根据模式(PATTERN)查找文件或目录,并输出符合条件的文件路径。它通过搜索名为 /var/lib/mlocate/mlocate.db的数据库来实现快速查找。 3. 使用示例: 查找名为"file.txt"的文件: locate file.txt 使用通配符查找以"file"开头的文件: locate file* 查找包含"keyword"关键词的文件: locate *keyword* 4. 常用选项: -i:忽略大小写,进行大小写不敏感的搜索。 -c:仅显示符合条件的文件数量而不输出文件路径。 -l:输出符合条件的文件路径,每行一个,类似 ls命令的输出。 -n N:限制输出结果的数量,只显示前N个结果。 -b:只匹配基准名,忽略路径。 -w:仅匹配完整单词。 5. 使用注意事项:  locate命令需要使用数据库进行查找,因此在第一次使用之前,需要运行 sudo updatedb命令更新数据库,以保证搜索结果的准确性。 由于数据库更新可能需要一些时间,因此建议在文件系统或文件更新后再进行搜索,以获取最新结果。 总结:locate命令是Linux系统中快速查找文件的有力工具。它通过预先构建的数据库提供高效的文件搜索功能,并支持通配符和其他选项,使得文件搜索变得更加便捷和高效。记得在使用前先运行 updatedb命令更新数据库,以保证搜索结果的准确性。 ———————————————— 原文链接:https://blog.csdn.net/tiansyun/article/details/134025651 
  • [技术干货] 什么是Docker容器
    一:为什么需要Docker容器? 1.引入 1.1麻烦的环境部署 1.在软件开发中,最麻烦的事情之一就是环境配置。在正常情况下,如果要保证程序能运行,我们需要设置好操作系统,以及各种库和组件的安装。  2.举例来说,要运行一个Python程序,计算机必须要有 Python 引擎,还需要安装好程序的各种依赖,甚至还要配置特定的环境变量。假设你有两个程序都需要部署在同一个服务器上,一个需要软件是基于Python2.0,一个是Python3.0,那么在部署上就很容易造成混乱。因为不同版本的Python模块可能互不兼容,况且不同开发环境上的库也需要额外的配置。如果要部署很多程序,而开发环境和部署环境各不相同的话,可想而知配置得多么麻烦。  3.为了更好地将软件从一个环境移植到另一个环境上,必须从根源上解决问题,那么如何在移植软件的时候,将一模一样的原始环境迁移过来呢? 1.2虚拟机(Virtual Machine) 虚拟机是移植环境的一种解决方案。虚拟机本质上也是一个软件,在这个软件中,我们可以运行另一种操作系统。比如我们想要在 MacOS 上运行 Linux 系统,我们就在电脑上安装 Linux 镜像,并使用虚拟机打开此镜像,就能创建出一个镜中镜了。这个方案非常方便,想要新环境,就安装镜像,然后使用虚拟机打开,不想要直接删除。但是这个方案有几个缺点: 占用资源多:虚拟机需要安装整个操作系统,自然会消耗大量内存和硬盘空间。如我们只需要运行1MB的软件,有时候也不得不安装几个G的环境才能运行。 运行步骤冗余:虚拟机安装的是完整的系统,每次运行程序都需要按部就班,打开系统、登入用户等等之类麻烦的步骤,很不方便。 运行速度慢:为了运行特定环境中的软件,虚拟机必须先运行系统,而系统占用的资源往往很多(网络,GUI,IO等等),自然也会影响运行速度。 1.3Linux容器(Container) 为了解决虚拟机存在的这些缺点,Linux发展出了另一种虚拟化的技术:Linux容器。Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离。或者说,就是在正常进程的外面套用了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层程序的隔离。由于容器是进程级别的,相比虚拟机有更多优势:  占有资源少:容器只占用需要的资源,不占用那些用不到的资源。相比于虚拟机安装完整的操作系统,容器需要消耗的空间自然就少了很多。 资源利用率高:虚拟机都是独享资源,电脑需要为每个虚拟环境单独分配资源,不仅仅占用空间大,而且资源的利用率很低。而容器之间可以共享资源,最大化资源的利用率。 运行速度快:容器里面的应用就是底层系统的一个进程,所以启动容器相当于直接运行本机的一个进程,而不是一个完整并臃肿的操作系统,自然就快很多。 二:Docker是什么? 1.Docker简介 Docker属于Linux容器的一种封装,提供简单易用的容器使用接口,它也是目前最流行的Linux容器解决方案。Docker 将软件代码和其依赖,全打包在一个文件中。运行单个文件,就会生成虚拟容器。在这个虚拟容器中,不管本地的操作系统是如何的不同,此容器都能照常运行。  简而言之,Docker的接口非常简单,可以帮助用户更好地创建和使用容器,让相同的代码在不同的环境上正常运行。 2.Docker的用途 Docker目前主要有以下三个用途: 提供一次性的环境:本地测试别人的软件、持续集成的时候提供单元测试和构建的环境。 提供弹性的云服务:因为Docker容器可以随时启动或关闭,所以非常适合动态规划和缩容。 组建微服务构架:通过多个容器,服务的部署能更加灵活,帮助实现微服务构架。 不需要虚拟硬件和操作系统,轻量级,占用体积小,启动快 3.Docker容器 VS VM Docker容器和传统VM技术,在技术实现上有所不同。下图显示的是VM与Docker容器的逻辑组成:  VM:使用Hypervisor提供虚拟机的运行平台,管理每个VM中操作系统的运行。每个VM都要有自己的操作系统、应用程序和必要的依赖文件等。 Docker容器:使用Docker引擎进行调度和隔离,提高了资源利用率,在相同硬件能力下可以运行更多的容器实例;每个容器拥有自己的隔离化用户空间。 Server:相当于云服务器 Host OS:为操作系统 Docker Engine:可以认为我们在这个操作系统上安装了一个docker的软件 App A:在Docker组件中运行App A App B:在Docker组件中运行App B  # 所以docker完全没有操作系统的概念,用的还是宿主机的操作系统,但是它做出了隔离。也实现了虚拟化。 虚拟机与Docker容器对比 三:Docker容器是如何工作的? 1.Docker的三大组成要素: 镜像:Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的配置参数。 镜像不包含任何动态数据,其内容在构建之后也不会被改变。镜像可以用来创建Docker容器,用户可以使用设备上已有的镜像来安装多个相同的Docker容器。 容器:镜像创建的运行实例,Docker利用容器来运行应用。每个容器都是相互隔离的、保证安全的平台。我们可以把容器看做是一个轻量级的Linux运行环境。 镜像仓库:集中存放镜像文件的地方。用户创建完镜像后,可以将其上传到公共仓库或者私有仓库,需要在另一台主机上使用该镜像时,只需要从仓库上下载即可。 Docker容器的运行逻辑如下图所示,Docker使用客户端/服务器 (C/S) 架构模式,Docker守护进程(Docker daemon)作为Server端接收Docker客户端的请求,并负责创建、运行和分发Docker容器。Docker守护进程一般在Docker主机后台运行,用户使用Docker客户端直接跟Docker守护进程进行信息交互。 2.*Docker运行流程* 其中: Docker客户端:用于和Docker守护进程(Docker Daemon)建立通信的客户端。Docker客户端只需要向Docker服务器或者守护进程发出请求(Docker构建、Docker拉取和Docker启动等指令),服务器或者守护进程将完成所有工作并返回结果。 如橙色流程所示,执行Docker构建指令会根据Docker文件构建一个镜像存放于本地Docker主机。 如蓝色流程所示,执行Docker拉取指令会从云端镜像仓库拉取镜像至本地Docker主机或将本地镜像推送至远端镜像仓库。 如黑色流程所示,执行Docker启动指令会将镜像安装至容器并启动容器。 Docker主机:一个物理或者虚拟的机器用于执行 Docker守护进程和容器。 Docker守护进程:接收并处理Docker客户端发送的请求,监测Docker API的请求和管理Docker对象,比如镜像、容器、网络和数据卷。 4.Docker服务器与客户端 Docker是一个客户端-服务端(C/S)架构程序,Docker客户端只需要向Docker服务器或者守护进程发送请求即可,服务器或者守护进程将完成所有工作并返回结果,Docker提供了一个命令行工具以及一正太Restful Api,我们可以在同一台宿主机上运行Docker守护进程和客户端,也可以从本地Docker客户端连接运行在另外一台宿主机的Docker的守护进程。 # 使用了RESTful API的目的就是为了统一规范,无需自己在生成一套体系。现在几乎所有的软件都是通过RESTful API来传输数据。 5.docker非常重要的概念:镜像(image)与容器(container) # 命令演示: docker ps -a docker start -a 65ebc docker start test-container 3.重点(容器一直运行的原因) # 容器一直运行的原因COMMAND 1.它有一条前台进程,一直在运行 2.以后如果自己制作的镜像,运行起容器,必须有个可以夯住的命令COMMAND 3.如果COMMAND该命令结束,该容器也就结束了  # 当我们在后台启动的时候 1.比如:docker run -di --name=mycentos centos:centos7 2.这时他会自动启动一个 /bin/bash窗口 3.因为我们并没有关闭这个/bin/bash窗口,所以他会一直在后台运行   4.我们在使用start或者直接run进入这个镜像的时候,就相当于运行的这个命令:/bin/bash,就进入了这个bash窗口,相当于进入了容器(其实不是进入了容器,可以把他看作是xshell一个远程连接,连接到这个容器。)这里我们看作是进入到了这个容器,当我们使用exit退出的时候,就相当于关闭了/bin/bash这个窗口。所以容器一直会在后台运行的原因就是这个/bin/bash窗口一直在启动这,没有关闭它 4.容器创建并启动 – docker run # 创建并启动(run) # 参数:     -i:表示运行容器     -t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。     -d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。     --name :为创建的容器命名。如果不写,会自动分配一个名字(英文人名)     -v:表示目录映射关系(前者是宿主机目录,后者是容器目录,映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。(下述单独演示)     -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射 (下述单独演示) # 例子:run     docker run -it --name=myredis redis  # 这时就会启动redis容器并进去redis容器       docker run -id --name=oursql mysql  # 这时就不会进入mysql容器,再后台运行 # 注意,docker run  镜像  使用该命令:如果本地没有,会先pull,再run 5.进入容器内部和退出容器 5.1进入容器 # 方式1:     1.查询机器上运行的容器     docker ps     2.进入容器     docker exec -it 容器id/bin/bash     docker exec -it 427 /bin/bash # 第二种:ssh连接(容器内部装ssh服务端)(不常用)      #  exec真正的作用是在容器内执行命令,而不是真正的进入到容器内部 1.因为 /bin/bash这个命令,就相当于与这个容器建立了连接,所以我们可以和容器做交互,当我们关闭这个连接的时候,就会自动结束掉这个容器。 2.执行exec命令:     docker exec -it 容器id ls  # 查询根路径所有文件  # top 命令(容器内部执行查询进程) # 容器内部是纯净的空间,安装:vim  5.2退出容器 # 命令:exit     1.如果是一个夯在哪里得命令,则使用exit退出容器     2.如果不是则会自动退出容器 6.(-it 进入容器退出) 与 (-id 进入容器退出)区别 # -it 进入容器退出(前台容器自动结束【后台停止运行】) 1.在我们使用 -it 参数直接进入该容器的时候,使用exit退出的时候这个容器就会自动结束。     - 此时后台就没有该运行中的容器。 # -id 进入容器退出(前台容器自动结束【后台正常运行】)     2.如果使用 -id 后台运行容器的时候,使用 docker exec进入该容器,此时使用exit退出该容器的话,只是退出该容器,并没有从后台结束该容器,该容器还会在后台运行这。 十:文件拷贝(宿主机和容器互相拷贝文件) # 1.从宿主机拷贝到容器内部     docker cp 宿主机文件 容器id:容器路径     docker cp /home/a.txt 427:/home       # 2.从容器中拷贝到宿主机     docker cp 容器id:容器路径 宿主机路径(起别名)     docker cp 427:home/a.txt a.txt  十一:目录挂载(映射作用) # 目录挂载格式: docker run -di --name=mycentos99 -v /宿主机要挂载目录:/容器要挂载路径 指定镜像  docker run -di --name=mycentos99 -v /home:/home centos:centos7 # -v     : 映射 # 挂载作用: 1.一旦挂载,以后宿主机目录内修改,同样影响容器内部 2.容器内修改同样影响宿主机  十二:端口映射 图解: # 命令:         - 使用参数 -p 宿主机端口:容器端口     - 例:docker run -it -p 6377:6379 redis   # 将宿主机得6377端口映射到容器redis6379端口上# 演示: # 创建容器     - docker run -di -p 6377:6379 redis # 进入容器     - docker exec -it 27d /bin/bash       - 此时启动的是redis服务端   # 连接客户端     - redis-cli # 在容器中操作redis      - set name born # 此时我们使用远程连接我们得宿主机云服务器的6377端口。  为什么会后台启动redis服务? # 为什么会后台启动redis服务?      1.我们在启动redis容器的时候,他会自动运行一个脚本文件:docker-entrypoint.sh     2.就像启动cent os自动启动一个/bin/bash窗口     3.而redis启动/bin/bash与之建立连接之后,会自动执行这个脚本文件  # docker-entrypoint.sh 这个脚本的路径:     /usr/local/bin/docker-entrypoint.sh  十三:查看容器ip地址 # 命令: # 查看容器详细信息     - docker inspect 容器id # 只查看容器ip地址      - docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称/容器ID # 其实宿主机与容器之间是通过网关进行通信的     - 查看网关         # 容器内下载该命令:          - 下载查看ip信息的命令:yum install net-tools         - ifconfig:查看网络相关信息  # 所以此时我们在连接redis的时候就有两种方式      - 第一种:         - 因为我们做了端口映射,所以我们可以通过:云服务器地址:6377连接      - 第二种:         - 此时我们已经知道了容器的ip地址,所以就可以通过: 容器的ip地址:6379 (此时端口号就是它本身的6379因为是直接通过它本身的ip建立的连接) # 每个容器都有ip地址,每一个ip地址标志着一台唯一服务器,所以就实现了宿主与容器之间的隔离性,每一个容器就相当于一个虚拟机 十四:应用部署 # 在容器内部署mysql # 容器内查询env,环境变量密码 docker run -di --name=mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7 # -e        : 表示环境变量指定密码    # 进入容器 docker exec -it 749 /bin/bash mysql mysql -uroot -p 123456  show databases; drop database lqz; # 官方提供的 docker run --name some-mysql -v /my/own/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag # 宿主部署容器内redis docker run -di -p 6377:6379 redis:latest          # 宿主部署容器内nginx docker run -di --name=mynginx -p 8080:80 nginx  # 我们都使用了 -p 参数做了端口映射,所以我们在访问云服务器指定映射端口后,就访问到部署好的容器,所以有了docker完全就需要在本地下载这些应用,直接使用docker pull拉下来使用即可 ———————————————— 原文链接:https://blog.csdn.net/2201_75529678/article/details/129893498 
  • [技术干货] Linux内存管理
    Linux内存管理是指操作系统对系统内存的管理和分配。它负责管理可用内存空间、跟踪每个进程的内存使用情况,并为每个进程分配合适的内存空间。 Linux使用虚拟内存管理机制,将物理内存抽象成虚拟内存空间。这样可以让多个进程同时运行,并且每个进程都拥有自己的独立内存空间。管理员和进程间的访问是通过虚拟内存地址来进行的,而不是直接访问物理内存。 Linux内存管理的主要任务包括内存分配和回收、内存地址映射、页面置换和页面调度等。 内存分配和回收是指在进程申请内存或者释放内存时,操作系统负责管理和分配空闲内存。Linux使用内存分页机制,将虚拟内存和物理内存按照固定大小的页进行划分,以便更高效地管理和分配内存。  内存地址映射是指将进程的虚拟内存映射到物理内存的过程。Linux使用页表来实现虚拟内存到物理内存的映射。每个进程都有自己的页表,用于记录虚拟内存地址和物理内存地址之间的映射关系。 页面置换是指将不常用的页面从物理内存中交换到磁盘上,以便为其他需要内存的进程腾出空间。Linux中使用LRU(最近最少使用)算法来确定哪些页面被置换出去。 页面调度是指根据不同的算法和策略,决定哪些页面被加载到内存中,以及哪些页面被置换出去。Linux中使用的调度算法包括FIFO(先进先出)、Second-Chance(二次机会)和NRU(不经常使用)等。 总结来说,Linux内存管理负责管理和分配系统内存,确保每个进程都有足够的内存空间 ———————————————— 原文链接:https://blog.csdn.net/tiansyun/article/details/134046937 
  • [技术干货] 如何在 Linux 服务器上安装和使用 SFTP
    SFTP 或 SSH 文件传输协议是一种在两台计算机之间安全传输数据的方法。它是运行在 SSH 协议之上并利用其安全性并完全支持其身份验证的 FTP。 现在,建议使用 SFTP 而不是旧的旧 FTP 或 FTP/S 协议。SFTP 默认是安全的,因为这就是 SSH 的工作方式。从安全的角度来看,SFTP 还可以保护您免受密码嗅探和中间人攻击 (MiTM)。 与 SSH 一样,SFTP 也使用加密和加密哈希函数保护您的数据完整性。此外,它还支持多种安全身份验证方法,包括密码和基于密钥的身份验证。此外,它减少了服务器对外部网络的开放端口,因为它与 SSH 协议在同一端口上运行。 先决条件 在本指南中,您将学习如何在 Linux 系统上设置 SFTP 服务器。此外,您还将学习 sftp 客户端的基本命令。 以下是当前的实施环境: Linux 服务器 - 您可以使用 Debian、Ubuntu、CentOS、Fedora、Rocky 或任何其他 Linux 发行版。 确保 OpenSSH 软件包在您的 Linux 系统上可用。 SFTP 客户端 - sftp 命令行或您喜欢的任何 GUI 客户端。 验证 OpenSSH 包 要设置 SFTP 服务器,您必须在 Linux 系统上安装 OpenSSH 软件包。几乎所有 Linux 分发服务器都默认安装了 OpenSSH 软件包。但是,如果您的系统上没有 OpenSSH 软件包,您可以从官方存储库安装它。 要确保在您的 Linux 系统上安装了 OpenSSH 软件包,请使用以下命令。 对于 Debian 或 Ubuntu 服务器,您可以使用下面的 dpkg 命令。 dpkg -l | grep ssh 下面是我们 Debian 系统的输出。  ii  libssh2-1:amd64               1.9.0-2                        amd64        SSH2 client-side library ii  openssh-client                1:8.4p1-5                      amd64        secure shell (SSH) client, for secure access to remote machines ii  openssh-server                1:8.4p1-5                      amd64        secure shell (SSH) server, for secure access from remote machines ii  openssh-sftp-server           1:8.4p1-5                      amd64        secure shell (SSH) sftp server module, for SFTP access from remote machines 第一列“ ii ”表示已安装软件包。软件包“ openssh-sftp-server ”安装在 Debian/Ubuntu 系统上。  对于 RHEL/CentOS/Fedora/Rocky Linux/AlmaLinux 用户,您可以使用如下 rpm 命令。 rpm -qa | grep ssh 创建组和用户 在这一步,您将为 SFTP 服务器创建一个新组和用户。该组内的用户将被允许访问 SFTP 服务器。并且出于安全原因,SFTP 用户无法访问 SSH 服务。SFTP 用户只能访问 SFTP 服务器。 执行以下命令创建一个新组' sftpgroup '。 sudo groupadd sftpgroup 2.使用以下命令 创建一个新用户“ sftpuser ”。 sudo useradd -G sftpgroup -d /srv/sftpuser -s /sbin/nologin sftpuser 详细选项:  -G : 自动将用户添加到' sftpgroup '。 -d:指定新用户的主目录。 -s : 将新用户的默认设置为' /sbin/nologin ',这意味着该用户无法访问 SSH 服务器。 接下来,使用以下命令 为用户“ sftpuser ”创建密码。 passwd sftpuser 输入您的强密码并重复,然后按“ Enter ”确认。 要添加更多用户,请重复第2 和第 3 阶段,最重要的是,所有 SFTP 用户必须在组 ' sftpgroup ' 中,并且不能通过 SSH 访问 shell。 设置 Chroot 监狱目录 创建新组和用户后,您必须为 SFTP 用户创建和配置 chroot 目录。 对于用户'sftpuser',新的主目录将位于'/srv/sftpuser'。执行下面的命令来创建它。 mkdir -p /srv/sftpuser 要为用户' sftpuser '设置chroot ,您必须将目录的所有权更改为用户root,但保持组可以读取和执行而没有写入权限。 使用以下命令将目录的所有权更改为用户“root”。 sudo chown root /srv/sftpuser 授予组读取和执行权限,但不能写入。  sudo chmod g+rx /srv/sftpuser 接下来,在“ /srv/sftpuser ”目录中创建一个新的“data”目录,并将该“ data ”目录的所有权更改为用户“ sftpuser ”。 mkdir -p /srv/sftpuser/data  chown sftpuser:sftpuser /srv/sftpuser/data 到目前为止,下面详细介绍了 SFTP 用户目录的配置。  目录“ /srv/sftuser”是默认的主目录。 用户 ' sftpuser '不能写入目录 ' /srv/sftpuser ',但可以读取该目录中的内容。 用户' sftpuser '可以将文件上传到目录' /srv/sftpuser/data '的SFTP服务器。 在 SSH 服务器上启用 SFTP 要在 OpenSSH 上启用 SFTP 服务器,您必须编辑 SSH 配置“/etc/ssh/sshd_config”。  1.使用 nano 或 vim 编辑 ssh 配置“ /etc/ssh/sshd_config ”。 sudo nano /etc/ssh/sshd_config 2.注释以下配置以禁用独立的“ sftp-server ”功能。 #Subsystem      sftp    /usr/lib/openssh/sftp-server 将以下配置粘贴到该行的底部。 Subsystem sftp internal-sftp Match Group sftpgroup      ChrootDirectory %h      X11Forwarding no      AllowTCPForwarding no      ForceCommand internal-sftp 保存配置并退出。 详细配置: 我们不使用子进程“ sftp-server ”,而是使用“ internal-sftp ”。 为组“ sftpgroup ”启用了 SFTP 服务器。 要应用新配置,请使用以下命令重新启动 ssh 服务。 sudo systemctl restart sshd SFTP 服务器已准备就绪并可访问,它与 SSH 服务在同一端口上运行。  访问 SFTP 服务器 在客户端,我们将使用默认安装在大多数 Linux 发行版上的 sftp 命令行。但是,您也可以使用其他命令行客户端或 GUI FTP 客户端,例如FileZilla、Cyber​​duck等。  要连接到 SFTP 服务器,请执行 sftp 命令,如下所示。 sftp ftpuser@SERVER-IP 如果您的 SFTP 和/或 SSH 服务器在自定义端口上运行,您可以使用 sftp 命令,如下所示。 sftp -P PORT ftpuser@SERVER-IP 键入“ sftpuser ”的密码。 连接到 SFTP 服务器后,执行以下命令。 显示当前路径工作目录并列出所有可用的文件和目录。 pwd ls 将本地文件上传到SFTP服务器的'/ '目录,会出现' permission denied ',因为是chroot目录。 put /path/to/file/on/local / 将本地文件上传到SFTP 服务器上的目录“ /data/ ”。如果您的配置正确,您的文件将被上传到“ /data/ ”目录。 put /path/to/file1/on/local1 /data/ put /path/to/file2/on/local /data/ 现在使用以下命令 检查“ /data ”目录中的可用文件。 ls /data/ 您将看到您的文件上传到 SFTP 服务器。 结论 恭喜!您已成功在 Linux 系统上配置 SFTP 服务器。这种类型的配置可以应用在大多数安装了 OpenSSH 的 Linux 系统上。此外,您还学习了如何为 SFTP 用户设置 chroot 目录并学习了基本的 sftp 客户端命令。 ———————————————— 原文链接:https://blog.csdn.net/qq_41819851/article/details/131407277 
  • [技术干货] 【Linux】搭建SFTP文件服务器
    一、协议介绍 1.1 FTP 协议 1.11 特点 FTP(File Transfer Protocol)是一种用于在计算机之间传输文件的标准网络协议。它提供了一种简单而常用的方式来上传和下载文件,以及进行文件管理操作。 FTP协议的主要特点包括: 客户端-服务器架构:FTP使用客户端-服务器模型,其中客户端是发送文件请求的一方,而服务器是存储文件并响应客户端请求的一方。 文件传输功能:FTP允许用户通过上传和下载文件来进行数据传输。客户端可以从服务器上下载文件到本地计算机,也可以将本地计算机上的文件上传到服务器。 目录和文件管理:FTP支持对远程服务器上的目录和文件进行管理操作。用户可以创建、删除、重命名和移动目录,以及执行类似的操作来处理文件。 匿名访问:FTP支持匿名访问,允许用户通过提供一个公共用户名(通常是"anonymous")而无需提供密码来访问公共服务器上的文件。 身份验证和安全性:FTP支持多种身份验证方法,包括基于用户名和密码的验证以及基于加密证书的验证。然而,标准的FTP协议在数据传输过程中没有加密,因此数据在传输过程中可能会被窃听或篡改。 除了标准的FTP协议,还有一些衍生的协议,如FTPS(FTP over SSL/TLS)和SFTP(SSH File Transfer Protocol)。这些协议添加了加密和安全功能,以增强数据传输的安全性。  1.12 基本工作原理 FTP的基本工作原理如下: 建立连接:客户端与服务器之间通过TCP/IP建立连接。默认情况下,FTP使用端口号21作为控制连接的端口。 身份验证:客户端向服务器发送用户名和密码进行身份验证。如果是匿名访问,客户端可以使用公共用户名"anonymous",通常无需提供密码。 控制连接:一旦身份验证成功,控制连接建立起来。通过控制连接,客户端发送各种指令给服务器,如上传文件、下载文件、创建目录等。 数据连接:FTP使用不同的数据连接模式来传输文件。两种常见的模式是主动模式和被动模式。 在主动模式下,服务器主动地在 数据端口(默认端口号20) 上监听并等待客户端的连接请求。客户端向服务器发送请求后,服务器建立数据连接并传输文件。 在被动模式下,服务器在一个随机的端口上监听,并将该端口信息发送给客户端。客户端随后连接到该端口,建立数据连接并进行文件传输。 文件传输:一旦数据连接建立,文件传输可以开始。客户端发送相应的指令,如上传文件(STOR)、下载文件(RETR)、删除文件(DELE)等,服务器根据指令执行相应的操作。 控制连接关闭:文件传输完成后,控制连接可以关闭,释放资源。如果客户端需要进行其他操作,可以重新建立控制连接。 FTP通过建立控制连接和数据连接的方式实现文件传输。控制连接用于发送指令和进行身份验证,数据连接则用于实际的文件传输。这种分离的结构使得FTP能够灵活地进行文件管理和数据传输操作。  1.2 SFTP协议 1.21 特点 SFTP(SSH File Transfer Protocol,以前一直以为是Secure FTP,不过确实Secure😂)是一种安全的文件传输协议,用于在计算机之间传输文件。它建立在SSH(Secure Shell)协议之上,利用SSH的安全性和加密功能来保护文件传输过程中的数据安全。 SFTP提供了对文件的上传、下载、删除和重命名等基本操作。与传统的FTP协议相比,SFTP使用了加密通道,使得传输过程中的文件和用户凭据都得到了保护,提供了更高的安全性。 SFTP的工作方式与FTP类似,但在底层实现和数据传输上有所不同。它使用SSH协议进行身份验证和建立安全连接,然后通过该连接进行文件传输。SFTP支持文件和目录的列表显示,以及对文件的读取和写入操作。 SFTP还支持文件的压缩和解压缩功能,可以减少文件传输的大小,提高传输效率。此外,SFTP还支持文件的随机访问,可以跳过文件的特定部分,从指定位置开始读取或写入数据。 SFTP是SSH(SecureShell)的一部分。SSH是一种用于安全远程登录和文件传输的协议,而SFTP是在SSH协议之上建立的一种安全文件传输协议。 SSH协议提供了加密通信和身份验证机制,使得用户可以安全地远程登录到其他计算机,并在计算机之间传输文件。SFTP利用了SSH协议的安全性和加密功能,提供了更加安全可靠的文件传输方式。 在SSH协议中,SFTP作为一种子协议存在,用于处理文件传输的相关操作。因此,当你使用SFTP进行文件传输时,实际上是通过SSH协议来建立安全连接,并使用SFTP子协议进行文件传输操作。 1.22 基本工作原理 SFTP(SSH File Transfer Protocol)的基本工作原理如下: SSH连接建立:客户端与服务器建立SSH连接,使用SSH协议进行安全通信。SSH提供了加密和身份验证机制,确保数据传输的安全性和可信度。(端口号是熟知的22) SFTP子协议:在SSH连接建立后,客户端通过发送SFTP指令告知服务器要使用SFTP协议进行文件传输操作。 文件传输操作:客户端发送各种指令给服务器,如上传文件(PUT)、下载文件(GET)、删除文件(RM)等,服务器根据指令执行相应的文件传输操作。 加密通信:SFTP利用SSH协议提供的安全通信渠道,对传输的文件数据进行加密,保证传输过程中的数据机密性和完整性。 目录和文件管理:SFTP支持对远程服务器上的目录和文件进行管理操作,客户端可以发送指令来创建、删除、重命名和移动目录,以及进行类似的文件管理操作。 数据传输通道:在SFTP中,数据传输通过SSH连接上的子通道进行,这些子通道是基于SSH连接建立的。 断开连接:当文件传输完成或会话结束时,客户端可以发送断开连接请求,关闭SFTP连接。 1.3 ssh协议 1.31 特点 SSH(Secure Shell)是一种用于安全远程登录和数据传输的网络协议。它提供了加密的通信通道,使得用户可以安全地远程连接到其他计算机,并在网络上进行安全的数据传输。 SSH协议的主要特点包括: 加密通信:SSH使用对称加密、非对称加密和消息认证码(MAC)等技术来保护通信过程中的数据安全。这样,即使在公共网络上进行传输,数据也会以加密形式进行,防止被未经授权的人窃取或篡改。 身份验证:SSH提供多种身份验证机制,包括基于密码、公钥和证书的身份验证方式。这些方法可以确保只有授权用户能够访问远程系统。 端口转发:SSH支持端口转发功能,允许用户通过安全通道在本地计算机和远程计算机之间建立安全的数据传输通道。这对于安全地访问远程服务或在本地主机上运行远程应用程序非常有用。 X11转发:SSH支持X11转发,可以将远程图形界面应用程序的显示转发到本地计算机上。这使得用户可以在远程主机上运行图形化应用程序,并在本地主机上查看和操作应用程序的界面。 文件传输:SSH协议可以用于安全地传输文件。通过SCP(Secure Copy Protocol)或SFTP(SSH File Transfer Protocol),用户可以在本地计算机和远程计算机之间进行安全的文件传输操作。 1.32 基本工作原理 SSH(Secure Shell)的基本工作原理如下: 连接建立:客户端发起连接请求并与服务器建立TCP连接。默认情况下,SSH使用端口号22进行连接。 协议版本交换:客户端和服务器交换SSH协议的版本信息,并协商选择一个适当的协议版本进行后续通信。 密钥交换(Key Exchange):客户端和服务器使用密钥交换协议(如Diffie-Hellman)生成共享密钥。这个密钥将用于加密后续通信过程中的数据。 用户身份验证:客户端向服务器发送用户身份验证请求,并提供相应的身份验证信息。常见的身份验证方法包括基于密码、公钥和证书的身份验证。 加密通信:一旦身份验证成功,客户端和服务器使用共享密钥对通信进行加密。这确保了数据在传输过程中的机密性,防止被未经授权的人窃听或篡改。 建立会话:一旦加密通信建立,客户端和服务器之间可以建立会话。在会话期间,客户端可以向服务器发送各种命令和请求,并接收服务器的响应。 命令执行:客户端发送命令给服务器执行,例如执行Shell命令、运行远程程序等。服务器执行命令并将结果返回给客户端。 断开连接:会话结束后,客户端可以主动发送断开连接请求,或者由于超时或其他原因,连接可能会自动断开。 SSH通过建立安全的加密通道、用户身份验证和加密通信等机制,确保了远程登录和数据传输过程的安全性。它采用密钥交换来生成共享密钥,用于加密通信,并提供了可靠的用户身份验证。这样,用户可以在不安全的网络环境中安全地远程连接到服务器并进行安全的数据传输和远程操作。 1.4 其他常见文件传输协议 常见文件传输协议包括以下几种: FTP(File Transfer Protocol):FTP是最早和最常见的文件传输协议,用于在计算机之间传输文件。它使用客户端-服务器架构,支持文件上传、下载和目录管理等功能。 SFTP(SSH File Transfer Protocol):SFTP是在SSH(Secure Shell)协议之上运行的文件传输协议。它提供了通过SSH加密通道进行安全的文件传输和管理操作,具有更高的安全性。 FTPS(FTP over SSL/TLS):FTPS是基于FTP的安全扩展,使用SSL/TLS加密传输数据。它通过添加安全性层来保护FTP传输过程中的数据,提供了加密的文件传输选项。 SCP(Secure Copy):SCP是在SSH协议之上进行安全文件传输的协议。它提供了通过SSH加密通道进行文件复制和传输的功能,类似于cp命令。(比如使用WinSCP软件传输文件) HTTP(Hypertext Transfer Protocol):HTTP是用于在Web上传输数据的协议,通常用于传输HTML页面和其他媒体资源。尽管HTTP主要用于Web内容传输,但也可以用于文件下载。 HTTPS(HTTP Secure):HTTPS是基于HTTP的安全扩展,使用SSL/TLS加密数据传输。它通过添加安全性层来保护HTTP传输过程中的数据,适用于安全的文件下载和传输。 SMB(Server Message Block)协议是一种网络文件共享协议,它允许计算机上的应用程序读取和写入文件以及从计算机网络中的服务器程序请求服务。SMB协议可以在TCP/IP协议或其他网络协议上使用。SMB协议最初由IBM制定,后来被微软和英特尔采用并发展成为Microsoft网络的通讯协议。它主要用于在计算机间共享文件、打印机、串口等资源,电脑上的网上邻居就是靠它实现的。(我一直用它来和局域网内的设备共享Windows文件夹)。  WebDAV(Web-based Distributed Authoring and Versioning)是一种基于HTTP协议的通信协议。它扩展了HTTP 1.1,在GET、POST、HEAD等几个HTTP标准方法以外添加了一些新的方法,使应用程序可对Web服务器直接读写,并支持写文件锁定(Locking)及解锁(Unlock),还可以支持文件的版本控制。WebDAV协议提供了一个框架,使用户能够在服务器上创建、更改和移动文档。它最重要的特性包括维护关于作者或修改日期等属性、命名空间管理、集合和覆盖保护。属性维护包括创建、删除和查询文件信息等操作。命名空间管理涉及在服务器命名空间内复制和移动网页。集合涉及创建、删除和列出各种资源。最后,覆盖保护处理与文件锁定相关的方面。 SFTP和SCP: SCP(Secure Copy)和SFTP(SSH File Transfer Protocol)都是基于SSH协议的文件传输工具,它们都提供安全的文件传输功能。但是,它们之间也有一些区别。 SCP类似于cp命令,它提供了快速传输文件和基本文件属性(例如访问权限和时间戳)的功能。它使用RCP传输文件和SSH提供身份验证和加密1。 SFTP则更像一个远程文件管理协议,它不仅可以传输文件,还允许对远程文件进行一系列操作,例如查看目录、删除文件和目录等。此外,SFTP还支持断点续传。 二、搭建Linux的SFTP文件服务器 安装SSH服务器:确保系统上安装了SSH服务器软件,这个不必多说; 创建SFTP用户组和用户: 创建一个新的用户组,用于管理SFTP用户。 groupadd GSFTP 创建一个新的SFTP用户,并将其添加到My_sftp组中。 useradd -m -G GSFTP-s /bin/false june passwd june# 为用户设置密码 -m选项表示创建用户的主目录,如果不存在则会自动创建。 -G GSFTP选项表示将新用户添加到GSFTP组中。 -s /bin/false选项表示指定用户的登录shell为/bin/false,这意味着该用户无法登录到系统。 最后,june是新创建的用户名。 设置SFTP的文件目录,可以执行以下操作: mkdir /Net_share chown root:My_sftp  /Net_share chmod 755 /Net_share mkdir /Net_share/File_save chown june:GSFTP /Net_share/File_save chmod 755 /Net_share/File_save 最好按照上面的思路来,否则可能连不上SFTP服务器: 首先建立Net_share目录,他的拥有者必须是root,并且其他用户不能拥有写入的权限(ChrootDirectory 这个选项要求的),即权限不能超过755(否则连不上); 很明显,这样,我们使用SFTP用户登录就只能进行下载操作,无法上传文件; 所以在Net_share目录下建一个用于上传和下载的目录,他的拥有者可以是SFTP用户,可以无限制操作该目录下的文件; 这是我之前报错的日志: 修改linux服务器的SFTP配置: 编辑/etc/ssh/sshd_config文件,注释其中的Subsystem sftp /usr/libexec/openssh/sftp-server,然后新增配置如下:  # 我的SFTP配置 Subsystem sftp internal-sftp  # SFTP子系统使用内置的SFTP服务器 Match Group GSFTP             # 以下配置仅适用于属于该组的用户 ChrootDirectory /Net_share    # 目录限制 ForceCommand internal-sftp    # 强制用户使用内置的SFTP服务器进行会话,而不允许执行其他命令 AllowTcpForwarding no         # 禁止TCP转发 X11Forwarding no              # 禁止X11转发 检查配置是否正确 sshd -t 如果没有报错,则可以执行第六步。如果有错误并且执行了第六步,则会导致ssh无法连接。这种情况一般不用重装服务器系统,可以在服务器的控制台使用vnc登录(应该都有这个选项的),检查上面的配置文件是否正确,然后重启ssh服务。 重启SSH服务器:配置完成后,重新启动SSH服务器以使更改生效。 sudo service ssh restart  # 或 systemctl restart sshd 连接到SFTP服务器:现在,您可以使用SFTP客户端(如FileZilla、WinSCP或命令行的sftp工具)连接到搭建好的SFTP服务器。  sftp username@server_ip 提示输入密码,并可以开始使用SFTP客户端进行文件传输和管理操作。 三、连接测试 3.1 电脑连接 【WinSCP】强大的可视化远程文件传输 、管理工具 (支持多种协议,支持电脑与手机) 使用WinSCP新建会话,输入IP地址,sftp用户名,密码即可。 由于在配置文件中有ChrootDirectory /Net_share 这一句目录的限制,该用户组的用户使用sftp连接后,只能查看这个目录(及其子目录) 上图是我从本地电脑向服务器上传的视频文件,服务器对应的目录已经同步了: 一般服务器都是有ssh服务的,因此使用WinSCP的时候若以root用户登录,则可以访问和修改所有文件,而通过添加sftp用户的方式,很好的限制了用户的查看和修改权限。  3.2 手机连接 使用一些带有sftp功能的文件APP就可以连接了,比如owfiles、谷歌的Documents ————————————————  原文链接:https://blog.csdn.net/weixin_43764974/article/details/130915066 
  • [其他] linux下如何查询端口占用并强制结束
    在Linux系统中,我们可以使用lsof和netstat命令来查询端口占用情况。如果需要强制结束某个进程,可以使用kill命令。以下是详细介绍:使用lsof命令查询端口占用情况:lsof -i :端口号例如,查询80端口的占用情况:lsof -i :80使用netstat命令查询端口占用情况:netstat -tunlp | grep 端口号例如,查询80端口的占用情况:netstat -tunlp | grep 80强制结束进程:首先,我们需要找到进程ID(PID),可以使用ps命令或者pgrep命令。然后,使用kill命令强制结束进程。例如,假设我们已经知道进程ID为12345,可以使用以下命令强制结束进程:kill -9 12345注意:强制结束进程可能会导致数据丢失或系统不稳定,请谨慎操作。
  • [其他] 在linux系统中常用的日志跟踪方法
    在Linux系统中,日志跟踪是一种重要的诊断和故障排除方法。通过分析系统日志,我们可以了解系统的运行状况、发现潜在的问题以及追踪错误的根源。本文将介绍在Linux系统中常用的日志跟踪方法。查看系统日志系统日志是记录系统运行状况的重要文件。在Linux系统中,有两个主要的系统日志文件:/var/log/messages和/var/log/syslog。这两个文件分别记录了系统消息和内核消息。我们可以通过以下命令查看这些日志文件:cat /var/log/messages cat /var/log/syslog使用dmesg命令dmesg命令是一个用于显示和控制内核环形缓冲区的工具。通过这个命令,我们可以查看内核消息,包括硬件设备驱动、中断、内核启动等。要查看内核消息,只需在终端中输入以下命令:dmesg使用journalctl命令journalctl命令是Systemd系统管理器的一部分,用于查询系统日志。它提供了丰富的选项来过滤和格式化日志输出。以下是一些常用的journalctl命令示例:查看所有日志:journalctl查看特定服务的日志:journalctl -u 服务名称查看最近的日志条目:journalctl -n 数量实时查看日志:journalctl -f使用tail命令tail命令用于实时查看文件的末尾内容。这对于长时间运行的日志文件非常有用,因为我们不需要等待整个文件加载完毕就可以查看最新的日志条目。以下是一些常用的tail命令示例:实时查看/var/log/messages文件的末尾内容:tail -f /var/log/messages实时查看特定服务的日志:sudo tail -f /var/log/service_name.log使用grep命令过滤日志grep命令用于在文件中搜索包含指定模式的行。这对于从大量日志中快速定位特定信息非常有用。以下是一些常用的grep命令示例:在/var/log/messages文件中搜索包含“error”的行:grep "error" /var/log/messages在特定服务的日志文件中搜索包含“error”的行:grep "error" /var/log/service_name.log
  • [技术干货] linux系统系统安装docker方法参考
    方法1、安装系统自带docker engine1)联网状态或离线配置本地yum源情况下,执行如下命令直接安装dockeryum -y install docker2)查看docker版本docker --version3)查看docker状态systemctl status docker注:卸载自带docker则执行dnf remove docker方法2、二进制包安装19.03.10版本docker可以参考cid:link_01)关闭selinux和防火墙(可选)setenforce 0systemctl stop firewalld.service2)获取docker二进制包(根据CPU架构选择对应的二进制包)wget https://download.docker.com/linux/static/stable/aarch64/docker-19.03.10.tgz 【aarch64环境】或wget https://download.docker.com/linux/static/stable/x86_64/docker-19.03.10.tgz 【x86_64环境】注:如需安装其他版本可以到https://download.docker.com/linux/static/stable/路径获取对应版本链接,然后wget下载;3)解压docker-19.03.10.tgz得到docker文件夹tar xf docker-19.03.10.tgz4)将docker文件的全部文件拷贝到/user/bin/路径下cp docker/* /usr/bin5)配置docker.service文件vim /usr/lib/systemd/system/docker.service增加如下内容[Unit]Description=Docker Application Container EngineDocumentation=https://docs.docker.comAfter=network-online.target firewalld.serviceWants=network-online.target[Service]Type=notifyExecStart=/usr/bin/dockerdExecReload=/bin/kill -s HUP $MAINPIDLimitNOFILE=infinityLimitNPROC=infinityTimeoutStartSec=0Delegate=yesKillMode=processRestart=on-failureStartLimitBurst=3StartLimitInterval=60s[Install]WantedBy=multi-user.target按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。6)启动docker并查看docker状态systemctl start docker.servicesystemctl status docker.service7)查看docker版本信息docker version8)运行hello-world程序docker run hello-world
总条数:966 到第
上滑加载中