第二周作业

第二周作业

1.总结学过的权限,属性及ACL相关命令及选项
文件权限有读写执行三种

读用r表示,可以读取文件内容;数值4

写用w表示,可以修改文件内容; 数值3

执行用x表示,可以对文件执行操作,一般用于脚本文件执行权限 数值1


还有三种特殊权限,理解为用来给没有权限的用户或组使用相应的程序,间接进行其它操作管理。

SUID:作用在所有者权限上,用户可继承所有者的权限

SGID:作用在所属组上,用户可以继承所属组的权限

Sticky:作用在其他人上,用户可以继承其他人的权限

访问控制列表ACL是对文件增加独立的操作权限,实现灵活使用管理,应该是很少会用,有了解就好。
ACL命令常见用法

getfacl 文件名	#查看文件acl权限

setfacl -m u:用户名:权限	# 设置权限。如: setfacl -m u:hjz:- 1.txt	# 表示用户hjz对文件1.txt没有任何访问权限
2.结合vim几种模式,学会使用vim几个常见操作。

在这里插入图片描述

3.总结学过的文本处理工具,文件查找工具,文本处理三剑客, 文本格式化命令(printf)的相关命令及选项,示例。
3.1查看
cat 、nl(显示行号)、tac(逆向显示)、rev(同一行逆向显示)
3.2分页查看
more less
3.3显示文本前面
head 、tail 、cut(按列抽取文本)、paste(合并多个文件依次显示)
3.4分析文本的工具
文本数据统计:wc、文本排序:sort、去重:uniq、比较文件:diff patch vimdiff cmp
3.4文件查找工具
非实时查找 locate 实时查找find
3.5文本格式化命令
printf
4 . 总结文本处理的grep命令相关的基本正则和扩展正则表达式。

字符匹配(基本)

.     #匹配任意单个字符(除了\n),可以是汉字也可以是空格
[ ]   #匹配指定范围内的任意字符。例如[wang],[a-z],[A-Z]
[^]   #配置指定范围内的其他字符

匹配模式(基本)

*       #匹配前面字符的任意次,包括0次,贪婪模式尽可能匹配多的内容。
.*      #匹配任意长度的字符
\?      #匹配前面字符出现0次或者1次,可有可无
\+      #匹配前面字符至少出现一次,及大于等于1
\{n\}   #匹配前面字符n次
\{m,n\} #匹配前面字符至少m次,至多n次
\{,n\}  #匹配前面字符至多n次
\{n,\}  #匹配前面字符至少n次

位置锚定(基本)

^              #行首锚定,用于模式的最左侧
$              #行尾锚定,用于模式的最右侧
^PATTERN$      #用于模式匹配整行
^$             #空行
^[[:space]]*$  #空白行
\<\b       #词首锁定,用于单词模式的最左侧
\>\b       #词尾锁定,用于单词模式的最右侧
\<PATTERN>\    #匹配整个单词。单词是由,字母,数字和下划线组成

分组

()      #分组
|       #或
a|b     #a或b
C|cat   #C或者cat
(C|c)at # Cat或cat
  1. sed将文件test中第50行中的helloworld改为nihao
root@zzj:/data# sed -n '50p' test.txt 
helloworld
root@zzj:/data# sed -i '50s/helloworld/nihao/' test.txt 
root@zzj:/data# sed -n '50p' test.txt 
nihao
root@zzj:/data# 
5.在每一行后增加一空行
root@zzj:/data# sed 'G' passwd > passwd2
root@zzj:/data# cat -b passwd2 
     1	root:x:0:0:root:/root:/bin/bash

     2	daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin

     3	bin:x:2:2:bin:/bin:/usr/sbin/nologin

     4	sys:x:3:3:sys:/dev:/usr/sbin/nologin

     5	sync:x:4:65534:sync:/bin:/bin/sync

     6	games:x:5:60:games:/usr/games:/usr/sbin/nologin

     7	man:x:6:12:man:/var/cache/man:/usr/sbin/nologin

     8	lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
