杰瑞科技汇

Unix/Linux大学教程该怎么学?

Unix/Linux大学教程:从入门到精通

前言:为什么学习Unix/Linux?

Unix/Linux是现代计算机科学的基石,无论是服务器、云计算、嵌入式系统、移动设备(Android内核基于Linux),还是数据科学、人工智能领域,Linux都扮演着不可或缺的角色,掌握它,意味着你拥有了与计算机底层交互的强大能力,是通往高级编程、系统管理、网络安全等领域的“敲门砖”。

Unix/Linux大学教程该怎么学?-图1
(图片来源网络,侵删)

第一部分:基础入门 - 熟悉环境与核心概念

目标: 理解Unix/Linux哲学,熟练使用命令行,掌握文件系统和基本操作。

第1章:Unix/Linux简介与历史

  1. Unix的诞生: 1969年,AT&T贝尔实验室,Ken Thompson和Dennis Ritchie,它简洁、模块化、多用户、多任务的设计哲学影响深远。
  2. Linux的诞生: 1991年,芬兰学生Linus Torvalds基于Minix(一个教学用的类Unix系统)编写了Linux内核,并遵循GNU General Public License(GPL)开源。
  3. 发行版: 内核 + GNU工具集 + 图形界面 + 应用软件 = 发行版。
    • 推荐入门发行版: Ubuntu (用户友好,社区庞大), Mint。
    • 推荐专业/服务器发行版: CentOS Stream (RHEL社区版), Debian, Fedora (Red Hat上游)。
  4. 核心哲学:
    • 一切皆文件: 硬件设备、进程、配置信息都以文件形式存在于文件系统中。
    • 小而美的工具: 每个程序只做好一件事,并通过标准输入/输出/错误流组合使用,完成复杂任务。
    • 组合大于复杂: 管道是这一哲学的体现,将一个程序的输出作为另一个程序的输入。
    • 配置文本化: 系统配置通常存储在人类可读的文本文件中。

实践: 安装一个Linux虚拟机(推荐使用VirtualBox或VMware),并选择一个发行版进行安装。


第2章:Shell与基本命令

目标: 掌握Bash Shell的使用,熟练进行文件和目录操作。

  1. 什么是Shell? Shell是用户与Linux内核交互的桥梁,它是一个命令解释器,Bash (Bourne-Again Shell) 是目前最流行的Shell。
  2. 基本命令结构: 命令 [选项] [参数]
  3. 核心文件和目录操作命令:
    • ls (list): 列出文件和目录。
      • ls -l: 长格式显示(权限、所有者、大小、日期)。
      • ls -a: 显示所有文件,包括隐藏文件(以开头)。
      • ls -h: 以人类可读的方式显示文件大小(K, M, G)。
    • cd (change directory): 切换目录。
      • cd /: 切换到根目录。
      • cd ~: 或 cd: 切换到当前用户的家目录。
      • cd ..: 切换到上级目录。
    • pwd (print working directory): 显示当前工作目录。
    • mkdir (make directory): 创建新目录。
      • mkdir -p dir1/dir2: 递归创建多级目录。
    • rmdir (remove directory): 删除空目录。
    • rm (remove): 删除文件或目录。
      • rm file.txt: 删除文件。
      • rm -r dir/: 递归删除目录及其内容。
      • rm -f file.txt: 强制删除,不提示。
      • 警告:rm -rf 是一个极其危险的命令,使用前请三思!
    • cp (copy): 复制文件或目录。
      • cp file1.txt dir/: 将文件复制到目录。
      • cp -r dir1/ dir2/: 复制整个目录。
    • mv (move/rename): 移动文件或目录,或重命名。
      • mv old_name.txt new_name.txt: 重命名。
      • mv file.txt dir/: 移动文件到目录。
    • touch: 创建一个空文件或更新文件时间戳。

实践: 在你的Linux系统中,创建一个名为my_project的目录,在其中创建几个文件和子目录,并用ls, cd, cp, mv, rm等命令进行操作。

Unix/Linux大学教程该怎么学?-图2
(图片来源网络,侵删)

第3章:文件系统结构与权限

