Skip to content Skip to main navigation Skip to footer

Linux

vim 命令大全 / vi 命令大全

vim 命令作为linux系统下使用最多的文本编辑器,功能十分强大,里面包含了操作文本的各种命令。本文收集了在linux系统下的 最常用的vim 命令大全 /vi 命令大全。
vi/vim
vim 命令大全
光标控制命令:
命令 光标移动
h 向左移一个字符
j 向下移一行
k 向上移一行
l 向右移一个字符
G 移到文件的最后一行
w 移到下一个字的开头
W 移到下一个字的开头,忽略标点符号
b 移到前一个字的开头
B 移到前一个字的开头,忽略标点符号
L 移到屏幕的最后一行
M 移到屏幕的中间一行
H 移到屏幕的第一行
e 移到下一个字的结尾
E 移到下一个字的结尾,忽略标点符号
( 移到句子的开头
) 移到句子的结尾
{ 移到段落的开头
} 移到下一个段落的开头
0(数字), | 移到当前行的第一列
^ 移到当前行的第一个非空字符
$ 移到当前行的最后一个字符
+, Enter 移到下一行的第一个字符
– 移到前一行的第一个非空字符
 
在 vi 中添加文本:
命令 插入动作
a 在光标后插入文本
A 在当前行插入文本
i 在光标前插入文本
I 在当前行前插入文本
o 在当前行的下边插入新行
O 在当前行的上边插入新行
s 删除光标所在处字符,并进入插入模式
S 删除光标所在的行,并进入插入模式
:r file 读入文件 file 内容,并插在当前行后
:nr file 读入文件 file 内容,并插在第 n 行后
Esc 回到命令模式
^v char 插入时忽略 char 的指定意义,这是为了插入特殊字符
 
在 vi 中删除文本:
命令 删除操作
x 删除光标处的字符
dw 删至下一个字的开头
dG 删除行,直到文件结束
dd 删除整行
db 删除光标前面的字
:n,md 从第 m 行开始往前删除 n 行
d, d$ 从光标处删除到行尾
^h, backspace 插入时,删除前面的字符
^w 插入时,删除前面的字
 
修改 vi 文本:
每个命令前面的数字表示该命令重复的次数
命令 替换操作
rchar 用 char 替换当前字符
R text escape 用 text 替换当前字符直到按下 Esc 键
stext escape 用 text 代替当前字符
S 或 cctext escape 用 text 代替整行
cwtext escape 将当前字改为 text
Ctext escape 将当前行余下的改为 text
cG escape 修改至文件的末尾
ccursor_cmd text escape 从当前位置处到光标命令位置处都改为 text
 
在 vi 中查找与替换:
命令 查找与替换操作
/text 在文件中向前查找 text
?text 在文件中向后查找 text
n 在同一方向重复查找
N 在相反方向重复查找
ftext 在当前行向前查找 text
Ftext 在当前行向后查找 text
ttext 在当前行向前查找 text,并将光标定位在 text 的第一个字符
Ttext 在当前行向后查找 text,并将光标定位在 text 的第一个字符
:set ic 查找时忽略大小写
:set noic 查找时对大小写敏感
:ranges/pat1/pat2/g 用 newtext 替换 oldtext
:m,ns/oldtext/newtext 在 m 行通过 n,用 newtext 替换 oldtext
& 重复最后的 :s 命令
:g/text1/s/text2/text3 查找包含 text1 的行,用 text3 替换 text2
:g/text/command 在所有包含 text 的行运行 command 所表示的命令
:v/text/command 在所有不包含 text 的行运行 command 所表示的命令
 
在 vi 中复制文本:
命令 复制操作
yy 将当前行的内容放入临时缓冲区
nyy 将 n 行的内容放入临时缓冲区
p 将临时缓冲区中的文本放入光标后
P 将临时缓冲区中的文本放入光标前
“(a-z)nyy 复制 n 行放入名字为圆括号内的可命名缓冲区,省略 n 表示当前行
“(a-z)ndd 删除 n 行放入名字为圆括号内的可命名缓冲区,省略 n 表示当前行
“(a-z)p 将名字为圆括号的可命名缓冲区的内容放入当前行后
“(a-z)P 将名字为圆括号的可命名缓冲区的内容放入当前行前
 
在 vi 中撤消与重复:
命令 撤消操作
u 撤消最后一次修改
U 撤消当前行的所有修改
. 重复最后一次修改
, 以相反的方向重复前面的 f、F、t 或 T 查找命令
; 重复前面的 f、F、t 或 T 查找命令
“np 取回最后第 n 次的删除(缓冲区中存有一定次数的删除内容,一般为 9)
n 重复前面的 / 或 ? 查找命令
N 以相反方向重复前面的 / 或 ? 命令
 
保存文本和退出 vi:
命令 保存和/或退出操作
:w 保存文件但不退出 vi
:w file 将修改保存在 file 中但不退出 vi
:wq 或 ZZ 或 😡 保存文件并退出 vi
:q! 不保存文件,退出 vi
:e! 放弃所有修改,从上次保存文件开始再编辑
 
vi 中的选项:
选项 作用
:set all 打印所有选项
:set nooption 关闭 option 选项
:set nu 每行前打印行号
:set showmode 显示是输入模式还是替换模式
:set autoindent 继承前一行的缩进方式,特别适用于多行注释
:set smartindent 为C程序提供自动缩进
:set list 显示制表符(^I)和行尾符号
:set ts=8 为文本输入设置 tab stops
:set window=n 设置文本窗口显示 n 行
:set number 显示行数
:set nonumber 取消显示行数
 
vi 的状态:
选项 作用
:.= 打印当前行的行号
:= 打印文件中的行数
ctrl+g 显示文件名、当前的行号、文件的总行数和文件位置的百分比
:l 使用字母 “l” 来显示许多的特殊字符,如制表符和换行符
 
在文本中定位段落和放置标记:
选项 作用
{ 在第一列插入 { 来定义一个段落
[[ 回到段落的开头处
]] 向前移到下一个段落的开头处
m(a-z) 用一个字母来标记当前位置,如用 mz 表示标记 z
‘(a-z) 将光标移动到指定的标记,如用 ‘z 表示移动到 z
 
在 vi 中连接行:
选项 作用
J 将下一行连接到当前行的末尾
nJ 连接后面 n 行
 
光标放置与屏幕调整:
选项 作用
H 将光标移动到屏幕的顶行
nH 将光标移动到屏幕顶行下的第 n 行
M 将光标移动到屏幕的中间
L 将光标移动到屏幕的底行
nL 将光标移动到屏幕底行上的第 n 行
^e(ctrl+e) 将屏幕上滚一行
ctrl+y 将屏幕下滚一行
ctrl+u 将屏幕上滚半页
ctrl+d 将屏幕下滚半页
ctrl+b 将屏幕上滚一页
ctrl+f 将屏幕下滚一页
ctrl+l 重绘屏幕
z-return 将当前行置为屏幕的顶行
nz-return 将当前行下的第 n 行置为屏幕的顶行
z. 将当前行置为屏幕的中央
nz. 将当前行上的第 n 行置为屏幕的中央
z- 将当前行置为屏幕的底行
nz- 将当前行上的第 n 行置为屏幕的底行
 
vi 中的 shell 转义命令:
选项 作用
:!command 执行 shell 的 command 命令,如 :!ls
:!! 执行前一个 shell 命令
:r!command 读取 command 命令的输入并插入,如 :r!ls 会先执行 ls,然后读入内容
:w!command 将当前已编辑文件作为 command 命令的标准输入并执行 command 命令,如 :w!grep all
:cd directory 将当前工作目录更改为 directory 所表示的目录
:sh 将启动一个子 shell,使用 ^d(ctrl+d) 返回 vi
:so file 在 shell 程序 file 中读入和执行命令
 
vi 中的宏与缩写:
(避免使用控制键和符号,不要使用字符 K、V、g、q、v、*、= 和功能键)
选项 作用
:map key command_seq 定义一个键来运行 command_seq,如 :map e ea,无论什么时候都可以 e 移到一个字的末尾来追加文本
:map 在状态行显示所有已定义的宏
:umap key 删除该键的宏
:ab string1 string2 定义一个缩写,使得当插入 string1 时,用 string2 替换 string1。当要插入文本时,键入 string1 然后按 Esc 键,系统就插入了 string2
:ab 显示所有缩写
:una string 取消 string 的缩写
 
在 vi 中缩进文本:
选项 作用
ctrl+i或 tab 插入文本时,插入移动的宽度,移动宽度是事先定义好的
:set ai 打开自动缩进
:set sw=n 将移动宽度设置为 n 个字符
n> 使 n 行都向右移动一个宽度,例如 3>> 就将接下来的三行每行都向右移动一个移动宽度
更多参考:
1. Linux 下 vi/vim 文本编辑器超详细使用指南
2. Linux/Ubuntu:在命令行下安装vim文本编辑器
3. linux vi/vim man 帮助文档

29个最基本的 vim /vi 命令

本文收集了29个在日常工作中最常使用的29个基本 vim 命令 / vi 命令,对于linux初学者来说,这些命令是必须要掌握的。
vi/vim
1.vim
#在命令行中输入vim,进入vim编辑器
2.i
#按一下i键,下端显示 –INSERT–
#插入命令,在vim中可能任意字符都有作用
3.Esc
#退出i(插入)命令进行其它命令使用
4.:r filename
#读入一个文件内容,并写入到当前编辑器中
5.:w newfilename
#将该编辑器中的内容写入到一个新文件中
6.:w
#在编辑的过程中保存文件,相当于word中的ctrl+s
7.:! command
暂时离开 vi 到指令列模式下执行 command 的显示结果!例如
:!ls
#在编辑过程中执行shell命令ls
8.:sh
#进入shell命令行,执行完命令后ctrl+d退出重新进入vim编辑继续编辑
在shell命令下,执行ctral+l完成清屏
9.:wq
#保存文件并退出
10.ZZ
#保存文件并退出,同上一个命令,注意大写
11.:q!
#强制退出,不保存
12.:set number或者:set nu
#使编辑中的文件显示行号
13.:set nonumber或者:set nonu
#与上一条命令相反,不显示行号
14.:help i
#查看插入命令帮助
15.u
#撤消上一步操作
16./Fedora
#查找Fedora字符
17.:s /Fedora/Redhat
#将Fedora字符替换为Redhat(只替换在光标所在的行)
18.dw
#删除单词
dd
#删除行
19.o
#打开空白一行
20.vim + filename
#进行文件最后一行进行编辑
21.vim +n filename
#进入文件第n行进行编辑
22.:1,.s/redhat/fedora
#.号表示当前行,即光标所在行
#将第1行到当前行(.)第一次出现的redhat字符代替为fedora
23.:1,.s/redhat/fedora/g
#将第1行到当前行(.)所有出现的redhat字符代替为fedora,g
全局标志
24.:1,$s/redhat/fedora/g
#$表示最后一行
#将第1行到最后一行所有出现的redhat字符代替为fedora
25.:%s/redhat/fedora/g
#同上一个命令
26.:%s/\/fedora/g
#将第1行到最后一行所有出现的redhat字代替为fedora
#字,而不是字符
27.:f
#显示文件内容,状态等等
#同ctrl+g命令
28.:e!
#当前文件,返回到上次保存
:e file
#切换编辑文件
29.:n
#当编辑时有多个文件(比如vim file1 file2)时切换到下一个文件,与:e file
结合使用
更多参考:
1. Linux 下 vi/vim 文本编辑器超详细使用指南
2. Linux/Ubuntu:在命令行下安装vim文本编辑器
3. linux vi/vim man 帮助文档

Linux下如何使用vi /vim 文本编辑器做批量字符串替换

在linux下我们最常使用的文本编辑器就是是vi 编辑器了,那么如何使用linux vi 文本编辑器来做批量的字符串替换呢? 本文将会讲述如何使用linux vi /vim 文本编辑器来做字符串的批量替换。
vi/vim 
#1 使用linux vi /vim 编辑器做文件内全部替换
输入下面的命令:

%s#old#new#g
 

上面的命令会将文本内的所有的old字符串替换成“new”.这里使用了 ”#“ 分隔符,当然你也可以使用其它的,比如”/”.
 
#2 使用linux vi /vim 编辑器做文件内局部替换
输入下面的命令:

:10,20s/old/new/g
 

上面的vi /vim 命令会将文件内的第10行到20行直接的所有的old字符串替换成new。
对于上的命令如果在命令后面再加上”c”选项,这样在vi 替换字符串之前会出现提示符确认,是否要执行字符串替换。
输入下面的命令:

:10,20s/old/new/gc
 

 
更多参考:
1. Linux 下 vi/vim 文本编辑器超详细使用指南
2. Linux/Ubuntu:在命令行下安装vim文本编辑器
3. linux vi/vim man 帮助文档

linux下如何退出vi/vim 文本编辑器

当你用vi/vim 文本编辑器打开一个文件的时候,并且对文件做了更改,之后如何来退出vi编辑器呢? 退出vi/vim 编辑器又分为以下几种:不保存退出vi/vim 编辑器,保存退出vi/vim 编辑器,只保存不退出vi/vim编辑器,没有更改直接退出vi/vim编辑器。下面我们分别来说以下这四种退出vi/vim的方法:
vi/vim 
#1不保存退出vi/vim 编辑器
这个我们在之前的文章中讲过如何不保存退出vi/vim编辑器,简单的说就是从输入模式返回到命令模式,然后输入“”,在输入”q!“,回车后,就可以不保存退出vi/vim编辑器
 
#2保存退出vi/vim 编辑器
在linux vi/vim 文本编辑器里,保存并退出vi/vim编辑器的方法有多种:
1)在末行模式下,输入”:“后,再输入”wq“,回车就可以保存退出vi/vim文本编辑器。
2)在命令模式下,输入两次大写字母”z“,如果当前编辑的文件被更改过,那么会保存文件并退出vi/vim 编辑器,如果没有编辑修改过,那么会直接退出vi/vim编辑器。
3)在末行模式下,输入”“后,再输入”x“,回车后即可保存并退出vi/vim编辑器。
 
