0%

寄存器

在删除、替换、拷贝文本的时候,这些信息都会保存到你可以访问的寄存器中。

下面的是一些默认的寄存器:

寄存器名称 描述
% 当前文件名
: 最近执行的命令
/ 上一次的搜索
最近一次使用的寄存器

使用方法为”<Register Name>p就可以经寄存器中的内容粘贴出来。比如”%p就可以将当前文件名粘贴到文件中。同时也可以使用:registers来查看寄存器中的内容。

文件浏览器

使用vim directory的会将目录及文件列出来。

在把vim当做文件浏览器的时候可以进行下面的操作:

描述
打开文件或者进入文件目录
D 删除光标下的文件
R 重命名光标下的文件名
X 执行光标下的文件
o 在一个水平窗口中打开文件

同样地,在vim编辑文件的时候也可以打开vim文件浏览器。
比如使用:Sex或者:Vex就可以切分出一个水平或者垂直的先窗口;而使用:Tex则可以打开一个新的tab页。

大小写转换

| 按键|描述|
||大小写转换,并将光标移动到下一个字符|
|N
|将接下来的N的字符大小写互换|
|g~~|将当前行大小写互换|
|gUU|将当前行全部转化为大写|
|guu|将当前行全部转换为小写|
|gUaw|将当前word转换为大写|
|guaw|将当前word转换为小写|
|U|可视模式下全部转换为大写|
|u|可视模式下全部转换为小写|
|guG/gUG|从当前行开始到最后一行转换为小写/大写|

空格和tab

|:set expandtab | 将tab自动转换为空格|
|:set tabstop=4 | 将tab转换为4个空格|
|:retab | 通过上面的两个配置将tab转换为相应的空格|
|:set shiftwidth=4 | 设置缩进时的空格数目|
|:set ai | 自动缩进|

重绘屏幕

在一些情况下,如果屏幕出现了问题,可以使用CTRL+L来重绘屏幕。

插入非键盘字符

对于非键盘字符,可以参考:digraphs来查看,比如我们就可以使用CTRL+K Co来输入版权的符号©。

进入vim的ex模式

输入大写的Q就可以进入vim的ex模式,在这种模式下,我们可以一直执行命令,回到原来的模式,只需输入vim即可。

定位在匹配单词的末尾

通常我们使用/pattern后,光标会停留在单词p上,如果我们希望光标停留在pattern的最后一个字母,只需使用/pattern\ns即可

查看字符的ASCII码表

想查看一个字符的ASCII码时,只需输入ga就可以看到。

编辑二进制文件

使用vim –b filename即可。

简单搜索技巧

  • /search-term :前向搜索
  • ?search-term :后向搜索
  • n : 查找下一个
  • N :查找前一个
  • // 或 ?? :重复上一个搜索

当前词的搜索

当光标在一个单词上时,输入下述:

    • :搜索当前光标所在单词的下一个(完全匹配)
  • :搜索当前光标所在单词的上一个(完全匹配)

  • g* :搜索当前光标所在单词的下一个(部分匹配即可)
  • g# :搜索当前光标所在单词的上一个(部分匹配即可)

搜索当前行的一个字符

  • fX :搜索当前行的下一个X
  • FX :搜索当前行的上一个X
  • tX :搜索当前行的下一个X,并定位到前一个字符
  • TX :搜索当前行的上一个X,并定位到前一个字符
  • ;:重复上面的命令
  • ,:重复上面的命令(反向)

使用vimgrep搜索多个文件

可以在vim环境中使用:vimgrep hello *.c来搜索当前文件夹下所有c文件中包含hello的行,
然后可以使用:cn或者:cN查看前一个或后一个文件。

高亮显示搜索结果

使用:set hlsearch或者:set nohlsearch来显示或者取消搜索到匹配模式的高亮显示。

:match的使用

可以使用类似:match color-scheme /word/来讲word设置为搜索到时显示为color-scheme的模式。

其中color-scheme有ErrorMsg、WarningMsg、ModeMsg和MoreMsg等。

放置光标在匹配的最后

当你在Vim内使用/pattern搜索时,缺省光标位于匹配的开始。

