☰
Linux基础自测:覆盖文件、权限、进程与日志的核心技能清单
2026/10/10 20:52:28 网站建设 项目流程

1. 为什么需要一套Linux基础自测题

带过不少新人和实习生之后,我越来越发现一个问题:很多人的Linux知识是"会用但不懂",甚至"用过但没系统学过"。能敲出几个命令,但一问到为什么这样写、换一个环境会不会失效,就答不上来了。面试的时候更是明显——简历上写着"熟悉Linux常用命令",结果实际操作里连权限都搞不清楚,日志也不会看,系统出了问题只会重启。

所以我整理了这套Linux基础自测题。它不是那种"一题一答案"的背题目录,而是把日常运维和开发中最常用、最容易踩坑的知识点串起来,按真实的Linux工作场景出题,每一道题都对应一个实际使用场景。包括文件操作、权限管理、进程调度、网络配置、日志分析、磁盘存储这些高频方向,基本覆盖了一个Linux使用者的核心能力圈。

这套题适合谁?三类人:

  • 刚入门Linux的新手:用来检验自己到底掌握了多少,哪些知识点是"以为会了其实不会"。
  • 准备Linux运维或后端岗位面试的人:很多面试题就藏在这些基础题里,考的是你平时有没有真正动过手。
  • 带团队的技术负责人:可以用这套题快速评估团队成员的Linux实操水平,省去逐个面试的精力。

我自己在带人的时候用过这套思路,效果不错。下面我按主题把题目拆开讲,每个部分都会说清楚考点、常见错误和我的实操经验。

2. 第一关:目录与文件操作自测

2.1 高频考点与易错命令