#3只保存不退出vi/vim编辑器
如果想对当前编辑的文件,只做保存操作,但并不退出vi/vim编辑器(在编辑文档的时候要记得保存,否则可能会因为系统宕机引起文件更改丢失或不保存),进入末行模式,输入”:”后,再输入“w”,回车,就可以随时保存当前文件更改。
 
#4 没有更改直接退出vi/vim编辑器
如果使用vi/vim 文本编辑器打开了文件,但并没有对文件做任何的更改,可以直接退出,进入末行模式,输入”:”,再输入”q”,回车后就可以退出vi/vim编辑器,返回shell。
 
以上是总结的关于linux下退出 vi/vim 编辑器的几种情况和退出方法。
更多参考:
1. Linux 下 vi/vim 文本编辑器超详细使用指南
2. Linux/Ubuntu:在命令行下安装vim文本编辑器
3. linux vi/vim man 帮助文档

Linux 下 vi/vim 文本编辑器超详细使用指南

Linux下的编辑器最常用的就是vim或者vi文本编辑。vi 和vim 编辑器的区别是vim是vi的改进版本,在vi 编辑器的基础上上扩展了很多实用的功能。 大多数的linux/unix 发行版本中都使用 vim 代替了原来的 vi 文本编辑器。 如果是centos或者redhat系统,当系统安装完毕后,vi/vim 文本编辑器默认情况下就已经被安装了。如果是debian/ubuntu系统下,默认情况下,vim编辑器是不会被安装的。你需要在ubuntu系统下手动安装vim编辑
vi/vim文本编辑器是我们在linux系统下工作可以说是必须会使用的一个工具,因为linux系统的设计理念是一切皆文件,也就是说,你在linux里的任何操作都是对文件的操作,所以会经常去操作文件,更改文件,保存文件,退出并保存文件。那么在linux下,如何使用vim/vi 文本编辑器来新建文件,编辑文件,保存文件呢? 如何使用vim/vi文本编辑器的查找命令来查找特定的文本呢? 如何使用vim/vi 文本编辑器中的查找并替换命令来对文本做批量更改呢?
本文将会给大家详细讲述如何在linux操作系统下使用vi/vim 文本编辑器。
 
vi/vim模式介绍
在linux vi/vim 文本编辑器里有三种模式:命令模式输入模式末行模式。这三者模式的区别是什么呢?
命令模式是vi/vim 编辑器进入后的默认模式,从命令模式可以切换到输入模式和末行模式,如果当你进入另外的两种模式后,可以使用“ESC”键退回到命令模式。在命令模式下,可以输入一些文本编辑器特有的命令,比如说你想编辑文件,那么就需要输入“i”,让当前模式变为插入模式或者输入模式,这样你就可以编辑这个文本了。
输入模式顾名思义就是要对本文做输入的操作,也就是说可以对文件做出更改操作。否则,你在命令模式下,vi/vim 文本编辑器是只读模式,你无法对文本做出更改。
末行模式是是命令模式下输入”:”,当你在输入模式下,对文件做了更改,那么需要先退回到命令命令,再进入末行模式,并输入”wq”后,即可保存并退出 vi/vim 文本编辑器。如果想不保存退出 vi/vim 文本编辑器,那么直接输入”q!”,即可。
 
在linux系统下运行 vi/vim 文本编辑器
在linux命令行下,输入 vi 或者vim 命令:

vi
 

或者

vim
 

linux vi vim 文本编辑器
 
linux 下 vim/vi 文本编辑器常用命令
#1 进入vi/vim文本编辑器的命令
vi filename:打开或新建文件,并将光标置于第一行行首的位置
vi +n filename: 打开文件,并将光标置于第n行的位置
vi + filename: 打开文件,并将光标置于最后一行的位置
vi +/pattern filename: 打开文件,并将光标置于第一个与pattern匹配的行首
vi -r filename: 在上次征用vim 文本编辑器的时候发生系统奔溃后,恢复filename 文件
vi filename1…filenamen: linux vi/vim 文本编辑器可以通过打开多个文件,依次进行编辑
#2 linux vi/vim 文本编辑器下移动光标的命令
H: 光标移到屏幕顶行
M: 光标移到屏幕中间行
L: 光标移到屏幕最后行
0: 光标移到当前行首
$: 光标移到当前行尾
#3 linux vi/vim 文本编辑器下屏幕翻滚类命令
Ctrl+F:向前翻整页
Ctrl+U:向前翻半页
Ctrl+B:向后翻整页
Ctrl+D:向后翻半页
#4 Linux vi/vim 文本编辑器插入文本类命令
i: 在光标前
I:在当前行行首
a: 在光标后
A: 在当前行尾
o: 在当前行之下新开一行
O: 在当前行之前新开一行
#5 Linux vi/vim 文本编辑器删除命令
do:删至行首
d$: 删至行尾
dd: 删除光标所在行
ndd: 删除当前航及其后n-1行
D: 删除当前光标到行尾的内容
Ctrl+u: 删除输入方式下输入的所有文本
#6 Linux vi/vim 文本编辑器搜索及替换命令
/pattern: 从光标开始处向文件尾搜索pattern模式
?pattern: 从光标开始处向文件首搜索pattern 模式
:s/p1/p2/g : 将当前行中所有p1替换成p2
:n1,n2s/p1/p2/g:将第n1行到n2行中所有的p1替换成p2
:g/p1/s//p2/g:将文件中所有的p1替换成p2
#7 Linux vi/vim 文本编辑器拷贝和粘贴命令
在vi/vim文本编辑器中”y”表示拷贝,”d”表示删除, “p”表示粘贴,通常与光标移动命令结合使用
y$: 表示拷贝从当前光标处到行尾的内容
d$: 表示删除从当前光标到行尾的内容
yy: 表示拷贝光标所在行
#8 Linux vi/vim 文本编辑器撤销操作命令
u:取消最近一次的操作
U:取消所有的操作
#9 vi/vim 编辑器末行模式下的命令
n1,n2 d: 将n1行到n2行之间的内容删除
:w 保存当前文件
:e filename 打开文件filename进行编辑
:x 保存当前文件并推出
:q 退出 vi/vim 编辑器
:q! 不保存并退出vi/vim编辑器
以上是linux 下vi/vim 文本编辑器里最常用的命令集合。更多关于vi/vim编辑器的使用,可以参考官方帮助文档。
更多参考:
1.linux vi/vim man 帮助文档
2. Linux/Ubuntu:在命令行下安装vim文本编辑器
3. vi/vim里如何退出不保存?

SCP 命令参数使用详解(最详细使用指南)

在linux 下scp 命令主要用来在不同主机之间做数据的安全拷贝的。scp 命令可以将文件从本地的计算机中拷贝到远程的主机中,或者从远程计算机中拷贝文件到本地主机,scp命令使用的安全加密的协议,所以在远程拷贝数据的时候会比较安全,不会被黑客截取。
这个命令在日常的工作中经常会被用到,尤其是在多主机的集群环境中或者在cloud 环境里,比如当你想配置hadoop大数据环境或者配置openstack 多节点环境的时候,都会用用到scp命令,用来配置节点间无密码登陆。
本文将会讲述在linux系统中如何来使用linux 的scp命令,并演示如何在主机之间安全的拷贝数据文件。
linux scp 命令的使用格式如下:

scp [选项] <源文件路径>  <目标文件路径>
 

或者:

scp [-12346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
[-l limit] [-o ssh_option] [-P port] [-S program]
[[user@]host1:]file1 ... [[user@]host2:]file2
 

 
 
scp 使用实例
在使用scp命令的时候需要注意,本地主机和远程主机必须能够相互访问,你需要知道远程主机的访问用户名和密码。
 
1#从远程服务器中下载数据文件到本地主机
如果你想从远程主机host1中的/tmp/目录下拷贝test1 文件到本地主机的/tmp目录,那么可以在本地主机的命令行下面
输入命令:

scp root@host1:/tmp/test1 /tmp
 

 
#2 从远程服务器中拷贝目录文件到本地主机下面
当你从远程主机中拷贝一个目录的时候,你需要给scp命令传入一个“-r“ 选项,这样scp命令就会将远程主机下面的整个目录的文件都拷贝的本地主机下。
输入下面的命令:

scp -r root@hots1:/tmp  /tmp
 

这个命令就会把host1主机下的tmp目录拷贝到本地主机的/tmp目录下
 
#3 将本地主机的文件拷贝到远程服务器上
如果要将本地主机的 /tmp目录下的test1文件拷贝到远程主机的/tmp目录下,可以在本地主机输入下面的命令:

scp /tmp/test1 root@host1:/tmp
 

这样test1文件就会被拷贝到远程服务器上了。
 
#4将本地主机下的目录上传到远程服务器
这个和刚才第二步的命令类似,就是需要传”-r” 参数给linux scp 命令,输入下面的 scp 命令:

scp -r /tmp root@hots1:/tmp
 

上面的命令会把本地主机的/tmp目录上传到远程主机host1的/tmp目录下。
上面的四个例子是 scp 命令最常用的四种用法,当然还有其他的选项。 大家可以参考 linux scp 命令的帮助页面。
输入:

man scp
 

更多参考:scp 命令帮助文档

CentOS/Linux:如何编译最新版的linux 内核

当linux内核社区有新的版本发布的时候,如果你也想升级你的centos或者centos系统的内核版本,那么如何通过源码升级linux的内核吗。本文将会讲述如何从linux 内核官方下载最新的内核版本,并升级安装。
1、查看系统内核版本

#uname -r
2.6.18-92.el5
 

2、下载最新版本linux内核
输入下面的命令:

wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.13.tar.gz  .
 

3、清除环境变量,即清除配置文件

$ make mrproper
 

4、 在菜单模式下选择需要编译的内核模块

$make menuconfig
 

#需要 gcc 和 ncurses-devel 的支持,如果没有安装,yum 安装
5、编译内核

#make && make modules_install && make install
 

或者逐步执行:
#make clean确保所有东西均保持最新状态.
#make bzImage 生成内核文件
#make modules 编译模块
#make modules_install 安装模块
#make install 安装
#mkinitrd /boot/initrd_2.6.18.img 根据内核版本和指定参数生成映像文件
#cp arch/x86/boot/bzImage /boot/vmlinuz-2.6.18
#cp /usr/src/linux-2.6.18/System.map /boot/System.map-2.6.18
6、重新配置grub引导程序

#vi /boot/grub/grub.conf  #以新内核启动系统,重启系统;
 

CentOS/linux:如何使用split命令分割文件

当面临将一个大文件进行切分时,linux的split命令是很好的选择。它包含多种参数,支持按行、大小进行切分。本文将会讲述如何使用linux split 命令来做文件的分割,尤其是大文件的分割成多个小文件。
split命令的语法如下:
split [–help][–version][-a ][-b][-C ][-l ][要切割的文件][输出文件名前缀] 对应的参数描述如下:
-a, –suffix-length=N
使用的后缀长度 (默认为 2)
-b, –bytes=SIZE
每个输出文件的字节大小
-C, –line-bytes=SIZE
每个输出文件每行的最大字节大小
-d, –numeric-suffixes
使用数字后缀代替字母后缀
-l, –lines=NUMBER
设定每个输出文件的行数
–help 显示帮助信息
–version
显示版本信息
下面举几个例子:
1)将文件splitTest.txt分割成多个文件,分割后的每个文件大小为10M。命令:

$ split -b 20m splitTest.txt
$ ls
splitTest.txt  xaa  xab  xac
 

2)将文件splitTest.txt分割成多个文件,分割后的每个文件大小为10M。指定分割后的文件前缀位split,命令:

$ split -b 20m splitTest.txt  split
$ ls
splitaa  splitab  splitac  splitTest.txt
 

3)将文件splitTest.txt分割成多个文件,每个文件50万行。命令:

$ wc -l splitTest.txt
1502216 splitTest.txt
$ split -l 500000 splitTest.txt  split
$ ls
splitaa  splitab  splitac  splitad  splitTest.txt
 

4)将文件splitTest.txt分割成多个文件,每个文件50万行。指定分割后的文件后缀为数字,数字位数为3位,命令:

