第二周作业-周泰民

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

第一部分:文本处理工具


1.cat:查看一个文件的内容并将其显示在屏幕上,cat后面可以不加选项,也可以加选项,如:-n(对显示出的每一行进行编号);-A(显示所有控制符);-b(非空行编号);-s(压缩连续的空行成一行);-E(显示行结束符$)

例:

[root@Rocky8 data]# echo '213123123' > test1.txt

[root@Rocky8 data]# echo '334324324' >> test1.txt

[root@Rocky8 data]# cat test1.txt

213123123

334324324

[root@Rocky8 data]# cat -n test1.txt

    1  213123123

    2  334324324

[root@Rocky8 data]# echo "" >> test1.txt

[root@Rocky8 data]# echo "" >> test1.txt

[root@Rocky8 data]# echo "" >> test1.txt

[root@Rocky8 data]# cat -n test1.txt

    1  213123123

    2  334324324

    3

    4

    5

[root@Rocky8 data]# echo "13213213" >> test1.txt

[root@Rocky8 data]# cat test1.txt

213123123

334324324

13213213

[root@Rocky8 data]# cat -sn test1.txt

    1  213123123

    2  334324324

    3

    4  13213213

2.tac:和命令cat一样,文件内容显示在屏幕上,只是先显示最后一行,然后显示倒数第二行,最后是第一行。但是tac好像不支持cat那些选项

例:

[root@Rocky8 data]# tac test1.txt

13213213



334324324

213123123

3.more:如果文件内容太多,cat看不了前面的文件内容,可以使用More命令查看文件,空格继续下一屏,Ctrl+b向上翻屏,Ctrl+F向下翻屏,Q键退出

4.less:作用和more差不多,比More功能强大些,安/然后输入一个字符串,回车,可以搜索这个字符串在文章中,N显示下一个。?也可以接字符串搜索,是从当前行向上搜索

5.head:用于显示文件的前10行内容。-n(代表显示文件的前几行,如果是-n 后是负数,表示从文件头取到倒数第负数位置前,)-c #(指定获取前#字节

例:

[root@Rocky8 data]# head -n 3 /etc/passwd

alt:x:7:0:halt:/sbin:/sbin/halt

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

operator:x:11:0:operator:/root:/sbin/nologin

6.tail:和head 类似,显示文件最后10行;-f选项常用,可以动态显示文件的最后10行。比如tail -f /var/log/messages可以动态实时查看文件中的内容。

例:

[root@Rocky8 data]# tail -n3 /etc/passwd

apache:x:48:1003:apache:/var/www:/sbin/nologin

mage:x:1002:1004::/home/mage:/bin/bash

www:x:1003:1005::/home/www:/bin/bash

7.nl:显示行号,相当于cat -b

[root@Rocky8 data]# nl test1.txt

    1  213123123

    2  334324324


    3  13213213

8.rev:将同一行的内容逆向显示

[root@Rocky8 data]# rev test1.txt

321321312

423423433

31231231

9.hexdump:查看非文本文件内容

例:

[root@Rocky8 data]# hexdump test1.txt

0000000 3132 3133 3332 3231 0a33 3333 3334 3432

0000010 3233 0a34 0a0a 310a 3233 3331 3132 0a33

0000020

10.cut:可以提取文本文件或STDIN数据的指定列。常用选项-d(指定分隔符,默认tab);-f #(第#个字段,例如:2)。#,#[,#]:离散的多个字段,例如1,3,6。#-#连续的多个字段,例如1-6。还可以混合使用,1-3,7;-c 按字符切割;--output-delimiter=STRING指定输出分隔符

例:

[root@Rocky8 data]# head -n 3 /etc/passwd | cut -d: -f1,3-4,7

alt:7:0:/sbin/halt

mail:8:12:/sbin/nologin

operator:11:0:/sbin/nologin

[root@Rocky8 data]# ifconfig ens160 | head -n2|tail -n1| tr -s " "|cut -d " " -f3

10.0.0.151

11.paste:合并多个文件同行号的列到一行 -d 分隔符:指定分隔符,默认用TAB;-s 所有行合成一行显示

