• Linux面试题-8


    1.Linux文件系统的文件都按其作用分门别类地放在相关的目录中,对于磁盘这种外部设备文件,一般应将其放在(C)目录中。
    A./bin
    B./etc
    C./dev
    D./lib

    2.当使用mount进行设备或者文件系统挂载的时候,需要用到的设备名称位于(D)目录。?
    A./home
    B./bin
    C./etc
    D./dev

    3.有/etc/fstab文件中内容如下,介绍该文件每行每一列的内容

    UUID=2e7d5aad-dc8c-4d95-9838-4d5e04b33ef3 swap                    swap    defaults        0 0
    第一列:设备的UUID
    第二列:挂载点
    第三列:磁盘文件系统的格式(xfs  swap  ext4 等等)
    第四列:文件系统的参数
    第五列:需不需要做备份;通常这个参数的值为0或者1
    第六列:是否检验扇区:开机的过程中,系统默认会以fsck检验我们系统是否为完整(clean)
    

    4.如果向磁盘写入数据提示如下错误:No space left on device,但是通过df -h查看磁盘空间,发现没满, 那么可能的原因是什么?

    1.1首先查看我们的磁盘剩余情况
    df -h       #发现磁盘没有满
    1.2创建目录测试报错
    创建目录报错文件还是正常
    查看磁盘inode
    最后发现目录backup中inode 满了
    1.3解决方案
    删除backup目录中不常用的文件数据
    由于本文是测试inode满 所以删除所有数据,工作中要注意汇报上级。
    

    5.用电脑自带的画图工具分别画出RAID 0,RAID 1,RAID 5和RAID 10,并说说各自对应的优缺点是什么
    image.png
    image.png

    6.正常情况下第二块SATA硬盘的设备名应为(hdb),它上面的第三个主分区对应的文件名是(hdb3)

    7.df命令和du命令的作用分别是?

    du命令:主要查看目录的大小
    df命令:主要查看磁盘使用的情况
    

    8.linux系统在创建时,至少创建哪两个分区

    根/和swap分区
    

    9.如何将/dev/sdb格式化为xfs文件系统

    mkfs.xfs /dev/sdb
    

    10.磁盘空间利用率最大的RAID技术是,哪些RAID具备故障恢复能力?

    RAID0
    
    RAID5
    

    11.在各种RAID级别中,磁盘空间利用率最低,但数据安全性最大的是

    RAID10
    

    12.8个300G的硬盘做RAID5后的容量为

    (8-1)*300=2100

    13.8个300G的硬盘做RAID1后的容量为

    1200G

    14.假设如下容量的磁盘:500G,600G,组成RAID 0,那么RAID 0的容量是多少,如果组成RAID 1,那么RAID 1的容量又是多少

    RAID 0 500+600=1100G
    RAID 1 500G
    

    15.假设如下容量的磁盘:两块500G,600G磁盘组成RAID 5,那么RAID 5的容量是多少。

    1500G

    16.假设如下容量的磁盘:四块500G,600G磁盘组成RAID 5,RAID 5的容量是多少。

    2500G

    基础类

    1.编辑一个1.txt文件,内容如下
    cat >>1.txt <<EOF
    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@chengyinwu ~]# sort -t "." -k3.1,3.1 -n -k4.1,4.3 -n 1.txt
    

    (2)过滤该文件所有的字母,不区分大小写

    [root@chengyinwu ~]# grep -i [a-Z] 1.txt
    

    (3)过滤出以数字3结尾的行

    [root@chengyinwu ~]# grep '3$' 1.txt
    
    2.将"web3_access.log"上传至你的linux服务器

    (1)统计出该文件IP地址出现的次数,并按正序对其进行排序

    [root@chengyinwu ~]# awk '{print $1}' access.log |sort -n |uniq -c |sort -n
    

    (2)统计该文件内HTTP状态返回码出现的次数(例如200,404,403,在第九列),并按照倒序进行排序

    [root@chengyinwu ~]# awk '{print $9}' access.log |sort -n |uniq -c |sort -nr
    

    (3)过滤出所有状态返回码是200的行,并将这些返回码为200行的全部替换成300

    [root@chengyinwu ~]# grep -o '200' access.log |sed 's#200#300#g'
    
    3.匹配/etc/passwd里包含root关键字的行(要求至少两种方法,分别使用awk和grep)
    #1.[root@chengyinwu ~]# awk '/root/' /etc/passwd
    #2.[root@chengyinwu ~]# grep 'root' /etc/passwd
    
    4.以“:”为分隔符,取出/etc/passwd第一行的最后一列的内容
    [root@chengyinwu ~]# awk -F ":" 'NR==1 {print $NF}' /etc/passwd
    
    5.取出以“:”为分隔符,第三列(用户UID)以0结尾的
    [root@chengyinwu ~]# awk -F ":" '{print $3}' /etc/passwd |grep '0$'
    
    6.新建用户u1、u2,密码是redhat,属于同一个附加组grp1,用户u2不允许登陆到系统中
    [root@chengyinwu ~]# groupadd grp1
    [root@chengyinwu ~]# useradd u1 -G grp1
    [root@chengyinwu ~]# useradd u2 -G grp1 -s /sbin/nologin
    [root@chengyinwu ~]# echo "redhat" |passwd --stdin u1
    [root@chengyinwu ~]# echo "redhat" |passwd --stdin u2
    
    7.查看用户u1的uid和gid信息
    [root@chengyinwu ~]# id u1
    
    8.创建组distro,其GID为2019
    [root@chengyinwu ~]# groupadd distro -g 2019
    
    9.创建用户olddir,其ID号为1005,基本组为distro
    [root@chengyinwu ~]# useradd olddir -u 1005 -g distro
    
    10.给用户oldman添加密码,密码为oldboyedu
    echo "oldboyedu" |passwd --stdin oldman
    

    进程类

    1.使用ps查看进程,解释进程状态中R,S,D,Z,T所代表的含义
    [root@chengyinwu ~]# ps aux
    R	进程运行		s		进程是控制进程, Ss进程的领导者,父进程
    S	可中断睡眠	   <		进程运行在高优先级上,S<优先级较高的进程
    T	进程被暂停		N		进程运行在低优先级上,SN优先级较低的进程
    D	不可中断进程	   +		当前进程运行在前台,R+该表示进程在前台运行
    Z	僵尸进程		l		 进程是多线程的,Sl表示进程是以线程方式运行
    
    2.使用yum安装一个nginx并启动,查看nginx进程的详细信息
    [root@chengyinwu ~]# yum install nginx -y
    [root@chengyinwu ~]# ps aux |grep nginx
    root     32334  0.0  0.0 112708   988 pts/0    R+   16:13   0:00 grep --color=auto nginx
    
    3.开启两个xshell终端连接同一台虚拟机,一个终端输入命令"yum update" ,一个终端查看yum命令的状态,再开一个终端输入"yum install -y mariadb",然后查看yum命令的状态,当yum命令执行完成以后,再次查看yum命令的状态。
    #1:[root@yinwucheng ~]# yum update -y
    #2:[root@yinwucheng ~]# ps aux |grep yum
    root       1532 17.3  1.2 789044 26176 pts/0    D+   16:42   0:01 /usr/bin/python /usr/bin/yum update -y
    root       1545  0.0  0.0 112708   988 pts/1    R+   16:42   0:00 grep --color=auto yum
    
    #1:[root@yinwucheng ~]# yum install mariadb -y
    #2:[root@yinwucheng ~]# ps aux |grep yum
    root       1549  4.3  1.2 804692 24904 pts/0    Sl+  16:43   0:00 /usr/bin/python /usr/bin/yum install mariadb -y
    root       1557  0.0  0.0 112708   988 pts/1    R+   16:43   0:00 grep --color=auto yum
    [root@yinwucheng ~]# ps aux |grep yum
    root       1549  8.4  2.9 828432 59968 pts/0    D+   16:43   0:00 /usr/bin/python /usr/bin/yum install mariadb -y
    root       1559  0.0  0.0 112708   984 pts/1    R+   16:43   0:00 grep --color=auto yum
    
    [root@yinwucheng ~]# ps aux |grep yum
    root       1587  0.0  0.0 112708   988 pts/1    R+   16:44   0:00 grep --color=auto yum
    
    
    4.使用"vim test.c"编辑代码代码如下
    #include <sys/types.h>
    #include <sys/wait.h>
    #include <errno.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    
    int main(int argc, char *argv[])
    {
    pid_t pid;
    pid = fork();
    if (pid == 0) {
    int iPid = (int)getpid();
    fprintf(stderr,"I am child,%d
    ",iPid);
    sleep(1);
    fprintf(stderr, "Child exits
    ");
    return EXIT_SUCCESS;
    }
    int iPid = (int)getpid();
    fprintf(stderr,"I am parent,%d
    ",iPid);
    fprintf(stderr, "sleep....
    ");
    sleep(600);
    fprintf(stderr, "parent exits
    ");
    return EXIT_SUCCESS;
    }
    然后使用"gcc test.c"编译这段代码,会在当前目录生成一个a.out的文件,使用"./a.out"执行该文件(如果没有gcc命令,则使用yum进行安装)
    

    (1)新开一个终端,使用top命令查看进程状态,是否存在一个僵尸进程

    top
    1 zombie  僵尸进程存在
    

    (2)使用ps命令查看该僵尸进程的状态

    [root@chengyinwu ~]# ps aux |grep out
    root     32608  0.0  0.0   4208   352 pts/0    S+   16:18   0:00 ./a.out
    root     32609  0.0  0.0      0     0 pts/0    Z+   16:18   0:00 [a.out] <defunct>
    root     32698  0.0  0.0 112708   984 pts/1    R+   16:20   0:00 grep --color=auto out
    

    (3)使用kill 命令尝试终止该僵尸进程(不要使用-9参数强制终止),然后查看该进程的状态,是否能够终止

    kill 32609
    杀不死
    

    (4)杀死该僵尸进程的父进程,查看该进程是否被终止

    kill 32608
    死了
    
    5.输入top命令,解释头六行每行每列所代表的含义(不算空行)
    top - 16:27:01 up 13 days,  2:09,  2 users,  load average: 0.00, 0.01, 0.05
    Tasks:  77 total,   1 running,  76 sleeping,   0 stopped,   0 zombie
    %Cpu(s):  0.3 us,  0.3 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    KiB Mem :  1014904 total,   143700 free,   160792 used,   710412 buff/cache
    KiB Swap:        0 total,        0 free,        0 used.   690872 avail Mem 
    
      PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND    
    
    统计信息区
    前五行是系统整体的统计信息。第一行是任务队列信息,同 uptime 命令的执行结果。其内容如下:
    
    01:06:48	当前时间
    up 1:22	系统运行时间,格式为时:分
    1 user	当前登录用户数
    load average: 0.06, 0.60, 0.48	系统负载,即任务队列的平均长度。
    三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。
    
    第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。内容如下:
    
    Tasks: 29 total	进程总数
    1 running	正在运行的进程数
    28 sleeping	睡眠的进程数
    0 stopped	停止的进程数
    0 zombie	僵尸进程数
    Cpu(s): 0.3% us	用户空间占用CPU百分比
    1.0% sy	内核空间占用CPU百分比
    0.0% ni	用户进程空间内改变过优先级的进程占用CPU百分比
    98.7% id	空闲CPU百分比
    0.0% wa	等待输入输出的CPU时间百分比
    0.0% hi	
    0.0% si	
    
    最后两行为内存信息。内容如下:
    
    Mem: 191272k total	物理内存总量
    173656k used	使用的物理内存总量
    17616k free	空闲内存总量
    22052k buffers	用作内核缓存的内存量
    Swap: 192772k total	交换区总量
    0k used	使用的交换区总量
    192772k free	空闲交换区总量
    123988k cached	缓冲的交换区总量。
    内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,
    该数值即为这些内容已存在于内存中的交换区的大小。
    相应的内存再次被换出时可不必再对交换区写入。
    
    进程信息区
    统计信息区域的下方显示了各个进程的详细信息。首先来认识一下各列的含义。
    
    序号	列名	含义
    a	PID	进程id
    b	PPID	父进程id
    c	RUSER	Real user name
    d	UID	进程所有者的用户id
    e	USER	进程所有者的用户名
    f	GROUP	进程所有者的组名
    g	TTY	启动进程的终端名。不是从终端启动的进程则显示为 ?
    h	PR	优先级
    i	NI	nice值。负值表示高优先级,正值表示低优先级
    j	P	最后使用的CPU,仅在多CPU环境下有意义
    k	%CPU	上次更新到现在的CPU时间占用百分比
    l	TIME	进程使用的CPU时间总计,单位秒
    m	TIME+	进程使用的CPU时间总计,单位1/100秒
    n	%MEM	进程使用的物理内存百分比
    o	VIRT	进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
    p	SWAP	进程使用的虚拟内存中,被换出的大小,单位kb。
    q	RES	进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
    r	CODE	可执行代码占用的物理内存大小,单位kb
    s	DATA	可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
    t	SHR	共享内存大小,单位kb
    u	nFLT	页面错误次数
    v	nDRT	最后一次写入到现在,被修改过的页面数。
    w	S	进程状态。
    D=不可中断的睡眠状态
    R=运行
    S=睡眠
    T=跟踪/停止
    Z=僵尸进程
    x	COMMAND	命令名/命令行
    y	WCHAN	若该进程在睡眠,则显示睡眠中的系统函数名
    z	Flags	任务标志,参考 sched.h
    
    6.开两个终端,在一个终端输入top命令,另一个终端终止该进程,查看效果
    #1:[root@yinwucheng ~]# top
    #2:[root@yinwucheng ~]# ps aux |grep top
    root       1588  0.0  0.1 161880  2208 pts/0    S+   16:46   0:00 top
    root       1590  0.0  0.0 112708   988 pts/1    R+   16:46   0:00 grep --color=auto top
    [root@yinwucheng ~]# kill 1588
    
    7.在linux中输入如下命令"(while :; do uptime; sleep 1; done) &" ,新开一个终端查看该进程的状态,并尝试终止该进程
    [root@yinwucheng ~]# pkill -9 -t pts/1  干了
    
  • 相关阅读:
    hihoCoder#1037 : 数字三角形(DP)
    Android安全机制
    Java五道输出易错题解析(进来挑战下)
    【Mail】JavaMail介绍及发送邮件(一)
    【Mail】搭建邮件服务器(LAMP+Postfix+Dovcot+PostfixAdmin+Roundcubemail)
    【Mail】telnet收发邮件过程
    【Mail】邮件的基础知识和原理
    【Java】JavaWeb权限管理
    【Java】JDBC连接数据库
    【Mysql】权限管理
  • 原文地址:https://www.cnblogs.com/yinwu/p/11402507.html
Copyright © 2020-2023  润新知