常用命令总结

一. linux常用命令

查看linux系统版本

方式一: lsb_release -a
如果显示未找到命令使用命令安装:yum install -y redhat-lsb
方式二:cat /etc/redhat-release (适用于RedHat、CentOS)
方式三:cat /etc/issue
备注:显示以下信息即为CentOS
0

防火墙相关

备注:CentOS7 的防火墙配置跟以前版本有很大区别,默认使用的是firewall,与之前的版本使用iptables不一样

CentOS7 

查看防火墙状态 :firewall-cmd --state
注:running——开启,not running ——关闭
开启防火墙:systemctl start firewalld.service
关闭防火墙:systemctl stop firewalld.service
关闭开机启动:systemctl disable firewalld.service
开启开机启动:systemctl enable firewalld.service

CentOS6

service方式:
查看防火墙状态:service iptables status
开启防火墙:service iptables start
关闭防火墙: service iptables stop
iptables方式:
先进入init.d目录,命令如下:
[root@centos6 ~]# cd /etc/init.d/ [root@centos6 init.d]#
查看防火墙状态:
[root@centos6 init.d]# /etc/init.d/iptables status
暂时关闭防火墙:
[root@centos6 init.d]# /etc/init.d/iptables stop
重启iptables:
[root@centos6 init.d]# /etc/init.d/iptables restart

释放linux缓存

sync && echo '1' > /proc/sys/vm/drop_caches
sync && echo '2' > /proc/sys/vm/drop_caches
sync && echo '3' > /proc/sys/vm/drop_caches

sync: 将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件。否则在释放缓存的过程中,可能会丢失未保存的文件

0 – 不释放
1 – 释放页缓存
2 – 释放dentries和inodes
3 – 释放所有缓存

Linux日志查看

将日志文件中的某个时间段的日志输出到新的文件
  sed -n '/2019-04-22 16:10:/,/2019-04-22 16:20:/p' log.log > bbb.txt
查找某个日志文件中关键字的前后多少行
  cat filename | grep 关键字 -C10   -C:显示前后多少行 -A:显示后多少行 -B:显示前多少行

查看端口使用情况

-- 查看端口情况
   netstat -tnulp | grep 26379
-- linux 查看端口占用情况
  netstat -anp | grep 80
-- 当前环境已经使用了的端口信息
  netstat -nultp
-- 未找到该命令使用下面的安装
  yum -y install net-tools

Linux定时任务

#linux定时任务:
  service crond start //启动服务 
  service crond stop //关闭服务
  service crond restart //重启服务 
  service crond reload //重新载入配置 
  service crond status //查看crontab服务状态
#安装crond
  yum -y install vixie-cron yum -y install crontabs
#加入开机启动
  chkconfig –level 345 crond on
#重启rsyslog
#重启cronlog(没有日志输出用这个)
  sudo service rsyslog restart
日志位置: /var/log/cronXXX
#查看任务
  crontab -l
#编辑任务
  crontab -e

命令时间格式 : * * *  *  *  command 分  时  日  月  周 
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点) 第3列表示日期1~31 第4列表示月份1~12 第5列标识号星期0~6(0表示星期天) 第6列要运行的命令
一些Crontab定时任务例子:
30 21 * * * /usr/local/etc/rc.d/lighttpd restart #每晚的21:30 重启apache
45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart #每月1、10、22日的4 : 45重启apache
10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart #每周六、周日的1 : 10重启apache
0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart #每天18 : 00至23 : 00之间每隔30分钟重启apache
0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart #每星期六的11 : 00 pm重启apache
* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart #晚上11点到早上7点之间,每隔一小时重启apache
* */1 * * * /usr/local/etc/rc.d/lighttpd restart #每一小时重启apache
0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart #每月的4号与每周一到周三的11点重启apache
0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart #一月一号的4点重启apache
*/30 * * * * /usr/sbin/ntpdate cn.pool.ntp.org #每半小时同步一下时间
0 */2 * * * /sbin/service httpd restart #每两个小时重启一次apache
50 7 * * * /sbin/service sshd start #每天7:50开启ssh服务
50 22 * * * /sbin/service sshd stop #每天22:50关闭ssh服务
0 0 1,15 * * fsck /home #每月1号和15号检查/home 磁盘
1 * * * * /home/bruce/backup #每小时的第一分执行/home/bruce/backup这个文件
00 03 * * 1-5 find /home "*.xxx" -mtime +4 -exec rm {} \; #每周一至周五3点钟,在目录/home中,查找文件名为*.xxx的文件,并删除4天前的文件。
30 6 */10 * * ls #每月的1、11、21、31日是的6:30执行一次ls命令

nfs挂载

# 查看挂载配置文件
cat /etc/fstab
# 重新挂载配置文件中的所有挂载
mount -a
# 手动挂载
mount -t nfs 192.168.0.3:/u01/upload /u01/upload
# 查看共享信息
shoumount -e ip
# 设置配置文件生效
exportfs -r
#检查NFS服务是否向rpc注册端口信息
rpcinfo -p localhost

时间同步

# 安装时间同步软件
yum install -y ntp
# 选择主服务器地址,设为基准时间服务器
00 23 * * * /sbin/ntpdate 主ip
#同步网络服务器NTP时间
ntpdate -u cn.pool.ntp.org
#同步网络服务器NTP时间
ntpdate -u ntp1.aliyun.com 阿里云NTP服务器

修改Linux文件句柄

ulimit  -a 查看文件句柄 查看进程被限制使用的资源

vim /etc/security/limits.conf # 添加如下的内容 * soft nproc 11000 * hard nproc 11000 * soft nofile 65535 * hard nofile 65535 修改完重启服务器

修改密码

1、输入命令: id ,查看登录用户信息;
2、若修改root自己的密码,直接输入 passwd . 输入两遍,新密码即可; 3、若修改其他用户,如oracle的密码,可直接输入passwd oracle,输入两遍性新密码即可;这样既可修改成功;

批量替换指定文件后缀

ll | awk '{split($9,a,".");print a[1]}' | xargs -i mv {}.PDF {}.pdf

删除指定时间前的日志

#删除20天前的日志
#方式一
find /u01/tomcat/logs -mtime +20 -name "*.log" -type f -exec rm -rf {} \;
#方式二
find /u01/app/oracle/admin/jmhrms/bdump -mtime +20-type f -name 'jmhrms*.trc' |xargs rm -f

