邵珠庆の日记 生命只有一次,你可以用它来做很多伟大的事情–Make the world a little better and easier


301月/16

Linux系统下各文件目录的含义

发布在 邵珠庆

/bin bin是Binary的缩写。这个目录存放着最经常使用的命令。  
/boot 这里存放的是启动Linux时使用的一些核心文件,包括一些链接文件以及镜像文件。  
/dev dev是Device(设备)的缩写。该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。  
/etc 这个目录用来存放所有的系统管理所需要的配置文件和子目录。  
/home 用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。  
/lib  这个目录里存放着系统最基本的动态链接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。  
/lost+found 这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。  
/mnt 在这里面中有四个目录,系统提供这些目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/cdrom上,然后进入该目录就可以查看光驱里的内容了。  
/proc 这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件
/root 该目录为系统管理员,也称作超级权限者的用户主目录。  
/sbin s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。  
/tmp 这个目录是用来存放一些临时文件的。  
我们要用到的很多应用程序和文件几乎都存放在usr目录下。具体来说:  
/usr/X11R6存放X-Windows的目录;  
/usr/games存放着XteamLinux自带的小游戏;
/usr/bin存放着许多应用程序;  
/usr/sbin存放root超级用户使用的管理程序;  
/usr/doc Linux技术文档;  
/usr/include用来存放Linux下开发和编译应用程序所需要的头文件;  
/usr/lib存放一些常用的动态链接共享库和静态档案库;  
/usr/local这是提供给一般用户的/usr目录,在这里安装一般的应用软件;  
/usr/man帮助文档所在的目录;  
/usr/src Linux开放的源代码,就存在这个目录,爱好者们别放过哦;  
/var 这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。如果你想做一个网站,你也会用到/var/www这个目录。
 
39月/15

解决PHP执行Linux命令

发布在 邵珠庆

一、检查您的php用的是哪个用户组:
可以查看nginx配置文件或者apache配置文件
如:/etc/nginx/nginx.conf 或: /etc/httpd/conf/httpd.conf
也可以用:


比如 我的运行用户组是apache,那么,
二、
vim /etc/sudoer

1.加上www用户 www ALL=(ALL) NOPASSWD:ALL
2. vim 下 / 查找LS_COLORS 将它去掉(Ubuntu没有这个的可以省略)
然后注释掉
Defaults requiretty
Defaults env_reset
这两句!

三、
vim /etc/php.ini
检查:

safe_mode = (这个如果为off下面两个就不用管了)
disable_functions =
safe_mode_exec_dir=
done! 现在您应该可以在php跑linux命令了!

记住一定要重启php-fmp 和nginx

 /etc/init.d/php-fpm restart 

 /etc/init.d/nginx  restart 

2911月/14

linux awk命令详解

发布在 邵珠庆

简介

awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本。

awk其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。实际上 AWK 的确拥有自己的语言: AWK 程序设计语言 , 三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。

 

使用方法

awk '{pattern + action}' {filenames}

尽管操作可能会很复杂,但语法总是这样,其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。 pattern就是要表示的正则表达式,用斜杠括起来。

awk语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作。完整的awk脚本通常用来格式化文本文件中的信息。

通常,awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本。

 

调用awk

有三种方式调用awk

复制代码
1.命令行方式
awk [-F  field-separator]  'commands'  input-file(s)
其中,commands 是真正awk命令,[-F域分隔符]是可选的。 input-file(s) 是待处理的文件。
在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。通常,在不指名-F域分隔符的情况下,默认的域分隔符是空格。

2.shell脚本方式
将所有的awk命令插入一个文件,并使awk程序可执行,然后awk命令解释器作为脚本的首行,一遍通过键入脚本名称来调用。
相当于shell脚本首行的:#!/bin/sh
可以换成:#!/bin/awk

3.将所有的awk命令插入一个单独文件,然后调用:
awk -f awk-script-file input-file(s)
其中,-f选项加载awk-script-file中的awk脚本,input-file(s)跟上面的是一样的。
复制代码

 本章重点介绍命令行方式。

 

入门实例

假设last -n 5的输出如下

[root@www ~]# last -n 5 <==仅取出前五行
root     pts/1   192.168.1.100  Tue Feb 10 11:21   still logged in
root     pts/1   192.168.1.100  Tue Feb 10 00:46 - 02:28  (01:41)
root     pts/1   192.168.1.100  Mon Feb  9 11:41 - 18:30  (06:48)
dmtsai   pts/1   192.168.1.100  Mon Feb  9 11:41 - 11:41  (00:00)
root     tty1                   Fri Sep  5 14:09 - 14:10  (00:01)

如果只是显示最近登录的5个帐号

#last -n 5 | awk  '{print $1}'
root
root
root
dmtsai
root

awk工作流程是这样的:读入有'\n'换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域。默认域分隔符是"空白键" 或 "[tab]键",所以$1表示登录用户,$3表示登录用户ip,以此类推。

 

如果只是显示/etc/passwd的账户

#cat /etc/passwd |awk  -F ':'  '{print $1}'  
root
daemon
bin
sys

这种是awk+action的示例,每行都会执行action{print $1}。

-F指定域分隔符为':'。

 

如果只是显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以tab键分割

#cat /etc/passwd |awk  -F ':'  '{print $1"\t"$7}'
root    /bin/bash
daemon  /bin/sh
bin     /bin/sh
sys     /bin/sh

 

如果只是显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以逗号分割,而且在所有行添加列名name,shell,在最后一行添加"blue,/bin/nosh"。

复制代码
cat /etc/passwd |awk  -F ':'  'BEGIN {print "name,shell"}  {print $1","$7} END {print "blue,/bin/nosh"}'
name,shell
root,/bin/bash
daemon,/bin/sh
bin,/bin/sh
sys,/bin/sh
....
blue,/bin/nosh
复制代码