但是,如果你希望光标放置在匹配的结尾,你可以使用/pattern\zs

光标在模式的开始位置:

/pattern

光标在模式的结尾处:

/pattern\zs

快捷搜索

如果要搜索,一般命令是: “:/thisisaverylongword”,但是这样输入thisisaverylongword, 这个很长的单词很难输入, 所以有更简单的办法:把光标置于thisisaverylongword之上, 然后按*键,或者#键即可直接进行搜索.*键是向下搜索, #键是向上搜索。

vim增量搜索

设置:set incsearch就可以在输入任何字符的时候自动匹配,而不需要输入完以后回车才匹配。

Vim增量搜索
当你使用增量搜索后,在Vim中不能没有它。

为了使用增量搜索

1
:set incsearch

增量搜索会在输入的时候就开始搜索关键词。

关闭增量搜索,

1
:set noincsearch

gvim介绍

gVim是Vim的图形前端,它是跨平台的编辑器,基本上主流的操作系统上面都有它的版本。

显示或者隐藏gvim的菜单和工具栏

隐藏工具栏为:set guioptions-=T

相反地,如果希望显示相应的组件,可以将-=改为+=即可。
GUI的GUI元素有下面几种

设置代码 描述
:set guioptions-=TmrlRL 隐藏gvim的所有GUI元素
:set guioptions+=TmrlRL 显示gvim的所有GUI元素
:set guioptions-=T 隐藏gvim的工具栏
:set guioptions-=m 隐藏gvim的菜单栏
:set guioptions-=r 隐藏gvim的右侧滚动条
:set guioptions-=l 隐藏gvim的左侧滚动条
:set guioptions-=R 隐藏gvim的右侧滚动条,当分割窗口时
:set guioptions-=L 隐藏gvim的左侧滚动条,当分割窗口时

修改gvim的字体

可以使用:set guifont=*来调出字体选择窗口,或者使用:set guifont=Courier\ New:h10。

以只读模式打开

1
vim –R filename

这种模式打开的文件不能修改。

查看swap文件

1
vim –r

可以查看当前文件夹,~/tmp,/var/tmp以及/tmp的临时文件。

出现swap文件有两种情况:

  • 其他人正在编辑该文件
  • 上一个会话非正常退出

打开文件时执行命令

1
vim –c ‘cmd’ filename

可以通过-c参数在打开filename的时候就执行命令cmd,比如cmd为:50就是打开文件后就跳转到50行,而/hello就是打开文件就搜索hello的所在。
当然我们可以同时执行多个命令,格式为:

1
vim –c ‘cmd1’ –c ‘cmd2’ –c ‘cmd3’ … filename

执行文件中的命令

1
vim –w cmdfile filedata

打开filedata的时候直接执行cmdfile中的命令。

进入vim的受限模式

使用vim –Z filename后,就会进入vim的受限模式,所有的外部shell命令会被禁用。

钱老的经历是传奇的,被美国关了5年,你不知道的钱学森。推荐看看。

基本的导航

如果你只是使用h,j,k,l字符来导航,那你就太弱了,如果让你到有万行代码的第5500行你如何操作呢,如果让你去第10屏你将如何操作呢?下面的几个技巧教你在很少击打键盘情况下非常高效的导航文件内容。

滚动整屏或半屏

请使用下面的页导航按键:

  • CTRL-F 向下滚动整页(Forward)
  • CTRL-B 向上滚动整页(Back)
  • CTRL-D 向下滚动半页(Down)
  • CTRL-U 向上滚动半页(Up)

词导航

  • w 移动到下一个单词的开始
  • W 移动到下一个WORD的开始
  • e 移动到当前单词的结尾
  • E 移动到当前单词的结尾
  • b 移动到前一个词的开始
  • B 移动到前一个词的开始

在一行中特殊位置上的位置光标

  • 0(zero) 移动到当前行的开始位置
  • $(美元符号) 移动到当前行的结束位置
  • ^(…) 移动到当前行的第一个非空字符
  • g_ 移动到当前行的最后一个非空字符

快速跳转至文件首尾

导航键 描述

:0 跳转至文件头–方法1

gg 跳转至文件头–方法2

