Skip to main content

1.linux面试题(一)

  1. linux启动流程

    1. BIOS/UEFI阶段:

      • 计算机通电后,BIOS/UEFI 被加载。BIOS 执行 POST(Power-On Self-Test),检查硬件设备的状态。
      • BIOS/UEFI 从固定的启动设备(通常是硬盘)加载引导扇区(Master Boot Record,MBR)。
    2. 引导加载程序阶段:

      1. MBR 中包含引导加载程序(Boot Loader)(如 GRUB)。GRUB 被加载到内存中。
      2. GRUB 读取配置文件(通常是 /boot/grub/grub.cfg)以确定要加载的内核和初始化 RAM 文件系统(initramfs)。
    3. 内核初始化阶段:

      • Linux 内核(通常是 vmlinuz)被加载到内存。
      • 内核初始化硬件设备、建立虚拟文件系统(rootfs)和挂载根文件系统。
    4. initramfs 阶段:

      • 初始内存文件系统(initramfs)是一个临时的根文件系统,包含必需的驱动程序和工具,以便在根文件系统挂载之前完成系统初始化。
      • 内核执行 initramfs 中的 init 脚本。
    5. Switch Root 阶段:

      • 一旦初始化完成,内核切换到真正的根文件系统,通常是一个包含完整 Linux 系统的文件系统。
    6. 用户空间初始化阶段:

      • 在传统的 init 系统中,init 进程是第一个用户空间进程。在现代系统中,通常是 systemd
      • systemd 作为 init 进程,负责启动系统上的各个服务单元。
    7. 运行级别切换(或 Target 切换):

      • 在传统系统中,可以通过运行级别来确定系统启动后的状态,但在 systemd 中,通常使用 target 来实现类似的功能。
      • systemd 启动时默认加载一个 target,例如 multi-user.target(多用户模式) 或 graphical.target(图形用户界面模式)。
    8. 服务启动阶段:

      • systemd 启动各个服务单元,每个服务单元负责启动一个特定的服务或守护进程。
      • 服务单元的配置文件通常位于 /etc/systemd/system/lib/systemd/system
    9. 登录管理器阶段:

      • 对于图形用户界面,登录管理器(如 GDM、LightDM)负责提供登录界面,等待用户登录。
    10. 用户登录和桌面环境阶段:

      • 用户通过登录管理器登录系统后,登录管理器启动用户的会话。
      • 启动用户选择的桌面环境,例如 GNOME、KDE、Xfce。
  2. 怎么更改root密码(忘記root密碼)

    1.重启系统,在启动过程中,在 GRUB 内核选择菜单界面按e,
    2.在内核行(/vmlinux-5.14.0...),把 ro 后面的参数删除,并添加 rd.break 参数,执行ctrl+x启动
    3.以读写的方式挂载真实的根 mount -o remount,rw /sysroot
    4.切换到真实的根 chroot /sysroot
    5.使用passwd修改密码 passwd root
    6.创建selinux标签文件/.autorelabel(根下面的隐藏文件) touch /.autorelabel
    7.两次exit会重启系统
  3. 怎样查看网卡配置文件信息

    配置文件在 /etc/sysconfig/network-scripts/
  4. 怎样查看连接信息、怎样查看端口

    ss -ntl		#
    netstat -ntlup
  5. 怎样查看端口占用

    ss -ntl | grep "port"
    netstat -npl | grep "port"
    lsof -i:port
  6. 怎样添加DNS,DNS的配置文件在那个目录下

    1.在/etc/sysconfig/network-scripts/添加
    2.修改/etc/resolv.conf 中 nameserver
  7. 怎样修改网卡名

    #1.先编辑网卡的配置文件将里面的NAME DEVICE项修改为eth0 (eth0为意向名称)
    vim /etc/sysconfig/network-scripts/ifcfg-eno16777736
    #2.重命名该配置文件。
    mv ifcfg-eno16777736 ifcfg-eth0
    #3.禁用该可预测命名规则。在启动时传递“net.ifnames=0 biosdevname=0 ”的内核参数。这是通过编辑/etc/default/grub并加入“net.ifnames=0 biosdevname=0 ”到GRUBCMDLINELINUX变量来实现的。
    vim /etc/default/grub
    #4. 运行命令grub2-mkconfig -o /boot/grub2/grub.cfg来重新生成GRUB配置并更新内核参数。
    grub2-mkconfig -o /boot/grub2/grub.cfg
    #5.重新启动机器,启动完之后网卡名称就变成了Eth0
    init 6
  8. 怎样查看某个进程

    ps -aux #可以查看系统中所有的进程;
    ps -le #可以查看系统中所有的进程,而且还能看到进程的父进程的 PID 和进程优先级;
    ps -l #只能看到当前 Shell 产生的进程;
  9. 怎样查看网络流量

    dstat 
    dstat -tnf 1 10
  10. 怎样查看磁盘io

    iostat -k -p ALL  #可以查看不同设备磁盘io
    iotop -o -d 1 #查看不同程序的io
  11. 怎样查看磁盘使用率

    df -h  #文件系统 容量 已用 可用 已用% 挂载点
  12. 怎样查看磁盘分区情况

    lsblk     #name maj:min rm size type mountpoint
    Lsblk -f #name fstype label uuid mountpoint
  13. 怎样查看cpu负载情况

    top   #主要三个参数
    #%Cpu(s): 0.0 us, 0.0 sy, 100.0 id,
    #用户空间占用CPU百分比 #内核空间占用CPU百分比 #空闲CPU占比、
    #查看多核CPU占用率,终端上输入“top”,进入界面再输入“1”。
  14. 在Shell环境下,如何查看远程Linux系统运⾏了多少时间?

    uptime | awk '{print $3}'

    #uptime结果
    08:32:30 up 18 days, 6:06, 1 user, load average: 0.47, 0.38, 0.35
  15. 怎样永久挂载磁盘

    #在/etc/fstab/ 加入挂载记录 
    # Device Mountpoint filesystem parameters dump fsck
  16. 怎样查看内存

    free -h
    top
    vmstat
    cat /proc/meminfo
  17. 怎样将一个文件打成包

    tar -zcvf tcp.tar.gz ./tcp.sh
    Zip tcp.zip ./tcp.sh

    #打包根目录,并排除/swapfile目录
    tar -zcvf xx.tar.gz --exclude=/swapfile /
  18. 怎样切换用户

    su / sudo -i    #普通用户切换到root
    su dennis #root切换到普通用户
  19. 怎样更改文件的所属用户

    chown -R root:root
  20. 目录/lib 和/lib64的区别

    #lib用于32位系统,lib64用于64位系统。而在64位系统上一般是可以同时看到lib和lib64两个文件夹。
    #/lib64和/usr/lib64和/usr/local/lib64的区别
    #简单说,/lib64是内核级的,/usr/lib64是系统级的,/usr/local/lib64是用户级的
  21. 怎样查看有多少个用户和当前用户

    cat /etc/passwd | wc -l   #有多少用户
    w | wc -l # -2去掉信息栏=当前用户
  22. 我有一个脚本礼拜天的晚上2:30执行怎样写这个计划任务

    30 2 * * 7   bash /lianxi/creat_dir.sh  
    #分 时 天 月 星期几
  23. 划分5T的磁盘用什么命令?

    #小于2T的直接用fdisk,大于2T的 用parted   
    parted /dev/nvme0n1
    #输入mklabel ,输入gpt,输入mkpart,Partition name?[]hdfs1 #输入一个名称,File system type?[ext4]? xfs,Start? 1 #全盘开始End? -1 #全盘结束,w保存 quit退出
    #mkfs.xfs /dev/nvme0n1p1,mount /dev/nvme1n1p1 /hdfs2, #设置开机自动挂载
  24. 划分磁盘用什么命令

    fdisk /dev/vdb    n  wq                 #分区
    mkfs.ext4 /dev/vdb1 #格式化
    mkdir -pv /data/database
    mount /dev/vdb1 /data/database #挂载
    echo "/dev/vdb1 /data/database ext4 defaults 0 0" >> /etc/fstab #设置自动挂载
  25. OSI七层模型

    #应用层接收用户的数据,人机交互的接口,面向的应用程序
    #表示层 讲逻辑语言转为机器语言,翻译,加密
    #会话层 针对传输的每一种数据建立一条虚连接
    #传输层 作用 1.区分流量 2.定义数据传输方式 (可靠传输TCP、不可靠传输UDP)
    #网络层 network 编址 寻址
    #数据链路层
    #物理层
  26. TCP/IP四层模型

    #应用层
    #传输层
    #网络层
    #网络接口层
  27. tcpdump工具的使用(问了n多次)

    tcpdump dst 192.216.20.6     #【关键字】dir  抓取 指定接收端IP包
    tcpdump src 192.216.20.144 #【关键字】src 抓取 指定发送端IP包
    tcpdump host 192.216.20.66 #【关键字】host 抓取 指定主机发送和接收数据包
    tcpdump port 22 #【关键字】port 抓取 指定端口的IP的包
    tcpdump udp #【关键字】 udp tcp 指定抓取协议类型。
    tcpdump udp #【关键字】 udp tcp 指定抓取协议类型
    tcpdump tcp
  28. 日志放在那个目录下

    /var/log
  29. 怎样查看路由表

    netstat -rn    #-r此标志用于显示内核路由表-n此标志用于显示数字地址
    route -n route add 192.168.5.0 mask 255.255.255.0 192.168.12.8
    ^destination ^mask ^gateway metric^ ^interface
  30. iptables了解吗?(此问题问的比较多)

    # 场景一
    iptables -I INPUT -p tcp --dport 80 -j ACCEPT # 允许 tcp 80 端口
    iptables -I INPUT -p tcp --dport 10:22 -j ACCEPT # 允许 tcp 10-22 端口
    iptables -I INPUT -p icmp -j ACCEPT # 允许 icmp
    iptables -A INPUT -j REJECT # 添加一条规则, 不允许所有
    # 优化场景一
    iptables -I INPUT -i lo -j ACCEPT # 允许本机访问
    iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 允许访问外网
    iptables -I INPUT -p tcp --dport 80 -s 10.10.188.233 -j ACCEPT # 只允许固定ip访问80
    # 还可以使用 iptables 模块追踪来自动开发对应的端口
    # 场景三
    iptables -I INPUT -i lo -j ACCEPT # 允许本机访问
    iptables -I INPUT -s 10.10.155.0/24 -j ACCEPT # 允许内网访问
    iptables -I INPUT -p tcp -m multiport --dports 80,1723 -j ACCEPT # 允许端口, 80 -> http, 1723 -> vpn
    iptables -A INPUT -j REJECT # 添加一条规则, 不允许所有
  31. 我要取访问nginx主机的前10个ip (问了四五次)

    awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr -k1 | head -n 10
  32. DNS递归查询、迭代查询的区别

    #递归查询是以本地名称服务器为中心查询, 递归查询是默认方式,迭代查询是以DNS客户端,也就是客户机器为中心查询。
    #自己帮别人请求查,叫递归,自己去查询下一步,叫迭代。
  33. shell脚本怎么判断文件为空

    if [ ! -s "file" ]
  34. 通过命令行给linux机器添加默认网关10.0.0.254

    route add default gw  10.0.0.254 
  35. shell中$n , $#, $@, $?分别代表什么?

    $n: 其中 n 表示一个数字,代表脚本或者函数的参数。例如,$1 表示第一个参数,$2 表示第二个参数,以此类推。
    $#: 表示传递给脚本或者函数的参数个数。例如,$# 表示参数的总个数。
    $@: 表示所有传递给脚本或者函数的参数列表。$@ 将所有参数当作一个单词,可以通过循环遍历使用。
    $?: 表示上一条命令的退出状态(返回值)。如果上一条命令执行成功,$? 的值为 0,否则为非零值。
  36. 以下服务所对应的默认端口:dns,nginx, mysql,mongodb,rsync,vsftp,rabbitmq,elasticsearch

    • DNS (Domain Name System):UDP 53
    • Nginx: 默认端口:
      • TCP 80 (HTTP)
      • TCP 443 (HTTPS)
    • MySQL:TCP 3306
    • MongoDB:TCP 27017
    • Rsync:TCP 873
    • vsftpd (Very Secure FTP Daemon):TCP 21
    • RabbitMQ:TCP 5672 (AMQP) 和 TCP 15672 (管理界面)
    • Elasticsearch:TCP 9200 (HTTP) 和 TCP 9300 (内部通信)
  37. 删除/web/soft/目录下一个月以前并大于100M的日志文件(.log)

    find /web/soft -type f -size +100M -name "*.log" -mtime +30 -exec rm {} \;