awk工作流程是这样的:先执行BEGING,然后读取文件,读入有/n换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域,随后开始执行模式所对应的动作action。接着开始读入第二条记录······直到所有的记录都读完,最后执行END操作。

 

搜索/etc/passwd有root关键字的所有行

#awk -F: '/root/' /etc/passwd
root:x:0:0:root:/root:/bin/bash

这种是pattern的使用示例,匹配了pattern(这里是root)的行才会执行action(没有指定action,默认输出每行的内容)。

搜索支持正则,例如找root开头的: awk -F: '/^root/' /etc/passwd

 

搜索/etc/passwd有root关键字的所有行,并显示对应的shell

# awk -F: '/root/{print $7}' /etc/passwd             
/bin/bash

 这里指定了action{print $7}

 

awk内置变量

awk有许多内置变量用来设置环境信息,这些变量可以被改变,下面给出了最常用的一些变量。

复制代码
ARGC               命令行参数个数
ARGV               命令行参数排列
ENVIRON            支持队列中系统环境变量的使用
FILENAME           awk浏览的文件名
FNR                浏览文件的记录数
FS                 设置输入域分隔符,等价于命令行 -F选项
NF                 浏览记录的域的个数
NR                 已读的记录数
OFS                输出域分隔符
ORS                输出记录分隔符
RS                 控制记录分隔符
复制代码

 此外,$0变量是指整条记录。$1表示当前行的第一个域,$2表示当前行的第二个域,......以此类推。

 

统计/etc/passwd:文件名,每行的行号,每行的列数,对应的完整行内容:

#awk  -F ':'  '{print "filename:" FILENAME ",linenumber:" NR ",columns:" NF ",linecontent:"$0}' /etc/passwd
filename:/etc/passwd,linenumber:1,columns:7,linecontent:root:x:0:0:root:/root:/bin/bash
filename:/etc/passwd,linenumber:2,columns:7,linecontent:daemon:x:1:1:daemon:/usr/sbin:/bin/sh
filename:/etc/passwd,linenumber:3,columns:7,linecontent:bin:x:2:2:bin:/bin:/bin/sh
filename:/etc/passwd,linenumber:4,columns:7,linecontent:sys:x:3:3:sys:/dev:/bin/sh

 

使用printf替代print,可以让代码更加简洁,易读

 awk  -F ':'  '{printf("filename:%10s,linenumber:%s,columns:%s,linecontent:%s\n",FILENAME,NR,NF,$0)}' /etc/passwd

 

print和printf

awk中同时提供了print和printf两种打印输出的函数。

其中print函数的参数可以是变量、数值或者字符串。字符串必须用双引号引用,参数用逗号分隔。如果没有逗号,参数就串联在一起而无法区分。这里,逗号的作用与输出文件的分隔符的作用是一样的,只是后者是空格而已。

printf函数,其用法和c语言中printf基本相似,可以格式化字符串,输出复杂时,printf更加好用,代码更易懂。

 

 awk编程

 变量和赋值

除了awk的内置变量,awk还可以自定义变量。

下面统计/etc/passwd的账户人数

awk '{count++;print $0;} END{print "user count is ", count}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
......
user count is  40

count是自定义变量。之前的action{}里都是只有一个print,其实print只是一个语句,而action{}可以有多个语句,以;号隔开。

 

这里没有初始化count,虽然默认是0,但是妥当的做法还是初始化为0:

awk 'BEGIN {count=0;print "[start]user count is ", count} {count=count+1;print $0;} END{print "[end]user count is ", count}' /etc/passwd
[start]user count is  0
root:x:0:0:root:/root:/bin/bash
...
[end]user count is  40

 

统计某个文件夹下的文件占用的字节数

ls -l |awk 'BEGIN {size=0;} {size=size+$5;} END{print "[end]size is ", size}'
[end]size is  8657198

 

如果以M为单位显示:

ls -l |awk 'BEGIN {size=0;} {size=size+$5;} END{print "[end]size is ", size/1024/1024,"M"}' 
[end]size is  8.25889 M

注意,统计不包括文件夹的子目录。

 

条件语句

 awk中的条件语句是从C语言中借鉴来的,见如下声明方式:

复制代码
if (expression) {
    statement;
    statement;
    ... ...
}

if (expression) {
    statement;
} else {
    statement2;
}

if (expression) {
    statement1;
} else if (expression1) {
    statement2;
} else {
    statement3;
}
复制代码

 

统计某个文件夹下的文件占用的字节数,过滤4096大小的文件(一般都是文件夹):

ls -l |awk 'BEGIN {size=0;print "[start]size is ", size} {if($5!=4096){size=size+$5;}} END{print "[end]size is ", size/1024/1024,"M"}' 
[end]size is  8.22339 M

 

循环语句

awk中的循环语句同样借鉴于C语言,支持while、do/while、for、break、continue,这些关键字的语义和C语言中的语义完全相同。

 

数组

  因为awk中数组的下标可以是数字和字母,数组的下标通常被称为关键字(key)。值和关键字都存储在内部的一张针对key/value应用hash的表格里。由于hash不是顺序存储,因此在显示数组内容时会发现,它们并不是按照你预料的顺序显示出来的。数组和变量一样,都是在使用时自动创建的,awk也同样会自动判断其存储的是数字还是字符串。一般而言,awk中的数组用来从记录中收集信息,可以用于计算总和、统计单词以及跟踪模板被匹配的次数等等。

 

显示/etc/passwd的账户

复制代码
awk -F ':' 'BEGIN {count=0;} {name[count] = $1;count++;}; END{for (i = 0; i < NR; i++) print i, name[i]}' /etc/passwd
0 root
1 daemon
2 bin
3 sys
4 sync
5 games
......
复制代码

这里使用for循环遍历数组

 

awk编程的内容极多,这里只罗列简单常用的用法,更多请参考 http://www.gnu.org/software/gawk/manual/gawk.html

2811月/14

Linux vim 随记

