day20-Linux进程概念作业

基础类
1.编辑一个1.txt文件,内容如下
cat >>1.txt < 10.0.3.1 00:0F:AF:81:19:1F
10.0.3.2 00:0F:AF:85:6C:25
10.0.3.3 00:0F:AF:85:70:42
10.0.2.20 00:0F:AF:85:55:DE
10.0.2.21 00:0F:AF:85:6C:09
10.0.2.22 00:0F:AF:85:5C:41
10.0.0.151 00:0F:AF:85:6C:F6
10.0.0.152 00:0F:AF:83:1F:65
10.0.0.153 00:0F:AF:85:70:03
10.0.1.10 00:30:15:A2:3B:B6
10.0.1.11 00:30:15:A3:23:B7
10.0.1.12 00:30:15:A2:3A:A1
10.0.1.1 00:0F:AF:81:19:1F
10.0.2.2 00:0F:AF:85:6C:25
10.0.3.3 00:0F:AF:85:70:42
10.0.2.20 00:0F:AF:85:55:DE
10.0.1.21 00:0F:AF:85:6C:09
10.0.2.22 00:0F:AF:85:5C:41
10.0.0.151 00:0F:AF:85:6C:F6
10.0.1.152 00:0F:AF:83:1F:65
10.0.0.153 00:0F:AF:85:70:03
10.0.3.10 00:30:15:A2:3B:B6
10.0.1.11 00:30:15:A3:23:B7
10.0.3.12 00:30:15:A2:3A:A1
EOF

(1)对该文件输出内容进行排序(提示:通过第三列的第一个字符,以及第4列的所有字符进行排序)
[root@oldboy ~]# sort -t "." -k3.1,3.1 -k4.1,4.3 1.txt -n

(2)过滤该文件所有的字母,不区分大小写
[root@oldboy ~]# grep "[a-Z]" 1.txt 或 grep -i "[a-z]" 1.txt

(3)过滤出以数字3结尾的行
[root@oldboy ~]# grep "3$" 1.txt

2.将"web3_access.log"上传至你的linux服务器
(1)统计出该文件IP地址出现的次数,并按正序对其进行排序
[root@oldboy ~]# awk '{print $1}' access.log | sort | uniq -c |sort -n

(2)统计该文件内HTTP状态返回码出现的次数(例如200,404,403,在第九列),并按照倒序进行排序
[root@oldboy ~]# # awk '{print $9}' access.log | sort | uniq -c |sort -nr

(3)过滤出所有状态返回码是200的行,并将这些返回码为200行的全部替换成300
[root@oldboy ~]# awk '/200/' access.log g | sed 's@200@300@g'

3.匹配/etc/passwd里包含root关键字的行(要求至少两种方法,分别使用awk和grep)
[root@oldboy ~]# grep "root" /etc/passwd
[root@oldboy ~]# awk '/root/' /etc/passwd

4.以“:”为分隔符,取出/etc/passwd第一行的最后一列的内容
[root@oldboy ~]# awk -F ":" 'NR==1 {print $NF}' /etc/passwd

5.取出以“:”为分隔符,第三列(用户UID)以0结尾的
[root@oldboy ~]# awk -F ":" '{print "

6.新建用户u1、u2,密码是redhat,属于同一个附加组grp1,用户u2不允许登陆到系统中
[root@oldboy ~]# groupdel grp1
[root@oldboy ~]# groupadd grp1
[root@oldboy ~]# useradd u1 -G grp1
[root@oldboy ~]# useradd u2 -G grp1
[root@oldboy ~]# echo "redhat" | passwd --stdin u1
[root@oldboy ~]# echo "redhat" | passwd --stdin u2
[root@oldboy ~]# usermod u2 -s /sbin/nologin

7.查看用户u1的uid和gid信息
[root@oldboy ~]# id u1
uid=10024(u1) gid=10024(u1) groups=10024(u1),10031(grp1)

8.创建组distro,其GID为2019
[root@oldboy ~]# groupadd distro -g 2019

9.创建用户olddir,其ID号为1005,基本组为distro
[root@oldboy ~]# useradd olddir -u 1005 -g distro
[root@oldboy ~]# id olddir
uid=1005(olddir) gid=2019(distro) groups=2019(distro)

10.给用户oldman添加密码,密码为oldboyedu
[root@oldboy ~]# echo "oldboyedu" | passwd --stdin oldman

进程类
1.使用ps查看进程,解释进程状态中R,S,D,Z,T所代表的含义
R:表示运行的进程
S:表示可以中断睡眠的进程
D:表示不可以中断睡眠的进程
Z:表示僵尸进程
T:表示可以暂停的进程

2.使用yum安装一个nginx并启动,查看nginx进程的详细信息
[root@oldboy ~]# yum install nginx -y
[root@oldboy ~]# systemctl start nginx
[root@oldboy ~]# ps aux
root 9233 0.0 0.0 46340 968 ? Ss 20:14 0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx 9234 0.0 0.0 46748 1932 ? S 20:14 0:00 nginx: worker process

