Linux简介

Linux 内核最初只是由芬兰人林纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。

Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。

Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议。它支持 32 位和 64 位硬件。

Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

Linux发行版

Ubuntu:https://cn.ubuntu.com/download

  • 用户友好: Ubuntu 提供简单易用的安装程序和图形界面,是许多新手接触 Linux 的首选。
  • 社区支持: 拥有庞大的用户基础和丰富的文档,问题解决和资源获取相对容易。
  • LTS 版本: 每两年发布一次长期支持(LTS)版本,提供五年的安全和维护更新,适合需要稳定性的用户和企业。
  • 广泛应用: 不仅适合桌面使用,也提供服务器版本,广泛用于各类应用场景。
  • 应用商店: 内置 Ubuntu 软件中心,便于安装和管理应用程序。

CentOS:https://centos.org/download/

  • 企业级稳定性: CentOS 是 RHEL 的开源社区版,接近企业级的稳定性,适合生产环境。
  • 滚动更新: CentOS Stream 提供了更频繁的更新节奏,处于 RHEL 开发流程的上游。
  • 长生命周期: 提供长期支持版本,适合需要长期维护的服务器和企业应用。
  • 社区驱动: 由社区维护,虽然没有商业支持,但资源和文档丰富。
  • 兼容性: 与 RHEL 兼容,适合需要测试 RHEL 环境的软件和应用。

Debian:https://www.debian.org/

  • 社区驱动: 由全球社区共同维护和开发,注重自由软件和开放性。
  • 高度稳定: 非常注重系统稳定性,提供稳定(Stable)、测试(Testing)和不稳定(Unstable)三个版本分支。
  • 广泛支持: 支持多种硬件架构,包括桌面、服务器和嵌入式系统。
  • 包管理: 使用 APT 包管理系统和 DEB 包格式,方便软件安装和管理。
  • 灵活性: 用户可以选择不同的桌面环境和配置,适合各种使用场景。

Kali:https://www.kali.org/

  • 渗透测试: 专为信息安全专家和渗透测试人员设计,内置大量安全和渗透测试工具。
  • 预装工具: 包含如 Nmap、Wireshark、Metasploit 等知名安全工具,适合安全评估和漏洞测试。
  • 滚动更新: 保持工具和系统的最新状态,确保用户拥有最新的安全工具。
  • 高适应性: 支持多种安装方式,包括硬盘安装、Live USB、虚拟机等,便于测试和便携使用。
  • 官方支持: 由 Offensive Security 维护,提供官方文档和培训资源。

Arch:https://archlinux.org/

  • 高度可定制: 用户需从零开始构建系统,提供高度的定制和灵活性,适合高级用户和有经验的开发者。
  • 滚动更新: 持续更新,始终保持最新的软件包和系统。
  • KISS 原则: 简单、极简的设计哲学,避免冗余,用户可以控制每个系统组件。
  • 包管理: 使用 pacman 包管理器,便于软件安装和管理。
  • 强大社区: Arch Wiki 和社区提供了丰富的文档和支持资源,帮助用户解决问题和优化系统。

Linux安装

Ubuntu:https://developer.aliyun.com/article/1074667

CentOS:https://www.runoob.com/w3cnote/vmware-install-centos7.html

