34、企业面试题1
34.1、 buffer和cache的区别:
34.2、查看文件多少到多少行:
head -n 20 |tail -n 11
sed -n "10,20"p passwd
34.3、除什么文件外全部删除:
34.4、多条件限制下的移动:
34.5、学习心得:
便宜的都是最贵的
学习的投资永远都是有价值的投资
相信只有努力才会有回报
不断向有经验的人学习
要定好知识边界,百分之百的投入
一切的行为背后都有动机
34.6、linux企业面试题
34.7、使用正则表达式取ip地址:
[root@m01 ~]# ifconfig | awk -F "[ :]+" 'NR==2 {print $4}'
10.0.0.61
[root@m01 ~]# ifconfig |sed -n "2p" | awk -F "[ :]+" '{print $4}'
10.0.0.61
34.8、 /etc/passwd中的数据前后对换:
[root@centos6 ~]# sed -nr 's#([^:]+)(:.*:)(/.*$)#\3\2\1#gp' /etc/passwd
/bin/bash:x:0:0:root:/root:root
/sbin/nologin:x:1:1:bin:/bin:bin
/sbin/nologin:x:2:2:daemon:/sbin:daemon
34.9、平时运维的方法:
34.10、如何把文件中的空行过滤掉:
/d把空行的内容删除
34.11、文件内容解释:
/var/log/message #系统日志
/var/log/secure #系统安全日志
/var/spool/clientmqueue #邮件临时目录
/proc/interrupts #查看中断文件
/etc/fstab #磁盘文件系统开机自动挂载文件
/etc/profile #全局环境配置文件
/etc/sysctl.conf #linux的内核配置
34.12、查看系统命令的路径:
34.13、服务器关机和重启等命令:
1、关机命令:
shutdown -h now :立刻关机(生产常用)
shutdown -h +1 :一分钟一后关机
init 0 :切换到运行级别到0
halt:立即停止系统,需要人工关闭电源(生产常用)
proweroff:立即停止系统,并且关闭电源
2、重启命令:
reboot (生产常用)
shutdown -r now (生产常用)
shutdown -r +1 :一分钟以后重启
init 6
3、注销命令:
ctrl+d(生产常用)
exit
logout
34.14、linux定时任务生产java服务无法执行问题:
1、脚本要有执行权限;使用java环境,脚本里的java路径要写全路径(变量路径)
34.15、inode被填满的企业案例:
默认的定时任务执行时会给root发邮件,如果邮件服务不开(默认开启,优化时关闭),
删除脚本上的 >/dev/null 2>&1 会导致postfix临时目录 /var/spool/postfix/maildrop/被很多的小文件填满,从而导致inode填满。(开启的情况下,会自动清理邮件目录下的文件)
创建文件时提示“no space left on device”,表示磁盘的inode满了;
34.16、网站访问慢的案例:
某个进程占用cpu比例高
linux java/http/php 中某一个进程占用cpu很高
1、top命令找到可疑的进程id:
2、strace -p 进程id (找到原因 )
34.·17、如果想修改开机内核文件:
修改的文件是 /boot/grup/grup.conf
34.18、硬盘的种类:
/dev/sda1 scsi sas sata IDE hd
/etc/fstab 开机挂载磁盘
34.19、定时任务的定时时间格式:
分,时,日,月,周
34.20、查看二进制文件:
od -t x /bin/ls 以12进制的方式查看
file:查看文件的类型
34.21、写一个脚本实现批量添加20个用户:
#!/bin/sh
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/root/bin
for n in `seq 1 1 20`;do
useradd user$n
echo user$n|md5sum|cut -c 4-8 | passwd --stdin user$n
echo user$n >/tmp/user.log
echo user$n|md5sum|cut -c 4-8 >/tmp/userpasswd.log
paste -d "=" /tmp/user.log /tmp/userpasswd.log >>/tmp/usercount.log;
done
(用户名存在(不会被创建)且密码不会被更新,除非更改md5的取值)
[root@centos6 scripts]# cat /count.log
user1 93167
user2 2d1d7
user3 c489e
user4 4890e
user5 ca814
user6 957ba
user7 2c5fb
user8 3428e
user9 49703
user10 0dc3e
user11 b755c
user12 1deb5
user13 f627d
user14 72383
user15 c5412
user16 eb606
user17 24521
user18 3224f
user19 f98ee
user20 613f8
34.22、查看/var/log下面的所有文件:
tree和 --maxdepht 的一层目录就代表当前目录的层;
[root@centos6 scripts]# find /var/log -maxdepth 1 -type f | wc -l
47
[root@centos6 scripts]# tree /var/log | tail -1
6 directories, 47 files
34.23、显示内存的信息:
free -h:只显示的是内存的固定的信息不是动态的
top:显示的是系统动态的内存信息,使用情况
34.24、显示端口号:
[root@centos6 scripts]# netstat -tunlp | grep "22"
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1360/sshd
tcp 0 0 :::22 :::* LISTEN 1360/sshd
[root@centos6 cron.d]# lsof -i tcp:22
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1360 root 3u IPv4 10696 0t0 TCP *:ssh (LISTEN)
sshd 1360 root 4u IPv6 10698 0t0 TCP *:ssh (LISTEN)
sshd 1396 root 3r IPv4 10834 0t0 TCP 192.168.1.1:ssh->192.168.1.254:49363 (ESTABLISHED)
34.25、打印文件的前三行:
head - n 3 a.txt
sed -n '1,3p' a.txt
ifconfig | awk 'NR>0 && NR<4 {print $0}'
34.26、复制多大的文件到指定的目录:
find /etc -type f -size +100k |xargs -i cp -av {} /home/lc1
34.27、打印进程信息
是一个静态的信息,多用的是top
ps(打印当前的进程信息) aux(和当前终端有关的,以用户为中心,x,和当期终端无关的(所有的))
[root@centos6 lc1]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1385 0.0 0.0 4064 552 tty1 Ss+ 20:54 0:00 (当前任务所占用的cpu时长) /sbin/minget
用户 进程号 cpu占用情况 内存的占用情况
34.28、查看网卡信息:
ip add
ifconfig
[root@centos6 cron.d]# ethtool eth0
Settings for eth0:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supported pause frame use: No
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised pause frame use: No
Advertised auto-negotiation: Yes
Speed: 1000Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 0
Transceiver: internal
Auto-negotiation: on
MDI-X: off (auto)
Supports Wake-on: d
Wake-on: d
Current message level: 0x00000007 (7)
drv probe link
Link detected: yes
34.29、删除三天前的文件:
find /tmp -type f -mtime +3 | xargs rm -vf
>=1>:标准输出重定向; 2>:错误输出重定向; >>:追加输出重定向; &>=2>&1:不管正确和错误都输出;
34.30、磁盘空间被占满:
block和inode是否为满
df -h df -i (sort -r 降序,默认是升序,-u:排重,-n :以数字排序,-k:第几列)
从小到大排序,文件夹的大小显示的是存储当前目录下下一层的文件名的大小,越大说明目录下的文件越多,占用的indoe多
[root@centos6 tmp]# find / -type d | xargs ls -ld 2>/dev/null | sort -k 5 -n|tail -5
find: `/proc/5088/task/5088/fd/5': No such file or directory
find: `/proc/5088/task/5088/fdinfo/5': No such file or directory
find: `/proc/5088/fd/5': No such file or directory
find: `/proc/5088/fdinfo/5': No such file or directory
drwxr-xr-x. 37 root root 36864 Aug 10 05:17 /usr/src/kernels/2.6.32-573.el6.x86_64/include/linux
drwxr-xr-x. 4 root root 36864 Aug 10 05:21 /usr/share/doc/systemtap-client-2.7
drwxr-xr-x. 2 root root 40960 Aug 10 05:31 /usr/share/man/man3p
drwxr-xr-x. 2 root root 40960 Sep 14 21:03 /usr/share/man/man1
drwxr-xr-x. 2 root root 135168 Aug 10 05:31 /usr/share/man/man3
34.31、开机自启动:
/etc/rc.local chkconfig rc.sysinit
34.32、制作一个定时任务,每天0点0分将/var/log/nginx目录下7天以前大于100k的日志文件移动到/date/2018090xx(以前一天日期命名的)目录中:
1、调试时间:
[root@centos6 postfix]# ntpdate ntp1.aliyun.com
17 Sep 20:18:05 ntpdate[5108]: adjust time server 120.25.115.20 offset 0.007208 sec
[root@centos6 postfix]# date +%F
2018-09-17
[root@centos6 postfix]# date +%Y%m%d -d -1day:前一天
20180916
2、编写脚本:
vim /services/scripts/date1.sh
#!/bin/bash
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
dir=/date/`date +%Y%m%d -d -1day`
mkdir dir -p
find /var/log/ -type f -mtime +7 -size +100k | xargs -i \cp -a {} $dir #xargs中操作命令不会被提示重复
3、设置定时任务:
crontab -e
00 00 * * * /service/scripts/date1.sh >/dev/null 2>&1
34.32、查看用户登录和退出的日志:
/root/bashrc_histrory
lastlog:用户最后一次登录服务器的时间日志;
last:用户登录服务器的时间和退出的情况;
34.33、如何一个服务加入到service中进行管理:
/init.d/脚本 chkconfig -add脚本(设置了开机启动级别,脚本下发到 /rc.d/rc num.d 中的软链接,
下次开机时根据开机级别启动服务,同时也加入了service服务,控制重启停止等服务)
34.34、列出根目录下各个子目录下面所占空间的大小:
[root@centos6 ~]# du --max-depth=1 -h /
82M /var
34M /boot
16K /lost+found
585M /tmp
0 /sys
27M /lib64
4.0K /mnt
20K /service
8.0K /opt
14M /sbin
4.0K /media
4.0K /srv
21M /home
88K /root
175M /lib
du: cannot access `/proc/6273/task/6273/fd/4': No such file or directory
du: cannot access `/proc/6273/task/6273/fdinfo/4': No such file or directory
du: cannot access `/proc/6273/fd/4': No such file or directory
du: cannot access `/proc/6273/fdinfo/4': No such file or directory
0 /proc
4.0K /selinux
216K /dev
7.6M /bin
30M /etc
1.1G /usr
2.1G /
1、计算出当前目录的大小:
[root@m01 /]# du -sh /tmp
16K /tmp
34.35、实现功能,在/tmp目录下找到10个以abc开头的文件,然后把这些文件的第一行保存到/tmp/new文件中:
find /tmp -type f -name "abc*.txt" |xargs head -1 -q >/tmp/new
-q参数是去除文名,只留文件内的结果
34.36、查看当前系统每个ip的连接数:
[root@centos6 ~]# netstat -tn | grep "ESTABLISHED" | awk -F "[ :]+" '{print$4}'|sort -n | uniq -c
3 192.168.1.1
34.37、查看当前连接的用户:
[root@m01 ~]# w #或者是who
18:36:37 up 14:11, 1 user, load average: 0.02, 0.44, 0.71
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
lc pts/1 172.16.1.254 18:32 0.00s 0.19s 0.06s sshd: lc [priv]
1、如何踢除用户:
skill -9 -u lc
34.38、查看http、https、ftp、telent、ssh、rsync、dns、mysql服务的端口号:
[root@centos6 ~]# egrep --color=auto -w "http|https|ftp|telent|ssh|rsync|dns|mysql" /etc/services #grep -w 表示精确匹配
ftp-data 20/tcp
ftp-data 20/udp
# 21 is registered to ftp, but also used by fsp
ftp 21/tcp
ftp 21/udp fsp fspd
ssh 22/tcp # The Secure Shell (SSH) Protocol
ssh 22/udp # The Secure Shell (SSH) Protocol
http 80/tcp www www-http # WorldWideWeb HTTP
http 80/udp www www-http # HyperText Transfer Protocol
http 80/sctp # HyperText Transfer Protocol
https 443/tcp # http protocol over TLS/SSL
https 443/udp # http protocol over TLS/SSL
https 443/sctp # http protocol over TLS/SSL
gss-http 488/tcp
34.39、列出linux下系统常用的集中文件系统格式,并比较各自的特点:
[root@centos6 ~]# ls /lib/modules/2.6.32-573.el6.x86_64/kernel/fs/
autofs4 cifs dlm ext2 fat gfs2 jffs2 nfs nls udf
btrfs configfs ecryptfs ext3(带日志功能的文件系统,比较安全) fscache jbd lockd nfs_common squashfs xfs
cachefiles cramfs exportfs ext4(带日志功能的文件系统,比较安全) fuse jbd2 mbcache.ko nfsd ubifs
34.40、请详细描述dns的访问过程,请以www.baidu.com为例:
1、访问过程:
①本机向local dns请求www.baidu.com
②local dns向根域请求www.baidu.com,根域返回com.域的服务器IP
③向com.域请求www.baidu.com,com.域返回baidu.com域的服务器IP
④向baidu.com请求www.baidu.com,返回cname www.a.shifen.com和a.shifen.com域的服务器IP
⑤向root域请求www.a.shifen.com
⑥向com.域请求www.a.shife.com
⑦向shifen.com请求
⑧向a.shifen.com域请求
⑨拿到www.a.shifen.com的IP
⑩localdns返回本机www.baidu.com cname www.a.shifen.com 以及 www.a.shifen.com的IP
2、递归和迭代的区别:
递归就是指程序调用自身的编程思想,即一个函数调用本身;
迭代是利用已知的变量值,根据递推公式不断演进得到变量新值得编程思想。
客户机和dns服务器之间属递归查询;dns服务器和根服务器之间的查询属于迭代查询;
dns:
114.114.114.114 #阿里;
223.5.5.5 #阿里;
8.8.8.8 #谷歌
33.41、ssh抓包:
tcpdump port 22 -Std -c 3
打印绝对值,不打印时间戳,打印后停止
33.41、如何显示linux的端口号:
netstat
-t:在线的tcp协议
-u:在线的udp协议
-n:显示ip地址
p:显示进程号
l:显示监听信息(服务器,不加显示服务器/客户端)
[root@centos6 ~]# netstat -tn
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 224 192.168.1.1:22 192.168.1.254:50194 ESTABLISHED
tcp 0 0 192.168.2.1:22 192.168.2.254:50294 ESTABLISHED
33.42、简要叙述下列端口所运行的服务:
21 ftp
22 ssh
23 telent
25 smtp 单邮件传输协议:邮件服务器之间的协议
110 pop3 客户端到邮件服务器之间的协议
143 imap4
873 rsync
33.43、如何实现在使用nginx反向代理服务器的情况下web服务器还能记录访问客户端的真实ip地址:
在反向代理服务器上配置X-Forwarded-For代码,并在nginx服务器上开启X-Forwarded-For日志功能;
33.44、实验截图: