190121-服务器常用shell命令小结

文章目录
  1. 1. sh 远程登录
  2. 2. scp 文件拷贝
  3. 3. JPS进程查看
  4. 4. PS进程查看
  5. 5. top
  6. 6. 基本操作命令
  7. 7. 文件or文件夹权限修改
  8. 8. 日志查看
  9. 9. 清空日志
  10. 10. history
  11. 11. 任务后台执行
  12. 12. grep命令
  13. 13. 查找
  14. 14. xargs
  • II. 其他
    1. 1. 一灰灰Blog: https://liuyueyi.github.io/hexblog
    2. 2. 声明
    3. 3. 扫描关注
  • 记录一下服务器开发平时常用的shell命令,帮助高效发现和解决问题

    1. sh 远程登录

    目前最常用的登录服务器的方式就是通过sh,格式如下

    1
    sh user@ip

    一般登录的时候要求输入登录密码,为了避免这个问题,可以将自己的公钥上传到服务器

    1
    2
    3
    4
    5
    6
    # 在本机,查看公钥, 并拷贝所有的内容
    vim ~/.ssh/id_rsa.pub


    # 登录服务器,将公钥贴在下面的文件中,独立一行即可
    vim ~/.ssh/authorized_keys

    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
    2
    3
    4
    5
    USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root 969 0.0 0.0 573852 780 ? Ssl 1月14 0:38 /usr/bin/python -Es /usr/sbin/tuned -l -P
    finbtc 7036 0.0 0.0 112724 984 pts/2 S+ 09:38 0:00 grep --color=auto python
    finbtc 14274 6.7 0.9 3998860 147968 ? Ssl 07:00 10:47 /usr/bin/python3.6 /home/finbtc/workspace/coin_data_service/CoinCrawler/CoinCrawler.py coin -r fxh,bbs,github,cmc_info,my_token -w coin_base_info,coin_community,coin_exchange_volume -q 3
    finbtc 29326 0.2 0.7 4000596 124044 ? Sl 1月18 2:33 venv/bin/python3.6 main.py newsletter -e dev -i 15

    5. top

    这个也比较常用,查看哪些进程比较占用系统资源

    1
    top

    直接输入top,回车可以看到动态的进程资源占用情况,然后按键盘 c,可以查看command的详细信息

    IMAGE

    如果想查看具体某个进程的占用情况,可以通过制定进程号来实现

    1
    top -p 3301

    然后显示结果如下

    IMAGE

    进程的维度可能太大,不太好确认到底是里面哪块逻辑占用系统资源,可以更详细的查看线程维度的资源占用

    1
    top -Hp 3301

    截图如下,其中PID为线程号,这种时候可以结合jstack定位具体的堆栈信息

    IMAGE

    6. 基本操作命令

    简单说一下一些基本的命令,包括进入指定目录,查看相关信息等

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    # 创建文件夹
    mkdir test
    # 删除文件夹
    rmdir test

    # 创建文件
    touch test.txt
    # 删除文件
    rm test.txt

    # 进入目录
    cd /tmp
    # 回到上一次的目录
    cd -

    # 查看目录下文件
    ls
    # 查看目录下所有文件
    ls -a
    # 查看目录下文件详细信息
    ll -h

    7. 文件or文件夹权限修改

    1
    2
    3
    4
    5
    6
    7
    # 修改分组
    chgrp xxx test
    # 修改owner
    chown xxx test

    # 增加文件执行权限
    chmod +x start.sh

    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
    2
    3
    nohup  python test.py 1> work.log 2>&1 &
    # 将进程号保存到文件
    echo $! 1> pid.log

    12. grep命令

    文件太多,如何过滤出想要的数据,常见的是grep命令,很强的工具,说一下常见的一些我个人常用的姿势

    简单的文件搜索,在test.log中查出所有包含hello world的文件行

    1
    grep 'hello world' test.log

    结合tail使用的方式

    1
    2
    3
    4
    # 要求精准匹配
    tail -f logs/record.csv | grep zgtop
    # 忽略大小写
    tail -f logs/record.csv | grep -i ZGTOP

    IMAGE

    正则匹配方式,实现多种条件匹配

    1
    tail -f logs/record.csv | grep -E 'zgtop|zb'

    IMAGE

    多个文件中匹配查找

    1
    grep -i -r 'exception' *.log

    IMAGE

    grep的命令比较强大,更详细的使用姿势可以通过--help来查看

    13. 查找

    find命令,简单列几个可能用到的case

    根据文件名查询

    1
    2
    # 从当前目录开始,遍历当前目录和所有子目录,列出文件后缀为py的文件
    find . -name '*.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 {}

    IMAGE

    II. 其他

    1. 一灰灰Bloghttps://liuyueyi.github.io/hexblog

    一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

    2. 声明

    尽信书则不如,已上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

    3. 扫描关注

    一灰灰blog

    QrCode

    知识星球

    goals

    # Shell

    评论

    Your browser is out-of-date!

    Update your browser to view this website correctly. Update my browser now

    ×