Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议,支持32位和64位硬件。
作为一名程序员,Linux是我们必须掌握的基本技能之一。无论是服务器运维、后端开发、云计算、大数据,还是嵌入式开发,Linux都无处不在。今天就来分享Linux操作系统的完整学习指南,从入门到精通。
Linux简介
1. 什么是Linux:
Linux是一种自由和开放源码的类UNIX操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。
Linux的特点:
- 开源免费:Linux的源代码完全开放,任何人都可以免费使用、修改和分发
- 稳定可靠:Linux系统非常稳定,可以长时间运行而不需要重启,适合作为服务器操作系统
- 安全性能好:Linux的用户权限管理严格,病毒和恶意软件较少,安全性较高
- 多用户多任务:Linux支持多用户同时登录,支持多任务同时运行
- 网络功能强大:Linux内置了强大的网络功能,支持各种网络协议和服务
- 可移植性好:Linux可以运行在各种硬件平台上,从嵌入式设备到超级计算机
- 丰富的软件生态:Linux有大量的开源软件和工具,几乎可以满足各种需求
2. Linux的历史:
Linux的诞生要追溯到1991年,芬兰赫尔辛基大学的学生林纳斯·托瓦兹(Linus Torvalds)在Minix(一个小型的类UNIX操作系统)的基础上,开发了一个新的操作系统内核,这就是Linux内核。
1991年9月17日,Linus Torvalds在comp.os.minix新闻组上发布了Linux内核的第一个版本0.01版,并公开了源代码。他在帖子中写道:"我正在做一个(免费的)操作系统,只是一个业余爱好,不会像gnu那样大和专业。"
谁也没有想到,这个"业余爱好"的操作系统,后来会成为世界上最流行的服务器操作系统,运行在全球绝大多数的服务器、超级计算机、移动设备(Android)上。
Linux的发展离不开开源社区的贡献。全世界的程序员都在为Linux贡献代码,包括个人开发者、大学研究机构、以及IBM、Google、Red Hat、Intel等大公司。Linux内核从最初的几万行代码,发展到现在的数千万行代码,成为人类历史上最大的开源协作项目之一。
3. Linux发行版:
Linux内核本身只是一个操作系统内核,还需要配合各种软件和工具,才能成为一个完整可用的操作系统。不同的组织和社区,将Linux内核和各种软件打包在一起,形成了不同的Linux发行版(Distribution)。
常见的Linux发行版:
- Ubuntu:基于Debian,以易用性著称,适合桌面用户和初学者,也广泛用于服务器
- Debian:社区驱动的发行版,稳定可靠,是很多其他发行版的基础
- CentOS:基于Red Hat Enterprise Linux(RHEL)的社区版,稳定可靠,广泛用于企业服务器
- Red Hat Enterprise Linux(RHEL):商业版Linux,企业级支持,广泛用于企业服务器
- Fedora:Red Hat赞助的社区发行版,软件版本较新,适合桌面和开发
- Arch Linux:滚动更新的发行版,轻量灵活,适合高级用户
- openSUSE:德国SUSE公司的社区版,稳定易用,有YaST配置工具
- SUSE Linux Enterprise Server(SLES):商业版Linux,企业级支持
- Alpine Linux:轻量级Linux发行版,基于musl libc和BusyBox,适合容器和嵌入式
- Kali Linux:基于Debian的安全测试发行版,预装了大量安全工具
- Deepin:国产Linux发行版,桌面界面美观,适合国内用户
选择Linux发行版,要根据自己的需求和使用场景。桌面使用推荐Ubuntu、Fedora、Deepin;服务器使用推荐CentOS、Ubuntu Server、Debian;容器使用推荐Alpine;安全测试推荐Kali。
Linux基础命令
Linux命令是我们使用Linux的基础,掌握常用的Linux命令,是学习Linux的第一步。
1. 文件和目录操作:
# 列出目录内容
ls # 列出当前目录内容
ls -l # 长格式列出,显示详细信息
ls -a # 显示所有文件,包括隐藏文件
ls -lh # 人性化显示文件大小(K、M、G)
ls -R # 递归列出子目录内容
# 切换目录
cd /path/to/dir # 切换到指定目录
cd .. # 切换到上一级目录
cd ~ # 切换到用户主目录
cd - # 切换到上一次所在目录
# 显示当前目录
pwd # 显示当前工作目录的绝对路径
# 创建目录
mkdir dirname # 创建目录
mkdir -p dir1/dir2 # 递归创建多级目录
# 删除文件或目录
rm filename # 删除文件
rm -r dirname # 递归删除目录及其内容
rm -f filename # 强制删除,不提示
rm -rf dirname # 强制递归删除目录(危险!)
# 复制文件或目录
cp source dest # 复制文件
cp -r source dest # 递归复制目录
cp -i source dest # 覆盖前提示
# 移动或重命名
mv source dest # 移动文件或目录,也可用于重命名
mv -i source dest # 覆盖前提示
# 查看文件内容
cat filename # 查看文件全部内容
more filename # 分页查看文件内容(向下翻页)
less filename # 分页查看文件内容(可上下翻页,功能更强)
head filename # 查看文件前10行
head -n 20 filename # 查看文件前20行
tail filename # 查看文件后10行
tail -n 20 filename # 查看文件后20行
tail -f filename # 实时跟踪文件末尾(常用于查看日志)
# 文件统计
wc filename # 统计文件的行数、单词数、字符数
wc -l filename # 只统计行数
wc -c filename # 只统计字符数
# 查找文件
find /path -name "*.txt" # 按文件名查找
find /path -type f # 查找所有文件
find /path -type d # 查找所有目录
find /path -size +10M # 查找大于10M的文件
find /path -mtime -7 # 查找7天内修改过的文件
# 查找文件内容
grep "pattern" filename # 在文件中查找匹配的行
grep -r "pattern" /path # 递归查找目录下所有文件
grep -i "pattern" filename # 忽略大小写
grep -v "pattern" filename # 显示不匹配的行
grep -n "pattern" filename # 显示行号
grep -c "pattern" filename # 统计匹配的行数2. 系统信息和管理:
# 系统信息
uname -a # 显示系统所有信息
uname -r # 显示内核版本
hostname # 显示主机名
cat /etc/os-release # 显示操作系统发行版信息
cat /etc/redhat-release # CentOS/RHEL显示版本信息
lsb_release -a # 显示发行版信息(需要安装lsb-release)
# 硬件信息
lscpu # 显示CPU信息
free -h # 显示内存使用情况(人性化)
df -h # 显示磁盘使用情况(人性化)
du -sh /path # 显示目录大小
du -h --max-depth=1 /path # 显示一级子目录大小
lsblk # 显示块设备信息
lspci # 显示PCI设备信息
lsusb # 显示USB设备信息
# 进程管理
ps # 显示当前终端的进程
ps aux # 显示所有进程的详细信息
ps -ef # 显示所有进程(另一种格式)
top # 实时显示进程和系统资源使用情况
htop # 增强版top(需要安装)
kill PID # 终止指定PID的进程
kill -9 PID # 强制终止进程
killall processname # 按进程名终止进程
pstree # 显示进程树
# 服务管理(Systemd)
systemctl start service # 启动服务
systemctl stop service # 停止服务
systemctl restart service # 重启服务
systemctl status service # 查看服务状态
systemctl enable service # 设置开机自启
systemctl disable service # 取消开机自启
systemctl list-units --type=service # 列出所有服务
# 关机和重启
shutdown -h now # 立即关机
shutdown -h +10 # 10分钟后关机
shutdown -r now # 立即重启
reboot # 重启
poweroff # 关机3. 用户和权限管理:
# 用户管理
whoami # 显示当前用户名
who # 显示当前登录的用户
w # 显示登录用户及其操作
id # 显示用户ID和组ID
useradd username # 创建用户
passwd username # 设置用户密码
userdel username # 删除用户
usermod -aG group username # 将用户添加到组
su - username # 切换用户
sudo command # 以管理员权限执行命令
# 组管理
groupadd groupname # 创建组
groupdel groupname # 删除组
groups username # 显示用户所属的组
# 文件权限
chmod 755 filename # 修改文件权限(数字方式)
chmod u+x filename # 给文件所有者添加执行权限
chmod g+w filename # 给文件所属组添加写权限
chmod o-r filename # 取消其他用户的读权限
chown user:group filename # 修改文件所有者和所属组
chown -R user:group /path # 递归修改目录所有者
# 权限说明
# r=4(读), w=2(写), x=1(执行)
# 755 = rwxr-xr-x(所有者读写执行,组和其他读执行)
# 644 = rw-r--r--(所有者读写,组和其他只读)
# 777 = rwxrwxrwx(所有人都有所有权限,不推荐)4. 网络管理:
# 网络信息
ip addr # 显示网络接口信息
ifconfig # 显示网络接口信息(旧命令,需要安装net-tools)
ip route # 显示路由表
route -n # 显示路由表(旧命令)
ping host # 测试网络连通性
ping -c 4 host # 发送4个包后停止
traceroute host # 追踪网络路径
mtr host # 结合ping和traceroute的网络诊断工具
# 端口和连接
netstat -tlnp # 显示监听的TCP端口
ss -tlnp # 显示监听的TCP端口(新命令)
netstat -anp # 显示所有网络连接
lsof -i :port # 查看占用指定端口的进程
curl URL # 发送HTTP请求
wget URL # 下载文件
# 域名解析
nslookup domain # 查询域名解析
dig domain # 查询域名解析(更详细)
host domain # 查询域名解析
# 防火墙(firewalld)
firewall-cmd --state # 查看防火墙状态
firewall-cmd --list-all # 查看所有规则
firewall-cmd --permanent --add-port=80/tcp # 永久开放80端口
firewall-cmd --permanent --remove-port=80/tcp # 永久关闭80端口
firewall-cmd --reload # 重新加载防火墙规则
# 防火墙(ufw,Ubuntu常用)
ufw status # 查看防火墙状态
ufw enable # 启用防火墙
ufw disable # 禁用防火墙
ufw allow 80/tcp # 允许80端口
ufw deny 80/tcp # 拒绝80端口
ufw delete allow 80/tcp # 删除规则5. 软件包管理:
# Debian/Ubuntu(apt)
apt update # 更新软件包列表
apt upgrade # 升级所有可升级的软件包
apt install package # 安装软件包
apt remove package # 卸载软件包(保留配置)
apt purge package # 卸载软件包(删除配置)
apt autoremove # 自动删除不需要的依赖包
apt search keyword # 搜索软件包
apt show package # 显示软件包信息
dpkg -l # 列出所有已安装的软件包
dpkg -i package.deb # 安装本地deb包
# CentOS/RHEL(yum/dnf)
yum install package # 安装软件包
yum remove package # 卸载软件包
yum update # 升级所有软件包
yum search keyword # 搜索软件包
yum info package # 显示软件包信息
yum list installed # 列出已安装的软件包
yum clean all # 清理缓存
dnf install package # dnf是yum的下一代(CentOS 8+)
# 源码编译安装
./configure # 配置编译环境
make # 编译
make install # 安装Linux文件系统
1. 文件系统结构:
Linux的文件系统是一个树形结构,根目录是"/",所有文件和目录都在根目录下。
/ # 根目录
├── bin/ # 基本命令二进制文件
├── boot/ # 启动引导文件
├── dev/ # 设备文件
├── etc/ # 系统配置文件
├── home/ # 用户主目录
├── lib/ # 系统库文件
├── lib64/ # 64位系统库文件
├── media/ # 可移动设备挂载点
├── mnt/ # 临时挂载点
├── opt/ # 可选软件安装目录
├── proc/ # 进程和系统信息虚拟文件系统
├── root/ # root用户主目录
├── run/ # 运行时数据
├── sbin/ # 系统管理二进制文件
├── srv/ # 服务数据
├── sys/ # 系统设备虚拟文件系统
├── tmp/ # 临时文件
├── usr/ # 用户软件和数据
│ ├── bin/ # 用户命令
│ ├── lib/ # 用户库
│ ├── local/ # 本地安装软件
│ ├── sbin/ # 系统管理命令
│ └── share/ # 共享数据
└── var/ # 可变数据
├── log/ # 日志文件
├── www/ # Web网站根目录
├── lib/ # 可变状态数据
├── tmp/ # 临时文件
└── spool/ # 邮件、打印等队列2. 重要目录说明:
- /etc:系统配置文件目录,几乎所有的系统配置文件都在这里,如网络配置、服务配置、用户配置等
- /var/log:日志文件目录,系统日志、服务日志都在这里,排查问题时经常需要查看
- /home:普通用户的主目录,每个用户在/home下有一个以用户名命名的目录
- /root:root用户(超级管理员)的主目录
- /usr/local:本地安装软件的目录,手动编译安装的软件通常放在这里
- /opt:可选软件安装目录,一些第三方软件会安装在这里
- /tmp:临时文件目录,系统和程序会在这里存放临时文件,重启后可能被清空
- /dev:设备文件目录,Linux中一切皆文件,硬件设备也以文件的形式存在这里
3. 常见文件系统类型:
- ext4:Linux最常用的文件系统,稳定可靠,支持大文件和大分区
- xfs:高性能文件系统,适合大文件和高并发,CentOS 7+默认文件系统
- btrfs:下一代文件系统,支持快照、子卷、数据校验等高级功能
- swap:交换分区,用于内存不足时将内存数据交换到磁盘
- vfat/fat32:Windows和Linux都支持的文件系统,常用于U盘
- ntfs:Windows的文件系统,Linux需要安装ntfs-3g才能读写
- nfs:网络文件系统,用于在网络上共享文件
Linux常用服务配置
1. Nginx Web服务器:
Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。它以高并发、低内存占用、稳定性好著称,是目前最流行的Web服务器之一。
# 安装Nginx(CentOS)
yum install nginx
# 安装Nginx(Ubuntu)
apt install nginx
# 管理Nginx服务
systemctl start nginx # 启动
systemctl stop nginx # 停止
systemctl restart nginx # 重启
systemctl reload nginx # 重新加载配置(不中断服务)
systemctl status nginx # 查看状态
systemctl enable nginx # 开机自启
# Nginx配置文件
# 主配置文件:/etc/nginx/nginx.conf
# 站点配置目录:/etc/nginx/conf.d/ 或 /etc/nginx/sites-available/
# 默认网站根目录:/usr/share/nginx/html 或 /var/www/html
# 日志目录:/var/log/nginx/
# 测试配置文件是否正确
nginx -t
# 查看Nginx版本
nginx -v2. MySQL/MariaDB数据库:
MySQL是最流行的开源关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。MariaDB是MySQL的一个分支,由MySQL的原始开发者创建,完全兼容MySQL。
# 安装MySQL(CentOS)
yum install mysql-server
# 安装MariaDB(CentOS)
yum install mariadb-server
# 安装MySQL(Ubuntu)
apt install mysql-server
# 管理MySQL服务
systemctl start mysqld # 启动
systemctl stop mysqld # 停止
systemctl restart mysqld # 重启
systemctl status mysqld # 查看状态
systemctl enable mysqld # 开机自启
# 登录MySQL
mysql -u root -p
# MySQL配置文件
# /etc/my.cnf 或 /etc/mysql/my.cnf
# 数据目录:/var/lib/mysql
# 日志目录:/var/log/mysql
# 常用MySQL命令
mysql> SHOW DATABASES; # 显示所有数据库
mysql> CREATE DATABASE dbname; # 创建数据库
mysql> USE dbname; # 切换数据库
mysql> SHOW TABLES; # 显示所有表
mysql> DESCRIBE tablename; # 显示表结构
mysql> SELECT * FROM tablename; # 查询数据
mysql> exit; # 退出3. Redis缓存:
Redis是一个开源的、基于内存的、高性能的键值对数据库,支持多种数据结构,如字符串、哈希、列表、集合、有序集合等。它常用于缓存、消息队列、会话存储、排行榜等场景。
# 安装Redis(CentOS,需要EPEL源)
yum install epel-release
yum install redis
# 安装Redis(Ubuntu)
apt install redis-server
# 管理Redis服务
systemctl start redis # 启动
systemctl stop redis # 停止
systemctl restart redis # 重启
systemctl status redis # 查看状态
systemctl enable redis # 开机自启
# Redis配置文件
# /etc/redis.conf 或 /etc/redis/redis.conf
# 常用配置:
# bind 127.0.0.1 # 监听地址
# port 6379 # 监听端口
# requirepass password # 设置密码
# maxmemory 256mb # 最大内存
# maxmemory-policy allkeys-lru # 内存淘汰策略
# 连接Redis
redis-cli
redis-cli -h host -p port -a password
# 常用Redis命令
redis> SET key value # 设置键值
redis> GET key # 获取值
redis> DEL key # 删除键
redis> EXISTS key # 判断键是否存在
redis> EXPIRE key 60 # 设置过期时间(秒)
redis> KEYS * # 列出所有键(生产环境慎用)
redis> INFO # 查看服务器信息
redis> FLUSHALL # 清空所有数据库(危险!)4. PHP-FPM:
PHP-FPM(PHP FastCGI Process Manager)是PHP的FastCGI进程管理器,用于管理PHP进程,处理PHP请求。它与Nginx配合使用,是目前最流行的PHP运行方式。
# 安装PHP和PHP-FPM(CentOS)
yum install php php-fpm php-mysql php-gd php-mbstring php-xml php-curl
# 安装PHP和PHP-FPM(Ubuntu)
apt install php php-fpm php-mysql php-gd php-mbstring php-xml php-curl
# 管理PHP-FPM服务
systemctl start php-fpm # 启动
systemctl stop php-fpm # 停止
systemctl restart php-fpm # 重启
systemctl status php-fpm # 查看状态
systemctl enable php-fpm # 开机自启
# PHP-FPM配置文件
# /etc/php-fpm.conf 或 /etc/php/7.4/fpm/php-fpm.conf
# 池配置目录:/etc/php-fpm.d/ 或 /etc/php/7.4/fpm/pool.d/
# PHP配置文件:/etc/php.ini 或 /etc/php/7.4/fpm/php.ini
# 查看PHP版本
php -v
# 查看PHP扩展
php -mLinux安全加固
1. 基本安全措施:
- 修改默认端口:修改SSH默认端口22为其他端口,减少暴力破解
- 禁用root登录:禁止root用户直接SSH登录,使用普通用户登录后再su或sudo
- 使用密钥登录:使用SSH密钥对登录,禁用密码登录,提高安全性
- 设置强密码:为所有用户设置强密码,定期更换密码
- 最小权限原则:只给用户必要的权限,不要滥用root
- 及时更新系统:及时安装系统安全更新,修复已知漏洞
- 关闭不必要的服务:关闭不需要的服务和端口,减少攻击面
- 配置防火墙:只开放必要的端口,限制访问来源
2. SSH安全配置:
# SSH配置文件:/etc/ssh/sshd_config
# 修改默认端口
Port 2222
# 禁用root登录
PermitRootLogin no
# 禁用密码登录(启用密钥登录后)
PasswordAuthentication no
# 限制最大认证尝试次数
MaxAuthTries 3
# 设置登录超时时间
LoginGraceTime 30
# 禁用空密码
PermitEmptyPasswords no
# 修改配置后重启SSH服务
systemctl restart sshd3. 防火墙配置:
# firewalld配置示例
# 只开放必要的端口
firewall-cmd --permanent --add-service=ssh
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd --reload
# 限制SSH访问来源(只允许特定IP)
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept'4. 定期备份:
数据备份是安全的最后一道防线。定期备份重要数据,包括网站文件、数据库、配置文件等。备份要异地存储,定期测试备份的可用性。
# 备份MySQL数据库
mysqldump -u root -p dbname > backup.sql
# 备份文件
tar -czf backup.tar.gz /path/to/files
# 自动备份脚本示例(crontab定时执行)
# 每天凌晨3点备份数据库和网站文件
0 3 * * * /usr/bin/mysqldump -u root -ppassword dbname > /backup/db_$(date +\%Y\%m\%d).sql
0 3 * * * /bin/tar -czf /backup/www_$(date +\%Y\%m\%d).tar.gz /var/www/html学习建议
- 多动手实践:Linux是一门实践性很强的技能,光看教程是学不会的,一定要多动手操作。建议在虚拟机或云服务器上安装Linux,边学边练。
- 掌握常用命令:Linux命令很多,不需要全部记住,但是常用的命令一定要熟练掌握。遇到不熟悉的命令,善用man手册和--help参数。
- 理解文件系统:Linux的文件系统结构和Windows有很大不同,理解Linux的目录结构、文件权限、挂载等概念,是学好Linux的基础。
- 学会排查问题:Linux出问题时,要学会查看日志、分析错误信息、使用诊断工具。日志文件通常在/var/log目录下,这是排查问题的第一站。
- 循序渐进:Linux的内容很多,从基础命令到系统管理、网络配置、服务部署、安全加固、性能调优,要循序渐进,不要急于求成。
- 善用社区资源:Linux有活跃的开源社区,遇到问题可以搜索、提问。推荐Stack Overflow、Linux中国、开源中国等社区。
总结
Linux是程序员必须掌握的基本技能之一,它稳定、安全、高效,广泛应用于服务器、云计算、嵌入式、移动设备等领域。掌握Linux,不仅能提高我们的工作效率,还能让我们更深入地理解计算机系统的工作原理。
学习Linux没有捷径,只有多动手、多实践、多思考。从基础命令开始,逐步深入到系统管理、服务配置、安全加固、性能调优。相信通过不断的学习和实践,你一定能够从Linux入门到精通。
最后,送给大家一句话:"Linux不是一个操作系统,而是一种生活方式。"希望大家都能享受Linux带来的自由和乐趣!
评论(0)
暂无评论,快来抢沙发~
评论功能仅对会员开放,请先登录
登录