# tiny-tools **Repository Path**: Shine_Zhang/tiny-tools ## Basic Information - **Project Name**: tiny-tools - **Description**: 一些不能登大雅之堂的小工具 (单独建个仓库有点没必要,但后面可能会用到) - **Primary Language**: Shell - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-12-16 - **Last Updated**: 2024-12-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # TinyTools ## 介绍 一些不能登大雅之堂的小工具,包括脚本和代码封装库 (单独建个仓库有点没必要,但后面可能会用到) ### [1. 文件传输脚本](01_trans_file/file_transfer.sh) 该脚本用于通过 SSH 和 rsync 上传和下载文件。 - 通过指定本地文件路径和远程主机路径,可以实现文件的传输。 - 支持通过参数选择上传或下载文件。 该脚本依赖于 `rsync` 和 `sshpass` 工具。如果系统中未安装这些工具,脚本会自动尝试进行安装 #### 配置 使用前需要配置部分 ``` bash # 远程主机信息(使用前修改) REMOTE_USER="xxx" # 远程主机登录用户名 REMOTE_HOST="42.193.219.111" # 远程主机IP REMOTE_PATH="/home/scp" # 远程主机传输路径 SSH_PORT="6000" # 远程主机SSH自定义端口,默认22 REMOTE_PASSWORD="123" # 远程主机登录密码 ``` #### 用法 ```bash $ ./file_transfer.sh [本地文件路径] [选项] # 本地文件路径: 要上传或下载的本地文件路径。 # 选项: # -r:从远程主机下载文件到本地。 # -h, --help:显示帮助信息。 ``` 示例 - 上传文件到远程主机: ```bash $ ./file_transfer.sh /path/to/local/file ``` - 从远程主机下载文件到本地: ```bash $ ./file_transfer.sh /path/to/local/destination -r ``` ### [2. 目录同步脚本](02_sync_files/sync_files.sh) 该脚本用于在本地和远程计算机之间同步文件夹,支持增量同步和删除同步。通过 `rsync` 工具进行文件的同步,确保目标文件夹与源文件夹一致。 - **增量同步**:只同步变化的文件,减少传输量。 - **删除同步**:删除目标目录中那些在源目录已被删除的文件,确保源和目标目录内容一致。 该脚本依赖于 `rsync` 和 `sshpass` 工具。如果系统中未安装这些工具,脚本会自动尝试进行安装 #### 配置 使用前需要修改部分 ``` bash # 远程主机信息(使用前修改) REMOTE_USER="xxx" # 远程主机登录用户名 REMOTE_HOST="42.193.219.111" # 远程主机IP SSH_PORT="6000" # 远程主机SSH自定义端口,默认22 REMOTE_PASSWORD="123" # 远程主机登录密码 # 远程主机传输路径 REMOTE_PATH="/home/xxx/scp" # 本地路径 LOCAL_PATH="/home/xxx/scp" ``` #### 用法 1. 从远程主机同步文件到本地 ```bash ./sync_files.sh -r ``` 将远程主机的文件夹同步到本地目录,并删除本地多余的文件(即远程已删除的文件)。 2. 将本地文件同步到远程主机 ```bash ./sync_files.sh -u ``` 将本地的文件夹同步到远程主机,并删除远程多余的文件(即本地已删除的文件)。 3. 显示帮助信息 ```bash ./sync_files.sh -h ``` 显示脚本的使用说明和所有可用选项。 #### 示例 ``` bash xxx@YYY:~/tiny-tools/02_sync_files$ ./sync_files.sh -u ======================================================== 远程主机信息 ======================================================== 用户名: xxx 主机地址: 42.193.219.111 远程路径: /home/xxx/scp SSH端口: 6000 ======================================================== 正在将本地文件夹 /home/xxx/scp 同步到远程主机 xxx@42.193.219.111 路径: /home/xxx/scp ... sending incremental file list sent 90 bytes received 12 bytes 18.55 bytes/sec total size is 21 speedup is 0.21 文件同步成功! ``` ### [3. 手写通用线程池](03_pthread_pool/README.md) 一个高效、通用的线程池库,可用于各种 C 项目中。 已经实现功能: 1. **线程复用**:线程池在初始化时创建一定数量的线程,这些线程在任务完成后不会销毁,而是等待新的任务。 2. **任务队列**:未执行的任务存储在任务队列中,线程通过同步机制从队列中取任务。 3. **线程同步**:利用互斥锁和条件变量实现线程之间的同步与通信,确保任务队列操作的线程安全。 后续想要实现的功能: 1. **动态调整线程池大小**:实现线程池线程数的动态增加或减少。 2. **任务优先级**:为任务队列添加优先级支持。 3. **监控接口**:提供线程池状态查询功能,例如任务数量、线程利用率等。 ### [4. log_module日志模块](04_log_module/README.md) 一个 C 日志库,用于用户态,可以设置4个日志等级和时间戳精度等级,并根据宏控制日志输出的等级; 在此项目中是用了互斥锁保证单行日志输出的完整性; ``` bash 37:59.972 [ERROR] main.c:main:7: This is an error message 37:59.972 [WARNING] main.c:main:8: This is a warning message 37:59.972 [INFO] main.c:main:9: This is an info message 37:59.972 [DEBUG] main.c:main:10: This is a test message ``` ### [5. Socket编程封装库](05_socket_lib/README.md) 一个用于TCP服务器和客户端的基础Socket编程封装,支持多种并发模型(线程池、select、epoll)。它可以用于构建高效的TCP服务器和客户端通信。 在此项目中使用了: - [3. 手写通用线程池](03_pthread_pool/README.md) - [4. log_module日志模块](04_log_module/README.md)