例:

[root@Rocky8 data]# paste -d":" alpha.log seq.log

a:1

b:2

c:3

d:4

e:5

f:

g:

h:

[root@Rocky8 data]# paste -d":" -s alpha.log seq.log

a:b:c:d:e:f:g:h:

1:2:3:4:5:

12.wc:用于统计文件的行总数、单词数、字节总数和字符总数。可以对文件或STDIN中的数据统计。常用选项,-l(只计数行数);-w(只计数单词总数);-c(只计数字节总数);-m(只计数字符总数);-L(显示文件中最长行的长度)

例:

[root@Rocky8 data]# wc title.txt

3  6 30 title.txt

[root@Rocky8 data]# wc -l title.txt

3 title.txt

13.sort:文本排序,不改变原始文件。常用选项-r(执行反方向“由上至下”整理);-R随机排序;-n(执行按数字大小整理);-h(人类刻度排序,如:2K,1G);-f(忽略字符串中的字符大小写);-u(unique,合并重复项,即去重);-t c (选项使用c作为字段定界符);-k # (选项按照使用C字符分割的#列来整理能够使用多次)

例:

[root@Rocky8 data]# cut -d: -f1,3 /etc/passwd|sort -t: -k2 -nr | head -n3

nobody:65534

www:1003

mage:1002

[root@Rocky8 data]# cut -d" " -f 1 access_log | sort -u | wc -l

201

14.diff:比较两个文件之间的区别,没搞明白,忘了怎么回事了

15.patch:复制在其他文件中进行的改变。-b(选项来自动备份改变了的文件),忘了怎么用了

16.uniq:命令从输入中删除前后相接的重复行。常见选项,-c(显示每行重复出现的次数);-d(仅显示重复过的行);-u(仅显示不曾重复的行)

例:[root@Rocky8 data]# cut -d" " -f1 access_log | sort | uniq -c | sort -nr | head -n3

  4870 172.20.116.228

  3429 172.20.116.208

  2834 172.20.0.222

17.cmp:查看二进制文件的不同

第二部分:文件查找工具

(1)which命令:用来查找在PATH环境便令中出现的路径下的可执行文件,绝对路径。

root@ubuntu2023:~# which vi

/usr/bin/vi

root@ubuntu2023:~# which cat

/usr/bin/cat

(2)whereis命令:通过预先生成的一个文件列表库查找与给出的文件名相关的文件。-b(只查找二进制文件);-m(只查找帮助文件,man目录下的文件);-s(只查找源代码文件)

root@ubuntu2023:~# whereis ls

ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz

(3)locate:类似于whereis,需要安装mlocate才能用locate和updatedb命令,locate查询系统上预建的文件搜索数据库/var/lib/mlocate/mlocate.db,可用updatedb更新数据库,构建索引比较耗费资源。-i(不全邠大小写搜索);-n N(只列巨额前N个匹配目录)-r(使用基本正则表达式)

root@ubuntu2023:~# locate -n 3 conf

/boot/config-5.15.0-88-generic

/boot/config-5.15.0-89-generic

/boot/grub/i386-pc/configfile.mod

文件新创建和删除,无法马上更新Locate数据库

[root@Rocky8 data]# touch test11.log

[root@Rocky8 data]# locate test11.log

[root@Rocky8 data]# updatedb

[root@Rocky8 data]# locate test11.log

/data/test11.log

[root@Rocky8 data]# rm -f test11.log

[root@Rocky8 data]# locate test11.log

/data/test11.log

(4)find命令:是实时查找工具,通过遍历指定路径完成文件查找

工具特点:

查找速度略慢、精确查找、实时查找、查找条件丰富、可能只搜索用户具备读取和执行权限的目录

find【option】 ... 【查找路径】【查找条件】【处理动作】

查找路径:指定具体目标路径;默认为当前目录

查找条件:指定的查找标准,可以文件名、大小、类型、权限等标准;默认为支出指定路径下的所有文件

处理动作:对符合条件的文件做操作,默认输出至屏幕

使用方法如下:

1.指定搜索目录层级

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

