Linux磁盘管理
推荐链接:
Linux磁盘管理—-分区格式化挂载fdisk、mkfs、mount
相关命令:
菜鸟 df 命令 、 df 命令 、 df (Unix) - 维基百科
菜鸟 du 命令 、 du 命令 、 du (Unix) - 维基百科
菜鸟 fdisk 命令 、 fdisk 命令 —————————— parted 命令 、 GNU Parted - 维基百科
菜鸟 mount 命令 、 mount 命令 、 mount (Unix) - 维基百科 —> 临时挂载
Oracle分析函数
推荐链接
https://www.oraclejsq.com/article/010101878.html
https://www.cnblogs.com/linjiqin/archive/2012/04/04/2431975.html
语法结构
1 | select table.column, |
语法解析:
Linux用户管理和用户组管理
Linux常用命令
软件包管理
软件包及依赖查询网站
Ubuntu
1 | # 查看依赖 |
Centos
1 | # 查看依赖 |
dpkg
https://man.archlinux.org/man/dpkg
1 | dpkg --help |
apt-get、apt-cache、apt
https://man.archlinux.org/man/apt-get
https://man.archlinux.org/man/apt-cache
https://man.archlinux.org/man/apt
简单来说:
apt-get:处理包的安装、升级和移除,是传统的、面向脚本的工具。apt-cache:用于查询本地软件包信息(数据库),例如搜索、查看依赖。apt:是较新的前端工具,结合了apt-get和apt-cache的最佳功能,并提供了更美观、更友好的用户体验。
三个 APT 工具的详细对比
| 工具 | 主要功能/定位 | 典型命令示例 | 特点总结 |
|---|---|---|---|
apt-get |
核心操作:负责从软件源获取和安装软件包,处理实际的系统更改。传统工具,适合脚本编写。 | apt-get install <package> apt-get remove <package> apt-get update apt-get upgrade |
面向底层:输出信息相对简单,没有进度条。是 APT 工具家族中历史最悠久、功能最稳定的工具。 |
apt-cache |
查询操作:负责查询本地缓存的软件包数据库(Metadata)。它不会更改系统或下载软件包。 | apt-cache search <keyword> apt-cache show <package> apt-cache depends <package> |
信息获取:仅用于搜索和显示软件包信息、依赖关系等。是用户了解软件包情况的强大工具。 |
apt |
用户界面:结合了 apt-get 和 apt-cache 的常用功能。推荐日常使用的现代工具。 |
apt install <package> apt remove <package> apt update apt upgrade apt search <keyword> |
用户友好:提供美观的进度条、颜色高亮和更简洁的输出。它不是要取代 apt-get,而是提供一个更好的用户界面。 |
rpm
https://man.archlinux.org/man/rpm
1 | rpm -ql openssh-server # 列出软件包中的文件。显示指定软件包在系统中安装的所有文件和目录的完整路径列表。 |
dnf/yum
https://man.archlinux.org/man/extra/dnf/dnf4
https://man.archlinux.org/man/extra/dnf5/dnf5
dnf 是 yum 的改进和取代者。
1 | dnf --version |
查看系统安装了哪些软件包
查看软件包依赖了哪些包
查看软件包依赖了哪些动态库
查看软件包安装了哪些文件
查看文件来自哪个软件包
iptables
1 | # REDIRECT 是 DNAT 的一种特例,用于将流量“重定向”到本机的某个端口。它会把数据包的 目标 IP 改为本机 IP,并可选地修改目标端口。方向:外部 → 本机。常用场景:本机透明代理、流量重定向/端口转发、本机端口劫持。 |
流编辑器——sed
Sed 是一款非常强大且常用的 流编辑器(Stream Editor),非常适合做批量的替换、删除、插入、打印等文本变换。
简介与工作原理
- 流编辑器: Sed 一次只处理一行内容。
- 工作空间: Sed 处理文件时,会将当前处理的行读入一个临时缓冲区,称为 “模式空间” (pattern space)。
- 处理流程: Sed 命令会对模式空间中的内容进行处理,处理完成后,默认会将模式空间的内容输出到标准输出(屏幕)。接着清空模式空间,读取下一行,重复上述过程,直到文件末尾。
- 非破坏性: 默认情况下,Sed 不会修改原文件内容,而是将结果输出到标准输出,除非使用重定向或特定的选项(如
-i)来保存更改。
sed 常用语法格式
最基本的 Sed 命令格式如下:
1 | sed [选项] 'sed命令' 文件名 |
常用选项 (Options)
| 选项 | 作用 |
|---|---|
-n |
静默模式(或安静模式)。默认 Sed 会打印所有行,使用此选项后,只有被显式命令(如 p 打印命令)处理的行才会被打印。 |
-e |
允许多个 Sed 命令/脚本。例如:sed -e 'command1' -e 'command2' file |
-f |
指定 Sed 脚本文件。例如:sed -f script.sed file |
-i |
直接修改原文件。这个选项非常重要,但使用时要小心,最好先备份文件。 |
地址(Address)
Sed 命令可以指定一个地址或一个地址范围,以限制命令的作用范围。
| 地址格式 | 作用 | 示例 |
|---|---|---|
| 无地址 | 作用于文件中的所有行。 | 's/old/new/' |
| 单行号 | 作用于指定的行。 | '5d' (删除第 5 行) |
$ |
代表文件的最后一行。 | '$d' (删除最后一行) |
/regex/ |
作用于匹配正则表达式的行。这是查找命令 | '/error/d' (删除包含 “error” 的行) |
| 地址范围 | 作用于从起始地址到结束地址之间的行(包含边界)。 | |
addr1,addr2 |
1,5d (删除第 1 到 5 行) |
|
addr1,/regex/ |
3,/end/d (删除第 3 行到第一个匹配 /end/ 的行) |
|
/regex1/,/regex2/ |
/start/,/end/d (删除第一个匹配 /start/ 到第一个匹配 /end/ 的行) |
sed 常用命令 (Commands)
sed 命令通常紧跟在地址后面。
替换:s (substitute)
这是 sed 最常用、最强大的功能。
- 格式:
[地址]s/旧字符串/新字符串/标志 - 示例:
s/foo/bar/:将每行中第一个foo替换为bar。s/foo/bar/g:全局替换,将行中所有foo替换为bar。s/foo/bar/p:打印发生替换的行。通常配合-n选项使用。s/foo/bar/w output.txt:将发生替换的行写入output.txt文件。s#/#\\/#g:当替换内容或目标字符串中包含/时,可以使用其他分隔符,例如#。详见下文sed 命令分隔符
删除:d (delete)
- 格式:
[地址]d - 示例:
3d:删除第 3 行。1,5d:删除第 1 到 5 行。/^#/d:删除以#开头的行 (常用于删除注释行)。'/^$/d':删除所有空行。
打印:p (print)
- 格式:
[地址]p - 用途: 配合
-n选项,只打印指定的行或匹配的行。 - 示例:
sed -n '5p' file:只打印第 5 行。sed -n '/config/p' file:只打印包含config关键字的行。sed -n '1,10p' file:只打印前 10 行。
追加/插入/更改:a / i / c
a(append): 在匹配行之后追加新文本。- 示例:
'/error/a\--- An Error Occurred ---'(在包含error的行后面追加文本)
- 示例:
i(insert): 在匹配行之前插入新文本。- 示例:
'1i\# This is a header'(在文件第一行前插入一行)
- 示例:
c(change): 用新文本替换匹配行或匹配范围的所有内容。- 示例:
'3c\Replacement Text'(用新文本替换第 3 行)
- 示例:
注意:
a、i和c命令后的文本必须换行书写(在命令行中通常用\来转义换行符,或者直接跟在命令后,用\隔开)。
sed 命令分隔符
分隔符(delimiter)在 sed 命令中主要用于 替换命令 和 查找命令 / ,尤其是涉及到正则表达式的部分。默认是 /。
替换命令 (s)
这是最常见的使用自定义分隔符的场景。
- 基本格式:
s/查找模式/替换字符串/标志 - 使用自定义分隔符的格式:
sX查找模式X替换字符串X标志- 这里的
X可以是任何非空格、非换行符的单个字符。
- 这里的
| 示例命令 | 分隔符 | 场景说明 |
|---|---|---|
s#/var/log#/tmp/log#g |
# |
当查找或替换的内容中包含 / 时(例如文件路径),使用 # 可以避免对 / 进行转义。 |
s@^#@ @ |
@ |
当查找或替换的内容中包含 # 时(例如配置文件中的注释),可以使用 @。 |
查找/地址命令 (/regex/)
分隔符也可以用于定义地址(即指定 Sed 命令作用的行范围)。当您需要查找的模式中包含默认分隔符 / 时,可以自定义分隔符。
- 基本格式:
/正则表达式/命令 - 使用自定义分隔符的格式:
\X正则表达式X命令- 注意: 在自定义分隔符前需要加上反斜杠
\。
- 注意: 在自定义分隔符前需要加上反斜杠
| 示例命令 | 分隔符 | 场景说明 |
|---|---|---|
/\//d |
/ (默认) |
删除包含默认分隔符 / 的行,但需要转义 (\/)。 |
sed '\#/home/#d' file |
# (自定义) |
删除包含 /home/ 路径的行,无需转义路径中的 /,但需在开头用 \ 声明自定义分隔符。 |
进阶示例
组合多个命令
使用 -e 选项或分号 ;:
1 | # 删除空行,并将所有的 'old' 替换为 'new' |
括号分组和后向引用
在替换命令 s 中,可以使用括号 () 对匹配模式的一部分进行分组,并在替换字符串中用 \1, \2, … 进行引用。注意: 括号需要用 \ 进行转义,即 \( 和 \)。
- 示例: 交换行中两个单词的位置。
1 | # 假设一行内容是 "apple banana" |
\(apple\)匹配并捕获第一个单词,标记为\1。\(banana\)匹配并捕获第二个单词,标记为\2。- 替换字符串
\2 \1将它们的位置交换。
文件定位
whereis命令 、 locate/slocate命令 、 find命令 、 which命令 、 rpm命令
以 nginx 安装目录为例:
1 | [root@localhost ~]# whereis nginx |
网络状态
1 | yum install -y lsof |
进程状态
1 | [root@localhost ~]# ps aux |
输出头(标题)
在使用Linux命令时,如果命令中有管道 | ,则输出的信息中,头(标题)信息丢失,要想看每一列代表什么意思很不方便。
例如 ps auxw:
1 | $ ps axuw |
再加上管道符后
1 | $ ps axuw | grep redis |
可以看到头(标题)已经丢失。
一个简单的办法,通过 2 条命令叠加,获取头和内容:
1 | $ ps axuw | head -1;ps axuw | grep redis |
也就是先用命令本身加 | head -1 取到头(标题),然后再使用该命令输出内容,两者叠加输出即得到所要结果。
排序——sort
按列排序,数字大的在前:
1 | $ ps auxw | sort -rnk 2 |
该例子,将第 2 列进行排序,最大的数排前面。
若只想看前10条的内容:
1 | $ ps auxw | sort -rnk 2 | head -10 |
将实际内存消耗最大的10个进程显示出来:
1 | $ ps auxw | head -1; ps auxw | sort -rnk 6 | head -10 |
统计——wc
切分——cut
去重——uniq
强大的文本分析命令——awk
1 | ps -ef | grep mar-service.jar:60002 | grep -v grep | awk '{ print }' |
服务管理
systemctl命令 :是系统服务管理器指令,它实际上将 service 和 chkconfig 这两个命令组合到一起。
1 | # 查看所有可用的单元文件 |
vim 中查找和替换
vi / vim 键位图: https://www.runoob.com/linux/linux-vim.html
https://harttle.land/2016/08/08/vim-search-in-file.html
https://blog.csdn.net/ballack_linux/article/details/53187283
清空历史命令
.bash_history 默认可记录 500 条历史命令。
只有在正常退出当前 shell 时,在当前 shell 中运行的命令才会保存至 .bash_history 文件中。
1 | [root@localhost ~]# history 10 # 显示最近使用的10条历史命令 |
若想在每次登录后都清空历史记录,可以在登录后或登出前执行 rm -rf ~/.bash_history 即可。
Wget 和 cURL
百科: Wget 、 wget命令 、 cURL 、 curl命令
wget命令 用来从指定的URL下载文件。
curl命令 是一个利用URL规则在命令行下工作的文件传输工具。curl URL 默认将下载文件输出到stdout,将进度信息输出到stderr(默认也是终端),可以使用 -O(使用原文件名)或 -o(指定输出文件名)指定输出位置。curl支持更多的协议,还支持cookies、认证、限速、文件大小等特征。
1 | [root@localhost ~]# wget -c URL |
删除文件/文件夹
1 | rm -rf # 文件或文件夹名 |
解压缩
tar
1 | # 解压 |
zip
1 | # 安装zip、unzip应用 |
7z
支持 7Z,ZIP,Zip64,TAR,RAR,CAB,ARJ,GZIP,BZIP2,CPIO,RPM,ISO,DEB 压缩文件格式。
1 | # 安装 |
nohup
相关链接: 百科 、 Linux nohup 命令 - 菜鸟 、 shell中的特殊字符大全
nohup命令可以将程序以忽略挂起信号的方式运行起来,被运行的程序的输出信息将不会显示到终端。 如果不将 nohup 命令的输出重定向,输出将追加到当前目录的 nohup.out 文件中。
nohup command >/dev/null 2>&1 & 意思就是,将command保持在后台运行,并且将输出的日志忽略。
1 | # 启动java服务 |
Linux安装
Ubuntu Server 24.04 LTS
以下是部分安装步骤,其他步骤请直接点击【Done】继续。
网络配置