文件操作是Linux的第一课,也是很多"翻车现场"的高发区。先来一组自查题,你可以在自己的机器上敲一遍,看看能不能答对:

  1. 查看当前所在目录,用哪个命令?pwd。查看目录下的文件(包括隐藏文件),用哪个命令?ls -la。为什么要加-l和-a?-l显示详细信息,-a显示隐藏文件,两个参数合起来才能看到目录的全貌。

  2. 创建一个多级目录/data/logs/2025/08,正确的是mkdir -p /data/logs/2025/08。很多人第一次会不加-p,结果报错说上级目录不存在。-p的意思是"自动创建上级目录",这是高频参数,务必记住。

  3. 复制整个目录/opt/app到/backup/app,正确的是cp -r /opt/app /backup/。这个-r是递归复制,不加就只能复制文件,遇到目录直接报错。但是要注意,cp -r在一些老系统上会有隐含的坑:如果源目录包含符号链接,-r只是把链接复制过去,而不是链接指向的内容。想要完整保留文件属性,建议用cp -a,-a等于-dR --preserve=all,归档模式,能保留权限、时间戳、链接等信息。

  4. 移动或重命名文件,用mv。它在同一个文件系统内是"改指针"操作,瞬时完成,跨文件系统则等于"复制+删除"。所以移动大文件时如果感觉卡顿,先检查是不是跨分区了。

  5. 删除文件或目录,用rm。删目录加-r,强制删加-f,这俩参数连用就是著名的rm -rf。我见过不止一次有人因为rm -rf变量没赋好值,把系统目录给删了——比如rm -rf $DIR/,如果$DIR为空,等于执行了rm -rf /。这不是段子,是真实事故。我的习惯是:生产环境机器上,先执行echo "$DIR"确认路径,再用ls看一眼目录内容,最后才删。另外,rm -rf /在CentOS 7及以后的系统上会有--no-preserve-root保护提示,但在很多嵌入式环境或旧系统上并没有,别拿生产环境赌这个。

  6. 列出/etc目录下所有以.conf结尾的文件,正确的是find /etc -name "*.conf"。有人会用ls /etc/*.conf,这也能列出来,但要注意:如果匹配不到任何文件,ls会直接报错"No such file or directory",而find只是安静地不输出。脚本里用ls做判断极容易出问题。

2.2 硬链接与软链接的理解题

链接是Linux里绕不开的知识点,也是面试常客。别急着看答案,先自己想想这两个问题:

软链接(符号链接)和硬链接有什么区别?

我的理解方式是这样的:硬链接就是给同一个inode(索引节点)多起了一个名字,两个文件名指向同一个"实体",删除其中一个,另一个依然有效,因为链接计数减一而不是清零。软链接则是一个独立的文件,存放的是目标文件的路径字符串,如果目标文件被删除,软链接就成了断链,ls -l会显示红色或闪烁,访问会报"No such file"。

实操上有一个冷门但有用的点:ln -s创建软链接时,建议使用绝对路径。我踩过这个坑——在/home/user下执行ln -s ../conf/app.conf ./app_link,当时看着没问题,但一旦当前目录切换,这个链接就失效了。原因很简单:软链接里存的是相对路径,相对路径是相对于"链接所在目录"来解析的,不是相对于"执行命令时的目录"。用绝对路径,一劳永逸。

# 推荐方式:绝对路径创建软链接 ln -s /data/config/app.conf /home/user/app_link # 检查链接是否有效 ls -l /home/user/app_link readlink -f /home/user/app_link

顺手练一下:写一条命令,把/var/log/messages软链接到/home/user/messages,然后用readlink验证。这条命令大概10秒钟做完,但做过和没做过的人,在面试时回答"软链接失效"问题的深度完全不一样。

2.3 目录规范与空间清理实战

热词里有一类搜索量很大:linux 删除文件夹命令、linux 清空日志文件。这类问题看着简单,但实际上有讲究。

先说清空日志文件。新手喜欢rm -rf /var/log/messages,这是错误做法。因为进程会一直持有该文件的文件句柄,你删了文件,磁盘空间不会立刻释放,进程还是往那个"无名inode"里写数据。正确做法是:

# 推荐:用cat清空,不删除文件本身 cat /dev/null > /var/log/messages # 或者用truncate truncate -s 0 /var/log/messages

再说目录空间占用排查。du -sh *能统计当前目录下每个子目录的大小,df -h看磁盘分区占用率。这两个命令构成日常磁盘排查的最小组合。如果发现某个分区快满了,先用df -h确认是哪个挂载点,再进去用du -sh *从大到小逐步收缩范围。

最后,Linux目录规范这块,很多人只知道/etc是配置目录、/var是可变数据,但当被问到"日志为什么要放/var/log而不是/opt"时,就答不上来了。我的理解是:/var针对的是"运行时动态产生、大小不可控"的数据,比如日志、缓存、队列。把它独立出来,是为了方便做日志轮转、容量规划,甚至在系统盘空间不够时直接把/var挂到单独的大分区上。理解了这一层,你再去看一个系统的目录布局,就不会觉得是死记硬背了。

3. 第二关:权限、用户与安全意识自测

3.1 权限位与特殊权限逐项拆解

这一块是Linux基础里的分水岭。很多人背过chmod 755、chmod 644,但碰到特殊权限就懵。

基础权限:r(读)、w(写)、x(执行),三组分别对应"所有者/所属组/其他用户"。数字表示法里,r=4、w=2、x=1,加起来就是权限位。比如754表示所有者有全部权限(7),所属组有读和执行(5),其他人只有读(4)。

特殊权限才是拉开差距的地方:

  • SUID(4000):作用于可执行文件。普通用户执行这个文件时,进程的有效用户ID会变成文件所有者。经典例子是/usr/bin/passwd——普通用户修改自己的密码时,需要写入/etc/shadow,而这个文件只有root能写。就是因为passwd命令设置了SUID,普通用户执行时临时获得了root身份。你的系统里哪个文件带SUID?用find / -perm -4000查一下,能查出一堆,这也是安全基线检查的常见项目。

  • SGID(2000):作用于目录时,在该目录下新建的文件会自动继承目录的所属组,而不是创建者的主组。这在做团队共享目录时非常有用,避免"每个人建的文件别人碰不了"。

  • Sticky Bit(1000):作用于目录时,只有文件的所有者(或root)才能删除目录里的文件,即使目录权限是777。最典型的是/tmp,权限是drwxrwxrwt,最后的t就是粘滞位。没有它,任何人就能删掉别人在/tmp下放的文件了。

看权限的另一个技巧:ls -l输出的第一个字段有10个字符,比如-rwxr-xr--。第一个字符表示类型,后面9个字符才是权限。如果是l开头说明是软链接,d是目录,b是块设备,c是字符设备。连接到SSH时看到crw-------不要慌,那是/dev下的设备节点。

3.2 用户管理实操与密码策略配置

热词里有一个很实际的需求:linux新建用户。别觉得简单,实际操作里至少有四个细节:

  1. useradd和adduser的区别。在Debian/Ubuntu上,adduser是交互式命令,会自动创建家目录、设置密码、填用户信息;useradd是底层的非交互命令,默认不创建家目录。在CentOS/RHEL上,adduser只是useradd的符号链接,行为完全一样。所以跨发行版操作时不要想当然。

  2. 新建用户时,至少要指定-m(创建家目录)、-s(指定shell)、-G(附加组)。

# 创建用户并指定家目录、shell、附加组 useradd -m -d /home/zhangsan -s /bin/bash -G wheel zhangsan # 设置密码 echo 'Zhangsan@123456' | passwd --stdin zhangsan # 查看用户信息 id zhangsan
  1. 给用户sudo权限,不是改/etc/sudoers,而是用visudo命令编辑。为什么必须用visudo?因为它会做语法检查,改错了能防止你把自己锁在sudo外面。新手指南上常见的错误是chmod 777 /etc/sudoers,这等于把整台机器的root权限开放给所有能登录的人,等于裸奔。

  2. 检查系统里是否有异常用户,这是安全基线的一部分。查看/etc/passwd里所有UID为0的用户(UID为0就是超级用户),正常只有root。用awk -F: '$3==0 {print $1}' /etc/passwd,如果多出来别的用户名,那说明被入侵了或者有人搞小动作。

另外,热词里有个linux密码过期提醒通知,这属于典型的生产需求。公司安全策略一般会要求90天改一次密码,但默认配置里用户不会收到提醒。要设置提醒,用的是chage:

# 查看zhangsan的密码过期信息 chage -l zhangsan # 设置密码90天后过期,提前7天提醒 chage -M 90 -W 7 zhangsan

更精准的提醒其实不止靠chage,还要配合/etc/login.defs里的PASS_MAX_DAYS和PASS_WARN_AGE。这两个文件配合起来,才是完整的密码策略。面试时能说到这一层,基本就过关了。

3.3 权限排查案例:为什么我能看却删不了

分享一个真实案例。一次同事在服务器上部署应用,遇到诡异问题:用ls能看到目录下的文件,但用rm删除时报Permission denied。他第一反应是"我是root啊,怎么会没权限"。

答案涉及文件的"写权限属于谁"以及"目录的写权限"。删除文件,看的是该文件所在目录的写权限,不是文件本身的写权限。文件能不能读,看的是文件本身的r位;能不能删,看的是目录的w位。如果目录权限是r-xr-xr-x(没有写权限),那么即使你是文件的所有者,也无法删除别人的文件。反之,只要目录有写权限,即使文件本身是只读的,也能把它删掉(因为删除不修改文件内容,只修改目录条目)。

这个知识点特别容易绕晕,但实际排查权限问题时,这往往是解开谜底的关键。建议你亲手做一个实验验证:

# 实验:创建目录,设置成只读,尝试在里面创建文件 mkdir /tmp/readonly_test chmod 555 /tmp/readonly_test touch /tmp/readonly_test/hello.txt # 会报 Permission denied

做完这个实验,你对"目录写权限"的理解会比背10遍书都深。

4. 第三关:进程管理与服务排障自测

4.1 查看进程的正确姿势与TOP命令深度解读

ps和top是进程管理的基本工具,但大部分人只会ps -ef | grep和打开top看一眼CPU。先说ps -ef输出里每一列的含义:UID(执行进程的用户)、PID(进程号)、PPID(父进程号)、C(CPU占用)、STIME(启动时间)、TTY(终端)、TIME(累计CPU时间)、CMD(命令)。面试时让人解释PPID,很多人答不上来,但这恰恰是排查"进程为什么退出了"的关键:孤儿进程会被PID 1收养,如果发现某个进程的PPID变成了1,说明它的父进程已经死了。

top的深入用法也很实用:

  • 按P按CPU排序,按M按内存排序,这是定位资源大户最快的操作。
  • top -p PID只看指定进程,多个进程用逗号分隔。
  • top -b -n 1以批处理模式输出一次结果,适合写脚本采集快照。
  • 输出里的load average有三个数值,分别为1分钟、5分钟、15分钟的平均负载。如果"1分钟 > 5分钟"说明负载在上升;如果"15分钟仍然很高"说明是持续性的压力,不是突发流量。

还有一个大多数人都没注意过的细节:top里的%CPU是相对于单核计算的,不是整机。四核机器上单进程CPU跑到150%,说明它用满了一个半核,不一定是机器要挂了。要看整体占用,得看第三行Cpu(s)或按1展开每个核心的情况。

4.2 systemd管理服务的常用套路

现代Linux发行版全部转向systemd,很多老派的service命令成了软链接。理解systemd,相当于理解了现代Linux的开机、服务运行、日志处理全链路。

常用命令就这几条,但每一条背后都有讲究:

# 查看服务状态(含最近日志) systemctl status nginx # 设置开机自启 systemctl enable nginx # 立即启动并设置开机自启(enable --now 的组合用法) systemctl enable --now nginx # 查看所有失败的服务 systemctl list-units --failed # 查看某个服务依赖了哪些其他服务 systemctl list-dependencies nginx

systemctl status输出里有一行非常关键:Active: active (running)或inactive (dead)或failed。排障第一步永远是这个,而不是去翻日志。服务起不来,status里还会提示你错误原因,比如main process exited, code=exited, status=203/EXEC,这个203/EXEC表示可执行文件不存在或权限不对——优先检查ExecStart路径写没写对。

热词里有linux 安装nginx,这是最典型的systemd管理场景。源码编译安装的nginx默认没有systemd服务文件,需要自己写一个放在/etc/systemd/system/nginx.service:

[Unit] Description=nginx web server After=network.target [Service] Type=forking PIDFile=/run/nginx.pid ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/usr/local/nginx/sbin/nginx -s quit PrivateTmp=true [Install] WantedBy=multi-user.target

写完之后必须systemctl daemon-reload重新加载,这是新手必踩的坑。忘了这步,直接systemctl start nginx会报"Unit nginx.service not found"或者一直用旧配置。

4.3 冷门但好用的考点:修改进程名称

热词里有个挺有意思的:linux 修改进程名称。ps里显示的进程名,默认是命令行第一个参数的可执行文件名。但在某些场景下,比如Java应用启动后进程名是java,你根本分不清是哪一台机器的哪个服务,这时候就需要改进程名。

内核级修改其实很简单,Linux把进程名存放在/proc/<pid>/comm这个文件里,直接写入新名字即可。但普通用户只对自己进程有权写,root才能改别人的:

# 查看某个进程的当前名称 cat /proc/1234/comm # 修改进程名称(需要root权限) echo "my-service" > /proc/1234/comm

用Python脚本方式更灵活,setproctitle库专门干这个:

import setproctitle setproctitle.setproctitle("user_analysis_worker")

这个知识点面试很少考,但实际部署时非常实用。多实例部署时,配合ps -eo pid,comm,args就能一眼区分不同业务进程,排查"哪个进程占满了CPU"时能省不少时间。

4.4 进程间通信方式速查

热词里linux进程间通信高频出现,这是从"会命令"走向"懂原理"的重要一步。不用深挖内核实现,把常用的几种方式及应用场景理清楚就行:

通信方式特点典型场景
管道 Pipe半双工,数据单向流动,适合父子进程命令行`cmd1
命名管道 FIFO允许无亲缘关系的进程通信两个独立服务间传数据
消息队列数据有类型,先进先出生产者消费者模型
共享内存速度最快,但要处理同步高频小批量数据交换
信号 Signal异步通知,不能携带大量数据kill -HUP重载配置
套接字 Socket可用于不同主机间通信分布式系统,RPC调用

面试时如果被问到"进程间通信有哪些方式",能说全这六种,再用一两句话指出各自的"最适用场景",基本就满分了。实操中,大部分业务需求用Socket和消息队列就能解决,共享内存虽然快但调试难度大,一般用在性能敏感的场景。

5. 第四关:网络配置与存储挂载自测

5.1 网络排查基础:从ping通到服务通的完整链路

网络这块,我认为最重要的不是背命令,而是建立排查的顺序感。从底层到应用层,一层一层排除,才不会像无头苍蝇一样乱试。

第一步,物理/链路层。ip link查看网卡是否up,ethtool eth0看协商速率。如果网卡down,后面都是白搭。

第二步,网络层。ping网关、ping公网DNS(比如114.114.114.114或223.5.5.5)。这里注意:ping通DNS不代表DNS解析没问题,ping走的是ICMP,DNS解析走的是UDP 53。所以还要单独测试解析:dig @114.114.114.114 www.example.com或nslookup www.example.com。ping不同和ping得通但curl不通,代表的问题完全不一样。

第三步,传输层/应用层。ss -lntp查看端口监听情况,curl -I测试HTTP服务是否响应。很多新人不会用ss,还在用老掉牙的netstat。ss是iproute2工具包的成员,输出更快信息也更全,-l显示监听、-n不做域名解析、-t只看TCP、-p显示进程。

实用的排查命令组合,我的习惯是:

# 1. 看网卡状态 ip addr show eth0 # 2. 看路由 ip route show # 3. 看端口监听 ss -lntp | grep -E '80|443' # 4. 测试TCP连通性 nc -vz 192.168.1.10 3306 # 5. 测试HTTP响应头 curl -I -m 5 http://localhost/

这套组合拳下来,80%的"连不上"问题都能定位到具体层级。剩下的20%,往往是防火墙规则拦截(iptables -L -n看规则)或者SELinux(getenforce查看状态)在背后拦截。

5.2 配置IP地址:从ifconfig到nmtui的现代方式

热词里有rocky linux 10 配置网络信息、linux 共享上网 办法,对应的是两种典型的网络配置需求:静态IP配置和NAT共享上网。

先说静态IP。老教程还在教ifconfig eth0 192.168.1.100 netmask 255.255.255.0,这在现代系统上已经不推荐了——因为它不持久,重启就丢。正确做法是改配置文件或使用nmcli:

# 用nmcli配置静态IP(NetworkManager环境适用) nmcli con mod eth0 ipv4.method manual ipv4.addresses 192.168.1.100/24 nmcli con mod eth0 ipv4.gateway 192.168.1.1 nmcli con mod eth0 ipv4.dns '223.5.5.5 114.114.114.114' nmcli con up eth0 # 查看生效配置 ip addr show eth0

如果系统装了NetworkManager,无脑改/etc/sysconfig/network-scripts/ifcfg-eth0在部分版本上可能不生效或冲突。最稳妥的判断方式:用nmcli dev status确认网卡由谁接管,再决定用哪种方式配置。

再说共享上网,也就是Linux机器作为NAT网关,让内网机器通过它上网。核心就两步,开启IP转发和添加iptables NAT规则:

# 1. 开启IPv4转发 sysctl -w net.ipv4.ip_forward=1 echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf # 2. 添加NAT规则(eth0是外网网卡,eth1是内网网卡) iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT # 3. 保存规则 service iptables save

这个方案的原理一句话就能说透:MASQUERADE会自动读取内网流量的源IP,重写成外网网卡的IP,收到回包后再按连接追踪记录逆转换回去。理解了MASQUERADE,就理解了家用路由器上网的全部秘密。

5.3 挂载NAS存储与开机自动挂载

热词里有linux挂载nas存储csdn,还有一堆关于linux镜像安装、虚拟机安装linux的搜索。这些放在一起看,说明大量用户在做的其实是同一件事:虚拟机/服务器上挂存储、装系统、配环境。

NAS挂载用NFS或CIFS/SMB两种协议,Linux服务器之间推荐NFS,跨平台(Windows/群晖等NAS设备)用CIFS。基础命令:

# NFS挂载 mount -t nfs 192.168.1.100:/volume/backup /mnt/backup # CIFS挂载(需要cifs-utils包) mount -t cifs //192.168.1.100/share /mnt/share -o username=user,password=pass,vers=3.0

vers=3.0这个参数很重要。很多老机器默认还在尝试SMB1协议,而现代NAS基本都禁掉了SMB1,结果报mount error(112): Connection refused或"Host is down"。加vers=3.0或vers=2.1能解决大部分兼容性问题。

想让挂载开机自动生效,要写到/etc/fstab。fstab写错会导致开机进入emergency模式,所以改之前最好先备份。一条典型的NFS自动挂载配置:

192.168.1.100:/volume/backup /mnt/backup nfs defaults,_netdev 0 0

_netdev这个选项作用是:告诉系统等网络就绪后再挂载。不加它,开机时网络还没起,挂载就会失败,可能拖慢整个开机的过程,甚至导致启动失败。另外改完fstab别直接用mount -a盲试,先umount再mount一遍,确认无报错再重启。

一个排障技巧:挂载NFS不通,先用showmount -e 192.168.1.100看NAS导出了哪些目录。如果showmount都超时,先查防火墙和网络连通性,而不是反复改挂载参数。

5.4 系统备份与恢复的"保命"思路

热词里还有linux 系统备份恢复。Linux不像Windows那样有个系统还原点,但做好备份的思路是清晰的。

最轻量的方式是打包关键目录:

# 备份/opt/www和/etc(排除cache和logs) tar czvf /backup/system_config_$(date +%F).tar.gz \ --exclude=/opt/www/cache --exclude=/var/log /opt/www /etc

不过tar备份不适合作为完整系统恢复手段,因为GRUB引导、分区表、UUID这些都不在tar包里。恢复系统更可靠的工具是dd或Clonezilla、Relax-and-Recover (ReaR)。

对于个人或小团队,我的实用建议是:

  • 系统文件(/etc、/opt下的应用)用tar备份,够用且轻量。
  • 数据库数据,用数据库自带的备份工具(mysqldump、pg_dump),配合定时任务做全量+binlog增量。
  • 整机系统镜像,用ReaR做一次,放在外置盘或另一台机器上,重大升级前跑一次,出问题一键恢复。

rsync增量备份也值得掌握:

rsync -avz --delete /data/ root@backup-server:/backup/data/

--delete的作用是让目标目录严格同步源目录,源端删除的文件,目标端也删除。注意,这个参数有风险,如果源目录路径写错或为空,会把目标端清空。我一般在命令里同时加--dry-run先试跑一遍,确认无误再真正执行。

6. 第五关:文本处理与日志分析自测

6.1 grep、sed、awk的定位与组合用法

这三个工具是Linux文本处理的"铁三角",但很多人对它们的边界不清楚。我的理解:

  • grep负责"筛选行",按关键字把行挑出来。
  • sed负责"改行",对特定行做替换、删除、插入。
  • awk负责"取列/计算",按分隔符把行拆成字段,做统计、格式化。

工作中80%的日志分析,用这三者组合就够了。举一组实际场景:

场景一:统计nginx日志里每个IP的访问次数

awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20

这一条命令拆开看:awk '{print $1}'提取第一列(IP),sort排序,uniq -c去重并统计次数,sort -rn按次数倒序排列,head -20取前20。实际排障时,它一招就能看出是不是有异常IP在刷请求。

场景二:替换配置文件里的某个值

sed -i 's/^max_connections.*/max_connections = 512/' /etc/my.cnf