$ wc -l splitTest.txt
1502216 splitTest.txt
$ split -l 500000 -d -a 3 splitTest.txt  split
$ ls
split000  split001  split002  split003  splitTest.txt
 

可以使用cat命令将切分后的文件合并成新的文件:

$ cat split0* > original.txt
 

CentOS7/RHEL7:如何创建并挂载SCSI 共享磁盘

在centos7 系统下我们如何来创建并挂载SCSI 共享磁盘呢?本文将会讲述通过两个虚拟机作为scsi的服务器端和客户端来配置创建并挂载scsi共享磁盘。
实验设备:
用虚拟机虚拟两个 centos6.3 -64bit 系统,并配置好yum
ip设置:
scsi服务端:10.1.1.222
scsi客户端(挂载端):10.1.1.1
1、在服务端安装软件并配置好共享的磁盘,首先在虚拟机中新加入一块硬盘,大小随意。(这里添加100G)

[root@localhost ~]# fdisk -l
 Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0005bb6c
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          26      204800   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              26         281     2048000   82  Linux swap / Solaris
Partition 2 does not end on cylinder boundary.
/dev/sda3             281        2611    18717696   83  Linux
Disk /dev/sdb: 107.4 GB, 107374182400 bytes
255 heads, 63 sectors/track, 13054 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00077087
   Device Boot      Start         End      Blocks   Id  System
 

2、安装scsi服务端软件

yum install scsi-target-utils -y
 

共享磁盘(在配置文件中加入以下代码即可)

vim /etc/tgt/targets.conf
    <target iqn.2008-09.com.example:server.target1>
        backing-store /dev/sdb
    </target>
 

启动服务

service tgtd restart
 

关闭防火墙和selinux
3、在客户端安装客户端软件,并设置挂载
安装客户端软件

yum install iscsi-initiator-utils -y
 

查看是否有共享磁盘

iscsiadm --mode discoverydb --type sendtargets --portal 10.1.1.222 --discover
 

出现以下则表示有共享磁盘 10.1.1.222:3260,1 iqn.2008-09.com.example:server.target1
挂载磁盘

iscsiadm --mode node --targetname iqn.2008-09.com.example:server.target1 --portal 10.1.1.222:3260 --login
 

注意:中间2008-09这段是填写上面查询出来的那个磁盘名
成功挂载后有以下提示

[root@localhost ~]#  iscsiadm --mode node --targetname iqn.2008-09.com.example:server.target1 --portal 10.1.1.222:3260 --login
Logging in to [iface: default, target: iqn.2008-09.com.example:server.target1, portal: 10.1.1.222,3260] (multiple)
Login to [iface: default, target: iqn.2008-09.com.example:server.target1, portal: 10.1.1.222,3260] successful.
 

查看是否挂载成功
[root@localhost ~]# fdisk -l

 Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00036380
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          26      204800   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              26         281     2048000   82  Linux swap / Solaris
Partition 2 does not end on cylinder boundary.
/dev/sda3             281        2611    18717696   83  Linux
Disk /dev/sdb: 107.4 GB, 107374182400 bytes
255 heads, 63 sectors/track, 13054 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00077087
   Device Boot      Start         End      Blocks   Id  System
 

成功挂载100G硬盘。

CentOS 6.5:如何更换系统的默认yum软件源为163源

当CentOS6.5系统安装完成后,系统默认使用的是centos 官方的yum 软件仓库源,这些源站点都在国外,所以安装更新速度会很慢,那么我们可以更改yum更新源。原理很简单,就是把yum配置文件中的更新源改一下,这里直接用163的镜像站点中的配置文件。
更改方法如下:
1、进入yum配置文件目录

cd /etc/yum.repos.d/
 

2、备份配置文件

mv CentOS-Base.repo CentOS-Base.repo.bak
 

3、下载163的配置

wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
 

4、改名

mv CentOS6-Base-163.repo CentOS-Base.repo
 

5、更新数据库

yum update
 

CentOS 6.3:如何配置并优化系统

当你当装完centos系统之后,需要做一些个性化的配置以及系统优化设置,本文将会讲述如何配置并优化刚装完的centos 6.3 操作系统。
全新以最小化包安装了的CentOS6.3系统,作为本地的Web服务器使用,现记录全过程配置网易163的yum源
1. 下载repo文件

wget http://mirrors.163.com/.help/CentOS6-Base-163.repo .
 

2. 备份并替换系统的repo文件

[root@localhost ~]#cd /etc/yum.repos.d/
[root@localhost ~]#mv CentOS-Base.repo CentOS-Base.repo.bak
[root@localhost ~]#mv /root/CentOS6-Base-163.repo CentOS-Base.repo
 

注意:如果直接下载在/etc/yum.repos.d/目录下,不要让.repo文件多于1个,比如:CentOS6-Base-163.repo、CentOS-Base.repo会出错
3. 执行yum源更新

[root@localhost ~]#yum clean all
[root@localhost ~]#yum makecache
 


优化系统

一、更新系统到最新

[root@web01yum.repos.d]# yum update
 

二、安装必要的软件包

[root@web01~]#yuminstall lrzsz sysstat –y
 

另外,如果在安装时落下了安装需要的软件包组,可以在这里执行如下命令来安装。

[root@web01~]#yumgroupinstall “Development Tools”
[root@web01~]#yumgroupinstall “X software development”
 

三、清理开机自启动的服务
关闭所有开机自启动服务:

[root@web01~]# for test in `chkconfig --list|grep 3:on|awk '{print $1}'`;do chkconfig --level 3 $testoff;done
 

打开crond、network、rsyslog、sshd开机自启动服务

[root@web01 ~]# for test in crond network rsyslog sshd;do chkconfig --level 3 $test on;done
 

查看处理结果:

[root@web01 ~]# chkconfig --list|grep 3:on
crond           0:off   1:off  2:on    3:on    4:on   5:on    6:off
network         0:off  1:off   2:on    3:on   4:on    5:on    6:off
rsyslog         0:off  1:off   2:on    3:on   4:on    5:on    6:off
sshd            0:off   1:off  2:on    3:on    4:on   5:on    6:off
 


四、更改ssh登陆配置

[root@web01 ~]# cp/etc/ssh/sshd_config /etc/ssh/sshd_config.back #备份配置文件
 
[root@web01 ~]# vim/etc/ssh/sshd_config
##########by test###########################
Port 11111
PermitRootLogin no                 #root用户禁止远程登陆
PermitEmptyPasswords no            #密码为空禁止登陆
UseDNS no                        #不使用DNS
##############################################
 
[root@web01 ~]# /etc/init.d/sshd restart     #重启后生效
 

五、将需要有root权限的用户名加入sudo挂了,这样用户通过自己的普通账户登陆,就可以以root的权限来管理整个系统。

[root@web01 ~]#visudo   #相当于直接编辑/etc/sudoer,使用命令方式更安全,推荐
 

在文件的中间如下内容的下面添加需要root权限的用户名,格式如下:

## Allow root to run any commands anywhere
root   ALL=(ALL)       ALL
test   ALL=(ALL)       ALL #表示test可拥有完全的系统管理员权限
 

普通用户环境变量问题和解决办法
对比root和test用户下默认的PATH环境变量

[root@web01 ~]# echo$PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[test@web01 ~]$ echo$PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/test/bin
 

经过对比我们发现普通用户上了几个关键环境变量/usr/local/sbin:/sbin:/usr/sbin:是导致执行命令找不到的原因(除非带全路径执行)
解决办法:
编辑~/.bash_profile环境变量文件,把:/usr/local/sbin:/sbin:/usr/sbin:添加到PATH环境变量里,注意:每个路径之间要用冒号分割

[test@web01 ~]$ vim./.bash_profile
[test@web01 ~]$source ./.bash_profile   #使添加的内容生效
[test@web01 ~]$ echo$PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/test/bin:/home/test/bin:/usr/local/sbin:/sbin:/usr/sbin
 

六、修改中文显示
通过快捷的命令方式在/etc/sysconfig/i18n中添加如下命令:

[root@web01 ~]# echo'LANG="zh_CN.GB18030"' >/etc/sysconfig/i18n
[root@web01 ~]#source /etc/sysconfig/i18n  #使修改生效
 

七、加大服务器文件描述符

[root@web01 ~]# vim/etc/security/limits.conf  (默认大小为1024)
*      -   nofile    65535
 

注意:配置完成后,重新登陆既可查看

[root@web01 ~]#ulimit -n
65535
 

八、调整内核参数文件/etc/sysctl.conf

net.ipv4.tcp_fin_timeout= 2
net.ipv4.tcp_tw_reuse= 1
net.ipv4.tcp_tw_recycle= 1
net.ipv4.tcp_syscookies= 1
net.ipv4.tcp_keepalive_time= 600
net.ipv4.ip_local_port_range= 4000
net.ipv4.tcp_max_syn_backlog= 16384
net,ipv4.tcp_max_tw_buckets= 360000
net.ipv4.route.gc_timeout= 100
net.ipv4.tcp_syn_retries= 1
net.ipv4.tcp_synack_retries=1
net.ipv4.ip_conntrack_max= 25000000
net.ipv4.netfilter.ip_conntrack_max=25000000
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=180
net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait=120
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait=60
net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait=120
 

CentOS/Linux: 命令su、su-、sudo的不同之处


在linux系统中,由于root的权限过大,一般情况都不使用它。只有在一些特殊情况下才采用登录root执行管理任务,一般情况下临时使用root权限多采用su和sudo命令。
su命令就是切换用户的工具,怎么理解呢?比如我们以普通用户wade登录的,但要添加用户任务,执行useradd ,wade用户没有这个权限,而这个权限恰恰由root所拥有。
解决办法无法有两个,一是退出wade用户,重新以root用户登录,但这种办法并不是最好的;二是我们没有必要退出wade用户,可以用su来切换到root下进行添加用户的工作,等任务完成后再退出root。我们可以看到当然通过su 切换是一种比较好的办法;通过su可以在用户之间切换,而超级权限用户root向普通或虚拟用户切换不需要密码,什么是权力?这就是!而普通用户切换到其它任何用户都需要密码验证!
一、和su – 命令对比:
centos su sudo 命令
通过上图时间操作我们可以分析得出两个命令之间的区别:
1、参数 -, -l, –login
make the shell a login shell
su -,su -l或su –login 命令改变身份时,也同时变更工作目录,以及HOME,SHELL,USER,LOGNAME。此外,也会变更PATH变量。用su -命令则默认转换成成root用户了。
而不带参数的“su命令”不会改变当前工作目录以及HOME,SHELL,USER,LOGNAME。只是拥有了root的权限而已。

2、su的优缺点:

su的确为管理带来方便,通过切换到root下,能完成所有系统管理工具,只要把root的密码交给任何一个普通用户,他都能切换到root来完成所有的系统管理工作;
但通过su切换到root后,也有不安全因素;比如系统有10个用户,而且都参与管理。如果这10个用户都涉及到超级权限的运用,做为管理员如果想让其它用户通过su来切换到超级权限的root,必须把root权限密码都告诉这10个用户;如果这10个用户都有root权限,通过root权限可以做任何事,这在一定程度上就对系统的安全造成了威协;
想想Windows吧,简直就是恶梦;“没有不安全的系统,只有不安全的人”,我们绝对不能保证这 10个用户都能按正常操作流程来管理系统,其中任何一人对系统操作的重大失误,都可能导致系统崩溃或数据损失;所以su 工具在多人参与的系统管理中,并不是最好的选择,su只适用于一两个人参与管理的系统,毕竟su并不能让普通用户受限的使用;超级用户root密码应该掌握在少数用户手中,这绝对是真理!所以集权而治的存在还是有一定道理的。

二、su和sudo命令对比:

在普通用户下输入su命令后,会提示输入root账户的密码,然后就进入特权模式(跟用root登录系统完全一样),输入exit或者su – user 退出。
centos su sudo 命令
而采用sudo命令,只需输入当前用户的密码(也可以配置为不输入密码)即可执行需要root权限执行的命令:
centos su sudo 命令
通过上面的对比可以看出,sudo比su有很多优点:
1、普通用户不需要知道root的密码即可执行需要root权限的命令;
2、不会因忘记退出而采用root执行了会引起破坏性的命令(初学linux经常犯这个错);
3. 由于su 对切换到超级权限用户root后,权限的无限制性,所以su并不能担任多个管理员所管理的系统。
如果用su 来切换到超级用户来管理系统,也不能明确哪些工作是由哪个管理员进行的操作。特别是对于服务器的管理有多人参与管理时,最好是针对每个管理员的技术特长和管理范围,并且有针对性的下放给权限,并且约定其使用哪些工具来完成与其相关的工作,这时我们就有必要用到 sudo。
通过sudo,我们能把某些超级权限有针对性的下放,并且不需要普通用户知道root密码,所以sudo 相对于权限无限制性的su来说,还是比较安全的,所以sudo 也能被称为受限制的su ;
另外sudo 是需要授权许可的,所以也被称为授权许可的su;sudo 执行命令的流程是当前用户切换到root(或其它指定切换到的用户),然后以root(或其它指定的切换到的用户)身份执行命令,执行完成后,直接退回到当前用户;而这些的前提是要通过sudo的配置文件/etc/sudoers来进行授权。