1G 跳转至文件头–方法3

:$ 跳转至文件尾–方法1

G 跳转至文件尾–方法2

段落、章节和句子导航

  • { 移动到当前段落的开始
  • } 移动到下一个段落的开始
  • [[ 移动到当前章节的开始
  • ]] 移动到下一个章节的开始
  • ( 移动到前一个句子的开始
  • ) 移动到下一个句子的开始

使用CTRL-o和CTRL-I跳转

Vim使用跳转列表来跟踪你的导航,你可以通过这个列表来向前或者向后导航。

跳转列表保留所有地方的轨迹,它可以跟踪文件名、行号和列号。

查看调整列表::jumps

导航键 描述
CTRL-o 跳转到上一个位置点
CTRL-I 跳转到下一个位置点
5CTRL-o 跳转到显示在位置0上面的位置5
5CTRL-I 跳转到显示在位置0下面的位置5

Vim命令行导航

当从命令行打开一个文件,你可以通过指定命令行参数来导航到一个特殊的位置,如下:

导航键 描述
$ vim +142 打开文件到143行
$ vim +/search-term 打开文件移动到向下搜索到指定词语的位置
$ vim +?search-term 打开文件移动到向上搜索到指定词语的位置
$ vim -t TAG 移动到指定的TAG处

在非常长的行中导航

当你遇到非常长的行(没有任何新的行)时,Vim对待它作为单个行。
因此,当你对这一行输入j键后,它将跳到下一行上。然而,你会觉得它跳过了好多行。但实际上它只是跳过一个长行。

可视化行:让我们假设有一个非常长的行,它回绕成5个可视化行。为了讨论的目的,让我们称每一单独的行为可视化行。

下面的快捷方式可以帮我们有效地导航一个非常长的行,只需要在前面的基础上加上一个g即可

导航键 描述
gj 向下滚动一个可视化行
gk 向上滚动一个可视化行
g^ 移动到当前可视化行的开始位置
g$ 移动到当前可视化行的结束位置
gm 移动到当前可视化行的中间位置

文本编辑

下面说明各种改变文件中文本的方法。

描述
cc 改变当前整行;与S键一样, 它会删除掉整行,并且进入到插入模式等待输入新文本
C 从当前光标位置改变当前行, 这会使出当前行中光标位置之后的文本,进入插入模式等待输入新的文本。

替换文本

这个与r的区别是,s会提前删除掉字符然后进入输入模式。

描述
s 使用新的字符替换当前字符
S 使用新的文本替换当前行
4s 使用新的文本替换4个字符(从当前位置开始)
4S 使用新的文本替换4行(从当前行开始)

插入文本

下面解释各种插入文本到文件的方法。

描述
i 在当前位置插入文本
I 在行的开始位置插入文本,键:大写的I,例如India
o 在当前行之后插入一行,并且插入文本,键:小写o,例如:orange
O 在当前行之前插入一行,并且插入文本键:大写O,例如:Orange
:r FILENAME 插入另外一个文件内容到当前文件的当前行之后
:r! COMMAND 插入执行命令的输出到当前文件的当前行之后

例如:你可以插入当前的日期和时间到你编辑的文件中,执行下面的命令:

:r! date

恢复删除的文本

如果你有与误操作删除文本,你可以恢复它。你可以恢复到9个删除文本的片段。

恢复删除 描述
“1p 恢复第一次删除
“2p 恢复第二次到最后一次删除
“3p 恢复第三次到最后一次删除

如果你不确切知道你删除的东西,你可以通过下面的方式浏览所有9次删除的缓冲区。当你看到你希望恢复的文笔,只需要在这一步停止。

浏览所有删除的内容,直到你找到正确的一个。

“1pu.u.u.u.u.

你也可以使用:reg查看寄存器0到9中(删除寄存器)的文本,这会告诉你每个寄存器中使什么内容。

以只读模式打开

使用-R选项在只读模式下打开文件,如下所示:

1
vim -R filename.txt

或者

1
view filename.txt

当你不想编辑一个文件时,使用上面的方法中的一个是习惯问题。这帮助你避免造成不必要的文件修改。

文件保存

