vlambda博客
学习文章列表

LINUX基础实践(一)第三部分答案

8.进程查询、清除的题组:

1)通过ps命令的两种选项形式查看进程信息ps -aux |-elf

 

LINUX基础实践(一)第三部分答案  

2)通过top命令查看进程

 

LINUX基础实践(一)第三部分答案


 

3)查看磁盘的使用情况

df -lh

 LINUX基础实践(一)第三部分答案

4)如何查看系统的负荷及内存使用状况

 

LINUX基础实践(一)第三部分答案


表示最近1分钟,5分钟,15分钟系统的平均负载;

3/330 3代表此时运行队列中的进程个数;330代表系统中进程总数

17247 代表到此为止创建的最后一个进程的ID

 

top命令

 

LINUX基础实践(一)第三部分答案

LINUX基础实践(一)第三部分答案

 

5)通过pgrep命令查看sshd服务的进程号

 

LINUX基础实践(一)第三部分答案


6)查看系统进程树

 

LINUX基础实践(一)第三部分答案


7)使dd if=/dev/zero of=/root/file bs=1M count=8190 命令操作在前台运行

 

LINUX基础实践(一)第三部分答案


8)将第5题命令操作调入到后台并暂停

 

LINUX基础实践(一)第三部分答案


显示太快,换以下命令运行

 

LINUX基础实践(一)第三部分答案


9)使dd if=/dev/zero of=/root/file2 bs=1M count=1024 命令操作在后台运行

 

LINUX基础实践(一)第三部分答案

10)查看后台的任务列表

 

LINUX基础实践(一)第三部分答案


11)恢复dd if=/dev/zero of=/root/file bs=1M count=8190 让其在后台继续运行

 

LINUX基础实践(一)第三部分答案


12)查询dd if=/dev/zero of=/root/file bs=1M count=8190 命令的进程并通过kill杀死

 

LINUX基础实践(一)第三部分答案

 

13)用两种方法强制踢出某个用户(kill、pkill)

 

1.who或w查询登录用户

[root@CentOS-WD /]# who

wu****   tty2         2021-01-06 22:10 (tty2)

wu****   pts/1        2021-01-06 22:34 (**.**.**.**)

[root@CentOS-WD /]# pkill -kill -t pts/1

w查询确认

[root@CentOS-WD /]# who

wu****   tty2         2021-01-06 22:10 (tty2)

 

2.who查询登录用户

[root@CentOS-WD /]# who

wu****   tty2         2021-01-06 22:10 (tty2)

wu****   pts/1        2021-01-06 22:37 (**.**.**.**)

[root@CentOS-WD /]# ps -ef|grep pts/1   查找该用户全部进程

wu****      6820    6816  0 22:37 ?        00:00:00 sshd: wu****@pts/1

wu****      6821    6820  0 22:37 pts/1    00:00:00 -bash

root        6899    6565  0 22:37 pts/0    00:00:00 grep --color=auto pts/1

[root@CentOS-WD /]# kill -9 6821        终止该用户shell进程

[root@CentOS-WD /]# who

wu****  tty2         2021-01-06 22:10 (tty2)


9.awk、sed、alias、find综合运用题组

1)创建目录/data/oldboy,并且在该目录下创建文件oldboy.txt,然后在文件lodboy.txt里写入内容

“inet addr:10.0.0.8” Bcast:10.0.0.255 Mask:255.255.255.0"(不包括引号)。

Mkdir /data  -> cd /data -> mkdir /oldboy -> cd /oldboy -> touch oldboy.txt -> vi oldboy.txt ->写入内容  -> wq

 

2)题1中的oldboy.txt文件内容通过命令过滤只输出如下内容:

10.0.0.8 10.0.0.255 255.255.255.0

awk -F '[ :]+' '{print $3,$5,$7}' oldboy.txt

10.0.0.8 10.0.0.255 255.255.255.0

或者sed -r 's/[a-zA-Z:]+//g' oldboy.txt

 

3)将题1的oldboy目录移动到/tmp目录下,并将/etc/passwd文件复制到/tmp/oldboy下。

   Cd /data -> mv oldboy /tmp

cp /etc/passwd /tmp/oldboy


4)在题3的基础上使用awk取passwd文件的地10行到20行的第三列重定向到/tmp/oldboy/test.txt 文件里面。

awk 'NR>=10 && NR<=20' /tmp/oldboy/passwd| awk -F ":" '{print $3}' >>/tmp/oldboy/test.txt

