找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

4667

积分

0

好友

645

主题
发表于 5 天前 | 查看: 49| 回复: 0

一、Linux 概述

1. 什么是 Linux?

Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

2. Unix 和 Linux 有什么区别?

Linux 和 Unix 都是功能强大的操作系统,但存在本质差异:

  • 开源性:Linux 是开源操作系统,可免费使用;Unix 是商业软件,需付费授权。
  • 跨平台性:Linux 具有良好跨平台能力,可在 x86、ARM、RISC-V 等多种架构运行;Unix 多与特定硬件绑定(如 AIX 对 IBM Power、HP-UX 对 HP Integrity)。
  • 可视化界面:Linux 支持 GNOME、KDE 等成熟桌面环境;传统 Unix(如 Solaris、AIX)长期以命令行为主,现代发行版已逐步增强 GUI 支持。
  • 硬件要求:Linux 对硬件要求较低,可在老旧 PC 或树莓派上运行;Unix 通常依赖专用服务器硬件。
  • 用户群体:Linux 用户覆盖个人开发者、中小企业及云原生厂商;Unix 更多用于金融、电信等对稳定性与服务等级协议(SLA)要求极高的核心系统。

值得注意的是,现代 Linux 发行版(如 RHEL、SUSE)在企业级可靠性、热补丁(kpatch/kgraft)、实时内核(PREEMPT_RT)等方面已深度对标甚至超越部分 Unix 系统。运维/DevOps/SRE 场景中,Linux 已成为事实标准。

3. 什么是 Linux 内核?

Linux 系统的核心是内核。内核控制着计算机系统上的所有硬件和软件,在必要时分配硬件资源,并根据需要调度执行软件。

其核心职责包括:

  • 系统内存管理  
  • 应用程序生命周期管理(进程/线程调度)  
  • 硬件设备驱动与抽象(如 block、net、input 子系统)  
  • 文件系统管理(VFS 层统一接口,支持 ext4、XFS、Btrfs 等)  

4. Linux 的基本组件是什么?

Linux 操作系统由以下关键组件构成:

  • 内核(Kernel):系统核心,直接与硬件交互  
  • Shell:命令行解释器(如 Bash、Zsh),用户与内核的桥梁  
  • GUI(可选):图形显示服务器(X11/Wayland)与桌面环境(GNOME/KDE)  
  • 系统实用程序lscppssystemd 等 GNU Coreutils 与 init 系统  
  • 应用程序:从文本编辑器到 Web 服务器的完整生态  

Linux 的优势在于所有组件均遵循自由软件理念,源码开放、可审计、可定制——这使其成为 计算机基础 教学与底层原理研究的理想平台。

5. Linux 的体系结构

Linux 体系结构分为两大空间:

Linux系统架构分层示意图:用户空间含User Applications与C Library;内核空间含System Call Interface、Kernel、Architecture-Dependent Kernel Code及Hardware Platform

  • 用户空间(User Space):包含用户应用程序(如 nginxpython)和 C 标准库(glibc),通过系统调用(syscall)与内核通信  
  • 内核空间(Kernel Space):包含系统调用接口(SCI)、内核核心逻辑、体系结构相关代码及硬件抽象层  

为何要划分用户/内核空间?
现代 CPU 提供 Ring 0(内核态)与 Ring 3(用户态)等特权级别。Linux 利用该机制实现内存隔离与权限控制:用户进程无法直接访问硬件或修改内核数据结构,必须经由受控的 syscall 接口,从而保障系统整体稳定性与安全性。这一设计深刻体现了操作系统 计算机基础 中“保护环(Protection Ring)”的核心思想。

6. BASH 和 DOS 之间的基本区别是什么?

