shell面试题

1.用Shell编程,判断一文件是不是块或字符设备文件,如果是将其拷贝到 /dev 目录下。

#!/bin/bash
#1.sh
#判断一文件是不是字符或块设备文件,如果是将其拷贝到 /dev 目录下
#file executable: chmod 755 1.sh
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
echo -e "The program will Judge a file is or not a device file.\n\n"
read -p "Input a filename : " filename
if [ -b "$filename" -o -c "$filename" ]
then
       echo "$filename is a device file" && cp $filename /dev/ &
else
       echo "$filename is not a device file" && exit 1
fi
----------------------------------------------------
2. 设计一个shell程序,添加一个新组为class1,然后添加属于这个组的30个用户,用户名的形式为stdxx,其中xx从01到30。

#!/bin/bash
#2.sh
#设计一个shell程序,添加一个新组为class1,然后添加属于这个组的30个用户,用户名的形式为stdxx,其中xx从01到30。
#file executable: chmod 755 2.sh
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
groupadd class1
for i in {9901..9930}
do
       xx=`echo $i | sed 's/99//g'`
       useradd -g class1 std$xx
       echo std$xx | passwd std$xx --stdin
       echo -e "user std$xx password is std$xx" >> /root/newuser.txt
done

-------------------------------------------
3.编写shell程序,实现自动删除50个账号的功能。账号名为stud1至stud50。

#!/bin/bash
#4.sh
#编写shell程序,实现自动删除50个账号的功能。账号名为stud1至stud50。
#file executable: chmod 755 3.sh
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
i=1
while [ i -le 50 ]
do
   let i++
       userdel -r stud$i
done

---------------------------------------------
4.某系统管理员需每天做一定的重复工作,请按照下列要求,编制一个解决方案:
(1)在下午4 :50删除/abc目录下的全部子目录和全部文件;
(2)从早8:00~下午6:00每小时读取/xyz目录下x1文件中每行第一个域的全部数据加入到/backup目录下的bak01.txt文件内;
(3)每逢星期一下午5:50将/data目录下的所有目录和文件归档并压缩为文件:backup.tar.gz;
(4)在下午5:55将IDE接口的CD-ROM卸载(假设:CD-ROM的设备名为hdc);
(5)在早晨8:00前开机后启动。

vim /etc/crontab 在里面增加下面内容:

50 16 * * * root rm -rf /abc/* 2>&1 &
00 8-18 * * * root cat /xyz/x1|awk '{print $1}' >> /backup/bak01.txt 2>&1 &
50 17 * * 1 root cd /data;tar -zcvf backup.tar.gz * 2>&1 &
55 17 * * * root umount /hdc 2>&1 &

5)在早晨8:00前开机后启动 --> 这个我不是很明白它的意思,不知道是不是8点前开机就启动上面的设定,8点后才开机就不用启动的意思。
姑且用下面这个命令吧
chkconfig --level 2345 crond on

---------------------------------------------
5.设计一个shell程序,在每月第一天备份并压缩/etc目录的所有内容,存放在/root/bak目录里,且文件名
为如下形式yymmdd_etc,yy为年,mm为月,dd为日。Shell程序fileback存放在/usr/bin目录下。

vim /usr/bin/fileback.sh

#!/bin/bash
#fileback.sh
#file executable: chmod 755 fileback.sh
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
filename=`date +%y%m%d`_etc.tar.gz
cd /etc/
tar -zcvf $filename *
mv $filename /root/bak/
------------------------------------------------------
vim /etc/crontab 加入
* * 1 * * root ./fileback.sh &

------------------------------------------------
6.有一普通用户想在每周日凌晨零点零分定期备份/user/backup到/tmp目录下,该用户应如何做?
可以用 contab -e 来做,和上面一题差不多。


7.设计一个Shell程序,在/userdata目录下建立50个目录,即user1~user50,并设置每个目录的权限,其
中其他用户的权限为:读;文件所有者的权限为:读、写、执行;文件所有者所在组的权限为:读、执行。

#!/bin/bash
#7.sh
#file executable: chmod 755 7.sh
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
for ((i=1;i<=50;i++))
do
       mkdir -p /usrdata/user$i
       cd /usrdata
       chmod 754 user$i
done

利用top取某个进程的CPU的脚本:


2009-8-21

磁针石:xurongzhong#gmail.com

博客:oychw.cublog.cn



#/bin/sh

Max_CPU=0
Avg_CPU=0
Total_Time=1

Process=$1
Interval=$2

# check the parameters
if [ $# -ne 2 ]; then
   echo "Usage: $0 ProcessName Interval"
   exit
fi

LogFile="Per.txt"
echo "`date`" > $LogFile

while sleep $Interval
do
   top -d 1 -n 1|grep $Process|grep -v grep|awk '{print $9"\t"$10}' >> $LogFile
done

 

判断是否是设备文件

 

#/bin/bash

echo -e "The program will Judge a file is or not a device file.\n\n"

read -p "Input a filename:" filename

if [ -b $filename -o -c $filename ]; then

        echo "$filename is a device file"

        exit 0

else

        echo "$filename is not a device file"

        exit 1

firead –p:用于在读数据时输出提示信息

 

注意! [ 之间是有空格的:if ! [ -f $filename ] ; then。一般用if [ ! * ]

 

添加用户:

 

#/bin/bash

 

groupadd -f class1

for i in {9909..9911}

do

        xx=`echo $i | sed 's/99//g'`

        useradd -g class1 std${xx}

        echo std${xx} | passwd std${xx} --stdin

        echo -e "user std${xx} passwd is std${xx}">>/root/newuser.txt

done

exit 0

 

       注意等号的前后不要有空格:xx=`echo $i | sed 's/99//g'`

       变量如果前后有字符,要是大括号

 

统计IP访问:

要求分析apache访问日志,找出访问页面数量在前100位的IP数。日志大小在78M左右。以下是apache的访问日志节选

 

202.101.129.218 - - [26/Mar/2006:23:59:55 +0800] "GET /online/stat_inst.php?pid=d065 HTTP/1.1" 302 20-"-" "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"

 

 

# awk '{print $1}' log      |sort |uniq -c|sort -r |head -n10

      5 221.224.78.15

      3 221.233.19.137

      1 58.63.148.135

      1 222.90.66.142

      1 222.218.90.239

      1 222.182.95.155

      1 221.7.249.206

      1 221.237.232.191

      1 221.235.61.109

      1 219.129.183.122

 

这个地方有个疑问,为什么在使用uniq之前要sort。

 

求2个数之和

#/bin/bash

typeset first second

read -p "Input the first number:" first

read -p "Input the second number:" second

result=$[$first+$second]

echo "result is : $result"

exit 0

 

 

文本分析

取出password中shell出现的次数
第一种方法结果:
      4 /bin/bash
      1 /bin/sync
      1 /sbin/halt
     31 /sbin/nologin
      1 /sbin/shutdown
第二种方法结果:
/bin/sync       1
/bin/bash       1
/sbin/nologin   30
/sbin/halt      1
/sbin/shutdown  1

 

答案:

cat /etc/passwd|awk -F: '{if ($7!="") print $7}'|sort|uniq –c

cat /etc/passwd|awk -F: '{if ($7!="") print $7}'|sort|uniq -c | awk '{print $2,$1}'

 

 

文件整理

employee文件中记录了工号和姓名
employee.txt:
100 Jason Smith
200 John Doe
300 Sanjay Gupta
400 Ashok Sharma
bonus文件中记录工号和工资
bonus.txt:
100 $5,000
200 $500
300 $3,000
400 $1,250
要求把两个文件合并并输出如下
处理结果:
400 ashok sharma $1,250
100 jason smith  $5,000
200 john doe  $500
300 sanjay gupta  $3,000

 

答案:join employee bonus | sort -k 2

 

 

打印本机的交换分区大小

处理结果:
Swap:1024M

 

free -m | sed -n '/Swap/p' | awk '{ print $2}'

free -m | sed -n 's/Swap:\ *\([0-9]*\).*/\1/p'

 

