Linux命令ssh以及scp的使用

今天干了一件蠢事,在服务器上scp到服务器上,还好是copy,否则后果不堪设想。故,写此文,加深印象。

引言

为什么会用到ssh呢,会什么会用到scp,这就要提到一个字“云”。因为有云服务器的存在,所以你再也没法给服务器插上键盘、插上显示器了,因为你够不着他。那要使用云服务器,就必须用到ssh。

ssh的使用

ssh常用两种登录方式:

  1. 密码
  2. 公钥

两者都需要用户名。
使用以下命令

1
ssh username@yoursite.com

域名也可以用ip代替。

但是使用密码登录有些缺陷,如果被知道了用户名,就能被暴力破解,也就报废了。
所以通常,应该将密码的方式关闭。

公钥

这种加密方式中,密钥分公钥和私钥两部分。

  • 公钥为“验证器”,能验证唯一的一个私钥。
  • 私钥为“生成器”,能生成唯一的公钥。

也就是说,别人拿到公钥也没威胁,而私钥丢了就完蛋了。但是私钥相比于密码一定更加安全,因为私钥很长长长长长长长长。

scp

当你确认你能ssh成功时,回到你的电脑。在你的电脑上执行scp,即能进行远程拷贝。
格式为:

1
scp [option] source … dest

source和dest是远程或是本地,无所谓了。也就是说,你同时操纵两台远程电脑都行啊。

分享到 评论

PHP5.3不支持简便的数组声明

在惨痛的教训中,人才能成长啊ToT。今天花了一晚上,看着新浪在那边status 500。我以为他是自己闹别扭了,结果是我用PHP5.4的语法他用PHP5.3,他不认识了。

5.4以后的数组

1
2
$arr = [];
$arr = [0=>"foo", 1=>"bar"];

这里数组的声明,只要用[]即可,多么简洁对称啊,跟js多么相像啊,而之前的就臃肿一些。

5.3的数组

1
2
$arr = array();
$array = array(0=>"foo", 1=>"bar");

这里用array()代替[],用2个字符搞定的事情,要用7个字符。。。

感想

各大paas仍在使用PHP5.3这个09年推出的版本,与去年(2014年)8月已停止维护。人家官方都不维护了,甚至PHP5.4都停止功能更新,只剩安全更新了,为什么就不动一下呢。
我对于各大云的看法仍然是,iaas最好。paas给我的体验就像是,住进了个宾馆,拖鞋还要你付钱。iaas是,租了间房子,家具允许你自己安防,东家还会每月提醒你水电煤。我想,除了便宜,paas一无是处吧。

分享到 评论

phpMyAdmin遇到问题,无效的令牌

这几天做网站的时候,需要用到MySQL,装上xmpp却不能用phpMyAdmin,以前有个登录框,现在却没了,显示“无效的令牌”

在网上看到一个搞笑的说法,把“phpMyAdmin”改成“phpmyadmin”就行了,我从未见过如此厚颜无耻之人,竟说出如此粗鄙之语。。。

实际方法是,进入phpMyAdmin目录下的config.inc.php,有一条设置auth_type,有三种常用的,分别是“config”,“cookie”,“http”。

  • config是从config.inc.php文件中读取用户密码,不够灵活,不推荐
  • cookie是从浏览器登录,将登陆信息写入cookie。
  • http是弹出一个登录框,让你输入信息。

将auth_type从config改为cookie之后,就成功了

分享到 评论

在Windows上将mongod设为服务

之前在ubuntu上安装mongodb,安装完就自动完成配置,也不需要将他设为服务。但是windows上似乎麻烦一点,需要自行安装为服务,隔壁的mysql就客气多了。

安装准备

最重要的一步,确定你安装好了mongodb。
将mongo和mongod加入path,当然,只要把mongo根目录下的bin文件夹加入path就行了。

安装过程

这里使用mongod命令,注意以下几点:

  1. 需要设置db的路径,使用参数—dbpath,该路径上的文件夹一定存在(需要手动创建)
  2. 需要设置log的路径,使用参数—logpath,该文件会自动创建

命令如下:

1
mongod --dbpath c:\foo\db --logpath c:\foo\bar.log --install

结束后的事项

安装完成后,第一次启动需要手动开启,或者重启系统。
需要重新安装,请使用参数—reinstall

