# Linux-based Development
**Repository Path**: zenny-chen/linux-based-development
## Basic Information
- **Project Name**: Linux-based Development
- **Description**: Linux(主要基于Debian系)系统下的开发资料
- **Primary Language**: Unknown
- **License**: GPL-3.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-08-30
- **Last Updated**: 2022-06-17
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Linux-based Development
Linux(主要基于Debian系)系统下的开发资料
- [GitLab CI Pipeline Stage Timeout](https://stackoverflow.com/questions/38403681/gitlab-ci-pipeline-stage-timeout)
- [GitLab CI/CD Set job start timeout](https://forum.gitlab.com/t/set-job-start-timeout/34993)
- [LinuxVersions](https://kernelnewbies.org/LinuxVersions)
- [Linux 下载文件命令](https://blog.csdn.net/hitabc141592/article/details/7561239)
- [Linux curl命令详解](https://www.cnblogs.com/duhuo/p/5695256.html)
- [Linux下的tar压缩解压缩命令详解](https://www.cnblogs.com/qq78292959/archive/2011/07/06/2099427.html)
- Linux下使用zip来压缩文件夹:`zip -r dst_file.zip src_folder_path`
- [Linux下的mv命令](https://www.cnblogs.com/peida/archive/2012/10/27/2743022.html)
- [vi 常用命令行](https://www.cnblogs.com/sunormoon/archive/2012/02/10/2345326.html)(文件保存退出一般使用`:x`命令)
- [Linux文件查找命令](https://blog.csdn.net/qq_27517377/article/details/78870293)
- [Linux系统下查看文件与磁盘空间大小](https://www.cnblogs.com/adolfmc/archive/2013/02/16/2913801.html)
- [Linux的秘密:这才是find的正确使用姿势](https://www.toutiao.com/i6549496730935624195/)
- [从今往后,谁再告诉你Linux上chmod -R 777解决权限,果断绝交](https://www.toutiao.com/a6811852198561972744/)
- [漫画 | Unix/Linux 比 Windows 差远了](https://www.toutiao.com/i7044022091791729182/)
- [apt和apt-get之间的区别解释](https://www.toutiao.com/i6734877338686718477/)
- [Linux上如何执行java程序](https://www.cnblogs.com/wanglin2016/p/6013010.html)
- Linux中冒号 **:** 用于分隔路径,点号 **.** 表示当前目录,比如:
```bash
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
```
- [linux常见系统环境变量](https://www.cnblogs.com/renping/p/7020354.html)
- [linux c 编程 环境变量的操作函数](https://blog.csdn.net/q435201823/article/details/107163816)
- [Linux连不上网解决](https://www.cnblogs.com/lbky/articles/11023246.html)
- [Linux下实时查看GPU状态](https://blog.csdn.net/zhang_yang_43/article/details/78357458)
- [Sound recording program using Nano](https://raspberrypi.stackexchange.com/questions/15018/sound-recording-program-using-nano)
- [Install alsa-utils on Ubuntu: sudo apt-get install alsa-utils](https://www.devmanuals.net/install/ubuntu/ubuntu-12-04-lts-precise-pangolin/install-alsa-utils.html)
- [Sound Recording & Play on Raspberry Pi Using ALSA in C](https://stackoverflow.com/questions/38615396/sound-recording-play-on-raspberry-pi-using-alsa-in-c)
- [使用ALSA检查声卡驱动](https://www.alsa-project.org/wiki/SoundcardTesting)(在Linux下,**alsamixer** 工具在 `/usr/bin/alsamixer`下,使用F6可切换声卡。也可以使用 `arecord -l` 命令来列出支持麦克风声卡的驱动。)
- [【Linux&音频】Alsa音频编程【精华】](https://www.cnblogs.com/lifan3a/articles/5481993.html)
- [教程】树莓派设置3.5mm接口输出音频](https://www.jianshu.com/p/674145fe98fa)
- [树莓派更换软件源](https://www.toutiao.com/a6796581937096950283/)
- [树莓派搭建视频监控平台](https://www.toutiao.com/a6847285154025570829/)
- [树莓派之蓝牙编程](https://blog.csdn.net/qq_25005909/article/details/77512903)
- [树莓派连接USB转串口的使用](https://blog.csdn.net/fhqlongteng/article/details/80417028)
- [用树莓派玩转蓝牙](https://www.cnblogs.com/vamei/p/6753531.html)
- [树莓派 3B+ 原生蓝牙与手机通讯(BlueTooth SPP)方法和步骤](https://blog.csdn.net/wanyeye/article/details/52909869)
- [Linux(RaspberryPi)上使用BLE低功耗蓝牙](https://blog.csdn.net/qq_33433070/article/details/78668105)
- [Creating BLE GATT Server (UART Service) on Raspberry Pi](https://scribles.net/creating-ble-gatt-server-uart-service-on-raspberry-pi/)
- [Chapter 4. Bluetooth programming in C with BlueZ](https://people.csail.mit.edu/albert/bluez-intro/c404.html)(安装蓝牙开发库:`sudo apt-get install libbluetooth-dev`)
- [linux Bluetooth programming in c](https://stackoverflow.com/questions/11408609/linux-bluetooth-programming-in-c)
- [Generic Attribute Profile (GATT)](http://dev.ti.com/tirex/content/simplelink_cc2640r2_sdk_1_40_00_45/docs/blestack/ble_user_guide/html/ble-stack-3.x/gatt.html)
- [BLE master/slave, GATT client/server, and data RX/TX basics](https://www.silabs.com/community/wireless/bluetooth/knowledge-base.entry.html/2015/08/06/_reference_ble_mas-gviy)
- 含有调用`hci_le_set_advertise_enable` How do I set a software breakpoint on an ARM processor?API的代码必须使用`sudo`来运行,否则会出现“认证失败”的错误码。
- [bleno で Raspberry Pi を BLE Peripheral として動かしてみる](https://qiita.com/comachi/items/c494e0d6c6d1775a3748)
- [Bluetooth GATT: How to Design Custom Services & Characteristics \[MIDI device use case\]](https://www.novelbits.io/bluetooth-gatt-services-characteristics/)
- [串口通讯的原理、代码实现及注释](https://www.toutiao.com/a6729730596051878404)
- [ubuntu安装最新版node和npm](https://www.jianshu.com/p/f2592d106aac)
- [Linux下使用游戏手柄](https://blog.csdn.net/qq_25556149/article/details/79730217)
- [蓝牙hid协议源码解析](https://blog.csdn.net/u012439416/article/details/54348438)
- [gtk 实现键盘按键的读取](https://blog.csdn.net/shibixiao/article/details/4861117)(最后可以将"key-press-event"添加到window对象上以实现全局侦听)
- [GTK进阶学习:鼠标事件](http://www.mamicode.com/info-detail-445416.html)
- [What are the environment variables by default?](https://unix.stackexchange.com/questions/329429/what-are-the-environment-variables-by-default)
- [树莓派Virtual keyboard activation](https://raspberrypi.stackexchange.com/questions/41150/virtual-keyboard-activation)
- [树莓派引脚编号说明](https://www.toutiao.com/a6746428899854385668/)
- Raspbian安装OpenGL ES与EGL:`sudo apt-get install libva-egl1 libegl1-mesa-drivers gegl libgles2-mesa-dev libglfw-dev`
- [Only OpenGL ES 1.1 and not 2.0 on Raspberry Pi 3](https://stackoverflow.com/questions/48136077/only-opengl-es-1-1-and-not-2-0-on-raspberry-pi-3)
- [Raspberry Pi VideoCore APIs](https://elinux.org/Raspberry_Pi_VideoCore_APIs)
- [linux下获取按键响应事件](https://www.cnblogs.com/yangwindsor/articles/3454955.html)(这种方式是阻塞式的)
- [Raspbian下在EGL环境中捕获键盘按键响应事件](https://github.com/AndrewFromMelbourne/raspidmx/blob/master/common/key.c)(Linux下获得鼠标事件可参考Raspbian系统下`/opt/vc/src/hello_pi/hello_triangle2`这一demo。)
- [Linux下的进程间通信:共享存储](https://www.toutiao.com/a6688140435799409160)
- [共享内存才是实现进程间通信最简单也是最直接的方法](https://www.toutiao.com/a6736813277818389006/)
- [Linux共享内存使用常见陷阱与分析](https://zhuanlan.zhihu.com/p/260418383)
- [Linux内核中的软中断、tasklet和工作队列](http://blog.csdn.net/T146lLa128XX0x/article/details/79070798)
- [多线程 or 多进程?](https://blog.csdn.net/zy799894671/article/details/18405033)
- [Linux内核如何替换内核函数并调用原始函数](https://blog.csdn.net/dog250/article/details/84201114)
- [怎样Hack Linux的内核符号?](https://blog.csdn.net/sinat_30551659/article/details/107705842)
- [How To Install LLVM and Clang on CentOS 6](https://www.vultr.com/docs/how-to-install-llvm-and-clang-on-centos-6)
- [在Centos-5下安装Objective-C的编译环境](http://blog.csdn.net/Robincui2011/article/details/6785987)
- [浅谈 Linux下的零拷贝机制](https://www.toutiao.com/i6462135845481611790/)
- [零拷贝(zero copy)技术你真的懂吗?什么时候需要用到内存映射?](https://www.toutiao.com/a6810663802636337677/)
- [Linux——sendfile零拷贝高效率发送文件](https://blog.csdn.net/lemonchi/article/details/81484152)。sendfile高效传输文件,无需内核态到用户态,用户态到内核态copy数据。
```c
/**
NAME
sendfile - transfer data between file descriptors
SYNOPSIS
#include
*/
ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);
```
- [浅谈mmap介绍](https://www.toutiao.com/a6756789193474572808/)
- [linux库函数mmap\(\)原理及用法详解](https://blog.csdn.net/qq_41687938/article/details/119901916)
- [在Linux中利用mmap模拟Windows的VirtualAlloc](https://blog.csdn.net/cjfeii/article/details/9122279)
- [深入理解 Linux 内核--jemalloc 引起的 TLB shootdown 及优化](https://www.toutiao.com/a6801053138380915211/)
- [Memory Allocation Guide](https://www.kernel.org/doc/html/latest/core-api/memory-allocation.html)
- [Linux系统监控:虚拟内存](https://www.cnblogs.com/luoahong/articles/7911266.html)
- [linux虚拟内存,内存及内存管理相关](https://blog.csdn.net/chen_jianjian/article/details/88876392)
- [万字长文,别再说你不懂Linux内存管理了(合辑),30 张图给你安排的明明白白](https://mp.weixin.qq.com/s?__biz=MzI3ODQ3OTczMw==&mid=2247493251&idx=1&sn=10d495947c4849c6cf854b15e7f6e7c5&chksm=eb54f099dc23798fce0f5db05e080bb0830133504dcfed325c66c2dcae6f4176b36484225676&mpshare=1&scene=23&srcid=01094DqUSLSGFRKOOLtfpqsU)
- [深入理解glibc malloc:malloc() 与 free() 原理图解](https://www.toutiao.com/i7046286983177470500/)
- [Linux内核Page Cache和Buffer Cache关系及演化历史](https://www.toutiao.com/a6816861382776979976/)
- [DMA,Direct IO和零拷贝](https://www.toutiao.com/i6945819523622666782/)
- [Linux内核快速处理路径尽量多用slab而慎用kmalloc](https://blog.csdn.net/dog250/article/details/105544111)
- [聊聊文件IO](https://www.toutiao.com/a6700806648274878987)
- [存储进阶:怎么才能保证 IO 数据的安全?](https://www.toutiao.com/i6959376691781190151/)
- [分钟搞懂Linux中直接I/O原理](https://www.toutiao.com/a6701654059910169091/)
- [高级程序员进阶:了解Linux I/O 调度器,优化系统性能](https://www.toutiao.com/a6735373272432509452/)
- [epoll原理简介](https://www.toutiao.com/a6701457609444033031)
- [如果这篇文章说不清epoll的本质,那就过来掐死我吧!](https://www.toutiao.com/a6683264188661367309)
- [高并发高吞吐IO秘密武器——epoll池化技术](https://www.toutiao.com/i7008441343617794563/)
- [6种epoll的设计,让你吊打面试官,而且他不能还嘴](https://www.toutiao.com/i7009187407606088223/)
- [非阻塞 I/O 和多路复用+select、poll、epoll模型详解](https://www.toutiao.com/i6554223409138500110)
- [io_submit:Linux内核新加入的epoll替代方案](https://www.toutiao.com/a6809889593286984206/)
- [AIO 的新归宿:io_uring](https://zhuanlan.zhihu.com/p/62682475)
- [io_uring只适用于存储IO?大错特错](https://www.toutiao.com/i6884987457641644551/)
- [io_uring vs epoll,谁在网络编程领域更胜一筹?](https://www.toutiao.com/i7045101452641124877/)
- [Linux下全新的异步I/O:io_uring详解](https://www.toutiao.com/i7011043732220805668/)
- [linux异步IO编程实例分析](https://www.toutiao.com/a6875582313590325774/)
- [kqueue用法简介](https://www.cnblogs.com/luminocean/p/5631336.html)
- [使用kqueue在FreeBSD上开发高性能应用服务器](http://www.ibm.com/developerworks/cn/aix/library/1105_huangrg_kqueue/)
- [Linux AIO 异步读写](https://www.cnblogs.com/standardzero/p/12552642.html)
- [最专业的对“鸿蒙”的分析](https://www.toutiao.com/a7039879650885222951/)
- [使程序在Linux下后台运行 (关掉终端继续让程序运行的方法)](https://www.cnblogs.com/little-ant/p/3952424.html)
- Linux下生成动态库使用` -fPIC -shared`编译选项,并且动态库的命名规则为:lib.so。加载动态库时使用`export LD_LIBRARY_PATH=`导出动态库所在路径。
- GCC默认连接静态库使用此连接选项:`-static`。
- GAS下使用Intel语法汇编并且在寄存器前不添加`%`符号:`.intel_syntax noprefix`。
- GCC/Clang编译器下要使用,则得:`#include `。
- [How do I call “cpuid” in Linux?](https://stackoverflow.com/questions/14266772/how-do-i-call-cpuid-in-linux)
- [linux下常用的几个时间函数:gettimeofday和clock_gettime](https://blog.csdn.net/fchyang/article/details/81166470)(使用精确时间戳,直接使用`clock_gettime(CLOCK_MONOTONIC, ×pec);`。)
- [Linux下的sleep()和usleep()的使用和区别](https://www.cnblogs.com/ZhaoxiCheung/p/6792734.html)
- [Linux 获取本机IP、MAC地址用法大全](https://www.cnblogs.com/fnlingnzb-learner/p/6427786.html)
- [C++ win32和linux获取系统剩余内存](https://blog.csdn.net/q1368232592/article/details/85157823)
- Linux获取当前系统分发版本信息:`cat /etc/os-release`
- [Linux下获取内核版本号的函数](https://blog.csdn.net/ly890700/article/details/53540653)
- [Linux系统调用--uname()函数及系统下的uname命令](http://blog.chinaunix.net/uid-8996150-id-2011653.html)
- [Linux查看物理CPU个数、核数、逻辑CPU个数](https://www.cnblogs.com/bugutian/p/6138880.html)
- [Linux如何查看CPU信息,Linux查看CPU个数和核心数,Linux查看CPU使用率和运行位数](https://blog.csdn.net/tiiefu1212/article/details/78623132)
- [获取SYSTEM()执行结果](https://blog.csdn.net/u013625451/article/details/78830104)
- [linux中open()函数的mode_t 含义](https://blog.csdn.net/sdhgood/article/details/39555311)(**`O_LARGEFILE`** 标志用于指示`off_t`无法容下文件大小而只能用`off64_t`)
- [教你写第一个Linux设备驱动程序](https://www.toutiao.com/a6812972562201444878/)
- [How do I set a software breakpoint on an ARM processor?](https://stackoverflow.com/questions/11345371/how-do-i-set-a-software-breakpoint-on-an-arm-processor)
- 对于不支持硬件断点的ARM Linux可使用`raise(SIGTRAP)`系统调用来触发gdb的断点调试。
- [Ubuntu系统下通过Clang编译器编写Objective-C](https://blog.csdn.net/zenny_chen/article/details/52507022)
- Ubuntu下安装libz库:`sudo apt-get install zlib1g-dev`,然后使用`-lz`去连接。
- Ubuntu下安装BSD库:`sudo apt-get install libbsd-dev`,然后使用`-lbsd`去连接。此外,在``中可使用 **arc4random** 等函数。
- Ubuntu下安装glib库:`sudo apt-get install libglib2.0-dev`。主要头文件为:``。使用`pkg-config --cflags glib-2.0`可观察详细编译选项;使用`pkg-config --libs glib-2.0`可详细查看需要连接的库。如果我们要使用gobject库,那么将上述查看编译和连接选项的库名改为`gobject-2.0`即可。gobject库的头文件为:``。
- [GLib开源项目](https://gitlab.gnome.org/GNOME/glib)
- Ubuntu下查看当前所有可安装的软件包:`dpkg -l`。
- [Download C# Mono](https://www.mono-project.com/download/stable/#download-lin)(安装完整的Mono:`sudo apt-get install mono-complete`。安装Monodevelop IDE:`sudo apt-get install monodevelop`。不过在树莓派上无法安装Monodevelop IDE,因此直接编译C#代码使用`mcs`命令,可直接生成可执行代码。对于mcs命令,使用`-unsafe`选项可启用非安全代码。)
- [.net、mono和C#](https://www.cnblogs.com/kekec/p/7237156.html)
- [.NET Core3.0开发Liunx桌面应用程序主要是依靠GTK](https://www.cnblogs.com/kgxk/p/11875769.html)
- [人工智能开发必须掌握的那些Linux指令(高级篇)](https://mp.weixin.qq.com/s/k3XuvGMV71gmDhhhLmL23w)
如果在Ubuntu上安装GCC或使用`sudo apt-get install build-essential`失败,则需要先执行一下`sudo apt-get update`,更新之后再执行安装命令。
## Raspbian系统下所需要安装的开发工具
```bash
sudo apt-get update
sudo apt-get install build-essential
# 安装用于Objective-C的GNUstep
sudo apt-get install gnustep
sudo apt-get install gnustep-devel
# 安装GTK+3
sudo apt-get install libgtk-3-dev
# 安装asound2库
sudo apt-get install libasound2-dev
# 安装alsa-utils
sudo apt-get install alsa-utils
# 安装蓝牙相关工具
sudo apt-get install blueman
# 安装bluetooth开发库
sudo apt-get install libbluetooth-dev
```
## Ubuntu下安装CUDA以及其自带驱动
以下文档文档可供参考:
- [Ubuntu 卸载 Nvidia 驱动和安装最新驱动](https://blog.csdn.net/wm9028/article/details/110268030)
- [在linux上安装cuda的时候报错:Existing package manager installation of the driver found.](https://blog.csdn.net/weixin_41010198/article/details/109367449)
1. 先在Ubuntu上卸载原始自带的nVidia驱动,它通常为Linux开源驱动:
```bash
sudo apt-get remove --purge nvidia*
sudo apt autoremove
sudo apt-get --purge remove "*nvidia*"
# 查看系统中安装了哪些nVidia驱动,如果全都删除的话应该不会有任何库出现
sudo dpkg --list | grep nvidia-*
```
2. 由于安装NV显卡驱动过程中不能使用X Window界面,因此我们必须进入命令行,关闭图形窗口界面。
首先按下`Ctrl + Alt + F1`进入命令行模式,然后分别输入用户名和密码。
3. 然后关闭X Server服务:`sudo stop lightdm`
4. `sudo init 3`
5. 重新输入用户名和密码。
6. 运行CUDA安装run文件:`sudo bash NVIDIA-Linux-x86_64-xxx.yy.zz.run`
7. 最后重启:`sudo reboot`
## CentOS下安装CUDA驱动
1. 准备环境设置:
```bash
chmod -R 777 /home/;chmod -R 777 /opt/;yum -y install gcc kernel-devel kernel-headers;mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak;dracut /boot/initramfs-$(uname -r).img $(uname -r);echo blacklist nouveau >>/usr/lib/modprobe.d/dist-blacklist.conf;echo options nouveau modeset=0 >>/usr/lib/modprobe.d/dist-blacklist.conf
```
2. 退出GUI桌面:
```bash
systemctl stop gdm.service
```
3. 运行安装文件(run文件):
```bash
bash /mnt/andy/soft-all-for-linux/2xianka-install/NVIDIA-Linux-x86_64-390.48.run
```
4. 卸载驱动:
```bash
bash /mnt/andy/soft-all-for-linux/2xianka-install/NVIDIA-Linux-x86_64-390.48.run --uninstall
```
## GNUstep编译选项
我们通过执行以下命令来观察Objective-C编译时所需要的编译选项:`gnustep-config --objc-flags`
执行以下命令查看Objective-C连接时所需要的加载选项:`gnustep-config --objc-libs`
整理之后:
```bash
export GCC_PATH=/usr/lib/gcc/arm-linux-gnueabihf/8/
gcc test.m -std=gnu11 -Os -MMD -MP -DGNUSTEP -DGNUSTEP_BASE_LIBRARY=1 -DGNU_RUNTIME=1 -DGNUSTEP_BASE_LIBRARY=1 -fno-strict-aliasing -pthread -fPIC -Wall -DGSWARN -DGSDIAGNOSE -Wno-import -fgnu-runtime -fconstant-string-class=NSConstantString -I. -I/usr/local/include/GNUstep -I/usr/include/GNUstep -I${GCC_PATH}include/ -rdynamic -L/root/GNUstep/Library/Libraries -L/usr/local/lib -L/usr/lib -lobjc -lm -lgnustep-base -o test
```
## GTK+ 3编译选项
查看当前环境的GTK+ 3编译选项:`pkg-config --cflags --libs gtk+-3.0`
整理之后:
```bash
export ABI_NAME=${HOSTTYPE}-${OSTYPE}
gcc main.c -std=gnu11 -I/usr/include/glib-2.0/ -I/usr/include/atk-1.0/ -I/usr/include/gdk-pixbuf-2.0/ -I/usr/include/cairo/ -I/usr/include/pango-1.0/ -I/usr/lib/${ABI_NAME}/glib-2.0/include/ -I/usr/include/gtk-3.0/ -L/usr/lib/${ABI_NAME}/ -lgtk-3 -lgobject-2.0 -lpangocairo-1.0 -lgio-2.0 -latk-1.0 -lgdk-3 -lglib-2.0 -o gtk-test
```
## C\# mono的使用
先创建一个csharp文件名,比如:**`CSTest.cs`**。然后输入以下代码:
```cs
using System;
class CSTest
{
static void Main(string[] args)
{
Console.WriteLine("Hello, C#");
}
}
```
最后在命令行进入到该源文件所在目录,然后输入:`mcs CSTest.cs`,最后就会生成CSTest.exe可执行文件。
## 安装LLVM-Clang
```shell
sudo apt-get install llvm
sudo apt-get install clang
sudo apt-get install libdispatch-dev
```
从GCC 8起,Clang 6起可以使用`-std=gnu17`标准。
## Git命令一般使用
- [程序员学习道路第一条,学会Git,一学就会](https://www.toutiao.com/a6694015880218542606)
- [一篇文章,教你学会Git](https://www.toutiao.com/a6774284445873603083/)
- [Git超实用总结,再也不怕记忆力不好了](https://www.cnblogs.com/qcloud1001/p/9796750.html)
- [.gitignore 常用语法](https://blog.csdn.net/mengxin00100/article/details/122353917)
- [记一次git revert误操作找回](https://zhuanlan.zhihu.com/p/94922874)
- [git checkout切换到指定commit](https://blog.csdn.net/gtLBTNq9mr3/article/details/110729551)
- [怎么退出git bash编辑界面,怎么退出git log](https://blog.csdn.net/weixin_43290229/article/details/86094690)
- [Git取消跟踪文件和目录](https://blog.csdn.net/qq_38301914/article/details/70198006)
- [How To Rename a Local and Remote Git Branch](https://linuxize.com/post/how-to-rename-local-and-remote-git-branch/)
- 丢弃当前修改的本地文件:`git checkout -- filepathname`
- 丢弃上一次的提交:`git reset --hard origin/master`
- `git status`:先检查一下情况
- `git commit -a -m "xxx"`:-a表示所有修改过的文件都commit
- `git commit -m "xxx" 1.cpp 2.cpp`:指定commit哪几个文件
- 列出指定目录指定日期区间的所有提交,并以日期从老到新的次序排列,最后输出到指定文件:`git log --reverse --oneline --since ==2020-01-20 --until ==2021-02-05 project/src/ > /tmp/commit-log.txt`
- Linux中配置git的编辑器为系统自带的GEdit编辑器:`git config --global core.editor "gedit -s"`
- 追加或修改上一次提交的更多提交信息:`git commit --amend`,然后再执行push。
## vim常用命令
- ESC: 进入命令状态
- a: 从命令状态进入编辑状态
命令状态下:
- `:q` 退出,不保存
- `:wq` 退出,且保存
- 强制退出并保存:`:wq!`
## FreeBSD相关
- [NETGRAPH](https://www.freebsd.org/cgi/man.cgi?query=netgraph&sektion=4)
- [netmap(4)](https://www.unix.com/man-page/freebsd/4/netmap/)
- [sctp(4)](https://www.unix.com/man-page/freebsd/4/sctp/)