linux使用汇总

Linux的目录结构

没有逻辑磁盘分区(C盘、D盘...)

  • 是一棵树形结构,根目录是/

  • 根目录下边有几个文件夹,需要我们了解:

    • /etc:配置文件所在的文件夹。比如:安装JDK,配置环境变量,就要修改/etc/profile文件

    • /usr:unix shared resource,系统共享资源文件夹。我们安装软件通常安装在:/usr/local下边

    • /home:家目录。每个用户登录Linux之后,默认进入的目录,是用户的家目录。(类似Windows的“我的文件夹)“)

      • 用户tom,有自己的家目录:/home/tom
      • 用户jack,有自己的家目录:/home/jack
    • /root:是root用户的家目录

      linux 文件夹和文件名不能相同

    • 如果事先有叫‘A’的文件夹存在,则不允许建立叫‘A’的文件;

      同理若先有叫‘b’的文件存在,一样不允许建立叫‘b’的文件夹。

      /tmp:为临时目录,即linux有定时清理的策略,定时清理配置/usr/lib/tmpfiles.d/tmp.conf

      img

      [root@bits-yybgl-nfs1 tmpfiles.d]# cat /usr/lib/tmpfiles.d/tmp.conf 
      #  This file is part of systemd.
      #
      #  systemd is free software; you can redistribute it and/or modify it
      #  under the terms of the GNU Lesser General Public License as published by
      #  the Free Software Foundation; either version 2.1 of the License, or
      #  (at your option) any later version.
      
      # See tmpfiles.d(5) for details
      
      # Clear tmp directories separately, to make them easier to override
      q /tmp 1777 root root 10d
      q /var/tmp 1777 root root 30d
      
      
      



​ - 清理 /tmp 目录超过 10 天的内容,但是匹配 /tmp/systemd-private-%b-* 的目录及其路径下的全部内容会被保留。

​ - 清理 /var/tmp 目录超过 30 天的内容,但是匹配 /var/tmp/systemd-private-%b-* 的目录及其路径下的全部内容被保留。

​ 参考http://oppo1.yidianzixun.com/article/0fhnNnOi

linux命令整理

权限

1642507429871

  • -表示文件 d表示目录

--其他少数类型:(b、c、l、s、p)

b:块设备,是一些提供系统存取数据的接口设备,例如硬盘

c:字符设备,是一些串行端口的接口设备,例如键盘

l:为链接文件,类似于Windows的快捷方式

s:套接字文件(socket),用于进程之间的通信。-文件,分纯文本文件(ASCII)和二进制文件(binary)

p:管道文件

  • u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。

  • + 表示增加权限、- 表示取消权限、= 表示唯一设定权限。

  • r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行

将文件 file1.txt 设为所有人皆可读取 :

chmod ugo+r file1.txt

将文件 file1.txt 设为所有人皆可读取 :

chmod a+r file1.txt

将文件 file1.txt 与 file2.txt 设为该文件拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入 :

chmod ug+w,o-w file1.txt file2.txt

为 ex1.py 文件拥有者增加可执行权限:

chmod u+x ex1.py

将目前目录下的所有文件与子目录皆设为任何人可读取 :

chmod -R a+r *

此外chmod也可以用数字来表示权限如 :

chmod 777 file

语法为:

chmod abc file

其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。

r=4,w=2,x=1

  • 若要 rwx 属性则 4+2+1=7;
  • 若要 rw- 属性则 4+2=6;
  • 若要 r-x 属性则 4+1=5。
chmod a=rwx file

chmod 777 file

效果相同

chmod ug=rwx,o=x file

chmod 771 file

权限总结

此外chmod也可以用数字来表示权限如 chmod 777 file
语法为:chmod abc file
其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。
r=4,w=2,x=1
若要rwx属性则4+2+1=7;
若要rw-属性则4+2=6;
若要r-x属性则4+1=7。
范例:
chmod a=rwx file
和
chmod 777 file
效果相同
linux文件执行权限:chmod a+x sysstat 
查看文件的权限和类型:ll 文件所在的路径

用户组

新建组

groupadd samba

添加二名成员

useradd  -g  samba samba
useradd  -g  samba oa

查指定组内成员

groupname=samba && cat /etc/passwd | grep `grep ${groupname} /etc/group | awk -F: '{print $3}'` | awk -F: '{print $1}' && unset groupname

设置密码:passwd <用户名>

passwd test123

查看samba服务器中已拥有哪些用户:

 pdbedit -L

删除某个用户

将用户从用户组中删除:gpasswd -d <用户名> <用户组名>
删除用户:userdel <用户名>

修改文件的访问权限

其他用户要访问权限需要修改一下权限(这里一共涉及到了二重权限,第一重在samba里面要设置相应的权限,第二重就是在这里)

修改/samba的访问权限

chmod  777 /samba      -R

递归修改/samba下面所有的权限,修改为samba所有

chown  samba:samba /samba  -R

扩展

使用smbpasswd添加共享用户的常用方法:

    smbpasswd -a 添加用户(被添加用户必须是系统用户)

    smbpasswd -d 冻结用户 (这个用户不能用了)

    smbpasswd -e 恢复用户 (将冻结的用户解冻)

    smbpasswd -n 将用户密码设置为空

    smbpasswd -x 删除用户

查看Linux中所有用户:

cat  /etc/passwd

查看Linux中所有组:

cat  /etc/group

删除linux中某个用户所有信息

userdel   -r  用户名

系统基本信息

查看系统版本:cat /proc/version 或者uname -a
查看cpu信息:cat /proc/cpuinfo
查看内存信息:cat /proc/meminfo
MemTotal:内存总数 MemFree:空闲内存数(不能代表程序全部可用的内存)  MemAvailable:可用内存数(程序全部可用的内存)
查看硬盘信息:df -h
查看磁盘分区:fdisk -l
查看网关:ip route show
查看ip(inet)和子网掩码信息(netmask):ifconfig
查看本地的host映射: cat /etc/hosts
(主机名host命名规范:服务简写+系统应用简写+ip后缀e.g:BCSOA192)

磁盘扩容参考:http://t.csdn.cn/aHs0v

常用命令

linux
更改虚拟机主机名称:hostnamectl --static set-hostname zc135
显示linux服务列表:chkconfig --list
保持原本格式粘贴文本:
非编辑模式下先设置输入命令    :set paste   直接粘贴保持原样格式  设置恢复  :set nopaste
查看运行cpu内存状态:top
ip是否连通:ping xxx.xxx 或tel

端口是否能访问:telnet 192.168.6.139 8080
telnet退出:
 1、先按 Ctrl+ ]
 2、在Telnet命令行输入quit就可以了
 3.如果输入错误按shift + 删除键   删除
 
查看内存使用情况:free -m
              total        used        free      shared  buff/cache   available(可用)
Mem:          974 (总内存Mb)  571(已使用)    102          10       300    249(可用内存)
Swap:          2047         147        1900

查看硬盘使用容量信息:df -h   (-h:GB,MB,KB等格式自行显示 -H:以M=1000K替代M=1024K的进位方式)
查看文件的编码格式:file -i 文件名称

x为应用名称如mysql
启动x服务:systemcrl start x
查看x服务状态:systemcrl status x
重启x服务:systemcrl restart x
关闭x服务:systemcrl stop x
设置开启启动:systemcrl enable x
查看help帮助提示:x --help
查看当前所在的目录:pwd
ls(ls -l的别名):列出来的结果详细,有时间,是否可读写等信息
ll:只列出文件名或目录名 (就象windows里的列表)
新建文件夹:mkdir filename
创建多级文件夹:mkdir -p filename
删除文件夹:rmdir -rf
查看rpm包所安装的路径:rpm -pql mysql-community-server-5.7.25-1.el7.x86_64.rpm(完整包名)
查看当前时间: date
更改时间:  date -s "2022-01-24 10:30:00"