目标: 理解Linux文件系统树状结构,掌握用户、组与权限管理。

  1. 文件系统树状结构:
    • 根目录,所有文件的起点。
    • /home: 用户家目录。
    • /etc: 系统配置文件。
    • /bin, /usr/bin: 存放用户可执行的二进制文件(命令)。
    • /sbin, /usr/sbin: 存放系统管理员使用的系统管理命令。
    • /var: 存放经常变化的文件,如日志 (/var/log)。
    • /tmp: 临时文件目录。
    • /dev: 设备文件。
    • /proc: 虚拟文件系统,内核与进程信息。
  2. 用户与组:
    • root (超级用户):拥有对系统的最高权限,慎用!
    • 普通用户:权限受限。
    • 组:将用户归类,便于统一管理权限。
  3. 文件权限:
    • ls -l 输出示例:-rwxr-xr-- 1 user group 1234 Jan 1 12:34 file.txt
    • 第一列(10个字符):
      • 第1位:文件类型 (普通文件, d目录, l链接)。
      • 第2-4位:所有者 的权限 (r读, w写, x执行)。
      • 第5-7位:所属组 的权限。
      • 第8-10位:其他用户 的权限。
  4. 修改权限:chmod
    • 符号法:
      • chmod u+x file.txt: 给所有者添加执行权限。
      • chmod g-w file.txt: 移除所属组的写权限。
      • chmod o+r file.txt: 给其他用户添加读权限。
    • 数字法(常用):
      • r=4, w=2, x=1
      • chmod 755 file.txt: 所有者rwx(7), 组r-x(5), 其他r-x(5)。
  5. 修改所有者和组:chown, chgrp
    • sudo chown new_user file.txt: 将文件所有者改为new_user
    • sudo chgrp new_group file.txt: 将文件所属组改为new_group

实践: 创建一个文件,查看其默认权限,然后修改权限,使其只有你可以读写执行,而组和其他用户只能读,尝试用普通用户身份去修改一个系统文件(如/etc/hosts),体会权限的重要性。


第二部分:进阶技能 - 管理与自动化

目标: 掌握文本处理、软件安装、进程管理和Shell脚本编程。

第4章:文本处理三剑客

目标: 熟练使用grep, sed, awk进行强大的文本搜索和编辑。

Unix/Linux大学教程该怎么学?-图3
(图片来源网络,侵删)
  1. grep (Global Regular Expression Print): 文本搜索。
    • grep "error" log.txt: 在log.txt中搜索包含"error"的行。
    • grep -i "error" log.txt: 忽略大小写。
    • grep -v "error" log.txt: 输出不包含"error"的行。
    • grep -n "error" log.txt: 显示匹配行的行号。
  2. sed (Stream Editor): 流编辑器,用于对文本进行编辑(替换、删除、插入)。
    • sed 's/old/new/g' file.txt: 将文件中所有的"old"替换为"new"(s是 substitute 命令)。
    • sed -i 's/old/new/g' file.txt: 直接在原文件上修改(-i表示 in-place)。
    • sed '1d' file.txt: 删除文件的第一行。
  3. awk: 强大的文本分析工具,按列处理。
    • awk '{print $1, $3}' file.txt: 打印每行的第1列和第3列。
    • awk -F: '{print $1}' /etc/passwd: 以冒号为分隔符,打印/etc/passwd文件的第一列(用户名)。

实践: 找一个系统日志文件(如/var/log/syslog),使用grep找出包含"kernel"的行,然后用awk提取出时间和事件信息。

第5章:软件包管理与进程

目标: 学会安装和管理软件,并理解系统进程。

  1. 软件包管理器:
    • 基于Debian/Ubuntu的系统:
      • apt (Advanced Packaging Tool): sudo apt update, sudo apt install package_name, sudo apt remove package_name
    • 基于RHEL/CentOS/Fedora的系统:
      • yum (Yellowdog Updater, Modified): sudo yum install package_name
      • dnf (Dandified Yum): sudo dnf install package_name (Fedora/CentOS 7+ 推荐)。
  2. 进程管理:
    • ps (process status): 查看当前运行的进程。
      • ps aux: 显示所有进程的详细信息。
    • top / htop: 实时动态地查看进程和系统资源使用情况。htoptop的增强版,更直观。
    • kill: 终止进程。
      • kill PID: 发送正常终止信号。
      • kill -9 PID: 强制杀死进程(不推荐使用,除非必要)。
    • jobs: 查看当前终端后台的任务。
    • bg, fg: 将任务放到后台/前台运行。

实践: 使用top观察系统负载,然后打开一个文本编辑器(如nano),找到它的进程ID(PID),然后用kill命令终止它。

第6章:Shell脚本编程

