1、找出/etc/rc.d/init.d/functions文件中某单词后面跟一组小括号的行,形如:hello()。
# 使用egrep扩展正则表达式
# [:alpha:] # 表示任意大小写字母
# + # 表示匹配前面字符至少一次
# 由于centos7中/etc/rc.d/init.d/functions不存在,故创建本地文件进行测试
[hzz@8eff5a75ccba ~]$ cat > functions << EOF
> hello()
> hi
> 123
> 456()
> EOF
[hzz@8eff5a75ccba ~]$ egrep -o '[[:alpha:]]+\(\)' functions
hello()
[hzz@8eff5a75ccba ~]$
2、使用echo命令输出一个绝对路径,使用grep取出其基名;扩展:取出其路径名。
# 使用grep基本正则表达式
# [^] # 匹配指定范围外的任意单个字符
# \+ # 匹配其前面的字符至少1次
# \? # 匹配其前面的字符0或1次
# 最后使用cut处理以/结尾的情况
[hzz@8eff5a75ccba ~]$ echo /123/abc/456/|grep -o '[^/]\+/\?$'|cut -d'/' -f1
456
[hzz@8eff5a75ccba ~]$
3、找出ifconfig命令结果中的1-255之间数字。
# 使用egrep扩展正则表达式
# [] # 匹配指定范围内的任意单个字符
# \ # 匹配整个单词或数字
# | # 左边或者右边,不是按字符,是按整个字段
# 最后用sort进行排序,便于分析
[hzz@8eff5a75ccba ~]$ ifconfig|egrep -o '(\<[1-9]\>|\<[1-9][1-9]\>|\<[1-2][0-5][0-5]\>)'|sort -n
1
1
2
2
4
5
11
16
17
42
42
64
73
255
255
255
[hzz@8eff5a75ccba ~]$
4、查找当前系统上没有属主或属组的文件;进一步:查找当前系统上没有属主或属组,且最近3天内曾被访问过的文件或目录。
# 使用find相关参数
# -nouser 查找没有属主的文件;
# -nogroup 查找没有属组的文件;
# -atime [+|-]n 访问时间,单位:天;
# -n 时间区间为:0 <= time < n;
# 查找当前系统上没有属主或属组的文件
[hzz@huangzz6 ~]$ touch 123 456 789
[hzz@huangzz6 ~]$ sudo chown 123:456 789
[hzz@huangzz6 ~]$ sudo find / -nouser -nogroup -ls 2>/dev/null
4241474 0 -rw-rw-r-- 1 123 456 0 Feb 9 11:04 /home/hzz/789
[hzz@huangzz6 ~]$
# 查找当前系统上没有属主或属组,且最近3天内曾被访问过的文件或目录
[hzz@huangzz6 ~]$ mkdir 110
[hzz@huangzz6 ~]$ sudo chown 123:456 110
[hzz@huangzz6 ~]$ sudo find / -nouser -nogroup -atime -3 -ls 2>/dev/null
4241474 0 -rw-rw-r-- 1 123 456 0 Feb 9 11:04 /home/hzz/789
4241475 0 drwxrwxr-x 2 123 456 6 Feb 9 11:11 /home/hzz/110
[hzz@huangzz6 ~]$
5、查找/etc目录下大于1M,且类型为普通文件的所有文件。
# 使用find相关参数
# -size [+|-]nUNIT 常用单位(UNIT):k, M, G;
# +n 时间区间为:n+1 <= time < +∞;
# 由于/etc下没有大于1M的文件,从其他地方拷过去以便显示效果
[hzz@huangzz6 ~]$ sudo cp -a /lib64/libdb-4.7.so /etc/
[hzz@huangzz6 ~]$ sudo find /etc -type f -size +1M -ls
16795907 1492 -rwxr-xr-x 1 root root 1525560 Jan 11 18:40 /etc/libdb-4.7.so
[hzz@huangzz6 ~]$
6、查找/etc/init.d/目录下,所有用户都有执行权限,且其它用户有写权限的文件。
# 使用find相关参数
# -perm [/|-]MODE
# -MODE 每一类对象都必须同时拥有为其指定的权限标准;
[hzz@huangzz6 etc]$ sudo touch /etc/init.d/test
[hzz@huangzz6 etc]$ sudo touch /etc/init.d/test2
[hzz@huangzz6 etc]$ sudo chmod 753 /etc/init.d/test
[hzz@huangzz6 etc]$ sudo chmod 755 /etc/init.d/test2
[hzz@huangzz6 etc]$ sudo find /etc/init.d/ -perm -113 -ls
50334776 0 -rwxr-x-wx 1 root root 0 Feb 9 11:55 /etc/init.d/test
[hzz@huangzz6 etc]$
7、查找/etc目录下最近一周内其内容被修改过,且不属于root或hadoop的文件。
# 使用find相关参数
# -a 与;
# -o 或;
# -not 非,也可以使用!;
[hzz@huangzz6 ~]$ sudo chown hzz:hzz /etc/libdb-4.7.so
[hzz@huangzz6 ~]$ echo 123 > /etc/libdb-4.7.so
[hzz@huangzz6 ~]$ sudo find /etc -mtime -6 ! -user root ! -user hadoop -ls
16795907 4 -rwxr-xr-x 1 hzz hzz 4 Feb 9 11:40 /etc/libdb-4.7.so
[hzz@huangzz6 ~]$
8、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加*。
# 使用vim中的:s替换命令
cp -a /etc/rc.d/rc.sysinit /tmp/;
vim /tmp/rc.sysinit;
# 打开文件后执行以下命令
:%s/^\([[:space:]]\+.*\)/\*\1/g
:wq
9、删除/tmp/rc.sysinit文件中的以_开头,且后面跟了至少一个空白字符的行的_和空白字符。
# 使用vim中的:s替换命令
vim /tmp/rc.sysinit;
# 打开文件后执行以下命令
:%s/^\*[[:space:]]\+\(.*\)/\1/g
:wq
10、将/etc/yum.repos.d/CentOS-Media.repo文件中所有的enabled=0或gpgcheck=0的最后的0修改为1。
# 使用vim中的:s替换命令
vim /etc/yum.repos.d/CentOS-Media.repo;
# 打开文件后执行以下命令
:%s/\(\\|\\)=0/\1=1/g
:wq
11、每周2,4,6备份/var/log/messages文件至/backup/messages_logs/目录中,保存的文件名形如messages-20161202。
0 0 * * 2,4,6 cp -a /var/log/messages /backup/messages_logs/messages-$(date +%Y%m%d)
12、每天每两小时取当前系统/proc/meminfo文件中的所有以S开头的信息至/stats/memory.txt文件中。
* */2 * * * grep '^S' /proc/meminfo >> stats/memory.txt
13、写一个脚本创建10用户user10-user19;密码同用户名。
#!/bin/bash
[[ "$(whoami)" != "root" ]] && echo -e "\nPlease exec by root! \n" && exit 1
for (( i=10 ; i<=19 ; i++ ))
do
add_user=user${i}
add_passwd=${add_user}
if [[ $(id ${add_user} &> /dev/null) ]]
then
echo -e "\n${add_user} exist! \n"
else
useradd ${add_user}
echo "${add_passwd}"|passwd --stdin ${add_user}
fi
done
exit
相关笔记:(不与作业周期同步)
Vim编辑器
《Vim编辑器简介》
Bash变量、配置及测试运算
Bash变量、配置及测试运算简介
Linux下的文件查找
Linux下的文件查找