常用bash:
# 文件夹大小统计
du -sh *
# 磁盘利用率
df -TH
# 文件升序,可加 " | less " 或" > t.txt "
ls -lSr
# 按规则查找文件并删除
find . -type f -name "*.png1" | xargs rm
# 桌面为服务器应用创建日志目录,方便清理、记录
sudo ln -s /Users/mrchow/Desktop/log/pay_gateway /var/log/pay_gateway
# 监听日志文件动态刷新,显示200行
tail -f200 /private/var/log/xxx_app/xxx.log
# 查看文本,-N展示行号,-m显示百分比;
# 空格键翻页、J上一行K下一行;/字符 —— 向下查找;?字符 —— 向上查找;n重复前一个搜索;N向上搜索;q退出;G到文件结尾
less -Nm sshd.config
# 查看log.txt文本,从第1000行开始,每页10行;
# 空格键翻页
more +1000 -10 log.txt
# 查看文本前5行
head -n 5 sshd.config
# 根据端口号查进程pid
lsof -i:$port
netstat -nap|grep $port
# 根据进程号查端口
netstat -nap|grep $pid
# 根据服务路径/关键词查看进程
ps -ef|grep java 查看进程pid
# 根据进程pid查看进程
ll /proc/pid/cwd 查看服务安装路径
# mac根据端口号查进程启动详情
lsof -i :$port | grep -i LISTEN | awk '{print $2}' | xargs -I {} ps -o command -p {} | tail -n +2
# 查看系统信息:
lsb_release -a
# 按CPU占用量排序,Shift + M 按内存排序, s 刷新时间
top
自己整理git:
# 查看本地分支,带星号的代表当前所在分支
git branch
#切换本地分支到master
git checkout master
#拉远端新分支
git checkout --track origin/feature/20160127_888_532656
# 将远程git仓库里的指定分支拉取到本地(本地不存在的分支)
git checkout -b 本地分支名 origin/远程分支名
# 如失败,提示:fatal: Cannot update paths and switch to branch 'dev2' at the same time.
# 或提示:fatal: 'origin/dev_auto_purchase' is not a commit and a branch 'dev_auto_purchase' cannot be created from it
# 如下后重试
git fetch
# 废弃分支代码合并过来
git merge release/20160105_new_502299
# 新建本地分支
$ git checkout -b “分支名称”
# 查看是否创建成功以及目前在哪个分支
$ git branch
# 本地推送到远程
$ git push -u origin "分支名称"
#本地分支关联远程分支
git branch --set-upstream-to=origin/daily/0.3.9 daily/0.3.9
git add --all .
git commit -am '备注'
#合并到远程分支
git push origin feature/20160127_888_532656
git pull
#恢复某个已修改的文件(撤销未提交的修改):
git checkout xxx.xxx
#还原最近一次提交的修改:
git revert HEAD
#还原指定版本的修改:
git revert commit-id
#推分支
git push origin feature/20160214_api_542543
git fetch --all && git fetch -ts
#版本差异 git diff 版本号码1 版本号码2 src
git diff 35a0637 aff8b70
#备份当前的工作区的内容,并让工作区和上次提交的内容一致
git stash
#从Git栈中读取最近一次保存的内容,恢复工作区的相关内容
git stash pop
#显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复
git stash list
#已add但未commit
git rm --cached xxx.xx
git reset HEAD <file>
#已commit但未push
git reset --soft HEAD^
#本地与远程提交日志差别(未push的日志)
git log xxbranchnamexx ^origin/xxbranchnamexx
#其他分支35a0637版本的修改合并过来
git cherry-pick 35a0637
#查看版本记录(完整版本号)
git log
#基于当前主干/分支的某完整版本号(abc),创建新分支(bug-fix),并切换到新分支
git checkout -b bug-fix abc
#本地分支推到远程分支
git push origin bug-fix:bug-fix # 本地新分支名:远程新分支名(不存在则创建)
# 删除远程分支
git push origin --delete xxxx
# 删除本地分支
git branch -D <BranchName>
其他git:
# 查看自己的用户名和邮箱地址:
$ git config user.name
$ git config user.email
# 修改自己的用户名和邮箱地址:
# config 配置有system级别、global(用户级别)、和local(当前仓库)三个级别
# 局部的不加 --global 只对当前仓库起效,配置信息在当前仓库根目录/.git/config文件下
$ git config --global user.name "xxx"
$ git config --global user.email "xxx"
# git的配置列表:
git config --list
# 修改默认分支名
git config --global init.defaultBranch <default-branch-name>
# 忽略不同电脑下换行符差异
git config --global core.autocrlf input
# 忽略不同电脑下文件权限差异(非全局)
git config core.fileMode false
#已放在.gitignore里的文件,还是有人提交了
git update-index --assume-unchanged $filename
#撤销上述
git update-index --no-assume-unchanged $filename
git 合并两个仓库代码(主仓库合并到分支仓库):
可以参考下 基础版本 + 多定制版本 的git 解决方案
# 背景:从基础版仓库fork到定制版仓库中,基础版仓库有更新后要先将基础版仓库代码合并到定制版仓库中,然后解决冲突后再提pr。
# 主/基础版仓库:baseGit:master
# 分支/定制版仓库:MineGit:master
# 在定制版仓库目录下操作:
# 1:将主仓库的地址添加到分支的远程仓库中 //git remote add 仓库名称 地址
$ git remote add baseGit git@github.example.com:baseGit/code.git
# 看见定制版仓库有两个远程仓库:baseGit origin
$ git remote
# 2:抓取仓库数据到定制版仓库中 //git fetch 仓库名称
$ git fetch baseGit
# 3:创建一个新的分支baseMaster //这一步是将远程主仓库的代码在本地定制版仓库新建一个分支,稍后会将这个分支的代码和本地代码merge,这样也就是将基础版仓库代码和定制版仓库的代码merge了
$ git checkout -b baseMaster baseGit/master
# 4:切换到本地分支://现在本地有两个分支:1个是之前的master ,这个分支的代码就是自己仓库的代码。1个新增的分支baseMaster 这个是主仓库的代码
$ git checkout master
# 5:合并两个分支(也就是将两个仓库的代码merge) //git merge 分支名称
$ git merge baseMaster
自己整理Docker:
# ps -aux|grep http
# netstat -tnlp | grep :80
#启动docker
systemctl start docker
#关闭docker
systemctl stop docker
#重启docker
systemctl restart docker
#docker设置随服务启动而自启动
systemctl enable docker
# 查看docker 运行状态,如果是在运行中 输入命令后 会看到绿色的active
systemctl status docker
# 查看docker 版本号信息 将当前用户加入到cocker组可以省sudo
docker version
# 一些统计信息
docker info
# 服务器中存在的镜像
sudo docker images
docker search <镜像名>
# 不加:tag则拉取最新版本
docker pull <镜像名>
docker pull <镜像名>:tag
docker run <镜像名>[:tag]
# 删除单个/多个镜像,镜像ID或镜像用空格隔开即可
docker rmi -f <镜像名/镜像ID> [<镜像名/镜像ID>]
# 保存镜像
docker save <镜像名/镜像ID> -o <镜像将要保存的位置与名字>
# 加载文件恢复为镜像
docker load -i <镜像保存的位置与名字>
# 根据镜像添加新的镜像+标签
docker tag [源镜像名]<:TAG> [想要生成新的镜像名]<:新的TAG>
# 运行的容器
sudo docker ps
sudo docker ps -a
# 运行一个容器 -it 表示 与容器进行交互式启动 -d 表示可后台运行容器 (守护式运行) --name 给要运行的容器 起的名字 --restart=always 容器随docker服务启动而自动启动 /bin/bash 交互路径
# 数据挂载,可多条: -v 宿主机文件存储位置:容器内文件位置 -v 宿主机文件存储位置:容器内文件位置
docker run -it -d --name <要取的别名> [-p <宿主机端口号>:<容器端口号>] [--restart=always] <镜像名>:<Tag> /bin/bash
# netstat是控制台命令,是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息
netstat -untlp
sudo docker stop <容器名/容器ID>
sudo docker start <容器名/容器ID>
sudo docker restart <容器名/容器ID>
sudo docker rm <容器名/容器ID>
# 进入容器
sudo docker exec -it <容器名/容器ID> /bin/bash
# 容器文件拷贝 —无论容器是否开启 都可以进行拷贝
#从容器内 拷出
docker cp 容器ID/名称: 容器内路径 容器外路径
#从外部 拷贝文件到容器内
docker cp 容器外路径 容器ID/名称: 容器内路径
linux要查看末尾多少行 默认all 容器ID
# 查看容器的挂载目录
docker inspect <容器名/容器ID> | grep Mounts -A 40
# 检查nginx配置是否正确
sudo docker exec -it myNginx nginx -t
# 部署在了同一个宿主机的不同容器网络中, (不同网段、不同网桥的网络环境中,即不同的networkspace中。部署在同一个网桥上,就相当于在一个networkspace中,类似于k8s中的一个pod内),在这种情况下就必须将两个容器网络打通
sudo docker network ls
sudo docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 net_nginx
# 这个不需要 sudo docker network create --driver bridge --subnet 10.0.0.0/8 --gateway 10.10.0.1 net_wordpress
# run创建容器时指定网络应加参数: --net net_nginx
# 之前没加,则运行时指定网络:
sudo docker network connect net_nginx myNginx
# 查看容器网络内的信息(IP为 192.168.0.2/16)
sudo docker inspect net_nginx | grep Containers -A 50
# 网络连通就是将一个容器和一个网络进行联通
sudo docker network connect net_nginx wordpress
# 查看是否将wordpress容器加入到了 net_nginx 网络内 (IP为: 192.168.0.3/16)
sudo docker inspect net_nginx | grep Containers -A 50
# 重新配置nginx配置,运行OK
sudo docker logs wordpress -f
sudo docker container cp 664c85a2932c:/etc/apache
sudo docker cp envvars 664c85a2932c:/etc/apache2/envvars
sudo docker logs 664c85a2932c
sudo docker logs openrest
sudo docker run --name myNginx -d -p 80:80 -v /usr/local/nginx/html:/usr/share/nginx/html -v /usr/local/nginx/config/nginx.conf:/etc/nginx/nginx.conf -v /usr/local/nginx/log:/var/log/nginx nginx
sudo docker run -it -d --name wp --link wordpressdb:wpdb -p 8087:80 --restart=always -v /data/www_wp:/var/www/html wordpress /bin/bash
sudo docker ps -a
sudo docker logs -f --tail=50 wp
高级bash: chattr
如何在vim 中打出 ^M, ctrl + v +m 可以输出 ^M。cat 带有^M的一行字符串时,屏幕上会把 ^M 之后的内容在同一行换行后输出,这样就会覆盖掉^M之前的内容,导致这行前部分内容被覆盖。使用
cat -A
Mac环境下切换JDK版本及不同的maven
Mac修改文件 ~/.bash_profile
# 定义不同版本的maven_home
export M2_HOME_DEFAULT=/Users/zz/files/maven_default
export M2_HOME_DMN=/Users/zz/files/maven_dmn
# 给M2_HOME默认值 这个必须要有,否则会出现找不到mvn命令的情况
export M2_HOME=$M2_HOME_DEFAULT
# 定义不同版本jdk的java_home
export JAVA_8_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home
export JAVA_17_HOME=/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home
# 给JAVA_HOME默认值 这个必须要有
export JAVA_HOME=$JAVA_8_HOME
# alias命令动态切换JDK版本
alias jdk8="export JAVA_HOME=$JAVA_8_HOME;export M2_HOME=$M2_HOME_DEFAULT"
alias jdk8_dmn="export JAVA_HOME=$JAVA_8_HOME;export M2_HOME=$M2_HOME_DMN"
alias jdk17_dmn="export JAVA_HOME=$JAVA_17_HOME;export M2_HOME=$M2_HOME_DMN"
export M2_BIN_HOME=$M2_HOME/bin
export PATH=$PATH:$M2_BIN_HOME
export PATH=/Users/zz/.ssh/:$PATH
修改完后,执行source ~/.bash_profile 命令使改动生效
# 切换jdk8
(base) zz@localhost IdeaProjects % jdk8
(base) zz@localhost IdeaProjects % mvn -v
Apache Maven 3.2.5 (12a6b3acb947671f09b81f49094c53f426d8cea1; 2014-12-15T01:29:23+08:00)
Maven home: /Users/zz/files/maven_koolearn
Java version: 1.8.0_241, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "mac os x", version: "10.16", arch: "x86_64", family: "mac"
# 切换jdk8+特定maven
(base) zz@localhost IdeaProjects % jdk8_dmn
(base) zz@localhost IdeaProjects % mvn -v
Apache Maven 3.2.5 (12a6b3acb947671f09b81f49094c53f426d8cea1; 2014-12-15T01:29:23+08:00)
Maven home: /Users/zz/files/maven_dmn
Java version: 1.8.0_241, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "mac os x", version: "10.16", arch: "x86_64", family: "mac"
# 切换jdk17+指定maven
(base) zz@localhost IdeaProjects % jdk17_dmn
(base) zz@localhost IdeaProjects % mvn -v
Apache Maven 3.2.5 (12a6b3acb947671f09b81f49094c53f426d8cea1; 2014-12-15T01:29:23+08:00)
Maven home: /Users/zz/files/maven_dmn
Java version: 17.0.11, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home
Default locale: zh_CN_#Hans, platform encoding: UTF-8
OS name: "mac os x", version: "11.2.1", arch: "x86_64", family: "mac"