kk Blog —— 通用基础

date [-d @int|str] [+%s|"+%F %T"]

Ubuntu安装mysql扩展

打开“新立得软件包管理器“安装两个东东就好了,

他们分别是:php5-mysql 和 libapache2-mod-auth-mysql,

装好之后重启apache:sudo/etc/init.d/apache2 restart

git remote管理远程库

查看当前的远程库

要查看当前配置有哪些远程仓库,可以用 git remote 命令,它会列出每个远程库的简短名字.在克隆完某个项目后,至少可以看到一个名为 origin 的远程库,Git 默认使用这个名字来标识你所克隆的原始仓库:

1
2
3
4
5
6
7
$ git clone git://github.com/schacon/ticgit.git
$ cd ticgit
$ git remote
	remote也可以加上 -v 选项(译注:此为 –verbose 的简写,取首字母),显示对应的克隆地址:
$ git remote -v
	origin git://github.com/schacon/ticgit.git
	如果有多个远程仓库,此命令将全部列出.

这样一来,我就可以非常轻松地从这些用户的仓库中,拉取他们的提交到本地.

添加远程仓库

要添加一个新的远程仓库,可以指定一个简单的名字,以便将来引用,运行git remote add [shortname] [url]

1
2
3
4
5
6
7
8
9
10
11
12
$ git remote
	origin
$ git remote add pb git://github.com/paulboone/ticgit.git
$ git remote -v
	origin git://github.com/schacon/ticgit.git
	pb git://github.com/paulboone/ticgit.git
	现在可以用字串 pb 指代对应的仓库地址了.
	比如说,要抓取所有 Paul 有的,但本地仓库没有的信息,可以运行 git fetch pb
$ git fetch pb
	现在,Paul 的主干分支(master)已经完全可以在本地访问了,
	对应的名字是 pb/master,你可以将它合并到自己的某个分支,
	或者切换到这个分支,看看有些什么有趣的更新.

从远程仓库抓取数据

正如之前所看到的,可以用下面的命令从远程仓库抓取数据到本地: $ git fetch [remote-name]此命令会到远程仓库中拉取所有你本地仓库中还没有的数据.运行完成后,你就可以在本地访问该远程仓库中的所有分支,将其中某个分支合并到本地,或者只是取出某个分支,一探究竟.

如果是克隆了一个仓库,此命令会自动将远程仓库归于 origin 名下.所以git fetch origin 会抓取从你上次克隆以来别人上传到此远程仓库中的所有更新(或是上次 fetch 以来别人提交的更新).有一点很重要,需要记住,fetch 命令只是将远端的数据拉到本地仓库,并不自动合并到当前工作分支,只有当你确实准备好了,才能手工合并. 说明:
事先需要创建好远程的仓库,然后执行

1
2
3
4
5
git remote add [仓库名] [仓库url]  
git fetch [远程仓库名]  
即可抓取到远程仓库数据到本地,再用  
git merge remotes/[仓库名]/master 
就可以将远程仓库merge到本地当前branch.

这种分支方式比较适合独立-整合开发,即各自开发测试好后 再整合在一起.

远程仓库的删除和重命名

在Git中可以用git remote rename命令修改某个远程仓库的简短名称,比如想把 pb 改成 paul,可以这么运行:

1
2
3
$ git remote rename pb paul
$ git remote
	origin

paul注意,对远程仓库的重命名,也会使对应的分支名称发生变化,原来的 pb/master 分支现在成了paul/master. 碰到远端仓库服务器迁移,或者原来的克隆镜像不再使用,又或者某个参与者不再贡献代码,那么需要移除对应的远端仓库,可以运行 git remote rm 命令:

1
2
3
$ git remote rm paul
$ git remote
	origin

CodeIgniter去掉url中的index.php

RewriteEngine命令需要rewrite mod的支持

$>cd /etc/apache2/mods-enabled 切换到apache下的mods-enabled目录
$>sudo ln -s ../mods-available/rewrite.load rewrite.load 启用rewrite mod
$>sudo /etc/init.d/apache2 restart 重启apache服务器。 或者在apache的配置文件httpd.conf中将#LoadModule rewrite_module modules/mod_rewrite.so前的#去掉,再重启服务器。
或者
sudo a2enmod rewrite

CodeIgniter去掉url中的index.php

