⚪防火墙
查看状态
systemctl status firewalld
打开
systemctl start firewalld
关闭
systemctl stop firewalld
重载配置
firewall-cmd --reload
开机禁用
systemctl disable firewalld
开机启用
systemctl enable firewalld
查看开机是否启用
systemctl is-enabled firewalld
开放TCP端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent;
firewall-cmd --zone=public --remove-port=3306/tcp --permanent;
需更新或重启生效
开放某个服务
firewall-cmd --permanent --zone=public --add-service=ssh
需更新或重启生效
查看已开放的端口
firewall-cmd --zone=public --list-ports
查看已开放的IP
firewall-cmd --zone=public --list-sources
查看已开放的所有信息
firewall-cmd --zone=public --list-all
更新防火墙规则
firewall-cmd --reload
查看区域信息
firewall-cmd --get-active-zones
只限制部分IP进行访问
firewall-cmd --permanent --zone=public --add-source=192.168.1.100/32
firewall-cmd --permanent --zone=public --remove-source=192.168.1.100/32
需更新或重启生效
注意,如果有使用到docker,其容器运行的应用纵使映射到宿主机且firewalld没有开放此端口,外面还是能否访问的通的,这是因为docker启动会自动调用iptables防火墙来作为管理,所以即使我们开启了firewalld防火墙也不起作用。处理方法可以禁用iptables防火墙,使用firewalld防火墙来管理。
处理方法:
- vi /etc/docker/daemon.json
{
"iptables":false #禁用iptables防火墙
}- 重启docker
systemctl restart docker
⚪查看某个程序占用的线程数
有时候我们需要排查问题,可能需要查看某个程序占用的线程数,方法如下。
方式一
cat /proc/[pid]/status
展示结果中,Threads后边对应的数字就是进程拥有的线程数量
[pid]替换为查询出来的程序的pid,可用ps指令查出。
方式二
ps hH p [pid]|wc -l
[pid]替换为查询出来的程序的pid,可用ps指令查出。
⚪linux下实时打印tomcat日志
cd /usr/local/tomcat9/logs
tail -f catalina.out
tail指令默认只会显示蛮少的行数,可以加参数-n 100类似的来显示更多的行。
此外还有其他参数自行百度。
⚪磁盘空间满了处理方法
简单看一下大概
df -h
详细的查看哪个目录占用过大
从/根目录开始,执行以下命令,看到哪个目录占用过大,再进入,再执行此命令看哪个目录过大,不断执行,找出占用最大的目录。
du --max-depth=1 -h
⚪复制
复制文件到某个文件夹
cp file folder
复制文件到某个文件夹不提示覆盖
一般如果目标目录有同样命名的文件,会提示确认覆盖的提示,我们得输入y才能覆盖复制。如果不想提示,则使用\cp指令。
\cp file folder
复制某个文件夹的所有文件到某个文件夹(不含目录)
cp folder/* folder
如果需要覆盖文件则使用\cp
复制某个文件夹的所有文件到某个文件夹(含目录)
-r递归复制,用于复制目录。
cp -r folder/* folder
如果需要覆盖文件则使用\cp
复制某个文件夹到某个文件夹(含目录)
cp -r folder folder
如果需要覆盖文件则使用\cp
⚪删除
删除文件
rm file
删除目录
rm -r folder
删除目录且不提示
-f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。
rm -rf folder 或者rm -r -f folder
⚪linux下运行tomcat的方式
后台运行
./startup.sh
./shutdown.sh
此指令一般不配合screen指令。
此命令运行的tomcat的logs目录的日志会写入。
前台运行
./catalina.sh run
前台运行的,按ctrl+c程序就结束了,可以配合screen实现后台运行。
如:screen -S tomcat ./catalina.sh run
此命令运行的tomcat的logs目录的日志不会写入。
⚪完全关闭tomcat的方法
有时候执行./shutdown.sh或者./catalina.sh run按ctrl+c,tomcat的程序没有完全结束,这个时候需强制关闭。
先执行以下命令找到tomcat的相关进程,进程号为查询出的第二列:
ps -ef | grep tomcat
然后kill掉相关进程:
kill -9 进程号
⚪阿里云linux上安装与配置Mysql
https://www.cnblogs.com/wangshen31/p/9556804.html
⚪服务
扫描是否安装某些服务
rpm -qa|grep xxxx
⚪其他
搜索文件夹
find / -name xxxx
可执行文件如果要全局都可以使用,可以直接复制到/usr/bin中
⚪linux下的部分目录解读
/opt
/opt目录用来安装附加软件包,是用户级的程序目录,可以理解为D:/Progrem Files。
当你不需要时,直接rm -rf掉即可。在硬盘容量不够时,也可将/opt单独挂载到其他磁盘上使用。
/usr
/usr:系统级的目录,可以理解为C:/Windows/。
/usr/lib
/usr/lib:理解为C:/Windows/System32。
/usr/local
/usr/local:用户级的程序目录,可以理解为C:/Progrem Files/。用户自己编译的软件默认会安装到这个目录下。 这里主要存放那些手动安装的软件,即不是通过“新立得”或apt-get安装的软件。
/usr/src
/usr/src:系统级的源码目录。
/usr/local/src
/usr/local/src:用户级的源码目录。
/etc
etc是etcetera的意思,意思为附加,杂物等。
一般用来放置系统程序/用户程序的配置文件,比如mysql的配置文件就在/etc/my.cnf。
/mnt和/dev和/media
1.dev
设备文件,几乎任何硬件外设都会在这里面有对应的文件,包括硬盘,U盘,光驱,串口,打印机等等。只要硬件连接上了电脑,并且正常驱动起来,/dev/下就会产生对应的文件。
2.media
是自动挂载的目录,比如我们的U盘插在ubuntu下会自动挂载,就会在/media下生成一个目录,这个目录就是U盘所在目录,或者说文件。
3.mnt
是被系统管理员使用,手动挂载一些临时媒体设备的目录。
你可以把U盘目录手动挂载到/mnt下,U盘目录也会自动挂载在/media目录下
/home和/root
/home为不同用户对应不同的用户目录。
/root为root用户对应的超级权限者的用户主目录。
/var
var 是 variable(变量) 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。
比如,第一次安装mysql时,就会生成日志文件(里面包含初始化密码):/var/log/mysqld.log
⚪软链接
创建软链接
ln -s 【目标目录】 【软链接地址】
【目标目录】指软连接指向的目标目录下,【软链接地址】指“快捷键”文件名称,该文件是被指令创建的
删除软链接
rm -rf 【软链接地址】
注意,删除不是带/,不然就是删除源目录的所有文件了,比如rm -rf /home/test和rm -rf /home/test/
,前者是删除软连接目录,后者是删除源目录的所有文件。
修改软链接
ln -snf 【新目标目录】 【软链接地址】
⚪给可执行文件创建桌面快捷图标
对于root用户,在/root/Desktop/下创建xx.desktop文件:
对于非root用户,在/home/用户名/Desktop/下创建xx.desktop文件:
#!/usr/bin/env xdg-open
[Desktop Entry]
Encoding=UTF-8
Name=Eclipse
Comment=Eclipse IDE for C/C++
Exec=/opt/eclipse/eclipse
Icon=/opt/eclipse/icon.xpm
Terminal=false
StartupNotify=true
Type=Application
Categories=Utility;TextEditor;Development;IDE;
Keywords=Eclipse;
⚪后台运行Jar(nohup命令)
https://www.cnblogs.com/linnuo/p/9084125.html
nohup test.jar > log.txt 2>&1 &
解释
- nohup用来忽略挂断信号(SIGHUP)。
- >是输出到文件中, 如果文件存在, 则原来的内容被清空, 不存在则创建文件。
- >>是把输出追加到文件中, 如果文件存在, 追加到末尾, 不存在则创建文件。
- &表示后台运行,用来忽略中断信号(SIGINT),一般中断信号比如ctrl+c或者kill。
- 2>&1表示将标准错误输出重定向到标准输出,即输出到log.txt,> log.txt 2>&1这个顺序不能变。
说明
- 在使用nohup时,>重定向的文件,在不停止脚本前无法操作文件内容,>>则可以。
- 0,1,2分别代表stdin标准输入,stdout标准输出,stderr标准错误。具体看linux的文件描述符知识。
- 如果不想输出(打印)到log.txt文件,则可以把log.txt替换成/dev/null。
- 2>&1可以不携带,不影响后台运行程序,就是不带的话,会打印'nohup: 忽略输入重定向错误到标准输出端',然后再按下回车/ctrl+c再能重新输入命令。
- 通过>和>>的说明,上面指令用>和>>都不影响后台运行程序,但是2>&1就不能表示成2>>&1了。
- 如果只使用&而不配合nohup的话,我们运行的终端关闭,程序也会对应关闭。因为终端关闭会发出挂断信号。
- 通过实现可以可以发现:同时开启两个终端,其中一个终端执行test.jar > log.txt 2>&1 &,然后按ctrl+c,再执行jobs命令可以看到任务,在另外一个终端执行jobs则看不到。
- 通过jobs命令显示后台程序,然后通过'fg 编码'命令,可以重新进入。
- 只使用&而不配合nohup的话,终端会一直打印显示程序的打印。
参考
2>&1到底是什么意思?
Linux命令 nohup、&、>、>> 解析
关于nohup和&
Linux jobs命令:查看当前终端放入后台的工作
⚪后台运行Jar(screen命令)
启动
screen java -jar xxx.jar
其中screen后面携带要运行的命令行。
启动并指定此窗口的名称
screen -S javaname java -jar xxx.jar
其中-S后面携带的javaname为要指定的名称。
退出当前窗口
在当前窗口下, 按住ctrl+a,然后再按d键。
启动后,我们需要退出此运行程序的窗口。
查看当前列表的窗口有哪些
screen -ls
进入对应的程序的窗口
screen -r 1234
1234为利用screen -ls命令查出的对应的窗口的ID。
结束对应的窗口
screen -S 1234 -X quit
1234为利用screen -ls命令查出的对应的窗口的ID。
清除无效的窗口
由于某种原因其中一个会话死掉了(例如人为杀掉该会话),这时screen -list会显示该会话为dead状态。
使用screen -wipe命令清除所有dead状态的会话。
dead状态使用screen -S 1234 -X quit是没有办法清除的。
Attached状态
screen运行得正常状态应该为Detached,如果出现Attached,使用screen -r 1234是无法进入得,这时候加上-D参数即可,即screen -D -r 1234
1234为利用screen -ls命令查出的对应的窗口的ID。
-D是断开screen并踢掉前一用户,通过测试发现,我们利用screen -r进入某个窗口,再利用screen -ls命令查出的对应的窗口的状态就是会为Attached了,只有ctrl+a 然后按d ,状态才是空闲。
实验
当我们利用screen跑程序时,如screen -S server java -jar GzServer.jar,我们通过ps -ef | grep java查出,可以看到,存在两个跟GzServer.jar相关的进程:
我们直接kill -9 12504 (SCREEN的进程),然后screen -ls可以发现,对应的server变成dead状态:
此时ps -ef | grep java,可以看到另外一个跟GzServer.jar相关的进程也不存在了。
我们直接kill -9 12505 (非SCREEN的进程),然后screen -ls可以发现,对应的server直接不存在了,也没有dead状态。
这说明可能直接kill掉非SCREEN的进程会好点。
⚪查找同个局域网内的设备IP/MAC
命令
cmd下执行arp -a
⚪Linux 查看端口占用情况
lsof
lsof -i:端口号
netstat
netstat -tunlp | grep 端口号
-t (tcp) 仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化为数字
-l 仅列出在Listen(监听)的服务状态
-p 显示建立相关链接的程序名
杀死对应的进程
kill -9 PID
PID通过lsof和netstat都可以查出来
查看程序对应本地路径
ps -ef | grep PID
更多
https://www.runoob.com/w3cnote/linux-check-port-usage.html
⚪查看redis是否在运行
ps aux | grep redis-server
⚪查看mysql是否在运行
service mysqld status
⚪查看命令对应的程序位置
which ffmpeg 或者 whereis ffmpeg
其中ffmpeg就是带查找的程序名
或者:find / -name xxx
比如找redis,则 find / -name redis-server
⚪抓包
tcpdump -i eth0 -w file.pcap
eth0为具体的网卡名称,file为要命名的文件名。
⚪定时执行脚本
实时查看日志,看定时任务是否有在正常执行
tail -f /var/log/cron
创建定时任务
vi /etc/crontab
然后创建定时任务:
root /opt/gbServer/checkServerTcp.sh 中的root为用户名,/opt/gbServer/checkServerTcp.sh为具体的sh脚本。
此定时是作用就是每一分钟执行一次脚本,*/1代表的就是每一分钟,不然直接1代表的就是第一分钟。
checkServerTcp.sh示例:
#!/bin/bash
#文件名称
JARFILE=GzServer.jar
#阈值
CLOASENUM=5
#判断是由否过多的close_wait,是则重启gbServer
tcp="$(netstat -an |grep CLOSE_WAIT | awk '/^tcp/ {++S[$NF]} END {for(a in S) print S[a]}')"
echo "$(date +%Y-%m-%d\ %H:%M:%S) close_wait num : $tcp" >> /opt/ServerFiles/logs/tcpCheckLog.txt
if [ ! $tcp ]
then
echo "$(date +%Y-%m-%d\ %H:%M:%S) null overflow" >> /opt/ServerFiles/logs/tcpCheckLog.txt
else
if [ $tcp -gt $CLOASENUM ]
then
echo "$(date +%Y-%m-%d\ %H:%M:%S) overflow , restart gbServer" >> /opt/ServerFiles/logs/tcpCheckLog.txt
#杀死gbServer并重启
ps -ef |grep $JARFILE |grep -v "grep"|awk '{print $2}'|xargs kill -9
cd /opt/gbServer
nohup java -jar /opt/gbServer/GzServer.jar >> /dev/null &
exit 0
else
echo "$(date +%Y-%m-%d\ %H:%M:%S) no overflow" >> /opt/ServerFiles/logs/tcpCheckLog.txt
fi
fi
创建完需要重启才能生效
service crond restart
实时生效定时任务
crontab -e
然后跟上面图片的一样编写语句即可,这样会实时生效的,无需其他处理。
发送邮箱
可以在crontab -e的首行增加:
MAILTO="your-email@example.com"
之后就会将每一行执行的输出结果发送到邮箱。
前提需要安装sendmail:
yum install sendmail
systemctl start sendmail
systemctl enable sendmail
查看邮箱发送记录:
tail -f /var/log/maillog
注意
权限
sh脚本要记得给权限,不然定时任务会运行失败,并且也会导致其他的sh也不能正常运行:
chmod +x xxxx.sh
然后我们查看邮件信息(执行cat /var/spool/mail/root命令),可以发现就是权限问题:
此sh执行失败,并不会影响/etc/crontab里的其他定时sh。
存在
在/etc/crontab添加sh脚本的时候,如果不存在也会运行不了的,这会我们有时候执行其他命令时会提示:您在 /var/spool/mail/root 中有邮件。
然后我们查看邮件信息(执行cat /var/spool/mail/root命令),可以发现就是不存在:
此sh执行失败,并不会影响/etc/crontab里的其他定时sh。
多个sh定时任务/etc/crontab的写法
只需按行即可:
所用符号表示意思
- * 星号每的意思
如:* * * * 1 在每个周一时的每分钟执行一次命令 - - 减号连续一段时间
如:00 17-19 * * * cmd 每天下午17点,18点,19点执行一次命令 - , 逗号多个时间段
如:00 10-11,17-19 * * * cmd 每天的上午10,11点整,下午的17,18,19点整执行一次命令 - /n n 代表数字,指每隔 n 时间执行一次
如:*/2 * * * * cmd 每隔 2 分钟执行一次命令
实现秒执行
需要配置sleep,每10秒执行一次样例:
* * * * * root sleep 10;/opt/gbServer/masterFloatIP.sh
* * * * * root sleep 20;/opt/gbServer/masterFloatIP.sh
* * * * * root sleep 30;/opt/gbServer/masterFloatIP.sh
* * * * * root sleep 40;/opt/gbServer/masterFloatIP.sh
* * * * * root sleep 50;/opt/gbServer/masterFloatIP.sh
/etc/crontab文件和crontab -e命令区别
https://www.cnblogs.com/hjcan/p/11459548.html
执行时加锁
http://t.zoukankan.com/imzye-p-5493817.html
指令
- service crond start //启动服务
- service crond stop //关闭服务
- service crond restart //重启服务
- service crond reload //重新载入配置
- service crond status //查看服务状态
⚪linux邮件
https://blog.csdn.net/sayyy/article/details/123349791
⚪tar解压压缩
压缩
tar -zcvf 压缩文件名.tar.gz 被压缩文件/文件夹
解压
tar -zxvf 压缩文件名.tar.gz
⚪时区问题
参考:
CentOS设置系统时间,重启后失效问题
https://blog.csdn.net/INK_FUNC/article/details/103459878
⚪脚本结束对应程序
#!/bin/bash
JAR_PATH=softname.jar
PID=$(ps -ef | grep $JAR_PATH | grep -v grep | awk '{ print $2 }')
if [ -z $PID ]
then
echo program not running
else
echo kill $PID
kill -9 $PID
fi
⚪centos7命令修改分辨率
xrandr //显示列表
xrandr -s 0 //0是索引,代表分辨率列表中的第一个分辨率
⚪实时上下行网速监控
watch+ifconfig
使用watch+ifconfig的方式可以不需要安装第三方软件。
使用
watch -d -n 1 ifconfig
RX: 接收流量
TX: 发送流量
计算方法:KB = 数值/1000,MB = 数值/100000
nload
安装
yum install nload
使用
nload
nload -m //只显示统计数据,不显示流量图
nload eth0 -m //指定网卡
iftop
安装
yum install iftop
使用
iftop
vnstat
安装
yum install vnstat
使用
vnstat -l