程序设计
一、makefile用法总结
(1). makefile实例
edit : main.o kbd.o command.o display.o /
insert.o search.o files.o utils.o
cc -o edit main.o kbd.o command.o display.o /
insert.o search.o files.o utils.o
main.o : main.c defs.h
cc -c main.c
kbd.o : kbd.c defs.h command.h
cc -c kbd.c
command.o : command.c defs.h command.h
cc -c command.c
display.o : display.c defs.h buffer.h
cc -c display.c
insert.o : insert.c defs.h buffer.h
cc -c insert.c
search.o : search.c defs.h buffer.h
cc -c search.c
files.o : files.c defs.h buffer.h command.h
cc -c files.c
utils.o : utils.c defs.h
cc -c utils.c
clean :
rm edit main.o kbd.o command.o display.o /
insert.o search.o files.o utils.o //代表清理编译中产生的目标文件
( clean:
rm f *.o //清理目标文件的标准格式
)
PHONY: clean //将clean指定为伪目标(当此文件的目录下有一个名为clean的文件时,make clean就会执行这个文件,不会去执行clean这个目标,当指定为伪目标时,则不管是否有同名的文件,都会执行这个伪目标。)
clean:
rm *.o temp //表示会移除.o文件和temp文件。
反斜杠(/)是换行符的意思。这样比较便于Makefile的易读。我们可以把这个内容保存在文件为“Makefile”或“makefile”的文件中,然后在该目录下直接输入命令“make”就可以生成执行文件edit。
make clean:删除执行文件和所有的中间目标文件。
在定义好依赖关系后,后续的那一行定义了如何生成目标文件的操作系统命令,一定要以一个Tab键作为开头。
objects = main.o kbd.o command.o display.o insert.o search.o files.o utils.o
可以定义object来定义后面的所有文件,这样前两句就可以改为:
objects = main.o kbd.o command.o display.o insert.o search.o files.o utils.o
edit : $(objects)
cc -o edit $(objects)
(2)makefile中清空目标文件
一般的风格都是:
clean:
rm edit $(objects)
更为稳健的做法是:
.PHONY : clean
clean :
-rm edit $(objects)
二、vim用法总结
(1) Ubuntu安装vim编辑器:
进入root权限->sudo apt-get install vim-gtk
(2) 修改/设置密码
sudo passwd
(3) vim用法
i:插入模式->编辑
v:可视模式-> y:复制 yy:复制整行
-> d:剪切 dd:剪切整行
-> p:粘贴
^b:往前一页。
^f:往前一夜。
G:光标移到文件最后。
0:光标移到文件开头。
:w filename (存入指定档案)
:wq (写入并离开 vi)
:q! (离开并放弃编辑的档案)
:set number (设置行号)
(4)gcc常用编译命令
gcc hello.c -o hello //直接将源文件编译为可执行文件,不能debugging
gcc-g -o hello hello.c //直接将源文件编译为可执行文件,可以debugging
gcc -E hello.c -o hello.i //预编译:将头文件的内容插入源文件
gcc -c hello.i -o hello.o //编译为目标代码
gcc hello.o -o hello //链接成可执行文件
三、chmod的用法
r:读权限 w:写权限 x:执行权限
u:用户的当前权限 g:此用户所在组的当前权限 o:其他用户的当前权限
chmod u+x file 给file的属主增加执行权限
chmod 751 file 给file的属主分配读、写、执行(7)的权限,给file的所在组分配读、执行(5)的权限,给其他用户分配执行(1)的权限
chmod u=rwx,g=rx,o=x file 上例的另一种形式
chmod =r file 为所有用户分配读权限
chmod 444 file 同上例
chmod a-wx,a+r file 同上例
chmod -R u+r directory 递归地给directory目录下所有文件和子目录的属主分配读的权限
chmod 4755 设置用ID,给属主分配读、写和执行权限,给组和其他用户分配读、执行的权限。
四、linux操作系统的相关命令
(1)使用shutdown关闭系统有以下几种格式:
shutdown(系统内置2分钟关机,并传送一些消息给正在使用的user)
shutdown -h now(系统立刻关机)
shutdown -r now(系统立刻重启=reboot)
shutdown -h 20:25 (定时关机)
shutdown -h +10 (十分钟后关机)
halt (立即关机)
(2)chown命令
改变文件的所有者。
(3)chmod命令
改变目录或文件的属性。
(4)ps命令
显示目前的process或系统process的状况
常用的参数如下:
-a 列出包括其他user的process状况。
-u 显示user-oriented的process状况。
-x 显示包括没有terminal控制的process状况
-w 使用较宽的显示模式来显示process状况。
(5)who命令
用来查询目前有哪些人在线。
(6)w
查询目前有哪些人在线,同时显示那些人目前的工作。
(7)解压命令tar [option] file or dir
tar -xvf zdd.tar 将zdd.tar解压,解压后将产生zdd文件夹,里面包含解压后的文件.x表示解压,v表示输出解压信息,f表示操作普通文件
tar -cvf tmp.tar tmp 将文件夹tmp打包成tmp.tar
tar -rvf tmp.tar zzz 将文件zzz追加到tmp.tar中
(8)whilch命令
定位command的位置
(9) ls命令
ls -la 列出当前目录下的所有文件和文件夹
ls a* 列出当前目录下所有以a字母开头的文件
ls -l *.txt 列出当前目录下所有后缀名为txt的文件
(10)cp命令:复制
cp a.txt b.txt: 把文件a的内容复制到b文件
cp a.txt /test : 把文件a复制到test目录下
cp -a test test2:递归的把目录test下所有文件(包括隐藏的文件)复制到新的目录 test2
(11) cat命令:查看 组合文件
cat a.txt: 查看文件的内容
cat a.txt >> b.txt:把a文件的内容组合到b文件内容的末尾
cat -n a.txt: 查看文件并给文件标上行号
(12) rm命令:删除文件
rm -r a: 删除目录及以下的子目录
rm -rf a.txt:强制删除文件a.txt
rm -i a.txt: 删除文件前会有提示是否确定删除该文件
(13)mkdir命令:创建目录
mkdir test:创建一个名为test的目录
(14) rmdir命令:删除目录
rmdir test:删除一个目录
(15) echo、cat命令:添加内容
echo “hello world!” >> a.txt:添加内容到文件a里面
cat <<EOF>> a.txt : 可以添加多行语句到文件本身内容的末尾
cat <<EOF> a.txt:添加内容到文件并覆盖到原始的内容
(16) mv命令:移动 重命名文件
mv a.txt b.txt:文件a重新命名为b
mv a.txt ./test:把文件移动到一个目录下
(17)cd命令:更换目录
cd ~ : 切换到用户目录
cd .. :返回到上一层目录
cd ../.. :返回到上二层目录
(18) grep命令:搜索文件
ls -la | grep a.txt :搜索a.txt文件
(19) rz sz命令:上传和下载文件
(20) head命令:显示文件的前10行内容
(21) tail命令:显示文件最后10行内容
(22) du命令:显示目前这个目录所占的磁盘内存大小。
(23) df命令:显示目前磁盘的剩余内存。
(24) pwd命令:查看目前用户所在的工作路径。
(25) ln 命令
硬链接:ln 源文件目标文件 :生成一个和源文件一样的文件。
软连接(相当于快捷方式):ln -s 源文件目标文件:为某一个文件在另一个位置建一个链接。当我们在不同的目录下需要使用相同的文件时,这时不用再复制一个,只需见一个链接即可,不必重复的占用磁盘空间。
例:ln -s /bin/less /usr/local/bin/less
(26) logout命令:退出系统。
(27) mount命令
装载命令(光盘或软盘)。
格式如下:mount -t 文件系统类型设备名 装载目录。
umount:卸载命令。
(28) adduser命令:新增用户。
(29) passwd命令:修改特定用户的口令。格式如下:passwd 用户名
(30) find,whereis,locate 命令
这三个命令都是用来查找文件的,使用格式是:
find 路径名称 -name 文件名参数(我们这里就不讨论参数了)
whereis文件名
locate文件名
(31) echo
echo 是用来显示一字串在终端机上。echo -n 则是当显示完之後不会有跳行的动
作。
(32)grep/fgrep
grep 为一过滤器,它可自一个或多个档案中过滤出具有某个字串的行,或是自标准输入过滤出具有某个字串的行。
fgrep 可将欲过滤的一群字串放在某一个档案中,然後使用 fgrep 将包含有属於这一群字串的行过滤出来。
grep 与 fgrep的用法如下:
五、GDB调试器的相关用法grep [-nv] match_pattern file1 file2 ....
fgrep [-nv] -f pattern_file file1 file2 ...
-n 把所找到的行在行前加上行号列出
-v 把不包含 match_pattern 的行列出
match_pattern 所要搜寻的字串
-f 以 pattern_file 存放所要搜寻的字串
grep -i pattern files:不区分大小写地搜索。默认情况区分大小写,
grep -l pattern files :只列出匹配的文件名,
grep -L pattern files :列出不匹配的文件名,
grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配’magic’,而不是’magical’),
grep -C number pattern files :匹配的上下文分别显示[number]行,
grep pattern1 | pattern2 files :显示匹配 pattern1或 pattern2 的行,
grep pattern1 files | grep pattern2 :显示既匹配 pattern1又匹配 pattern2 的行。
grep -n pattern files 即可显示行号信息
grep -c pattern files 即可查找总行数
1)进入GDB gdb test
test是要调试的程序,由gcc test.c -g -o test生成。
2)查看源码 (gdb) l :源码会进行行号提示。
3)设置断点 (gdb) b 6
4)查看断点处情况 (gdb)info b:可以键入"info b"来查看断点处情况,
5)运行代码 (gdb) r
6)显示变量值 (gdb) p n
7)观察变量 (gdb)watch n
在某一循环处,往往希望能够观察一个变量的变化情况,这时就可以键入命令"watch"来观察变量的变化情况,GDB在"n"设置了观察点.
8)单步运行 (gdb) n
9)程序继续运行 (gdb) c
使程序继续往下运行,直到再次遇到断点或程序结束;
10)退出GDB (gdb)q
11)设置运行参数 (gdb)set args arg1 arg2
12)跳转 (gdb)jump 行号
13)执行到下一个断点或程序结束 continue(c)
14)清除断点 clear 行号