CentOS/RHEL:如何查看主板型号以及硬件信息


在centos系统下我们如何来查看主板的型号以及其它的硬件信息呢,比如硬盘,内存,网卡等
。本来将会讲述如何使用常用的一些linux工具来检测硬件的信息。
安装包命令查找:

yum whatprovides */lspci
 

查看主板型号:

dmidecode |grep -A16 "System Information$"
 

内存槽及内存条:

dmidecode |grep -A16 "Memory Device$"
 

硬盘:

fdisk -l
 
smartctl -a /dev/sda
HP SmartArray (cciss) hardware RAID controllers:
 
smartctl -d cciss,0 -a /dev/cciss/c0d0
 

网卡:

mii-tool
 

scsi/raid卡:

lspci
 

centos相关命令安装:

yum -y install smartmontools
yum install pciutils -y
 

CentOS/RHEL:如何使用Cp/rm/mv命令的强制覆盖操作

在centos linux系统上如果你想使用cp/rm/mv的强制覆盖操作,默认情况下,系统会对着几个命令做不能强制覆盖的别名操作。所以如何来取消命令的别名,执行强制覆盖操作呢。
习惯了freebsd里的cp/rm/mv等命令遇到同名文件时直接覆盖操作,而在linux中(不一定是全部,可能是我使用的几种),使用cp/rm/mv命令覆盖文件操作时总是提示输入yes或no,很是麻烦,一两个的也就算了,没什么,但有时会遇到大量文件的复制时,就麻烦了,要一个一个输入yes才能进行,即使加上了-f参数也无法达到强制覆盖。于是查阅资料后,找到一些小技巧,下面仅以cp命令为例,详细说明
一、使用unalias cp命令 解除对cp的别名(仅本次终端连接会话临时取消),我们先输入alias命令,查看系统内部已经设置的别名

 [root@localhost ~]# alias
    alias cp='cp -i'
    alias l.='ls -d .* --color=tty'
    alias ll='ls -l --color=tty'
    alias ls='ls --color=tty'
    alias mv='mv -i'
    alias rm='rm -i'
    alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
 

输入unalias cp命令,取消cp命令的别名

   [root@localhost ~]# unalias cp
    [root@localhost ~]# cp filename new/filename
    [root@localhost ~]#
 

使用unalias cp命令后,即可使用cp filename new/filename就不会提示输入yes或no了,是不是很方便
二、直接输入\cp命令,作用也是取消cp的别名

    [root@localhost ~]# \cp filename new/filename
    [root@localhost ~]#
 