程序
不记录jar包错误输出:nohup java -jar xxxx.jar >/dev/null 2>&1&
#后台运行 xxx.jar 程序,将标准错误输出合并到标准输出,然后标准输出重定向至 垃圾桶 /dev/null
/dev/null :Linux下有一个特殊的文件/dev/null,它就像一个无底洞,所有重定向到它的信息都会消失得无影无踪。这一点非常有用,当我们不需要回显程序的所有信息时,就可以将输出重定向到/dev/null。
查看程序服务列表:chkconfig --list 
查询端口占用:netstat -ntlp
终结pid进程:kill -9 pid(强制)
终结pid进程:kill -15 pid(程序主动正常终止)
查看防火状态:systemctl status firewalld
永久关闭防火墙:systemctl disable firewalld
重启防火墙:systemctl enable firewalld
查看vm ens33ip:sudo ifconfig ens33

全局查找文件: find . -name "*.log"
全局查找文件夹:find / -name plugin
清空文件: > access.log
当前位置模糊搜索并将结果删除:find . -type f -name "budget_mgt20220112013*" -print0 | xargs -0 rm -f

排除指定文件并移动到指定目录 mv !(文件夹a) ./文件夹b


根据程序端口查启动文件

netstat -nlpt |grep "3306"

tcp6       0      0 :::3306                 :::*                    LISTEN      966/mysqld 

ps -ef grep "966"
UID         PID   PPID  C STIME TTY      STAT   TIME CMD
root       2376   2337  0 14:56 pts/0    R+     0:00 ps -ef grep 966 XDG_SESSION_ID=25 HOSTNAME=zc139 TERM=linux SHELL=/bin/b


查看data目录的总大小:du -sh /data
文字粘贴应该编辑模式下粘贴:可以shift+insert或者输入i
查看/usr目录的下各个子目录的大小,不包括子目录的子目录:[root@localhost usr]# du -sh *
linux内核版本:uname -r

远程拷贝目标服务器138的schema.xml文件并放置conf目录下:

scp 远程账号@远程ip:/文件目录地址 本地存放地址
scp root@192.168.6.138:/usr/local/mycat/conf/schema.xml /usr/local/mycat/conf/ 

远程将自己的文件拷贝到138服务器下的usr目录下
scp 本地文件 远程账号@远程ip:/存放目录
scp /usr/local/mycat/conf/schema.xml.beifen root@192.168.6.138:/usr/


init 0 关机
init 6 重启
reboot 重启





递归复制文件夹test到local文件夹下:cp -r /test /usr/local/
vim编辑器里显示行号:set nu
搜索文件包含此关键字并返回行号:cat -n test.txt | grep "hello"
vim编辑器中批量删除行数据:dnd(d光标所在的行  n要删除多少行 d) e.g:直接输入d27d从d行开始删除27行数据
vim编辑器中删除一行数据:dd或d数字d(d3d删除三行)
vim编辑器中复制一行:yyp或数字yyp(3yyp复制三行)
撤销:u
linux远程连接数据库:mysql -uroot -proot -h 192.168.6.139 -P 3306   (最后是大写P)
linux运行可执行文件的时候在这6种特殊目录下不需要加./:
bin       sbin      sr/bin       usr/sbin       usr/local/bin          usr/local/sbin 
用mycat远程访问:
mysql -umycat -p123456 -h192.168.6.138  -P8066 --default_auth=mysql_native_password
查看错误代码:perror 错误代码(111)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;

日志查询:
cat -n test.log |grep "debug"   查询关键字的日志(常用!~)
tac是倒序查看,是cat单词反写;例子如下:
grep "info" config.log -i 和上面效果一样,还方便
 跟tail是相反的,tail是看后多少行日志,而head是查看日志文件的头多少行,例子如下:
head -n 10  test.log   查询日志文件中的头10行日志;
head -n -10  test.log   查询日志文件除了最后10行的其他所有日志;
-n  是显示行号;相当于nl命令;例子如下:
tail -100f test.log      实时监控100行日志
tail  -n  10  test.log   查询日志尾部最后10行的日志;
tail -n +10 test.log    查询10行之后的所有日志;
cat -n test.log |grep "debug" |more     这样就分页打印了,通过点击空格键翻页

vim快速定位到某一行的
1.命令模式下(没有输入i进行编辑前),:n 比如想到第65行,输入 ":65" 按回车即可定位到65行。
2.命令模式下(没有输入i进行编辑前),ngg 比如想到第86行,输入 "86gg" 或"86G" (这个不用按回车就直接定位到对应行了)
3.打开文件定位到指定行 vim filename +n 比如想到第65行,输入 vim filename +65 或者 vim +65 filename

linux拉取日志:
使用 >xxx.txt 将其保存到文件中,到时可以拉下这个文件分析
如:cat -n test.log |grep "debug"  >debug.txt
1)如果使用securecrt(secureCRTPortable)软件,可以执行 “ sz  test.log” 命令,将test.log 日志文件下载到本地,
如果sz命令不存在的话,执行“yum install lrzsz” 命令安装,安装好后使用sz命令下载;
默认下载文件的地址:
点击options-->session Options-->x/y/Zmodem 查看下载的地址
curl http://localhost:15672


防火墙
复制代码
1:查看防火状态
    systemctl status firewalld
    service  iptables status

2:暂时关闭防火墙
    systemctl stop firewalld
    service  iptables stop

3:永久关闭防火墙
    systemctl disable firewalld
    chkconfig iptables off

4:重启防火墙
    systemctl enable firewalld
    service iptables restart  



软链和硬链

软链

多个目录需要使用相同的文件,可以使用软链,

特点:

不必占用过多的资源

源文件删除后,目标文件名称会报红色

ln -s 源文件 目标文件

ln -s /data/test/test.txt /data/test2/

/data/test2/目录下挂载/data/test/test.txt文件

硬链

特点:

多占用一份资源(是一个备份),但文件发生改变其另外一份文件会随之改变

源文件删除后,目标文件依旧在,不会丢失

ln 源文件 目标文件

ln  /data/test/test.txt /data/test2/

1672985327570

共同特点:

不论是源文件还是目标文件发生改变,另一方(源文件/目标文件)文件内容都会发生改变

rpm命令

安装:rpm -ivh 包名称    安装
升级:rpm -Uvh 升级包名称
卸载:rpm -e 
查询某个包是否被安装:rpm -q mysql
列出所有被安装的包:rpm -qa mysql

yum命令

安装:yum install 包名称
安装(不提示):yum install 包名称
卸载:yum remove 包名称
搜索包:yum search 包名称
卸载程序包(被依赖的包也会被卸载):yum remove 包名称  
删除程序包:yum erase 包名称
检查可升级的包:yum check-update
查询某个包安装情况:yum list 包名称
列出所有被安装的包:yum list installed
查看正在使用的yum仓库:yum repolist

find 命令使用

不设置任何参数,则 find 命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示

语法

find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \;

常用参数:

-type c : 文件类型是 c 的文件。

-name name, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写

find . -type f -name '*.sh' | xargs grep -i 'your_string'

//在当前目录及子目录模糊搜索文件名称为budget_mgt20220110开头的文件
find . -type f  -name "budget_mgt20220110*" 

find -print0和xargs -0原理及用法

用法

find . -name "关键字" | xargs rm
示例
//在当前目录及子目录模糊搜索文件名称为app_info.开头的文件并将在所有文件中搜索包含关键 DOCUMENTID ,并返回对应的行数
find . -type -name "app_info.*" | xargs grep -i "DOCUMENTID"

用法注意:

但是这个命令如果遇到文件名里有空格或者换行符,就会出错。因为xargs识别字符段的标识是空格或者换行符,所以如果一个文件名里有空格或者换行符,xargs就会把它识别成两个字符串,自然就出错了。

这时候就需要-print0和-0了。

find -print0表示在find的每一个结果之后加一个NULL字符,而不是默认加一个换行符。find的默认在每一个结果后加一个'\n',所以输出结果是一行一行的。当使用了-print0之后,就变成一行了