linux设置开机自启动

方法一:在“/etc/rc.local”文件中添加自启动命令“/usr/./hello.sh”或“cd /opt && ./hello.sh”。
方法二:在“/etc/init.d”目录下添加自启动脚本。

方法三:systemctl enable docker

查看端口号和TCP连接数

netstat -anp 显示所有已开放端口

netstat -tunlp 列出正在侦听的所有 TCP 或 UDP 端口,包括使用端口和套接字状态的服务,

netstat -an 查看哪些IP连接本机
查看TCP连接数

1)统计80端口连接数
netstat -nat|grep -i "80"|wc -l

2)统计httpd协议连接数
ps -ef|grep httpd|wc -l

3)、统计已连接上的,状态为“established
netstat -na|grep ESTABLISHED|wc -l

4)、查出哪个IP地址连接最多,将其封了.
netstat -na|grep ESTABLISHED|awk {print $5}|awk -F: {print $1}|sort|uniq -c|sort -r +0n

netstat -na|grep SYN|awk {print $5}|awk -F: {print $1}|sort|uniq -c|sort -r +0n

TCP连接状态详解

LISTEN: 侦听来自远方的TCP端口的连接请求
SYN-SENT: 再发送连接请求后等待匹配的连接请求
SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认
ESTABLISHED: 代表一个打开的连接
FIN-WAIT-1: 等待远程TCP连接中断请求,或先前的连接中断请求的确认
FIN-WAIT-2: 从远程TCP等待连接中断请求
CLOSE-WAIT: 等待从本地用户发来的连接中断请求
CLOSING: 等待远程TCP对连接中断的确认
LAST-ACK: 等待原来的发向远程TCP的连接中断请求的确认
TIME-WAIT: 等待足够的时间以确保远程TCP接收到连接中断请求的确认
CLOSED: 没有任何连接状态

 查找java进程并批量杀掉

ps -ef | grep java | grep -v grep | awk '{print $2}' | xargs kill -9

 

二 . Docker 常用命令

常用命令

启动docker: systemctl start docker
停止docker: systemctl stop docker
重启docker: systemctl restart docker
查看docker状态: systemctl status docker
开机启动: systemctl enable docker
查看docker概要信息: docker info
查看docker总体帮助文档: docker --help
列出主机上得镜像:docker images
      -a :列出本地所有的镜像(含历史映像层)
      -q :只显示镜像ID。
查找镜像:docker search 某个XXX镜像名字
     --limit : 只列出N个镜像,默认25个
 例:docker search --limit 5 redis
查看镜像状态:docker ps 查看镜像
/容器/数据卷所占的空间:docker system df

查看日志

日志查看语法:
docker logs [OPTIONS] CONTAINER
OPTIONS说明:
-f : 跟踪日志输出
--since :显示某个开始时间的所有日志
-t : 显示时间戳
--tail :仅列出最新N条容器日志
查看日志命令:docker logs -f 容器ID
实时查看最后500条日志:docker logs -f --tail=500 容器ID
查看最近30分钟的日志:docker logs --since 30m 容器ID
查看某时间之后的日志的最新500条日志:docker logs --since="2021-11-30" --tail=500 容器ID
查看某时间之后的日志:docker logs -t --since="2021-11-30T00:00:00" 容器ID
查看某时间段日志:docker logs -t --since="2021-11-30T00:00:00" --until "2021-12-30T00:00:00" 容器ID

镜像和容器导出导入

# 导出镜像到文件中
$ docker save -o nginx-alpine.tar nginx:alpine
# 导入镜像
$ docker load -i nginx-alpine.tar

 #导入和导出容器

  docker export 容器ID > 文件名.tar

  cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号

容器里安装vim,telnet ,ping,curl常用命令

#安装vim命令
apt-get install -y vim
#安装telnet命令
apt-get install -y telnet
#安装ifconfig命令
apt-get install -y net-tools
#安装ping命令
apt-get install -y iputils-ping
#安装curl命令
apt install -y curl

镜像删除

-- 删除指定镜像
docker rmi --force [-f] $(docker images | grep tarzan-mes | grep "7 months"| awk '{print $3}')
-- 删除没有打标签的镜像
docker rmi [-f] $(docker images -q | awk '/^<none>/ { print $3 }')
--删除所有镜像
docker rmi [-f] $(docker images -qa)
这类无标签镜像也被称为 虚悬镜像(dangling image) ,可以用下面的命令专门显示这类镜像:
docker image ls -f dangling=true
一般来说,虚悬镜像已经失去了存在的价值,是可以随意删除的,可以用下面的命令删除。
docker rmi $(docker images -q -f dangling=true)

镜像操作

docker build . -t hzero-register:v200 -f ./../src/main/docker/Dockerfile
docker tag hzero-register:v200 k8s1.cluster.local:5000/hzero-register:v200
docker push k8s1.cluster.local:5000/hzero-register:v200

容器内部操作

# 进入容器内部
docker exec -it 容器ID /bin/bash docker exec -it 容器ID redis-cli
# 将容器内部文件cp到宿主机
docker cp  容器ID:容器内路径 目的主机路径

定时删除docker历史镜像

* 0 * * *   docker image prune -a --force  --filter "until=120h"  >> /tmp/clear.log

三. K8s命令

进入pod内部执行命令:

我们可以先执行 kubectl get pod -n namespace (namespace 填写想要进入的 pod 所在的命名空间)来进行查看当前命名空间上部署的 pod
然后执行: kubectl exec -it podName -n namespace -- /bin/sh 命令,即可进入部署的 pod!

  • kubectl exec:在容器中执行命令(可以阅读 k8s 参考文档来进行 kubectl 一些命令学习
  • podName:想要进入的 pod 的名字,上一个步骤查看中会列举出来
  • namespace:pod 对应的命名空间
  • -it-i(将控制台输入发送到容器)和 -t(将标准输入控制台作为容器的控制台输入)结合
  • bin/sh:一个 shell command
  • 例子

[root@mes-prd-k8s1 ~]kubectl -n mes-pro exec -it tarzan-mes-69994cdfdb-kfg96 -it bin/sh
[root@mes-prd-k8s1 ~]kubectl -n mes-pro exec -it tarzan-mes-69994cdfdb-kfg96 -/bin/bash

日志相关

查看某个pod上一个版本日志:kubectl logs -p -n mes-pro tarzan-mes-6bd4bf5b79-xmkgk
查看pod上次退出详细:kubectl describe pod tarzan-mes-864bcbcd46-gw5zm -n mes-pro
k8s节点安装arthas :
kubectl -n uat exec mes-interface-7bbf6d64c9-88dhw -- wget https://arthas.aliyun.com/arthas-boot.jar && java -jar arthas-boot.jar 1
备注:最后的1是进程号
将pod中的日志复制到宿主机
kubectl exec -n service tarzan-mes-c75587bfc-jpjp9 -- tar cf - data/tarzan/mes/tarzan-mes-2022-05-15.0.log | tar xf - -C /tmp

pod 里面装telnet,ping

apt update
apt install telnet
apt-get install telnet -y

其它常用命令

--查看所有pod
kubectl get po
-A
--查看所有nodes kubectl get nodes
--查看所有pod的ip网段
kubectl get pod -A -o wide
--查看nodes状态 kubectl describe nodes wmsdevelapp
kubectl describe po xxx
-- 查看事件
kubectl get events -A 
--查看pod内存使用情况
kubectl top pod -n mesuat
journalctl -u kubelet.service
--污点驱逐
kubectl taint nodes XXXX key1=value1:NoSchedule-
kubectl taint node wmsdevelapp node.kubernetes.io/unschedulable:NoSchedule-
-- 查看svc
kubectl get svc -n mes-uat
--查看部署配置文件
 kubectl get deploy -n mes-uat openvpn -o yaml
--编辑配置文件
 kubectl -n mes-uat edit deployments.apps hand-openvpn
--启动停止服务
kubectl -n mes-uat scale deployments.apps openvpn --replicas=0
kubectl -n mes-uat scale deployments.apps openvpn --replicas=1

启停服务pod

kubectl scale deployment -n mes  admin     --replicas=0 
kubectl scale deployment -n mes  admin     --replicas=2   
备注 :replicas后面的数字代表几个pod

 进入pod内部执行命令

kubectl exec -it [NAME] -n [NAMESPACE] -- /bin/bash
例:
kubectl exec -n service tarzan-mes-744565d544-sx978 -- tar cf - /data/tarzan/mes/tarzan-mes.log | tar xf - -C /tmp

 pod退出码已经含义

退出代码 0:一般为容器正常退出
退出代码 1:由于容器中 pid 为 1 的进程错误而失败
退出代码 137:由于容器收到 SIGKILL 信号而失败(手动执行或“oom-killer” [OUT-OF-MEMORY])
= 退出代码 139:由于容器收到 SIGSEGV 信号而失败
退出代码 143:由于容器收到 SIGTERM 信号而失败
网上对137的解释:一般为pod容器内存达到资源限制(resources.limits)或者宿主机本身内存不够了。

我们知道,oom被kill是可以在系统日志里看到的:
ubuntu 的系统日志在 /var/log/syslog,centos 的系统日志在 /var/log/messages

 

 

四、Mysql

查看正在锁的事务

SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;

查看等待锁的事务

SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;

查询 正在执行的事务

SELECT * FROM information_schema.INNODB_TRX;

查询mysql数据库中存在的进程

select * from information_schema.`PROCESSLIST`(show processlist;)

杀掉线程

 kill 线程id 

通过检查InnoDB_row_lock状态变量来分析系统上的行锁的争夺情况

show status like 'innodb_row_lock%';

对于各个状态说明如下:

Innodb_row_lock_current_waits:当前正在等待锁的数量;

Innodb_row_lock_time:从系统启动到现在锁定总时间长度;

Innodb_row_lock_time_avg:每次等待所花平均时间;

Innodb_row_lock_time_max:从系统启动到现在等待最长的一次所花的时间长度;

Innodb_row_lock_waits:系统启动到现在总共等待的次数;

对于这5个状态变量,比较重要的是:

Innodb_row_lock_time_avg,Innodb_row_lock_waits,Innodb_row_lock_time。

尤其是当等待次数很高,而且每次等待时长也很大的时候,我们就要分析系统中为什么有这么多的等待,然后根据分析结果来制定优化。
select @a1:=VARIABLE_VALUE as a1
from information_schema.GLOBAL_STATUS
where VARIABLE_NAME='innodb_os_log_written'
union all
select sleep(60)
union all
select @a2:=VARIABLE_VALUE as a2
from information_schema.GLOBAL_STATUS
where VARIABLE_NAME='innodb_os_log_written';

select round((@a2-@a1)/1024/1024/@@innodb_log_files_in_group) as MB;


--------------------

SELECT
p2.`HOST` Blockedhost,
p2.`USER` BlockedUser,
r.trx_id BlockedTrxId,
r.trx_mysql_thread_id BlockedThreadId,
TIMESTAMPDIFF(
SECOND,
r.trx_wait_started,
CURRENT_TIMESTAMP
) WaitTime,
r.trx_query BlockedQuery,
l.lock_table BlockedTable,
m.`lock_mode` BlockedLockMode,
m.`lock_type` BlockedLockType,
m.`lock_index` BlockedLockIndex,
m.`lock_space` BlockedLockSpace,
m.lock_page BlockedLockPage,
m.lock_rec BlockedLockRec,
m.lock_data BlockedLockData,
p.`HOST` blocking_host,
p.`USER` blocking_user,
b.trx_id BlockingTrxid,
b.trx_mysql_thread_id BlockingThreadId,
b.trx_query BlockingQuery,
l.`lock_mode` BlockingLockMode,
l.`lock_type` BlockingLockType,
l.`lock_index` BlockingLockIndex,
l.`lock_space` BlockingLockSpace,
l.lock_page BlockingLockPage,
l.lock_rec BlockingLockRec,
l.lock_data BlockingLockData,
IF (p.COMMAND = 'Sleep', CONCAT(p.TIME,' seconds'), 0) idel_in_trx
FROM
information_schema.INNODB_LOCK_WAITS w
INNER JOIN information_schema.INNODB_TRX b ON b.trx_id = w.blocking_trx_id
INNER JOIN information_schema.INNODB_TRX r ON r.trx_id = w.requesting_trx_id
INNER JOIN information_schema.INNODB_LOCKS l ON w.blocking_lock_id = l.lock_id AND l.`lock_trx_id`=b.`trx_id`
INNER JOIN information_schema.INNODB_LOCKS m ON m.`lock_id`=w.`requested_lock_id` AND m.`lock_trx_id`=r.`trx_id`
INNER JOIN information_schema. PROCESSLIST p ON p.ID = b.trx_mysql_thread_id
INNER JOIN information_schema. PROCESSLIST p2 ON p2.ID = r.trx_mysql_thread_id
ORDER BY
WaitTime DESC;

--------------

00:0c:29:b3:b7:36 brd ff:ff:ff:ff:ff:ff

SELECT
p2.`HOST` 被阻塞方host,
p2.`USER` 被阻塞方用户,
r.trx_id 被阻塞方事务id,
r.trx_mysql_thread_id 被阻塞方线程号,
TIMESTAMPDIFF(
SECOND,
r.trx_wait_started,
CURRENT_TIMESTAMP
) 等待时间,
r.trx_query 被阻塞的查询,
l.lock_table 阻塞方锁住的表,
m.`lock_mode` 被阻塞方的锁模式,
m.`lock_type` "被阻塞方的锁类型(表锁还是行锁)",
m.`lock_index` 被阻塞方锁住的索引,
m.`lock_space` 被阻塞方锁对象的space_id,
m.lock_page 被阻塞方事务锁定页的数量,
m.lock_rec 被阻塞方事务锁定行的数量,
m.lock_data 被阻塞方事务锁定记录的主键值,
p.`HOST` 阻塞方主机,
p.`USER` 阻塞方用户,
b.trx_id 阻塞方事务id,
b.trx_mysql_thread_id 阻塞方线程号,
b.trx_query 阻塞方查询,
l.`lock_mode` 阻塞方的锁模式,
l.`lock_type` "阻塞方的锁类型(表锁还是行锁)",
l.`lock_index` 阻塞方锁住的索引,
l.`lock_space` 阻塞方锁对象的space_id,
l.lock_page 阻塞方事务锁定页的数量,
l.lock_rec 阻塞方事务锁定行的数量,
l.lock_data 阻塞方事务锁定记录的主键值,
IF (p.COMMAND = 'Sleep', CONCAT(p.TIME,' 秒'), 0) 阻塞方事务空闲的时间
FROM
information_schema.INNODB_LOCK_WAITS w
INNER JOIN information_schema.INNODB_TRX b ON b.trx_id = w.blocking_trx_id
INNER JOIN information_schema.INNODB_TRX r ON r.trx_id = w.requesting_trx_id
INNER JOIN information_schema.INNODB_LOCKS l ON w.blocking_lock_id = l.lock_id AND l.`lock_trx_id`=b.`trx_id`
INNER JOIN information_schema.INNODB_LOCKS m ON m.`lock_id`=w.`requested_lock_id` AND m.`lock_trx_id`=r.`trx_id`
INNER JOIN information_schema. PROCESSLIST p ON p.ID = b.trx_mysql_thread_id
INNER JOIN information_schema. PROCESSLIST p2 ON p2.ID = r.trx_mysql_thread_id
ORDER BY
等待时间 DESC;

-------------------------------------------------------------------
View Code

查看事务等待状况

select
r.trx_id waiting_trx_id,
r.trx_mysql_thread_id waiting_thread,
r.trx_query waiting_query,
b.trx_id blocking_trx_id,
b.trx_mysql_thread_id blocking_thread,
b.trx_query blocking_query
from
information_schema.innodb_lock_waits w
inner join information_schema.innodb_trx b on b.trx_id = w.blocking_trx_id
inner join information_schema.innodb_trx r on r.trx_id = w.requesting_trx_id;
View Code

查看更具体的事务等待状况

select
b.trx_state,
e.state,
e.time,
d.state as block_state,
d.time as block_time,
a.requesting_trx_id,
a.requested_lock_id,
b.trx_query,
b.trx_mysql_thread_id,
a.blocking_trx_id,
a.blocking_lock_id,
c.trx_query as block_trx_query,
c.trx_mysql_thread_id as block_trx_mysql_tread_id
from
information_schema.innodb_lock_waits a
left join information_schema.innodb_trx b on a.requesting_trx_id = b.trx_id
left join information_schema.innodb_trx c on a.blocking_trx_id = c.trx_id
left join information_schema.processlist d on c.trx_mysql_thread_id = d.id
left join information_schema.processlist e on b.trx_mysql_thread_id = e.id
order by
a.requesting_trx_id;
View Code

查看未关闭的事务

–mysql 5.6

select
a.trx_id,
a.trx_state,
a.trx_started,
a.trx_query,
b.id,
b.user,
b.db,
b.command,
b.time,
b.state,
b.info,
c.processlist_user,
c.processlist_host,
c.processlist_db,
d.sql_text
from
information_schema.innodb_trx a
left join information_schema.processlist b on a.trx_mysql_thread_id = b.id
and b.command = 'sleep'
left join performance_schema.threads c on b.id = c.processlist_id
left join performance_schema.events_statements_current d on d.thread_id = c.thread_id;
–mysql 5.5

select
a.trx_id,
a.trx_state,
a.trx_started,
a.trx_query,
b.id,
b. user,
b. host,
b.db,
b.command,
b.time,
b.state,
b.info
from
information_schema.innodb_trx a
left join information_schema.processlist b on a.trx_mysql_thread_id = b.id
where
b.command = 'sleep';
View Code

查看某段时间以来未关闭事务

select
trx_id,
trx_started,
trx_mysql_thread_id
from
information_schema.innodb_trx
where
trx_started < date_sub(now(), interval 1 minute)
and trx_operation_state is null
and trx_query is null;

mysql 查询正在执行的sql

select * from information_schema.`PROCESSLIST` where info is not null ORDER BY time desc;

mysql 查询慢日志文件位置

show variables like "%slow_query_log%";

查找有碎片的表

方法一:
select table_schema db, table_name, data_free, engine
from information_schema.tables
where table_schema not in ('information_schema', 'mysql') and data_free > 0;

方法二:
SELECT TABLE_NAME,(DATA_LENGTH+INDEX_LENGTH)/1024/1024 size_mb,data_free/1024/1024 free_mb,TABLE_ROWS
FROM information_schema.tables where table_schema not in ('information_schema', 'mysql')
and data_free/1024/1024>=1 order by free_mb desc;
View Code

清理表碎片

方法1 
alter table 表名 engine=InnoDB alter table tableName engine=InnoDB; #方法2
optimize table 表名 optimize table tableName;

找出没有主键的表

Select t.table_schema,t.table_name,t.engine,t.table_rows
From information_schema.tables as t
Left join information_schema.table_constraints as tc
On tc.table_schema=t.table_schema
And tc.table_name=t.table_name
And tc.constraint_type='PRIMARY KEY'
Where t.table_type='BASE TABLE'
And tc.constraint_type is null
And t.table_schema not in ('mysql','performance_schema','information_schema');
View Code

慢日志相关设置

more /etc/my.cnf
show variables like '%slow%';
show variables like '%long%';
set global slow_query_log=off;
set global slow_query_log=on;
set @@long_query_time=10;

Binlog清理

清理前注意事项:
1) 查看主库和从库正在使用的binlog是哪个文件 主库执行命令:show master status 从库执行命令:show slave status\G 2) 在删除binlog日志之前,首先对binlog日志备份,以防万一 手动清理方法: 方法一:删除指定日期以前的日志索引中binlog日志文件 purge master logs before '2016-09-01 17:20:00'; 方法二: 删除指定日志文件的日志索引中binlog日志文件 purge master logs to'<span style='color:rgb(244,67,54)' >mysql</span>-bin.000022';

 创建账号

  #查看指定用户的权限情况

