- 1. sh 远程登录
- 2. scp 文件拷贝
- 3. JPS进程查看
- 4. PS进程查看
- 5. top
- 6. 基本操作命令
- 7. 文件or文件夹权限修改
- 8. 日志查看
- 9. 清空日志
- 10. history
- 11. 任务后台执行
- 12. grep命令
- 13. 查找
- 14. xargs
记录一下服务器开发平时常用的shell命令,帮助高效发现和解决问题
1. sh 远程登录
目前最常用的登录服务器的方式就是通过sh,格式如下
1 | sh user@ip |
一般登录的时候要求输入登录密码,为了避免这个问题,可以将自己的公钥上传到服务器
1 | # 在本机,查看公钥, 并拷贝所有的内容 |
2. scp 文件拷贝
将文件上传到服务器;一般来讲为了保证上传文件的不会因为写权限的问题,常见的是将文件拷贝到/tmp
目录下
1 | scp xxx user@192.168.0.1:/tmp |
将服务器的文件拷贝当本机的当前目录下
1 | scp user@192.168.0.1:/tmp/test.txt ./ |
3. JPS进程查看
针对java应用而言,如何看系统中有哪些java进程在跑?
1 | jps -l |
4. PS进程查看
这个命令用来查看进程,以及对应的资源占用非常常见,一般使用命令如下
1 | ps aux | grep python |
一个输出case
1 | USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND |
5. top
这个也比较常用,查看哪些进程比较占用系统资源
1 | top |
直接输入top,回车可以看到动态的进程资源占用情况,然后按键盘 c
,可以查看command的详细信息
如果想查看具体某个进程的占用情况,可以通过制定进程号来实现
1 | top -p 3301 |
然后显示结果如下
进程的维度可能太大,不太好确认到底是里面哪块逻辑占用系统资源,可以更详细的查看线程维度的资源占用
1 | top -Hp 3301 |
截图如下,其中PID为线程号,这种时候可以结合jstack定位具体的堆栈信息
6. 基本操作命令
简单说一下一些基本的命令,包括进入指定目录,查看相关信息等
1 | # 创建文件夹 |
7. 文件or文件夹权限修改
1 | # 修改分组 |
8. 日志查看
通常使用的方式有 vim, less, more, tail, head
, 下面分别
vim方式
vim方式打开文件,可以使用vim的各种命令,可以修改文件;缺点是当文件特别大时,打开比较费劲;且会锁文件
1 | vim test.log |
less和more方式
两个没有太大的区别,我个人强烈推荐使用less方式查看日志文件
1 | less test.log |
less通过只读的方式打开文件,支持有限的vim命令
- 通过
shift + g
跳转到文件末尾,当文件有新内容时,也可以通过执行上面的命令获取最新的内容 - 输入
gg
跳转到文件头 ctrl+b
向上翻一页;ctrl+f
向下翻一页- 先按’/‘进入查询模式,输入要查的内容回车即可
tail方式
这个与前面不一样,显示文件的最后的一些内容,通过添加-f
参数可以实时打印文件的最新内容;分析线上日志请求的利器
1 | tail -200f test.log |
上面的命令表示输出日志的最后200行数据,且实时输出最新的内容
head方式
用得不多,查询文件的前多少行内容
1 | head -n100 test.log |
9. 清空日志
清空日志文件内容,但是不删除文件本身,挺常见的一个场景,使用输出重定向
1 | echo '' 1> test.log |
10. history
查看历史操作命令
1 | history | grep redis |
11. 任务后台执行
nohup方式让程序后台执行,一般格式如下
1 | nohup python test.py 1> work.log 2>&1 & |
12. grep命令
文件太多,如何过滤出想要的数据,常见的是grep命令,很强的工具,说一下常见的一些我个人常用的姿势
简单的文件搜索,在test.log中查出所有包含hello world
的文件行
1 | grep 'hello world' test.log |
结合tail使用的方式
1 | # 要求精准匹配 |
正则匹配方式,实现多种条件匹配
1 | tail -f logs/record.csv | grep -E 'zgtop|zb' |
多个文件中匹配查找
1 | grep -i -r 'exception' *.log |
grep的命令比较强大,更详细的使用姿势可以通过--help
来查看
13. 查找
find命令,简单列几个可能用到的case
根据文件名查询
1 | # 从当前目录开始,遍历当前目录和所有子目录,列出文件后缀为py的文件 |
将目前目录其其下子目录中所有一般文件列出
1 | find . -type f |
14. xargs
用于管道中的结果传递,举一个经常用到的例子,杀进程
1 | cat pid.log | xargs -I {} kill -9 {} |
结合ps实现杀进程的case
1 | ps aux | grep java | grep hub | awk '{print $2}' | xargs -I {} echo {} |
II. 其他
1. 一灰灰Blog: https://liuyueyi.github.io/hexblog
一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛
2. 声明
尽信书则不如,已上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激
- 微博地址: 小灰灰Blog
- QQ: 一灰灰/3302797840
3. 扫描关注
一灰灰blog
知识星球