当前位置:  操作系统/服务器>linux
本页文章导读:
    ▪分享:vim高级替换技巧      本节主要内容: vim高级替换技巧 1,替换变量 在正规表达式中使用 \( 和 \) 符号括起正规表达式,即可在后面使用\1、\2等变量来访问 \( 和 \) 中的内容。 例子: 1)、将 data1 data2 修改为 data2 d.........
    ▪linux中newusers与chpasswd批量添加用户的方法      一、批量用户添加流程; 批量添中用户流程是通过newusers 导入一个严格按照/etc/passwd 的书写格式来书写内容的文件来完成添加用户。 然后通过chpasswd 导入用户密码文件来完成批量更新用户.........
    ▪Linux下dd命令生成指定大小的虚拟块设备文件      本节主要内容: dd命令生成指定大小的虚拟块设备文件 什么是虚拟块设备文件 虚拟块设备文件的通用名称为:硬盘镜像文件(Hard Disk Image),但不是所有的硬盘镜像文件都是虚拟块设备文件,.........

[1]分享:vim高级替换技巧
    来源: 互联网  发布时间: 2013-12-24

本节主要内容:
vim高级替换技巧

1,替换变量
在正规表达式中使用 \( 和 \) 符号括起正规表达式,即可在后面使用\1、\2等变量来访问 \( 和 \) 中的内容。

例子:
1)、将 data1 data2 修改为 data2 data1
:s/\(\w\+\)\s\+\(\w\+\)/\2\t\1

2)、将 Doe, John 修改为 John Doe
:%s/\(\w\+\), \(\w\+\)/\2 \1/   

2,利用函数式替换
用法:
:s/替换字符串/\=函数式

说明:
1)、函数式可以有多个,返回值可以用字符串连接符.连接起来,如line(".")返回匹配行号(:help line()  ),submatch(n)可以引用\1、\2的内容,其中submatch(0)引用匹配的整个内容;
2)、函数式也可以是字符串常量,用双引号引起来。函数式也可以是任意表达式,需要用小括号引起来,如(3+2*6);
3)、函数式还可以是寄存器中的内容,通过"@寄存器名"访问,如@a(不需要加引号,但是还是需要用.来连接);

例子:
将下列8行的data0依次变成data0~7(前面的数字是行号)
 

double data0;
double data0;
double data0;
double data0;
double data0;
double data0;
double data0;
double data0;
 