CodeIgniter去掉url中的index.php CI默认中url中带index.php,比如 http://localhost/index.php/blog/comment/1.html 去掉这个index.php步骤:

1.打开apache的配置文件,conf/httpd.conf :

LoadModule rewrite_module modules/mod_rewrite.so,把该行前的#去掉。
搜索 AllowOverride None(配置文件中有多处),看注释信息,将相关.htaccess的该行信息改为AllowOverride All。

2.在CI的根目录下

即在index.php,system的同级目录下,建立.htaccess,直接建立该文件名的不会成功,可以先建立记事本文件,另存为该名的文件即可。内容如下(CI手册上也有介绍):

1
2
3
RewriteEngine on
RewriteCond $1 !^(index.php|images|robots.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

就可以去掉 index.php 了。
要注意 /index.php/$1 要根据你目录(Web 目录,比如 http://www.domain.com/index.php)的实际情况来定,比如网站根目录是 /ci/index.php 则要写成 /ci/index.php/$1

RewriteCond $1 !^(index.php|images|robots.txt) 上面的代码意思是排除某些目录或文件,使得这些目录不会 rewrite 到 index.php 上,这一般用在图片、js、css 等外部资源上。也就是说非 PHP 代码都要排除出去。(这里我排除了 images 目录和 robots.txt 文件,当然 index.php 也应该被排除)

3.

将CI中配置文件(system/application/config/config.php)中$config[‘index_page’] = &index.php&;将$config[‘index_page’] = &&; 。
ok,完成。还要记得重启apache。

tail 命令

1.如果你只想看文件的前5行,可以使用head命令,如:
1
head -5 /etc/passwd
2. 如果你想查看文件的后10行,可以使用tail命令,如:
1
tail -10 /etc/passwd 或 tail -n 10/etc/passwd
1
tail -f /var/log/messages

参数-f使tail不停地去读最新的内容,这样有实时监视的效果 用Ctrl+c来终止!

3. 查看文件中间一段,你可以使用sed命令,如:
1
sed -n '5,10p' /etc/passwd

这样你就可以只查看文件的第5行到第10行。

tail语法格式:

1
2
3
tail [ -f ][ -c Number | -n Number | -m Number | -b Number | -k Number ] [File ]
或者
tail [ -r ][ -n Number ] [ File ]

使用说明: tail命令从指定点开始将 File 参数指定的文件写到标准输出。如果没有指定文件,则会使用标准输入。 Number变量
指定将多少单元写入标准输出。 Number变量的值可以是正的或负的整数。如果值的前面有 +(加号),从文件开头
指定的单元数开始将文件写到标准输出。如果值的前面有-(减号),则从文件末尾指定的单元数开始将文件写到
标准输出。如果值前面没有 +(加号)或-(减号),那么从文件末尾指定的单元号开始读取文件。

主要参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
-b Number 从 Number 变量表示的 512 字节块位置开始读取指定文件。
-c Number 从 Number 变量表示的字节位置开始读取指定文件。
-f 如果输入文件是常规文件或如果 File 参数指定 FIFO(先进先出),
  那么 tail 命令不会在复制了输入文件的最后的指定单元后终止,而是继续
  从输入文件读取和复制额外的单元(当这些单元可用时)。如果没有指定 File 参数,
  并且标准输入是管道,则会忽略 -f 标志。tail -f 命令可用于监视另一个进程正在
  写入的文件的增长。
-k Number 从 Number 变量表示的 1KB 块位置开始读取指定文件。
-m Number 从 Number 变量表示的多字节字符位置开始读取指定文件。使用该标志提供在
  单字节和双字节字符代码集环境中的一致结果。
-n Number 从首行或末行位置来读取指定文件,位置由 Number 变量的符号(+ 或 - 或无)表示,并通过行号 Number 进行位移。
-r 从文件末尾以逆序方式显示输出。-r 标志的缺省值是以逆序方式显示整个文件。
  如果文件大于 20,480 字节,那么-r标志只显示最后的 20,480 字节。 -r 标志只有
  与 -n 标志一起时才有效。否则,就会将其忽略。
1
2
3
4
input
tail -b +1 file
tail -c +1 file
tail -n +2 file//从开始数第二行的位置 

vim基本操作

简单配置

1
2
3
4
5
6
set tabstop=8
set shiftwidth=8
set autoindent
set cindent
set nu
set hlsearch

恢复文件关闭之前光标的位置
Vim的全局配置/etc/vim/vimrc,被注释的这么几行:取消注释,g后面的'改成`,改好如下

1
2
3
if has("autocmd")
	au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g`\"" | endif
endif

添加vim状态栏

1
2
3
4
5
6
7
8
9
10
11
12
13
set laststatus=2
set statusline=
set statusline+=%n\                            " buffer number
set statusline+=%f\                            " filename
set statusline+=%h%m%r%w                       " status flags
set statusline+=\[%{strlen(&ft)?&ft:'none'}]\  " file type
set statusline+=%P\                            " file position
set statusline+=%(%l,%c%V%)\                   " line, character
set statusline+=%=                             " right align remainder
set statusline+=0x%-8B                         " character value
set statusline+=%-8{&fenc}\  
set statusline+=%{getcwd()}\  
set statusline+=%<%{$USER}@%{hostname()}\  
解决vi/vim中粘贴会在行首多很多缩进和空格的问题
  1. 在拷贝前输入:set paste (这样的话,vim就不会启动自动缩进,而只是纯拷贝粘贴)
  2. 拷贝完成之后,输入:set nopaste (关闭paste)

1. Vim的几种模式

Vim提供了诸多模式可供使用,不同模式带有不同的命令功能。

普通模式

启动后的默认模式。普通模式下,用户的按键被解释为各种Vim内置命令(如移动光标,删除/查找/替换文字等)。Vim强大的功能大部分即来自普通模式。在普通模式下,按键'a'或'i等即可切换至插入模式。在其他模式下,按键'ESC'即可切换到普通模式。

插入模式

插入模式,可以理解成编辑模式。在此模式下,用户的大部分按键操作都会被写入到文本缓冲区中,从而影响到正在编辑的文本(在执行写操作前,这些更改只限于对缓冲区中内容,并未写入到磁盘文件中)。

可视模式

类似于普通模式,但光标的移动操作会选中光标所经过的文本内容并高亮显示。执行非移动命令时,命令仅执行于高亮选中部分。命令模式下,按键'v'即切换至可视模式。

其他模式
命令行模式执行Vim内置命令或调用外部程序。普通模式下,输入字符':‘进入命令模式;ESC键返回普通模式,或命令执行完成后自动返回普通模式。
替换模式相当于普通编辑器的覆盖编辑模式。普通模式下,输入字符'R'进入命令模式;ESC键返回普通模式。
块选择模式普通模式下,与可视模式相似,但选择范围为块而非以行为单位。输入ctrl-v进入;ESC键返加。

2. 进入Vim

通过命令行启动Vim时,可以指定待编辑文件名,并通过附加选项指定文件打开后光标所在位置。
快捷键功能vim filename打开文件,如文件不存在则创建vim +n filename打开文件,并将光标置于第n行行首vim + filename打开文件,并将光标置于最后一行行首

3. 文件操作

在Vim命令模式(行)中,可以通过快捷命令进入打开文件/文件保存/退出等操作。
快捷键功能

1
2
3
4
5
6
7
8
9
:e  filename使用新创建缓冲区打开文件filename
:w保存文件,如文件为只读,提示失败
:w!强制保存文件,即使文件为只读(是否成功取决于用户对文件权限)
:w filename将当前缓冲区内容保存为文件filename
:n1, n2, filename将n1到n2行内容保存为文件filename
:q退出当前窗口。如文件内容已改动提示失败
:q!退出,即使文件内容已改动
:wq保存后退出保存后退出
:r filename将filename内容读取到当前光标位置ZZ退出。如有未保存内容,保存后退出

为了防止因程序异常中断而导致正在编辑的内容丢失,Vim打开文件后会自动创建一个.[yourfilename].swp的临时文件用于临时存放正在编辑的内容。如程序异常中止,下一次启动vim编辑文件时,vim会提示发现临时文件,询问用户如何处理,中断当前操作(Abort), 使用临时文件恢复(Recover),删除临时文件(Delete)等。

4. 多文件编辑

Vim支持同时对多个文件进行编辑。

普通多文件编辑: vim filename1 filename2 同时打开两个文件
快捷键功能

1
2
3
4
5
6
7
8
9
10
:bn跳转至下一缓冲区(文件)(最后一个->第一个)
:bN跳转到上一缓冲区(文件)(第一个->最后一个)
:bd关闭当前缓冲区(文件)
:n,:N跳转至下一文件,如当前文件为最后一个,提示错误
:N跳转至上一文件,如当前文件为第一个,提示错误
:next, :previous跳转至下/上一文件:wnext, 
:wprevious保存当前文件并跳转至下/上一文件
:last, :first跳转至最后一个/第一个文件
:files列出当前已打开文件
:args给出进入vim时命令行参数;当前正在编辑文件名用"[]"列出
使用分割窗口编辑多文件

快捷键功能

1
2
3
4
5
6
7
8
9
ctrl-w s水平分割窗口
ctrl-w v垂直分割窗口
ctrl-w w切换至另一窗口
ctrl-w ←切换至左侧窗口
ctrl-w ↑切换至上方窗口
ctrl-w →切换至右侧窗口
ctrl-w ↓切换至下方窗口
ctrl-w q退出当前窗口
:sp filename分割窗口并打开文件filename
标签式式多文件编辑: vim -p filename1 filename2 同时打开两个文件

快捷键功能

1
2
3
4
5
6
7
8
:tabnew创建新标签gt,
:tabn切换至下一个标签gT
:tabp切换至上一个标签
:tabc关闭当前标签
:tabr切换至第一个标签
:tabl切换至最后一个标签
:tabm nn为数字,切换至第n个标签。默认标签编号从0开始
:tabe  filename在当前标签后打开新标签,并加载文件filename

5. 光标移动命令

在普通模式下,除键盘上的方向键外,Vim还通过众多快捷键提供了种类繁多的光标移动命令。

基本跳转,快捷键功能

1
h,j,k,l←,↓,↑,→space,backspace(空格键,回退键)向后一位/向前一位0(数字0)跳转至行首^本行第一个非空白字符$行尾
行跳转

快捷键功能

1
2
3
4
5
6
7
8
<Enter>下一行行首
+,-下移/上移一行
n+,n-(n为数字)下移/上移n行
G最后一行第一个非空字符
nG(n为数字)第n行第一个非空字符
gg第一行第一个非空字符
`.跳转至上一次修改处
`"跳转至上一次离开文件时光标所在处
句/段/块跳转

快捷键功能
%如当前光标处为括号,跳转到匹配处),(下一句/上一句句首},{下一段/上一段段首

单词跳转

快捷键功能

1
2
3
4
5
6
7
8
w下一单词
/标点处
W下一单词处
e单词词尾
/标点E单词词尾b上一单词词首
/标点B上一单词词首处
*读取光标所在处单词并跳转至此单词的下一位置
#读取光标所在处单词并跳转至此单词的上一位置
书签跳转

快捷键功能

1
2
ma(a为任意字母)标记当前位置为书签a
`a(a为任意字母)跳转至书签a处
滚屏操作

快捷键功能

1
2
3
4
5
6
ctrl-f,ctrl-b向下一页/屏(PageDown),向上一页/屏(PageUp)
ctrl-d,ctrl-u向下半页/屏, 向上半页/屏
H,M,L屏幕最上方一行/中间行/最后一行行首第一个非空字符
ctrl-e/ctrl-E向下滚屏一行,光标保持在当前行(或屏幕首行)的行首(e)/行尾(E)
ctrl-y/ctrl-Y向上滚屏一行,光标保持在当前行(或屏幕未行)的行首(y)/行尾(Y)
nz<enter>(n为数字,<enter>为回车键)将第n行显示在屏幕首行位置;如未指定n,则默认为当前行nz.(n为数字)将第n行显示在显屏幕中间位置;如未指定n,则默认为当前行nz-(n为数字)将第n行显示在屏幕最后一行位置;如未指定n,则默认为当前行
说明:

w(ord):单词,大小写的英文字母,连字符。单词的边界通常是空白符(空格/制表),标点符号,换行符等。
W(ord):广义上的单词,包括英文字母及其他可显示字符。词的边界通常是空白符,换行符等不可见字符。

6. 插入模式

从普通模式,通过i/I/a/A/o/O都可以进入插入编辑状态,不同字母进入的区别仅在于进入插入模式后的光标位置。

快捷键功能i光标位置保持不变I光标移至本行第一个非空字符处a光标后移一位A光标移至本行行尾o在当前行之下创建新行并将光标移至新行行首O在当前行之上创建新行并将光标移至新行行首ESC返回普通模式

7. 普通模式下的一般编辑

普通模式下,也可以通过快捷命令完成很多编辑操作。

快捷键功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
r替换当前光标处的一个字符,替换完成后返回普通模式
R替换当前光标处开始的字符串,
ESC键结束替换返回普通模式
J合并当前行和下一行(删除当前行结尾处换行符号)
cc,S清空当前行后进入编辑模式
cw删除当前单词后进入编辑模式
c$,C删除光标至行尾处内容后进入编辑模式
s删除光标所在处字符后进入编辑模式
S删除当前行内容后进入编辑模式
xp交换光标所在处及其后位置处字符
u撤消上一次操作
ctrl-r重复上一次操作.重复上一次命令
~变换光标所在处字符大小
g~iw变换光标所在处单词大小写
gUiw将光标所在处单词变换为大写
guiw将光标所在处单词变换为小写
>>将当前行向右缩进一列(Tab宽度)
<<减少当前行缩进(Tab宽度)
==自动缩进当前行

8. 普通模式下的复制/粘贴/删除

Vim普通模式下支持以行/词/块/字符等作单作进行复制粘贴操作。Vim中的删除,并不会直接丢弃掉删除掉的内容,而是会将这部分内容缓存在粘贴板中,可以用在随后使用,类似于其他编辑器的剪切功能。

快捷键功能

1
2
3
4
5
6
7
8
9
dd删除当前行
dw删除单词从光标当前位置起右侧部分
x删除当前字符X删除光标前一位字符
D删除光标位置起本行右侧部分
yy复制当前行
nyy(n为数字)从当前行开始起复制n行
yw复制单词光标当前位置起右侧部分
y$复制光标位置起至行尾部分内容
p将粘贴板中内容复制到光标之后;如果粘贴板中内容包含行,则复制至光标所在行之下P将粘贴板中内容复制到光标之前;如果粘贴板中内容包含行,则复制至光标所在行之上

9. 可视模式下的一些操作

可视模式与普通模式相近,但可以方便地高度选取文件的某一部分。

普通模式下,

‘v'进入可视模式;
'V'进入可视行模式,以整行为操作单位;
ctrl-v进入块可视模式,以块为操作单行;
ESC键可返回普通模式

可视模式中,内容的选取更加灵活,因此使用起来也更方便。

快捷键功能

1
2
3
4
5
6
7
8
9
10
11
12
13
o移动光标至标记区域的另一边
O移动光标至标记区域的另一端点
u,U将标记区域内容更改为小写/大写
aw标记光标所在位置处单词(以标点符号或空白符号为界)
aW标记光标所在位置处单词(包含标点符号)
ab标记光标所在位置处所在(圆)括号范围内容(包括括号)
aB标记光标所在位置处所在(花)括号范围内容(包括括号)
ib标记光标所在位置处所在(圆)括号范围内容(不包括括号)
iB标记光标所在位置处所在(花)括号范围内容(不包括括号)
>将选取内容右移(Tab)
<将选取内容左移1Tab
y复制选取内容d删除选取内容
~将选取内容大小写求反

10. 查找和替换

结合命令行模式和普通模式,可以完成各种查找和替换操作。

模式查找

快捷键功能/pattern(pattern为匹配模式)从光标位置向后查找?pattern(pattern为匹配模式)从光标位置向前查找n重复上一次查找命令N反方向执行上一次查找命令

行内字符查找,快捷键功能

1
2
3
4
fx,Fx(x为任意字符)从光标所在位置起查找本行内字符x所在的下一处(f)/上一处(F)位置
tx(x为任意字符)从光标所在位置起查找本行内字符x所在的下一处位置,如成功则将光标置于找到位置的上一个字符处
Tx(x为任意字符)从光标所在位置起查找本行内字符x所在的上一处位置,如成功则将光标置于找到位置的下一个字符处;
重复上一次fx/FX/tx/Tx操作
替换操作

快捷键功能:

1
2
3
4
5
s/old/new(old为欲替换的模式;new为要替换为的模式;替换第一个匹配处后结束
:s/old/new/g在本行范围中替换.g指明作用域为本行)在本行范围中替换
:s/old/new/gc(c:confirm)行内替换,每处替换前需要确认
:%s/old/new%表示全文范围
:m,ns/old/newm/n为数字,表示替换范围为第m行到第n行;'.'可用来表示当前行,'$'可用来表示最后一行