配置ubuntu存档镜像

自定义存储布局

Ubuntu最佳分区方式:只需要两个分区 / 和 swap 。swap 一般设置为 2 倍或 1.5 倍的 RAM。
下面创建根分区(/),不创建 swap 分区:



配置用户名密码

跳过 Ubuntu Pro
Ubuntu Pro 是 Canonical 推出的 企业级付费支持和增强服务,在普通 Ubuntu 的基础上增加了安全更新、合规性工具和长期支持等功能,主要面向企业或专业用户。
个人用户 / 小团队:
- Ubuntu Pro 对个人用户有免费额度(通常支持 5 台机器免费激活)。
企业用户 / 大规模部署:
- 需要付费订阅,可享受官方 SLA 支持、更多机器数量和附加安全服务。
开启ssh远程

常用的snap包

安装完成后重启
重启
删除安装介质
重启后,Ubuntu 会提示移除安装镜像。
具体操作:取消 虚拟机设置 中的设备 启动时连接,然后按 Enter。
安装中文环境
安装英文版ubuntu,在打开含有中文字符文件时会乱码,有需要给Ubuntu Server装中文环境
1、安装之前,执行 echo $LANG
屏幕显示:en_US.UTF-8
说明现在是英语环境,需要切换到中文环境。
2、安装中文语言包
apt-get update && apt-get install language-pack-zh-hans
3、vim /etc/default/locale
把原来英语 US 的都换成如下的内容,并且注意配置文件中不能有多余的空格 :
1 | LANG="zh_CN.UTF-8" |
4、vim /etc/environment
原来有一行 PATH=.. 不要动这一行
另起一行,复制粘贴以下内容,并且注意配置文件中不能有多余的空格:
1 | LANG="zh_CN.UTF-8" |
5、重启机器 reboot
CentOS-8.1.1911
以下是部分安装步骤,其他步骤可以根据实际需求自行选择。

