在工作中遇到的有关Linux的问题

网络

ifconfig 个字段的含义

此linux服务器为:kylin

接口名称 类型 用途
enp180s0f2 物理以太网接口 物理网络连接
enp25s0f0 物理以太网接口 物理网络连接
vethd989592 虚拟以太网接口对 容器/虚拟机网络通信
vethdc1bcea 虚拟以太网接口对 容器/虚拟机网络通信
virbr0 虚拟网桥 虚拟机NAT网络

关闭防火墙

以下是图片内容转换成的可复制Markdown格式:

  1. 命令行界面输入命令 systemctl status firewalld.service 并按下回车键。

  2. 在下方查看输出结果,若显示 active (running),说明防火墙已开启。

  3. 输入关闭防火墙命令:

    1
    systemctl stop firewalld.service
  4. 再次检查防火墙状态:

    1
    2
    3
    4
    5
    6
    7
       systemctl status firewalld.service
    ```
    若出现 `inactive (dead)`,说明防火墙已关闭。

    5. 永久禁用防火墙服务:
    ```bash
    systemctl disable firewalld.service

环境

python环境配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 1. 更新本地软件包索引(让 apt 知道有哪些最新版本的软件包可用)
apt update

# 2. 安装 Python 虚拟环境管理工具(python3-venv),-y 表示自动确认安装
apt install -y python3-venv

# 3. 创建项目目录(-p 确保父目录存在,若目录已存在也不会报错)
mkdir -p /opt/meeting-file-sync

# 4. 进入项目目录
cd /opt/meeting-file-sync

# 5. 在该目录下创建一个名为 venv 的 Python 虚拟环境
# (这是独立于系统的 Python 环境,避免污染系统 Python)
python3 -m venv venv

# 6. 激活虚拟环境(激活后,终端前缀会显示 (venv),且 python/pip 都指向虚拟环境)
source venv/bin/activate

# 7. 升级虚拟环境中的 pip 到最新版本(确保安装包时兼容性更好)
pip install --upgrade pip

# 8. 在虚拟环境中安装 pymysql 和 requests 包(不会影响系统全局)
pip install pymysql requests

# 9. 测试python环境
python -c "import pymysql, requests; print('OK')"

# 10. 测试需要下载的文件网络环境
curl -I "https://file.scjwwd.com.cn/zhjz24/20260811/2211731245568.JPG"

安装FTP

外网安装

1
2
3
4
5
6
7
8
9
10
11
12
# 更新软件包列表,确保能获取到最新的软件源信息
sudo apt update

# 安装 vsftpd(Very Secure FTP Daemon)FTP 服务端,-y 自动确认安装
sudo apt install vsftpd -y

# 查看 vsftpd 服务的运行状态,确认是否正常启动
sudo systemctl status vsftpd

# 用 vim 编辑器打开 vsftpd 的主配置文件(后续会进行修改)
vim /etc/vsftpd.conf

vsftpd.conf 需要修改的配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 允许上传文件(写入权限),若设为 NO 则只读
write_enable=YES
# 允许对 chroot 目录有写权限。当 chroot_local_user=YES 时,
# 如果用户家目录本身可写,默认会拒绝登录。开启此项可解除限制。
allow_writeable_chroot=YES
# 将本地用户禁锢在各自的家目录中,防止越权访问其他系统目录,提升安全性
chroot_local_user=YES
# 启用被动模式(PASV),适用于客户端位于防火墙/NAT 后的场景
pasv_enable=YES
# 被动模式数据端口范围(最小端口),甲方安全策略指定从 30002 开始
pasv_min_port=30002
# 被动模式数据端口范围(最大端口),甲方安全策略指定到 31000 结束
pasv_max_port=31000
# FTP 控制端口(监听端口),改为 30001 而非默认的 21,甲方指定
listen_port=30001

继续后续工作:

1
2
3
4
5
6
7
8
9
10
11
12
# 创建专用 FTP 用户 ftpuser,指定家目录为 /data/meeting-files/,并禁止该用户登录系统 Shell(仅用于 FTP)
sudo useradd -d /data/meeting-files/ -s /sbin/nologin ftpuser
# 为 ftpuser 设置密码(执行后会提示输入密码)
sudo passwd ftpuser
# 安装 FTP 客户端工具(用于后续测试连接,非必须但方便调试)
sudo apt install ftp -y
# 使用 ss 命令查看当前系统监听的 TCP 端口,过滤出 30001,确认 vsftpd 是否已监听新端口
sudo ss -tlnp | grep 30001
# 再次为 ftpuser 设置密码(如果之前未设置或需更改,可执行此命令)
sudo passwd ftpuser
# 递归修改 /data/meeting-files/ 目录的所有者和所属组为 ftpuser,确保 FTP 用户有读写权限
sudo chown -R ftpuser:ftpuser /data/meeting-files/

内外安装

参考:https://blog.csdn.net/Wang_Pink/article/details/134977752
资源网址:http://rpmfind.net/linux/rpm2html

脚本

执行脚本

