Linux 详解

2023/11/1 Linux
目录

# 1、前言

Linux命令查询参考

学习方法

把Linux当Windows来使用。可以参考参考图解系统 (opens new window),对计算机各个部分进行拆分讲解。

学习阶段

Linux学习阶段可以简单分为四个阶段:初级阶段、中级进阶、高级阶段、资深方向进阶。

高级阶段开始就得分方向选择学习:运维方向、开发方向。高级的运维不一定会开发,但高级的开发一定会运维。这里高级阶段就以运维为方向进阶,如果是开发方向肯定多多少少都会涉及的,也可以学习。

  • 初级阶段

初级阶段应该掌握以下这些知识点:

  • Linux基础知识:linux历史、虚拟机安装、linux系统目录结构、linux文件类型等。
  • Linux常用命令:如cp、mv、rm、ls、mkdir等。也就是文件操作命令。
  • Linux用户及权限:linux用户及权限、linux文件权限。
  • Linux进程管理:进程管理、进程查看、进程状态、进程优先级、进程管理命令。
  • Linux文本处理:文本操作命令,如vim、cat、grep、find等。
  • shell脚本入门:会简单编写shell脚本。

初级阶段就是学会操作Linux,能够熟练掌握Linux命令,能够完成Linux系统的基本操作。

  • 中级阶段

中级阶段需要在理解Linxu原理和掌握基础知识的基础上,开始对应用和服务进行学习,服务也就是会涉及到网络相关知识。所以中级阶段需要掌握以下这些知识点:

  • 网络基础:IP、端口、路由、DNS、TCP/IP协议等。
  • Linux企业级常用服务:ftp、http、dns等。
  • Linux系统安全:网络安全、Linux系统加固、数据安全、数据恢复。
  • Shell脚本进阶:会编写比较复杂的shell脚本,能够独立写一些案例。
  • 高级阶段

高级阶段主要是应用部署级别的一些操作了,以下是运维相关的一些技术:

  • http服务代理缓存加速:掌握Nginx并深入理解Nginx架构、对CDN(内容分发网络)有一定的理解及应用。Varnish也可以掌握。
  • 负载集群:掌握nginx、haproxy、lvs相关知识。并对负载均衡算法有一定理解。
  • 高可用集群:掌握keepalived、heartbeat相关知识。
  • 运维监控:掌握zabbix、cacti、nagios等监控系统。
  • 自动化部署:掌握ansible、puppet、saltstack等自动化部署工具。
  • 资深方向进阶

资深方向可以有更多的选择,到这里已经具备很强的项目经验了,就不再过多赘述了。

  • 大数据方向:hadoop、storm
  • 云计算方向:openstack、docker
  • 运维方向:Python、Java、自动化运维
  • 运维架构师:自己可以绘制自己的一套知识体系。并需要足够经验,5年左右差不多。

# 2、基础知识

# 2.1 发展史

Linux操作系统的起源可以追溯到1991年。当时,芬兰学生林纳斯·托瓦尔兹(Linus Torvalds)决定创建一个自由和开源的操作系统。他把他的项目命名为“Linux”——Linus的Unix。

Linux的前身是Unix,Unix是一种多用户、多任务操作系统,它诞生于1969年,由肯·汤普森(Ken Thompson),丹尼斯·里奇(Dennis Ritchie)等人在美国贝尔实验室(Bell Labs)开发。

以下是Linux发展史的一些重要阶段:

  • 1991年:Linux操作系统的最初版本(版本0.01)发布。这是一个非常基础的操作系统,只能在托瓦尔兹自己的计算机上运行。
  • 1991年10月:Linux版本0.02发布,此版本已能运行bash (GNU Bourne-Again SHell)和GCC (GNU Compiler Collection)。
  • 1992年:Linux的开发者决定采用GNU公共许可证(GPL)。GPL允许任何人自由地使用、复制、修改和发布软件,但任何基于GPL软件进行修改和衍生的新软件也必须采用GPL。
  • 1994年3月:Linux 1.0发布,这是首个正式发布的版本,包含了204个文件系统。
  • 1996年:Linux的吉祥物Tux被首次引进,Tux是一只手绘的企鹅。
  • 2004年:Ubuntu发布,它是一个以桌面应用为主的Linux操作系统。
  • 2007年:Android操作系统发布,它是一个基于Linux内核的开源平台。
  • 2011年:托瓦尔兹发布了Linux内核的3.0版本,以纪念Linux发布20周年。

至今,Linux内核已经逐渐发展成了一个全球范围内数百万开发者共同维护的项目,成为了全球最大的开源项目之一。在服务器、嵌入式系统以及移动设备中,Linux都是一种非常重要的操作系统。

