x dw D dd 4,替换操作 r cw C cc 5,查询命令
/abc ?abc n N :n1,n2 s/word1/word2/gc 6,拷贝粘贴 y Y 2yy p P 7,其他命令
:set nu; :set nonu; u .;v y p gf CTRL-SHIFT-6 2 shell程序的编写 环境变量
echo env set $ “” ‘’ ? ``
(1)熟悉shell script的结构和运行、调试方法。 (2)熟悉shell script的变量声明方法及其输入输出。 declare –i a=3;read
(3)熟悉shell script的分支结构。编写shell script文件test1.sh,判断用户根目录下是否有名为test的文件或者目录,如果有的话,将其删除。
if [ -e test ]; then xxx else xxx fi
(4)熟悉shell script的循环结构。编写shell script文件test2.sh,实现1到100所有奇数的和并输出。
试验三 linux的C语言开发
试验目的
熟悉gcc的使用 熟悉gdb的使用 熟悉make的使用 试验内容 1 gcc (1)过程
gcc hello.c –o hello 输入 选项 输出 命令 注释
.c -E .i cpp 预编译,文件包含、条件编译、宏展开 .i -S .s cc1 编译,生成汇编文件,注意命令的路径 .s -c .o as 汇编,生成目标文件 .o [ELF] ld 链接 (2)常用选项 -v 显示进度
-W[all] 显示警告信息 -I 头文件路径,不要空格 -L 库路径,不要空格
-lName库名字(libName.或者libName.so) -shared 编译成共享库
-static 链接静态库 -fpic[fPIC] 编译成共享库
-O[n] 优化 -Dmacro=BAR在命令行定义预处理宏FOO,其值为BAR -Wl,option 传递给ld程序option 选项,比如-Wl,-dn和-Wl,-dy 注意区别:
gcc hello.c –o hello.static –Wl,-dn[-Bstatic][-static] gcc hello.c –o hello.dynatic–Wl,-dy[-Bdynamic] 默认
(3)c++
编写hello.cxx程序:
#include g++ hello.cxx -o hello (4)静态库的建立和使用 a)建立 gcc -c add.c gcc -c sub.c ar -r libaddsub.a add.o sub.o (查ar命令,注意/r/t/x的用法) b)调用 gcc test2.c -o test2.static -I ./ -L ./ -Wl,-dn –laddsub -Wl,-dn后面的库使用静态版本 (5)共享库的建立和使用 a)建立 gcc -fpic [-shared] add.c sub.c -o libaddsub.so b)安装 为了让动态链接库为系统所认识及共享, 就需要运行ldconfig命令。(man ldconfig,注意命令作用) 默认目录/lib和/usr/lib 配置文件/etc/ld.so.conf内所列的目录 缓存文件/etc/ld.so.cache 四种安装方式: #cp libaddsub.so /usr/bin #ldconfig #pwd>>/etc/ld.so.conf #ldconfig #ldconfig `pwd` //更新缓存无效 #export LD_LIBRARY_PATH=\另开shell则无效 c)共享调用 gcc test2.c -o test2 -I ./ -L ./ -Wl,-dy –laddsub -Wl,-dy用于指定链接动态库版本,默认 d)动态调用 Linux 提供 4 个库函数(dlopen, dlerror, dlsym 和 dlclose),一个 include 文件(dlfcn.h)以及两个共享库(静态库 libdl.a 和动态库 libdl.so),以支持动态链接装入器。 gcc test2.c -o test2 –ldl 参考: #include int main() { int a,b; scanf(\ void *pHandle; int (*sub)(int m,int n); pHandle=dlopen(\ sub=dlsym(pHandle,\ printf(\ dlclose(pHandle); return 0; } 附:几个命令 ldd 查看文件的依赖关系 nm 查看文件的符号表,比如:nm test2|grep add objdump 查看文件的信息 2 gdb (1) 准备gcc -g (2) 打开gdb filename/file filename (3) 运行run/next/step(进入子程序)/continue (4) 设置断点break/delete (5) 显示表达式的值 print exp 立即输出表达式的值 watch exp 表达式的值发生变化时,程序停止并输出其新旧值