目标: 编写简单的自动化脚本,提高工作效率。

  1. 第一个脚本:
    • 创建一个文件 hello.sh
    • #!/bin/bash (Shebang,指定解释器) 和 echo "Hello, World!"
    • 赋予执行权限:chmod +x hello.sh
    • 执行:./hello.sh
  2. 变量:
    • name="Alice" (定义变量,等号两边不能有空格)。
    • echo "Hello, $name" (使用变量,推荐用${name})。
    • 只读变量:readonly name
    • 特殊变量:$0 (脚本名), $1, $2 (参数), (参数个数), (上一个命令的退出状态), (进程ID)。
  3. 条件判断:if-then-else
    if [ $1 -gt 100 ]
    then
        echo "Number is greater than 100."
    else
        echo "Number is not greater than 100."
    fi
    • 常用测试:-eq (等于), -ne (不等于), -gt (大于), -lt (小于), -d (是目录), -f (是文件)。
  4. 循环:forwhile
    • for 循环:
      for file in *.txt
      do
          echo "Processing $file..."
      done
    • while 循环:
      count=1
      while [ $count -le 5 ]
      do
          echo "Count: $count"
          ((count++))
      done
  5. 函数:
    my_function() {
        echo "This is a function."
        echo "Argument 1: $1"
    }
    my_function "Hello"

实践: 编写一个脚本,它可以接受一个目录名作为参数,然后列出该目录下所有.log文件,并计算它们的总大小。


第三部分:系统管理与网络

目标: 了解系统核心配置,掌握基本网络命令。

第7章:用户管理与系统信息

  1. 用户管理:
    • useradd username: 创建新用户。
    • passwd username: 为用户设置密码。
    • userdel username: 删除用户。
    • usermod: 修改用户属性。
  2. 系统信息:
    • uname -a: 显示所有系统信息。
    • df -h: 显示磁盘空间使用情况。
    • free -h: 显示内存使用情况。
    • uptime: 显示系统运行时间和负载。

第8章:网络配置与命令

  1. 基本网络命令:
    • ifconfig / ip addr: 查看和配置网络接口。ip addr 是现代Linux推荐使用的命令。
    • ping: 测试网络连通性。
    • netstat -tuln: 查看监听的TCP/UDP端口。
    • ss -tuln: netstat的替代品,更快更强大。
    • ssh: 安全远程登录。
    • wget / curl: 从网络下载文件。

实践: 在两台Linux机器之间(或一台机器和虚拟机之间),配置静态IP,然后用pingssh互相连接。


第四部分:进阶方向与学习资源

完成以上基础后,你可以根据兴趣选择深入的方向。

系统管理与运维

  • 深入学习系统服务管理 (systemd)、日志管理 (journalctl)、性能监控与调优、安全加固、容器技术。
  • 推荐工具/技术: Docker, Kubernetes (K8s), Ansible (自动化配置管理), Prometheus (监控)。

C/C++与系统编程

  • 学习使用gcc/g++编译器,理解进程、线程、内存管理、文件I/O、信号、网络编程(Socket API)。
  • 经典书籍: 《Unix环境高级编程》(APUE), 《C++ Primer》。

网络安全

  • Linux安全模型、防火墙配置 (iptables, firewalld)、入侵检测、漏洞分析、渗透测试。
  • 推荐工具/技术: Nmap, Wireshark, Metasploit。

推荐书籍与在线资源

  • 经典书籍:
    • 《鸟哥的Linux私房菜》: 非常适合初学者的中文入门宝典。
    • 《Unix/Linux大学教程》 (A Practical Guide to Linux Commands, Editors, and Shell Programming): 非常经典的大学教材,理论与实践结合得很好。
    • 《鸟哥的Linux私房菜-服务器架设篇》: 深入学习服务器配置。
    • 《The Linux Command Line》 (TLCL): 免费的在线书籍,被誉为“Linux命令行圣经”。
  • 在线资源:
    • The Linux Documentation Project (TLDP): 最权威的Linux文档集合。
    • 菜鸟教程: 提供快速查询的命令手册。
    • Stack Overflow: 解决编程和系统问题的最佳社区。
    • GitHub: 大量开源的Shell脚本和工具,是学习的绝佳范例。

学习建议:

  1. 动手!动手!再动手! 理论知识必须通过实践来巩固,不要害怕搞坏系统,虚拟机是你的“试验田”。
  2. 善用man手册: man command是学习任何命令最权威的方式,养成习惯,遇到新命令先看man
  3. 多思考“为什么”: 为什么权限是这样设计的?为什么Shell的哲学是组合而不是复杂?理解其背后的设计思想,能让你学得更深。
  4. 建立自己的知识库: 记录常用的命令、脚本和遇到的问题,这会成为你宝贵的财富。

祝你学习顺利,在Unix/Linux的世界里探索愉快!

分享:
扫描分享到社交APP
上一篇
下一篇