分享到 评论

使用nodejs创建简单的http客户端并连续发送请求

新年之初,学院的网站上线了某个特别的页面,一个投票的页面,一点按钮就能计数。我想,与其一次一次地点他,为何不想办法简化呢。所以,想到了用nodejs建立客户端。

首先,使用http模块

最初的一步,当然是有http模块,使用这个模块,http服务器和客户端都可以实现。
在http协议中,一个客户端应该做些什么事呢?往http服务器发送一个请求,等着服务器给你应答,他不应答就一直等着,你的请求没完他就一直等着。所以这里需要处理两个问题,如何发送请求,如何处理应答。

发送请求

这里使用http模块的request函数。形如:

1
http.request(options, [callback])

第一个参数为选项,在里面可以设置hostname和path。第二个回调函数可选,形如function(res),传进来的参数res是一个stream。虽说回调函数是可选的,为了实现不停点击,这个回调函数是必要的。
request函数会返回一个ClientRequest对象(简称client),request函数只会发送头部,而且不会发出整个request,如果要发出完整的,请使用client.write()和client.end()

处理应答

之前说起回调函数function(res),当第一次收到应答时,该回调函数就会调用,但是,你只有一个stream,里面的内容还没拿到,在拿到数据之前就发起下一个request,他会当作你没有收到应答,所以,对这个stream一定要处置。
怎么处置呢,当stream传完时,会发出data事件,所以用res.on(‘data’, function())即可

完整代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var http = require('http')
var options = {
hostname: "****",
path: "/"
}
var func = function() {
var req = http.request(options, function(res) {
res.on('data', function(chunk){
func()
})
})
req.end()
}
func()
分享到 评论

js获取地址栏中的参数

大家用浏览器的时候,都对地址栏很了解吧。只要在地址栏输入一段网址,就能神奇地打开一个网站。但是这网址后面经常有个问号,后面跟了一串参数,这些参数用PHP的话很容易就能得到,用_GET即可。但是,如果是javascript呢,如何做到?

地址栏里的地址,是URL

平时在地址栏输入的网页地址,其实是URL,学名为统一资源定位符。可以通过他,确定互联网中的任意一个文件,没错,是任意一个。具体分为以下部分:

  • url格式名(协议名)
    这一段描述了该url遵从哪种格式(协议),通常来说可以算是协议,比如常见的http:和ftp:算是协议,但是mailto:和file:这种呢,还能算是协议吗。url格式名的最后,还跟有一个冒号,表示结束。
  • 主机名(域名 / ip地址)
    有没有想过,是先有互联网,还是先有域名呢。这明摆着是先有互联网,在有域名服务之前,所有人只能用ip地址来访问网站,这多蛋疼啊。主机名这一段既可以用域名,也可以用ip。主机名以//为开头,当然后面有个可选的端口名,默认由url格式决定。
  • 路径
    以/开始,表示资源在主机中的哪个位置。
  • 可选项,查询
    由?开头,作用是承载那些,用来定位资源的其他附加信息。
  • 可选项,段落
    由#开头,表示在资源中的具体位置。
    这次我们的命题,主要是解决查询这段的内容。

正题,获取查询参数

  1. 首先要从地址栏中把url给扒下来。
    window.location
    使用dom中的window对象即可获得url。这里的url包含上一段中描述的所有内容。
    使用window.location.search即可获取查询段。

  2. 根据键查询
    查询段里的数据都是按键值对形式表示的,以&为分隔符。设想过用string.split函数,按&分开,但是不对啊,最前面还有个问号,每对键值对之间还有个等号,多麻烦。
    遇事不决用正则,你要搜索,用正则就是最快的方式了。分析一下,如果把前面的?去掉,那么每个键值对以&开头或结束,或是什么都没有,这样就得出了正则表达式(^|&)key([^&]*)(&|$)

  3. 获取值
    从之前的正则表达式中,已经能根据键,获取key=value的形式了,那么,怎么拿到value呢。js的正则表达式太神奇了,你的正则表达式中有一个括号,他就会多返回一个结果。这里,我们的value在第二个括号中,也就是第三个结果,只要访问结果的第三个元素即可。

分享到 评论

给express带个session