是不是比上一个方法更省事
三、使用管道的方式,自动输入yes

    [root@localhost ~]# yes | cp filename new/filename
    cp: overwrite `new/filename'? [root@localhost ~]#
 

自己替我们输入了yes
原文:92csz.com

CentOS/linux:如何查找目录下文件中是否包含指定字符串

在centos linux系统下查找文件中是否包含特定的行是经常会做的事情。那么如何来查看特定目录下的文件中是否包含特定的字符串呢?我们可以使用linux find命令来实现。
输入下面的命令:

find . | xargs grep -ri "IBM"
 

查找目录下的所有文件中是否含有某个字符串,并且只打印出文件名

find . | xargs grep -ril "IBM"
 

1.正则表达式
(1)正则表达式一般用来描述文本模式的特殊用法,由普通字符(例如字符a-z)以及特殊字符(称为元字符,如/、*、?等)组成。
(2)基本元字符集及其含义
^ :只匹配行首。 如^a 匹配以a开头的行abc,a2e,a12,aaa,……
$ :只匹配行尾。 如^a 匹配以a结尾的行bca,12a,aaa,…….
* :匹配0个或多个此单字符。 如(a)* 匹配 空,a,aa,aaa,….
[] :只匹配[]内字符。可以是一个单字符,也可以是字符序列,用”,”将里面要匹配的不同字符串分开。也可以使用-来表示[]内字符序列的范围,如[1-5]表示[12345] \ :只用来屏蔽一个元字符的特殊含义。 如\*,\’,\”,\|,\+,\^,\. 等
.:(点)只匹配任意单字符。
pattern\{n\}:只用来匹配前面pattern出现的次数.n为次数。如a\{2\}匹配aa.
pattern\{n,\}:含义同上,但次数最少为n.如a\{2,\}匹配aa,aaa,aaaa,…..
pattern\{n,m\}:含义同上,但次数在n和m之间。如a\{2,4\}匹配aa,aaa,aaaa三个
(3)举例说明:
^$ :匹配空行
^.$ :匹配包含一个字符的行
\*\.pas :匹配以*.pas结尾的所有字符或文件
[0123456789]或[0-9] :假定要匹配任意一个数字
[a-z] :任意小写字母
[A-Za-z] :任意大小写字母
[S,s] :匹配大小写S
[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\} :匹配IP地址 [0-9]\{3\}三个0-9组成的字符串;\. :匹配点(注意这里点是特殊的字符,所以要用”\”来屏蔽其含义)
2.find介绍
(1)查找具有某些特征文件的命令,可遍历当前目录甚至于整个文件系统来查看某些文件或目录,其遍历大的文件系统时一般放在后台执行。
(2)find命令的一般形式
find pathname -options [-print -exec -ok] -pathname :find命令所查找的目录路径。如用”.”来表示当前的目录,用/来表示系统根目录
-print :find命令将匹配的文件输出到标准输出
-exec: find命令对匹配的文件执行该参数所给出的shell命令,相应的命令形式为
‘command'{} \; (注意{}和\之间的空格)
-ok 和 -exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
options有如下几种:
-name :按照文件名查找文件
-perm :按照文件权限来查找文件
-user :按照文件属主来查找文件
-group :按照文件所属的组来查找文件
-mtime -n +n 按照文件的更改时间来查找文件,-n表示文件更改时间距现在n天以内,+n表示文件更改时间距现在n天以前。find命令还有-atime 和-ctime选项,但它们都和-mtime选项相似。
-size n查找文件长度为n块的文件,带有c时表示文件长度以字节计。
-nogroup 查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在
-newer file1 !file2查找更改时间比文件file1新但比文件file2旧的文件
-depth 先查找指定目录有无匹配文件,若无则再在子目录中查找
-type 查找某一类型的文件,如
b :块设备文件
d:目录
e:字符设备文件
p;管道文件
l:符号链接文件
f:普通文件
(3)find命令举例
find -name “*.txt” -print 查找txt结尾的文件并输出到屏幕上
find /cmd “.sh” -print 查找/cmd目录下所有sh文件,并输出
find . -perm 755 -print 查找当前目录下权限为755的文件,并输出
find `pwd` -user root -print 查找当前目录下属主为root的文件,并输出
find ./ -group sunwill -print 查找当前目录下所属主是sunwill的文件
find /var -mtime -5 -print 查找/var目录下更改时间为5天内的所有文件
find /var -mtime +5 -print 查找/var目录下更改时间为5天以前的所有文件
find /var -newer “myfile1” ! -newer “myfile2” -print 查找/var目录下比myfile1新,但是比myfile2旧的所有文件。
find /var -type d -print 查找/var目录下所有目录
find /var -type l -print 查找/var目录下所有的符号链接文件。
find . -size +1000000c -print 查找当前目录下大于1000000字节的文件
find / -name “con.file” -depth -print 查找根目录下有无”con.file”,若无则在其子目录中查找
find . -type f -exec ls -l {} \; 查找当前目录下是否有普通文件,若有则执行ls -l
(4)xargs命令
在 使用find命令的-exec选项处理匹配到的文件时,find命令将所有匹配到的文件一起传递给exec。不幸的是,有些系统对能够传递给exec的命 令长度有限制,这样find命令运行几分钟之后就算出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs的用处所在,特别是与 find命令一起使用,exec会发起多个进程,而xargs会多个,只有一个
find ./ -perm -7 -print | xargs chmod o-w 查找权限为7的文件并传递给chmod处理
3.grep介绍
(1)grep 的一般格式为 grep [options] 基本正则表达式 [文件] 字符串参数最好采用是双引号括,一是以防被误解为shell命令,二是可以用来查找多个单词组成的字符串
-c:只输出匹配行的记数
-i:不区分大小写(只适用于单个字符)
-h:查询多个文件时不显示文件名
-H:只显示文件名
-l:查询多文件时只输出包含匹配字符的文件名
-n:只显示匹配行及其行号
-s:不显示不存在或无匹配文本的错误信息。
-v:显示不包含匹配文本的所有行。
(2)举例说明:
grep ^[^210] myfile 匹配myfile中以非2、1、0开头的行
grep “[5-8][6-9][0-3]” myfile 匹配myfile中第一位为5|6|7|8,第二位6|7|8|9,第三位为0|1|2|3的三个字符的行
grep “4\{2,4\}” myfile 匹配myfile中含有44,444或4444的行
grep “\?” myfile匹配myfile中含有任意字符的行
(3)grep命令类名
[[:upper:]] 表示[A-Z] [[:alnum:]] 表示[0-9a-zA-Z] [[:lower:]] 表示[a-z] [[:space:]] 表示空格或者tab键
[[:digit:]] 表示[0-9] [[:alpha:]] 表示[a-zA-Z] 如:grep “5[[:digit:]][[:digit:]]” myfile 匹配myfile中含有5开头接下去两位都是数字的行。
4.awk介绍
可以从文件或字符串中基于指定规则浏览和抽取信息,是一种自解释的变成语言。
(1)awk命令行方式 awk [-F filed-spearator] ‘command’ input-files
awk脚本:所有awk命令插入一个文件,并使awk程序可执行,然后用awk命令解释器作为脚本的首行,以便通过键入脚本名称来调用它。awk脚本是由各种操作和模式组成。
模式部分决定动作语句何时触发及触发事件。(BEGIN,END)
动作对数据进行处理,放在{}内指明(print)
(2)分隔符、域和记录
awk执行时,其浏览域标记为$1,$2,…$n.这种方法成为域标识。$0为所有域。
(3)举例说明:
awk ‘{print $0}’ test.txt |tee test.out 输出test.txt中所有行$0表示所有域
awk -F : ‘{print $1} test.txt |tee test.out’ 同上。。只是分隔符为”:”
awk ‘BEGIN {print “IPDate\n”}{print $1 “\t” $4} END{print “end-of-report”}’ test.txt
开始时打印“IPDate”结束时打印“end-of-report”中间打印主体信息,比如总共匹配三条信息,则输出如下:

IPDate
1 first
2 second
3 third
end-of-report
 

(4)匹配操作符 ~ 匹配,!~ 不匹配
cat test.txt |awk ‘$0~/210.34.0.13/’ 匹配test.txt中为210.34.0.13的行
awk ‘$0!~/210.34.0.13’ test.txt 匹配test.txt中不是210.34.0.13的行
awk ‘{if($1==”210.34.0.13″) print $0}’ test.txt 匹配 test.txt中第一个域为210.34.0.13的行。
5.sed介绍
sed不与初始化文件打交道,它操作的只是一个拷贝,然后所有的改动如果没有重定向到一个文件,将输出到屏幕。
sed是一种很重要的文本过滤工具,使用一行命令或者使用管道与grep与awk相结合。是一种非交互性文本流编辑。
(1)调用sed的三种方式
使用sed命令行格式为:sed [options] sed命令 输入文件
使用sed脚本文件格式为:sed[options] -f sed脚本文件 输入文件
sed脚本文件[options] 输入文件
–不管是使用shell命令行方式或脚本文件方式,如果没有指定输入文件,sed从标准输入中接受输入,一般是键盘或重定向结果。
(2)sed 命令的options如下
-n:不打印
-c:下一命令是编辑命令
-f:如果正在调用sed脚本文件
(3)sed在文件中查询文本的方式
–使用行号,可以是一个简单的数字,或是一个行号的范围
–使用正则表达式
(4)读取文本的方式
x x为一行号
x,y 表示行号范围从x到y
/pattern/ 查询包含模式的行
/pattern/pattern/ 查询包含两个模式的行
pattern/,x 在给定的行号上查询包含模式的行
x,/pattern/ 通过行号和模式查询匹配行
x,y! 查询不包含指定行号x和y的行
(5)基本sed编辑命令
p 打印匹配行
d 删除匹配行
= 显示文件行号
a\ 在定位行号后附加新文本信息
i\ 在定位行号后插入新文本信息
c\ 用新文本替换定位文本
s 使用替换模式替换相应模式
r 从另一个文件中读文件
w 写文本到一个文件
q 第一个模式匹配完成后推出或立即退出
l 显示与八禁止ASCII代码等价的控制字符
{} 在定位行执行的命令组
n 从另一个文件中读文本下一行,并附加在下一行
g 将模式2粘贴到/pattern n/
y 传送字符
(6)举例说明:
sed -n ‘2p’ test.txt 打印第二行的信息(注意:-n是不打印不匹配的信息,若没加-n,则打印文件的所有信息而不是匹配信息)
sed -n ‘1,4p’ test.txt 打印第一行到第四行的信息
sed -n ‘/los/p’ test.txt模式匹配los,并打印出来
sed -n ‘2,/los/p’ test.txt 从第二行开始。。知道匹配第一个los
sed -n ‘/^$/p’ test.txt 匹配空行
sed -n -e ‘/^$/p’ -e ‘/^$/=’ test.txt 打印空行及行号
sed -n ‘/good/a\morning’ test.txt 在匹配到的good后面附加morning
sed -n ‘/good/i\morning’ test.txt 在匹配到的good前面插入morning
sed -n ‘/good/c\morning’ test.txt 将匹配到的good替换成morning
sed ‘1,2d’ test.txt 删除第1和2行
sed ‘s/good/good morning/g’ test.txt 匹配good并替换成goodmorning
send ‘s/good/& hello /p’ test.txt 匹配到good就在其后面加上hello
send ‘s/good/ hello &/p’ test.txt 匹配到good就在其前面加上hello
6.合并与分割(sort,uniq,join,cut,paste,split)
(1)sot命令
sort [options] files 许多不同的域按不同的列顺序排序
-c 测试文件是否已经排序
-m 合并两个排序文件
-u 删除所有同样行
-o 存储sort结果的输出文件名
-t 域分隔符,用非空格或tab开始排序
+n :n 为列号,使用此列号开始排序
-n 指定排序是域上的数字分类项
-r 比较求逆
sort -c test.txt 测试文件是否分类过
sort -u test.txt 排序并合并一样的行
sort -r test.txt 以相反的顺序排列
sort -t “/” +2 test.txt 以”/”分隔,第二个域开始分类
(2)uniq命令
uniq [options ] files 从一个文本文件中去除或禁止重复行
-u 只显示不重复行
-d 只显示有重复数据行,每种重复行只显示其中一行
-c 打印每一重复行出现次数
-f :n为数字,前n个域被忽略
uniq -f 2 test.txt 忽略前2个域
(3)join 命令
join [options] file1 file2 用来将来自两个分类文本文件的行连在一起
-an,n为一数字,用于连接时从文件n中显示不匹配行
-onm ,连接域,n为文件号,m为域号
-jnm,n为文件号,m为域号,使用其他域作连接域
-t ,域分隔符。用来设置非空格或tab键的域分隔符。
(4)split命令
split -output_file_size intput_filename output_filename
用来将大文件分割成小文件。
-b n,每个分割文件的大小n
-C n,每个分割文件一行最多n字节
-l n,每个分割文件的行数
-n,同-l n
split -10 test.txt 将test.txt分割成10行的小文件
(5)cut 命令
cut -c n1-n2 filename 显示每行从开头算起 n1 到 n2 的文字。
cut -c 3-5 test.txt 显示test.txt中每行从第3到第5个字符
原文 92csz.com

centOS/RHEL:如何修改系统时间为北京时间

修改美国vps的系统时间为北京时间
也许大家在使用国外vps时感觉vps上的时间不是北京时间,感觉很别扭,今天我们就来改回为北京时间,首先登录你的vps,先用date命令查看下当前时间

    [root@centos ~]#date
    Sun Aug 14 23:18:41 EDT 2011
 

现在我们就来改

 [root@centos ~]# rm -rf /etc/localtime
    [root@centos ~]# ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
 

再用date命令看下,你的vps的时间改变了吗?大部分linux vps的母鸡是允许每个vps修改时间的!看vpsma的时间已经修改好了。

    [root@centos ~]# date
    Mon Aug 15 11:20:00 CST 2011
 

如果此时你的vps时间已经改成北京时间就不用看下面了,如果此时你的vps时间还没有修改好。再试下命令:

  [root@centos ~]# ntpdate stdtime.sinica.edu.tw
 

使用ntpdate stdtime.sinica.edu.tw 时候如果提示这个命令,先安装 ntpdate就可以了。
centos 系统的vps用命令:

 yum -y install ntpdate ntp
 

Ubuntu系统的:

   sudo apt-get install -y ntpdate ntp
 

安装完毕再试这个命令,如果还不可以的话,一般情况就是母鸡做了设置不让修改你vps的时间了。
原文:92csz.com

CentOS/Linux:如何安装并使用Crontab工具

本文将会讲述如何在centos linux系统中使用任务计划工具crontab。
crontab命令常见于Unix和Linux的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。通常,crontab储存的指令被守护进程激活。crond 常常在后台运行,每一分钟检查是否有预定的作业需要执行。这类作业一般称为cron jobs。
一、Crontab 安装

[root@CentOS ~]# yum -y install vixie-cron
[root@CentOS ~]# yum -y install crontabs
 

说明:
vixie-cron 软件包是 cron 的主程序;
crontabs 软件包是用来安装、卸装、或列举用来驱动 cron 守护进程的表格的程序。

二、Crontab配置

cron 是 linux 的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务:

service crond start     //启动服务
service crond stop      //关闭服务
service crond restart   //重启服务
service crond reload    //重新载入配置
service crond status    //查看crontab服务状态
 

在CentOS系统中加入开机自动启动:

 chkconfig --level 345 crond on
 

cron 的主配置文件是 /etc/crontab,它包括下面几行:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
 

前四行是用来配置 cron 任务运行环境的变量。
SHELL 变量的值告诉系统要使用哪个 shell 环境(在这个例子里是 bash shell);
PATH 变量定义用来执行命令的路径。
cron 任务的输出被邮寄给 MAILTO 变量定义的用户名。
如果 MAILTO 变量被定义为空白字符串(MAILTO=””),电子邮件就不会被寄出。
HOME 变量可以用来设置在执行命令或脚本时使用的主目录。
限制对 cron 的使用:
/etc/cron.allow和/etc/cron.deny 文件被用来限制对 cron 的使用。
这两个使用控制文件的格式都是每行一个用户。
两个文件都不允许空格。
如果使用控制文件被修改了,cron 守护进程(crond)不必被重启。
使用控制文件在每次用户添加或删除一项 cron 任务时都会被读取。
无论使用控制文件中的规定如何,root 都总是可以使用 cron。
如果 cron.allow 文件存在,只有其中列出的用户才被允许使用 cron,并且 cron.deny 文件会被忽略。
如果 cron.allow 文件不存在,所有在 cron.deny 中列出的用户都被禁止使用 cron。
三、crontab 命令
功能:设置计时器。
语法:crontab[-u <用户名称>][配置文件] 或 crontab [-u <用户名称>][-elr] 解释:cron 是一个常驻服务,它提供计时器的功能,让用户在特定的时间得以执行预设的指令或程序。只要用户会编辑计时器的配置文件,就可以使 用计时器的功能。其配置文件格式如下:Minute Hour Day Month DayOFWeek Command
参数:
-e 编辑该用户的计时器设置。
-l 列出该用户的计时器设置。
-r 删除该用户的计时器设置。
-u<用户名称>  指定要设定计时器的用户名称。
格式:
* *  *  *  *  command
分 时 日 月 周  命令
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令
例子:

30 21 * * * /usr/local/etc/rc.d/lighttpd restart
 

上面的例子表示每晚的21:30重启apache。

45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
 

上面的例子表示每月1、10、22日的4 : 45重启apache。

10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart
 

上面的例子表示每周六、周日的1 : 10重启apache。

0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
 

上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。

0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart
 

上面的例子表示每星期六的11 : 00 pm重启apache。

* */1 * * * /usr/local/etc/rc.d/lighttpd restart
 

每一小时重启apache

* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
 

晚上11点到早上7点之间,每隔一小时重启apache

0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
 

每月的4号与每周一到周三的11点重启apache

0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart
 

一月一号的4点重启apache

*/30 * * * * /usr/sbin/ntpdate 210.72.145.44
 

每半小时同步一下时间

CentOS/Linux:如何检测硬盘的坏道

本文将会讲述如何使用硬盘状态的测试工具来检测硬盘的坏道。下面主要通过操作三个硬盘测试工具来进行.
硬盘状态测试工具:smartctl、Badblocks、hdparm
安装smartctl 工具
输入下面的命令:

[root@qy ~]#yum install smartmontools -y
 

启动SMART

# smartctl --smart=on --offlineauto=on --saveauto=on /dev/sda
 

对/dev/sda分区进行检查
输入下面的命令:

smartctl -a /dev/sda
 

命令输出:

smartctl 5.42 2011-10-20 r3458[i686-linux-2.6.18-194.el5PAE] (local build)
Copyright (C) 2002-11 by Bruce Allen,http://smartmontools.sourceforge.net
 Vendor:               SEAGATE
Product:              ST3146356SS
vision:             HS09
User Capacity:        146,815,733,760 bytes [146 GB]
Logical block size:   512 bytes
Logical Unit id:      0x5000c50004fa837f
Serial number:        3QN0EL91
Device type:          disk
Transport protocol:   SAS
Local Time is:        Fri Oct 31 10:45:58 2014 CST
Device supports SMART and is Enabled
Temperature Warning Disabled or NotSupported
SMART Health Status: OK   #版本的不通这里显示的也不一样。
 Current Drive Temperature:     30 C
Drive Trip Temperature:        68 C
Elements in grown defect list: 0  #才是出坏道,俗称成长坏道。
Vendor (Seagate) cache information
 Blocks sent to initiator = 3752023409
 Blocks received from initiator = 3916316860
 Blocks read from cache and sent to initiator = 4025399956
 Number of read and write commands whose size <= segment size =3339079605
 Number of read and write commands whose size > segment size = 2746
Vendor (Seagate/Hitachi) factoryinformation
 number of hours powered up = 34120.02
 number of minutes until next internal SMART test = 1
 Error counter log:
 Errors Corrected by          Total   Correction     Gigabytes    Total
              ECC          rereads/    errors  algorithm      processed    uncorrected
          fast | delayed   rewrites  corrected invocations   [10^9 bytes]  errors
read:  248894024        0         0 248894024   248894024      85241.186           0
write:         0        0         0         0          0     30998.996           0
verify:  340001        0        0    340001     340001        141.757           0
Non-medium errorcount:       51  #非介质错误。意思是说不是盘的问题,一般是电缆、传输、校验问题,可以忽略的。
No self-tests have been logged
Long (extended) Self Test duration: 1740seconds [29.0 minutes]
 

可以用命令直接查看硬盘的好坏:

[root@qy ~]# smartctl -H /dev/sda
smartctl 5.42 2011-10-20 r3458[i686-linux-2.6.18-194.el5PAE] (local build)
Copyright (C) 2002-11 by Bruce Allen,http://smartmontools.sourceforge.net
 SMART Health Status: OK
 
[root@localhost ~]# smartctl -H /dev/sda
smartctl 5.43 2012-06-30 r3573 [x86_64-linux-2.6.32-358.el6.x86_64] (local build)
Copyright (C) 2002-12 by Bruce Allen, http://smartmontools.sourceforge.net
 === START OF READ SMART DATA SECTION ===
SMART STATUS RETURN: incomplete response, ATA output registers missing
SMART overall-health self-assessment test result: PASSED
Warning: This result is based on an Attribute check.
 

OK和PASSED都属于磁盘是正常的。
Badblocks工具测试正常,无坏道信息:
badblocks命令可以检查磁盘装置中损坏的区块。执行该指令时须指定所要检查的磁盘装置,及此装置的磁盘区块数。
badblocks -s//显示进度 -v//显示执行详细情况 /dev/sda1
badblocks -s//显示进度 -w//以写去检测 -v//显示执行详细情况 /dev/sda2
注意,不能以写的方式检测已经挂载的硬盘

[root@qy ~]# badblocks -s -v /dev/sda
Checking blocks 0 to 143374740
Checking for bad blocks (read-only test):done
Passcompleted, 0 bad blocks found.
 

此磁盘通过测试,没有坏道(坏块)。您可以放心使用。
不论是什么类型的坏道,均建议您首先进行数据备份!把重要数据进行备份然后再尝试修复。如果您有重要数据却无法读取(磁盘出现异常),那么请立即停止使用此磁盘并找专业人员进行修复。
使用hdparm测试
测试硬盘读写速度

# hdparm -Tt /dev/sda
/dev/sda:
Timing cached reads:
1918 MB in  2.00 seconds = 959.62 MB/sec
Timing buffered disk reads:  184 MB in  3.00 seconds =  61.26 MB/sec
 

hdparm可检测,显示与设定IDE或SCSI硬盘的参数。
可以使用sg_vpd命令查看硬盘转速,sg_vpd命令是sg3_utils其中一个工具.
下载地址:http://sg.danny.cz/sg/sg3_utils.html
[root@qy sg3_utils-1.39]# sg_vpd /dev/sda
测试硬盘坏道
关于smart检测硬盘命令补充:
smartctl -a 检查该设备是否已经打开SMART技术。
smartctl -s on 如果没有打开SMART技术,使用该命令打开SMART技术。
smartctl -t short 后台检测硬盘,消耗时间短;
smartctl -t long 后台检测硬盘,消耗时间长;
smartctl -C -t short 前台检测硬盘,消耗时间短;
smartctl -C -t long 前台检测硬盘,消耗时间长。其实就是利用硬盘SMART的自检程序。 s
martctl -X 中断后台检测硬盘。
smartctl -l selftest 显示硬盘检测日志。
smartctl -l error 显示硬盘错误汇总。
首先通过dmesg工具,确认一下硬盘的设备符号。例如一个IDE硬盘连接到Primary IDE 总线上的Slave位置,硬盘设备符号是/dev/hdb,hdb中的h代表IDE,如果显示为sdb,则代表SATA和SCSI,最后一个字幕b代表Primary总线,第二块硬盘即Slave位置,确认硬盘是否打开了SMART支持:

# smartctl -i /dev/sda
smartctl 5.40 2010-10-16 r3189 [i386-redhat-linux-gnu] (local build)
Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.sourceforge.net
=== START OF INFORMATION SECTION ===
Device Model:     HITACHI HTS543225L9SA00
Serial Number:    090131FB2F32YLG28JEA
Firmware Version: FBEZC48C
User Capacity:    250,059,350,016 bytes
Device is:        Not in smartctl database [for details use: -P showall]
ATA Vrsion is:   8
ATA Standard is:  ATA-8-ACS revision 3f
Local Time is:    Wed May 25 10:10:39 2011 CST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
//表示启用了smart支持如果看到SMART support is: Disabled表示SMART未启用,执行如下命令,启动SMART
 
# smartctl --smart=on --offlineauto=on --saveauto=on /dev/sda
smartctl 5.40 2010-10-16 r3189 [i386-redhat-linux-gnu] (local build)
opyright (C) 2002-10 by Bruce Allen, http://smartmontools.sourceforge.net
=== START OF ENABLE/DISABLE COMMANDS SECTION ===
SMART Enabled.
SMARTAttribute Autosave Enabled.
SMART Automatic Offline Testing Enabled every four hours.
 

现在硬盘的SMART功能已经被打开,执行如下命令查看硬盘的健康状况

# smartctl -H /dev/sda
smartctl 5.40 2010-10-16 r3189 [i386-redhat-linux-gnu] (local build)
Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.sourceforge.net
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
 

请注意result后边的结果:PASSED,这表示硬盘健康状态良好;如果这里显示Failure,那么最好立刻给服务器更换硬盘。SMART只能报告磁盘已经不再健康,但是报警后还能继续运行多久是不确定的。通常,SMART报警参数是有预留的,磁盘报警后,不会当场坏掉,一般能坚持一段时间,有的硬盘SMART报警后还继续跑了好几年,有的硬盘SMART报错后几天就坏了。但是一旦出现报警,侥幸心里是万万不能的……
原文:51cto

CentOS/Linux:如何理解系统的目录结构

对于初学linux的人来说,一定要对系统的目录结构有深入的了解,也是刚开始学linux必须掌握的知识点。本文将会讲述linux的目录结构以及对目录结构里的不同目录做分析。
linux的系统目录结构如下图
linux 目录结构
/: 根目录,一般根目录下只存放目录,不要存放文件,/etc、/bin、/dev、/lib、/sbin应该和根目录放置在一个分区中
/bin:/usr/bin: 可执行二进制文件的目录,如常用的命令ls、tar、mv、cat等。
/boot: 放置linux系统启动时用到的一些文件。/boot/vmlinuz为linux的内核文件,以及/boot/grub。建议单独分区,分区大小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:随机数设备
/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 ]。
Linux 的文件系统( inode ):
在 Linux 系统当中,每个文件不止有文件的内容数据,还包括文件的种种属性,例如:所属群组、所属使用者、能否执行、文件建立时间、文件特殊属性等等。我们将每个文件的内容分为两个部分来储存,一个是文件的属性,另一个则是文件的内容。
为了应付这两个不同的咚咚,所以 ext2 规划出 inode 与 Block 来分别储存文件的属性( 放在 inode 当中 )与文件的内容( 放置在 Block area 当中 )。当我们要将一个 partition 格式化( format )为 ext2 时,就必须要指定 inode 与 Block 的大小才行,也就是说,当 partition 被格式化为 ext2 的文件系统时,他一定会有 inode table 与 block area 这两个区域。
Block 已经在前面说过了,他是数据储存的最小单位。那么 inode 是什么?!简单的说, Block 是记录『文件内容数据』的区域,至于 inode 则是记录『该文件的相关属性,以及文件内容
放置在哪一个 Block 之内』的信息。简单的说, inode 除了记录文件的属性外,同时还必须要具有指向( pointer )的功能,亦即指向文件内容放置的区块之中,好让操作系统可以正确的去
取得文件的内容啊
原文:iteye.com

CentOS/RHEL:如何安装字体文件“宋体/新宋体”

在centos 或者rhel系统下当你把系统的编码改为zh_CN后,系统里的中文都不能正常显示,这是因为缺少必要的字体文件,所以我们需要在系统里安装字体文件。那么如何来安装呢?本文将会讲述如何在centos系统下安装字体“宋体”和“新宋体”。
安装步骤如下:
1. #cd /usr/share/fonts/default
2. mkdir -p ./truetype/simsun
3. 取得simsun.tcc文件;如果网上下载不到则在windows操作系统取得该文件
4. 上传simsun.tcc文件到/usr/share/fonts/default/truetype/simsun目录中
5. 执行 mkfontscale,生成了fonts.scale文件
6. 执行 mkfontdir,生成了fonts.dir文件
7. chkfontpath -a /usr/share/fonts/default/truetype/simsun
8. service xfs reload
重新登录,即可正确显示中文了。

CentOS/RHEL:如何配置点对点的VPN 服务器

一个传统的 VPN(如 OpenVPN、PPTP)由一个 VPN 服务器和一个或多个连接到这台服务器的客户端组成。当任意两个 VPN 客户端彼此通信时,VPN 服务器需要中继它们之间的 VPN 数据流量。这样一个中心辐射型的 VPN 拓扑结构存在的问题是,当连接的客户端增多以后,VPN 服务器很容易成为一个性能上的瓶颈。从某种意义上来说,中心化的 VPN 服务器也同样成为一个单点故障的来源,也就是当 VPN 服务器出现故障的时候,整个 VPN 都将无法被任何 VPN 客户端访问。
centos vpn
点对点 VPN(又称 P2P VPN)是另一个 VPN 模型,它能解决传统的基于服务器-客户端模型的 VPN 存在的这些问题。一个 P2P VPN 中不再有一个中心的 VPN 服务器,任何拥有一个公开 IP 地址的节点都能引导其他节点进入 VPN。当连接到一个 VPN 之后,每一个节点都能与 VPN 中的任何其他节点直接通信,而不需要经过一个中间的服务器节点。当然任何节点出现故障时,VPN 中的剩余节点不会受到影响。节点中的延迟、带宽以及 VPN 扩展性在这样的设定中都有自然的提升,当你想要使用 VPN 进行多人游戏或者与许多朋友分享文件时,这都是十分理想的。
开源的 P2P VPN 实现已经有几个了,比如 Tinc、peerVPN,以及 n2n。在本教程中,我将会展示如何在 Linux 上用 n2n 配置点对点 VPN。
n2n 是一个开源(GPLv3)软件,它允许你在用户间构建一个加密的 2/3 层点对点 VPN。由 n2n 构建的 VPN 是“对 NAT 友好”的,也就是说,不同 NAT 路由器后方的两个用户可以通过 VPN 直接与对方通信。n2n 支持对称的 NAT 类型,这是 NAT 中限制最多的一种。因此,n2n 的 VPN 数据流量是用 UDP 封装的。
一个 n2n VPN 由两类节点组成:边缘(edge)节点和超级(super)节点。一个边缘节点是一台连接到 VPN 的电脑,它可能在一个 NAT 路由器后方。一个超级节点则是拥有一个可以公共访问的 IP 地址的电脑,它将会帮助 NAT 后方的边缘节点进行初始通信。想要在用户中创建一个 P2P VPN 的话,我们需要至少一个超级节点。
centos vpn
准备工作
在这篇教程中,我将会创建一个拥有 3 个节点的 P2P VPN:一个超级节点和两个边缘节点。唯一的要求是,边缘节点需要能够 ping 通超级节点的 IP 地址,而它们是否在 NAT 路由器之后则没有什么关系。
在 Linux 上安装 n2n
若想用 n2n 构建一个 P2P VPN,你需要在每个节点上安装 n2n,包括超级节点。
由于它非常精简的依赖需求,在大多数 Linux 平台上 n2n 都能被轻松编译。
在基于 Debian 的系统上安装 n2n:

$ sudo apt-get install subversion build-essential libssl-dev
$ svn co https://svn.ntop.org/svn/ntop/trunk/n2n
$ cd n2n/n2n_v2
$ make
$ sudo make install
 

在基于 Red Hat 的系统上安装 n2n:

$ sudo yum install subversion gcc-c++ openssl-devel
$ svn co https://svn.ntop.org/svn/ntop/trunk/n2n
$ cd n2n/n2n_v2
$ make
$ sudo make install
 

用 n2n 配置一个 P2P VPN
如前文所述,我们需要至少一个超级节点,它将会作为一个初始化引导服务器。我们假设这个超级节点的 IP 地址是 1.1.1.1。
超级节点:
在一个作为超级节点的电脑上运行下面的命令。其中“-l <端口>”指定超级节点的监听端口。运行 supernode 并不需要 root 权限。

$ supernode -l 5000
 

边缘节点:
在每个边缘节点上,使用下面的命令来连接到一个 P2P VPN。edge 守护程序将会在后台运行。
边缘节点 #1:

$ sudo edge -d edge0 -a 10.0.0.10 -c mynetwork -u 1000 -g 1000 -k password -l 1.1.1.1:5000 -m ae:e0:4f:e7:47:5b
 

边缘节点 #2:

$ sudo edge -d edge0 -a 10.0.0.11 -c mynetwork -u 1000 -g 1000 -k password -l 1.1.1.1:5000 -m ae:e0:4f:e7:47:5c
 

下面是对命令行的一些解释:
“-d <接口名>”选项指定了由 edge 命令创建的 TAP 接口的名字。
“-a ”选项(静态地)指定了分配给 TAP 接口的 VPN 的 IP 地址。如果你想要使用 DHCP,你需要在其中一台边缘节点上配置一台 DHCP 服务器,然后使用“-a dhcp:0.0.0.0”选项来代替。
“-c <组名>”选项指定了 VPN 组的名字(最大长度为 16 个字节)。这个选项可以被用来在同样一组节点中创建多个 VPN。
“-u”和“-g”选项被用来在创建一个 TAP 接口后降权放弃 root 权限。edge 守护进程将会作为指定的用户/组 ID 运行。
“-k <密钥>”选项指定了一个由 twofish 加密的密钥来使用。如果你想要将密钥从命令行中隐藏,你可以使用 N2N_KEY 环境变量。
“-l ”选项指定了超级节点的监听 IP 地址和端口号。为了冗余,你可以指定最多两个不同的超级节点(比如 -l <超级节点 A> -l <超级节点 B>)。
“-m ”给 TAP 接口分配了一个静态的 MAC 地址。不使用这个参数的话,edge 命令将会随机生成一个 MAC 地址。事实上,为一个 VPN 接口强制指定一个静态的 MAC 地址是被强烈推荐的做法。否则,比如当你在一个节点上重启了 edge 守护程序的时候,其它节点的 ARP 缓存将会由于新生成的 MAC 地址而遭到污染,它们将不能向这个节点发送数据,直到被污染的 ARP 记录被消除。
centos vpn
至此,你应该能够从一个边缘节点用 VPN IP 地址 ping 通另一个边缘节点了。
故障排除
1.在调用 edge 守护程序的时候得到了如下错误。

 n2n[4405]: ERROR: ioctl() [Operation not permitted][-1]
 

注意 edge 守护进程需要超级用户权限来创建一个 TAP 接口。因此需要确定用 root 权限来执行,或者对 edge 命令设置 SUID。之后你总是可以使用“-u”和“-g”选项来降权放弃 root 权限。
总结
n2n 可以成为对你来说非常实用的免费 VPN 解决方案。你可以轻松地配置一个超级节点,无论是用你自己家里的网络,还是从云主机提供商购买一个可以公共访问的 VPS 实例。你不再需要把敏感的凭据和密钥放在第三方 VPN 提供商的手里,使用 n2n,你可以在你的朋友中配置你自己的低延迟、高带宽、可扩展的 P2P VPN。
你对 n2n 有什么想法吗?请在评论中分享你的观点。
原文:Linux中国

CentOS/RHEL:如何删除系统中旧的内核(kernel)

当你更新系统的时候,也会默认的更新系统的内核,这样系统中的内核版本就会比较多,那么CentOS 更新了内核之后,会导致启动时会增加很多启动项,如果我们可以删除旧的内核的话,那样就可以保持系统内核启动项的简洁,保留最新的内核,这样可以释放一些磁盘空间(/boot)。本文将会从下面的两个方法来删除系统中旧的内核版本。
1# 查看已经安装的内核
输入下面的命令:

rpm -q kernel
 

显示结果:

kernel-2.6.32-279.14.1.el6.i686
kernel-2.6.32-279.el6.x86_64
kernel-2.6.32-358.6.1.el6.x86_64
 

2# 删除旧的内核
方法一:
安装yum-utls: yum install -y yum-utils
设置你想要保留多少旧的内核,比如我想保留两个:sudo package-cleanup –oldkernels –count=2
再次用rpm -q kernel查看内核信息,只剩最新的两个:

kernel-2.6.32-279.el6.x86_64
kernel-2.6.32-358.6.1.el6.x86_64
 

方法二:
输入下面的命令,卸载掉其中的一个老的内核版本:

rpm -e kernel-2.6.32-279.14.1.el6.i686
 

3#设置永久的内核安装数量 ,我设置的是两个

sudo vi /etc/yum.conf
 

设置

installonly_limit=2
 

当你重启后你就会看到只剩下两个内核启动项了。

CentOS/RHEL:如何查看系统的发行版本号

对于linux系统,有很多不同的发行版本,比如说redhat, fedora, centos, ubuntu 或者其它的很多不同版本。那么如何来查看远程主机的linux发行版本呢。本文将会讲述查看linux发行版本的方法。
如何查看远程主机CentOS的版本?
通过 /etc/issue 文件,这个文件是控制台界面,用来登录时的提示信息的,而这个提示信息就有CentOS的版本。
下面就显示一下我的电脑的CentOS版本:

        [root@syy ~]# cat /etc/issue
        CentOS release 6.5 (Final)
        Kernel \r on an \m
        [root@syy ~]#
 

从上面的输出可以看出linux的发行版本是CentOS 6.5 。

CentOS 7/RHEL 7: 如何创建本地YUM软件仓库源

本文中的“本地YUM源”包括三种类型:一是直接使用CentOS光盘作为本地yum源,优点是简单便捷,缺点是光盘软件包可能不完整(centos 7 Everything 总共才6.57G);二是同步CentOS官方源到本地(相当于创建了一个公共镜像),优点是最靠谱,缺点是占空间费流量;三是创建完全自定义的本地源,优点是灵活性最大,缺点是只是作为其他源的补充。本文将会从下面三个方法来讲述如何搭建centos 7系统的yum 软件源仓库
一、使用CentOS光盘作为本地yum源
(1) 实体机上直接放入光盘
(2) VMware Workstation 虚拟机:虚拟机–>可移动设备–>CD/DVD–>连接

mkdir /mnt/cdrom #创建目录
mount /dev/cdrom /mnt/cdrom #挂载
umount /mnt/cdrom #卸载
 

若不想每次都要放光盘,那就复制光盘文件到本地硬盘吧

cp -avf /mnt/cdrom /yum # -a:该选项保留链接、文件属性,并递归地复制目录
 

创建repo文件

    cat >>/etc/yum.repos.d/CentOS-Local.repo<<-EOF
    &#91;Local&#93;
    name=Local Yum
    baseurl=file:///yum/
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
    enabled=1
 &#91;/code&#93;
问:为什么连createrepo软件都不用安装?
createrepo 的作用是创建索引文件的(位于repodata文件夹),光盘中连GPG-KEY都有了。
<strong>二、如何为CentOS创建公共镜像</strong>
详细说明见官方中文文档:http://wiki.centos.org/zh/HowTos/CreatePublicMirrors
提供一个SHELL脚本,然后cron自动运行~~
http://wangyan.org/blog/centos-local-yum-repo.html
脚本稍作修改,换成中科大的镜像源。可用镜像列表见:http://www.centos.org/download/mirrors/
 
    localpath="/mirrors/CentOS"
    mirror="mirrors.hustunique.com::centos"
    rsync="rsync -avzH --delete"
    verlist="7"
    baselist="centosplus extras fasttrack os updates"
    archlist="x86_64"
    for ver in $verlist
    do
        for base in $baselist
        do
            for arch in $archlist
            do
                remote=$mirror/$ver/$base/$arch/
                mkdir -pv $localpath/$ver/$base/$arch/
                $rsync $remote $localpath/$ver/$base/$arch/
            done
        done
    done
 

三、创建完全自定义的本地源
把平时收藏的一些RPM软件包放在一个目录里,就变成一个自定义源了,可以用YUM来管理,灵活性相当大。
1、创建本地yum仓库

    mkdir -p /yum/local #可以有N级目录
    cp ... #复制RPM包到上述目录
 

2、创建repo文件

    cat >>/etc/yum.repos.d/CentOS-Local.repo<<-EOF
    &#91;Local&#93;
    name=Local Yum
    baseurl=file:///yum/
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
    enabled=1
 &#91;/code&#93;
<strong>3、安装createrepo</strong>
 
    yum install createrepo #使用yum安装createrepo
    rpm -ivh http://mirror.centos.org/centos/7/os/x86_64/Packages/createrepo-0.9.9-23.el7.noarch.rpm
 

4、创建索引

    createrepo /yum
    yum makecache #更新缓存
 

四、添加yum源

     [1] Add RPMforge Repository for yum because that has many useful packages.
    [root@dlp ~]#
    wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
    [root@dlp ~]#
    rpm -Uvh rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
    Preparing… ###################################### [100%] 1:rpmforge-release ###################################### [100%]
    [root@dlp ~]#
    sed -i -e "s/enabled = 1/enabled = 0/g" /etc/yum.repos.d/rpmforge.repo
    [2] Add repository EPEL that is provided from Fedora project.
    [root@dlp ~]#
    wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
    [root@dlp ~]#
    rpm -Uvh epel-release-6-8.noarch.rpm
    Preparing… ###################################### [100%] 1:epel-release ###################################### [100%]
    [root@dlp ~]#
    sed -i -e "s/enabled=1/enabled=0/g" /etc/yum.repos.d/epel.repo
 

五、参考
http://m.oschina.net/blog/88071
http://jingyan.baidu.com/article/e9fb46e1aed8207521f7662c.html
http://blog.chinaunix.net/uid-28283843-id-3930474.html
http://www.ibm.com/developerworks/cn/linux/l-lpic1-v3-102-5/

CentOS/Linux: 如何压缩并解压缩归档文件

在日常的工作中我们经常需要将多个文件做归档处理即打包成一个文件。本文将会讲述如何来压缩文件以及如何解压缩文件。
1. 文件压缩的原理:目前,计算机系统中都是使用bytes单位来计量的,不过,事实上,计算机最小的计量单位应该是bits才对,此外,我们也知道1byte=8bits。即每个byte当中会有8个空格,而每个空格可以是0或1,所以,如果我们要记录1这个数字,那么就会将另外的7个空格浪费掉。而压缩技术就是通过一些算法,将这些没有使用的控件丢出来,以让档案占用的空间变小。另一种压缩技术将重复的数据进行统计记录。比如,1111……1共100个1时,压缩技术就会记录为100个1,而不是实际存储100个1。
2. 文件后缀与压缩方式
1)*.Z:compress程序压缩的档案
2)*.gz:gzip程序压缩过的档案
3)*.bz2:bzip2程序压缩的档案
4)*.tar:tar程序打包的数据,并没有压缩过。
5)*.tar.gz:tar程序打包的档案,并且经过gzip压缩过
6)*.tar.bz2:tar程序打包的档案,并且经过bzip2的压缩
3. linux上常见的压缩指令就是gzip与bzip2,至于compress已经退出流行了。gzip是由GNU计划所开发出来的指令,该指令已经取代了compre。后来GNU又开发出bzip2这个压缩比更好的压缩指令。不过,这些指令通常仅能针对一个档案压缩与解压缩,如此一来,每次压缩与解压缩都要一大堆档案。因此,可以用tar进行打包。tar将很多档案打包成一个档案,甚至是目录。单纯的tar只是打包的功能。
4.compress [-rcv] 档案或目录:非常老的指令,需要安装ncompress软件。gzip可以解开这个指令压缩的档案。
1)-r:可以连同目录下的档案同时压缩
2)-c:将压缩数据输出到屏幕,可以通过>filename 另存到指定的档案,源文件依然存在
3)-v:可以显示出压缩后的档案信息以及压缩过的一些档案名变化
在预设情况下,源文件会被压缩文件替换掉。
uncompress 档案.Z:解压文件,解压后会去掉后缀,还原成源文件。
5. gzip [-cdtv#] 档名;zcat 档名.gz:压缩解压缩档案,参数:
1)-c:将压缩的数据显示到屏幕上,可透过数据流导向来处理
2)-d:加压缩的参数
3)-t:可以用来检验一个压缩文件的一致性,看档案有无错误
4)-v:可以显示出原档案/压缩文件的压缩比等信息
5)-#:压缩等级,-1最快,但压缩比最差,-9最慢,但压缩比最好,预设是-6,在#处输入数字
该指令在预设情况下会将档案压缩成后缀为.gz的档案名,源文件就不再存在了。另外该指令压缩的文件也可以被windos下的winrar软件解压。
zcat这个指令可以读取gzip压缩后的文件
6. bzip2 [-cdkzv#] 档名,bzcat 档名.bz2:提供比gzip更好的压缩方案,参数:
1)-c:将压缩的过程产生的数据输出到屏幕上
2)-d:解压缩的参数
3)-k:保留源文件,而不会删除原始档案
4)-z:压缩的参数
5)v:可以显示出原档案/压缩文件案的压缩比等信息
6)-#:与gzip同样的,都是在计算压缩比参数,-9最佳,-1最快
bzcat:同样可以读取压缩过的文件
7. tar [-jz] [cv] [-f 建立的档名] filename:打包并压缩
tar [-jz] [tv] [-f 建立的档名] :查看档名
tar [-jz] [xv] [-f 建立的档名] [-C 目录] :解压缩
参数:
1)-c:建立打包档案,可搭配-v来擦看过程中被打包的档名
2)-t:查看打包档案的内容还有哪些档名
3)-x:解包或解压缩的功能,可以搭配-C在特定目录下解开
特别注意:-c,-t,-x不能同时出现在一条指令中
4)-j:透过bzip2的支持进行压缩/解压缩:此时档案名最后为*.tar.bz2
5)-z:透过gzip的支持进行压缩/解压缩:此时档名最好为tar.gz
6)-v:在压缩/解压缩的过程中,将正在处理的文件名显示出来
7)-f filename:-f后面要立刻接要被处理的档名
8)-C目录:这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项
9)-p:保留备份数据的原本权限与属性,常用于备份重要的配置文件
10)-P:保留绝对路径,亦即允许备份数据中含有根目录存在之意
11)–exclude=FILE:在压缩过程中,不要讲FILE打包。
指令套餐:
压缩:tar –jcv –f filename.bar.bz2 要被压缩的档案或目录名称
查询:tat –jtv –f filename.tar.bz2
减压缩:tar –jxv –f filename.tar.bz2 -C 欲解压缩的目录
上述j的位置也可换成-z代表gzip压缩方式。
8. dump [-Suvj] [-level] [-level] [-f 备份档案] 待备份的档案;dump W:参数,
1)-S:仅列出后面的待备份数据需要多少空间才能备份完毕
2)-u:将这次dump的时间记录到etc/dumpdates档案中
3)-v:将dump的档案过程显示出来
4)-j:加入bzip2的支持,将数据进行压缩,默认是bzip2压缩等级为2
5)-level:等级,从-0~-8
6)-f filename:后面接产生的档案
7)-W:列出在etc/fstab里面的具有dump设定的partition是否有备份过
9. restore -r [-f dumpfile]:还原整个文件系统,参数:
1)-t:此模式用在查看dump起来的备份文件中含有什么重要数据
2)-C:此模式可以将dump内的数据拿出来跟实际文件系统作比较
3)-i:进入互动模式,可以仅还原部分档案,用在dump目录时的还原
4)-r:将整个文件系统还原的一种模式,用在还原针对文件系统dump备份
5)-h:查看完整备份数据中的inode与文件系统label等信息
6)-f:后面就接你要处理的那个dump档案
7)-D:与-C进行搭配,可以查出后面接的挂载点与dump内有不同的档案。
10. mkisofs [-o 映像档][-rv][-m file] 待备份的文件 …[-V vol] –graft-point isodir=systemdir …,参数:
1)-o:后面接你想要产生的那个映像档档名
2)-r:透过Rock Ridge产生Unix/Linux的档案数据,可记录较多的信息
3)-v:显示建置ISO的过程
4)-m file:-m为排除档案的意思,后面的档案不备份到映像档
5)-V vol:建立Volume,有点像Windos在档案总管内看到的CD title的东西
6)-graft-point:graft有转嫁或移植的意思,
11. cdrecord:光盘刻录指令
12 .dd -if=inputfile of=outfile bs=blocksize count=number:参数,
1)if:就是要备份的档案,也可以是装置
2)of:就是备份的目标档案,也可以是装置
3)bs:规划的一个block大小,若未指定则预设512bytes
4)count:多少个bs的意思
13. cpio –ovcB >[file|device] 备份;cpio -ivcdu <[file|device] 还原;cpio -ivct <[file|device] 查看,参数:
1)-o:将数据copy输出到档案或装置上
2)-B:让预设的Blocks可以增加至5120bytes,预设是512bytes,这样可以让大档案存取速度更快
3)-i:将数据自档案或装置copy到系统当中
4)-d:自动建立目录
5)-u:自动将较新的档案覆盖较旧的档案
6)-t:需要配合-i选项,可用在“查看”以cpio建立的档案或装置的内容
7)-v:让存储的过程中文件名可以在屏幕上显示
8)-c:一种较新的portable format方式存储

9个常用的查看文件内容的linux命令

在centos或者rhel系统下如何来查看目录下的文件内容,本文将会介绍9个常用的linux命令用来查看文件的内容
1. cat [-AbEnTv] 文件路径:以只读的形式显示指定的文件,参数:
1)-A:等于-vET,可以列出一些特殊字符而不是空白而已
2)-b:列出行号,仅列出非空百行的行号
3)-E:将结尾的断行以$符显示出来
4)-n:打印出行号(包括空白行)
5)-T:将Tab键以^I显示出来
6)-v:列出一些看不出来的特殊字符
2.tac 文件路径:从后到前的显示文件。
3.nl [-bnw] 文件名:添加行号输出,参数:
1)-b:指定好好的显示方式,-b a:列出包括空行在内的行号;-b t:列出非空行的行号(默认)。
2)-n:列出行号的表示方法,-n ln:行号在屏幕的最左方显示;-n rn:行号在自己字段的最右方显示,且不加0;-n rz:行号在自己字段的最右方显示,且加上0
3)-w:行号字段的占用位数
以上这些指令都是直接将整个文件名,显示在屏幕上,下面指令可以实现分页。
4.more 文件名路径:以分页的形式显示文件名,打开时,快捷键有:
空格键:向下翻页
Enter:向下一行
/字符串:向下搜索指定的字符串
q:离开more
b或ctr+b:上一页,对管线无效
5.less 文件名路径:以分页的形式显示文件名,打开时,快捷键有:
空格键或pagedown:向下翻页
pageup:向上翻页
/字符串:向下搜索指定的字符串
?字符串:向上搜索指定的字符串
n:重复前一个搜寻
N:方向重复前一个搜寻
q:离开more
6.head [-n] number 文件名路径:列出文件名的前n行,如果n为负数,则表示列出到倒数n行哪里。
7.tail [-fn] number 文件名路径:取后面几行,参数:
-nnumber:显示最后number行,默认显示最后10行,若在number前加+行,则表示显示number行以后的内容
-f:持续侦测后面接的档名,需要ctr+c终止。(常用来监听日志文件)
8.od [t TYPE] 文件名:读取二进制文件,其中TYPE的类型有,a:利用默认的字符来显示,c:使用ASCII字符来输出,d[size]:利用十进制来输出数据,每个整数占用size bytes;f[size]:利用浮点数来输出数据,每个数占用size bytes;o[size]:利用八进制来输出数据,每个整数占用size bytes;x[size]:利用十六进制来输出数据,每个整数占用size bytes。
9.touch [-acdmt] 文件名:创建空文件名,或修改文件名的各种时间,参数:
1)-a:仅修订atime
2)-c:仅修改文件名的时间,若文件名不存在则不建立新文件名
3)-d:后面可以接欲修订的日期而不用是当前日期,也可以使用—date=”日期或时间”,可以用”2 days ago”这种语句
4)-m仅修改mtime
5)-t后面可以接欲修订的时间而不用是当前时间,格式为[YYMMDDhhmm] 若文件名不存在则表示新建空文件名各个时间值均为当前时间。
原文:51cto

centos/Linux 系统运行级别和启动过程

对于linux初学者来说,了解linux系统的运行级别以及系统的启动过程是必须要掌握的知识。也是学习linux的基础。本文将会讲述linux系统里都有那些运行级别以及linux系统的启动过程。
Linux 系统主要运行级别
1)0:关机
2)1:单用户
3)2:多用户状态没有网络服务
4)3:多用户状态有网络服务
5)4:系统未使用保留给用户
6)5:图形界面
7)6:系统重启
注:常用运行级别是3和5,要修改运行级别可改文件/etc/inittab的id:5:initdefault中的数字。
linux系统启动过程:
1)加载BIOS,当你打开计算机电源,计算机会首先加载BIOS信息,BIOS中包含了CPU相关信息,设备启动顺序信息,硬盘信息,内存信息,PnP特性等等。这样计算机就知道去读取哪个硬件设备了。
2)读取MBR,众所周知,磁盘第0磁道第一个扇区被称为MBR(Master Boot Record),即主引导记录,它的大小是512字节,存有预启动信息,分区表信息。系统找到BIOS所指定的硬盘MBR后,就会将其复制到0X7c00地址所在的物理内存中。内存的内容就是Boot Loader,而具体到你的电脑,那就是lilo或者grub了。
3)Boot Loader:就是在操作系统内核运行之前的一段小程序。通常这段小程序,我们可以初始化硬件设备,建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核做好一切准备。Boot Loader有若干种,其中最常用的有Grub,Lilo和spfdisk。比如grub,系统同会读取内存中的grub配置信息(一般是menu.lst,或grub.lst),并按照此配置信息来启动不同的操作系统。
4) 加载内核:根据grub设定的内核映像所在路径,系统读取内存映像,并进行解压缩操作。此时,屏幕一般会输出“Uncompressing Linux”的提示。当解压缩内核完成后,屏幕输出“OK,booting the kernel”。系统将解压后的内核放置在内存中,并调用star_kernel()函数来启动一系列的初始化函数,并初始化各种设备,完成linux核心环境的建立。至此,linux内核已经建立起来了,基于linux的程序应该可以正常运行了。
5) 用户层init依据inittab文件来设定运行级别:内核被加载后,第一个运行的程序便是/sbin/init,该文件会读取/etc/inittab文件,并依据此文件进行初始化工作。其实/init/inittab文件最主要的作用就是设定Linux运行等级,其设定形式是“:id:5:initdefault:”,这就表明Linux需要运行在等级5上。运行等级见1。
6) init进程执行rc.sysinit:在设定了运行等级后,linux系统执行的第一个用户层文件就是/etc/rc.d/rc.sysinit脚本程序它做的工作非常多,包括设定Path,设定网络配置(/etc/sysconfig/network)、启动swap分区,设定/proc等等。
7)启动内核模块:具体是依据/etc/modules.conf文件或/etc/modules.d目录下的文件来装载内核模块。
8) 执行不同运行级别的脚本程序:根据运行界别的不同,系统运行rc0.d到rc6.d中的相应的脚本程序,来完成相应的初始化工作和启动相应的服务。
9) 执行/etc/rc.d/rc.local:rc.local就是在一切初始化工作后,linux留给用户进行个性化的地方。你可以把你想要设置和启动的东西放到这里。
10)执行/bin/login程序,进入登录状态:此时,系统已经进入到等待用户输入username和password的时候了,你已经可以用自己的账号登入系统了。
原文:http://blog.chinaunix.net/uid-26495963-id-3066282.html

CentOS/Linux:如何修改系统的硬件时间

在centos linux里有两种时间,一种是系统的当前时间,另一种是系统的硬件时间,也就是有系统bios维护的时间。在linux下,如果只是用date命令更改了系统时间,那么系统重启后,依旧是不对的,所以我们可以直接设置系统的硬件时间,这样系统启动后,系统就会自动读取硬件时间并更新为当前系统时间。
使用Centos,遇到本地时间对不上,直接敲命令:date -s “2014-12-25 15:15:15″是立即生效了,但是重启后,系统时间还是原来的。
1.date {查看目前本地的时间}

[root@osetc ~]# date
Wed Jan  7 10:10:59 CST 2015
 

2.hwclock –show {查看硬件的时间}

[root@osetc ~]# hwclock --show
Wed 07 Jan 2015 10:11:19 AM CST  -0.793403 seconds
 

3.如果硬件的时间是对不上,那就对硬件的时间进行修改、
4.hwclock –set –date ‘014-12-15 15:15:15’ {设置硬件时间}
5.hwclock –hctosys {设置系统时间和硬件时间同步}
6.clock -w {保存时钟}
7.最后在通过重启,init 6 快速重启后,查看系统时间是否真正生效!!!!1

CentOS/Linux:如何配置SSH无密码登录

当你在搭建集群或者在配置hadoop大数据集群环境的时候,都需要配置节点之间的无密码访问。本文将会讲述如何来设置ssh无密码登录。
ssh 无密码登录要使用公钥与私钥。linux下可以用用ssh-keygen生成公钥/私钥对,以CentOS为例。
有机器A,B。现想A通过ssh免密码登录到B。
1.在A机下生成公钥/私钥对。

[osetc@A ~]$ ssh -keygen -t rsa -P ''
 

-P表示密码,-P ” 就表示空密码,也可以不用-P参数,这样就要三车回车,用-P就一次回车。
它在登录用户的家目录下生成.ssh目录,.ssh下有id_rsa和id_rsa.pub。
2.把A机下的id_rsa.pub复制到B机下,在B机的.ssh/authorized_keys文件里,我用scp复制。

[test@A ~]$ scp .ssh/id_rsa.pub test@B:/home/chenlb/id_rsa.pub test@B's password: id_rsa.pub                                    100%  223     0.2KB/s   00:00
 

由于还没有免密码登录的,所以要输入密码。
3.B机把从A机复制的id_rsa.pub添加到.ssh/authorzied_keys文件里,如果没有.ssh/authorzied_keys,就新建一个。

[test@B ~]$ cat id_rsa.pub >> .ssh/authorized_keys [test@B ~]$ chmod 600 .ssh/authorized_keys
 

authorized_keys的权限要是600。
这样A机就可以登录B机了。

[test@A ~]$ ssh B
 The authenticity of host 'B (B)' can't be established. RSA key fingerprint is 00:a6:a8:87:eb:c7:40:10:39:cc:a0:eb:50:d9:6a:5b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'B' (RSA) to the list of known hosts.
Last login: Thu Jul  3 09:53:18 2008 from test
 

第一次登录是时要你输入yes
登录的机子可有私钥,被登录的机子要有登录机子的公钥。这个公钥/私钥对一般在私钥宿主机产生。上面是用rsa算法的公钥/私钥对,当然也可以用dsa(对应的文件是id_dsa,id_dsa.pub)
想让A,B机无密码互登录,那B机以上面同样的方式配置即可。

CentOS/Linux:如何使用sudo命令

在linux系统中,由于root的权限过大,一般情况都不使用它。只有在一些特殊情况下才采用登录root执行管理任务,一般情况下临时使用root权限多采用su和sudo命令。
一、su和sudo命令对比:
在普通用户下输入su命令后,会提示输入root账户的密码,然后就进入特权模式(跟用root登录系统完全一样),输入exit或者su – user 退出:

$su
Password:
#ls /root
anaconda-ks.cfg  install.log  install.log.syslog
#exit
$ls /root
ls: cannot open directory /root: Permission denied #提示没有权限
 

而采用sudo命令,只需输入当前用户的密码(也可以配置为不输入密码)即可执行需要root权限执行的命令:

$ls /root
ls: cannot open directory /root: Permission denied #提示没有权限
 
$sudo ls /root
We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for Oracle:    #输入普通用户oracle的密码
anaconda-ks.cfg  install.log  install.log.syslog
 

通过上面的对比可以看出,sudo比su有很多优点:
1、普通用户不需要知道root的密码即可执行需要root权限的命令;
2、不会因忘记退出而采用root执行了会引起破坏性的命令(初学linux经常犯这个错);
二、配置普通用户有使用sudo命令的权限:
在linux系统中,新建用户并没有执行sudo权限,如新建一个AAA的用户,输入sudo命令会有如下提示:

aaa is not in the sudoers file.  This incident will be reported.
 

这句的意思是在sudoers文件中不存在aaa这个用户,这个时间会被报告给管理员。既然知道问题处于sudoers这个文件,那我们就看看这个文件为何方神圣:

[root@dbs aaa]# vi /etc/sudoers
## Sudoers allows particular users to run various commands as
## the root user, without needing the root password.
##
## Examples are provided at the bottom of the file for collections
## of related commands, which can then be delegated out to particular
## users or groups.
##
## This file must be edited with the 'visudo' command.
## Host Aliases
## Groups of machines. You may prefer to use hostnames (perhaps using
## wildcards for entire domains) or IP addresses instead.
# Host_Alias     FILESERVERS = fs1, fs2
# ost_Alias     MAILSERVERS = smtp, smtp2
## User Aliases
## These aren't often necessary, as you can use regular groups
## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname
## rather than USERALIAS
# User_Alias ADMINS = jsmith, mikem
 

输入i,对文件进行编辑,发现底部有只读提示:
— INSERT — W10: Warning: Changing a readonly file
应该是没有权限,退出编辑状态后查看权限:

[root@dbs aaa]# ll /etc/sudoers
-r--r-----. 1 root root 3825 Jul 22 01:05 /etc/sudoers
 

原来root也只有只读权限,难怪,首先修改权限以让root有完全控制权限:

[root@dbs aaa]#chmod 740 /etc/sudoers
 

再次编辑,这次没有出现只读提示了,找到如下字段:

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
Oracle  ALL=(ALL)       ALL
aaa     ALL=(ALL)       ALL
 

添加aaa用户,添加后如aaa ALL=(ALL) ALL
修改完后输入:wq保存,保存后记得把权限修改回去,否则会有错误提示

#chmod 440 /etc/sudoers
 

权限一定是440,否则就会有错误提示。
OK,在aaa用户下就可以正常使用sudo命令咯。