SELECT * FROM mysql.user WHERE user='root'

  #创建一个用户

CREATE USER 'readonly'@'%' IDENTIFIED BY '123456';

  #给用户赋予只读权限

 GRANT SELECT ON mydb.* TO 'readonly'@'%'; 

  #刷新权限 

FLUSH PRIVILEGES;

总共三步,创建只读用户完成;账号:readonly 密码:123456 操作的数据库表:mydb.* 指定登录的IP:’%’(所有)

GRANT [权限]  ON [库.表]  TO [用户名]@[IP]  IDENTIFIED BY [密码]  

 

五、ORACLE

oralce 监听

查看监听状态
lsnrctl status
启动监听
lsnrctl start
关闭监听
lsnrctl stop
手动注册监听
alter system register;

oracle密码过期处理

查询默认的密码保存时间:
 SELECT * FROM dba_profiles WHERE profile='DEFAULT' AND resource_name='PASSWORD_LIFE_TIME';
修改为不限期,若有定期更换密码的需求,则可以设置为每个密码更换周期所需的天数(如:30:,表示每过30天就需要重置一次密码)
不限期:
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED; 30天的密码有效期:
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME
30;
切换到PDB执行:
alter session set container=orcl1;
修改密码: 
alter user 密码已过期的USERNAME identified by 密码;

