Linux根目录结构
- (类似 正点原子 STM32 的 USER)程序和配置相关(4个):存储系统命令:bin;配置文件:etc;程序文件:usr; 第三方软件:opt
- (类似HARDWARE)挂载外设相关(3个):dev, mnt, media
- (类似SYSTEM)进程与内核信息相关(2个):proc,sys
- (类似 CORE/LIB)共享库:lib
- 网络服务:srv
- 临时文件相关:run, tmp
- 开机启动:boot
centos7 下安装tree
在有网络的情况下:
1、包管理器安装
centos 中用 yum -y install tree
ubuntu 中用 apt-get install tree
当然如果需要权限不要忘了在前面加上 sudo
在没有网络的情况下:
1、提前下载源码文件 ftp://mama.indstate.edu/linux/tree/ ,将准备好的源码文件放在 root 目录下
2、 tar zxvf tree-1.7.0.tgz
3、 cd tree-1.7.0
4、 make
5、 cp tree /bin
————————————————
在 Debian 系统中时,
apt-get install tree时Unable to locate package tree
使用sudo apt-get update
再进行apt-get install tree
一些 Shell 命令
- echo: 有重定向功能:例如 echo 12345 >> x.txt 向x.txt 的下一行添加12345。
- ln 命令: 硬链接: 格式 ln 原文件名 现文件名 软链接:格式 ln -s 原文件名 现文件名
- cp命令:复制命令,格式:cp 原文件名 现文件名
- tar命令:打包\解包文件(不进行压缩)
- find命令:查找当前文件夹符合名字的文件 find \ -name "123.txt"
- grep命令:在相应文件中查找相应的字符串 格式:grep 字符串 文件名
- rm命令:删除文件或者文件夹
- cp命令:cp 文件名 文件夹名 将文件复制到指定的文件夹。
cp -r 命令:复制文件夹 cp -r ./makefile ./makefiletest
- cd 命令:加“-”:减号,作为cd 命令的参数时可以返回上一次cd 切换前的目录。
- which 命令:系统调用的文件都存在$PATH 环境变量中的一个路径上,对某一个命令,可以用which得到其具体的路径。
- 例如:which ls
- 另外,在windows 命令行中 where 命令与 Linux 的which命令等价。
一些 vim 命令
1. set nu :显示行号(set nonu, 不显示行号)
2. /关键词 :查找关键词
3. 行号+Shift+g: 跳转到指定行
shell 脚本编程
基础知识:
shell 脚本语言是一种解释语言(C语言是编译语言)
环境变量:通过 echo $PATH 查看
解释器:通过 cat /etc/shells 查看
情况:bash: ./test.sh: Permission denied
修改权限即可:
chmod 777 test.sh
一个较好的Makefile
当main.c改动时,而mp3.c没改动时,只编译main.c,省去了将mp3.c编译成mp3.o的过程。反之亦然。
1 test:main.o mp3.o
2 gcc main.o mp3.o -o test
3
4 main.o:main.c
5 gcc -c main.c -o main.o
6
7 mp3.o:mp3.c
8 gcc -c mp3.c -o mp3.o
第二版:
注意:
Line3 : 不能写为:OBJS=“main.o mp3.o”
Line9 :#要放在最前面,才起注释作用
1 CC=gcc
2 TAR=test
3 OBJS=main.o mp3.o
4
5 $(TAR):$(OBJS)
6 $(CC) $^ -o $@
7
8 #main.o:main.c
9 # $(CC) -c main.c -o main.o
10
11 #mp3.o:mp3.c
12 # $(CC) -c mp3.c -o mp3.o
13
14 %.o:%.c
15 $(CC) -c $< -o $@
16
17 .PHONY:clean
18
19 clean:
20 rm -r *.o test
在做贪吃蛇项目的时候,参考同学,我做了以下的Makefile:
1 #使用Makefile的优势:1.命令简单,不用长串的g++命令 2. 编译效率高,不用重复编译没有修改过的文件
2 #原来的长命令是:
g++ main.cpp data_process.cpp comm.cpp map_build.cpp food_define.cpp snake_define.cpp -o test -levent -lpthread
3
4 #设置编译器
5 CC = g++
6 #设置最终目标
7 TARGET = ./server_test
8 #设置源文件(可用 *.c 但是这里必须除去 test.cpp,因此我罗列出来)
9 C_SOURCE += main.cpp data_process.cpp comm.cpp map_build.cpp food_define.cpp snake_define.cpp
10
11 #设置头文件路径
12 INCLUDE_PATH += -I ./
13
14 #设置库文件路径 (这里没用到另外的非系统的库,因此注释掉)
15 #LIBRARY_PATH += -L ./
16 #设置库名
17 LIB += -lpthread
18 LIB += -levent
19
20
21 #最终Makefile有效的内容(前面都是定义变量,为这一步做准备的)
22 #方式一:其实这里并没有第二点提高编译效率的作用,因为每一次都重新编译了,对于小项目来说是可行的
23 #$(TARGET):$(C_SOURCE)
24 # $(CC) $^ -o $@ $(INCLUDE_PATH) $(LIB)
25 #方式二:采用Makefile模式匹配语法(%)
26 #设置目标文件(与上面的C_SOURCE 一一对应)
27 C_OBJECT += main.o data_process.o comm.o map_build.o food_define.o snake_define.o
28 $(TARGET):$(C_OBJECT)
29 $(CC) -o TARGET $(C_OBJECT) $(INCLUDE_PATH) $(LIB)
30
31 %.o:%.c
32 $(CC) -c $<
33
34 #伪目标——防止存在clean文件,从而使得rm无法执行。目的是区别生成文件的相关命令
35 .PHONY: clean
36 clean:
37 rm *.o
38 rm $(TARGET)
39
40 #这个文件还有不足,就是生成的.o 文件都在当前文件下,如果能生成在一个独立的 BUILD 文件夹之下就更好了。
41 .PHONY: cleanobj
42 cleanobj:
43 rm *.o