linux系统简单笔记

📋 知识地图

说明:✅ = 已有覆盖(可继续深化) ⬜ = 待扩充

一、Linux 概述与发行版

  • ⬜ Linux 发展史与内核架构
  • ⬜ 主流发行版对比(Ubuntu / CentOS / Debian / Arch)
  • ⬜ 服务器 vs 桌面 vs 嵌入式的选择
  • ⬜ 虚拟机 / WSL / Docker 环境搭建

二、用户与权限管理

  • ✅ 用户创建与管理(useradd / passwd / usermod / userdel)
  • ✅ 用户组概念与权限控制
  • ✅ 命令提示符含义(root vs 普通用户)
  • ⬜ 文件权限模型(rwx / chmod / chown / chgrp)
  • ⬜ 数字权限表示法(755 / 644 / 777 等)
  • ⬜ sudo 配置与使用(/etc/sudoers)
  • ⬜ SUID / SGID / Sticky Bit 特殊权限位

三、Shell 终端与命令行

  • ✅ 终端概念与 Shell 定位
  • ✅ 命令提示符解读
  • ✅ 常用快捷键(Tab / Ctrl+C / Ctrl+Z / Ctrl+L / Ctrl+U)
  • ⬜ Bash 配置文件(.bashrc / .bash_profile)
  • ⬜ 环境变量(PATH / HOME / 自定义)
  • ⬜ 输入输出重定向(> / >> / < / 2>&1)
  • ⬜ 管道(|)与命令串联(&& / || / ;)
  • ⬜ 命令别名(alias)

四、文件与目录操作

  • ✅ ls / cd / pwd / mkdir / touch
  • ✅ cp / rm(含 rm -rf 警告)
  • ✅ 文本查看(cat / more / less / tail)
  • ✅ vim 基本使用
  • ✅ Linux 文件哲学(一切皆文件)
  • ⬜ 文件查找(find / locate / which)
  • ⬜ 文件压缩与归档(tar / gzip / zip)
  • ⬜ 软链接与硬链接(ln -s vs ln)
  • ⬜ 文件系统类型(ext4 / xfs / btrfs)
  • ⬜ 磁盘管理(df / du / mount / fdisk)

五、文本处理三剑客

  • ⬜ grep 正则搜索
  • ⬜ sed 流编辑器
  • ⬜ awk 数据处理
  • ⬜ cut / sort / uniq / wc 辅助工具