1643017246622

然后xargs -0表示xargs用NULL来作为分隔符。这样前后搭配就不会出现空格和换行符的错误了。选择NULL做分隔符,是因为一般编程语言把NULL作为字符串结束的标志,所以文件名不可能以NULL结尾,这样确保万无一失。

所以比较我们推荐的比较保险的命令是

find . -name "*.txt" -print0 | xargs -0 rm

示例

找到匹配的文件后并执行删除

find . -type f -name "budget_mgt20220112013*" -print0 | xargs -0 rm -f

找名称为"png"结尾的文件并执行mv命令,移动到指定的目录中

find -type f -name "*.png" -print0 | xargs -0   mv  --target-directory=testfile/

找不是目录并且匹配正则(.*.png$以.png结尾的文件)并执行mv命令 移动到指定的目录中

find -not -type d -and -regex '.*.png$' -exec  mv {} ./testfile \;

-not -type d  不是目录
-and 并且
-exec 后面跟的是command命令 终止是以;为结束标志的,所以这句命令后面的分号是不可缺少的,考虑到各个系统中分号会有不同的意义,所以前面加反斜杠。
{} 代表的是find 查找处理的结果

curl请求

浏览器请求快捷使用

1.复制格式以curl+bash格式复制

2.linux可以直接使用

常用的命令

-X 请求方式

-H 请求头

-d --dataHTTP POST 数据

-o将输出写入文件

-G, --get 使用 HTTP GET 方法发送 -d 数据

-a, --append添加要上传的文件 (F/SFTP)

curl http://192.168.6.139/inner/customer/jg/QueryCommonCstListPageOrNPageLdsf 
     -X POST 
     -H "Content-type:application/json"
     -H "apikey:csc-btm-yybgl-inner-prod" 
     -d '{"pageNO": "1","companyName": "百度公司","pageSize": "20","userId": "id123456","isPage": ""}'
     
 
 curl http:192.168.6.139:8083/apiminio/file
      -X POST
      -T 
      -H "Content-type:application/json"
      
      curl --form 'file=@data.txt' http:192.168.6.139:8083/apiminio/file

参考:https://itbilu.com/linux/man/4yZ9qH_7X.html

YUM命令

 yum search string 													#根据关键字string查找安装包
  yum deplist <package_name>											# 仅仅 查看程序rpm依赖情况
  yum provides */命令													# 查看命令是由哪个包提供的(这个命令很有帮助)
  yum -y install <package_name>           								#不加-y则会询问是否安装,想控制哪些包安装,则不要加-y,想自动安装不进行交互,则加-y
yum install --downloadonly --downloaddir=/xx/xxx/xx/					#只下载软件但不安装
yum remove <package_name>												# 卸载程序包,此卸载命令会yum或rpm安装的包生效,如果是编译安装的,则不受yum控制
yum groupremove <group_name>											# 删除程序组group
yum check-update 														#检查可更新的软件有哪些
yum update 																#更新升级所有软件包
yum update <package_name> 												#更新指定程序包package,   
yum upgrade <package_name> 												#升级指定程序包package

yum 解决依赖的原理
yum 解决依赖关系问题,自动下载软件包。yum是基于C/S架构。C指的是客户端, S指的是服务器,像ftp,http,file一样;关于yum为什么能解决依赖关系:所有的Yum 源里面都有repodata,它里面是有XML格式文件,里面有说明需要什么包。例如上堂课实验的:mysql-server rpm 需要:perl-DBI ,python,或者是php等等包。

更换yum源

  1. 备份
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

  1. 下载新的 CentOS-Base.repo 到 /etc/yum.repos.d/

centos8(centos8官方源已下线,建议切换centos-vault源)

wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo

  1. 运行 yum makecache 生成缓存
  2. 其他

非阿里云ECS用户会出现 Couldn't resolve host 'mirrors.cloud.aliyuncs.com' 信息,不影响使用。用户也可自行修改相关配置: eg:

sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo

公网用户:

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
yum clean all && yum makecache


配置本地yum源

baseurl=file:///   						#注意是file开头加三个斜
baseurl=file:///mnt/vcdrom/				#将baseurl修改为DVD的挂载目录

参考:

https://developer.aliyun.com/mirror/centos?spm=a2c6h.13651102.J_4121707010.2.1a811b11SR1vgL

https://docs.centos.org/en-US/8-docs/

http://t.csdn.cn/BUKEz

VIM命令

光标:
上:k
下:j
左:h
右:l

向上匹配搜索:?
向下匹配一次:/
示例:
?提交 输入n 匹配上一个
/提交 输入n 匹配下一个
输入/后直接回车:使用上次的搜索关键字
输入?后直接回车:使用上次的搜索关键字

profile存在位置

/etc/profile

正则表达式搜索

^表示一行的开头
$表示一行的结尾
.表示任意一个字符
*匹配0次或n次

文件传输

本文记录linux系统中文件传输的多种方式,留作备忘。linux中文件传输的方式有ftp,scp,rsync,rz,sz等,但各个工具的功能又有所区别;

  • FTP : FTP是文件服务器,可实现文件的上传下载,存储等功能,但本文不打算介绍ftp的使用。
  • scp: scp能够将不同主机的文件进行相互传输,使用简单方便。
  • rz : 用于linux与windows之间的文件上传
  • sz : 用于linux与windows之间的文件下载
  • rsync : rsync是文件同步工具,结合inotify可以实现文件的同步,备份功能。

解压/压缩方式

高效的压缩格式推荐

1679388992714

推荐使用zip压缩,具有很好的跨平台和高效性

1、.tar 用 tar –xvf 解压
2、
.gz 用 gzip -d或者gunzip 解压
3、.tar.gz和.tgz 用 tar –xzf 解压
4、.bz2 用 bzip2 -d或者用bunzip2 解压
5、
.tar.bz2用tar –xjf 解压
6、.Z 用 uncompress 解压
7、
.tar.Z 用tar –xZf 解压
8、.rar 用 unrar e解压
9、
.zip 用 unzip 解压

zip 命令

https://www.runoob.com/?s=zip

参数:

在`-A:调整可执行的自动解压缩文件;``-b<工作目录>:指定暂时存放文件的目录;``-c:替每个被压缩的文件加上注释;``-d:从压缩文件内删除指定的文件;``-D:压缩文件内不建立目录名称;``-f:此参数的效果和指定“-u”参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中;``-F:尝试修复已损坏的压缩文件;``-g:将文件压缩后附加在已有的压缩文件之后,而非另行建立新的压缩文件;``-h:在线帮助;``-i<范本样式>:只压缩符合条件的文件;``-j:只保存文件名称及其内容,而不存放任何目录名称;``-J:删除压缩文件前面不必要的数据;``-k:使用MS-DOS兼容格式的文件名称;``-l:压缩文件时,把LF字符置换成LF+CR字符;``-ll:压缩文件时,把LF+cp字符置换成LF字符;``-L:显示版权信息;``-m:将文件压缩并加入压缩文件后,删除原始文件,即把文件移到压缩文件中;``-n<字尾字符串>:不压缩具有特定字尾字符串的文件;``-o:以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该文件相同;``-q:不显示指令执行过程;``-r:递归处理,将指定目录下的所有文件和子目录一并处理;``-S:包含系统和隐藏文件;``-t<日期时间>:把压缩文件的日期设成指定的日期;``-T:检查备份文件内的每个文件是否正确无误;``-u:更换较新的文件到压缩文件内;``-v:显示指令执行过程或显示版本信息;``-V:保存VMS操作系统的文件属性;``-w:在文件名称里假如版本编号,本参数仅在VMS操作系统下有效;``-x<范本样式>:压缩时排除符合条件的文件;``-X:不保存额外的文件属性;``-y:直接保存符号连接,而非该链接所指向的文件,本参数仅在UNIX之类的系统下有效;``-z:替压缩文件加上注释;``-$:保存第一个被压缩文件所在磁盘的卷册名称;``-<压缩效率>:压缩效率是一个介于1~9的数值。`