归档日志相关

数据库闪回

1.查看闪回区
SQL> show parameter db_recovery;
SQL>show parameter flashback; 查看闪回参数
注:db_recovery_file_dest为闪回路径,db_recovery_file_dest_size为闪回区大小。
SQL>show parameter db_recovery_file_dest; 查看闪回区详细信息

SQL> select flashback_on from v$database;   查看闪回区是否开启

2.修改闪回功能

SQL> startup mount;     数据库启动到mount下

SQL> alterdatabase flashback on (off);          开启关闭闪回区

注:如遇到38706事件错误,可能是因为归档不正确。先启用数据库归档。

SQL> alter database archivelog;

SQL> alter systemset db_flashback_retention_target=2880;

修改闪回时间,默认是1440分钟(1天),闪回时间是指数据库能回退的时间。

归档日志相关

查看归档日志路径
archive log list
查询归档日志大小以及信息
select * from v$recovery_file_dest
  

  如果 ARCHIVED LOG 超过90% oracle随时有宕机的危险。

 看看现在用了多少归档日志了(按百分比):

select * from v$flash_recovery_area_usage;
如果 ARCHIVED LOG 超过90% oracle随时有宕机的危险

增大归档日志空间

  alter system set db_recovery_file_dest_size=20G;

删除归档日志

服务器上操作

删除指定时间前的文件
find ./ -name *.log -mtime +7| xargs rm -rf

rman模式操作

crosscheck archivelog all;
删除过期日志
delete noprompt expired archivelog all;
删除所有日志
DELETE EXPIRED archivelog all;
删除三天以前日志
delete archivelog until time 'sysdate -3';
 

 可用性状态

select INSTANCE_NUMBER,INSTANCE_NAME,STARTUP_TIME,STATUS from gv$instance;

表空间利用状态

SELECT d.tablespace_name "Name", d.status "Status",
TO_CHAR (NVL (a.BYTES / 1024 / 1024, 0), '99,999,990.90') "Size (M)",
TO_CHAR (NVL (a.BYTES - NVL (f.BYTES, 0), 0) / 1024 / 1024,
'99999999.99'
) USE,
TO_CHAR (NVL ((a.BYTES - NVL (f.BYTES, 0)) / a.BYTES * 100, 0),
'990.00'
) "Used %"
FROM SYS.dba_tablespaces d,
(SELECT tablespace_name, SUM (BYTES) BYTES
FROM dba_data_files
GROUP BY tablespace_name) a,
(SELECT tablespace_name, SUM (BYTES) BYTES
FROM dba_free_space
GROUP BY tablespace_name) f
WHERE d.tablespace_name = a.tablespace_name(+)
AND d.tablespace_name = f.tablespace_name(+)
AND NOT (d.extent_management LIKE 'LOCAL' AND d.CONTENTS LIKE 'TEMPORARY')
UNION ALL
SELECT d.tablespace_name "Name", d.status "Status",
TO_CHAR (NVL (a.BYTES / 1024 / 1024, 0), '99,999,990.90') "Size (M)",
TO_CHAR (NVL (t.BYTES, 0) / 1024 / 1024, '99999999.99') USE,
TO_CHAR (NVL (t.BYTES / a.BYTES * 100, 0), '990.00') "Used %"
FROM SYS.dba_tablespaces d,
(SELECT tablespace_name, SUM (BYTES) BYTES
FROM dba_temp_files
GROUP BY tablespace_name) a,
(SELECT tablespace_name, SUM (bytes_cached) BYTES
FROM v$temp_extent_pool
GROUP BY tablespace_name) t
WHERE d.tablespace_name = a.tablespace_name(+)
AND d.tablespace_name = t.tablespace_name(+)
AND d.extent_management LIKE 'LOCAL'
AND d.CONTENTS LIKE 'TEMPORARY';
View Code
复制

