代码常用小工具
0.Linux:
shell
ls -a 查看所有文件,包括隐藏
创建
mkdir new_dir # 创建一个空目录
mkdir -p a/b/c # 递归创建多级目录
删除
rmdir old_dir # 仅删除"空"目录
rm -r dir # 递归删除目录及其所有内容(会询问)
rm -rf dir # 强制递归删除,不再询问(慎用!)
复制
cp -r src_dir dest_dir # 把整个目录树复制过去
cp -a src dest # 保留权限、时间戳等属性(归档复制)
移动/重命名
mv old_name new_name # 同级目录下就是重命名
mv dir /path/to/新位置/ # 移到别处
查看/遍历
ls -l dir # 列出目录内容
ls -al # 含隐藏文件
tree # 树状展开(需 sudo apt install tree)
find dir -type f # 只列 dir 下的所有普通文件
find dir -type d # 只列 dir 下的所有子目录
切换/定位
cd dir # 进入目录
pwd # 显示当前所在目录
pushd dir / popd # 目录栈式跳转(脚本里很方便)
权限/属性
chmod 755 dir # 改权限
chown user:group dir # 改归属
chmod +t dir # 给目录加粘滞位(如 /tmp)
大小/占用
du -sh dir # 看目录总大小(人类可读)
du -h --max-depth=1 # 看当前目录下各子目录大小
打包/压缩(也算"处理")
tar -czf dir.tar.gz dir # 打包并 gzip 压缩
tar -xjf dir.tar.bz2 # 解包 .tar.bz2
zip -r dir.zip dir # 生成 zip
比较/同步
diff -r dir1 dir2 # 递归比较两个目录差异
rsync -av dir1/ dir2/ # 增量同步(本地或远程)
shell
#miniconda x64位装
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
chmod +x Miniconda3-latest-*.sh
./Miniconda3-latest-*.sh
source ~/.bashrc
1.tmux / terminator
shell
#安装 机器人本身上下位机
sudo apt update
sudo apt install tmux
安装多终端TMUX
win上控制面板设置好之后,安装wsl2,然后安装tmux
sudo apt update && sudo apt install -y tmux
new -s x 新建会话 x
a -t x 挂回会话 x
ls 列出会话
d 脱离(后台运行)
Ctrl+b c #创建一个新的bash
Ctrl+b n - 切换到下一个窗口
Ctrl+b p - 切换到上一个窗口
Ctrl+b % 左右分屏
Ctrl+b " 上下分屏
Ctrl+b o 跳窗格
Ctrl+b x 关窗格
Ctrl+b , 重命名窗口
Ctrl+b [ 进入滚屏/复制模式(q 退出)
概念:任务,窗口,窗格
tmux -V
新建一个会话
tmux new -s demo
先按 Ctrl+b,再按 d 临时退出
tmux attach -t demo 重新接入
ctrl+b 后 英文键盘
按键 作用
" 上下分屏
`%" 左右分屏
方向键 切换窗格
x 关闭当前窗格
& 关闭整个会话
这个是我常用的多窗口超级终端:
shell
sudo apt update #可以不执行这个
sudo apt install terminator
2.Git
shell
git init 仓库初始化
git clone <url> 下拉远程库
git status 看状态
git add -A 全部进暂存
git commit -m "msg" 提交
git log --oneline 简洁历史
git push -u origin main 首次推送
git pull 拉并合并
git diff HEAD 查看工作区差异
git checkout -b feat 新建并切换分支
git merge feat 合并分支
git reset --hard HEAD~1 回退 1 次提交
#下载的压缩包 ≠ Git 仓库,不能 git branch; 要切换分支,请直接用 git clone
git fetch --all # 把 tag 拉下来
git checkout 1.0.2 # 进入 HEAD 分离状态,等价于快照
# 如果想在此基础上新建分支
git switch -c release-1.0.2
git ls-remote --heads origin | grep 1.0.2
git checkout -b 1.0.2 origin/release/1.0.2
git switch dev 远端有 origin/dev 时,拉到本地并切换
常规学习:
- 建仓库(两种场景)
-
本地已有代码
bashcd ~/my_project git init # 生成 .git git add . # 把所有文件放"暂存区" git commit -m "first commit" -
从远端克隆(含历史)
bashgit clone https://gitee.com/xxx/yyy.git cd yyy- 日常 5 步循环(记住顺序)
bashgit pull # 先同步同事/服务器最新 # ------ 改代码 ------ git add <改动的文件> # 或 git add . 全部 git commit -m "feat: 加了个激光雷达驱动" git push # 推到远端 # 查看保存的更改 git stash list
口诀:"拉-改-添-交-推"
- 分支(并行开发)
bash
git branch # 看本地分支
git branch dev # 新建分支
git checkout dev # 切换过去(或 git switch dev)
# 在 dev 上改完提交
git push -u origin dev # 第一次推送新分支
老项目常用
git checkout -b dev(创建+切换一步完成)
- 合并(把 dev 并回 main)
bash
git checkout main
git pull # 保证 main 最新 可以把各个版本拉出来
git merge dev # 合并(可能提示冲突)
# 如有冲突 → 打开文件按提示改 → git add . → git commit
git push
图形界面看分支关系:
git log --oneline --graph
- 临时"打断"------stash(现场保护)
bash
git stash push -m "半成品,先去修 bug"
git checkout hotfix # 干别的
...
git checkout dev
git stash pop # 还原半成品继续写
- 版本回退(时光机)
bash
git log --oneline # 找哈希,如 a1b2c3d
git reset --hard a1b2c3d # 本地强制回退
git push -f # 远端也回退(团队慎用)
只想回退单个文件:
git checkout HEAD -- 文件名
- .gitignore(让 Git 别再提示编译垃圾)
bash
echo "build/
*.log
*.so" > .gitignore
git add .gitignore
git commit -m "chore: 忽略编译产物"
- 远端仓库管理
bash
git remote -v # 查看远端地址
git remote add origin git@gitee.com:xxx/yyy.git # 手动绑定
git remote set-url origin <新地址> # 换地址/换协议
- 常用别名(让命令更短)
bash
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.lg "log --oneline --graph --decorate"
以后敲 git st 就行。
shell
#网络卡顿时候可浅克隆,之后再补充完整
git clone --depth=1 https://gitee.com/leju-robot/kuavo-ros-opensource.git
cd kuavo-ros-opensource
# 以后如果需要完整历史
git fetch --unshallow
切换分支问题
shell
1. 改动还想留着 → 先"藏起来"
git stash push -m "WIP: 还没写完的 xxx"
git checkout 目标分支 # 成功切换
...
以后回原分支再:
git stash pop # 把改动还原并删除 stash 记录
2. 改动已经成熟 → 直接提交
git add .
git commit -m "tmp: 保存进度"
git checkout 目标分支
3. 改动不要了 → 强制扔掉
git reset --hard HEAD # 把修改/新增全丢掉
git checkout 目标分支
4. 出现 untracked 文件也拦路?
git clean -fd # f=force d=directory
3.Vim/nano文本编辑器
shell
sudo apt update
sudo apt install -y vim #其中-y是默认输入yes
vim:
i 插入模式
Esc 回普通模式
:w 保存
:q 退出
:wq 保存并退出
dd 删整行
yy 复制整行
p 粘贴
u 撤销
Ctrl+r 重做
/关键词 搜索(n 下一个)
:set nu 显示行号
nano:
ctrl + o 保存 enter 再 ctrl + x
4.Typora
shell
Ctrl+1~6 一级到六级标题
Ctrl+B/I/K 加粗/斜体/行内代码
```代码块```围栏代码
Ctrl+T 插入表格
Ctrl+Shift+M 公式块
Ctrl+/ 切换源码/预览
大纲面板:视图 → 大纲(Shift+Ctrl+1)
主题 css 在 文件 → 偏好设置 → 外观 → 打开主题文件夹 可自定义
5.Docker
bash
sudo apt install docker
5.1. Docker 基本概念
镜像(Image) :只读模板,用于创建容器
容器(Container) :镜像的运行实例
仓库(Repository):存放镜像的地方
5.2. 镜像管理
bash
# 搜索镜像
docker search ubuntu
# 拉取镜像
docker pull ubuntu:20.04
# 查看本地镜像
docker images
# 删除镜像
docker rmi <image_id>
# 构建镜像
docker build -t myapp:1.0 .
5.3. 容器管理
bash
# 运行容器
docker run -it ubuntu:20.04 /bin/bash
docker run -d -p 8080:80 --name mynginx nginx
docker run -v /host/path:/container/path -v volume_name:/container/path image_name
# 常用参数:
# -d: 后台运行
# -it: 交互模式
# -p: 端口映射
# -v: 数据卷
# --name: 容器命名
# 查看容器
docker ps # 运行中的容器
docker ps -a # 所有容器
# 启动/停止容器
docker start <container_id>
docker stop <container_id>
start <container_id>
# 进入容器
docker exec -it <container_id> /bin/bash
# 删除容器
docker rm <container_id>
docker rm -f <container_id> # 强制删除运行中的容器
# 查看容器日志
docker logs <container_id>
docker logs -f <container_id> # 实时日志
5.4. Dockerfile 示例
dockerfile
# 基础镜像
FROM node:16-alpine
# 设置工作目录
WORKDIR /app
# 复制文件
COPY package*.json ./
COPY . .
# 安装依赖
RUN npm install
# 暴露端口
EXPOSE 3000
# 启动命令
CMD ["npm", "start"]
5.5. 网络管理
bash
# 查看网络
docker network ls
# 创建网络
docker network create mynetwork
# 连接容器到网络
docker network connect mynetwork container_name
# 使用自定义网络运行容器
docker run --network=mynetwork --name app1 myapp
5.6. 数据卷管理
bash
# 创建数据卷
docker volume create myvolume
# 查看数据卷
docker volume ls
# 删除数据卷
docker volume rm myvolume
# 使用数据卷
docker run -v myvolume:/data myapp
5.7. Docker Compose
创建 docker-compose.yml 文件:
yaml
version: '3.8'
services:
web:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
networks:
- mynetwork
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: example
volumes:
- db_data:/var/lib/mysql
networks:
- mynetwork
volumes:
db_data:
networks:
mynetwork:
driver: bridge
使用命令:
bash
docker-compose up -d
docker-compose down
docker-compose ps
docker-compose logs
5.8. 实用命令
bash
# 查看容器资源使用情况
docker stats
# 查看容器详细信息
docker inspect <container_id>
# 清理无用资源
docker system prune
docker system prune -a # 清理所有未使用资源
# 保存和加载像
docker save -o myimage.tar myapp:1.0
docker load -i myimage.tar
5.9. 实际应用示例
运行 MySQL:
bash
docker run -d \
--name mysql-server \
-e MYSQL_ROOT_PASSWORD=mysecret \
-e MYSQL_DATABASE=myapp \
-v mysql_data:/var/lib/mysql \
-p 3306:3306 \
mysql:8.0
运行 Redis:
bash
docker run -d \
--name redis-server \
-p 6379:6379 \
redis:alpine