用法

1.将/home/data 这个目录下的所有文件打包压缩为当前目录下的data.zip

zip -q -r data.zip /home/data

2.如果现在在/home 这个目录下,则如下

zip -q -r data.zip data

3.如果在/home/data 这个目录下,则如下

zip -q -r data.zip *

unzip

https://www.runoob.com/?s=unzip

tar命令

最常用的打包命令是 tar,使用 tar 程序打出来的包我们常称为 tar 包,tar 包文件的命令通常都是以 .tar 结尾的。生成 tar 包后,就可以用其它的程序来进行压缩了,所以首先就来讲讲 tar 命令的基本用法。

-z 这个参数来调用gzip
-x 是解开
-c 是表示产生新的包(压缩)
-f 指定包的文件名
-t 是列出文件的意思
-u 是表示更新指定包中的文件
-r 是表示向指定的包增加文件




tar 命令的选项有很多(用 man tar 可以查看到),但常用的就那么几个选项,下面来举例说明一下:

# tar -cf all.tar *.jpg

这条命令是将所有 .jpg 的文件打成一个名为 all.tar 的包。-c 是表示产生新的包,-f 指定包的文件名。

# tar -rf all.tar *.gif

这条命令是将所有 .gif 的文件增加到 all.tar 的包里面去,-r 是表示增加文件的意思。

# tar -uf all.tar logo.gif

这条命令是更新原来 tar 包 all.tar 中 logo.gif 文件,-u 是表示更新文件的意思。

# tar -tf all.tar

这条命令是列出 all.tar 包中所有文件,-t 是列出文件的意思。

# tar -xf all.tar

这条命令是解出 all.tar 包中所有文件,-x 是解开的意思。

以上就是 tar 的最基本的用法。为了方便用户在打包解包的同时可以压缩或解压文件,tar 提供了一种特殊的功能。这就是 tar 可以在打包或解包的同时调用其它的压缩程序,比如调用 gzip、bzip2 等

gzip 是 GNU 组织开发的一个压缩程序,.gz 结尾的文件就是 gzip 压缩的结果。与 gzip 相对的解压程序是 gunzip。tar 中使用 -z 这个参数来调用gzip。

下面来举例说明一下:

# tar -czf all.tar.gz *.jpg

这条命令是将所有 .jpg 的文件打成一个 tar 包,并且将其用 gzip 压缩,生成一个 gzip 压缩过的包,包名为 all.tar.gz。

# tar -xzf all.tar.gz

这条命令是将上面产生的包解开。

运行状况

PID - 进程标示号
USER - 进程所有者
PR - 进程优先级
NI - 进程优先级别数值
VIRT - 进程占用的虚拟内存值
RES - 进程占用的物理内存值
SHR - 进程使用的共享内存值
S - 进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死
%CPU - 进程占用的CPU使用率
%MEM - 进程占用的物理内存百分比
TIME+ - 进程启动后占用的总的CPU时间
Command - 进程启动的启动命令名称

https://www.cnblogs.com/cloudma/articles/linux-sysstat.html

运行jar

使用&后台运行程序
结果会输出到终端

使用Ctrl + C发送SIGINT信号,程序免疫

关闭session发送SIGHUP信号,程序关闭

使用nohup运行程序

  • 结果默认会输出到nohup.out
  • 使用Ctrl + C发送SIGINT信号,程序关闭
  • 关闭session发送SIGHUP信号,程序免疫

日后使用

平日线上经常使用nohup&配合来启动程序nohup ./test &

  • 同时免疫SIGINTSIGHUP信号

线上部署

1.设置好配置

2.上传jar包

3.命令

将运行的jar 错误日志信息输出到log.file文件中,然后(>&1)就是继续输出到标准输出(前面加的&,是为了让系统识别是标准输出),最后一个&,表示在后台运行。

nohup java -jar test-0.0.1-SNAPSHOT.jar  > log.file  2>&1 &

上面的2 和 1 的意思如下:

0 标准输入(一般是键盘)
1 标准输出(一般是显示屏,是用户终端控制台)
2 标准错误(错误信息输出)

1619605560837

9161就表示运行的pid

查看到进程的pid

netstat -anp 获取jps -l

修改linux时间

查看当前时区
命令 : “date -R”
修改设置Linux服务器时区
方法 A
命令 : “tzselect”
方法 B 仅限于RedHat Linux 和 CentOS
命令 : “timeconfig”
方法 C 适用于Debian
命令 : “dpkg-reconfigure tzdata”
复制相应的时区文件,替换系统时区文件;或者创建链接文件
cp /usr/share/zoneinfo/主 时 区 / 主时区/主时区/次时区 /etc/localtime
例如:在设置中国时区使用亚洲/上海(+8)
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

查看时间和日期
命令 : “date”
2.设置时间和日期
例如:将系统日期设定成2009年11月3日的命令
命令 : “date -s 11/03/2009”
将系统时间设定成下午5点55分55秒的命令
命令 : “date -s 17:55:55”
将当前时间和日期写入BIOS,避免重启后失效
命令 : “hwclock -w”

解压压缩

*.tar格式用 tar –xvf 解压

*.gz格式用 gzip -d或者gunzip 解压

.tar.gz和.tgz格式用 tar –xzf 解压

*.bz2 用 bzip2 -d或者用bunzip2 解压

*.tar.bz2用tar –xjf 解压

*.Z 用 uncompress 解压

*.tar.Z 用tar –xZf 解压

*.rar 用 unrar e解压

1.  *.zip 用 unzip 解压  

2、如果要把文件解压到指定的目录下,需要用到-d参数。
unzip -d /temp test.zip

3、解压的时候,有时候不想覆盖已经存在的文件,那么可以加上-n参数
unzip -n test.zip
unzip -n -d /temp test.zip

4、只看一下zip压缩包中包含哪些文件,不进行解压缩
unzip -l test.zip

5、查看显示的文件列表还包含压缩比率
unzip -v test.zip

6、检查zip文件是否损坏
unzip -t test.zip

7、将压缩文件test.zip在指定目录tmp下解压缩,如果已有相同的文件存在,要求unzip命令覆盖原先的文件
unzip -o test.zip -d /tmp/

zip压缩
zip  -o a.zip a.txt
-o:示输出文件,需在其后紧跟打包输出文件名。
-q:不向屏幕输出
-r:递归打包包含子目录的全部内容
-e:加密打包

定时任务

crontab -e 
文件在/var/spool/cron目录下面

Docker命令

查看docker帮助:docker --help
搜索镜像:docker search 镜像名称(如centos)
拉取镜像:docker pull 镜像名称:tag(标签名称) 如:docker pull centos:7
创建交互式容器:docker run -id --name=minio minio/minio
查看所有镜像:docker images
删除某个镜像:docker rmi 镜像ID
删除所有镜像:docker rmi $(docker images -q)
注意:必须先关闭镜像相关的所有容器,才可以删除镜像;如果有镜像关联的容器正在运行,则不能删除

创建容器:docker run -id --name=mynginx -p 80:80 nginx
删除某个容器:docker rm 容器id

查看容器信息:docker imspect 容器id前12位(f3307865549d)
查看容器的ip地址:docker inspect -f {{.NetworkSettings.Networks.bridge.IPAddress}} 容器名称
在linux中copy容器里的文件: docker cp f3307865549d(容器id):/home/test.java /home(linux保存的路径)
查看docker程序内存占用:docker stats
进入容器:docker exec -it containerID /bin/bash
批量关闭查询到的容器:docker stop $(docker ps -aq)
批量删除查询到的容器:docker rm $(docker ps -aq)
批量关闭查询:docker stop A B      (A/B为容器)