# 2.2 内核、版本

Linux内核

  • Linux内核是操作系统Linux的核心组件,负责管理计算机硬件和软件之间的通信和协调。它提供了操作系统的基本功能,包括进程管理、内存管理、文件系统、设备驱动程序等。Linux内核是一个开源项目,由全球范围内的开发者共同维护和改进。
  • Linux内核的设计理念是模块化和可扩展的。它可以根据需要加载和卸载不同的模块,以支持不同的硬件设备和功能。这使得Linux成为一个高度灵活和可定制的操作系统。
  • Linux内核也支持多种体系架构,如x86、ARM、PowerPC等。这使得Linux可以运行在各种不同的硬件平台上,从个人计算机到服务器、嵌入式系统和移动设备。
  • Linux内核的发展由Linus Torvalds于1991年开始,他发布了最初的Linux内核版本。自那以后,Linux内核经过广泛的开发和改进,成为了一个强大而稳定的操作系统内核。它被广泛应用于各种领域,包括服务器、个人计算机、移动设备和网络设备等。

常见Linux版本

  • Ubuntu:基于Debian的流行发行版,注重易用性和用户友好性。
  • Fedora:由Red Hat公司支持的社区发行版,注重最新的软件包和开发者工具。
  • CentOS:基于Red Hat Enterprise Linux(RHEL)的免费发行版,主要用于服务器环境。
  • Debian:具有稳定性和安全性口碑的发行版,广泛用于服务器和嵌入式系统。
  • Arch Linux:以简单、轻量级和灵活性而闻名的发行版,适合有经验的用户。
  • openSUSE:由SUSE公司支持的发行版,注重稳定性和易用性。
  • Slackware:最古老的发行版之一,以简洁、稳定和可定制性而闻名。

# 2.3 理解概念

两个重要概念

  • root账号,是Linux的管理账号,相当于我们用的windows系统的管理账号。
  • /是Linux的根目录,相当于windows的C盘(也就是相当于我的电脑)。

# 2.4 帮助命令

帮助命令用法

help xxx    # 获取内部命令帮助
xxx --help  # 获取外部命令帮助
man xxx     # 获取xxx命令帮助
man 1 man   # 查看man命令自己的帮助文档
info xxx    # 查看详细帮助命令信息,比man更详细
1
2
3
4
5

使用终端时

$           # 普通用户提示符
#           # root用户提示符
tab键       # 命令及路径补全
type 命令   # 区分内部命令还是外部命令# 上一条执行命令# 下一条执行命令
ctrl + c    # 强制终止当前命令
1
2
3
4
5
6
7

# 3、文件与目录管理

文件与目录操作命名是Linux学习中最基础也是最重要的一部分,需要熟练掌握。

# 3.1、目录结构

Linux的目录结构可以理解为windows下的C盘目录结构,Linux目录结构如下:

/                     # root 根目录
 |_ /bin              # 二进制文件
 |_ /boot             # 启动文件
 |_ /dev              # 设备文件
     |_ /dev/sda      # 硬盘
     |_ /dev/sr0      # 光盘
     |_ /dev/null
     |_ /dev/random
 |_ /etc              # 配置文件
 |_ /home             # 用户目录
     |_ /home/user1   # 用户1的文件
     |_ /home/user2   # 用户2的文件
 |_ /lib              # 库文件
 |_ /media            # 可移动设备
 |_ /mnt              # 挂载目录
 |_ /opt              # 可选的应用程序软件包
 |_ /sbin             # 系统二进制文件
 |_ /tmp              # 临时文件
 |_ /usr              # 用户可分享的读取文件
 |_ /var              # 可变文件
 |_ /proc             # 进程信息
 |_ /root             # 管理员的主目录
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

# 3.2、pwd 显示绝对路径

pwd   # 显示当前工作目录的绝对路径
1

# 3.3、ls 列出目录

 ls       # 列出当前目录中的文件和子目录。
 ls -l    # 以长格式列出当前目录中的文件和子目录,包括文件权限、所有者、文件大小、修改日期等详细信息。
 ls -a    # 列出当前目录中的所有文件和子目录,包括隐藏文件和目录。
 ls -h    # 以人类可读的格式列出文件大小,例如,使用KB、MB、GB等单位。
 ls -t    # 按修改时间排序列出文件和子目录,最新修改的文件和目录将显示在最上面。
 ls -r    # 反向排序列出文件和子目录,即从最后一个文件或目录开始列出。
 ls -R    # 递归列出当前目录及其子目录中的所有文件和子目录。
 ls -i    # 显示每个文件和目录的inode号码。
