##################第六單元文本處理工具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權限過大