如果安装有perl的话,我以前一般都是借助perl来完成这件事情:
:r !perl -n -le "if(s/^(double\s+data)\d;/$1$k;/){ $k++; print $_; }" %:p
其中%:p表示包含完整路径的文件名
现在只用vim我们就可以完成这样的事情:
首先将光标移到125行(line(".")返回当前匹配行的行号,line("'a")返回mark a的行号):
ma
:%s/^\(double\s\+data\)\d\(;\)/\=submatch(1).(line(".")-line("'a")+1).submatch(2)/g
再或者
首先将光标移到125行(line("'V7j
:%s/^\(double\s\+data\)\d\(;\)/\=submatch(1).(line(".")-line("'

3,匹配的开始与结束
\zs和\ze可以用于替换操作中指明替换的开始与结束,如上例中可以以更短的操作来实现:
ma
:%s#^double\s\+data\zs\d\ze#\=(line(".")-line("'a")+1)#g

另外,还可以使用vim表达式来实现上述功能:
:let n=0 | g/^double\s\+data\zs\d/s//\=n/ | let n+=1

其中 ·|      用来分割不用的命令;
·g      在匹配后面模式的行中执行指定的ex命令
·\zs    指明匹配由此开始
·s//\=n 对匹配模式进行替换,匹配模式为空,表示以上一次匹配成功的模式,
并且指明替换是一个表达式;

4,高级递增替换
把下面几句放到 _vimrc
 

代码示例:
let g:I=0
function! INC(increment)
let g:I =g:I + a:increment
return g:I
endfunction

以下问题,可以按如下的方法解决:
:let I=-1 | %s/^ double\s\+data\zs\d\ze/\=INC(1)/

另外,还可以生成数字序列,例如生成1~100间隔为5的数字序列:
:let I=0 | ‘a,’b s/^/\=INC(5)/

Normal
0
7.8 磅
0
2
false
false
false
EN-US
ZH-CN
X-NONE


    
[2]linux中newusers与chpasswd批量添加用户的方法
    来源: 互联网  发布时间: 2013-12-24

一、批量用户添加流程;
批量添中用户流程是通过newusers 导入一个严格按照/etc/passwd 的书写格式来书写内容的文件来完成添加用户。
然后通过chpasswd 导入用户密码文件来完成批量更新用户密码的过程;

1、newusers 成批添加用户的工具;
newusers 后面直接跟一个文件;文件格式和/etc/passwd 的格式相同;

用户名1:x:UID:GID:用户说明:用户的家目录:所用SHELL

举例:
 

代码示例:
win00:x:520:520::/home/win00:/sbin/nologin
win01:x:521:521::/home/win01:/sbin/nologin
......

关于SHELL类型,查看主机上所有SHELL ,可以通过chsh 来查看;
 

代码示例:
[root@xxx beinan]# chsh --list
/bin/sh
/bin/bash
/sbin/nologin
/bin/ksh
/bin/tcsh
/bin/csh
/bin/zsh

其中除了/sbin/nologin ,其它类型的SHELL 都能登录系统;
nologin大多是虚拟用户用的SHELL,这样即便它是系统用户,也没有无登录系统的权限;
如果想添加这类用户,将其SHELL 设置成/sbin/nologin即可。

关于用户名、UID、GID及用户的家目录,可以参考如下的文章:
linux下查看用户及用户组的命令举例
有关linux用户和用户组管理的知识详解
实例学习Linux下新增与删除用户组
Linux用户与用户组详细教程
linux中的set uid,set gid,sticky bit详解
有关linux文件及目录的suid/guid和t属性

2、chpasswd 批量更新用户口令工具;
 

chpasswd 工具是成批更新用户口令的工具,是把一个文件内容重新定向添加到/etc/shadow中;
chpasswd < 文件

但文件的内容并不是没有约定的,必须以下面的格式来书写,并且不能有空行;
 

用户名:口令
用户名1:口令1
用户名2:口令2

举例:
 

代码示例:
win00:123456
win01:654321
... ...

二、批量添加用户实例;

1、首先,创建用户文件和密码文件;
要创建包含新用户的文件userfile.txt;
另一个是为新添加的用户设置密码的userpwdfile.txt;
 

代码示例:
[root@xxx ~]# touch userfile.txt
[root@xxx ~]# touch userpwdfile.txt

然后,用文本编辑器打开文件userfile.txt,添加如下内容;
 

代码示例:
win00:x:520:520::/home/win00:/sbin/nologin
win01:x:521:521::/home/win01:/sbin/nologin
win02:x:522:522::/home/win02:/sbin/nologin
win03:x:523:523::/home/win03:/sbin/nologin
win04:x:524:524::/home/win04:/sbin/nologin
win05:x:525:525::/home/win05:/sbin/nologin
win06:x:526:526::/home/win06:/sbin/nologin
win07:x:527:527::/home/win07:/sbin/nologin
win08:x:528:528::/home/win08:/sbin/nologin
win09:x:529:529::/home/win09:/sbin/nologin

userfile.txt 文件内容格式和 /etc/passwd 的格式是一样的,必须严格按照/etc/passwd 的格式来书写;
上面所添加的用户都不能登录系统,但完全能用于ftp登录,但要在相应ftp服务器的配置文件中打开让本地用户有读写权限;
如果想让上面的部份用户可以登录系统,可以把SHELL类似改一改,比如改成/bin/bash ;

新增用户的密码文件userpwdfile.txt内容;
这个文件的内容中的用户名要与 userfile.txt用户名相同;
即先是添加了win00到win09的用户,现在要为这些用户更新密码;
比如下面的;
 

代码示例:
win00:123456
win01:654321
win02:123321
win03:qweewq
win04:google
win05:adadwc
win06:wsscee
win07:xxec32
win08:543wew
win09:3ce3wf

2、通过newusers和chpasswd 完成批量添加用户;
 

代码示例:
[root@xxx ~]# newusers userfile.txt
[root@xxx ~]# chpasswd < userpwdfile.txt

如果发现 /etc/passwd 用户有明口令,可以通过如下命令映射到 /etc/shadow文件名;
 

代码示例:
[root@xxx ~]# pwconv

    
[3]Linux下dd命令生成指定大小的虚拟块设备文件
    来源: 互联网  发布时间: 2013-12-24

本节主要内容:
dd命令生成指定大小的虚拟块设备文件

什么是虚拟块设备文件
虚拟块设备文件的通用名称为:硬盘镜像文件(Hard Disk Image),但不是所有的硬盘镜像文件都是虚拟块设备文件,例如,目前Ghost的GHO格式的镜像文件就不能成为虚拟机中的硬盘。

Linux的dd命令,可以用于生成虚拟块设备文件。
既可以用于创建空镜像文件,也可以用于创建物理硬盘的镜像。
例如:
 

代码示例:
# dd if=/dev/hda of=/mnt/nebula/hda_dd.image4757130+0 records in4757130+0 records out

将IDE设备/dev/hda的内容复制到/mnt/nebula/hda_dd.image文件。参数if告诉dd从哪个文件读取数据,参数 of告诉dd读出的数据写入哪个文件中。

注意,对于dd来说,输入和输出都是文件,dd做的只是文件拷贝工作,这得益于Unix/Linux下面将设备也抽象为特殊的文件。

一般来说设备文件有两种,一种是块设备,一种是字符设备。
块设备的特点是可以随机读写(Random Access),比如内存、硬盘等。字符设备的特点是顺序读写(Sequential Access),比如鼠标,键盘,麦克风等。

如果想生成空镜像文件,还需要一个特殊的设备。
/dev/zero是Linux提供的一个特殊的字符设备,它的特点是可以永远读该文件,每次读取的结果都是二进制0。

例子,生成一个100M的空镜像文件:
 

代码示例:
dd if=/dev/zero of=100M.img bs=1M count=100

除了前面已经解释的of和if参数,这次又出现了bs和count参数。
bs=1M表示每一次读写1M数据,count=100表示读写 100次,这样就指定了生成文件的大小为100M。
bs参数还可以进一步细分为ibs和obs两种,为读操作与写操作分别指定不同的Buffer大小。

这样就生成100M的空镜像文件,问题是,如果要生成1G的虚拟块设备文件,就得占用1G的硬盘空间,而这个镜像文件完全是空的,是不是有一点浪费?

好在Linux支持Sparse(稀疏)文件。

例子
 

代码示例:
# dd if=/dev/zero of=1G.img bs=1M seek=1000 count=0
# ls -l 1G.img
-rw-r-r- 1 root  root  1048576000 Mar 25 15:32 1G.img
# du -m 1G.img
 

用到了一个新的命令seek,表示略过1000个Block不写(这里Block按照bs的定义是1M),count=0表示写入0个Block。用ls命令看新生成的文件,大小可以看出是1000M。
但是再用du一看,实际占用硬盘大小只有1M。

以上介绍了,linux下dd命令生成指定大小虚拟块设备文件的方法,希望对大家有一定的帮助吧。
 

您可能感兴趣的文章:

linux下dd命令备份磁盘的节点(主引导记录)恢复数据
linux中dd命令的用法详解
linux中dd命令使用详解
使用dd命令克隆磁盘的方法介绍
linux中dd命令详解(清除硬盘数据)
dd命令中seek和skip的用法
如何解决dd命令输出结果无法重定向到文件的问题
如何查看dd命令的拷贝进度

    
最新技术文章:
▪linux系统中的列出敏感用户的脚本代码
▪a10 config backup for aXAPI
▪一键备份gitolite服务器的Shell脚本
▪nagios 分发文件实现代码
▪阿里云云服务器Linux系统更新yum源Shell脚本
▪一个监控LINUX目录和文件变化的Shell脚本分享
▪Linux下实现SSH免密码登录和实现秘钥的管理、...
▪Shell正则表达式之grep、sed、awk实操笔记
▪3个备份系统文件并邮件发送的Shell脚本分享
▪CentOS 6.3下给PHP添加mssql扩展模块教程
▪监控网站是否可以正常打开的Shell脚本分享
▪shell脚本编程之if语句学习笔记
▪shell脚本编程之循环语句学习笔记
▪shell脚本编程之case语句学习笔记
▪Shell脚本实现的阳历转农历代码分享
▪Shell脚本实现复制文件到多台服务器的代码分...
▪Shell脚本实现批量下载网络图片代码分享
▪Shell脚本实现检测文件是否被修改过代码分享
▪Shell脚本数组用法小结
▪Shell脚本批量重命名文件后缀的3种实现
▪C语言实现的ls命令源码分享
▪Linux下查找后门程序 CentOS 查后门程序的shell脚...
▪Shell 函数参数
▪linux shell 自定义函数方法(定义、返回值、变...
▪Shell实现判断进程是否存在并重新启动脚本分...
▪Shell脚本break和continue命令简明教程
▪Shell脚本函数定义和函数参数
▪让代码整洁、过程清晰的BASH Shell编程技巧
▪shell常用重定向实例讲解
▪awk中RS、ORS、FS、OFS的区别和联系小结
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3