用过PHP的人都知道session吧。和cookie相同,都能用户存储访问的数据,但是session比cookie更加安全、可靠,那是因为cookie存在本地,而session存在服务端,你总不能乱改session吧。

中间件express-session

这是express自带的中间件,可以实现简单的session功能,使用起来也非常方便。

1
2
var session = require('express-session')
app.use(session({}))

这样就完成了中间件的使用。
session还有一些参数可以设置,在这里可以查看:地址

session的使用

session的使用也非常简单,直接使用req.session即可

分享到 评论

mongodb在ubuntu上的安装

这几天在考虑给我的小破网站加个数据库,既然是基于nodejs的网站,给他配个同一家族的得了,顺便学习一下mongodb。

1、安装

安装可以使用最简单最常用的apt-get。
使用以下命令

1
sudo apt-get install mongodb

社区的版本比较旧,也可以使用mongodb的官方源,因为这里难度为Lv.0,所以不多说了。

2、配置

你如果以为安装完就万事大吉,可以开始跑了,那就大错特错了。在运行之前还需要配置mongodb的存储位置。安装时候不帮你配置还,一看就是用着javascript的。
默认的位置是/data/db。这个位置在ubuntu下访问、更改时需要管理员权限的。当然,你也可以不用默认位置。
方法就是运行以下命令:

1
2
sudo mkdir /data
sudo mkdir /data/db

之后就可以运行了。

3、运行

运行可以说是最简单的一步了。
服务端用mongod,客户端用mongo即可。

分享到 评论

使用npm快速安装依赖

因为种种原因,不得不将一个项目放在两台电脑里。这时遇到了一个问题,电脑A中已经配置好了express等模块,电脑B中还没有,我是不是该一个一个模块去装呢。其实,有个简便方法。

使用npm安装模块

首先从简单的问题开始谈起,如果要安装一个nodejs模块,该怎么办?
使用命令:

1
npm install *模块名*

即可,可以选择使用参数-g,使用后会安装在用户的文件夹中,不使用则会安装到./node_modules目录下。

install指令中,不指定模块,又会如何

install指令,一看就需要指定模块,你不指定,叫我安装个毛啊。
但是npm就是这么奇葩,npm install是可以执行的。该命令的功能是,根据目录下package.json文件的内容,安装模块。
就是说,package.json中标明了的模块,都会被安装。

package.json文件示例

这里给出一个最简单的package.json文件,用于安装express模块。

1
2
3
4
5
{
"dependencies" : {
"express" : "*"
}
}

既然是json文件,整个就是个对象,把需要的模块写在dependencies模块中即可。

package.json其他属性

这里列出几个常用的,其他的请去官网查看官方文档

  • name – 项目的名称
  • version – 版本号
  • description – 项目描述
  • homepage- 项目主页
  • author – 作者
  • repository – 版本库
分享到 评论

nodejs监听80端口(HTTP端口)

这几天接触Nodejs下来,感觉颇深,要是大学有这门课就好了,大家也会去自发了解计算机网络方面的知识。这次使用Nodejs搭建简单的http服务器,并做出简单的”Hello World!”

方案1:Nodejs内置的http模块

用Nodejs,却不用模块,一定会被人笑话的。这次用最基本的http模块,过程很简单

1
2
3
4
http = require 'http'
server = http.createServer (req, res) ->
/*DO SOMETHING*/
server.listen 80

首先,引入http模块,再创建Server,进行监听。(别吐槽我的代码,这是coffeescript不是js)
会出现错误:events.js throw er;
这是因为Linux中0-1023端口只允许root用户使用,所以要么使用其他端口,要么使用sudo node,当然你要root的话我也拦不住啊,自己承担后果吧。

方案2:express模块

使用express可以快速建立web应用,通俗点就是说“网站”。
代码如下:

1
2
3
4
5
express = require 'express'
app = express()
app.get '/', (req, res) ->
/*DO SOMETHING*/
app.listen 80

express的监听默认使用http,所以还是用80端口吧。浏览器里每次使用url进行request,其实都是一次get,所以这里可以用get方法。
但是这时又出现问题,sudo node提示找不到模块。这是因为,root的path与用户的不同,所以无法使用全局安装的模块了。这里不推荐去改secure_path,指不定被玩坏。还是老老实实把模块装到目录下吧,终端如下:

1
npm install express

分享到 评论