缓冲区命中率

select(1-(sum(decode(name,'physical reads',value,0))/(sum(decode(name,'db block gets',value,0))
+sum(decode(name,'consistent gets',value,0)))))*100"Hit Ratio"
from gv$sysstat;

数据字典缓存命中率

select(1-(sum(getmisses)/sum(gets)))*100"Hit Ratio"from gv$rowcache;

库缓存命中率

selectSum(Pins)/(Sum(Pins)+Sum(Reloads))*100"Hit Ratio"from gV$LibraryCache;

PGA内存排序命中率

select a.INST_ID,a.NAME,a.value "Disk Sorts", b.value "Memory Sorts",round((100*b.value)/decode((a.value+b.value),0,1,(a.value+b.value)),2)"Pct Memory Sorts"from gv$sysstat a, gv$sysstat b where a.name ='sorts (disk)'and b.name ='sorts (memory)';

备注:这些值在98% 以上比较好

数据碎片状态

USED_MB:表示对象已使用大小
FRAG_MB:表示碎片所占大小
FRAGMENT_PER:表示碎片率百分比

alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
/*set lines 220 pages 300
col owner for a30
col TABLE_NAME for a50
col SEGMENT_TYPE for a20*/
SELECT /*+ parallel(b 4)*/ OWNER,
TABLE_NAME,
tablespace_name,
SEGMENT_TYPE,
segment_space_management MANAGEMENT,
TABLE_MB USED_MB,
ROUND(WASTE_PER * TABLE_MB /100,2) FRAG_MB,
WASTE_PER fragment_per,
LAST_ANALYZED
FROM (SELECT OWNER,
SEGMENT_NAME TABLE_NAME,
LAST_ANALYZED,
SEGMENT_TYPE,
GREATEST(ROUND(100*(NVL(HWM - AVG_USED_BLOCKS,0)/ GREATEST(NVL(HWM,1),1)),2),0) WASTE_PER,
ROUND(BYTES / POWER(1024,2),2) TABLE_MB,
NUM_ROWS,
BLOCKS,
EMPTY_BLOCKS,
HWM HIGHWATER_MARK,
AVG_USED_BLOCKS,
CHAIN_PER,
EXTENTS,
MAX_EXTENTS,
ALLO_EXTENT_PER,
DECODE(GREATEST(MAX_FREE_SPACE - NEXT_EXTENT,0),0,'N','Y') CAN_EXTEND_SPACE,
NEXT_EXTENT,
MAX_FREE_SPACE,
O_TABLESPACE_NAME TABLESPACE_NAME,
block_size,
segment_space_management
FROM (SELECT A.OWNER OWNER,
A.SEGMENT_NAME,
A.SEGMENT_TYPE,
A.BYTES,
B.NUM_ROWS,
A.BLOCKS BLOCKS,
B.EMPTY_BLOCKS EMPTY_BLOCKS,
A.BLOCKS - B.EMPTY_BLOCKS -1 HWM,
DECODE(ROUND((B.AVG_ROW_LEN * NUM_ROWS *(1+(PCT_FREE /100)))/ dt.block_size,0),0,1,
ROUND((B.AVG_ROW_LEN * NUM_ROWS *(1+(PCT_FREE /100)))/ dt.block_size,0))+2 AVG_USED_BLOCKS,
ROUND(100*(NVL(B.CHAIN_CNT,0)/ GREATEST(NVL(B.NUM_ROWS,1),1)),
2) CHAIN_PER,
ROUND(100*(A.EXTENTS / A.MAX_EXTENTS),2) ALLO_EXTENT_PER,
A.EXTENTS EXTENTS,
A.MAX_EXTENTS MAX_EXTENTS,
B.NEXT_EXTENT NEXT_EXTENT,
B.TABLESPACE_NAME O_TABLESPACE_NAME,
B.LAST_ANALYZED,
dt.block_size,
DT.segment_space_management
FROM SYS.DBA_SEGMENTS A,
SYS.DBA_TABLES B,
dba_tablespaces dt
WHERE A.OWNER = B.OWNER
and SEGMENT_NAME = TABLE_NAME
and dt.segment_space_management ='AUTO'
and B.tablespace_name in('TS_RPT_DATA','IX_RPT_DATA','PERFSTAT')
and dt.tablespace_name = a.tablespace_name
and b.last_analyzed > to_date('20210501','yyyymmdd')
union all
SELECT A.OWNER OWNER,
SEGMENT_NAME ||'.'|| B.PARTITION_NAME,
SEGMENT_TYPE,
BYTES,
B.NUM_ROWS,
A.BLOCKS BLOCKS,
B.EMPTY_BLOCKS EMPTY_BLOCKS,
A.BLOCKS - B.EMPTY_BLOCKS -1 HWM,
DECODE(ROUND((B.AVG_ROW_LEN * B.NUM_ROWS *(1+(B.PCT_FREE /100)))/ dt.block_size,0),0,1,
ROUND((B.AVG_ROW_LEN * B.NUM_ROWS *(1+(B.PCT_FREE /100)))/ dt.block_size,0))+2 AVG_USED_BLOCKS,
ROUND(100*(NVL(B.CHAIN_CNT,0)/ GREATEST(NVL(B.NUM_ROWS,1),1)),2) CHAIN_PER,
ROUND(100*(A.EXTENTS / A.MAX_EXTENTS),2) ALLO_EXTENT_PER,
A.EXTENTS EXTENTS,
A.MAX_EXTENTS MAX_EXTENTS,
B.NEXT_EXTENT,
B.TABLESPACE_NAME O_TABLESPACE_NAME,
d.last_analyzed,
dt.block_size,
DT.segment_space_management
FROM SYS.DBA_SEGMENTS A,
SYS.DBA_TAB_PARTITIONS B,
SYS.DBA_TABLES D,
dba_tablespaces dt
WHERE A.OWNER = B.TABLE_OWNER
and SEGMENT_NAME = B.TABLE_NAME
and SEGMENT_TYPE ='TABLE PARTITION'
and dt.segment_space_management ='AUTO'
and B.tablespace_name in('TS_RPT_DATA','IX_RPT_DATA','PERFSTAT')
and dt.tablespace_name = a.tablespace_name
AND D.OWNER = B.TABLE_OWNER
AND D.TABLE_NAME = B.TABLE_NAME
AND A.PARTITION_NAME = B.PARTITION_NAME
AND D.last_analyzed > to_date('20210501','yyyymmdd')),
(SELECT TABLESPACE_NAME F_TABLESPACE_NAME,
MAX(BYTES) MAX_FREE_SPACE
FROM SYS.DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME)
WHERE F_TABLESPACE_NAME = O_TABLESPACE_NAME
AND GREATEST(ROUND(100*(NVL(HWM - AVG_USED_BLOCKS,0)/GREATEST(NVL(HWM,1),1)),2),0)>12
AND OWNER notin('SYS','SYSMAN')
AND BLOCKS > POWER(1024,2)/ block_size) b
where ROUND(WASTE_PER * TABLE_MB /100,2)>100
ORDER BY 7 DESC;
View Code

