




已阅读5页,还剩126页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2020/6/8,1,第二章Linux常用命令,zhangyuxiang2004.4.20,2020/6/8,2,零、Linux文件系统的特征,2020/6/8,3,1.没有C:D:的东西,只有目录2.不是扩展名为就是执行文件,是看文件本身有无x(执行)的属性3.文件名分大小写,abc.txt和ABC.txt是不同的文件4.文件名长度可达256个字节,其中不可包含*?|等符号5.想把文件或目录隐藏起来,第一个字用“.”6.没有“资源回收站”,删除文件时请小心,2020/6/8,4,一、Linux目录树结构,2020/6/8,5,yxzhangtsaiyxzhang$cd/yxzhangtsai/$ls-ltotal153drwxr-xr-x2rootroot4096Feb1002:06bindrwxr-xr-x3rootroot4096Feb1000:05bootdrwxr-xr-x17rootroot77824Feb1114:45devdrwxr-xr-x41rootroot4096Feb1615:18etcdrwxr-xr-x8rootroot1024Feb922:44homedrwxr-xr-x2rootroot4096Jun222001initrddrwxr-xr-x6rootroot4096Feb1002:12libdrwxr-xr-x2rootroot16384Feb1005:35lost+founddrwxr-xr-x2rootroot4096Aug3000:10miscdrwxr-xr-x3rootroot4096Feb922:05mntdrwxr-xr-x2rootroot4096Aug241999optdr-xr-xr-x102rootroot0Feb1122:45procdrwx-4rootroot4096Feb1615:25rootdrwxr-xr-x2rootroot4096Feb1421:28sbindrwxrwxrwt2rootroot4096Feb1615:40tmpdrwxr-xr-x16rootroot4096Feb1001:28usrdrwxr-xr-x20rootroot4096Feb1421:41var,2020/6/8,6,2020/6/8,7,Linux目录介绍(1),2020/6/8,8,Linux目录介绍(2),2020/6/8,9,Linux目录介绍(3),2020/6/8,10,Linux目录介绍(4),2020/6/8,11,Linux目录介绍(5),2020/6/8,12,二、VI编辑器,2020/6/8,13,VI编辑器,VI是全屏幕编辑器,为LINUX系统的主要编辑器。本章主要内容Vi的工作方式Vi的启动与退出文本输入光标移动(插入方式、命令方式)文本修改编辑文件,2020/6/8,14,Vi的启动与退出,(1)vi的启动输入vi命令后,便进入全屏幕编辑环境,此时的状态为命令方式。vi文件名(2)vi的退出建议:首先键入“ESC”键,以确保当前vi的状态为命令方式,输入下列命令,退出vi。:w将编辑缓冲区的内容写入文件:q退出vi:wq将上面两步操作可以合成一步来完成。:q退出vi,此时的正文没有被更改过。:q!强行退出vi,使更新内容不写回文件。,2020/6/8,15,vi的名字取自于visual。有两种操作方式:命令方式和输入方式命令方式下输入的大、小写是敏感的。,Vi的工作方式,命令方式,输入方式,编辑文本,输入文本,a,A,i,I,o,O,ESC,vi,2020/6/8,16,文本输入,命令结果-a将输入文本插入在光标之后A将输入文本插入在当前行的行尾i将输入文本插入在光标之前I将输入文本插入在当前行的开始o将在当前行的下一行处打开一新行O将在当前行的上一行处打开一新行注意ESC:使编辑状态从输入方式切换到命令方式,插入命令,附加命令,打开命令,2020/6/8,17,命令方式下光标移动,注释字:是由空格或标点符号分开的字母序列。句子:是以句号(.)、问号(?)或感叹号(!)结束的字符序列,句子之间由两个空格或一个回车分开。段落:一个段落前后各有一个或多个空白行。,2020/6/8,18,、字符及行间移动命令结果或k向上移一行或j向下移一行或h或退格键左移一个字符或l或空格右移一个字符o移到当前行的开始$移到当前行的结尾+或回车符移到下一行的开始-移到上一行的开始,2020/6/8,19,命令方式下光标移动(续),2、其它单位的移动命令结果-w移到下一个字或标点符号W移到下一个字e移到这个字或标点符号的结束E移到字的下一结尾b回到字或标点符号的开始B移回到字的开始)移到下一个句子的开始(移到这个句子的开始移到下一段落的开始移到这一段落的上一开始,2020/6/8,20,文本修改(命令方式下),删除文本1.x与X命令的使用命令结果-x删除当前字符。nx删除从当前字符开始的n个字符。X删除当前字符的前一个字符。nX删除当前字符的前n个字符。注意n为数字,为1时可省略。,2020/6/8,21,2.d与D命令的使用用来将指定范围内文本删除,并存入缓冲区。命令结果-ndw删除以当前字开始的n个字。nd$删除以当前字符开始的n行字符。ndd删除从当前行开始的n行。D与d$同义。d)删除到下一句的开始。d删除到下一段的开始。d回车删除两行。,2020/6/8,22,命令结果-.重复上一次所执行的命令。u取消最后一次所做的修改或删除。U取消此次到当前行来做的所有修改。,重复和取消操作,2020/6/8,23,三、Linux常用命令,2020/6/8,24,Linux常用命令,Linux进入与退出系统文件操作命令命令的输入和输出目录操作命令有关口令、权限和帮助的命令有关进程管理的命令有关软盘的使用命令有关光驱的使用命令访问Windows分区的命令,2020/6/8,25,Linux命令的一般格式,命令名称选择项参数选择项:用来扩展命令的特性或功能。连字符+字母$ls-l参数:表示命令的自变量,如文件名,参数值等。如:$lsl/home/zhangyx,2020/6/8,26,启动telnet服务,zhangyxlocalhostzhangyx$cd/etc/xinetd.dzhangyxlocalhostxinetd.d$lschargendaytime-udpfingerrlogintalktime-udpchargen-udpechontalkrshtelnetwu-ftpddaytimeecho-udprexecrsynctimezhangyxlocalhostxinetd.d$cattelnet#default:on#description:Thetelnetserverservestelnetsessions;ituses#unencryptedusername/passwordpairsforauthentication.servicetelnetflags=REUSEsocket_type=streamwait=nouser=rootserver=/usr/sbin/in.telnetdlog_on_failure+=USERIDdisable=nozhangyxlocalhostxinetd.d$,2020/6/8,27,(一)文件操作命令,文件类型普通文件:标志“-”目录文件:标志“d”“点(.)”当前目录,“点点(.)”当前目录的上一级目录。以“.”开头的文件名表示隐含文件,可用lsal显示。特别文件:对I/O硬件的存取模仿对普通文件的存取块特别文件:标志“b”;字符特别文件:标志“c”。文件属性用户身份:拥有者User、同组者Group、其他Other文件权限:读Read、写Write、执行eXecute-rwxr-r-1rootroot20Mar1214:44test*,2020/6/8,28,zhangyxlocalhostzhangyx#ls-altotal64drwxr-x-4rootroot4096Feb1422:02.drwxr-xr-x23rootroot4096Feb1613:35.-rw-r-r-1rootroot1210Feb1006:03anaconda-ks.cfg-rw-1rootroot12447Feb1423:22.bash_history-rw-r-r-1rootroot24Jun112000.bash_logout-rw-r-r-1rootroot234Jul62001.bash_profile-rw-r-r-1rootroot217Feb922:06.bashrc-rw-r-r-1rootroot210Jun112000.cshrcdrwx-2rootroot4096Feb1421:54.gnupg-rw-1rootroot8Feb1422:05.mysql_historydrwx-2rootroot4096Feb1000:44.ssh-rw-r-r-1rootroot196Jul112000.tcshrc-rw-r-r-1rootroot1126Aug241995.Xresources,2020/6/8,29,文件显示命令(P35)cat:连接并显示文件例如:$catfile1file2file3显示文本文件more:h,q,空格,回车,b,p,/,!less:可以用光标键逐行滚动pr:显示文件内容显示二进制文件mn命令,2020/6/8,30,确定文件类型命令file命令:例如:$filem1.cm1.c:asciitext例如:$filedir1dir1:directory,2020/6/8,31,匹配、排序及显示指定内容的命令在文件中查找给定模式的行:gerp,egrep,fgrep,zhangyxlocalhostzhangyx$catm1.cmain()printf(man);zhangyxlocalhostzhangyx$greppm1.cprintf(man);zhangyxlocalhostzhangyx$,2020/6/8,32,zhangyxlocalhostzhangyx$cd/zhangyxlocalhost/$cdetczhangyxlocalhost/etc$lsftphostslpd.confpwdb.confX11ftpuserslpd.permsrcxinetd.confgnomeltrace.confrc0.dxinetd.dgpm-root.conflynx.cfgrc1.dyp.confgroupmailrc2.dypserv.confzhangyxlocalhost/etc$catpasswdroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:user:x:501:501:/home/user:/bin/bashyxzhang:x:502:502:/home/yxzhang:/bin/bashzhangyxlocalhost/etc$grepzhangyxpasswdzhangyx:x:500:500:/home/zhangyx:/bin/bashzhangyxlocalhost/etc$,2020/6/8,33,在目录结构中查找满足查询条件的文件:find,zhangyxlocalhostzhangyx$lsDesktopdir1dir2m1.cm2.ctest1zhangyxlocalhostzhangyx$findm1.cm1.czhangyxlocalhostzhangyx$,zhangyxlocalhostzhangyx$lsDesktopdir1dir2m1.cm2.ctest1zhangyxlocalhostzhangyx$findm1.cm1.czhangyxlocalhostzhangyx$cddir1zhangyxlocalhostdir1$lsab.ca.cbdir2zhangyxlocalhostdir1$finda.ca.c,2020/6/8,34,对文本文件中的各行进行排序:sort,zhangyxlocalhostzhangyx$cattest1foriin$1/*.cdocp$i$2donecd$2wc-c*|sort-nzhangyxlocalhostzhangyx$sorttest1cd$2cp$i$2dodoneforiin$1/*.cwc-c*|sort-nzhangyxlocalhostzhangyx$,2020/6/8,35,显示文件中所有不重复的行:uniq,zhangyxlocalhostzhangyx$uniqtest2manbikeaplezhangyxlocalhostzhangyx$cattestmanbikemanaplezhangyxlocalhostzhangyx$uniqtestmanbikemanaplezhangyxlocalhostzhangyx$,2020/6/8,36,zhangyxlocalhostzhangyx$cattest2manmanbikeaplezhangyxlocalhostzhangyx$uniqtest2manbikeaplezhangyxlocalhostzhangyx$,2020/6/8,37,比较文件内容:(P47)比较两个文本文件,并显示它们的不同:diff例:difflilo.conflilo.conf比较两个文件,若有差异,则显示不同点是第几个字节和第几行:cmp,2020/6/8,38,复制文件(P49)将源文件或目录拷贝到目标文件或目录中:cp-i:Interactive-r:Recursive-u:Update-f:Forcedd命令:将指定的输入文件复制到指定的输出文件上,并进行可能的转换ddif=/vmlinuzof=/dev/fd0,2020/6/8,39,对文件名或目录名重新命名,或移动文件mv-fisource_filetarget_file删除文件/删除目录rm-rfilename或rmdirdirname文件内容统计命令统计指定文件的字节数(-c)、字数(-w)、行数(-l),并输出结果:wc,2020/6/8,40,命令的输入和输出,文件重定向输出重定向输入重定向附加重定向管道线,2020/6/8,41,(二)目录操作命令,目录树结构/bin:公用命令/boot:启动内核所需文件/dev:设备文件/etc:配置文件/home:用户目录/lib:运行库/mnt:临时安装的文件系统/proc:存放存储进程和系统信息/root:超级用户的根目录/sbin:存放系统管理程序,超级用户才可使用/tmp:临时文件/usr:存放应用程序包的主目录/var:存放系统产生的文件,2020/6/8,42,常用的目录,zhangyxlocalhostxinetd.d$cdzhangyxlocalhostzhangyx$lsDesktopdir1dir2m1.cm2.ctesttest1test2zhangyxlocalhostzhangyx$cd./dir1zhangyxlocalhostdir1$cd.zhangyxlocalhostzhangyx$,常用的目录操作命令,cd改变当前目录pwd显示目前目录mkdir建立一个新目录rmdir刪除一个里面是空的空目录,.代表当前目录.代表上层目录代表当前用户自己的主目录,2020/6/8,43,路径名,绝对路径每个文件有唯一的绝对路径,它是沿着层次树,从根目录开始、到达相应文件的所有目录名连接而成,各目录名之间以“/”分开。如:/etc/xinetd.d相对路径在当前工作目录里指定一个目录。如:(/home/zhangyx)dir1,2020/6/8,44,改变和显示工作目录cd(特殊参数:空和-)和pwd建立目录mkdir(可嵌套和同时创建多个子目录)-p一次建立多个目录;-m对新建目录设置权限。删除目录rmdir刪除空的目录(它里面不能有其他的目录或文件)rm(参数:-f-r-i),2020/6/8,45,显示目录信息ls:参数-l-a-F-R-color-s-t-Xdu:显示文件或目录所占的空间(包括隐藏文件或目录),2020/6/8,46,链接文件的命令:一个文件在多个目录中登记硬链接:好象文件有了两个文件名lnfile1file2例如:lnabc.cxyz.c注意:不能对目录文件做硬链接;不能在不同的文件系统之间做硬链接。,2020/6/8,47,userzhangyxdir1$catm1.caaaaaaaabbbbbbbbcccccccccuserzhangyxdir1$cduserzhangyxuser$ln./dir1/m1.c./dir2/a.cuserzhangyxuser$cddir2userzhangyxdir2$cata.caaaaaaaabbbbbbbbcccccccccuserzhangyxdir2$cduserzhangyxuser$via.cuserzhangyxuser$cata.cbbbbbbbbcccccccccuserzhangyxuser$cddir1userzhangyxdir1$catm1.c,2020/6/8,48,符号链接ln-ssourcefiletargetfileln-s/usr/lib/home/wuhp/lib/在用户wuhp目录下建立一个lib连接,连上/usr/lib,用户访问/home/wuhp/lib,就是访问/usr/lib。一般用于创建目录间的链接,2020/6/8,49,userzhangyxuser$ln-s./dir1./diruserzhangyxuser$lsdirdir1dir2userzhangyxuser$ls-;ls:-:没有那个文件或目录userzhangyxuser$ls-l总用量8lrwxrwxrwx1useruser65月1020:50dir-./dir1drwxrwxr-x2useruser40965月1020:32dir1drwxrwxr-x2useruser40965月1020:48dir2userzhangyxuser$cddiruserzhangyxdir$lsm1.cuserzhangyxdir$,2020/6/8,50,改变存取权限命令功能:改变文件或目录的存取权限符号方式:chmod-Rwho+|-|=modfile数字方式:chmod-Rmodfile操作对象who可是下述字母中的任一个或它们的组合a表示所有的用户(all)g表示组用户(group)o表示其他用户(other)u表示用户(user),及文件主,2020/6/8,51,在一个命令行中可给出多个符号方式,用逗号隔开。例:$chmodg+r,o+rfl/使组和其他用户对文件fl有读的权限使用数字来代表各个属性,各属性的对照表如下:r:4w:2x:1由于同一组的数字是相加的!例如文件属性为-rwxrwx-则是:owner=rwx=4+2+1=7group=rwx=4+2+1=7others=-=0+0+0=0所以,该属性对应的数值就是770!,2020/6/8,52,改变文件或目录所属的组:chgrpchgrp-Rgroupnamefilename例子:chgrp-Rstaff/home/wuhp改变文件或目录的属主:chownchown-Rusernamefilename例子:chown-rwuhp/home/wuhp,2020/6/8,53,文件压缩命令:gzip(P69)说明:网络上的.gz文件是用gzip命令压缩的。需要安装自由软件gzip和gunzipgzip-vfile,将文件压缩成.gz的文件格式gzip-dfile.gz,将.gz文件解压读去压缩文件的内容:zcat文件名,2020/6/8,54,文件解压缩命令:unzip对WinZip格式的压缩文件进行解压缩unzipchapter1.zip,2020/6/8,55,文件或者目录打包命令:tar(P78)taroptiontarfilefilenamec创建新包x从包中extract文件t仅仅列出包中的文件名f指定其后的参数为包文件名o以当前用户作为extract的文件的uid和gidv报告tar命令执行的详细信息,2020/6/8,56,网络上有一些.tar.gz文件先用gzip解压缩,然后用tar拆包tarcvfmytar.tarfile.dattarxvffile.dat,2020/6/8,57,(三)有关进程管理的命令,显示进程状态:psps-eflnamelist-e显示当前运行的每一进程的信息-f产生一个完整的清单杀死某个进程:killkill-signalpidkill-9378kill-HUP378,2020/6/8,58,(四)有关软盘的使用命令,有关软盘的使用命令mounttmsdos/dev/fd0/mnt/floppyumout/mnt格式化软盘:format例:formatv/dev/rfd0135ds18在第一个驱动器(3.5英寸高密度软盘)中格式化软盘tar命令,2020/6/8,59,(五)有关光驱的使用命令,有关光驱的使用命令mounttiso9660/dev/hdb/mnt/cdromumount/mnt/cdrom,2020/6/8,60,(六)有关U盘的使用命令,有关U盘的使用命令通常/dev/sda1就是优盘的设备mount-tvfat/dev/sda1/mnt/usbumount/mnt/usb,2020/6/8,61,(七)访问Windows分区的命令,假设Windows分区位于第一个IDE硬盘驱动器,为第一个分区(/dev/hdal)。首先,创建一个装配点用以保存Windows分区的数据,键入:#mkdir/mnt/vfat要以Xterm的根用户访问分区,键入如下内容:#mount-tvfat/dev/hdal/mnt/vfat,2020/6/8,62,四、安装软件,2020/6/8,63,(一)安装软件的命令,很多Linux应用软件都是以源代码的形式发布的,这就要求用户根据自己系统的实际情况和自身的需要来配置、编译源程序后,才能使用这些软件。在Linux系统中,软件安装程序比较纷繁复杂,不过最常见的有两种:(1)一种是软件的源代码,您需要自己动手编译它。这种软件安装包通常是用gzip压缩过的tar包(后缀为.tar.gz)。(2)另一种是软件的可执行程序,你只要安装它就可以了。这种软件安装包通常被是一个RPM包(RedhatLinuxPacketManager,就是Redhat的包管理器),后缀是.rpm。,2020/6/8,64,源代码安装应用软件的源代码一般是file.tar.gz或者file.tgz格式,也就是说是以tar来打包,然后用gzip来压缩。以应用软件apache_1_3_6_tar.gz为例,先进入软件的当前目录,然后使用gzip解压:#gzip-dapache_1_3_6_tar.gz(注:-d代表解压)。然后用tar解包:#tar-xvfapache_1_3_6_tar。由于tar和gzip经常一起使用,所以tar还提供了一个参数,它可以自动调用gzip来解压,即:#tar-xzvfapache_1_3_6_tar.gz。,2020/6/8,65,执行解压缩后产生的一个名为configure的可执行脚本程序。它是用于检查系统是否有编译时所需的库,以及库的版本是否满足编译的需要等安装所需要的系统信息。为随后的编译工作做准备。命令为:#./configure。检查通过后,将生成用于编译的MakeFile文件。此时,可以开始进行编译了。编译的过程视软件的规模和计算机性能的不同,所耗费的时间也不同。命令为:#make。成功编译后,键入如下的命令开始安装:#makeinstall。安装完毕,应清除编译过程中产生的临时文件和配置过程中产生的文件。键入如下命令:#makeclean;#makedistclean,2020/6/8,66,进入这个目录,再用ls命令查看一下所包含的文件,如:#cdapache_1.3.6,#ls。查看这个目录中包含了以下哪一个文件:(1)如果是configure文件,就执行:#./configure#make#makeinstall(2)如果是Makefile文件,就执行:#make#makeinstall(3)如果是Imake文件,就执行:#xmkmf#make#makeinstall,2020/6/8,67,如果遇到错误提示,通常是十分简单的问题:1)没有安装C或C+编译器;确诊方法:执行命令gcc(C+则为g+),提示找不到这个命令。解决方法:将Linux安装光盘mount上来,然后进入RPMS目录,执行命令:#rpm-ivhgcc*(用到了第二种安装方式)2)没有安装make工具;确诊方法:执行命令make,提示找不到这个命令。解决方法:将Linux安装光盘mount上来,然后进入RPMS目录,执行命令:#rpm-ivhmake*3)没有安装autoconf工具;确诊方法:执行命令make,提示找不到这个命令。解决方法:将Linux安装光盘mount上来,然后进入RPMS目录,执行命令:#rpm-ivhautoconf*,2020/6/8,68,智能包安装RPM是RedHatPackageManager的缩写,它只能使用在安装了RPM软件的系统中,不过好像目前大多数中文Linux发行版本都支持RPM软件包。(1)用命令管理#rpmoptionsabc.rpm例如,安装python-1.5.2-35.i386.rpm软件时,可以使用如下命令:#rpmivhpython-1.5.2-35.i386.rpm。如果它提示该软件包已经被安装了,但或许已经不完整或其它原因你想强制安装该软件包,那么你就键入以下命令:rpm-ivh-replacepkgsfile.rpm。,2020/6/8,69,如果你想知道RPM软件包中的相关信息,可以使用命令:#rpmivhpython-1.5.2-35.i386.rpm。升级软件:执行rpm-Uvhrpm包名。查该软件包会向系统里面写入哪些文件:执行rpm-qplrpm包名,如rpm-qplpython-1.5.2-35.i386.rpm。图形界面工具管理GNOME中的GnoRPM和KDE中的Kpackage就是功能强大的RPM包管理工具。下面以KDE中Kpackage为例,介绍如何使用RPM包管理工具。,2020/6/8,70,点击Start(开始)Systemtools(系统工具)Kpackage,出现Kpackage界面,同时分析Linux系统中的RPM数据库。它将安装好的RPM包形式的软件按照功能分在Amusements、Application、Development、Document、Extension、Extentions、Networking、SystemEnvironment、UserInterface以及X11等几个树形目录中,每个目录中有相应的文件图标和名称。要安装或升级软件,只要点击工具栏的相应按钮就会弹出打开文件的对话框,选中要安装的RPM文件,单击OK按钮,如果不缺必要的运行库,就开始安装软件了。卸载软件时,用鼠标选择相应的软件,单击右边的Uninstall按钮就可以了。,2020/6/8,71,(二)卸载软件的命令,(1)软件的卸载主要是使用rpm来进行的。卸载软件首先要知道软件包在系统中注册的名称。键入命令:#rpm-q-a,即可查询到当前系统中安装的所有的软件包。(2)确定了要卸载的软件的名称,就可以开始实际卸载该软件了。键入如下命令即可卸载软件:#rpm-epackagename,参数e的作用是使rpm进入卸载模式。对名为packagename的软件包进行卸载。由于系统中各个软件包之间相互有依赖关系。如果因存在依赖关系而不能卸载,rpm将给予提示并停止卸载。你可以使用如下的命令来忽略依赖关系,直接开始卸载:#rpm-epackagename-nodeps忽略依赖关系的卸载可能会导致系统中其它的一些软件无法使用。,2020/6/8,72,五、Linux下的程序开发环境,2020/6/8,73,Linux下的程序开发环境,1、编辑器vi、emacs2、编译器gcc(c/c+)-o-c-g3、调试器gdb4、make,2020/6/8,74,X-Windows,窗口管理器Gnome,KDE窗口切换命令:#switchdeskKDE#startxX-Windows下的可视化编程工具:QtQt是一个多平台的C+图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。Qt是完全面向对象的很容易扩展,并且允许真正地组件编程。(,2020/6/8,75,编译器gcc,GCC编译器简介GCC是C和C+编译器。gcc命令的基本用法如下:gccoptionsfilenames选项指定编译器怎样进行编译。一些常用的选项-o生成指定的输出文件,用在生成可执行文件时。$gcc-ocountcount.c-c只编译并生成目标文件。-g生成调试信息。GNU调试器可利用该信息。,2020/6/8,76,例,设有两个源文件main.c和factorial.c两个源文件,要编译生成一个计算阶乘的程序。,/清单factorial.c#include#includeintfactorial(intn)if(n=1)return1;elsereturnfactorial(n-1)*n;,2020/6/8,77,/清单main.c#include#includeintfactorial(intn);intmain(intargc,char*argv)intn;if(argc2)printf(Usage:%snn,argv0);return-1;elsen=atoi(argv1);printf(Factorialof%dis%d.n,n,factorial(n);return0;,2020/6/8,78,利用如下的命令可编译生成可执行文件,并执行程序:$gcc-ofactorialmain.cfactorial.c$./factorial5Factorialof5is120.,2020/6/8,79,GCC可同时用来编译C程序和C+程序。一般来说,C编译器通过源文件的后缀名来判断是C程序还是C+程序。在Linux中,C源文件的后缀名为.c,而C+源文件的后缀名为.C或.cpp。但是,gcc命令只能编译C+源文件,而不能自动和C+程序使用的库连接。因此,通常使用g+命令来完成C+程序的编译和连接,该程序会自动调用gcc实现编译。,2020/6/8,80,假设有一个如下的C+源文件(hello.C):,#includevoidmain(void)coutHello,world!endl;,则,可以如下调用g+命令编译、连接并生成可执行文件:$g+-ohellohello.C$./helloHello,world!,2020/6/8,81,GNUgdb,GNU的调试器称为gdb,该程序是一个交互式工具,在字符模式下工作。gdb是功能强大的调试程序,可完成如下的调试任务:(1)设置断点;(2)监视程序变量的值;(3)程序的单步执行;(4)修改变量的值。在使用gdb调试程序之前,必须使用-g选项编译源文件。可在makefile中如下定义CFLAGS变量:CFLAGS=-g运行gdb调试程序时通常使用如下的命令:gdbprogname,2020/6/8,82,gdb的常用命令,命令解释breakNUM在指定的行上设置断点。bt显示所有的调用栈帧。该命令可用来显示函数的调用顺序。clear删除设置在特定源文件、特定行上的断点。其用法为:clearFILENAME:NUM。continue继续执行正在调试的程序。该命令用在程序由于处理信号或断点而导致停止运行时。displayEXPR每次程序停止后显示表达式的值。表达式由程序定义的变量组成。,2020/6/8,83,fileFILE装载指定的可执行文件进行调试。helpNAME显示指定命令的帮助信息。infobreak显示当前断点清单,包括到达断点处的次数。infofiles显示被调试文件的详细信息。infofunc显示所有的函数名称。infolocal显示当函数中的局部变量信息。infoprog显示被调试程序的执行状态。infovar显示所有的全局和静态变量名称。kill终止正被调试的程序。list显示源代码段。make在不退出gdb的情况下运行make工具。next在不单步执行进入其他函数的情况下,向前执行一行源代码。printEXPR显示表达式EXPR的值。,2020/6/8,84,例子:如下简单的c+程序,包含person.hperson.cppmain.cppMain.cpp文件。,注意1:编译源文件,使用-g来包含调试信息($g+-gcfilename),2020/6/8,85,注意2:调试信息在编译的时产生,而不是在连接时。用$g+-cfile*.cpp编译源文件;然后用$g+-g-oout.efile1.ofile2.ofile*.o生成可执行程序;而out.e不带有调试信息。,2020/6/8,86,gdb具体使用gdbprogramnamelist:用来显示程序源代码,2020/6/8,87,run:运行程序;break:设置断点;next:运行至下一行,不进入被调用的函数;step:则进入被调用的函数;print:输出变量的值。,2020/6/8,88,infobreak:显示断点信息;infofunc:显示函数信息。gdb中执行shell命令。,2020/6/8,89,kill:结束当前调试进程;quit:退出gdb。,2020/6/8,90,GNUmake,自动编译工具make(什么是make?)在大型的开发项目中,通常有几十到上百个的源文件,如果每次均手工键入gcc命令进行编译的话,则会非常不方便。因此,通常利用make工具来自动完成编译工作。make简介:(考点)make是一个程序,通过一个称为makefile的文件来完成并自动维护编译工作(即makefile文件是make的执行脚本)。在一般情况下,make会根据Makefile的规则来决定如何编译(compile)和连结(link)程序。,2020/6/8,91,Make编译优点:编译工作:如果仅修改了某几个源文件,则只重新编译这几个源文件;如果某个头文件被修改了,则重新编译所有包含该头文件的源文件。优点:利用这种自动编译可大大简化开发工作,避免不必要的重新编译。,2020/6/8,92,makefile文件makefile需要按照某种语法进行编写,其中说明了(1)如何编译各个源文件并连接生成可执行文件,(2)并定义了源文件之间的依赖关系。(3)当修改了其中某个源文件时,如果其他源文件依赖于该文件,则也要重新编译所有依赖该文件的源文件。Makefile命名规则缺省情况下,当make寻找makefile文件时,它试图搜寻具有如下的名字的文件,按顺序:GNUmakefile、makefile和Makefile。通常情况下应把makefile文件命名为makefile或Makefile。除非makefile文件是特为GNUmake编写的,在其它make版本上不能执行,才应该使用GNUmakefile作为makefile的文件名。,2020/6/8,93,Makefile文件生成及运行Makefile基本结构Makefile变量Makefile自动变量Makefile模式规则自动依赖和Automake运行make,2020/6/8,94,Makefile基本结构(考点)Makefile基本上就是目标(target),关连(dependencies)和动作三者所组成的一连串规则。目标:make最终要创建的对象,对象通常是目标文件(.o)和可执行文件(.exe)。关连:通常是一个列表,指明编译目标时需要用到的其它文件。动作:创建每个项目时需要运行的命令(可以生成目标,或者是删除文件等)。,2020/6/8,95,Makefile文件一般格式(考点)target:componentsTABaction例如,有C+源文件test.C,该源文件包含有自定义的头文件test.h,则目标文件test.o明确依赖于两个源文件:test.C和test.h。希望用g+命令来生成test.o目标文件。#Thismakefilejustisaexample.#Thefollowinglinesindicatehowtest.odepends#test.Candtest.h,andhowtocreatetest.otest.o:test.Ctest.hg+-c-gtest.C,2020/6/8,96,利用maketarget命令可指定要编译的目标:一个makefile文件中可定义多个目标,利用maketarget命令可指定要编译的目标,如果不指定目标,则使用第一个目标。通常,makefile中定义有clean目标,可用来清除编译过程中的中间文件,例如:clean:rm-f*.o运行makeclean时,将执行rm-f*.o命令,最终删除所有编译过程中产生的所有中间文件。,2020/6/8,97,Example:,#MakefileAll:main.operson.og+-osample.emain.operson.operson.o:person.hperson.cppg+-cperson.cppmain.o:main.cppg+-cmain.cppclean:rm*.o,2020/6/8,98,依赖执行过程:(可选)文件存在?是有与该文件同名的目标吗?是:跳转处理规则否:文件比目标新吗?是:该规则动作将执行,继续处理。否:继续处理。否有与该文件同名的目标吗?是:跳转处理规则。否:出错。引发操作的条件:(1)规则的目标文件不存在。(2)规则所依赖的文件比目标文件新,或者所依赖的目标规则有操作。,2020/6/8,99,2020/6/8,100,Makefile变量使用变量目的:简化Makefile中的表达式变量定义:变量名=值引用变量:$(变量名)例如AppName=sample.eAll:main.operson.og+-o$(AppName)main.operson.o,2020/6/8,101,MyExample:Program,2020/6/8,102,MyExample:Makefile,2020/6/8,103,MyExample:Make,2020/6/8,104,MyExample:Makeclean,2020/6/8,105,complexExample:filenamelists,2020/6/8,106,complexExample:Makefile,2020/6/8,107,complexExample:makeresult,2020/6/8,108,自动变量自动化变量会把模式中所定义的一系列的文件自动地挨个取出,直至所有的符合模式的文件都取完了。这种自动化变量只应出现在规则的命令中。自动化变量可简化Makefile文件。例如:,#Makefilesample:main.operson.og+-osamplemain.operson.o#g+-o$person.o:person.cppperson.hg+-cperson.cpp#g+-c$main.o:main.cppg+-cmain.cpp#g+-c$,$:目标的完整名称;$所有的依赖文件;$:第一个依赖文件的名称。,2020/6/8,109,常用自动变量及含义$:目标的完整名称。$:所有的依赖文件,以空格分开,不包含重复的依赖文件。$:第一个依赖文件的名称。$?:所有的依赖文件,以空格分开,这些依赖文件的修改日期比目标的创建日期晚。$*:不包含扩展名的目标文件名称。$+:所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件。$%:如果目标是归档成员,则该变量表示目标的归档成员名称。例如,如果目标名称为mytarget.so(image.o),则$为mytarget.so,而$%为image.o。,2020/6/8,110,假设您编写一个编译.c文件生成.o文件的规则:您怎样编写命令CC,使它能够操作正确的文件名?您当然不能将文件名直接写进命令中,因为每次使用隐含规则操作的文件名都不一样。您应该使用make的另一个特点,自动变量。这些变量在规则每次执行时都基于目标和依赖产生新值。例如您可以使用变量$代替目标文件名,变量$代替依赖文件名。$规则的目标文件名。如果目标是一个档案成员,则变量$档案文件的文件名。对于有多个目标的格式规则,变量$是那个导致规则命令运行的目标文件名。$%该变量是目标成员名。$第一个依赖的文件名。,2020/6/8,111,$?所有比目标新的依赖名,名字之间用空格隔开。$所有依赖的名字,名字之间用空格隔开。如果在依赖列表中,同一个文件名出现多次,变量$的值仍然仅包含该文件名一次。常用函数wildcard(*.c)通配符扩展将*.c用具体的字符串代替作为返回内容patsubst(查找内容,替换内容,源)将源字符串中,查找内容用替换内容替换后作为返回patsubst(%c,%o,wildcard(*.c)include用来包含其他文件。,2020/6/8,112,模式规则(Patternrules):利用模式
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 永丰乡消防知识培训课件
- 水表基础知识培训总结课件
- 混凝土施工中水泥质量控制方案
- 水管管件基础知识培训课件
- 输电线路传输能力评估方案
- 建筑施工现场的健康安全检查与监督方案
- 鸡舍清洁与消毒技术
- 水的基本知识培训内容课件
- 二零二五顶账城市核心区住宅买卖合同协议
- 二零二五年软件系统集成与维护合同详细实施条款
- 2025年提取公积金租房合同范本
- 2025高职单招考试题(附答案)
- 储能系统运维安全手册
- GB/T 45997-2025科技成果五元价值评估指南
- 转让网约车合同协议书范本
- 医院 捐赠协议书
- 小学食堂供餐管理方案(3篇)
- 养老院重要环境因素控制措施
- 藏文教学课件
- 血透室手卫生管理课件
- 风电场安全规程考试题库(附答案)
评论
0/150
提交评论