-mindepth level 最小搜索目录深度

[root@Rocky8 data]# find /etc/ -maxdepth 2

2.根据文件名和inode查找

-name “文件名称”(支持使用glob:如*,?,[],【^】,通配符要加双引号引起来)

-iname “文件名称”(不区分字母大小写)

-inum n (按inode号查找)

-links n (连接数为n的文件)

[root@Rocky8 data]# find -name snow.png

./snow.png

[root@Rocky8 data]# find -iname SNOW.PNG

./snow.png

3.根据属主,属组查找

-user USERNAME 查找属主为指定用户的文件

-group GRPNAME 超找属组为指定组的文件

-uid UserID  查找属主为指定UID号的文件

-gid GroupID 查找属组为指定GID号的文件

-nouser  查找没有属主的文件

-nogroup 查找没有属组的文件

[root@Rocky8 home]# find /home/ -user wang

/home/wang

/home/wang/.mozilla

4.根据文件类型查找

-type TYPE   TYPE可以是以下形式:

f:普通文件;d:目录文件;l:符号链接文件;s:套接字文件;b:块设备文件;c:字符设备文件;p:管道文件

[root@Rocky8 ~]# find /data/ -type d -ls

135235301      4 drwxr-xr-x  3 wang    admins      4096 Dec 23 13:52 /data/

5.空文件或目录

-empty

[root@Rocky8 ~]# find /etc/ -type d -empty

6.组合条件

与:-a,默认多个条件是与关系,所以可以省略-a

或:-o

非:-not  !

[root@Rocky8 ~]# find /etc/ -type d -o -type l | wc -l

653

7.排除目录

#查找/etc/下,除/etc/security目录的其他所有.conf后缀的文件

[root@Rocky8 ~]# find /etc/ -path '/etc/security' -a -prune -o -name "*.conf"

[root@Rocky8 ~]# find /etc/ \( -path "etc/security" -o -path "etc/systemd" -o -path "/etc/dbus-1" \) -a -prune -o -name "*.conf"

8.根据文件大小来查找

-size [+|-] #UNIT :常用单位,K,M,G,c(byte),注意大小写敏感

#UNIT: #表示(#-1, #],如:6k 表示(5k,6k]

-#UNIT #表示[0,#-1],如:-6k 表示[0,5k]

+#UNIT #表示(#,∞),如:+6k 表示(6k,∞)

[root@Rocky8 ~]# find / -size +10G

/proc/kcore

9.根据时间戳查找

以天为单位

-atime [+|-] #

#  #表示【#,#+1】

+#  #表示【#+1,正无穷】

-# #表示【0,#】

-mtime

-ctime

以分钟为单位

-amin

-mmin

-cmin

10.根据权限查找

-perm [/|-] MODE

MODE精确权限匹配;/MODE 任何一类对象的权限中只要有一位匹配即可

-MODE 每一类对象都必须同时拥有指定权限,与关系

11.处理动作

-print :默认的处理动作,显示至屏幕

-ls : 类似于对查找到的文件执行 “ls -dils”命令格式输出

-fls file :找到的所有文件的长格式信息保存到指定文件中,相当于ls >file

-delete :删除查找到的文件,慎用!!

-ok COMMAND {} \ : 对查找到的每个文件执行由COMMAND指定的命令,每个文件执行之前,都会交互式用户确认

-exec COMMAND {} \ : 对查找到的每个文件执行由COMMAND指定的命令

{}:用于引用查找到的文件名自身

[root@Rocky8 ~]# find -name "*.conf" -exec cp {} {}.orig \;

第三部分.文本处理三剑客

(1)grep 命令

作用:文本搜索工具、根据用户指定的模式对目标文本逐行进行匹配检查;打印匹配到的行

格式:grep [options] pattern [file...]

常用选项:

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

-m  #  匹配#次后停止

-v 显示不被 pattern

-i 忽略字符大小写

-n 显示匹配的行号

-c统计匹配的行数

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

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

-A  -B  -C  #   after,后#行,berfore,前#行,context,前后各#行

