【Linux 面试救命包】50 个问题吃透核心考点!
一、Linux 基础操作
如何查看当前系统的内核版本?
答案:使用uname -r
命令,uname
用于打印系统信息,-r
参数专门用于显示内核版本号。
Linux 中文件系统的根目录是什么?
答案:根目录是/
,它是整个文件系统的顶级目录,所有其他目录和文件都挂载在它之下。
如何创建一个新的空文件?
答案:可以使用touch
命令,例如touch new_file.txt
;也可以使用> new_file.txt
,通过重定向创建空文件。
如何列出目录下的所有文件和子目录(包括隐藏文件)?
答案:使用ls -a
命令,-a
参数表示显示所有文件,包括以.
开头的隐藏文件。
如何切换目录?
答案:使用cd
命令,例如cd /home
切换到/home
目录;cd..
返回上一级目录;cd ~
切换到用户主目录 。
二、文件管理与权限
如何复制文件和目录?
答案:复制文件使用cp
命令,如cp source_file target_file
;复制目录使用cp -r
,-r
表示递归复制目录及其子目录和文件,例如cp -r source_dir target_dir
。
如何移动或重命名文件?
答案:使用mv
命令,当源文件和目标文件在同一目录下时,是重命名操作,如mv old_name new_name
;当源文件和目标文件在不同目录时,是移动操作,如mv /path/source_file /new_path/
。
如何删除文件和目录?
答案:删除文件使用rm
命令,如rm file.txt
;删除目录使用rm -r
,如rm -r dir_name
;若要强制删除(不提示确认),可使用rm -f
(文件)或rm -rf
(目录) 。
Linux 文件权限有哪些,如何修改?
答案:文件权限包括读(r)、写(w)、执行(x)三种,分别对应数字 4、2、1。对于文件所有者、所属组和其他用户都有独立的权限设置。修改权限使用chmod
命令,例如chmod 755 file.txt
表示给文件所有者读写执行权限,给所属组和其他用户读执行权限;也可以使用字母形式,如chmod u+rwx,g+rx,o+rx file.txt
。
如何查看文件内容?
答案:可以使用cat
(一次性显示整个文件内容)、more
(分页显示,按空格键翻页)、less
(功能更强大的分页查看,支持搜索等,按q
退出)、head
(显示文件前几行,默认前 10 行,如head -n 20 file.txt
显示前 20 行)、tail
(显示文件后几行,默认后 10 行,如tail -n 20 file.txt
显示后 20 行,tail -f
可实时追踪文件新增内容)等命令 。
三、用户与组管理
如何创建一个新用户?
答案:使用useradd
命令,如useradd new_user
。创建用户时默认会创建同名的用户主目录,也可以使用-d
参数指定主目录,如useradd -d /home/new_dir new_user
。
如何设置用户密码?
答案:普通用户使用passwd
命令可修改自己的密码;root 用户使用passwd username
可以修改指定用户的密码 。
如何创建一个新组?
答案:使用groupadd
命令,例如groupadd new_group
。
如何将用户添加到组中?
答案:使用usermod -aG group_name user_name
命令,-a
表示追加,-G
指定组名,将用户添加到指定的附加组中;若要将用户设置为主组,使用usermod -g
。
如何查看当前登录的用户?
答案:使用who
命令,可显示当前登录的所有用户信息;使用w
命令,不仅显示登录用户,还会显示用户正在执行的操作等详细信息 。
四、进程管理
如何查看系统中的进程?
答案:使用ps
命令,如ps aux
(BSD 风格,显示所有用户的所有进程)、ps -ef
(System V 风格,显示进程的详细信息,包括进程 ID、父进程 ID 等);top
命令可动态实时显示系统中各进程的资源占用情况,类似于 Windows 的任务管理器 。
如何杀死一个进程?
答案:使用kill
命令,首先通过ps
或top
找到进程 ID(PID),然后执行kill PID
;如果进程不响应,可使用kill -9 PID
强制终止进程;pkill
命令可通过进程名杀死进程,如pkill firefox
杀死所有名为firefox
的进程 。
什么是僵尸进程,如何处理?
答案:僵尸进程是指子进程已经结束运行,但父进程没有回收其资源(如进程描述符等),导致子进程残留在内核中的一种状态。处理僵尸进程一般需要找到其父进程,通过重启父进程或修复父进程代码使其正确回收子进程资源;如果父进程是系统服务,可能需要重启相关服务 。
如何查看进程占用的资源(如 CPU、内存)?
答案:使用top
命令可实时查看进程占用的 CPU 和内存等资源;htop
是top
的增强版,界面更美观,操作更方便;ps -aux --sort=-%mem
或ps -aux --sort=-%cpu
可按内存或 CPU 使用率对进程进行排序 。
如何后台运行一个进程?
答案:在命令末尾加上&
符号,如command &
;如果进程已经在前台运行,可以使用Ctrl + Z
暂停进程,然后使用bg
命令将其放到后台继续运行;nohup
命令可使进程在退出终端后继续运行,如nohup command &
。
五、网络配置与管理
如何查看网络接口信息?
答案:使用ifconfig
命令(部分系统已被ip
命令取代);ip addr show
可查看网络接口的 IP 地址、MAC 地址等详细信息;ip link show
可查看网络接口的状态等信息 。
如何配置静态 IP 地址?
答案:不同的 Linux 发行版配置方式略有不同。以 CentOS 为例,编辑/etc/sysconfig/network-scripts/ifcfg-eth0
(eth0
为网卡名称,根据实际情况修改)文件,设置BOOTPROTO=static
,并添加IPADDR
(IP 地址)、NETMASK
(子网掩码)、GATEWAY
(网关)、DNS1
(DNS 服务器)等参数,然后重启网络服务systemctl restart network
。
如何测试网络连通性?
答案:使用ping
命令,如ping ``www.baidu.com
测试到百度服务器的连通性;traceroute
(或tracepath
)命令可追踪数据包从本地到目标主机所经过的路由节点 。
如何查看开放的网络端口?
答案:使用netstat -anp
命令,-a
显示所有连接和监听端口,-n
以数字形式显示地址和端口,-p
显示使用该端口的进程;lsof -i
也可查看网络连接和开放端口,lsof -i:80
可查看占用 80 端口的进程 。
如何设置防火墙规则(以 iptables 为例)?
答案:例如,允许外部访问本机的 80 端口,命令为iptables -A INPUT -p tcp --dport 80 -j ACCEPT
;禁止所有外部 IP 访问本机,iptables -P INPUT DROP
;保存规则可使用service iptables save
(不同系统保存方式可能不同) 。
六、软件安装与包管理
在 Debian/Ubuntu 系统中如何安装软件包?
答案:使用apt-get
或apt
命令,如apt-get update
更新软件源列表,apt-get install package_name
安装软件包;apt list --upgradable
可查看可升级的软件包 。
在 Red Hat/CentOS 系统中如何安装软件包?
答案:使用yum
或dnf
(CentOS 8 及以后版本默认使用dnf
)命令,如yum update
更新系统,yum install package_name
安装软件包;dnf search keyword
可搜索包含指定关键字的软件包 。
如何从源码安装软件?
答案:一般步骤为:解压源码包(如tar -zxvf source_package.tar.gz
),进入解压后的目录,执行./configure
(配置安装选项,如指定安装路径等),make
编译源码,make install
安装软件 。
如何卸载已安装的软件包?
答案:在 Debian/Ubuntu 系统中使用apt-get remove package_name
卸载软件包,但会保留配置文件;apt-get purge package_name
彻底卸载软件包及其配置文件。在 Red Hat/CentOS 系统中使用yum remove package_name
卸载软件包 。
如何查看已安装软件包的信息?
答案:在 Debian/Ubuntu 系统中使用dpkg -s package_name
查看软件包详细信息;在 Red Hat/CentOS 系统中使用rpm -qi package_name
查看软件包信息 。
七、磁盘与文件系统管理
如何查看磁盘使用情况?
答案:使用df -h
命令,-h
以人类可读的格式显示磁盘空间使用情况,包括已用、可用、挂载点等信息;du -sh
可查看目录的总大小,du -sh /home
查看/home
目录的大小 。
如何格式化磁盘分区?
答案:首先使用fdisk
或parted
命令对磁盘进行分区,然后使用mkfs
命令格式化分区,如mkfs.ext4 /dev/sdb1
将/dev/sdb1
分区格式化为 ext4 文件系统;mkfs.xfs /dev/sdb2
格式化为 xfs 文件系统 。
如何挂载磁盘分区或文件系统?
答案:使用mount
命令,如mount /dev/sdb1 /mnt
将/dev/sdb1
分区挂载到/mnt
目录;若要使系统开机自动挂载,需编辑/etc/fstab
文件,添加类似/dev/sdb1 /mnt ext4 defaults 0 0
的记录 。
如何检查文件系统错误?
答案:对于 ext 系列文件系统,使用e2fsck
命令,如e2fsck -f /dev/sdb1
强制检查并修复/dev/sdb1
分区的错误;对于 xfs 文件系统,使用xfs_repair
命令 。
如何创建交换空间?
答案:首先使用fallocate -l 2G /swapfile
创建一个 2GB 的交换文件(也可使用分区创建交换空间),然后执行chmod 600 /swapfile
设置权限,mkswap /swapfile
格式化为交换空间,swapon /swapfile
启用交换空间;若要开机自动启用,需在/etc/fstab
文件中添加相关记录 。
八、Shell 脚本编程
Shell 脚本的第一行通常是什么?
答案:通常是#!/bin/bash
,这是 Shebang(也称为 Hashbang),指定该脚本使用bash
解释器执行;如果系统使用zsh
等其他 Shell,可改为#!/bin/zsh
。
如何在 Shell 脚本中定义变量?
答案:变量定义方式为variable_name=value
,如name="John"
;变量使用时需在前面加$
符号,如echo $name
。
Shell 脚本中的条件语句有哪些?
答案:主要有if-else
语句,例如:
if \[ condition ]; then
  commands