1
2
3
4
5
6
# 切换到脚本目录
cd /opt/meeting-file-sync
# 脚本执行环境+命令
./venv/bin/python sync_meeting_file.py full
# 也可以后台运行脚本,
nohup ./venv/bin/python sync_meeting_file.py full > sync.log 2>&1 &
  • nohup:全称 No Hang UP,不挂断
  • > sync.log:重定向标准输出
  • 2>&1:重定向错误输出
    • 2:代表标准错误输出(stderr)的文件描述符编号(Linux 中:0=标准输入,1=标准输出,2=标准错误)。
    • >&:将左边的文件描述符(2)复制/重定向到右边的目标(1)。
    • 1:代表标准输出(stdout)。
    • &:最后的&,表示放在后台执行

设置tomcat 开机自启

1
2
3
4
5
crontab -e
# 在其中添加 下面这行代码(startup.sh 自行更好,只有一行时 & 不要) 保存
reboot sudo -u root /home/debian/tomcat9/bin/startup.sh start &
# 版本为 Kylin Linux ,用下行代码
@reboot /home/windit_data/dataTransfer/apache-tomcat-8.5.100/bin/startup.sh start

调试tomcat

取到tomcat bin 目录下,调用下面这个命令,可以前台运行

1
sh catalina.sh run

启动脚本

1
nohup java -jar /path/XXX.jar &

设置 jar 开机自启

编写脚本文件
start.sh

1
2
3
4
5
6
7
8
#!/bin/bash
nohup java -server -jar XXX.jar > /dev/null 2>&1 &
#nohup 确保即使用户退出登录,Java进程也会继续运行。
#java -server -jar XXX.jar 启动指定的JAR文件。
#-server 是一个JVM选项,表示以服务器模式运行JVM。服务器模式下的JVM通常会进行更多的优化,适合长时间运行的应用程序。
#> /dev/null 将标准输出(控制台输出)丢弃。
#2>&1 将标准错误(错误信息)也丢弃。
#& 将整个命令放在后台执行。

进入 rc.d目录

1
2
cd /etc/rc.d
cat rc.local

执行命令:vim rc.local , 修改rc.local 。按【i】键进入编辑模式,在最后添加代码:

1
2
3
4
5
6
7
8
9
10
11
sleep 60
cd /myApp/test
sh /myApp/test/startup.sh

#第一句为进入你项目所在的目录,我这里把项目放在/myApp/test下
#第二句执行该目录下的sh文件

##说明
#如果不提前进入所在目录,直接执行第二句,也会开机自启动,但是日志文件会在根目录下的log文件中。只有先进入,再执行,项目的日志文件才会在test文件夹下

##test文件中有jar包、startup.sh、以及jar包的日志文件logs

设置权限:

1
2
chmod +x /etc/rc.d/rc.local
chmod +x /myApp/test/startup.sh

定时任务

cron安装

1
2
3
4
5
# ubuntu
sudo apt update # 更新软件包列表[reference:0][reference:1]
sudo apt install cron -y # 安装 cron 服务[reference:2][reference:3]
sudo systemctl start cron # 启动服务[reference:10]
sudo systemctl enable cron # 设置开机自启[reference:11]

脚本设置

1
2
3
4
5
6
crontab -e
# 凌晨四点
0 4 * * * cd /opt/meeting-file-sync && ./venv/bin/python sync_meeting_file.py incremental

# 检测是否生效,确认输出中显示 0 4 * * * ... 即为正确
crontab -l

env:环境,比如python环境

java linux 启动和关闭脚本

启动: sh server.sh start
关闭: sh server.sh stop
server.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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
#!/usr/bin/env sh
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.


APP_HOME=$(cd $(dirname $0)/../;pwd) # shell脚本必须指定,因为脚本不会自动加载环境变量,不写的话导致出现此错误
app=$APP_HOME'/app.jar' #jar包的决定路径
args='-server -Xms4096m -Xmx4096m -XX:PermSize=512m -XX:SurvivorRatio=2 -XX:+UseParallelGC' #java程序启动参数,可不写
args1='--spring.config.location='$APP_HOME'/config/application.properties --logging.config='$APP_HOME'/config/logback-spring.xml --db.file='$APP_HOME'/config/config.db --logging.file.path='$APP_HOME'/logs/'
LOGS_FILE=/dev/null # 把打印的日志扔进垃圾桶

cmd=$1 #获取执行脚本的时候带的参数
pid=`ps -ef|grep java|grep $app|awk '{print $2}'` # 抓取对应的java进程



startup(){
aa=`nohup java -jar $args $app $args1 >> $LOGS_FILE 2>&1 &`
echo "nohup java -jar $args $app $args1 >> $LOGS_FILE 2>&1 &"
}

if [ ! $cmd ]; then
echo "Please specify args 'start|restart|stop'"
exit
fi

if [ $cmd = 'start' ]; then
if [ ! $pid ]; then
startup
else
echo "$app is running! pid=$pid"
fi
fi

if [ $cmd = 'restart' ]; then
if [ $pid ]
then
echo "$pid will be killed after 3 seconds!"
sleep 3
kill -9 $pid
fi
startup
fi

if [ $cmd = 'stop' ]; then
if [ $pid ]; then
echo "$pid will be killed after 3 seconds!"
sleep 3
kill -9 $pid
fi
echo "$app is stopped"
fi