-e 实现多个选项间逻辑Or关系,如:grep -e 'cat' -e 'dog' file

-w 匹配整个单词

-E 使用ERE,相当于egrep

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

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

-f 取出第二个文件中有第一个文件的行

例:

[root@Rocky8 ~]# grep `whoami` /etc/passwd

operator:x:11:0:operator:/root:/sbin/nologin

例:

[root@Rocky8 ~]# grep -c processor /proc/cpuinfo

2

例:

[root@Rocky8 data]# grep -f /data/f1.txt /data/f2.txt

b

c

1

例:分区利用率最大的值

[root@Rocky8 data]# df | grep '^/dev/sd' | tr -s ' ' % | cut -d% -f5 | sort -n| tail -1

29

[root@Rocky8 data]# df | grep '^/dev/sd' | grep -oE '\<[0-9]{,3}%'| tr -d % | sort -nr |head -n1

29

[root@Rocky8 data]# df | grep '^/dev/sd' |grep -oE '\<[0-9]{,3}%' | grep -oE '[0-9]+' | sort -nr | head -n1

29

例:哪个IP和当前主机连接数最多的前3位

[root@Rocky8 data]# ss -nt | grep "^ESTAB" | tr -s ' ' :| cut -d: -f6|sort| uniq -c | sort -nr | head -n3

例:连接状态统计:

[root@Rocky8 data]# ss -nta | grep -v '^sTATE'| cut -d " " -f1|sort -nr| uniq -c| sort

例:

[root@Rocky8 data]# grep -o 'r..t' /etc/passwd

root

r/ft

rypt

例:

[root@Rocky8 data]# ifconfig ens160 | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' | head -1

10.0.0.151

例:

[root@Rocky8 data]# grep -oE '[0-9]+' /data/age.txt | paste -s -d+ |bc

60


(2)sed命令:是行编辑器,从文件或管道中读取一行,处理一行,再读取一行,再处理一行,再输出一行,直到最后一行。

基本用法,格式:sed [option]  'script;script;...' [inputfile...]

常用选项:

-n 不输出模式空间内容到屏幕,即不自动打印

-e 多点编辑

-f FILE 从指定文件中读取编辑脚本

-r -E,使用扩展正则表达式

-i.bak 备份文件并原处编辑

-s 将多个文件视为独立文件,而不是单个连续的长文件流

SCRIPT格式:

‘地址命令’

1.不给地址,对全文进行处理

2.单地址,#:指定的行,$:最后一行

3.地址范围,#,#  从第几行到第几行 3,6  从第三行到第六行

#,+# 从第#行到+#行,3,+4 从第三行到第七行

4.步进:~   1~2  奇数行  2~2 偶数行

命令:

p 打印当前模式空间内容,追加到默认输出之后

Ip 忽略大小写输出

d 删除模式空间匹配的行,并立即启用下一轮循环

w file 保存模式匹配的行到指定文件

r file 读取指定文件的文本至模式空间中匹配到的行后

= 为模式空间中的行打印行号

!模式空间中匹配行取反操作

q 结束或退出sed

查找替换:

s/pattern/string/修饰符  

例:

[root@Rocky8 ~]# sed -n '1p' /etc/passwd

alt:x:7:0:halt:/sbin:/sbin/halt

例:

[root@Rocky8 ~]# ifconfig ens160 | sed -n '2p'

        inet 10.0.0.151  netmask 255.255.255.0  broadcast 10.0.0.255

[root@Rocky8 ~]# sed -n '$p' /etc/passwd

joe:x:1004:1006::/home/joe:/bin/bash

[root@Rocky8 ~]# sed -n "$[$(cat /etc/passwd | wc -l)-1]p " /etc/passwd

www:x:1003:1005::/home/www:/bin/bash

[root@Rocky8 ~]# ifconfig ens160 | sed -n '/netmask/p'

        inet 10.0.0.151  netmask 255.255.255.0  broadcast 10.0.0.255

[root@Rocky8 ~]# ifconfig ens160 | sed -n '/errors/p'

        RX errors 0  dropped 0  overruns 0  frame 0

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@Rocky8 ~]# df | sed -n '\/dev\/sd/p'

/dev/sda1            1038336  298384    739952  29% /boot

/dev/sdc            10218772      24  9678076  1% /logs

[root@Rocky8 ~]# seq 10 | sed -n '3,6p'

3

4

5

6

[root@Rocky8 ~]# seq 10 | sed -n '3,+4p'

3

4

5

6

7

[root@Rocky8 ~]# sed '/^#/d;/^$/d' /etc/httpd/conf/httpd.conf

例:

[root@Rocky8 data]# df |sed -En '/^\/dev\/sd/s@.* ([0-9]+)%.*@\1@p'

29

1

例:

[root@Rocky8 data]# sed -n 's/root/&superman/p' /etc/passwd

operator:x:11:0:operator:/rootsuperman:/sbin/nologin

[root@Rocky8 data]# sed -n 's/root/superman&/p' /etc/passwd

operator:x:11:0:operator:/supermanroot:/sbin/nologin

(3)AWK:报告生成器,格式化文本输出,模式扫描和处理语言,可以实现下面功能:

1.文本处理、2.输出格式化的文本报表 、3.执行算数运算、4.执行字符串操作

第一题第四部分:Printf 格式化输出

格式:printf "指定的格式" "文本1" "文本2".........

常用格式替换符

%s 字符串

%d %i 十进制整数

%f 浮点格式

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

说明:

%#s 中的数字代表此替换符中的输出字符串宽度,不足补空格,默认是右对齐,%-10s 表示10个字符宽,-表示左对齐

%03d 表示3位宽度,不足前面用0补全,超出位数原样输出

%.2f 中的2表示小数点后显示的小数位数

常用转义字符

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

\b后退

\f换页

\n 换行

\r 回车

\t 水平制表符

\v 垂直制表符

\ \本身

例:

1234[root@Rocky8 ~]# printf "%s" 1 2 3 4

1234[root@Rocky8 ~]# printf "%d" 1 2 3 4

1234[root@Rocky8 ~]# printf "%s\n" 1 2 3 4

1

2

3

4

[root@Rocky8 ~]# printf "%f\n" 1 2 3 4

1.000000

2.000000

3.000000

4.000000

[root@Rocky8 ~]# printf "%.2f\n" 1 2 3 4

1.00

2.00

3.00

4.00

[root@Rocky8 ~]# printf "(%s)" 1 2 3 4 ;echo

(1)(2)(3)(4)

[root@Rocky8 ~]# printf "%-10s %-10s %-4s %s \n" 姓名 性别 年龄 体重 小明 男 20 70 小红 女 18 50

姓名    性别    年龄 体重

小明    男        20  70

小红    女        18  50

welcomtomagedu[root@Rocky8 ~]# VAR="welcom to magedu";printf "\033[1;32m%s\033[0m\n" $VAR

welcom

to

magedu

[root@Rocky8 ~]# VAR="welcom to magedu";printf "\033[1;32m%s\033[0m\n" "$VAR"

welcom to magedu


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

例:

[root@Rocky8 ~]# grep `whoami` /etc/passwd

operator:x:11:0:operator:/root:/sbin/nologin

例:

[root@Rocky8 ~]# grep -c processor /proc/cpuinfo

2

例:

[root@Rocky8 data]# grep -f /data/f1.txt /data/f2.txt

b

c

1

例:分区利用率最大的值

[root@Rocky8 data]# df | grep '^/dev/sd' | tr -s ' ' % | cut -d% -f5 | sort -n| tail -1

29

[root@Rocky8 data]# df | grep '^/dev/sd' | grep -oE '\<[0-9]{,3}%'| tr -d % | sort -nr |head -n1

29

[root@Rocky8 data]# df | grep '^/dev/sd' |grep -oE '\<[0-9]{,3}%' | grep -oE '[0-9]+' | sort -nr | head -n1

29

例:哪个IP和当前主机连接数最多的前3位

[root@Rocky8 data]# ss -nt | grep "^ESTAB" | tr -s ' ' :| cut -d: -f6|sort| uniq -c | sort -nr | head -n3

