美文网首页Linux学习之路
Shell脚本面试题Top50

Shell脚本面试题Top50

作者: 程序员will | 来源:发表于2019-08-01 10:30 被阅读0次

    Shell脚本面试题Top50

    [TOC]

    1:什么是Shell?

    Shell是用户和内核之间的接口。即使只有一个内核; 一个系统可以同时运行许多shell。因此,只要用户通过键盘输入命令,shell就会与内核通信以执行它,然后将输出显示给用户。

    2:典型Linux系统上常用的shell有哪些不同类型?

    csh,ksh,bash,Bourne。今天使用的最常用和高级shell是"Bash”。

    3:在Linux系统上有一个窗口的文件快捷方式相当于什么?

    使用Linux上的"链接”创建快捷方式。可以使用两种类型的链接,即"软链接”和"硬链接”。

    4:软链接和硬链接有什么区别?

    软链接是文件名的链接,也可以驻留在不同的文件名中; 但硬链接链接到文件的inode,并且必须与文件的文件系统相同。删除原始文件会使软链接处于非活动状态(断开链接),但不会影响硬链接(硬链接仍将访问该文件的副本)

    5:如何在Linux中传递和访问脚本的参数?

    参数可以传递为:

    scriptName"Arg1”"Arg2”...."Argn”并且可以在脚本内部以$ 1,$ 2 .. $ n进行访问
    

    6:$#的意义是什么?

    $#显示传递给脚本的参数计数。

    7:*和 @有什么区别?

    @将每个引用的参数视为单独的参数,但 *将整个位置参数集视为单个字符串。

    8:使用sed命令替换文件内容(模拟tac命令)

    例如:

    if cat fille
    ABCD
    EFGH
    

    然后O / p应该是

    EFGH
    ABCD

    sed'1!G; h; $!d'file1
    

    这里G命令附加到模式空间,

    h命令复制模式缓冲区以保存缓冲区

    和d命令删除当前模式空间。

    9:给定一个文件,将所有出现的单词"ABC”替换为"DEF”,从第 5 行直到结尾仅包含单词"MNO”

    sed -n'5,$p' file1|sed '/MNO/s/ABC/DEF/'
    

    10:给定一个文件,写一个命令序列来查找每个单词的计数。

    tr -s"(backslash)040”<file1 | tr -s"(backslash)011"| tr"(backslash)040(backslash)011"""(backslash)012"| uniq -c
    其中"(backslash)040”是"space”的八进制等价物
    

    "(反斜杠)011”是"制表符”的八进制等效值

    "(反斜杠)012”是换行符的八进制等效值。

    11:如何仅使用tail和head命令找到文件的第 99 行?

    tail +99 file1 | head -1
    

    12:打印10 个行,而无需使用尾部和头部命令。

    sed -n'10p'file1
    

    13:在我的bash shell中,我希望我的提示格式为'$'当前工作目录":”hostname">并在我登录时加载包含用户定义函数列表的文件,如何自动执行此操作?

    在bash shell中,我们可以创建".profile”文件,该文件在我登录后自动被调用,并将以下语法写入其中。

    export PS1 ='$`pwd`:`hostname`>'.File1
    

    这里File1是包含用户定义函数和"。”的文件。在当前shell中调用此文件。

    14:解释一个文件中的"s”权限位?

    "s”位称为"设置用户ID”(SUID)位。

    文件中的"s”位使得进程在程序实例期间具有文件所有者的特权。

    例如,执行"passwd”命令更改当前密码会导致用户将其新密码写入影子文件,即使它具有"root”作为其所有者。

    15:我想创建一个目录,以便组中的任何人都可以创建文件并访问其中的任何人的文件,但是没有人能够删除除他自己创建的文件之外的文件。

    我们可以创建一个目录,为组中的每个人提供读取和执行访问权限,并将其粘滞位设置为"t”,如下所示:

    mkdir direc1
     
    chmod g + wx direc1
     
    chmod + t direc1
    

    16:你怎么知道系统运行了多长时间?

    我们可以使用命令"uptime”找到它。

    17:任何用户如何找到有关特定用户的所有信息,例如他的默认shell,现实名称,默认目录,他何时以及使用系统多长时间?

    >finger "loginName”
    //其中loginName是的登录名
    

    预期信息的用户。

    18:$$和$之间的区别是什么?

    $$给出了当前正在执行的进程的进程ID,而$!显示最近进入后台的进程的进程ID。

    19:什么是僵尸进程?

    这些过程已经死亡,但其退出状态仍未被父进程选中。即使不起作用,这些进程仍然在进程表中具有其进程id条目。

    20:如何将文件从一台机器复制到另一台机器?

    我们可以使用"ftp”,"scp”或"rsync”等实用程序将文件从一台机器复制到另一台机器。

    例如,使用ftp:

    FTP 主机名
    
    >put file1
    
    >bye
    

    上面的副本,文件file1从本地系统到指定了主机名的目标系统。

    21:我想监视一个不断更新的日志文件,可以用什么命令最有效地实现这个目的?

    我们可以使用tail -f filename。这将导致仅在std o / p上显示默认的最后10行,这连续显示文件的更新部分。

    22:我想连接远程服务器并执行一些命令,我该如何实现?

    我们可以使用ssh来做到这一点:

    ssh username@serverIP -p sshport
    

    ssh [root@122.52.251.171](mailto:root@122.52.251.171) -p 22
    

    执行上述命令后,系统将要求你输入密码

    23:我有2个文件,我想打印两个共同的记录。

    我们可以使用"comm”命令如下:

    comm -12 file1 file2 
    

    24:编写一个脚本来打印Fibonacci系列的前10个元素。

    #!/bin/sh
    a = 1
    B = 1
    echo $ a
    echo $ b
    for I in 1 2 3 4 5 6 7 8
    do
    c = a
    b = $a
    b = $(($a+ $c))
    echo $b
    DONE
    

    25:如何从Linux连接到数据库服务器?

    我们可以使用开放客户端驱动程序附带的isql实用程序,如下所示:

    isql -S serverName -U username -P password
    

    26:Linux中的3个标准流是什么?

    0 - 标准输入1 - 标准输出2 - 标准错误

    27:我想从file1读取命令的所有输入,将所有输出直接输出到file2,将错误读取到文件3,我该如何实现?

    command <file1 1> file2 2> file3
    

    28:当我使用exec执行命令时,当前进程会发生什么?

    "exec”覆盖了当前流程中新分叉的流程; 所以当我使用exec执行命令时,该命令在当前shell上执行而不创建任何新进程。

    例如,在命令提示符下执行"exec ls”将执行ls,一旦ls退出,该进程将关闭

    29:你将如何使用awk模拟wc -l?

    awk'END {print NR} fileName'
    

    30:给定一个文件找到包含单词"ABC”的行数。

    grep -c "ABC" file1
    

    31:grep和egrep有什么区别?

    egrep是扩展grep,支持添加grep功能,如"+”(前一个字符出现1次或多次),"?”(前一个字符出现0或1次)和"|” (备用匹配)

    32:如何打印系统上所有用户的登录名?

    /etc/shadow
    

    文件列出了所有用户。

    awk -F':''{print $ 1} / etc / shadow'| uniq -u
    

    33:如何在Linux中设置数组?

    ksh中的语法:

    Set –A arrayname= (element1 element2 ….. element)
    In bash
    A=(element1 element2 element3 …. elementn)
    

    34:记下"for”循环的语法

    语法

    for  iterator in (elements)
    do
    execute commands
    done
    

    35:你如何找到特定用户使用的总磁盘空间?

    du -s / home / user1 
    

    其中user1是需要找到总磁盘空间的用户。

    36:在Linux中编写"if”条件的语法?

    语法

    If  condition is successful
    then
    execute commands
    else
    execute commands
    fi
    

    37:$的意义是什么?

    命令$?给出最后执行的命令的退出状态。

    38:我们如何删除文件中的所有空行?

    sed  '^ [(backslash)011(backslash)040]*$/d' file1
    

    其中(反斜杠)011是空格的八进制等价物

    (反斜杠)040是选项卡的八进制等效值

    39:我怎么会在每100插入行"ABCDEF” 第一个文件的行?

    sed '100i \ ABCDEF'file1
    

    40:编写命令序列以查找在不到2天内修改的所有文件并打印每个文件的记录数。

    find . –mtime -2 –exec wc –l {} \;
    

    41:如何在当前shell中创建的每个文件上为所有用户设置默认的rwx权限?

    我们可以用:

    umask 777
    

    这将为为每个用户创建的每个文件设置默认的rwx权限。

    42:我们如何从进程ID中找到进程名称?

    ps –p ProcessId
    

    43:Linux上每个文件系统的四个基本组件是什么?

    Bootblock,超级块,inode块和数据块是Linux上每个文件系统的基本组件。

    44:什么是引导块?

    该块包含一个名为"主引导记录”(MBR)的小程序,它在系统引导期间加载内核。

    45:什么是超级块?

    超级块包含有关文件系统的所有信息,例如文件系统的大小,其空闲数据块数使用的块大小以及空闲inode和数据块的列表。

    46:什么是inode块?

    此块包含文件系统的每个文件的inode以及除其名称之外的所有文件属性。

    47:如何将带有压缩文件的邮件作为附件发送?

    zip file1.zip file1|mailx –s "subject" Recipients email id
    
    Email content
    
    EOF
    

    48:我们如何在shell中创建命令别名?

    别名Aliasname ="要创建其别名的命令”。
    

    49:文件的"c”和"b”权限字段是什么?

    "c”和"b”权限字段通常与设备文件相关联。它指定文件是特殊字符文件还是块特殊文件。

    50:shebang线的用途是什么?

    每个脚本顶部的Shebang行确定用于执行脚本的引擎的位置。

    相关文章

      网友评论

        本文标题:Shell脚本面试题Top50

        本文链接:https://www.haomeiwen.com/subject/czzfdctx.html