瞎琢磨先生の常用的 linux 命令
linux常用三大指令:grep、sed、awk
grep:过滤内容
sed:替换
awk:截取
linux 常用命令
根据端口查找对应的 PID
lsof -i:端口
说明该服务已经启动,对应的 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 }')
返回上一次访问目录
cd -
查看系统中文件使用情况
df -h
查看各个文件占用空间大小(当前目录下)
du -sh *
查找文件
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 是否畅通
telnet ip地址
动态显示文件内容(查看日志必备)
tail -f 文件名
eg. tail -f catalina.out
打 .gz 包
tar -zcvf 要打包成的文件夹名.tar.gz a.txt bDir c.jgp
解压缩 .tar 包
tar -zxvf tomcat.tar.gz
启动 springboot 服务命令
nohup java -jar AppServer.jar & tail -f nohup.out
启动 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,查找 "JPDA_ADDRESS="(方法:":/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/
复制当前服务器文件到远端服务器(免密码输入)
从远端服务器复制文件到当前服务器(免密码输入)
小结:
#sshpass -p 远端服务器密码 scp -o StrictHostKeyChecking=no -P 远端服务器端口 -r 本地要拷贝的路径 root@远端服务器IP:远端服务器要保存的路径
#sshpass -p 远端服务器密码 scp -o StrictHostKeyChecking=no -P 当前服务器的端口 -r 远端服务器的用户名@远端服务器IP:远端服务器要拷贝的文件路径 当前服务器要保存的路径
Vim 模式
跳到指定行
[行数]gg 或者 [行数]G
删除某行
[行数]dd
撤销
重做
保存并退出
不保存退出编辑
显示行号
向后搜索
/ # 向后搜索 # 举例: 输入":/redis"
向前搜索
? # 向前搜索 # 举例: 输入":?redis"
查找下一处
n # 查找下一处
查找上一处
N # 查找上一处
复制
yy 复制光标所在的那一行
nyy 复制光标所在的向下n行
粘贴(后)
p 粘贴(后)
粘贴(前)
P 粘贴(前)
删除到行末
D # 删除至行末(从光标位置开始)
删除到行首
Ctrl U # 删除至行末(从光标位置开始)(编辑模式)
全局替换
替换
: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放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作。
其它不常用功能
| 光标所在行行首
L 屏幕所显示的底行
{ 段首
} 段尾
- 前一行行首
+ 后一行行首
( 句首
) 下一句首
$ 行末
M 屏幕中间行
0 行首(零)
hjkl 左下上右
x 删除光标所在字符
R 替换模式(可以替换任意字符)
r 单个替换
s 删除字符并插入(单个字符删除,并进入插入模式)
S 删除行并插入(整行删除)
>> 缩进(相当于一个tab)
<< 反缩进
= 自动格式化
J 合并上下两行
I 插入到行首
i 插入
C 从光标处开始修改至行位
a 在光标后附件或追加
A 在行末追加
Shell相关
调用方法 functionA_ 并传递参数
[注意事项]
shell中必须先定义,再调用方法。否则将会报错。
登录mysql数据库,并执行操作
[注意事项]
SQL文件中必须不能包括"#"开头的注释行,否则使用 shell 脚本调用(或使用 Navicat 执行 SQL 文件)的时候会出现 MySQL 语句报错。解决办法是将所有的"#"开头的注释改成"--"形式的注释。
从server.xml中获取服务端口
两步骤走的方法:
# ① 获取得到: "50163"
# 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`
# ② 将"双引号",去掉,得到 50163
# 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`
启动服务,设置内存大小
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
Linux 常用快捷键
1. Tab
这是你不能没有的 Linux 快捷键。它将节省你 Linux 命令行中的大量时间。
只需要输入一个命令,文件名,目录名甚至是命令选项的开头,并敲击 tab 键。它将自动完成你输入的内容,或为你显示全部可能的结果。
如果你只记一个快捷键,这将是必选的一个。
2. Ctrl + C
这些是为了在终端上中断命令或进程该按的键。它将立刻终止运行的程序。
如果你想要停止使用一个正在后台运行的程序,只需按下这对组合键。
3. Ctrl + Z
该快捷键将正在运行的程序送到后台。通常,你可以在使用 & 选项运行程序前之完成该操作, 但是如果你忘记使用选项运行程序,就使用这对组合键。
4. Ctrl + D
这对键盘快捷键将使你退出当前终端。如果你使用 SSH 连接,它将会关闭。如果你直接使用一个终端,该应用将会立刻关闭。
把它当成“退出”命令。
5. Ctrl + L
你怎么清空你的终端屏幕?我猜是用 clear 命令。
你可以使用 Ctrl+L 清空终端,代替输入 C-L-E-A-R。得心应手,不是吗?
6. Ctrl + A
该快捷键将移动光标到所在行首。
假设你在终端输入了一个很长的命令或路径,并且你想要回到它的开头, 使用方向键移动光标将花费大量时间。注意你无法使用鼠标移动光标到行首。
这是 Ctrl+A 节省时间的地方。
7. Ctrl + E
这对快捷键与 Ctrl+A 相反。Ctrl+A 送光标到行首,反之 Ctrl+E 移动光标到行尾。
8. Ctrl + U
输入了错误的命令?代替用退格键来丢弃当前命令,使用 Linux 终端中的 Ctrl+U 快捷键。该快捷键会擦除从当前光标位置到行首的全部内容。
9. Ctrl + K
这对和 Ctrl+U 快捷键有点像。唯一的不同在于不是行首,它擦除的是从当前光标位置到行尾的全部内容。
10. Ctrl + W
你刚才了解了擦除到行首和行尾的文本。但如果你只需要删除一个单词呢?使用 Ctrl+W 快捷键。
使用 Ctrl+W 快捷键,你可以擦除光标位置前的单词。如果光标在一个单词本身上,它将擦除从光标位置到词首的全部字母。
最好的方法是用它移动光标到要删除单词后的一个空格上, 然后使用 Ctrl+W 键盘快捷键。
11. Ctrl + Y
这将粘贴使用 Ctrl+W,Ctrl+U 和 Ctrl+K 快捷键擦除的文本。如果你删除了错误的文本或需要在某处使用已擦除的文本,这将派上用场。
12. Ctrl + P
你可以使用该快捷键来查看上一个命令。你可以反复按该键来返回到历史命令。在很多终端里,使用 PgUp 键来实现相同的功能。
13. Ctrl + N
你可以结合 Ctrl+P 使用该快捷键。Ctrl+N 显示下一个命令。如果使用 Ctrl+P 查看上一条命令,你可以使用 Ctrl+N 来回导航。许多终端都把此快捷键映射到 PgDn 键。
14. Ctrl + R
你可以使用该快捷键来搜索历史命令。
版权声明: 本文为 InfoQ 作者【瞎琢磨先生】的原创文章。
原文链接:【http://xie.infoq.cn/article/a4b9ae7e2edd41a9c9beecde5】。文章转载请联系作者。
评论