• [技术干货] 【Linux】Linux背景历史-转载
    Linux背景 Linux是什么? Linux(Linux Is Not UniX),一般指GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统,其内核由林纳斯·本纳第克特·托瓦兹(Linus Benedict Torvalds)于1991年10月5日首次发布,它主要受到Minix和Unix思想的启发,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。  计算机的发展 计算机的发展是随着时代的更替所必须出现的一个产物,1946年2月14日埃尼阿克发明了世界上第一台计算机。在二十世纪五十年代这个时间点,刚刚结束第二次世界大战,进入美苏冷战的是一段对美国和苏联都至关重要的时期,俩个超级大国都极力追求技术突破。而计算机刚刚出现时,并不是让普通平民使用的,而是专属于国家及政府,主要用于军事用途,计算导弹的弹道轨迹。  埃尼阿克1946年2月14日发明第一台计算机 美苏冷战 技术突破 主要用于军事用途 计算导弹的弹道轨迹 摩尔定律:摩尔定律是英特尔创始人之一戈登·摩尔的经验之谈,其核心内容为:集成电路上可以容纳的晶体管数目在大约每经过18个月到24个月便会增加一倍。换言之,处理器的性能大约每两年翻一倍,同时价格下降为之前的一半。 摩尔定律是内行人摩尔的经验之谈,汉译名为“定律”,但并非自然科学定律,它一定程度揭示了信息技术进步的速度。  推动 摩尔定律 计算机小型化 技术突破 政府和军方想要继续提高实力,就需要继续推动技术进步,为此就必须向研究机构和部分实例雄厚的高效提供资源。  政府和军方 资源 研究机构 高校 产生新的技术后,就可以进行可持续的一个发展,技术人员通过出售自己的技术产权,再通过美国进入行业的兴起(华尔街),通过商人之手,最后就可以孵化出来一批产品:计算机的优化,操作系统等等。  新技术 计算机和操作系统 资源 商人 这样的可持续发展可以给普通群众带来一些伟大的产品,不错的公司以及个人商业人物。同时,可以可持续的发展使得产品逐渐扩大并卖向全球,产生大量相关行业的公司,国家政府通过企业税收、个人税收进行资金回流,如此,形成一个可持续发展的闭环。  unix发展史 1968年,一些来自通用电器公司、贝尔实验室和麻省理工学院的研究人员开发了一个名叫Multics的特殊操作系统。Multics在多任务文件管理和用户连接中综合了许多新概念。 1969-1970年,AT&T的贝尔实验室研究人员Ken Tompson和Dennis Ritchie,在采用很多Multics特点的基础上开发了UINX系统。它运行在小型机上,满足了系统对科研环境的要求。从产生开始,UNIX就是一个有价值的、高效的、多用户和多任务的操作系统。 UNIX从满足个人的设计需求开始,逐步成长为由许多不同开发商所支持的标准软件产品。 第一个UNIX版本是免费给许多知名大学的计算机系使用的。 1972年,贝尔实验室开始发放商业版本,并且给不同的用户授权使用这个系统,使用者之一是加州大学伯克莱分校的计算机系。伯克莱给系统增加了许多新的特点,后来成为了标准。 1975年伯克莱由下属部门BSD发行了自己的UNIX版本。UNIX的BSD版本成为AT&T贝尔实验室版本的主要竞争者,而其它的独立开发出的UNIX版本也开始萌生。 1980年微软公司开发了叫做Xenix的UNIX PC版本。AT&T发行了第一个商业版本。名叫System Ⅲ,后来被成为对商用软件产品良好支持的System Ⅴ所替代。 同时UNIX的BSD版本不断发展,在70年代末期,BSD UNIX成为了国防部的高科技研究机构科研项目的基础。其结果,伯克莱发行了一个叫做BSD Release 4.2的有效版本。 它包括了高级的文件管理器和基于TCP/IP网络协议的网络特点。现在TCP/IP被Internet所使用。BSD Release 4.2被许多厂商所采用,例如SUN Microsystem。 UNIX不同版本的出现导致了UNIX标准的需要,软件开发商不知道他们的程序运行在哪些版本上比较合适。 到80年代中期,两个竞争的标准出现了,一个是基于AT&T的UNIX版本,另一个是BSD版本。在今天的书店里你能发现分别适用于这两个版本的不同的UNIX的书,一些是System V,另一些集中在BSD UNIX。 AT&T建立了一个叫UNIX系统实验室的新组织,它的作用就是综合UNIX的不同版本,集中开发一个标准系统. 1991年,UNIX综合实验室综合了System V Release3,SUN OS和Xenix的所有特点,发行了System V Release 4。为了与System V Release 4 竞争,一些其它公司,如IBM和惠普Open Software Foundation(OSF)去产生自己的UNIX标准版本,继而出现了两个标准商业版本OSF版本和System Release 4. 1993年,AT&T把它的UNIX转卖给Novell公司。UNIX系统实验室成为了Novell的UNIX系统小组的一部分。Novell发行了基于System V Release 4的自己的UNIX版本UNIXWare,它可以和Novell公司的Netware系统相联。SUN公司已经把System V Release 4 融进了它的SUN OS,发行Solaris。两个相互竞争的UNIX使用的图形用户界面(一个叫Motif,另一个叫Openlook),已经合并为一个新的工作平台标准,叫做通用平台环境(CDE)。 Linux发展史 1991年10月5日,赫尔辛基大学的一名研究生Linus Benedict Torvalds在一个Usenet新闻组(comp.os.minix)中宣布他编制出了一种类似UNIX的小操作系统,叫Linux。新的操作系统是受到另一个UNIX的小操作系统——Minix的启发,该系统是由一名叫Andrew S Tanenbaum的教师开发的。读者也许猜想所发布的这个系统应该是Linux的0.01版本,实际上不是这样。真正的Linux 0.01版本并没有被发布,原因是0.01版本不实用。Linus仅仅在第一个Linux的FTP站点(ftp://nic.funet.fi)上提供过这个版本的的源代码。 Torvalds于10月5日发布的这个Linux版本被称为0.02版,它能够运行GNU Bourne Again Shell(bash)和GNU的C编译程序(gcc)以及为数不多的其它语言。Torvalds绝对没有想到他设想的一种能够针对高级业余爱好者和黑客们的操作系统已经产生,这就是人们所称的Linux。 Linux发布时的版本是0.02,后来又有0.03版,然后又跳到0.10版。因为世界各地越来越多的程序员都开始开发Linux,它已经达到0.95版。这就意味着正是公布1.0版本的时间已经为期不远了。正式的1.0版本是在1994年公布的。 伴随着计算机的发展,IBM公司是一个主要开发计算机硬件的互联网公司,IBM公司使用unix操作系统,但是起初unix是不被开源的,即是只限于企业、高校和研究机构使用的,而当时的IBM公司产生了一个名为ThinkPad的电脑。 而像微软公司在当时主要是一个开发计算机软件的公司。 当时出现了一家厂商,他们自己开发硬件和属于自己的软件,对其他计算机厂商产生巨大的影响,这家公司就是苹果公司,苹果公司在当时的影响极大,其自身产品引得许多人的购买,其产品质量非常高,价格也比较高。 苹果的崛起对微软的打击是极大的,对于微软这个只是做软件的公司来讲是及其危险的,于是微软和IBM公司先是联合起来开始着手自己的计算机系统,但是后面由于种种原因合作失败。于是微软又和因特尔公司合作,同时也和其他计算机厂商进行合作,产生了windows系统,由于合作厂商较多,导致成本就比较低,所以微软的产品主要是性价比比较高。  现在主流的电脑就是苹果的ios系统和微软的Windows系统,而Linux的使用场景主要是现阶段的Android系统的手机,手机的操作系统还有苹果的ios系统,华为的鸿蒙系统。 VS Windows的发展史。 开源 Linux是一种自由和开放源代码的类UNIX操作系统,该操作系统的内核由林纳斯托瓦兹在1991年首次发布,之后,在加上用户空间的应用程序之后,就成为了Linux操作系统。严格来讲,Linux只是操作系统内核本身,但通常采用“Linux内核”来表达该意思。而Linux则常用来指基于Linux内核的完整操作系统,它包括GUI组件和许多其他实用工具。 GNU通用公共许可协议(GNU General Public License,简称GNU GPL或GPL),是一个广泛被使用的自由软件许可协议条款,最初由理查德斯托曼为GNU计划而撰写,GPL给予了计算机程序自由软件的定义,任何基于GPL软件开发衍生的产品在发布时必须采用GPL许可证方式,且必须公开源代码。 Linux是自由软件和开放源代码软件发展中最著名的例子。只要遵循GNU通用公共许可证,任何个人和机构都可以自由地使用Linux的所有底层源代码,也可以自由地修改和再发布。随着Linux操作系统飞速发展,各种集成在Linux上的开源软件和实用工具也得到了应用和普及,因此,Linux也成为了开源软件的代名词。 像之前提到过的一样,不仅仅电脑需要操作系统,手机也需要操作系统,互联网公司也需要选择自己的后端操作系统,对于手机而言,操作系统是需要好用、快速、安全以及稳定的;对于互联网公司来讲,其后端操作系统是需要稳定、安全、快速以及成本低廉。  那么一般公司会选择代码开源的操作系统质量会更好(稳定、安全、快速)呢?还是闭源质量会更好呢?  相信历史以及提供了答案,大部分互联网公司会选择像linus这样代码开源的操作系统,由于Linux操作系统的开源,导致了很多专业工程师和世界顶级黑客对其代码的纠正补充,现在Linux开源代码中的代码量以及达到千万级别。  所以Linux的主要特征是:1.开源——大部分是免费的,稳定、安全、高效;2.更多的被专业的人所使用。  Linux官网以及版本更替 Linux现阶段主要有俩个版本: 1.商业化版本: Debian:Debian运行起来极其稳定,这使得它非常适合用于服务器。 debian这款操作系统无疑并不适合新手用户,而是适合系统管理员和高级用户。 Ubuntu :Ubuntu是Debian的一款衍生版,也是当今最受欢迎的免费操作系统。Ubuntu侧重于它在这个市场的应用,在服务器、云计算、甚至一些运行Ubuntu Linux的移动设备上很常见。Ubuntu是新手用户肯定爱不释手的一款操作系统。 红帽企业级Linux :这是第一款面向商业市场的Linux发行版。它有服务器版本,支持众多处理器架构,包括x86和x86_64。红帽公司通过课程红帽认证系统管理员/红帽认证工程师(RHCSA/RHCE),对系统管理员进行培训和认证。 CentOS :CentOS是一款企业级Linux发行版,它使用红帽企业级Linux中的免费源代码重新构建而成。这款重构版完全去掉了注册商标以及Binary程序包方面一个非常细微的变化。有些人不想支付一大笔钱,又能领略红帽企业级Linux;对他们来说,CentOS值得一试。此外,CentOS的外观和行为似乎与母发行版红帽企业级Linux如出一辙。 CentOS使用YUM来管理软件包。 Fedora :小巧的Fedora适合那些人:想尝试最先进的技术,等不及程序的稳定版出来。其实,Fedora就是红帽公司的一个测试平台;产品在成为企业级发行版之前,在该平台上进行开发和测试。Fedora是一款非常好的发行版,有庞大的用户论坛,软件库中还有为数不少的软件包。 Kali Linux :Kali Linux是Debian的一款衍生版。Kali旨在用于渗透测试。Kali的前身是Backtrack。用于Debian的所有Binary软件包都可以安装到Kali Linux上,而Kali的魅力或威力就来自于此。此外,支持Debian的用户论坛为Kali加分不少。Kali随带许多的渗透测试工具,无论是Wifi、数据库还是其他任何工具,都设计成立马可以使用。Kali使用APT来管理软件包。 另外一种版本是技术版本:主要被称为Linux的内核、源代码。  源代码官网:链接: link     Linux企业应用现状 Linux在服务器领域的发展 随着开源软件在世界范围内影响力日益增强,Linux服务器操作系统在整个服务器操作系统市场格局中占据了越来越多的市场份额,已经形成了大规模市场应用的局面。并且保持着快速的增长率。尤其在政府、金融、农业、交通、电信等国家关键领域。此外,考虑到Linux的快速成长性以及国家相关政策的扶持力度,Linux服务器产品一定能够冲击更大的服务器市场。 据权威部门统计,目前Linux在服务器领域已经占据75%的市场份额,同时,Linux在服务器市场的迅速崛起,已经引起全球IT产业的高度关注,并以强劲的势头成为服务器操作系统领域中的中坚力量。  Linux在桌面领域的发展 近年来,特别在国内市场,Linux桌面操作系统的发展趋势非常迅猛。国内如中标麒麟Linux、红旗Linux、深度Linux等系统软件厂商都推出的Linux桌面操作系统,目前已经在政府、企业、OEM等领域得到了广泛应用。另外SUSE、Ubuntu也相继推出了基于Linux的桌面系统,特别是Ubuntu Linux,已经积累了大量社区用户。但是,从系统的整体功能、性能来看,Linux桌面系统与Windows系列相比还有一定的差距,主要表现在系统易用性、系统管理、软硬件兼容性、软件的丰富程度等方面。  Linux在移动嵌入式领域的发展 Linux的低成本、强大的定制功能以及良好的移植性能,使得Linux在嵌入式系统方面也得到广泛应用,目前Linux以广泛应用于手机、平板电脑、路由器、电视和电子游戏机等领域。在移动设备上广泛使用的Android操作系统就是创建在Linux内核之上的。目前,Android已经成为全球最流行的智能手机操作系统,据2015年权威部门最新统计,Android操作系统的全球市场份额已达84.6%。 此外,思科在网络防火墙和路由器也使用了定制的Linux,阿里云也开发了一套基于Linux的操作系统“YunOS”,可用于智能手机、平板电脑和网络电视;常见的数字视频录像机、舞台灯光控制系统等都在逐渐采用定制版本的Linux来实现,而这一切均归功与Linux与开源的力量。  Linux在云计算/大数据领域的发展 互联网产业的迅猛发展,促使云计算、大数据产业的形成并快速发展,云计算、大数据作为一个基于开源软件的平台,Linux占据了核心优势;据Linux基金会的研究,86%的企业已经使用Linux操作系统进行云计算、大数据平台的构建,目前,Linux已开始取代Unix成为最受青睐的云计算、大数据平台操作系统。  Linux环境的安装 1.裸机安装或者双系统——不推荐 2.虚拟机安装——不推荐 3.云服务器——安装简单,维护成本低,未来学习效果好。  云服务器推荐:阿里云官网,腾讯云官网,华为云官网。 ————————————————                              版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。                          原文链接:https://blog.csdn.net/dab112/article/details/140348766 
  • [技术干货] Linux:Linux权限解析-转载
    一、Linux下的用户分类  在Linux下,有两种用户,一种是超级用户,一种是普通用户 超级用户:可以再linux系统下做任何事情,不受权限限制(制定规则,但不需要遵守规则) 普通用户:在linux下做有限的事情。(必须遵守相应的规则) 超级用户的命令提示符是“#”,普通用户的命令提示符是“$” 1、用户的切换方式 命令:su [用户名] 功能:切换用户。 例如,要从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的密码。 2、Linux中的所有用户都要有自己的密码,无论是root还是普通用户,并且root的密码和普通用户的密码尽量不要一样!! 3、有些事情只有root可以进行,比如说用yum命令安装软件,但是如果我们普通用户想要去使用root才能使用的命令,那么就需要用sudo command暂时对一条命令进行短暂提权。  4、既然我普通用户可以用sudo对命令按时提权,那么我不就可以相当于root吗??其实这是不合理的,目前我们直接adduser新建的用户,并不可以直接进行sudo,因为系统不信任你,除非未来将普通用户,添加到系统的信任白名单里,才可以用sudo对命令进行提权。 二、Linux权限的概念 什么叫做权限呢??通俗一点说就是一件事情是否允许你做!  2.1 文件访问者的分类(人的不同身份) 文件和文件目录的所有者:u---User(拥有者) 文件和文件目录的所有者所在的组的用户:g---Group(所属组) 其它用户:o---Others (其他人) 思考: 1、 这三个分类和用户有什么关系??? 答:用户相当于是人,而拥有者、所属组、其他人相当于是他们的不同身份,所以任何一个用户都可以是拥有者、所属组或者是其他人。 2、怎么理解拥有者呢?? 答:拥有者就相当于是创建该文件的人,对文件具有相关的操作权限。 3、怎么理解其他人呢?? 答:举个例子,假设张三和李四一起进到腾讯,你们进到了不同的部门,但是由于资金短缺,两个部门共用一台电脑,而腾讯要开发一款叫做王者荣耀的游戏,让你们两个部门都去开发这个游戏,哪个部门开发得好就用谁的(这其实是“赛马论”,虽然大部分的公司都不会让两个部门一起干一件事,因为有点资源浪费,但是在有些公司是会有这种情况的,通过这种方式来给员工们建立一个竞争的环境,激发他们的工作动力,同时不同部门之间也能互相借鉴经验,一起进步。)。所以张三和李四在这条条件下就形成了竞争关系,而两人又在一个寝室,平时李四经常会去借鉴张三的代码,所以有一天当张三写了一段非常好的代码之后(张三属于拥有者),为了不让李四抄袭,就可以对设置其他人的权限(这时李四属于其他人)。 4、为什么会需要所属组呢?? 答:还是刚刚的例子,张三通过设置“其他人”权限,让李四无法抄袭自己的代码,但是有一天他的部门组长王五想看看他写的代码,这个时候张三发现如果放开权限的话,这样李四也能看到自己的代码,所以这个时候就需要“所属组”(王五属于所属组),同时所属组的存在也有利于同个部门之间的成员可以看到相互之间写的代码。 2.2 文件类型和访问权限(事物的不同属性)  2.2.1 文件类型 d:文件夹  -:普通文件(文本、可执行文件、库)  b:块设备文件(例如硬盘、光驱等磁盘文件)       ——>所在路径:/dev/vda1  p:管道文件(用来进行通信)                           ——> 用mkfifo可以创建管道文件 c:字符设备文件(例如键盘、显示器等串口设备)——>所在路径:/dev/tty(tty是终端的意思)   l:软链接(类似Windows的快捷方式) s:套接口文件 2.2.2  Linux后缀无意义但需要 Linux系统中,文件名后缀没有没有直接的意义。  当我们用用gcc文件编译.c文件之后,无论这个可执行程序改成什么名字,都可以正常执行!!  但是不代表Linux系统上运行的其他软件不需要后缀!!比如说gcc是一款编译器、软件,他编译只认.c后缀的文件,如果是其他后缀,他不认。 所以Linux中的文件是否需要使用后缀,具体看用户的需求!!  2.2.3 文件基本权限 i.可读(r/4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限 ii.可写(w/2):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限 iii.可执行(x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限 iv.“—”表示不具有该项权限  所以2-10位,每三个为一组,分别代表拥有者、所属组、其他人的权限 而每组的对应的位置含义是什么我们是知道的——每个位置对应的是r/w/x或者是- 所以每个位置都有只有是或者否,对应其指定的文件!!因此我们可以用1表示是,0表示否,每组都可以用一个八进制数字来表示。 2.2.4 文件权限的表示方法  a、字符表示方法 b、8进制数值的表示方法  2.2.5 文件访问权限的相关设置方法 1、chmod  功能:设置文件的访问权限  格式:chmod [参数] 权限 文件名  常用选项:  R -> 递归修改目录文件的权限  说明:只有文件的拥有者和root才可以改变文件的权限  chmod命令权限值的格式:  ① 用户表示符+/-=权限字符  (在原有的基础上进行权限的增删查改)  +:向权限范围增加权限代号所表示的权限  -:向权限范围取消权限代号所表示的权限  =:向权限范围赋予权限代号所表示的权限  用户符号:  u:拥有者  g:所属组  o:其它用户  a:所有用户    ②三位8进制数字  (直接对权限进行设置 每个数字分别对应拥有者、所属组、其他人)     2、chown  功能:修改文件的拥有者  格式:chown [参数] 用户名 文件名  注意事项:  我们要把文件给别人时,有两种方法:要么是别人同意,要么是sudo强制提权,而当文件的拥有者改变后,我们只能执行所属组的权限,而不能执行拥有者的权限!且无法再修改权限!!  3、chgrp  功能:修改文件或目录的所属组  格式:chgrp [参数] 用户组名 文件名  常用选项:-R 递归修改文件或目录的所属组  2.2.6 没有权限会怎么样   但是要注意的是,root不受权限约束!!可以随意操作!   2.3 起始权限问题——文件掩码  为什么普通文件是664,而目录文件是775呢??   答:其实普通文件的默认起始权限是666,而目录文件的其实权限是777,而影响他们的其实是文件掩码!!  命令:umask  功能:查看或修改文件掩码(凡是在umask中出现的文件,不会在最终的文件权限中出现!)  格式:umask  权限值(不带权限值就是查看,带的话就是设置)   看上去好像是默认权限减掉起始权限,但其实并不是这样的,因为我们要考虑这个权限本身就不存在的情况!! 所以无论原来的权限是0还是1,当umask为1时,都要变成0(将某位设置为0,我们要想到&)所以有1则为0而umask为0时,就不能影响原来的权限(如果用&,要想不改变,就得希望该位置是0,其他位置是1,所以可以想到~)  最终权限=起始权限&(~umask)  超级用户默认掩码值为0022,普通用户默认为0002。  2.4 目录权限 r:是否允许我们查看指定目录下的文件内容(ls) w:是否允许我们在当前目录下进行创建(mkdir、touch)、更改(mv)、删除(rm) x:可否在目录下执行命令,是否允许用户进入(cd)对应的目录。 注意事项:如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目, 即使目录仍然有-r读权限,而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限,即使可以执行ls命令,但仍然没有权限读出目录下的文档。 2.5 共享文件——粘滞位  1、普通用户自己的家目录权限是700,所以在家目录创建的文件,别人都看不到!! 2、所以如果当我们需要一些共享文件让所有用户共享时,我们显然不能将该目录建在家目录下!(要建在根目录下) 但是试想一下这样的场景,你作为共享文件的拥有者,你可以设置权限,当你给其他人设置了不可读不可写的权限,其他人怀恨在心,就把你的文件给删了,这显然是不合理的!!! 3、一个文件能否被删除,与文件本身无关,而与存储该文件的目录有关  但是如果我们不想让别人删除,我们就需要去掉目录的w权限,但是如果这样的话,共享的意义就不存在了!!!因此我们就有了一个新方案叫做粘滞位! 4、粘滞位:给目录进行设置(chmod +t  文件),一般是共享目录,大家可以在目录进行各自文件的增删查改,只允许文件的拥有者或者是root去删除这个文件,其他人一概不允许,t是一种特殊的x权限!!!  5、其实在根目录下就存在一个tmp目录是带粘滞位的,他相当于就是系统自带的共享文件,我们可以在里面去创建共享文件,而不需要每次创建共享文件都在根目录!!  2.6 易错点:每个角色只能执行一种身份的权限!! 假设我是拥有者,我也是所属组,而拥有者的权限是---,所属者的权限是rwx,但实际上我只能以拥有者的身份去执行我的权限!  2.7 file指令  功能说明:辨识文件类型。  语法:file [选项] 文件或目录...   常用选项:  -c 详细显示指令执行过程,便于排错或分析程序执行的情形。  -z 尝试去解读压缩文件的内容 ————————————————                              版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。                          原文链接:https://blog.csdn.net/weixin_51142926/article/details/140380555 
  • [技术干货] Linux下DNS服务设置详解-转载
    DNS(Domain Name System,域名系统)是互联网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网,实现了方便用户使用域名访问网站的目的。在Linux操作系统中,DNS服务也是一个重要的组成部分,我们可以使用bind9软件来实现DNS服务。本文将介绍如何在Linux环境下安装并配置bind9,实现主从DNS服务器的搭建。  一、DNS的基本原理  DNS是一种基于UDP协议的分布式数据库服务,它将主机名映射到IP地址。当用户在浏览器中输入一个网址时,计算机会首先向本地DNS服务器发出查询请求,如果本地DNS服务器无法解析该网址,则它会向根DNS服务器发出请求,根DNS服务器会返回负责该顶级域名的权威DNS服务器的地址,本地DNS服务器再向权威DNS服务器发出请求,最终获得该网址对应的IP地址。  二、Linux DNS基本概念 1. 域名:域名是Internet上的一种标识,用于代替IP地址。例如,www.example.com就是一个域名。 2. IP地址:IP地址是Internet上设备的唯一标识,通常以点分十进制表示,如192.168.1.1。 3. DNS服务器:DNS服务器是负责将域名解析为IP地址的服务器。Linux系统中有两种类型的DNS服务器:主DNS服务器和辅助DNS服务器。主DNS服务器负责处理区域内的域名解析请求,而辅助DNS服务器则从主DNS服务器获取区域数据并缓存。 4. 区域:区域是一个DNS命名空间,包含了一组资源记录(Resource Record,RR)。资源记录是DNS数据库中的一条记录,用于存储域名和IP地址之间的映射关系。  三、Linux中的DNS服务  1. BIND软件 BIND(Berkeley Internet Name Domain)是一款实现DNS服务的软件,它是最广泛使用的DNS服务器软件之一。在Linux中,可以使用BIND来实现DNS服务。 2. named服务 named是BIND软件中的一个守护进程,它是Linux中默认安装的DNS服务进程。当启动named服务时,它会读取配置文件/etc/named.conf以及相应的区域文件(zone file),并监听53端口等待客户端的查询请求。 3. 配置文件/etc/named.conf /etc/named.conf是BIND的主配置文件,它包含了全局设置和区域声明等内容。在该文件中可以指定正向查找区域、反向查找区域、主域名服务器、辅助域名服务器等信息。 4. 区域文件 区域文件是BIND中用于存储域名解析信息的文件,它包含了该区域内所有主机的IP地址和主机名之间的映射关系。在Linux中,区域文件通常存放在/var/named目录下。  四、Linux DNS配置 实验环境:Linux操作系统(如CentOS 7)  基本配置步骤: 1.安装dns服务及nslookup所在包bind-utils #  yum  -y  install  bind  bind-utils  2.在主配置文件中设置DNS服务器的全局参数 建立主配置文件named.conf(在listening加服务器ip)  # vi  /etc/named.conf   options  {       listen-on  port 53  {192.168.111.135; };   //本机IP                       directory   "/var/named";                                    allow-query  { 192.168.111.0/24; };       };  3.设置主域名服务器 A:确认本机网络地址、主机映射、DNS服务器地址 # hostname  ns1 # vi  /etc/hosts 192.168.111.135 ns1.qym.com ns1 (确认有类似上面一行内容)    # vi  /etc/resolv.conf  192.168.111.135 (确认有类似上面一行内容)  B:设置区域配置文件 建立正、反向区域数据文件  # vi  /etc/named.rfc1912.zones   zone  "qym.com"  IN  { type  master;                                        file  "qym.com.zone";                              }; zone  "111.168.192.in-addr.arpa"  IN  { type  master; file  "111.168.192.arpa";                              }; 将上面内容输进  C:建立正向解析数据库文件 # vi  /var/named/qym.com.zone   将下面内容输进 $TTL  86400 @   IN  SOA  qym.com.   admin.qym.com.  (         2011030301         4H         30M         12H         1D )     NS    @       A      192.168.111.135 ns1   A       192.168.111.135 www  A      192.168.111.10 mail   A      192.168.111.20   D:建立反向解析数据库文件 # vi  /var/named/111.168.192.arpa   将下面内容输进 $TTL  86400 @  IN   SOA  qym.com.  admin.qym.com.  (          2011030301         4H         30M         12H         1D )          NS      @           A    192.168.111.135 10        PTR  ns1.qym.com. 10        PTR  www.qym.com. 20        PTR  mail.qym.com.     E:启动dns服务 启动named服务,或重载配置  # systemctl  start  named 没有出现错误提示继续往下 F:测试dns 验证主域名服务器  # nslookup  ns1.qym.com 测试成功   # nslookup  www.qym.com    # nslookup  192.168.111.135  通过本实验,学习如何在Linux系统中配置DNS服务器,掌握DNS服务的基本原理和配置方法。 ————————————————                              版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。                          原文链接:https://blog.csdn.net/2301_82084396/article/details/139649872 
  • [技术干货] linux tomcat版本查看-转载
     在Linux系统中,查看Tomcat服务器版本信息通常有以下几种方法:  方法一:通过version.sh脚本 打开终端:  使用快捷键(通常为Ctrl + Alt + T)或从应用程序菜单中打开终端。 定位到Tomcat安装目录:  在终端中输入以下命令,将路径切换到Tomcat的bin目录,其中<TOMCAT_INSTALL_DIR>代表您的实际Tomcat安装路径(例如:/usr/local/tomcat): bash      cd <TOMCAT_INSTALL_DIR>/bin 3. 执行版本查询脚本:  在终端中输入以下命令并回车,执行version.sh脚本: bash      ./version.sh 脚本执行后,终端将显示Tomcat的版本信息,包括版本号、构建日期等。 方法二:通过catalina.sh脚本 保持在终端: 如果您已经按照方法一打开了终端并定位到了Tomcat的bin目录,可以直接执行下一步;否则,请重复方法一的前两步。 执版本查询命令: 在终端中输入以下命令并回车,执行catalina.sh脚本并传递version参数: bash       ./catalina.sh version 终端将显示Tomcat的版本信息。 方法三:查看MANIFEST.MF文件 打开终端: 如果尚未打开终端,请按照方法一的第一步操作。 定位到Tomcat的lib目录: 输入以下命令切换到Tomcat的lib目录: bash      cd <TOMCAT_INSTALL_DIR>/lib 3. 查看catalina.jar中的MANIFEST.MF文件: 使用以下命令查看catalina.jar包内的MANIFEST.MF文件中的版本信息: bash      unzip -q -c catalina.jar META-INF/MANIFEST.MF | grep -E 'Specification-Version:|Implementation-Version:' 命令执行后,终端将显示Specification-Version:(规范版本)和Implementation-Version:(实现版本)对应的行,它们分别表示Tomcat遵循的规范版本和具体的实现版本。 通过以上任一方法,您都可以在Linux系统中轻松查看已安装的Tomcat服务器版本信息。如果您遇到权限问题无法访问某些文件或执行脚本,请尝试使用sudo命令或以具有足够权限的用户身份登录。 ————————————————                              版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。                          原文链接:https://blog.csdn.net/zengliguang/article/details/138225839 
  • [技术干货] Linux:Linux发展史-转载
    一、计算机的发展历史背景         首先我们要知道,早期大多数科技的进步都是以国家的对抗为历史背景的,因为一个国家要想强大,只有通过不断提高自己的科技实力,造就更加强大的武器,才能更加从容地立于不败之地。   1.1 第二次世界大战         在第二次世界大战中,敌对双方都使用了飞机和火炮,猛烈轰炸对方军事目标。但要想打得准,必须精确计算并绘制出"射击图表"。经查表确定炮口的角度,才能使射出去的炮弹正中飞行目标!!针对这种情况,在1946年2月14日,第一台电子计算机“埃尼阿克”诞生——>标志着电脑时代的开始。          但在当时,该计算机的操作成本极高(集成化程度极低——>体积大、消耗大)  1.2 美苏冷战和摩尔定律的提出         随着二战的结束,美苏冷战开始爆发(1961-1975),这样的时代背景下促进了技术的极大突破,同时摩尔定律在1965年被提出(当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍。这意味着,每一美元所能买到的电脑性能,将每隔18-24个月翻一倍以上。)这说明集成电路的集成化程度越来越高——>推动了计算机小型化的发展。  1.3 硅谷模式的产生 1.3.1 第一阶段  1、政府和军方推动了技术的进步         早期的技术研究更多地是用来针对战争,比如计算机的产生更多的是为了计算导弹的发射路径,并不是为了给大众使用的。所以军方和政府起到了主导作用。   2、政府通过启动资金和研究机构、高校合作推进研究         但是研究新技术,政府和军方并没有专业的研究人员,所以必须依靠和高校和研究机构合作来推动,而项目的运行则需要大量的启动资金。   3、需要大量的启动资金,所以必须想办法“可持续”         但是每个项目都需要大量的资金,所以我们必须想办法“可持续发展”,比如说现在投了一个项目,当这个项目出现研究成果的时候,通过这个研究成果去盈利,来让资金回流继续去投资更多的项目。  4、为了满足“可持续”,有人提出了“硅谷模式”  1.3.2 第二阶段(硅谷模式) 1、政府有需求,就有人会满足(专利的出现)        当政府有相关需求的时候,如果我正好研究了某个东西,那我可以将这个东西卖给政府,政府也就不需要花费时间和金钱去继续研究了,这就是最早的技术专利。——>本质上是减少了研究成本。  2、启动资金+技术人员+商人(商人的出现)         但是光靠减少研究成本并不顶用啊!!所以一些研究并不会去针对政府的需求,而是去针对大众的需求。所以就需要擅长和社会打交道的人,比如说我们创建了一个app,我需要想办法让大众能够去购买和使用他,从而实现盈利,并且还需要根据大众的需求和意见,去不断改进产品,这些过程都需要打交道,所以商人出现了。  3、成立了很多公司,出现很多商业人物(公司的出现)         商人将成果售卖给大众,自然必须要保证大众能够正常的使用,并且还得确保这个东西能够及时地根据不同的意见去维护,这个过程需要相关的技术人员,那既然这样,那就由商人牵头,招募技术人员,所以出现了公司。通过诸如乔布斯、比尔盖茨这样的商业大佬开始出现。  4、孵化新的产品(盈利带动创造力的出现)        公司开始不断盈利,是一个很好的势头,这让他们更加致力于研究面向大众的产品,因此不断的涌现出各种各样针对大众化的新产品。  1.3.3 第三阶段(全球化) 1、产品不断更新,并开始逐渐卖向全球(跨国企业的出现)  2、政府通过税收的方式实现资金回流(税收的出现)  1.4 计算机软硬件的发展 1.IBM公司(硬件)          早期IBM公司的理念是——计算机未来只会给高校和大企业用到。          但是在后期的时候,发明了thinkpad,只不过被联想收购了。  2.苹果公司(硬件+软件)          苹果公司的理念是——计算机是一种大趋势,必然会大众化。          专注研发自己的产品,产品质量很高(主打性能),但是较贵  3.微软公司(软件)          微软只做软件,而苹果的产品如果卖的越多,那么他对应的会是自己的操作系统,所以微软的市场份额本来就有限,他非常担心自己的操作系统会被其他的硬件厂商换掉。  ——>找到IBM合作,但是IBM认为计算机造价高,只会由企业或机构使用,与微软的观念不符合,分道扬镳。  ——>找到因特尔(硬件支持)+大量计算机制造商(联想、华硕等品牌)+微软(软件支持)组成新的阵营。由于各个模块都是专注于自己的事情,所以效率高成本低,但由于阵营太大,所以品控较困难。(主打性价比)。  1.5 图形化界面的出现(转折点)       就这样,几个巨头斗了一段时间,在1979年乔布斯访问了施乐公司发现了图形化界面和鼠标界面,开始让自己的研发团队深入研究,而后微软也开始学习,就此拉开了图形化界面的大趋势。  二、Linux的诞生和发展 2.1 Linux的发展 1.Unix         除了masco和windows,其实在20世纪70年代还有一款商用的操作系统叫做Unix,由IBM公司安装在一体机上,然后交由企业机构去使用,或者是捐赠给高校。  2.雷纳斯托瓦兹        赫尔辛基大学1991年,大学生雷纳斯托瓦兹使用了学校实验室搭载的UNIX操作系统的电脑,开始思考我能否自己开发一款免费的操作系统呢??Liunx(Linux全称:Linux is not unix)应运而生。并将Linux的demo源代码公开。  3.顶级的黑客、工程师、收费操作系统的对抗者愿意无偿参与项目        为什么愿意无偿呢?我的理解其实跟我们平时的志愿者一样,有些事情不一定是拿钱去说话,可能会有各种各样方方面面的原因,而我认为在当时这更多地是一种对计算机从业者的挑战,与大公司巨头挑战的机会。这样使得Linux操作系统越来越强大。  4.Linux更多的是给工程师使用的       为什么Linux操作系统越来越大,但是我们平时看见更多地是windows和mas呢???原因就是因为苹果和微软之所以在图形化界面下大功夫就是为了增加用户体验,让普通老百姓也能更好地区使用计算机,所以Linux更多的是给工程师使用的,他不需要顾忌客户的使用体现,更为原始和高效。  5.苹果系统和安卓系统的出现       苹果开始做手机了,他们有自己的操作系统——>所以谷歌收购了相关产品进行了开源,诞生安卓,安卓是基于Linux内核的手机操作系统。  2.2 Linux操作系统 客户关注点:好用、快、安全、稳定        购买计算机的时候其实操作系统就算在计算机的钱里面,微软是直接从计算机厂商这里拿钱的,那为什么计算机厂商不安装盗版的免费的操作系统呢?因为不安全,如果盗版有任何问题,那么可能直接导致用户连电脑都不打算购买了,大多数客户是不会为操作系统去买单的,不敢对操作系统进行太大的变化,即使换新的操作系统(比如华为从安卓变成鸿蒙) 也要尽可能保持不变,保证用户使用习惯(其实早期的windows会有纸牌、扫雷等游戏,是为了帮助用户培养使用windows的习惯,产生客户粘性)  企业关注点:稳定、安全、快速、成本低         不仅仅是我们的电脑,手机要用操作系统,互联网公司也要选择自己的后端操作系统(服务器,不需要显示器,只需要处理数据)。Liunx操作系统->开源->免费(大众产品在用户体验上不能疏忽,所以互联网公司必须使用微软的操作系统,主要是为了客户的快和好用,但是对于公司内部来说,就更倾向于使用免费的linux而不是微软的操作系统了)——>公司开始广泛使用Liunx(成本低、快速、安全、稳定)  问题1:为什么开源比闭源好的???       稳定——>很多人去看,纠正错误。      安全——>闭源的话我们一旦出问题了看不到底层,找不到解决方案,就不安全,比如一段代码如果我们不清楚逻辑贸然去使用,说不定有病毒,或者窃取数据。      快速——>代码质量越来越好  问题2:为什么Liunx被大多公司使用??  1、服务器需要操作系统永远不关机,而windows连续不关机的话一段时间后就会非常卡。所以Liunx可以适应高强度的使用场景 2、未来越来越多的场景需要操作系统,而当你需要的时候,就有Liunx这个免费好用又安全稳定的操作系统,并且会被不断迭代发展。  问题3:Linux是免费开源的,那Liunx一些网站、一些社区维护不需要钱么??            其实也是需要钱的,当一个软件被大多数人使用的时候,就越不会有人希望这个东西消失,所以会想方设法地保留。免费本身只是一种方式,但是并不是什么都是免费的,也需要维护。   2.3 Linux提炼特征 a.开源-大部分是免费的、稳定的、安全的、高效 b.更多的被专业的人所使用  2.4 Linux的应用场景 1.Linux在服务器领域的发展        随着开源软件在世界范围内影响力日益增强,Linux服务器操作系统在整个服务器操作系统市场格局中占 据了越来越多的市场份额,已经形成了大规模市场应用的局面。并且保持着快速的增长率。尤其在政府、 金融、农业、交通、电信等国家关键领域。此外,考虑到Linux的快速成长性以及国家相关政策的扶持力 度,Linux服务器产品一定能够冲击更大的服务器市场。        据权威部门统计,目前Linux在服务器领域已经占据75%的市场份额,同时,Linux在服务器市场的迅速崛 起,已经引起全球IT产业的高度关注,并以强劲的势头成为服务器操作系统领域中的中坚力量。  2、Linux在桌面领域的发展        近年来,特别在国内市场,Linux桌面操作系统的发展趋势非常迅猛。国内如中标麒麟Linux、红旗Linux、深度Linux等系统软件厂商都推出的Linux桌面操作系统,目前已经在政府、企业、OEM等领域得 到了广泛应用。另外SUSE、Ubuntu也相继推出了基于Linux的桌面系统,特别是Ubuntu Linux,已经积 累了大量社区用户。但是,从系统的整体功能、性能来看,Linux桌面系统与Windows系列相比还有一定 的差距,主要表现在系统易用性、系统管理、软硬件兼容性、软件的丰富程度等方面。 Linux在移动嵌入式领域的发展 Linux的低成本、强大的定制功能以及良好的移植性能,使得Linux在嵌入式系统方面也得到广泛应用,目 前Linux以广泛应用于手机、平板电脑、路由器、电视和电子游戏机等领域。  3、Linux在移动设备上广泛使用的          Android操作系统就是创建在Linux内核之上的。目前,Android已经成为全球最流行的智能手机操作系 统,据2015年权威部门最新统计,Android操作系统的全球市场份额已达84.6%。        此外,思科在网络防火墙和路由器也使用了定制的Linux,阿里云也开发了一套基于Linux的操作系 统“YunOS”,可用于智能手机、平板电脑和网络电视;常见的数字视频录像机、舞台灯光控制系统等都在 逐渐采用定制版本的Linux来实现,而这一切均归功与Linux与开源的力量。  4、Linux在云计算/大数据领域的发展          互联网产业的迅猛发展,促使云计算、大数据产业的形成并快速发展,云计算、大数据作为一个基于开源 软件的平台,Linux占据了核心优势;据Linux基金会的研究,86%的企业已经使用Linux操作系统进行云 计算、大数据平台的构建,目前,Linux已开始取代Unix成为最受青睐的云计算、大数据平台操作系统。  2.5 Linux版本 a.商业化版本线 (发行版 底层是内核    在内核的基础上搭建自己的生态形成不同的版本  上层的指令有些不同,但如果你把一款用得非常熟,再去使用另一个也是得心应手的 比如安卓也是在Liunx内核上产生的 虽然收费但还是有公司会去使用的,因为本身就没有专门的研发人员,如果出问题了还得自己维护,而用收费的就自然有人会去维护,我们选择Centos7.6/7.8/7.9)  b.技术版本线(源代码版本  Linux内核  xxx.yyy.zzz  x表示主版本,y表示次版本,z表示修正次数) ————————————————                              版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 
  • [问题求助] uboot使用do_go_exec无法启动standalone程序?
    各位大佬好:开发需要使用uboot的standalone功能1、当前环境验证使用uboot中example demo预研,编译出的demo.bin通过tftp拷贝到系统0x82000000后,使用go命令成功运行; 2、将demo.bin环境填充到uboot固件新定义的一个.myboot的section中,在uboot启动过程中找到这个段将bin拷贝到0x8200000后,执行do_go_exec()函数,该函数实现就是go命令的实现,但是会存在报错,内容如下: "Synchronous Abort" handler, esr 0x02000000elr: 0000000004918000 lr : 00000000808ae498 (reloc)elr: 0000000084000000 lr : 00000000fff96498x0 : 0000000000000001 x1 : 00000000fddd7b70x2 : 00000000fddd7b70 x3 : 0000000000000000x4 : 00000000840002a8 x5 : 00000000fddd74a8x6 : 0000000000000038 x7 : 000000000000000fx8 : 00000000fddd7b18 x9 : 0000000000000008x10: 00000000ffffffd8 x11: 0000000000000010x12: 000000000000785c x13: 00000000fddd79fcx14: 00000000fddd7bd0 x15: 0000000000000020x16: 0000000084000000 x17: 0000000000000000x18: 00000000fdde7df0 x19: 00000000fff964a8x20: 000000007f6e8000 x21: 00000000fffc07d0x22: 0000000000000000 x23: 0000000000000000x24: 0000000000000000 x25: 0000000000000000x26: 0000000000000000 x27: 0000000000000000x28: 0000000000000000 x29: 00000000fddd7b50 3、自己的排查点: (1)修改do_hikboot运行时机,(1.1)run_main_loop之前;(1.2)在autoboot_command之前,调整启动位置无改善(2)直接调用do_go函数运行,失败,现象一致(3)更换启动地址为0x84000000后无改善,确认0x82000000可以运行,go命令可以启动
  • [技术干货] Linux实现双网卡绑定的代码详解【转】
    一、介绍linux 主机安装双网卡,共享一个IP地址,对外提供访问,实际同样连接两条物理线路到交换机实现平时双网卡同时工作,分流网络压力,同时提供冗余备份,监控,防止物理线路的单点故障。配置双网卡的目的:实现高可用、流量负载均衡实现原理:Linux bonding 驱动模块 提供了一种方法,用以把多个网络接口(network interface)组合成一个 逻辑的 “bonded” 接口。 Bonded 接口的工作方式取决于驱动的模式:不同的模式提供了热备份或负载均衡等不同的服务。几种模式:• 轮询策略(round robin),mode=0,按照设备顺序依次传输数据包,提供负载均衡和容错能力• 主备策略(active-backup),mode=1,只有主网卡处于工作状态,备网卡处于备用状态,主网卡坏掉后备网卡开始工作,提供容错能力• 异或策略(load balancing (xor)),mode=2,根据源MAC地址和目的MAC地址进行异或计算的结果来选择传输设备,提供负载均衡和容错能力• 广播策略(fault-tolerance (broadcast)),mode=3,将所有数据包传输给所有接口通过全部设备来传输所有数据,一个报文会复制两份通过bond下的两个网卡分别发送出去,提供高容错能力• 动态链接聚合(lacp),mode=4,按照802.3ad协议的聚合自动配置来共享相同的传输速度,网卡带宽最高可以翻倍,链路聚合控制协议(LACP)自动通知交换机聚合哪些端口,需要交换机支持 802.3ad协议,提供容错能力• 输出负载均衡模式(transmit load balancing),mode=5,输出负载均衡模式,只有输出实现负载均衡,输入数据时则只选定其中一块网卡接收,需要网卡和驱动支持ethtool命令• 输入/输出负载均衡模式(adaptive load balancing),mode=6,输入和输出都实现负载均衡,需要网卡和驱动支持ethtool命令二、步骤1、进入网卡配置目录下:cd /etc/sysconfig/network-scripts/ 2、vim ifcfg-bond0:3、vim ifcfg-ens33:4、vim ifcfg-ens36:5、vim /etc/modprobe.d/dist.conf:12alias bond0 bondingoptions bond0 miimon=100 mode=1 primary=eth0alias bond0 bonding,表示系统在启动时加载bonding模块,对外虚拟网络接口设备为 bond0miimon=100,表示系统每100ms监测一次链路连接状态,如果有一条线路不通就转入另一条线mode=1,表示绑定模式为1primary=eth0,系统首先eth0作为bond0接口与外界信息的传输接口6、vim /etc/rc.local:1modprobe bonding miimon=100 mode=17、所有配置都已完成,重启网络:12systemctl restart networkifconfig查看信息ifconfig8、检查bonding mode,想查看那个网卡再工作,使用下面这个命令12cat /proc/net/bonding/bond0cat /sys/class/net/bond0/bonding/mode  9、 网卡切换12ifenslave –c bond0 eth0           //测试bonding能否正常切换 Bonding完成后配置全局网关,vi  /etc/sysconfig/network
  • [技术干货] Linux 中的 Shell 脚本编写
    Linux 中的 Shell 脚本编写在 Linux 系统中,Shell 脚本是一种强大的工具,它允许我们将一系列的命令组合起来,实现自动化任务、系统管理和各种复杂的操作。一、Shell 脚本基础1. 什么是 Shell 脚本Shell 脚本是一个包含一系列命令的文本文件,这些命令按照特定的顺序执行。Shell 会读取并解释脚本中的每一行命令。2. 选择 Shell 解释器常见的 Shell 解释器有 bash(Bourne Again Shell)、sh(Bourne Shell)等。通常,我们使用 bash 来编写脚本。脚本的第一行通常指定解释器,例如:#!/bin/bash二、Shell 脚本的结构1. 注释以 # 开头的行是注释,用于解释脚本的功能和代码的作用。2. 变量可以使用 name=value 的形式定义变量,例如:my_variable="Hello World"在使用变量时,使用 $ 符号,如 echo $my_variable 。3. 条件判断使用 if-else 结构进行条件判断,例如:if [ $condition ]; then # 执行的命令 else # 执行的命令 fi4. 循环包括 for 循环、while 循环等。for 循环示例:for item in item1 item2 item3; do # 执行的命令 donewhile 循环示例:while [ $condition ]; do # 执行的命令 done三、常用命令和操作1. 文件操作如 cat 显示文件内容、mkdir 创建目录、rm 删除文件或目录等。2. 进程管理使用 ps 查看进程状态、kill 终止进程等。3. 字符串处理例如,使用 cut 提取字符串的部分内容、sed 进行字符串替换等。四、函数可以在脚本中定义函数来实现代码的复用,例如:function my_function { # 函数体 }五、输入和输出1. 标准输入(stdin)、标准输出(stdout)和标准错误(stderr)可以使用 > 重定向标准输出,2> 重定向标准错误。2. 读取用户输入使用 read 命令获取用户输入的值。六、实际应用示例1. 系统备份脚本定期备份重要的文件和目录。2. 服务器监控脚本监测服务器的资源使用情况,如 CPU 利用率、内存使用等,并发送告警邮件。七、调试技巧使用 -x 选项启用脚本的调试模式,可以查看每一行命令的执行过程和变量的值。编写 Shell 脚本需要不断的实践和积累经验,通过巧妙的运用,可以极大地提高工作效率和系统管理的便利性。
  • [技术干货] Linux 中 SMTP 系统配置
    Linux 中 SMTP 系统配置在 Linux 系统中,配置 SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)服务可以实现邮件的发送和接收功能。这对于服务器的监控告警、系统通知等场景非常有用。一、SMTP 简介SMTP 是用于在网络上发送电子邮件的标准协议。它定义了邮件服务器之间如何相互通信以传递邮件。二、选择 SMTP 服务器软件在 Linux 中有多种 SMTP 服务器软件可供选择,如 Postfix、Sendmail、Exim 等。这里以常见的 Postfix 为例进行配置说明。三、安装 Postfix在大多数 Linux 发行版中,可以使用以下命令安装 Postfix:sudo apt install postfix # 对于基于 Debian 的系统 sudo yum install postfix # 对于基于 Red Hat 的系统四、Postfix 基本配置安装完成后,主要的配置文件位于 /etc/postfix/main.cf 。设置域名myhostname = yourdomain.com将 yourdomain.com 替换为您的实际域名。设置网络接口inet_interfaces = all表示监听所有网络接口。设置邮件来源mydestination = $myhostname, localhost.$mydomain, localhost五、配置邮件转发如果需要将邮件转发到其他邮件服务器,可以进行如下配置:relayhost = [mailserver.example.com]将 [mailserver.example.com] 替换为实际的转发目标服务器地址。六、设置访问控制可以通过配置 /etc/postfix/access 文件来控制哪些主机或网络可以使用此 SMTP 服务器发送邮件。例如,允许特定 IP 地址发送邮件:192.168.1.10 OK然后使用以下命令将其转换为数据库并应用:sudo postmap /etc/postfix/access sudo systemctl restart postfix七、测试 SMTP 配置配置完成后,可以使用以下命令发送测试邮件:echo "This is a test email" | mail -s "Test" recipient@example.com将 recipient@example.com 替换为接收测试邮件的实际邮箱地址。八、常见问题及解决邮件发送失败 检查配置文件中的参数是否正确,特别是域名、转发服务器地址等。被其他邮件服务器拒绝 可能是由于 IP 信誉问题、SPF 记录不正确等,需要检查相关设置。配置 SMTP 系统需要仔细设置各个参数,并根据实际需求进行调整和优化。通过正确配置,可以实现稳定可靠的邮件发送功能。
  • [技术干货] Linux 时钟同步问题解决:NTP 和 Chrony 的使用
    Linux 时钟同步问题解决:NTP 和 Chrony 的使用在 Linux 系统中,保持准确的时钟对于系统的正常运行和各种应用的正确执行至关重要。时钟不同步可能会导致日志记录不准确、认证问题以及依赖时间戳的应用出现异常。本文将介绍如何使用 NTP(Network Time Protocol)和 Chrony 来解决 Linux 系统的时钟同步问题。一、NTP 的使用NTP 是一种广泛使用的网络时间协议,用于在计算机网络中同步系统时钟。安装 NTP 服务在大多数 Linux 发行版中,可以使用以下命令安装 NTP 服务:sudo apt install ntp # 对于基于 Debian 的系统 sudo yum install ntp # 对于基于 Red Hat 的系统配置 NTP 服务安装完成后,需要对 NTP 进行配置。通常,配置文件位于 /etc/ntp.conf 。您可以在配置文件中指定 NTP 服务器的地址。例如:server ntp.example.com这里的 ntp.example.com 应替换为您实际使用的 NTP 服务器地址。启动和启用 NTP 服务安装并配置好后,使用以下命令启动 NTP 服务:sudo systemctl start ntp sudo systemctl enable ntp # 确保在系统启动时自动启动检查时钟同步状态可以使用 ntpq -p 命令来查看与 NTP 服务器的同步状态。二、Chrony 的使用Chrony 是另一种流行的时钟同步工具,具有一些独特的特性和优势。安装 Chrony类似于 NTP,安装 Chrony 可以使用以下命令:sudo apt install chrony # 对于基于 Debian 的系统 sudo yum install chrony # 对于基于 Red Hat 的系统配置 ChronyChrony 的主要配置文件是 /etc/chrony.conf 。您可以在其中添加 NTP 服务器的信息,例如:server ntp.example.com iburstiburst 选项可以加快初始同步速度。启动和启用 Chrony 服务启动服务:sudo systemctl start chrony sudo systemctl enable chrony # 开机自启检查同步状态使用 chronyc sources 命令查看同步源的状态。三、常见问题及解决在时钟同步过程中,可能会遇到一些问题,例如无法连接到 NTP 服务器、同步时间过长等。如果无法连接到服务器,可以检查网络连接、服务器地址是否正确以及防火墙设置。如果同步时间过长,可以尝试更换其他可靠的 NTP 服务器。希望本文能够帮助您在 Linux 系统中顺利解决时钟同步的相关问题,让您的系统始终保持准确的时间。
  • [技术干货] Linux 进阶命令:grep、awk、sed 的用法
    Linux 进阶命令:grep、awk、sed 的用法在 Linux 系统中,掌握一些进阶命令可以大大提高我们处理文本和数据的效率。本文将重点介绍 grep、awk 和 sed 这三个强大的命令。一、grep 命令grep 命令用于在文件中搜索匹配指定模式的行。基本用法grep "pattern" file.txt其中,"pattern" 是要搜索的模式,file.txt 是要搜索的文件。常用选项-i:忽略大小写进行搜索。-v:反转匹配,即输出不匹配指定模式的行。-n:显示匹配行的行号。例如,要在文件 example.txt 中搜索包含字符串 "hello" 的行,不区分大小写,可以使用以下命令:grep -i "hello" example.txt二、awk 命令awk 是一种用于处理文本数据的编程语言,常用于提取和处理文件中的特定字段。基本语法awk 'pattern {action}' file.txtpattern 是匹配模式,action 是要执行的操作。示例用法假设我们有一个包含学生成绩的文件 scores.txt,格式如下:Name,Math,English Alice,85,90 Bob,78,82 Charlie,92,88要计算每个学生的平均成绩,可以使用以下 awk 命令:awk -F ',' '{print $1, ($2 + $3) / 2}' scores.txt这里,-F ',' 指定逗号为字段分隔符。三、sed 命令sed 用于对文本进行流编辑。基本用法sed 'command' file.txt常见命令s/pattern/replacement/:替换匹配 pattern 的部分为 replacement 。例如,要将文件 text.txt 中的所有 "old" 替换为 "new" ,可以使用:sed '/old/new/g' text.txt多行操作sed 还可以处理多行文本。例如,删除连续的空行:sed '/^$/N;/^\n$/D' file.txt掌握 grep、awk 和 sed 这三个命令,可以让我们在处理 Linux 中的文本数据时更加得心应手,大大提高工作效率。希望这篇博客能够帮助您更好地理解和运用这些 Linux 进阶命令。
  • [技术干货] LVM 与传统分区方案相比有哪些优势
    LVM(Logical Volume Manager,逻辑卷管理器)相较于传统分区方案具有以下显著优势:1. 灵活性和可扩展性传统分区方案在创建分区时就固定了大小,后续难以更改。而 LVM 可以在不重新分区和不影响现有数据的情况下,轻松地扩展或缩小逻辑卷的大小。例如,当系统存储需求突然增加时,LVM 可以快速为逻辑卷分配更多的空间,无需重新安装系统或迁移数据。2. 更好的磁盘空间管理传统分区可能会导致磁盘空间分配不均,某些分区空间不足,而其他分区却有大量未使用的空间。LVM 可以将多个物理卷组合成一个卷组,从而更有效地利用磁盘空间。例如,一个卷组中可以包含不同大小和类型的磁盘,将它们的空间整合起来统一管理。3. 易于数据迁移和备份在 LVM 中,可以方便地将逻辑卷从一个物理卷移动到另一个物理卷,或者将整个卷组迁移到新的存储设备上。比如,当需要更换硬盘或升级存储设备时,LVM 能够简化数据迁移的过程,降低数据丢失的风险。4. 在线操作LVM 支持大多数操作在系统运行时进行,无需停机。这对于需要保持高可用性的服务器环境至关重要。例如,在服务器运行过程中,可以实时扩展逻辑卷以满足新的业务需求,而不会导致服务中断。5. 逻辑抽象LVM 提供了一个逻辑层面的抽象,使得管理员可以更关注于逻辑卷的使用,而不必过于关心底层物理磁盘的细节。例如,无需了解具体的磁盘布局和分区表,只需管理逻辑卷的大小和属性。总的来说,LVM 为磁盘管理提供了更强大、灵活和高效的解决方案,尤其适用于对存储需求变化较大、需要高可用性和高效磁盘空间利用的场景。
  • Linux 中 LVM(Logical Volume Manager)的用法
    在 Linux 系统中,LVM(Logical Volume Manager,逻辑卷管理器)是一种非常强大且灵活的磁盘管理工具。它允许管理员更轻松地管理磁盘空间,实现动态的存储分配和调整。一、LVM 的基本概念LVM 主要由物理卷(Physical Volume,PV)、卷组(Volume Group,VG)和逻辑卷(Logical Volume,LV)组成。物理卷是指磁盘分区或整个磁盘。卷组是由一个或多个物理卷组成的存储池。逻辑卷则是从卷组中划分出来的可用于文件系统的存储空间。二、创建 LVM 的步骤准备物理卷使用 fdisk 命令对磁盘进行分区,并将分区类型设置为 8e(LVM 类型)。例如:fdisk /dev/sdb输入 n 创建新分区,选择分区类型为 8e 。创建物理卷使用 pvcreate 命令将分区创建为物理卷。示例:pvcreate /dev/sdb1创建卷组使用 vgcreate 命令创建卷组,并指定物理卷。比如:vgcreate myvg /dev/sdb1创建逻辑卷使用 lvcreate 命令创建逻辑卷,并指定大小和名称。例如:lvcreate -L 10G -n mylv myvg三、扩展逻辑卷当存储空间不足时,可以扩展逻辑卷。检查卷组中的空闲空间使用 vgdisplay 命令查看卷组的空闲空间。扩展逻辑卷使用 lvextend 命令扩展逻辑卷大小。例如:lvextend -L +5G /dev/myvg/mylv调整文件系统大小根据文件系统类型,使用相应的命令调整文件系统大小。对于 ext4 文件系统,可以使用 resize2fs 命令。示例:resize2fs /dev/myvg/mylv四、缩小逻辑卷(需谨慎操作)卸载文件系统umount /dev/myvg/mylv检查文件系统使用 e2fsck -f /dev/myvg/mylv 命令检查文件系统。缩小文件系统resize2fs /dev/myvg/mylv 5G缩小逻辑卷lvreduce -L 5G /dev/myvg/mylv五、删除 LVM删除逻辑卷lvremove /dev/myvg/mylv删除卷组vgremove myvg删除物理卷pvremove /dev/sdb1LVM 为 Linux 系统的磁盘管理提供了极大的灵活性和可扩展性,但在操作过程中务必小心谨慎,以免造成数据丢失。希望这篇博客能够帮助您更好地理解和使用 Linux 中的 LVM 功能。
  • [技术干货] Linux中Docker遇到报port is already allocated错误【转】
    在Linux系统中,当你运行Docker容器或其他服务时,如果遇到port is already allocated错误,,这意味着该端口已经被另一个进程占用,因此无法再次被分配给任何新的服务。解决此类问题,通常可以采用下面步骤操作找出哪个进程占用了端口方式一:lsof命令1lsof -i :<port_number>这个命令会列出所有绑定到指定端口 <port_number> 的进程。输出结果中,PID列显示的就是对应进程的ID。注意:冒号【:】后面不要带空格;否则会出现unacceptable port specification in的错误提示。方式二:netstat命令1netstat -tulpn | grep :<port_number>这个命令将展示所有TCP连接以及监听中的UDP端口,并通过管道配合 grep 过滤出指定端口号的行。在输出信息中,可以看到对应的PID/Program name。方式三:ss命令1ss -plnt | grep :<port_number>ss 是一个用来分析 socket 统计信息的工具,它提供了比 netstat 更高效更详细的输出。停止占用端口的进程找到占用端口的PID(进程ID),然后使用kill命令结束该进程1kill <pid>如果是Docker容器占用如果发现是某个Docker容器占用了端口,可以先列出所有正在运行的容器,并查找与问题端口相关的容器:显示当前正在运行的容器1docker ps显示所有状态的容器1docker ps -aDocker容器的状态共有 7 种:created|restarting|running|removing|paused|exited|dead。显示所有正在运行容器及其端口映射1docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}"停止并移除容器12docker stop <container_id_or_name>docker rm <container_id_or_name>重新映射端口如果你需要同时运行多个服务且它们都希望使用相同的端口,你可以为新的Docker容器映射不同的主机端口1docker run -p <new_host_port>:<container_port> ...为什么不直接kill掉Docker占用端口进程在Docker容器中,如果你知道某个进程的PID,并且想要结束该进程,理论上你可以使用 kill pid 命令来终止它。但是通常并不推荐,这是因为:隔离性: Docker 容器内部运行的所有进程都在一个独立的命名空间内,这意味着宿主机上的直接 PID 可能与容器内部的 PID 不一致。你需要首先通过 docker exec 进入容器环境,然后获取并使用容器内的 PID 执行命令。容器管理: 正常情况下,应该通过 Docker 提供的接口来管理容器及其内部服务。比如,使用 docker stop 或 docker kill 来停止或强制停止整个容器,这将确保容器按照预期的方式关闭所有服务和资源。服务稳定性: 如果直接杀掉容器中的某个进程,而不考虑容器的整体状态和服务依赖关系,可能会导致容器内部的服务状态异常、数据丢失或其他未预见的问题。服务重启策略: 在很多场景下,Docker 容器会配置为自动重启失败的服务,而直接在容器内部杀死进程可能违反了这种重启策略,使得容器无法正常恢复到期望状态。
  • [技术干货] linux 服务器无 sudo 权限非 root 用户安装特定版本 cuda -转载
    1. 下载 cuda toolkit  下载想要版本的 cuda toolkit  CUDA Toolkit 11.8 Downloads | NVIDIA Developer      [xxx@localhost ~]$ hostnamectl    Static hostname: localhost.localdomain          Icon name: computer-server            Chassis: server         Machine ID: b4258bf9bef54798b03e8e3a13756124            Boot ID: df28bae14b0a4398a6ddb7fa3ee20c90   Operating System: CentOS Linux 8 (Core)        CPE OS Name: cpe:/o:centos:centos:8             Kernel: Linux 4.18.0-193.28.1.el8_2.x86_64       Architecture: x86-64   wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run sudo sh cuda_11.8.0_520.61.05_linux.run 2 无sudo 权限安装CUDA 对于无 sudo 权限 或者 非 root 用户,在安装cuda的时候,将cuda toolkit的安装路径设置为自己有权限的目录就行,比如 /home/zhaozb/cuda-10.0,之后将后续步骤中对应cuda toolkit的安装路径都进行更改就行了 。  要实现上一步,首先需要进入tmp查看是否存在cuda-installer.log文件,如果存在,你是没法办装的,得让这个文件的所有者或者具有sudo 权限的管理员将其删除,同样,你安装完后也会生成这个文件,记得使用 rm -rf cuda-installer.log删掉!!  cd /tmp ls -l cuda-installer.log    #查看文件信息  删除  sudo 登录  sudo rm -rf cuda-installer.log 再次查看  ls -l cuda-installer.log    #查看文件信息 如果报no such file or directory表示不存在该文件,按照一下步骤安装CUDA toolkit  [@localhost software]$ sh cuda_11.8.0_520.61.05_linux.run Log file not open. cuda_11.8.0_520.61.05_linux.run: line 524: 2195323 Segmentation fault      (core dumped) ./cuda-installer ┌─┐ │  End User License Agreement                                                  │ │  -                                                                           │ │                                                                              │ │  NVIDIA Software License Agreement and CUDA Supplement to                    │ │  Software License Agreement. Last updated: October 8, 2021                   │ │                                                                              │ │  The CUDA Toolkit End User License Agreement applies to the                  │ │  NVIDIA CUDA Toolkit, the NVIDIA CUDA Samples, the NVIDIA                    │ │  Display Driver, NVIDIA Nsight tools (Visual Studio Edition),                │ │  and the associated documentation on CUDA APIs, programming                  │ │  model and development tools. If you do not agree with the                   │ │  terms and conditions of the license agreement, then do not                  │    download or use the software.      Last updated: October 8, 2021.        Preface    -    ─   Do you accept the above EULA? (accept/decline/quit):  键入accept  除了cuda toolkit其他全部取消,然后进入options    然后进入options,把X全部去掉   进入change path更改路径,因为没有root权限,没办法放入默认路径,因此更改为自己的路径即可,我更改为/home1/username/cuda-11.8(需要提前自己创建 mkdir /home1/username/cuda-11.8)        回到options界面,修改library install path,   在刚刚的路径后面新建一个mylib文件夹   回到主界面,选择install开始安装(需要等待一会),   安装好后界面如下   # <<< conda initialize <<<   export LD_LIBRARY_PATH=/home/xxx/cuda-11.3/lib64:${LD_LIBRARY_PATH} export CUDA_INSTALL_DIR=/home/xxx/cuda-11.3   export CUDA_HOME=/home/xxx/cuda-11.3 export CUDA_PATH=/home/xxx/cuda-11.3 export PATH=${CUDA_HOME}/bin:$PATH 按 i 进入insert 模式,粘贴后按 Esc,再输入 :wq 进行保存并退出  执行下列命令让更改立即生效  source ~/.bashrc  [xxx@localhost ~]$ nvcc -V nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2021 NVIDIA Corporation Built on Sun_Mar_21_19:15:46_PDT_2021 Cuda compilation tools, release 11.3, V11.3.58 Build cuda_11.3.r11.3/compiler.29745058_0  大功告成!   [xxx@localhost ~]$ sh cuda_11.3.0_465.19.01_linux.run =========== = Summary = ===========   Driver:   Not Selected Toolkit:  Installed in /home/xxx/cuda-11.3/ Samples:  Not Selected   Please make sure that  -   PATH includes /home/xxx/cuda-11.3/bin  -   LD_LIBRARY_PATH includes /home/xxx/cuda-11.3/lib64, or, add /home/xxx/cuda-11.3/lib64 to /etc/ld.so.conf and run ldconfig as root   To uninstall the CUDA Toolkit, run cuda-uninstaller in /home/xxx/cuda-11.3/bin ***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 465.00 is required for CUDA 11.3 functionality to work. To install the driver using this installer, run the following command, replacing <CudaInstaller> with the name of this run file:     sudo <CudaInstaller>.run --silent --driver   Logfile is /tmp/cuda-installer.log [xxx@localhost ~]$ vim ~/.bashrc [xxx@localhost ~]$ source ~/.bashrc [xxx@localhost ~]$ nvcc -V nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2021 NVIDIA Corporation Built on Sun_Mar_21_19:15:46_PDT_2021 Cuda compilation tools, release 11.3, V11.3.58 Build cuda_11.3.r11.3/compiler.29745058_0    3 安装并管理多版本CUDA  按照上述步骤下载安装,最后将.bashrc中CUDA 的路径更改一下即可。 ————————————————                              版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。                          原文链接:https://blog.csdn.net/qq_35831906/article/details/138415615 
总条数:1200 到第 页
上滑加载中