




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
通过密码控制GRUB的使用默认情况下,任何人无需密码都能进入GRUB编辑模式,这就有相当大的安全隐患,为此可以设置GRUB密码,只有拥有口令的用户才能修改GRUBGRUB用户名和密码,以防止非法者更改GRUB参数。(1)编辑/etc/grub.d/00_header文件,在末尾添加以下内容,然后保存该文件。cacat<EFsetueues"dipasodamnac23EOF(2)执行update-grub命令重新生成GRUB配置文件。cxcx@iup1~$uouat-rbSorigfle/t/eul/rb'Sorigfle/t/eul/rbdii-eetfg'Geeaiggubofgatonie..Fondiuxmg:/o/vlnz51.-5gnic....(3)重新启动系统,系统会要求输入开机的用户名和密码。以上设置的密码是明文的,GRUB可对这个密码进行加密。具体方法是先使用工具grub2-mkpasswd-pbkdf2生成加密的密码。cxcx@iup1~$rbmasw-bd输入口令:重新输入口令:您 的 密 码 的PBD散列为grbpkf.h5210.2CFD855462F3DE83404968A2E674DB1A3B63E51FD26DC4D7929CCBAE4489C7CD7.89C7E1481B4308F68EEABDBE57885761FAB541629B75CC9CE34B7B13EEF30E6D42B8然后将/etc/grub.d/00_header文件的password语句中的密码更换成上述以grub.pbkdf2开头头的密文。最后执行update-grub命令重新生成GRUB配置文件。UB参数的修改属于一种局部性安全设置具体实现方法是编辑tcrub.d0iux文件找到“CAS”开头的行,在行尾增加“--urstrictd CLASS="--classgnu-linux--classgnu--classos--unrestricted" 再执行update-grub命令重新生成GRUBGRUB下进行操作是就会要求提供用户名和密码进行认证。进入救援和紧急模式修复系统1.进入救援模式修复系统救援模式类似于单用户模式。在当前正常运行的系统中,执行systemctlisolaterescue.target或systemctlrescue命令可切换到救援模式。但这种情况不常用,通常是遇到启动故障时才进入救援模式。讲解动态修改GRUB引导参数时已经示范了通过修改传给内核的参数来转入救援模式,这里再示范另一种救援模式的方法。(1)按下<SHIFT>键进入GRUB界面(如图1(2)选择第2个选项“AdvancedOptionsfor2所示的界面,从列表中选择一个含有“recoverymode”的Linux内核选项并按回车键。图1GRUB开始界面 图2选择Linux内核(3从恢复菜(rcvrymu中选“rtrptortshlprmpt项并回车键,如图3所示。图3选择恢复操作(4)进入root的Shell界面,即可以root用户身份运行命令来恢复和修复系统问题,最后使用systemctlreboot命令来重启系统,如图4所示。这实际上就是救援模式。图4在root的Shell中执行命令2.进入紧急模式修复系统在紧急模式下用户进入的是单用户Shell,而不启动任何系统服务。因此,当无法启动系统进入救援模式时,就需要考虑进入紧急模式。在当前正常运行的系统中,执行systemctlisolateemergency.target或systemctlemergency命令可以切换到紧急模式。这种情况也不常用,通常是遇到启动故障时才进入紧急模式。具体方法是动态修改UB引导参数来实现与救援模式相似需要在“iu开头的那一行将行尾的字符串“$thadff”替换为“sstmd.uit=mrc.trt,按<F键启动系统再按回车键进入紧急模式如图5所示根据需要运行故障排除命令最后运行sstmctlrbt命令来重启系统。图5在紧急模式中执行命令Base(数据库)LibreOfficeBase是一个类似于MicrosoftAccess的桌面数据库程序,可以用于管理数据库,创建查询和报告以使用基础跟踪和管理用户的信息。与其他LibreOffice组件不同,Ubuntu默认没有安装Base组件。用户可以通过Ubuntu软件中心搜索安装,也可以通过Snap包或APT安装。考虑其他LibreOffice组件是通过APT预装的,这里执行以下命令通过APT安装: sudoaptinstalllibreoffice-base 如果要通过PPA安装LibreOfficeBase,需要添加相应的PPA源: sudoadd-apt-repositoryppa:libreoffice/ppa 1打开一个现有的数据库文件,或者连接到现有的数据库。图1选择数据库(仅显示部分界面)2数据库的后续操作选项,这里保持默认设置。来自任何数据库文件的数据都可注册到LibreOffice,注册表示告知LibreOffice数据所处的位置、组织方式以及如何获取数据等。图2保存并继续操作(仅显示部分界面)单“完成按钮弹出图3所示的文件保存对话框设置数据库文件的保存路径和文件名以及数据库文件格式,单击“保存”按钮。图3保存数据库文件接着打开该数据库,出现Base4所示。数据库文件包含数据库查询、报表和窗体。可以根据需要创建和编辑表格、查询、窗体和报告,这与Access非常相似。Base数据库文件格式为图4Base主界面在LibreOfficeBase中,可以访问以各种数据库文件格式存储的数据。Base本身支持某些平面文件数据库格式,如dBASE格式。也可以使用LibreOfficeBase连接到外部关系数据库,如MySQL或Oracle数据库。对于电子表格文件、文本文件和通讯簿数据等类型,LibreOfficeBase记录。调试Shell脚本通过对Shellbash脚本的调试主要是利用bash命令解释程序的选项来实现。其格式为 bash[-v|-x]脚本文件名其中,主要利用命令解释程序的选项-v或-x来跟踪程序的执行。例如:cxcx@iup1~$ah-vhelo#!bnbsh#Dsly"elool!"eco"elool!"Helool或zxzx@iuP1~$bshxhl+co'elool!'Helool!允许用户查看Shell序的执行。每个命令行被读入后,Shell按读入时的形式显示出该命令行,然后执行命令行。而选项-x也允许用户查看hell程序的执行,但它是在命令行执行前完成所有的替换之后,才显示出每一个被替换后的命令行并且在行前加前缀符“+(变量赋值语句不“+符号然后执行命令。两者的主要区别在于使用-v会打印出命令行的原始内容而使用-x则打印出经过替换后的命令行的内容。这两个选项也可以在hll脚本内部用“st-选项”的形式引用,而用“st+选项”禁止该选项起作用如果只想对程序的某一部分进行调试则可以将该部分用上面的两个语句单独划出来。Shell的数组bashC语言相似,数组元素的下标由0开始编号,获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0。在Shell中用括号来表示数组,数组元素用空格符号分割开。定义数组的用法为 数组名=(值1...值n) 下面是一个例子。 myarray=(ABCD) 也可以单独定义数组的各个元素,例如:mymyray0=Amyray1=B可以不使用连续的下标,而且下标的范围没有限制。读取数组元素值的语法格式为 ${数组[下]} 例如${mrry[]}用于读取下标为1的数组元素。使用@或*可以获取数组中的所有元素,例如${mrry[*]}或${mrry[@]}。采用以下用法获取数组元素的个数: ${#数组名[@]} 以下方法用于取得数组单个元素的长度: ${#数组名[n]} 使用bc进行浮点数运算bash仅支持整数运算,对于浮点数运算可以借助bc命令实现。该命令可以很方便地进行浮点功能强大,本身支持变量、数组、输入输出、分支结构、循环结构、函数等基本的编程元素,相当于一种特定的编程语言。作为Linux的计算器,bc支持以下3种用法。交互式数学运算。非交互式的管道运算。非交互式的输入重定向运算。在命令行中执行bc命令即可打开bc计算器,可以进行交互式计算操作。cxcx@iup1~$cbc10.1#进入交互vxym界面Coyiht91194,99,19,00,20,06,20,02217FeeSotaeFudto,I.ThsisresfwrethASLTLYOWRAY.Forealsye`arty.#默认提供欢信息,上-q-uet选项则会屏蔽12.97.595947scl=57799.7779^5594910(*)2134qucx@iup1~$#进运算#设置计算度#幂运算(方)#退出交式界面命令bc内置变量scale用于表示计算的精度,即小数保留的位数,默认值为0,所以除法运算的默不会进行自行截断。bc内置6个数学函数s()c()()分别用于计算x的正弦值余弦值和反正切值其中x参数是弧度值()用于计算x的自然对数()用于用于计算自然常数e的x次方j(,)为贝塞尔函数计算从n到x的阶数使用这些函数的前提是为bc命令加上-(--mthib选项下面给出示例。cxcx@iup1~$c-qlj(,)-.259351622e()2005393867492qutbc能转换的进制包括十六进制、十进制、八进制、二进制。内置变量ibase和obase分别用于指定输入和输出的数值的进制,默认均为十进制。下面给出示例。cxcx@iup1~$c-q5678438obs=65678110ibs=656782802FA5D4qut#默认十进制#输出值改为十六进制#输入值改为十六进制另外,可以使用前缀来表示进制类型的数值,例如以0开头的是八进制数;以0x开头的是十六进制数。bc比较运算返回值的是0(相当于flase)或1(相当于cxcx@iup1~$c-q3.<413.=403.>40qut再来看一个在Shell脚本使用bc比较浮点数大小的例子。#!#!bnbshnu=00if[$eho$nm}>9.9"|b)-q1];eneco$nm}eleeconofi本例中使用bc命令获取比较结果的返回值(0或1)之后再使用整数关系运算-eq进行判断。在Shell脚本中通常使用非交互式的管道运算。下面给出几个例子。cxcx@iup1~$co"al=;3513"|2.92cx@iup1~$ehobae1;20"|bc7D0cx@iup1~$co"al=;s12)"|c-l.988#按精度行除法运算#转换为六进制#使用内函数我们可以使用$(())或let命令将其他进制的数转换为十进制。例如:cxcx@iup1~$co$a=#11)15cx@iup1~$co$1611))439cx@iup1~$et=23cx@iup1~$co$b83#二进制十进制#十六进转十进制#八进制十进制如果有大量的数学计算,则使用输入重定向比较方便,这种方式数学表达式可以换行。一般采用以下用法:bbc<EF输入表达式EOF下面给出一个计算三角形面积的例子:cxcx@iup1~$c<<>=>=>cl=2>**12)>OF15.0在awk命令中使用BEGIN和END模块BEGIN块和END模块是awk的特殊模式。BEGIN块中的代码仅在awk命令执行前运行一次,通常用于开始处理输入文件中的文本之前执行初始化代码。END块中的代码仅在处理了输入文件中的所有行之后运行,通常用于执行最终计算或在输出内容末尾添加摘要信息。使用BEGIN和END模块的用法如下: awk[选项]...'BEGIN{开始代码块}模式{操作}END{结束代码块}'[输入文件]... 这样的awk脚本由BEGIN代码块、能够使用模式匹配的通用代码块、END代码块3部分组3cxcx@iup1~$l/t/*cnf|wkBGN{iz=;}sz=ie$;rit文件名:"$9"容量"5}D{rnt总容量"sze'文件名:ecadsrcof容量328文件名:ecagcnf容:4文件名:ecaptem.nf容量7文件名:ecblt.onf容量:22文件名:ecc-etfite.of容量:52文件名:ecdbofcof容量269文件名:ecdlsrcof容量6文件名:ecesrbcof容量6文件名:ecfrndcof容量20文件名:ecfs.of量:6文件名:ecgicnf容:284文件名:echpr.onf容量:436文件名:echs.of量:92文件名:eckre-mgonf容:10文件名:eckreopsonf容:308文件名:ecl.ocnf容量:34文件名:eclbocnf容量:27文件名:eclbui.cf容:91文件名:eclgoae.nf容量5文件名:ecmef.onf容量:7文件名:ecntci.cf容:04文件名:ecntbe.cf*容量2文件名:ecnsic.cf容:42文件名:ecpmcnf容:5文件名:ecpmpacof容量749文件名:ecrsl.onf容量:39文件名:ecrylgcof容量182文件名:ecrglcnf容量:520文件名:ecsnos.cf容:093文件名:ecsd.of量:473文件名:ecsd_f容:990文件名:ecsst.onf容量:255文件名:ecufcnf容:160文件名:ecubmdswchcnf容量123文件名:ecwdmcnf容量:143文件名:ecxtrcnf容量:6总容量:1365BEGIN代码块中初始化内部变量size;中间的代码块逐行计算文件容量的和,同时输出文件名及其容量;ENDawk命令提供输入文本供其处理。Makefile的高级特性Makefile支持隐式规则、变量定义、文件包含等高级特性。这里根据高级特性将Makefile基础部分的示例修改如下,然后再结合这些内容讲解一些高级特性。##第1部分obets=anoiptootu.oomn.ois.otl.o#第2部分tetdt:$ojcs)cc-odt$ojcs)#第3部分mano:df.hinu.o:eshcma.hcomn.o:eshcmndoupto:df.huf.hineto:df.huf.htol.o:esh#第4部分.POY:cenclan:rmeit(bet)1.隐式规则令。make功能很强大,可以自动推导文件以及文件依赖关系后面的命令,这就是Makefile的隐式本例中第3部分利用隐式规则简化文件依赖关系的描述。make每发现一个.o地把相应的.cmake找到main.c作为main.o的依赖文件,并且后续命令cc-cmain.c也会被自动推导出来,于是可将上例的两行描述内容:mamano:mi.ce.hcc-can简写为一行描述内容: main.o:defs.h 这只是最常用的一个隐式规则。实际上最新的make支持的隐式规则非常多,可以通过选项-p来查看所支持的全部隐式规则。2.变量定义在MakefileC/C++语言中的宏,当Makefile命令等要素中,以及Makefile的其他部分。变量的名字可以包含字符数字下划(可以是数字开头但不应该含“:#=空字符(空格、回车等。变量名区分大小写。变量在声明时需要赋初值而在引用时需要在变量名前加“$符号而且最好使用小括(”或大括号“{}”将变量给包括起来。如果变量名中要使用“$”字符,那么需要用“$$”进行转义。本例第1部分声明变量objects: objects=main.oinput.ooutput.ocommand.ofiles.outils.o 第2部分引用变量:tetetdt:$ojcs)cc-odt$ojcs)变量会在使用它的地方精确地展开,就像C/C++中的宏一样,展开后的代码如下:tetetdt:mi.onuouptocmadofesotosocc-oetdtmi.opu.ouptocmadoflsouiso变量用“=”赋值时,表示变量被引用时才展开。如果改用:=”赋值,表示变量在赋值时就立刻展开。例如: CC:=gcc-g 还可以在变量中引用变量可靠的做法是使“:=给被引用的变量赋值要在当前变量中引用变量,被引用的变量必须先定义。例如:CCC:=ccCCM=$C)-MMakefile能出现在规则的定义中,根据规则的目标和条件取值。常用自动变量列举如下。$@:代表规则中的目标文件名。依赖文件。$?:所有比目标新的依赖文件的集合,以空格分隔。$^:所有的依赖文件(条件定义)的集合,以空格分隔。3.伪目标上例提到过一个名为“can”的目标,这是一个伪目标。伪目标并不是一个文件,只是一个标签,因而me无法生成它的依赖关系和决定它是否要执行。只有通过指明这个目标才能让其生效。当然,伪目标的命名不能和文件名重名。为了避免与文件重名的这种情况可以使用一个特殊的标“.POY来显式地指明一个目标是伪目标向me说明不管是否有这个文件这个目标就是伪目标本例第4部分就是这样一个例子。标,只要将其放在第1个即可。如果Makefile需要一下子生成若干个可执行文件,但又只想简单地用一个make命令实现,并且所有的目标文件都写在一个Makefile中,那么可以使用伪目标这个特性,例如:allall:rgapo_br_c.POY:alMfie中的第1个目标会被作为其默认目标这里第一行声明“l目标依赖于pra等其他3个目标第2行显式声“这个目标为伪目标由于伪目标总是被执行所以其依赖的3个目标总是不如“l”这个目标新,这样也就会被执行。4.使用通配符me支持通配符“*“?“[...]用于代替一系列的文件“*.c表示所有扩展名为c的文件。下面的例子表明执行mecn命令将删除所有的目标文件。clcla:rm-f*.o如果文件名中包含有通配符,如“*,则可以用转义字符“,如“*”来表示“*”这个字符。5.文件包含在一个Makefile文件中可以引用另一个MakefileC语言中的include的文件会放在当前文件的包含位置。具体的语法格式是:include<文件名> 可以引入任意多个文件,多个文件用空格分隔,也可使用通配符和变量来表示被引用的文件名。录下没有找到,mae还会在me选项-(--icude-dir)指定的目录下去寻找。基于基于Qt的图形用户界面编程与GTK+相比,Qt不仅是GUI库,而且具有编程语言功能,拥有更好的开发环境和工具,能很好地支持桌面、嵌入式和移动应用。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是一个跨平台应用程序和UI开发框架。使用Qt只需一次性开发应用程序,无需重新编写源代码,便可跨不同桌面和嵌入式操作系统部署这些应用程序。1 Qt简介Qt是一个跨平台的C++开发库,设计思想是同样的C++代码无需修改就可以在Windows、Linux、macOS等平台上使用。它使开发人员专注于构建软件的核心价值,而不是维护API。Qt起初是由C++图形用户界面应用程序开发框架,现在又被Digia桌面、移动端等所有目标平台。用户可以使用Qt设计、开发和部署用户界面和应用程序。Qt的设计工具QtDesignStudio具备现成UI组件的可视化2D/3D编辑器,涵盖从原型设计到产品开发各阶段。该工具易于使用的设计工具,允许设计师将设计从Sketch和Photoshop导入Qt,对其进行定制和动画制作,并将其转化为开发者可以使用的QML代码。QML全称QtMeta-ObjectQt便捷地开发出用户界面,包括桌面应用、移动设备和嵌入式应用的界面。Qt的开发工具QtCreator是响应性强、直观的跨平台IDE,拥有各种简化开发者工作的工具,具备语法完善功能的代码编辑器,以及可视化的调试和分析工具。QtCreator不仅可以帮助编写代码,还可以帮助完成构建、编译、测试、本地化等任务。Qt的开发框架QtFramework包含一整套高度直观、模块化的C++库类,拥有丰富的API可简化应用程序的开发。QtFramework是Qt在所有平台、操作系统上运行的基础,适用于大多数应用程序。用户使用这些Qt库和API就可以为移动、桌面和嵌入式系统开发具有本机C++性能的软件。QtFramework分为QtEssentials和Qt扩展模块两大类别。QtEssentials定义了Qt在所有平台上的基本组件,主要包括QtCore:其他模块使用的核心非图形类。QtGUI:包括OpenGL在内的图形用户界面组件基类。QtMultimedia:音频、视频、广播和照相机功能的类。QtNetwork:使网络编程更容易和更可移植。QtQuick:使用自定义用户界面构建高度动态的应用程序的声明性框架。QtSQL:使用SQL进行数据库集成的类。Qt扩展模块包括通过从位置服务、图表到3D渲染的特殊用途模块,具体列举如下。QtOpenGL:OpenGL支持类。QtWaylandCompositor:提供开发Wayland合成器的框架。QtSensors:提供对传感器硬件和运动手势识别的接口。QtWebView:通过使用平台固有的API在QML应用程序中显示Web内容。QtSafeRenderer:可用于渲染功能安全系统中的安全关键项目的UI渲染组件。QtSCXML:提供从SCXML文件创建状态机并将其嵌入应用程序的类和工具。Qt具有广泛的跨平台和语言支持,用户可以在或macOS平台上设计和开发Qt使用QMLC++C++之外,Qt还可以使用和其他社区支持的语言绑定,也就是说开发人员可以使用脚本语言开发基于Qt统(RealTimeOperatingSystem,RTOS)等操作系统,应用程序的部署范围从裸机微控制器延伸到高端的计算机上。最新版本Qt6旨在成为打造面向未来生产力平台的基石。我们可以使用Qt6的同一套工具设2D和3D用户界面,实现下一代用户体验。Qt6更加注重可扩展性,既可以在超低成本硬件上部署类似于智能手机的用户界面,又可以在超级计算机上部署高级图形用户界面应用。Qt安装t开放源码,并且提供自由软件的用户协议,这使得它可以被广泛地应用在各平台上的开放源码软件开发中。t也提供商业版,使用商业版需要向igia公司购买授权。用户可以选择P授权版本,到t官网去下载,注意需要注册账户,在后面的安装过程中也需要提供注册账户信息。t安装比较简单本例下载的是4位的t6的iux版本文件名是qt-uifid-iu-6-..2-i.ru。.run文件是一个由安装脚本和安装程序组成的程序安装包。下面示范在Ubutu中的安装过程,在安装过程中需要在线下载软件包,需要保持互联网正常访问。Ubuntu需root特权)先为该文件增加可执行权限,再启动Qt设置向导,出现欢迎安装的对话框。cxcx@iup1~$hodxq-nfe-iu-6-5.-nierncx@iup1~$/tufidlnxx4452oin.un(2如图1所示首先填写t注册账户及其密码如果没有注册还可以单“注册链接去申请注册账户。图1提供Qt账户信息(3)单击“下一步”按钮,出现“Qt开源使用义务”对话框,勾选“我已阅读并同意使用开源Qt的条款和条件”复选框。(4)单击“下一步”按钮,出现“欢迎使用开源Qt安装”对话框。(5)单击“下一步”按钮,开始下载元信息,直至完成元信息的下载。(6)单击“下一步”按钮,出现“ContributetoQtDevelopment”对话框,选择是否能为Qt开发做贡献,这里可以选择第2个单选钮,不向厂商发送用户统计信息。(单“下一步按钮出“安装文件夹对话框指定将安装的目录这里采用默认设置/home/cxz/Qt。作为示范,勾选“Custominstallation”复选框进行定制安装。(8)单击“下一步”按钮,出现图2所示的对话框,选择要安装的组件。Qt的模块化架构便于用户按需选择。图2选择要安装的组件(“下一步按钮出“许可协议对话框选“PL3ithtCmpyPLcptinicseArmt,同意P3许可协议。(10)单击“下一步”按钮,出现“准备安装”对话框,单击“安装”按钮开始安装。(11)安装过程中会下载软件包,安装完成会给出提示信息。(2单“下一步按钮出“正在完成t向导对话框默认勾“uchtCrtr”复选框,单击“完成”按钮。默认将启动QtCreator,首次启动会出现欢迎界面,如图3所示。图3QtCreator欢迎界面QtCreator使用QtCreator是专门针对Qt程序员定制的跨平台集成开发环境,可以在Windows、Linux和macOS桌面操作系统上运行,并允许开发人员在桌面、移动和嵌入式平台创建应用程序。QtCreator功能和特性QtCreator具有以下功能和特性。Creator的高级代码编辑器支持和其他语言编写代码。它具备代码补全、语法突出显示,重构等功能,内置文档随手可得。Creator和Mercurial。 集成的用户界面设计器。QtCreator提供了两个集成的可视化编辑器。一个是通过QtWidget生成用户界面的QtDesigner,这是功能强大的跨平台GUI布局和表单生成器,可以使用传统C++QtAPI的图形用户接口的基础是QWidget,Qt中所有类型的GUI组件如按钮、标签、工具栏等都派生自QWidget。每一个GUI组件都是一个Widget,Widget还可以作为容器,在其内包含其他Widget。另一个可视化编辑器是QtQuickDesigner,用于以QtQML语言编写用户界面文件,帮助开人员从头开始或基于现成的UI控件快速设计和构建QtQuick应用程序和组件。项目和版本管理。无论是导入现有项目还是创建一个全新项目,QtCreator都能生成所有必要的文件,包括支持Cmake和用qmake进行交叉编译。多种系统选择。QtCreator支持在桌面、移动和嵌入式操作系统上构建并运行软件。构建设置使开发者可以轻松地在目标之间切换。Qt设备模拟器。QtCreator支持在与目标设备几乎相同的条件下测试、调试应用程序。QtQUICK编译器。QtCreator将源代码编译为本地机器代码,加快启动时间和UI性能,并保护源代码和知识产权。QtCreator开发示例从应用程序列表中打开QtCreator,出现QtCreator的欢迎界面。参见图Creator支持模式选择栏6个图标进行切换,根据不同的模式,右侧窗格中显示不同的窗口。这里先创建项目,然后简单示范图形用户界面的设计。(1)在QtCreator欢迎界面中单击“创建项目”按钮,启动项目创建向导。当然也可以从文件菜单中选择命令来创建项目。(2出现图4所示的窗口选择项目模板这里“项目列表中选“Appicti(t)类型,再在中间窗格中选择“tWidtsAppicti”子类型。这是一个桌面应用程序。图4选择项目模板注意QtQuickApplication支持QML和C++混合编程,可以使用QML快速构建界面,再使用C++完成关键算法和逻辑。(3)单击“选择”按钮出现图5所示的窗口,设置项目名称和项目文件存放位置。(4单“下一步按钮出现图6所示的窗口选择构建系统本例选“qmk这是t自己的构建系统。如果选择跨平台的CMakeCMakeLists.txt,比较麻烦。图5设置项目名称和路径图6选择构建系统(5)单击“下一步”按钮出现图7所示的窗口,设置类信息。这里使用默认的主窗口类MainWindow。图7设置类信息(单“下一步按钮出“rstinFi对话框选择用户界面语言翻译文件这里保持默认设置,不提供任何翻译文件。()单击“下一步”按钮出现图8所示的对话框,选择构建套件。这里保持默认设置,仅勾选“stpt..0CC4bit”复选框。9制系统,这里不进行更改。(9)单击“完成”按钮完成项目创建,QtCreator中将出现图10所示的项目管理界面。图8选择项目要使用的套件图9项目管理汇总信息图10项目管理界面(展“项目导航树中“界面文件节点本例中将出现一个名为miido.ui的文件,双击打开该文件将出现界面设计界面窗口。()如图11所示,从左侧Widgets列表中将“DisplayWidgets”下的Label元件拖放到中间窗口的主窗口中并在右侧窗口下部区域设置其属性这里单“text属性值区域的按钮弹“编辑文本对话框将该标签的显示文本设置“HelloWorld!并单“确定按钮关闭该对话框。
图11图形用户界面设计(12)从“文件”菜单中选择“保存所有”命令,保存项目中所有更改的文件。(13)单击左下角的运行按钮(绿色三角形)或者从“构建”菜单(如图12所示)中选择“运行”命令,编译并运行该程序。正常运行会弹出图13所示的窗口。 图12“构建”菜单 图13运行结果执行运行命令时,切换到“编译输出”窗口,将显示整个编译过程,如图14所示。图14编译输出信息项目编译时默认是debug版本,会将以debug方式编译生成的可执行文件存放在相应的debug目录例中为位于主目录下的build-testqt-Desktop_Qt_6_5_0_GCC_64bit-Debug子目录。因为其中包含了调试信息,所以可执行文件比较大。要发布程序,就要以release方式编译生成的可执行文件。(5发布程序单击左下角的按钮或者从“构建菜单中选“打开构建运行构建套件选择器命令弹出图5所示的窗口选“Res项然后重新执行运行命令将以lse方式编译生成的可执行文件存放在相应的ese目录,例中为位于主目录下的buid-tstqt-stp_t60CCbit-Rese子目录如图6所示因为其中没有包含调试信息,所以可执行文件比较小。可以从该目录中将可执行文件复制出来,打包进行发布。 图15选择构建方式 图16项目发布目录使用update-java-alternatives管理Java版本updt-j-trntis是专门用于管理a版本切换的工具,它依赖pdt-trtis的注册。使用AP、dpg或PPA安装的a版本已经自动完成相关设置,包括使用updt-trtis--istl注册所需的候选项,并且创建了updt-j-atrtis专用的usribjm.<名称.jifo配置文件。可以直接使用该命令查看已经配置好的可供选择的Java版本:cxcx@iup1~$paeav-lentvs-ljaa11.-pnd-mam64jaa1-rce11ur/i/v/aa11.-end-01urlbvmjv-7oale其中第1列是jname(已安装的JavaJava安装包手动安装的a版本,虽然可以使用updt-trtis命令进行版本管理,但是无法使用updt-j-trtis命令进行管理。原因就是缺乏相应的.ifo配置文件,这是一个隐藏文件,定义了updt-j-trntis工具管理a版本所需的必要信息。可以进行如下查验操作:cxcx@iup1~$s-lsrlbjm..ifo-r--r-1otrot207 1月201:7/s/lbjm.aa11.-end-am6.ifo-r--r-1rotot1914月6117uribjm.aa1-rceino手动安装的Java必须自行创建.jinfo配置文件。这里参照安装OpenJDK时自动生成的usribjm.ja-1-rcl.jifo文件为手动安装的OrceDK8创建一个配套的usribjm.ja--rcl.jifo文件,内容如下:nanaejv--rcala=aa8oaleproiy30jdkaa/s/i/v/va8oal/i/aajdkaacurlbjmav--rcebnjv其中priorityJava命令)和Java编译器(javac命令)的可执行文件路径。再次执行updt-j-atrtis-l命令查看已经配置好的可供选择的Ja版本:cxcx@iup1~$paeav-lentvs-ljaa11.-pnd-m4 111 /s/ijv/aa11.-pndam64jaa1-rce 01 urlbvmjv-7oalejaa8oale 00 /urlbvmjv--rc即可发现,手动安装的OrceK8也被纳入updt-j-trntis工具管理了。这样就可以使用updt-jav-trtis-s命令明确指定要切换的aa版本了。cxcx@iup1~$uouat-aaatraiessjv--rcupaeatraie:误:无asich的候项upaeatraie:误:无acsisetr的候选项upaeatraie:误:无acswler的选项upaeatraie:误:无iit的候项upaeatraie:误:无lst的候项upaeatraie:误:无tb的候选项本例出现缺失几个候选项的错误提示这是因为针对OraceK8提供的updt-trtis注册信息仅包含java和javac等命令的候选项,jabswitch等命令的候选项未提供,这不影响Java的基本使用,通常只需使用java和javac。执行以下命令验证Java版本的切换成功。cxcx@iup1~$aa-erinjaavrin".._6"JaaT)SEutmenromntbid1803-b9)JaaHtptT)6-itSevrVMbid2.6b0,mxdmd)cx@iup1~$aacvesonjaac.._61可以发现,与updt-atrtis需要分别为每个命令进行版本切换不同,update-j-alternatives可以一次性将所注册的Java命令全部进行版本切换。如果执行sudoupdt-j-trtis-a命令则自动根据.jifo配置文件中的优先级设置来切换a版本,例如:cxcx@iup1~$uouat-aaatraiesaupaeatraie:误:无asich的候项upaeatraie:误:无acsisetr的候选项upaeatraie:误:无acswler的选项upaeatraie:误:无iit的候项upaeatraie:误:无lst的候项upaeatraie:误:无tb的候选项执行以下命令验证Java版本的切换。cxcx@iup1~$aa-erinopndkeson1.."030-OpnDKutmenioentbid1..81-stUut-uut120OpnDK4BtSrerVM(uld101+0pstUut-uut120,mxdmoe,hrncx@iup1~$aacvesonjaac1018最后尝试手动切换到OracleJDK17。cxcx@iup1~$uouat-aaatraiessjv-7oaleupaeatraie:误:无asich的候项upaeatraie:误:无acsisetr的候选项upaeatraie:误:无acswler的选项upaeatraie:误:无iit的候项upaeatraie:误:无lst的候项upaeatraie:误:无tb的候选项upaejv-lentv:dklentveosnotxs:/s/i/v/jv-17oal/i/asichupaejv-lentv:dklentveosnotxs:/s/i/v/jv-17oal/i/acsipetupaejv-lentv:dklentveosnotxs:/s/i/v/jv-17oal/i/acswkerupaejv-lentv:dklentveosnotxs:/s/i/v/jv-17oal/i/iitupaejv-lentv:dklentveosnotxs:/s/i/v/jv-17oal/i/lstupaejv-lentv:dklentveosnotxs:/s/i/v/jv-17oal/i/tb手动安装Eclipse集成开发环境我们可以从Eclipse官网下载安装器或软件包来手动安装Eclipse集成开发环境。1.使用Eclipse安装器安装使用Eclipse安装器是Eclipse集成开发环境最容易的安装方式。我们可以从Eclipse官网下载Eclipse安装器,再进行安装,安装过程中需要能够访问因特网。(1)从官网下载Eclipse安装器软件包。可以从官网获取下载地址。cxcx@iup1~$wethts//t.zymgt-u.cj/u/cis/ophep22-3Relp-is-r-iu6.a.(2)将下载的安装包解压缩到/opt目录。 cxz@linuxpc1:~$sudotar-xfeclipse-inst-jre-linux64.tar.gz-C/opt (3)执行以下命令启动Eclipse安装器程序。cxcx@iup1~$d/pecis-ntlercx@iup1/p/cie-ntle$.elpenst1所示的EclipseIDE。该安装器可选择多种程序语言或不同开发目的E,这里选择“EcipseEfraDpr,即安装a开发版本。图1选择要安装的IDE(出现图2所示“EcipseEfrapr安装界面选择安装选项这里保持默认设置,单击“ISAL”按钮。图2选择安装选项(6)弹出图3所示的安装许可设置对话框,单击“AcceptNow”按钮,接受许可。图3接受安装许可(7)Eclipse安装器程序连接到官网下载软件包并进行安装,安装完毕出现图4所示的对话框,单击“LAUCH”按钮启动Eclipse。图4Eclipse安装完毕(首次运行Ecipse将弹出图5所示的对话框定义工作空(Wrspc即软件项目要存放的位置。勾选“Usethissthedfutdtskin”复选框,会将当前指定的路径作为默认工作空间,下次启动时将不再提示定义工作空间。单“uch按钮将弹出欢迎界面给出常见操作的快捷方式关闭欢迎界面将进入Ecipse工作台(集成开发环境,可以在其中创建和管理项目。图5定义工作空间使用Eclipse安装器安装集成开发环境EclipseIDEforJavaDeveloper,会自动创建相应的快捷图标,如图6所示,便于用户直接从应用程序列表中直接启动Eclipse。图6应用程序列表2.手动安装Eclipse也可以采用另一种安装方式,直接从Eclipse官网下载EclipseIDEforJavaDeveloper的安装包来进行手动安装。使用浏览器访问官网地址https:\h//www\h./downloads/packages,可以找到该安装包的下载地址进行下载,如图7所示。图7访问Eclipse将下载的安装包(cips-ja-223-3--iu-t-_.tr.gz)解压缩到opt目录中。打开ptcipse文件夹,双击cipse文件即可启动Ecips。建快捷方式要在/usr/share/applicaitons目录中创建一个快捷图标文件。这里创建eclipse.desktop文件,输入以下内容并保存。[D[DstpEty]EnoigUF8NaeElpeComn=ciseExExc/p/cis/ciIcn/p/cis/cnpmTemnlfleStruNtf=reTyeApiain其中Exec和Icon分别指定要运行的应用程序的文件路径和它的图标的文件路径。这样就可以从应用程序列表中找到Eclipse图标并通过它启动Eclipse。PHP版本切换实际开发中可能需要多个PHP版本并存例如之前使用PHP5开发的程序在PHP7环境进行测试和调试可能会出现一些兼容性问题解决这个问题的最佳方式是使用cr容器系统为不同的PHP版本建立独立的运行环境或者在Ubutu系统上单独创建虚拟机这对Ubutu系统资(特别是内存要求较高还有一种更常用的方式是使用updt-trtis版本管理命令来进行PHP版本切换。下面重点介绍这种方式。本例已通过LAMP安装建立了PHP8.1版本运行环境,查看当前运行的PHP版本:cxcx@iup1~$hpvCantladdbg-itwasledyoddPHP..-uut211li)bit:eb2223225:8)NS)Coyihtc)heHPoupZedEgne412,orihtc)edTcnlieswthdbgv..,Coyihtc)0222,byeikRtaswthedOccev.121bnu.1,oyghtc,byedTcnoges这里依次执行以下命令再创建一个PHP7.2版本的运行环境。susuoadatrpstry-ypaode/hpsuoatisalpp.2默认已经针对updt-atrntis版本管理创建了php的候选项,可执行以下命令查验:cxcx@iup1~$paeltraies-ipayphp-自模式最链接版本为urbnph81链接目前向/s/i/h8.1链接pp指向/urbnhp从接pp1gz指向ur/hr/a/a1pp1z/urbnpp.2-优先级72次要pp1.z/s/hremnmn/h721gz/urbnpp.1-优先级81次要pp1.z/s/hremnmn/h811gz执行以下命令切换到PHP7.2版本: sudoupdate-alternatives--setphp/usr/bin/php7.2 再次查看当前运行的PHP版本:cxcx@iup1~$hpvPHP723-8uut2.4.+e.uyog1ci)(bit:Fb4038284)(TS)Coyihtc)97218TheHPrupZedEgne320,orihtc)98218edTcnlgeswthZndPahe7..43+bnu20.de.uyog1,Cprhtc)19921,byedTcolges这表明此时已经切换到PHP7.2PHP运行环境仅限于PHP命令行,要在Apche服务器上切换到PP.2版本,可以直接修改相关的模块配置文件,更简便的方法使用Apche提供的专门工具来启用和停用相应的配置文件2md命令根据模块配置文件名称在mds-bd目录中创建指向mds-ible目录相应模块配置文件的符号链接,而2dismd命令则是反过来删除mds-bd目录中的符号链接。列出当前可用的PHP模块配置文件:cxcx@iup1~$s/tapce/osaalbehp*/ecaah2md-vibl/h72cnf/ec/pce/os-avial/h72ladet/pce/osaallepp..of/t/pch2md-avial/h81lad列出当前启用的PHP模块配置文件:cxcx@iup1~$s/tapce/osealdp*/ecaah2md-nbd/h81cnfet/phe/osealdpp.lo可以发现,当前使用的是PHP8.1版本。执行以下命令禁用PHP8.1版本:cxcx@iup1~$uoaisodh81ladMouepp.1iald.Toatvteheewoigrto,yunedoun:sseclrsartphe2执行以下命令启用PHP7.2版本:cxcx@iup1~$uoanmdpp..odCosdrngeednypmpeokfrpp.:Cosdrngofitm_eetfrmmpeok:Cosdrngofitm_wrerorp_rfr:MouemmpeokardyealdCosdrngofitp5orh72:Enbigmdleh72.Toatvteheewoigrto,yunedoun:sseclrsartphe2根据提示重新启动Apache服务: cxz@linuxpc1:~$sudosystemctlrestartapache2 再次列出当前启用的PHP模块配置文件:cxcx@iup1~$s/tapce/osealdp*/ecaah2md-nbd/h72cnfet/phe/osealdpp.lo可以发现,Apache当前使用的PHP版本已经切换到7.2。打开浏览器进行测试,发现已经改为PHP7.2版本的Web运行环境,如图所示。PHP7.2版本的Web运行环境如果需要切换到PHP8.1版本,使用a2dismod和a2enmod命令来操作相应的模块配置文件符号链接即可。Python版本切换如果同时安装有多个Pthon版本那么除了使用不同的版本号运行不同的版本外还可以使用updt-trtis工具配置版本切换。updt-atrntis是ubutu系统中专门维护系统命令链接符的工具通过它可以很方便地设置系统默认使用哪个命令哪个软件版本这里要实现多个Pthn版本的切换,即根据需要选择不同的版本作为默认版本。首先查看当前updt-atrntis可用的Pthn版本:cxcx@iup1~$paeltraies-ipaythupaeatraie:误:无yhn的候选项cx@iup1~$paeltraies-ipaythn3upaeatraie:误:无yhn3的候项结果表明,本例环境的Python3.10和Python3.11个版本安装注册候选项,依次执行下列命令:cxcx@iup1~$sdoudaeatraies-italurbnpto3yto/urbnpto31000upaeatraie:用urbnpto310来在自动模式中提供urb/pto(pto3)cx@iup1~$ uo upaeatraies intll urlclb/ptopyhn3urlclbnyto31100upaeatraie: enmng/urlclbnpto3ptolnk rm /s/i/yhn3 upaeatraie: 使用 urlclbnpthn.1 来在自动模式中提供/urlclbnpto3pyhn)最后一个参数指定了候选项的优先级,如果没有手动来设置候选项,那么具有最高优先级的选项就会被选中例中为usrcbiptho3.1设置的优先级为3所以updt-atrtis命令会自动将它设置为默认Pthn版本。再次查看当前updt-atrntis可用的Pthn版本:cxcx@iup1~$paeltraies-ipaythn3pyhn3-自动式最链接版本为urlcl/i/yhn.1链接目前向/s/oa/inpto311链接pton3指向uroclbnpto/urbnpto310-先级00/urlclbnpto31-优级3可以发现,Python3.10和Python3.11两个版本已作为候选项了。尝试执行以下命令选择要使用的默认Python版本:cxcx@iup1~$uouat-lentvs-cngyhn3有2个候选可用于替换yho3(提供urlclbn/yhn)。选择路径优先级状态-------------------------------*0 /s/oabi/yhn.1 00 自模式1 urbnpthn.0 20 手动模式2 urlclbi/yhn.1 00 手模式要维持当前值*请按<车键,或者键入选择的号:1upaeatraie: 使用 /urbnpto3.0 来在手动模式中提供/urlclbnpto3pyhn)完成选择之后,再次执行命令查看当前所使用的Python版本。cxcx@iup1~$yhn3--esonPyhn31.6结果表明,已成功切换到Python3.10版本。接下来,切换到自动模式,可以发现又切换到Python3.11版本。 cxz@linuxpc1:~$sudoupdate-alternatives--configpython3 有有2个候选可用于替换yho3(提供urlclbn/yhn)。选择路径优先级状态-------------------------------要维持当前值*请按<车键,或者键入选择的号:0upaeatraie: 使用 urlclbnpthn.1 来在自动模式中提供/urlclbnpto3pyhn)cx@iup1~$yhn3--esonPyhn31.20/usr/local/bin/python3.11300自动模式*1/usr/bin/python3.10200手动模式2/usr/local/bin/python3.11300手动模式管理Node.js版本有时我们可能要同时开发多个项目,而每个项目所使用的Node.js版本不同,或者要用更新的版本进行试验和学习,在一台计算机上处理这种情况比较麻烦,而使用多版本Node.js管理工具就会变得很方便。nLinuxWindowsnvm是专门的Node.js版本管理器,全称NodeVersionManager,它与n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论