^锚定行首,. *匹配任意字符,中间是关键字,后面是替换内容。-i直接修改文件,但改之前务必先备份,或者先不加-i跑一遍看输出是否符合预期。

场景三:提取access log中耗时超过3秒的请求

awk '$NF > 3 {print $7, $NF}' /var/log/nginx/access.log

假设日志最后一列是请求耗时(秒),$NF代表最后一列。这条命令把超过3秒的请求路径和耗时打出来,排性能问题时能快速锁定慢接口。

6.2 日志排查的系统化思路

日志排查是运维的核心技能。热词里有linux系统故障案例,我就以最常见的"服务启动失败"为例,梳理一套完整的日志排查思路。

第一步,看服务状态。systemctl status mysqld,看失败原因提示。

第二步,看系统日志。journalctl -u mysqld -n 100 --no-pager,-u指定服务单元,-n显示最后100行。这条命令直接关联systemd的journal日志,比去翻文件快得多。

第三步,看应用日志。MySQL的/var/log/mysqld.log,或应用配置里指定的log路径。这里注意,应用日志和系统日志是两个体系,application的报错信息往往最接近真实原因。

第四步,用dmesg看内核日志。dmesg | tail -50,如果应用是段错误崩溃(比如Java的SIGSEGV),内核日志里会有踪迹。这个命令平时用得少,但排查"进程莫名其妙退出"时极其有用。

