Linux 知识点杂记

记录常见的 Linux 面试题。


  • linux 如何挂在 windows 下的共享目录

mount.cifs //192.168.1.3/server /mnt/server -o user=administrator,pass=123456

  • 查看http的并发请求数与其TCP连接状态

查看连接数:netstat -na|wc -l

查看有效连接数: netstat -nat|grep ESTABLISHED|wc -l

分组统计各种状态的连接数: netstat -n|awk '/^tcp/ {++b[$NF]} END {for (a in b) print a,b[a]}'

按IP连接排序: netstat -nat |awk '{print $6}'|sort|uniq -c

查看连接某服务端口最多的的IP: netstat -nat|grep '172.19.104.132:20222'|awk '{print $5}'|awk -F':' '{print $1}' |uniq -c|sort -rn

  • 修改系统最大能开启的文件描述符

vim /etc/security/limits.conf

添加

* soft nofile 10240
* hard nofile 10240

重启后生效

  • 用tcpdump嗅探80端口的访问看看谁最高

tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr |head -5

  • 查看/var/log目录下文件数

ls /var/log/ -lR| grep "^-" |wc -l

  • 查看当前系统每个IP的连接数

netstat -n | awk '/^tcp/ {print $5}'| awk -F: '{print $1}' | sort | uniq -c | sort -rn

  • shell下32位随机密码生成

cat /dev/urandom | head -1 | md5sum | head -c 32 >> /pass

生成的密码将保存在/pass里

  • 统计出apache的access.log中访问量最多的5个IP

cat access_log | awk  '{print $1}' | sort | uniq -c | sort -n -r | head -5

  • 查看网页返回的状态码

curl -I -m 10 -o /dev/null -s -w %{http_code} https://blog.echoxu.cn

  • 如何查看二进制文件的内容

hexdump -C filename  -C

-C  是比较规范的 十六进制和 ASCII 码显示

-c  是单字节字符显示

-b  单字节八进制显示

-o  是双字节八进制显示

-d  是双字节十进制显示

-x  是双字节十六进制显示

  • ps aux中的VSZ代表什么意思,RSS代表什么意思

VSZ:虚拟内存集,进程占用的虚拟内存空间

RSS:物理内存集,进程战用实际物理内存空间

  • 检测并修复/dev/hda5

fsck 用来检查和维护不一致的文件系统。若系统掉电或磁盘发生问题,可利用 fsck 命令对文件系统进行检查

  • Linux系统的开机启动顺序

⑴开机BIOS自检,加载硬盘。

⑵读取MBR,MBR引导。

⑶grub引导菜单(Boot Loader)。

⑷加载内核kernel。

⑸启动init进程,依据inittab文件设定运行级别

⑹init进程,执行rc.sysinit文件。

⑺启动内核模块,执行不同级别的脚本程序。

⑻执行/etc/rc.d/rc.local

⑼启动mingetty,进入系统登陆界面。

  • 符号链接与硬链接的区别

在Linux系统中,链接分为两种,一种是硬链接(Hard link),另一种称为符号链接或软链接(Symbolic Link)。

①默认不带参数的情况下,ln创建的是硬链接,带-s参数的ln命令创建的是软链接。

②硬链接文件与源文件的inode节点号相同,而软链接文件的inode节点号,与源文件不同.

③ln命令不能对目录创建硬链接,但可以创建软链接。对目录的软链接会经常使用到。

④删除软链接文件,对源文件和硬链接文件无任何影响。

⑤删除文件的硬链接文件,对源文件及软链接文件无任何影响。

⑥删除链接文件的源文件,对硬链接文件无影响,会导致其软链接失效(红底白字闪烁状)。

⑦同时删除源文件及其硬链接文件,整个文件才会被真正的删除。

⑧很多硬件设备的快照功能,使用的就是类似硬链接的原理。

⑨软链接可以跨文件系统,硬链接不可以跨文件系统。

  • 保存当前磁盘分区的分区表

dd if=/dev/sda of=./mbr.txt bs=1 count=512

  • 修改内核参数

vim /etc/sysctl.conf   sysctl -p

  • 限制apache每秒新建连接数为1,峰值为3

