# LinuxTools
**Repository Path**: setekh/linux-tools
## Basic Information
- **Project Name**: LinuxTools
- **Description**: 个人Linux学习常用工具
- **Primary Language**: C
- **License**: MulanPSL-2.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 1
- **Created**: 2024-04-25
- **Last Updated**: 2024-05-25
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
#
Linux 个人学习常用工具集
---
> 个人网站域名备案过啦,欢迎来留言!
> 🐶 https://blog.setekh.fun/
## makefile-set --> **Makefile合集**
> 常用makefile语法整合自网络信息,可能有误
> 其他makefile已经进行简单测试,如有错误请告知我
### Makefile 分类说明
- `Makefile-all`
包含几乎全部常用makefile语法, 可供查阅, 日常使用没有必要使用这么复杂的语法
- `Makefile-separate`
每个源文件都会生成一个单独的可执行文件
- `Makefile-single`
将所有源文件整合生成单个可执行文件
- `Makefile-project`
针对使用 src/ include/ obj/ 多文件夹管理源码的小型项目的makefile
- `Makefile-project-plus`
在上面的makefile的基础上可以链接本地静态库,可以搜索src内子文件夹里的源文件,可以自动建立obj文件夹
**一个血的教训😭**
Makefile变量定义有四种语法, 其中常用的两种: `=`是递归展开, `:=`是简单展开
此时如果随意的在变量定义后加注释可能导致空格被视为变量定义的一部分, 导致常见的目录路径错误
~~所以没事不要随意的在Makefile中写注释~~
```Makefile
DIR := ./src # 此处有4个空格
```
### TODO
- [x] 测试makefile
- [ ] 添加详细注释(真记不住这么多语法😶🌫️)
- [x] 添加测试用例(就一个)
### Makefile 学习手册
👍 https://seisman.github.io/how-to-write-makefile/index.html
## custom-bash --> **bash终端界面美化**
### 效果展示
~~为什么不让我用自己的图床啊❓~~

### 快速使用说明
> 如果你还不熟悉vim操作请务必先备份配置文件!
> 请不要直接复制文件替换, 我还改了其他设置
> 设置效果基于VSCode测试, 其他软件可能有一定差别
1. 使用vim打开个人家目录下的`.bashrc`文件
2. 复制下面的代码
```shell
export PS1="\[\e[32;1m\]\u\[\e[0m\]:\[\e[0m\]\[\e[36;1m\]\w\[\e[33;1m\]\n\$\[\e[0m\]"
```
3. 将上面的代码添加到文件最后一行并保存
4. 重启终端以显示效果
### 我不喜欢这个颜色!
`\[\e[F;Bm\]` 表示颜色标记的开始
`\[\e[0m\]` 表示颜色标记的结束
其中`F`表示字体颜色, `B`表示背景颜色
具体颜色代码如下表所示
| 字体代码 | 背景代码 | 颜色 |
| ---- | ---- | :----: |
| 30 | 40 | 黑色 `#000000` |
| 31 | 41 | 红色 `#FF0000` |
| 32 | 42 | 绿色 `#00FF00` |
| 33 | 43 | 黄色 `#FFFF00` |
| 34 | 44 | 蓝色 `#0000FF` |
| 35 | 45 | 紫色 `#FF00FF` |
| 36 | 46 | 青色 `#00FFFF` |
| 37 | 47 | 白色 `#FFFFFF` |
### 我不想要`$`符号换行!
> Q: 为什么我要在这里加个换行呢?
> A: 因为当你的工作目录过长时, 你需要输入的指令也比较长时整体的视觉效果会看起来非常逼死强迫症👿
删除`export`代码中的`\n`即可
此时如果经常遇到工作目录过长可以考虑将`\w`改为`\W`, 此时只显示一级当前工作目录
## my-header --> **头文件铸币包(bushi)**
复制头文件并放置到`/usr/include/`目录下即可
**个人小建议:**
使用`ln -s 源文件 目标文件`指令建立软连接到你常用的目录便于未来快速修改头文件内容
例如使用如下指令在当前目录创建一个软连接
```shell
ln -s /usr/include/my_header.h link_my_header
```
## git-config --> **个人git懒人设置**
### 使用方法
1. 使用打开个人家目录下的 `.gitconfig` 文件
2. 复制以下代码
```
[alias]
co = checkout
ci = commit
br = branch
st = status
last = log -1
lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
```
3. 放到 `.gitconfig` 文件末尾
4. 此时你就可以快乐的使用简短的命令了
### 推荐一个刚发现的git图形界面学习网站
可以用图形化效果直观展示每个git指令实际作用, 便于大家快速上手, 为即将开始的小组项目的源码管理做好准备
👍 https://learngitbranching.js.org/?locale=zh_CN
建议配合廖雪峰老师的详细教程食用
🤩 https://www.liaoxuefeng.com/wiki/896043488029600
## Markdown 速查手册
👍 https://markdown.com.cn/cheat-sheet.html
下面是 gitee markdown 语法渲染定制化修改
https://gitee.com/help/articles/4130#article-header0
## 🥲关于配置VSCode时遇到的一个折磨我两个晚上的问题
### **📍找到真正的解决方案了**
👍 https://stackoverflow.com/questions/71043304/vscode-report-undefined-symbol-which-has-been-actually-included
> The problem here is that sigset_t is only defined if _POSIX_C_SOURCE is defined.
> With the C standard that gcc uses by default, _POSIX_C_SOURCE is already defined. So compiling your program with gcc doesn't produce an error.
> To solve this you can add `"cStandard": "gnu11"` to you config file, or add `"defines": ["_POSIX_C_SOURCE=199309L"]`.
**优先选择修改C标准为gnu11,一劳永逸。**
gcc的默认C标准是gnu11,不需要`_POSIX_C_SOURCE`定义
### **以下解法不靠谱,但暂时留着备用**
当使用VSCode连接远程Linux服务器进行编程时, Itellisense有时候会无法识别部分标准库函数的标识符, 出现一种明明我包含了对应头文件, 甚至GCC编译正常通过, 但是VSCode就是会报错提示未定义的函数或者宏定义, 因为这个bug我找遍内外全网都没找到解决方案, 折腾了两晚上才搞懂必须强制指定Itellisense递归检索头文件
具体代码如下, 复制下面两行放到当前工作区的`settings.json`文件中并重启即可
```json
"C_Cpp.intelliSenseEngineFallback": "disabled",
"C_Cpp.intelliSenseEngine": "Tag Parser",
```
>对不起, 这个仍旧不是真正解决办法, 使用后无法联想自己定义的变量乐
>~~微软! 我chaos🫵の🐎~~
## 常用正则表达式及快速测试工具
👍 https://tool.oschina.net/regex/#
## Linux编程参考书目
**Richard Stevens**
- 《UNIX网络编程》
- 《UNIX环境高级编程》
- 《TCP/IP详解 卷1:协议》