Linux运维周作业二(6.10-6.16)

就业班第二周作业:

1. 总结学过的文本处理工具,文件查找工具,文本处理三剑客, 文本格式化命令(printf)的相关命令及选项,示例。

搭建测试环境:

[13:28:28 root@Rocky851 ~]#head -n20 /var/log/messages > test01

[13:47:19 root@Rocky851 ~]#head -n30 /var/log/messages > test02

一、文本处理工具:

①打开文本:nano   vi   vim

vim命令相关选项及示例

+#:打开文件后,让光标处于第#行的行首,+默认行尾

    示例:[13:33:48 root@Rocky851 ~]#vim + test01

    [13:34:23 root@Rocky851 ~]#vim +3 test01

+/PATTERN:让光标处于第一个被PATTERN匹配到的行行首

    示例:  [13:37:46 root@Rocky851 ~]#vim +/Linux test01

-b file 二进制方式打开文件

    示例:[13:40:17 root@Rocky851 ~]# vim -b test01

-d file1 file2 ... 比较多个文件,相当于vimdiff

示例:[13:47:35 root@Rocky851 ~]#vim -d test01 test02

-m file 只读打开文件

示例:[13:48:49 root@Rocky851 ~]# vim -m test01

-e file 直接进入ex模式,相当于执行ex file

示例:[13:49:43 root@Rocky851 ~]#vim -e test01

-y file Easy mode 直接可以操作文件,ctrl+o wq|q!保存退出和不保存退出

示例:[13:51:21 root@Rocky851 ~]# vim -y test01

②查找并替换

s/要查找的内容/替换为的内容/修饰符

修饰符:

i    #忽略大小写    

g    #全局替换,默认情况下,每一行只替换第一次出现    

gc    #全局替换,每次替换前询问

③查看文本:cat   

 [选项]

-E:显示结束符$    [14:18:15 root@Rocky851 ~]#cat -e test01

-A:显示所有控制符    [14:18:26 root@Rocky851 ~]#cat -A test01

-n:对显示出的每一行进行编号    [14:18:50 root@Rocky851 ~]#cat -n test01

-b:非空行编号    [14:19:23 root@Rocky851 ~]#cat -b test01

-s:压缩连续的空行成一行    [14:19:38 root@Rocky851 ~]#cat -s test01

查看文本并显示行号:nl    [14:19:54 root@Rocky851 ~]#nl test01

逆向显示文本内容:tac    [14:20:14 root@Rocky851 ~]#tac test01

同一行的内容逆向显示:rev    [14:20:28 root@Rocky851 ~]#rev test01

分页查看:more    [14:21:09 root@Rocky851 ~]#more /var/log/messages

分页查看:less    [14:21:23 root@Rocky851 ~]# less /var/log/messages

显示文本前面行:head    [14:22:10 root@Rocky851 ~]#head test01

显示文本后面行:tail    [14:22:32 root@Rocky851 ~]#tail test01

抽取文本列:cut    

选项:-d :指明分隔符,默认tab

-f #:第#个字段;#,#[,#]:离散的多个字段;#-#:连续的多个字段    

[14:22:58 root@Rocky851 ~]#cut -d: -f1,3-5,7 /etc/passwd

-c 按字符切割    

--output-delimiter=STRING指定输出分隔符

合并多个文件:paste    [14:27:46 root@Rocky851 ~]#paste test01 test02

文本数据统计:wc    [14:28:58 root@Rocky851 ~]# wc test01

文本排序:sort    

-r    执行反方向(由上至下)整理

-R    随机排序

-n    执行按数字大小整理

-h    人类可读排序,如:2K 1G

-f    忽略大小写

-u    去重

-t    c选项使用c作为字段界定符

-k # 选项按照使用c字符分隔的#列来整理能够使用多次

比较文件:diff和patch

去重:uniq

-c:显示每行重复出现的次数

-d:仅显示重复过的行

-u:仅显示不曾重复的行

文件查找工具:locate    find   

locate常用选项:

-i    不区分大小写的搜索

-n    N    只列举前N个匹配的项目

-r        使用基本正则表达式

find [OPTION] ...[查找路径] [查找条件] [处理动作]

①指定搜索目录层级

-maxdepth level 最大搜索目录深度,指定目录下的文件为第1级

-mindepth level    最小搜索目录深度

[20:24:30 root@Rocky851 ~]#find /proc -maxdepth 2 -mindepth 2

②对每个目录先处理目录内的文件,再处理目录本身

-depth:[20:24:30 root@Rocky851 ~]#find /var/log -depth

③根据文件名和inode查找

-name

④根据属主、属组查找

-user    #查找属主为指定用户(UID)的文件

-group    #查找属主为指定组的(GID)文件

⑤根据文件类型查找

-type:文件类型有f普通文件,d目录文件,l符号链接文件,s套接字文件,b块设备文件,c字符设备文件,p管道文件

⑥根据文件大小来查找

-size

#UNIT    表示(-1,#]

-#UNIT    表示[0,#-1]

+#UNIT    表示(#,∞)

⑦根据时间戳

以天为单位

-atime

#  [#,#+1)

+# [#+1,∞]

-# [0,#)

-mtime

-ctime

以分钟为单位

-amin

-mmin

-cmin

根据权限查找

-perm

文本处理三剑客:grep    sed    awk 

grep 选项 表达式 文件

常见选项:

--color-auto    对匹配到的文本着色显示

-m  #    匹配到#次后停止

-v    显示不被表达式匹配到的行,即取反

-i    忽略字符大小写

-n    显示匹配的行号

-c    统计匹配的行数

-o    仅显示匹配到的字符串

-q    静默模式,不输出任何信息

-A  #    后#行

-B  #    前#行

-C  #  前后各#行

-e    实现多个选项间的逻辑or关系

-w    匹配整个单词

-E    相当于egrep

-F    不支持正则表达式,相当于fgrep

-P    支持perl格式的正则表达式

-f    file    根据模式文件处理

-r    递归目录,但不处理软链接

-R    递归目录,但处理软链接

[21:03:13 root@Rocky851 ~]#ifconfig eth0 | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}'|head -n1

printf格式化输出

常用格式替换符

%s    字符串

%d,%i    十进制整数

%f    浮点格式

%c    ASCII字符,即显示对应参数的第一个字符

%b    相对应的参数中包含转义字符时,可以使用此替换符进行替换,对应的转义字符会被转义

%o    八进制值

%u    不带正负号的十进制

%x    十六进制(a-f)

%X    十六进制(A-F)

%%    表示%本身

常用转义字符

\a    警告字符,通常为ASCii的BEL字符

\b    后退

\f    换页

\n    换行

\r    回车

\t    水平制表符

\w    垂直制表符

\    表示\本身

2. 总结文本处理的grep命令相关的基本正则和扩展正则表达式。

基本正则表达式

字符匹配

.    匹配任意单个字符(除了\n),可以是一个汉字或其他国家的文字

[]    匹配指定范围内的任意单个字符

[^]    匹配指定范围外的任意单个字符

[21:03:17 root@Rocky851 ~]#ls /etc/ | grep 'rc[.0-6].'

匹配次数

*    匹配前面的字符任意次,包括0次,贪婪模式:尽可能长的匹配

.*    任意长度的任意字符

\?    匹配其前面的字符出现0次或1次,即:可有可无

\+    匹配其前面的字符出现最少1次

\{n\}    匹配前面的字符n次

\{m,n\}    匹配前面的字符至少m次,至多n次

\{,n\}    匹配前面的字符至多n次

\{n,\}    匹配前面的字符至少n次

[21:18:16 root@Rocky851 ~]#echo /etc/ |grep "/etc/\?"

位置锚定

^    行首锚定,用于模式的最左侧

$    行尾锚定,用于模式的最右侧

^PATTERN$    用于模式匹配整行

^$    空行

扩展正则表达式   -E    基本正则表达式本该带\的去掉

3. 总结变量命名规则,不同类型变量(环境变量,位置变量,只读变量,局部变量,状态变量)如何使用。

变量命名规则:区分大小写,不能使程序中的保留字和内置变量,只能使用数字,字母以及下划线,且不能以数字开头,注:不支持“-”,用英文单词命名,不要用简写,变量名大写,局部变量小写,函数名小写,大驼峰StudentFirstName,小驼峰studentFirstName,下划线student_name

环境变量:可以使子进程(包括孙子进程)继承父进程的变量,但是无法让父进程使用子进程的变量,一旦子进程修改其父进程继承的变量,将会新的值传递给孙子进程,一般只在系统配置文件中使用,在脚本中较少使用

