一、总结学过的权限,属性及ACL相关命令及选项
chown 命令可以修改文件的属主,也可以修改文件属组:
修改文件的属主:chown jose a1.txt;chown 1000 a4.txt
同时修改文件的属主,属组:chown jose. a2.txt;chown jose: a3.txt;chown jose:tom c1.tx
修改属组:chown :jose b2.txt;chown .1000 b3.txt
chgrp 命令可以只修改文件的属组:chgrp jose f1.txt
文件权限:
属主,属组,其它用户的读,写,执行权限。
修改文件权限chmod:
修改f2.txt文件属主可读,属组可写,其它用户可执行权限。
chmod u=r,g=w,o=x f2.txt
修改a1.txt文件属主可读写,属组可读,其它用户可读权限。
chmod 644 a1.txt
修改目录权限:
去掉dir1目录所有的权限
chmod a= dir1/
目录dir1加上属主读权限
chmod u+r dir1
Linux文件系统上的特殊权限:
3个特殊权限:分别是 SUID, SGID,Sticky,这三个特殊权限独⽴于rwx权限体系
二、结合vim几种模式,学会使用vim几个常见操作。
1. vim f1.txt打开文件后,按冒号:输入q,不保存退出。
2. vim f1.txt打开文件后, 按i,I,a,A,o,O按键,进入插入模式,按esc键后,按冒号:输入q,不保存退出。
3. vim f1.txt打开文件后, 按i,I,a,A,o,O按键,进入插入模式,输入文件内容"马哥出品,必属精品",按esc键后,按冒号:输入wq,保存退出。
4. cat f1.txt
5. 命令模式下,光标在单词,句子上进行前后,上下跳转。行复制粘贴。行删除
w #下一个单词的词首
e #当前或下一单词的词尾
b #当前或前一个单词的词首Nw|Ne|Nb #一次跳N个单词
^ #跳转至行首的第一个非空白字符0 #跳转至行首
$ #跳转至行尾
NG|:N #跳转至指定行,N表示正整数,比如 10G,或在扩展命令模式下:10,都表示跳转到第10行
G #最后一行
gg|1G #第一行
) #下一句
( #上一句
三、总结学过的文本处理工具,文件查找工具,文本处理三剑客, 文本格式化命令(printf)的相关命令及选项,示例。
分页查看文件内容:more;cat /var/log/syslog | more
less 也可以实现分页查看文件:less -N /var/log/syslog
显示文本前面多少行内容:head
显示前3行的内容:head -n 3 /etc/passwd
查看文件倒数多少行内容:tail
cat f1.txt
nl,显示行号,相当于cat -b
nl /etc/passwd
tac:逆向显示文本内容,行倒序显示
seq 10 | tac
查看最后3行的内容:tail -n 3 f1.txt
查看从第3行开始到文件结束的内容:tail -n +3 f1.txt
按列抽取文本: cut
ifconfig ens33 | head -n 2 | tail -n 1 | tr -s " " "%" | cut -d"%" -f3
收集文本统计数据 wc
wc 命令可用于统计文件的行总数、单词总数、字节总数和字符总数,可以对文件或STDIN中的数据统计
显示行数
wc -l title.txt
不显示第一行
df | tail -n $(echo `df | wc -l`-1|bc)
文本排序 sort
sort -nr seq.txt
统计日志访问量
cut -d" " -f1 /var/log/nginx/access_log |sort -u|wc -l
去重 uniq
sort -n a.txt b.txt | uniq -c
文件查找:
非实时查找(数据库查找):locate
更新数据库
updatedb
locate test.txt
locate conf
find 是实时查找工具,通过遍历指定路径完成文件查找:
find *.txt
仅搜索第二层目录
find /etc/ -maxdepth 2 -mindepth 2
四、总结文本处理的grep命令相关的基本正则和扩展正则表达式
文本搜索工具:grep
grep root /etc/passwd
cat /etc/passwd | grep root
取前3行:
grep -m 3 bin /etc/passwd
取反,取不匹配的行
grep -v nologin /etc/passwd
grep -v "#" /etc/fstab
显示匹配的行号
grep -n bash /etc/passwd
仅显示匹配到的内容
grep -o root /etc/passwd
静默模式,不输出任何信息,结果要从变量$?拿
grep -q root /etc/passwd
echo $?
显示匹配root的行或匹配 bash 的行
grep -e root -e bash /etc/passwd
显示匹配root的行且匹配 bash 的行
grep root /etc/passwd | grep bash
从文件读取匹配规则
grep -f test.txt /etc/passwd
命令行展开
grep `whoami` /etc/passwd
grep $(whoami) /etc/passwd
echo Linux123 | grep $(uname)
变量展开
grep "$USER" /etc/passwd
匹配空格
echo "1 2 3" | grep "[[:blank:]]"
匹配非空格
echo "1 2 3" | grep "[^[:blank:]]"
排除所有空行和注释行
grep -v "^$" /etc/profile | grep -v "^#" /etc/profile
grep -v -e "^$" /etc/profile -v -e "^#" /etc/profile
grep -v '^$\|^#' /etc/profile
基本正则
echo -1 -2 123 -123 234 |grep '\-\?[0-9]\+'
扩展正则
echo -1 -2 123 -123 234 |grep -E '\-?[0-9]+'
sed 是行编辑器
sed [OPTION]... {script-only-if-no-other-script} [input-file]...
查找替换
s/pattern/replace/修饰符
修饰符
g 行内全局替换
p显示替换成功的行
w file将替换成功的行保存至文件中
I|i忽略大小写
script为空,默认输出内容
sed '' /etc/issue
关闭默认输出,script 为空,则无任何输出
sed -n '' /etc/issue
用 -n 选项关闭默认输出,script 中执行p命令
sed -n 'p' /etc/issue
输出第一行
sed -n '1p' /etc/issue
输出最后一一行
sed -n '$p' /etc/passwd
或
sed -e '2d' -e '4d' seq.log
多个script 写在一起
sed '2d;4d' seq.log
只显示非#开头的行
sed -n '/^#/!p' /etc/fstab
搜索替换和&(引用)
sed -n 's/root/ROOT/gp' /etc/passwd
sed -n 's/root/&er/gp' /etc/passwd
sed -n 's/r..t/&er/gp' /etc/passwd
五、sed将文件test中第50行中的helloworld改为nihao
第一种写法:sed -i "50s/helloworld/nihao/" test.txt
cat test.txt
第二种写法:sed -n "50s/helloworld/nihao/gp" test.txt
第三种写法:head -n 50 test.txt | tail -n 1 | sed -n "s/helloworld/nihao/p"
七、 在每一行后增加一空行,测试文件为cp /etc/passwd ~/,不要直接修改passwd文件。
sed -i "G" passwd
八、删除文件每行的第一个字符
sed "s/^.//" passwd
九、删除文件每行的第二个字符
sed -E "s/^(.)(.)/\1/" passwd
十、删除文件每行的最后一个字符
sed -Ei "s/.$//" passwd
十一、删除文件每行的倒数第二个字符
sed -Ei "s/(.)(.)$/\2/" passwd
十二、总结变量命名规则,不同类型变量(环境变量,位置变量,只读变量,局部变量,状态变量)如何使用。
变量命名法则
1.命名要求:(1)区分大小写 (2)不能使用程序中的保留字和内置变量:如:if, for (3) 只能使用数字、字母及下划线,且不能以数字开头,注意:不支持短横线 “ - ”,和主机名相反。
2.命名习惯:(1)见名知义,用英文单词命名,并体现出实际作用 (2)变量名大写 (3)局部变量小写 (4)函数名小写 (5)大驼峰StudentFirstName,由多个单词组成,且每个单词的首字母是大写,其它小写 (6)小驼峰studentFirstName ,由多个单词组成,第一个单词的首字母小写,后续每个单词的首字母 是大写,其它小写 (7)下划线: student_first_name
环境变量:可以使子进程(包括孙子进程)继承父进程的变量,但是无法让父进程使用子进程的变量
#声明并赋值 export name=VALUE declare -x name=VALUE
#或者分两步实现 name=VALUE export name
位置变量:在bash shell中内置的变量, 在脚本代码中调用通过命令行传递给脚本的参数
$1,$2,... #对应第1个、第2个等参数,shift [n]换位置
$0 #命令本身,包括路径
$* #传递给脚本的所有参数,全部参数合为一个字符串
$@ #传递给脚本的所有参数,每个参数为独立字符串
$# #传递给脚本的参数的个数
只读变量:只能声明定义,但后续不能修改和删除,即常量
声明只读变量:
readonly name
declare -r name
状态变量:退出状态码变量
$? #0代表成功,1-255代表失败
用户可以在脚本中使用以下命令自定义退出状态码,exit [n]
1. 脚本中一旦遇到exit命令,脚本会立即终止;终止退出状态取决于exit命令后面的数字。
2. 如果exit后面无数字,终止退出状态取决于exit命令前面命令执行结果。
3. 如果没有exit命令,即未给脚本指定退出状态码,整个脚本的退出状态码取决于脚本中执行的最后 一 条命令的状态码。
十三、通过shell编程完成,30鸡和兔的头,80鸡和兔的脚,分别有几只鸡,几只兔?
鸡20只,兔子10只
十四、结合编程的for循环,条件测试,条件组合,完成批量创建100个用户。
./useradd.sh