1
2
3
4
5
6
7
8

# 3.4、cd 切换目录

cd 绝对路径    # 切换路径
cd 相对路径    # 切换路径
cd ~ 或者 cd   # 回到自己的home目录
cd -           # 回到上一次所在目录
cd ..          # 回到上一级目录
cd -P          # 强制使用绝对路径来切换目录,不会因为软链接而切换到其他目录
1
2
3
4
5
6

# 3.5、mkdir 创建目录

mkdir test                   # 创建目录
mkdir -p test/aa/xygalaxy    # -p 创建多层目录
1
2

# 3.6、rmdir 删除空目录

rmdir test/aa/xygalaxy   # 删除空目录
1

# 3.7、touch 创建空文件

touch test/aa/xygalaxy/new.txt  # 创建空文件new.txt
1

# 3.8、cp 复制文件或目录

# cp 源文件 目标文件
cp test/aa/xygalaxy/new.txt test/aa/   # 复制new.txt到test/aa/目录下

# 递归复制整个文件夹, 关键字:-r
cp -r test/aa/ ./     # 复制整个文件夹
1
2
3
4
5

# 3.9、rm 删除文件或目录

  • -r:递归删除目录中所有内容
  • -f:强制执行删除,不提示确认
  • -v:显示指令详细执行过程
rm new.txt     # 删除文件

rm -rf test/   # 递归删除目录中所有内容
1
2
3

# 3.10、mv 移动或重命名

# mv 源文件 目标文件
mv test/aa/xygalaxy/new.txt test/aa/xygalaxy/new2.txt     # 重命名
mv test/aa/xygalaxy/new.txt ./                            # 移动文件
1
2
3

# 3.11、cat 查看文件内容

查看一屏幕能显示完全的内容

cat new.txt     # 查看文件内容
cat -n new.txt  # -n参数显示行号
1
2

# 3.12、more 分屏查看器

可分页查看文件内容

  • 空格(space):下一页
  • 回车(Enter):向下滚动一行
  • Ctrl+F:向下滚动一屏
  • Ctrl+B:返回上一屏
  • =:输出当前行号
  • :f:数据文件名称及当前行行号
  • q:退出
more new.txt     # 分屏显示文件内容
1

# 3.13、less 分屏显示

可分页查看文件内容,比more更强大。less 指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率。

  • 空格(space):下一页
  • pagedown:向下滚动一行
  • pagedown:上一页
  • /字符串:默认向下搜索字符串,n向下查找,N向上查找
  • ?字符串:默认向上搜索字符串,n向下查找,N向上查找
  • q:退出
less new.txt     # 分屏显示文件内容
1

# 3.14、echo 输出内容

控制台输出内容

echo "hello world"       # 输出:hello world
echo "hello\tworld"      # 原内容输出,输出:hello\tworld
echo -e "hello\tworld"   # -e支持反斜线控制的字符转换,输出:hello	world
1
2
3

# 3.15、tail 输出尾部内容

tail 用于输出文件中尾部的内容,默认情况下 tail 指令显示文件的后 10 行内容。

tail -n 1 new.txt     # 查看文件尾 1 行内容
tail -f new.txt       # 实时追踪该档的所有更新
1
2

# 3.16、> 输出和 >> 追加

ls -l>new.txt            # 将 ls 查看信息写入到文件中
ls -l>>new.txt           # 将 ls 查看信息追加到文件中
echo hello>>new.txt      # 采用 echo 将 hello 单词追加到文件中
1
2
3

# 3.17、ln 软链接

软链接也称为符号链接,类似于 windows 里的快捷方式,有自己的数据块,主要存放了链接其他文件的路径。

# 语法
ln -s [原文件或目录] [软链接名]

# 创建软连接 lnTxt 指向 test/aa/xygalaxy/new.txt
ln -s test/aa/xygalaxy/new.txt ./lnTxt    

# 删除软连接
# 语法
rm -rf 软链接名

# 删除软连接 lnTxt
rm -rf lnTxt
1
2
3
4
5
6
7
8
9
10
11
12

# 3.18、history 查看执行历史

查看已经执行过的历史命令

history       # 查看执行历史命令
history -c    # 清空历史记录
1
2

# 3.19、date 时间日期类

date                             # 显示系统当前时间
date -s "2023-11-02 20:52:18"    # 设置系统时间
1
2