日志:
查看容器的日志信息后10条: docker logs -tf --tail 10 容器id前12位(f3307865549d)
显示容器全部日志:docker logs -tf 容器id前12位(f3307865549d)
显示容器全部日志:docker logs  容器id前12位(f3307865549d)
显示容器最后20行日志:docker logs e31bc40addb5 --tail 20
日志根据时间查询(注意格式yyyy-MM-dd别少一位):docker logs 863e75445731 --since 2021-03-09

docker 
进入容器内部:docker exec -it 容器名称 bash 或 docker exec -it 容器名称 sh

进入容器命令:

1.docker exec -it 容器id/bin/bash
2.docker attach 容器id
两个区别:
docker exec #进入容器后开启一个新的终端,可以在里面操作(常用)
docker attach #进入容器正在执行的终端,不会启动新的进程

docker使用问题

linux进入docker容器报错:

docker start 7d7510941e2b(容器id前12位)

具体操作:
[root@zc /]# docker exec -it mysql_docker /bin/bash
Error response from daemon: Container 7d7510941e2b26fedf2fe9b4509966972a42b6b4c5e7894a6a770b7b8ece85e1 is not running
[root@zc /]# docker start 7d7510941e2b
7d7510941e2b
[root@zc /]# docker exec -it mysql_docker /bin/bash
root@7d7510941e2b:/# 
进入容器成功
复制文件
将容器文件复制到宿主机
docker cp  96f7f14e99ab:/www /tmp/
将宿主机文件/文件夹复制到容器中
docker cp logs 863e75445731:/root/


docker搭建 minio

拉取镜像

docker pull minio/minio:RELEASE.2020-10-
-53-21Z

启动

docker run -id -p 9000:9000 --name minio-server \
  -e "MINIO_ACCESS_KEY=root1234" \
  -e "MINIO_SECRET_KEY=root1234" \
  -v /sxapp/docker-data/minio:/data \
  -v /sxapp/docker-data/minio/config:/root/.minio \
  minio/minio server /data


账号:access_key

密码:secret_key

JAVA

指令

jvm 指令

jps 查看java程序运行pid  (jps(Java Virtual Machine Process Status Tool))
jps -l 查看java程序的运行pid信息和程序名称(jar包或包名)
jps -heap pid 查看此pid的jvm内存占用情况


jmap -histo 14660  #查看历史生成的实例
jmap -dump:format=b,file=./dump.hprof 14660 导出堆的dump文件(堆太大可能导不出来)

top 查看操作系统运行的状态
top -p 1234 (pid) 查看1234进程的运行状态

jstack 进程pid |grep -A 10 子线程pid    检查此线程是否存在死锁(jvisualvm也可以查看死锁)

jinfo -flags 4658(pid) 查看java程序运行的jvm参数
jinfo -sysprops pid 查看程序的系统参数


java指令

java -Dfile.encoding=UTF-8  xx 可以直接运行字节码文件

如果提示找不到主类需要在xx.class文件的package父级路劲下执行
如:com.aaa.bbb;
则需要在com包所在的文件夹下执行
示例:
java com.aaa.bbb.Test

自定义配置

nohup java -jar -Dserver.port=8087 subsidiary_archives_management.jar

javap指令

反编译字节码文件
javap -l Test.class 会输出行号和本地变量表信息
javap -c Test.class 会对当前class字节码进行翻译生成汇编代码
javap -v Test.class 处理包含 -c 内容外,还会输出行号、局部变量表信息、常量池等信息

javac指令

1. javac   源文件  :
          直接编译源文件,并将编译后的.class文件放到与源文件统一目录下;
          