elif \[ another\_condition ]; then
  commands
else
  commands
fi
还有case
语句,用于多条件匹配 。
Shell 脚本中的循环语句有哪些?
答案:包括for
循环,如for i in {1..10}; do echo $i; done
;while
循环,如while [ condition ]; do commands; done
;until
循环,条件不满足时执行循环体 。
如何在 Shell 脚本中传递参数?
答案:在脚本中使用$1
、$2
等表示第一个、第二个参数,$0
表示脚本本身;$#
表示参数的个数;$*
和$@
都表示所有参数,但在使用双引号包裹时,$*
将所有参数视为一个整体,$@
将每个参数视为独立的字符串 。
九、系统服务与启动管理
如何查看系统中正在运行的服务?
答案:使用systemctl list-units --type=service
命令查看所有已启动的服务;systemctl list-unit-files --type=service --state=enabled
查看开机自启的服务 。
如何启动、停止、重启和重新加载服务?
答案:以httpd
服务为例,启动服务使用systemctl start httpd
,停止服务使用systemctl stop httpd
,重启服务使用systemctl restart httpd
,重新加载服务配置文件使用systemctl reload httpd
。
如何设置服务开机自启或禁止开机自启?
答案:设置开机自启使用systemctl enable service_name
,禁止开机自启使用systemctl disable service_name
。
在旧版本的 Linux 系统(如 CentOS 6)中如何管理服务?
答案:使用service
命令,如service httpd start
启动httpd
服务;使用chkconfig
命令设置服务开机自启,如chkconfig httpd on
设置httpd
服务开机自启 。
什么是 init 系统和 systemd,它们的区别是什么?
答案:init 系统是传统 Linux 系统的初始化进程,采用串行启动服务的方式,启动速度相对较慢。systemd 是新一代的初始化系统,采用并行启动服务的方式,启动速度更快,功能更强大,支持服务依赖管理、资源控制等;systemd 的服务管理命令是systemctl
,而 init 系统使用service
和chkconfig
等命令 。
十、高级系统管理与优化
如何优化 Linux 系统的性能?
答案:可从多个方面进行优化,如调整内核参数(编辑/etc/sysctl.conf
文件,如优化 TCP 连接参数net.ipv4.tcp_fin_timeout = 30
),优化文件系统(选择合适的文件系统和挂载选项),优化内存使用(如调整swappiness
参数echo 10 > /proc/sys/vm/swappiness
),优化服务配置(如调整 Web 服务器的并发连接数等) 。
如何进行系统日志分析?
答案:系统日志文件通常位于/var/log
目录下,如/var/log/messages
记录系统的一般信息和错误信息;/var/log/auth.log
记录用户认证相关信息;使用grep
、awk
、sed
等工具对日志进行过滤、提取和分析,也可以使用日志分析工具如 ELK(Elasticsearch、Logstash、Kibana)或 Graylog 。
如何进行系统备份与恢复?
答案:备份可使用tar
命令打包文件和目录,如tar -zcvf backup.tar.gz /home
将/home
目录打包压缩为backup.tar.gz
;使用rsync
命令进行增量备份,保证数据一致性。恢复时使用tar -zxvf backup.tar.gz
解压备份文件;对于数据库等特殊数据,需要使用相应的备份恢复工具 。
如何进行磁盘配额管理?
答案:首先在文件系统挂载选项中添加usrquota
和grpquota
(如/dev/sdb1 /mnt ext4 defaults,usrquota,grpquota 0 0
),然后使用quotaon
命令启用配额,edquota -u username
编辑用户配额,设置磁盘空间和文件数量限制;quota -u username
查看用户配额使用情况 。
如何进行系统安全加固?
答案:包括修改默认的 SSH 端口(编辑/etc/ssh/sshd_config
文件,修改Port
参数),禁止 root 用户直接登录 SSH(设置PermitRootLogin no