# 3.20、压缩和解压类

  • gzip/gunzip

  • 压缩算法:gzip使用的是DEFLATE压缩算法,通常能够提供较高的压缩比。
  • 单文件压缩:gzip主要用于对单个文件进行压缩,生成的文件后缀为.gz。
  • 无损压缩:压缩后的文件可以通过gzip工具恢复到原始状态,不会损失任何信息。
  • 不支持多文件打包:gzip只能压缩单个文件,无法同时将多个文件打包到一个压缩文件中。
# 压缩语法
gzip 文件1 文件2 ... 文件n

# 压缩案例
gzip lnTest.txt

# 解压缩语法
gunzip 压缩文件

# 解压缩案例
gunzip lnTest.txt.gz
1
2
3
4
5
6
7
8
9
10
11
  • zip/unzip

  • 压缩算法:zip使用的是ZIP压缩算法,通常提供比gzip更低一些的压缩比。
  • 多文件压缩:zip可以将多个文件和目录打包成一个压缩文件。
  • 支持加密:zip可以设置密码对压缩文件进行加密保护。
  • 平台兼容性:zip在不同操作系统上都有良好的兼容性,可以在Windows、Linux和MacOS等系统上进行压缩和解压缩。
# zip压缩语法
zip 压缩文件名.zip  源文件

# 压缩文件
zip lnTest.zip lnTest.txt

# -r 压缩文件夹
zip -r  nginx1.zip nginx-1.21.6

# unzip解压
unzip lnTest.zip

# -d 指定解压后文件的存放目录
unzip lnTest.zip -d /opt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  • tar

  • 打包工具:tar通常被用作打包工具,将多个文件和目录打包成一个tar文件,通常以.tar为后缀。
  • 不进行压缩:tar本身不进行压缩操作,只是将多个文件和目录打包到一个文件中。
  • 常与其他压缩工具结合使用:通常在tar文件生成后会使用其他压缩工具(如gzip或bzip2)对其进行压缩,生成.tar.gz或.tar.bz2等格式的压缩文件。

压缩操作

  • -c:产生.tar打包文件
  • -v:显示详细信息
  • -f:指定压缩后的文件名
  • -z:打包同时压缩
  • -x:解压.tar文件
  • -C:解压到指定目录
# tar语法
tar [操作] XXX.tar.gz 将要打包进去的内容

tar -zcvf 打包的文件名.tar.gz [源文件]

# 多个文件打包
tar -zcvf houma.tar.gz houge.txt bailongma.txt

# 打包文件夹
tar -zcvf xiyou.tar.gz xiyou/


# tar解压语法
# 解压到当前目录
tar -zxvf houma.tar.gz

# -C 解压到某个目录下
tar -zxvf xiyou.tar.gz -C /opt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 4、权限管理

# 4.1、文件属性

查看文件命令

ls         # 查看当前所有文件及目录
ll         # 查看当前所有文件及目录,以列格式,并显示详细信息
ll -lh     # 与ll功能相同,显示有所不同
1
2
3

根目录查看,可以将文件的属性分为文件类型、文件所有者、文件所属用户组、其他用户、文件大小、文件修改时间、文件名称。

以dev文件夹来解释

文件类型 文件所有者权限 文件所属用户组权限 其他用户的权限 连接数 所属用户 所属用户组 文件大小 文件最新修改时间 文件名
d rwx r-x r-x 19 root root 3.0k Sep 2 21:54 dev

# 4.2、文件类型

文件信息的第一位表示文件类型

  • -:普通文件,大部分文件都是普通文件
  • d:文件夹
  • l:符号链接文件,ln创建的软链接是属于这类文件
  • c:字符设备文件,如键盘、鼠标等
  • b:块设备和其他外围设备,如硬盘、内存等
  • s:套接字文件,即IO产生的文件

# 4.3、文件权限

文件的权限有读、写、执行三种。共九位字符表示,即显示为:rwxr-xr-x,可以分为三组,每3位字符为一组,分别代表Owner(所有者),Group(属组用户)和other(其他用户)的权限。

  • r:读权限,该字符的权限code是big[2],也就是:4
  • w:写权限,该字符的权限code是big[1],也就是:2
  • x:执行权限,该字符的权限code是big[0],也就是:1
  • -:无权限,无字符code,也就是:0

文件的权限有两种表示方式:数字模式和符号模式。比如权限r-x(可读可执行不可写)也就可以表示为:4+0+1=5。

数字模式和符号模式参考

数字权限 符号权限 含义
0 --- 不可读写执行
1 --x 可执行,不可读写
2 -w- 可写不可读和执行
3 -wx 可写可执行不可读
4 r-- 可读,不可写和执行
5 r-x 可读可执行,不可写
6 rw- 可读可执行,不可写
7 rwx 可读可执行,不可写

按刚刚dev的权限来表示,字符模式: rwxr-xr-x,数字模式: 755

