第一章 Linux 基础.docx
- 文档编号:5234337
- 上传时间:2022-12-14
- 格式:DOCX
- 页数:17
- 大小:26.77KB
第一章 Linux 基础.docx
《第一章 Linux 基础.docx》由会员分享,可在线阅读,更多相关《第一章 Linux 基础.docx(17页珍藏版)》请在冰豆网上搜索。
第一章Linux基础
第一章Linux基础(4学时)
实验一LINUX及其使用环境
实验目的
1.了解LINUX的Shell命令及使用格式。
2.学习如何连接Linux系统。
3.熟悉LINUX的常用基本命令。
4.学会如何得到帮助信息。
5.掌握Linux下C语言程序设计的基本步骤
6.了解和掌握gcc编译器
实验内容
1.通过WINDOWS操作系统中的远程登录程序telnet.exe登录linux。
2.使用man命令
3.使用man命令来获得每个Linux命令的帮助手册
4.用manls,manpasswd,manpwd命令得到ls、passwd、pwd三个命令的帮助手册。
5.用who命令显示当前正在你的Linux系统中使用的用户名字:
6.编写C语言程序:
输出两行文字“howareyou”,在Linux下编辑,编译,运行。
实验结果分析
实验指导
一、LINUX的登录与退出
1、登录
在DOS环境下用MS提供的telnet程序(也可使用WINDOWS自带的telnet图形界面程序或多功能的S-Term终端程序),可使PC作为终端(terminal)登录(login)LINUX服务器(UNIXServer)。
(1)执行格式:
telnethostname(主机名)
或telnet主机的IP地址
例:
telnet192.168.0.254
(2)步骤
login:
jsjc24(输入username)
password:
123456(输入密码)
2、退出
在Linux系统提示符$下,输入logout或exit。
例:
$logout
二、Linux命令格式
命令[选项][处理对象]
例:
ls-lamydir
注意:
(1)命令一般是小写字串。
注意大小写有别;
(2)目录之间的分隔为(/)区别于DOS中的(\)
(3)命令的选项通常以减号(-)间隔,命令和选项之间需要加空格
(4)同一行可有数个命令,命令间应以分号隔开
(5)命令后加上(&)可使该命令后台(background)执行
三、常用命令
1、目录操作
和DOS相似,Linux采用树型目录管理结构,由根目录(/)开始一层层将子目录建下去,各子目录以/隔开。
用户login后,工作目录的位置称为homedirectory,默认是已用户名为名的文件夹,例如用户mytest的工作目录是在/home/mytest文件夹。
(1)显示目录文件ls
执行格式:
ls[-atFlgR][name](name可为文件或目录名称)
例:
ls显示出当前目录下的文件
ls-a显示出包含隐藏文件的所有文件
ls-t按照文件最后修改时间显示文件
ls-F显示出当前目录下的文件及其类型
ls-l显示目录下所有文件的许可权、拥有者、文件大小、修改时间及名称
ls-R显示出该目录及其子目录下的文件
(2)建新目录mkdir
执行格式:
mkdirdirectory-name
例:
mkdirdir1(新建一名为dir1的目录)
(3)删除目录rmdir
执行格式:
rmdirdirectory-name或rmdirectory-name
例:
rmdirdir1删除目录dir1,但它必须是空目录,否则无法删除
rm-rdir1删除目录dir1及其下所有文件及子目录
(4)改变工作目录位置cd
执行格式:
cd[name]
例:
cd改变目录位置至用户login时的workingdirectory
cddir1改变目录位置,至dir1目录
cd..改变目录位置,至当前目录的上层目录
cd../user改变目录位置,至上一级目录下的user目录
cd/dir-name1/dir-name2改变目录位置,至绝对路径(Fullpath)
cd-回到进入当前目录前的上一个目录
(5)显示当前所在目录pwd
执行格式:
pwd
2、文件操作
(1)查看文件(可以是二进制的)内容cat
执行格式:
catfilename或morefilename或catfilename|more
例:
catfile1以连续显示方式,查看文件file1的内容
(2)删除文件rm
执行格式:
rmfilename
例:
rmfile?
rmf*
(3)复制文件cp
执行格式:
cp[-r]sourcedestination
例:
cpfile1file2将file1复制成file2
cpfile1dir1将file1复制到目录dir1
cp/tmp/file1将file1复制到当前目录
cp/tmp/file1file2将file1复制到当前目录名为file2
cp–rdir1dir2(recursivecopy)复制整个目录。
(4)移动或更改文件、目录名称mv
执行格式:
mvsourcedestination
例:
mvfile1file2将文件file1,更名为file2
mvfile1dir1将文件file1,移到目录dir1下
mvdir1dir2
(5)建立文件或目录的链接ln
例:
lnsourcetarget1建立source文件(已存在)的硬链接,命名为target1
ln-ssourcetarget2建立source文件的符号链接,命名为target2
3、系统询问与权限口令
(1)查看系统中的使用者
执行格式:
who
(2)查看username
执行格式:
whoamI查看自己的username
4、进程操作
(1)查看系统目前的进程ps
执行格式:
ps[-aux]
例:
ps或ps-x查看系统中属于自己的process
ps-au查看系统中所有使用者的process
ps-aux查看系统中包含系统内部及所有使用者的process
ps-aux|grepapache找出系统中运行的所有名称中带有"apache"串的process
(2)查看正在background中执行的process
执行格式:
jobs
(3)结束或终止进程kill
执行格式:
kill[-9]PID(PID为利用ps命令所查出的processID)
例:
kill456
或kill-9456终止processID为456的process
(4)后台(background)执行processcommand的命令
执行格式:
command&(在命令后加上&)
例:
gccfile1&在后台编译file1.c
注意:
按下^Z,暂停正在执行的process。
键入”bg”,将所暂停的process置入background中继续执行。
例:
gccfile1&
^Z
stopped
bg
(5)显示系统中程序的执行状态
例:
top-q不断地更新、显示系统程序的执行状态
第一行显示的项目依次为当前时间、系统启动时间、当前系统登录用户数目、平均负载。
第二行为进程情况,依次为进程总数、休眠进程数、运行进程数、僵死进程数、终止进程数。
第三行为CPU状态,依次为用户占用、系统占用、优先进程占用、闲置进程占用。
第四行为内存状态,依次为平均可用内存、已用内存、空闲内存、共享内存、缓存使用内存。
第五行为交换状态,依次为平均可用交换容量、已用容量、闲置容量、高速缓存容量。
PID每个进程的ID。
PPID每个进程的父进程ID。
UID每个进程所有者的UID。
USER每个进程所有者的用户名。
PRI每个进程的优先级别。
NI该进程的优先级值。
SIZE该进程的代码大小加上数据大小再加上堆栈空间大小的总数。
单位是KB。
TSIZE该进程的代码大小。
DSIZE数据和堆栈的大小。
TRS文本驻留大小。
D被标记为“不干净”的页项目。
LIB使用的库页的大小。
对于ELF进程没有作用。
RSS该进程占用的物理内存的总数量,单位是KB。
SHARE该进程使用共享内存的数量。
STAT该进程的状态。
其中S代表休眠状态;D代表不可中断的休眠状态;R代表运行状态;Z代表僵死状态;T代表停止或跟踪状态。
TIME该进程自启动以来所占用的总CPU时间。
如果进入的是累计模式,那么该时间还包括这个进程子进程所占用的时间。
且标题会变成CTIME。
%CPU该进程自最近一次刷新以来所占用CPU时间和总时间的百分比。
%MEM该进程占用的物理内存占总内存的百分比。
COMMAND该进程的命令名称,如果一行显示不下,则会进行截取。
内存中的进程会有一个完整的命令行。
注意:
按"ctrl+c"停止查看
(6)以树状图显示执行的程序pstree
例:
pstree-h列出进程树并高亮标出当前执行的程序
四、文件编辑器vi
vi是在UNIX上被广泛使用的中英文编辑软件。
vi是visualeditor的缩写,是UNIX提供给用户的一个窗口化编辑环境。
进入vi,直接执行vi编辑程序即可。
例:
$vitest.c
显示器出现vi的编辑窗口,同时vi会将文件复制一份至缓冲区(buffer)。
vi先对缓冲区的文件进行编辑,保留在磁盘中的文件则不变。
编辑完成后,使用者可决定是否要取代原来旧有的文件。
1、vi的工作模式
vi提供二种工作模式:
输入模式(insertmode)和命令模式(commandmode)。
使用者进入vi后,即处在命令模式下,此刻键入的任何字符皆被视为命令,可进行删除、修改、存盘等操作。
要输入信息,应转换到输入模式。
(1)命令模式
在输入模式下,按ESC可切换到命令模式。
命令模式下,可选用下列指令离开vi:
:
q!
离开vi,并放弃刚在缓冲区内编辑的内容
:
wq
将缓冲区内的资料写入磁盘中,并离开vi
:
ZZ
同wq
:
x
同wq
:
w
将缓冲区内的资料写入磁盘中,但并不离开vi
:
q
离开vi,若文件被修改过,则要被要求确认是否放弃修改的内容,此指令可与:
w配合使用
(2)命令模式下光标的移动
H
左移一个字符
J
下移一个字符
K
上移一个字符
L
右移一个字符
0
移至该行的首
$
移至该行的末
^
移至该行的第一个字符处
H
移至窗口的第一列
M
移至窗口中间那一列
L
移至窗口的最后一列
G
移至该文件的最后一列
W,W
下一个单词(W忽略标点)
B,B
上一个单词(B忽略标点)
+
移至下一列的第一个字符处
-
移至上一列的第一个字符处
(
移至该句首
)
移至该句末
{
移至该段首
}
移至该段末
NG
移至该文件的第n列
N+
移至光标所在位置之后第n列
n-
移至光标所在位置之前第n列
(3)输入模式
输入以下命令即可进入vi输入模式:
a(append)
在光标之后加入资料
A
在该行之末加入资料
i(insert)
在光标之前加入资料
I
在该行之首加入资料
o(open)
新增一行于该行之下,供输入资料用
O
新增一行于该行之上,供输入资料用
Dd
删除当前光标所在行
X
删除当前光标字符
X
删除当前光标之前字符
U
撤消
·
重做
F
查找
s
替换,例如:
将文件中的所有"FOX"换成"duck",用":
%s/FOX/duck/g"
ESC
离开输入模式
二、GCC编译器
LINUX上可用的C编译器是GNUC编译器,它建立在自由软件基金会编程许可证的基础上,因此可以自由发布。
LINUX上的GNUC编译器(GCC)是一个全功能的ANCIC兼容编译器,而一般UNIX(如SCOUNIX)用的编译器是CC。
Linux下的C编译器将程序编译成一个可执行文件都要经过以下4个步骤。
(1)预处理(也称预编译,Preprocessing):
命令GCC首先调用cpp进行预处理,在预处理过程中,对源代码文件中的文件包含、预编译语句进行分析。
(2)编译(Compilation):
调用cc进行编译,根据输入文件生成以.s为后缀的目标文件。
(3)汇编(Assembly):
汇编过程是针对汇编语言的步骤,调用as进行工作,将.S和.s为后缀的汇编语言文件经过预编译和汇编成以.o为后缀的目标文件。
(4)连接(Linking):
当所有的目标文件都生成之后,调用ld来完成最后的关键性工作,这个阶段就是连接。
在连接阶段,所有的目标文件被安排到可执行程序中恰当的位置上,同时,该程序所调用到的库函数也从各自所在的档案库中链接到合适的地方。
除非使用了-c、-S或-E选项或者编译错误阻止了过程的进行,否则连接总是最后的步骤。
1、使用GCC/CC
通常后跟一些选项和文件名来使用GCC编译器。
GCC命令的基本用法如下:
gcc[options][filenames]
使用举例:
编译hello.c程序,使用格式有以下三种:
(1)gcc–ohellohello.c生成可执行程序名为hello
(2)gcchello.c–ohello生成可执行程序名为hello
(3)gcchello.c生成可执行程序名为a.out
2、GCC常用选项
(1)-E:
生成.i文件,让gcc在预处理后停止编译,从而生成.i文件,此文件中包含有预处理信息。
(2)–S:
生成.s文件,gcc只进行预处理和编译,生成汇编代码.s文件。
(3)-c:
只编译,不连接。
编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件。
(4)-ooutput_filename:
把文件输出到output_filename,这个名称不能和源文件同名。
如果不给文件名,GCC就将文件输出到a.out。
(5)-g:
产生符号调试工具(GNU的Gdb)所必要的标准调试信息,要想对源代码进行调试,就必须加入这个选项。
(6)-O0:
对程序进行优化编译、连接。
采用这个选项,整个源代码会在编译、连接过程中进行优化处理,这样可以提高可执行文件的执行效率,但是,编译、连接的速度就相应地要慢一些。
(7)-O1~-O3:
比-O0的优化级别更高,能更好的优化编译、连接。
但整个编译、连接过程会更长。
(8)-Idirname:
在头文件的搜索路径列表中添加dirname目录,是在预编译过程中使用的选项。
(9)-Ldirname:
在库文件的搜索路径列表中添加dirname目录。
使用举例:
(1)编译hello.c程序,指定不同的选项
gcc–ohello.ihello.c–E只进行预处理,生成hello.i文件,可用vi或cat命令查看
gcc–ohello.shello.i–S将预处理的hello.i文件进行编译,生成.s汇编文件可用vi或cat命令查看
gcc–ohello.ohello.s–c将汇编文件hello.s进行汇编,生成二进制代码hello.o文件
gcc–ohellohello.o将二进制文件进行库函数链接,生成可执行程序
(2)使用-O0~-O1选项#
opt.c//使用-O0~-O1选项优化举例
#include
intmain(void)
{
doublecounter;
doubleresult;
doubletemp;
for(counter=0;counter<4000.0*4000.0*4000.0/20.0+2030;counter+=(5-3+2+1)/4)
{
temp=counter/1239;
result=counter;
}
printf("%lf\n",result);
}
分别使用不同的优化选项进行编译生成可执行程序m0~m3,然后使用time命令统计程序的运行,如time./m0,比较运行时间。
3、执行C程序
格式:
./可执行文件名
使用举例:
./a.out
./count
备注:
1.先进入vi文件名.c(文件名必须写,这是给文件命名的)
2.写存盘退出后,使用gcc进行编译,可以分部编译,也可以一次编译完成,注意加上-g,以便进入gdb调试
3.编译完成后要执行./文件名
查看程序内容cat文件名.c
1.进入gdbgdb文件名
在gdb下查看程序内容list
执行程序内容run
设置断点b行号,执行r
注意:
断点后程序单步执行next.回车表示重复执行上一条命令
实验二Linux编程工具:
Gdb和make使用
实验目的
1.掌握gdb调试程序的方法
2.掌握多文件编译中的makefile的用法
实验内容
1.编写C语言程序:
根据输入的两个整数求平均值并且在终端输出,在Linux下编辑,使用gcc编译器编译得到汇编程序,并用gdb调试,查看程序执行每一步变量的值。
Infolocal
2.设计一程序,要求计算输入的整数的平均值,将程序分成多个文件编译(main.c,average.c,average.h),并编写makefile文件;用make编译后改成返回最小值再编译,分析有多少文件不需重新编译。
实验指导
一、Gdb使用
1.GDB调试工具简介
GNU的调试器称为GDB,是一个交互式工具,工作在字符模式下。
GDB作为功能强大的调试工具,可完成如下的调试任务:
(1)设置断点。
(2)监视程序变量的值。
(3)程序的单步执行。
(4)修改变量的值。
为了使用GDB调试工具,在编译源文件时必须使用-g选项(即gcc-c-g*.c)加上调试信息。
2.GDB常用命令
$gdbfilename
gdb将装入名为filename的可执行文件。
在编译时需要使用-g选项。
breakNUM
在指定的行地址处设置断点
clear
删除设置在特定源文件、特定行上的断点。
其用法为:
clearFILENAME:
NUMclear行号,delete行号
continue
继续执行正在调试的程序,该命令用在程序由于处理信号或断点而导致停止运行的时候
displayEXPR
每次程序停止后显示表达式的值,表达式由程序定义的变量组成
fileFILE
装载指定的可执行文件进行调试
helpNAME
显示指定命令的帮助信息
infobreak
显示当前断点清单,包括到达断点处的次数等infob
infofiles
显示被调试文件的详细信息
infofunc
显示所有的函数名称q+回车退出
infolocal
显示当函数中的局部变量信息
infoprog
显示被调试工具的执行状态
infovar
显示所有的全局和静态变量名称
kill
终止正被调试的程序
list
显示源代码段
make
在不退出GDB的情况下运行Make工具
next
在不单步执行进入其他函数的情况下,向前执行一行源代码
printEXPR
显示表达式EXPR的值
Shellshell命令
不退出GDB运行Shell命令
3.使用举例
程序bug.c的源代码如下:
1#include
2#include
3staticcharbuff[256];
4staticchar*string;
5intmain()
6{
7printf("Pleaseinputastring:
");
8gets(string);//从键盘获取字符串存入string中
9printf("\nYourstringis:
%s\n",string);
10}
#gcc-obug-ggdbbug.c//编译,并加上调试信息
/tmp/cckV4dCi.o(.text+0x36):
Infunction'main':
bug.c:
warning:
the'gets'functionisdangerousandshouldnotbeused.//已经做出警告
#./bug//运行程序
Pleaseinputastring:
hello//要求输入字符
Segmentationfault//段错误
利用GDB工具查找该程序中出现的问题,步骤如下。
(1)运行gdbbug命令,装入bug可执行文件。
#gdbbug
GNUgdbRedHatLinux(6.3.0.0-1.21rh)//版本
Copyright2004FreeSoftwareFoundation,Inc.
GDBisfreesoftware,coveredbytheGNUGeneralPublicLicense,andyouarewelcometochangeitand/ordistributecopiesofitundercertainconditions.
Type"showcopying"toseetheconditions.//提示可以使用showcopying命令
ThereisabsolutelynowarrantyforGDB.Type"showwarranty"fordetails.//提示使用
(2)使用list(可以使用l缩写)命令查看代码。
(gdb)l//列出源代码信息
1#include
2#include
3staticcharbuff[256];
4staticchar*string;
5intmain()
6{
7printf("Pleaseinputastring:
");
8gets(string);
9printf("\nYourstringis:
%s\n",string);
10}
(3)使用run命令执行程序。
(gdb)r//执行程序
Startingprogram:
/root/book/ch02/ch0204/bug
Readingsymbolsfromsharedobjectreadfromtargetmemory...done.
LoadedsystemsuppliedDSOat0x3ca000
Pleaseinputastring:
hello//输入字符
Programreceiv
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第一章 Linux 基础