1.进入一个已经start的container

#如果没有安装bash,需要apk add bash
docker exec -it <container_id> /bin/bash

2.根据Dockerfile构建镜像

docker build -t <image_name:tag_id> .

3.运行构建好的镜像为容器

#d为demon
docker run -itd <image_id>

4.删除容器

docker rm -f <container_id>

5.docker访问宿主

docker如果在windows下,那么在docker容器内ifconfig,假设:172.17.0.3,则宿主为:172.17.0.1
docker如果在mac下, `docker.for.mac.host.internal` 则为宿主域名

  1. 我们用php-cli写一些业务常用逻辑,然后需要打印一些有用信息到终端时,通常的 echo var_dump往往在显示数据较多多时滚动显示,这样不方便肉眼盯数据,此时可以用如下逻辑实现 wget 下载文件滚动条的实现:
    <?php
    for($n = 1; $n < 100; $n++) {

      echo chr(3); // 输出文本结束控制字符,这样可以清除之前输出的文本内容
      echo chr(8); // 将前一个控制字符删掉,避免在控制台留下控制字符的标记
      echo "inserting row $n\r";
      sleep(1); // 延时一秒是为了看清楚文字变化

    }

  2. model中有很多常量,建议开发者以 group 的方式设置:
    例如 : STATUS_ON , STATUS_OFF,
  3. windows下面添加服务
    首先需要定义一个可执行的bat文件,大致如下

    @echo off  
    start  "C:\Windows\System32\cmd.exe"   
    cd C:\xxxx\bbbb
    ## 这里是执行的具体内容
    exit

    添加服务

    sc create frp binPath= C:\Users\Administrator\Desktop\frp.bat start= auto

    然后到ctrl+shift+esc 找到服务,启动

  4. 当你对一个数组元素unset之后,你一定要小心,这个时候php由于中间缺了一个不连续的key,在json_encode的时候就会有key参与到json中,需要用array_values 重新构建索引

5.放弃ps -ef | grep nginx这种丑陋的做法吧,请使用pgrep
6.通过终端写入多行数据到一个文件

cat <<EOF > hello.php
<?php
echo "xueshop.cn";
EOF

这里整理一些有意思的linux命令,方便忘记命令查看

  1. 查找某个目录最大的文件
  2. 删除某个目录下的6个月之前修改的文件
  3. 统计文件夹内部文件总大小
  4. 查看端口占用情况,以及被谁占用
  5. 同步目录到另一台服务器指定目录
  6. 替换指定几行的字符串
  7. 替换当前目录下匹配文件的字符串为另一个字符
  8. 查看LINUX发行版的名称及其版本号的命令
  9. 根据nginx日志统计最大qps
  10. ssh登陆使用指定密钥登陆
  11. 查看linux占用的端口号
  12. 指定文件列宽(给你一长串不换号文本转换后方便查看)
  13. 查看文件夹的容量大小
  14. 从id.pub文件计算指纹fingerprint

1.查找某个目录最大的文件

思路:先find+f(文件),然后对每个文件stat(-c=format),然后sort(n自然r逆序)

find -type f -exec stat -c "%s %n" {} \; | sort -nr | head -1

2.删除某个目录下的6个月之前修改的文件

find ./ -name "*.log" -mtime +180 -exec rm -rf {} \;

3.统计文件夹内部文件总大小(s=summary h=human)

du -sh

4.查看端口占用情况,以及被谁占用

/usr/sbin/lsof -i:80

5.同步目录到另一台服务器指定目录

rsync -r /opt root@10.10.10.11:/opt

6.替换指定几行的字符串

:2,10s/aaa/bbb/g #从第2行到第10行替换aaa到bbb

7.替换当前目录下匹配文件的字符串为另一个字符(经常用来修改配置文件)

sed -i "s/10.11.12.115/10.16.10.12/g" /opt/projects/deploy/config/base.php

8.查看LINUX发行版的名称及其版本号的命令

cat /etc/issue

9.根据nginx日志统计最大qps

awk -F"," '{print $1}' nginx.log | sort | uniq -c | sort -n -r | head -n 1

10.ssh登陆使用指定密钥登陆

ssh -i <identity_file> root@123.134.23.43

11.查看linux占用的端口号

netstat -an | grep "LISTEN"

12.指定文件列宽(给你一长串不换号文本转换后方便查看)

cat fileData | fold -w 64
fold -w 64 fileData

13.查看文件夹的容量大小

//这里的m可以替换为k,g(kb,mb)
du -sm ./

14.从id.pub文件计算指纹fingerprint

ssh-keygen -E md5 -lf ~/.ssh/id_rsa.pub

这里整理一些非常常用的git命令,方便忘记命令查看

1.克隆指定的分支
2.创建一个无提交记录的分支
3.合并多个commit
4.忽略暂存文件
5.共享commit在不同分支
6.跟踪远程分支并在本地创建
7.给分支做备注
8.根据commit获取分支
9.prune清理无效的远程追踪分支

1.克隆指定的分支

说明:例如php版本从4-7有非常多的分支,我只想检索5.3这个版本的时候可以这么用

git init
git remote add -t BRANCH_NAME_HERE -f origin REMOTE_REPO_URL_PATH_HERE
git checkout BRANCH_NAME_HERE

2. 创建一个无提交记录的分支

说明:开发中我在我自己创建的分支上查看log只想看到我提交的记录

git checkout --orphan BRANCH_NAME_HEAR

3.合并多个commit

说明:开发中commit了多次,最后发现一些细节可以归纳为1次commit记录,此时可以用rebase -i, 后面带HEAD~2代表合并2条

rebase -i HEAD~2

git_test.gif

4.忽略暂存文件

说明:开发中由于刚开始没有考虑到一些文件是否要加暂存,所以经过了add或者stage,同时push过,

但是现在想接下来的修改不再加入版本库

git update-index --assume-unchanged HEAR_IS_FILE

当然这条命令也有相反的命令(取消忽略指令)

git update-index --no-assume-unchanged HEAR_IS_FILE

5.共享commit在不同分支

说明:假如在brancha 分支提交了一个commit,而这个commit是一个重要的热性代码,这时候可以将这个提交的修改打补丁到其他分支

git cherry-pick COMMIT-ID
6.跟踪远程分支并在本地创建

说明:其他开发者在某个结点从master上checkout出一个分支并开发一段时间需要你介入该分支,此时你需要在本地创建一个和远程完全一致的分支

git checkout -b BRANCH_NAME --track origin/BRANCH_NAME

7.给分支做备注

说明:例如我们的某些分支因为测试或者开发周期较长,但是分支名往往不能非常准确的说明分支的作用,这时,我们需要给分支做备注

git branch --edit-description
git config branch..description

这是本地存储的。根据定义,它不能被推送,因为它存储在 .git / config 。

如果您删除分支,说明也会一并删除。
如果您设置 git config --global branchdesc true

8.根据commit获取分支

    git branch --contains <commit_id>

9.跟新代码后只想看到冲突的文件

gsb | grep "^U"

10.更新代码后只想看冲突的diff

gd --diff-filter=U

11.强制更新本地代码为原创的代码

git reset --hard origin/master
git clean -fdx

12.prune清理无效的远程追踪分支

git remote prune origin --dry-run #先查看
git remote prune origin #清理

13.清理因为不仔细而提交的二进制文件

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch BINARY-FILE' --prune-empty --tag-name-filter cat -- --all
git reflog expire --expire=now --all
git gc --prune=now
git gc --aggressive --prune=now
  1. 统计repo的大小
git count-objects -v