# 4.3、文件授权

文件授权关键字为chmodchownchgrpchmod是为文件授权,chown是为文件所属用户授权。chgrp改变所属组。

  • 用户组表示
符号 用户 含义
u user 文件所有者
g group 同组用户
o other 其他用户
a all group 所有用户

权限操作符号

符号 含义
+ 增加权限,其他权限不变
- 减少权限,其他权限不变
= 设置权限,覆盖

权限符号

符号 含义
r
w
x 可执行

授权案例

# 给所有用户增加读写执行权限
chmod 777 new.txt 

# 给所有用户增加读写权限
chmod 775 new.txt

# 给所有用户增加执行权限
chmod a+x new.txt

# 将new.txt的用户和组更改为root和root
chown root:root new.txt
1
2
3
4
5
6
7
8
9
10
11

# 5、vi、vim文本编辑

vi是 Unix 操作系统和类 Unix 操作系统中最通用的文本编辑器。vim编辑器是从vi发展出来的一个性能更强大的文本编辑器。可以主动的以字体颜色辨别语法的正确性,方便程序设计。vimvi编辑器完全兼容。

vivim命令,就是为了能够操作文本内容,可以分为三种模式:一般模式、编辑模式、命令模式。

  • 一般模式:删除、复制、粘贴等操作。
  • 编辑模式:可以修改文本内容。
  • 命令模式:保存、退出等操作。
  • 一般模式
# 进入vi编辑器
vi new.txt

# 常用语法
yy                 # 复制光标当前行
y 数字 y           # 复制光标当前行到数字指定的行
p                  # 粘贴
u                  # 撤销上一步
dd                 # 删除当前行
d 数字 d           # 删除光标当前行到数字指定的行
x                  # 删除光标当前字符
X                  # 删除光标当前字符前字符
yw                 # 复制光标当前单词
dw                 # 删除光标当前单词
shift + ^          # 移动光标到行首
shift + $          # 移动光标到行尾
1 + shift + g      # 移动光标到文件首
shift + g          # 移动光标到文件尾
数字 + shift + g   # 移动光标到数字指定的行首
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  • 编辑模式
# 进入vi编辑器
vi new.txt

i、insert       # 编辑insert模式编写
a               # 编辑append模式编写
o               # 编辑open模式编写
I               # 行首插入
A               # 行尾插入
O               # 当前行上一行插入
1
2
3
4
5
6
7
8
9
  • 命令模式
# 进入vi编辑器
vi new.txt

:w                # 保存
:q                # 退出
:!                # 强制执行
/字符串           # 查找字符串,n下一个,N上一个,默认向下
:noh              # 取消高亮显示
:set nu           # 显示行号
:set nonu         # 取消行号
:%s/old/new/g     # 替换

:wq               # 保存并退出
:q!               # 强制退出,不保存
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 6、文件系统与文件查找

# 6.1、文件系统

du命令:显示目录下每个子目录的磁盘使用情况

  • -h:查看系统信息,以简短的方式显示
  • -a:不仅查看子目录大小,还要包含文件
  • -c:显示所有文件和子目录大小后,显示总和
  • -s:只显示总和
  • -max-depth=n:指定统计子目录的深度n层
# 查看当前文件总占用
du -sh 

# 当前目录下所有文件磁盘占用
du -sh *