六、Shell 脚本编程

  • ⬜ 脚本创建与执行(#!/bin/bash / chmod +x)
  • ⬜ 变量定义与引用
  • ⬜ 条件判断(if / test / [ ] / [[ ]])
  • ⬜ 循环(for / while / until)
  • ⬜ 函数定义
  • ⬜ 脚本调试技巧

七、进程管理

  • ⬜ 进程查看(ps / top / htop)
  • ✅ ps 与 kill / killall
  • ⬜ 前台与后台任务(jobs / fg / bg)
  • ⬜ 进程优先级(nice / renice)
  • ⬜ 守护进程(daemon)与 nohup

八、软件包管理

  • ✅ yum 基础使用(install / update)
  • ⬜ apt(Debian / Ubuntu 系)
  • ⬜ 源码编译安装(./configure && make && make install)
  • ⬜ 包管理进阶(rpm / dpkg / 依赖解决)
  • ⬜ 仓库配置(yum 源 / apt 源)
  • ⬜ Snap / Flatpak / AppImage 现代包格式

九、网络配置与管理

  • ⬜ 网络状态查看(ip addr / ifconfig / ss / netstat)
  • ⬜ 网络配置(静态 IP / DHCP)
  • ⬜ 防火墙(firewalld / iptables / ufw)
  • ⬜ SSH 远程连接与免密登录
  • ⬜ 文件传输(scp / rsync / sftp)
  • ⬜ DNS 配置与排查

十、系统服务管理

  • ⬜ systemd 体系(systemctl 常用操作)
  • ✅ 服务查看与启停
  • ⬜ 开机自启管理
  • ⬜ 日志管理(journalctl / /var/log)
  • ⬜ 定时任务(crontab)

十一、系统监控与调优

  • ⬜ 系统负载(uptime / load average)
  • ⬜ 内存监控(free / vmstat)
  • ⬜ I/O 监控(iostat / iotop)
  • ⬜ 网络监控(iftop / nethogs)

十二、安全基础

  • ⬜ SSH 安全加固(禁用 root 登录 / 换端口 / 密钥登录)
  • ⬜ 用户与群组安全策略
  • ⬜ 日志审计
  • ⬜ fail2ban 防暴力破解

十三、常见服务搭建

  • ⬜ Nginx / Apache Web 服务器
  • ⬜ MySQL / MariaDB 数据库
  • ⬜ Docker 基础部署
  • ⬜ VPN / 代理服务

十四、系统目录参考

  • ✅ Linux 目录树完整注释(/bin /etc /home /var /usr 等)

简单说说

最近抽空看了份比较简单的linux系统教学的文章【linux学习教程】,感觉不错,清晰明了,随带写的笔记就分享在这吧。

本来前面我一直在看的一份linux系统的教学是这个【鳥哥的 Linux 私房菜】。不少大佬推荐的文章,对于计算机系统讲的很详细,包括硬件设备以及计算机系统发展等都非常的详全,十分适合啥也不懂的小白观看,就是繁体字有点瞎眼,另外讲的太详细了反而不方便上手linux系统,毕竟操作计算机的技术是需要亲自上手去“动起来”的,光看知识文章解决不了使用问题。

所有建议,先看【linux学习教程】,几天时间快速上手,再看【鳥哥的 Linux 私房菜】,大概个把月看完,补充其他相关计算机知识。

捡linux系统的重点聊聊

linux说来简单,其实就是一个为我们使用软件提供基础的系统。仔细回忆大家使用电脑中的过程,大家应该就能发现其实我们现在愈来愈倾向于使用各类软件和服务,大家直接操作系统的场景越来越少了,不管是win、mac还是安卓,大家都在往简化设置这个方向发展,简单的说,系统愈加傻瓜化,让用户集中精力在他们所需的功能上。目前我们很多时候会直接用到系统本身的场景,大概也就文件管理系统了。比如常常在电脑上操作去某个目录寻找某个文件这样的操作。所有我们真实需要了解熟悉系统操作的需求很有限。我觉得大概除了linux运维,我们大多数人对linux还是基于有需求的应用来学习使用是最高效的。毕竟真当你需要使用linux建站还是搞vpn的时候,大多应该都是安装安装程序、改改配置文件、跑跑运行就完了。

基于如上思路,我来谈谈我们需要了解的关于linux的一些东西吧。

一是用户管理

这部分其实和win没啥差别,但可能不少人很少用到win的用户管理(毕竟大多数人是一个人一个电脑),因为linux可以多用户同时在线多工,所以在用户管理这方面可能较win有一定区别。例如你如果在linux上面关机,那大概其他正登录在系统中的用户就骂娘了。

对于用户的操作,只需要了解这几个命令就够了。useradd id 创建;passwd id 添加密码;usermod id 修改用户信息;userdel -r id 删除用户及其家目录文件;以上。当然我这里说的非常简略。

linux的命令说到底也是个程序文件。像如上的useraddpasswdusermod都是可以在系统相应目录中找到实体文件的。一个命令操作往往由 命令 + 参数 + 对象 这样构成。我们可以把命令(程序)理解为警察、消防员之类的现实实体,他们各种有各种工作的领域,如useradd主要负责建立账户(其实质上是在/etc/default/useradd 和 /etc/login.defs等文件中写入了新用户信息,所以你自己直接用linux上的vi或vim等文本编辑程序修改这些文件,和执行这个命令效果是一样的),而在后面添加 -xxx 之类的就是让这个程序去干他负责的领域中的具体某项工作,如果你不知道这个命令能具体干啥,简单,直接 命令 --h 呼叫命令程序的说明书就行了(这些说明书一般放在 usr/share/ 等目录中,可以参考本文后面的linux系统中常见的目录)。

而对用户组的管理,可以极大的方便对一系列用户进行权限管理。作为root权限或者群组管理员的人可以方便的通过设置用户组对文件和命令的使用权限来限制用户。

二是终端(shell)

所谓终端反正就是我们和电脑进行交互,你来我往的一个程序。在win这种图像界面系统的话,大家可以想象为tab键按下后获得你的焦点的那个界面,在win上面可能是某个输入框,可能是某个按钮。

终端

在linux中就简单了,就一个黑框框和一个闪动的光标,告诉你,电脑在等待你的命令。

你可能需要了解到终端上这光标前短短的一行是啥意思。

  • [root@localhost ~]# 这就是所谓命令提示符。
  • ~代表你目前处于家目录中,如果你在其他目录,如根目录,就是显示[root@localhost /]#,如果是在/root/misaka/yvban,则显示[root@localhost yvban]#,即最后一层目录。至于如何进行目录操作我们下节在讲。
  • root那里代表当前用户,你用户名是什么,他就是什么。当然最高管理员权限用户默认是root。
  • localhost是硬件电脑的名称,和你平时在win上右击【我的电脑】–【属性】里面看到的那个计算机名没啥差别,不需要在意。
  • #这个位置代表你是什么权限。#是root管理员,$代表普通用户。

每个用户默认登录就在自己的家目录中。也就是说超级用户root登录就在/root,而普通用户登录就在/home/用户名目录下面。

在终端,可以使用很多便利的快捷键。

  • tab 可以补全命令。任意目录、命令、文件名之类的,你只需要输个开头几个字母,tab一下,他就自动匹配,你也不用担心有前面几个字母同名的命令之类的,你多tab几下,他就会在这些前几个字母相同的命令之类的中切换。另外,在终端界面按 ↑ ↓ 等方向键,可以直接复制前后使用的命令。
  • Ctrl + C 终止当前终端命令的程序。
  • Ctrl + Z 把当前终端这个程序送到后台去。这就想win下面的最小化一样的操作。
  • Ctrl + L 清屏。
  • Ctrl + U 清除当前输入的命令,比按删除键快多了。

三是目录及文件操作

有句名言“linux下,一切皆文件”,不管是程序、命令还是硬盘、显示屏之类硬件的,在linux下都是以某个目录下的某个文件的形式存在着,这可能有点抽象,却很符合实际。毕竟在电脑眼里,不管是什么敲出的某个按键还是挂在系统上的某个硬盘,都只是0和1的组合而已,就是这么抽象。

我们知道在电脑系统上就两种文件,一个是文本文件(文本),另一个就是二进制文件(诸如可执行程序、图片、视频、音乐等),由于在linux上不依靠win上面.txt.mp3之类的后缀来区分文件,所有你可以简单的用文本编辑程序打开某个文件,如果不乱码,(排除文本字符解析的问题外)那就多半是文本文件了。我们很多代码都是写在文本文件中,并通过编译变为二进制的可执行程序。

所有在目录和文本文件上,我们就主要了解怎么进行创建、删除、编辑等操作;在二进制程序上,学会安装、卸载和使用就完事了。

对文件和目录的创建、删除和编辑

  • ls 显示文件和目录。蓝色是目录、绿色可执行程序、红色是压缩包、浅绿是快捷链接、黄色是硬件设备、白色是其他。
  • cd 切换目录;pwd 显示当前目录(我在哪个目录)。
  • mkdir 创建目录;touch 创建文件。
  • cp 复制。
  • rm 删除。这个大家只需要记住一个命令形式。rm -rf 强大无副作用,欢迎使用。 <( ̄︶ ̄)> 不小心删除了系统不怪我哈。
  • cat 一次性显示文件全部内容(不适合大文件);more 向后翻页显示(只能向后翻页);less 翻页显示;tail 看文件尾行(因为我们会经常用到 >> 这样的命令将有些程序的结果输出到某个文件的末尾,所以这个命令经常用来看文件末尾更新的内容)。
  • vivim ,这是使用文本编辑器编辑某个文件。不过也不是每个linux系统默认安装了vim,所以你最好检查一下,不过一般够安装了的。通过这个命令打开文件可以进行编辑,就想记事本一样,进行修改保存之类的操作。

注:不会具体使用,记得命令 --h看说明书!

安装软件和使用

那些什么复杂的prm包管理系统、程序依赖什么的我就懒得说了。直接yum就行了。yum是一种帮助我们安装程序的程序,你可以理解为360软件商城之类的,帮我们快捷安装软件的。

  • yum install 可以查看已安装和可以安装的程序包。这里的程序主要是yum设置文件中源提供的程序。
  • yum install 程序名 具体需要什么程序,自己网上查。当然仅支持一些普遍的程序。很多你需要的小程序,还是去网上找安装链接什么的把。
  • yum -y update 程序名 程序升级,这里的-y就是-yes的意思,就是让电脑姬直接安装,别啥事都要问一下好不好( ̄へ ̄)。
  • ps 查看进程,可以看哪些程序在运行。
  • kill 通过进程号(PID)干掉进程;killall 通过进程名干掉进程。

这里有些常用的程序我们必须安装,比如vim文本编辑器。虽然大部分linux应该自带了的,不过也不一定。这些程序安装之后,最好到网上查阅如何使用这些程序,一般都有这些程序的消息使用教程,本文仅讨论linux系统,就不对一些程序详说了。

其他东西

linux系统常见目录

因为“linux一切都是文件”的特性,我们大量的操作将基于在linux的目录树中进行各种“创、删、改”操作,所有熟悉linux系统的目录树就如同熟悉windows的控制面板、安卓的“设置应用”一样重要。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
+ 根目录
|——bin/ 系统命令(脚本程序) 单用户模式下也可执行。
|——boot/ 系统启动 文件内核、启动引导(grub)文件。
|——dev/ 设备 硬件设备,包括本地硬盘分区。
+——etc/ 配置文件 默认rpm安装的如用户信息、服务脚本、配置文件等放置。
|——ect/passwd 用户信息
|——ect/shadow 加密密码
|——ect/group 用户组信息
|——ect/gshadow 加密用户组
|——home/ 普通用户主目录 所有用户相关文件。
|——lib/ 系统函数
|——media/ 挂载目录 软盘、光盘
|——mnt/ 挂载目录 额外挂载目录,如U盘等,用于区分系统分区。
|——misc/ 挂载目录 挂载NGS服务的共享目录。三个挂载目录可自由随便挂载。
|——opt/ 第三方软件
|——root/ root的主目录
|——sbin/ 系统环境相关命令(程序) root专用,系统权限命令。
|——srv/ 服务数据目录 启动某些服务后,数据保存位置。
|——tmp/缓存临时目录。
|——lost+found/ 系统崩溃、关机产生的碎片文件 可fsck工具检查用于修复,各分区可能也有,是分区备份恢复目录。
+——proc/ 虚拟文件 其数据并不在硬盘上,而是在内存中(虚拟内存)。各目录保存了如
|——proc/cpuinfo 是保存 CPU 信息的,
|——proc/devices 是保存设备驱动的列表的,
|——proc/filesystems 是保存文件系统列表的,
|——proc/net 是保存网络协议信息……持续的往这写入文件会导致内存大量被占用。
|——sys/ 虚拟文件 系统与内核相关信息。
+——usr (Unix Software Resource)系统默认存储软件位置。
|——usr/bin/ 系统命令所有用户都可执行,与系统启动无关。单用户模式下不可用。
|——usr/sbin/ 系统管理命令放根文件系统不必要的系统管理命令,如部分服务程序,root可用
|——usr/lib/ 应用函数
|——usr/XllR6/ 图形界面系统
|——usr/local/ 手动安装软件位置
|——usr/share/ 应用程序资源文件如帮助文档、说明文档和字体目录
|——usr/src/ 源码包保存位置手工下载源码和内核源码包位置(默认程序下载位置)(不过笔者更习惯把手工下载的源码包保存到 /usr/local/src/ 目录中,把内核源码保存到 /usr/src/linux/ 目录中)
|——usr/include/ C等编程语言头文件目录
+——var 存储动态数据缓存、日志、软件产生文件等
|——var/lib/ 程序运行调用或改变的数据保存位置如mysql数据库保存在/var/lib/mysql/ 目录
|——var/log/ 登录文件放置目录 比较重要的文件如 /var/log/messages, /var/log/wtmp 等
|——var/run/ 进程保存 一些服务和程序运行后,PID(进程id)保存的位置
|——var/spool/ 临时存放文件 例如 /var/spool/mail/ 存放新收到的邮件,/var/spool/cron/ 存放系统定时任务
|——var/www/ RPM 包安装的 Apache 的网页主目录
|——var/nis/和/var/yp/ NIS 服务机制所使用的目录,nis 主要记录所有网络中每一个 client 的连接信息;yp 是 linux 的 nis 服务的日志文件存放的目录
|——var/tmp/ 应用程序缓存 一些程序安装或执行时,需要在重启时使用的文件,完成后再删除

常见linux服务及优化

相当于windows开机就启动了些乱七八糟的服务,通过以下列表可以关闭不需要的服务,减少服务器风险,提升性能。
请参考Linux常见服务类别及功能

-------------本文结束感谢您的阅读-------------