每秒新建连接数 一般都是由防火墙来做,apache 本身好像无法设置每秒新建连接数,只能设置最大连接:

iptables -A INPUT -d 172.16.100.1 -p tcp --dport 80 -m limit --limit 1/second  -j ACCEPT

最大连接apache本身可以设置MaxClients 3,修改apache最大连接 前提还是要修改系统默认tcp连接数。

  • FTP的主动模式和被动模式

FTP协议有两种工作方式:PORT方式和PASV 方式,即主动式和被动式。

PORT(主动)方式的连接过程是:

客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用 PORT 命令告诉服务器:“我打开了 XX 端口,你过来连接我”。于是服务器从 20 端口向客户端的 XX 端口发送连接请求,建立一条数据链路来传送数据。

PASV(被动)方式的连接过程是:

客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务器在命令链路上用 PASV 命令告诉客户端:“我打开了 XX 端口,你过来连接我”。于是客户端向服务器的 XX 端口 发送连接请求,建立一条数据链路来传送数据。

从上面可以看出,两种方式的命令链路连接方法是一样的,而数据链路的建立方法就完全不同。

  • 显示/etc/inittab中以#开头,且后面跟了一个或者多个空白字符,而后又跟了任意非空白字符的行

grep "^# \{1,\}[^ ]" /etc/inittab

  • 显示/etc/inittab 中包含了:一个数字:(即两个冒号中间一个数字)的行

grep "\:[0-9]\{1\}\:" /etc/inittab

  • 将脚本添加到service服务

在脚本里加入

#!/bin/bash

# chkconfig: 345 85 15

# description: httpd

chkconfig httpd –add

  • 批量添加20个用户,用户名为user01-20,密码为 user 后面跟5个随机字符
#!/bin/bash
#description: useradd
for i in `seq -f"%02g" 1 20`;do
useradd user$i
echo "user$i:`echo $RANDOM|md5sum|cut -c 1-5`"|passwd –stdinuser$i >/dev/null 2>&1
done
  • 判断192.168.1.0/24网络里,当前在线的IP有哪些
#!/bin/bash
for ip in `seq 1 255`
  do
    {
     ping -c 1 192.168.1.$ip > /dev/null 2>&1
     if [ $? -eq 0 ]; then
          echo 192.168.1.$ip UP
     else
          echo 192.168.1.$ip DOWN
     fi
   }&
done
wait
  • 判断一个指定的脚本是否是语法错误;如果有错误,则提醒用户键入Q或者q无视错误并退出其它任何键可以通过vim打开这个指定的脚本
#!/bin/bash
read -p "please input check script-> " file
if [ -f $file ]; then
    sh -n $file > /dev/null 2>&1
    if [ $? -ne 0 ]; then
        read -p "You input $file syntax error,[Type q to exit or Type vim to  edit]" answer
        case $answer in
        q | Q)
           exit 0
           ;;
        vim )
           vim $file
           ;;
        *)
         exit 0
         ;;
        esac
   fi
else
    echo "$file not exist"
    exit 1
fi
  • linux最基本的开机启动项

建议选择五个开机启动项:

①.crond: 该服务用于周期地执行系统及用户配置的计划任务。有要周期性执行的任务计划需要开启,此服务是生产场景必须要用的一个软件。

②.iptables: iptables包过滤防火墙,有外网IP时,考虑开启。

③.network: 启动系统时,若想激活/关闭启动时的各个网络接口,则应(必须)考虑开启。

④.sshd: 远程连接Linux服务器时需要用到这个服务程序,所以必须要开启,否则将无法远程连接到Linux服务器。

⑤.rsyslog: 是操作系统提供的一种机制,系统的守护程序通常会使用rsyslog将各种信息收集写入到系统日志文件中,CentOS6以前此服务的名字为syslog。

⑥.sysstat: 是一个软件包,包含监测系统性能及效率的一组工具,这些工具对于Linux系统性能数据很有帮助,比如CPU使用率、硬盘和网络吞吐数据等,这些数据的分析,有利于判断系统运行是否正常,所以它是提高系统运行效率、安全运行服务的助手。

  • 请描述基本的Linux系统优化

⑴登录系统:不使用root登录,通过sudo授权管理,使用普通用户登录。