输出本机创建20000个目录所用的时间

处理结果:
real    0m3.367s
user    0m0.066s
sys     0m1.925s

 

答案:

# time for i in {1..2000} ; do mkdir /root/neil$i; done

 

real    0m6.200s

user    0m1.128s

sys     0m4.710s

 

打印当前sshd的端口和进程id

处理结果:
sshd Port&&pid: 22 5412

 

答案:netstat -anp | grep sshd | sed -n 's/.*:::\([0-9]*\)\ .* \ \([0-9]*\)\/sshd/\1 \2/p'

 

打印root可以使用可执行文件数

处理结果:
root's bins: 2306

 

echo "root's bins: $(find ./ -type f | xargs ls -l | sed '/-..x/p' | wc -l)"

root's bins: 3664

 

编译当前目录下的所有.c文件:

 

for file in *.c; do echo $file ; gcc -o $(basename $file .c) $file  ; sleep 2;  done > compile 2>&1

 

将一目录下所有的文件的扩展名改为bak

for i in *.*;do mv $i ${i%%.*}.bak;done

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 以下是一些常见的shell面试题及答案: 1. 什么是shell? 答:Shell是一种用于访问操作系统内核服务的命令行界面,它允许用户与操作系统交互,并执行各种操作。 2.请描述一下Linux中的进程和线程? 答:进程是操作系统中独立运行的程序,它有自己的内存空间和系统资源。线程是进程中的一个执行单元,它可以独立运行并且可以共享进程的资源。 3.请描述一下如何使用grep命令来查找文件中的特定字符串? 答:使用grep命令可以在文件中查找特定字符串。语法如下:grep 'string' fileName.例如: grep 'hello' test.txt 4.请描述一下如何使用sed命令来替换文件中的文本? 答:使用sed命令可以替换文件中的文本。语法如下:sed 's/old-text/new-text/g' fileName.例如: sed 's/hello/world/g' test.txt 5.请描述一下如何使用awk命令来处理文本文件? 答:awk命令是一种强大的文本处理工具,可以用来解析和操作文本文件。语法如下:awk 'pattern { action }' fileName. 例如:awk '{print $1}' test.txt 6.请描述一下如何使用cut命令来剪切1. 什么是 shell? 答:shell 是一种用于访问操作系统服务的命令行界面。它提供了用于交互式访问和执行操作系统命令的方法。 2. 什么是 shell 脚本? 答:shell 脚本是一种使用 shell 命令编写的脚本程序,可以在 shell 中执行。它可以包含一系列命令和流程控制结构,用于自动执行常见任务。 3. 什么是变量? 答:变量是存储值的占位符。在 shell 脚本中,变量可用于存储和引用值,如字符串或数字。 4. 怎样在 shell 中创建变量? 答:在 shell 中创建变量,需要使用等号 (=) 将变量名和值相关联。如: ``` name="John Doe" ``` 5. 怎样在 shell 中调用变量? 答:在 shell 中调用变量,需要在变量前面加上美元符号($)。如: ``` echo $name ``` 6. 怎么在 shell 中使用条件语句? 答:在 shell 中使用条件语句需要使用 if 关键字,并使用 test 命令或者 [] 来测试条件是否成立。如: ``` if [ $a -gt $b ] then echo "a is greater than b" fi ``` 7. 怎么在 shell 中使用循环语句? 答:在 shell 中使用循环语句可以使用 for 和 while 关1. 什么是 ShellShell 是一种命令解释器,它提供了在操作系统与用户之间进行交互的接口。 2. 常见的 Shell 类型有哪些? 常见的 Shell 类型有:bash, csh, ksh, tcsh, zsh 等。 3. Shell 中如何执行外部程序? 在 Shell 中可以使用 "./program_name" 或 "program_name" 的形式来执行外部程序。 4. Shell 中如何查看进程? 在 Shell 中可以使用 "ps" 命令来查看当前系统中的进程。 5. Shell 中如何查看磁盘使用情况? 在 Shell 中可以使用 "df" 命令来查看磁盘使用情况。 6. Shell 中如何查看文件目录的权限? 在 Shell 中可以使用 "ls -l" 命令来查看文件目录的权限。 7. Shell 中如何创建一个目录? 在 Shell 中可以使用 "mkdir directory_name" 命令来创建一个目录。 8. Shell 中如何删除一个文件? 在 Shell 中可以使用 "rm file_name" 命令来删除一个文件。 9. Shell 中如何重命名一个文件? 在 Shell 中可以使1. 什么是 shell? 答:shell 是一种操作系统的命令解释器,它提供了一种用户与操作系统进行交互的方式。 2. 什么是 shell 脚本? 答:shell 脚本是一种用来在 shell 中执行的脚本程序,它由一系列 shell 命令组成。 3. 如何查看当前使用的 shell? 答:使用命令 echo $SHELL 可以查看当前使用的 shell。 4. 如何执行一个 shell 脚本? 答:使用命令 sh script.sh 或者 bash script.sh 来执行一个 shell 脚本。 5. 什么是变量? 答:变量是一种存储值的容器,在 shell 中可以使用变量来存储和管理数据。 6. 如何设置和使用变量? 答:使用命令 variable_name=value 来设置变量,使用 $variable_name 来使用变量。 7. 什么是环境变量? 答:环境变量是一种特殊的变量,它在整个系统中都可以使用,用于存储系统相关的配置信息。 8. 什么是 $PATH? 答:$PATH 是一个环境变量,它存储了系统中可执行程序的搜索路径。 9. 什么是 $HOME? 答:$HOME 是一个环境变量,它存储了当前用户的主目录的路径。 10. 什么是条件语句? 答1. 什么是shell? 答:Shell是一种命令行界面的操作系统,它提供了一种简单的方式来交互和控制底层操作系统。 2. 你知道哪些常用的shell? 答:常用的shell有Bash,Zsh,Ksh和Csh。 3. 你能说出几个shell脚本常用的控制结构? 答:if-else, for, while, case, until。 4. 你能解释一下什么是环境变量? 答:环境变量是一种特殊类型的变量,可以在shell会话或者整个操作系统中共享,环境变量可以用来存储系统配置信息和用户设置信息。 5. 你能简单描述一下如何使用grep命令? 答:grep命令可以在文本文件中搜索指定的字符串。语法为 "grep [options] 'pattern' file" 。例如:“grep 'hello' test.txt” 会在test.txt文件中搜索hello。 ### 回答2: 随着Linux的普及和应用场景的不断扩大,越来越多企业对于拥有shell技能的人才的需求也越来越大。在面试中,关于shell技能相关的问题也逐渐增多。下面就让我们来详细了解一下常见的shell面试题及答案。 1. 什么是shellshell是操作系统的外壳,它是用户与系统内核之间的接口,提供了用户与操作系统交互的方法。shell可以接收用户的命令,并将其转换为操作系统的命令进行执行,同时还可以执行脚本文件,对一些复杂的任务进行自动化处理。 2. 如何查看当前使用的shell版本? 在Linux系统中,可以使用echo $SHELL命令来查看当前使用的shell版本。 3. 如何设置环境变量? 可以使用export命令来设置环境变量,比如: export PATH=$PATH:/usr/local/bin 表示将/usr/local/bin目录加入到PATH环境变量中。 4. 如何列出当前目录下的所有文件目录? 可以使用ls命令来列出当前目录下的所有文件目录,如: ls -al 其中,a表示显示所有文件目录(包括隐藏文件),l表示以长格式显示。 5. 如何创建目录? 可以使用mkdir命令来创建目录,如: mkdir testdir 表示创建名为testdir的目录。 6. 如何删除文件? 可以使用rm命令来删除文件,如: rm test.txt 表示删除名为test.txt的文件。 7. 如何查找文件? 可以使用find命令来查找文件,如: find /home/user -name test.txt 表示在/home/user目录下查找名为test.txt的文件。 8. 如何在文件中搜索指定字符串? 可以使用grep命令来在文件中搜索指定字符串,如: grep "hello" test.txt 表示在test.txt文件中搜索包含字符串“hello”的行。 9. 如何使用sed命令替换文件中指定字符串? 可以使用sed命令来替换文件中指定字符串,如: sed 's/hello/world/' test.txt 表示将test.txt文件中所有的“hello”替换为“world”。 10. 如何使用awk命令对文件进行处理? 可以使用awk命令对文件进行处理,如: awk '{print $1,$3}' test.txt 表示输出test.txt文件中每行第一列和第三列的内容。 以上就是常见的shell面试题及答案,希望对于准备从事Linux运维或开发工作的朋友们有所帮助。同时还需要注意的是,除了掌握shell基础知识外,也需要具备系统、网络、编程等方面的知识和经验,才能够在企业中脱颖而出。 ### 回答3: Shell是一种命令语言和程序设计语言,用于控制操作系统及其应用程序。Shell被广泛用于Unix和Linux操作系统中,作为用户与操作系统交互的工具。Shell的优点是简单易学、灵活运用和快速调试,因此成为了运维人员不可或缺的技能之一。下面对几个常见的Shell面试题及答案进行介绍。 一、什么是ShellShell是一种命令语言和程序设计语言,它是一种可以理解用户请求并将其转换为操作系统内核所需要执行的命令的程序。 二、什么是Shell脚本? Shell脚本是一种编写Shell程序的方法,它是一种用Shell语言编写的程序,可将一系列的Shell命令组织起来实现一定的功能。 三、如何定义一个Shell函数? 定义一个函数的方法如下所示: ``` 函数名() { 命令1; 命令2; ... } ``` 其中,函数名可以任意定义,函数体中可包含多个命令。 四、如何判断一个文件是否存在? 使用if语句可以实现对文件是否存在的判断,代码如下: ``` if [ -e "文件名" ] then 命令1; else 命令2; fi ``` 其中,-e表示文件是否存在的参数,如果文件存在,则执行命令1,否则执行命令2。 五、如何遍历一个目录下所有的文件及子目录? 使用for循环语句可以遍历一个目录下所有的文件及子目录,代码如下: ``` for file in `ls 目录名` do 命令1; done ``` 其中,ls用于列出目录下的所有文件名,for循环语句遍历每一个文件进行相应的操作。 六、如何实现两个字符串的比较? 使用if语句可以实现两个字符串的比较,代码如下: ``` if [ 字符串1 = 字符串2 ] then 命令1; else 命令2; fi ``` 其中,=表示比较两个字符串是否相等,如果相等,则执行命令1,否则执行命令2。 七、如何实现输入输出重定向? 使用重定向符号可以实现输入输出重定向,如下所示: ``` 命令 < 输入文件 > 输出文件 ``` 其中,<表示输入重定向,>表示输出重定向。 八、如何实现后台运行? 使用&运算符可以实现后台运行,如下所示: ``` 命令 & ``` 其中,&表示在后台运行该命令。 以上是Shell面试题及答案的简要介绍。在面试过程中,还需要具备一定的实际操作能力,熟练掌握Shell编程中的语法、操作符、变量、数组、函数等知识点,才能更好地应对面试题并达到求职的目标。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值