5.1删除文件每行的第一个字符。
root@zzj:/data# sed 's/^\(.\)\(.*\)/\2/' passwd > passwd3
root@zzj:/data# cat -b passwd3
     1	oot:x:0:0:root:/root:/bin/bash
     2	aemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
     3	in:x:2:2:bin:/bin:/usr/sbin/nologin
     4	ys:x:3:3:sys:/dev:/usr/sbin/nologin
     5	ync:x:4:65534:sync:/bin:/bin/sync
     6	ames:x:5:60:games:/usr/games:/usr/sbin/nologin
     7	an:x:6:12:man:/var/cache/man:/usr/sbin/nologin
     8	p:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
     9	ail:x:8:8:mail:/var/mail:/usr/sbin/nologin
    10	ews:x:9:9:news:/var/spool/news:/usr/sbin/nologin
5.2删除文件每行的第二个字符
root@zzj:/data# sed 's/^\(.\)\(.\)\(.*\)/\1\3/' passwd > passwd4
root@zzj:/data# cat -b passwd4
     1	rot:x:0:0:root:/root:/bin/bash
     2	demon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
     3	bn:x:2:2:bin:/bin:/usr/sbin/nologin
     4	ss:x:3:3:sys:/dev:/usr/sbin/nologin
     5	snc:x:4:65534:sync:/bin:/bin/sync
     6	gmes:x:5:60:games:/usr/games:/usr/sbin/nologin
     7	mn:x:6:12:man:/var/cache/man:/usr/sbin/nologin
     8	l:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
     9	mil:x:8:8:mail:/var/mail:/usr/sbin/nologin
5.3删除文件每行的最后一个字符
root@zzj:/data# sed 's/.$//' passwd > passwd5
root@zzj:/data# cat -b passwd5
     1	root:x:0:0:root:/root:/bin/bas
     2	daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologi
     3	bin:x:2:2:bin:/bin:/usr/sbin/nologi
     4	sys:x:3:3:sys:/dev:/usr/sbin/nologi
     5	sync:x:4:65534:sync:/bin:/bin/syn
     6	games:x:5:60:games:/usr/games:/usr/sbin/nologi
     7	man:x:6:12:man:/var/cache/man:/usr/sbin/nologi
     8	lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologi
     9	mail:x:8:8:mail:/var/mail:/usr/sbin/nologi
    10	news:x:9:9:news:/var/spool/news:/usr/sbin/nologi
5.4删除文件每行的倒数第二个字符
root@zzj:/data# sed 's/^\(.*\)\(.\)\(.\)/\1\3/' passwd >passwd6
root@zzj:/data# cat -b passwd6
     1	root:x:0:0:root:/root:/bin/bah
     2	daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologn
     3	bin:x:2:2:bin:/bin:/usr/sbin/nologn
     4	sys:x:3:3:sys:/dev:/usr/sbin/nologn
     5	sync:x:4:65534:sync:/bin:/bin/syc
     6	games:x:5:60:games:/usr/games:/usr/sbin/nologn
     7	man:x:6:12:man:/var/cache/man:/usr/sbin/nologn
     8	lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologn
     9	mail:x:8:8:mail:/var/mail:/usr/sbin/nologn
6.总结变量命名规则,不同类型变量(环境变量,位置变量,只读变量,局部变量,状态变量)如何使用。
6.1变量命名规则
代码解读复制代码命名要求:
	区分大小写
	不能使用程序的保留字和内置变量
	只能使用数字、字母及下划线,且不能以数字开头

命名习惯:
	用英文单词命名,体现出实际作用
	变量名大写
	局部变量小写
	函数名小写
	大驼峰StudentFirstName
	小驼峰studentFirstName
	下划线:student_first_name
6.2变量的定义和引用
ini代码解读复制代码变量的生效范围等标准划分变量类型
	普通变量:生效范围为当前shell进程;对当前shell以外的其它shell进程,包括当前shell的子进程无效
	环境变量:生效范围为当前shell进行及其子进程
	本地变量:生效范围为当前shell进程中某代码片段,通常指函数
name='root'	#字符串赋值给name
name="$USER"	#变量引用赋值
name=`COMMAND`	#命令引用
name=$(COMMAND)	#命令引用
[root@ubuntu2204 ~]# name="$USER"_123;echo $name
root_123
6.3环境变量

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

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