Linux启动过程

  • 内核的引导。

    • 当计算机打开电源后,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动。
    • 操作系统接管硬件以后,首先读入 /boot 目录下的内核文件。
  • 运行 init。

    • init 进程是系统所有进程的起点,你可以把它比拟成系统所有进程的老祖宗,没有这个进程,系统中任何进程都不会启动。

    • init 程序首先是需要读取配置文件 /etc/inittab。

    • 许多程序需要开机启动。它们在Windows叫做”服务”(service),在Linux就叫做”守护进程”(daemon)。

    • init进程的一大任务,就是去运行这些开机启动的程序。

    • 但是,不同的场合需要启动不同的程序,比如用作服务器时,需要启动Apache,用作桌面就不需要。

    • Linux允许为不同的场合,分配不同的开机启动程序,这就叫做”运行级别“(runlevel)。

    • 也就是说,启动时根据”运行级别”,确定要运行哪些程序。

    • Linux系统有7个运行级别(runlevel):

      • 运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
      • 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登录
      • 运行级别2:多用户状态(没有NFS)
      • 运行级别3:完全的多用户状态(有NFS),登录后进入控制台命令行模式
      • 运行级别4:系统未使用,保留
      • 运行级别5:X11控制台,登录后进入图形GUI模式
      • 运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
  • 系统初始化。

    • 在init的配置文件中有这么一行: si::sysinit:/etc/rc.d/rc.sysinit
    • 它调用执行了/etc/rc.d/rc.sysinit,而rc.sysinit是一个bash shell的脚本
    • 它主要是完成一些系统初始化的工作,rc.sysinit是每一个运行级别都要首先运行的重要脚本。
    • 它主要完成的工作有:激活交换分区,检查磁盘,加载硬件模块以及其它一些需要优先执行任务。
  • 建立终端 。

    • rc执行完毕后,返回init。这时基本系统环境已经设置好了,各种守护进程也已经启动了。

    • init接下来会打开6个终端,以便用户登录系统。

    • 在inittab中的以下6行就是定义了6个终端:

      1
      2
      3
      4
      5
      6
      1:2345:respawn:/sbin/mingetty tty1
      2:2345:respawn:/sbin/mingetty tty2
      3:2345:respawn:/sbin/mingetty tty3
      4:2345:respawn:/sbin/mingetty tty4
      5:2345:respawn:/sbin/mingetty tty5
      6:2345:respawn:/sbin/mingetty tty6

      从上面可以看出在2、3、4、5的运行级别中都将以respawn方式运行mingetty程序,mingetty程序能打开终端、设置模式。

      同时它会显示一个文本登录界面,这个界面就是我们经常看到的登录界面

      在这个登录界面中会提示用户输入用户名,而用户输入的用户将作为参数传给login程序来验证用户的身份。

  • 用户登录系统。

    • 一般来说,用户的登录方式有三种:
      • 命令行登录
      • ssh登录
      • 图形界面登录
    • Linux预设提供了六个命令窗口终端机让我们来登录。
      • 默认我们登录的就是第一个窗口,也就是tty1,这个六个窗口分别为tty1,tty2 … tty6,你可以按下Ctrl + Alt + F1 ~ F6 来切换它们。
      • 如果你安装了图形界面,默认情况下是进入图形界面的,此时你就可以按Ctrl + Alt + F1 ~ F6来进入其中一个命令窗口界面。
      • 当你进入命令窗口界面后再返回图形界面只要按下Ctrl + Alt + F7 就回来了。
      • 如果你用的vmware 虚拟机,命令窗口切换的快捷键为 Alt + Space + F1F6. 如果你在图形界面下请按Alt + Shift + Ctrl + F1F6 切换至命令窗口。

Linux目录结构

  • /bin:bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。

  • /boot:这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。

  • /dev :dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。

  • /etc:etc 是 Etcetera(等等) 的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录。

  • /home:用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的,如上图中的 alice、bob 和 eve。

  • /lib:lib 是 Library(库) 的缩写这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。

  • /lost+found:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。

  • /media:linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。

  • /mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了。

  • /opt:opt 是 optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。

  • /proc:proc 是 Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件

    • 这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
    • 这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件
    • 比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:
    1
    echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
  • /root:该目录为系统管理员,也称作超级权限者的用户主目录。

  • /sbin:s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序。

  • /selinux:这个目录是 Redhat/CentOS 所特有的目录,Selinux 是一个安全机制,类似于 windows 的防火墙

  • /srv:该目录存放一些服务启动之后需要提取的数据。

  • /sys:这是 Linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs 。

    • sysfs 文件系统集成了下面3种文件系统的信息:针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统。
    • 该文件系统是内核设备树的一个直观反映。
    • 当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。
  • /tmp:tmp 是 temporary(临时) 的缩写这个目录是用来存放一些临时文件的。

  • /usr:usr 是 unix shared resources(共享资源) 的缩写,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。

  • /usr/bin:系统用户使用的应用程序。

  • /usr/sbin:超级用户使用的比较高级的管理程序和系统守护程序。

  • /usr/src:内核源代码默认的放置目录。

  • /var:var 是 variable(变量) 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。

  • /run:是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。

Linux 文件属性

Linux 系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。

为了保护系统的安全性,Linux 系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。

在 Linux 中我们通常使用以下两个命令来修改文件或目录的所属用户与权限:

  • chown (change owner) : 修改所属用户与组。
  • chmod (change mode) : 修改用户的权限。

Linux/Unix 的文件调用权限分为三级 : 文件所有者(Owner)、用户组(Group)、其它用户(Other Users)。

在 Linux 中第一个字符代表这个文件是目录、文件或链接文件等等。

  • 当为 d 则是目录
  • 当为 - 则是文件;
  • 若是 l 则表示为链接文档(link file);
  • 若是 b 则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
  • 若是 c 则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。

Linux常用命令

  • 文件和目录操作命令
1
2
3
4
5
6
7
8
9
10
ls: 列出目录内容。
cd: 切换目录。
pwd: 显示当前工作目录。
mkdir: 创建新目录。
rmdir: 删除空目录。
cp: 复制文件或目录。
mv: 移动或重命名文件或目录。
rm: 删除文件或目录。
touch: 创建空文件或更新文件的时间戳。
ln: 创建链接文件。
  • 文件内容查看和处理命令