3.开启两个xshell终端连接同一台虚拟机,一个终端输入命令"yum update" ,一个终端查看yum命令的状态,再开一个终端输入"yum install -y mariadb",然后查看yum命令的状态,当yum命令执行完成以后,再次查看yum命令的状态。
第一个是正在前台运行的进程 R+
第二个是在前台的可以中断睡眠的进程 S+

4.使用"vim test.c"编辑代码代码如下
#include
#include
#include
#include
#include
#include
#include

int main(int argc, char *argv[])
{
pid_t pid;
pid = fork();
if (pid == 0) {
int iPid = (int)getpid();
fprintf(stderr,"I am child,%d\n",iPid);
sleep(1);
fprintf(stderr, "Child exits\n");
return EXIT_SUCCESS;
}
int iPid = (int)getpid();
fprintf(stderr,"I am parent,%d\n",iPid);
fprintf(stderr, "sleep....\n");
sleep(600);
fprintf(stderr, "parent exits\n");
return EXIT_SUCCESS;
}
然后使用"gcc test.c"编译这段代码,会在当前目录生成一个a.out的文件,使用"./a.out"执行该文件(如果没有gcc命令,则使用yum进行安装)
(1)新开一个终端,使用top命令查看进程状态,是否存在一个僵尸进程
[root@oldboy ~]# top
top - 20:27:55 up 10:42, 2 users, load average: 0.00, 0.27, 0.34
Tasks: 128 total, 1 running, 126 sleeping, 0 stopped, 1 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 2028088 total, 494260 free, 175332 used, 1358496 buff/cache
KiB Swap: 1048572 total, 1048572 free, 0 used. 1600900 avail Mem

(2)使用ps命令查看该僵尸进程的状态
[root@oldboy ~]# ps aux | grep "a.out"
root 9928 0.0 0.0 4208 352 pts/0 S+ 20:26 0:00 ./a.out 在前台的可以中断睡眠的进程
root 9929 0.0 0.0 0 0 pts/0 Z+ 20:26 0:00 [a.out] 在前台的僵尸进程
root 9963 0.0 0.0 112708 1008 pts/1 S+ 20:29 0:00 grep --color=auto a.out

(3)使用kill 命令尝试终止该僵尸进程(不要使用-9参数强制终止),然后查看该进程的状态,是否能够终止
[root@oldboy ~]# ps aux|grep a.out
root 10086 0.0 0.0 4208 352 pts/0 S+ 20:38 0:00 ./a.out
root 10087 0.0 0.0 0 0 pts/0 Z+ 20:38 0:00 a.out]
root 10195 0.0 0.0 112708 1004 pts/1 R+ 20:47 0:00 grep --color=auto a.out
[root@oldboy ~]# ps -ef | grep "a.out" 找到该进程的父进程PPID9928
root 9928 8669 0 20:26 pts/0 00:00:00 ./a.out
root 9929 9928 0 20:26 pts/0 00:00:00 [a.out] 这是个僵尸进程
root 9998 9811 0 20:31 pts/1 00:00:00 grep --color=auto a.out
[root@oldboy ~]# kill 9928

(4)杀死该僵尸进程的父进程,查看该进程是否被终止
[root@oldboy ~]# ps aux|grep a.out
root 10202 0.0 0.0 112708 1004 pts/1 R+ 20:49 0:00 grep --color=auto a.out

5.输入top命令,解释头六行每行每列所代表的含义(不算空行)
进程的总数、正在运行的进程、正在睡眠的进程、暂停的进程、僵尸进程、系统用户进程占用cpu的百分比
内核中的进程进程占用cpu的百分比、优先级的进程进程占用cpu的百分比、空闲的进程进程占用cpu的百分比
cpu等待IO完成的时间、硬中断,占用cpu的百分比、软中断,占用cpu的百分比、虚拟机占用物理cpu的时间

6.开两个终端,在一个终端输入top命令,另一个终端终止该进程,查看效果
S+ 在前台的能中断和睡眠的进程

7.在linux中输入如下命令"(while :; do uptime; sleep 1; done) &" ,新开一个终端查看该进程的状态,并尝试终止该进程
[root@oldboy ~]# ps aux | grep "sleep" 查看该命令的进程信息和状态
root 10431 0.0 0.0 107952 612 pts/0 S 21:04 0:00 sleep 1
root 10433 0.0 0.0 112708 984 pts/1 R+ 21:04 0:00 grep --color=auto sleep
[root@oldboy ~]# ps -ef | grep "sleep" 查看该进程的PPID
root 10459 10275 0 21:04 pts/0 00:00:00 sleep 1
root 10461 9811 0 21:04 pts/1 00:00:00 grep --color=auto sleep
[root@oldboy ~]# kill 10275 杀死该进程

你可能感兴趣的:(day20-Linux进程概念作业)