- linux 常用命令
- 方式2:不打印 nohup.out 日志
nohup java -jar AppServer.jar > /dev/null 2>&1 &
- 进入 bin 目录,执行该命令
./startup.sh
- ssh ip 地址
ssh ip 地址(不需要加端口)
# 在回车后的提示中输出跳转后的服务器的密码,即可正常访问使用 - sshpass -p 远端服务器密码 scp -o StrictHostKeyChecking=no -P 当前服务器的端口 -r 远端服务器的用户名@远端服务器IP:远端服务器要拷贝的文件路径 当前服务器要保存的路径
- Vim 模式
- 文件内替换
- 文件外替换
- 定义变量,用来保存数据库名
- Mysql 相关
- redis 相关
linux常用三大指令:grep、sed、awk
grep:过滤内容 sed:替换 awk:截取
linux 常用命令
grep
# 过滤以 abc 结尾的文件
ls | grep "abc$"
# 过滤以 abc 开头的文件
ls | grep "^abc"
# 过滤注释行、行首空格
egrep -v "^\s*#|^\s*$" demo.txt
# 排除多个条件(或)
egrep -v "条件1|条件2|条件3" demo.txt
# .tar.gz 文件过滤字符
zgrep "条件" info.log.tar.gz
# 忽略大小写查找
grep -i abc system.log
# 常用查找 Java 进程的命令
ps -ef | grep java | grep -v grep
根据端口查找对应的 PID
lsof -i:端口
netstat -ntlp | grep -w 端口
说明该服务已经启动,对应的 PID 是 209647
若查询结果为
则说明,该端口对应的服务未启动
由 PID 查询对应服务的路径
pwdx PID端口
eg. pwdx 209647
可以看出,服务所在路径为
/ICC/dahua/fire/FireAppServer
进阶:
- 端口 —> 服务对应的路径
eg.根据服务端口 60080
查询对应的服务所在的路径pwdx
lsof -i:60080 | sed -n ‘2p’ | cut -d ‘ ‘ -f5| awk -F": " '{print $2}'
其中: sed -n ‘2p’:展示第二行 cut -d ‘ ‘ -f5
:使用"空格"进行数据的截取,并取第5个值 awk -F": " '{print $2}':使用"冒号"进行分割,并取第二个 pwdx
lsof -i:60080 | sed -n ‘2p’ | cut -d ‘ ‘ -f5| awk -F": " '{print $2}
:...
是将第一次的查询结果作为 pwdx 查询的基础。
- 端口 —> PID + 服务对应的路径(★★)
路径(分行展示)pwdx
lsof -i:60080 | sed -n ‘2p’ | cut -d ‘ ‘ -f5| sed 's/: /&\n/g' | sed 's/://g'
- 端口 —> pid + 服务对应的路径(★☆)
pwdx lsof -i:60080 | sed -n '2p' | cut -d ' ' -f5
- 根据端口杀死服务
eg. 根据端口 8080 杀死对应的服务kill -9 $(netstat -nlp | grep :8080 | awk '{print $7}' | awk -F"/" '{ print $1 }')
返回上一次访问目录
查看系统中文件使用情况
查看各个文件占用空间大小(当前目录下)
查找文件
find /home -name "*.txt" # 查找在 "/home" 路径下,名字为 ".txt" 后缀的文件
find / -name "abc.*" # 查找在"/"路径下,名字为 "abc" 开头的文件
清空日志
echo '' > ./logs/catalina.out #强制将 catalina.out 日志置为零
追加日志
echo '追加日志' >> ./logs/catalina.out #强制将 catalina.out 日志置为零
语句执行错误输出日志到文件
eg. sh -x upgrade.sh >> run.log 2>&1
测试 ip 是否畅通
动态显示文件内容(查看日志必备)
tail -f 文件名
eg. tail -f catalina.out
打 .gz 包
tar -zcvf 要打包成的文件夹名.tar.gz a.txt bDir c.jgp
解压缩 .tar 包
复制文件(除了某文件)
# 复制当前文件夹下的所有内容,除了 abc
cp `ls |grep -v abc | xargs` /home/duni/copy_test
scp复制文件到服务器
# 复制远端文件到本服务器
scp [-P 远端服务器端口] -r 远端服务器IP:远端文件路径 本地保存路径
# 复制本服务器文件到远端服务器
scp -r 本地文件路径 远端服务器IP:远端文件路径
启动 springboot 服务命令
nohup java -jar AppServer.jar & tail -f nohup.out
方式2:不打印 nohup.out 日志
nohup java -jar AppServer.jar > /dev/null 2>&1 &
启动 springboot 远程 debug 调试模式
java -jar -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=50584 AppServer.jar &
- 普通项目启动(传统 java 项目,非 SpringBoot 项目)
进入 bin 目录,执行该命令
./startup.sh
- 普通项目远程 debug
① bin目录下找到并打开 catalina.sh,查找 “JPDAADDRESS=”(方法:”:/JPDA_ADDRESS_”,然后按 “N”,向下查找,找到)
if [ -z “$JPDA_ADDRESS” ]; then JPDA_ADDRESS=”localhost:8000” fi
② 把 “8000”,修改成一个未被占用的端口,并保存
③ 杀死原来的服务
④ 使用命令重启服务(注意:不是使用 .start.sh 启动服务)sh catalina.sh jpda start
⑤ 在 IDEA 的 Run/Debug Configurations 中填入相应的信息 — ip 和端口(④中修改的端口)。
SSH 服务器跳转
- SSH 相关
- 从本服务器跳转到另外一台服务器
- 从本服务器跳转到另外一台服务器
ssh ip 地址
ssh ip 地址(不需要加端口)
# 在回车后的提示中输出跳转后的服务器的密码,即可正常访问使用
- 从当前服务器复制文件到B服务器
在服当前服务器执行以下命令
scp -r 欲上传的文件名 root@远端服务器ip地址:远端服务器保存文件的路径
eg. scp –r ./hehe root@10.66.77.88:/home/haha/
复制当前服务器文件到远端服务器(免密码输入)
# 远端服务器的 ip
remoteIp=
# 远端服务器的端口
remotePort=
# 远端服务器的密码
remotePwd=
# 远端服务器保存文件的路径
remoteDirPath=
# 本服务器需要复制的文件路径
copyFilePath=
# 安装 sshpass 命令
yum -y install sshpass
#sshpass -p 远端服务器密码 scp -o StrictHostKeyChecking=no -P 远端服务器端口 -r 本地要拷贝的路径 root@远端服务器IP:远端服务器要保存的路径
sshpass -p ${remotePwd} scp -o StrictHostKeyChecking=no -P ${remotePort} -r ${copyFilePath} root@${remoteIp}:${remoteDirPath}
从远端服务器复制文件到当前服务器(免密码输入)
#sshpass -p 远端服务器密码 scp -o StrictHostKeyChecking=no -P 当前服务器的端口 -r 远端服务器的用户名@远端服务器IP:远端服务器要拷贝的文件路径 当前服务器要保存的路径
sshpass -p ${remotePwd} scp -o StrictHostKeyChecking=no -P ${localPort} -r ${remoteUser}@${remoteIp}:${remoteDirPath}/* ${localDirPath}/
小结:
#sshpass -p 远端服务器密码 scp -o StrictHostKeyChecking=no -P 远端服务器端口 -r 本地要拷贝的路径 root@远端服务器IP:远端服务器要保存的路径
sshpass -p 远端服务器密码 scp -o StrictHostKeyChecking=no -P 当前服务器的端口 -r 远端服务器的用户名@远端服务器IP:远端服务器要拷贝的文件路径 当前服务器要保存的路径
Vim 模式
- 跳到指定行
[行数]gg 或者 [行数]G
5gg # 跳转到第 5 行
5G # 跳转到第 5 行
gg # 不输入行数,跳到文档行首
G # 不输入行数,跳到文档末尾
- 删除某行
[行数]dd
5dd # 删除从光标往下的5行
dd # 不写行数,删除光标当前所在行
D # 删除当前行光标之后的内容
Ctrl + U #删除当前行光标之前的内容(编辑模式)
撤销
u # 撤销
重做
Ctrl + r # 重做
保存并退出
ZZ # 按住 Shift ZZ,快速保存(或者使用 :wq)
不保存退出编辑
ZQ # 不保存退出编辑(或者使用 :q!)
显示行号
:set nu # 显示行号 #用法: 输入":set nu"
向后搜索
/ # 向后搜索 # 举例: 输入”:/redis“
- 向前搜索
? # 向前搜索 # 举例: 输入”:?redis”
- 查找下一处
n # 查找下一处
- 查找上一处
N # 查找上一处
- 复制
yy 复制光标所在的那一行
nyy 复制光标所在的向下n行
- 粘贴(后)
p 粘贴(后)
- 粘贴(前)
P 粘贴(前)
删除到行末
D # 删除至行末(从光标位置开始)
删除到行首
Ctrl U # 删除至行末(从光标位置开始)(编辑模式)
o:下一行输入
O:上一行输入
:%s/原字符串/替换后的字符串/g # 替换每一个字符串 eg. :%/old/new/g
文件外替换
sed -i “s#原字符串#替换后的字符串#g” 文件名 eg. sed -i “s#old#new#g” abc.txt
替换
> :s 命令替换字符串(当前行)
>
> :s/p1/p2/ 替换当前行第一个p1为p2
> :s/p1/p2/g 替换当前行所有的p1为p2
>
> :n1,n2s 命令替换字符串(指定行)
>
> :n1,n2s/p1/p2/g 将第n1至n2行中所有p1均用p2替代。其中n1和n2为行号,可以为.代表当前行,可以为$代表最后一行
>
> :.,$s/p1/p2/g 用字符串p2替换当前行到末尾所有出现的字符p1
> :1,$s/p1/p2/g 用字符串p2替换所有出现的字符p1
>
> :%s命令替换字符串(全文)
>
> :%s/p1/p2/(等同于:g/p1/s//p2/) 替换每一行的第一个p1为p2
> :%s/p1/p2/g(等同于:g/p1/s//p2/g) 替换每一行中所有p1为p2
>
> 2.g选项的总结
>
> g放在命令末尾,表示对搜索字符串的每次出现进行替换;不加g,表示只对搜索字符串的首次出现进行替换。
> g放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作。
- 其它不常用功能
| 光标所在行行首<br />L 屏幕所显示的底行<br />{ 段首<br />} 段尾<br />- 前一行行首<br />+ 后一行行首<br />( 句首<br />) 下一句首<br />$ 行末<br />M 屏幕中间行<br />0 行首(零)<br />hjkl 左下上右<br />x 删除光标所在字符<br />R 替换模式(可以替换任意字符)<br />r 单个替换<br /> <br />s 删除字符并插入(单个字符删除,并进入插入模式)<br />S 删除行并插入(整行删除)<br />>> 缩进(相当于一个tab)<br /><< 反缩进<br />= 自动格式化<br />J 合并上下两行<br />I 插入到行首<br />i 插入<br />C 从光标处开始修改至行位<br />a 在光标后附件或追加<br />A 在行末追加
---
<a name="fwQKG"></a>
#
---
<a name="vLLpG"></a>
#
<a name="XBtGi"></a>
# Shell相关
- 调用方法 functionA_ 并传递参数<br />
```shell
# 先定义一个方法
function funcationA_()
{
echo "这是一个函数"
# 调用方法时传递的第一个参数,即 33
var1=$1
# 调用方法时传递的第二个参数,即 444
var2=$2
echo "$var1" ## 33
echo "$var2" ## 444
}
# 调用方法,并传递参数
functionA_ 33 444
[注意事项]
shell中必须先定义,再调用方法。否则将会报错。
mysql -u root -p$SQL_Password —connect-expired-password <<EOF use $DB_name; source ${SQLFilePath}/abc.sql; exit EOF # 这行必须从行首开始
** [注意事项]**<br />SQL文件中必须不能包括"#"开头的注释行,否则使用 shell 脚本调用(或使用 Navicat 执行 SQL 文件)的时候会出现 MySQL 语句报错。解决办法是将所有的"#"开头的注释改成"--"形式的注释。
- 从server.xml中获取服务端口<br />
- 两步骤走的方法:
# ① 获取得到: "50163"<br /># IFCS_Port=`cat ${Old_IFCS_Path}/conf/server.xml |grep -E "protocol=\"HTTP/1.1\"| "protocol="HTTP/1.1"| awk '{print $2}'|awk 'NR==1{print}' |cut -d"=" -f2`<br /># ② 将"双引号",去掉,得到 50163<br /># IFCS_Port=`echo ${IFCS_Port} | sed 's/\"//g'`
- 二合一的方法:
IFCS_Port=`cat tomcat/conf/server.xml |grep -E "protocol=\"HTTP/1.1\"| "protocol="HTTP/1.1"| awk '{print $2}'|awk 'NR==1{print}' | cut -d "=" -f2 | cut -d "\"" -f2`<br />
- 启动服务,设置内存大小<br />
```sql
nohup java -server -Xms512m -Xmx1G -Xss512k -XX:+HeapDumpOnOutOfMemoryError -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:ParallelGCThreads=4 -jar ${Server_Jar_Name}.jar >/dev/null 2>&1 &
Mysql 相关
- 启动
systemctl start mysqld
or service mysql start
- 关闭
systemctl stop mysqld
or service mysql stop
- 重启
systemctl restart mysqld
or service mysql restart
登录
- 密码明文
语法:
**mysql -u用户名 -p'用户密码'**
举例:
mysql -uroot -p’123456’- 密码密文
语法:mysql -u用户名 -p+回车,然后输入密码
举例:
mysql -uroot -p
123456
redis 相关
- 启动(默认端口:6379)
./redis-server redis.conf
- 修改密码(设置密码为:123456)
requirepass 123456
kafka
- 启动 kafka
bin/zookeeper-server-start.sh config/zookeeper.properties