每日一题20180326

一、问题

1.1 统计脚本执行时间

如何统计脚本执行的时间?

1.2 让rm命令失效

要求用命令rm删除文件时提示如下禁止使用rm的提示,并使该效果永久生效。

[root@oldboy oldboy]# rm -f passwd
Do not use rm command.

1.3 删除文件

删除/tmp/oldboy/下除passwd以外的其他文件。

1.4 打印

请打印/etc/passwd文件中的第2-5行

1.5 调换列

调换passwd文件里root位置和/bin/bash位置?即将所有的第一列和最后一列位置调换?

例:

默认:root:x:0:0:root:/root:/bin/bash
修改后:/bin/bash:x:0:0:root:/root:root

1.6 替换

把/tmp/oldboy目录及其子目录下所有以扩展名.txt结尾的文件中包含oldgirl的字符串全部替换为oldboy。

1.7 查找

查找/tmp/oldboy下所有7天以前以log结尾的大于1M的文件移动/tmp下

二、答案

2.1

# 说明
# real指命令从开始到结束的时间
# user指用于执行进程所花费的时间
# sys指在内核中执行系统调用所花费的时间,进程使用CPU的时间

2.2

echo 'alias rm="echo Do not use rm command."' >> /etc/profile
source /etc/profile

思路:通过设置rm别名实现

2.3

准备数据:

rm -rf /tmp/oldboy
mkdir /tmp/oldboy
cp /etc/passwd /tmp/oldboy/
touch /tmp/oldboy/tmp{1..5}.txt
touch /tmp/oldboy/tmp{1..5}.log
tree /tmp/oldboy/

答案:

# 使用xargs
find /tmp/oldboy/ -type f ! -name passwd | xargs rm -f
# 使用find参数
find /tmp/oldboy/ -type f ! -name passwd -exec rm -f {} \;

分析:

-type f 指定只查找文件
-name passwd 指定查找名为passwd,加!表示排除passwd
xargs 多行转1行
rm -f 强制删除

find的-exec参数
{} \;   这是固定写法

2.4

# awk
awk 'NR>1 && NR<6{print NR, $0}' /etc/passwd
# sed
sed -n '2,5p' /etc/passwd
# head/tail
head -5 /etc/passwd | tail -4

分析:

# awk
NR是awk的内置变量表示行数
# sed
参考 sed速查手册

2.5

awk -F: '{print $7FS$2FS$3FS$4FS$5FS$6FS$1}' /etc/passwd

分析:

FS是awk的内置变量表示列之间的分隔符

2.6

准备数据:

rm -rf /tmp/oldboy
mkdir /tmp/oldboy
touch /tmp/oldboy/{1..2}.txt
touch /tmp/oldboy/{1..2}.log
echo 'hello oldgirl' > /tmp/oldboy/1.txt
echo 'hello oldgirl' > /tmp/oldboy/2.txt
echo 'hello oldgirl' > /tmp/oldboy/1.log
echo 'hello oldgirl' > /tmp/oldboy/2.log
find /tmp/oldboy/ -type f | xargs -I {} cat {}

答案

find /tmp/oldboy/ -type f -name '*.txt' | xargs sed -i 's/oldgirl/oldboy/g'

# 查看
find /tmp/oldboy/ -type f -exec cat {} \;

分析:使用sed的替换功能

2.7

模拟环境:

rm -rf /tmp/oldboy
mkdir /tmp/oldboy
dd if=/dev/zero of=/tmp/oldboy/test1.log bs=1k count=1023
dd if=/dev/zero of=/tmp/oldboy/test2.log bs=1k count=1024
dd if=/dev/zero of=/tmp/oldboy/test3.log bs=1k count=1025
dd if=/dev/zero of=/tmp/oldboy/test4.log bs=1k count=1025

touch /tmp/oldboy/test3.log -m -d '20180101'

答案:

find /tmp/oldboy/ -type f -name '*.log' -size +1M -mtime +7 -exec mv {} /tmp \;

分析:

# 查看文件的时间
stat test1.log
atime 文件最近访问的时间
mtime 文件的内容最近修改的时间
ctime 文件属性最近修改的时间
当文件的目录被修改或文件的所有者、权限等被修改时ctime也会更新
# 修改文件的时间 mtime
touch test1.log -m -d '20180101'

三、参考

posted @ 2018-03-26 21:35  okokabcd  阅读(184)  评论(0编辑  收藏  举报