【Linux 基础】1-野火 Linux 第一季 Linux 入门笔记(Linux 根目录 + shell命令和脚本 + Makefile语法)
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具