CentOS 禁用rm

【Linux下禁用rm命令之建立回收站】 第一步 创建回收站目录 # 根据自己的习惯,找个位置创建一个用作回收文件的目录 # 我们这里将在root目录下面创建一个名为".trash"的隐藏文件 [root@fedora ~]# mkdir .trash 第二步 创建回收站脚本文件 # 同样是根据自己的习惯找个位置创建 [root@fedora ~]# vim .remove.sh 打开后在文件内写入如下代码: # 指定第... 阅读详情

思路:模拟window系统,创建回收区(以/hdd/cache为例)

1. 在/hdd/cache/目录下新建一个目录,命名为:.trash

2.在/hdd/cache/tools/目录下,新建一个Shell文件,命名为:safe_remove.sh,内容如下:

TRASH_DIR="/hdd/cache/.trash"  
for i in $*
do  
    STAMP=`date +%s`  
    fileName=`basename $i`  
    mv $i $TRASH_DIR/$fileName.$STAMP  
done  

3. 修改~/.bashrc, 增加一行

alias rm='sh /hdd/cache/tools/safe_remove.sh'

4. 设置/etc/crontab,定期清空垃圾箱,每天0点清空垃圾箱

0 0 * * * rm -rf /hdd/cache/.trash/*


5)source ~/.bashrc使替换立即生效

VirtualBox安装CentOS7——虚拟机安装及网络配置(超详细) 在VirtualBox安装CentOS前,首先安装好VirtualBox虚拟机软件(傻瓜式安装方法,这里我就不做介绍了)和备好centos的iso镜像文件(从centos的官网下载),本次我选的VirtualBox版本是VirtualBox-6.0.20-Win版本,CentOS版本是CentOS7版本,其他版本都是一样的安装步骤。 一、新建 1.新建如图,点击下一步 2.分配内存大小,建议主虚拟机8G,或者为自己电脑内存的一半,我这里是安装的辅虚拟机,就只分配了1G。 3.创建硬盘,点创建 4.硬盘 阅读详情

相关推荐

网易数智CoreAgent实战:5步教你打造企业级AI数字员工(附避坑指南)

本文以网易数智CoreAgent智能体协作中枢为核心,提供了一份企业级AI数字员工的实战部署指南。文章详细拆解了从环境准备、智能体配置、业务集成、安全合规到效果评估的五个关键步骤,并分享了部署过程中的常见“避坑”经验,旨在帮助企业技术团队高效、安全地将AI智能体落地于实际业务场景,解决AI落地难题。

rice5的博客 957

怎样阻止Linux服务器执行rm -rf /*命令

自己在Debian 9.9上测试成功,请结合您操作系统的环境,谨慎操作,在进行测试时候尽量先使用一个临时目录,若由于你的不正确操作造成的后果与本人无关 众所周知,Linux中的rm -rf /*命令是一条灾难性的命令.因此有的运维人员想一些办法来禁止这条命令的执行,今天演示一个简单的 今天我们使用的是替换rm命令的方法,然后做一个简单的配置,让系统不能执行rm -rf /* 1.下载saf...

极客开发者的博客 1万+

Livox MID360与Fast-LIO2的实战部署指南:从驱动安装到点云处理

本文提供Livox MID360激光雷达与Fast-LIO2激光惯性里程计从零开始的实战部署指南。详细介绍了Ubuntu系统下的驱动安装、网络配置、点云数据验证以及Fast-LIO2算法的编译、参数配置与联合启动流程,帮助开发者快速搭建移动机器人SLAM系统,并包含关键参数调优与常见故障排查方法。

java5的博客 1026

linux 禁用rm -rf命令 用mv替代回收站并定期清空回收站

rm -rf命令对在linux系统中不言而喻,所以想着禁用了,这样安全些(本着对自己负责的态度) 废话不多说直接贴脚本 vim /scripts/del.sh #! /bin/bash # Description: 替换rm命令,不是删除文件,而是移动文件到/tmp/trash_tmp/ TRASH_DIR="/tmp/trash_tmp" for i in $*; do STAMP=`date +%F-%T` #首先这个是反引号,不是单引号,具体反引号和单引号区别自己查

哇噻的小猴子 3979

Isaac Sim仿真平台学习(2)系统架构

isaac sim系统架构

weixin_75067193的博客 2699

Java实战:绿盾加密文件批量解密工具Ldterm的实现与优化

本文详细介绍了基于Java开发的绿盾加密文件批量解密工具Ldterm的实现与优化过程。通过分析绿盾加密机制,结合Java流处理能力,实现了高效的文件解密方案,并分享了多线程处理、内存优化等性能提升技巧,适用于企业级数据迁移与备份场景。

weixin_29314405的博客 493

CentOS:限制执行rm -rf

我们经常在发布部署服务的时候,由于长时间工作可能操作失误删除某些不能删除文件,甚至有时候不小心直接rm -rf / 删除系统根目录,为了防止误操作rm -rf /,或者rm -rf 一些比较重要的目录,我们做以下操作来限制rm的删除

一些平时在开发过程中遇到的常见问题,分享给大家 1297

【项目实战】小智AI MCP协议在IoT设备控制中的深度应用解析

本文深度解析小智AI MCP协议在IoT设备控制中的应用实践。通过MCP协议作为AI与物联网设备的翻译桥梁,实现大语言模型与ESP32等硬件的无缝通信。文章详细介绍了环境搭建、工具注册、消息路由机制,并以语音控制RGB灯光系统为例展示完整开发流程,为AIoT开发者提供实用指南。

oauth7security的博客 826

Linux安全之禁用特定命令

背景 操作 1、禁用普通用户su到root 2、禁用普通用户执行某些命令 3、禁用root执行某些命令和授权sudo 1)禁止授权普通用户sudo: chmod u+w /etc/sudoers 2)vi /etc/sudoers ,编辑sudoers文件,找到以下行: xxx ALL = (ALL) ALL ## 将xxx替换为允许sudo的普通用户名,后面,ALL,限制sudo执行的命令; 2)限制root执行某些命令 3)禁用内部命令 root下执行help可查看内部命令,然后执行:ena

企业实战系列集 ●●● https://ximenjianxue.blog.youkuaiyun.com 1万+

UE5实战:用Cesium插件打造逼真湖泊效果(附波纹参数调优技巧)

本文详细介绍了在Unreal Engine 5中利用Cesium插件创建逼真区域水效果(如湖泊)的实战流程。重点解析了通过材质层混合机制,精细调整波纹参数(如DistanceScale、NearScale)来模拟不同水体状态,并提供了从资产创建、地形配置到视觉调优的一站式解决方案,帮助开发者高效实现非海洋水域的动态视觉效果。

weixin_29209805的博客 160

基于STM32设计的遥控小车(手机APP+GPS+温湿度+ESP8266)

一、环境介绍 小车主控MCU: STM32F103ZET6 STM32程序开发IDE: keil5 STM32程序风格: 采用寄存器方式开发,注释齐全,执行效率高,方便移植 手机APP: 采用QT设计,程序支持跨平台编译运行(Android、IOS、Windows、Linux都可以编译运行,对应平台上QT的环境搭建,之前博客已经发了文章讲解) 硬件包含: 淘宝购买的完整一套4轮遥控小车(采用STM32F103ZET6作为主控板)、DHT11温湿度传感器、中科微GPS模块、ESP8266 ...

6万+

永久禁用rm命令

第一步: vim /etc/profile # 最后添加 alias rm='echo do not use rm command' # 保存退出 #重新加载配置 source /etc/profile 第二步: vim /root/.bashrc 注释掉 alias rm='rm -i' 保存退出即可

Brave_heart4pzj的博客 1854

使用 Simulink + Simscape Electrical 实现一个变压器耦合式单相全波整流器的仿真模型

本文介绍了基于Simulink的变压器耦合式单相全波整流器建模与仿真方法。详细说明了从项目创建、模块添加、电路搭建到参数配置的完整建模过程,重点分析了整流器的效率与损耗特性,包括变压器损耗和二极管导通损耗。通过仿真展示了输入输出波形特征,并提出了选用高效元件、优化变压器设计等改进建议。该案例为电力电子系统建模提供了实用参考,有助于深入理解整流电路工作原理和性能优化方法。

amy_mhd的博客 189

Saltstack限制某些shell命令执行

在cmdmod模块中cmd.run、cmd.run_all、cmd.run_stdout等都可以执行shell命令,要静止某些shell命令,可以修改_run()这个函数来彻底的静止调用这个命令。 centos 7:/usr/lib/python2.7/site-packages/salt/modules/cmdmod.py文件第235行 centos 6:/usr/lib/python2.6...

weixin_30273175的博客 297

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

CentOs 8 取消rm、cp、mv操作的提示信息

最近新安装了CentOs 8,在学习过程中,频繁使用rm/cp/mv进行操作 但是发现每次操作都会出现提示信息,比如: [root@MiWiFi-R4CM-srv etc]# rm .vimrc.swp rm: remove regular file ‘.vimrc.swp’? y 这样很是麻烦,于是就想着取消提示信息。 .bashrc一般在用户的根目录,找不到的可以通过find命令查找 find / -name ‘.bashrc’ cd ~ vi .bashrc #注释掉以下信息: #alias rm=‘

笨人须下死功夫的博客 832

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

教你两招,Linux避免文件误删除

背景大家都知道,rm指令在Linux中非常牛,rm -rf更是牛中的霸主。什么删系统跑路、删库跑路就是这个指令造成的。可以看出指令虽然牛,但是危险性极高。那么怎么避免某些时候的这种误操作造成的影响呢,阿祥今天就说两个方法,简单快捷,非常有用!大家要仔细看!操作环境CentOS7.6方法方法一:禁用rm指令1、vim ~/.bashrc把rm=‘rm -i’改成下图,或者自定义2、保存退出,执行r...

ICT系统集成实战派博主|深耕数通/云计算/网络安全/系统集成领域,聚焦华为/思科/华三/锐捷设备配置、项目排障与落地实战。 493

Linux避免文件误删详解(Linux Avoids File Deletion Errors with Detailed Explanation)

大家都知道,rm指令在Linux中非常牛,rm -rf更是牛中的霸主。什么删系统跑路、删库跑路就是这个指令造成的。可以看出指令虽然牛,但是危险性极高。那么怎么避免某些时候的这种误操作造成的影响呢,阿祥今天就说两个方法,简单快捷,非常有用!大家要仔细看!

Linux运维老纪的博客 569

Linux修复破坏文件

破坏实验 删除这个驱动文件 [root@CentOS6 boot]# rm -f initramfs-2.6.32-754.el6.x86_64.img [root@CentOS6 boot]# reboot 进入救援模式 重启虚拟机按esc键,选择第三项 CD-ROM-Drive,选则第三项,Rescue installed system 然后选择English,在选择us默认即可,然后网络选择...

qq_40908067的博客 360

Linux rm命令限制

系统环境1、使用alias别名进行提示并提示使用(欠缺灵活性)2、使用mv命令代替rm命令(占用磁盘空间)3、使用第三方safe-rm命令(只是一个脚本文件,无需要安装)代替rm命令(推荐使用)

知行合一 294

手把手教你解决CentOS/RHEL中yum install报错BDB0113问题

本文详细解析了CentOS/RHEL系统中yum install报错BDB0113问题的成因与解决方案。从快速修复到完整数据库重建,提供了多种实用方法,帮助用户有效恢复RPM数据库功能,确保软件包管理正常运作。特别针对Thread/process错误给出了专业指导。

d6e7f8的博客 819

centos7 定制垃圾回收站

一个rm命令使用不当,可能所有文件全部丢失,所以准备让系统禁用rm -rf这种毁灭性命令。 由于简装系统,没有回收站机制,所以手动创建一个,方法也很简单,执行一个脚本即可。 脚本文件: vim trash.sh #/bin/bash mv ~/.bashrc ~/.bashrc.bak cat>~/.bashrc<<'EOF' # .bashrc # User s...

CN_Eden 698

Linux系统常用的安全优化

linux常用分一些安全加固方式

weixin_45432833的博客 2223

linux下防止rm-rf /删除,让人崩溃

1.下载safe-rm软件: safe-rm下载地址:https://launchpad.net/safe-rm命令 wget -chttps://launchpadlibrarian.net/188958703/safe-rm-0.12.tar.gz 2.解压:tar xfsafe-rm-0.12.tar.gz 3.备份原有rm:mv/usr/local/bin/rm/...

weixin_30387799的博客 336

CentOS版本禁用Ctrl+Alt+Del重启功能

1 禁用Ctrl+Alt+Del重启功能(不重启系统的前提条件) 1.1 CentOS 6 ##查看/etc/inittab确认Ctrl+Alt+Del相关配置文件 cat /etc/inittab# Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf ##方法一: vi /etc/init/c...

diaodingzhi6175的博客 504

CentOS 8 SSH密钥登录配置实战:从生成到禁用密码的完整指南

SSH密钥认证是一种基于非对称加密的身份验证机制,通过公私钥配对替代明文密码传输,从根本上规避暴力破解、中间人窃听和凭证泄露风险。其核心原理依赖RSA或Ed25519等算法的数学不可逆性,确保私钥离线存储、公钥可安全分发。该技术具备高安全性、强审计性与自动化友好等工程价值,广泛应用于远程开发(如VS Code Remote-SSH)、基础设施编排(Ansible)、代码托管(Git SSH协议)及多服务器统一运维场景。本文聚焦CentOS 8环境下的密钥配置落地,涵盖RSA 3072位密钥生成、author

weixin_33946605的博客 383

量化交易“养虾”必看!6条安全铁律,守住你的本金和密钥

摘要: 量化交易“养虾”需重视安全防护,避免密钥泄露、误删数据等风险。文章提出6条核心铁律:1)使用独立服务器隔离交易环境;2)通过Docker沙箱限制文件访问;3)采用环境变量或密钥管理服务存储API密钥;4)禁用rm/sudo等危险命令;5)设置自动化备份脚本(附源码),每日同步关键数据;6)对AI模型输出进行人工复核和硬性风控拦截。通过容器隔离、权限控制、异地备份等多层防护,构建安全的量化交易系统。(150字)

2025博客之星Top81。专注AI工程化与架构实战。从分布式思维到模型部署,用工程化视角为你厘清AI落地的真实路径。 531
上一篇: CentOS yum按照制定版本PHP
下一篇: CentOS 源码安装subversion
sql2zy
博客等级 码龄19年 37粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值