🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
> 更多常用命令可参考 > https://tool.lu/command/ [TOC] ### 学会查看帮助文档 man ``` man ln ``` ### centos 常用目录 > **/usr/bin/** 存放系统预装的可执行程序。系统升级后,如果重名会被覆盖掉。 > **/usr/local/bin/** 存放自己的可执行程序的地方,系统升级,不会被覆盖,并且local的优先级高于前者。 > 很多源码安装的程序,就需要把执行程序放入该目录 **/usr/bin/** 或 **/usr/local/bin/** > **/usr/local/** 或 **/opt/** :用户下载的软件存放的地方,我比较喜欢使用 **/opt/** ### 源码安装步骤 #### 1. 执行configure,生成Makefile文件 ``` ./configure --prefix=/opt/nginx/ ``` > 此时当前目录下将会生成一个Makefile文件。 > * 注意:--prefix参数指定软件安装目录。当执行make install命令时,会将软件安装在此路径中。 #### 2. 执行make,从Makefile中读取指令,编译源码 ``` make clean; make ``` > 此时make会读取Makefile文件,将源码编译成二进制文件,并存放在当前目录下。 #### 3. 执行make install,将软件安装至指定目录 ``` make install ``` > 此时二进制文件会被安装到先前configure prefix参数设置的路径中去。至此安装完成! ### PHPIZE安装 ~~~ phpize # 生成配置文件 ./configure --with-php-config=/my_php_path/bin/php-config # 配置 make && make install # 编译和安装 ~~~ ### linux 符号 #### 后台执行符号 (&) > 表示任务在后台执行 > vim cron.sh > 表示该shell再同时间启动两个后台进程,该shell可以防止到crontab里进行每分钟调用 ~~~ #!/bin/sh /usr/bin/php /var/www/html/yii2/yii task/todo1 & /usr/bin/php /var/www/html/yii2/yii task/todo2 & ~~~ #### 命令控制符 (&&) > 格式:command1 && command2 > 如果command1执行成功,才会执行command2 #### 管道 ( | ) > 上一条命令的输出,作为下一条命令参数 ~~~ echo 'yes' | wc -l ~~~ ### vim 使用技巧 > 命令模式下 ``` gg # 跳自第一行 G #跳自末尾 dd # 删除当前行 D # 删除光标至行尾 ggdG #删除全部 :set nu # 显示行号 : number #跳转行号 ``` > /usr/bin/php ### 使用RZ 或 SZ ``` yum install -y lrzsz sz #Shell中 下载服务器的文件至本地 rz #Shell中 上传文件至服务器 ``` ### 使用htop > 安装方式 ~~~ yum install htop ~~~ > 使用教程 > 待续中 ### 查看某个命令的路径 ``` which php ``` > /usr/bin/php ### 设置开机启动 ~~~ chkconfig mysqld on #设置mysql进程开机启动 chkconfig iptables off #设置防火墙开机不启动,因为iptables禁用了80端口。 chkconfig -–list # 查看所有的开机启动情况 chkconfig -–list httpd #查看Apache的开机启动情况 # 如下场景,源码方式安装mysql,设置mysqld命令自启动。 cp /opt/mysql/support-files/mysql.server /etc/init.d/mysqld chmod 777 /etc/init.d/mysqld chkconfig mysqld on ~~~ ### 用户组操作 ~~~ groupadd mysql # 添加mysql组 useradd -r -g mysql mysql #添加mysql用户到mysql组 groups mysql #查看mysql用户属于哪个组 chown -R www:www /opt/nginx/ #修改文件所属用户 ~~~ ### 文件权限操作 ~~~ chown -R www:www folder2 #folder2文件夹递归修改用户拥有组和组 chmod -R 777 folder2 # folder2文件夹递归修改为777权限,7 =4(读)+2(写)+1(执行) ll #查看文件权限 #-rwxr-xr-x 1 root root 2405 Jun 5 2017 php-fpm-71 #前10个字母中第一个字母,代表类型“-(文件) / d(文件夹)” #第一组字母 rwx 所有者(user)权限 (读 & 写 & 执行) #第二组字母 r-x 组群(group)权限 (读 & 不可写 & 执行) #第三组字母 r-x 其他人(other)权限 (读 & 不可写 & 执行) ~~~ ### 查找是否安装某个软件 > 一般centos会自带apache,这个时候需要先删除再安装自己的版本 ~~~ rpm -qa | grep http* #RPM下查找是否安装Apache yum list installed | grep http* #YUM下查找是否安装Apache ~~~ ### 软连接 ln -s ~~~ ln -s /var/www.zhuifanba.com/ new_symbolic # ln -s 源文件夹 目标文件夹 ~~~ ### 根据文件名查找 ~~~ find /home/wangkun/ -name robots.txt #根据《文件名》进行查找 find /home/wangkun/ -name '*rob*' #文件名模糊查找 ~~~ ### 文件内容的查看 ~~~ tail -n 500 app.log #查看前500行的内容 tail -n 500 app.log | grep Baiduspider cat app.log | grep Baiduspider #雷同以上 tail -n 500 app.log > 1.log tail -f xx.log #实时查看文件动态变化 #要查找某个东西,也可以用vim,在命令格式里输入“/”,然后输入“apply”,就可以查找到了,查看下一个,用N即可。 ~~~ ### 压缩命名 ~~~ tar zcvf filename.tar.gz dirname #压缩 tar zxvf filename.tar.gz #解压 tar zxvf filename.tar.gz -C haha/ #解压到haha目录 ~~~ ### 下载文件 ~~~ wget http://nginx.org/download/nginx-1.10.3.tar.gz #下载到当前文件夹 wget -O php-7.1.2.tar.gz http://cn2.php.net/get/php-7.1.2.tar.gz/from/this/mirror #下载文件后,重命名为“php-7.1.2.tar.gz” ~~~ ### 删除当前文件夹下的所有文件 ~~~ rm -rf * ~~~ ### 查看linux 内核版本 > 当使用uname -a查看时,如果有x86_64则为64位,否则为32位 ~~~ uname -a #在版本信息中可得知是32位还是64位 > Linux localhost.localdomain 2.6.18-194.el5 #1 SMP Fri Apr 2 14:58:14 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux cat /etc/redhat-release #查看centos版本 > CentOS Linux release 7.3.1611 (Core) ~~~ ### awk的用法 > awk '{动作}' > awk -F '分割符' '{动作}' > 日志内容 ``` 223.104.108.11 - - [03/Nov/2019:22:53:08 +0800] "POST /api/sign/get-sign-award HTTP/2.0" 200 64 "-" "fan bei/1.1.6 (iPhone; iOS 11.2.6; Scale/2.00)" 223.104.108.11 - - [03/Nov/2019:22:53:08 +0800] "POST /api/sign/index HTTP/2.0" 200 3954 "-" "fan bei/1.1.6 (iPhone; iOS 11.2.6; Scale/2.00)" ``` > 测试 ``` cat haha.txt| awk -F ':' '{print $1}' ``` ### NGINX日志分析 > 日志内容 ``` 223.104.108.11 - - [03/Nov/2019:22:53:08 +0800] "POST /api/sign/get-sign-award HTTP/2.0" 200 64 "-" "fan bei/1.1.6 (iPhone; iOS 11.2.6; Scale/2.00)" 223.104.108.11 - - [03/Nov/2019:22:53:08 +0800] "POST /api/sign/index HTTP/2.0" 200 3954 "-" "fan bei/1.1.6 (iPhone; iOS 11.2.6; Scale/2.00)" ``` > https://blog.csdn.net/lupeng0206/article/details/59105790 > 批注: 如果要统计实时的,可以先将tail -f 的内容输入到haha.txt文档里,然后再对haha.txt进行统计 ``` tail -f access.log >> haha.txt ``` > 1. 统计qps > awk -F 指定分割字符串(不带默认为空格),获得最终的访问时间,然后再进行uniq合并计数 ``` cat haha.txt |awk -F ' ' '{print $4}'|uniq -c|sort -k1nr|more ``` > 2. 查询访问最频繁的URL ``` cat haha.txt |awk '{print $7}' |sort | uniq -c |sort -k1nr|more ``` > 3. 查询访问最频繁的IP ~~~ cat haha.txt |awk '{print $1}' |sort | uniq -c |sort -k1nr|more ~~~ > 4. 根据时间段统计查看日志 ~~~ cat access.log| sed -n '/14\/Mar\/2015:21/,/14\/Mar\/2015:22/p'|more ~~~ > 6. 根据某接口的统计 ~~~ cat haha.txt|grep 'demo.php' ~~~ ### 日志分析 > 更多参考:http://www.cnblogs.com/xd502djj/archive/2011/03/01/1968041.html ~~~ grep -r "phpfpm_71_status" /www/server/ # 查找某个目录下包含“xx关键词” grep 'Baiduspider' * # 当前文件夹下的所有文件,含有“Baiduspider”的打印出来 grep 'Baiduspider' -r -c -i # ( -r 当前文件夹下进行递归) ( -c 显示总共有多少行被匹配到了) (-i 忽略大小写) cat www.zhuifan8.com.log | grep 'Baiduspider' # 该文件含有“Baiduspider”的打印出来 cat haha.log | grep 'Baiduspider' -c # 统计haha.log里含有多少个“Baiduspider”访问记录 cat haha.log | grep 'Baiduspider' | wc -l #同上,使用的是wc命令进行行数的统计 cat www.zhuifan8.com.log |grep 'Baiduspider' | grep '24/Aug' #既统计"Baiduspider"又统计“日期(24号)”的数据 cat www.zhuifan8.com.log |grep 'Baiduspider' | head -n 10 # 读取"Baiduspider"访问记录的前10条。最后10条,可使用 tail -n 10 cat www.zhuifan8.com.log |grep 'Baiduspider'|awk '{print $7}'|sort|uniq -c|sort -r #统计被百度访问次数访问的页面记录 cat www.zhuifan8.com.log |grep 'Baiduspider'|awk '{print $7}'|sort|uniq -c|sort -r|awk '$1>100{print $1,$2}' #统计访问次数超过100的页面记录 ~~~ ### 磁盘情况查看 (磁盘空间不足排查) [概要查询] > -h :√ human-readable 人类可阅读 > -s :√ summarize 只显示一条总和数据:所有文件夹的大小总和,默认情况下,是递归显示所有文件夹的数据大小。 ~~~ df -h #disk free,查看整体磁盘空间大小情况 du -sh /* # disk useage先查看根目录下,所有文件夹占用情况 du -sh /usr/* # 当发现usr占用比较大,就查看其下面的占用情况 du -sh /usr/local/* # ....以此类推 ~~~ ### top命令 [细节查询] > top摘要可以看CPU的情况以及问题所在(如是IO问题,还是系统CPU资源短缺),以及内存概况。 > 按 1:则显示具体的几核cpu使用情况 > 按 P:按CPU使用率进行排序 > 按 M:按内存使用率进行排序 ~~~ top top -d 0.5 # 将以0.5秒的时间间隔刷新数据 top -u www #查看www用户的进程情况 ~~~ > **摘要详解** > us:(user cpu time) 用户模式消耗的 CPU 时间百分比。该值较高时,说明用户进程消耗的 CPU 时间比较多,比如,如果该值长期超过 50%,则需要对程序算法或代码等进行优化。 > sy:(system cpu time) 内核模式消耗的 CPU 时间百分比。 > wa:(io wait cpu time) IO 等待消耗的 CPU 时间百分比。该值较高时,说明 IO 等待比较严重,这可能磁盘大量作随机访问造成的,也可能是磁盘性能出现了瓶颈。 > id:(idle cpu time) 处于空闲状态的 CPU 时间百分比。如果该值持续为 0,同时 sy 是 us 的两倍,则通常说明系统则面临着 CPU 资源的短缺。 > **操作命令** > **A)** 按 1,监控每个cpu的各自占用情况 > **A)** 按大写 P,监控结果按 CPU 倒序 > **A)** 按大写 M,监控结果按 MEM 倒序 > **A)** ↑↑↑ 找占用内存或CPU过高的进程,根据对应系统日志和程序自身相关日志,做进一步排查分析,以判断其占用过高的原因 > **B)** 输入小写 k,再输入pid,再回车确认,即可快速终止的对应pid进程 > **C)** load average 是对 CPU 负载的评估,其值越高,说明其任务队列越长,处于等待执行的任务越多。 出现此种情况时,可能是由于僵死进程导致的。可以通过指令 ps -aux 查看是否存在 D 状态进程。D 状态是指不可中断的睡眠状态。该状态的进程无法被 kill,也无法自行退出。只能通过恢复其依赖的资源或者重启系统来解决。重启系统后,再去排查问题所在 https://blog.csdn.net/m0_37886429/article/details/78529681 ### ps命令 [细节查询] > 查询出来的结果集参数详解: > PID:进程ID > %CPU:占用CPU百分比 > %MEM:占用内存百分比 > RSS:占用物理内存大小 (以这个为主,单位kb) > VSZ:占用虚拟内存大小 (单位kb) > STAT:进程状态 (D 不可中断 usually IO / R 正在运行,或在队列中的进程 / S 处于休眠状态),这个状态同样适用于top里的s状态 ~~~ ps aux | grep nginx #查找nginx的进程情况 (可查看nginx的worker进程数,以及对应占用的CPU和内存情况) ps aux | grep php-fpm #查找fpm的进程情况 (可查看fpm进程数,以及对应占用的CPU和内存情况) ps aux | grep mysql #查找mysql的进程情况 (可查看mysql占用的CPU和内存情况) ps aux | grep php-fpm | grep -v grep | grep -v master | awk '{sum+=$6} END {print sum}' #php-fpm内存占用量 ps aux | sort -rn -k3 | head -n 10 #查看CPU占用最大的前10条数据 ps aux | sort -rn -k4 | head -n 10 #查看内存占用最大的前10条数据 ps 2881 #查看pid为2881的ps详情 ~~~ > 找到了问题的pid,即可进行强制关闭 > 有时候找出的问题进程是多个,就需要批量杀进程。可自行百度。 ~~~ ps 2881 kill -9 2881 #关闭php-fpm,2881为pid ~~~ ### netstat管理 [细节查询] > 用来打印Linux中网络系统的状态信息,可让你得知整个Linux系统的网络情况 ~~~ netstat -anltp |grep :80 #假设(PID)为2881 ~~~ > netstat找出DDOS攻击并防御 ~~~ netstat -anltp | grep ":80" | grep ESTABLISHED #找出最多链接的IP iptables -A INPUT -s 221.238.196.83 -p tcp -j DROP #防火墙拒绝该IP ~~~ > 洪水攻击的防范 ?? ### ddos / cc攻击防范 ~~~ top #1. 先看CPU以及内存情况,按P或M进行排序,如果占用高的进程是nginx tail -f access.log #2. 实时查看是不是有人在ddos ~~~ ### PING测试网络 ~~~ yum install iputils ping www.99liwu.com ping www.99liwu.com -t ~~~ ### Crontab ~~~ vim /etc/crontab #编辑crontab文件 service crond status #查看crontab服务状态 service crond start / stop / restart #手动操作crontab服务 chkconfig -–list crond #查看crontab的开机启动情况 tail -f /var/log/cron # 查看日志 基本格式 : * *  *  *  *  command 分 时  日  月 周  命令 第1列表示分钟1~59 每分钟用*或者 */1表示 第2列表示小时1~23(0表示0点) 第3列表示日期1~31 第4列表示月份1~12 第5列标识号星期0~6(0表示星期天) 第6列要运行的命令 crontab文件的一些例子: 30 1 * * * /usr/local/etc/rc.d/lighttpd restart 上面的例子表示每晚的1:30重启apache。 0 */1 * * * /usr/local/etc/rc.d/lighttpd restart 每一小时重启apache */1 * * * * /usr/local/etc/rc.d/lighttpd restart 每分钟重启apache */30 * * * * /usr/sbin/ntpdate 210.72.145.44 每半小时同步一下时间 ~~~ 继续参考: http://www.njxblog.com/2016/03/linux-shell%E5%8F%8A%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4%E7%AE%80%E4%BB%8B/