菜单

Administrator
发布于 2021-09-23 / 1394 阅读
0

linux 常用知识总结

⚪防火墙

查看状态

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防火墙来管理。
处理方法:

  1. vi /etc/docker/daemon.json
    {
    "iptables":false #禁用iptables防火墙
    }
  2. 重启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相关的进程:
16536186191.png

我们直接kill -9 12504 (SCREEN的进程),然后screen -ls可以发现,对应的server变成dead状态:
16536187271.png
此时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:端口号

image.png

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

然后创建定时任务:
16533630611.png

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命令),可以发现就是权限问题:
16536158381.png
此sh执行失败,并不会影响/etc/crontab里的其他定时sh。

存在

在/etc/crontab添加sh脚本的时候,如果不存在也会运行不了的,这会我们有时候执行其他命令时会提示:您在 /var/spool/mail/root 中有邮件。
然后我们查看邮件信息(执行cat /var/spool/mail/root命令),可以发现就是不存在:
16536155371.png
此sh执行失败,并不会影响/etc/crontab里的其他定时sh。

多个sh定时任务/etc/crontab的写法

只需按行即可:
16536157491.png

所用符号表示意思

  • * 星号每的意思
    如:* * * * 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