2. javac   源文件   -d   编译文件输出路径  -encoding utf-8 :编译文件, 并将编译后的.class文件放到 -d参数后的目标路径中,且指定编码格式 为utf-8,解决运行时中文乱码问题。
存在多级目录的,在windows下使用`\` ,在linux 下使用 '/' : 
 编译:
             windows : 'src\com\northcastle\xxx.java'
             linux : 'src/com/northcastle/xxx.java'
             javac com\baidu\UseSynchronized.java -encoding utf-8
 运行:
             java com.baidu.UseSynchronized


jstat指令

jstat -gc pid 查看程序的gc信息(gc次数,内存使用情况)
jstat -gc 5006 2000 10 每隔2秒输出gc信息10次


S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT   
2176.0 2176.0  0.0   818.5  17408.0  14725.1   43400.0    26038.1   57432.0 54579.4 7296.0 6796.0    123    0.558   3      0.212    0.771

S0C:第一个幸存区的大小,单位KB
S1C:第二个幸存区的大小
S0U:第一个幸存区的使用大小
S1U:第二个幸存区的使用大小
EC:伊甸园区的大小
EU:伊甸园区的使用大小
OC:老年代大小
OU:老年代使用大小
MC:方法区大小(元空间)
MU:方法区使用大小
CCSC:压缩类空间大小
CCSU:压缩类空间使用大小
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间,单位s
FGC:老年代垃圾回收次数 
FGCT:老年代垃圾回收消耗时间,单位s
GCT:垃圾回收消耗总时间,单位s

堆内存统计

jstat -gccapacity 4658   堆内存统计

NGCMN:新生代最小容量
NGCMX:新生代最大容量
NGC:当前新生代容量
S0C:第一个幸存区大小
S1C:第二个幸存区的大小
EC:伊甸园区的大小
OGCMN:老年代最小容量
OGCMX:老年代最大容量
OGC:当前老年代大小
OC:当前老年代大小
MCMN:最小元数据容量
MCMX:最大元数据容量
MC:当前元数据空间大小
CCSMN:最小压缩类空间大小
CCSMX:最大压缩类空间大小
CCSC:当前压缩类空间大小
YGC:年轻代gc次数
FGC:老年代GC次数

nc

可以模拟一个服务端端口,检查端口是否通

模拟服务器指定端口

nc -lk 8080
-l 开启 监听模式,用于指定nc将处于监听模式。通常 这样代表着为一个 服务等待客户端来链接指定的端口。

-p<通信端口> 设置本地主机使用的通信端口。有可能会关闭

-k<通信端口>强制 nc 待命链接.当客户端从服务端断开连接后,过一段时间服务端也会停止监听。 但通过选项 -k 我们可以强制服务器保持连接并继续监听端口。
-u UDP 模式
-Z DCCP 模式

redis

清空所有的key: flushdb 
查询所有的key: keys *  
进入redis客户端: docker exec -ti myredis redis-cli -h localhost -p 6379(
docker exec -it f63b73b53aa0 redis-cli)


docker run -p 6379:6379 --name myredis -v /usr/local/docker/redis.conf:/etc/redis/redis.conf -v /usr/local/docker/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes



nginx

命令

windows方式

1、启动:

C:\server\nginx-1.0.2>start nginx

C:\server\nginx-1.0.2>nginx.exe

最好使用第一种,第二种会使你的cmd窗口一直处于执行中,Ctrl + C也不能终止,就算关闭cmd窗口,查看进程管理器也能看到之前还在运行并未随着cmd窗口关闭而结束进程。

如果使用了第二种方法,关闭nginx进程方法就是,重新打开cmd,输入停止命令 nginx.exe -s quit 进程就关闭了。

2、停止:

C:\server\nginx-1.0.2>nginx.exe -s stop

C:\server\nginx-1.0.2>nginx.exe -s quit

ps:stop是快速停止nginx,可能并不保存相关信息;quit是完整有序的停止nginx,并保存相关信息。

3、重新载入Nginx:

C:\server\nginx-1.0.2>nginx.exe -s reload

当配置信息修改,需要重新载入这些配置时使用此命令。

4、重新打开日志文件:

C:\server\nginx-1.0.2>nginx.exe -s reopen

5、查看Nginx版本:

C:\server\nginx-1.0.2>nginx -v

6.查看、杀掉进程基本命令

tasklist /fi "imagename eq nginx.exe"

7.杀掉nginx进程

taskkill /f /pid 16900 /pid 19012

8.查看命令使用方法

tasklist /?

nginx安装为:/usr/local/nginx
测试配置文件修改是否正常:/usr/local/nginx/sbin/nginx -t 
配置文件重新加载:/usr/local/nginx/sbin/nginx -s reload


配置

重写请求地址:

#第一种方式
server{
location /api/budget {
         rewrite  ^.+api/?(.*)$ /$1 break;
         proxy_pass  http://localhost:8085;
         proxy_redirect default;
  }
}

    #第二种方式
    upstream  ysgl-server {
         server         localhost:8085;
    }
    
    server{
    location /api/budget {
             rewrite  ^.+api/?(.*)$ /$1 break;
             proxy_pass  http://ysgl-server;
             proxy_redirect default;
     }
    }

mysql

命令

退出客户端:\q (等价于exit)
查看数据库信息:\s
建库语句
create database budget_mgt default character set utf8mb4;
导出mysql数据:mysqldump database_name user -u root -p > test.sql
//注意是">" 不是"->"
导出mysql的建表语句:mysqldump --no-data -u username -p* database_name > filename.sql 
导出指定库指定的表数据和表结构:
mysqldump database budget_test --tables budget >table_budget.sql
官方文档:https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html
执行.sql文件:source test.sql
查询mysql其它用户权限:
show grants for slave;
取消mysql的slave用户权限:
revoke all on *.* from slave;
查看master binlog文件列表:show master logs;
查看此binlog文件的记录数据:show binlog events in 'master-bin.000001';    
数据库锁表:flush tables with read lock; #该处是锁定为只读状态,语句不区分大小写
解锁:UNLOCK TABLES; 
查看表的整体结构:desc budget  或者 show columns from budget(效果一样)
查看建表语句:show create table  budget 
查看指定库下的表名称:show tables  from video_surveillance




mysqldump参数参考:

https://www.cnblogs.com/qq78292959/p/3637135.html

https://www.runoob.com/w3cnote/linux-mysql-import-export-data.html

索引排查

trace用法

开启后对系统影响比较大,作为临时分析工具

mysql> set session optimizer_trace="enabled=on",end_markers_in_json=on;  --开启trace
mysql> select * from employees where name > 'a' order by position;
mysql> select * FROM information_schema.OPTIMIZER_TRACE;
mysql> set session optimizer_trace="enabled=off";

导入

mysql -uroot -p123456 < runoob.sql
mysql> use abc;                  # 使用已创建的数据库 
mysql> set names utf8;           # 设置编码
mysql> source /home/abc/abc.sql  # 导入备份数据库

1.导入文件执行报错

用Navicat导出sql,恢复时,报错:Invalid default value for,如何解决?#数据库##SQL#
在用navicat转存的sql文件,再次导入时却出现了问题!有可能因为mysql5.7的严格模式导致数据无法插入时,可以把mysql的sql_model设置为none
执行命令:

show variables like 'sql_mode';  

如果结果中含有NO_ZERO_IN_DATE, NO_ZERO_DATE
则执行下面的命令:

set session sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO

mysql开放root用户远程访问

grant all privileges on *.* to root@'%' identified by '密码';

'%':所有用户

导出

1646013409139

1646013511295

选自:高性能mysql书中文章

--single-transaction选项和--lock-tables选项是互斥的,因为LOCK TABLES会使任何挂起的事务隐含提交

--master-data=2 该选项将二进制日志的位置和文件名写入到输出中,2:binlog位置写进注释,1 没有注释.

1.需要先执行

flush tables with read lock

2.执行sql导出

mysqldump --single-transaction --flush-logs --master-data=2 --opt --databases budget_mgt > 2023-03-09-17/09_budget_mgt_backup.sql

mysql命令选项

-e 执行''中的后序命令
[root@zc139 ~]# mysql -e 'show master status;use budget_mgt; select * from budget_file;show tables;'

mysqldump --single-transaction --flush-logs --master-data=2 --opt --databases budget_mgt > backup.sql


mysqldump --single-transaction -R -E --opt  --databases budget_mgt  app_onlyfortest branch_mechanism_management subsidiary_management  subsidiary_archives__management |gunzip >test.sql.gz
 
 gunzip test4.sql.gz
 
 
 
 mysqldump --single-transaction --opt --databases budget_mgt > budget_mgt0513.sql

导出存文本格式

(1)TERMINATED BY用来指定字段值之间的符号,例如,“TERMINATED BY ','”指定了逗号作为两个字段值之间的标志。

(2)ENCLOSED BY子句用来指定包裹文件中字符值的符号,例如,“ENCLOSED BY ' " '”表示文件中字符值放在双引号之间,若加上关键字OPTIONALLY表示所有的值都放在双引号之间。

(3)ESCAPED BY子句用来指定转义字符,例如,“ESCAPED BY '*'”将“*”指定为转义字符,取代“\”,如空格将表示为“*N”。

●   LINES子句:在LINES子句中使用TERMINATED BY指定一行结束的标志,如“LINES TERMINATED BY '?'”表示一行以“?”作为结束标志。

二、LOAD DATA …INFILE语句是SELECT INTO…OUTFILE语句的补语,该语句可以将一个文件中的数据导入到数据库中。

导出csv格式

csv格式可以直接通过excel打开并保存为.xlsx格式

tidb4.0以上版本也支持

select * from user into outfile '/var/lib/mysql-files/users.csv' fields terminated by ',';

(1)路径目录必须有读写权限777

(2)文件名必须唯一

(3)fields terminated by ','必须存在,否则打开的文件的列在同一的单元格中出现

(4)我验证的表结构为gbk的,否则出现乱码

注意:

导出的文件在tidb服务端服务器上目录上

如果有where条件查询,需要外面套子查询才可以

表结构字段表格化

SELECT
COLUMN_NAME 列名,
COLUMN_TYPE 数据类型,
DATA_TYPE 字段类型,
CHARACTER_MAXIMUM_LENGTH 长度,
IS_NULLABLE 是否为空,
COLUMN_DEFAULT 默认值,
COLUMN_COMMENT 备注
FROM
INFORMATION_SCHEMA.COLUMNS
where
-- tmshop为数据库名称,只需要修改成你要导出表结构的数据库即可
table_schema ='tmshop'
AND
-- oms_payment_info为表名,换成你要导出的表的名称
table_name = 'oms_payment_info'

安全

1678355264272

Tidb

排查锁阻塞

USE information_schema;
select * from data_lock_waits;

DATA_LOCK_WAITS 表中各列的字段含义如下:
KEY:正在发生等锁的 key,以十六进制编码的形式显示。
KEY_INFO:对 KEY 进行解读得出的一些详细信息,见 KEY_INFO。
TRX_ID:正在等锁的事务 ID,即 start_ts。
CURRENT_HOLDING_TRX_ID:当前持有锁的事务 ID,即 start_ts。
SQL_DIGEST:当前正在等锁的事务中被阻塞的 SQL 语句的 Digest。
SQL_DIGEST_TEXT:当前正在等锁的事务中被阻塞的 SQL 语句的归一化形式,即去除了参数和格式的 SQL 语句。与 SQL_DIGEST 对应。
目前该表仅能记录悲观锁等锁的情况,如果乐观事务(如 autocommit 的事务)被悲观锁阻塞,这一表中不会显示相应等锁信息。

排查当前存在的事务

USE information_schema;
select * from  CLUSTER_TIDB_TRX;

重启指令

tiup cluster restart tidb-yybgl

tidb官方链接:

ttps://docs.pingcap.com/zh/tidb/dev/information-schema-data-lock-waits

xshell工具

上传乱码

使用官方的工具上传xftp

MongoDB使用

查询ObjectId

//查询表的ObjectId
db.getCollection('tanhua_users').find({"_id":ObjectId("5e82dc3e6401952928c211a3")})

mongoDb注解

@Id:
     @Id
     private ObjectId id;
被注解的ID是ObjectId类型的,Mongo会自动为你生成一个唯一的新的ObjectId对象(就像MySQL中的auto_increment类型的ID)。如果你想使用其他的类型作为ID,那么在你保存数据时就必须手动为ID赋值。
     @Document(collection=“mongodb”)
把一个java类声明为mongodb的文档,可以通过collection参数指定这个类对应的文档
@Indexed  
    @Indexed
    private Double score;
- 声明该字段需要索引,建索引可以大大的提高查询效率
    @CompoundIndex - 复合索引的声明,建复合索引可以有效地提高多字段的查询效率。
    @GeoSpatialIndexed - 声明该字段为地理信息的索引。
    @Transient - 映射忽略的字段,该字段不会保存到mongodb。
    @PersistenceConstructor - 声明构造函数,作用是把从数据库取出的数据实例化为对象。该构造函数传入的值为从DBObject中取出的数据

时间排序

db.getCollection('quanzi_publish').find({}).sort({created:-1})

windows

cmd 命令

查看端口号:netstat -aon|findstr "8080"
根据pid杀死进程:taskkill /pid pid号 -t -f
查看windows的wifi密码(结果key content为密码):netsh wlan show profiles name=wifi名称 key=clear

当前所在目录为D:\opt\logback

d: 进入d盘
cd .. 返回上级目录
cd logback 进入logback文件夹
dir 当前目录列表
md 创建目录
rd 删除目录
del 删除文件
echo [helloworld]>eva.txt 创建内容为helloworld的eva.txt文件

Windows host文件

C:\Windows\System32\drivers\etc

Git

git官方命令手册:

https://git-scm.com/book/zh/v2/Git-基础-记录每次更新到仓库


文件名称--->wjmc

git init 初始化本地库
git status 查看版本当前状态
git add wjmc(文件名称) 放入暂存区
git add . 将工作区的代码全部拉取(注意空格,如果配置ignore文件了,则会排除配置的文件)
git restore --staged 文件 撤销暂存区提交的文件
git commit -m "提交的备注" wjmc
git reflog 查看历史版本信息
git reflog -g 查看历史提交版本信息
git log   查看历史详细版本信息   可以按q退出查看
git reset --hard 版本号 (回退到指定版本)
git checkout  版本号 (切换到指定版本)
git config --list 查看git配置信息
git branch -v 查看分支
git branch 创建新的分支
git checkout 分支名称(切换到指定分支)
git checkout 分支名称A 版本号(指定版本创建新的分支A)
git checkout -b <new-branch> 检出当前分支并创建新分支


git checkout ${commitid} path(git仓库的相对路径)
git checkout 6a942d1e3586843388abe6e7b686ecb37a0968d8 src/main/java/com/zxjt/controller/v1/TimerController.java
回退指定版本的指定文件(如果当前版本文件删除则无法使用)

git show ${commitid}:文件的相对路径 > 存储的相对路径路径及名称(单独的拉取一个文件)

git show 28f77d864b37708e4154323da5b8a4d537839b9e:src/main/java/com/zxjt/config/XxlJobConfig.java > src/main/java/com/zxjt/config/XxlJobConfig.java



git stash
保存当前的工作进度。会分别对暂存区和工作区的状态进行保存。
git stash save “message…”
这条命令实际上是第一条 git stash 命令的完整版。
git stash list
显示进度列表。此命令显然暗示了git stash 可以多次保存工作进度,并用在恢复时候进行选择。
git stash pop 记录号(stash@{0})
如果不使用任何参数,会恢复最新保存的工作进度,并将恢复的工作进度从存储的工作进度列表中清除。
git stash apply  记录号(stash@{0})
除了不删除恢复的进度之外,其余和 git stash pop 命令一样。
git stash clear
删除所有存储的进度。


合并分支  (在 master 分支上合并 test 分支)
1.先切换到master分支
git checkout master
2.将test的分支合并到master
git merge test
删除分支
 git branch -d dev(删除本地分支前检查merge状态)
 git branch -D dev(git branch --delete --force的简写 直接删除本地分支)
 git push origin --delete dev(远程删除分支)--此时本地和远程都已删除


远程仓库操作
git remote -v  (查看当前所有远程地址别名)
first   https://gitee.com/zcfast/git-demo.git (fetch)
first   https://gitee.com/zcfast/git-demo.git (push)

git remote add 别名 远程地址 (添加远程地址别名,目的是为了方便用别名代替远程库地址)
git remote rm 别名(删除指定别名仓库地址)
git push 远程库地址别名 分支A  (将本地分支A 的内容推送到远程仓库)
git clone 远程地址 (克隆仓库镜像 包含init 和 add放入暂存区的命令,默认克隆项目远端的默认分支)
git rm --cached 文件名  	删除缓存区
git rm -r --chached 文件夹(删除缓存区文件夹下面的所有文件)

git fetch 相当于是从远程获取最新版本到本地,不会自动merge(合并代码)
git pull 远程库地址别名 远程分支名  (将远程仓库的此分支最新内容拉取后与当前本地分支合并)
相当于是git fetch 和git merge
git fetch更安全一些。因为在merge前,我们可以查看更新情况,然后再决定是否合并
git push 远程库地址别名/远程库地址 远程分支名称

示例:git push git@gitee.com:zcfast/day23_vue_curd.git test
远程库没有此分支则创建新的分支并完成推送

git push origin --delete main(远端分支名)  删除远端分支

	
git checkout -b dev 5f8fe57 从指定版本5f8fe57创建分支dev

ssh://git@gitlab.csc.com.cn:1022/csc-it/btm/btm-branch/digital/budget_management_new_oa.git

ssh://git@gitlab.csc.com.cn:1022/csc-it/btm/btm-branch/digital/budget_management_new_oa.git

https://gitlab.csc.com.cn/csc-it/btm/btm-branch/digital/budget_management_new_oa.git
https://gitlab.csc.com.cn/csc-it/btm/btm-branch/digital/budget_management_new_oa.git



gitee/github支持两种代码同步方式:https和ssh

https
提交代码和下载代码时都需要输入用户名和密码

ssh
首次使用ssh推需要配置秘钥
ssh-keygen -t rsa

执行命令完成后,在`C:\Users\用户名\.ssh`下面生成如下名称的公钥和私钥:

公钥:需要上传到gitee/github

私服:需要配置到自己的客户端


idea中使用git

1644904532437

版本中的文件不想提交解决方案

方案一
1.文件是否留在本地比较重要比如.iml(idea配置文件)
2.如果文件
----不重要,可以直接删除文件
----重要,删除暂存区的文件(git rm -r --cached 文件名称/文件夹)
3.git add .  将修改的其他文件添加到暂存区中
4.git status 查看git当前暂存区状态
4.git commit 提交

idea有时候会在push的时候出现一些本地库不存在文件.直接正常提交即可



方案二
1.将当前代码push到git上
2.重新clone 代码
3.将多余的文件删除后重新push一下


方案三 
gitignore文件后来修改配置,使文件过滤
1.删除了文件index,从track状态变为untrack状态,执行后会看到项目下所有文件
git rm -r --cached .

2.将当前目录下的所有文件再add到index
注意这时候.gitignore文件就会起作用,里面配置的文件类型,将不会被add到index。
git add .

3.commit到本地仓
git commit -m "update gitignore"


冲突处理

冲突产生的原因:
合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改。Git 无法替
我们决定使用哪一个。必须人为决定新代码内容

如果产生冲突则状态为merging 状态

<<<<<<< HEAD 当前分支的代码
hello git! hello atguigu! master test
hello git! hello atguigu!
=======      合并过来的代码
hello git! hello atguigu!
hello git! hello atguigu! hot-fix test
>>>>>>> hot-fix

解决方案:

文件冲突的地方解决掉后
1.命令解决
git add 文件名称  将冲突的文件在此添加到暂存区(多个文件中间空格隔开)
git commit -m "冲突合并"  (注意此时不要附带文件的名称,不然会报错)
2.idea解决
1.选择 smart  merge 解决冲突 
2.commit提交

1641729028540

分支切换的本质:就是移动 HEAD 指针。

配置SSH 免密登录

--进入当前用户的家目录
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ cd
--删除.ssh 目录
Layne@LAPTOP-Layne MINGW64 ~
$ rm -rvf .ssh
removed '.ssh/known_hosts'
removed directory '.ssh'
--运行命令生成.ssh 秘钥目录[注意:这里-C 这个参数是大写的 C]
Layne@LAPTOP-Layne MINGW64 ~

$ ssh-keygen -t rsa -C atguiguyueyue@aliyun.com


Generating public/private rsa key pair.
...
+----[SHA256]-----+


--进入.ssh 目录查看文件列表
Layne@LAPTOP-Layne MINGW64 ~
$ cd .ssh
Layne@LAPTOP-Layne MINGW64 ~/.ssh
$ ll -a
total 21
drwxr-xr-x 1 Layne 197609 0 11 月 25 19:27 ./
drwxr-xr-x 1 Layne 197609 0 11 月 25 19:27 ../
-rw-r--r-- 1 Layne 197609 1679 11 月 25 19:27 id_rsa
-rw-r--r-- 1 Layne 197609 406 11 月 25 19:27 id_rsa.pub
--查看 id_rsa.pub 文件内容
Layne@LAPTOP-Layne MINGW64 ~/.ssh
$ cat id_rsa.pub

复制 id_rsa.pub 文件内容,登录 GitHub,点击用户头像→Settings→SSH and GPG keys

怎么忽略与项目无关的文件?

1.创建忽略规则文件 xxxx.ignore(前缀名随便起,建议是 git.ignore)
这个文件的存放位置原则上在哪里都可以,为了便于让~/.gitconfig 文件引用,建议也放在用
户家目录下
git.ignore 文件模版位置 C:\Users\zc

2.在.gitconfig 文件中引用忽略配置文件(此文件在 Windows 的家目录中)

[user]
	name = huke
	email = ceshi@qq.com
[core]
excludesfile = C:/Users/zc/git.ignore

注意:这里要使用“正斜线(/)”,不要使用“反斜线(\)”

3.之后添加或修改.gitignore文件,也不会生效

先把本地缓存删除(改变成未track状态),然后再提交

git rm -r --cached .
 
git add .
 
git commit -m 'update .gitignore'

mybatis

xml中需要转换的特殊字符

<	   <=	  >  	>=
&lt;  &lt;=  &gt;  &gt;=

示例:

HAVING COUNT(area_user_id) &lt;= 1

问题整理

1.Vm虚拟机ip ping不到,虚拟机没有网络.

重置网络命令:dhclient -v 

2.yum 安装报错no more mirrors to try

命令:
yum clean all
yum makecache
yum -y update
重置后测试是否有网络,安装yum需要网络,没有网络就输入命令:dhclient -v

3.backspace变 ^H

删除时按ctrl+Backspace
如果控制台命令不识别,按ctrl+c退出,ctrl+u 删除一行内容

4.vm虚拟机ping不到ip,每次重启ip不一样.

命令
查看虚拟机ip:ifconfig | grep "ens33" -A 2
重启虚拟网卡:systemctl restart network
进入虚拟网卡配置文件:cd /etc/sysconfig/network-scripts/




1611475103593

1611475415204

1611475422609

1611475770032

1611475794372

执行后,好使

5.安装telnet

    yum list telnet*              列出telnet相关的安装包
    yum install telnet-server     安装telnet服务
    yum install telnet.*          安装telnet客户端

telnet ip 端口

6.防火墙开放指定端口

firewalld跟iptables比起来至少有两大好处:

1、firewalld可以动态修改单条规则,而不需要像iptables那样,在修改了规则后必须得全部刷新才可以生效;

2、firewalld在使用上要比iptables人性化很多,即使不明白“五张表五条链”而且对TCP/IP协议也不理解也可以实现大部分功能。

firewalld跟iptables比起来,不好的地方是每个服务都需要去设置才能放行,因为默认是拒绝。而iptables里默认是每个服务是允许,需要拒绝的才去限制。

1.firewalld(建议使用)

对外开发端口

       查看已开通的端口:firewall-cmd --zone=public --list-ports
       查看想开的端口是否已开:firewall-cmd --query-port=6379/tcp
       添加指定需要开放的端口:firewall-cmd --add-port=6379/tcp --permanent
       重载入添加的端口:firewall-cmd --reload
       查询指定端口是否开启成功:firewall-cmd --query-port=6379/tcp
       移除指定端口:firewall-cmd --permanent --remove-port=6379/tcp
       禁止开机自启:systemctl disable firewalld.service

2.iptalbes

安装iptables-services :

 yum install iptables-services

​ 进入下面目录进行修改:

vi /etc/sysconfig/iptables

如果我们需要对外开放80端口,则上面文件中添加如下code

-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT

同时还需要注意的是,这段代码需要加入到

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

之后,否则端口也不能打开。

最后的配如下:

# Firewall configuration written by system-config-firewall

# Manual customization of this file is not recommended.

*filter

:INPUT ACCEPT [0:0]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [0:0]

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

-A INPUT -p icmp -j ACCEPT

-A INPUT -i lo -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT

-A INPUT -j REJECT --reject-with icmp-host-prohibited

-A FORWARD -j REJECT --reject-with icmp-host-prohibited

COMMIT

编辑上面的文件 需要提供su权限.

保存上面的文件后,在终端运行如下命令:更新防火墙配置

service iptables restart

下面这个命令可以看到开放的端口

iptables -L -n

开启: service iptables start 

关闭: service iptables stop
禁止开机自启:systemctl disable firewalld.iptables

参考:

https://www.ywnz.com/linuxaq/6055.html

7.软件的安装和卸载

https://blog.csdn.net/chunyang315/article/details/79008570

8.scrt连接速度慢

linux上更改/etc/ssh/sshd_config
配置文件新增UseDNS no
注意no要为小写,大写的话配置文件启动不了

使用crt工具文件本地文件上传

方式1:

在本地d盘建立一个文件夹setup
alt+p
put d:/setup/xxx

方式2:

①rz和sz可以完成下载和上传功能(使用rz/sz命令,就可以抛弃ftp了)
②rz和sz命令不是linux默认自带的命令,需要我们自己安装,可以通过yum源来安装。

输入命令

rz

提示没有此命令则需要安装

yum -y install lrzsz

curl文件上传

curl --location --request POST 'https://yybgl.csc108.com/api/budget/v1/file/upload' \
--header 'Token: lbG1eXgx' \
--header 'UserName: %E5%88%98%E9%80%B8%E9%9B%84' \
--header 'UserPw: ceshi' \
--header 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36' \
--header 'content-type: multipart/form-data; boundary=----WebKitFormBoundary1hYBK5RCXPEqr7yR' \
--form 'file=@"/root/data/prod.zip"' \
--form 'processId=1652144674'

9.profile修改错误导致系统命令报错

改/etc/profile文件时,配置错误导致系统命令(ls,vim等)错误

重新定义环境变量此时vim可以正常使用

export PATH=/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
source /etc/profile

将错误的配置删除后刷新配置即可

快捷键

win

ctrl +shift +N 创建文件夹

idea

ctrl +alt + 左键/右键  回退光标上次停留位置
ctrl +alt +u 查看类的继承关系图
ctrl +alt +s 打开设置
new xxx.var 回车 快捷生成对象
ctrl +G 跳转指定行

ctrl +alt +shift +u
ctrl + alt +, 全局搜索 
ctrl + H 查看类的继承关系

参考:https://blog.csdn.net/feiying0canglang/article/details/122766234

VSCODE 快捷键

Shift+Alt+F 快捷键格式化代码

特殊单词

HEX,Hexadecimal ,十六进制。
DEC,Decimal ,十进制。
OCT,Octal ,八进制。
BIN,Binary ,二进制。