⑵禁止SSH远程:更改默认的远程连接SSH服务及禁止root远程连接。

⑶时间同步:定时自动更新服务器时间。

⑷配置yum更新源,从国内更新下载安装rpm包。

⑸关闭selinux及iptables(iptables工作场景如有wan ip,一般要打开,高并发除外)

⑹调整文件描述符数量,进程及文件的打开都会消耗文件描述符。

⑺定时自动清理/var/spool/clientmquene/目录垃圾文件,防止节点被占满(c6.4默认没有sendmail,因此可以不配。)

⑻精简开机启动服务(crond、sshd、network、rsyslog)

⑼Linux内核参数优化/etc/sysctl.conf,执行sysct -p生效。

(10)更改字符集,支持中文,但是还是建议使用英文,防止乱码问题出现。

⑾锁定关键系统文件(chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab 处理以上内容后,把chatter改名,就更安全了。)

⑿清空/etc/issue,去除系统及内核版本登陆前的屏幕显示。

  • 描述Linux运行级别0-6的各自含义

0:关机模式

1:单用户模式<==破解root密码

2:无网络支持的多用户模式

3:有网络支持的多用户模式(文本模式,工作中最常用的模式)

4:保留,未使用

5:有网络支持的X-windows支持多用户模式(桌面)

6: 重新引导系统,即重启

  • 生产场景如何对linux系统进行合理规划分区?

分区的根本原则是简单、易用、方便批量管理。根据服务器角色定位建议如下:

①单机服务器:如8G内存,300G硬盘

分区:  /boot 100-200M,swap 16G,内存大小8G*2,/ 80G,/var 20G(也可不分),/data 180G(存放web及db数据)

优点:数据盘和系统盘分开,有利于出问题时维护。

RAID方案:视数据及性能要求,一般可采用raid5折中。

②负载均衡器(如LVS等)

分区:/boot 100-200M,swap 内存的1-2倍,/  ,

优点:简单方便,只做转发数据量很少。

RAID方案:数据量小,重要性高,可采用RAID1

③负载均衡下的RS server

分区: /boot 100-200M,swap 内存的1-2倍,/

优点:简单方便,因为有多机,对数据要求低。

RAID方案:数据量大,重要性不高,有性能要求,数据要求低,可采用RAID0

④数据库服务器mysql及oracle如16/32G内存

分区:/boot 100-200M,swap 16G,内存的1倍,/ 100G,/data 剩余(存放db数据)

优点:数据盘和系统盘分开,有利于出问题时维护,及保持数据完整。

RAID方案:视数据及性能要求主库可采取raid10/raid5,从库可采用raid0提高性能(读写分离的情况下。)

⑤存储服务器

分区:/boot 100-200M,swap 内存的1-2倍,/ 100G,/data(存放数据)

优点:此服务器不要分区太多。只做备份,性能要求低。容量要大。

RAID方案:可采取sata盘,raid5

⑥共享存储服务器(如NFS)

分区:/boot 100-200M,swap 内存的1-2倍,/ 100G,/data(存放数据)

优点:此服务器不要分区太多。NFS共享比存储多的要求就是性能要求。

RAID方案:视性能及访问要求可以raid5,raid10,甚至raid0(要有高可用或双写方案)

⑦监控服务器cacti,nagios

分区:/boot 100-200M,swap 内存的1-2倍,/

优点:重要性一般,数据要求也一般。

RAID方案:单盘或双盘raid1即可。三盘就RAID5,看容量要求加盘即可。

  • 描述Linux下文件删除的原理

Linux系统是通过link的数量来控制文件删除的,只有当一个文件不存在任何link的时候,这个文件才会被删除。一般来说每个文件两个link计数器来控制i_count和i_nlink。当一个文件被一个程序占用的时候i_count就加1。当文件的硬链接多一个的时候i_nlink也加1。删除一个文件,就是让这个文件,没有进程占用,同时i_link数量为0。

  • 查看当前哪些用户在线

w        #显示目前系统登录用户

who      #显示目前已登录用户信息

last     #列出目前与过去登入系统的用户相关信息

lastlog  #检查某特定用户上次登录时间

whoami   #打印与当前生效的用户ID关联的用户名

finger   #用户信息查找程序

id       #显示指定用户或当前用户的用户与组信息

  • crontab格式

举例:

*/5 10,12 * 3-8 * * /usr/sbin/ntpdate 10.0.0.155  >/dev/null  2>&1

前五段是时间间隔的设定,单位分别是分钟、小时、日、月、周(尽量避免使用日月和周同时出现,以免造成系统误判)。

第一个时间段 分钟 范围0-59

第二个时间段 小时 范围0-23

第三个世间段 日   范围1-31

第四个时间段 月   范围1-12

第五个时间段 周   范围0-7

*星号代表任何时间都接受命令

,逗号,表示隔开。代表分隔的时间都适用此命令。

- 减号,两个时间段之间,代表在此时间段内执行定时任务。

/n斜线和n(数字)表示每隔n段时间执行一次。

7个基本要领:

第一、为定时任务规则加必要的注释

第二、定时任务命令或程序最好写到脚本里执行

第三、定时任务执行的脚本要规范路径,如:/server/scripts

第四、执行shell脚本任务时前加/bin/sh

执行定时任务时,如果是执行脚本,尽量在脚本前面带上/bin/sh命名

第五、定时任务结尾加 >/dev/null 2>&1

第六、/dev/null为特殊的字符设备文件,表示黑洞设备或空设备。

第七、有关重定向的说明

>或1>    输出重定向:把前面输出的东西输入到后边的文件中,会删除文件原有内容。 >>或1>>  追加重定向:把前面输出的东西追加到后边的文件中,不会删除文件原有内容。 <或<0     输入重定向:输入重定向用于改变命令的输入,指定输入内容,后跟文件名。 <<或<<0   输入重定向:后跟字符串,用来表示“输入结束”,也可用ctrl+d来结束输入。 2>        错误重定向:把错误信息输入到后边的文件中,会删除文件原有内容。 2>>        错误追加重定向:把错误信息追加到后边的文件中,不会删除文件原有内容。

标准输入(stdin):代码为0,使用<或<<

标准输出(stdout):代码为1,使用>或>>。正常的输出。

标准错误输出(sederr):代码为2,使用2>或2>>

特殊:

2>&1就是把标准错误重定向到标准输出(>&)。

>/dev/null 2>&1 等价于 1>/dev/null  2>/dev/null

  • Linux重要目录

① /目录下的文件夹里面分别是以下内容:

/usr 包含所有的命令和程序库、文档和其他文件及当前linux发行版的主要应用程序

/var 包含正在操作的文件,还有记录文件、加密文件、临时文件等

/home 除了root用户外的所有用户的配置文件,个性化文件和主目录,即家目录

/proc 虚拟目录,该目录实际上指向内存而不是硬盘

/bin    系统执行文件(二进制文件)普通用户可以使用

/sbin 系统执行文件(二进制文件)不能被普通用户使用,通常由root用户使用

/etc 操作系统的配置文件

/root root用户的家目录

/dev 系统设备文件,linux所有设备都是以文件的形式被处理,该目录不包含驱动程序

/lib 程序和核心模块共享库(仅限于/下的程序)

/boot 系统引导、启动文件,通常grub也在这里

/opt 可选应用程序目录

/tmp 临时文件,系统会自动清理

/lost+found 恢复文件(类似回收站)

/media 所有的磁盘(有时有光盘)将以文件夹的形式挂载,光盘镜像也可以挂载 /cd-rom 挂载光盘的地方

② /usr目录下的文件比较重要,其作用下面分类列出:

/usr/X11 X-windows桌面环境

/usr/doc linux系统的文档资料

/usr/share 独立于当前计算机的数据结构,如字典中的词

/usr/bin 类似/bin但是不参与启动,大部分命令都在这里

/usr/local 本地管理员安装的应用程序

/usr/local/bin 用户安装的应用程序(部分)

③ /proc目录的内容

/proc/cpuinfo 处理器的信息

/proc/devices 当前运行内核的所有设备清单

/proc/dma 当前正在使用中的DMA通道

/proc/filesystem 当前运行内核所配置的文件系统