例:连接状态统计:

[root@Rocky8 data]# ss -nta | grep -v '^sTATE'| cut -d " " -f1|sort -nr| uniq -c| sort

例:

[root@Rocky8 data]# grep -o 'r..t' /etc/passwd

root

r/ft

rypt

例:

[root@Rocky8 data]# ifconfig ens160 | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' | head -1

10.0.0.151

例:

[root@Rocky8 data]# grep -oE '[0-9]+' /data/age.txt | paste -s -d+ |bc

60

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

变量:变量表示命名的内存空间,将数据放在内存空间中,通过变量名引用,获取数据

命名要求:

(1)区分大小写

(2)不能使用程序中的保留字和内置变量:如if ,for

(3)只能使用数字、字母及下划线,且不能以数字开头,不支持短横线-,和主机名相反

命名习惯:

见名知意,用英文单词命名,体现出实际作用,不要用简写,如ATM

变量名大写

局部变量小写

函数名小写

大驼峰/小驼峰

下划线

变量定义和引用

普通变量:生效范围为当前shell进程,对当前shell之外的其他shell进程,包括当前shell的子shell进程均无效

环境变量:生效范围为当前shell进程及其子进程

本地变量:生效范围为当前shell进程中某代码片段,通常指函数


变量赋值:

name='value'

value可以是以下多种形式

直接字符串:name='root'

变量引用:name="$USER"

命令引用: name=`COMMAND`  或者 name=$(COMMAND)

例:

[root@Rocky8 ~]# TITLE='cto'

[root@Rocky8 ~]# echo $TITLE

cto

[root@Rocky8 ~]# echo i am $TITLE

i am cto

[root@Rocky8 ~]# echo "i am $TITLE"

i am cto

[root@Rocky8 ~]# echo 'i am $TITLE'

i am $TITLE

[root@Rocky8 ~]# NAME=$USER

[root@Rocky8 ~]# echo $NAME

root

[root@Rocky8 ~]# USER=`whoami`

[root@Rocky8 ~]# echo $USER

root

[root@Rocky8 ~]# TITLE=CTO

[root@Rocky8 ~]# TITLE+=:wang

[root@Rocky8 ~]# echo $TITLE

CTO:wang

[root@Rocky8 ~]# bash systeminfo.sh

----------------------------Host systeminfo-------------------------

HOSTNAME:      Rocky8.zhou.org

IPADDR:        10.0.0.151

OSVERSION:      Rocky Linux 9.2 (Blue Onyx)

KERNEL:        5.14.0-284.11.1.el9_2.x86_64

CPU:            Intel(R) Core(TM) i7-4770K CPU @ 3.50GHz

MEMORY:        1.7Gi

DISK:          200G

-------------------------------------------------------------------

[root@Rocky8 ~]#

环境变量:

可以使子进程(包括孙子进程)继承父进程的变量,但是无法让父进程使用子进程的变量

一旦子进程修改从父进程继承的变量,将会新的值传递给孙子进程

一般只在系统配置文件中使用,在脚本中较少使用

声明并赋值:

export name =VALUE

declare -x name =VALUE

或者分两步实现

name=VALUE

export name

变量引用:

$name

${name}

显示所有环境变量:

env   printenv  export   declare -x

查看指定进程的环境变量

[root@Rocky8 ~]# cat /proc/2186/environ

bash 内建环境变量

PATH   SHELL   USER   UID  HOME  PWD  SHLVL   LANG  MAIL  HOSTNAME  HISTSIZE _

例:

[root@Rocky8 ~]# cat /proc/2186/environ |tr '\0' '\n'


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

声明只读变量:

readonly name 

declare -r name

查看只读变量:

readonly [-p]

declare -r


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

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

$0 命令本身,包括路径

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

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

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

清空所有位置变量

set --

例:

[root@Rocky8 ~]# bash arg.sh {a..z}

1st arg is a

2st arg is b

3st arg is c

10st arg is j

11st arg is k

the number of arg is 26

all args are a b c d e f g h i j k l m n o p q r s t u v w x y z

all args are a b c d e f g h i j k l m n o p q r s t u v w x y z

the scriptname is arg.sh




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

[root@Rocky8 ~]# bash chook_rabbit.sh 30 80

RABBIT:10

CHOOK:20

[root@Rocky8 ~]# cat chook_rabbit.sh

#!/bin/bash

HEAD=$1

FOOT=$2

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

CHOOK=$[HEAD-RABBIT]

echo RABBIT:$RABBIT

echo CHOOK:$CHOOK

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

1)for遍历1..100

2)先id判断是否存在

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

[root@Rocky8 ~]# bash user.sh

user1 is created

user2 is created

user3 is created

[root@Rocky8 ~]# cat user.sh

#!/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


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

head:磁头,一个盘面对应一个磁头

track:磁道,盘面上每一圈就是一个磁道

sector:扇区,把每个磁道按512bytes大小再进行划分,就是扇区,每个磁道上的扇区数量是不一样的

cylinder:柱面,磁头移动的时候,是一起移动的,如果是6个盘面,则6个磁头对应的磁道是一致的,这就是柱面

7. 总结MBR,GPT结构。

MBR:1982年,使用32位表示扇区数,分区不超过2T

划分分区的单位:

CentOS 5 之前按柱面划分

CentOS 6 版本后可以按sector划分

MBR分区中一块硬盘最多有4个主分区,也可以3主分区+1扩展(N个逻辑分区)

MBR分区:主和扩展分区对应1--4 ,/dev/sda3 ,逻辑分区从5开始,/dev/sda5


GPT分区

GPT:支持128个分区,使用64位,支持8Z 64Z

使用128位UUID表示磁盘和分区,GPT分区表自动备份在头和尾两份,并有CRC校验位

UEFI硬件支持GPT,使得操作系统可以启动

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

fdisk, parted, mkfs, tune2fs, xfs_info, fsck, mount, umount, swapon, swapoff

fdisk, 

root@ubuntu2023:~# fdisk -l /dev/sda

Disk /dev/sda: 200 GiB, 214748364800 bytes, 419430400 sectors

Disk model: VMware Virtual S

Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disklabel type: gpt

Disk identifier: 8F752F8A-7F5E-4C8A-A493-B928C4BD5054

Device      Start      End  Sectors  Size Type

/dev/sda1    2048      4095      2048    1M BIOS boot

/dev/sda2    4096  4198399  4194304    2G Linux filesystem

/dev/sda3  4198400 419428351 415229952  198G Linux filesystem

parted, 

root@ubuntu2023:~# parted -l

Model: VMware, VMware Virtual S (scsi)

Disk /dev/sda: 215GB

Sector size (logical/physical): 512B/512B

Partition Table: gpt

Disk Flags:

Number  Start  End    Size    File system  Name  Flags

1      1049kB  2097kB  1049kB                    bios_grub

2      2097kB  2150MB  2147MB  ext4

3      2150MB  215GB  213GB

Model: Linux device-mapper (linear) (dm)

Disk /dev/mapper/ubuntu--vg-ubuntu--lv: 106GB

Sector size (logical/physical): 512B/512B

Partition Table: loop

Disk Flags:

Number  Start  End    Size  File system  Flags

1      0.00B  106GB  106GB  ext4

mkfs, 

[root@Rocky8 ~]# mkfs.ext4 /dev/sdb

mke2fs 1.46.5 (30-Dec-2021)

Creating filesystem with 5242880 4k blocks and 1310720 inodes

Filesystem UUID: c0571ef3-c9f6-4771-8d1a-37c4d0a27d69

Superblock backups stored on blocks:

32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,

4096000

Allocating group tables: done                           

Writing inode tables: done                           

Creating journal (32768 blocks): done

Writing superblocks and filesystem accounting information: done

tune2fs, 


[root@Rocky8 ~]# tune2fs -l /dev/sdc

tune2fs 1.46.5 (30-Dec-2021)

Filesystem volume name:  <none>

Last mounted on:          <not available>

Filesystem UUID:          bebb2205-e47e-48f8-97b2-d35d1926cd1b

Filesystem magic number:  0xEF53