LINUX基础实践(一)第三部分答案


5)在题3的基础上要求用命令rm删除文件时提示如下禁止使用rm的提示,并是该效果永久生效。(提示:别名设置)

[root@python01 oldboy]# rm -f passwd

 

1.Do not use rm command

LINUX基础实践(一)第三部分答案

LINUX基础实践(一)第三部分答案

2. source /etc/profile

3.  rm

LINUX基础实践(一)第三部分答案

6)在题3的基础上,删除/tmp/oldboy/下除passwd以外的其他文件。

[root@CentOS-WD oldboy]# ll

total 12

-rw-r--r--. 1 root root   55 Jan  6 22:47 oldboy.txt

-rw-r--r--. 1 root root 3147 Jan  6 22:50 passwd

-rw-r--r--. 1 root root   37 Jan  6 22:51 test.txt

[root@CentOS-WD oldboy]# find /tmp/oldboy/ -type f ! -name "passwd"|xargs \rm -f

[root@CentOS-WD oldboy]# ll

total 4

-rw-r--r--. 1 root root 3147 Jan  6 22:50 passwd

find /tmp/oldboy -type f ! -name 'passwd' |xargs rm -rf



7)在题3的基础上,请打印/etc/passwd 文件中的第2-5行(awk、sed、head三种方法

 

LINUX基础实践(一)第三部分答案

LINUX基础实践(一)第三部分答案

LINUX基础实践(一)第三部分答案


8)在题3的基础上,使用命令调换passwd文件里root位置和/bin/bash位置?即将所有的第一列和最后一列位置调换?

 Awk -F ":" '{a=$1;$1=$NF;$NF=a;print}'/                                      tmp/oldboy/passwd | tr " " ":" LINUX基础实践(一)第三部分答案

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

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


10)查找/oldboy下所有七天以前的以log结尾的大于1M的文件移动到/emp目录下。

 find /data/oldboy  -name "*.log" -size +1M -mtime +7 -exec mv {} /emp \;


 

10.Shell脚本运用综合题组

1)基本操作的shell运用,实现以下功能

  1)使用for循环在/oldboy目录下批量创建10html文件,其中每个文件需要包含10个随机小写字母加固定字符串oldboy

脚本:

#!/bin/bash

key="abcdefghijklmnopqrstuvwxyz"