实战中我总结了一个快速日志定位口诀:先在状态里找线索,再去日志里要答案,最后在内核里找证据。这套思路能覆盖90%的故障场景。

6.3 日志切割与磁盘被日志打满的急救

日志没做好轮转,磁盘早晚被打满。这是运维最经典的"慢性病"。

Linux自带的logrotate每天运行一次,按配置切割日志。一个典型的nginx日志轮转配置:

/var/log/nginx/*.log { daily rotate 30 compress delaycompress missingok notifempty create 640 nginx adm postrotate test -f /var/run/nginx.pid && kill -USR1 $(cat /var/run/nginx.pid) endscript }

daily每天切一次,rotate 30保留30份,compress压缩旧日志,delaycompress延迟一天压缩(保证刚切的日志还能被查看),postrotate在切割后给nginx发信号让它重新打开日志文件。这里有个关键点:如果应用不会自动重开日志文件,必须通过postrotate发信号,否则它会继续往旧文件里写,切割就是白切。

如果日志已经打满磁盘,急救步骤是:

# 1. 确认哪个分区满了 df -h # 2. 找出大文件 du -sh /var/log/* | sort -rh | head -10 # 3. 清理或切割最大的日志 cat /dev/null > /var/log/nginx/access.log

这里再强调一遍:删除日志文件本身是错误做法,用cat /dev/null清空内容才是对的。删除文件只是把文件名从目录里消失,持有文件句柄的进程继续写,空间依然被占着。用lsof | grep deleted能找出这类"空间已被释放但文件被进程占用"的情况。

7. 自测评分与后续学习路径建议

7.1 一套简单的自我评分方法

题目做完了,怎么知道自己的水平?我建议把上面的五关分别打分,每关满分20分,总分为100分:

  • 目录与文件操作:能独立解释ls -la每个字段的含义,能用find组合条件查找,得20分。只会cd、ls、rm,得5分。
  • 权限与用户:能准确判断一个文件在各种权限组合下能否被读写执行,知道SUID/SGID/Sticky Bit的作用,得20分。
  • 进程与服务:能用systemctl查看服务状态、定位启动失败原因,理解ps和top输出关键字段,得20分。
  • 网络与存储:能用ip命令配置IP,会用ss定位端口问题,会挂载NAS并配置开机自动挂载,得20分。
  • 文本处理与日志:能用grep/sed/awk组合分析日志,会配置logrotate,得20分。

用这个标准自测一下,如果你的总分在80以上,说明基础扎实,可以直接上手生产环境的日常运维。60-80分,说明“能干活但容易踩坑”,建议重点补权限和网络这两个最"致命"的短板。60分以下,建议别急着上生产环境,先用虚拟机练一两周再实操。

7.2 不同分数段位的针对性练习

分数段的实操建议比笼统的"多学多练"有用得多:

60分以下:主攻目录和权限。用虚拟机装一个CentOS或Debian,刻意练习:创建用户、设置密码策略、用find找文件、用tar打包恢复。每一组命令都自己敲一遍,不看笔记。

60-80分:主攻日志分析和系统排障。故意制造故障再解决,比如:把nginx配置改错然后恢复、手动把日志写满再看怎么清理、用iptables封掉一个端口再放通。制造故障是学运维最快的方式,这句话我反复验证过。

80分以上:主攻脚本化和自动化。你已经能解决"单点问题",下一步是把重复操作变成脚本:用bash写一键部署脚本、用systemd timer或cron做定时任务、用rsync+ssh做异地备份。这个阶段的目标是省人力,而不是一上来就学Kubernetes或Ansible那些重工具。

7.3 推荐的学习资源和使用方法

很多初学者上来就问"哪本书最好"。我的建议是不要只靠书,用"刷题+项目+查文档"的组合:

  • 命令查询:man命令是第一老师,但英文阅读成本高的话,可以用tldr(一个简洁版命令帮助工具)快速回忆用法。
  • Linux基础书:如果只推荐一本,我会推荐《鸟哥的Linux私房菜》基础篇,虽然部分内容老,但"目录结构+权限+Shell"这部分仍然是最扎实的讲解。
  • 实操环境:本地虚拟机(VirtualBox/VMware)或云服务器,1核2G的配置就够学基础了。热词里的虚拟机安装linux、linux镜像安装,本质上就是第一步练习:把系统装起来,网络配通,SSH连上。
  • 在线题库:把热词里的linux面试题测试、linux常用命令大全当题库来刷,但不要背答案,每个命令都在自己机器上验证一遍。

我特别建议准备一个自己的"实验记录本":每学一个新命令,写一小段"我用来解决什么问题"的笔记,配上当时敲过的命令和遇到的问题。半年下来,这本笔记的价值远超任何一本教程。

7.4 面试时的加分回答模板

既然热词里频繁出现linux面试题测试,我最后聊一下面试技巧。面试官的考察重点往往不是答案本身,而是你的思考过程。同样一个问题,不同的回答深度,分数天差地别。

比如被问到"如何查找一个进程并杀掉它"。低分回答:ps -ef | grep xxx,然后kill -9。高分回答:

  1. 先用ps -ef | grep xxx确认进程PID和启动时间。
  2. 用ss -lntp | grep PID确认它监听了哪些端口。
  3. 判断是正常停止还是强制结束——kill(默认发TERM信号,让进程自己清理)优先,kill -9(强制杀,不给清理机会)兜底。
  4. 如果要重载配置而不是停止进程,用kill -HUP PID,很多服务(如nginx)会优雅重载。
  5. 杀完进程后用ps确认它是否真的退出,有些进程有守护进程会自动拉起。

能说出这五步,面试官就会认定你是真正处理过问题的人,而不是背命令的书呆子。先想后做,优雅优先,确认收尾,这12个字是我对所有学员的要求。

另外一个高频题:"Linux被入侵了,第一步做什么?"答案不是杀进程或删文件,而是先断网(拔网线或封掉对外端口),保留现场,然后拷贝日志和进程快照做取证。能答出"保留现场"这四个字,你就已经超越大多数只会"kill病毒进程"的候选人了。

8. 我在出题和批改过程中的几点体会

这套题我在团队里实际用过几轮,说一下真实感受。

出题时最难的,不是设置知识点,而是把知识点和真实场景挂钩。比如"软链接失效"这个问题,如果只是问"软链接和硬链接的区别",大家都能背出来。但换成"你启动服务时报No such file or directory,但文件明明存在,怎么排查",很多人的第一反应就卡住了——这就是从"知道"到"会用"的距离。所以我的题目设计原则是:能直接对应一个工作中踩过的坑,而不是单纯考察记忆。

批改时最常暴露的薄弱环节,集中在两处:一是权限模型,尤其是删除文件看目录权限这一点,错得最多;二是systemd时代"服务起不来"的排障思路,很多人只会重启不会看日志。这两个薄弱的背后,其实是同一个原因——现在的教程和视频都强调"怎么用命令",缺少"命令背后代表什么"的讲解。

另一个意外发现是,会写脚本的人和不会写脚本的人,基础题得分差距并不大,但解决同样问题的速度差好几倍。比如清理N天前的日志,一个用find /var/log -name "*.log" -mtime +30 -delete的脚本,能将一条"每天手动清日志"的重复劳动彻底消灭掉。所以我后来在题目里加了文本处理和脚本相关的自测项,即使岗位连写脚本都不要求,这种"用工具替代手动重复"的思维方式也应该具备。

最后说一点私人体会:我曾经带过一个实习生,刚来时连vim都不会退出,气得我想退货。但他有一个好习惯:每天把踩过的坑和应对方法记下来,三个月后,他排查问题的思路比很多两年经验的人还清晰。技术这东西,只要肯动手、肯记录、肯总结,成长速度往往是加速度的。希望这套自测题能成为你建立Linux知识体系的起点,而不是终点。遇到卡住的地方,先动手敲一遍,再查资料理解原理,你会发现Linux没那么神秘,它只是一个"所有东西都是文件、所有操作都在日志里留痕"的大型工具集罢了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询