# 某文件夹下所有文件的磁盘占用
du -sh /home/*

# -c 显示总和
du -csh /home/*
1
2
3
4
5
6
7
8
9
10
11

df命令:列出文件系统的整体磁盘使用量,检查文件系统的磁盘空间占用情况

df -h
1

# 6.2、文件查找

  • find命令:查找文件或者目录
# 按文件名查找
find -name "ne*.txt"            # 通配查找
find xygalaxy/ -name "*.txt"    # 目录查找文件

# 按拥有者查找
find opt/ -user hmb             # 查找/opt目录下,用户名称为-user的文件

# 按文件大小查找
find /home -size +204800        # 在/home目录下查找大于200m的文件(+n 大于 -n小于 n等于)
1
2
3
4
5
6
7
8
9
  • locate命令:快速定位文件路径

由于 locate 指令基于数据库进行查询,所以第一次运行前,必须使用 updatedb 指令创建 locate 数据库。

updatedb         # 创建 locate 数据库
locate tmp       # 查找tmp文件夹
1
2
  • grep命令:过滤查找及 | 管道符

管道符,“|”,表示将前一个命令的处理结果输出传递给后面的命令处理,可以前面查出来的东西传给管道符后端的处理,例如 ls | grep -n test

grep是Linux系统中常用的文本搜索工具,可以在文件中查找指定的字符串或者正则表达式,并将匹配的行输出到终端或者文件中。

# 在文件中查找字符
grep "string" filename                   # 单个文件中查找
grep "string" file1 file2 file3          # 多个文件中查找字符
grep -i "string" filename                # 忽略大小写查找指定字符串

# 在目录中递归查找指定字符串
grep -r "string" directory

# 显示匹配行的行号
grep -n "string" filename

# 反向查找不包含指定字符串的行
grep -v "string" filename

# 将匹配的行输出到文件中
grep "string" filename > new.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 7、用户管理

# 7.1、useradd 新增用户

useradd xyuser            # 创建用户xyuser
useradd -g 组名 用户名     # 添加新用户到某个组
1
2

# 7.1、passwd 设置密码

passwd xyuser            # 设置用户xyuser的密码
1

# 7.1、id 查看用户

id xyuser                # 查看用户是否存在
1

# 7.1、查看所有用户

cat /etc/passwd          # 查看创建了哪些用户
1

# 7.1、su 切换用户

su xyuser              # 切换到用户xyuser,只能获得用户的执行权限,不能获得环境变量
su - xyuser            # 切换到用户xyuser,并获得该用户的环境变量及执行权限
1
2

# 7.1、userdel 删除用户

userdel xyuser          # 删除用户但保存用户主目录
userdel -r xyuser       # 删除用户并删除用户主目录
1
2

# 7.1、sudo 给予root权限

sudo mkdir module       # sudo,设置让普通用户具有 root 权限
1

# 7.1、usermod 修改用户

usermod -g 用户组 用户名       # 将用户加入到用户组
1

# 7.1、groupadd 新增组

groupadd xygroup            # 创建组xygroup
1

# 7.1、groupdel 删除组

groupdel xygroup           # 删除组xygroup
1

# 7.1、groupmod 修改组

groupmod -n xygroup xygroup2    # 修改组名xygroup为xygroup2
1

# 7.1、查看所有组

cat /etc/group              # 查看创建的所有组
1

# 8、系统管理

# 8.1、系统信息

# 查看内核/操作系统/CPU信息
uname -a

# 查看centos具体版本
cat /etc/centos-release

# 将数据由内存同步到硬盘中
sync  

# 重启
reboot
# 重启
shutdown -r now

# 立马关机
shutdown -h now
# 计算机将在1分钟后关机,并且会显示在登录用户的当前屏幕中
shutdown -h 1 ‘This server will shut down after 1 mins‘
# 指定时间关机
shutdown 15:28
# 取消关机操作
shutdown -c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

# 8.2、进程与服务

Linux中运行程序分为进程与服务。

  • 进程:一个正在执行的程序或命令,被叫做“进程”(process)。每个进程都被分配一个id号:PID。
  • 服务:启动之后一只存在、常驻内存的进程,一般被称作“服务”(service)。
  • 进程命令

  • -a:显示当前终端的所有进程信息
  • -u:以用户格式显示进程信息
  • -x:显示后台进程运行的参数
  • -e:所有进程
  • -f:全格式
ps -aux         # 查看进程
ps -ef          # 可以显示父子进程

# 配合grep 查询java进程,查出PID后,就可以杀掉进程了
ps -ef | grep java
ps aux | grep java
ps -ef | grep java服务名

kill 进程号      # 停止
kill -9 进程号   # 强制停止
killall 进程名   # 支持通配符,便于批处理

# pstree查看进程树指令
pstree -p        # 显示进程的PID
pstree -u        # 显示进程的所属用户

# top动态监控进程指令,与ps指令很相似,不过不同的是top执行一段时间可以更新正在运行的程序。
top              # 动态监控进程
top -d 5s        # 指定top指令每隔几秒更新,默认是3秒
top -i           # 使top不显示任何闲置或者僵死进程
top -p           # 通过指定监控进程ID来仅仅监控某个进程的状态6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

进程查看

解释一下

  • USER:用户
  • PID:进程号
  • PPID:父进程号
  • %CPU:占用cpu的百分比
  • %MEM:占用物理内存的百分比
  • VSZ:占用虚拟内存大小 单位kb
  • RSS:占用物理内存大小 单位kb
  • TTY:终端名称或缩写
  • STAT进程状态:S-睡眠;W-等待中进程;R-正在运行;D-短期等待的休眠进程;Z-僵死进程;T-被跟踪或被停止;s-session leader进程 表示该进程是会话的先导进程(有子进程);N-优先级较低;< -优先级较`高;I-多线程:+ -位于后台的进程组。
  • STARTED:进程的启动时间
  • TIME:进程使用cpu的总时间
  • COMMAND:启动进程所用的命令和参数
  • 服务命令

服务又称为守护进程。运行在后台,通常会监听某个端口,等待其他程序的请求,比如mysql、sshd、防火墙等。

service 服务名 [start | stop | restart | status | reload]
1

服务的运行级别runlevel

  • 0:关机
  • 1:单用户 【找回丢失密码】
  • 2:多用户 无网络
  • 3:多用户 有网络
  • 4:系统未使用保留给用户
  • 5:图形界面
  • 6:系统重启 一般级别3和5比较常用,但是在工作中最常用的是级别3,与级别5相比更省资源 开机的流程说明:开机->BIOS->/boot->systemd进程1->运行级别->运行对应的服务

chkconfig给服务的各个运行级别设置自启动/关闭指令

chkconfig --list                    #查看服务
chkconfig 服务名 --list
chkconfig --level 5 服务名 on/off    # 对某服务在运行级别5开启或关闭自启动 注意执行完之后需要reboot生效
1
2
3

systemctl管理指令

systemctl 用于管理服务

# 语法
systemctl [start | stop | restart | status ] 服务名

systemctl list-unit-files [|grep 服务名]      # 查看所有服务状态
systemctl enable 服务名                       # 开启自启动
systemctl disable 服务名                       # 关闭自启动
systemctl is-enable 服务名                     # 询问是否自启动
1
2
3
4
5
6
7

# 8.3、软件安装与更新

在Linux中,有许多方法可以用来安装和更新软件。下面提供的是两种最常用的方法:使用包管理器(如APT、YUM或DNF)和使用源码安装。

  • 使用软件包管理器

对于基于Debian的系统(如Ubuntu,Kali,等等),使用apt-get安装和更新软件:

sudo apt-get update              # 更新软件包列表
sudo apt-get upgrade             # 升级已安装的所有包
sudo apt-get install packagename # 安装新的软件包
1
2
3

对于基于Red Hat的系统(如CentOS,Fedora,等等),使用yum或dnf:

sudo yum update                  # 在 older versions 的 CentOS/RHEL 中更新所有包
sudo dnf update                  # 在 newer versions 的 CentOS/RHEL 中更新所有包
sudo yum install packagename     # 在 older versions 的 CentOS/RHEL 中安装新的软件包
sudo dnf install packagename     # 在 newer versions 的 CentOS/RHEL 中安装新的软件包
1
2
3
4
  • 使用源码安装
wget http://example.com/software.tar.gz     # 下载源码
tar -xf software.tar.gz                     # 解压源码
cd software                                 # 进入源码目录
./configure                                 # 配置安装选项
make                                        # 编译源码
sudo make install                           # 安装软件
1
2
3
4
5
6

# 8.4、防火墙

  • 常用命令
# 启动
systemctl start firewalld 

# 停止
systemctl stop firewalld 

# 查看状态
systemctl status firewalld 

# 开机禁用
systemctl disable firewalld 

# 开机启动
systemctl enable firewalld 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  • 开放或关闭端口
# 开放80/tcp端口 (--permanent永久生效,没有此参数重启后失效)
firewall-cmd --zone=public --add-port=80/tcp --permanent 

# 查看80/tcp端口
firewall-cmd --zone=public --query-port=80/tcp 

# 关闭80/tcp端口
firewall-cmd --zone=public --remove-port=80/tcp --permanent 
1
2
3
4
5
6
7
8
  • 批量开放或关闭端口
# 批量开放端口,打开从40000到45000之间的所有端口
firewall-cmd --zone=public --add-port=40000-45000/tcp --permanent 

# 查看系统所有开放的端口
firewall-cmd --zone=public --list-ports 

# 批量关闭端口,关闭从40000到45000之间的所有端口
firewall-cmd --zone=public --remove-port=40000-45000/tcp --permanent 
1
2
3
4
5
6
7
8
  • 更新防火墙的设置
#更新防火墙的设置,使上面的修改生效
firewall-cmd --reload 
1
2
  • 防火墙命令解读
firwall-cmd                     # Linux提供的操作firewall的一个工具(服务)命令
--zone                          # 作用域
--add-port=8080/tcp             # 添加端口,格式为:端口/通讯协议 ;add表示添加,remove则对应移除
--permanent                     # 永久生效,没有此参数重启后失效
1
2
3
4

# 8.5、netstat 系统网络

netstat显示网络状态和端口占用信息

  • -a:显示所有正在监听(listen)和未监听的socket;
  • -n:拒绝显示别名,能显示数字的都显示为数字;
  • -l:仅列出正在监听的服务状态;
  • -p:表示显示哪个进程在调用;
netstat -anp | grep  进程号或端口号
netstat –nlp | grep  端口号
1
2

# 9、磁盘分区、逻辑卷和启动修复

# 9.1、磁盘分区

磁盘分区是将硬盘划分为不同的逻辑部分,每个分区可以独立地进行文件存储和管理。磁盘分区可以帮助用户更好地组织和利用硬盘空间。

# 查看当前系统的磁盘分区情况
lsblk

# 使用 fdisk 命令对磁盘进行分区操作
sudo fdisk /dev/sda

# 在分区界面,创建新分区
# 输入 n,选择主分区或逻辑分区
# 输入 p,选择新建主分区
# 输入分区号、起始扇区、终止扇区等信息,根据需要进行分区设置
# 输入 w,保存并退出

# 对分区进行格式化
sudo mkfs.ext4 /dev/sda1
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 9.2、逻辑卷管理

逻辑卷(Logical Volume)是在磁盘分区的基础上创建的一种虚拟磁盘,它可以跨越多个物理分区。逻辑卷的大小和扩展可以根据需要进行动态调整,从而提供更灵活的磁盘管理。

# 确保已安装 LVM 工具,并将磁盘分区转换为物理卷
sudo pvcreate /dev/sda1

# 创建逻辑卷组并添加物理卷
sudo vgcreate myvolume /dev/sda1

# 创建逻辑卷
sudo lvcreate -L 10G -n mylogicalvolume myvolume
1
2
3
4
5
6
7
8

# 9.3、启动修复

启动修复是在Linux系统中修复引导问题的过程。当系统无法正常启动时,可能是由于引导文件损坏或丢失等问题导致的。启动修复可以通过重新安装引导文件或者修复引导配置来解决这些问题,以恢复系统的正常启动。启动修复的具体操作取决于所使用的Linux发行版和引导器(如GRUB或LILO)。

# 从 Live CD/DVD 或 USB 启动计算机
# 进入恢复模式或命令行界面

# 使用 fdisk -l 命令或其他工具查看硬盘和分区情况
fdisk -l

# 挂载分区到临时目录
sudo mount /dev/sda1 /mnt

# 检查引导文件是否存在或受损
ls /mnt/boot/grub

# 重新安装引导文件
sudo grub-install --boot-directory=/mnt/boot /dev/sda

# 生成引导配置文件
sudo grub-mkconfig -o /mnt/boot/grub/grub.cfg

# 卸载分区
sudo umount /mnt

# 重新启动计算机
sudo reboot
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# 10、Shell脚本初识

Shell脚本是一种用文本文件编写的脚本,它们包含了一系列的命令,可以被Linux系统的Shell解释器执行。下面是一个简单的Shell脚本的示例和相应的讲解:

#!/bin/bash

# 这是一个简单的Shell脚本示例

# 定义一个变量
name="John"

# 打印变量的值
echo "Hello, $name!"

# 使用条件语句
if [ $name == "John" ]; then
    echo "Your name is John."
else
    echo "Your name is not John."
fi

# 使用循环语句
for i in {1..5}; do
    echo "Iteration $i"
done

# 接收用户输入
echo "Enter your age:"
read age
echo "Your age is $age."

# 执行命令并保存结果
files=$(ls)
echo "Files in current directory: $files"
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

这个示例中,我们用Shell脚本编写了一些基本的功能和语句,包括定义变量、打印语句、条件语句、循环语句、用户输入和执行命令等。

  • 第一行 #!/bin/bash 声明了脚本所使用的Shell解释器为bash。
  • name="John" 定义了一个名为name的变量,并赋值为"John"。
  • echo "Hello, $name!" 打印出了一个带有变量name值的问候语。
  • 使用条件语句 if [ $name == "John" ]; then 判断变量name的值是否等于"John",并根据结果打印相应的消息。
  • 使用循环语句 for i in {1..5}; do 实现了一个循环,将数字1到5逐一赋值给变量i,并循环执行相应的代码块。
  • 使用命令 read age 接收用户输入,并将其存储到变量age中。
  • 使用命令 files=$(ls) 执行命令ls并将结果存储到变量files中,然后打印出这些文件的列表。
  • 要运行Shell脚本,可以将上述代码保存为一个名为script.sh的文件,并在终端中使用命令bash script.sh或./script.sh来执行。请确保脚本文件具有执行权限(使用chmod +x script.sh)。

这只是一个简单的Shell脚本示例,Shell脚本的功能非常丰富,可以结合各种命令和语句来实现更复杂的操作。可以根据实际需求编写适合自己的Shell脚本。