Filesystem revision #:    1 (dynamic)

xfs_info, 

root@ubuntu2023:~# xfs_info /dev/sda

xfs_info: /dev/sda is not a valid XFS filesystem (unexpected SB magic number 0xeb639000)

Use -F to force a read attempt.

fsck, 


[root@Rocky8 ~]# fsck -a

fsck from util-linux 2.37.4

mount, 


[root@Rocky8 ~]# mkdir /sdb

[root@Rocky8 ~]# mount /dev/sdb /sdb

[root@Rocky8 ~]# lsblk /dev/sdb

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS

sdb    8:16  0  20G  0 disk /sdb

[root@Rocky8 ~]# df

Filesystem          1K-blocks    Used Available Use% Mounted on

devtmpfs                4096      0      4096  0% /dev

tmpfs                  896416      0    896416  0% /dev/shm

tmpfs                  358568    8656    349912  3% /run

/dev/mapper/rl-root  73364480 6213652  67150828  9% /

/dev/mapper/rl-home 133075472  967136 132108336  1% /home

/dev/sda1            1038336  298384    739952  29% /boot

/dev/sdc            10218772      24  9678076  1% /logs

tmpfs                  179280      52    179228  1% /run/user/42

tmpfs                  179280      36    179244  1% /run/user/0

/dev/sdb            20466256      24  19401272  1% /sdb

[root@Rocky8 ~]# lsblk /dev/sdb -f

NAME FSTYPE FSVER LABEL UUID                                FSAVAIL FSUSE% MOUNTPOINTS

sdb  ext4  1.0        c0571ef3-c9f6-4771-8d1a-37c4d0a27d69  18.5G    0% /sdb

[root@Rocky8 ~]#

umount, 

[root@Rocky8 ~]# lsblk /dev/sdb -f

NAME FSTYPE FSVER LABEL UUID                                FSAVAIL FSUSE% MOUNTPOINTS

sdb  ext4  1.0        c0571ef3-c9f6-4771-8d1a-37c4d0a27d69  18.5G    0% /sdb

[root@Rocky8 ~]# umount /dev/sdb

[root@Rocky8 ~]# lsblk /dev/sdb -f

NAME FSTYPE FSVER LABEL UUID                                FSAVAIL FSUSE% MOUNTPOINTS

sdb  ext4  1.0        c0571ef3-c9f6-4771-8d1a-37c4d0a27d69

swapon, 

swapoff

swapoff [options] []#常用选项-a|--all             #禁用 /proc/swaps 中的所有交换区

-v|--verbose         #显示过程 

 创建swap分区 

 #spec 参数

-L label             #要使用设备的标签

-U uuid               #要使用设备的 UUID

LABEL=label           #要使用设备的标签

UUID=uuid             #要使用设备的 UUID

device               #要使用设备的名称

filename             #要使用文件的名称

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,576评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,515评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,017评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,626评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,625评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,255评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,825评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,729评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,271评论 1 320
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,363评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,498评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,183评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,867评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,338评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,458评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,906评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,507评论 2 359

推荐阅读更多精彩内容

  • 第三周作业 1, 图文并茂说明 RAID0、RAID1、RAID10、RAID01、RAID5 等原理 1.1 R...
    叁白白白阅读 192评论 0 0
  • 1. 总结vim的三种模式切换,配置vimrc实现写脚本自动生成注释。1.模式 vim主要有三种模式,分别是命令模...
    学习且搬砖阅读 93评论 0 0
  • 一、一个完整计算系统的简要介绍硬件系统和软件系统共同构成了一个完整的计算机系统,硬件是指具有形的物理设备,包含主机...
    zhk_e847阅读 190评论 0 0
  • 一、总结vim的三种模式的切换,配置vimrc实现写脚本自动生成注释. 答:vim的三种模式有命令模式、插入模式和...
    早日开除老板阅读 47评论 0 0
  • 第一题. 总结计算机发展相关,并且总结服务器硬件相关知识。 1.第一代计算机(1946-1957)电子管时代 2....
    周泰民ztm阅读 59评论 0 0