Linux入门教程(非常详细)从零基础入门到精通,看完这 ...

2025-12-27 13:55:48 · 作者: AI Assistant · 浏览: 5

Linux是程序员必备的技能之一,无论是在后端开发、系统运维还是嵌入式开发中都至关重要。本文将从基础概念、常用命令、Shell脚本、进程管理、系统编程以及运维工具等角度,系统地讲解Linux的使用方法,帮助读者从零基础入门到精通。

Linux作为一个开源操作系统,其稳定性和灵活性使其成为开发者和系统管理员的首选平台。无论是学习系统编程、搭建开发环境,还是部署应用和管理服务器,掌握Linux命令和操作对于提升个人技术能力具有重要意义。本文将从Linux的基本概念出发,逐步深入到命令操作、脚本编写以及系统管理,旨在为初学者提供一套完整的Linux学习路径。

Linux的基础概念

Linux系统本质上是基于Unix的开源操作系统,其核心是Linux内核,由Linus Torvalds于1991年开发。Linux内核负责硬件资源的管理和调度,而Linux发行套件则是包含了内核、常用软件包以及工具链的完整操作系统。常见的Linux发行版包括Red Hat Enterprise Linux (RHEL)、Fedora、CentOS、Debian、Ubuntu等。

  • RHEL 是企业级Linux系统,广泛用于生产环境,具有极高的稳定性和安全性,但需要付费授权。
  • Fedora 是RHEL的试验版本,适用于桌面和开发者,提供最新技术的测试环境。
  • CentOS 是基于RHEL的免费操作系统,适合学习和实验。
  • Ubuntu 是一个广泛用于开发和服务器的Linux发行版,其社区活跃度高,文档齐全,是很多初学者的首选。

Linux和Windows操作系统在很多方面存在显著差异。Linux以其稳定性、安全性、资源占用低开源特性著称,使得它在服务器环境和嵌入式系统中尤为受欢迎。

终端与Shell

在Linux中,大多数操作都是通过终端(Terminal)进行的。终端是一个命令行界面(CLI),用户通过输入命令来与操作系统交互。Shell是终端背后的解释器,它接收用户输入的命令并执行,同时支持变量、循环、条件判断等编程功能,使得用户可以编写Shell脚本来完成自动化任务。

Linux中常见的Shell有Bash、Zsh、Fish等,其中Bash是最常用的Shell,几乎所有的Linux发行版默认使用它。用户可以通过以下命令查看当前使用的Shell:

echo $SHELL

或者查看系统中安装的所有Shell类型:

cat /etc/shells

不同Shell之间存在一些差异,例如Bash是传统的Shell,Zsh则具有更强大的自动补全功能,而Fish则以用户友好的语法设计著称。选择适合自己的Shell可以提升命令行操作的效率。

常用命令详解

命令行提示符

在终端中,用户会看到一个提示符,如:

[root@iZm5e8dsxce9ufaic7hi3uZ ~]#

其中: - root 表示当前用户; - iZm5e8dsxce9ufaic7hi3uZ 表示主机名; - ~ 表示当前用户的工作目录(即家目录); - # 表示当前用户拥有root权限,普通用户则显示为 $

命令格式

Linux命令的格式通常为:

command [options] [arguments]
  • options 是命令的参数,用于指定命令的行为,如 -a 表示显示所有文件;
  • arguments 是命令的操作对象,如 ls /home 表示列出 /home 目录下的内容。

常用命令

pwd:查看当前目录

pwd

执行该命令后,终端会显示当前所在的路径。例如:

/root

which:查找命令路径

which ls

该命令用于查找某个命令在系统中的可执行文件路径。例如:

/usr/bin/ls

ls:列出目录内容

ls -a

使用 -a 参数可以显示所有文件和目录,包括隐藏文件。

ls -l

使用 -l 参数可以显示文件的详细信息,如权限、大小、修改时间等。

ls -h

-h 参数用于以更易于阅读的方式显示文件大小,如 1.4K

ls -t

-t 参数按照文件的修改时间排序。

ls -i

-i 参数显示文件的inode编号。

cd:切换目录

cd /

切换到根目录。

cd ~

切换到当前用户的家目录。

cd ..

切换到上一级目录。

cd ./home

切换到当前目录下的 home 目录。

cd /home/lion

切换到根目录下的 home 目录中的 lion 目录。

cd

不带参数时,cd 命令会默认回到家目录。

du:查看目录大小