维度 BASH(Linux) DOS(Windows)
大小写敏感 区分(lsLS 不区分
路径分隔符 /(如 /home/user \(如 C:\Users
转义字符 \(如 \n ^(如 ^C 中断)
文件命名规则 无限制(支持 Unicode、空格、特殊符号) 8.3 格式(FILENAME.TXT)遗留约束

7. Linux 开机启动过程

  1. 主机加电自检(POST),加载 BIOS/UEFI 固件  
  2. 读取主引导记录(MBR)或 EFI 系统分区(ESP)中的引导加载程序(GRUB2 / systemd-boot)  
  3. 加载并解压 Linux 内核镜像(vmlinuz)与初始内存盘(initramfs)  
  4. 内核初始化硬件、挂载根文件系统,启动第一个用户态进程 systemd(PID=1)  
  5. systemd 依据目标(target)启动对应服务单元(.service),进入默认运行级别(如 multi-user.target)  
  6. 启动登录管理器(gettygdm3),等待用户认证  

8. Linux 系统缺省的运行级别

级别 含义
0 关机
1 单用户模式(救援模式)
2 多用户模式(无网络,SysV)
3 多用户模式(带网络,字符界面)
4 未分配(保留)
5 图形界面多用户模式
6 重启

注:systemd 已弃用数字级别,改用 target(如 graphical.target),但 /etc/inittab 兼容性仍存在。

9. Linux 使用的进程间通信方式

  • 管道(pipe)与命名管道(FIFO)  
  • 信号(signal):轻量异步通知(如 kill -9 PID)  
  • 消息队列(POSIX/XSI)  
  • 共享内存(最高效,需同步机制如信号量)  
  • 信号量(semaphore):进程/线程同步原语  
  • 套接字(socket):支持本地(AF_UNIX)与网络(AF_INET)通信  

10. Linux 有哪些系统日志文件?

核心日志路径:

  • /var/log/messages:通用系统日志(RHEL/CentOS)  
  • /var/log/syslog:Debian/Ubuntu 系统日志  
  • /var/log/auth.log:认证相关事件(SSH 登录、sudo)  
  • /var/log/kern.log:内核日志(含 dmesg 输出)  
  • /var/log/secure:安全相关日志(RHEL 系)  

若系统部署了 ELK(Elasticsearch-Logstash-Kibana)或 Loki+Promtail 日志栈,这些文件通常作为采集源。运维 & 测试 场景中,日志标准化与集中分析是 SRE 实践基石。

11. Linux 系统安装多个桌面环境有帮助吗?

通常不推荐。一个成熟桌面环境(如 GNOME 或 KDE Plasma)已提供完整工作流。混用环境可能导致:

  • 应用兼容性问题(如 Qt 程序在 GTK 主题下渲染异常)  
  • 配置冲突(~/.config/ 下不同 DE 的配置文件互相覆盖)  
  • 资源冗余(多个显示管理器、会话守护进程争抢端口)  

仅在开发测试或特定需求(如 WINE 游戏需 Cinnamon 兼容性)时考虑切换。

12. 什么是交换空间?

交换空间(swap space)是磁盘上预留的一块区域(swap 分区或 swap 文件),当物理内存(RAM)不足时,内核将部分不活跃页(page)换出至 swap,腾出 RAM 给高优先级进程。虽能避免 OOM(Out-of-Memory)杀进程,但因磁盘 I/O 远慢于内存,过度使用会导致严重性能下降。

13. 什么是 root 帐户?

root 是 Linux 的超级用户账户,拥有对系统的完全控制权:可创建/删除用户、修改任意文件权限、加载内核模块、挂载文件系统等。每次安装 Linux 时自动创建,但生产环境应禁用 root 远程登录,改用普通用户 + sudo 提权,遵循最小权限原则。

14. 什么是 LILO?

LILO(LInux LOader)是早期 Linux 引导加载程序,负责将内核从磁盘加载至内存并移交控制权。因其不支持 LBA 大于 8GB 的硬盘、缺乏菜单交互等缺陷,已被 GRUB2(GNU GRand Unified Bootloader)全面取代。

15. 什么是 BASH?

BASH(Bourne Again SHell)是 GNU 项目开发的 Shell,作为原始 Bourne Shell(/bin/sh)的增强替代品。它兼容 POSIX shell 语法,并扩展了命令行编辑、历史搜索、作业控制、数组、关联数组等特性,现为绝大多数 Linux 发行版默认 shell。

16. 什么是 CLI?

命令行界面(Command-Line Interface, CLI)是一种通过键盘输入文本指令与系统交互的用户界面。相比 GUI,CLI 具备以下特点:

  • 资源占用低:无图形渲染开销,适合服务器、嵌入式设备  
  • 可脚本化:命令可组合、重定向、管道传递,支撑自动化运维  
  • 精确可控:参数明确,行为可预测,便于审计与复现  
  • 学习成本高:需记忆命令与选项,新手门槛较高  

正因如此,现代 Linux 桌面发行版(如 Ubuntu Desktop)仍默认集成终端(GNOME Terminal),体现 CLI 在专业场景不可替代的价值。

17. 什么是 GUI?

图形用户界面(Graphical User Interface, GUI)通过窗口、图标、菜单、指针(WIMP)提供直观交互。其核心组件包括:

  • 显示服务器(X Server 或 Wayland Compositor)  
  • 工具包(GTK、Qt)  
  • 桌面环境(GNOME、KDE、XFCE)  

GUI 极大降低了入门门槛,但对服务器管理、批量部署、CI/CD 流水线等场景,CLI 仍是首选。

18. 开源的优势是什么?

开源不仅是免费,更是协作范式的革命:

  • 透明可审计:源码公开,安全漏洞易被发现与修复(如 Heartbleed 后 OpenSSL 快速响应)  
  • 社区驱动创新:全球开发者贡献新功能、适配新硬件(如 ARM64 支持)  
  • 避免厂商锁定:用户可自由迁移、定制、二次分发  
  • 教育价值:学习者可阅读真实工业级代码,理解复杂系统设计  

19. GNU 项目的重要性是什么?

GNU(GNU's Not Unix)项目由 Richard Stallman 于 1983 年发起,旨在构建一个完全自由的操作系统。其核心成果包括:

  • GCC(GNU Compiler Collection)  
  • Glibc(GNU C Library)  
  • Bash、Coreutils(ls, cp, grep 等)  
  • GPL(General Public License)许可证  

GNU 提供了除内核外的所有关键组件。Linux 内核与 GNU 工具链结合,才形成今日完整的 GNU/Linux 操作系统。这一协作模式,是自由软件运动最成功的实践。

二、磁盘、目录、文件

1. 简单 Linux 文件系统

Linux 遵循“一切皆文件(Everything is a file)”的 Unix 哲学。不仅普通数据文件如此,硬件设备(/dev/sda)、进程信息(/proc/1/status)、内核参数(/sys/class/net/eth0/mtu)乃至管道、套接字,均通过文件接口抽象。

Linux 支持五类文件类型:

Linux文件类型表格:普通文件、目录文件、链接文件、设备文件、命名管道(FIFO)

2. Linux 的目录结构是怎样的?

Linux 目录采用倒置树形结构,根目录 / 为唯一入口。标准 FHS(Filesystem Hierarchy Standard)定义如下:

Linux根目录树状图:含bin、boot、dev、etc、home、lib、lost+found、mnt、opt、proc、root、sbin、tmp、usr、var等子目录

常见目录说明:

  • /bin:必备用户命令(ls, cp, cat)  
  • /etc:主机专用配置文件(/etc/passwd, /etc/nginx/nginx.conf)  
  • /home:普通用户主目录(/home/alice)  
  • /usr:只读用户数据(/usr/bin, /usr/lib, /usr/share)  
  • /proc:虚拟文件系统,内核运行时状态的实时映射(非真实磁盘文件)  
  • /root:root 用户主目录  
  • /sbin:系统管理员命令(ifconfig, fdisk, iptables)  
  • /dev:设备文件(/dev/sda, /dev/ttyUSB0)  
  • /mnt:临时挂载点(如 /mnt/usb)  
  • /boot:引导加载所需文件(vmlinuz, initramfs, grub.cfg)  
  • /lib:共享库(libc.so.6, ld-linux.so.2)  
  • /tmp:临时文件(重启后可能清空)  
  • /var:可变数据(日志 /var/log、邮件 /var/mail、缓存 /var/cache)  
  • /lost+foundfsck 检查后恢复的孤立文件碎片  

3. 什么是 inode?

inode(索引节点)是 Linux 文件系统的核心元数据结构,每个文件/目录有唯一 inode 号。它存储:

  • 文件大小、所有者(UID/GID)、权限(mode)  
  • 时间戳(atime/mtime/ctime)  
  • 数据块指针(直接/间接/双重间接)  
  • 链接数(hard link 计数)  

注意:inode 不存储文件名和路径。文件名仅存在于其父目录的数据块中,作为“inode 号 → 名称”的映射。因此 mv 重命名不改变 inode,而 cp 创建新 inode。

文件逻辑结构 ↔ 物理结构转换过程
当访问 /home/user/file.txt 时:

  1. 解析路径:/homeuserfile.txt  
  2. 逐级读取目录内容,获取下一级 inode 号  
  3. 最终定位 file.txt 的 inode,从中读取数据块地址  
  4. 按地址顺序读取磁盘块,拼合成文件内容  

此机制使硬链接(多个目录项指向同一 inode)与符号链接(独立 inode 存储路径字符串)成为可能。

4. 什么是硬链接和软链接?

特性 硬链接(Hard Link) 符号链接(Soft Link / Symlink)
创建命令 ln source target ln -s source target
跨文件系统 ❌ 不支持 ✅ 支持
目录链接 ❌ 不支持(仅 root 可为目录建硬链) ✅ 支持
inode 共享同一 inode 拥有独立 inode,内容为路径字符串
原文件删除 链接仍有效(inode 链接数 > 0) 链接失效("broken link")
磁盘占用 不额外占用数据块(仅增加目录项) 占用一个 inode + 少量数据块存路径

生产实践中,软链接更常用:/usr/local/bin/python3 → /opt/python3.11/bin/python3,便于版本切换。

5. RAID 是什么?

RAID(Redundant Array of Independent Disks)是将多个物理磁盘组合为单一逻辑单元的技术,目标是提升性能(striping)、可靠性(mirroring)或两者兼顾。

常见级别:

  • RAID 0:条带化(Striping),性能↑,无冗余,任一盘故障全阵列失效  
  • RAID 1:镜像(Mirroring),可靠性↑,容量减半,读性能↑  
  • RAID 5:条带化 + 分布式奇偶校验,允许单盘故障,写性能略降  
  • RAID 10:RAID 1+0,先镜像再条带,高性能高可靠,成本高  

当前云环境(AWS EBS、阿里云云盘)已将 RAID 功能下沉至存储后端,用户无需手动配置,但理解其原理对评估 IOPS、吞吐量与容灾能力至关重要。

三、安全

1. 一台 Linux 系统初始化环境后需要做一些什么安全工作?

  • 禁用 root 远程登录PermitRootLogin no in /etc/ssh/sshd_config  
  • 启用密钥认证,禁用密码登录PasswordAuthentication no  
  • 修改 SSH 默认端口(非必需,但可减少暴力扫描)  
  • 配置防火墙(firewalld/iptables):仅开放必要端口(如 22, 80, 443)  
  • 部署 fail2ban:自动封禁多次失败登录的 IP  
  • 限制 SSH 来源 IPAllowUsers user@192.168.1.0/24  
  • 精简历史命令export HISTSIZE=10  
  • 网络策略:非必要服务器禁止出网(iptables -A OUTPUT -o eth0 -j REJECT)  
  • Web 安全加固:  
    • 使用 nginx_waf 或 ModSecurity 过滤 SQLi/XSS  
    • Web 服务以非 root 用户运行(如 www-data),网站目录属主设为该用户  

2. 什么叫 CC 攻击?什么叫 DDOS 攻击?

  • CC 攻击(Challenge Collapsar):应用层攻击,模拟海量合法 HTTP 请求(如高频刷新首页),耗尽服务器 CPU、内存或数据库连接池。  
  • DDoS 攻击(Distributed Denial of Service):网络层/传输层攻击,利用僵尸网络(Botnet)发送洪泛流量(SYN Flood、UDP Flood),占满带宽或连接表。  

防御思路:  

  • CC:WAF 规则(限速、人机识别)、反向代理(Nginx limit_req)、CDN 缓存静态资源  
  • DDoS:依赖 ISP 或云厂商的流量清洗服务(黑洞路由、Anycast),本地设备难以抵御  

3. 什么是网站数据库注入?

SQL 注入(SQL Injection)是因 Web 应用未对用户输入做充分过滤,导致恶意 SQL 代码被拼接到查询语句中执行。例如:

-- 危险的拼接(PHP 示例)
$username = $_GET['user'];
$query = "SELECT * FROM users WHERE name = '$username'";
-- 攻击者传入:' OR '1'='1
-- 最终执行:SELECT * FROM users WHERE name = '' OR '1'='1'

防护措施:  

  • ✅ 使用预处理语句(Prepared Statements)与参数化查询  
  • ✅ WAF 层过滤(如 nginx_waf 拦截 UNION SELECT; DROP TABLE 等特征)  
  • ✅ 最小权限原则:Web 应用数据库账号仅授予 SELECT/INSERT/UPDATE,禁用 DROPEXECUTE  

Shell 脚本

1. Shell 脚本是什么?

Shell 脚本是包含一系列 Shell 命令的纯文本文件,用于自动化重复性任务(如备份、监控、部署)。它是 Linux 系统管理员与 DevOps 工程师的核心技能。

  • 默认登录 Shell/bin/bash(可通过 chsh 修改)  

    # 修改用户 ThinkWon 的默认 shell 为 /bin/sh
    chsh ThinkWon -s /bin/sh
  • 注释语法:以 # 开头,整行忽略  

    #!/bin/bash
    ## This script backs up /home to /backup
    echo "I am logged in as $USER"

2. 语法级要点

  • 变量类型:  

    • 系统变量:全大写($PATH, $HOME, $UID),set 命令查看  
    • 用户变量:小写或驼峰(my_var="value"),echo $my_var 读取  
  • $? 的用途:获取上一条命令退出状态(0=成功,非0=失败)  

    ls /usr/bin/shar
    echo $?  # 输出 0
    
    ls /usr/bin/share
    echo $?  # 输出 2(文件不存在)
  • Bash 特殊变量 变量 含义
    $0 脚本名称
    $1 第一个参数
    $# 参数个数
    $* 所有参数(空格分隔)
  • 取消变量unset variable_name

  • if 嵌套语法

    if [ condition1 ]; then
      command1
    else
      if [ condition2 ]; then
          command2
      else
          command3
      fi
    fi
  • 数字比较-eq, -gt, -lt):

    #!/bin/bash
    x=10; y=20
    if [ $x -gt $y ]; then
      echo "x is greater than y"
    else
      echo "y is greater than x"
    fi
  • case 语句

    case $1 in
      start)
          systemctl start nginx
          ;;
      stop)
          systemctl stop nginx
          ;;
      *)
          echo "Usage: $0 {start|stop}"
          ;;
    esac
  • for 循环

    for i in {1..5}; do
      echo "Number: $i"
    done
  • while 循环

    count=1
    while [ $count -le 3 ]; do
      echo "Count: $count"
      count=$((count + 1))
    done
  • break/continue
    break 退出整个循环;continue 跳过本次迭代,进入下一次。

  • 使脚本可执行chmod +x myscript.sh

  • #!/bin/bash 的作用:释伴(shebang),指定解释器路径。# 是 hash,! 是 bang。

  • 调试脚本:  

    • bash -x script.sh:显示执行的每条命令及其展开结果  
    • bash -n script.sh:仅语法检查,不执行  
  • 重定向标准输出与错误:  

    • command > out.txt 2>&1  
    • command &> out.txt(Bash 4.0+ 简写)
  • test 文件操作 测试项 含义
    -d f f 是目录
    -e f f 存在
    -f f f 是普通文件
    -r f f 可读
    -s f f 存在且非空
    -w f f 可写
    -x f f 可执行
  • 定义函数

    diskusage() {
      df -h
    }
    # 调用:diskusage
  • 读取终端输入

    #!/bin/bash
    echo 'Please enter your name'
    read name
    echo "My Name is $name"
  • 算术运算:  

    • expr 5 + 2  
    • $((16 + 4))(推荐,Bash 内置)  

四、编程题

1. 判断一文件是不是字符设备文件,如果是将其拷贝到 /dev 目录下?

#!/bin/bash
read -p "Input file name: " FILENAME
if [ -c "$FILENAME" ]; then
    cp "$FILENAME" /dev
fi

2. 添加一个新组为 class1,然后添加属于这个组的 30 个用户,用户名的形式为 stdxx,其中 xx 从 01 到 30?

#!/bin/bash
groupadd class1
for ((i=1; i<31; i++)); do
    if [ $i -le 10 ]; then
        useradd -g class1 std0$i
    else
        useradd -g class1 std$i
    fi
done

3. 编写 Shell 程序,实现自动删除 50 个账号的功能,账号名为 stud1stud50

#!/bin/bash
for ((i=1; i<51; i++)); do
    userdel -r stud$i
done

4. 写一个 sed 命令,修改 /tmp/input.txt 文件的内容?

要求:  

  • 删除所有空行  
  • 行中若含 11111,则在其前插入 AAA,后插入 BBB  
# 查看原始内容
[root@~]# cat -n /tmp/input.txt
     1  000011111222
     2  
     3  000011111222222
     4  11111000000222
     5  
     6  
     7  111111111111122222222222
     8  2211111111
     9  112222222
    10  1122
    11  

# 删除空行
[root@~]# sed '/^$/d' /tmp/input.txt
000011111222
000011111222222
11111000000222
111111111111122222222222
2211111111
112222222
1122

# 插入 AAA/BBB
[root@~]# sed 's#\(11111\)#AAA\1BBB#g' /tmp/input.txt
0000AAA11111BBB222
0000AAA11111BBB222222
AAA11111BBB000000222
AAA11111BBBAAA11111BBB11122222222222
22AAA11111BBB111
112222222
1122

五、实战

1. 如何选择 Linux 操作系统版本?

  • 桌面用户:Ubuntu(易用性、社区支持)、Fedora(新技术尝鲜)  
  • 服务器生产环境:  
    • CentOS Stream / Rocky Linux / AlmaLinux:RHEL 兼容,企业级稳定,主流互联网公司首选  
    • Debian:极致稳定,适合对安全性要求极高的场景(银行、政府)  
    • Ubuntu LTS:更新频繁,容器/K8s 生态最佳  
    • ⚠️ Fedora Server:RHEL 的上游测试版,不建议生产环境直接使用  

当前市场,CentOS 7/8 已结束维护,迁移至 Rocky/Alma 或 Ubuntu 22.04 LTS 是 面试求职 中高频考点。

2. 如何规划一台 Linux 主机,步骤是怎样?

  1. 明确用途:Web 服务器?数据库?K8s Node?决定 CPU/内存/磁盘类型(SSD/NVMe)  
  2. 系统安装:  
    • 分区方案(/, /boot, /home, swap,或 LVM 灵活扩容)  
    • 最小化安装(@^minimal-environment),按需添加组件  
  3. 安全基线:执行前述安全加固清单  
  4. 服务配置:Nginx/Apache、MySQL/PostgreSQL、防火墙规则  
  5. 监控接入:部署 Prometheus Node Exporter、日志收集 Agent  

3. 请问当用户反馈网站访问慢,如何处理?

可能原因与排查路径

层级 现象与工具
网络层 mtr www.example.com(路由追踪)、ss -s(socket 统计)、iftop(实时流量)
系统层 uptime/w(负载)、top/htop(CPU/MEM)、iostat -x 1(磁盘 I/O)
应用层 curl -o /dev/null -s -w "time_total: %{time_total}\n" https://example.com
数据库 mysqladmin proc statSHOW PROCESSLIST、慢查询日志(slow_query_log

典型解决措施:  

  • 出口带宽不足 → 升级带宽或引入 CDN  
  • MySQL 慢查询 → 优化 SQL、添加索引、读写分离  
  • 应用瓶颈 → 代码 Profiling(py-spy, perf)、水平扩容  
  • DNS 解析慢 → 切换公共 DNS(114.114.114.114)或本地缓存(dnsmasq)  

4. Linux 性能调优都有哪几种方法?

  • 关闭非必要服务(systemctl disable bluetooth.service)  
  • 禁用 GUI(systemctl set-default multi-user.target)  
  • 调整内核参数(/etc/sysctl.conf):  
    • vm.swappiness=10(降低 swap 使用倾向)  
    • net.ipv4.tcp_tw_reuse=1(TIME_WAIT 复用)  
  • CPU 调度器优化(cpupower frequency-set -g performance)  
  • 文件系统挂载选项(noatime, data=ordered)  
  • 网络栈调优(net.core.somaxconn, net.ipv4.ip_local_port_range)  

六、文件管理命令

1. cat 命令

  • 功能:连接文件并打印到标准输出  
  • 常用用法:  
    cat file1 file2 > merged.txt    # 合并
    cat > newfile.txt <<EOF         # Here Document 创建
    Hello
    World
    EOF
    tac file.txt                    # 反向显示(last line first)

2. chmod 命令

  • 权限模型u(user)/g(group)/o(other)/a(all) + r(4)/w(2)/x(1)  
  • 实例:  
    chmod 751 script.sh     # owner=rwx, group=rx, other=x
    chmod u+x,g-w,o-r file  # 增 owner 执行,删 group 写,删 other 读

3. chown 命令

  • 变更所有者与组:  
    chown -c mail:mail log2012.log   # -c 显示变更
    chown -cR mail:test/             # 递归修改 test/ 目录

4. cp 命令

  • 安全复制cp -ai source dest(保留属性、交互确认)  
  • 创建软链接cp -s source.txt link.txt  

5. find 命令

  • 核心语法find <path> <options> <actions>  
  • 常用选项:  
    • -name "*.log"  
    • -type f(普通文件)、-type d(目录)  
    • -mtime -2(48 小时内修改)  
    • -size +1M(大于 1MB)  
  • 执行命令:  
    find /tmp -name "*.tmp" -exec rm -f {} \;  # 删除所有 .tmp 文件

6. head 命令

  • 查看开头head -n 20 file.log(前 20 行)  
  • 查看末尾head -n -10 file.log(除最后 10 行外全部)  

7. less 命令

  • 交互式浏览less -N file.log(显示行号)  
  • 搜索/pattern(向下)、?pattern(向上)、n(重复)、N(反向)  
  • 多文件less 1.log 2.log,用 :n/:p 切换  

8. ln 命令

  • 软链接ln -sv /opt/app/config /etc/myapp/config  
  • 硬链接ln -v source.log hardlink.log  
  • 链接目录:仅软链接支持(ln -sv /data /mnt/data)  

9. locate 命令

  • 快速查找(依赖 updatedb 数据库):  
    locate /etc/sh*      # etc 下 sh 开头文件
    locate -r '^/var.*reason$'  # var 下以 reason 结尾

10. more 命令

  • 分页查看more +3 text.txt(从第 3 行开始)  
  • 管道分页ls -l | more -5(每页 5 行)  

11. mv 命令

  • 重命名/移动:  
    mv test.log test1.txt          # 重命名
    mv *.log /backup/              # 移动所有 .log
    mv -i file1 file2             # 交互确认覆盖

12. rm 命令

  • 安全删除:  
    rm -i *.log      # 逐个确认
    rm -rf test/     # 强制递归删除(慎用!)
    rm -- -f*         # 删除以 -f 开头的文件(-- 分隔选项与参数)

13. tail 命令

  • 实时日志跟踪tail -f /var/log/nginx/access.log  
  • 查看末尾 N 行tail -n 100 error.log  

14. touch 命令

  • 创建空文件/更新时间戳:  
    touch file.txt                 # 创建或更新 mtime/atime
    touch -d "2023-01-01" file.txt # 指定时间
    touch -r ref_file new_file     # 复制 ref_file 的时间戳

15. vim 命令

  • 三种模式
    Vim工作模式流程图:命令模式为中心,支持进入输入模式(i/a/o)、底线命令模式(:)及ESC返回  
  • 常用快捷:  
    • vim +10 file.txt(打开并跳至第 10 行)  
    • vim +/ERROR file.log(打开并跳至首个 ERROR 行)  
    • vim -R /etc/passwd(只读模式)  

16. whereis 命令

  • 定位二进制/手册/源码:  
    whereis locate        # 所有位置
    whereis -b locate      # 仅二进制
    whereis -m locate      # 仅手册页

17. which 命令

  • 查找 PATH 中的可执行文件:  
    which ls              # /usr/bin/ls
    which cd              # 无输出(cd 是 shell 内置命令)
    echo $PATH            # 查看当前 PATH

七、文档编辑命令

1. grep 命令

  • 全局正则搜索grep -r "error" /var/log/  
  • 常用选项:  
    • -i(忽略大小写)、-v(反向匹配)、-n(显示行号)  
    • -A3(匹配后 3 行)、-B2(匹配前 2 行)  
  • 正则示例:  
    grep "^root" /etc/passwd    # 以 root 开头的行
    grep "fail\|error" *.log   # 匹配 fail 或 error
    grep -E "(ed|at)" test.txt # 扩展正则

2. wc 命令

  • 统计行/字/字节:  
    wc -l file.txt    # 行数
    wc -w file.txt    # 字数
    wc -c file.txt    # 字节数
    cat file.txt | wc -l  # 管道统计

八、磁盘管理命令

1. cd 命令

  • 快速切换:  
    cd ~      # home 目录
    cd -      # 返回上一工作目录
    cd !$     # 使用上一命令最后一个参数作为路径

2. df 命令

  • 磁盘空间报告:  
    df -h       # 人类可读格式
    df -i       # 显示 inode 使用率(防小文件占满 inode)
    df -T       # 显示文件系统类型

3. du 命令

  • 目录空间分析:  
    du -sh /var/log/*     # 各子目录大小
    du -hsc /home /tmp     # 总计
    du --max-depth=1 /usr  # 仅一级子目录

4. ls 命令

  • 高级列表:  
    ls -lhrt        # 详细、人类可读、按修改时间逆序
    ls -lSr         # 按大小逆序
    ls -l t*         # t 开头的文件

5. mkdir 命令

  • 创建目录:  
    mkdir -p /tmp/test/t1/t2   # 递归创建(父目录不存在则自动创建)

6. pwd 命令

  • 显示当前路径:  
    pwd          # 逻辑路径(含符号链接)
    pwd -P       # 物理路径(解析所有符号链接)

7. rmdir 命令

  • 删除空目录:  
    rmdir -p parent/child/child11   # 逐级删除空父目录

九、网络通讯命令

1. ifconfig 命令(已逐步被 ip 替代)

  • 查看接口ifconfig -a  
  • 启停接口ifconfig eth0 up / ifconfig eth0 down  

2. iptables 命令

  • 开放端口:  
    iptables -A INPUT -p tcp --dport 80 -j ACCEPT
    iptables-save > /etc/sysconfig/iptables   # 保存(RHEL/CentOS)

3. netstat 命令(ss 是现代替代)

  • 查看监听端口netstat -tuln  
  • 查看连接状态netstat -an | grep ESTABLISHED  
  • 按源 IP 统计 80 端口连接数:  
    netstat -an | grep ":80.*ESTABLISHED" | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr

4. ping 命令

  • 连通性测试:  
    ping -c 4 www.baidu.com    # 发送 4 个包

5. telnet 命令

  • 测试端口连通性(TCP):  
    telnet 192.168.1.5 22    # 测试 SSH 端口

十、系统管理命令

1. date 命令

  • 时间操作:  
    date +%Y-%m-%d            # 格式化输出
    date -d "next monday"     # 计算日期
    date -s "2024-01-01 12:00:00"  # 设置系统时间(需 root)

2. free 命令

  • 内存使用:  
    free -h           # 人类可读
    free -t           # 显示总计
    free -s 2         # 每 2 秒刷新

3. kill 命令

  • 终止进程:  
    kill -9 $(pgrep nginx)    # 强制杀死所有 nginx 进程
    kill -l                  # 列出所有信号

4. ps 命令

  • 进程快照:  
    ps aux              # 所有进程(BSD 风格)
    ps -ef              # 所有进程(SysV 风格)
    ps aux | grep apache  # 过滤

5. rpm 命令

  • RPM 包管理(RHEL/CentOS):  
    rpm -qa | grep jdk      # 查询已安装 JDK
    rpm -e --nodeps jdk-7u80  # 强制卸载
    rpm -ivh package.rpm     # 安装

6. top 命令

  • 动态进程监控:  
    • P:按 CPU 排序  
    • M:按内存排序  
    • T:按运行时间排序  
    • h:帮助  
    • q:退出  

7. yum 命令

  • 包管理(RHEL/CentOS):  
    yum update              # 更新系统
    yum install nginx       # 安装
    yum remove httpd        # 卸载
    yum search "development tools"  # 搜索
    yum clean all           # 清理缓存

十一、备份压缩命令

1. bzip2 命令

  • bzip2 file.txtfile.txt.bz2  
  • bunzip2 file.txt.bz2  

2. gzip 命令

  • gzip file.txtfile.txt.gz  
  • gunzip file.txt.gz  
  • gzip -l *.gz → 查看压缩率  

3. tar 命令

  • 打包与压缩:  
    tar -cvf archive.tar file1 file2    # 仅打包
    tar -zcvf archive.tar.gz /etc       # gzip 压缩
    tar -jcvf archive.tar.bz2 /home    # bzip2 压缩
    tar -ztvf archive.tar.gz            # 查看 gzip 包内容
    tar -zxvf archive.tar.gz            # 解压 gzip 包
    tar --exclude /home/user -zcvf backup.tar.gz /home  # 排除目录

4. unzip 命令

  • unzip archive.zip  
  • unzip -l archive.zip → 查看内容



上一篇:Linux运维核心面试题:35个必考知识点精讲与实战解析
下一篇:Linux系统管理与运维面试:46个高频命令与概念详解
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-4-7 22:55 , Processed in 0.620509 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表