跳转至

Linux入门

欢迎来到Linux的奇妙世界!🐧 本教程将带你了解Linux操作系统的基础知识,从最基本的命令到更高级的操作,让你能够自如地在Linux环境中工作。

什么是Linux?

Linux是一个开源的操作系统内核,基于UNIX设计理念。它是由芬兰学生Linus Torvalds在1991年创建的,如今已发展成为支撑互联网、云计算和服务器市场的主流操作系统。

为什么叫Linux?

Linux名称的由来很有趣。它是创始人Linus Torvalds的名字"Linus"和UNIX的组合,最初Linus想把它叫做"Freax"(Free + Freak + UNIX),但管理FTP服务器的朋友擅自把上传目录命名为"Linux",这个名字就这样流传开来了。

Linux发行版

Linux有许多不同的发行版,它们都基于Linux内核,但提供不同的软件包、默认设置和目标用户群体:

  • Ubuntu: 适合初学者,用户友好的界面,广泛的社区支持
  • CentOS/RHEL: 企业级应用,稳定可靠
  • Debian: 高度稳定,自由软件理念的忠实拥护者
  • Fedora: 创新前沿技术的测试平台
  • Arch Linux: 追求简洁和最新软件,适合高级用户

基础命令

文件和目录操作

pwd       # 显示当前工作目录
ls        # 列出目录内容
ls -l     # 以长格式列出文件详情
ls -a     # 显示包括隐藏文件在内的所有文件
cd 目录名  # 切换到指定目录
cd ..     # 返回上一级目录
cd ~      # 返回用户主目录
touch file.txt         # 创建空文件
mkdir 目录名           # 创建新目录
cp 源文件 目标文件      # 复制文件
cp -r 源目录 目标目录   # 递归复制目录
mv 源文件 目标文件      # 移动/重命名文件
rm 文件名              # 删除文件
rm -r 目录名           # 递归删除目录
cat file.txt      # 显示文件全部内容
less file.txt     # 分页查看文件内容(按q退出)
head file.txt     # 查看文件开头部分
tail file.txt     # 查看文件结尾部分
tail -f file.txt  # 实时查看文件更新(常用于日志)

系统信息和进程管理

uname -a          # 显示系统信息
df -h             # 显示磁盘使用情况
free -m           # 显示内存使用情况
top               # 显示实时系统进程
ps aux            # 显示所有进程
kill PID          # 终止指定进程ID的进程
killall 进程名     # 终止所有指定名称的进程

用户和权限管理

whoami                        # 显示当前用户
sudo 命令                     # 以管理员权限执行命令
chmod 权限 文件名              # 更改文件权限
chown 用户:组 文件名           # 更改文件所有者和组
passwd                        # 更改当前用户密码

文件权限解析

在Linux中,文件权限由三组权限组成,分别对应所有者、所属组和其他用户:

权限示例: -rwxr-xr--

解析: - 第一个字符(-): 表示文件类型(-为普通文件,d为目录) - 接下来三个字符(rwx): 所有者权限(读、写、执行) - 接下来三个字符(r-x): 所属组权限(读、无写、执行) - 最后三个字符(r--): 其他用户权限(读、无写、无执行)

数字表示法: - r (读) = 4 - w (写) = 2 - x (执行) = 1

常见组合: - chmod 755 file = rwxr-xr-x(所有者全权限,其他人读和执行) - chmod 644 file = rw-r--r--(所有者读写,其他人只读)

文件编辑

Linux提供了多种文本编辑器,从简单到复杂:

# 简单易用,适合初学者
nano file.txt

# 基本操作:
# Ctrl+O: 保存
# Ctrl+X: 退出
# Ctrl+K: 剪切行
# Ctrl+U: 粘贴
# 功能强大,学习曲线较陡
vim file.txt

# 基本模式:
# 命令模式(默认):按i进入插入模式
# 插入模式:编辑文本,按Esc返回命令模式
# 底线命令模式:在命令模式下按:进入

# 常用命令:
# :w - 保存
# :q - 退出
# :wq - 保存并退出
# :q! - 不保存强制退出

软件包管理

不同的Linux发行版使用不同的包管理系统:

sudo apt update                 # 更新软件包列表
sudo apt upgrade                # 升级所有可升级的软件包
sudo apt install 软件包名       # 安装软件包
sudo apt remove 软件包名        # 移除软件包
apt search 关键词              # 搜索软件包
apt show 软件包名              # 显示软件包信息
sudo yum update                 # 更新所有软件包
sudo yum install 软件包名       # 安装软件包
sudo yum remove 软件包名        # 移除软件包
yum search 关键词              # 搜索软件包
yum info 软件包名              # 显示软件包信息

