-
我们在前面的文章中有介绍到6款商业版密码管理器,对于很多朋友来说每个月十几元到二十几元的软件成本,而且每年都需要付费确实还是有一些不甘心。基于硕大的互联网资源,是不是能找到免费可用的密码管理器呢?对于大部分的密码管理器免费版本是有限制的,比如限制账户数量,限制不支持同步多设备。在这篇文章中,乐小虎整理三款真正可以免费的密码管理器软件。如果我们有在寻找免费密码管理器的可以参考使用。1、KeePassKeePass,这是一款免费开源的密码管理器,我之前也有使用好几年。唯独的缺点就是界面太丑,默认官方是有支持Win客户端软件的,且基于他的开源免费,有很多开发者匹配开发兼容支持的MacOS、手机端的软件匹配同步。KeePass密码管理器支持本地密码,或者是可以用支持webDAV网盘同步密码,以前我用的是坚果云盘同步密码的。这款软件是免费程度较高的密码库可以本地化的软件。2、BitwardenBitwarden,也是一款免费开源的密码管理器,有免费和付费版本。云端密码管理的免费和付费区别在于免费版的加密稍微弱一些,但是也是能用的。付费版本的云端加密功能比较强。但是,我们可以用Bitwarden云服务器端密码库自建密码库管理。Bitwarden 支持移动端、电脑端、浏览器端插件同步密码。支持一键导入到其他主流的密码管理器的密码。3、EnpassEnpass,原则上是一款商业密码管理器,有支持Win、Mac以及手机端跨平台。如果是单机电脑版是免费的,免费版本只支持单机个人使用。我们也可以作为本地用或者自己搭配webDAV网盘,但是,如果移动端也需要同步的是需要付费的。相比其他的密码管理器,Enpass 也可以选择买断模式,购买后就可以永久用了,当然也可以选择按月。总结,相对来说免费密码管理器还是有一些弊端的,我们也不能过分要求完美毕竟是免费的。原创文章,作者:乐小虎,如若转载,请注明出处:cid:link_0
-
如今无论是搭建网站,还是部署小程序,甚至一些企业应用都会用到云服务求或者独立服务器。对于很多希望利用网站、网络创业的,也会用到服务器,不过在使用服务器过程中,我们对于服务器环境的配置,尤其是Web环境的部署面板,以及一些软件的安装,还是需要一些技术含量的。但是,如果我们借助一些第三方的运维软件工具,那是可以提高效率。在我们使用VPS和云服务器部署Web环境面板的时候,早年我们可能会去编译安装软件,但是如今我们可以使用可视化面板或者一键脚本。我们是不是也比较熟悉宝塔面板、AMH面板、WDCP面板、LNMP、LAMP一键安装脚本等。在这篇文章中,乐小虎准备盘点当下国内和国外主流的服务器面板和脚本工具,对比看看各自的优缺点,如果有需要的网友也可以参考选择。1、宝塔面板如果没有猜错的话,目前宝塔面板的用户量应该是比较多的。这款服务器、VPS面板软件虽然不是较早推出的,但是从开始永久免费的模式,加上更新推进速度,直接碾压超越原来一时很火的WDCP面板。当然,宝塔面板的受欢迎原因还在于软件的及时更新、用户体验、相关生态环境的自动化部署,包括运维管理提高运维工作效率。宝塔面板有支持Linux和Windows系统,免费版本能够满足大部分的用户使用。付费专业版和企业版,比免费版本多运维工具软件。如果不需要的话免费版本也是够用的。yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh ed8484bec建议安装在CentOS7+系统,兼容性脚本。复制脚本直接一键部署。2、WDCP如果我们老一辈的站长朋友们应该记得WDCP这款面板的,曾经可谓红极一时。在AMH面板宣布收费后,WDCP在几年时间家喻户晓。但是,随着用户体验的要求提高,以及软件版本更新不及时,包括有出现一些问题得不到及时的解决方案。WDCP面板的开发速度赶不上用户的需求,而在此时,宝塔面板的出现形成竞争对比。虽然WDCP面板的官方网站还存在,而且乐小虎有看到还有专业授权版等产品,但是在用户体验上,包括在知名度上已经逐渐淡出用户视野。#安装脚本 wget http://dl.wdlinux.cn/files/lanmp_v3.3.tar.gz tar zxvf lanmp_v3.3.tar.gz sh lanmp.sh3、AMHAMH面板也是国产面板,如果没有记错的话,在AMH4.2版本左右的时候还是免费的,但是由于运营策略的调整,后来要使用新版本都是需要授权收费,每月大约6元。虽然成本不高,但是对于我们国内用户的习惯来说,哪怕你收费1元,也会拒绝很多的用户,那时候国内还有其他的面板免费提供。从2022年夏天开始,AMH7.0版本开始又免费授权,对于我们用户来说又多一个选择。有些功能是宝塔面板专业版才有的功能在AMH面板中是免费使用的。#安装脚本 wget http://dl.amh.sh/amh.sh && bash amh.sh4、小皮面板提到小皮面板可能很多朋友不了解,但是如果说phpstudy应该很多人都知道吧。尤其是很多朋友本地电脑的客户端环境会有用到 phpstudy,没有错,这个软件的中文名就是小皮面板。具体是通过转让还是整合这里不清楚,反正现在这个老牌的服务器客户端WEB软件,独立出来运营的。小皮面板这款免费面板笔者也是有使用过的,但是是早期的版本,现在不清楚在用户体验上有没有修正。给我的个人感觉是功能上确实是够用的,毕竟这款面板的前生有一定的积累和技术开发能力。但是在操作用户体验上,相比宝塔面板还是弱一些。小皮面板也是有支持Linux和Windows系统的。yum install -y wget && wget -O install.sh https://notdocker.xp.cn/install.sh && sh install.sh5、AppNodeAppNode 面板也是国产面板之一,作者前身如果没有记错的话应该还有一款面板参与一个活动做的,后来逐渐不更新,而转向这款新的AppNode。这款面板软件有免费和付费功能,免费版本支持10个站点、当然对于一般的用户应该是够用的。这款软件和我们常规用的云服务器面板稍微不同,这个还属于服务器集群管理软件,安装一个控制中心即可管理你的所有服务器,其它服务器只需要安装受控端。再也不用分别登录到每台服务器去管理了。通过整合 Nginx、PHP、MySQL 等组件,帮助您快速创建和配置网站。笔者有体验过,如果初次使用可能稍微费力一些,操作习惯上稍微有点繁琐,适合服务器多的用户。单台服务器管理不适合用这个面板。#安装脚本 INSTALL_AGENT=1 INSTALL_APPS=sitemgr INIT_SWAPFILE=1 INSTALL_PKGS='nginx-stable,php74,mysql56' bash -c "$(curl -sS http://dl.appnode.com/install.sh)"6、Vesta Control PanelVesta Control Panel(VestaCP)一款国外的老牌服务器管理面板,涵盖我们常用的Linux服务器WEB环境的部署和邮局部署。以前我们国内还没有面板的时候,我们还是有很多人用的,但是在操作习惯上和语言上不是太合适,现在国内的朋友也很少有去用。VestaCP 面板的强大之处还支持用于服务器分销管理。支持设置中文,可以设置企业邮局。7、VirtualminVirtualmin 也是一款老牌的国外主机面板,支持Linux系统。这款WEB面板笔者很早也有用过,那时候国内确实找不到合适的,除了编译脚本安装,那只能用它。算是WEB服务器端面板的老前辈,现在看官方网站也有改版,也有一直在维护。笔者不可否认Virtualmin 面板在国外确实是知名度和安装量是很大的,但是在国内并不是特别适合。尤其是操作习惯上不适合我们,你功能再强大也没有用。wget https://software.virtualmin.com/gpl/scripts/install.sh sudo /bin/sh install.sh8、CyberPanelCyberPanel 面板来自知名的引擎开发商LiteSpeed。其实在早年的时候,笔者也有和 LiteSpeed 引擎商家也有沟通过开发面板或者脚本的事宜,因为当初市面上有一款llsmp脚本是基于openLiteSpeed且比较好用,但是后来开发者停止维护。CyberPanel 面板有基于openlistespeed的免费版,以及有支持litespeed的付费版本。如果我们有喜欢这个引擎的,可以选择这个可视化面板,我们其他看到的面板和一键安装包都是基于Nginx和Apache的居多。9、LNMP一键包在上面,我们介绍的8个WEB服务器安装面板都是基于客户端可视化的。但是我们有些朋友考虑到安全或者是服务器的负载问题,会考虑无面板的服务器WEB环境。这里LNMP一键安装包还是相当有知名度的,保持着每年6.1的大版本更新。wget http://soft.vpser.net/lnmp/lnmp1.9.tar.gz -cO lnmp1.9.tar.gz && tar zxf lnmp1.9.tar.gz && cd lnmp1.9 && ./install.sh lnmp当然,也是可以安装LAMP,只需要将脚本中最后的lnmp更换成lamp即可。我们可以根据实际的需要在安装向导中选择对应的软件。10、OneInStack一键包OneInStack 面世没有上面的LNMP早,但是凭借作者更新频率和软件的友好程度我个人觉得比LNMP好,所以很多得服务器部署无面板一键安装包我会用到OneInStack,而不是LNMP。OneInStack 支持快速部署PHP、Nginx、Apache、SSL证书,以及支持同步备份等。yum -y install wget screen #for CentOS/Redhat # apt-get -y install wget screen #for Debian/Ubuntu wget http://mirrors.linuxeye.com/oneinstack-full.tar.gz #包含源码,国内外均可下载 tar xzf oneinstack-full.tar.gz cd oneinstack #如果需要修改目录(安装、数据存储、Nginx日志),请修改options.conf文件 screen -S oneinstack #如果网路出现中断,可以执行命令`screen -R oneinstack`重新连接安装窗口 ./install.sh总结,以上乐小虎整理到当前市面上国内和国外服务器、VPS主机WEB面板。从我个人使用体验看,如果我们是单台服务器用得话,用AMH和宝塔面板合适。如果我们是集群服务器,可以用APPNODE,如果无需面板用脚本操作得话,用LNMP或者OneInStack。原创文章,作者:乐小虎,如若转载,请注明出处:cid:link_0
-
一、引言Linux作为一个强大的开源操作系统,广泛应用于服务器、桌面、嵌入式设备等领域。然而,随着应用复杂性的增加和硬件资源的有限,Linux系统性能优化变得越来越重要。本文将从多个方面详细探讨Linux性能优化的方法和技巧,帮助读者更好地发挥系统的潜力。二、系统资源监控top命令:实时显示系统中各个进程的资源占用情况,包括CPU、内存、I/O等。通过top命令,可以快速发现系统瓶颈和耗资源的进程。vmstat命令:显示包含CPU,内存,磁盘IO和进程等的系统信息。通过vmstat命令,可以实时监控系统的整体性能。iostat命令:用于监控系统输入输出设备负载情况,包括磁盘、网络等。三、CPU优化CPU调度策略:Linux支持多种CPU调度策略,如CFS(完全公平调度)、BFS(脑裂调度)等。选择合适的调度策略,可以提高CPU的利用率和响应速度。CPU亲和性设置:通过设置进程的CPU亲和性,可以将进程绑定到特定的CPU核心上运行,减少CPU上下文切换带来的开销。启用超线程:对于支持超线程的CPU,启用超线程可以提高CPU的并发处理能力。四、内存优化Swap空间调整:Swap空间是Linux系统中的虚拟内存,当物理内存不足时,系统会使用Swap空间。合理设置Swap空间的大小,可以避免内存溢出导致的性能下降。内存分页策略:Linux支持多种内存分页策略,如LRU(最近最少使用)、FIFO(先进先出)等。选择合适的分页策略,可以提高内存的利用率和访问速度。内存压缩与交换:启用内存压缩和交换功能,可以在内存紧张时,将部分内存数据进行压缩或交换到磁盘上,以释放物理内存空间。五、磁盘I/O优化文件系统选择:Linux支持多种文件系统,如Ext4、XFS、Btrfs等。不同文件系统在性能、稳定性和扩展性方面有所差异,选择合适的文件系统可以提高磁盘I/O性能。磁盘阵列(RAID):通过RAID技术,可以将多块磁盘组合成一个逻辑磁盘,提供更高的磁盘I/O性能和数据冗余能力。磁盘缓存:启用磁盘缓存,可以将频繁访问的数据存储在内存中,减少磁盘I/O操作次数,提高数据访问速度。六、网络优化网络参数调优:通过调整网络参数,如TCP拥塞控制算法、网络缓冲区大小等,可以提高网络传输性能。网络设备绑定:将多个网络设备绑定为一个逻辑设备,可以提高网络的带宽和容错能力。启用网络加速技术:如TCP_FASTOPEN、SO_REUSEPORT等,可以减少网络连接的建立时间和并发连接的开销,提高网络性能。七、内核参数优化修改内核启动参数:通过修改GRUB引导加载器的配置文件,可以调整内核的启动参数,如启用或禁用某些内核功能、调整内核的运行模式等。加载优化模块:根据系统需求,加载合适的内核优化模块,如文件系统优化模块、网络优化模块等,可以提高系统的整体性能。自定义内核:根据特定应用场景和需求,编译定制化的内核版本,可以去除不必要的功能和驱动,减小内核体积和启动时间。八、总结与建议本文从系统资源监控、CPU优化、内存优化、磁盘I/O优化、网络优化和内核参数优化等方面探讨了Linux性能优化的方法和技巧。为了保持系统持续高性能运行,建议读者定期监控和分析系统性能数据,结合实际应用场景和需求,综合运用本文提到的优化方法进行性能调优。
-
深入探索Linux操作系统中的多线程编程一、引言多线程编程已经成为了现代软件开发的重要组成部分。对于Linux操作系统而言,多线程的支持和实现更是被广泛应用。本文将通过详细解析Linux操作系统中的多线程概念、线程的创建与管理、同步与互斥、线程间通信等方面,并结合示例代码,来深入探讨Linux的多线程编程。二、多线程的基本概念在现代操作系统中,进程是系统资源分配的最小单位,而线程则是CPU调度的最小单位。多线程编程是指在一个进程中创建多个线程,使得这些线程可以并发执行,从而提高程序的执行效率。优点:资源共享:同一进程的线程共享进程的内存空间、文件描述符等资源,不同线程间通信更便捷。经济高效:线程的创建、销毁和切换开销通常比进程小。并发执行:多线程能充分利用多核处理器,提高CPU利用率。三、线程的创建与管理在Linux系统中,我们通常使用POSIX线程库(pthread库)来创建和管理线程。主要函数包括pthread_create()创建一个新的线程,pthread_join()等待线程结束,pthread_exit()结束当前线程等。四、线程的同步与互斥多线程编程中,多个线程可能同时访问同一资源,如果处理不当,可能会导致数据不一致或其他不可预知的结果。因此,我们需要一些同步和互斥机制来确保数据的一致性和准确性。1. 互斥锁(Mutex)互斥锁是最常用的一种线程同步机制,它确保一次只有一个线程可以访问共享资源。在访问共享资源前,线程需要获取锁,如果锁被占用,线程将阻塞,直到锁被释放。2. 条件变量(Condition Variable)条件变量用于在多线程之间同步数据的访问。一个线程可以在条件变量上等待,直到另一个线程通知它某个条件已经满足。3. 信号量(Semaphore)信号量是一种用于保护对共享资源访问的同步原语。信号量维护一个计数器,表示可用的资源数量。线程在访问共享资源前,需要获取信号量。五、线程间通信线程间通信是多线程编程的重要部分。在Linux中,我们可以通过共享内存、消息队列、管道等方式实现线程间通信。选用何种通信方式,需根据具体的应用场景和需求来决定。六、示例代码解析在此部分,我们将通过一系列示例代码来实际演示如何在Linux系统中进行多线程编程,包括线程的创建、同步、互斥以及线程间的通信等。这些示例代码将用C语言编写,并使用pthread库来实现多线程。示例1:线程的创建和销毁我们首先创建一个简单的多线程程序,其中有两个线程,每个线程打印一条消息然后结束。示例2:线程的同步与互斥然后,我们创建一个多线程程序,多个线程共享一个全局变量,并使用互斥锁来确保同一时间只有一个线程可以修改该全局变量。示例3:线程间通信最后,我们创建一个程序,其中有两个线程,一个线程将消息写入共享队列,另一个线程从队列中读取消息。以此来演示线程间的通信。(由于篇幅限制,具体的示例代码在此省略。在实际编程过程中,你可以参考这些描述来编写你的多线程程序,也可以根据实际需求来修改和扩展这些示例代码。)七、总结与展望本文通过详细解析了Linux操作系统中多线程编程的各个方面,包括基本概念、线程的创建与管理、同步与互斥、线程间通信等,并给出了一系列示例代码来帮助理解。多线程编程能够极大提高程序的执行效率,但也需要我们注意数据的一致性、线程的同步等问题。
-
数据库连接池性能优化在现代企业级应用中,数据库连接是至关重要的部分。而数据库连接池作为数据库连接管理的核心组件,对于提升系统性能和稳定性具有重要意义。本文将深入探讨数据库连接池的性能优化,包含代码示例,帮助读者更好地理解和应用连接池技术。数据库连接池概述数据库连接池是一种创建和管理数据库连接的技术,用于减少创建新连接和销毁无效连接的开销。通过复用现有的数据库连接,连接池能有效降低系统资源消耗,提升数据库访问性能。连接池性能问题虽然数据库连接池能解决很多性能问题,但不当的使用或配置也可能导致性能瓶颈。常见的问题包括:连接池大小设置不当:连接池过大,会浪费系统资源;连接池过小,又可能导致数据库连接不足,影响系统性能。连接泄露:如果数据库连接在使用后没有被正确关闭或归还到连接池,会导致连接泄露,进而影响其他请求获取数据库连接。长连接与空闲连接管理不当:长连接过多可能会消耗过多资源,而空闲连接过多则可能导致资源浪费。连接池性能优化策略1. 设置合适的连接池大小设置合适的连接池大小是优化连接池性能的第一步。要根据应用的需求和数据库的性能来决定连接池的大小。如果数据库能支持更多并发连接,可以适当增大连接池的大小。同时要监控连接池的使用情况,根据实际情况进行调整。例如,在Java的HikariCP连接池中,可以这样设置连接池大小:HikariConfig config = new HikariConfig(); config.setMaximumPoolSize(100); //设置最大连接数 config.setMinimumIdle(10); //设置最小空闲连接数2. 防范连接泄露防范连接泄露的关键在于确保每次使用数据库连接后都能正确关闭或归还到连接池。在使用数据库连接时,建议使用try-with-resources语句确保连接的正确关闭。例如:try (Connection conn = dataSource.getConnection()) { // 执行数据库操作 } catch (SQLException e) { // 处理异常 }在这个例子中,无论是否发生异常,连接都会在try语句块结束后自动关闭。3. 长连接与空闲连接管理对于长连接和空闲连接的管理,可以通过设置合适的超时时间和空闲连接数来进行优化。超时时间不宜设置过长,避免无谓的资源消耗;空闲连接数也应适当,不宜过多也不宜过少。例如,在HikariCP中可以这样配置:config.setIdleTimeout(600000); //设置空闲连接超时时间,单位为毫秒 config.setMinimumIdle(5); //设置最小空闲连接数4. 使用连接复用技术对于支持复用连接的数据库操作(如查询操作),应尽量复用已有连接而不是创建新连接。这样可以减少创建和销毁连接的开销,提高性能。要确保复用连接的线程安全,防止出现线程间的数据干扰。5. 监控与调优要定期对数据库连接池进行监控和调优。通过监控可以了解连接池的使用情况,如活跃连接数、空闲连接数、等待连接的请求数等。根据监控结果,可以及时调整连接池的大小和其他参数,以达到最优性能。可以使用诸如JMX、Prometheus等监控工具进行监控。总结数据库连接池的性能优化是一个复杂且持续的过程,需要综合考虑多个因素进行调整。通过本文的介绍,希望能给读者提供一些思路和方向,以更好地进行数据库连接池的性能优化。在实际操作过程中,一定要结合自身的业务需求和系统环境,进行适当的调整和优化,以达到最佳的性能和稳定性。
-
Linux操作系统忘记root密码后的恢复方法当我们使用Linux操作系统时,有时候可能会遇到忘记root密码的情况。这种情况下,我们需要采取一些措施来恢复密码并重新进入系统。本文将详细介绍在忘记root密码后,如何在常见的Linux发行版中恢复进入系统的方法,包括代码部分。一、Ubuntu/Debian系统密码恢复对于Ubuntu和Debian系统,可以按照以下步骤进行密码恢复:重新启动系统,在引导过程中进入Grub引导菜单。在Grub菜单中,使用向下箭头键选择以“recovery mode”或“advanced options”开头的选项,然后按“e”键进入编辑模式。在编辑模式中,找到以“linux”或“linuxefi”开头的行,将光标移动到该行末尾。在行末尾添加以下代码,然后按下Ctrl + X组合键启动到单用户模式:rw init=/bin/bash进入单用户模式后,挂载文件系统为可写:mount -o remount,rw /编辑/etc/shadow文件,将root用户的密码字段清空:passwd -d root或者使用文本编辑器(如vi)打开/etc/shadow文件,找到root用户的行,将其密码字段(即第二个字段)清空。保存更改并重启系统:reboot系统重启后,您应该能够以空密码登录到root账户,然后尽快为root账户设置一个新的强密码。二、CentOS/RHEL系统密码恢复对于CentOS和RHEL系统,可以按照以下步骤进行密码恢复:重新启动系统,在引导过程中按下“e”键进入Grub引导菜单的编辑模式。在编辑模式中,找到以“vmlinuz”或“linux16”开头的行,将光标移动到该行末尾。在行末尾添加以下代码,然后按下Ctrl + X组合键以单用户模式启动:rd.break=pre-mount进入单用户模式后,挂载文件系统为可写:mount -o remount,rw /sysroot编辑/sysroot/etc/shadow文件,将root用户的密码字段清空:使用文本编辑器(如vi)打开/sysroot/etc/shadow文件,找到root用户的行,将其密码字段(即第二个字段)清空。注意,此时您处于chroot环境中,因此要对/sysroot目录下的文件进行编辑。保存更改并退出编辑器。然后执行以下命令重启系统:exit reboot系统重启后,您应该同样能够以空密码登录到root账户。登录后,请尽快为root账户设置一个新的强密码。三、其他注意事项和密码安全建议在成功恢复root密码并重新进入系统后,有几个注意事项和密码安全建议需要牢记:尽快为root账户设置一个新的强密码。密码应该包含大写字母、小写字母、数字和特殊字符,并且长度至少为8位。避免使用容易猜测或与个人信息相关的密码。对于生产环境中的重要服务器,建议使用专门的管理员账户进行日常操作,而不是直接使用root账户。这样可以更好地控制权限和审计操作。定期更换密码,并定期备份关键配置文件和数据。这将有助于防止未经授权的访问和数据泄露。启用SSH密钥认证作为远程登录的一种方式,以增加安全性。通过使用SSH密钥对进行身份验证,可以减少对密码的依赖,并提高登录的安全性。
-
Linux磁盘扩容技术详解一、引言 随着数据量不断增长,对磁盘空间的需求也日益迫切。作为IT运维人员,掌握Linux磁盘扩容技术至关重要。本文将介绍在Linux系统中进行磁盘扩容的必要性和核心技术,以帮助读者有效管理磁盘空间,满足不断增长的数据需求。 二、磁盘分区 2.1 磁盘分区概念 在Linux中,磁盘分区是将物理磁盘划分为独立的逻辑区域,每个区域可以作为一个独立的文件系统挂载到系统中。通过磁盘分区,我们可以更好地组织和管理磁盘空间。 2.2 使用fdisk进行磁盘分区 下面示例代码演示如何使用fdisk进行磁盘分区的步骤:以root权限运行fdisk命令sudo fdisk /dev/sdb创建新的分区Command (m for help): n Select (default p): p Partition number (1-4, default 1): First sector (2048-20971519, default 2048): Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519):保存设置并退出Command (m for help): w 上述代码中,我们通过fdisk工具对/dev/sdb磁盘进行分区,创建了一个新的主分区。在实际操作中,根据磁盘大小和需求,可以选择创建更多分区。 三、文件系统扩展 3.1 文件系统扩展概念 当磁盘分区完成后,我们需要扩展文件系统以适应新的分区。文件系统扩展是在不丢失数据的情况下,使文件系统能够使用新的磁盘空间。 3.2 使用resize2fs扩展ext4文件系统 下面示例代码演示如何使用resize2fs扩展ext4文件系统的步骤:首先,卸载文件系统sudo umount /dev/sdbX使用e2fsck检查文件系统完整性sudo e2fsck -f /dev/sdbX使用resize2fs扩展文件系统sudo resize2fs /dev/sdbX 上述代码中,我们首先卸载要扩展的文件系统,然后使用e2fsck检查文件系统完整性,最后使用resize2fs命令扩展文件系统大小。这样,ext4文件系统就可以使用新的磁盘空间了。 四、逻辑卷管理(LVM) 4.1 LVM概念 LVM(逻辑卷管理)是一种在Linux中管理逻辑卷的技术。它允许我们在不改变物理磁盘配置的情况下,动态调整逻辑卷的大小。通过使用LVM,我们可以更灵活地管理磁盘空间,满足不断增长的数据需求。 4.2 扩展LVM逻辑卷 下面示例代码演示如何扩展LVM逻辑卷的步骤: 首先我们需要把新的分区创建为物理卷:创建物理卷sudo pvcreate /dev/sdbX 接下来我们可以将该物理卷加入到已有的卷组中:扩展卷组sudo vgextend vg_name /dev/sdbX 其中vg_name为你的卷组名称。之后我们需要将新的物理卷空间扩展到逻辑卷中:扩展逻辑卷sudo lvextend -l +100%FREE /dev/vg_name/lv_name 在这里lv_name代表你的逻辑卷名称。以上步骤将把新的物理卷空间全部扩展到逻辑卷中。最后我们需要扩展文件系统以使用新的空间:扩展ext4文件系统以适应新的逻辑卷大小sudo resize2fs /dev/vg_name/lv_name 经过以上步骤,我们成功的将新的磁盘空间通过LVM扩展到了已有的文件系统中。这样我们可以在不改变原有文件系统结构的情况下,实现磁盘空间的动态扩展。需要注意的是,以上步骤中的vg_name和lv_name需要替换为你实际的卷组和逻辑卷名称。在实际操作过程中,也请务必保证数据备份,防止误操作导致数据丢失。
-
一、Podman概述Podman是一个无守护进程、无根的容器引擎,允许开发人员和运行容器的工作负载的用户在Linux系统上运行OCI容器。Podman提供了与Docker类似的命令行接口,使用户能够轻松地从Docker迁移到Podman。Podman不需要守护进程,可以直接与容器运行时和镜像进行交互,从而提高了安全性和性能。二、安装与配置安装Podman在大多数Linux发行版中,可以通过包管理器安装Podman。例如,在Fedora上可以使用以下命令安装:sudo dnf install podman对于其他发行版,请参考官方文档的安装指南。配置PodmanPodman的配置文件位于/etc/containers/podman.conf。通过编辑此文件,可以自定义Podman的行为。例如,可以配置存储驱动、网络设置、身份验证等。在大多数情况下,默认配置即可满足需求。三、基本用法运行容器使用podman run命令可以创建一个新的容器并运行。例如,运行一个名为nginx的Nginx容器:podman run --name nginx -d nginx列出容器使用podman ps -a命令可以列出所有正在运行和已停止的容器。要查看容器的详细信息,可以使用podman inspect 命令。删除容器使用podman rm 命令可以删除一个已停止的容器。若要删除正在运行的容器,需要添加-f参数强制删除。四、高级特性容器网络Podman支持多种网络模式,包括bridge、host、none等。可以使用--network参数指定容器的网络模式。例如,创建一个使用bridge网络的容器:podman run --network bridge --name nginx -d nginx容器存储卷Podman允许创建和管理存储卷,以便在容器之间共享数据。使用podman volume create命令可以创建一个新的存储卷。例如,创建一个名为myvolume的存储卷:podman volume create myvolume要在容器中挂载存储卷,可以使用-v或--mount参数。例如,创建一个名为nginx的容器,并挂载myvolume存储卷:podman run -v myvolume:/usr/share/nginx/html --name nginx -d nginx这将把myvolume存储卷挂载到容器的/usr/share/nginx/html目录。五、示例代码以下是一个使用Podman创建并运行一个Nginx容器的示例代码:#!/bin/bash # 创建并运行Nginx容器 podman run --name nginx -d nginx # 列出正在运行的容器 podman ps # 查看容器详细信息 container_id=$(podman ps -lq) podman inspect $container_id # 删除容器 podman rm -f $container_id
-
创建多线程的几种方法 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"
-
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(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(逻辑卷)是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详解】 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命令详解】 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的安装部署篇】 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
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第五期2026/09/04 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;蒋春阳-华为云AI开发者案例开发专家
本期直播内容: AI工具体验营 · 第5-8课连讲。Agent-Team 多智能体协作完成毕业设计实践
回顾中 -
华为云开发者AI素养ClassRoom·第六期2026/09/08 周二 19:00-20:00
樊渊-2026华为软件挑战赛冠军
高手来了:看软挑高手解析二维排样问题—从工业难题到算法突破
回顾中
热门标签