1
2
3
4
5
6
7
8
9
10
cat: 连接并显示文件内容。
less: 分页查看文件内容。
head: 显示文件开头部分内容。
tail: 显示文件结尾部分内容。
grep: 搜索文本文件中的模式。
wc: 统计文件的行、字、字节数。
diff: 比较文件的不同。
sort: 排序文件内容。
uniq: 去除文件中的重复行。
tr: 替换或删除字符。
  • 文件权限和属性命令
1
2
3
4
5
chmod: 改变文件或目录权限。
chown: 改变文件或目录所有者。
chgrp: 改变文件或目录所属组。
umask: 设置默认权限掩码。
stat: 显示文件或文件系统状态。
  • 磁盘管理命令
1
2
3
4
5
df: 显示文件系统磁盘使用情况。
du: 显示目录或文件的磁盘使用情况。
mount: 挂载文件系统。
umount: 卸载文件系统。
fdisk: 磁盘分区工具。
  • 系统管理命令
1
2
3
4
5
6
7
8
ps: 显示当前进程。
top: 实时显示系统进程。
kill: 终止进程。
systemctl: 管理系统服务。
service: 管理系统服务。
shutdown: 关闭或重启系统。
reboot: 重启系统。
passwd: 修改用户密码。
  • 网络管理命令
1
2
3
4
5
6
7
8
ifconfig: 显示或配置网络接口(已被 ip 命令取代)。
ip: 显示或配置网络接口。
netstat: 显示网络连接、路由表等。
ssh: 通过 SSH 登录远程服务器。
scp: 通过 SSH 复制文件。
ftp: 文件传输协议客户端。
wget: 从网络下载文件。
curl: 传输数据的工具。
  • 压缩和解压缩命令
1
2
3
4
5
tar: 归档工具。
gzip: 压缩文件。
gunzip: 解压缩文件。
zip: 压缩文件。
unzip: 解压缩文件。
  • 其他常用命令
1
2
3
4
5
6
echo: 显示一段文本。
date: 显示或设置系统日期和时间。
whoami: 显示当前用户。
man: 显示命令的手册页。
alias: 创建命令别名。
uname: 显示系统信息。

Linux包管理器

  • yum( Yellow dog Updater, Modified)是一个在 Fedora 和 RedHat 以及 SUSE 中的 Shell 前端软件包管理器。
    • 基于 RPM 包管理,能够从指定的服务器自动下载 RPM 包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包
    • yum 提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。
1
yum [options] [command] [package ...]
  • options:可选,选项包括-h(帮助),-y(当安装过程提示选择全部为 “yes”),-q(不显示安装的过程)等等。
  • command:要进行的操作。
  • package:安装的包名。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
1. 列出所有可更新的软件清单命令:yum check-update

2. 更新所有软件命令:yum update

3. 仅安装指定的软件命令:yum install <package_name>

4. 仅更新指定的软件命令:yum update <package_name>

5. 列出所有可安裝的软件清单命令:yum list

6. 删除软件包命令:yum remove <package_name>

7. 查找软件包命令:yum search <keyword>

8. 清除缓存命令:
yum clean packages: 清除缓存目录下的软件包
yum clean headers: 清除缓存目录下的 headers
yum clean oldheaders: 清除缓存目录下旧的 headers
yum clean, yum clean all (= yum clean packages; yum clean oldheaders) :清除缓存目录下的软件包及旧的 headers
  • apt(Advanced Packaging Tool)是一个在 Debian 和 Ubuntu 中的 Shell 前端软件包管理器。
    • apt 命令提供了查找、安装、升级、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。
    • apt 命令执行需要超级管理员权限(root)。
1
apt [options] [command] [package ...]
  • options:可选,选项包括 -h(帮助),-y(当安装过程提示选择全部为”yes”),-q(不显示安装的过程)等等。
  • command:要进行的操作。
  • package:安装的包名。
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
列出所有可更新的软件清单命令:sudo apt update

升级软件包:sudo apt upgrade

列出可更新的软件包及版本信息:apt list --upgradeable

升级软件包,升级前先删除需要更新软件包:sudo apt full-upgrade

安装指定的软件命令:sudo apt install <package_name>

安装多个软件包:sudo apt install <package_1> <package_2> <package_3>

更新指定的软件命令:sudo apt update <package_name>

显示软件包具体信息,例如:版本号,安装大小,依赖关系等等:sudo apt show <package_name>

删除软件包命令:sudo apt remove <package_name>

清理不再使用的依赖和库文件: sudo apt autoremove

移除软件包及配置文件: sudo apt purge <package_name>

查找软件包命令: sudo apt search <keyword>

列出所有已安装的包:apt list --installed

列出所有已安装的包的版本信息:apt list --all-versions