liunx 常用操作命令

1、设置让一个目录下的所有文件和下一级目录的权限都是777

sudo chmod -R 777 [your folder]

2、linux 查看文件权限

命令:ll 或者 ls -l

3、压缩为tar.gz文件,先写压缩后的文件名,后指定路径

tar -zcvf site.tar.gz ./*    打包目录下所有文件

4、解压tar.gz文件

tar -xzvf file.tar.gz //解压tar.gz

5、查看占用空间

du -sh : 查看当前目录总共占的容量。而不单独列出各子项占用的容量

du -lh –max-depth=1 : 查看当前目录下一级子文件和子目录占用的磁盘容量

6、删除文件

rm -rf 目录名:
把子目录及子目录中所有档案删除,并且不用一一确认

rm -f 文件名:
就是直接强行删除,不作任何提示的意思

7、查找文件并删除

以查找和删除mp3为扩展的文件为例:
find / -name "*.mp3" |xargs rm -rf
会删除所有以mp3为扩展的文件。操作的时候先:
find / -name "*.mp3"
会打印出匹配的文件,如果觉得正是想删除这些文件,再执行:
find / -name "*.mp3" |xargs rm -rf

在 Velocity 中判断对象为 null 或空字符串

在写 Java 项目时,很多时候我们都必须判断一下对象是否为 null。这个在 Java 代码中,很容易实现。在使用 Velocity 的 Java Web 项目中,很多时候,需要在 Velocity 的模板中,判断一个对象是否为空。那么这时,该如何判断呢?今天D瓜哥就来给大家简单介绍介绍!

方式一

事实上,在 Velocity 中 null 对象是作为 false来进行进行计算的。那么,判断是否为空就很简单了:

#if(!$diguage )
    "地瓜哥"博客网
#end

如果 $diguage 的值为 false,那么,也能通过这个测试。所以,这种方式检查的是引用是否为 nullfalse

方式二

在静默引用(Quiet References)中,如果引用为 null,则会被计算为空字符串 ""。那么,我们也可以里中这个特性来完成我们的需求:

#if( "$!diguage" == "" )
    "地瓜哥"博客网
#end

这种检查方式,如果 $diguage 为空字符串,则也能通过检查。所以,这个检查方式,实际检查的是引用是否为 null 或者为空字符串 ""

值得一提的是,如果仅仅需要检查引用是否为空字符串 "",可以这样写:

#if( "$diguage" == "" )
    "地瓜哥"博客网
#end

方式三

结合 方式一方式二,可以做到仅仅检查一个用是否为 null

#if( (! $diguage ) && ("$!diguage" == "") )
    "地瓜哥"博客网
#end

这里的逻辑是这样的: (null or false) and (null or > empty-string),从这里就能一眼看出,如果结果想为 true, 则引用 $diguage 必须为 null。因为 false 和空字符串 ""永远不可能为 true。在D瓜哥看来,这样写,未免有点太复杂了。

方式四

不要直接检查对象对象是否为空,而是使用一个能自解释的方法(self-explaining method)。例如:

#if( $car.empty )
    "地瓜哥"博客网
#end

这是 Shinobu Kawai’s 推荐的解决方案。前提就是必须实现一个如下的一个方法,但是,带来的好处就是可以使模板易读性更强!

public boolean isEmpty()
{
    // 如果值为空,则返回 true
}

参考资料中,还有其他方法。但是,这些方法相关的类,D瓜哥找了一下,根本没有找到;尝试了一下#ifnull( $diguage ),模板解析直接就报错了。相比,这些方法都已经不再支持了。所以,D瓜哥就不再介绍了。

参考资料

  1. CheckingForNull – Velocity Wiki
  2. Conditionals – Velocity User Guide
  3. Quiet Reference Notation – Velocity User Guide

转自:
http://www.diguage.com/archives/142.html

Velocity Macro(宏)

定义宏和使用宏

#macro指令用于定义一个VTL模板的重复代码块——宏。下面是一个简单的定义宏的例子:

#macro( d )
#end

这段代码定义了一个宏,名字为d,没有参数。下面是使用这个宏的代码:

#d()

Velocity在遇到#d()的时候,会用”<tr><td></td></tr>”替代上面的#d()这一行。

宏的参数:
宏也可以带参数,而且是任意多个参数。不过,宏定义时有几个参数,宏调用时就要提供同样数目的参数。

#macro( d $name)
$name
#end

使用:

#d("name1")

宏的参数可以是以下VTL元素中的任意一种:引用、字符串字面值、数值字面值、整数范围(比如[1 .. 10]、[$start .. $end])、数组、布尔值true或者false。

内联的宏

当宏是在一个Velocity模板中定义时,这个宏(是inline的)只能被该模板使用,同一个网站下的其他模板是不能用的。如果是在一个Velocity宏模板库中定义的宏,就可以被任何同一网站下的模板使用。

其他一些注意点

宏必须在第一次使用它之前定义。当#Parse()一个模板文件时,尤其要注意这一点。

好的写法:

#macro(link $linkHref $linkId)
    $bodyContent
#end

参考:
http://www.cnblogs.com/yuepeng/archive/2010/11/23/1885700.html
http://my.oschina.net/tinyframework/blog/221930

HTTP1.1协议详解

例:
请求行 GET /App1/1.html HTTP/1.1
GET:请求方式,默认的请求方式。其他常用的请求方式还有POST。

GET的特点:
把表单的请求的数据放在了请求的URI的后面。例:
/App1/c.html?username=sdsfds&password=234324
这样不好:暴露数据;请求行长度有限。

POST的特点(经常使用的):
借助HTML中的form表单。
<form action=”c.html” method=”post”>
请求参数出现在正文部分。长度木有限制。相对安全。
—————————
/App1/1.html:请求的资源的URI。
—————————

HTTP/1.1:客户端使用的协议的版本

例:
响应行 HTTP/1.1 200 OK
HTTP/1.1:服务器用的协议版本
200:正常响应码。

响应码代表服务器处理的结果的一种表示
200:正常
302/307:重定向
304:服务器的资源没有被修改
404:请求的资源不存在
500:服务器报错了
OK:响应码描述

请求消息头:向服务器传递附加信息
Accept:通知服务器,浏览器可以接受的MIME类型。(文件系统中用文件扩展名区分数据的类型。网络上用MIME类型来区分数据类型。Tomcat\conf\web.mxl)
MIME类型名称:大类型/小类型
Accept-Charset:通知服务器,浏览器支持的字符集
Accept-Encoding:通知服务器,浏览器能够解码的数据压缩方式。比如:gzip
Accept-language:通知服务器,所希望的语言

Host:请求的主机和端口
*Referer:是一个URL地址。取值是当前页面之前的那个页面地址的。防盗链
*Content-Type:通知服务器,请求正文的MIME类型。
取值:application/x-www-form-urlencoded默认值
对应的是form表单的enctype属性
If-Modified-Since:通知服务器,缓存的文件的最后修改时间。
User-Agent:通知服务器,浏览器类型.
Content-Length:表示请求消息正文的长度
Connection:表示是否需要持久连接。如果服务器看到这里的值为“Keep -Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接

Cookie:这是最重要的请求头信息之一(会话有关)

响应消息头:
*Location:通知客户端,指示新的资源的位置(结合302/307来用。请求重定向)
Server:通知客户端,服务器的类型
*Content-Encoding:通知客户端,响应正文的压缩编码方式。常用的是gzip。
*Content-Length:通知客户端响应正文的数据大小
*Content-Type:通知客户端响应正文的MIME类型
*Refresh:让浏览器自动刷新。取值为整数(刷新的时间间隔,单位是秒)
Refresh:3
Refresh:3;URL=其他资源的URI
*Content-Disposition:通知客户端,以下载的方式打开资源。
Content-Disposition:attachment;filename=1.jpg
*****Set-Cookie:SS=Q0=5Lb_nQ; path=/search服务器端发送的Cookie(会话有关)

*Expires: -1 网页的有效时间。单位是毫秒
*Cache-Control: no-cache (1.1)
*Pragma: no-cache (1.0) 通知客户端不要缓存

转自:http://www.cnblogs.com/javahyj/p/5538533.html

几个linux常用命令记录

使用ssh登陆linux主机以后,如何能够快速的和本地机器进行文件的交互呢,也就是上传和下载文件到服务器和本地,与ssh有关的两个命令可以提供很方便的操作:
sz:将选定的文件发送(send)到本地机器
rz:运行该命令会弹出一个文件选择窗口,从本地选择文件上传到服务器(receive)

参数:
-b binary 用binary的方式上传下载,不解释字符为ascii

注:rz/sz 通过Zmodem协议传输数据,适合中小文件。我(客户端)上传,你(服务器)接收(RZ),我下载(客户端),你(服务器)发送(SZ)。

find命令——查找文件名

1.在某目录下查找名为“elm.cc”的文件

find /home/lijiajia/ -name elm.cc

2.查找文件名中包含某字符(如”elm”)的文件

find /home/lijiajia/ -name ‘*elm*’

find /home/lijiajia/ -name ‘elm*’

find /home/lijiajia/ -name ‘*elm’

 

PHP代码添加注释的几种格式

1、用 // 开头,作为单行注释。例如:
<?php
   // Author: mole
   // Date:2012-2-8
   echo “Welcome!”;
?>

2、用 # 开头,作为单行注释。例如:
<?php
   # Author: mole
   # Date:2012-2-8
   echo “Welcome!”;
?>

3、以 /* 开头,以 * / 结束的多行注释。例如:
<?php
   /*
     下面是计算员工平均
     工资的函数

    * /
   calculate();

?>
注:上面*和/之间的空格应该是没有的

OpenShift 添加 public key

OpenShift是Red Hat公司推出的PaaS(Platform as a Service,平台即服务)。
OpenShift支持Java,Ruby,Node.js,PHP,Perl和Python应用。开发人员可以直接在平台上部署应用进行运行、测试。也可以作为免费空间用,php、mysql、phpmyadmin、域名都配置好了装个wordpress当博客用。

官网:https://www.openshift.com/

生成ssh密钥匙

先要生成一个密钥保存在OpenShift中,官网介绍有使用rhc和putty来生成。如果已安装过git,可以使用 ssh-keygen 来生成。
生成后,使用cat命令查看生成的文件。 将生成的公钥是放在OpenShift,Key name 自己填写。

使用xshell ssh进行连接

在连接时会提示选择 public key ,通过浏览在 C:\Users\name\.ssh 目录下选择相应的文件,进行导入。
导入后点击确定。

可以在登录的机器上用ssh连接到创建的应用上
web站点的根目录在用户家目录下的:
web站点的根目录在用户家目录下的:
/app-root/repo/php

注:
1、ssh-keygen命令用于为“ssh”生成、管理和转换认证密钥,它支持RSA和DSA两种认证密钥。
2、在提交时git会要求你用vim添加一个修改的日志信息。作为版本的注释说明。

参考:
OpenShift使用方法介绍
ssh-keygen命令

生成 SSH 公钥及多账户设置

许多 Git 服务器都使用 SSH 公钥进行认证。
为了向 Git 服务器提供 SSH 公钥,如果某系统用户尚未拥有密钥,必须事先为其生成一份。
这个过程在所有操作系统上都是相似的。
首先,你需要确认自己是否已经拥有密钥。
默认情况下,用户的 SSH 密钥存储在其 ~/.ssh 目录下。

$ cd ~/.ssh
$ ls

我们需要寻找一对以 id_dsa 或 id_rsa 命名的文件,其中一个带有 .pub 扩展名。 .pub 文件是你的公钥,另一个则是私钥。 如果找不到这样的文件(或者根本没有 .ssh 目录),你可以通过运行 ssh-keygen 程序来创建它们。在 Linux/Mac 系统中,ssh-keygen 随 SSH 软件包提供;在 Windows 上,该程序包含于 MSysGit 软件包中。

首先 ssh-keygen 会确认密钥的存储位置(默认是 .ssh/id_rsa),然后它会要求你输入两次密钥口令。如果你不想在使用密钥时输入口令,将其留空即可。

现在,进行了上述操作的用户需要将各自的公钥发送给任意一个 Git 服务器管理员(假设服务器正在使用基于公钥的 SSH 验证设置)。 他们所要做的就是复制各自的 .pub 文件内容,并将其通过邮件发送。 公钥看起来是这样的:

$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAklOUpkDHrfHY17SbrmTIpNLTGK9Tjom/BWDSU
GPl+nafzlHDTYW7hdI4yZ5ew18JH4JW9jbhUFrviQzM7xlELEVf4h9lFX5QVkbPppSwg0cda3
Pbv7kOdJ/MTyBlWXFCR+HAo3FXRitBqxiX1nKhXpHAZsMciLq8V6RjsNAQwdsdMFvSlVK/7XA
t3FaoJoAsncM1Q9x5+3V0Ww68/eIFmb1zuUFljQJKprrX88XypNDvjYNby6vw/Pb0rwert/En
mZ+AW4OZPnTPI89ZPmVMLuayrD2cE86Z/il8b+gw3r3+1nKatmIkjn2so1d01QraTlMqVSsbx
NrRFi9wrf+M7Q== schacon@mylaptop.local

可以针对不同的git生成各自的 ssh 公钥。
进入 ~/.ssh 目录后,创建config文件,无扩展名,在里面设置配置项。
config基本写法:

Host myhost(这里是自定义的host简称,以后连接远程服务器就可以用命令ssh myhost)[注意下面有缩进]
   User 登录用户名(如:git)
   HostName 主机名可用ip也可以是域名(如:github.com或者bitbucket.org)
   Port 服务器open-ssh端口(默认:22,默认时一般不写此行)
   IdentityFile 证书文件路径(如~/.ssh/id_rsa_*)

例如:

host gitlab.iduoduo.com
 HostName gitlab.duoduo.com
 IdentityFile ~/.ssh/id_rsa
 User k68@duoduo.com

host yiya-xueyu.rhcloud.com
 HostName yiya-xueyu.rhcloud.com
 IdentityFile ~/.ssh/id_rsa_rhcloud
 User k68@126.com

jello 中前端目录

前端目录

├── fis-conf.js
├── page
│ ├── doc
│ ├── examples
│ ├── index.vm
│ └── layout
├── server.conf
├── static
│ ├── favicon.ico
│ ├── js
│ ├── libs
│ └── scss
├── test
│ ├── page
│ ├── page.json
│ └── page.jsp
└── widget
├── footer
├── header
└── sidebarmenus

说明:
fis-conf.js 用来设置 fis 编译配置。
page 用来存放各类页面级模板文件(.vm), 可以直接在jello 环境下预览。
layout 骨架 vm
static 用来存放各类静态资源,如:JS、CSS、image、swf…
test 用来存放各类测试数据
widget 用来存放页面小片段,方便其他页面引用。