发布在 邵珠庆

命令模式

三种命令模式

vim的三种命令模式:

  • 命令模式:用于输入命令,简单更改
  • 插入模式:用于插入文本,修改文本
  • 末行模式:用于输入命令,视化操作,查找替换等

三种模式之间的切换方式:

  • 命令模式进入到插入模式:输入文本插入命令(i,I,a,A,o,O)
  • 插入模式退出到命令模式:ESC
  • 命令模式进入到末行模式:冒号:
  • 末行模式退出到命令模式:Enter或者ESC.

 vim命令集合:http://www.cnblogs.com/kzloser/archive/2012/09/12/2681111.html

 

图释指令

光标移动-------------

按行移动:

按字符移动:

                  

插入命令-------------

常用命令-------------

 

普通模式下命令

复制,删除,粘贴

  • 粘贴:  把 vim 中缓存区的数据,粘贴到光标附近(即 p 为光标后, P为光标前)
  • 删除:  把 vim 中选中的删除数据先拷贝到缓冲区并覆盖原有数据,然后删除选中数据
  • 复制:  把 vim 中选中的数据拷贝的缓冲区并覆盖原有数据

例子:

现在有数据如下:aaaaabbbbbcccccdddddfffff

 

假设我们的光标在第一个 b 这个位置, 在一般模式下输入 5x (即输入删除 5 个 b 的操作) 后结果为:

aaaaacccccdddddfffff

 

然后在按下 p (即在光标位置处后面粘贴缓冲区的数据),结果为:

aaaaacbbbbbccccdddddfffff

删除某区域内容:

可以重复的:

[d]+[num]+[ h / j / k / l / w / b / e / ( / ) / { / } / $ / G / /word / ?word / tc / Tc / fc / Fc / `c ]          

  • d:                      表示删除操作
  • 重复操作次数:      num 表示操作重复次数
  • 操作区域选择:
    • h             删除光标前一个字符
    • l              删除光标所在处的字符
    • j              删除本行与下一行
    • k             删除本行与上一行
    • w            删除光标开始到下一个单词词首处
    • b             删除光标开始到上一个单词词首处
    • e             删除光标开始到这个单词的结尾处
    • (             删除光标开始到句子结束处
    • )             删除光标开始到句子开始处
    • {             删除光标开始到段落开始处
    • }             删除光标开始到段落结束处
    • $             删除从光标开始处到行尾处
    • G             删除从光标所在行到行尾处
    • /word      删除从光标开始处到下个 word 字符串,不含 word ( word 指代任意字符串 )
    • ?word      删除从光标开始处到上个 word 字符串,不含 word ( word 指代任意字符串 )
    • tc            删除从光标开始处到下个 c 字符处,不含 c ( c  指代任意字符 )
    • Tc            删除从光标开始处到上个 c 字符处,不含 c ( c  指代任意字符 )
    • fc             删除从光标开始处到下个 c 字符处,含 c ( c  指代任意字符 )
    • Fc            删除从光标开始处到上个 c 字符处,含 c ( c  指代任意字符 )
    • `c            删除从光标开始到标记 c 这个位置

不可重复的:

 [d]+[ 0 / ^ / H / ]

  •  d:                     表示删除操作
  • 操作区域选择:
    • d0             删除从光标所在处到某一行的开始位置
    • d^             删除到某一行的第一个字符位置(不包括空格或TAB字符)
    • dL              删除直到屏幕上最后一行的内容
    • dH             删除直到屏幕上第一行的内容

复制某区域内容:

可以重复的:

[y]+[num]+[ h / j / k / l / w / b / e / ( / ) / { / } / $ / G / /word / ?word / tc / Tc / fc / Fc / `c ]          

含义用法如删除类似

不可重复的:

 [y]+[ 0 / ^ / H / ]

含义用法如删除类似

多加介绍个与上面用法相似的操作:

改变某区域内容:

可以重复的:

[c]+[num]+[ h / j / k / l / w / b / e / ( / ) / { / } / $ / G / /word / ?word / tc / Tc / fc / Fc / `c ]          

含义用法如删除类似

不可重复的:

 [c]+[ 0 / ^ / H / ]

含义用法如删除类似

 

操作的组合

v 字符选择

操作流程:

v + 移动光标按键+ 数据操作键

  • v         开始选择字符的标志
  • 移动光标按键   移动光标确定选择区域(此处可以为多个移动光标的键值,但不能为组合键:如 [Ctrl]+[p] 等等) 
  • 数据操作键          对选择区域内的数据内容进行操作

例子[删除选择的字符区间 vwd(vwx)] :

现在有数据如下:

aaaaabbbbb ccccc

 

按下 v 键时(标志开始选择区域的操作):

aaaaa|bbbbb ccccc

 

按下 w 键时(选择操作区域,当然这里的 w 是可以换成 llllll [ 即六个小写的 L ]):

aaaaabbbbb ccccc

 

按下 d/x 键时(对数据进行操作,即删除所选择区域中的数据):

aaaaaccccc

V 列选择

 操作流程:

V + 移动光标按键+ 数据操作键

  • V         开始选择字符的标志
  • 移动光标按键   移动光标确定选择区域(此处可以为多个移动光标的键值或者没有键值当没有键值的时候操作区域为光标所在行,但不能为组合键:如 [Ctrl]+[p] 等等) 
  • 数据操作键          对选择区域内的数据内容进行操作

 

例子[删除本行和下行数据 Vjd(Vjx)] :

现在有数据如下:

aaaaa
bbbbb
ccccc

 

按下 V 键时(标志开始选择区域的操作):

aaaaa
bbbbb
ccccc

 

按下 j 键时(选择操作区域):

aaaaa
bbbbb
ccccc

 

按下 d/x 键时(对数据进行操作,即删除所选择区域中的数据):

ccccc

 

字符串搜索 

搜索字符串中的特殊字符

  • (行开始指示符)
    当脱字符( 即 ^ ),作为搜索字符串的第一个字符时, vim 将每行的开始字符与搜索字符串进行匹配.
  • (任意字符指示符)
    句点( 即 . )可以与任意字符匹配,它可以出现在搜索字符串中的任意位置.当要查找句点符号时候可以用转义字符 . 来查找句点符号
  • (字符开始指示符)
    这两个字符与单词的开始匹配
  • (字符结束指示符)
    这两个字符与单词的结束匹配
  • * (0个或者过个出现)
    这个字符时一个修饰符,它与某个字符的 0 次或者多次出现相匹配
  • [] (定义字符类)
    单个字符匹配的区间(这里想要了解的更详细的话可以参考 正则表达式 )例如 ds[ab] 代表的是 dsa 与 dsb

示例------

句子:

being kind to yourself in everyday life is one of the best things you can do for yourself. 

life will become lighter and your relationships will most likely improve

搜索字符串 描述 结果(以单词为单位)
/you 查找字符串 you 的下一次出现的位置  yourself,  you, yourself, your
/<you> 查找单词 you 的下一次出现的位置 you
/^be  查找以 be 开始的下一行 being ... 
/^[a-z][a-z] 查找以两个字符开头开始的下一行  being ... ,
life ...
/<th  查找以 th 开头的单词  the thing 
/[a-m]e> 查找以 [a-m]e 为结尾的单词  life, the, life, become

 

 

命令行的命令

字符替换

语法格式:

[range]s/{pattern}/{string}/[flag] [count]
格式说明:

  • range  表示行数
    • %表示所有行
    • n1,n2 表示由 n1 行到 n2 行之间
  • s         表示substitution,替换的意思
  • pattern  表示被替换的字符串
  • string   表示替换的字符串
  • flag      表示标志,取值g,i,c等
    • g   表示global,全部
    • i  表示ignore,忽略大小写
    • c   表示confirm,一个一个交互确认替换
  • count   表示从当前行到接下来的第几行,表示范围

例子:

(1). 全部替换
参数g实现全部替换,否则只替换一个
:%s/{old-pattern}/new-text/g
(2). 行内替换
%代表所有行,去掉%表示当前行,只替换当前行
:s/{old-pattern}/new-text/g
(3). 指定行范围替换
对1到10行的结果替换
:1,10s/{old-pattern}/new-text/g
(4). 可视模式替换
如果你觉得数行数比较麻烦,可以使用可视模式,首先进入可视模式,然后选择行 
列,最后输入:自动进入:'<,'>
后面加上s/{old-pattern}/new-text/g,则只替换选择区域的结果
:'<,'>s/{old-pattern}/new-text/g
(5). 整词替换,而不是部分匹配的单词
对单词匹配模式外包一个<和>
:s/<blog>/weibo/g //替换blog,但是cnblog,blogs则不会替换
(6). 多项替换
同时对多个匹配都替换成某一字符串
:%s/(good|nice)/awesome/g //good和nice都将被替换成awesome
(7). 确认式替换
参数c让替换进行交互请求,需要你选择y,n,a,l,q
选择说明:

  • y 替换且跳转到下一个匹配结果
  • n 不替换且跳转到下一个匹配结果
  • a 替换所有并退出交互模式
  • l 替换当前并退出交互模式
  • q 退出交互模式

:s/{old-pattern}/new-text/gc
(8). 行首插入行号
把行首^替换成行号,可自定义具体形式
:%s/^/=line(".")/g

 

录制

这个其实很简单,但也是很强大的功能,作用是记录你的操作,并把操作过程记录起来.然后可以用 @@ 来调用出来你刚刚记录的操作集合,从而简化了复杂操作的过程

过程:

  1. q                 //标志开始录制
  2. x                 //x 是这个录制的寄存器,x 可以是其它字符
  3. 操作过程
  4. q                 //标志录制结束,现在dd这个操作被定义到了 @x 这个命令里了

图释:

 
 
710月/14

linux下mysql的root密码忘记解决方法

发布在 邵珠庆

1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库。 
因为在重新设置MySQL的root密码的期间,MySQL数据库完全出于没有密码保护的 
状态下,其他的用户也可以任意地登录和修改MySQL的信息。可以采用将MySQL对 
外的端口封闭,并且停止Apache以及所有的用户进程的方法实现服务器的准安全 
状态。最安全的状态是到服务器的Console上面操作,并且拔掉网线。 
2.修改MySQL的登录设置: 
# vi /etc/my.cnf 
在[mysqld]的段中加上一句:skip-grant-tables 
例如: 
[mysqld] 
datadir=/var/lib/mysql 
socket=/var/lib/mysql/mysql.sock 
skip-grant-tables 
保存并且退出vi。 
3.重新启动mysqld 
# /etc/init.d/mysqld restart 
Stopping MySQL: [ OK ] 
Starting MySQL: [ OK ] 
4.登录并修改MySQL的root密码 
# /usr/bin/mysql 
Welcome to the MySQL monitor. Commands end with ; or g. 
Your MySQL connection id is 3 to server version: 3.23.56 
Type 'help;' or 'h' for help. Type 'c' to clear the buffer. 
mysql> USE mysql ; 
Reading table information for completion of table and column names 
You can turn off this feature to get a quicker startup with -A 
Database changed 
mysql> UPDATE user SET Password = password ( 'new-password' ) WHERE User = 'root' ; 
Query OK, 0 rows affected (0.00 sec) 
Rows matched: 2 Changed: 0 Warnings: 0 
mysql> flush privileges ; 
Query OK, 0 rows affected (0.01 sec) 
mysql> quit 
Bye 
5.将MySQL的登录设置修改回来 
# vi /etc/my.cnf 
将刚才在[mysqld]的段中加上的skip-grant-tables删除 
保存并且退出vi。 
6.重新启动mysqld 
# /etc/init.d/mysqld restart 
Stopping MySQL: [ OK ] 
Starting MySQL: [ OK ]

Work for fun,Live for love!
MySQL远程连接ERROR 2003 (HY000):Can't connect to MySQL server on'XXXXX'(111) 的问题
1.查看配置文件:
skip-networking #注释掉 因为它是屏蔽掉一切TCP/IP连接
bind-address = 127.0.0.1 #它和上一个选项是异曲同工,要想远程连接,也得注释掉
2.如果以上工作都做过还是出现:
ERROR 2003 (HY000): Can't connect to MySQL server on '*.*.*.*' (113),那就得考虑防火墙的问题了,关掉防火墙/etc/rc.d/init.d/iptables stop
修改完后需要 restart mysql (/etc/init.d/mysql restart) 

1510月/13

linux 目录结构

发布在 邵珠庆

 linux 目录结构 


/: 根目录,一般根目录下只存放目录,不要存放文件,/etc、/bin、/dev、/lib、/sbin应该和根目录放置在一个分区中
/bin:/usr/bin: 可执行二进制文件的目录,如常用的命令ls、tar、mv、cat等。
/boot: 放置linux系统启动时用到的一些文件。/boot/vmlinuz为linux的内核文件,以及/boot/gurb。建议单独分区,分区大小100M即可
/dev: 存放linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,常用的是挂载光驱mount /dev/cdrom /mnt。
/etc: 系统配置文件存放的目录,不建议在此目录下存放可执行文件,重要的配置文件有/etc/inittab、/etc/fstab、/etc/init.d、/etc/X11、/etc/sysconfig、/etc/xinetd.d修改配置文件之前记得备份。注:/etc/X11存放与x windows有关的设置。
/home: 系统默认的用户家目录,新增用户账号时,用户的家目录都存放在此目录下,~表示当前用户的家目录,~test表示用户test的家目录。建议单独分区,并设置较大的磁盘空间,方便用户存放数据
/lib:/usr/lib:/usr/local/lib: 系统使用的函数库的目录,程序在执行过程中,需要调用一些额外的参数时需要函数库的协助,比较重要的目录为/lib/modules。
/lost+fount: 系统异常产生错误时,会将一些遗失的片段放置于此目录下,通常这个目录会自动出现在装置目录下。如加载硬盘于/disk 中,此目录下就会自动产生目录/disk/lost+found
/mnt:/media: 光盘默认挂载点,通常光盘挂载于/mnt/cdrom下,也不一定,可以选择任意位置进行挂载。
/opt: 给主机额外安装软件所摆放的目录。如:FC4使用的Fedora 社群开发软件,如果想要自行安装新的KDE 桌面软件,可以将该软件安装在该目录下。以前的 Linux 系统中,习惯放置在 /usr/local 目录下
/proc: 此目录的数据都在内存中,如系统核心,外部设备,网络状态,由于数据都存放于内存中,所以不占用磁盘空间,比较重要的目录有/proc/cpuinfo、/proc/interrupts、/proc/dma、/proc/ioports、/proc/net/*等
/root: 系统管理员root的家目录,系统第一个启动的分区为/,所以最好将/root和/放置在一个分区下。
/sbin:/usr/sbin:/usr/local/sbin: 放置系统管理员使用的可执行命令,如fdisk、shutdown、mount等。与/bin不同的是,这几个目录是给系统管理员root使用的命令,一般用户只能"查看"而不能设置和使用。
/tmp: 一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下
/srv: 服务启动之后需要访问的数据目录,如www服务需要访问的网页数据存放在/srv/www内
/usr: 应用程序存放目录,/usr/bin 存放应用程序, /usr/share 存放共享数据,/usr/lib 存放不能直接运行的,却是许多程序运行所必需的一些函数库文件。/usr/local:存放软件升级包。/usr/share/doc: 系统说明文件存放目录。/usr/share/man: 程序说明文件存放目录,使用 man ls时会查询/usr/share/man/man1/ls.1.gz的内容建议单独分区,设置较大的磁盘空间
/var: 放置系统执行过程中经常变化的文件,如随时更改的日志文件 /var/log,/var/log/message: 所有的登录文件存放目录,/var/spool/mail: 邮件存放的目录, /var/run: 程序或服务启动

后,其PID存放在该目录下。建议单独分区,设置较大的磁盘空间

------------------------------------------ 

/dev: 目录
dev是设备(device)的英文缩写。/dev这个目录对所有的用户都十分重要。因为在这个目录中包含了所有Linux系统中使用的外部设备。但是这里并不是放的外部设备的驱动程序,这一点和

windows,dos操作系统不一样。它实际上是一个访问这些外部设备的端口。我们可以非常方便地去访问这些外部设备,和访问一个文件,一个目录没有任何区别。

Linux沿袭Unix的风格,将所有设备认成是一个文件。

设备文件分为两种:块设备文件(b)和字符设备文件(c)

设备文件一般存放在/dev目录下,对常见设备文件作如下说明:

/dev/hd[a-t]:IDE设备

/dev/sd[a-z]:SCSI设备

/dev/fd[0-7]:标准软驱

/dev/md[0-31]:软raid设备

/dev/loop[0-7]:本地回环设备

/dev/ram[0-15]:内存

/dev/null:无限数据接收设备,相当于黑洞

/dev/zero:无限零资源

/dev/tty[0-63]:虚拟终端

/dev/ttyS[0-3]:串口

/dev/lp[0-3]:并口

/dev/console:控制台

/dev/fb[0-31]:framebuffer

/dev/cdrom => /dev/hdc

/dev/modem => /dev/ttyS[0-9]

/dev/pilot => /dev/ttyS[0-9]

/dev/random:随机数设备

/dev/urandom:随机数设备

(PS:随机数设备,后面我会再写篇博客总结一下)

/dev目录下的节点是怎么创建的?

devf或者udev会自动帮你创建得。

kobject是sysfs文件系统的基础,udev通过监测、检测sysfs来获取新创建的设备的。

------------------------------------------ 

/etc: 目录
包含很多文件.许多网络配置文件也在/etc 中.
/etc/rc   or /etc/rc.d   or /etc/rc*.d    启动、或改变运行级时运行的scripts或scripts的目录.
/etc/passwd  
用户数据库,其中的域给出了用户名、真实姓名、家目录、加密的口令和用户的其他信息.
/etc/fstab  
启动时mount -a命令(在/etc/rc 或等效的启动文件中)自动mount的文件系统列表. Linux下,也包括用swapon -a启用的swap区的信息.
/etc/group 
类似/etc/passwd ,但说明的不是用户而是组.
/etc/inittab  
init 的配置文件.
/etc/issue  
getty 在登录提示符前的输出信息.通常包括系统的一段短说明或欢迎信息.内容由系统管理员确定.
/etc/motd  
Message Of The Day,成功登录后自动输出.内容由系统管理员确定.经常用于通告信息,如计划关机时间的警告.
/etc/mtab  
当前安装的文件系统列表.由scripts初始化,并由mount 命令自动更新.需要一个当前安装的文件系统的列表时使用,例如df 命令.
/etc/shadow  
在安装了影子口令软件的系统上的影子口令文件.影子口令文件将/etc/passwd 文件中的加密口令移动到/etc/shadow 中,而后者只对root可读.这使破译口令更困难.
/etc/login.defs  
login 命令的配置文件.
/etc/printcap  
类似/etc/termcap ,但针对打印机.语法不同.
/etc/profile , /etc/csh.login , /etc/csh.cshrc  
登录或启动时Bourne或C shells执行的文件.这允许系统管理员为所有用户建立全局缺省环境.
/etc/securetty  
确认安全终端,即哪个终端允许root登录.一般只列出虚拟控制台,这样就不可能(至少很困难)通过modem或网络闯入系统并得到超级用户特权.
/etc/shells  
列出可信任的shell.chsh 命令允许用户在本文件指定范围内改变登录shell.提供一台机器FTP服务的服务进程ftpd 检查用户shell是否列在 /etc/shells 文件中,如果不是将不允许该用户登录.
/etc/sysconfig 
网络配置相关目录

------------------------------------------ 

/proc: 目录

档名    文件内容
/proc/cmdline     加载 kernel 时所下达的相关参数!查阅此文件,可了解系统是如何启动的!
/proc/cpuinfo     本机的 CPU 的相关资讯,包含时脉、类型与运算功能等
/proc/devices     这个文件记录了系统各个主要装置的主要装置代号,与 mknod 有关呢!
/proc/filesystems     目前系统已经加载的文件系统罗!
/proc/interrupts     目前系统上面的 IRQ 分配状态。
/proc/ioports     目前系统上面各个装置所配置的 I/O 位址。
/proc/kcore     这个就是内存的大小啦!好大对吧!但是不要读他啦!
/proc/loadavg     还记得 top 以及 uptime 吧?没错!上头的三个平均数值就是记录在此!
/proc/meminfo     使用 free 列出的内存资讯,嘿嘿!在这里也能够查阅到!
/proc/modules     目前我们的 Linux 已经加载的模块列表,也可以想成是驱动程序啦!
/proc/mounts     系统已经挂载的数据,就是用 mount 这个命令呼叫出来的数据啦!
/proc/swaps     到底系统挂加载的内存在哪里?呵呵!使用掉的 partition 就记录在此啦!
/proc/partitions     使用 fdisk -l 会出现目前所有的 partition 吧?在这个文件当中也有纪录喔!
/proc/pci     在 PCI 汇流排上面,每个装置的详细情况!可用 lspci 来查阅!
/proc/uptime     就是用 uptime 的时候,会出现的资讯啦!
/proc/version     核心的版本,就是用 uname -a 显示的内容啦!
/proc/bus/*     一些汇流排的装置,还有 U盘 的装置也记录在此喔!

------------------------------------------ 

/usr: 目录
/usr 文件系统经常很大,因为所有程序安装在这里. /usr 里的所有文件一般来自Linux distribution;本地安装的程序和其他东西在/usr/local 下.这样可能在升级新版系统或新distribution时无须重新安装全部程序.
/usr/etc            存放设置文件
/usr/games      存放游戏和教学文件
/usr/include      存放C开发工具的头文件
/usr/share         存放结构独立的数据
/usr/bin  
几乎所有用户命令.有些命令在/bin 或/usr/local/bin 中.
/usr/sbin  
根文件系统不必要的系统管理命令,例如多数服务程序.
/usr/share/man , /usr/share/info , /usr/share/doc 
手册页、GNU信息文档和各种其他文档文件.
/usr/include  
C编程语言的头文件.为了一致性这实际上应该在/usr/lib 下,但传统上支持这个名字.
/usr/lib  
程序或子系统的不变的数据文件,包括一些site-wide配置文件.名字lib来源于库(library); 编程的原始库存在/usr/lib 里.
/usr/local  
本地安装的软件和其他文件放在这里.
/usr/src             存放程序的源代码


------------------------------------------ 

/var: 目录
/var 包括系统一般运行时要改变的数据.每个系统是特定的,即不通过网络与其他计算机共享.
/var/catman  
当要求格式化时的man页的cache.man页的源文件一般存在/usr/man/man* 中;有些man页可能有预格式化的版本,存在/usr/man/cat* 中.而其他的man页在第一次看时需要格式化,格式化完的版本存在/var/man 中,这样其他人再看相同的页时就无须等待格式化了. (/var/catman 经常被清除,就象清除临时目录一样.)
/var/lib  
系统正常运行时要改变的文件.
/var/local  
/usr/local 中安装的程序的可变数据(即系统管理员安装的程序).注意,如果必要,即使本地安装的程序也会使用其他/var 目录,例如/var/lock .
/var/lock  
锁定文件.许多程序遵循在/var/lock 中产生一个锁定文件的约定,以支持他们正在使用某个特定的设备或文件.其他程序注意到这个锁定文件,将不试图使用这个设备或文件.  
/var/log  

各种程序的Log文件,特别是login  (/var/log/wtmp log所有到系统的登录和注销) 和syslog (/var/log/messages 里存储所有核心和系统程序信息. /var/log 里的文件经常不确定地增长,应该定期清除.  
/var/run  

保存到下次引导前有效的关于系统的信息文件.例如, /var/run/utmp 包含当前登录的用户的信息.
/var/spool  
mail, news, 打印队列和其他队列工作的目录.每个不同的spool在/var/spool 下有自己的子目录,例如,用户的邮箱在/var/spool/mail 中.  
/var/tmp  

比/tmp 允许的大或需要存在较长时间的临时文件. (虽然系统管理员可能不允许/var/tmp 有很旧的文件.) 


------------------------------------------ 

 比较重要的目录 

    在 Linux 系统中,有几个目录是特别需要注意的,以下提供几个需要注意的目录,以及预设相关的用途:
        /etc: 这个目录相当重要,如前所述,你的开机与系统数据文件均在这个目录之下,因此当这个目录被破坏,那你的系统大概也就差不多该死掉了!而在往后的文件中,你会发现我们常常使用这个目录下的 /etc/rc.d/init.d 这个子目录,因为这个 init.d 子目录是开启一些 Linux 系统服务的 scripts (可以想成是批次檔 )的地方。而在 /etc/rc.d/rc.local 这个文件是开机的执行档。
        /bin, /sbin, /usr/bin, /usr/sbin: 这是系统预设的执行文件的放置目录,例如 root 常常使用的 userconf, netconf, perl, gcc, c++ 等等的数据都放在这几个目录中,所以如果你在提示字符下找不到某个执行档时,可以在这四个目录中查一查!其中, /bin, /usr/bin 是给系统使用者使用的指令,而 /sbin, /usr/sbin 则是给系统管理员使用的指令!
        /usr/local: 这是系统预设的让你安装你后来升级的套件的目录。例如,当你发现有更新的 Web 套件(如 Apache )可以安装,而你又不想以 rpm 的方式升级你的套件,则你可以将 apache 这个套件安装在 /usr/local 底下。安装在这里有个好处,因为目前大家的系统都是差不多的,所以如果你的系统要让别人接管的话,也比较容易上手呀!也比较容易找的到数据喔!因此,如果你有需要的话,通常我都会将 /usr/local/bin 这个路径加到我的 path 中。
        /home: 这个是系统将有账号的人口的家目录设置的地方。
        /var: 这个路径就重要了!不论是登入、各类服务的问题发生时的记录、以及常态性的服务记录等等的记录目录,所以当你的系统有问题时,就需要来这个目录记录的文件数据中察看问题的所在啰!而 mail 的预设放置也是在这里,所以他是很重要的
        /usr/share/man, /usr/local/man: 这两个目录为放置各类套件说明档的地方,例如你如果执行 man man,则系统会自动去找这两个目录下的所有说明文件


文件种类: 

谈完了文件格式之后,再来谈谈所谓的文件种类吧!我们在刚刚的属性介绍中提到了最前面的标志 ( d 或 - ) 可以代表目录或文件,那就是不同的文件种类啦!Linux 的文件种类主要有底下

这几种:
    正规文件( regular file ):就是一般类型的文件,在由 ls –al 所显示出来的属性方面,第一个属性为 [ - ]。另外,依照文件的内容,又大略可以分为两种文件种类:
        纯文字文件(ascii) :这是 Unix 系统中最多的一种啰,几乎只要我们可以用来做为设定的文件都属于这一种;
        二进制文件(binary) :通常执行档除了 scripts (文字型批次文件)之外,就是这一种文件格式;
    目录 (directory):就是目录!第一个属性为 [ d ];
    连结档 (link):就是类似 Windows 底下的快捷方式啦!第一个属性为 [ l ];
    设备档 (device):与系统周边相关的一些文件,通常都集中在 /dev 这个目录之下!通常又分为两种:
    区块 (block) 设备档 :就是一些储存数据,以提供系统存取的接口设备,简单的说就是硬盘啦!例如你的一号硬盘的代码是 /dev/hda1 等等的文件啦!第一个属性为 [ b ];
    字符 (character) 设备档 :亦即是一些串行端口的接口设备,例如键盘、鼠标等等!第一个属性为 [ c ]。

176月/13

linux下批量替换文件内容

发布在 邵珠庆

1、网络上现成的资料

格式: sed -i "s/查找字段/替换字段/g" `grep 查找字段 -rl 路径`

linux sed 批量替换多个文件中的字符串

sed -i "s/oldstring/newstring/g" `grep oldstring -rl yourdir`

例如:替换/home下所有文件中的www.admin99.net为admin99.net

sed -i "s/www.admin99.net/admin99.net/g" `grep www.admin99.net -rl /home`

exp:sed -i "s/shabi/$/g" `grep shabi -rl ./`

2、自己额外附加

2.1 将文件1.txt内的文字“garden”替换成“mirGarden”

# sed -i "s/garden/mirGarden/g" 1.txt   //sed -i 很简单

2.2 将当前目录下的所有文件内的“garden”替换成“mirGarden”

## sed -i "s/garden/mirGarden/g" `ls` //其实也就是ls出多个文件名而已

152月/13

Linux VPS CentOS 5 实例图解网站搭建

发布在 邵珠庆

详细图文解说下linux vps CentOS 5 搭建wordpress网站:

1,从VPS服务商那里获得 IP(购买后服务商分配给你) 、SSH密码(VPS管理面板可以修改)、SSH名(基本都是root) ,确保你的VPS系统为 linux CentOS 5 32bit(也可以是64bit) ,其他系统请绕行。如果不是CentOS,进入VPS管理面板重新做系统;

2,本地电脑 安装 Xshell 4.0 SSH管理 :http://www.chinaz.com/web/2011/1026/216023.shtml ;然后进入 Xshell 4.0 在你的VPS上安装LNMP ,详情点击 :http://www.chinaz.com/web/2011/1026/216027.shtml;安装好后退出页面 Xshell 页面;

3.1,下载 WinSCP SSH客户端 ;安装到你的电脑上;

3.2,登陆 WinSCP SSH 客户端,如图所示:

3.3,在WinSCP下可清晰可见VPS服务器上所有安装的文件,下面是lnmp的常用文件夹说明:

默认网站文件夹 /home/wwwroot/ ,进入这个文件夹,里面就是你的网站所有文件了,里面包括安装lnmp时默认的 phpmyadmin 、ftp;

默认伪静态文件夹 /usr/local/nginx/conf/ ,已经有了Discuz、Wordpress、typecho、emlog等伪静态;

默认绑定的域名文件夹 /usr/local/nginx/conf/vhost/ , 这里是你添加绑定的所有域名地址;

默认MYSQL文件夹 /usr/local/mysql/var/ ,这里就是你所有建立的MYSQL文件了,当然你也可以用你的phpmyadmin 来管理它;

4.1,如果你已经完成了上面所有步骤,现在就来实例图文演示添加网站和管理。

譬如:

绑定的域名 cn.weidao.net

绑定的文件夹为 /home/wwwroot/china/

绑定域名时也添加了伪静态 /usr/local/nginx/conf/wordpress.conf

已经绑定域名列表 /usr/local/nginx/conf/vhost/ 里面有一个文件 cn.weidao.net.conf ,说明cn.weidao.net 已经绑定好了,双击打开确保添加域名时配置正确。

4.2,打开 http://你的IP/phpmyadmin/ 登陆,如图所示 新建一个MYSQL数据库;

4.3,下载最新版本 wordpress 3.2.1 中文版 : http://cn.wordpress.org/wordpress-3.2.1-zh_CN.zip到本地上传至 VPS 域名绑定的文件夹里;

4.3.1,下载好 wordpress3.2.1 后,本地解压下,将 wordpress 文件夹下所有的文件用 ZIP 格式打包为 wordpress.zip ,然后用 WinSCP 上传至 VPS域名绑定的文件夹china里面, 如图所示:

4.3.2,右键上传好的文件,选择“自定义命令” – “输入(E)” 如图所示:

输入口令 unzip wordpress.zip 进行解压文件包;

4.3.3,返回上一层,右键 china 文件夹,选择“自定义命令” – “输入(E)” 如图所示:

输入口令 chown www -R china 批量改变文件为 www 属性,不然网站无法安装,提示属性问题。

5,现在你可以打开你绑定的域名地址,进行安装wordpress了。

6,OK!收工!一个简单的Linux下VPS搭建的wordpress网站已经成功了。

243月/12

Linux Vim 分屏功能

发布在 邵珠庆

分屏启动Vim
使用大写的o参数来上下分屏。 
vim -on file1 file2 ...使用小写的O参数来左右分屏。 
vim -On file1 file2 ...注释: n是数字,表示分成几个屏。

关闭分屏 
关闭当前窗口。 
Ctrl+W c关闭当前窗口,如果只剩最后一个了,则退出Vim。 
Ctrl+W q

分屏
上下分割当前打开的文件。 
Ctrl+W s上下分割,并打开一个新的文件。 
:sp filename左右分割当前打开的文件。  
Ctrl+W v左右分割,并打开一个新的文件。 
:vsp filename

移动光标
Vi中的光标键是h, j, k, l,要在各个屏间切换,只需要先按一下Ctrl+W

把光标移到右边的屏。 
Ctrl+W l把光标移到左边的屏中。 
Ctrl+W h把光标移到上边的屏中。 
Ctrl+W k把光标移到下边的屏中。 
Ctrl+W j把光标移到下一个的屏中。. 
Ctrl+W w

移动分屏
这个功能还是使用了Vim的光标键,只不过都是大写。当然了,如果你的分屏很乱很复杂的话,这个功能可能会出现一些非常奇怪的症状。

向右移动。 
Ctrl+W L向左移动  
Ctrl+W H向上移动  
Ctrl+W K向下移动  
Ctrl+W J

屏幕尺寸
下面是改变尺寸的一些操作,主要是高度,对于宽度你可以使用Ctrl+W <或是>,但这可能需要最新的版本才支持。

让所有的屏都有一样的高度。 
Ctrl+W =增加高度。 
Ctrl+W +减少高度。 

92月/12

linux 查看文件方式总结

发布在 邵珠庆

查看文件的命令有:cat、more、less、head、sed和tail等。

例:
查看文件的前5行:  head -5 test.log
查看文件的后2行: tail -2 test.log  或 tail -n 2 test.log
查看文件中间一段:sed -n '5,10p' test.log
这样你就可以只查看文件的第5行到第10行。

另外有个比较常用的效果是实时监视,即不停地读取最新内容,这时可以用tail命令加-f参数:
tail -f test.log
用Ctrl+c终止。

tail语法格式:
    tail [ -f ] [ -c Number | -n Number | -m Number | -b Number | -k Number ] [ File ]
    或者
    tail [ -r ] [ -n Number ] [ File ]
使用说明:
    tail 命令从指定点开始将 File 参数指定的文件写到标准输出。如果没有指定文件,则会使用标准输入。 Number 变量指定将多少单元写入标准输出。 Number 变量的值可以是正的或负的整数。如果值的前面有 +(加号),从文件开头指定的单元数开始将文件写到标准输出。如果值的前面有 -(减号),则从文件末尾指定的单元数开始将文件写到标准输出。如果值前面没有 +(加号)或 -(减号),那么从文件末尾指定的单元号开始读取文件。
主要参数:

-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 标志一起时才有效。否则,就会将其忽略。