数据库进程及死锁进程状态

SELECT distinct SESS.SID,
                SESS.SERIAL#,
                LO.ORACLE_USERNAME "登录用户",
                LO.OS_USER_NAME "机器用户名",
                AO.OBJECT_NAME "被锁对象名",
                LO.LOCKED_MODE "锁模式",
                SESS.logon_time "登录时间",
                'ALTER SYSTEM KILL SESSION ''' || SESS.SID || ',' ||
                SESS.SERIAL# || ''' immediate;',
                SESS.STATUS
  FROM GV$LOCKED_OBJECT LO, DBA_OBJECTS AO, GV$SESSION SESS, Gv$process p
 WHERE AO.OBJECT_ID = LO.OBJECT_ID
   AND LO.SESSION_ID = SESS.SID
   and SESS.paddr = p.addr;

 

查看数据库锁包情况

--查询被锁的包
SELECT 'alter system kill session ' || '''' || sid || ',' || serial# || '''immediate;',
       logon_time,
       a.*,
       ss.paddr
  FROM dba_ddl_locks a, v$session ss
 WHERE a.name LIKE upper('%包名%')
   AND a.session_id = ss.sid

 查看数据库正在执行的sql

Sql一:
SELECT VS.SID || ',' || VS.SERIAL# || ',@' || VS.INST_ID AS INST_SID_INFO, EVENT, WAIT_CLASS, VS.MACHINE || ' -> ' || VS.OSUSER OS_USER_INFO, VS.USERNAME || ' -> ' || VS.PROGRAM || '(' || VS.MODULE || ')' USER_PROGRAM_INFO, STATUS, VS.SQL_ID, (SELECT SL.SQL_FULLTEXT FROM V$SQL SL WHERE VS.SQL_ID = SL.SQL_ID AND ROWNUM = 1) SQL_FULLTEXT, VS.PREV_SQL_ID, (SELECT SL.SQL_FULLTEXT FROM V$SQL SL WHERE VS.PREV_SQL_ID = SL.SQL_ID AND ROWNUM = 1) PREV_SQL_FULLTEXT FROM GV$SESSION VS WHERE WAIT_CLASS# <> 6 order by WAIT_CLASS#;

Sql 二:

SELECT VSM.SID || ',' || VSM.SESSION_SERIAL# || ',@' || VSM.INST_ID AS INST_SID_INFO,
VSM.USERNAME,
VSM.STATUS,
VSM.SQL_ID,
VSM.SQL_PLAN_HASH_VALUE PLAN_HASH,
ROUND(VSM.ELAPSED_TIME / 1000 / 1000, 2) ELAPSED_SEC,
ROUND(VSM.CPU_TIME / 1000 / 1000, 2) CPU_SEC,
ROUND(VSM.BUFFER_GETS * 8 / 1024 / 1024, 2) BUFFER_GETS_G,
ROUND(VSM.DISK_READS * 8 / 1024 / 1024, 2) DISK_READS_G,
ROUND(VSM.DIRECT_WRITES * 8 / 1024 / 1024, 2) DIRECT_WRITES_G,
ROUND((VSM.DISK_READS + VSM.BUFFER_GETS) * 8 / 1024 / 1024, 2) TOTAL_G,
ROUND(VSM.PHYSICAL_READ_BYTES / 1024 / 1024 / 1024, 2) PHYSICAL_READ_BYTES_G,
ROUND(VSM.PHYSICAL_WRITE_BYTES / 1024 / 1024 / 1024, 2) PHYSICAL_WRITE_BYTES_G,
VSM.USERNAME || ' -> ' || VSM.PROGRAM || ' (' || VSM.MODULE || ')' AS USER_PROGRAM_INFO,
VSM.SQL_EXEC_START,
VSM.LAST_REFRESH_TIME,
'ALTER SYSTEM KILL SESSION ' || '''' || VSM.SID || ',' ||
VSM.SESSION_SERIAL# || ',@' || VSM.INST_ID || '''' || ' IMMEDIATE;' KILL_SQL_SESSION,
SL.SQL_FULLTEXT,
(SELECT DBMS_SQLTUNE.REPORT_SQL_MONITOR(SQL_ID => VSM.SQL_ID,
TYPE => 'TEXT',
REPORT_LEVEL => 'ALL') AS REPORT
FROM DUAL) SQL_PLAN_REPORT
FROM GV$SQL_MONITOR VSM
LEFT JOIN V$SQL SL
ON SL.SQL_ID = VSM.SQL_ID
WHERE 1 = 1
AND STATUS = 'EXECUTING'
ORDER BY ELAPSED_SEC DESC, STATUS DESC, SQL_EXEC_START DESC;

 

 

 

Oralce配置参数见检查

/*set linesize 200
col name format a40
col value format a40
set pagesize 2000*/
select name,value from v$parameter where isdefault='FALSE' order by 1;

 六、 HTTP状态码详解

2XX 成功

· 200 OK,表示从客户端发来的请求在服务器端被正确处理

· 204 No content,表示请求成功,但响应报文不含实体的主体部分

· 206 Partial Content,进行范围请求

3XX 重定向

· 301 moved permanently,永久性重定向,表示资源已被分配了新的 URL

· 302 found,临时性重定向,表示资源临时被分配了新的 URL

