0x00 无聊的冷知识
现阶段处理器架构呈RISC V(开源指令集)、x86_64、ARM三足鼎立的形势,其中RISC V、ARM为精简指令集,x86_64为复杂指令集。中国无法获得x86_64和ARM的授权,所以无法自主研发属于这两种架构的CPU。我国的龙芯正是基于精简指令集研发出的首枚拥有自主知识产权的通用高性能微处理芯片,但该芯片架构仅适配于Linux操作系统。因为生态环境问题,Linux操作系统常被用于服务器端,很难用于桌面系统被客户端所接受。目前Linux主要有两大分支,一个是以Centos为代表的RedHat,另一个是以Ubantu为代表的Debian。
0x01 Linux 文件系统
Linux为根式文件系统,和 Windows 系统不同,Linux 系统没有 C 盘、D 盘、E 盘等盘符,只有一个根目录(/),一切从根开始,所有的文件(资源)都存储在以根目录(/)为树根的树形目录结构中。
-
/root:家目录,每个用户都有一个“家” ~
-
/bin:保存关于系统、磁盘的基本操作命令
-
/boot:保存Linux引导模块、超级进程(初始进程)、内核
-
/dev:保存Linux的所有设备
-
/etc:保存Linux的配置文件
-
/home:保存普通用户的家目录
-
/var:保存数据
-
/lib:运行库,保存各种工具和功能,相当于工具箱
-
/usr:保存应用程序、应用软件,相当于Windows下的Program Files
Linux 中所有内容都是以文件的形式保存和管理的,即一切皆文件,普通文件是文件,目录(Windows 下称为文件夹)是文件,硬件设备(键盘、监视器、硬盘、打印机)是文件,就连套接字(Socket)、网络通信等资源也都是文件。这样做最明显的好处是,开发者仅需要使用一套 API 和开发工具即可调取 Linux 系统中绝大部分的资源。举个简单的例子,Linux 中几乎所有读(读文件,读系统状态,读 socket,读 PIPE)的操作都可以用 read 函数来进行;几乎所有更改(更改文件,更改系统参数,写 socket,写 PIPE)的操作都可以用 write 函数来进行。
不利之处在于,使用任何硬件设备,都必须同根目录下的某一目录执行挂载操作,否则无法使用。我们知道,Linux 具有一个以根目录为树根的文件目录结构,每个设备也同样如此,它们是相互独立的。如果我们想通过 Linux 上的根目录定位到硬件设备的文件目录结构,就必须将这两个文件系统合二为一,这就是挂载的真正含义。
使用命令echo $PATH
可以查看系统环境变量:
0x02 Linux 系统信息
-
查看系统内核
uname -a
:显示主机名、内核版本、硬件平台等详细信息。
uname -r
:显示内核版本。 -
查看系统发行版本
cat /etc/os-release
-
查看系统主机名
hostname
-
查看系统内存
cat /proc/meminfo
或free
0x03 Linux 命令概述
一、Linux命令
-
用于实现某一类功能的指令或程序。
-
命令的执行依赖于解释器程序(例如:/bin/bash)。
二、Linux命令的分类
-
内部命令:属于shell解释器的一部分,即命令包含在shell程序本身当中,例如“history”命令。
-
外部命令:独立于shell解释器的程序文件。
使用命令“type”可以直接查看命令的归属,内部命令使用“which”搜索不到, 而外部命令则可以用“which”搜索到:
使用内部命令“help”可以查看bash内部命令的帮助信息:
使用命令的“–help”选项可以查看大多数外部命令的帮助信息:
三、命令行编辑的几个辅助操作
- Tab键:自动补齐
- 反斜杠 “\”:强制换行
- 快捷键 Ctrl+U:清空至行首
- 快捷键 Ctrl+K:清空至行尾
- 快捷键 Ctrl+L:清屏
- 快捷键 Ctrl+C:取消本次命令编辑
四、关机与重启命令
-
关机命令:
shutdown -h now
或poweroff
-
重启命令:
shutdown -r now
或reboot
-
延迟关机:
shutdwon -h +30
(30min后关机) -
取消延迟:
shutdown -c
0x04 Linux 基本管理
Linux一切皆文件,每个服务都有其对应的文件,而每个文件又都有其对应的用户和用户组。用户账号的管理工作主要涉及到用户账号的添加、修改和删除。添加用户账号就是在系统中创建一个新账号,然后为新账号分配用户号(-u)、用户组(-g)、主目录(-d)和登录shell(-s)等资源。刚添加的账号是被锁定的,无法使用。如果要拒绝系统用户登录,可以将其shell设置为 /usr/sbin/nologin 或者 /bin/false。
创建用户时会系统自动创建一个同名组,因此“groupadd”命令常用来创建附加组,或者使用useradd -g
命令在创建账号时直接指定组。
功能 | 命令 | 实例 |
---|---|---|
创建 | mkdir | mkdir -p /usr/local/test |
删除 | rm | rm -rf /usr/local/test |
移动 | mv | mv /usr/local/test usr/src |
查找 | find | find /usr -name "*.txt" |
复制 | cp | cp /usr/local/test /usr/local/src |
链接 | ln | ln -s /usr/local/mysql/bin/mysql /usr/bin |
查看文件 | ls | ls -lR /usr/local |
修改权限 | chmod | chmod 777 /usr/local/test |
可以使用“alias”命令查看命令别名或定义命令别名:
三、Linux 软件包管理
RedHat和Debian是Linux的两大分支,其中RedHat使用的是自己研发的包管理器rpm(redhat package manager),而Debian使用的是自己研发的包管理器dpkg(扩展名 .deb)。
1.RPM包管理
查询已安装的RPM软件包信息:rpm -q[子选项] [RPM包文件]
选项 | 功能 |
---|---|
-qa | 查看系统中已安装的所有RPM软件包列表 |
-qi | 查看指定软件包的详细信息 |
-ql | 查看指定软件包所安装的目录、文件列表 |
-qc | 仅显示指定软件包安装的配置文件 |
-qd | 仅显示指定软件包安装的文档文件 |
-qf | 查询文件或目录属于哪个RPM文件 |
查询未安装的RPM软件包信息:rpm -qp[子选项] RPM包文件]
选项 | 功能 |
---|---|
-qpi | 通过RPM软件包查看该软件的详细信息 |
-qpl | 查看RPM软件包内包含的目录、文件列表 |
-qpc | 查看RPM软件包内包含的配置文件列表 |
-qpd | 查看RPM软件包内包含的文档文件列表 |
安装&升级&卸载RPM软件包:rpm [选项] [RPM包文件]
选项 | 功能 |
---|---|
-i | 安装新的RPM软件包 |
-U | 更新某个RPM软件包,若原本未安装则进行安装 |
-F | 更新某个RPM软件包,若原本未安装则放弃安装 |
-e | 卸载指定的RPM软件包 |
YUM(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的shell前端软件包管理器,它使用Python语言写成。YUM客户端基于RPM包进行管理,可以通过HTTP服务器下载、FTP服务器下载、本地软件池等诸多方式获得软件包。YUM不仅可以从指定的服务器自动下载RPM包并且安装,还能自动处理包的依赖性关系。
简单来说, RPM只能安装已经下载到本地机器上的RPM包,而YUM能在线从服务器上下载并安装RPM包并将其缓存到本地。除此之外,YUM还能自动处理包与包之间依赖关系的问题,这些都是RPM所不具备的,YUM也正是为了解决这些问题才应运而生的。
apt(Advanced Package Tool) 也是deb包管理工具。上面提到的dpkg(Debian Packager) 包管理工具主要用于安装我们下载到本地的deb软件包。而apt包管理工具则可以直接从Ubuntu官方服务器软件仓库中搜索、安装软件到我们的Ubuntu系统,也可以通过apt工具更新、卸载我们的deb软件。apt与dpkg的关系就如同yum与rpm的关系,这里不再赘述。
2.源代码包管理
rpm包和deb包相较于源代码包均具有滞后性,因为它们都来源于开源组织率先发布的源代码包。其中rpm包由RedHat制作,deb包由Debian制作。此外,源代码包可以根据用户需要灵活的定制软件功能。
需要注意在编译前我们要确认源代码的编译环境,即是否安装了支持C/C++程序语言的编译器。可以使用命令gcc --version
和g++ --version
查看:
此外,在编译前我们还需要进行一些适当的配置,例如使用典型的配置选项--prefix=软件安装目录
。可以进入源码目录使用命令./configure --help
查看配置帮助:
0x05 Linux 文本操作
一、查看文件内容
二、统计和检索文件内容
三、文本编辑器
1.vim编辑器的工作模式
2.命令模式的基本操作
3.末行模式的基本操作
0x06 LNMP 环境搭建
LNMP环境搭建过程涉及很多Linux的相关知识,包括基本命令的使用、软件包的管理、用户和用户组的管理、文件系统的管理…对于加深我们对Linux的理解有很大帮助。