真棒!
真棒!
要是eladmin-mp能添加数据权限功能,一定会是非常好用的一个框架
eladmin-mp缺少仅本人数据权限,还有怎样自动处理数据权限
不能装centos8吗
谢谢分享
感谢分享,试试看
大佬,互换个友链, 已添加您了
{ "title": "SerMs", "screenshot": "https://bu.dusays.com/2023/10/11/65264d86ddebb.png", "url": "https://blog.serms.top/", "avatar": "https://bu.dusays.com/2023/10/11/65269ea6226c8.png", "description": "代码如诗,细节成就极致,逻辑成就完美。", "keywords": "SerMs" }
感谢大佬
博主已经添加了
名称: Fostmar博客地址: https://fostmar.online图标:https://fostmar.online/usr/uploads/2023/12/2354092855.webp简介:kali渗透、建站、数码,以博客为核心,打造生态圈
首页
统计
微语
留言
邻居
壁纸
推荐
我的开源
Search
1
快速解决 npm 安装 node-sass 速度慢/错误的问题
24,426 阅读
2
升级 element-ui 2.15.7 后遇到 el-date-picker 警告问题
10,295 阅读
3
Centos 7 彻底卸载清除 Docker 环境
8,712 阅读
4
vue 更新 sass 版本出现大量警告的坑
8,578 阅读
5
前端 axios 中 qs 介绍与使用
8,441 阅读
推荐分享
文章推荐
资源分享
软件开发
异常记录
Linux学习
日常杂记
开源
登录
Search
标签搜索
Java记录
Linux系统
eladmin开源
Web前端
Spring教程
Docker容器
其他
Git教程
Google插件
jpa
好文分享
Nginx配置
异常记录
持续集成工具
数据库
线程池
Typecho博客
Azure管理
Lambda表达式
PowerDesigner
知了小站
不怕学问浅,就怕志气短。
累计撰写
74
篇文章
累计收到
397
条评论
首页
栏目
推荐分享
文章推荐
资源分享
软件开发
异常记录
Linux学习
日常杂记
开源
页面
统计
微语
留言
邻居
壁纸
推荐
我的开源
用户登录
登录
搜索到
74
篇与
的结果
2021-03-07
全局ID生成器:SpringBoot2.x 集成百度 uidgenerator
因为升级 使用springboot2.x java 11 的关系,根据官方文档和网上其他作者配置的怎么也配置不成功,最后自己一步一步升级引入依赖,修改增加接口注入来源,最后成功。升级成功后的源码地址:https://github.com/foxiswho/java-spring-boot-uid-generator-baidu部分升级说明这里的升级,是升级 官方 代码依赖官方代码地址:https://github.com/baidu/uid-generator升级spring boot 版本: 2.0.7.RELEASE升级 mybatis,mybatis-spring 版本升级 mysql-connector-java 版本:8.0.12升级 junit 版本创建数据库存导入官网数据库SQL https://github.com/baidu/uid-generator/blob/master/src/main/scripts/WORKER_NODE.sql也就是一张表我这里是在 demo 库中,创建了这张表DROP TABLE IF EXISTS WORKER_NODE; CREATE TABLE WORKER_NODE ( ID BIGINT NOT NULL AUTO_INCREMENT COMMENT 'auto increment id', HOST_NAME VARCHAR(64) NOT NULL COMMENT 'host name', PORT VARCHAR(64) NOT NULL COMMENT 'port', TYPE INT NOT NULL COMMENT 'node type: ACTUAL or CONTAINER', LAUNCH_DATE DATE NOT NULL COMMENT 'launch date', MODIFIED TIMESTAMP NOT NULL COMMENT 'modified time', CREATED TIMESTAMP NOT NULL COMMENT 'created time', PRIMARY KEY(ID) ) COMMENT='DB WorkerID Assigner for UID Generator',ENGINE = INNODB;如果报错,基本上是时间问题,因为mysql 低版本控制比较严格,解决方法有多种方式方式一:直接把TIMESTAMP改成DATETIME 即可方式二:执行SQL 语句前先执行:set sql_mode="NO_ENGINE_SUBSTITUTION";mysql 配置信息更改因为升级到8.x ,配置文件部分也要跟着修改 uid-generator 下,测试文件夹下的资源包 uid/mysql.properties以下修改为mysql.driver=com.mysql.cj.jdbc.Driver修改完成后,配置好数据库相关参数,这样单元测试即可执行成功案例计划将全局生成唯一ID作为一个服务提供者,供其他微服务使用调用这里创建了一个项目,项目中包含两个子项目一个是 uid-generator 官方本身,当然你也可以不需要放到本项目中,直接使用官方的自行打包即可,一个是 uid-provider 服务提供者以下说明的主要是服务提供者创建 子项目 uid-provider如何创建 略POM配置文件如下<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>java-spring-boot-uid-generator-baidu</artifactId> <groupId>com.foxwho.demo</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>uid-provider</artifactId> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> </dependency> <!--for Mysql--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> <version>8.0.12</version> </dependency> <!-- druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.16</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> <optional>true</optional> </dependency> <dependency> <groupId>com.foxwho.demo</groupId> <artifactId>uid-generator</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies> </project>复制 mapper先在 uid-provider 项目资源包路径下创建 mapper 文件夹,然后到官方 uid-generator 资源包路径下 META-INF/mybatis/mapper/WORKER_NODE.xml 复制 WORKER_NODE.xml 文件,粘贴到该文件夹 mapper 内cache id 配置文件先在 uid-provider 项目资源包路径下创建 uid 文件夹,然后到官方 uid-generator 测试 [注意:这里是测试资源包] 资源包路径下 uid/cached-uid-spring.xml 复制 cached-uid-spring.xml 文件,粘贴到该文件夹 uid 内最后根据需要 配置参数,可以看官方说明创建 spring boot 启动入口主要就是加上注解 @MapperScan("com.baidu.fsg.uid") 让 mybatis 能扫描到 Mapper 类的包的路径package com.foxwho.demo; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; @SpringBootApplication @MapperScan("com.baidu.fsg.uid") public class ConsumerApplication { public static void main(String[] args) { new SpringApplicationBuilder(ConsumerApplication.class).run(args); } }创建配置package com.foxwho.demo.config; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.ImportResource; @Configuration @ImportResource(locations = { "classpath:uid/cached-uid-spring.xml" }) public class UidConfig { }创建服务接口package com.foxwho.demo.service; import com.baidu.fsg.uid.UidGenerator; import org.springframework.stereotype.Service; import javax.annotation.Resource; @Service public class UidGenService { @Resource(name = "cachedUidGenerator") private UidGenerator uidGenerator; public long getUid() { return uidGenerator.getUID(); } }主要说明一下 @Resource(name = "cachedUidGenerator") 以往错误都是少了这里,没有标明注入来源控制器package com.foxwho.demo.controller; import com.foxwho.demo.service.UidGenService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class UidController { @Autowired private UidGenService uidGenService; @GetMapping("/uidGenerator") public String UidGenerator() { return String.valueOf(uidGenService.getUid()); } @GetMapping("/") public String index() { return "index"; } }项目配置文件server.port=8080 spring.datasource.url=jdbc:mysql://127.0.0.1:3306/demo?useUnicode=true&characterEncoding=utf-8&useSSL=false spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver mybatis.mapper-locations=classpath:mapper/*.xml mybatis.configuration.map-underscore-to-camel-case=true启动项目从启动入口,启动,然后访问浏览器http://localhost:8080/uidGenerator页面输出13128615512260612原文地址:https://foxwho.blog.csdn.net/article/details/90200602
2021年03月07日
1,374 阅读
1 评论
3 点赞
2021-03-07
PowerDesigner 连接 MySQL 与生成逆向工程图
最近想梳理公司项目的表间关系,从项目后台管理系统的操作入手,以及代码的hibernate注解入手,都不算特别尽人意,于是最后还是鼓捣了一下PowerDesigner的逆向工程图,这样更直观一些。想着以后不论项目切换或者接手的时候肯定是用得上的,所以在这里也记录一下,毕竟,好记性不如烂笔头,更何况我这还不是好记性。看网上有个哥们说他已经是三次忘了步骤了,所以我吸取教训赶紧第一次就记录下来。1、MySQL数据库连接(JDBC方式)JDBC的配置方式需要一些基础的环境和准备,但是也很简单,无非也就是JDK和mysql的连接jar包,这里不再展开阐述。1.1 新建一个pdm,dbms选择mysql1.2 Database - Connect 选择数据库连接1.3 配置连接信息数据库连接这里是通过一个配置文件来获取连接信息的,首次的话因为没有,所以我们需要选择Configure进行配置。1.4 填写配置信息如图,选择添加数据库资源,出现如上,相关说明如下:Connection profile name:JDBC配置文件名称,可随意填写Directory:配置文件保存路径Description:配置文件描述,可根据实际用途填写Connection type:连接方式,这里我们选择JDBCDBMS type:数据库类型,提供大部分主流数据库选择,我们选择MySQLUser name:登录数据库的用户名JDBC driver class:指定驱动类,使用默认的com.mysql.jdbc.DriverJDBC connection URL:连接URL,格式 jdbc:mysql://ServerIP/Hostname:port/databaseJDBC driver jar files:指定连接的jar包路径1.5连接测试和配置保存如图填写信息完成后,点击左下角的 Test Connection,出现成功提示则说明连接可行:如果测试连接不通过,且出现 Non SQL Error : Could not load class com.mysql.jdbc.Drive 的错误,而指定的jar包没有问题,那么是因为PowerDesigner无法找到驱动所产生的。解决办法是配置系统的classpath路径,指定jar包路径就好了。成功连接后,我们一路确定下去把这个配置文件进行保存,最终你可以在你指定的文件夹(该目录没有限制,自定义一个目录即可,此处我是建立在安装文件下的一个userConf文件夹内)中看到这个保存好的文件:2、从已有数据库中的表进行逆向工程图2.1 菜单选择,从数据库更新模型2.2 选择数据库连接配置文件2.3 选择涉及的数据库和想要导出的表2.4 大功告成原文链接:https://www.cnblogs.com/deng-cc/p/6824946.html
2021年03月07日
963 阅读
0 评论
0 点赞
2021-02-28
Spring 的 Controller 是单例还是多例?怎么保证并发的安全?
答案如下controller 默认是单例的,不要使用非静态的成员变量,否则会发生数据逻辑混乱。正因为单例所以不是线程安全的。我们下面来简单的验证下:package com.riemann.springbootdemo.controller; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; /** * @author riemann * @date 2019/07/29 22:56 */ @Controller public class ScopeTestController { private int num = 0; @RequestMapping("/testScope") public void testScope() { System.out.println(++num); } @RequestMapping("/testScope2") public void testScope2() { System.out.println(++num); } }我们首先访问 http://localhost:8080/testScope,得到的答案是1;然后我们再访问 http://localhost:8080/testScope2,得到的答案是 2。得到的不同的值,这是线程不安全的。接下来我们再来给 controller 增加作用多例 @Scope("prototype")package com.riemann.springbootdemo.controller; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; /** * @author riemann * @date 2019/07/29 22:56 */ @Controller @Scope("prototype") public class ScopeTestController { private int num = 0; @RequestMapping("/testScope") public void testScope() { System.out.println(++num); } @RequestMapping("/testScope2") public void testScope2() { System.out.println(++num); } }我们依旧首先访问 http://localhost:8080/testScope,得到的答案是1;然后我们再访问 http://localhost:8080/testScope2,得到的答案还是 1。相信大家不难发现 :单例是不安全的,会导致属性重复使用。解决方案1、不要在 controller 中定义成员变量。2、万一必须要定义一个非静态成员变量时候,则通过注解@Scope(“prototype”),将其设置为多例模式。3、在 Controller 中使用 ThreadLocal 变量补充说明spring bean作用域有以下5个:1、singleton:单例模式,当 spring 创建 applicationContex t容器的时候,spring 会欲初始化所有的该作用域实例,加上 lazy-init 就可以避免预处理;2、prototype:原型模式,每次通过 getBean 获取该 bean 就会新产生一个实例,创建后 spring 将不再对其管理;下面是在web项目下才用到的3、request:搞 web 的大家都应该明白 request 的域了吧,就是每次请求都新产生一个实例,和 prototype 不同就是创建后,接下来的管理,spring 依然在监听;4、session:每次会话,同上;5、global session:全局的 web 域,类似于 servlet 中的 application。原文地址:https://blog.csdn.net/riemann_/article/details/97698560
2021年02月28日
951 阅读
0 评论
4 点赞
2021-02-27
利用 Nginx 的 Gzip 模块解决 Vue 首屏加载缓慢的问题
通过 Nginx 的 Gize 模块拦截请求,并且对相应的资源进行压缩,已达到减少文件体积加快文件访问速度的目的,使用 Nginx 的 Gizp 模块不需要重新编译,直接开启即可。基本配置在 server 中加入如下代码# 开启gzip gzip on; # 低于1kb的资源不压缩 gzip_min_length 1k; # 设置压缩所需要的缓冲区大小 gzip_buffers 4 16k; # 压缩级别【1-9】,越大压缩率越高,同时消耗cpu资源也越多,建议设置在4左右。 gzip_comp_level 6; # 需要压缩哪些响应类型的资源,缺少的类型自己补。 gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml; # 配置禁用gzip条件,支持正则。此处表示ie6及以下不启用gzip(因为ie低版本不支持) gzip_disable "MSIE [1-6]\."; # 是否添加“Vary: Accept-Encoding”响应头, gzip_vary on; # 设置gzip压缩针对的HTTP协议版本,没做负载的可以不用 # gzip_http_version 1.0;查看效果在 response headers 中的 Content-Encoding 是 gzip 就代表开启成功前后对比未开启 Gzip 的文件大小与加载速度开启 Gzip 后的文件大小与加载速度前后速度提升明显完整配置附上完整的 Nginx https + Gzip 配置server { listen 443 ssl http2; server_name el-admin.xin www.el-admin.xin; # 证书配置 ssl_certificate /etc/nginx/cert/el-admin-xin/el-admin.xin_chain.crt; ssl_certificate_key /etc/nginx/cert/el-admin-xin/el-admin.xin_key.key; # DHE密码器的Diffie-Hellman参数,需要openssl手动生成 # openssl命令:openssl dhparam -dsaparam -out /home/nginx/cert/el-admin-vip/dhparam.pem 4096 ssl_dhparam /etc/nginx/cert/el-admin-xin/dhparam.pem; # 开启OCSP Stapling,由服务器验证证书在线状态,提高TLS握手效率 ssl_stapling on; ssl_stapling_verify on; # 开启HSTS,缓存http重定向到https,以防止中间人攻击 add_header Strict-Transport-Security "max-age=63072000;" always; # 开启TLS False Start ssl_prefer_server_ciphers on; # 中等兼容程度,Mozilla推荐配置 ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; # 中等兼容程度,Mozilla推荐配置 ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; # 由客户端保存加密后的session信息 ssl_session_tickets on; # 缓存SSL ssl_session_cache shared:SSL:10m; ssl_session_timeout 1d; # 长链接 keepalive_timeout 70; #减少点击劫持,禁止在iframe中加载 add_header X-Frame-Options DENY; # 开启gzip gzip on; # 低于1kb的资源不压缩 gzip_min_length 1k; # 设置压缩所需要的缓冲区大小 gzip_buffers 4 16k; # 压缩级别【1-9】,越大压缩率越高,同时消耗cpu资源也越多,建议设置在4左右。 gzip_comp_level 4; # 需要压缩哪些响应类型的资源,缺少自己补。 gzip_types text/css text/javascript application/javascript; # 配置禁用gzip条件,支持正则。此处表示ie6及以下不启用gzip(因为ie低版本不支持) gzip_disable "MSIE [1-6]\."; # 是否添加“Vary: Accept-Encoding”响应头, gzip_vary on; # 根目录 location / { root /usr/share/nginx/html/eladmin/dist; index index.html; try_files $uri $uri/ @router; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location @router { rewrite ^.*$ /index.html last; } } server { listen 80; server_name el-admin.xin; return 301 https://el-admin.xin$request_uri; }
2021年02月27日
4,108 阅读
1 评论
18 点赞
2021-02-13
@Autowire 和 @Resource 注解的区别与使用的正确姿势
今天使用Idea写代码的时候,看到之前的项目中显示有warning的提示,去看了下,是如下代码?@Autowire private JdbcTemplate jdbcTemplate;提示的警告信息Field injection is not recommended Inspection info: Spring Team recommends: "Always use constructor based dependency injection in your beans. Always use assertions for mandatory dependencies". 这段是Spring工作组的建议,大致翻译一下: 属性字段注入的方式不推荐,检查到的问题是:Spring团队建议:"始终在bean中使用基于构造函数的依赖项注入, 始终对强制性依赖项使用断言如图:Field注入警告注入方式虽然当前有关Spring Framework(5.0.3)的文档仅定义了两种主要的注入类型,但实际上有三种:基于构造函数的依赖注入public class UserServiceImpl implents UserService{ private UserDao userDao; @Autowire public UserServiceImpl(UserDao userDao){ this.userDao = userDao; } }基于Setter的依赖注入public class UserServiceImpl implents UserService{ private UserDao userDao; @Autowire public serUserDao(UserDao userDao){ this.userDao = userDao; } }基于字段的依赖注入public class UserServiceImpl implents UserService{ @Autowire private UserDao userDao; }基于字段的依赖注入方式会在Idea当中吃到黄牌警告,但是这种使用方式使用的也最广泛,因为简洁方便.您甚至可以在一些Spring指南中看到这种注入方法,尽管在文档中不建议这样做.(有点执法犯法的感觉)如图基于字段的依赖注入缺点1、对于有final修饰的变量不好使Spring的IOC对待属性的注入使用的是set形式,但是final类型的变量在调用class的构造函数的这个过程当中就得初始化完成,这个是基于字段的依赖注入做不到的地方.只能使用基于构造函数的依赖注入的方式2、掩盖单一职责的设计思想我们都知道在OOP的设计当中有一个单一职责思想,如果你采用的是基于构造函数的依赖注入的方式来使用Spring的IOC的时候,当你注入的太多的时候,这个构造方法的参数就会很庞大,类似于下面.当你看到这个类的构造方法那么多参数的时候,你自然而然的会想一下:这个类是不是违反了单一职责思想?.但是使用基于字段的依赖注入不会让你察觉,你会很沉浸在@Autowire当中public class VerifyServiceImpl implents VerifyService{ private AccountService accountService; private UserService userService; private IDService idService; private RoleService roleService; private PermissionService permissionService; private EnterpriseService enterpriseService; private EmployeeService employService; private TaskService taskService; private RedisService redisService; private MQService mqService; public SystemLogDto(AccountService accountService, UserService userService, IDService idService, RoleService roleService, PermissionService permissionService, EnterpriseService enterpriseService, EmployeeService employService, TaskService taskService, RedisService redisService, MQService mqService) { this.accountService = accountService; this.userService = userService; this.idService = idService; this.roleService = roleService; this.permissionService = permissionService; this.enterpriseService = enterpriseService; this.employService = employService; this.taskService = taskService; this.redisService = redisService; this.mqService = mqService; } }3、与Spring的IOC机制紧密耦合当你使用基于字段的依赖注入方式的时候,确实可以省略构造方法和setter这些个模板类型的方法,但是,你把控制权全给Spring的IOC了,别的类想重新设置下你的某个注入属性,没法处理(当然反射可以做到).本身Spring的目的就是解藕和依赖反转,结果通过再次与类注入器(在本例中为Spring)耦合,失去了通过自动装配类字段而实现的对类的解耦,从而使类在Spring容器之外无效.4、隐藏依赖性当你使用Spring的IOC的时候,被注入的类应当使用一些public类型(构造方法,和setter类型方法)的方法来向外界表达:我需要什么依赖.但是基于字段的依赖注入的方式,基本都是private形式的,private把属性都给封印到class当中了.5、无法对注入的属性进行安检基于字段的依赖注入方式,你在程序启动的时候无法拿到这个类,只有在真正的业务使用的时候才会拿到,一般情况下,这个注入的都是非null的,万一要是null怎么办,在业务处理的时候错误才爆出来,时间有点晚了,如果在启动的时候就暴露出来,那么bug就可以很快得到修复(当然你可以加注解校验).如果你想在属性注入的时候,想根据这个注入的对象操作点东西,你无法办到.我碰到过的例子:一些配置信息啊,有些人总是会配错误,等到了自己测试业务阶段才知道配错了,例如线程初始个数不小心配置成了3000,机器真的是狂叫啊!这个时候就需要再某些Value注入的时候做一个检测机制.结论通过上面,我们可以看到,基于字段的依赖注入方式有很多缺点,我们应当避免使用基于字段的依赖注入.推荐的方法是使用基于构造函数和基于setter的依赖注入.对于必需的依赖项,建议使用基于构造函数的注入,以使它们成为不可变的,并防止它们为null。对于可选的依赖项,建议使用基于Setter的注入后记翻译自 field-injection-is-not-recommended,加入了自己的白话理解!原文链接:https://juejin.cn/post/6844904064212271117
2021年02月13日
1,223 阅读
0 评论
2 点赞
2021-02-08
EL-ADMIN 邮箱配置之使用 QQ 邮箱发送邮件
EL-ADMIN 配置邮箱后,发送邮件提示:邮箱发送邮件失败:AuthenticationFailedExceptionissues 地址:https://github.com/elunez/eladmin/issues/571修复步骤1、在QQ邮箱中 开启 IMAP/SMTP服务,获取独立密码2、在邮件工具里面配置邮箱信息参数说明1、发件人用户名:用户收信时显示的发件人名称2、邮箱密码:QQ邮箱需要为SMTP服务单独设置密码3、QQ 邮箱的 SMTP 地址:smtp.qq.com4、SMTP 使用默认的 465 即可修改代码定位到:eladmin-tools/src/main/java/me/zhengjie/service/impl/EmailServiceImpl.java修改第 72 行// 设置用户 String user = emailConfig.getFromUser().split("@")[0]; account.setUser(user);重新启动项目即可
2021年02月08日
1,452 阅读
0 评论
3 点赞
2021-02-05
Linux 使用脚本一键 DD(重装) 成纯净的 Linux 系统
基本所有的VPS商家,都会提供免费的Linux系统供安装,如CentOS、Debian、Ubuntu等。那为什么还要使用一键DD脚本重装/更换系统呢?商家提供的系统版本有限,可能没有自己需要的版本;商家提供的系统大多都是改装过的,不纯净,可能存在软件兼容行问题;商家提供的系统大多带有监控,虽说可以卸载,但是心里总是有疙瘩;以上几种情况,就需要Linux一键DD脚本,一键DD脚本可以为服务器更换一个纯净的系统,帮你解决问题。一键安装Linux系统下列脚本支持系统重置为 CentOS 7、CentOS 6、Debian 9、Debian 10、ubuntu 18.10。注意有些脚本需要获取 IP、网关、子网掩码等信息,需要填写正确才行安装成功。注意重装有风险,可能导致无法开机,谨慎操作!使用脚本前最好先安装如下软件# CentOS 与 RedHat yum install -y xz openssl gawk file wget # Debian 与 Ubuntu apt-get install -y xz-utils openssl gawk file安装 CentOSwget --no-check-certificate -qO AutoDD.sh 'http://git.io/autodd.sh' && bash AutoDD.sh安装 Debianwget --no-check-certificate -qO InstallNET.sh 'https://moeclub.org/attachment/LinuxShell/InstallNET.sh' && chmod a+x InstallNET.sh # 安装 debian 9 64位 bash InstallNET.sh -d 9 -v 64 -a --mirror 'http://mirrors.ustc.edu.cn/debian/' # 安装 debian 10 64位 bash InstallNET.sh -d 10 -v 64 -a --mirror 'http://mirrors.ustc.edu.cn/debian/'安装 Ubuntuwget --no-check-certificate -qO InstallNET.sh 'https://moeclub.org/attachment/LinuxShell/InstallNET.sh' && chmod a+x InstallNET.sh # 安装ubuntu 18.10 64位 bash InstallNET.sh -u 18.10 -v 64 -a --mirror 'http://archive.ubuntu.com/ubuntu/'国内可使用wget --no-check-certificate -qO InstallNET.sh 'https://moeclub.org/attachment/LinuxShell/InstallNET.sh' && chmod a+x InstallNET.sh bash InstallNET.sh -d 9 -v 64 -a --mirror 'https://mirrors.huaweicloud.com/debian/' bash InstallNET.sh -d 9 -v 64 -a --mirror 'https://mirrors.aliyun.com/debian/' bash InstallNET.sh -d 9 -v 64 -a --mirror 'https://mirrors.cloud.tencent.com/debian/'安装时指定密码# 所有脚本都可以加入参数 -p 来设置默认密码,如: bash InstallNET.sh -d 9 -v 64 -p 123456 -a --mirror 'https://mirrors.cloud.tencent.com/debian/'安装后默认端口: 22安装后默认用户名: root安装后默认密码: MoeClub.org
2021年02月05日
6,649 阅读
6 评论
9 点赞
2021-01-25
Linux 系统 Swap 虚拟内存设置
新增swap区创建一个文件作为 swap 区:dd if=/dev/zero of=/swapfile bs=2M count=1024名字为/swapfile,大小是2G,我一般会设置为实际内存的两倍,磁盘小的按实际情况设置。转换为 swap 文件使用 mkswap 格式化文件为 swap 文件系统mkswap /swapfile修改文件权限chmod 0600 /swapfile激活虚拟内存swapon /swapfile如果想要系统重启后生效,可以打开/etc/fstab 在最后面加上一行:vi /etc/fstab/swapfile swap swap defaults 0 0
2021年01月25日
848 阅读
0 评论
0 点赞
2021-01-25
Debian 系统修改默认网卡为 eth0
前言Debian 系统安装以后,可能会遇到网卡设备名不是常见的 eth0 的情况。我们有没有办法统一网卡设备名称呢?在服务器环境中,统一网卡设备名是很有必要的。标准化的配置会节省我们大量的时间,这些时间可能会花在排障、监控的配置、状态收集脚本的调整等。这里我们介绍如何把 Debian 系统中的网卡从非 eth0,调整为 eth0,这个设备名是各 Linux 系统中比较通用的网卡设备名。下面我们以设备名 ens3 为例,介绍在Debian 系统中,如何修改网卡设备名为 eth0 的具体步骤。配置首先,我们需要编辑 grub 的配置文件,修改启动参数。使用编辑器打开 /etc/default/grub, 查找:GRUB_CMDLINE_LINUX=""找到这行,并修改为:GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0"修改后记得保存。随后修改网络的配置文件,调整网卡设备名:sed -i 's/当前网卡名称/eth0/g' /etc/network/interfaces sed -i 's/enp3s0/eth0/g' /etc/network/interfaces最后重新生成 grub 引导配置文件,并重启系统。grub-mkconfig -o /boot/grub/grub.cfgGrub 的配置更新后,需要重启系统生效。系统重启后,网卡的名字便更新为 eth0 了。原文链接:https://www.debian.cn/archives/3286
2021年01月25日
1,274 阅读
0 评论
4 点赞
2021-01-25
Linux 开启 Root 用户登录权限,允许 Root 远程登录
前言部分云平台的服务器是不支持 SSH Root 账号方式登录服务器的,如:谷歌云、甲骨文云等,这个时候就需要我们修改一些系统参数来实现 Linux Root 账号登录的功能。配置谷歌云:直接在网页打开 Google SSH 控制台连接到实例甲骨文:使用创建实例时保存好的的秘钥登录到系统切换到 root 账号 sudo -i 修改SSH配置文件vi /etc/ssh/sshd_config按 i 进入 INSERT 模式后修改以下两行# 修改默认端口,降低被攻击的风险 Port 20022 #开启 Root 登录 PermitRootLogin yes #开启 Root 密码 PasswordAuthentication yes按 esc 保存并退出::wq设置 Root 登录密码passwd root重启 SSH 服务即可# Ubuntu/debian: /etc/init.d/ssh restart # CentOS: systemctl restart sshd.servicePS:还是建议使用秘钥登录
2021年01月25日
1,271 阅读
0 评论
1 点赞
2021-01-25
Linux 压缩和解压缩命令 gz、tar、zip、bz2
gzip压缩后的格式为:*.gz这种压缩方式不能保存原文件;且不能压缩目录命令举例:#压缩 [root@localhost tmp]# gzip buodo [root@localhost tmp]# ls buodo.gz #解压 [root@localhost tmp]# gunzip buodo.gz [root@localhost tmp]# ls buodotar命令选项:-z(gzip) 用gzip来压缩/解压缩文件 -j(bzip2) 用bzip2来压缩/解压缩文件 -v(verbose) 详细报告tar处理的文件信息 -c(create) 创建新的档案文件 -x(extract) 解压缩文件或目录 -f(file) 使用档案文件或设备,这个选项通常是必选的。命令举例:#压缩 [root@localhost tmp]# tar -zvcf buodo.tar.gz buodo [root@localhost tmp]# tar -jvcf buodo.tar.bz2 buodo #解压 [root@localhost tmp]# tar -zvxf buodo.tar.gz [root@localhost tmp]# tar -jvxf buodo.tar.bz2zip与 gzip 相比:1)可以压缩目录; 2)可以保留原文件;命令选项:-r (recursive) 递归压缩目录内的所有文件和目录命令举例:#压缩和解压文件 [root@localhost tmp]# zip boduo.zip boduo [root@localhost tmp]# unzip boduo.zip #压缩和解压目录 [root@localhost tmp]# zip -r Demo.zip Demo adding: Demo/ (stored 0%) adding: Demo/Test2/ (stored 0%) adding: Demo/Test1/ (stored 0%) adding: Demo/Test1/test4 (stored 0%) adding: Demo/test3 (stored 0%) [root@localhost tmp]# unzip Demo.zip Archive: Demo.zip creating: Demo/ creating: Demo/Test2/ creating: Demo/Test1/ extracting: Demo/Test1/test4 extracting: Demo/test3bzip2压缩后的格式:.bz2命令参数:-k 产生压缩文件后保留原文件命令举例:#压缩 [root@localhost tmp]# bzip2 boduo [root@localhost tmp]# bzip2 -k boduo #解压 [root@localhost tmp]# bunzip2 boduo.bz2 原文链接:https://blog.csdn.net/capecape/article/details/78548723
2021年01月25日
585 阅读
0 评论
0 点赞
1
...
4
5
6
7