· 303 see other,表示资源存在着另一个 URL,应使用 GET 方法丁香获取资源

· 304 not modified,表示服务器允许访问资源,但因发生请求未满足条件的情况

· 307 temporary redirect,临时重定向,和302含义相同

4XX 客户端错误

· 400 bad request,请求报文存在语法错误

· 401 unauthorized,表示发送的请求需要有通过 HTTP 认证的认证信息

· 403 forbidden,表示对请求资源的访问被服务器拒绝

· 404 not found,表示在服务器上没有找到请求的资源

5XX 服务器错误

· 500 internal sever error,表示服务器端在执行请求时发生了错误

· 503 service unavailable,表明服务器暂时处于超负载或正在停机维护,无法处理请求

403 详解

总体来说,返回403状态码就是,拒绝或者禁止访问。但是,服务器虽然拒绝或者禁止访问,但是它已经理解了你的请求。具体原因有以下多种:

错误代码:403.1
HTTP
403.1
禁止访问:禁止可执行访问
Internet
信息服务
原因是执行权限不够,解决的方法是:
打开“管理工具”的“Internet
信息服务”,右键选择“WEB站点属性”的“主目录”选项卡,把“执行许可”的选项从“无”改为“纯脚本”就好了。

错误代码:403.2
403.2错误是由于"读取"访问被禁止而造成的。导致此错误是由于没有可用的默认网页并且没有对目录启用目录浏览,或者要显示的
HTML
网页所驻留的目录仅标记为"可执行"或"脚本"权限。

错误代码:403.3
403.3错误是由于"写入"访问被禁止而造成的,当试图将文件上载到目录或在目录中修改文件,但该目录不允许"写"访问时就会出现此种错误。

错误代码:403.4
403.4错误是由于要求SSL而造成的,您必须在要查看的网页的地址中使用"https"。

错误代码:403.5
403.5错误是由于要求使用128位加密算法的Web浏览器而造成的,如果您的浏览器不支持128位加密算法就会出现这个错误,您可以连接微软网站进行浏览器升级。

错误代码:403.6
403.6错误是由于IP
地址被拒绝而造成的。如果服务器中有不能访问该站点的IP地址列表,并且您使用的IP地址在该列表中时您就会返回这条错误信息。

错误代码:403.7
403.7错误是因为要求客户证书,当需要访问的资源要求浏览器拥有服务器能够识别的安全套接字层
(SSL)客户证书时会返回此种错误。

错误代码:403.8
403.8错误是由于禁止站点访问而造成的,若服务器中有不能访问该站点的DNS名称列表,而您使用的
DNS名称在列表中时就会返回此种信息。请注意区别403.6与403.8错误。

错误代码:403.9
403.9错误是由于连接的用户过多而造成的,由于Web服务器很忙,因通讯量过多而无法处理请求时便会返回这条错误。

错误代码:403.10
403.10错误是由于无效配置而导致的错误,当您试图从目录中执行CGI、ISAPI或其他可执行程序,但该目录不允许执行程序时便会返回这条错误。

错误代码:403.11
403.11错误是由于密码更改而导致无权查看页面。

错误代码:403.12
403.12错误是由于映射器拒绝访问而造成的。若要查看的网页要求使用有效的客户证书,而您的客户证书映射没有权限访问该Web站点时就会返回映射器拒绝访问的错误。

错误代码:403.13
403.13错误是由于需要查看的网页要求使用有效的客户证书而使用的客户证书已经被吊销,或者无法确定证书是否已吊销造成的。

错误代码:403.15
403.15错误是由于客户访问许可过多而造成的,当服务器超出其客户访问许可限制时会返回此条错误。

错误代码:403.16
403.16错误是由于客户证书不可信或者无效而造成的。

错误代码:403.17
403.17错误是由于客户证书已经到期或者尚未生效而造成的。

以下三个是IIS6.0专用:
403.18-在当前的应用程序池中不能执行所请求的URL。
403.19-不能为这个应用程序池中的客户端执行CGI。
403.20-Passport登录失败
View Code

 

 七、JVM优化相关

线程分析

jmap -heap 30378  生成线程堆转储快照

jstat -gcutils 30378 1000 1000   查看gc情况

jmap -histo 30378 | head -20  就可以查看某个应用pid的java服务占用内存排名前20的类

jmap -dump:format=b,file=mydump.hprof 30378 

查看JAVA应用线程情况:ps p 30378 -L -o pcpu,pmem,pid,tid,time,tname,cmd

PS: 30378是JAVA进程ID

ulimit  -a 查看文件句柄 查看进程被限制使用的资源

dump下来jvm日志分析方法

1.jmap 还有一个指令可以把整个内存情况转成文件形式保存下来,如下:

jmap -dump:format=b,file=mydump.hprof 30378

2.在JVM启动时设置,如果发生OOM,则dump出文件。命令如下:

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/mydump.hprof

如果快照文件不大,可以下载到本地,然后通过 MAT 分析,也可以在线分析( https://fastthread.io/ );如果快照文件很大,可以在服务器上直接分析,使用的命令是:

jhat mydump.hprof

3.jvm日志分析-使用jhat命令

jhat也是jdk内置的工具之一。主要是用来分析java堆的命令,可以将堆中的对象以html的形式显示出来,包括对象的数量,大小等等,并支持对象查询语言 

例子:jhat mydump.hprof

 八、GIT  

  常用命令:

git init      初始化仓库
git clone

拷贝一份远程仓库,也就是下载一个项目。

git add         添加文件到暂存区
git status 查看仓库当前的状态,显示有变更的文件。
git diff 比较文件的不同,即暂存区和工作区的差异。
git commit 提交暂存区到本地仓库。
git reset 回退版本。
git rm 将文件从暂存区和工作区中删除。
git mv      
移动或重命名工作区文件。

git log 查看历史提交记录
git blame <file> 以列表形式查看指定文件的历史修改记录

git remote 远程仓库操作
git fetch 从远程获取代码库
git pull 下载远程代码并合并
git push

上传远程代码并合并

  

    创建分支命令: 

   git branch (branchname)

    切换分支命令:

   git checkout (branchname)

    合并分支命令:

   git merge 

 

 

 

 

 

 

 

 

 

 
 
 
 
 
posted @ 2022-07-03 16:01  风光小磊  阅读(481)  评论(0编辑  收藏  举报