du -h

-h 参数可以以人类可读的方式显示目录大小。

du -a

-a 参数会显示目录下所有文件的大小。

du -s

-s 参数仅显示目录的总大小。

touch:创建文件

touch new_file

创建一个名为 new_file 的空文件。

mkdir:创建目录

mkdir new_folder

创建一个名为 new_folder 的空目录。

mkdir -p one/two/three

使用 -p 参数可以创建多层目录结构,即使中间目录不存在,也会自动创建。

文件查看与操作

cat:查看文件内容

cat cloud-init.log

cat 命令可以一次性显示文件的所有内容,适合查看较小的文件。

less:分页查看文件

less cloud-init.log

less 命令用于分页查看大文件,支持多种导航操作。

快捷操作: - 空格键:前进一页; - b 键:后退一页; - 回车键:前进一行; - y 键:后退一行; - 上下键:逐行移动; - d 键:前进半页; - u 键:后退半页; - q 键:退出 less; - = 键:显示当前页的行数; - / 键:进入搜索模式,按 n 跳到下一个匹配项,按 N 跳到上一个匹配项。

headtail:查看文件开头和结尾

head cloud-init.log

默认显示文件的前10行内容。

head -n 2 cloud-init.log

显示前2行内容。

tail cloud-init.log

默认显示文件的后10行内容。

tail -n 2 cloud-init.log

显示后2行内容。

tail -f cloud-init.log

持续监控文件的更新,每秒刷新一次;若需要设置间隔时间,可使用 -s 参数:

tail -f -s 4 cloud-init.log

cp:复制文件和目录

cp file file_copy

file 复制为 file_copy

cp file one

file 复制到 one 目录下。

cp file one/file_copy

file 复制到 one 目录下,并以 file_copy 为新文件名。

cp *.txt folder

将当前目录下所有 .txt 文件复制到 folder 目录中。

cp -r dir1 dir2

使用 -r 参数复制整个目录。

mv:移动或重命名文件和目录

mv file one

file 移动到 one 目录下。

mv new_folder one

new_folder 移动到 one 目录下。

mv *.txt folder

将当前目录下所有 .txt 文件移动到 folder 目录下。

mv file new_file

file 重命名为 new_file

文件删除与链接

rm:删除文件和目录

rm new_file

删除 new_file 文件。

rm f1 f2 f3

同时删除 f1f2f3 三个文件。

常用参数: - -i:删除前提示确认; - -f:强制删除; - -r:递归删除目录内容。

rm -rf /path/to/directory

rm -rf 是一个非常强大的命令,可以删除整个目录及其内容。使用时需格外小心,避免误删重要文件。

ln:创建链接

Linux中支持两种类型的链接:硬链接软链接

硬链接

ln file1 file2

创建 file2file1 的硬链接。硬链接具有与原文件相同的inode,因此它们指向的是相同的文件内容。硬链接不能指向目录,只能指向文件。

软链接(符号链接):

ln -s file1 file2

创建 file2file1 的软链接,类似于Windows中的快捷方式。可通过 ls -l 查看链接信息:

ls -l

输出可能如下:

lrwxrwxrwx 1 root root 7 Jan 14 06:42 file2 -> file1

这表示 file2 是指向 file1 的软链接。若删除 file1file2 将变成一个死链接,因为目标文件已不存在。

用户与权限管理

用户管理

Linux是一个多用户操作系统,每个用户都属于一个或多个群组。系统中默认有一个名为 root 的用户,它拥有最高权限,可以执行任何操作。普通用户在执行某些需要高权限的操作时,可以使用 sudo 命令。

sudo date

该命令会以 root 身份执行 date 命令。执行 sudo 命令时,系统会提示用户输入密码。

用户与群组操作

  • 添加用户bash useradd lion passwd lion

使用 useradd 添加用户 lion,然后使用 passwd 修改其密码。这些操作需要 root 权限。

  • 删除用户bash userdel lion userdel lion -r

userdel 命令用于删除用户。-r 参数会同时删除用户的家目录。

  • 切换用户bash su lion sudo su

su 命令用于切换用户。sudo su 会切换为 root 用户。

群组管理

Linux中,用户可以通过 groupaddgroupdelusermod 命令来管理群组。

  • 创建群组bash groupadd friends

  • 删除群组bash groupdel friends

  • 查看用户所在群组bash groups lion

  • 修改用户群组bash usermod -g friends lion