软件选择

安装目标位置(自定义分区)



网络和主机名

root密码

安装完成后重启
重启
删除安装介质
重启完成后操作:取消 虚拟机设置 中的设备 启动时连接。
解锁root用户
1 | sudo passwd -S root # 查看 root 状态 |
开启root用户远程登录
安装SSH
先检查是否安装
1 | dpkg -l | grep ssh |
开放本机 SSH 服务,请安装服务端:
1 | apt install openssh-server |
连接远程主机,请安装客户端:
1 | apt install openssh-client |
查看SSH服务
1 | ps -ef | grep ssh |
SSH配置文件
ssh 有两个主要的配置文件,它们的作用和针对的对象不同:
| 特性 | ssh_config | sshd_config |
|---|---|---|
| 角色 | 客户端配置 | 服务端配置 |
| 进程 | ssh (当使用 ssh 远程连接时会看到该进程) |
sshd (SSH Daemon 是一个守护进程,它一直在监听连接请求) |
| 控制 | 客户端如何发起连接 | 服务器如何接受连接 |
| 位置 | /etc/ssh/ssh_config 或 ~/.ssh/config |
通常是 /etc/ssh/sshd_config |
| 生效 | 立即生效(客户端读取) | 需要重启服务 (sshd) |
客户端配置手册:https://manpages.debian.org/trixie/openssh-client/ssh_config.5.en.html
服务端配置手册:https://manpages.debian.org/trixie/openssh-server/sshd_config.5.en.html
客户端常用配置项
| 配置项 | 作用 | 常用值/说明 |
|---|---|---|
Host |
定义一个别名或模式,其后的配置将对该别名生效。 | 别名如 myserver,模式如 * 或 192.168.1.*。 |
HostName |
远程主机的实际地址(IP 或域名)。 | 如果与 Host 别名不同时才需要设置。 |
User |
连接远程主机时默认使用的用户名。 | 省略则使用本地用户名。 |
Port |
远程主机的端口。 | 如果远程服务器端口不是默认的 22,则在此设置。 |
IdentityFile |
用于公钥认证的私钥文件路径。 | 例如 ~/.ssh/id_rsa。可以为不同主机指定不同的密钥。 |
ServerAliveInterval |
客户端向服务器发送“保活”消息的间隔时间(秒)。 | 设为 60 可防止本地网络闲置导致的连接中断。 |
ConnectTimeout |
SSH 连接建立的最大等待时间(秒)。 | 避免因网络问题导致长时间卡死。 |
ProxyCommand |
【高级】 通过执行一个外部命令来建立与远程服务器的连接。 | 例如:ProxyCommand ssh -p 22 -W %h:%p jumpbox。常用于通过 SOCKS 代理或老版本跳板机。 -p 22:连接跳板机的port。-W %h:%p:转发选项,告诉 SSH 客户端:建立连接后,请在远程主机上执行一个转发操作到 %h:%p。%h 是目标主机,%p 是目标端口。jumpbox:连接的跳板机的IP |
ProxyJump |
【推荐】 指定一个或多个跳板机(Bastion Host)。 | 例如:ProxyJump jump.example.com。功能上取代了大部分 ProxyCommand 的跳板用途。 |
服务端常用配置项
| 配置项 | 作用 | 常用值/说明 |
|---|---|---|
Port |
指定 SSH 服务监听的端口。 | 默认为 22。为了安全,常改为其他端口(如 2222)。 |
ListenAddress |
指定 SSH 服务绑定的网络接口 IP。 | 默认为 0.0.0.0(所有接口)。可设为特定 IP 以限制访问。 |
PermitRootLogin |
是否允许 root 用户直接通过 SSH 登录。 |
推荐设为 no。应使用普通用户登录后再切换到 root(su 或 sudo)。 |
PasswordAuthentication |
是否允许使用密码进行身份验证。 | 推荐设为 no。当使用公钥认证时,禁用密码可以大大提高安全性。 |
PubkeyAuthentication |
是否允许使用 公钥 进行身份验证。 | 通常设为 yes。这是最安全的登录方式。 |
AllowUsers / DenyUsers |
明确允许或拒绝某些用户登录。 | 例如:AllowUsers user1 user2@192.168.1.10 |
MaxAuthTries |
每个连接允许的最大认证尝试次数。 | 默认为 6。较低的数值可以阻止暴力破解。 |
ClientAliveInterval |
服务器向客户端发送“保活”消息的间隔时间(秒)。 | 默认为 0(不发送)。设为 30 或 60 可防止连接因超时而被关闭。 |
允许Root用户远程登录
编辑服务端配置文件:vim /etc/ssh/sshd_config
找到并修改:
1 | #PermitRootLogin prohibit-password |
重新加载配置:
1 | systemctl reload ssh # 仅重新加载配置,不中断现有会话 |
测试登录
从远程机器执行:
1 | ssh root@服务器IP |
卸载无用的系统服务
1 | # 查看所有正在运行的服务 |
禁用swap分区
https://man.archlinux.org/man/swapoff
https://man.archlinux.org/man/swapon
临时禁用(立即生效,重启失效)
1 | cat /proc/swaps |
永久禁用 Swap 自动挂载
1 | # 编辑 /etc/fstab 文件 |
删除Swap分区
略…
删除Swap文件(针对 Swap 文件用户)
1 | # 如果您的Swap不是一个分区,而是一个文件(例如 /swap.img),您还需要删除该文件。 |
换源
https://developer.aliyun.com/mirror/ubuntu
https://developer.aliyun.com/mirror/centos
ubuntu 查看源
1 | cat /etc/apt/sources.list # 主配置文件 |
centos 查看源
1 | ll /etc/yum.repos.d/*.repo # 仓库配置文件 |
更新和升级
ubuntu
1 | apt-get update # 从配置的软件源获取最新的软件包列表信息(元数据),更新本地的软件包索引和缓存。 |
centos
1 | dnf makecache # 下载软件包仓库中的软件包列表和其他元数据到本地缓存,以便快速查找和安装软件。是一个准备操作 |
发行版
/etc/*-release 文件,它们用来 识别和描述操作系统发行版信息。
1 | find /etc | grep -E ".*-release" |
内核
1 | # 查看当前使用的内核版本 |
内核清理
ubuntu
1 | # 查看系统已安装的内核 |
centos
1 | # 查询系统已安装的内核 |
网关、IP、DNS
1 | ip route # 查看网关地址 |
从DHCP改为固定IP
使用 ip addr 命令查看您的网络接口名称(例如 eth0 或 ens33)。
1 | root@localhost:~# ip addr |
备份原配置 sudo cp /etc/netplan/50-cloud-init.yaml /etc/netplan/50-cloud-init.yaml.bak
编辑 Netplan 配置文件 sudo vim /etc/netplan/50-cloud-init.yaml 内容如下:
1 | # 保持缩进正确:Netplan 使用 YAML 格式,缩进必须用空格,不能用 Tab |
保存文件后执行
1 | # 系统会应用新的网络设置,可通过 ip addr 或 ping -c 4 www.runoob.com 测试网络是否可用 |
修改hostname
主机名是用于标识网络上设备的标签,在同一网络上,你不应有两台或更多台具有相同主机名的计算机。
hostnamectl
hostnamectl 是 systemd 系统和服务管理器套件的一部分,用于查询和修改系统主机名。
Linux 系统通常涉及三种不同类型的主机名,hostnamectl 可以分别或同时进行管理:
- 静态主机名 (Static hostname): 这是保存在配置文件(通常是
/etc/hostname)中的标准主机名。它在系统启动时被初始化。永久的。 - 瞬态主机名 (Transient hostname): 由内核在运行时维护的主机名。DHCP 客户端、云平台(比如 OpenStack、AWS)分配主机名时常用它。临时的,重启失效。默认与静态主机名相同。
- “美观”主机名 (Pretty hostname): 一个更友好、供人类阅读的主机名,可以包含空格和特殊字符(例如:”My Laptop”)。保存在
/etc/machine-info。
你可以使用 --static、--transient 或 --pretty 选项来单独查询或设置这些主机名。
1 | hostnamectl --help |
hostname是一个传统的命令行工具,属于inetutils或net-tools包。它修改的是 瞬态主机名。
1
2 hostname # 查看系统主机名
hostname halbin-dev-zhaolq.halbin.mars.com # 瞬态主机名,临时的,重启失效
修改配置文件(老方法)
1 | cat /etc/hostname |
防火墙
192.168.0.0/24:表示一个包含 256 个地址(从 192.168.0.0 到 192.168.0.255)的子网,其中 192.168.0.0 是网络地址,192.168.0.255 是广播地址,192.168.0.1 到 192.168.0.254 是可分配的设备 IP 地址。
192.168.0.1/24:表示子网 192.168.0.0/24 中的第一个有效 IP 地址,通常被分配给网关或路由器。
Ubuntu
在 Ubuntu 系统中,最常用和推荐的防火墙管理工具是 UFW (Uncomplicated Firewall)。
UFW 是一个对标准 Linux 防火墙工具 iptables 进行封装的前端工具,它大大简化了配置规则的复杂性,让用户可以轻松管理网络连接。
1 | #************************************ UFW 状态检查与管理 |
Centos
CentOS 7及更高版本默认使用 firewalld 作为防火墙管理工具,它采用**区域(Zone)**的概念来管理网络连接和接口的信任级别。
以下是使用 firewall-cmd 命令管理防火墙的一些常用操作:
1 | #************************************ firewalld 服务管理 |
Git环境变量
参考官网,编译安装
1 | grep -qxF 'export PATH=/data/local/git/bin:$PATH' /etc/profile || \ |
JDK环境变量
1 | # 若存在 JAVA_HOME 行就替换,不存在就添加 |
Maven环境变量
1 | grep -qxF 'export PATH=/data/local/apache-maven-3.9.11/bin:$PATH' /etc/profile || \ |
Gradle环境变量
1 | grep -qxF 'export PATH=/data/local/gradle-7.6.6/bin:$PATH' /etc/profile || \ |
执行环境变量脚本
1 | grep -qxF 'source /data/local/env/ideps-env.sh' /etc/profile || \ |
IntelliJ-IDEA将代码部署到远程主机
https://www.jetbrains.com/help/idea/tutorial-deployment-in-product.html
使用Win11的sftp命令
在 Windows 需要传输文件的目录下打开 cmd,然后执行:
1 |
|
使用idea的sftp部署



使用idea的WebDAV部署
IntelliJ-IDEA远程开发
remote-dev-server
1 | root@localhost:/# ./remote-dev-server help |
常用子命令说明(官方)
| 命令 | 功能说明 |
|---|---|
status |
查看 remote-dev-server 当前状态 |
remoteDevStatus |
检查是否有远程开发实例正在运行 |
run |
启动远程开发实例(最常用) |
stop |
停止当前远程开发会话 |
warm-up /path/to/project |
预热索引(构建缓存) |
invalidate-caches |
清理缓存 |
serverMode |
启动后台模式(长期监听 Gateway 连接) |
registerBackendLocationForGateway |
在 Gateway 注册本地 IDE 位置 |
installPlugins |
安装插件(离线部署常用) |
注册 IDE 后端
为了让 JetBrains Gateway 能够识别这个手动安装的 IDE,您需要运行一个脚本来注册它:
1 | ./remote-dev-server registerBackendLocationForGateway |
从 IntelliJ IDEA 连接到远程服务器
方案一(推荐)
https://www.jetbrains.com/zh-cn/help/idea/remote-development-starting-page.html
方案二
启动远程开发服务器,打卡本地 IDEA 远程连接已运行的 IDE。
1 | mkdir -p /logs/remote-dev-server |
远程开发常见问题解答
https://www.jetbrains.com/help/idea/faq-about-remote-development.html
IntelliJ-IDEA远程调试
IDEA 远程调试,像运行本地代码一样调试远程主机上的程序,以排查远程程序的BUG或代码执行流程。
概述
原理:本机和远程主机的两个 VM 之间使用 Debug 协议通过 Socket 通信,传递调试指令和调试信息。 被调试程序的远程虚拟机:作为 Debug 服务端,监听 Debug 调试指令。jdwp是Java Debug Wire Protocol的缩写。 调试程序的本地虚拟机:IDEA 中配置的 Remote Server,指定 Debug 服务器的Host:Port,以供 Debug 客户端程序连接。
设置
IDEA 中指定 Debug 服务器
- 点击主窗口菜单
Run->Edit Configurations...,打开Run/Debug Configurations窗口; - 点击工具栏上的
+按钮,下拉菜单中选择Remote; - 设置 Host 为远程服务器的域名或IP,保持 Port=5005 无需调整;
- 选择 JDK 版本并复制命令行参数
Command line arguments for remote JVM, 形如-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005,具体参数内容由 JDK 版本决定。
远程服务中开启 Debug 服务
对于 SpringBoot: 命令行添加选项,并重启:
1 | # 注意新参数必须在 -jar 之前 |
对于 Tomcat: 启动脚本中添加选项,并重启:
1 | # sudo vim $CATALINA_HOME/bin/catalina.sh |
远程服务器防火墙端口放行
1 | # sudo vim /etc/sysconfig/iptables |
开始调试
- 要求:双方代码一致,否则远程调试无法启动;
- 本地启动刚刚配置的 Remote Server,正常时会看到日志:
Connected to the target VM, address: 'localhost:5005', transport: 'socket' - 本地 IDEA 代码中设置断点
- 浏览器或手机 HTTP 访问服务器
- IDEA 即可在断点暂停并跟踪
关闭调试
服务器上多开放个端口是不安全的,调试完毕后可恢复防火墙设置。 而 Java 服务器开启 Debug 服务器的功能可以保留,以便之后再次调试。
IDEA 远程调试的细节
1、细节1:停在本地断点,关闭程序后会继续执行吗 如果远程调试在自己的断点处停下来了,此时关闭IDEA中的项目停止运行,则还会继续运行执行完剩下的逻辑吗? 会的,这点比较不容易记住
以下面的代码为例,在第一行停住了。然后IDEA中停掉,发现停掉之后控制台还是打印了剩下的日志。 2、细节2:jar包代码和本地不一致会怎么样? IDEA 里的代码如果不和jar包的一致,会怎么样。
结论:要保证和远程启动的代码一致。
否则你debug的时候的行数会对不上。报错抛异常倒是不会。像这种还是能对得上行数的
比如你调试test1方法,test2方法在test1下面,在test2里加代码,这样并不影响test1中的行号,这种是可以在调试的时候准确反应行号的 3、细节3:日志打印在哪里? 日志不会打印在IDEA的控制台上。即System.out 以及 log.info 还是打印在远程的。
1 | @GetMapping("/test1") |
4、细节4:调试时其他人会不会卡住? 远程调试的时候,打了断点,停住后会不会导致页面的请求卡住。 比如你使用远程调试,别的QA在测试这个页面,结果他们看到的结果是怎么样的? 会卡住吗?会的,已经实际遇到过这种情况了。
5、细节5:本地代码修复bug远程调用的时候 如果在远程调试过程自己发现了bug,本地改好后重新启动IDEA里的项目,再到页面调用一次,能修复吗? 不能,运行的还是远程部署的jar中的代码
这个直接击碎了远程页面点一点触发本地代码进行debug的梦想。如果可以的话那调试代码就方便太多。
6、细节6:当开发者计算机无权访问数据库时,可使用远程调试查看数据处理过程