一般只在系统配置文件中使用,在脚本中较少使用 变量声明和赋值:

ini代码解读复制代码#声明并赋值
export name = VALUE
declare -x name=VALUE

#或者分两步实现
name=VLAUE
export name

显示所有的环境变量

bash代码解读复制代码env
printenv
export
declare -x

只读变量

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

声明只读变量

bash代码解读复制代码readonly name
declare -r name

查看只读变量

bash代码解读复制代码readonly [-p]
declare -r

范例

csharp代码解读复制代码[root@ubuntu2204 ~]# readonly testname="czx"
[root@ubuntu2204 ~]# echo $testname 
czx
[root@ubuntu2204 ~]# unset testname
bash: unset: testname: cannot unset: readonly variable
6.4位置变量

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

ruby代码解读复制代码$1,$2...        #对应脚本的第一个,第二个参数
$0              #命令本身,包括路径
$*              #传递给脚本的所有参数,全部参数合为一个字符串
$@              #传递给脚本的所有参数,每个参数为独立字符串
$#              #传递给脚本的参数的个数

清空所有位置变量

sql

代码解读
复制代码set --

范例:

bash代码解读复制代码[root@ubuntu2204 ~]# cat args.sh
echo "1st arg is $1"
echo "2st arg is $2"
echo "3st arg is $3"
#不写{}会解析成$1加0
echo "10st arg is ${10}"

echo "all arg is $*"

echo "arg numbers is $#"
[root@ubuntu2204 ~]# bash args.sh 123 321 1234
1st arg is 123
2st arg is 321
3st arg is 1234
all arg is 123 321 1234
arg numbers is 3

范例:∗和∗和@的区别

bash代码解读复制代码[root@ubuntu2204 ~]# cat arg-test.sh 
#!/bin/bash
echo 'This is $@'
for i in "$@";do
    echo $i;
done
echo 'This is $*'
for i in "$*";do
    echo $i;
done
[root@ubuntu2204 ~]# bash arg-test.sh {A..D}
This is $@
A
B
C
D
This is $*
A B C D
6.5状态变量

当我们浏览网页时,有时会看到404,503等错误信息就是状态码,shell中也有表示脚本执行状态的技术。

进程执行后,将使用变量$?存放状态码的相关数字,不同的值反应成功或失败

shell代码解读复制代码$?      #0表示成功,1-255表示失败

#脚本中用exit来定义状态码,脚本的状态码取决于最后一条命令或者exit后的数字
#脚本执行到exit就会立即终止
exit 123
7.通过shell编程完成,30鸡和兔的头,80鸡和兔的脚,分别有几只鸡,几只兔
#!/bin/bash
# 已知条件
total_heads=30
total_feet=80
# 解方程
y=$(( (total_feet - 2 * total_heads) / 2 ))
x=$(( total_heads - y ))
# 输出结果
echo "鸡是数量为: $x, 兔子的数量为: $y"

#终端输出结果
root@zzj:/data/code# bash chicken-rabbit.sh 
鸡的数量为: 20, 兔的数量为: 10
8.结合编程的for循环,条件测试,条件组合,完成批量创建100个用户,
#!/bin/bash
prefix="user"
for i in {1..100}; do
    username="${prefix}$(printf '%03d' $i)"
    if id "$username" &>/dev/null; then
        echo "User '$username' 用户已存在."
    else      
        sudo useradd -m "$username"
        echo "User '$username' 已创建."
    fi
done
#终端输出结果
root@lh:/data# bash user.sh 
User 'user001' 已创建.
、、、、
User 'user100' 已创建.

合,完成批量创建100个用户,

#!/bin/bash
prefix="user"
for i in {1..100}; do
    username="${prefix}$(printf '%03d' $i)"
    if id "$username" &>/dev/null; then
        echo "User '$username' 用户已存在."
    else      
        sudo useradd -m "$username"
        echo "User '$username' 已创建."
    fi
done
#终端输出结果
root@lh:/data# bash user.sh 
User 'user001' 已创建.
、、、、
User 'user100' 已创建.

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值