实验一UNIX/LINUX使用环境及vi编辑器
[实验目的]
1、了解UNIX/LINUX的命令及使用格式。
2、复习C语言程序基本知识练习并掌握UNIX提供的vi编辑器来编译C程序
3、学会利用gcc、gdb编译、调试C程序
[实验学时]
2学时
[实验类型]
验证性
[实验内容]
1、通过WINDOWS系统中的远程登录程序telnet.exe登录UNIX/LINUX。
2、熟悉UNIX/LINUX的常用基本命令如ls、mkdir、cd、rm、cat、gcc、./等。
3、用vi编写一个简单的、显示"Hello,World!"的C程序,用gcc编译并观察编译后的结果。利用gdb调试该程序.运行生成的可执行文件。
[实验步骤]
一、UNIX的登录与退出
1、登录
在DOS环境下用MS提供的telnet程序(也可使用WINDOWS自带的telnet图形界面程序或多功能的S-Term终端程序),可使PC作为终端(terminal)登录(login)UNIX服务器(UNIX Server)。
(1)执行格式:
telnet hostname(主机名)
或telnet主机的IP地址
例:telnet www.yahoo.com
telnet 140.122.77.120
(2)步骤
login: (输入username)
password:(输入密码)
2、退出
在UNIX系统提示符$下,输入logout、exit或shutdown。
例:$ logout
二、UNIX命令格式
命令[选项] [处理对象]
例:ls -la mydir
注意:(1)命令一般是小写字串。注意大小写有别
(2)选项通常以减号(-)再加上一个或数个字符表示,用来选择一个命令的不同操作
(3)同一行可有数个命令,命令间应以分号隔开
(4)命令后加上&可使该命令后台(background)执行
三、UNIX常用命令
1、目录操作
和DOS相似,UNIX采用树型目录管理结构,由根目录(/)开始一层层将子目录建下去,各子目录以/隔开。用户login后,工作目录的位置称为home directory,由系统管理员设定。'~’符号代表自己的home directory,例如~/myfile是指自己home目录下myfile这个文件。
UNIX的通配符有三种:’*’和’?’用法与DOS相同, '-'代表区间内的任一字符,如test[0-5]即代表test0,test1,……,test5的集合。
(1)显示目录文件ls
执行格式:ls [-atFlgR]
[name] (name可为文件或目录名称)
例:ls显示出当前目录下的文件
ls -a显示出包含隐藏文件的所有文件
ls -t按照文件最后修改时间显示文件
ls -F显示出当前目录下的文件及其类型
ls -l显示目录下所有文件的许可权、拥有者、文件大小、修改时间及名称
ls -lg同上
ls -R显示出该目录及其子目录下的文件
注:ls与其它命令搭配使用可以生出很多技巧(最简单的如"ls -l | more"),更多用法请输入ls --help查看,其它命令的更多用法请输入命令名--help查看.
(2)建新目录mkdir
执行格式:mkdir directory-name
例:mkdir
dir1(新建一名为dir1的目录)
(3)删除目录rmdir
执行格式:rmdir directory-name或rm directory-name
例:rmdir
dir1删除目录dir1,但它必须是空目录,否则无法删除
rm -r dir1删除目录dir1及其下所有文件及子目录
rm -rf dir1不管是否空目录,统统删除,而且不给出提示,使用时要小心
(4)改变工作目录位置cd
执行格式:cd
[name]
例:cd改变目录位置至用户login时的working directory
cd dir1改变目录位置,至dir1目录
cd
~user改变目录位置,至用户的working directory
cd
.. 改变目录位置,至当前目录的上层目录
cd
../user 改变目录位置,至上一级目录下的user目录
cd /dir-name1/dir-name2 改变目录位置,至绝对路径(Full
path)
cd
- 回到进入当前目录前的上一个目录
(5)显示当前所在目录pwd
执行格式:pwd
(6)查看目录大小du
执行格式:du [-s] directory
例:du dir1显示目录dir1及其子目录容量(以kb为单位)
du -s
dir1显示目录dir1的总容量
2、文件操作
(1)查看文件(可以是二进制的)内容cat
执行格式:cat filename或more filename或cat filename|more
例:cat
file1以连续显示方式,查看文件file1的内容
more file1
或cat
file1|more以分页方式查看文件的内容
(2)删除文件rm
执行格式:rm
filename
例:rm
file?
rm
f*
(3)复制文件cp
执行格式:cp
[-r] source destination
例:cp
file1 file2将file1复制成file2
cp
file1 dir1将file1复制到目录dir1
cp
/tmp/file1将file1复制到当前目录
cp /tmp/file1 file2将file1复制到当前目录名为file2
cp –r dir1 dir2 (recursive
copy)复制整个目录。
四、文件编辑器vi
vi是在UNIX上被广泛使用的中英文编辑软件。vi是visual editor的缩写,是UNIX提供给用户的一个窗口化编辑环境。
进入vi,直接执行vi编辑程序即可。
例:$vi test.c
显示器出现vi的编辑窗口,同时vi会将文件复制一份至缓冲区(buffer)。vi先对缓冲区的文件进行编辑,保留在磁盘中的文件则不变。编辑完成后,使用者可决定是否要取代原来旧有的文件。
1、vi的工作模式
vi提供二种工作模式:输入模式(insert mode)和命令模式(command mode)。使用者进入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上的GC
C编译器是一个全功能的ANCI
C兼容编译器,下面介绍一些GCC编译器最常用的选项。
1、使用GCC
通常后跟一些选项和文件名来使用GCC编译器。GCC命令的基本用法如下:
gcc [options] [filenames]
命令行选项指定的编译过程中的具体操作
2、GCC常用选项
GCC有超过100个的编译选项可用,这些选项中的许多可能永远都不会用到,但一些主要的选项将会频繁使用。很多的GCC选项包括一个以上的字符,因此必须为每个选项指定各自的连字符,并且就像大多数LINUX命令一样不能在一个单独的连字符后跟一组选项。例如,下面的命令是不同的:
gcc -p-g test.c
gcc -pg test.c
第一条命令告诉GCC编译test.c时为prof命令建立剖析(profile)信息并且把调试信息加入到可执行文件里。第二条命令告诉GCC只为gprof命令建立剖析信息。
当不用任何选项编译一个程序时,GCC将建立(假定编译成功)一个名为a.out的可执行文件。例如,
gcc test.c
编译成功后,当前目录下就产生了一个a.out文件。
也可用-o选项来为即将产生的可执行文件指定一个文件名来代替a.out。例如:
gcc –o count count.c
此时得到的可执行文件就不再是a.out,而是count。
GCC也可以指定编译器处理步骤多少。-c选项告诉GCC仅把源代码编译为目标代码而跳过汇编和连接步骤。这个选项使用得非常频繁因为它编译多个C程序时速度更快且更易于管理。默认时GCC建立的目标代码文件有一个.o的扩展名。
3、执行文件
格式:./可执行文件名
例:./a.out
./count
六、参考程序
main( )
{
printf("Hello,world!\n");
}
[实验报告要求]
1.调试说明。包括:调试情况,如上机时遇到问题及解决办法,观察到的现象及其分析,对程序设计技巧的总结及分析等;程序的输出结果及对结果的分析;实验的心得体会,以及调试日期等需要记录的信息。