作业第二周
- 总结学过的权限,属性及ACL相关命令及选项,示例。
文件的权限有三类,分别是-r:读-w:写-x执行
常见的文件权限组合,---0,r4,r-x5,rw6,rwx7
setfacl -m u:admin:- 文件名:控制用户zhang对该文件无任何权限,如果需要:后面加rwx
setfacl -b 文件名:清楚acl权限
2.结合vim几种模式,学会使用vim几个常见操作。
普通模式:
1.普通模式,默认模式,可以实现移动光标,剪切/粘贴文本
i insert, 在光标所在处输入
I 在当前光标所在行的行首输入
a append, 在光标所在处后面输入
A 在当前光标所在行的行尾输入
o 在当前光标所在行的下方打开一个新行
O 在当前光标所在行的上方打开一个新行
h: 左
l: 右,小写字母
j: 下
k: 上
w:下一个单词的词首
e:当前或下一单词的词尾
b:当前或前一个单词的词首
H:页首
M:页中间行
L:页底
0 跳转至行首
$ 跳转至行尾
G 最后一行
1G, gg 第一行d$ 删除到行尾
d0 删除到行首
d$ 删除到行尾
插入模式:编辑文本
扩展模式:3.扩展命令(extended command )或命令(末)行模式:保存,退出等
w 写(存)磁盘文件
wq写入并退出
x 写入并退出
X 加密
q 退出
q!不存盘退出,即使更改都将丢失
r filename 读文件内容到当前文件中
w filename 将当前文件内容写入另一个文件
!command 执行命令
r!command 读入命令的输出
地址定界格式
1.具体第#行,例如2表示第2行
$ #最后一行
/pattern/ #从当前行向下查找,直到匹配pattern的第一行,即:正则表达式
在扩展模式下按:s/file1/file2/g:把file1全局替换为file2
C #删除当前光标到行尾,并切换成插入模式,相当于c$
1)如何打开文件。并在打开文件(命令模式)之后如何退出文件。
vim----文件路径---文件名 退出: :q 不保存 :wq保存退出
2)打开文件(命令模式)之后,进入插入模式。并在插入模式中如何回到打开文件的状态(命令模式),并在命令模式之后如何退出文件。
按i进入插入模式,按esc回到命令模式, :q 不保存 :wq保存退出
3)打开文件(命令模式)之后,进入插入模式,编写一段话,"马哥出品,必属精品", 之后从插入模式中如何回到打开文件的状态(命令模式),并在命令模式之后如何退出文件。
vim /test.txt --- 按i --- echo "马哥出品,必属精品" ---按ecs回到打开文件的状态(命令模式):wq保存退出
4)使用cat命令验证文件内容,是刚刚自己写的内容。
cat ---文件路径---test.txt
5)(可选),命令模式下,光标在单词,句子上进行前后,上下跳转。行复制粘贴。行删除。
H左L右J下K上,行复制yy,粘贴p,删除dd
3. 总结学过的文本处理工具,文件查找工具,文本处理三剑客, 文本格式化命令(printf)的相关命令及选项,示例。
文本处理工具
cat
cut
sort
tail
文件查找工具
find
find -name 文件名 #查找文件
find -type f # #查找普通文件 示例:find /home/123/ -type f
文本处理三剑客
grep
grep
--color=auto 对匹配到的文本着色显示
-m # 匹配#次后停止
-v 显示不被pattern匹配到的行,即取反
-i 忽略字符大小写
-n 显示匹配的行号
-c 统计匹配的行数
-o 仅显示匹配到的字符串
-q 静默模式,不输出任何信息
-e 实现多个选项间的逻辑or关系,如:grep –e ‘cat ' -e ‘dog' file
-w 匹配整个单词
-E 使用ERE,相当于egrep
-F 不支持正则表达式,相当于fgrep
-P 支持Perl格式的正则表达式
-f file 根据模式文件处理
-r 递归目录,但不处理软链接
-R 递归目录,但处理软链接
用grep取分区利用率:df -h |grep '^/dev/sd'|tr -s ' ' %|cut -d% -f5
sed
-n 不输出模式空间内容到屏幕,即不自动打印
-e 多点编辑
-f FILE 从指定文件中读取编辑脚本
-r, -E 使用扩展正则表达式
查找替代
sed 's/原字符串/新字符/'
4. 总结文本处理的grep命令相关的基本正则和扩展正则表达式。(见上题)
5. sed将文件test中第50行中的helloworld改为nihao sed -i '50s/hello/nihao/'
8.删除文件每行的第一个字符。sed -i 's/.//' test.txt
9.删除文件每行的第二个字符。sed -r 's/(.)(.)(.*)/\2/g' passwd.bak
10.删除文件每行的最后一个字符。sed -i 's/.$//' passwd.bak
11.删除文件每行的倒数第二个字符。sed -r 's/(.*)(.)(.)/\1\3/g' passwd.bak
12. 总结变量命名规则,不同类型变量(环境变量,位置变量,只读变量,局部变量,状态变量)如何使用。
环境变量:生效范围为当前shell进程及其子进程 name='lisi' $name
位置变量:在bash shell中内置的变量, 在脚本代码中调用通过命令行传递给脚本的参数
$1, $2, ... 对应第1个、第2个等参数
$0 命令本身,包括路径
$* 传递给脚本的所有参数,全部参数合为一个字符串
$@ 传递给脚本的所有参数,每个参数为独立字符串
$# 传递给脚本的参数的个数
只读变量:只读变量:只能声明定义,但后续不能修改和删除,即常量
readonly name
13. 通过shell编程完成,30鸡和兔的头,80鸡和兔的脚,分别有几只鸡,几只兔?
read -p "请输入头的数量: " HEAD
read -p "请输入脚的数量: " FOOT
RABBIT=$[FOOT/2-HEAD]
CHOOK=$[HEAD-RABBIT]
echo "兔子: " $RABBIT
echo "鸡: " $CHOOK
14.结合编程的for循环,条件测试,条件组合,完成批量创建100个用户
1)for遍历1..100
2)先id判断是否存在
3)用户存在则说明存在,用户不存在则添加用户并说明已添加。
#!/bin/bash
#批量创建100个用户
for id in {1..100};do
user_id=$id
if id user$user_id &> /dev/null;then
echo "该用户已存在"
else
useradd user$id
pass=`cat /dev/urandom | tr -dc '[:alnum:]'| head -c8`
echo $pass | `passwd --stdin user$id` &> /dev/null
echo user$id : $pass >> /home/123/zhang/passwd.txt
echo "user$id is create"
fi
done
浙公网安备 33010602011771号