首页
时事
归档
壁纸
更多
留言
关于
邻里
Search
1
使用必应Bing每日图片做网站背景(自动)
2,987 阅读
2
vue的输入值校验规则整理
1,662 阅读
3
VUE `ERR_CONNECTION_TIMED_OUT`的解决办法
1,628 阅读
4
好站推荐-https://wangchujiang.com/linux-command/
1,598 阅读
5
微信支付开发前准备(小程序、公众号、App、H5)
1,582 阅读
文章
图说
代码
吐槽
登录
Search
标签搜索
Linux
laravel
windows
TYPO3
php
shell脚本
git
微信
好站
vue
第三方登录
centos
linxu
centos7
thinkPHP
微信支付
api
MySQL
桌面
必应首图
Beer
累计撰写
114
篇文章
累计收到
22
条评论
首页
栏目
文章
图说
代码
吐槽
页面
时事
归档
壁纸
留言
关于
邻里
搜索到
90
篇与
文章
的结果
2019-03-13
web网站接入Gitee第三方登录
web网站接入Gitee第三方登录官方文档地址API文档:https://gitee.com/api/v5/swagger#/getV5ReposOwnerRepoStargazers?ex=noOAuth文档:https://gitee.com/api/v5/oauth_doc创建应用如何创建应用就不说了,与github类似,OAuth2 获取 AccessToken 认证步骤应用通过 浏览器 或 Webview 将用户引导到码云三方认证页面上( GET请求 )https://gitee.com/oauth/authorize?client_id={client_id}&redirect_uri={redirect_uri}&response_type=code用户对应用进行授权码云认证服务器通过回调地址{redirect_uri}将 用户授权码 传递给 应用服务器 或者直接在 Webview 中跳转到携带 用户授权码的回调地址上,Webview 直接获取code即可({redirect_uri}?code=abc&state=xyz)应用服务器 或 Webview 使用 access_token API 向 码云认证服务器发送post请求传入 用户授权码 以及 回调地址( POST请求 ) https://gitee.com/oauth/token?grant_type=authorization_code&code={code}&client_id={client_id}&redirect_uri={redirect_uri}&client_secret={client_secret}码云认证服务器返回 access_token应用通过 access_token 访问 Open API 使用用户数据。当 access_token 过期后(有效期为一天),你可以通过以下 refresh_token 方式重新获取 access_token( POST请求 )https://gitee.com/oauth/token?grant_type=refresh_token&refresh_token={refresh_token}通过access_token获取用户信息GET请求 模拟http get请求https://gitee.com/api/v5/user?access_token={access_token}奉上源码// 用户登录 public function gitee() { if (isset($_GET['code'])) { $access_token_url = 'https://gitee.com/oauth/token'; $params = array( 'grant_type' => 'authorization_code', 'code' => $_GET['code'], 'client_id' => self::GITEE_CLIENT_ID, 'redirect_uri' => 'https://www.whongbin.cn/admin/oauth/gitee.html', 'client_secret' => self::GITEE_CLIENT_SECRET ); $res = json_decode(getHttpResponsePOST($access_token_url, $params),true); $access_token = $res['access_token']; if ($access_token) { $info_url = 'https://gitee.com/api/v5/user?access_token='.$access_token; $info = json_decode(getHttpResponseGET($info_url),true); // 处理数据 } } } 上面代码中的curl请求在这篇文章中已经贴出来了 web网站接入GitHub第三方登录(踩坑)
2019年03月13日
725 阅读
0 评论
0 点赞
2019-03-12
Centos7+Git服务器(多用户)
创建用户创建组:groupadd git切换项目所属组:chgrp -R git test创建用户并分配给用户组:useradd git01 -g git passwd git01 //修改用户密码创建仓库并分享到组git init --shared=group test修改配置文件进入仓库目录,修改配置文件。如:我在home目录下有个仓库test, /home/git/test。cd /home/git/test vim test/.git/config添加denyCurrentBranch = ignore
2019年03月12日
603 阅读
0 评论
0 点赞
2019-03-12
Centos7.x编译安装Git
yum安装git用git --version命令检查是否已经安装在CentOS7.x的yum源中已经有git的版本了,可以直接使用yum源进行安装。yum -y install git但是yum源中安装的git版本是1.7.1,Github等需要的Git版本最低都不能低于1.7.2 。所以我们一般不用上面的方法,而是下载git源码编译安装。END编译安装git首先更新系统yum -y update安装依赖的包yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker下载git最新源码并解压下载源码wget https://github.com/git/git/archive/v2.21.0.zip unzip v2.21.0.zip cd git-2.21.0编译安装:将其安装在"/usr/local/git"目录下。make prefix=/usr/local/git all make prefix=/usr/local/git install异常解决异常:如果服务器时间不对编译的过程中会报错如下图,解决办法:使用ntpdate自动校正系统时间。报错“Writing perl.mak for Git make[2]: *** [perl.mak] Error 1”,请重启apache服务,service httpd restart。编译安装完成之后使用 git --version 查看git版本,看到git版本并没有变,这是因为它默认使用了 /usr/bin 下的git。你可以用下面的命令查看git所在的路径:$ whereis git我们要把编译安装的git路径放到环境变量里,让它替换 /usr/bin 下的git。为此我们可以修改 /etc/profile 文件(或者 /etc/bashrc 文件)。vim /etc/profile然后在文件的最后一行,添加下面的内容,然后保存退出。export PATH=/usr/local/git/bin:$PATH不想重启系统,使用source命令立即生效source /etc/profile然后再次使用git --version 查看git版本,发现输出是我们安装的版本,表明安装成功。
2019年03月12日
565 阅读
0 评论
0 点赞
2019-03-12
本地Linux服务器搭建git服务
前言前几天,阿里云的服务器宕机事件让公司老大感受到了危机,必须要刻不容缓的搞一台自己的服务器来作为项目备份及公司重要文档的存放点准备已安装Linux(CentOS7.x)系统的Windows主机,Ps:使用Windows主机的原因是方便,而且其硬盘一般都比较大,作为资料库是完全够用的git最新版本(Linux服务端),Ps:由于CentOS7自带的git版本是1.7.1的,平常管理自己的项目是够用了,但是作为服务还是不够,作为服务最低版本要求1.8以上git最新版本(Windows客户端)安装服务端请参考我的另一篇文章 Centos7.x编译安装Git安装完成后创建账户与密码[root@localhost home]# groupadd git //添加git用户组 [root@localhost home]# useradd git //添加git用户 [root@localhost home]# passwd git //修改用户密码创建git仓库[root@localhost home]# mkdir git_file/test //创建仓库存放目录 [root@localhost home]# cd git_file/test //进入目录 [root@localhost test]# git init --bare test //创建仓库修改仓库的用户及用户组[root@localhost test]# cd /home/jykj_project/test2 [root@localhost test2]# chown -R git:git ./ [root@localhost test2]# ll -a安装客户端本地安装最新版本git安装地址:https://git-scm.com/downloads创建项目存放目录,如test鼠标选中test文件夹,点击右键,找到 Git Bash Here选项并点击,即可直接打开Git Bash命令窗口。输入以下命令,即可从 Linux Git 服务器上 clone 项目:git clone git@你的服务器地址:/git/test.gitps:如果SSH用的不是默认的22端口,则需要使用以下的命令(假设SSH端口号是7700):git clone ssh://git@你的服务器地址:7700/git/test.git当第一次连接到目标 Git 服务器时会得到一个提示,直接输入 yes回车即可The authenticity of host '192.168.100.135 (192.168.100.135)' can't be established. RSA key fingerprint is SHA256:Ve6WV/SCA059EqoUOzbFoZdfmMh3B259nigfmvdadqQ. Are you sure you want to continue connecting (yes/no)? 执行成功后Warning: Permanently added '192.168.100.135' (RSA) to the list of known hosts.此时 你会发现 C:\Users\用户名\.ssh 目录下会多出一个文件 known_hosts,以后在这台电脑上再次连接目标 Git 服务器时不会再提示上面的语句。clone项目时会提示输入密码,直接输入在服务端创建git账号时填写的密码即可。ENDPS:如果不想每次都输入密码,则可参考:git多用户设置PS:如果不想每次都输入密码,则可参考:git设置SSH公钥验证
2019年03月12日
568 阅读
0 评论
0 点赞
2019-03-07
分享一波图床API和chome插件
因为这些天在搞个人博客,感觉在图片上传这块真的很费脑子哦,于是在网上逛了一圈,找到了一些好用到爆的图床API和插件。好东西分享出去才会价值最大化,所以在这分享出来chome插件-新浪微博图床插件下载地址新浪微博图床插件下载地址插件介绍简单好用的新浪微博图床,支持选择/拖拽/粘贴上传图片,并生成图片地址,HTML,UBB和Markdown等格式,支持浏览和删除历史记录五星好评,简单易用并且开源的新浪微博图床扩展.支持点选/拖拽/本地粘贴3种方式上传图片至新浪微博图床支持批量上传支持生成图片地址,HTML,UBB和Markdown四种格式支持本地保存和删除上传历史支持在常用在线markdown编辑器中使用ctrl+v粘贴图片,图片自动上传到微博图床。(目前已支持github,csdn及zybuluo的markdown在线编辑器)支持https模式支持自定义Chrome菜单栏图标使用效果imgbb -APIAPI官网imgbb官方网站imgbb外部插件插件介绍它提供图像上传到任何网站,放置一个按钮,将允许您的用户直接上传图像到我们的服务,它将自动处理插入所需的代码。 所有功能包括拖放,远程上传,图像调整大小等。该插件适用于具有用户可编辑内容的任何网站不需要额外的自定义,它将放置一个与目标编辑器工具栏匹配的上传按钮去上传支持https模式支持生成图片地址,HTML,UBB和Markdown四种格式使用效果虫洞图床-API插件地址虫洞图床插件介绍这个网站是类似于图片托管的网站内有两种API供你选择 1、新浪微博(很强大啊,到处都是你),2、我不知道怎么形容,自己去看开发过七牛云的话使用这个毫无压力其实原理就是跨域提交(ajax提交,后端提交都可以)支持批量上传示例代码给你个js代码自己去体会吧,就是正常的ajax提交function uploadPic(a) { if (a.files && a.files[0]) { if (0 != a.files[0].type.indexOf("image")) return $(".upload-btn").html('<span style="color: #c50808">请选择图像文件上传</span>'); a = new FormData($("#upload-form")[0]); $.ajax({ url: "https://www.17uw.cn/api/upload/weibo", type: "POST", xhr: function() { myXhr = $.ajaxSettings.xhr(); myXhr.upload && myXhr.upload.addEventListener("progress", function(a) { a.lengthComputable && (a = a.loaded / a.total, 1 == a ? $(".upload-btn").html('<span style="color: #c50808">上传完成,处理中...</span>') : $(".upload-btn").html("上传中,进度:" + 100 * a + "%")) },!1); return myXhr }, beforeSend: function() { $(".upload-btn").html("准备上传..") }, success: function(a) { "success" != a.code ? $(".upload-btn").html('<span style="color: #c50808">' + a.msg + "</span>") : ($(".input form")[0].url.value = a.data.url.replace(/http:/g, "https:"), commentExtraPicSubmit($(".input form")[0])) }, error: function(a) { console.log(a); $(".upload-btn").html('<span style="color: #c50808">图片上传出错</span>') }, data: a, dataType: "json", cache: !1, contentType: !1, processData: !1 }); return ! 1 } }注:这篇文章会长期更新,如果小伙伴有好资源的话请发表在评论区
2019年03月07日
610 阅读
0 评论
0 点赞
2019-03-07
TYPO3 数据库对象化增、删、改、查
说起来我已经混迹TYPO3开发两年了,但是对于typo3的了解还是一知半解,TYPO3强大的简直无边啊,下面分享下我在二次开发typo3的过程中积累的一些有用的知识点和代码段在存储库中的条件查询方法// 初始化对象查询query-object $query = $this->createQuery(); // 且(AND) / 或(OR) / 非(NOT) $query->logicalAnd($constraints); $query->logicalOr($constraints); $query->logicalNot($constraints); // statement 方法 $query->statement("SELECT * FROM my_table WHERE 1 " . $GLOBALS['TSFE']->sys_page->enableFields("my_table")); // string // 排序 (ORDER BY) $query->setOrderings(array("field" => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING)); // array $query->setOrderings(array("field" => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_DESCENDING)); // array // 分页 (LIMIT) $query->setLimit($limit); // integer // OFFSET $query->setOffset($offset); // integer // 总数 COUNT() $query->count(); // execute query and get amount of matches // 执行 query $query->execute(); // 获取第一条数据 (LIMIT 1) $query->getFirst(); /* * 范例: * typical method */ public function findSomethingSpecial() { $query = $this->createQuery(); $query->matching( $query->logicalAnd( $query->equals("mySpecialProperty", "isMySpecialValue"), $query->equals("someOtherProperty", "isAnotherValue") ) ); $query->setOrderings(array("crdate" => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING)) ->setOffset(10) ->setLimit(20); return $query->execute(); }TYPO3中默认的一些数据操作方法(助手函数)// 增加一条数据 $myRepository->add($myModel); // 删除一条数据 $myRepository->remove($myModel); // 删除所有数据 $myRepository->removeAll(); // don't do this at home // 替换数据 $myRepository->replace($myModel, $myOtherModel); // 更新一条数据 $myRepository->update($myModifiedModel); // 获取数据总数 $myRepository->countAll(); // get the amount of all objects // 按照指定字段统计总数 $myRepository->countBy[myProperty]($thisMustMatchMyProperty); // 查询指定数据 $myRepository->findByUid($theUid); // returns ONE Model-Object (...if found) // 查询所有数据 $myRepository->findAll(); // only constraint by enablecolumns, language and storagePid // 按照指定字段查找所有符合条件的数据 $myRepository->findBy[myProperty]($thisMustMatchMyProperty); // returns a Storage-object // 按照指定字段查找符合条件的第一条数据 $myRepository->findOneBy[myProperty]($thisMustMatchMyProperty); // returns ONE Model-Object (...if found)约束条件// = $query->equals($myProperty, $equalsThis, $caseSensitive = true); // < $query->lessThan($myProperty, $isLessThanThis); // > $query->greaterThan($myProperty, $isGreaterThanThis); // <= $query->lessThanOrEqual($myProperty, $isLessThanOrEqualThis); // >= $query->greaterThanOrEqual($myProperty, $isGreaterThanOrEqualThis); // %search% $query->like($myProperty, $theLikeString); // contains $query->contains($myProperty, $hasThisValue); // in $query->in($myProperty, $isInThisObjectOrArray);初始化对象配置Query-Settings// 使用方法1: 所有查询中使用 public function initializeObject() { // 获取配置 $querySettings = $this->objectManager->get('TYPO3\\CMS\\Extbase\\Persistence\\Generic\\Typo3QuerySettings'); // 修改设置 $querySettings->setSomething(); // 将设置保存为默认值 $this->setDefaultQuerySettings($querySettings); }// 使用方法2: 特定查询中使用 public function findSomething() { $query = $this->createQuery(); $query->getQuerySettings()->setSomething(); // ... return $query->execute(); } // 常用配置: $querySettings->setRespectStoragePage(FALSE); // 忽略数据存储id storagePid $querySettings->setStoragePageIds(array(1, 2, 3)); // 指定数据存储id查询 storagePids $querySettings->setRespectEnableFields(FALSE); // 忽略enableFields(...已弃用) $querySettings->setIgnoreEnableFields(TRUE); // 忽略TCA中定义的字段 "enablecolumns" $querySettings->setEnableFieldsToBeIgnored(array('disabled', 'starttime')); // 只忽略指定字段 $querySettings->setIncludeDeleted(TRUE); // 假删除 $querySettings->setRespectSysLanguage(FALSE); // 忽略多语言 $querySettings->setSysLanguageUid(2); // 查询指定语言强制执行数据库操作/* * 在控制器中操作使用 * Action-Method in Controller... */ // 新增一个model对象 $newItem = new \VENDOR\MyExt\Domain\Model\Item(); $newItem->setSomeStuff(); $myItemRepository->add($newItem); // 这局代码具体是做什么的我不是很了解,但是执行这个合一获取数据库插入的最新一条数据 $persistenceManager = $this->objectManager->get('TYPO3\\CMS\\Extbase\\Persistence\\Generic\\PersistenceManager'); $persistenceManager->persistAll(); $this->view->assign("newItem", $newItem);/* * Fluid标签中使用 */ <f:link.action controller="Item" action="show" arguments="{item:newItem}">显示新的项目</f:link.action>
2019年03月07日
621 阅读
0 评论
0 点赞
2019-03-07
TYPO3 获取最新插入的数据uid
TYPO3 获取最新插入的数据uidtypo3是德国人开发的一套易用型CMS,采用插件方式拼装系统,系统完全面向对象,当然原生SQL也可以用来处理部分数据,这篇文章分享下typo3中怎么样获取新插入数据的ID插入对象时获取方式上面已经说了,typo3是完全面向对象的,在typo3中,对于一对一、一对多、多对一、多对多的关系有着非常友好的处理方式/** * action create * * @param \Whb\ExtensionName\Domain\Model\Files $newFiles * @return void */ public function createAction(\Whb\ExtensionName\Domain\Model\Files $newFiles) { #...数据插入代码... $newFiles->setTitle('demo'); $this->addFlashMessage('添加成功!', '', \TYPO3\CMS\Core\Messaging\AbstractMessage::WARNING); $this->filesRepository->add($newFiles); //主要是下面两句 $persistenceManager = $this->objectManager->get(\TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager::class); $persistenceManager->persistAll(); $newDataId = $newFiles->getUid(); var_dump($newDataId);//返回新增数据的主键uid //$this->redirect('list'); }使用助手SQL函数进行插入时虽然说typo3是完全面向对象的,但是也免不了有时会出现特殊情况,这时候就可以使用typo3自带的SQL助手函数来插入数据//添加一條纪录 $datas = array(); $datas["items"]= 2; $datas["getnum"]= 3; $datas["usednum"]= 0; $datas["userid"]= 1; $datas["crdate"]= time(); $datas["pid"]= 110; $GLOBALS['TYPO3_DB']->exec_INSERTquery("tx_demo_domain_model_table", $datas); $newDataUid = $GLOBALS['TYPO3_DB']->sql_insert_id();使用原生MySQL插入时在typo3中,我们依然可以使用原生MySQL进行插入数据,如处理远程api中数据修改时,例如支付宝的支付回调,就可以用到下面方法进行处理,免去繁琐的model类继承,但是需要自己写MySQL连接池$con = new mysqli($config['host'],$config['user'],$config['password'],$config['dbname']); if(!$con){ die("connect error:".mysqli_connect_error()); } //方法一 使用last_insert_id $query = "select last_insert_id()"; $newDataUid = $con->execute($query); //第二种 $query = "select max(uid) from table"; $newDataUid = $con->execute($query);注意:所有返回自增ID只能是insert操作,而不是update操作
2019年03月07日
617 阅读
0 评论
0 点赞
2019-03-07
Linux中使用Git托管代码(centOS7.4)
前言开发完博客后放在服务器上,可以说是很安全了,但是呢我总会到服务器上去捣鼓点别的东西,就害怕哪天一个命令错了就欲哭无泪了,所以找了找Git托管的方法,把代码放在了国内最大的代码托管平台(码云)上,分享下方法创建账号你要确定你的代码要托管到什么地方,即你的仓库。这是官网链接,进入后进行注册,注册成功后右上角点击+号,选择新建项目进入后按照你的个人喜好填写,特别注意的一点是,在是否开源这块,选择私有项目,我不太清除这是为什么,等项目完成后也可以再设置为开源,没啥影响添加SSH公钥先进入这个页面,然后下面就要去你的命令行进行操作了更新yum并安装gityum update yum install git获取key(邮箱换成你注册gitee时的邮箱)ssh-keygen -t rsa -C "example@163.com"查看公钥cat ~/.ssh/id_rsa.pub ssh -T git@gitee.com进入你的项目目录并设置你的git账号及用户名cd /www/wwwroot/wish.whongbin.cn/ git config --global user.email "example@163.com" git config --global user.name "example"测试代码拉取和提交git clone git@gitee.com:example/test.git ls -l touch test1 git add test1 git commit -m "test" git push正式项目提交git add . git status git commit -m "一个博客前端模板文件" git push
2019年03月07日
663 阅读
0 评论
0 点赞
2019-03-05
使用python删除Windows下的各种缓存,日志等文件
写在前面使用python删除Windows下的各种缓存,日志等文件,代码是别人的,我拿来分享下,原文:分享一个用python写的window清理缓存垃圾小程序 https://www.52pojie.cn/thread-665561-1-1.html (出处: 吾爱破解论坛)代码在此# -*- coding: utf-8 -*- # @Date: 2018-07-18 09:00:31 # @Author: Wang HongBin | <whb199330@163.com> # @Last Modified by: Wang HongBin # @Last Modified time: 2018-07-18 09:01:44 # .-~~~~~~~~~-._ _.-~~~~~~~~~-. # __.' ~. .~ `.__ # .'// NO \./ BUG \\`. # .'// | \\`. # .'// .-~""""" ""~~~~-._ | _,-~~~~"""""""~-. \\`. # .'//.-" `-. | .-' "-.\\`. # .'//______.============-.. \ | / ..-============.______\\`. #.'______________________________\|/______________________________`. import os import shutil del_extension = ['.tmp', '._mp', '.log', '.gid', '.chk', '.old', '.xlk', '.bak'] del_userprofile = ['cookies', 'recent', 'Temporary Internet Files', 'Temp'] del_windir = ['prefetch', 'temp'] # 获取系统盘 root_sys_drive = os.environ['systemdrive'] + '\\' # 获取用户目录 root_user_profile = os.environ['userprofile'] # 获取 Windows 目录 root_win_dir = os.environ['windir'] def del_dir_or_file(root): try: if os.path.isfile(root): # 删除文件 os.remove(root) print ('file: ' + root + ' removed') elif os.path.isdir(root): # 删除文件夹 shutil.rmtree(root) print ('directory: ' + root + ' removed') except WindowsError: print ('failure: ' + root + " can't remove") for roots, dirs, files in os.walk(root_sys_drive, topdown=False): # 生成并展开以 root 为根目录的目录树,参数 topdown 设定展开方式从底层到顶层 for every_file in files: # 获取文件扩展名 file_extension = os.path.splitext(every_file)[1] if file_extension in del_extension: # 组合文件完整路径 full_path = os.path.join(roots, every_file) # 调用函数删除文件 del_dir_or_file(full_path) for every_dir in del_userprofile: # 组合文件夹完整路径 full_path = os.path.join(root_user_profile, every_dir) # 调用函数删除文件夹 del_dir_or_file(full_path) for every_dir in del_windir: full_path = os.path.join(root_win_dir, every_dir) del_dir_or_file(full_path) print ('\nfinished')后记如果想要代码自动执行达到自动清理的效果,请参考我的另一篇文章 Windows10 添加python脚本到计划任务(同Linux定时任务)
2019年03月05日
758 阅读
0 评论
0 点赞
2019-03-01
宝塔面板切换免费版/专业版方法(亲测可用)
安装宝塔面板:如果第一次使用宝塔面板,先安装免费版 如果已安装免费版 就可以跳过第一步了宝塔免费版安装命令(centos):yum install -y wget && wget -O install.sh http://download.bt.cn/install/install.sh && sh install.sh升级专业版命令:wget -O update.sh http://download.bt.cn/install/update_pro.sh && bash update.sh pro破解方法注意:修改前记得提前备份,养成良好习惯很重要!修改文件在服务器路径 /www/server/panel/class 找到 common.py 文件,使用编辑器打开 common.py 文件,找到 164行(5.9版本) 将data = panelAuth().get_order_status(None)替换成data = { 'status' : True, 'msg' : {'endtime' : 32503651199 } }重建用户登录信息修改完成后,进入路径 /wwwrver/panel/data 找到 userInfo.json 文件 删除重新建一个空的 userInfo.json 文件即可!(清空原本的登录信息)重启宝塔面板/etc/init.d/bt restart后记这种方法有个缺陷:一旦绑定了宝塔账号的话,那所有操作都白做了,还是免不了要老老实实缴费。。再者,这种方法只是一种投机取巧的办法,开发不易,还是尽量支持正版吧。
2019年03月01日
702 阅读
0 评论
0 点赞
2019-02-28
在Windows10上比较方便的Linux子系统怎么使用
前言这两天刚换了台本本,Huawei MateBook 13 感觉不错,然后发现Windows10商店中可以安装Linux子系统,这对于我这种对虚拟机无爱的猿来说简直就是福音啊,然后就着手进行安装了初探第一次安装的时候(安装Debian),天真的以为直接傻瓜式鼠标点点就行了,结果并不行,本着存在即合理的法则,我决定再安装一次。。。第二次安装,我决定看一下文档,https://docs.microsoft.com/en-us/windows/wsl/about 然后看到了下面这句可能有用的然而,事实证明,我还是太年轻了,这次倒是安装成功了,但是安装lamp环境服务却怎么也启动不了。。。安装成功俗话说,功夫不负有心人。所以我成功安装了,下面看下具体操作步骤建议执行下面命令,使用windows搜索powershell,打开后粘贴代码,回车运行即可Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux傻瓜式操作,按照下面截图操作即可上述操作完成后先别急着安装,还需要几步:使用win+X快捷键调出系统管理菜单后点击应用和功能,然后拉到底下,选择程序和功能 做完上述所有操作以后,就可以到微软商店去安装Linux子系统了,安装完成后按照指示进行操作即可,当然了,也可以直接使用命令行进行安装,首先按Win+R开启cmd命令行,然后输入#(注意斜杠前要空一格,要不然无法识别命令) lxrun /install /y安装完成后再次进入系统时直接在Windows命令行输入bash就可以进入系统了安装宝塔面板安装成功后你就可以使用这个Linux系统了,可以随意安装环境。我的系统中安装了宝塔面板,个人感觉这个集成环境还是很方便的。安装前操作在Ubuntu/Deepin下我们可以通过 apt-get 命令 很方便的安装 / 卸载软件,由于默认的软件包仓库是位于国外的,安装软件的时候就可能遇到各种网络问题或者下载到的一些资源不完整,因此就需要切换数据源为国内的镜像站点来改善。备份源cp /etc/apt/sources.list /etc/apt/sources.list_backup更换源编辑配置文件sudo vim /etc/apt/sources.list使用阿里云的源地址通过 vim 批量查找替换操作:%s#deb http://archive.ubuntu.com/ubuntu/#deb http://mirrors.aliyun.com/ubuntu/#g :%s#deb http://security.ubuntu.com/ubuntu/#deb http://mirrors.aliyun.com/ubuntu/#g更新源配置sudo apt-get update安装由于winsows10只支持几种Linux发行版,而对于我们而言Ubuntu/Deepin还是比较熟悉的,所以就只提供下这两种发行版的安装命令(注意,执行命令的时候要使用root权限):sudo wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh等待十来二十分钟就安装成功了
2019年02月28日
619 阅读
0 评论
0 点赞
2019-02-27
读书是个好习惯,要坚持
钱是一种奇怪的东西。没钱的时候,你总认为钱是世界上最重要的东西。过去我也常常这样认为,但现在我再也不这样看了,我从惨痛的教训中明白了这一点。上学的时候,有一位英语老师给我留下了深刻的印象,他经常给我们引述著名作家的话语。我对这些话语不是很感兴趣,现在也忘得差不多了。但有一句话不时在我耳边响起,这是那位英语老师最常说的一句话,他说:“当诸神想惩罚我们时,他们就让我们的祈祷实现。”听起来有些愚蠢,对吗?当时我也不明白是什么意思,现在我可以告诉你了。它的意思是,如果你十分想得到某样东西,你就有可能得到,但将以一种你不希望的方式得到。我的意思是,你可能不得不付出你意想不到的代价。事情发生在2005年11月22日,星期二,我下班回家的途中。我是个汽修工,我喜欢在汽修厂工作,我一直梦想拥有一份属于自己的事业,不用很大,只要是我自己创建的就行。如果是为自己工作,我不介意有多辛苦。所以我离开父母,去了伦敦。我想,只有那样我才能赚到更多的钱。父亲为此和我吵了一架。他怎么也不明白,当我衣食丰足时为什么要离开家。丰足?什么叫丰足?我常问他。像他那样活着——终生住在一套单位的福利房里,没有一点儿期盼,只守着一只金表和养老金度日?我爱他,但看到他如此容易满足,我很窝火。他在那个嘈杂的工厂工作了那么多年,一点儿成就也没有。那天晚上我回家时,这些想法一股脑儿都涌了上来。还记得我当时在想,要是我能摆脱这一成不变的生活就好了,要是我能得到1万英镑就好了。然后,我在地铁外停下来买了一份刚出版的晚报。我想这份报纸可以让我在回家的路上暂时不想自己的事情,我可以读读别人的麻烦事或者新影片的介绍。我不知道我什么时候开始意识到报纸有些不对劲,好像头版有什么地方搞错了。于是我仔细看报纸的头版,发现上面印的日期是2005年11月23日,星期三,而不是2005年11月22日,星期二。“上帝!”我在心里惊呼,“这是明天的报纸!”刚开始我不相信这是真的,但上面的新闻与今天电视里播的都不一样。这只有一种解释:我买到了明天的报纸。就在那一刻,我意识到了什么——我的祈祷应验了。我的手剧烈地颤抖着,几乎无法翻动报纸。但它们就在那里——明天的赛马结果。我盯着获胜的马匹的名单,仔细地从中选择号码。我挑了一匹不被看好的赛马,下注的回报率是50倍。那是一匹我永远也想不到要下注的马。第二天一早,我从银行里取出了我的全部积蓄——300英镑,然后我在午饭的时候去下注。我分别去了几家投注站,我不想引起任何人的怀疑。下午赛马的结果与那份报纸所刊登的一模一样。我需要做的就是前去领奖。1.5万英镑,太爽了!就等着告诉爸爸妈妈了!他们肯定无法相信这是真的。我打开电视,但仍在不停地想如何去使用这笔钱,几乎没听进一个字。突然电视上开始插播新闻,播音员提到了塞尔比——我的家乡。我开始盯着荧屏。那天下午父亲工作的工厂发生了爆炸,爆炸引发严重火灾,22人死亡,许多伤员被送进医院。接下来播音员说了什么,我不知道。我一动不动地坐在椅子上,心中充满了恐惧。昨晚买的报纸掉到了地上。我突然想起了什么。我捡起报纸,疯狂地翻阅。在“最新消息”中,我看到了这则消息:今日下午,塞尔比的工厂发生爆炸,多人悲惨死亡。我一直在忙于挑选我要投注的获胜马匹的号码,没注意到这则消息。我双手颤抖着拨通了家里的电话。母亲证实了我的猜想:父亲死了。而我本来可以救父亲一命的!我把报纸撕得粉碎,号啕大哭起来。最终,我得到了自己的事业,做得也很好。妈妈获得了保险赔款,她的生活比以前更富裕。唯一的问题是,自从父亲走后,她再也不关心自己是活着还是死去了。当诸神要惩罚我们时,他们干得真他妈漂亮!
2019年02月27日
574 阅读
0 评论
0 点赞
1
...
6
7
8