当你执行:w时,它会保存文件。
:w的主要问题是当你输入:w时,不管文件有没有改变,它都会更新文件时间戳。

幸运的是,:up可以保存文件,并且只是在文件存在改变时修改时间戳。

可视化模式类型 描述
v 小写的v 开始正常的可视化模式,在可视化模式下使用箭头导航选择文本
V(大写) 开始行可视化模式
CTRL-V 开始可视化块模式

vim 自动补全

自动单词不全

  • CRTL+X CRTL+N :单词前向补全;
  • CRTL+X CRTL+P :单词后向补全;

自动行补全

  • CRTL+X CRTL+L :自动行补全;

自动文件名补全

  • CRTL+X CRTL+F :文件名自动补全;

字典补全

只需要在vimrc中设置:set dictionary+=/usr/share/dict/words即可补全words中的单词。
也可以使用CTRL+X CTRL+K来显示匹配的单词。

词典自动补全

设置:set thesaurus+=/the/path/of/thesaurus文件,然后使用CTRL+X CTRL+T就可以找到相关单词的同义词。

可视化

下面是可视化模式下集中不同的类型:

可视化模式命令 描述
退出可视化模式
d 仅删除高亮的文本,例如,如果只是选择一行的部分,它只是删除该行上选择的部分。
D 删除高亮文本下的行,例如,如果只选择行的部分,它会删除整行。
y 仅拷贝(yank)高亮的文本
Y 拷贝高亮文本所在的行
c 删除高亮文本,进入插入模式
C 删除高亮文本所在的行,进入插入模式

窗口

  • :split file —打开水平的两个窗口
  • :vsplit file —打开垂直的两个窗口
  • CTRL+WW来移动到下一个窗口,或者使用CTRL+W{h/j/k/l}按照方向移动到相应的窗口;
  • CTRL+W (+/-)来增加或减小当前的窗口所占比例大小;
  • :N split filename来打开占用N列的窗口文件。

更改窗口显示标题

:set title titlestring=’I\ am\ coding\ now’

更改配色方案

可以使用:!ls $VIMRUNTIME/colors来查看支持的配色方案并更改。

1
2
3
4
5
6
Press ENTER or type command to continue
README.txt default.vim elflord.vim koehler.vim pablo.vim shine.vim zellner.vim
blue.vim delek.vim evening.vim morning.vim peachpuff.vim slate.vim
darkblue.vim desert.vim industry.vim murphy.vim ron.vim torte.vim

Press ENTER or type command to continue

编辑文件

使用vim –p file1 file2 file3 …. fileN可以打开多个文件,与不加-p的区别在于,这些文件全部显示在一个tab上。

然后我们就可以使用:tabn :tabp来到下一个tab或者上一个tab
可以使用:help tab来查看详情。

如何在插入状态下输入命令

先输入CTRL+O,然后就可以输入命令了,比如5j,就会跳转5行,然后重新进入插入状态。
注意,这里只能执行一次哟。

查看当前文件细节

使用CTRL+G或者gCTRL+G,得到的信息分别为基本信息和更详细信息。

数字增加或减少的快捷键

可以使用CTRL+A或者CTRL+X来将某位数字加1或者减1。

跳转到变量定义处

可以使用gd或者gD来跳转到变量定义处,一个为local定义,一个是global定义,在跳转过程中,会将该变量高亮显示。

标签

使用标签来创建的书签有两种类型的书签:局部书签和全局书签。

这里我们介绍下局部书签:

标签命令 描述
ma 在当前位置处创建一个名为“a”的标签
`a(反引号 a) 跳转到书签“a”的精确位置
‘a(单引号 a) 跳转到包含标签“a”哪行的开始

在单个文件中,当你希望跳转到特殊位置或者行上,你可以使用本地标签。如果你的标签名称是小写字符,那么它是个局部标签。

注意:Vim与Vi不同的是在编辑器推出之后该标签还是存在的,这是一个让许多UNIX用户吃惊的强大特征。

文件加密

在vim中使用:X然后输入密码就可是设置每次打开文件都要输入设置的密码,同时可以使用:set key=来取消密码。

保存会话

如果在编辑当前文件的时候,想编辑另外一个文件,可以使用:mksession来保存当前对话,等回来的时候,重新使用vim –S Session.vim即可打开原来保存的会话,这个会话会保存buffer、窗口大小、自定义选项、文件夹、当前目录等。

在vim中执行shell命令

使用方式为:!cmd即可。

比如在修改源码的时候,我比较喜欢使用:!date这样就可以快速注释修改的时间了。

vimbook–OPL –official publications library

又大概看了一遍VIM-OPL,大概记了一些还不是很熟的知识点。

1 Basic Editing

x—删除字符

u—撤销

Ctrl+U—还原

ZZ—保存退出

o—在当前行下方新建一行

O—在当前行上方新建一行

CTRL+] && CTRL+T:浏览器间前进后退

帮助前缀

What Prefix Example

Normal-mode commands (nothing) :help x

Control character CTRL- :help CTRL-u

Visual-mode commands v :help v_u

Insert-mode commands i :help i_

ex-mode commands : :help :quit

Command-line editing c :help c_

Vim command arguments – :help -r

Options ‘ (both ends) :help ‘textwidth’

​ 特殊键需要使用尖括号括起来,例如向上的键:help

移动到行首行尾

使用$移动到行尾,如果是2$就是移动到当前光标所在的下一行的行尾;

0是移动到行首

^是移动到第一个非空的字符上。

搜索字符

fx:即为从光标开始向前搜索字符x的所在;

Fx:即为从光标开始向后搜索字符x的所在;

与之相同的为tx和Tx,不过只是在前一个字符停下而已。

我在哪里

使用CTRL+G可以显示出你位于那里

向上或向下卷动

CTRL+U:向上移动半屏

CTRL+D:向下移动半屏

组合的威力

如果对于,当光标在<时,使用df>将会把整体删除,然后使用.就可以进行相同的编辑操作。

改变大小写

~

键盘宏–处理更复杂的操作

stdio.h

fcntl.h

unistd.h

stdlib.h

修改为

#include “stdio.h”

#include “fcntl.h”

#include “unistd.h”

#include “stdlib.h”

方法如下:

qa 开始录制宏到寄存器a

^ 移动到行首

i#include “ 在行首插入字符串#include

$ 移动到行尾

a” 在行尾添加”

j 移动到下一行

q 停止录制宏

然后我们就可以使用@a来重复刚才的动作。

输入图标或键盘上没有的符号

可以使用:digraphs来查看可以输入的符号,输入方法为CTRL-Kat****,即可输入@。

正则表达式搜索

/^include:只搜索每行中的第一个include

/include$:只搜索每行中的最后一个include

/^include$:只搜索准确的include,而不显示诸如includeaaa等。

正则表达式总结

x The literal character x

^ 行的开始

$ 行的结尾

. 匹配单个字符

character 诸如.*[]ˆ%/?~$需要来搜索

使用标记mark

  1. 使用:mark a来标记a

  2. 移动到另一个位置

  3. 执行d’a就可以删除从当前位置到a的文本

使用标记的好处是它可以为你一直保持,你可以随时跳转回去。

使用标记后,可以使用y’a来复制当前位置到标记的地方。

!!的妙用

!!date就是把当前 时间插入,同样地!!ls就是把当前文件夹列表的内容插入到当前行。

直接在vim中打开另一个文件

​ 如果你已经使用vim打开了一个文件,又想打开另外一个文件,可以先退出在打开另一个,但是还有一个比较快捷的方法,就是直接:vi filename,就可以自动关闭原来的文件,打开filename。

我位于那个文件

​ 输入:args可以在打开过个文件的时候定位到底在那个文件。

三种visual模式

l V:选择整行;

l v:按照字符选择;

l CTRL+V:矩形块选择;

Visual模式中连接多行

在V模式下,使用J可以连接各行,而gJ可以不让连接的各行有空格。

Visual模式下平移

选定文本后,使用SHIFT+>来平移文本。

多行插入相同文本

使用CTRL+V选定文本后,使用I即可插入在选定的地方插入相同文本(光标其实);而A在选定的区域之后。

如果c程序的后缀名不是c

可以使用:set filetype=c来强制默认为c类型

自动缩进

有三个缩进

l cindent

l smartindent

l autoindent

程序中定位

*:可以定位到光标下的单词;

gd:移动到变量的定义处;

[d:显示宏定义

匹配对

%:用于匹配()、/* */、{}或[];

查找man信息

在关键词上直接敲K就可以打开man帮助信息。

在文件中直接make

我们可以在文件中直接使用:make来编译程序,这样就可以自动定位到错误的地方。:cc可以列出所有的编译信息,:cnext或这:clist可以到下一个报警错误或者列出所有信息。

进入命令行模式

按下Q即可进入。

文本格式命令

:range center/right/left width可以居中

自动补全

我们可以使使用CTRL+N或者CTRL+P来自动搜索匹配的词。

显示字符的ascii码

输入ga就可以显示出光标下字符的各个进制数。

package-cleanup的使用

以前对于多余的内核,都是rpm-grep-remove你懂的,这次发现了这个软件包。神呐,节省了很多时间,只需要package-cleanup –oldkernels就可以把就内核(对于版本升级而言)删除,加上–count参数就可以指定留下几个grub选项,注意最好轻易不要设定1,除非你确定刚升级好的内核是OK的,默认值是2,即会保存前一个内核。

package-cleanup : 用于清理本地安装的RPM软件包

注意:这是一个只对RPM有用的工具,Ubuntu 之类的无法使用。

Fedora系统中package-cleanup是默认安装的,而且manpage也比较好懂,这里挑出几个命令来解释一下。

命令格式:

1
package-cleanup [options] <item …>
  1. 列出与其他RPM没有依赖关系的软件包,又叫叶节点(leaf node),即,没有软件包依赖叶节点。
1
2
3
4
5
6
7
8
9
10
11
12
$ package-cleanup –leaves

libacl-devel-2.2.49-8.fc14.i686
libcap-devel-2.17-1.fc13.i686
libchamplain-gtk-0.6.1-4.fc14.i686
libcurl-devel-7.21.0-5.fc14.i686
libdbi-dbd-mysql-0.8.3-6.fc14.i686
libertas-usb8388-firmware-5.110.22.p23-4.fc13.noarch
libgail-gnome-1.20.3-1.fc14.i686
libgtop2-devel-2.28.2-1.fc14.i686
libidn-devel-1.18-1.fc14.i686
libiodbc-3.52.7-1.fc12.i686

可以看到,列出的都是一些函数库,这些库函数没有被其他程序用到。

  1. 列出当前软件仓库中不再提供支持的本地已安装的软件包。也就是说,列出的软件包将不会再升级。
1
2
3
4
5
6
7
8
9
10
$ package-cleanup –orphans

alchemist-1.0.37-8.fc12.i686
antlr-2.7.7-6.fc12.i686
kernel-2.6.34.7-61.fc13.i686
kernel-devel-2.6.34.7-61.fc13.i686
kmod-nvidia-2.6.34.7-61.fc13.i686-260.19.12-1.fc13.1.i686
schroedinger-1.0.10-1.fc13.i686
system-config-display-2.2-1.fc12.i686
xorg-x11-drv-wacom-0.10.8-2.fc13.i686
  1. 删除旧内核文件(kernel, kernel-devel)。
1
$ package-cleanup –oldkernels

前面一篇文章提到过如何手工删除旧内核文件,这条命令就可以解决了。

可以用参数 “–count ” 指定要保留的内核个数,默认是2。

可以用参数 “–keepdevel” 指定不要删除 kernel-devel 。

例如:

1
$ package-cleanup –oldkernels –count=3 –keepdevel

含义是:保留最近3个内核文件和kernel-devel文件,并删除其余的kernels。

  1. 列出有依赖问题的软件包。
1
2
3
4
5
6
$ package-cleanup –problems

Package alchemist-1.0.37-8.fc12.i686 requires python(abi) = (’0′, ’2.6′, None)
Package alchemist-1.0.37-8.fc12.i686 requires python-abi = (’0′, ’2.6′, None)
Package system-config-display-2.2-1.fc12.i686 requires libpython2.6.so.1.0
Package system-config-display-2.2-1.fc12.i686 requires python(abi) = (’0′, ’2.6′, None)

我的运行结果显示有些软件包需要python 2.6的支持,Fedora 14已经默认安装python 2.7。

  1. 扫描重复安装的RPM软件包。
1
$ package-cleanup –dupes
  1. 扫描重复安装的软件包,并删除老版本的软件包。
1
$ package-cleanup –cleandupes

首先要查看网卡的MAC地址

在终端上输入命令:#ifconfig或者#ifconfig -a,就可以查看到网卡的信息,其中的HWaddr后面的XX:XX:XX:XX:XX:XX就是我们网卡MAC地址。

如何修改Linux/Centos下的MAC地址

linux/Centos下如何临时修改MAC地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1)闭网卡设备

[root@localhost ~]# ifconfig eth0 down

2)修改MAC地址

  [root@localhost ~]#ifconfig eth0 hw ether MAC地址(此处添加你要修改的MAC地址)

3)重启网卡

[root@localhost ~]#ifconfig eth0 up

4)查看修改是否生效:

[root@localhost ~]#ifconfig eth0 | grep HWaddr

注意:上述修改MAC地址只是暂时的,系统重启后,系统会恢复原物理MAC地址。

Linux/Centos下如何永久的修改MAC地址

永久修改MAC信息,在每次系统启动的时候自动更新MAC地址:

打开/etc/rc.d/rc.local ,追加三行内容:

1
2
3
4
5
6
ifconfig eth0 down

ifconfig eth0 hw ether XX:XX:XX:XX:XX:XX

ifconfig eth0 up

然后重启电脑就可以完成修改。

Linux 安装 manual

man 命令提供有关主题的参考信息,例如命令、子例程和文件。man 命令提供由名称指定的对命令的单行描述。man 命令也提供所有命令的信息,这些命令的描述包含用户指定的关键字集合。

大部分系统都会预装相关的程序,如果使用docker来pull的系统,并一定具备,此时需要安装一下即可。

对于Debian系列的,可以使用

1
$ sudo apt-get install manpages-dev

对于Redhat系列的,可以使用

1
$ sudo yum install man-pages

Redhat系列中,有一个Development Tools组包,特别适合开发运维人员,可以通过下面的命令来安装

1
$ sudo yum groupinstall "Development Tools"

man不同的数字

man 命令格式化指定的手册页面集合。如果为 Section 参数指定一个段,那么 man 命令在手册页面的该段中搜索 Title 参数指定的标题。Section 参数的值可以是 1 到 8 的阿拉伯数字或字母。

Section 数字是:

  • 1 表示用户命令和守护进程。
  • 2 表示系统调用和内核服务。
  • 3 表示函数或者函数库。
  • 4 表示特殊文件、设备驱动程序和硬件。
  • 5 表示配置文件。
  • 6 表示游戏。
  • 7 表示杂项命令。
  • 8 表示管理命令和守护进程。
  • 9 表示和内核相关的文件

此时使用whatis命令,参考whatis命令,

1
2
3
4
5
6
$ whatis read
read (1) - bash built-in commands, see bash(1)
read (1p) - read a line from standard input
read (2) - read from a file descriptor
read (3p) - read from a file
read (n) - Read from a channel

此时可以看到搜索到很多read的命令,而此时可以通过在man命令的后面跟上数字来搜索相关的内容,默认显示1,及bash内建的命令。

比如此时希望了解系统调用和内核服务,即2,此时的命令为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$ man 2 read

READ(2) Linux Programmer's Manual READ(2)

NAME
read - read from a file descriptor

SYNOPSIS
#include <unistd.h>

ssize_t read(int fd, void *buf, size_t count);

DESCRIPTION
read() attempts to read up to count bytes from file descriptor fd into the buffer starting at buf.

On files that support seeking, the read operation commences at the current file offset, and the file offset
is incremented by the number of bytes read. If the current file offset is at or past the end of file, no
bytes are read, and read() returns zero.

If count is zero, read() may detect the errors described below. In the absence of any errors, or if read()
does not check for errors, a read() with a count of 0 returns zero and has no other effects.

If count is greater than SSIZE_MAX, the result is unspecified.