常用SHELL命令

查看磁盘可用空间

df -h

-h, --human-readable print sizes in human readable format (e.g., 1K 234M 2G)

Filesystem      Size  Used Avail Use% Mounted on
/dev/sda4       321G  1.4G  304G   1% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev             16G  4.0K   16G   1% /dev
tmpfs           3.2G  968K  3.2G   1% /run
none            5.0M     0  5.0M   0% /run/lock
none             16G     0   16G   0% /run/shm
none            100M     0  100M   0% /run/user
/dev/sda2       185M   75M  102M  43% /boot
/dev/sda5        28G  916M   26G   4% /var
/dev/sda6       184G  1.7G  173G   1% /usr
/dev/sda7       234G  1.4G  221G   1% /home
/dev/sda1        94M  2.6M   91M   3% /boot/efi

查看内存使用

free -m

-b,-k,-m,-g show output in bytes, KB, MB, or GB

             total       used       free     shared    buffers     cached
Mem:         32105       1503      30602          0        223        631
-/+ buffers/cache:        648      31457
Swap:        61034          0      61034

性能分析

top
top - 11:13:36 up 12 days, 14:00,  3 users,  load average: 0.02, 0.03, 0.05
Tasks: 211 total,   1 running, 210 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  32876316k total,  1535196k used, 31341120k free,   229204k buffers
Swap: 62499836k total,        0k used, 62499836k free,   646796k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND

常用操作:

top   #//每隔5秒显式所有进程的资源占用情况
top -d 2  #//每隔2秒显式所有进程的资源占用情况
top -c  #//每隔5秒显式进程的资源占用情况,并显示进程的命令行参数(默认只有进程名)
top -p 12345 -p 6789  #//每隔5秒显示pid是12345和pid是6789的两个进程的资源占用情况
top -d 2 -c -p 123456 #//每隔2秒显示pid是12345的进程的资源使用情况,并显式该进程启动的命令行参数

搜索文件

find . -name *.log  #//在当前目录下查找.log日志

SSH远程执行命令

命令格式

ssh -p $port $user@$p 'cmd'

$port : ssh连接端口号

$user: ssh连接用户名

$ip:ssh连接的ip地址

cmd:远程服务器需要执行的操作

ssh的-t参数

-t Force pseudo-tty allocation. This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful, e.g. when implementing menu services. Multiple -t options force tty allocation, even if ssh has no local tty.

中文翻译一下:

就是可以提供一个远程服务器的虚拟tty终端,加上这个参数我们就可以在远程服务器的虚拟终端上输入自己的提权密码了,非常安全

脚本批量执行远程命令

#!/bin/bash

#变量定义
ip_array=("192.168.1.101" "192.168.1.102" "192.168.1.103" "192.168.1.104")

#远程命令,如删除日志,停止服务,重新启动服务
remote_cmd="cd web/ && find . -name '*.log' -delete && pm2 kill && pm2 start app.json"

#本地通过ssh执行远程服务器的脚本
for ip in ${ip_array[*]}
do
    #特定IP对应特定端口的判断
    if [ $ip = "192.168.1.101" ]; then
        port="2222"
    else
        port="22"
    fi
    #特定IP对应特定用户名的判断
    if [ $ip = "192.168.1.102" ]; then
        user="willin"
    else
        user="root"
    fi
    #执行
    ssh -t -p $port $user@$ip "$remote_cmd"
done

这个方法还是很方便的,-t虚拟出一个远程服务器的终端,在多台服务器同时部署时确实节约了不少时间啊!

递归删除日志

删除当前目录及子目录的.log日志

find . -name '*.log' -delete