声明变量:export name=VALUE

declare -x name=VALUE

变量引用:$name   或    ${name}

删除变量:unset name

只读变量:只能声明定义,后续不能修改删除,即常量

声明变量:readonly name

declare -r name

位置变量:在bash shell中内置的变量,在脚本代码中调用通过命令行传递给脚本的参数

$1,$2...对应第1个,第2个参数

$0    命令本身,包括路径

$*    传递给脚本的所有参数,全部参数合为一个字符串

$@    传递给脚本的所有参数,每个参数为独立字符串

$#    传递给脚本参数的个数

清空所有位置变量:set --

4. 通过shell编程完成,30鸡和兔的头,80鸡和兔的脚,分别有几只鸡,几只兔?

[22:12:26 root@Rocky851 ~]#cat ChickenRabbit.sh

#!/bin/bash

HEAD=$1

FOOT=$2

RABBIT=$(((FOOT-HEAD-HEAD)/2))

CHICKEN=$[HEAD-RABBIT]

echo RABBIT:$RABBIT

echo CHICKEN:$CHICKEN

[22:11:30 root@Rocky851 ~]#bash ChickenRabbit.sh 30 80

RABBIT:10

CHICKEN:20

5. 结合编程的for循环,条件测试,条件组合,完成批量创建100个用户,

1)for遍历1..100

2)先id判断是否存在

3)用户存在则说明存在,用户不存在则添加用户并说明已添加。

批量创建用户脚本:

#!/bin/bash

for i in {1..100};do

    id user$i &> /dev/null && echo user$i is exist || { useradd user$i;echo user$i is created;}

done

批量创建账号

批量删除用户脚本:

#!/bin/bash

for i in {1..100};do

userdel user$i

      rm -rf /home/user$i /var/spool/mail/user$i && echo "user$i is deltele"

done

批量删除用户

6. 磁盘存储术语总结: head, track, sector, sylinder.

head:磁头 磁头数=盘面数

track:磁道 磁道=柱面数

sector:扇区,512bytes

cylinder:柱面     1柱面=512*sector/track*head数=512*63*255=7.84M

7. 总结MBR,GPT结构。

MBR分区结构:主分区和逻辑分区

主引导记录MBR组成:

主引导程序:负责从活动分区中装载,并运行系统引导程序

数据区:出错信息数据区,偏移地址0089H--00E1H为出错信息,00E2H--01BDH全为0字节

分区表:含4个分区项,偏移地址01BEH--01FDH,每个分区表项长16个字节,共64字节为分区项1,分区项2,分区项3,分区项4

结束标志:结束标志字,偏移地址01FE--01FF的2个字节值为结束标志55AA

GPT分区结构:GPT头,分区表,GPT分区,备份区域

8. 总结学过的分区,文件系统管理,SWAP管理相关的命令及选项,示例

fdisk相关命令及选项示例

[root@zhao ~]# fdisk -l /dev/sda                            查看是MBR分区还是GPT分区

 parted相关命令及选项示例

[root@zhao ~]# parted -l                                             列出所有硬盘分区信息

[root@zhao ~]# parted /dev/sdb print                        

 mkfs相关命令及选项示例

-t     {ext2|ext3|ext4|xfs}

-b    {1024|2048|4096}

-L    'LABEL'

-j    相当于-t ext3, mkfs.ext3

 tune2fs 相关命令及选项示例

[root@zhao ~]# tune2fs -l /dev/sdb

xfs_info 相关命令及选项示例

[root@zhao ~]# xfs_info /dev/sdb    显示已挂载xfs文件系统信息

fsck 相关命令及选项示例

-a    自动修复

-r    交互式修复错误

fsck -t FS_TYPE    文件系统检测修复(注:一定不要在挂载状态下执行命令修复,FS_TYPE一定要与分区上文件类型相同)

mount 相关命令及选项示例

[root@zhao ~]# mount /dev/sdb /mnt

添加新的挂载项,需要执行命令生效:[root@zhao ~]# mount -a

umount 相关命令及选项示例

[root@zhao ~]# umount /mnt

swapon 相关命令及选项示例

-a    激活所有交换分区    [root@zhao ~]# swapon -a

-p    PRIORITY  指定优先级(-1到32767之间),值越大,优先级越高

swapoff 相关命令及选项示例

禁用swap分区:[root@zhao ~]# swapoff -a

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容