randpass(){

    if [ -z "$1" ];then

        echo "randpass函数需要一个参数,用来指定提取的随机数个数."

        return 127

    fi

#调用$1参数,循环提取任意个数据字符,用随机数对26取余数,返回的结果为[0-25].

    pass=""

    for i in `seq $1`

    do

        num=$[RANDOM%${#key}]

        local tmp=${key:num:1}

        pass=${pass}${tmp}

    done

    echo $pass

}

for i in $(seq 1 10)

do

    touch /tmp/shell/oldboy/oldboy$i.html

    passwd="$(randpass 10)"oldboy

    echo $passwd > /tmp/shell/oldboy/oldboy$i.html

done

exit 0

检查输出:

[root@shdc-t-vm-lc-test-app5 shell]# sh test1.sh

test1

[root@shdc-t-vm-lc-test-app5 shell]# cd oldboy

[root@shdc-t-vm-lc-test-app5 oldboy]# dir

oldboy10.html  oldboy2.html  oldboy4.html  oldboy6.html  oldboy8.html

oldboy1.html   oldboy3.html  oldboy5.html  oldboy7.html  oldboy9.html

[root@shdc-t-vm-lc-test-app5 oldboy]# cat oldboy10.html

svricioikxoldoldboy

(2)结果文件名中的oldboy字符串全部改成oldgirl(最好用for循环实现),并且将扩展名html全部改成大写

脚本:

#!/bin/bash

for i in $(seq 1 10)

do

    mv /tmp/shell/oldboy/oldboy$i.html /tmp/shell/oldboy/oldboy$i.HTML

    sed -i 's/boy/girl/g' /tmp/shell/oldboy/oldboy$i.HTML

done

exit 0

检查输出:

[root@shdc-t-vm-lc-test-app5 shell]# sh test2.sh

test2

[root@shdc-t-vm-lc-test-app5 shell]# dir

oldboy  test1.sh  test2.sh  test.sh

[root@shdc-t-vm-lc-test-app5 shell]# cd oldboy

[root@shdc-t-vm-lc-test-app5 oldboy]# dir

oldboy10.HTML  oldboy2.HTML  oldboy4.HTML  oldboy6.HTML  oldboy8.HTML

oldboy1.HTML   oldboy3.HTML  oldboy5.HTML  oldboy7.HTML  oldboy9.HTML

[root@shdc-t-vm-lc-test-app5 oldboy]# cat oldboy10.HTML

svricioikxoldgirl

(3)批量创建10个系统帐号oldboy01-oldboy10并设置密码(密码为随机数,要求字符和数字等混合)

脚本:

#!/bin/bash

#功能描述(Description):使用字串截取的方式生成随机密码

#定义变量:10个数字+52个字符+3个符号

key="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@#$"

randpass(){

    if [ -z "$1" ];then

        echo "randpass函数需要一个参数,用来指定提取的随机数个数."

        return 127

    fi

#调用$1参数,循环提取任意个数据字符.

#用随机数对65取余数,返回的结果为[0-64].

    pass=""

    for i in `seq $1`

    do

        num=$[RANDOM%${#key}]

        local tmp=${key:num:1}

        pass=${pass}${tmp}

    done

    echo $pass

}

#创建10个测试账户,为账户配置随机密码并显示

for i in $(seq 1 10)

do

    #userdel oldboy$i

    #rm -r /home/oldboy$i

    #rm /var/spool/mail/oldboy$i

    useradd oldboy$i

    passwd=$(randpass 10)

    echo $passwd | passwd --stdin oldboy$i

    echo oldboy$i $passwd

done

exit 0

检查输出:

[root@shdc-t-vm-lc-test-app5 shell]# sh test3.sh

Changing password for user oldboy1.

passwd: all authentication tokens updated successfully.

oldboy1 #t1o96pN1G

Changing password for user oldboy2.

passwd: all authentication tokens updated successfully.

oldboy2 X7pah6yp13

Changing password for user oldboy3.

passwd: all authentication tokens updated successfully.

oldboy3 qMya611J1F

Changing password for user oldboy4.

passwd: all authentication tokens updated successfully.

oldboy4 t5Ly66a11m

Changing password for user oldboy5.

passwd: all authentication tokens updated successfully.

oldboy5 0DUx61$97k

Changing password for user oldboy6.

passwd: all authentication tokens updated successfully.

oldboy6 jwL55UTboX

Changing password for user oldboy7.

passwd: all authentication tokens updated successfully.

oldboy7 rPiJk55EiM

Changing password for user oldboy8.

passwd: all authentication tokens updated successfully.

oldboy8 Vsx9557bgh

Changing password for user oldboy9.

passwd: all authentication tokens updated successfully.

oldboy9 JkMA55dDB$

Changing password for user oldboy10.

passwd: all authentication tokens updated successfully.

oldboy10 Q7xy55ZzJk

4)编写一个名为move的脚本程序,格式move  <file1> <file2>。如果file1不存在,给出提示;否则移动file1至file2。

脚本:

#!/bin/bash

function move(){

   cp $file1 $file2

}

read -p "please input file1:" file1

if [ -f $file1 ];then

   read -p "please input file2:" file2

   move

else

   echo "file1 not exist,please check"

   exit 0

fi

exit 0

检查输出:

[root@shdc-t-vm-lc-test-app5 shell]# dir

aaa  oldboy  test1.sh  test2.sh  test3.sh  test4.sh  test.sh  t.sh

[root@shdc-t-vm-lc-test-app5 shell]# sh test4.sh

test4

please input file1:hhh

file1 not exist,please check

[root@shdc-t-vm-lc-test-app5 shell]# sh test4.sh

test4

please input file1:passwd

file1 not exist,please check

[root@shdc-t-vm-lc-test-app5 shell]# sh test4.sh

test4

please input file1:aaa

please input file2:bbb

[root@shdc-t-vm-lc-test-app5 shell]# dir

aaa  bbb  oldboy  test1.sh  test2.sh  test3.sh  test4.sh  test.sh  t.sh

[root@shdc-t-vm-lc-test-app5 shell]# sh test4.sh

test4

please input file1:ccc

file1 not exist,please check

2)运用shell,搜集系统状态以及性能数据

(1)写一个Shell脚本,判断10.0.0.0/24网络里,当前在线的IP有哪些?

脚本:

#!/bin/bash

rm /tmp/shell/up

touch /tmp/shell/up

rm /tmp/shell/down

touch /tmp/shell/down

for I in `seq 1 255`

do

        ping -c 1 10.0.0.$I

        if [ $? -eq 0 ]

        then

 

                echo -e "10.0.0.$I is up." >> /tmp/shell/up

        else

 

                echo -e "10.0.0.$I is down." >> /tmp/shell/down

        fi

done

检查输出:

[root@shdc-t-vm-lc-test-app5 shell]# cat up

[root@shdc-t-vm-lc-test-app5 shell]#(由于没有在线ip,显示为空)

[root@shdc-t-vm-lc-test-app5 shell]# cat down

10.*.*.* is down.

以下省略到最后几行

10.*.*.255 is down.

a.使用shell数组方法实现,检测策略尽量模拟用户访问。

b.每10秒钟做一次所有的检测,无法访问的输出报警。

脚本:

#!/bin/bash

[ -f /etc/init.d/functions ]&&. /etc/init.d/functions

array_url=(

web.abc

10.2**.**.**:8**3/*me/Per**Page

10.2**.**.**:8*

http://10.2**.**.**/C*/**


)

curl_ip(){

curl -o /dev/null -s --connect-timeout 5 -w '%{http_code}' $1

}

main(){

for I in `seq 1 5

do

    echo  $I

    for n in ${array_url[*]}

    do

        CURL=$(curl_ip $n|egrep "200|301"|wc -l)

        if [ $CURL -eq 1 ];then

            echo "curl $n" ok > /dev/null

         #  action "curl $n" /bin/true

        else

            action "curl $n" /bin/false      

        fi

    done

    sleep 10

done

}

main

检查输出:

[root@shdc-t-vm-lc-test-app5 shell]# sh test22.sh

1

curl 10.**.**.**:9*3/Ho*/Pers*Page

2

curl 10.**.**.**:9*3/Ho*/Pers*Page

3

curl 10.**.**.**:9*3/Ho*/Pers*Page

4

curl 10.**.**.**:9*3/Ho*/Pers*Page

5

curl 10.**.**.**:9*3/Ho*/Pers*Page

3)巡检CPU、内存使用率,30秒一轮,持续检查5分钟。低于5%情况记一条日志到文件(时间戳、绝对值、百分比、结论),其余情况程序显示告警。

#! /bin/bash

LOG_FILE="/tmp/shell/log"

check_interval=30

max_usage_ration_memory=5

max_usage_ration_cpu=5

function monitor_memory() {

    memory_total=$(grep MemTotal /proc/meminfo | awk '{print $2}' )

    memory_free=$(grep MemFree /proc/meminfo | awk '{print $2}' )

    memory_usage=$((100-memory_free*100/memory_total))

    echo "Current memory usage: $memory_usage at $(date)" 2>&1 | tee -a "$1"

    if [[ "$memory_usage" -gt "$max_usage_ration_memory" ]]

        then

        echo "Current Memory usage is high "

        return 1

    else

        echo "$(date) $memory_free $memory_usage warning" >>/tmp/shell/log

return 0

    fi

}

function get_cpu_info() {

    grep -i "^cpu[0-9]\+" /proc/stat | awk '{used+=$2+$3+$4; unused+=$5+$6+$7+$8} END {print used, unused}'

}

function monitor_cpu() {

    cpu_info_1=$(get_cpu_info)

    sleep "$check_interval"

    cpu_info_2=$(get_cpu_info)

    cpu_usage=$(echo "$cpu_info_1" "$cpu_info_2" | awk '{used=$3-$1;total+=$3+$4-$1-$2; print int(used*100/total)}')

    echo "Current cpu usage: $cpu_usage at $(date)" 2>&1 | tee -a "$1"

    if [[ "$cpu_usage" -gt "$max_usage_ration_cpu" ]]

        then

        echo "Current CPU usage is high "

        return 1

    else

        echo "$(date) $cpu_free $cpu_usage warning" >>/tmp/shell/log

return 0

    fi

}

check_time=10

(4)写脚本,每小时将/etc目录下所有文件,备份到/testdir独立的子目录下,并要求子目录格式含时间戳( BAK202012151000)。同时结合定时器设置,实现每天清除2天前的备份。

#!/bin/bash

cd '/tmp/shell/testdir'

for f in $(ls /etc)

do

    if [ -d $f ]

    then

        cp -r $f /testdir

    fi

done

2天前的备份。