├── .idea ├── encodings.xml ├── markdown-navigator.xml ├── markdown-navigator │ └── profiles_settings.xml ├── modules.xml ├── preferred-vcs.xml ├── shell-work.iml ├── vcs.xml └── workspace.xml ├── IO.sh ├── README.md ├── awk.sh ├── cookieloganalysis.sh ├── cpu.sh ├── dish.sh ├── docker.md ├── exec_sql.sh ├── find.md ├── javadump.sh ├── master_slave_replication.sh ├── maven.sh ├── mysql_dump.sh ├── mysqlmonitor.sh ├── net.sh ├── performancetool.sh └── process.sh /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/markdown-navigator.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 35 | 36 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | -------------------------------------------------------------------------------- /.idea/markdown-navigator/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/preferred-vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ApexVCS 5 | 6 | -------------------------------------------------------------------------------- /.idea/shell-work.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/workspace.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 冲突 140 | tree 141 | 142 | 143 | 144 | 146 | 147 | 150 | 151 | 152 | 174 | 175 | 176 | 177 | 178 | true 179 | DEFINITION_ORDER 180 | 181 | 182 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 211 | 212 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 238 | 239 | 240 | 241 | 242 | 247 | 248 | 249 | 275 | 276 | 277 | 302 | 303 | 310 | 311 | 312 | 325 | 326 | 327 | 328 | 333 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 354 | 359 | 377 | 384 | 385 | 395 | 396 | 397 | 398 | 399 | 400 | 417 | 418 | 439 | 452 | 453 | 462 | 466 | 467 | 468 | 475 | 478 | 480 | 481 | 482 | 483 | 484 | 485 | 486 | 487 | 488 | 489 | 490 | 491 | 492 | 493 | 494 | 508 | 509 | 510 | 511 | 512 | 513 | 514 | 515 | 516 | 517 | 518 | 519 | 533 | 534 | 535 | 536 | 537 | 538 | 539 | 540 | 541 | 542 | 543 | 544 | 545 | 546 | 547 | 548 | 549 | 550 | 551 | 562 | 563 | 564 | 574 | 575 | 582 | 583 | 584 | 585 | 586 | 587 | 588 | 589 | 590 | 591 | 609 | 616 | 617 | project 618 | 619 | 620 | 621 | 622 | 623 | 624 | 625 | 626 | 627 | 628 | 629 | 630 | 631 | 632 | 633 | 634 | 635 | 636 | 637 | 638 | 639 | 640 | 642 | 643 | 644 | 645 | 1498702541249 646 | 656 | 657 | 1498710562748 658 | 663 | 666 | 667 | 669 | 670 | 671 | 672 | 673 | 674 | 675 | 676 | 677 | 678 | 679 | 680 | 681 | 682 | 683 | 684 | 685 | 686 | 687 | 688 | 689 | 690 | 691 | 692 | 693 | 694 | 695 | 696 | 697 | 698 | 699 | 700 | 701 | 702 | 703 | 704 | 705 | 706 | 707 | 709 | 710 | 712 | 713 | 714 | 716 | 717 | 718 | 719 | 720 | 721 | 722 | 723 | 724 | 725 | 726 | 727 | 728 | 729 | 730 | 731 | 732 | 733 | 734 | 735 | 736 | 737 | 738 | 739 | 740 | 741 | 742 | 743 | 744 | 745 | 746 | 747 | 748 | 749 | 750 | 751 | 752 | 753 | 754 | 755 | 756 | 757 | 758 | 759 | 760 | 761 | 762 | 763 | 764 | 765 | 766 | 767 | 768 | 769 | 770 | 771 | 772 | 773 | 774 | 775 | 776 | 777 | 778 | 779 | 780 | 781 | 782 | 783 | 784 | 785 | 786 | 787 | 788 | 789 | 790 | 791 | 792 | 793 | 794 | 795 | 796 | 797 | 798 | 799 | 800 | 801 | 802 | 803 | 804 | 805 | 806 | 807 | 808 | 809 | 810 | 811 | 812 | 813 | 814 | 815 | 816 | 817 | 818 | 819 | 820 | 821 | 822 | 823 | 824 | 825 | 826 | 827 | 828 | 829 | 830 | 831 | 832 | 833 | 834 | 835 | 836 | 837 | 838 | 839 | 840 | 841 | 842 | 843 | 844 | 845 | 846 | 847 | 848 | 849 | 850 | 851 | 852 | 853 | 854 | 855 | 856 | 857 | 858 | 859 | 860 | 861 | 862 | 863 | 864 | 865 | 866 | 867 | 868 | 869 | 870 | 871 | 872 | 873 | 874 | 875 | 876 | 877 | 878 | 879 | 880 | 881 | 882 | 883 | 884 | 885 | 886 | 887 | 888 | 889 | 890 | 891 | 892 | 893 | 894 | 895 | 896 | 897 | 898 | 899 | 900 | 901 | 902 | 903 | 904 | 905 | 906 | 907 | 908 | 909 | 910 | 911 | 912 | 913 | 914 | 915 | 916 | 917 | 918 | 919 | 920 | 921 | 922 | 923 | 924 | 925 | 926 | 927 | 928 | 929 | 930 | 931 | 932 | 933 | 934 | 935 | 936 | 937 | 938 | 939 | 940 | 941 | 942 | 943 | 944 | 945 | 946 | 947 | 948 | 949 | 950 | 951 | 952 | 953 | 954 | 955 | 956 | 957 | 958 | 959 | 960 | 961 | 962 | 963 | 964 | 965 | 966 | 967 | 968 | 969 | 970 | 971 | 972 | 973 | 974 | 975 | 976 | 977 | 978 | 979 | 980 | 981 | 982 | 983 | 984 | 985 | 986 | 987 | 988 | 989 | 990 | 991 | 992 | 993 | 994 | 995 | 996 | 997 | 998 | 999 | 1000 | 1001 | 1002 | 1003 | 1004 | 1005 | 1006 | 1007 | 1008 | 1009 | 1010 | 1011 | 1012 | 1013 | 1014 | 1015 | 1016 | 1017 | 1018 | 1019 | 1020 | 1021 | 1022 | 1023 | 1024 | 1025 | 1026 | 1027 | 1028 | 1029 | 1030 | 1031 | 1032 | 1033 | 1034 | 1035 | 1036 | 1037 | 1038 | 1039 | 1040 | 1041 | 1042 | 1043 | 1044 | 1045 | 1046 | 1047 | 1048 | 1049 | 1050 | 1051 | 1052 | 1053 | 1054 | 1055 | 1056 | 1057 | 1058 | 1059 | 1060 | 1061 | 1062 | 1063 | 1064 | 1065 | 1066 | 1067 | 1068 | 1069 | 1070 | 1071 | 1072 | 1073 | 1074 | 1075 | 1076 | 1077 | 1078 | 1079 | 1080 | 1081 | 1082 | 1083 | 1084 | 1085 | 1086 | 1087 | 1088 | 1089 | 1090 | 1091 | 1092 | 1093 | 1094 | 1095 | 1096 | 1097 | 1098 | 1099 | 1100 | 1101 | 1102 | 1103 | 1104 | 1105 | 1106 | 1107 | 1108 | 1109 | 1110 | 1111 | 1112 | 1113 | 1114 | 1115 | 1116 | 1117 | 1118 | 1119 | 1120 | 1121 | 1122 | 1123 | 1124 | 1125 | 1126 | 1127 | 1128 | 1129 | 1130 | 1131 | 1132 | 1133 | 1134 | 1135 | 1136 | 1137 | 1138 | 1139 | 1140 | 1141 | 1142 | 1143 | 1144 | 1145 | 1146 | 1147 | 1148 | 1149 | 1150 | -------------------------------------------------------------------------------- /IO.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | IO.sh 3 | 4 | ##iostat是查看磁盘活动统计情况 5 | 6 | ##显示所有设备负载情况 r/s: 每秒完成的读 I/O 设备次数。即 rio/s;w/s: 每秒完成的写 I/O 设备次数。即 wio/s等 7 | iostat 8 | 9 | ##每隔2秒刷新磁盘IO信息,并且每次显示3次 10 | iostat 2 3 11 | 12 | #显示某个磁盘的IO信息 13 | iostat -d sda1 14 | 15 | ##显示tty和cpu信息 16 | iostat -t 17 | 18 | ##以M为单位显示磁盘IO信息 19 | iostat -m 20 | 21 | ##查看TPS和吞吐量信息 kB_read/s:每秒从设备(drive expressed)读取的数据量;kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;kB_read:读取的总数据量;kB_wrtn:写入的总数量数据量; 22 | iostat -d -k 1 1 23 | 24 | #查看设备使用率(%util)、响应时间(await) 25 | iostat -d -x -k 1 1 26 | 27 | #查看CPU状态 28 | iostat -c 1 3 29 | 30 | #统计进程(pid)的stat,进程的stat自然包括进程的IO状况 31 | pidstat 32 | 33 | #只显示IO 34 | pidstat -d 1 35 | 36 | #-d IO 信息,-r 缺页及内存信息-u CPU使用率-t 以线程为统计单位1 1秒统计一次 37 | pidstat -u -r -d -t 1 38 | 39 | #文件级IO分析,查看当前文件由哪些进程打开 40 | lsof 41 | ls /proc/pid/fd 42 | 43 | #利用 sar 报告磁盘 I/O 信息DEV 正在监视的块设备 tps 每秒钟物理设备的 I/O 传输总量 rd_sec/s 每秒从设备读取的扇区数量 wr_sec/s 每秒向设备写入的扇区数量 avgrq-sz I/O 请求的平均扇区数 44 | #avgqu-sz I/O 请求的平均队列长度 await I/O 请求的平均等待时间,单位为毫秒 svctm I/O 请求的平均服务时间,单位为毫秒 %util I/O 请求所占用的时间的百分比,即设备利用率 45 | sar -pd 10 3 46 | 47 | #iotop top的io版 48 | iotop 49 | 50 | #查看页面缓存信息 其中的Cached 指用于pagecache的内存大小(diskcache-SwapCache)。随着写入缓存页,Dirty 的值会增加 一旦开始把缓存页写入硬盘,Writeback的值会增加直到写入结束。 51 | cat /proc/meminfo 52 | 53 | #查看有多少个pdflush进程 Linux 用pdflush进程把数据从缓存页写入硬盘 54 | #pdflush的行为受/proc/sys/vm中的参数的控制/proc/sys/vm/dirty_writeback_centisecs (default 500): 1/100秒, 多长时间唤醒pdflush将缓存页数据写入硬盘。默认5秒唤醒2个(更多个)线程。如果wrteback的时间长于dirty_writeback_centisecs的时间,可能会出问题 55 | cat /proc/sys/vm/nr_pdflush_threads 56 | 57 | #查看I/O 调度器 58 | #调度算法 59 | #noop anticipatory deadline [cfq] 60 | #deadline : deadline 算法保证对既定的IO请求以最小的延迟时间。 61 | #anticipatory: 有个IO发生后,如果又有进程请求IO,则产生一个默认6ms猜测时间,猜测下一个进程请求IO是干什么。这对于随机读取会造成较大的延时。对数据库应用很糟糕,而对于Web Server等则会表现不错。 62 | #cfq: 对每个进程维护一个IO队列,各个进程发来的IO请求会被cfq以轮循方式处理,对每一个IO请求都是公平。适合离散读的应用。 63 | #noop: 对所有IO请求都用FIFO队列形式处理。默认IO不会存在性能问题。 64 | cat /sys/block/[disk]/queue/scheduler 65 | 66 | 67 | #改变IO调度器 68 | $ echo deadline > /sys/block/sdX/queue/scheduler 69 | #提高调度器请求队列的 70 | $ echo 4096 > /sys/block/sdX/queue/nr_requests -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | #shell_repository 2 | ============================================================ 3 | ##shell常用分析命令和运行脚本 工作中不断更新 4 | 5 | ## find awk grep “三剑客” 用法大全 6 | ## mysql监控 运维 7 | 8 | ## cookielog分析脚本 9 | 10 | ## 线上java进程信息dump和机器信息dump脚本 11 | 12 | ## cpu监控相关 13 | 14 | ## dish 磁盘管理 15 | 16 | -------------------------------------------------------------------------------- /awk.sh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skyformat99/shell_repository/64d0ce8d3271cb527c206cc1e0f5ca8dd9e99250/awk.sh -------------------------------------------------------------------------------- /cookieloganalysis.sh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skyformat99/shell_repository/64d0ce8d3271cb527c206cc1e0f5ca8dd9e99250/cookieloganalysis.sh -------------------------------------------------------------------------------- /cpu.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | #限制某个线程的cpu使用率 3 | sudo cpulimit -p pid -l 50 4 | ps -eo %cpu,args | grep -m1 PROCESS | awk '{print $1}' 5 | 6 | #将当前进程按照memory和cpu排序 7 | ps aux --sort=%mem,%cpu 8 | 9 | #按照cpu使用率排序 10 | ps -e -o pcpu,cpu,nice,state,cputime,args --sort pcpu | sed "/^ 0.0 /d" 11 | 12 | #查看当前系统的物理cpu个数 13 | grep "processor" /proc/cpuinfo | wc -l 14 | grep -c -e '^cpu[0-9]\+' /proc/stat 15 | 16 | #查看当前cpu型号 17 | grep "model name" /proc/cpuinfo 18 | 19 | #查看当前cpu信息 20 | cat /proc/cpuinfo 21 | 22 | #查看当前系统的位数 23 | grep -q '\' /proc/cpuinfo && echo 64 bits || echo 32 bits 24 | getconf LONG_BIT | grep '64' 25 | java -version 26 | 27 | #查看当前系统的cpu频率 28 | awk -F": " '/cpu MHz\ */ { print "Processor (or core) running speed is: " $2 }' /proc/cpuinfo ; dmidecode | awk -F": " '/Current Speed/ { print "Processor real speed is: " $2 }' 29 | 30 | 31 | #查看每个cpu每个进程的cpu使用率 32 | ps ax -L -o pid,tid,psr,pcpu,args | sort -nr -k4| head -15 | cut -c 1-90 33 | 34 | #查看当前中断 35 | cat /proc/interrupts 36 | 37 | #查看多个处理器的使用率相关信息 38 | mpstat –P ALL 1 39 | 40 | #每个物理CPU中Core的个数: 41 | cat /proc/cpuinfo | grep "cpu cores" | uniq | awk -F: '{print $2}' 42 | 43 | #是否为超线程? 44 | #如果有两个逻辑CPU具有相同的”core id”,那么超线程是打开的。 45 | #每个物理CPU中逻辑CPU(可能是core, threads或both)的个数: 46 | cat /proc/cpuinfo | grep "siblings" 47 | 48 | #/proc/stat 文件中有一行记录的机器从启动依赖,各个中断序号发生中断的次数。 49 | #这一行以intr开头,接下来的第一个数字是总的中断数目,之后就是分别的中断数目,从0开始。 50 | cat /proc/stat | grep intr 51 | -------------------------------------------------------------------------------- /dish.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | #按照目录大小排序战士最前面15个目录或者文件 3 | du -xB M --max-depth=2 /var | sort -rn | head -n 15 4 | 5 | #列出当前所有子目录的文件大小 6 | du -h --max-depth=1 7 | 8 | #列出当前文件或者目录最大的10个 9 | du -s * | sort -n | tail 10 | 11 | #按照目录大小从大到小排序 12 | du -b --max-depth 1 | sort -nr | perl -pe 's{([0-9]+)}{sprintf "%.1f%s", $1>=2**30? ($1/2**30, "G"): $1>=2**20? ($1/2**20, "M"): $1>=2**10? ($1/2**10, "K"): ($1, "")}e' 13 | 14 | #列出path这个目录的文件树 15 | du -h /path | sort -h 16 | 17 | #每隔60s监控对应目录的文件大小变化 18 | watch -n60 du /var/log/messages 19 | 20 | 21 | #递归删除当前目录下所有子目录中的.svn目录 22 | find.md . -type d -name '.svn' -print0 | xargs -0 rm -rdf 23 | 24 | #列出当前磁盘的使用情况 25 | df -P | column -t 26 | 27 | #监控磁盘的使用情况 28 | watch -d -n 5 df 29 | 30 | #列出当前inode的使用情况 31 | df -i 32 | 33 | #按照每个磁盘使用量从高到低排序 34 | df -h | grep -v ^none | ( read header ; echo "$header" ; sort -rn -k 5) 35 | 36 | 37 | #查看物理磁盘的使用情况 38 | df -x tmpfs | grep -vE "(gvfs|procbususb|rootfs)" 39 | 40 | #查看当前所有磁盘的大小和使用量 41 | df -H 42 | 43 | #查看所有分区使用情况 44 | fdisk -l /dev/sda 45 | 46 | # 显示系统所有的分区或给定的分区 47 | fdisk -l 48 | # 显示时,显示的是扇区数不是柱面数 49 | fdisk -u 50 | # 显示指定partition的block数 51 | fdisk -s partition 52 | 53 | #查看磁盘的读写容量 54 | iostat -m -d /dev/sda1 55 | 56 | #测试磁盘的读写速度 57 | hdparm -t /dev/sda 58 | 59 | #查看某个文件的所有链接 60 | find.md -L / -samefile /path/to/file -exec ls -ld {} + 61 | 62 | #查看最大的5个文件 63 | find.md . -type f -exec ls -s {} \; | sort -n -r | head -5 64 | 65 | #查看365天前的文件并删除 66 | find.md ./ -type f -mtime +365 -exec rm -f {} \; 67 | 68 | #查看大于100M的文件 69 | find.md . -type f -size +100M 70 | -------------------------------------------------------------------------------- /docker.md: -------------------------------------------------------------------------------- 1 | ##**查看docker版本信息** 2 | 3 | ``` 4 | #docker version 5 | #docker -v 6 | #docker info 7 | ``` 8 | ##**image镜像操作命令** 9 | 10 | ``` 11 | #docker search image_name //检索image 12 | #docker pull image_name //下载镜像 13 | #docker images //列出本地镜像 -a, --all=false Show all images; --no-trunc=false Don't truncate output; -q, --quiet=false Only show numeric IDs 14 | //删除一个或者多个镜像; -f, --force=false Force; --no-prune=false Do not delete untagged parents 15 | #docker rmi image_name 16 | //显示一个镜像的历史; --no-trunc=false Don't truncate output; -q, --quiet=false Only show numeric IDs 17 | #docker history image_name 18 | ``` 19 | ##**容器操作** 20 | 21 | ``` 22 | # 在容器中运行"echo"命令,输出"hello word" 23 | $docker run image_name echo "hello word" 24 | 25 | # 交互式进入容器中 26 | $docker run -i -t image_name /bin/bash 27 | 28 | # 后台启动镜像 并更改镜像名字 29 | $docker run -d --name myImage centos 30 | 31 | # 在容器中安装新的程序 32 | $docker run image_name yum install -y app_name 33 | 34 | # 列出当前所有正在运行的container 35 | $docker ps 36 | # 列出所有的container 37 | $docker ps -a 38 | # 列出最近一次启动的container 39 | $docker ps -l 40 | 41 | # 保存对容器的修改; -a, --author="" Author; -m, --message="" Commit message 42 | $docker commit ID new_image_name 43 | 44 | 45 | # 删除所有容器 46 | $docker rm `docker ps -a -q` 47 | 48 | # 删除单个容器; -f, --force=false; -l, --link=false Remove the specified link and not the underlying container; -v, --volumes=false Remove the volumes associated to the container 49 | $docker rm Name/ID 50 | 51 | # 停止、启动、杀死一个容器 52 | $docker stop Name/ID 53 | $docker start Name/ID 54 | $docker kill Name/ID 55 | 56 | # 从一个容器中取日志; -f, --follow=false Follow log output; -t, --timestamps=false Show timestamps 57 | $docker logs Name/ID 58 | 59 | # 列出一个容器里面被改变的文件或者目录,list列表会显示出三种事件,A 增加的,D 删除的,C 被改变的 60 | $docker diff Name/ID 61 | 62 | # 显示一个运行的容器里面的进程信息 63 | $docker top Name/ID 64 | 65 | # 从容器里面拷贝文件/目录到本地一个路径 66 | $docker cp Name:/container_path to_path 67 | $docker cp ID:/container_path to_path 68 | 69 | # 重启一个正在运行的容器; -t, --time=10 Number of seconds to try to stop for before killing the container, Default=10 70 | $docker restart Name/ID 71 | 72 | # 附加到一个运行的容器上面; --no-stdin=false Do not attach stdin; --sig-proxy=true Proxify all received signal to the process 73 | $docker attach ID 74 | 75 | #访问另一个容器的命名空间 进入另一个容器 76 | #安装Linux工具包 77 | $ yum install -y util-linux 78 | #获取容器的Pid 79 | $docker inspect --format "{{.State.Pid}}" containerName 80 | #进入容器 81 | $ nsenter --target Pid --mount --uts --ipc --net --pid 82 | 83 | #容器网络配置 84 | #随机生成container到host端口映射 85 | $docker run -d -P --name myNginx nginx 86 | #指定特定端口 将container 80到host91端口的映射 87 | $docker run -d -p 91:80 --name myNginx imageName 88 | # -p ip: hostPort:containerPosrt 89 | $docker ps -l 90 | ``` 91 | 92 | ##**docker数据管理** 93 | 94 | ``` 95 | # -v 绑定挂载一个数据卷 -h 给容器指定一个主机名 96 | $docker run -it --name volume-test1 -h nginx -v /data/ imageName 97 | 98 | #或着手动设置映射 99 | $docker run -it --name volume-test1 -h nginx -v /opt:/opt imageName 100 | 101 | #挂载另一容器, 另一容器volume-test2(即使容器已经停掉)来做volume-test1的专门的存储 102 | $docker run -it --name volume-test1 -h nginx --volumes-from volume-test2 imageName 103 | 104 | #显示数据卷到host主机的映射关系 105 | $docker inspect -f {{.Volumes}} volume-test1 106 | ``` 107 | -------------------------------------------------------------------------------- /exec_sql.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | HOSTNAME="192.168.0.2" 4 | PORT="3306" 5 | USERNAME="root" 6 | PASSWORD="root" 7 | DBNAME="testDB" 8 | toLogin="mysql -h${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD}" 9 | 10 | while read line; 11 | do 12 | user_id=`echo $line | awk -F "\n" '{ printf("%s", $1)}'` 13 | # 插入 tbl_operate_user 用户表 14 | 15 | ${toLogin} -e "INSERT INTO ${DBNAME}.\`tbl_operate_user\` 16 | (user_id, user_name, user_erp_no, user_type,ope_dep_id,ope_phone_num,email,user_stat, create_time, update_time) 17 | VALUES('$user_id', '$user_id' , '$user_id', '', '00002', '', '', '1', NOW(), NOW())" 18 | echo "INSERT INTO ${DBNAME}.\`tbl_operate_user\` 19 | (user_id, user_name, user_erp_no, user_type,ope_dep_id,ope_phone_num,email,user_stat, create_time, update_time) 20 | VALUES('$user_id', '$user_id' , '$user_id', '', '00003', '', '', '1', NOW(), NOW());" >> insert.sql 21 | 22 | 23 | # 插入角色 24 | ${toLogin} -e "INSERT INTO ${DBNAME}.\`tbl_ouser_role_rel\` (user_id, role_id, create_time, update_time) VALUES('$user_id', '05', NOW(), NOW())" 25 | echo "INSERT INTO ${DBNAME}.\`tbl_ouser_role_rel\` (user_id, role_id, create_time, update_time) VALUES('$user_id', '05', NOW(), NOW());" >> insert.sql 26 | 27 | # 用户业务线表 28 | ${toLogin} -e "INSERT INTO ${DBNAME}.\`tbl_operate_user_busitype\` 29 | (user_id, busi_type_id, create_time, update_time) 30 | VALUES('$user_id', 'all', NOW(),NOW())" 31 | echo "INSERT INTO ${DBNAME}.\`tbl_operate_user_busitype\` 32 | (user_id, busi_type_id, create_time, update_time) 33 | VALUES('$user_id', 'all', NOW(),NOW());" >> insert.sql 34 | # 35 | done < input.data 36 | 37 | 38 | -------------------------------------------------------------------------------- /find.md: -------------------------------------------------------------------------------- 1 | 1. 按文件名搜索。 2 | 搜索当前目录下所有的以txt结尾的文件。第二个命令用了 -exec 参数,可以在对查找的所有文件执行一种操作。注意格式,空格和;一个都不能少。-name 的参数可以用正则表达式,例如第二个例子 3 | 4 | find ./* -name "*.txt" 5 | find ./* -name "[ab]*.py" 6 | find ./* -name "*.pyc" -exec rm {} \; 7 | 8 | 2. 按修改时间查找 9 | 查找当前目录下当天修改过的文件。-1 表示一天前修改过的文件。-2表示前两天。find ./* -mtime n n表示,对文件数据的最近一次修改是在 n*24 小时之前。+n 指n天以前,-n指n天以内(对 -mmin 是指n分钟), n 表示第n天,他们的含义都是不同的,注意区分。 10 | 11 | find ./* -mtime 60 -type f -print 12 | find ./* -mmin -60 -type f -print 13 | find ./* -mmin +60 -type f -print 14 | 15 | 3. 文件状态改变 16 | 和 上个参数相比,基本道理都是一样的,只不过这个参数的含义是文件的权限被修改。改内容和改文件的权限是不一样的,这里指的是更改的是文件inode的数据,比如文件的权限,所属人等等信息。cmin 表示近60分钟内被改过权限,ctime 表示近几天内被修改过。 17 | 18 | find ./* -cmin +60 -type f -print 19 | find ./* -ctime -60 -type f -print 20 | 21 | 4 22 | 按照文件的所属group和 所属user 来查找-user 和 -nouser 最后一个命令找出当前已经被删除的系统用户的所有文件, - group 和 - nogroup 的功能类似。 23 | 24 | find ./* -user fox 25 | find ./* -nouser 26 | 27 | 5 28 | find 避开某个目录,避开多个目录。其中 -a 表示 and 的意思,-o 表示or 的意思。 29 | 30 | find test -path "test/test4" -prune -o -print 31 | find test \( -path test/test4 -o -path test/test3 \) -prune -o -print 32 | find . \( -path ./modules -o -path ./framework -o -path ./utils -o -path ./config \) -prune -o -name "Bigger.*" -print 33 | 34 | 6 35 | -perm 选项 指文件的访问权限 36 | 37 | find -perm 755 -print 38 | 39 | 7 40 | 实用inode 来查找文件编号。可以如下面所示在find命令中指定inode编号。在此,find命令用inode编号重命名了一个文件。你也可以通过rm来删除那个特殊的文件。 41 | 42 | ls -i1 test* 43 | 16187429 test-file-name 44 | 16187430 test-file-name 45 | find -inum 16187430 -exec mv {} new-test-file-name \; 46 | 47 | 8 48 | 找出当前目录下最大的5个文件 49 | 50 | find . -type f -exec ls -s {} \; | sort -n -r | head -5 51 | 52 | 9 53 | 下面的命令删除大于100M的*.zip文件。 54 | 55 | find / -type f -name *.zip -size +100M -exec rm -i {} \; -------------------------------------------------------------------------------- /javadump.sh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skyformat99/shell_repository/64d0ce8d3271cb527c206cc1e0f5ca8dd9e99250/javadump.sh -------------------------------------------------------------------------------- /master_slave_replication.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # blog uri: http://linuxnote.blog.51cto.com/9876511/1652016 3 | #!/bin/bash 4 | #Target: Auto Make And Check Mysql Master-Slave 5 | #Date: 2015-05-17 6 | #Author: Jacken 7 | #QQ 654001593 8 | #QQ Group 170544180 9 | #Version: 1.0 10 | # 11 | #Note:Have To Exec 1 On Master,Then Exec 2 On SLAVE_DIR,On Correspond Machine To Select "Show Status" 12 | #Only Allow Define Variable 13 | shopt -s -o nounset 14 | # 15 | ##################################################################### 16 | ##################################################################### 17 | ##########Define Varabile 18 | #Define Master And Slave Database Ipaddress. 19 | MASTER_IP=192.168.1.3 20 | SLAVE_IP=192.168.1.4 21 | # 22 | #Define Master Super User Name And Password. 23 | MASTER_USER=root 24 | MASTER_PASSWD=master123 25 | # 26 | #Define Slave Super User Name And Password. 27 | SLAVE_USER=root 28 | SLAVE_PASSWD=slave123 29 | # 30 | #Define Master-to-Slave Grant User & Password & Host 31 | GRANT_USER=grantuser 32 | GRANT_PASSWD=grantpasswd 33 | GRANT_HOST=% 34 | # 35 | #Sync Database 36 | RSDB=*.* 37 | # 38 | #Define Mysql install Directory 39 | MASTER_DIR=/usr/local/mysql 40 | SLAVE_DIR=/usr/local/mysql 41 | # 42 | #Define Device Name. 43 | DEV=eth0 44 | # 45 | #Get Ipaddress For Exec Scripts Machine 46 | GETIP=$(ifconfig $DEV| sed -n '/inet addr:/p'|awk '{print $2}'| awk -F: '{print $2}') 47 | ##################################################################### 48 | ##################################################################### 49 | # 50 | #Only For Super User To Exec 51 | if [ $UID -ne 0 ];then 52 | echo -e '\e[31mSorry,This Script Must Be Super User To Exec!\e[0m' 53 | exit 2 54 | fi 55 | # 56 | # 57 | ##################################################################### 58 | ##################################################################### 59 | # 60 | #Define Master database Operations. 61 | MYSQL_MIN="$MASTER_DIR/bin/mysql -u$MASTER_USER -p$MASTER_PASSWD -e" 62 | # 63 | function MASTER_DO { 64 | #Backup And Judge My.cnf 65 | if [ -f /etc/my.cnf ];then 66 | cp /etc/my.cnf /etc/my.cnf$$ 67 | else 68 | cp $MASTER_DIR/share/mysql/my-medium.cnf /etc/my.cnf 69 | fi 70 | #Grant Slave Database Access Master Database. 71 | $MASTER_DIR/bin/mysql -u$MASTER_USER -p$MASTER_PASSWD -e "grant all on $RSDB to '$SLAVE_USER'@'$SLAVE_IP' identified by '$SLAVE_PASSWD';" 72 | #Grant Master-Slave Sync User. 73 | $MYSQL_MIN "grant replication slave on $RSDB to \"$GRANT_USER\"@\"$GRANT_HOST\" identified by \"$GRANT_PASSWD\";" 74 | $MYSQL_MIN "flush privileges;" 75 | } 76 | # 77 | # 78 | ##################################################################### 79 | ##################################################################### 80 | # 81 | #Define Slave database Operations. 82 | # 83 | function SLAVE_DO(){ 84 | MYSQL_SIN="$SLAVE_DIR/bin/mysql -u$SLAVE_USER -p$SLAVE_PASSWD -e" 85 | #Get Master Database status. 86 | MASTER_INFO=`$SLAVE_DIR/bin/mysql -h$MASTER_IP -u$SLAVE_USER -p$SLAVE_PASSWD -e "show master status;"|sed -n '/mysql/p'` 87 | # 88 | #Get Log_File 89 | LOG_FILE=`echo $MASTER_INFO|awk '{print $1}'` 90 | #Get Log_Pos 91 | LOG_POS=`echo $MASTER_INFO|awk '{print $2}'` 92 | # 93 | #Get Slave Database Status 94 | SYNC_INFO=`$MYSQL_SIN "show slave status \G;"|grep Runnning > /dev/null 2>&1` 95 | # 96 | #Judge Yes Or No 97 | SLAVE_IO_STATUS=`echo $SYNC_INFO|sed -n '/IO/p'|awk -F: '{print $2}'` 98 | SLAVE_SQL_STATUS=`echo $SYNC_INFO|sed -n '/SQL/p'|awk -F: '{print $2}'` 99 | #Grant Master User To Access Slave Database. 100 | `$MYSQL_SIN "grant all privileges on $RSDB to \"$MASTER_USER\"@\"$MASTER_IP\" identified by \"$MASTER_PASSWD\";"` 101 | # 102 | #Backup And Judge /etc/My.cnf 103 | if [ -f /etc/my.cnf ];then 104 | cp /etc/my.cnf /etc/my.cnf$$ 105 | else 106 | cp $MASTER_DIR/share/mysql/my-medium.cnf /etc/my.cnf 107 | fi 108 | # 109 | #Modify Slave Server-id 110 | sed -i '/^server-id/s/1/2/' /etc/my.cnf 111 | # 112 | #Add Master Information On Slave 113 | $MYSQL_SIN "change master to master_host='$MASTER_IP',master_user='$GRANT_USER',master_password='$GRANT_PASSWD',master_log_file='$LOG_FILE',master_log_pos=$LOG_POS;" 114 | $MYSQL_SIN "slave start;" 115 | } 116 | # 117 | # 118 | ##################################################################### 119 | ##################################################################### 120 | # 121 | #Judge Master-Slave Status On Slave To Exec! 122 | function SYNC_STATUS_S { 123 | MYSQL_SIN="$SLAVE_DIR/bin/mysql -u$SLAVE_USER -p$SLAVE_PASSWD -e" 124 | #Get Sync Information 125 | SYNC_INFO=`$MYSQL_SIN 'show slave status \G'|grep Running` 126 | # 127 | #Judge Yes Or No 128 | SLAVE_IO_STATUS=`echo $SYNC_INFO|awk '{print $2}'` 129 | SLAVE_SQL_STATUS=`echo $SYNC_INFO|awk '{print $4}'` 130 | # 131 | #Reply Master-Slave Status Information. 132 | if [[ "$SLAVE_IO_STATUS" == 'Yes' && "$SLAVE_SQL_STATUS" == 'Yes' ]];then 133 | echo -e '\e[32mThe Database Sync Is Successfuly!\e[0m' 134 | else 135 | echo -e '\e[31mThe Database Sync Is Failure!\e[0m' 136 | echo -e '\e[31mPlease Check!Exit....\e[0m' 137 | exit 2 138 | fi 139 | } 140 | #Judge Master-Slave Status On Master To Exec! 141 | function SYNC_STATUS_M { 142 | MYSQL_MIN="$MASTER_DIR/bin/mysql -h$SLAVE_IP -u$MASTER_USER -p$MASTER_PASSWD -e" 143 | # 144 | #Get Sync Information 145 | SYNC_INFO=`$MYSQL_MIN 'show slave status \G'|grep Running` 146 | # 147 | #Judge Yes Or No 148 | SLAVE_IO_STATUS=`echo $SYNC_INFO|awk '{print $2}'` 149 | SLAVE_SQL_STATUS=`echo $SYNC_INFO|awk '{print $4}'` 150 | #Reply Master-Slave Status Information. 151 | if [[ "$SLAVE_IO_STATUS" == 'Yes' && "$SLAVE_SQL_STATUS" == 'Yes' ]];then 152 | echo -e '\e[32mThe Database Sync Is Successfuly!\e[0m' 153 | else 154 | echo -e '\e[31mThe Database Sync Is Failure!\e[0m' 155 | echo -e '\e[31mPlease Check!Exit....\e[0m' 156 | exit 2 157 | fi 158 | } 159 | # 160 | ##################################################################### 161 | ##################################################################### 162 | # 163 | #Judge Master Database Machine! 164 | function JUDGE_MASTER_ID() { 165 | if [ ! "$GETIP" == "$MASTER_IP" ];then 166 | echo -e '\e[31mYour Choice Error,This Option Only Select On Master Machine!\e[0m' 167 | exit 2 168 | fi 169 | } 170 | # 171 | ##################################################################### 172 | ##################################################################### 173 | # 174 | #Judge Master Database Machine! 175 | function JUDGE_SLAVE_ID() { 176 | if [ ! "$GETIP" == "$SLAVE_IP" ];then 177 | echo -e '\e[31mYour Choice Error,This Option Only Select On Slave Machine!\e[0m' 178 | exit 2 179 | fi 180 | } 181 | # 182 | ##################################################################### 183 | ##################################################################### 184 | ##################################################################### 185 | # 186 | PS3="Please Input Number:" 187 | select i in "Configure Master Database(On Master)" "Configure Slave Database(On Slave)" "Show Master-Slave Status(On Master)" "Show Master-Slave(On Slave)" "Exit" 188 | do 189 | CHOOSE=$REPLY 190 | case $CHOOSE in 191 | ##################################################################### 192 | 1) 193 | JUDGE_MASTER_ID 194 | MASTER_DO 195 | if [ $? -eq 0 ];then 196 | echo -e '\e[32mConfigure Master Database Successfully!\e[0m' 197 | else 198 | echo -e '\e[31mConfigure Master Database Failure!\e[0m' 199 | fi 200 | ;; 201 | ##################################################################### 202 | 2) 203 | JUDGE_SLAVE_ID 204 | SLAVE_DO 205 | if [ $? -eq 0 ];then 206 | echo -e '\e[32mConfigure Slave Database Successfully!\e[0m' 207 | else 208 | echo -e '\e[31mConfigure Slave Database Failure!\e[0m' 209 | fi 210 | ;; 211 | ##################################################################### 212 | 3) 213 | JUDGE_MASTER_ID 214 | SYNC_STATUS_M 215 | ;; 216 | ##################################################################### 217 | 4) 218 | JUDGE_SLAVE_ID 219 | SYNC_STATUS_S 220 | ;; 221 | ##################################################################### 222 | 5) 223 | echo -e '\e[32mByeBye.\e[0m' 224 | exit 225 | ;; 226 | ##################################################################### 227 | *) 228 | echo -e '\e[31mInput Error,Please Input Again!\e[0m' 229 | esac 230 | done -------------------------------------------------------------------------------- /maven.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | maven常用命令 3 | 4 | 5 | ##查看maven版本 6 | mvn --version 7 | 8 | ##创建基于maven web archetype的 maven web工程 9 | ##创建maven的spring web工程 http://www.mkyong.com/maven/how-to-create-a-web-application-project-with-maven/ 10 | mvn archetype:generate -DgroupId={project-packaging} -DartifactId={project-name} -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false 11 | 12 | ##创建maven的java普通工程 13 | mvn -B archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=com.mycompany.app -DartifactId=my-app 14 | 15 | ##编译工程 16 | mvn compile 17 | 18 | ##执行单元测试 19 | mvn test 20 | 21 | ##打包 22 | mvn package 23 | 24 | ##安装到本地maven库 25 | mvn install 26 | 27 | ##将包部署到远程仓库 28 | mvn deploy 29 | 30 | 31 | ##将工程生成web站点,可以基于site的语法生成一个文档性的网站 32 | mvn site 33 | 34 | 35 | ##删除编译好的target目录 36 | mvn clean 37 | 38 | 39 | ##生成eclipse工程 40 | mvn eclipse:eclipse 41 | 42 | ##生成 IntelliJ IDEA工程 43 | mvn idea:idea 44 | 45 | 46 | ##如果maven工程中配置了jetty插件,则下面名称启动jetty内置服务器 47 | mvn jetty:run 48 | 49 | 50 | ##查看工程里面激活生效的profile, 51 | mvn help:active-profiles 52 | 53 | ##安装指定文件到本地仓库 54 | mvn install:install-file -DgroupId= -DartifactId= -Dversion=1.0.0 -Dpackaging=jar -Dfile= 55 | 56 | ##查看实际pom信息 57 | mvn help:effective-pom 58 | 59 | ##分析项目的依赖信息 打印整个依赖树 60 | mvn dependency:analyze 或 mvn dependency:tree 61 | 62 | ##在项目发布的时候 一般都需要进行依赖冲突检查或者重复类的检查,这个时候我一般会使用下面的两个命令: 63 | mvn -U clean package -Dmaven.test.skip=true enforcer:enforce -DcheckDeployRelease_skip=true -Denforcer.skip=false 64 | mvn -U dependency:tree -Dverbose 65 | ##查看帮助信息 66 | mvn help:help 或 mvn help:help -Ddetail=true 67 | 68 | ##查看插件的帮助信息 69 | mvn :help,比如:mvn dependency:help 或 mvn ant:help 70 | 71 | ##打包时跳过测试 72 | mvn package -Dmaven.test.skip=ture 73 | 74 | ##使用 help 插件的 describe 目标来输出 Maven Help 插件的信息。 75 | mvn help:describe -Dplugin=help 76 | 77 | ##使用Help 插件输出完整的带有参数的目标列 78 | mvn help:describe -Dplugin=help -Dfull 79 | 80 | ##Exec 插件让我们能够在不往 classpath 载入适当的依赖的情况下,运行这个程序 81 | mvn exec:java -Dexec.mainClass=org.sonatype.mavenbook.weather.Main 82 | 83 | ##Exec 插件让我们能够在不往 classpath 载入适当的依赖的情况下,运行这个程序 84 | mvn dependency:resolve 85 | 86 | ##想要查看完整的依赖踪迹,包含那些因为冲突或者其它原因而被拒绝引入的构件,打开 Maven 的调试标记运行 87 | mvn install -X 88 | 89 | ##构建装配Maven Assembly 插件是一个用来创建你应用程序特有分发包的插件 90 | mvn install assembly:assembly 91 | 92 | ##显示详细错误信息 93 | mvn -e 94 | 95 | ##验证工程是否正确 96 | mvn validate 97 | 98 | ##在集成测试可以运行的环境中处理和发布包 99 | mvn integration-test 100 | 101 | ##运行任何检查,验证包是否有效且达到质量标准 102 | mvn verify 103 | 104 | ##产生应用需要的任何额外的源代码,如xdoclet 105 | mvn generate-sources 106 | 107 | ##下载源码 108 | mvn -DdownloadSources=true 109 | 110 | ##下载javadoc 111 | mvn -DdownloadJavadocs=true 112 | 113 | ##先下载最新版本,再执行打包操作 114 | mvn -U package -------------------------------------------------------------------------------- /mysql_dump.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | #在数据库的日常维护工作中,除了保证业务的正常运行以外,就是要对数据库进行备份,以免造成数据库的丢失,从而给企业带来重大经济损失。 3 | # 通常备份可以按照备份时数据库状态分为热备和冷备,按照备份数据库文件的大小分为增量备份、差异备份和全量备份。其中热备可以通过 4 | # mysql replication主从复制进行实时备份,percona的xtrabackup以及mysql自带的mysqldump等, 5 | # 可以根据不同需求使用不同的备份方案。虽然在生产环境已经使用mysql replication主从复制,但是还需要在计划任务中添加运行shell脚本 6 | # 在夜间业务不繁忙时进行数据库的全量备份,以便在发生主从复制失败时,主从数据库大量数据不一致后的主从复制的重做,同时进行完全备份 7 | # 可以更加保证数据库的安全性。以下是我在生产环境中使用的一个全备脚本,它的基本功能:1.自动压缩备份mysql数据库.2.自动删除近10天 8 | # 前的备份文件 9 | #3.删除时显示删除进度(可选). 10 | #Author absolutely.xu@gmail.com 11 | MAXIMUM_BACKUP_FILES=10 #最大备份文件数 12 | BACKUP_FOLDERNAME="database_backup" #数据库备份文件的主目录 13 | DB_HOSTNAME="localhost" #mysql所在主机的主机名 14 | DB_USERNAME="root" #mysql登录用户名 15 | DB_PASSWORD="123456" #mysql登录密码 16 | DATABASES=( 17 | "openfire" 18 | "csp" #备份的数据库名 19 | ) 20 | #========= 21 | echo "Bash Database Backup Tool" 22 | #CURRENT_DATE=$(date +%F) 23 | CURRENT_DATE=$(date +%F) #定义当前日期为变量 24 | BACKUP_FOLDER="${BACKUP_FOLDERNAME}_${CURRENT_DATE}" #存放数据库备份文件的目录 25 | mkdir $BACKUP_FOLDER #创建数据库备份文件目录 26 | #统计需要被备份的数据库 27 | count=0 28 | while [ "x${DATABASES[count]}" != "x" ];do 29 | count=$(( count + 1 )) 30 | done 31 | echo "[+] ${count} databases will be backuped..." 32 | #循环这个数据库名称列表然后逐个备份这些数据库 33 | for DATABASE in ${DATABASES[@]};do 34 | echo "[+] Mysql-Dumping: ${DATABASE}" 35 | echo -n " Began: ";echo $(date) 36 | if $(mysqldump -h ${DB_HOSTNAME} -u${DB_USERNAME} -p${DB_PASSWORD} ${DATABASE} > "${BACKUP_FOLDER}/${DATABASE}.sql");then 37 | echo " Dumped successfully!" 38 | else 39 | echo " Failed dumping this database!" 40 | fi 41 | echo -n " Finished: ";echo $(date) 42 | done 43 | echo 44 | echo "[+] Packaging and compressing the backup folder..." 45 | tar -cv ${BACKUP_FOLDER} | bzip2 > ${BACKUP_FOLDER}.tar.bz2 && rm -rf $BACKUP_FOLDER 46 | BACKUP_FILES_MADE=$(ls -l ${BACKUP_FOLDERNAME}*.tar.bz2 | wc -l) 47 | BACKUP_FILES_MADE=$(( $BACKUP_FILES_MADE - 0 )) 48 | #把已经完成的备份文件数的结果转换成整数数字 49 | 50 | echo 51 | echo "[+] There are ${BACKUP_FILES_MADE} backup files actually." 52 | #判断如果已经完成的备份文件数比最大备份文件数要大,那么用已经备份的文件数减去最大备份文件数,打印要删除旧的备份文件 53 | if [ $BACKUP_FILES_MADE -gt $MAXIMUM_BACKUP_FILES ];then 54 | REMOVE_FILES=$(( $BACKUP_FILES_MADE - $MAXIMUM_BACKUP_FILES )) 55 | echo "[+] Remove ${REMOVE_FILES} old backup files." 56 | #统计所有备份文件,把最新备份的文件存放在一个临时文件里,然后删除旧的文件,循环出临时文件的备份文件从临时目录里移到当前目录 57 | ALL_BACKUP_FILES=($(ls -t ${BACKUP_FOLDERNAME}*.tar.bz2)) 58 | SAFE_BACKUP_FILES=("${ALL_BACKUP_FILES[@]:0:${MAXIMUM_BACKUP_FILES}}") 59 | echo "[+] Safeting the newest backup files and removing old files..." 60 | FOLDER_SAFETY="_safety" 61 | if [ ! -d $FOLDER_SAFETY ] 62 | then mkdir $FOLDER_SAFETY 63 | 64 | fi 65 | for FILE in ${SAFE_BACKUP_FILES[@]};do 66 | 67 | mv -i ${FILE} ${FOLDER_SAFETY} 68 | done 69 | rm -rf ${BACKUP_FOLDERNAME}*.tar.bz2 70 | mv -i ${FOLDER_SAFETY}/* ./ 71 | rm -rf ${FOLDER_SAFETY} 72 | #以下显示备份的数据文件删除进度,一般脚本都是放在crontab里,所以我这里只是为了显示效果,可以不选择这个效果。 73 | 74 | #CHAR='' 75 | #for ((i=0;$i<=100;i+=2)) 76 | #do printf "Removing:[%-50s]%d%%\r" $CHAR $i 77 | # sleep 0.1 78 | #CHAR=#$CHAR 79 | #done 80 | # echo 81 | fi -------------------------------------------------------------------------------- /mysqlmonitor.sh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skyformat99/shell_repository/64d0ce8d3271cb527c206cc1e0f5ca8dd9e99250/mysqlmonitor.sh -------------------------------------------------------------------------------- /net.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | #查看http请求的header 4 | tcpdump -s 1024 -l -A -n host 192.168.9.56 5 | tcpdump -s 1024 -l -A src 192.168.9.56 or dst 192.168.9.56 6 | sudo tcpdump -A -s 1492 dst port 80 7 | 8 | #本地网络中IP地址为192.168.0.5的主机现在与外界通信的情况 9 | sudo tcpdump -i eth0 src host 192.168.0.5 10 | 11 | #查看网卡eth0的http请求的tcp包 12 | tcpdump -i eth0 port http 13 | tcpdump -i eth0 port http or port smtp or port imap or port pop3 -l -A | egrep -i 'pass=|pwd=|log=|login=|user=|username=|pw=|passw=|passwd=|password=|pass:|user:|userna me:|password:|login:|pass |user ' 14 | 15 | 16 | #查看tcp,upd,icmp非ssh的包 17 | tcpdump -n -v tcp or udp or icmp and not port 22 18 | 19 | 20 | #查看http请求的request 包 21 | sudo tcpdump -i eth0 port 80 -w - 22 | 23 | 24 | #过滤http响应的get host头信息 25 | sudo tcpdump -i en1 -n -s 0 -w - | grep -a -o -E "GET \/.*|Host\: .*" 26 | 27 | 28 | #DNS查询请求响应包 29 | sudo tcpdump -i en0 'udp port 53' 30 | 31 | #nmap -sP指定使用Ping echo 进行扫描 /24查看目的网络有多少主机处于运行状态 32 | nmap -sP 192.168.0.1 33 | nmap -sP 192.168.0.0/24 34 | nmap -O www.baidu.com 35 | 36 | #Netstat主要用于Linux/Unix主机察看自身的网络状况,如开启的端口、在为哪些用户服务以及服务的状态 37 | netstat -a 38 | netstat -nlp 39 | 40 | #netcat扫描机器开放的端口 41 | nc -z -v -n 172.31.100.7 21-25 42 | 43 | #netcat 命令会连接开放端口21并且打印运行在这个端口上服务的banner信息。 44 | nc -v 172.31.100.7 21 45 | 46 | #输出网络的路由表 47 | route 48 | 49 | #显示结果包括服务器已经运行了多长时间,有多少登陆用户和对服务器性能的总体评估(load average)。 50 | uptime 51 | 52 | #监控 eth1 的网卡的流量 53 | iftop -i eth1 54 | #以位元组(bytes 即字节)为单位显示流量(预设是位元 bits): 55 | iftop -B 56 | #直接显示 IP, 不进行DNS 反解: 57 | iftop -n 58 | #直接显示连接埠编号, 不显示服务名称: 59 | iftop -N 60 | #显示某个网段进出封包流量 61 | iftop -F 192.168.1.0/24 or 192.168.1.0/255.255.255.0 62 | 63 | 64 | #网络流量实时监控工具之nload,查看网卡eth0的流量 65 | nload -n eth0 66 | 67 | #查看各个网卡的流量 68 | nload -h 69 | 70 | #IPTraf是一个网络监控工具,功能比nload更强大,可以监控所有的流量,IP流量,按协议分的流量,还可以设置过滤器 71 | iptraf 72 | 73 | 74 | #查看网络接口当前配置与接口命名: 75 | ifconfig 76 | #打开(up)或关闭(down)适配器 77 | ifconfig <网络名> 78 | #为适配器分配IP地址: 79 | ifconfig <网络名> 80 | #为适配器分配第二个IP地址: 81 | ifconfig <网络名:实例数> 82 | 83 | #显示某个网络适配器的驱动信息,适用于查询软件兼容性的情况: 84 | ethtool -i eth0 85 | #显示网络数据: 86 | ethtool -S 87 | #设置适配器连接速度(Mbps) 88 | ethtool speed <10|100|1000> 89 | 90 | 91 | #iwconfig 查基本的Wi-Fi网络设置,如SSID、channel和加密等细节。此外还可以修改一些高级设置,包括接收敏感度,RTS/CTS,碎片,以及重试数 92 | #显示当前无线设置,包括接口名称: 93 | iwconfig 94 | #设置ESSID(扩展服务设置识别器)或网络名: 95 | iwconfig <接口名> essid <网络名> 96 | 97 | 98 | #wget 99 | wget -S --spider http://osswin.sourceforge.net/ 2>&1 | grep Mod 100 | 101 | #查看mac地址 102 | cat /sys/class/net/*/address 103 | 104 | #查看eth0的ip 105 | ifconfig eth0 | awk '/inet addr/ {split ($2,A,":"); print A[2]}' 106 | 107 | #curl 查看页面对应的domail name 108 | curl -s http://en.m.wikipedia.org/wiki/List_of_Internet_top-level_domains | sed -n '//{s/<[^>]*>//g;p}' 109 | 110 | #talnet 111 | telnet localhost 6666 112 | 113 | #查看所有的网络接口 114 | awk '{print $1}' /proc/net/dev|grep :|sed "s/:.*//g" 115 | 116 | 117 | #查看DNS server版本好 118 | nslookup -q=txt -class=CHAOS version.bind NS.PHX5.NEARLYFREESPEECH.NET 119 | -------------------------------------------------------------------------------- /performancetool.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | #查看当前系统load 3 | uptime 4 | 5 | #查看系统状态和每个进程的系统资源使用状况 6 | top 7 | 8 | #可视化显示CPU的使用状况 9 | htop 10 | 11 | #查看每个CPU的负载信息 12 | mpstat -P ALL 1 13 | 14 | #每隔1秒查看磁盘IO的统计信息 15 | iostat -xkdz 1 16 | 17 | #每隔一秒查看虚拟内存的使用信息 18 | vmstat 1 19 | 20 | #查看内存使用统计信息 21 | free 22 | 23 | #查看网络使用信息 24 | nicstat -z 1 25 | 26 | #类似vmstat的显示优化的工具 27 | dstat 1 28 | 29 | #查看系统活动状态,比如系统分页统计,块设备IO统计等 30 | sar 31 | 32 | #网络连接状态查看 33 | netstat -s 34 | 35 | #进程资源使用信息查看 36 | pidstat 1 37 | pidstat -d 1 38 | 39 | #查看某个进程的系统调用信息 -p后面是进程id,-tttT 进程系统后的系统调用时间 40 | strace -tttT -p 12670 41 | #统计IO设备输入输出的系统调用信息 42 | strace -c dd if=/dev/zero of=/dev/null bs=512 count=1024k 43 | 44 | 45 | #tcpdump 查看网络数据包 46 | tcpdump -nr /tmp/out.tcpdump 47 | 48 | #块设备的读写事件信息统计 49 | btrace /dev/sdb 50 | 51 | #iotop查看某个进程的IO操作统计信息 52 | iotop -bod5 53 | 54 | #slabtop 查看内核 slab内存分配器的使用信息 55 | slabtop -sc 56 | 57 | #系统参数设置 58 | sysctl -a 59 | 60 | #系统性能指标统计信息 61 | perf stat gzip file1 62 | #系统cpu活动状态查看 63 | perf record -a -g -F 997 sleep 10 -------------------------------------------------------------------------------- /process.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | ## processes 进程管理 3 | 4 | ##ps查看当前系统执行的线程列表,进行瞬间状态,不是连续状态,连续状态需要使用top名称查看 更多常用参数请使用 man ps查看 5 | ps 6 | 7 | ##显示所有进程详细信息 8 | ps aux 9 | 10 | ##-u 显示某个用户的进程列表 11 | ps -f -u www-data 12 | 13 | ## -C 通过名字或者命令搜索进程 14 | ps -C apache2 15 | 16 | ## --sort 根据进程cpu使用率降序排列,查看前5个进程 -pcpu表示降序 pcpu升序 17 | ps aux --sort=-pcpu | head -5 18 | 19 | ##-f 用树结构显示进程的层次关系,父子进程情况下 20 | ps -f --forest -C apache2 21 | 22 | ##显示一个父进程的所有子进程 23 | ps -o pid,uname,comm -C apache2 24 | ps --ppid 2359 25 | 26 | ##显示一个进程的所有线程 -L 参数 27 | ps -p 3150 -L 28 | 29 | ##显示进程的执行时间 -o参数 30 | ps -e -o pid,comm,etime 31 | 32 | ##watch命令可以用来实时捕捉ps显示进程 33 | watch -n 1 'ps -e -o pid,uname,cmd,pmem,pcpu --sort=-pmem,-pcpu | head -15' 34 | 35 | ##jobs 查看后台运行的进程 jobs命令执行的结果,+表示是一个当前的作业,减号表是是一个当前作业之后的一个作业,jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated,但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识;也就是说,jobs命令显示的是当前shell环境中所起的后台正在运行或者被挂起的任务信息 36 | jobs 37 | 38 | ##查看后台运营的进程号 39 | jobs -p 40 | 41 | ##查看现在被终止或者退出的进程号 42 | jobs -n 43 | 44 | 45 | ##kill命令 终止一个前台进程可以使用Ctrl+C键 kill 通过top或者ps获取进程id号 kill [-s 信号 | -p ] [ -a ] 进程号 ... 46 | ##发送指定的信号到相应进程。不指定型号将发送SIGTERM(15)终止指定进程。 关闭进程号12的进程 47 | kill 12 48 | 49 | 50 | ##等同于在前台运行PID为123的进程时按下Ctrl+C键 51 | kill -2 123 52 | 53 | ##如果任无法终止该程序可用“-KILL” 参数,其发送的信号为SIGKILL(9) ,将强制结束进程 54 | kill -9 123 55 | 56 | ##列出所有信号名称 57 | ##HUP 1 终端断线 58 | ##INT 2 中断(同 Ctrl + C) 59 | ##QUIT 3 退出(同 Ctrl + \) 60 | ##TERM 15 终止 61 | ##KILL 9 强制终止 62 | ##CONT 18 继续(与STOP相反, fg/bg命令) 63 | ##STOP 19 暂停(同 Ctrl + Z) 64 | kill -l 65 | 66 | ##得到指定信号的数值 67 | kill -l KILL 68 | 69 | ##杀死指定用户所有进程 70 | kill -u peidalinux 71 | kill -9 $(ps -ef | grep peidalinux) 72 | 73 | ##将后台中的命令调至前台继续运行 将进程123调至前台执行 74 | fg 123 75 | 76 | ##将一个在后台暂停的命令,变成继续执行 77 | bg 123 78 | 79 | ##该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思 下面输出被重定向到myout.file文件中 80 | nohup command > myout.file 2>&1 & 81 | 82 | ##at:计划任务,在特定的时间执行某项工作,在特定的时间执行一次。 83 | ## 格式:at HH:MM YYYY-MM-DD //HH(小时):MM(分钟) YYYY(年)-MM(月份)-DD(日) 84 | ##HH[am pm]+D(天) days //HH(小时)[am(上午)pm(下午)]+days(天) 85 | at 12:00(时间) //at命令设定12:00执行一项操作 86 | #at>useradd aaa //在at命令里设定添加用户aaa 87 | #ctrl+d //退出at命令 88 | #tail -f /etc/passwd //查看/etc/passwd文件后十行是否增加了一个用户aaa 89 | 90 | ##计划任务设定后,在没有执行之前我们可以用atq命令来查看系统没有执行工作任务。 91 | atq 92 | 93 | ##启动计划任务后,如果不想启动设定好的计划任务可以使用atrm命令删除。 94 | atrm 1 //删除计划任务1 95 | 96 | ##pstree命令:列出当前的进程,以及它们的树状结构 格式:pstree [选项] [pid|user] 97 | pstree 98 | 99 | ##nice命令:改变程序执行的优先权等级 应用程序优先权值的范围从-20~19,数字越小,优先权就越高。一般情况下,普通应用程序的优先权值(CPU使用权值)都是0,如果让常用程序拥有较高的优先权等级,自然启动和运行速度都会快些。需要注意的是普通用户只能在0~19之间调整应用程序的优先权值,只有超级用户有权调整更高的优先权值(从-20~19)。 100 | nice [-n <优先等级>][--help][--version][命令] 101 | nice -n 5 ls 102 | 103 | ##sleep命令:使进程暂停执行一段时间 104 | date;sleep 1m;date 105 | 106 | 107 | ##renice命令 renice命令允许用户修改一个正在运行进程的优先权。 利用renice命令可以在命令执行时调整其优先权。 108 | ##其中,参数number与nice命令的number意义相同。(1) 用户只能对自己所有的进程使用renice命令。(2) root用户可以在任何进程上使用renice命令。(3) 只有root用户才能提高进程的优先权 109 | renice -5 -p 5200 #PID为5200的进程nice设为-5 110 | 111 | ##pmap命令用于显示一个或多个进程的内存状态。其报告进程的地址空间和内存状态信息 #pmap PID 112 | pmap 20367 113 | 114 | ##top 动态查看进程的变化。 115 | top 116 | 117 | 118 | ##crontab 任务调度 119 | ##基本格式 : 120 | ##*  *  *  *  *  command 121 | ##分 时 日 月 周 命令 122 | ##第1列表示分钟1~59 每分钟用*或者 */1表示 123 | ##第2列表示小时1~23(0表示0点) 124 | ##第3列表示日期1~31 125 | ##第4列表示月份1~12 126 | ##第5列标识号星期0~6(0表示星期天) 127 | ##第6列要运行的命令 128 | crontab -e ##执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe) 129 | 130 | crontab -r ##删除目前的时程表 131 | 132 | crontab -l ##列出目前的时程表 133 | 134 | crontab file [-u user] ##-用指定的文件替代目前的crontab。 135 | #crontab文件的一些示例 136 | 30 21 * * * /usr/local/etc/rc.d/lighttpd restart ##表示每晚的21:30重启apache。 137 | 138 | 45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart ##表示每月1、10、22日的4 : 45重启apache。 139 | 140 | 10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart ##表示每周六、周日的1 : 10重启apache。 141 | 142 | 0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart ##表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。 143 | 144 | * 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart ##晚上11点到早上7点之间,每隔一小时重启apache 145 | 146 | 147 | 148 |    --------------------------------------------------------------------------------