##################第六单元文本处理工具ios
1、diff 命令正则表达式
• diff 命令用于比较两个文件的内容 , 以了解其区别。它还可用于建立补丁文件。补丁文件用于在企业环境的多台计算机之间对类似文件进行更改shell
选项 说明vim
-C 显示上下文周围的行bash
-U 使用统一输出格式(对于生成补丁文件颇有用)服务器
-r 从指定的目录开始文件执行递归式比较网络
[root@localhost mnt]# vim filessh
hello编辑器
[root@localhost mnt]# vim file.new工具
hello
123
[root@localhost mnt]# diff -u file file.new
--- file 2017-04-06 21:12:40.913242073 -0400
+++ file.new 2017-04-06 21:13:05.293242073 -0400
@@ -1,2 +1,2 @@
-hello
-
+hello westos
+123
2、修补命令 patch
•patch 采用补丁文件 patchfile ( 包含由 diff 生成的差别列表 ) 并将这些差别应用于生成补丁版的一个或多个原始文件。一般 , 补丁版替换原始文件 , 但当指定 -b 选项时 , 能够制做备份。将用 .orig 文件名后缀重命名原始文件
• patch 可用于将简单的补丁文件应用于使用如下语法的单个文件
– [root@host etc]# patch issue patchfile
Patching file issue
•如下命令显示如何使用经过 diff -Naur 建立的补丁文件。用户更改成与从中建立补丁文件的原始目录类似的可比较目录后 , 将执行 patch
– [user@host orig-dir]$ patch -b < /tmp/patchfile
Patching file hosts
Patching file network
eg:
[root@localhost mnt]# yum install patch -y
[root@localhost mnt]# patch file file.path
patching file file
[root@localhost mnt]# cat file
hello westos
123
3、grep 命令
• grep 将显示文件中与模式匹配的行。其也能够处理标准输入
• 模式能够包含正则表达式元字符 , 所以始终为正则表达式加引号一般被视为一种好办法。在本单元后面的部分中将介绍基本正则表达式
选项 说明
-i 执行不区分大小写搜索
-n 前置返回行的行号
-r 对文件执行递归式搜索,从命名目录开始
-C 显示具备匹配模式的行的计数
-V 返回不包含模式的行
eg:
[root@localhost mnt]# grep -in root passwd ##在passwd文件中执行不区分大小写的搜索,显示root,并显示行号
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost mnt]# grep hostname -r /etc/ -n ##在/etc/目录中从命名目录开始执行第归是搜索,过滤出含有hostname的文件,并显示行号
[root@localhost mnt]# grep root passwd |grep -v -E "^bash|test$"
##在passwd文件中过滤出不是以bash开头,而且不是以test结尾的含有root的行
4、Cut 命令
• cut 用于 “ 剪切 ” 文件中的文本字段或列并将其显示到标准输出
选项 说明
-d 指定用于提取字段的分隔符(Tab是默认值)
-f 指定要从每行中提取的字段
-C 指定要从每行中提取的文本列
eg:
[root@localhost mnt]# vim check_ip.sh
#!/bin/bash
ifconfig $1 |grep inet |grep inet6 -v |awk -F " " '{print $2}'
[root@localhost mnt]# chmod +x check_ip.sh
[root@localhost mnt]# /mnt/check_ip.sh eth0
172.25.254.141
5、sort 命令
• sort 用于排序文本数据。该数据能够位于文件中或其余命令输出中。 Sort 一般与管道一块儿使用
选项 说明
-n 按数值而非字符排序
-k 设置排序字段
-t 指定其余字段分隔符(默认为空格)
[root@localhost mnt]# sort -rnu wesy ##按数值倒序排序,并显示惟一的数字
444
99
77
56
34
15
14
8
7
5
4
3
[root@localhost mnt]# sort -rn wesy |uniq -c
1 444
1 99
1 77
2 56
2 34
1 15
1 14
2 8
2 7
1 5
1 4
2 3
2 1
1
6、uniq 命令
•uniq“ 删除 ” 文件中重复的相邻行。若要只打印文件中出现的惟一行(“ 删除 ” 全部重复行 ), 必须首先对 uniq 的输入进行排序。因为能够为uniq 指定其决策所基于的字段或列 , 所以这些字段或列是对其输入进行排序所必须的字段或列。若是未与选项一块儿使用 , uniq 会使用整个记录做为决策键 , 删除其输入中的重复行
选项 说明
-u 仅显示惟一行
-d 显示重复行
-c 每行显示一次(包括出现计数)
7、tr 命令
• tr 用于转字符 : 即 , 若是给定了两个字符范围 , 则只要发现某个字符位于第一个范围中 , 就会将其转换为第二个范围中对等的字符。该命令一般在 shell 脚本中使用 , 以按预期状况转换数据
• tr 'A-Z' 'a-z' <file
8、sed 命令
• sed 命令是流编辑器 , 用于对文本数据流执行编辑。假定要处理一个文件名 , sed 将对文件中的全部行执行搜索和替换 , 以将修改后的数据发送到标准输出 ; 即 , 其实际上并不修改现有文件。与 grep同样 , sed 一般在管道中使用
• 因为 sed 命令一般包含能够解释为 shell 元字符的字符 ,所以请按下面示例所示引用 sed 命令。默认状况下 , sed对文件中的全部行执行操做。在提供 sed 时 , 可带有地址( 将命令限制用于仅那些行 )
命令 说明
s/old/new/ 执行字符串转换,将old替换为new
d 删除匹配的行
eg:
[root@localhost mnt]# vim user_create.sh
#!/bin/bash
MAX=`wc -l $1|cut -d " " -f 1`
for NUM in $(seq 1 $MAX)
do
USERNAME=`sed -n ${NUM}p $1`
PASSWORD=`sed -n ${NUM}p $2`
useradd $USERNAME
echo $PASSWORD |passwd --stdin $USERNAME
done
[root@localhost mnt]# vim userfile
user1
user2
user3
[root@localhost mnt]# vim passfile
pass1
pass2
pass3
[root@localhost mnt]# sh user_create.sh userfile passfile
################第九单元部署 ftp 文件共享服务
1、部署 FTP 服务器
[root@localhost yum.repos.d]# vim rhel_dvd.repo ##配置yum源
[root@localhost yum.repos.d]# cat rhel_dvd.repo
# Created by cloud-init on Thu, 10 Jul 2014 22:19:11 +0000
[rhel_dvd]
gpgcheck = 0
enabled = 1
baseurl = http://172.25.254.250/rhel7
name = Remote classroom copy of dvd
• FTP ( 文件传输协议 ) 是 INTERNET 上仍经常使用的最老的网络协议之一 , 它为系统提供了经过网络与远程服务器进行传输的简单方法
• 在 RED HAT ENTREPRISE LINUX 6 中。 FTP 服务器包的名称为 VSFTPD , 它表明 Very Secure File Transfer Protocol Damon 服务器名称也叫作 vsftpd
• 默认配置文件让 ANONYMOUS 用户只能下载位于CHROOT 目录中的内容。 /var/ftp/ 这意味着远程 FTP客户端能以用户 anonymous 或 ftp 身份链接到服务器( 无需密码 ), 并从 ftp 服务器上的 /var/ftp/ 目录下载文件( 其本地 ftp 用户能够读取这些文件 )
2、部署网络服务的四个步骤
•安装服务软件
•启动服务
•启用服务
•测试服务
3、安装 vsftpd 包并启动服务
[root@localhost yum.repos.d]# yum clean all
• yum install vsftpd -y
• systemctl start vsftpd
• systemctl stop firewalld
• systemctl enable vsftpd
[kiosk@foundation41 Desktop]$ lftp 172.25.254.241 ####能登录而且显示,表示安装成功
lftp 172.25.254.241:~> ls
drwxr-xr-x 2 0 0 6 Mar 07 2014 pub
.vsftpd文件信息
/var/ftp ##默认发布目录
/etc/vsftpd ##配置目录
4、启用 vsftpd 服务
[root@localhost yum.repos.d]# firewall-config
public-->选中ftp,dhcpv6—client-->在options处选择Relode Firewalld
• Applications-->Sundry-->Firewall
[root@localhost yum.repos.d]# firewall-cmd --list-all
public (default, active)
interfaces: eth0
sources:
services: dhcpv6-client ftp ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
5、测试服务
• cd /var/ftp/pub/
• touch file{1..3}
• lftp 172.25.0.10
lftp 172.25.0.10:~> ls
drwxr-xr-x 2 0 0
lftp 172.25.0.10:/> cd pub/
lftp 172.25.0.10:/pub> ls
-rw-r--r-- 1 0 0
-rw-r--r-- 1 0 0
-rw-r--r-- 1 0 0
42 Nov 20 07:19 pub
0 Nov 20 07:19 file1
0 Nov 20 07:19 file2
0 Nov 20 07:19 file3
6、FTP 服务器配置
• 默认配置为匿名 FTP 服务器 , 仅容许匿名客户端 下载 , 而且禁用全部本地用户 , 禁止上传
• vsftpd 配置件 : /etc/vsftpd/vsftpd.conf ,document root 位于 /var/ftp/ 中 , 配置修改后 , 需从新启动服务
eg:
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
[root@localhost ~]# systemctl restart vsftpd.service
[root@localhost ~]# setenforce 0
• 选项示例 :
– anonymous_enable=YES
– local_enable=NO
– write_enable=NO
7、Vsftpd 服务配置
1)匿名用户设定
anonymous_enable=YES|NO ##匿名用户登录限制
#<匿名用户上传>
vim /etc/vsftpd/vsftpd.conf
write_enable=YES
anon_upload_enable=YES
chgrp ftp /var/ftp/pub
chmod 775 /var/ftp/pub
eg:
eg:
[kiosk@foundation41 Desktop]$ lftp 172.25.254.241
lftp 172.25.254.241:~> cd pub/
cd 成功, 当前目录=/pub
lftp 172.25.254.241:/pub> ls
lftp 172.25.254.241:/pub> put /etc/passwd
put: Access failed: 550 Permission denied. (passwd) ##550系统不容许这样作 设置write_enable=YES
lftp 172.25.254.241:/pub> put /etc/passwd
put: Access failed: 553 Could not create file. (passwd) ##553没有权限
lftp 172.25.254.241:/pub> put /etc/passwd
2358 bytes transferred ##上传成功
[root@localhost ~]# ll -ld /var/ftp/pub/
drwxr-xr-x. 2 root root 6 Mar 7 2014 /var/ftp/pub/
[root@localhost ~]# chgrp ftp /var/ftp/pub/ ##把/var/ftp/pub/给ftp组
[root@localhost ~]# chmod 775 /var/ftp/pub/ ##改变/var/ftp/pub/的权限为775
#<匿名用户家目录修改>
anon_root=/direcotry
#<匿名用户上传文件默认权限修改>
anon_umask=xxx
#<匿名用户创建目录>
anon_mkdir_write_enable=YES|NO
#<匿名用户下载>
anon_world_readable_only=YES|NO ##设定参数值为no表示匿名用户能够下载
#<匿名用户删除>
anon_other_write_enable=YES|NO
#<匿名用户使用的用户身份修改>
chown_uploads=YES
chown_username=student
#<最大上传速率>
anon_max_rate=102400
#<最大连接数>
max_clients=2
2)本地用户设定
local_enable=YES|NO ##本地用户登录限制
eg:
[kiosk@foundation41 Desktop]$ lftp 172.25.254.241 -u student
口令:
lftp student@172.25.254.241:~> cd /etc
cd: 登陆失败: 530 This FTP server is anonymous only. ##参数为local_enable=NO不容许本地用户登录
lftp student@172.25.254.241:~> lftp 172.25.254.241
lftp 172.25.254.241:~> ls
t`ls' at 0 [从新链接前延时: 24]
中断
lftp 172.25.254.241:~> quit
[kiosk@foundation41 Desktop]$ lftp 172.25.254.241 -u student
口令:
lftp student@172.25.254.241:~> ls ##530登录密码不正确
ls: 登陆失败: 530 Login incorrect.
lftp student@172.25.254.241:~> quit
write_enable=YES|NO ##本地用户写权限限制
eg:
[kiosk@foundation41 Desktop]$ lftp 172.25.254.241 -u student
口令:
lftp student@172.25.254.241:~> put /etc/passwd
put: Access failed: 553 Could not create file. (passwd) ##setenforce 0 解决
lftp student@172.25.254.241:~> put /etc/passwd
2358 bytes transferred
lftp student@172.25.254.241:~> put /etc/passwd
put: Access failed: 550 Permission denied. (passwd) ##550文件系统不容许这样作
#<本地用户家目录修改>
local_root=/directory
#<本地用户上传文件权限>
local_umask=xxx
#<限制本地用户浏览/目录>
全部用户被锁定到本身的家目录中
chroot_local_user=YES
chmod u-w /home/*
用户黑名单创建
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
用户白名单创建
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
#<限制本地用户登录>
vim /etc/vsftpd/ftpusers ##用户黑名单
vim /etc/vsftpd/user_list ##用户临时黑名单
用户白名单设定
userlist_deny=NO
/etc/vsftpd/user_list ##参数设定,此文件变成用户白名单,只在名单中出现的用户能够登录ftp
eg:
[kiosk@foundation41 Desktop]$ lftp 172.25.254.241
lftp 172.25.254.241:~> ls
drwxr-xr-x 2 0 0 6 Mar 07 2014 pub
lftp 172.25.254.241:/> cd pub/
lftp 172.25.254.241:/pub> ls
lftp 172.25.254.241:/pub> quit
[kiosk@foundation41 Desktop]$ lftp 172.25.254.241 -u student
口令:
lftp student@172.25.254.241:~> ls
lftp student@172.25.254.241:~> ls
lftp student@172.25.254.241:~> cd mnt/
cd: Access failed: 550 Failed to change directory. (/home/student/mnt)
lftp student@172.25.254.241:~> cd /home/student/
lftp student@172.25.254.241:~> ls
lftp student@172.25.254.241:~> cd /home/student/mnt
cd: Access failed: 550 Failed to change directory. (/home/student/mnt)
lftp student@172.25.254.241:~> cd /etc
lftp student@172.25.254.241:/etc> quit
12 anonymous_enable=YES ##容许匿名用户登录
13 #
14 # Uncomment this to allow local users to log in.
15 # When SELinux is enforcing check for SE bool ftp_home_dir
16 local_enable=YES ##容许本地用户登录
17 #
18 # Uncomment this to enable any form of FTP write command.
19 write_enable=YES
20 #
21 # Default umask for local users is 077. You may wish to change this to 022,
22 # if your users expect that (022 is used by most other ftpd's)
23 local_umask=022
24 #
25 # Uncomment this to allow the anonymous FTP user to upload files. This only
26 # has an effect if the above global write enable is activated. Also, you wil l
27 # obviously need to create a directory writable by the FTP user.
28 # When SELinux is enforcing check for SE bool allow_ftpd_anon_write, allow_f tpd_full_access
29 anon_upload_enable=YES ##容许上传
500权限过大