将用户 lion 的主群组改为 friends

  • 添加用户到多个群组bash usermod -G friends,foo,bar lion

用户 lion 将被添加到 friendsfoobar 三个群组中。

文件权限管理

Linux中,文件权限分为所有者权限群组权限其他用户权限。权限由rwx组成,分别表示读、写和执行。权限的数字表示为:

  • r 代表读(4)
  • w 代表写(2)
  • x 代表执行(1)

权限组合: - rw-:6(4+2) - r--:4 - r-x:5(4+1) - rw+:7(4+2+1)

使用 chmod 命令可以修改文件权限:

chmod 640 hello.c

该命令将 hello.c 文件的权限设置为: - 所有者:rw- - 群组:r-- - 其他用户:---

chmod -R 777 /home/lion

使用 -R 参数可以递归地修改目录及其子目录中所有文件和目录的权限。

权限详解

权限字符串如 drwxr-xr-x,其中: - d 表示这是一个目录; - rwx 表示所有者具有读、写和执行权限; - r-x 表示群组用户具有读和执行权限,但不能写入; - r-x 表示其他用户具有读和执行权限,但不能写入。

通过 ls -l 可以查看文件或目录的详细信息,包括权限、所有者、大小、修改时间等。

Shell脚本编写

Shell脚本是Linux中用于自动化任务的重要工具。通过编写脚本,用户可以将重复性工作简化为几行命令。

Shell脚本基础

Shell脚本是一段文本文件,其后缀通常为 .sh,内容由一系列Shell命令组成。执行脚本前,需要赋予它可执行权限:

chmod +x script.sh

然后可以通过以下命令运行脚本:

./script.sh

或者:

bash script.sh

脚本示例

以下是一个简单的Shell脚本示例,用于显示当前目录下的文件列表:

#!/bin/bash
echo "当前目录内容:"
ls -l

保存为 list_files.sh,并赋予执行权限后运行。

Shell脚本中的变量与条件

Shell脚本可以使用变量,也可以进行条件判断和循环操作。例如:

#!/bin/bash
username=$1
echo "当前用户是:$username"

脚本执行时传入用户名:

./list_files.sh lion

输出为:

当前用户是:lion

Shell脚本还支持条件判断:

#!/bin/bash
if [ -f "file.txt" ]; then
    echo "文件存在"
else
    echo "文件不存在"
fi

该脚本检查文件是否存在,并输出相应的信息。

进程与线程管理

进程管理

在Linux中,进程是程序在内存中的运行实例。进程管理是系统维护和性能调优的重要内容。

查看进程

ps

ps 命令用于查看当前运行的进程。默认情况下,它会列出当前终端中运行的进程。

ps aux

ps aux 会列出系统中所有进程的详细信息,包括进程ID、CPU和内存使用情况等。

终止进程

kill <PID>

使用 kill 命令可以终止指定PID的进程。若进程无法正常终止,可使用 -9 参数强制终止:

kill -9 <PID>

查看进程资源占用

top

top 命令可以实时监控系统的进程和资源使用情况,包括CPU、内存和磁盘IO等。

线程管理

Linux中,线程是进程内的执行单元。通过 pthread 库,开发者可以使用C语言实现多线程编程。

创建线程

#include <pthread.h>
#include <stdio.h>

void* thread_function(void* arg) {
    printf("线程正在运行...\n");
    return NULL;
}

int main() {
    pthread_t thread;
    pthread_create(&thread, NULL, thread_function, NULL);
    pthread_join(thread, NULL);
    printf("主线程结束。\n");
    return 0;
}

该程序创建了一个线程,并在其中打印一条消息。pthread_create 用于创建线程,pthread_join 用于等待线程结束。

线程同步

使用 pthread_mutex_t 可以实现线程间的同步:

#include <pthread.h>
#include <stdio.h>

pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;

void* thread_function(void* arg) {
    pthread_mutex_lock(&mutex);
    printf("线程正在运行...\n");
    pthread_mutex_unlock(&mutex);
    return NULL;
}

int main() {
    pthread_t thread1, thread2;
    pthread_create(&thread1, NULL, thread_function, NULL);
    pthread_create(&thread2, NULL, thread_function, NULL);
    pthread_join(thread1, NULL);
    pthread_join(thread2, NULL);
    printf("主线程结束。\n");
    return 0;
}

该脚本使用互斥锁(mutex)来确保线程在访问共享资源时不会出现冲突。

信号处理

