【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

 

posted @ 2023-03-10 16:55  FBshark  阅读(156)  评论(0编辑  收藏  举报