文章里面的面试题目都是从网络上忙摘录下来的部分有做的会贴出答案,没有做的,我就空着,如果你们有做出来答案,欢迎评论区给出。
1.文本分析
取出password中shell出现的次数
第一种方法结果:
4 /bin/bash
1 /bin/sync
1 /sbin/halt
31 /sbin/nologin
1 /sbin/shutdown
答案:
(1)root@docker-host-03:~# awk -F: '{s[$NF]++}END{for(i in s)prints[i],i}' /etc/passwd
8 /bin/false
20 /bin/sh
3 /bin/bash
1 /usr/sbin/nologin
1 /bin/sync
(2)root@docker-host-03:~# awk -F: '{print $NF}' /etc/passwd | sort | uniq -c
3 /bin/bash
8 /bin/false
20 /bin/sh
1 /bin/sync
1 /usr/sbin/nologin
第二种方法结果:
/bin/sync 1
/bin/bash 1
/sbin/nologin 30
/sbin/halt 1
/sbin/shutdown 1
答案:
(1)
root@docker-host-03:~#awk -F: '{s[$NF]++}END{for(i in s)print i,s[i]}' /etc/passwd
/bin/false 8
/bin/sh 20
/bin/bash 3
/usr/sbin/nologin1
/bin/sync 1
(2)
root@docker-host-03:~#awk -F: '{print $NF}' /etc/passwd | sort| uniq -c |awk '{print $2,$1}'
/bin/bash 3
/bin/false 8
/bin/sh 20
/bin/sync 1
/usr/sbin/nologin1
2.文件整理
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
答案:
root@docker-host-03:~#paste employe.txt bonus.txt |awk '{print$1,$2,$3,$5}' | tr '[A-Z]' '[a-z]' |so
rt -s -k2
400 ashok sharma$1,250
100 jason smith$5,000
200 john doe$500
300 sanjay gupta$3,000
3.打印本机的交换分区大小
处理结果:
Swap:1024M
答案1:
root@docker-host-03:~# free -m | awk ' $0~/Swap/{print $1,$2"M"}'
Swap: 1021M
4.用户清理
清除本机除了当前登陆用户以外的所有用户
处理结果:
23:00:17 up 1:08, 1 user, load average: 0.02, 0.05,0.02
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/1 192.168.1.100 22:15 0.00s 10.75s 0.00s w
本机只剩下你自己就对了:)
5.root用户今天登陆了多长时间
处理结果:
root logon today: 0.06 hour
6.打印当前sshd的端口和进程id
处理结果:
sshd Port&&pid: 22 5412
答案:
root@docker-host-03:~#netstat -anlp |grep`pidof 0`| awk -F '[ |:|/]+' ' $0~/ESTABLISHED/{s=$5;p=$9}END{print "sshd&&portis:"s,p}'
sshd&&portis:22 2484
7.输出本机创建20000个目录所用的时间
处理结果:
real 0m3.367s
user 0m0.066s
sys 0m1.925s
答案:
root@docker-host-03:~#time for i in {1..2000};do mkdir $i;done
real 0m1.972s
user 0m0.119s
sys 0m1.808s
8.打印root可以使用可执行文件数
处理结果:
root's bins: 2306
答案:
root@docker-host-03:~# find ./ -type f-user root -perm /u+x,g+x | awk '{A=NR}END{print "root bins:",A}
'
root bins: 151
http://oldboy.blog.51cto.com/2561410/1632876?from=singlemessage&isappinstalled=0
企业面试题2:
使用for循环在/oldboy目录下通过随机小写10个字母加固定字符串oldboy批量创建10个html文件,名称例如为:
[python] viewplain copy
1. [root@oldboy oldboy]# sh /server/scripts/oldboy.sh
2. [root@oldboy oldboy]# ls
3. coaolvajcq_oldboy.html qnvuxvicni_oldboy.html vioesjmcbu_oldboy.html
4. gmkhrancxh_oldboy.html tmdjormaxr_oldboy.html wzewnojiwe_oldboy.html
5. jdxexendbe_oldboy.html ugaywanjlm_oldboy.html xzzruhdzda_oldboy.html
6. qcawgsrtkp_oldboy.html vfrphtqjpc_oldboy.html
答案:
我这里就直接用一条命令写,当然要写成脚本也是可以的。
root@docker-host-03:~# for i in `seq 10`;dofile=$(basename `tempfile`)_oldboy.html && touch `echo $file|tr '[A-Z]''[a-z]'`;done
企业面试题3:请用至少两种方法实现!
将以上文件名中的oldboy全部改成oldgirl(用for循环实现),并且html改成大写。
(1)
root@docker-host-03:~# for f in `ls*_oldboy.html`;do newfile=`echo $f|sed 's/_oldboy.html/_oldgirl.HTML/'`&& mv $f $newfile;done
root@docker-host-03:~# ls
123123 file70fprd_oldgirl.HTML filer9kepg_oldgirl.HTML list2 tmp
123123 123123.asdf filecaf5xe_oldgirl.HTML files6ucvh_oldgirl.HTML root tmpfile
123.sh filejvhaud_oldgirl.HTML filewwwfu8_oldgirl.HTML solar tools
backup filemiffbf_oldgirl.HTML filextolxa_oldgirl.HTML testgit t.txt
bonus.txt filepxfdvc_oldgirl.HTML findcont test.sh
employe.txt fileqejddb_oldgirl.HTML list test_shell
(2)
主要是用不同的方法来拼凑出来新的文件名称
root@docker-host-03:~# newfile=`echo"fileqejddb_oldgirl.HTML" | cut -d'_' -f1`_oldboy.HTML
root@docker-host-03:~# echo $newfile
fileqejddb_oldboy.HTML
企业面试题4:
批量创建10个系统帐号oldboy01-oldboy10并设置密码(密码为随机8位字符串)。
1. USER=oldboy
2. create_user(){
3.
4. for i in {01..10}
5. do
6. RPASSWD=$(tr -dc [:alpha:] < /dev/urandom |head -c 8)
7. useradd $USER$i
8. echo $RPASSWD|passwd $USER$i --stdin
9. echo $USER$i----$RPASSWD >> /oldboy/userpasswd.txt
10. done
11.}
for n in{01..10};do
pw=`tempfile | tail –c 8` && useradd oldboy$n && echo $pw | passwd oldboy$n –stdin
;done
企业面试题10:请用至少两种方法实现!
bash for循环打印下面这句话中字母数不大于6的单词(昆仑万维面试题)。
I am oldboy teacher welcome to oldboy training class.
[python] viewplain copy
1. #!/bin/bash
2.
3.
4. echo '###Usage1#####'
5. a='I am oldboy teacher welcome to oldboy training class.'
6.
7. for i in $a
8. do
9. NUM=`echo $i |wc -L`
10. if [ $NUM -le 6 ];then
11. echo $i
12. fi
13.done
14.
15.
16.echo '###Usage2######'
17.
18.for i in $a
19.do
20. if [ ${#i} -le 6 ];then
21. echo $i
22. fi
23.done
24.