Linux中,信号(signal)是进程间通信的一种方式,用于通知进程发生了某些事件。常见的信号包括 SIGINT(中断)、SIGKILL(强制终止)、SIGTERM(终止)等。

发送信号

kill -SIGINT <PID>

发送 SIGINT 信号给指定进程,相当于按下 Ctrl + C

信号处理

C语言中,可以使用 signal() 函数来处理信号。例如:

#include <signal.h>
#include <stdio.h>
#include <unistd.h>

void handle_signal(int sig) {
    printf("接收到信号 %d\n", sig);
}

int main() {
    signal(SIGINT, handle_signal);
    while (1) {
        sleep(1);
    }
    return 0;
}

该程序在接收到 SIGINT 信号时会输出一条提示信息。

输入输出模型

Linux中常用的输入输出模型包括标准输入(stdin)标准输出(stdout)标准错误(stderr),它们分别对应文件描述符 012

重定向输出

ls > output.txt

ls 命令的输出重定向到 output.txt 文件中。

ls > output.txt 2> error.txt

将标准输出和标准错误分别重定向到 output.txterror.txt 文件中。

追加输出

echo "Hello" >> output.txt

使用 >> 将输出追加到文件末尾。

管道操作

ls | grep "log"

ls 命令的输出通过管道 | 传递给 grep 命令,用于筛选包含 "log" 的文件名。

运维工具与实践

Docker容器化

Docker是一个容器化平台,它允许开发者在隔离的环境中部署和运行应用。使用Docker可以提高开发效率、简化部署流程,并增强系统的可移植性。

安装Docker

sudo apt-get update
sudo apt-get install docker.io

运行容器

docker run hello-world

该命令会拉取并运行一个简单的 hello-world 容器。

查看容器状态

docker ps

查看正在运行的容器信息。

停止容器

docker stop <container_id>

停止指定容器。

日志分析工具

日志是系统和应用程序调试的重要依据。常用的Linux日志分析工具包括 taillessgrepawksed

查找日志内容

grep "error" /var/log/syslog

使用 grep 过滤日志中的错误信息。

分析日志

awk '/error/ {print $0}' /var/log/syslog

使用 awk 进一步分析日志内容。

监控工具

tophtop

top 是一个实时系统监控工具,用于查看当前运行的进程和资源使用情况。htoptop 的增强版本,支持交互式操作。

psvmstat

ps aux

查看所有进程的详细信息。

vmstat 1

每秒输出一次虚拟内存统计信息。

iostatnetstat

iostat

查看磁盘IO性能。

netstat -tuln

列出当前监听的网络端口。

日志轮转

Linux中常使用 logrotate 工具来管理日志文件的大小和轮转。logrotate 可以定期压缩和删除旧日志。

logrotate /etc/logrotate.d/syslog

指定日志轮转配置文件。

日志轮转配置示例

/var/log/syslog {
    daily
    rotate 7
    compress
    missingok
    notifempty
    delaycompress
    create 644 root root
}

该配置表示每天轮转一次日志,保留7天,压缩旧日志,并创建新的日志文件。

总结与实践建议

Linux是一个强大的操作系统,其命令行工具和脚本能力使得开发者能够高效地完成各种任务。掌握常用命令Shell脚本进程与线程管理以及系统编程对于构建稳定、高效的系统至关重要。同时,学习运维工具如 Docker、logrotate 和监控工具如 topvmstat 等,不仅能提升开发效率,也能增强系统的可靠性和可维护性。

对于初学者来说,建议以下学习路径: 1. 从基础命令开始,如 lscdpwdcatrmtouch 等; 2. 掌握Shell脚本编写技巧,如变量、条件判断和循环; 3. 理解进程和线程管理,使用 pskillpthread; 4. 学习信号处理,掌握 signal() 等函数; 5. 掌握输入输出模型,使用 >>>| 等符号进行重定向和管道操作; 6. 学习使用运维工具,如 logrotateDockertop; 7. 掌握用户与权限管理,如 useraddpasswdchmodchownchgrp; 8. 最后,尝试编写自己的Shell脚本,将日常操作自动化。

掌握这些技能后,读者将能够更自信地在Linux环境中进行开发和运维工作,无论是在本地开发还是远程服务器管理中都能游刃有余。

关键字列表:Linux, Shell, 命令行, 文件管理, 进程管理, 线程, 权限, 用户, Docker, logrotate, 系统编程, 自动化, 运维