# Fedora和新版CentOS使用dnf,命令格式相同
sudo pacman -Syu               # 更新系统
sudo pacman -S 软件包名        # 安装软件包
sudo pacman -R 软件包名        # 移除软件包
pacman -Ss 关键词             # 搜索软件包
pacman -Si 软件包名           # 显示软件包信息

网络工具

ifconfig           # 显示网络接口信息(部分发行版需安装net-tools)
ip addr            # 现代替代ifconfig的命令
ping 域名或IP      # 测试网络连通性
netstat -tulpn     # 显示所有活动的网络连接
wget URL           # 下载文件
curl URL           # 获取URL内容
ssh 用户名@主机    # 通过SSH连接到远程主机

Shell脚本入门

Shell脚本是Linux中自动化任务的强大工具。下面是一个简单的Hello World脚本:

#!/bin/bash
# 这是我的第一个shell脚本
echo "Hello, Linux World!"

# 使用变量
name="小明"
echo "你好,$name!"

# 条件判断
if [ -f "/etc/hosts" ]; then
    echo "hosts文件存在"
else
    echo "hosts文件不存在"
fi

# 循环
for i in {1..5}; do
    echo "计数: $i"
done

保存为hello.sh,然后:

chmod +x hello.sh   # 添加执行权限
./hello.sh         # 运行脚本

实战案例:自动化备份

假设我们需要定期备份我们的项目文件,可以创建一个简单的备份脚本:

#!/bin/bash

# 设置变量
SOURCE_DIR="/home/user/projects"
BACKUP_DIR="/home/user/backups"
DATE=$(date +%Y%m%d-%H%M%S)
BACKUP_FILE="project_backup_$DATE.tar.gz"

# 创建备份目录(如果不存在)
mkdir -p $BACKUP_DIR

# 创建备份
echo "正在备份 $SOURCE_DIR$BACKUP_DIR/$BACKUP_FILE..."
tar -czf "$BACKUP_DIR/$BACKUP_FILE" "$SOURCE_DIR"

# 检查备份是否成功
if [ $? -eq 0 ]; then
    echo "备份成功完成!"
    echo "备份文件: $BACKUP_DIR/$BACKUP_FILE"
    echo "文件大小: $(du -h $BACKUP_DIR/$BACKUP_FILE | cut -f1)"
else
    echo "备份失败!"
fi

# 只保留最近5个备份文件
cd $BACKUP_DIR
ls -t *.tar.gz | tail -n +6 | xargs -I {} rm {}
echo "已删除旧备份,保留最近5个备份文件。"

将此脚本保存为backup.sh并添加执行权限后,你可以手动运行它,或者使用cron设置定期自动执行。

进阶主题

随着你对Linux的熟悉,可以探索这些进阶主题:

  • 服务管理: systemd, service命令
  • 防火墙配置: iptables, ufw, firewalld
  • 用户管理: useradd, usermod, userdel
  • 磁盘管理: fdisk, lvm, mount
  • 日志管理: journalctl, logrotate
  • 容器化: Docker, Podman
  • 自动化: Ansible, Shell脚本

练习题

  1. 创建一个名为linux_practice的目录,在其中创建三个文件,然后使用单个命令列出这些文件的详细信息。
  2. 编写一个shell脚本,统计指定目录中所有文本文件的总行数。
  3. 使用命令查找系统中占用空间最大的5个文件。
  4. 创建一个定时任务,每天凌晨3点自动更新系统软件包。

常见问题解决

"权限被拒绝"错误

遇到"Permission denied"错误时,请检查: 1. 文件权限是否正确 (ls -l) 2. 是否需要使用sudo 3. 文件系统是否被挂载为只读

找不到命令

如果遇到"command not found"错误: 1. 确认该命令是否已安装 2. 检查PATH环境变量 (echo $PATH) 3. 使用whichwhereis定位命令

磁盘空间不足

当系统提示"No space left on device": 1. 使用df -h检查各分区空间 2. 使用du -sh /*找出大文件夹 3. 清理不需要的文件,特别是/tmp/var/log

小结

Linux是一个强大而灵活的操作系统,掌握它的基础知识将为你在开发、运维和系统管理方面打开新的大门。本教程只是一个开始,随着你的实践,你会发现Linux的可能性是无限的!

记住,在Linux的世界里,有一句名言:

"在Unix的哲学中,一切皆文件;在Linux的实践中,一切皆可定制。"

继续探索,享受Linux带来的乐趣和效率!