/proc/interrupts 当前使用的中断和曾经有多少个中断

/proc/ioports 正在使用的I/O端口

  • 正确的关机和重启服务器的命令

⑴shutdown

[-t] 指定在多长时间之后关闭系统 [-r] 重启系统 [-k] 并不真正关机,只是给每个登录用户发送警告信号 [-h]关闭系统(halt)

⑵halt

halt是最简单的关机命令,其实际上是调用shutdown -h命令。halt执行时,杀死应用进程,文件系统写操作完成后就会停止内核。

halt命令的部分参数如下:

[-f] 没有调用shutdown而强制关机或重启 [-i] 关机或重新启动之前,关掉所有的网络接口[-p]关机时调用poweroff,此选项为缺省选项

⑶reboot

reboot工作过程与halt类似,作用是重新启动,而halt是关机。其参数与halt类似。

⑷init

init是所有进程的祖先,其进程号始终为1。init用于切换系统的运行级别,切换的工作是立即完成的。init 0命令用于立即将系统运行级别切换为0,即关机;init 6命令用于将系统运行级别切换为6,即重新启动。

  • 修改/etc/sudoers配置文件的注意事项

①别名的名称可以包含大写字母。数字、下划线。如果是字母必须要大写,(别名为一群拥有相同属性的集合)。

②一个别名下面可以有多个成员,成员间通过半角(,)逗号隔开。成员必须有效实际存在。

别名成员受别名类型 Host_Alias、User_Alias、Runas_Alias、Cmnd_Alias制约,定义什么类型的别名,就要有相什么类型的成员匹配。

③用户组前面必须加%号。命令别名下的成员必须是文件或目录的绝对路径。

④指定切换用户要用()括号括起来,如果省略,则默认root用户,如果括号里是ALL,则代表能切换到所有用户。

⑤命令路径要使用全路径。

⑥别名规则每行算一个规则,一行容不下时用\续行。另外超过一行,用反斜线换行。

⑦一般不建议先给all权限,后面排除。用什么权限,就给什么权限。(注意权限,语法)。

如果不需要密码直接运行命令的应该加NOPASSWD参数。

⑧禁止某类程序或命令执行,要在命令动作前面加上“!”号,并放在允许执行命令之后。

  • 请描述如何实现linux系统集权分治的权限分级精细管理?

① 收集以及制定用户和权限的匹配信息,原则是给于最小权限,但是又能完成所承担的工作职责。

② 各个用户组设置对应权限,用什么给什么,精细到每一条指令上根据分组情况。

③ 创建规划权限分组的用户.添加相关用户组。并修改etc/sudoers配置文件。

④ 增加sudo的权限开放,确定相关用户加入如soduers权限列表,并详细设置所开放权限内容,并选择是否需要密码的相关执行权限开放。(注意ALL权限,以及密码修改权限设置)。

⑤ 不建议先给all权限,后面排除。建议使用白名单。

⑥实战调试测试相关权限是否正确配置完成。

⑦编写操作说明,及相关注意事项。

⑧调试完毕,邮件周知所有相关人员系统权限设置生效,并附带操作说明及相关注意事项。

  • 请描述服务器账户日志审计的5种解决方案。

⑴通过环境变量syslog对全部全部日志进行审计(信息量太大,不推荐)

⑵sudo配合syslog服务,进行sudo操作日志进行审计(信息较少,效果不错)

⑶在bash解释器嵌入一个监视器,让所有用户使用修改过的bash程序,作为解释程序。

⑷gateone堡垒机。

  • 如果一台办公室内主机无法上网(打不开网站),请给出你的排查步骤?

①首先确定物理链路是否联通正常。

②查看本机IP,路由,DNS的设置情况是否达标。

③telnet检查服务器的WEB有没有开启以及防火墙是否阻拦。

④ping一下网关,进行最基础的检查,通了,表示能够到达服务器。

⑤测试到网关或路由器的通常情况,先测网关,然后再测路由器一级一级的测试。

⑥测试ping公网ip的通常情况(记住几个外部IP)

⑦测试DNS的通畅。ping出对应IP。

⑧通过以上检查后,还在网管的路由器上进行检查。

上次更新:
贡献者: iEchoxu