启动jar包
java启动jar包:
|
|
上面命令的效果:
- 启动Java程序:以 ruoyi-admin.jar 为主程序启动Java应用。
- 内存设置:初始堆和最大堆大小均设置为 1024MB。
- 错误处理:遇到内存溢出时,生成堆转储文件(Heap Dump),文件放在 /www/wwwroot/cslc.yimengtut.online/logs文件夹下。生成堆转储文件的好处是:方便开发者诊断内存溢出的具体原因,帮助定位内存泄漏或对象占用问题,从而更有效地进行性能优化和故障排查。
- 日志管理:
- 标准输出追加到 output.log
- 错误输出追加到 error.log
- 后台运行:通过 nohup 和 & 实现程序在后台持续运行,这样我们就算关闭终端也不会影响进程。
下面这个命令可以看我们后台启动的java日志:
|
|
我们再点击ctrl+C可以退出查看,并且java程序还是会运行的。
解释:
nohup命令的作用:
- nohup 是 Linux/Unix 系统中的一个命令,用于运行程序时忽略挂断信号(HUP信号),使得程序在用户退出终端后仍能继续运行。
- 如果不用nohup的话,当用户退出终端时,系统会向该终端启动的所有进程发送 SIGHUP 信号(挂断信号),从而导致进程被终止。
- 使用 nohup可以屏蔽 SIGHUP 信号,让命令在后台持续运行,即使终端关闭。
&命令作用:
- &:将命令放入后台运行(立即返回终端,不阻塞当前会话)。
- 不加 &:命令会在前台运行,占用当前终端。
为什么nohup和&经常一起使用:
- 在命令末尾加上
&
(如command &
)会将进程放到后台执行,允许用户继续输入其他命令。但问题是:如果终端被关闭(比如 SSH 断开),后台进程仍然会收到SIGHUP
信号(默认会终止进程)。 - nohup(即 “no hang up”)会让进程忽略 SIGHUP 信号,即使用户退出终端或关闭会话,进程也不会被终止。但问题是如果单独使用 nohup(如 nohup command),进程会占用当前终端(前台运行),用户无法继续操作。
修改权限
更改目录及其所有子文件和子目录的权限。使用 -R 选项递归地更改目录及其内容的所有权限。777表示全部权限。
|
|
查看目录的权限
|
|
看到的结果比如: drwxrwxrwx 。- 表示文件,d 表示目录,l 表示符号链接等。 rwxrwxrwx表示全部权限。第一个rwx表示 文件所有者的权限,第二个rwx表示 文件所属组的权限,第三个rwx表示其他用户的权限。
进入某个目录
cd 文件夹名:进入当前命令行所在位置下的某个文件夹。
cd /www/wwwroot:表示进入根目录下的www/wwwroot文件夹。
查看java相关的进程
|
|
jps是JDK(Java Development Kit)自带的一个命令行工具,用于列出当前系统中所有正在运行的 Java 进程及其相关信息。
|
|
jps -l能看到比jps更详细的信息。
你使用jps看java相关的进程的时候,也会看到一个jps进程,这个jps进程就是我们输入的命令调用的工具的进程,这个工具是java写的,所以也能被看到。
显示Java的 PID、完整类名及 JVM 参数
|
|
强制杀死进程
|
|
kill -9会强制进程立即停止,进程无法捕获或忽略该信号。
优雅杀死进程
|
|
kill -15可以优雅终止进程,-15 选项发送 SIGTERM 信号(默认信号),通知进程终止。
对比kill -9:
kill -15与 kill -9不同。kill -9发送的是 SIGKILL 信号,这个信号会让操作系统内核直接终止进程,不可被捕获、阻塞或忽略。而kill -15发送的是 SIGTERM 信号,SIGTERM 允许进程捕获信号并执行清理操作。进程收到 SIGTERM 后,可以保存数据、关闭文件或释放资源、执行其他清理操作。如果进程正确处理了 SIGTERM,它会正常退出。若进程未处理 SIGTERM 或清理时间过长,进程可能不会退出。所以建议等10秒后,如果kill -15没有执行完毕,我们使用kill -9来强制执行。
输出内容到终端
echo “Hello, World!": 将指定的文本输出到终端
移动
|
|
把当前所在位置 aaa.txt文件移动到 当前所在目录下的 scripts 目录中。
复制
|
|
将当前命令行所在位置的 aa.txt 文件复制到当前所在目录下的 scripts 目录中。
当前文件夹下查找文件
|
|
在 /www/wwwroot目录下面找 ruoyi-admin.jar 。
find的常用参数:
-name: 按文件名查找(支持通配符,如 *.txt)。
-iname: 不区分大小写查找文件名。
-type: 查找特定类型的文件(f 表示文件,d 表示目录)。
-size: 按文件大小查找。
-mtime: 按时间查找,例如 -mtime -7 查找最近7天修改过的文件。
-exec: 执行命令。
1 2 3 4
例如,find /path/to/files -type f -name "*.bak" -exec rm {} \; 表示查找 /path/to/files 目录及其子目录中所有以 “.bak” 结尾的文件,并使用 rm 命令删除它们。 例如:find /www/wwwroot -type f -name "*cc.txt" -exec ls -l {} \; 表示在 /www/wwwroot 目录及其子目录中查找所有以 cc.txt 结尾的文件,并使用 ls -l 命令打印它们的详细信息。
通过进程号查看进程情况
|
|
pid是1234的进程情况以及启动命令等信息。
-p 1234
:仅显示 PID 为1234
的进程(其他进程会被过滤掉)。-f
:以完整格式(full-format)输出,包含更多列信息(如启动命令、参数、时间等)。
创建文件夹
|
|
在当前目录下创建aaa文件夹。如果存在aaa目录就不做任何事情。
|
|
创建多个文件夹,这里创建了a和a下的b文件夹、c文件夹、d文件夹。
查看当前命令行所在位置
|
|
特定目录
|
|
显示文件或者文件夹信息
|
|
查看当前命令行所在文件夹下的文件和文件夹名称。不全面,只有文件和文件夹名称,没有其他信息。
|
|
查看指定文件夹下的文件和文件夹名称。不全面,只有文件和文件夹名称,没有其他信息。
|
|
可以看到这个文件的类型、权限等信息。比较全面。
|
|
可以看到这个文件夹里面的内容中有哪些东西,并且目录下的这些东西是文件还是文件夹,他们的权限是什么样的。如果没有文件,会显示总计0。比较全面。
ls -l 文件
的输出示例:
|
|
字段 | 示例值 | 说明 |
---|---|---|
文件类型与权限 | -rw-r--r-- | - :普通文件 rw- :所有者(root)可读可写 r-- :组和其他用户仅可读 |
硬链接数 | 1 | 该文件有 1 个硬链接(通常是文件本身) |
所有者 | root | 文件属于 root 用户 |
所属组 | root | 文件属于 root 组 |
文件大小 | 58075 | 文件大小为 58,075 字节(约 56.7 KB) |
最后修改时间 | Apr 21 21:44 | 文件最后一次修改时间为 4 月 21 日 21:44 |
文件名 | install_panel.sh | 文件名,推测为安装面板的脚本 |
展示的信息我们主要看第一列。
- 第一列的第一个字符表示文件类型:
- d:目录
- -:普通文件
- l:符号链接
- s:套接字
- p:管道文件
- 第一列的第一个字符之后的九个字符表示文件权限(以三组字符表示):
- 第一组(字符 2-4):所有者权限(如 rwx,表示可读、可写和可执行)
- 第二组(字符 5-7):用户组权限
- 第三组(字符 8-10):其他用户权限
- 注意:权限的-表示没有某个权限。比如-rw-rw-r–表示 这是一个普通文件,所有者和用户组具有读写权限,而其他用户仅具有读权限。全部用户都没有执行权限。
ls -l 文件夹
的输出示例:
|
|
目录总览:
字段 | 值 | 说明 |
---|---|---|
目录名 | mrdoc-install/ | 查看的是名为 mrdoc-install 的目录内容 |
总占用空间 | total 16 | 目录内所有条目占用的磁盘块数(单位:KB) |
目录内容详情:
权限 | 硬链接数 | 所有者 | 所属组 | 大小 | 修改时间 | 名称 | 类型/说明 |
---|---|---|---|---|---|---|---|
-rwxr-xr-x | 1 | root | root | 2038 | May 9 23:46 | docker-install.sh | 可执行脚本 - 所有者可读、写、执行 - 其他用户可读、执行 |
-rw-r--r-- | 1 | root | root | 1090 | May 9 23:46 | LICENSE | 普通文件 - 所有者可读、写 - 其他用户仅可读 |
drwxr-xr-x | 16 | root | root | 4096 | May 25 00:48 | MrDoc | 子目录 - 硬链接数16表示含大量子项 - 所有人可进入和操作该目录 |
-rw-r--r-- | 1 | root | root | 347 | May 9 23:46 | README.md | 普通文件 - 说明文档(Markdown格式) |
重命名(同移动命令,即mv既能移动也能重命名)
mv oldfile.txt newfile.txt:重命名文件
mv olddir newdir:重命名文件夹
mv /path/to/oldfile.txt /newpath/to/newfile.txt:移动并重命名文件(文件夹也行的)
创建文件
touch bbb.txt:创建bbb.txt。你不用输入内容。相当于创建了一个内容是空的文件。
cat > ccc.txt :创建文件并要求需要输入内容。输入内容后,按 Ctrl + d 保存并退出。
查看文件内容
cat ccc.txt:直接查看文件内容。打印到终端。
删除文件或者文件夹(可递归)
- rm file1.txt file2.txt file3.txt:删除 file1 、 file2、 file3这多个文件。
- rm -rf aaa:递归强制删除aaa这个文件夹。不提示是否确认删除。rm -rf a b c会递归删除a、b、c文件夹。
- rm -ri aaa: 每次操作都给你提示,你输入y同意,输入n拒绝 。-r表示递归。-i表示提示。
重启服务器
reboot:重启服务器
重启服务
CentOS 6的命令:
|
|
现代 Linux 发行版(如 Ubuntu 16.04+/CentOS 7+)的命令:
|
|
例子:
sudo systemctl restart mysqld:重启mysql服务。
查看当前系统信息
|
|
例子:
|
|
设置某个服务开机自启(或禁用)
systemd 系统(Ubuntu 16.04+/CentOS 7+/Debian 8+ 等):
启用开机自启
1
sudo systemctl enable <服务名>
示例:设置 Nginx 开机自启
1
sudo systemctl enable nginx
验证是否生效
1 2
sudo systemctl is-enabled <服务名> # 返回 "enabled" 表示成功
禁用开机自启
1
sudo systemctl disable <服务名>
SysVinit 系统(CentOS 6/Ubuntu 14.04 等旧版本):
使用 chkconfig 启用
1
sudo chkconfig <服务名> on
示例:设置 Apache 开机自启
1
sudo chkconfig httpd on
验证是否生效
1 2
sudo chkconfig --list <服务名> # 显示 "on" 表示成功
禁用开机自启
1
sudo chkconfig <服务名> off
查看服务状态
|
|
例子:
|
|
登录MySQL
|
|
登录mysql
ZIP压缩与解压
压缩
|
|
将 file.txt
压缩成 archive.zip
|
|
将 myfolder/
整个目录(含子目录和文件)压缩成 archive.zip
。-r表示递归压缩的意思。
解压
|
|
将 archive.zip 中的所有文件和目录解压到你当前所在的目录。
假设 archive.zip
里内容结构如下:
|
|
你当前路径是 /home/user/
,那么执行:
|
|
之后你会在 /home/user/
下看到:
|
|
解压到指定文件夹
|
|
如果 /path/to/target-folder/ 存在,则文件会解压到该目录中。
如果目标文件夹不存在,unzip 会自动创建它,无需手动提前创建。
查看端口占用
|
|
查看 8380 端口的占用情况。
例子:
|
|
- COMMAND:java:。运行该进程的命令。这表明该进程是一个 Java 应用程序。
- PID:2094694:。进程 ID。这是该 Java 进程在系统中的唯一标识符。可以用此 ID 来终止或检查此进程的状态。
- USER:yckj: 运行该进程的用户。表示这个 Java 进程是由用户 yckj 启动的。
- FD:239u。文件描述符,239 是该文件的标识符,而 u 表示这个文件描述符是可读写的(即 “u” 代表 “user”)。这说明此进程打开了一个与网络相关的套接字,并且可以在其上进行读写操作。
- TYPE: IPv 6。文件类型,指示这个网络连接使用的是 IPv 6 协议。这意味着该进程正在通过 IPv 6 地址进行通信。
- DEVICE:10499122。这个值通常是指设备的标识符,具体意义通常与操作系统内部表示有关,普通用户不需要关注这个值。
- SIZE/OFF:0t0。该列通常表示文件的大小或偏移量。在网络连接的情况下,通常可以忽略,因为它与传统文件操作不太相关。
- NODE:TCP。这表示连接类型是 TCP(传输控制协议)。TCP 是一种连接导向的协议,适用于需要可靠传输的应用。
- NAME:
\*:8380 (LISTEN)
。*
表示该进程正在监听所有网络接口。这意味着任何网络接口都可以连接到这个进程。8380,指定监听的端口号是 8380。(LISTEN): 表示该进程处于“监听”状态,准备接受进入的连接。
综上所述,这条输出的含义是:
- 有一个 Java 应用程序正在运行,其进程 ID 为 2094694,用户是 yckj。
- 该进程在所有 IPv 6 地址上监听端口 8380,处于等待接入连接的状态。这意味着应用程序可能是一个 web 服务或其他需要网络连接的服务
跟踪文件内容
- head -n 20 filename.txt:查看 filename.txt文件的最前20行内容。
- head filename.txt:表示查看最前10行内容(默认是10行)。
- tail -n 20 filename.txt : 查看 filename.txt文件的最后20行内容。
- tail filename.txt:表示查看最后10行内容(默认是10行)。
- tail -f filename.txt:持续显示新的内容。如果有新的内容,也会打印出来。你执行的时候,会显示文件最后 10 行内容,随后如果这个文件内容有追加,那么控制台会持续输出新写入的内容。控制台日志输出的长度会一直增加的。
后台启动 java,双重输出日志
|
|
效果:
nohup
+&
保证:程序在后台运行,终端关闭后进程不会终止。2>&1
+tee
实现:控制台实时输出到终端,这样你在启动时能在当前终端看到实时日志,并且你点击 ctrl+c 不会终止 java 进程,他还是在后台运行的。这个日志同时还会保存到nohup.out
文件中。相当于是两个日志输出,一个是输出到终端,一个是输出到 nohup. out 文件中。
组件 | 作用 |
---|---|
nohup | 忽略 SIGHUP 信号,防止终端退出时进程被杀死 |
2>&1 | 将标准错误(stderr)合并到标准输出(stdout) |
tee nohup.out | 分流输出:既显示到终端,又写入文件 |
& | 后台运行 |
注意:这个命令在生产环境中临时使用进行调试是可以的,但是不建议长期使用,生产环境建议使用Logback/Log4j2这种更专业的日志框架。临时调试使用Logback/Log4j2也行,但是如果你想要和idea中一样的效果,你习惯看idea的输出,那么你可以使用上面命令进行临时调试。
优点:
- 简单快捷:无需额外配置,适合快速查看日志。
- 实时输出:方便调试时观察日志。
缺点:
- 无日志切割:
nohup.out
会无限增长,可能撑爆磁盘。 - 无日志分级:所有日志混在一起,难以过滤
ERROR
/DEBUG
。 - 无归档策略:日志不会按日期或大小分割,难以管理。
文本编辑器
nano
nano filename.txt :使用nano这个文本编辑器查看或者编辑 filename.txt文件内容。
- 按 Ctrl + O,然后按 Enter 确认保存,保存后不会自动退出哈。
- 按 Ctrl + X 退出 nano,如果有未保存的更改,系统会提示是否保存,你输入y表示是。注意:保存操作,如果你选择以原来文件名保存就是改变原来文件内容,如果你选择改变文件名,就相当于是原来文件没有变,你创建了一个新文件保存这个内容,你不用原来的文件名保存,它还是会提示你一下是否确定用新的文件名保存内容,这个其实和window的记事本逻辑一样。
- 按 Ctrl + W,然后输入文本,按 Enter,可以查找文本。
nano编辑器下面会有提示,^表示ctrl键。其他的就是直接按字符就行了。M-对应的是alt键。
vi
|
|
效果:使用vi这个文本编辑器查看或者编辑 filename.txt文件内容。
vi有三种主要操作模式:
- 正常模式(Normal Mode):打开文件时默认的模式。在此模式下,你可以移动光标、删除文本、复制粘贴等。大多数命令都是在正常模式下输入的。正常模式按:,进入命令模式。
- 插入模式(Insert Mode):用于输入和编辑文本。在这个模式下,按下的键都会被输入到文件中。你可以通过按 i(插入之前)、a(插入之后)或 o(在下一行插入)进入插入模式。 插入模式按esc今日正常模式。
- 命令模式(Command Mode):用来执行保存、退出、搜索等命令。在正常模式下,按 : 进入命令模式。命令模式按esc回到正常模式。
操作:
- 退出vi:
- :w:保存文件。
- :q:退出程序。如果文件有更改,可能无法退出。
- :wq 或 ZZ:保存并退出。
- :q!:强制退出,不保存更改。
- 移动光标:使用箭头键,或者 h(左)、j(下)、k(上)、l(右)进行光标移动。
- 粘贴:正常模式下 按 p 粘贴复制的文本。
- 撤销和重做:在正常模式下,按 u 撤销上一步操作,按 Ctrl + r 重做操作。
- 查找:/sa回车。就是查询sa所在位置,你按n可以查询n可以查询下一个,按shift+n可以查询上一个。
- 清空所有行:在命令模式输入
: 1,$d
即可 - 复制windows中的内容到vi:shift+insert进行粘贴
- 复制当前文件的全部内容:%或者输入ggVGy,可以直接复制整个文件内容到剪贴板。
- 复制vi编辑器中的全部内容到windows:我没有找到方便的做法,只有去文件管理器去进入文件编辑,全选复制(这个和windows中一样)。
访问网址
|
|
解释:以get请求的方式去发送请求到 https://www.baidu.com
。成功会返回页面的效果,如果是一个html,会返回一个文字,只是没有浏览器的渲染而已。你能看到 <title>百度一下,你就知道</title>
等内容。反正如果返回 HTML 或 JSON,就是正常的,如果提示拒绝连接(connection refused)就是访问不到。
- -X指定请求方法(GET、POST、PUT、DELETE)
- -H添加请求头-d添加请求体(POST/PUT 时常用)
- -H添加请求头-d添加请求体(POST/PUT 时常用)
- -F表单提交(支持文件)
- -o将响应写入文件
- -i显示响应头
- -v打印请求过程,调试用
查找进程并筛选进程
|
|
- ps:用于显示当前系统的活动进程。
- -e:表示显示所有用户的进程。
- -f:表示以完整格式显示进程信息,包括进程号(PID)、父进程号(PPID)、用户、启动时间、占用的TTY、时间以及命令。
- |:管道符,用于将前一个命令的输出传递给后一个命令。
- grep:用于搜索文本中的特定字符串。
- ruoyi-admin.jar:是我们要查找的字符串,意味着我们在寻找与这个 Java 应用程序相关的进程。
输出的结果如下:
|
|
- 第一行解释:
- yckj:运行进程的用户,表示这个进程是由 yckj 用户启动的。
- 2058118:进程 ID (PID),这是该进程的唯一标识符。
- 1:父进程 ID (PPID),表示这个进程是由进程 ID 为 1 的进程(通常是系统初始化进程)启动的。
- 4:进程的优先级(优先级值),这个值越小,优先级越高。
- 2月10:进程启动的日期,表示这个进程是在 2 月 10 日启动的。
- ?:该进程没有关联的终端,通常表示它是一个后台进程。
- 00:43:12:该进程的累计 CPU 时间,表示该进程自启动以来使用了 43 分 12 秒的 CPU 时间。
- java -Xmx64G -Xms64G -jar ruoyi-admin.jar:执行的命令,表示这个进程是一个 Java 应用程序,使用了 -Xmx64G 和 -Xms64G 参数(分别表示最大和最小堆内存为 64GB),并且运行了 ruoyi-admin.jar。
- 第二行解释:
- yckj:同样是运行进程的用户。
- 2080487:grep 命令的进程 ID。
- 2080462:这是 grep 命令的父进程 ID,表示这个进程是由进程 ID 为 2080462 的进程启动的。
- 0:进程的优先级。
- 09:25:表示这个进程的启动时间。
- pts/0:表示这个进程关联的终端(pseudo terminal slave),通常表示这是一个交互式的终端。
- 00:00:00:该进程的累计 CPU 时间,表示这个进程几乎没有使用 CPU 时间。
- grep –color=auto ruoyi-admin.jar:执行的命令,这个命令表示这个进程是用来搜索包含 ruoyi-admin.jar 的文本行。
总结:
- 第一行可以看出,ruoyi-admin. jar 正在运行,并且它的 Java 进程正在使用大量的内存(最大和最小堆内存均为 64 GB)。
- 第二行是 grep 命令的输出,显示了你用来查找 ruoyi-admin. jar 进程的命令本身。
多个命令一起执行
前面执行成功才能执行后面的命令
使用 && 连接多个命令即可。&& 表示前一个命令执行成功后再执行下一个命令。如果前一个命令失败(返回非零状态码),则后续命令不会执行。
例子:
比如要想下面三个指令一起执行。 cd /www/wwwroot/scripts
、 ./deploy.sh
、 ps -ef | grep ruoyi-admin.jar
|
|
无论前面执行成功或者失败都会执行后面的命令
使用 ;
连接命令 ;
表示无论前一个命令是否成功,都会继续执行下一个命令。
比如:
|
|
总结:
- 如果你希望只有 cd 和 ./deploy.sh 都成功执行后,才执行 ps -ef | grep ruoyi-admin.jar,使用 &&。
- 如果你希望无论前面的命令是否成功,都执行 ps -ef | grep ruoyi-admin.jar,使用 ;。