黑马 Linux零基础快速入门到精通 笔记

初识Linux

Linux简介

提及操作系统,我们可能最先想到的是windows和mac,这两者都属于个人桌面操作系统领域,而Linux则属于服务器操作系统领域。无论是后端软件、大数据系统、网页服务等等都需要运行在Linux操作系统上。

Linux是一个开源的操作系统,广泛应用于服务器、桌面、嵌入式系统等多个领域。Linux是一种类UNIX的操作系统,由芬兰人Linus Torvalds于1991年首次发布。它是开源的,意味着源代码可以被任何人自由地使用、修改和分发。

Linux系统由Linux系统内核、系统级应用程序两部分组成。

内核提供系统最核心的功能,如:调度CPU、调度内存、调度文件系统、调度网络通讯、调度IO等。

系统级应用程序,可以理解为出厂自带程序,可供用户快速上手操作系统,如:文件管理器、任务管理器、图片查看、音乐播放等。

比如,播放音乐,无论用户使用自带音乐播放器或是自行安装的第三方播放器均是由播放器程序,调用内核提供的相关功能,由内核调度CPU解码、音响发声等。

内核是免费、开源的, 这也就代表了:任何人都可以获得并修改内核,并且自行集成系统级程序。提供了内核+系统级程序的完整封装,称之为Linux发行版。

虚拟机介绍

为了学习Linux操作系统,我们需要有一个可用的Linux系统,但因为Linux并不适合日常办公使用,所以我们不建议将自身电脑重装为Linux系统,而是借助虚拟机来获得可用的Linux系统环境进行学习。

虚拟机(VirtualMachine,VM)是一种计算机程序或系统,其通过软件模拟物理计算机的硬件运行环境,使得多个操作系统能够在同一台物理机器上同时运行的技术。它利用虚拟化技术,将物理资源(如CPU、内存、存储、网络等)抽象成逻辑资源,为每个虚拟机提供独立的计算环境。这些虚拟机彼此之间相互隔离,并能够运行不同的操作系统和应用程序。

刚刚介绍过一台完整的计算机包括软件和硬件,虚拟机为我们模拟出了虚拟的硬件,再搭配Linux,一个完整的计算机便搭建完成了。

安装

VMware虚拟机

我们选择通过软件VMware WorkStation来提供虚拟机,官方下载难以访问,建议从网上寻找现有安装包。如遇到该图片所示问题,可参考下方链接中的文章进行处理:

选择禁用Hyper-V或者安装WHP都可。

安装完毕后我们需检查其虚拟网卡是否安装成功:快捷键 win+r 打开运行窗口并输入ncpa.cpl,观察弹出的网络连接框中是否存在VMnet1和VMnet8,如果没有建议卸载并重新安装。

CentOS操作系统

我们需要下载CentOS操作系统的安装软件,本次使用CentOS7.6版本进行学习(下载需要魔法,建议寻找镜像网站或现有安装包):

CentOS下载地址https://vault.centos.org/7.6.1810/isos/x86_64/https://vault.centos.org/7.6.1810/isos/x86_64/https://vault.centos.org/7.6.1810/isos/x86_64/https://vault.centos.org/7.6.1810/isos/x86_64/https://vault.centos.org/7.6.1810/isos/x86_64/https://vault.centos.org/7.6.1810/isos/x86_64/https://vault.centos.org/7.6.1810/isos/x86_64/https://vault.centos.org/7.6.1810/isos/x86_64/https://vault.centos.org/7.6.1810/isos/x86_64/https://vault.centos.org/7.6.1810/isos/x86_64/https://vault.centos.org/7.6.1810/isos/x86_64/

VMware上安装Linux

打开VMware---创建新的虚拟机---典型(入门阶段选择典型能省去较多麻烦)---选择下载的CentOS的ISO文件,系统会自动识别:

设置用户名和密码---设置虚拟机名称(可选)---指定虚拟机存放位置(可选)---设置磁盘大小(建议40G),此时基本设置就已完成,点击完成即可创建虚拟机,如果还想更改虚拟硬件信息可点击自定义硬件自行更改即可。点击完成后等待系统自动安装(大约10-20分钟)。

出现该页面就代表已安装完毕:

点击账户并输入密码即可进入Linux操作系统:

远程连接Linux

使用操作系统有两种方式:图形化、命令行。图形化指使用操作系统提供的图形化页面,以获得图形化反馈的形式去使用操作系统。命令行则是使用操作系统提供的各类命令,以获得字符反馈的形式去使用操作系统。

Linux也不例外的提供了这两种操作方式。我们平时使用各种操作系统时,通常都是使用图形化界面来操作,但在Linux中却相反,我们大多数情况下都会使用命令行的形式,这是因为Linux的图形化页面不好用、不稳定。在开发中,使用命令行形式,效率更高,更加直观,并且资源占用低,程序运行更稳定。

同时因为我们的电脑系统与Linux系统之间隔着VMware虚拟机,在两者交互时并不方便。因此我们可以选择借助第三方软件FinalShell来远程连接到Linux操作系统,并使用FinalShell来操作Linux系统,这就就只需将VMware挂在后台,便可进行快捷操作。

前往官网下载对应操作系统的FinalShell即可:FinalShell下载地址https://www.hostbuf.com/t/988.htmlhttps://www.hostbuf.com/t/988.htmlhttps://www.hostbuf.com/t/988.htmlhttps://www.hostbuf.com/t/988.htmlhttps://www.hostbuf.com/t/988.htmlhttps://www.hostbuf.com/t/988.htmlhttps://www.hostbuf.com/t/988.htmlhttps://www.hostbuf.com/t/988.htmlhttps://www.hostbuf.com/t/988.html 安装时可能会提示Winpcap,一切默认直接安装即可。安装完成后会自动打开FinalShell页面:

然后是连接到VMware虚拟机,在虚拟机的操作系统空白处右键---Open Terminal(打开终端)---输入ifconfig,向上滚动找到ip地址:

回到FinalShell,点击左上角的文件夹图标---新建连接---SSH连接---输入对应的主机地址、用户名和密码,自行设置名称---------

然后双击刚刚建立的连接,在弹出的安全警告框选择接受并保存,便可成功连接。

此时便可将VMware最小化,直接通过FinalShell来操作Linux系统。我们可以在两端都输入ls,观察两者的输出是否相同,如果相同则代表连接成功:

注意:

如果虚拟机重启,IP可能会发生改变,需重新配置。改变IP需要在FinalShell中修改连接的IP地址

拓展:Ubuntu

关于Linux发行版是有很多版本的,除了上面介绍的CentOS,还有一款名为Ubuntu的发行版也有较多人使用,后续会捎带提及该操作系统。但无需担心,因为无论哪个操作系统其基础命令都一致,只会在个别地方不一样,因此我们仍以CentOS为主。获取Ubantu操作环境则需借助Windows系统提供的WSL来获得。

WSL是Windows Subsystem for Linux(适用于Linux的Windows子系统)的缩写,是一个在Windows 10及更高版本上运行的Windows功能。其可以在Windows系统中获得Linux系统环境,并完全直连计算机硬件,无需通过虚拟机虚拟硬件。

但目前使用VMware虚拟机安装Linux仍是主流,所以该方法我们仅做了解。

现在Winsows系统中搜索"启用或关闭Windows功能",勾选"适用于Linux的Windows子系统",然后重启计算机。

此时就可以安装WSL的操作系统了,直接在微软商店搜索Ubuntu进行安装即可,他只有命令行界面而无图形化界面,但因为Linux系统主要使用的就是命令行界面,所以这点无伤大雅。打开后输入用户名和密码以创建新用户。

但Ubantu自带的终端窗口并不好用,我们可以借助微软推出的软件Windows Terminal来辅助使用。直接在微软商店搜索Terminal进行安装,打开后默认的为Windows的power shell,点击下拉箭头选择Ubuntu即可。也可下拉列表中的设置中修改默认配置文件为Ubuntu,点击保存,之后再打开该软件,其默认窗口就是Ubuntu而非Power Shell了。

拓展:虚拟机快照

​ 在学习阶段我们无法避免的可能损坏Linux操作系统。如果损坏的话,重新安装一个Linux操作系统就会十分麻烦。

VMware虚拟机(WorkStation和Funsion)支持为虚拟机制作快照。通过快照将当前虚拟机的状态保存下来,在以后可以通过快照恢复虚拟机到保存的状态。

接下来制作快照,建议先将虚拟机关闭,这样可以节省制作快照花费的时间。回到VMware,在左侧右键计算机---快照---拍摄快照---自行添加名称和描述---拍摄快照,即可完成快照制作。

然后是快照恢复,同样先将虚拟机关闭,在左侧右键计算机---快照---快照管理器---选择想要恢复的快照版本---转到,即可完成快照恢复。

Linux基础命令

Linux的目录结构

Linux的目录结构是一个树形结构,不同于Windows可以有如C盘、D盘等多个盘符,Linux没有盘符这一概念,只有一个根目录"/",所有的文件都在它之下。

同时Windows使用反斜杠"\"来表示层级关系,例如:C:\Users\chn\Desktop,而在Linux中则为正斜杠"/"来表示层级关系,例如:/Users/chn/Desktop,第一个"/"代表根目录,其他"/"则表示层级关系。

Linux命令入门

学习Linux, 本质上是学习在命令行下熟练使用Linux的各类命令。

命令行就是Linux终端(Terminal),是一种命令提示符界面。以纯"字符"的形式操作系统,可以使用各种字符化命令对系统发出操作指令。

命令则是Linux程序。一个命令就是一个Linux的程序。命令没有图形化页面, 可以在命令行(终端中)提供字符化的反馈。

Linux命令有其通用的格式:

sql 复制代码
command [-options][parameter]
命令本体 可选选项   可选参数
  • command:命令本身
  • -options:[可选,非必填]命令的一些选项,可以通过选项控制命令的行为细节
  • parameter:[可选,非必填]命令的参数,多数用于命令的指向目标等

示例:

java 复制代码
ls -l /home/itheima
//ls是命令本身,-l是选项,/home/itheima是参数
//意为以列表的形式,显示/home/itheima目录内的内容
------------------------------------------------------------------------------------------------------------------------------------------
cp -r test1 test2
//cp是命令本身,-r是选项,test1和test2是参数
//意为复制文件夹test1成为test2

ls:查看内容

先来看ls命令,其作用是列出目录下的内容。

java 复制代码
ls [-a -l -h] [Linux路径]
  • -a -l -h是可选的选项
  • Linux路径是此命令可选的参数

当不使用选项和参数,直接使用ls命令本体时,意为以平铺形式,列出当前工作目录下的内容:

上文提到了工作目录,在命令行中,其默认会加载home目录来作为当前的工作目录,所以ls列出的内容就是home目录中的内容。而HOME目录为 每个Linux操作用户在Linux系统的个人账户目录,默认路径为:/home/用户名。

接下来来看添加命令参数,即路径,例如"ls /"意为查看根目录下的所有文件:

然后来看选项[-a -l -h],其分别有不同的含义:

  • -a (all):显示所有文件和目录,包括以点(.)开头的隐藏文件。
  • -l (long):以列表的形式(竖向)列出文件和目录的详细信息。
  • -h (human-readable):以易于阅读的格式显示文件大小(例如,使用KB、MB、GB等)。

这些选项可以组合在一起使用,以获取更详细且易读的输出。例如:ls -a -l、ls -la、ls -al都表示展示当前目录下所有文件和目录(包括隐藏文件)的详细列表。

同时选项和参数也可组合使用,例如la -al /意为显示根目录的详细列表。

cd:切换工作目录

当Linux终端打开时,会默认以用户的home目录为当前的工作目录,我们可以通过cd命令来更改当前所在的工作目录。cd命令来自英文:Change Directory(更改目录)。

语法:cd [Linux 路径]

cd命令无需选项,只有参数,表示要切换到哪个目录下。cd命令直接执行,不写参数,表示回到用户的HOME目录。

pwd:查看当前工作目录

上文我们通过ls来验证当前工作目录的位置,但这并不合适。我们可以通过pwd命令来查看当前所在的工作目录。pwd命令来自:Print Work Directory(打印工作目录)。

语法:pwd

pwd命令很简单,其没有选项和参数,直接输入pwd即可。

相对、绝对、特殊路径符

上文我们介绍了cd命令,如果我们想要通过cd命令,切换工作目录到Desktop文件夹中去,有两种写法:

  • cd /home/chen/Desktop
  • cd Desktop

上述两种写法,都可以正确的切换目录到指定的Desktop中。第一种为绝对路径:以根目录为起点,描述路径的一种写法,路径描述以/开头。第二种则为相对路径:以当前目录为起点,描述路径的一种写法,路径无需描述以/开头。

此时工作目录已经处于/home/chen/Desktop下,如果我们想要回到上级目录/home/chen中,不仅可以借助cd命令,还可借助特殊路径符:

  • ".":表示当前目录,如cd ./Desktop表示切换到当前目录下的Desktop目录内,和cd Desktop效果一致。
  • "..":表示上一级目录,如cd ..即可切换到上一级目录,cd ../..切换到上二级目录,以此类推。
  • "~":表示HOME目录,如cd ~即可切换到HOME目录或cd ~/Desktop,切换到HOME内的Desktop目录。

mkdir:创建目录

通过mkdir命令可以创建新的目录(文件夹),mkdir来自:Make Directory。

语法:mkdir [-p] Linux路径

其中参数是必填的,表示要创建的文件夹的路径,相对路径或绝对路径均可。-p选项可选:表示自动创建不存在的父目录,适用于创建连续多层级的目录。

以上都是创建单级目录,如果我们想要创建多级目录系统就会报错:

此时就需要在路径前加上-p,来告诉系统我要创建多级目录:

创建文件夹需要修改权限,请确保操作均在HOME目录内,不要在HOME外操作,涉及到权限问题,HOME外无法成功。

如果感觉FinalShell上内容太多,可使用快捷键ctrl+l一键清屏。

文件操作命令

touch:创建文件

可以通过touch命令来创建文件。

语法:touch Linux路径

其无选项,但参数必填。表示要创建的文件路径。

touch用于创建新的空文件或更新已有文件的时间戳,而mkdir则用于创建新的目录(文件夹)。文件夹和文件除了展示的颜色不同,使用-l选项时,文件夹的开头为d,文件的开头为~。

cat:查看文件内容

有了文件后,我们可以通过cat命令查看文件的内容。

不过,现在我们还未学习vi编辑器,无法向文件内编辑内容,所以我们先在图形化中,手动在刚刚创建的test.txt文件内添加内容,以测试cat命令:打开test.txt文件---编辑内容---点击右上角的save。

语法:cat Linux路径

同样没有选项,只有参数必填,参数表示被查看的文件路径。

more:查看文件内容

more命令同样可以查看文件内容,但与cat不同的是,cat会直接将内容全部显示出来,而more则支持翻页,如果文件内容过多,可以一页页的展示。

语法:more Linux路径

没有选项,参数必填,参数表示被查看的文件路径。

因为刚刚创建的文本文件内容较少,无法体现翻页这一功能,所以我们查看Linux系统中内置的一个文件,路径为:/etc/services,可以使用more命令查看:more /etc/services

  • 在查看的过程中,通过空格翻页
  • 通过q退出查看

cp:复制

可通过cp命令来复制文件\文件夹,cp命令来自英文单词:copy。

语法:cp [-r] 参数1 参数2

  • -r,可选,用于复制文件夹时使用,表示递归
  • 参数1,Linux路径,表示被复制的文件或文件夹
  • 参数2,Linux路径,表示要复制去的地方

即将文件\文件夹1复制至路径2处。

mv:移动

mv命令可以用于移动文件\文件夹;当路径不变,相当于改名。来自英文单词:move

语法:mv 参数1 参数2

  • 参数1,Linux路径,表示被移动的文件或文件夹
  • 参数2,Linux路径,表示要移动去的地方,如果目标不存在,则进行改名,确保目标存在

即将文件\文件夹1复制至路径2处,不存在则改名。

rm:删除

rm命令可用于删除文件、文件夹,rm命令来自英文单词:remove

语法:rm [-r -f] 参数1 参数2 ...... 参数N

  • -r选项,可选,用于删除文件夹
  • -f选项,可选 ,表示force,强制删除(不会弹出提示确认信息)
    • 普通用户删除内容不会弹出提示,只有root管理员用户删除内容会有提示
    • 所以一般普通用户用不到-f选项
  • 参数1、参数2、......、参数N表示要删除的文件或文件夹路径,按照空格隔开

通配符*

rm命令支持通配符*,用来做模糊匹配。

  • 符号*表示通配符,即匹配任意内容(包含空)
  • test*,表示匹配任何以test开头的内容
  • *test,表示匹配任何以test结尾的内容
  • *test*,表示匹配任何包含test的内容

强制删除,-f选项

普通用户使用-f是没有作用的,我们在强制删除时系统会弹出提示:

"rm: remove directory 'test'? y"来确认是否删除。

我们可以切换至root用户(超级管理员)su - root,输入密码自己设置的密码,临时切换到root用户体验。还可以通过输入exit命令退回到普通用户。

rm是一个危险的命令,特别是在处于root(超级管理员)用户的时候。请谨慎使用。

在root管理员用户下执行:rm -rf / 或者rm **-rf /***效果等同于在Windows上执行C盘格式化。

查找命令

上文我们所介绍的Linux命令,其本体就是一个个的二进制可执行程序,和win系统中的.exe文件一样,输入cd命令,就是执行了cd程序。我们就可以通过which命令查看这些程序的存放位置。

which:查看程序位置

通过which命令可查看所使用的一系列命令的程序文件的存放位置。

语法:which 要查找的命令

find:查找文件

可以通过find命令搜索指定的文件。

语法:find 起始路径 -name "被查找文件名"

与rm删除文件一样,其也可以与通配符搭配使用。

find命令还可以按照文件大小查找文件。

语法:find 起始路径 -size +或-n[kMG]

  • +、-表示大于或小于
  • n表示大小数字
  • kMG表示大小单位,k(小写字母)表示kb,M表示MB,G表示GB

示例:

  • 查找小于10KB的文件:find / -size -10k
  • 查找大于100MB的文件:find / -size +100M
  • 查找大于1GB的文件:find / -size +1G

如果查找的程序太多,可通过快捷键ctrl+c快速停止查找

统计命令

grep:查找关键字

grep命令可以从文件中通过关键字过滤文件。是"Global regular expression print(全局正则表达式打印)的缩写。

语法:grep [-n] 关键字 文件路径

  • 选项-n,可选,表示在结果中显示匹配的行的行号。
  • 参数1必填:关键字,表示过滤的关键字,带有空格或其他特殊符号,建议使用" "将关键字包围起来
  • 参数2必填:文件路径,表示要过滤内容的文件路径,可作为内容输入端口

wc:统计数量

wc命令可以统计文件的行数、单词数量等,是"Word Count"的缩写。

语法:wc [-l -w -c -m] 文件路径

  • 选项,-l,统计行数
  • 选项,-w,统计单词数量
  • 选项,-c,统计bytes数量
  • 选项,-m,统计字符数量
  • 参数,文件路径,被统计的文件,可作为内容输入端口(后文介绍)

加选项的话输出"该选项数量 文件名",不加选项则输出"行数 单词数 字节数 文件名"。

管道符:|

学习了grep命令后,我们再来学习一个新的特殊符号,管道符: "|",其含义为: 将管道符左边命令的结果,作为右边命令的输入。

在该图的例子中,使用管道 (|) 将text.txt的结果作为 grep 命令的内容输入以搜索"nice"字符串。同时相对于上文的grep语句,少了test.txt,这就是将text.txt的结果作为 grep 命令的内容输入了。

在上文我们遇到了搜索到的结果过多的情况,这里我们就可以借助管道符,实现从根目录开始查找所有大小超过1GB的文件的数量。:find / -size +1G | wc -l

输出指令

echo命令

可以使用echo命令在命令行内输出指定内容

语法:echo 输出的内容

无需选项,只有一个参数,类似于print表示要输出的内容,复杂内容可以用""包围。还可搭配反引号`(esc下方的~键),被其包围的内容,会被作为命令执行,而非普通字符。

重定向符:>和>>

  • >:将左侧命令的结果,覆盖写入到符号右侧指定的文件中
  • >>:将左侧命令的结果,追加写入到符号右侧指定的文件中

tail命令

其可以查看文件尾部内容,跟踪文件的最新更改。

语法:tail [-f -num] Linux路径

  • 参数,Linux路径,表示被跟踪的文件路径
  • 选项,-f,follow表示持续跟踪文件最新更改,ctrl+c关闭
  • 选项,-num,表示,查看尾部num行,不填默认10行

例子:

  • tail test.txt:查看 test.txt 的最后10行
  • tail -n 5 test.txt:查看 test.txt 的最后5行
  • tail -f test.txt:命令实时跟踪 test.txt 文件的更新,ctrl+c关闭追踪

vi编辑器

vi\vim是visual interface的简称,是Linux中最经典的文本编辑器。同图形化界面中的文本编辑器一样,vi是命令行下对文本文件进行编辑的绝佳选择。

vim是vi的加强版本,兼容vi的所有指令,不仅能编辑文本,而且还具有shell程序编辑的功能,可以不同颜色的字体来辨别语法的正确性,极大方便了程序的设计和编辑性。

vi\vim编辑器有三种工作模式:

一、命令模式(Command mode)

命令模式下,所敲的按键,编辑器都理解为命令,以命令驱动执行不同的功能。此模型下,不能自由进行文本编辑。

二、输入模式(Insert mode)

也就是所谓的编辑模式、插入模式。此模式下,可以对文件内容进行自由编辑。

三、底线命令模式(Last line mode)

以:开始,通常用于文件的保存、退出。

通过vi/vim编辑器编辑文件,需输入进入命令:"vi 文件路径"或者"vim 文件路径",vim兼容全部的vi功能,后续全部使用vim命令,因此也建议大家使用后者。

如果文件路径表示的文件不存在,那么此命令会用于编辑新文件。如果文件路径表示的文件存在,那么此命令用于编辑已有文件。

通过vi/vim命令编辑文件,会打开命令模式窗口,命令模式是vi编辑器的入口和出口。命令模式输入键盘指令,可以进入输入模式。输入模式和底线模式是无法连通的,必须借助命令模式。

接下来我们来尝试使用vim编辑器:

一、使用vim test.txt,文件存在则进入,不存在则新建,执行后进入的是命令模式

二、在命令模式内,按键盘i,进入输入模式

三、在输入模式下自行输入一定的字符

四、输入完成后,按esc回退回命令模式,有很多快捷键:yyp复制该行、dd删除改行、u撤销

五、在命令模式内,按冒号键" :" ,进入底线命令模式

六、在底线命令内输入:wq ,保存文件并退出vi编辑器(w表示保存,q表示退出)

命令模式快捷键

命令模式下的一些常见快捷键:

模式 命令 描述
命令模式 i 在当前光标位置进入输入模式
命令模式 a 在当前光标位置之后进入输入模式
命令模式 I 在当前行的开头,进入输入模式
命令模式 A 在当前行的结尾,进入输入模式
命令模式 o 在当前光标下一行进入输入模式
命令模式 O 在当前光标上一行进入输入模式
命令模式 esc 在任何情况下输入esc都能回到命令模式

其余快捷键:

模式 命令 描述
命令模式 键盘上、键盘k 向上移动光标
命令模式 键盘下、键盘j 向下移动光标
命令模式 键盘左、键盘h 向左移动光标
命令模式 键盘右、键盘l 向右移动光标
命令模式 0 移动光标到当前行的开头
命令模式 $ 移动光标到当前行的结尾
命令模式 pageup(PgUp) 向上翻页
命令模式 pagedown(PgDn) 向下翻页
命令模式 / 进入搜索模式
命令模式 n 向下继续搜索
命令模式 N 向上继续搜索
命令模式 dd 删除光标所在行的内容
命令模式 ndd n是数字,表示删除当前光标向下n行
命令模式 yy 复制当前行
命令模式 nyy n是数字,表示复制当前行及下面的n行
命令模式 p 粘贴复制的内容
命令模式 u 撤销修改
命令模式 ctrl + r 反向撤销修改
命令模式 gg 跳到首行
命令模式 G 跳到行尾
命令模式 dG 从当前行开始,向下全部删除
命令模式 dgg 从当前行开始,向上全部删除
命令模式 d$ 从当前光标开始,删除到本行的结尾
命令模式 d0 从当前光标开始,删除到本行的开头

底线命令模式

编辑模式没有什么特殊的,进入编辑模式后,任何快捷键都没有作用,就是正常输入文本而已。唯一大家需要记住的,就是:通过esc,可以退回到命令模式即可。

在命令模式内输入:,即可进入底线命令模式,支持如下命令:

模式 命令 描述
底线命令模式 :wq 保存并退出
底线命令模式 :q 仅退出
底线命令模式 :q! 强制退出
底线命令模式 :W 仅保存
底线命令模式 :set nu 显示行号
底线命令模式 :set paste 设置粘贴模式

Linux权限管控

root用户(超级管理员)

无论是Windows、MacOS、Linux均采用多用户的管理模式进行权限管理。在Linux系统中,拥有最大权限的账户名为:root(超级管理员)而在前期,我们一直使用的账户是普通的用户。

root用户拥有最大的系统操作权限,而普通用户在许多地方的权限是受限的,例如普通用户无法在根目录下创建文件夹,root用户却可以:

普通用户的权限,一般在其HOME目录内是不受限的,一旦出了HOME目录,大多数地方,普通用户仅有只读和执行权限,无修改权限 。

su和exit命令

前面我们接触过su和exit命令,其中su命令就是用于账户切换的系统命令。来自英文单词:Switch User。

语法:su [-] [用户名]

  • -选项可选,表示是否在切换用户后加载环境变量(后续介绍),建议带上
  • 参数:用户名,表示要切换的用户,用户名也可以省略,省略表示切换到root
  • 通过exit命令退回到上一个用户,或使用快捷键:Ctrl+d

使用普通用户,切换到其它用户需要输入密码,如切换到root用户。

使用root用户切换到其它用户,无需密码,可以直接切换。

sudo命令

虽然可以使用su命令切换到root用户,但不建议长时间使用root用户,以避免不小心损坏了系统文件。而sudu命令可以为普通的命令授权,临时以root身份执行。

语法:sudo 其他命令

在其它命令之前,带上sudo,即可为这一条命令临时赋予root授权。但是并不是所有的用户,都有权利使用sudo,我们需要为普通用户配置sudo认证

普通用户配置sudo认证

配置该认证需要最大权限,所以需先输入"su -"和密码切换到root用户,然后执行visudo命令,会自动通过vi编辑器打开:/etc/sudoers,进入文件按G跳到行尾,然后按o进入编辑模式(注意大小写)并添加:chen ALL=(ALL) NOPASSWD: ALL,其中chen为用户名,请自行替换为自己的,回车---esc退出---输入":wq"切换回普通用户。

此时再在根目录下输入sudo mkdir CHNFile,文件即可成功创建:

如果我们再执行一遍上述操作来删除刚刚编辑的文本,再执行sudo mkdir NFile,系统会提示输入密码,但输入密码后仍无法完成相关操作:

用户、用户组

在Linux系统中可以:配置多个用户、配置多个用户组、用户可以加入多个用户组中。

Linux中关于权限的管控级别有2个级别,分别是针对用户的权限控制、针对用户组的权限控制。

比如,针对某文件,可以控制用户的权限,也可以控制用户组的权限。所以,我们需要学习在Linux中进行用户、用户组管理的基础命令,为后面学习权限控制打下基础。

用户组管理

注意:以下命令需root用户执行

  • 创建用户组:groupadd 用户组名
  • 删除用户组:groupdel 用户组名

为后续演示,我们多执行一步"groupadd group1"来创建一个group1用户组:

用户管理

注意:以下命令需root用户执行

一、创建用户:useradd [-g -d] 用户名

  • -g指定用户的组,不指定则会创建同名组并自动加入,指定-g需要组已经存在,如已存在同名组,必须使用-g
  • -d指定用户HOME路径,不指定,HOME目录默认在:/home/用户名

二、删除用户:userdel [-r] 用户名

-r,删除用户的HOME目录,不使用-r,删除用户时,HOME目录保留

java 复制代码
[root@192 home]# userdel test2 // 尝试删除用户test2,但不删除其家目录
[root@192 home]# ls            // 列出home目录下的内容
chen  test  test222            // 存在chen、test和test222三个目录
[root@192 home]# rm -rf test222 // 强制删除test222目录及其所有内容
[root@192 home]# userdel -r test // 删除用户test及其家目录和邮件池
[root@192 home]# ls             // 再次列出home目录下的内容
chen                            // 只剩下chen目录,test和test222目录已删除

三、查看用户所属组:id 用户名

用户名为想要查看的用户,如果不提供则查看自身

java 复制代码
[chen@192 /]$ id
uid=1000(chen) gid=1000(chen) 组=1000(chen) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
//显示用户chen的ID信息:用户ID为1000,组ID为1000,主组为1000,SELinux安全环境为unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

四、修改用户所属组:usermod -aG 用户组 用户名

将指定用户加入指定用户组

java 复制代码
[root@centos home]# id test4 
uid1004(test4) gid1004(test4) groups=1004(test4)
// 查询用户test4的ID信息,显示用户ID为1004,组ID为1004,所属组为1004(test4)

[root@centos home]# usermod -aG itcast test4 
// 将用户test4添加到itcast组,-a表示追加,-G表示指定次要组

[root@centos home]# id test4 
uid1004(test4) gid1004(test4) groups=1004(test4),1003(itcast)
// 再次查询用户test4的ID信息,确认用户test4现在同时属于组1004(test4)和组1003(itcast)

五、getent

1、使用getent命令,可以查看当前系统中有哪些用户

语法:getent passwd

共有7份信息,分别是:用户名:密码(显示为x):用户ID:组ID:描述信息(无用):HOME目录:执行终端(默认bash)

2、使用getent命令,可以查看当前系统中有哪些用户组

语法:getent group

包含3份信息:组名称:组认证(显示为x):组ID

查看权限控制

认知权限信息

通过ls -l可以以列表形式查看内容,并显示权限细节:

  • 序列1:文件、文件夹的权限控制细节信息
  • 序列2:文件、文件夹所属用户
  • 序列3:文件、文件夹所属用户组

序列1表示权限细节,总共分为10个槽位

之前我们提到过,-表示文件、d表示文件夹,其实还有l表示软连接。

接下来来看drwxr-xr-x,它表示:

  • 首字母d:这是一个文件夹
  • 所属用户的权限是:有r有w有x,rwx
  • 所属用户组的权限是:有r无w有x,r-x(-表示无此权限)
  • 其它用户的权限是:有r无w有x,r-x(-表示无此权限)

而r、w、x分别代表不同的意思:r表示读权限(read)、w表示写权限(write)、x表示执行权限(execute)。

同时,针对文件、文件夹的不同,rwx的含义有细微差别:

权限 文件操作 文件夹操作
r(读) 查看文件内容 查看文件夹内容(如ls命令)
w(写) 修改文件 在文件夹内创建、删除、改名等操作
x(执行) 将文件作为程序执行 更改工作目录到此文件夹(即cd进入)

修改权限控制

上文介绍了查看文件权限信息,这些权限信息并不是一成不变的,我们也可以通过chmod命令修改文件或文件夹的权限。

chmod命令

chmod命令可以修改文件、文件夹的权限信息。但只有文件、文件夹的所属用户或root用户可以修改。

语法:chmod [-R] 权限 文件或文件夹

选项:-R,对文件夹内的全部内容应用同样的操作,也就是说没有-R则只修改文件夹的权限,有则会修改文件夹及内部所有文件的权限。

上文介绍过权限修饰符分三部分,修改权限时使用u、g、o来代指。u表示user所属用户权限,g表示group组权限,o表示other其它用户权限

java 复制代码
chmod u=rwx,g=rx,o=x hello.txt
//将文件权限修改为:rwxr-x--x
chmod -R u=rwx,g=rx,o=x test
//将文件夹test及其文件夹内全部内容权限设置为:rwxr-x--x

​除此以外,还有快捷写法,例如上文修改文件可替代为:chmod 751 hello.txt,效果相同。

权限可以用3位数字来代表,第一位数字表示用户权限,第二位表示用户组权限,第三位表示其它用户权限。各数字代表的不同权限:

  • 0:无任何权限,即---000
  • 1:仅有x权限,即--x001
  • 2:仅有w权限,即-w-010
  • 3:有w和x权限,即-wx011
  • 4:仅有r权限,即r--100
  • 5:有r和x权限,即r-x101
  • 6:有r和w权限,即rw-110
  • 7:有全部权限,即rwx111

所以751表示:rwx(7) r-x(5) --x(1)。

chown命令

序列1中权限修改已介绍完毕,接下来来看修改序列2、3的所属用户和用户组。

chown命令可以修改文件、文件夹的所属用户和用户组。此命令只适用于root用户执行。

语法:chown [-R] [用户][:][用户组] 文件或文件夹

  • -R,对文件夹内全部应用相同规则
  • 用户,修改所属用户
  • 用户组,修改所属用户组
  • ":"用于分割用户和用户组
java 复制代码
示例:
chown root hello.txt
//将hello.txt所属用户修改为root
chown :root hello.txt
//将hello.txt所属用户组修改为root
chown root:kx hello.txt
//将hello.txt所属用户修改为root,用户组修改为kx
chown -R root test
//将文件夹test的所属用户修改为root,并对文件夹内全部内容应用同样规则

Linux实用操作

快捷键

Ctrl+c:强制停止

Linux某些程序的运行,如果想要强制停止它,可以使用快捷键Ctrl+c。命令输入错误,也可以通过Ctrl+c,退出当前输入,重新输入。

Ctrl+d:退出或登出

可以通过快捷键:Ctrl+d,退出账户的登录,或者退出某些特定程序的专属页面,但不能用于退出vi/vim。

history:历史命令搜索

可以通过history命令查看历史输入过的命令,直接输入history即可,序号越大,执行时间越近。还可搭配管道符"|"和grep命令使用:

java 复制代码
[chen@192 ~]$ history | grep "c"
    9  cd /
   19  cd ~
   23  history | grep "ch"
   24  history | grep "c"

!命令前缀

自动执行上一次匹配前缀的命令(从下向上进行搜索),例如历史记录有set +o history;命令,我们只需要输入"!s"系统就会自动匹配第一个相近的命令:

java 复制代码
[chen@192 ~]$ !s
set +o history;

因为该命令会匹配最近的一个命令,所以建议只用来匹配最近的命令,久远的命令可能会匹配到其他命令。 想要搜索久远的命令应该使用Ctrl+r。

Ctrl+r:匹配历史命令

可通过快捷键Ctrl+r,输入内容去匹配历史命令:

java 复制代码
[chen@192 ~]$ //按下CTRL+r
(reverse-i-search)`CHN': sudo mkdir CHNFile
//输入CHN,匹配到对应指令

如果搜索到的内容是你需要的,直接敲击回车键即可执行,如果需要修改,按下键盘左右键,可以得到此命令(不执行)

光标移动快捷键

  • Ctrl+a,跳到命令开头
  • Ctrl+e,跳到命令结尾
  • Ctrl+键盘左键,向左跳一个单词
  • Ctrl+键盘右键,向右跳一个单词

Ctrl+l:清屏

通过快捷键Ctrl+l,可以清空终端内容,或者通过命令clear得到同样效果。

软件安装

Linux系统的应用商店

操作系统安装软件有很多种方式,一般分为:

  • 下载安装包自行安装
    • 如win系统使用exe文件、msi文件等
    • 如Mac系统使用dmg文件、pkg文件等
  • 系统的应用商店内安装
    • 如win系统有Microsoft Store商店
    • 如Mac系统有AppStore商店

Linux系统同样支持这两种方式,我们首先,先来学习使用:Linux命令行内的"应用商店",yum命令安装软件。

yum命令

yum:RPM包软件管理器,用于自动化安装配置Linux软件,并可以自动解决依赖问题。RPM类似于Windows的.exe、Mac的.pkg,是软件安装包,但直接使用yum更简单高效。

语法:yum [-y] [install | remove | search] 软件名称

  • 选项:-y,自动确认,无需手动确认安装或卸载过程
  • install:安装
  • remove:卸载
  • search:搜索

yum命令需要root权限和联网,可以su切换到root,或使用sudo提权。

java 复制代码
yum [-y] install wget  //通过yum命令安装wget程序
yum [-y] remove wget   //通过yum命令卸载wget程序
yum search wget        //通过yum命令,搜索是否有wget安装包

如果yum不能用,参考该文章进行修改:

【linux】已加载插件:fastestmirror, langpacks Loading mirror speeds from cached hostfile_已加载插件:fastestmirror, langpacks loading mirror spee-CSDN博客文章浏览阅读4.1w次,点赞95次,收藏206次。已加载插件:fastestmirror, langpacks File contains no section headers. file: file:///etc/yum.repos.d/con安装好CenOS7后,自带的yum不能直接使用,使用会出现如下问题:已加载插件:fastestmirror, langpacks File contains no section headers. file: file:///etc/yum.repos.d/convirt.repo, line: 1 "<_已加载插件:fastestmirror, langpacks loading mirror speeds from cached hostfihttps://blog.csdn.net/Black_Customer/article/details/109697775https://blog.csdn.net/Black_Customer/article/details/109697775https://blog.csdn.net/Black_Customer/article/details/109697775https://blog.csdn.net/Black_Customer/article/details/109697775扩展:apt命令

前面学习的各类Linux命令,都是通用的。但是软件安装,CentOS系统和Ubuntu是使用不同的包管理器,CentOS使用yum管理器,Ubuntu使用apt管理器。通过前面学习的WSL环境,我们可以得到Ubuntu运行环境。

语法: apt [ -y] [ install | remove | search ] 软件名称

用法和yum一致,同样需要root权限

java 复制代码
apt  install  wget,安装wget
apt  remove  wget,移除wget
apt   search  wget,搜索wget

CentOS的安装包是.rpm文件,使用yum命令安装,而Ubuntu的安装包是.deb文件,使用apt命令安装。

软件操作命令

systemctl

Linux系统很多软件(内置或第三方)均支持使用systemctl命令控制:启动、停止、开机自启。能够被systemctl管理的软件,一般也称为"服务"。

语法:systemctl start | stop | status | enable | disable 服务名

  • start:启动
  • stop:关闭
  • status:查看状态
  • enable:开启开机自启
  • disable:关闭开机自启

系统内置的服务比较多,比如:

  • NetworkManager,主网络服务
  • network,副网络服务
  • firewalld,防火墙服务
  • sshd,ssh服务(FinalShell远程登录Linux使用的就是这个服务)

除了内置的服务之外,部分第三方软件以systemctl进行控制

  • yum install -y ntp,安装ntp软件,可以通过ntpd 服务名,配合systemctl进行控制
  • yum install -y httpd,安装apache服务器软件,可以通过httpd 服务器名,配合systemctl进行控制
java 复制代码
[root@192 ~]# yum install ntp         // 使用yum安装ntp服务
[root@192 ~]# systemctl status ntpd   // 检查ntpd服务状态
[root@192 ~]# systemctl start ntpd    // 启动ntpd服务
[root@192 ~]# systemctl enable ntpd   // 设置ntpd服务开机自启动
// 系统创建自启动链接,将ntpd服务添加到多用户目标启动列表
Created symlink from /etc/systemd/system/multi-user.target.wants/ntpd.service to /usr/lib/systemd/system/ntpd.service.

部分软件可以以systemctl进行控制是因为安装后自动集成到systemctl中,而部分软件安装后没有自动集成到systemctl中,后续会讲解如何手动添加。

软链接

上文我们介绍过ls列出的文件类型分为三种:d、~、l,软连接就是l。

在系统中创建软链接,可以将文件、文件夹链接到其它位置。类似于Windows系统的快捷方式,文件本体不动,软链接指向本体。

语法:ln -s 参数1 参数2

  • -s选项,创建软链接
  • 参数1:被链接的文件或文件夹
  • 参数2:要链接去的目的地
java 复制代码
//创建一个符号链接,将 /etc/yum.conf 文件链接到家目录下的 yum.conf
ln -s /etc/yum.conf ~/yum.conf

//创建一个符号链接,将 /etc/yum 文件夹链接到家目录下的 yum
//这样做可以在家目录下方便地访问和修改yum配置文件和目录
ln -s /etc/yum ~/yum

日期和时区

date命令

可以通过date命令在命令行中查看系统的时间,并可以格式化显示形式以及日期计算

语法:date [-d] [+格式化字符串]

  • -d:按照给定的字符串显示日期,一般用于日期计算
  • 格式化字符串:通过特定的字符串标记,来控制显示的日期格式
    • %Y:年
    • %y:年份后两位数字(00~99)
    • %m:月份(01~12)
    • %d:日(01~31)
    • %H:小时(00~23)
    • %M:分钟(00~59)
    • %S:秒(00~60)
    • %s:自1970-01-01 00:00:00 UTC到现在的秒数
java 复制代码
//显示当前日期和时间,包括年、月、日、星期和时分秒,以及时区(PST)
[chen@192 ~]$ date    //使用date命令本体,无选项,直接查看时间
2025年 02月 08日 星期六 00:46:52 PST

//使用date命令的格式化选项,以YYYY-MM-DD格式显示当前日期
[chen@192 ~]$ date +%Y-%m-%d
2025-02-08

//使用date命令的格式化选项,以YYYY-MM-DD HH:MM:SS格式显示当前日期和时间
[chen@192 ~]$ date "+%Y-%m-%d %H:%M:%S" //由于中间带有空格,所以使用双引号包围格式化字符串,作为整体。
2025-02-08 00:48:52

-d选项,可以按照给定的字符串显示日期,一般用于日期计算:

java 复制代码
date -d "+1 day" +%Y%m%d    //显示后一天的日期
date -d "-1 day" +%Y%m%d    //显示前一天的日期
date -d "-1 month" +%Y%m%d  //显示上个月的日期
date -d "+1 month" +%Y%m%d  //显示下个月的日期
date -d "-1 year" +%Y%m%d   //显示前一年的日期
date -d "+1 year" +%Y%m%d   //显示下一年的日期

其中支持的时间标记为:

  • year:年
  • month:月
  • day:天
  • hour:小时
  • minute:分钟
  • second:秒

修改Linux时区

通过date查看的日期时间为系统默认时区UTC时间,而非中国的东八区时间,我们可以通过使用root权限,执行如下命令,修改时区为东八区时区:

java 复制代码
rm -f /etc/localtime
sudo ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

将系统自带的localtime文件删除,并将/usr/share/zoneinfo/Asia/Shanghai文件链接为localtime文件即可。

ntp程序

我们可以通过上文介绍过的ntp程序自动校准系统时间

java 复制代码
//安装ntp:
yum -y install ntp
//启动并设置开机自启:
systemctl start ntpd
systemctl enable ntpd
//当ntpd启动后会定期的帮助我们联网校准系统的时间

也可以手动校准(需要root权限):ntpdate -u ntp.aliyun.com,通过阿里云提供的服务网址配合ntpdate(安装ntp后会附带这个命令)命令自动校准。

IP地址、主机名

IP地址

每一台联网的电脑都会有一个地址,用于和其它计算机进行通讯。IP地址主要有2个版本,V4版本和V6版本(V6很少用,课程暂不涉及)。IPv4版本的地址格式是:a.b.c.d,其中abcd表示0~255的数字,如192.168.88.101就是一个标准的IP地址。

上文我们就通过ifconfig命令来查看主机IP地址,如无法使用ifconfig命令,可以安装:yum -y install net-tools:

java 复制代码
[root@192 ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500    //主网卡
        inet 192.168.235.131  netmask 255.255.255.0  broadcast 192.168.235.255
        ......

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536                   //本地回环网卡
        ......

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500           //虚拟机专用网卡
        ......

除了标准的IP地址以外,还有几个特殊的IP地址需要我们了解:

  • 127.0.0.1,这个IP地址用于指代本机
  • 0.0.0.0,特殊IP地址
    • 可以用于指代本机;
    • 可以在端口绑定中用来确定绑定关系(后续介绍);
    • 在一些IP地址限制中,表示所有IP的意思,如放行规则设置为0.0.0.0,表示允许任意IP访问。

主机名

每一台电脑除了对外联络地址(IP地址)以外,也可以有一个名字,称之为主机名。无论是Windows或Linux系统,都可以给系统设置主机名:

可使用hostname命令来查看主机名。同样,Linux的主机名也可修改,在Linux中可使用"hostnamectl set-hostname 主机名"修改主机名(需要root)。

java 复制代码
// 获取当前主机名
[root@192 ~]# hostname
192.168.235.131

// 使用hostnamectl命令设置新的主机名为"centos"
[root@192 ~]# hostnamectl set-hostname centos

// 再次获取主机名,确认更改已生效
[root@192 ~]# hostname
centos

此时重新连接Linux就可发现主机名已改变:[chen@centos ~]$ ,其中chen为用户,centos为主机名。

域名解析

IP地址并不方便记忆,实际上我们平时都是通过字符化的地址去访问服务器,很少指定IP地址。比如我们在浏览器内打开:www.baidu.com,会打开百度的网址,其中,www.baidu.com,是百度的网址,我们称之为"域名"。

访问www.baidu.com的流程如下:

即先查看本机的记录(私人地址本),Windows看:C:\Windows\System32\drivers\etc\hosts,Linux看:/etc/hosts,如果没有记录再联网去DNS服务器询问,查询到则成功访问,未查询到则404 not found(网站不存在)。

例如虚拟机的ip地址过于臭长,我们便可以配置主机名映射。以管理员身份运行记事本---进入C:\Windows\System32\drivers\etc\目录---右下角选择所有文件---编辑hosts文件---添加:192.168.235.131 centos,ip地址和主机名记得替换为自己的,此时就已配置完成。

之前FinalShell是通过IP地址连接到的Linux服务器,现在我们就可以通过域名(主机名)连接了,在FinalShell中修改主机ip,再次连接,仍可正常连接:

虚拟机配置固定IP

当前我们虚拟机的Linux操作系统,其IP地址是通过DHCP服务获取的。

DHCP:动态获取IP地址,即每次重启设备后都会获取一次,可能导致IP地址频繁变更。

办公电脑IP地址变化无所谓,但是我们要远程连接到Linux系统,如果IP地址经常变化,我们就要频繁修改适配很麻烦。

同时在刚刚我们配置了虚拟机IP地址和主机名的映射,如果IP地址频繁更改,我们也需要频繁更新映射关系。

综上所述,我们需要IP地址固定下来,不要变化了。

Windows系统在VMware Workstation中配置固定IP需要2大步骤:

一、在VMware Workstation(或Fusion)中配置IP地址网关和网段(IP地址的范围)

二、在Linux系统中手动修改配置文件,固定IP

直接在Linux中右键打开终端,切换到root用户,使用vim编辑/etc/sysconfig/network-scripts/ifcfg-ens33文件,修改为如下内容:

java 复制代码
[chen@centos ~]$ su -
Password: 
Last login: Sat Feb  8 20:34:49 CST 2025 on pts/0
[root@centos ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 //编辑文件
java 复制代码
[root@centos ~]# systemctl restart network    //重启网卡
[root@centos ~]# ifconfig                     //查看相关信息
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.88.111  netmask 255.255.255.0  broadcast 192.168.88.255
        //相关ip已变为指定值
        ......

修改完后记得修改C:\Windows\System32\drivers\etc\hosts中的相关信息。

网络传输

ping命令

可以通过ping命令,检查指定的网络服务器是否是可连通状态。

语法:ping [-c num] ip或主机名

  • 选项:-c,检查的次数num,不使用-c选项,将无限次数持续检查
  • 参数:ip或主机名,被检查的服务器的ip地址或主机名地址
java 复制代码
//执行 ping 命令测试到 baidu.com 的网络连接,限制发送 ICMP 数据包的数量为 3
[chen@centos ~]$ ping -c 3 baidu.com
PING baidu.com (39.156.66.10) 56(84) bytes of data.

// 接收到的来自 39.156.66.10 的 ICMP 回应,显示序列号 icmp_seq、生存时间 ttl 和往返时间 time
64 bytes from 39.156.66.10 (39.156.66.10): icmp_seq=1 ttl=128 time=25.0 ms
64 bytes from 39.156.66.10 (39.156.66.10): icmp_seq=2 ttl=128 time=25.1 ms
64 bytes from 39.156.66.10 (39.156.66.10): icmp_seq=3 ttl=128 time=24.9 ms

// 显示 ping 命令的统计信息
// 包括传输的包数、接收的包数、丢包率和总耗时
// 以及往返时间 (rtt) 的最小值、平均值、最大值和标准偏差
--- baidu.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 24.975/25.068/25.158/0.197 ms

wget命令

wget是非交互式的文件下载器,可以在命令行内下载网络文件

语法:wget [-b] url

  • 选项:-b,可选,后台下载,会将日志写入到当前工作目录的wget-log文件
  • 参数:url,下载链接

//下载apache-hadoop 3.3.0版本:

wget http://archive.apache.org/dist/hadoop/common/hadoop-3.3.0/hadoop-3.3.0.tar.gz

//在后台下载:

wget -b http://archive.apache.org/dist/hadoop/common/hadoop-3.3.0/hadoop-3.3.0.tar.gz

//通过tail命令可以监控后台下载进度:

tail wget-log

//持续跟踪下载进度

tail -f wget-log

curl命令

curl可以发送http网络请求,可用于:下载文件、获取信息等。

语法:curl [-O] url

  • 选项:-O,用于下载文件,当url是下载链接时,可以使用此选项保存文件
  • 参数:url,要发起请求的网络地址
java 复制代码
//查询当前 IP 地址的地理位置和运营商信息
[chen@centos ~]$ curl cip.cc

IP      : 223.89.159.96
地址    : 中国  河南  驻马店
运营商  : 移动

数据二  : 中国河南驻马店 | 移动

数据三  : 中国河南省驻马店市 | 移动

URL     : http://www.cip.cc/223.89.159.96

//访问 baidu.com,返回的是一个重定向页面
[chen@centos ~]$ curl baidu.com

<html>
<meta http-equiv="refresh" content="0;url=http://www.baidu.com/">
</html>

//通过curl下载hadoop-3.3.0安装包:
[chen@centos ~]$ curl -Ohttp://archive.apache.org/dist/hadoop/common/hadoop-3.3.0/hadoop-3.3.0.tar.gz
% Total % Received % Xferd Average Speed Time Time Time Current
                           Dload Upload Total Spent Left Speed
35  477M  35  169M  0  0   9.8M  0  0:00:48  0:00:17  0:00:31  10.9M

端口

端口,是设备与外界通讯交流的出入口。端口可以分为:物理端口和虚拟端口两类。

  • 物理端口:又可称之为接口,是可见的端口,如USB接口,RJ45网口,HDMI端口等。
  • 虚拟端口:是指计算机内部的端口,是不可见的,是用来操作系统和外部进行交互使用的。

计算机程序之间的通讯,通过IP只能锁定计算机,但是无法锁定具体的程序。但如果两台计算机上的qq想要相互通讯ip则不够精确,需通过端口来交互,通过端口可以锁定计算机上具体的程序,确保程序之间进行沟通。

IP地址相当于小区地址,在小区内可以有很多住户(程序),而门牌号(端口)就是各个住户(程序)的联系地址

Linux系统支持65535个端口,这些端口分为3类进行使用

  1. 公认端口:1~1023,通常用于一些系统内置或知名程序的预留使用,如SSH服务的22端口,HTTPS服务的443端口,非特殊需要,不要占用这个范围的端口
  2. 注册端口:1024~49151,通常可以随意使用,用于松散的绑定一些程序\服务。(用户自定义)
  3. 动态端口:49152~65535,通常不会固定绑定程序,而是当程序对外进行网络链接时,用于临时使用。(多用于出口)

如上图中,计算机A的微信连接计算机B的微信,A使用的50001端口即动态端口,临时找一个端口作为出口,计算机B的微信使用端口5678,即注册端口,长期绑定此端口等待别人连接。

我们还可以通过Linux命令去查看端口的占用情况

nmap命令

可以通过nmap命令查看端口的占用情况,使用nmap前需先安装,执行命令:"yum -y install nmap"。

语法:nmap 被查看的IP地址

java 复制代码
[root@centos ~]# nmap 127.0.0.1

Starting Nmap 6.40 ( http://nmap.org ) at 2025-02-08 21:30 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000040s latency).
Not shown: 995 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
25/tcp   open  smtp
111/tcp  open  rpcbind
631/tcp  open  ipp
6000/tcp open  X11

Nmap done: 1 IP address (1 host up) scanned in 0.04 seconds

z可以看到,本机(127.0.0.1)上有5个端口现在被程序占用了。其中22端口一般是SSH服务使用,即FinalShell远程连接Linux所使用的端口。

netstat命令

可以通过netstat命令查看指定端口的占用情况,使用netstat前同样需先安装,执行命令:"yum -y install net-tools"。

语法:netstat -anp|grep 端口号

java 复制代码
//查看本机指定端口号的占用情况
[root@centos ~]# netstat -anp | grep 6000
tcp        0      0 0.0.0.0:6000            0.0.0.0:*               LISTEN      7536/X              
tcp6       0      0 :::6000                 :::*                    LISTEN      7536/X  
//可以看到当前系统的6000端口被程序(进程号7536)占用了。
//其中,0.0.0.0:6000,表示端口绑定在0.0.0.0这个IP地址上,表示允许外部访问。

进程管理

程序运行在操作系统中,是被操作系统所管理的。为管理运行的程序,每一个程序在运行的时候,便被操作系统注册为系统中的一个进程,并为每一个进程都分配一个独有的:进程ID(进程号)。

ps:查看进程

可以通过ps命令查看Linux系统中的进程信息

语法:ps [-e -f]

  • 选项:-e,显示出全部的进程
  • 选项:-f,以完全格式化的形式展示信息(展示全部信息)

一般直接使用固定用法:ps -ef 列出全部进程的全部信息:

从左到右分别是:

  • UID:进程所属的用户ID
  • PID:进程的进程号ID
  • PPID:进程的父ID(启动此进程的其它进程)
  • C:此进程的CPU占用率(百分比)
  • STIME:进程的启动时间
  • TTY:启动此进程的终端序号。如显示?,则表示非终端启动
  • TIME:进程占用CPU的时间
  • CMD:进程对应的名称或启动路径或启动命令

还可以使用管道符配合grep来进行过滤来查看指定进程,例如:ps -ef | grep tail,即可准确的找到tail命令的信息

过滤不仅仅过滤名称,进程号\用户ID等等,都可以被grep过滤

如:ps -ef | grep 30001,过滤带有30001关键字的进程信息(一般指代过滤30001进程号)

kill:关闭进程

通过kill命令可以关闭Linux系统中的进程。

语法:kill [-9] 进程ID

  • 选项-9,表示强制关闭进程。不使用此选项会向进程发送信号要求其关闭,但是否关闭看进程自身的处理机制。

主机状态

top命令

可通过top命令来查看CPU、内存使用情况,类似于Windows的任务管理器,默认每5秒刷新一次。

语法:直接输入top即可,按q或Ctrl+c退出

java 复制代码
top - 21:48:29 up  1:15,  4 users,  load average: 0.08, 0.07, 0.12
//top: 命令名称, 21:48:29: 当前系统时间, up 1:15: 系统已经运行了1小时15分钟, 4 users: 4个用户登录, load average: 0.08, 0.07, 0.12: 1、5、15分钟的平均负载分别为0.08、0.07和0.12
Tasks: 222 total,   3 running, 219 sleeping,   0 stopped,   0 zombie
//Tasks: 进程状态, 222 total: 总共有222个进程, 3 running: 3个进程正在运行, 219 sleeping: 219个进程正在睡眠, 0 stopped: 0个进程已停止, 0 zombie: 0个僵尸进程
%Cpu(s):  1.7 us,  3.4 sy,  0.0 ni, 95.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
//%Cpu(s): CPU使用率, 1.7 us: 用户空间占用CPU的1.7%, 3.4 sy: 系统空间占用CPU的3.4%, 0.0 ni: 高优先级进程占用CPU时间的0.0%, 95.0 id: CPU空闲率95.0%, 0.0 wa: IO等待占用CPU的0.0%, 0.0 hi: 硬件中断占用CPU的0.0%, 0.0 si: 软件中断占用CPU的0.0%, 0.0 st: 虚拟化环境中其他操作系统占用CPU的0.0%
KiB Mem :   995896 total,    63104 free,   618544 used,   314248 buff/cache
//KiB Mem: 物理内存使用情况, 995896 total: 总共995896 KiB, 63104 free: 空闲63104 KiB, 618544 used: 已使用618544 KiB, 314248 buff/cache: 缓冲区和缓存占用314248 KiB
KiB Swap:  2098172 total,  2040836 free,    57336 used.   157196 avail Mem 
//KiB Swap: 交换空间使用情况, 2098172 total: 总共2098172 KiB, 2040836 free: 空闲2040836 KiB, 57336 used: 已使用57336 KiB, 157196 avail Mem: 可用内存157196 KiB

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                 
  9626 chen      20   0  159028   2436    720 S  1.0  0.2   0:26.56 sshd                                    
  6463 root      20   0  320028   2056   1576 S  0.3  0.2   0:06.06 vmtoolsd                                
  9622 root      20   0  158712   2336   1000 S  0.3  0.2   0:02.74 sshd     

内容较多,我们只需要关注第三行的用户CPU和系统CPU占用率即可。后续的各项值:

  • PID:进程ID
  • USER:进程所属用户
  • PR:进程优先级,越小越高
  • NI:负值表示高优先级,正值表示低优先级
  • VIRT:进程使用虚拟内存,单位KB
  • RES:进程使用物理内存,单位KB
  • SHR:进程使用共享内存,单位KB
  • S:进程状态(S:休眠,R:运行,Z:僵死状态,N:负数优先级,I:空闲状态)
  • %CPU:进程占用CPU率
  • %MEM:进程占用内存率
  • TIME+:进程使用CPU时间总计,单位10毫秒
  • COMMAND:进程的命令或名称或程序文件路径

同时top命令也支持选项:

  • -p 只显示某个进程的信息
  • -d 设置刷新时间,默认是5s
  • -c 显示产生进程的完整命令,默认是进程名
  • -n 指定刷新次数,比如top -n 3:刷新输出3次后退出
  • -b 以非交互非全屏模式运行,以批次的方式执行top,一般配合-n指定输出几次统计信息,将输出重定向到指定文件,比如:top -b -n 3 > /tmp/top.tmp
  • -i 不显示任何闲置(idle)或无用(zombie)的进程
  • -u 查找特定用户启动的进程

当top以交互式运行(非-b选项启动),可以用以下交互式命令进行控制

  • h键 会显示帮助画面
  • c键 会显示产生进程的完整命令,等同于-c参数,再次按下c键,变为默认展示
  • f键 可以选择需要展示的项目
  • M键 根据驻留内存大小(RES)排序
  • P键 根据CPU使用百分比大小进行排序
  • T键 根据时间/累计时间进行排序
  • E键 切换顶部内存显示单位
  • e键 切换进程内存显示单位
  • l键 切换显示平均负载和启动时间信息
  • i键 不显示闲置或无用的进程,等同于-i参数,再次按下,变为默认显示
  • t键 切换显示CPU状态信息
  • m键 切换显示内存信息

磁盘信息监控

df命令

可以通过df命令查看硬盘的使用情况。

语法:df [-h]

  • -h,以更加人性化的单位显示
iostat命令

可以查看CPU、磁盘的相关信息

语法:iostat [-x][num1][num2]

  • 选项:-x,显示更多信息
  • num1:数字,刷新间隔
  • num2:数字,刷新几次

该设备每秒的传输次数(Indicate the number of transfers per second that were issued to the device.)。"一次传输"意思是"一次I/O请求"。多个逻辑请求可能会被合并为"一次I/O请求"。"一次传输"请求的大小是未知的。

使用iostat的-x选项,可以显示更多的信息

  • rrqm/s:每秒这个设备相关的读取请求有多少被Merge了(当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge,提高IO利用率,避免重复调用)
  • wrqm/s:每秒这个设备相关的写入请求有多少被Merge了
  • rsec/s:每秒读取的扇区数;sectors
  • wsec/s:每秒写入的扇区数;sectors
  • rKB/s:每秒发送到设备的读取请求数
  • wKB/s:每秒发送到设备的写入请求数
  • avgrq-sz:平均请求扇区的大小
  • avgqu-sz:平均请求队列的长度。毫无疑问,队列长度越短越好。
  • await:每一个IO请求的处理的平均时间(单位是微妙毫秒)
  • svctm:表示平均每次设备I/O操作的服务时间(以毫秒为单位)
  • %util:磁盘利用率
sar命令

可查看网络的相关统计(sar命令非常复杂,这里仅简单用于统计网络)

语法:sar -n DEV num1 num2

  • 选项:-n ,查看网络,DEV表示查看网络接口
  • num1:刷新间隔(不填就查看一次结束)
  • num2:查看次数(不填无限次数)
java 复制代码
//每3秒收集一次网络设备的统计信息,总共收集1次,并最终汇总平均记录
[root@centos ~]# sar -n DEV 3 1
Linux 3.10.0-957.el7.x86_64 (centos)    02/08/2025      _x86_64_        (1 CPU)

10:17:00 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
10:17:03 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
10:17:03 PM virbr0-nic      0.00      0.00      0.00      0.00      0.00      0.00      0.00
10:17:03 PM    virbr0      0.00      0.00      0.00      0.00      0.00      0.00      0.00
10:17:03 PM     ens33     20.95     32.09      1.60      8.26      0.00      0.00      0.00

Average:        IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
Average:           lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:    virbr0-nic      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:       virbr0      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:        ens33     20.95     32.09      1.60      8.26      0.00      0.00      0.00
[root@centos ~]# 

各项信息的含义:

  • IFACE:本地网卡接口的名称
  • rxpck/s:每秒钟接收的数据包
  • txpck/s:每秒钟发送的数据包
  • rxKB/s:每秒钟接收的数据包大小,单位为KB
  • txKB/s:每秒钟发送的数据包大小,单位为KB
  • rxcmp/s:每秒钟接收的压缩数据包
  • txcmp/s:每秒钟发送的压缩数据包
  • rxmcst/s:每秒钟接收的多播数据包

环境变量

在讲解which命令的时候,我们知道使用的一系列命令其实本质上就是一个个的可执行程序。比如,cd命令的本体就是:/usr/bin/cd这个程序文件。

之所以无论当前工作目录在哪里,都能执行:/usr/bin/cd这个程序,就是借助环境变量中PATH这个项目的值来做到的。

环境变量是操作系统(Windows、Mac、Linux)在运行的时候,记录的一些关键性信息,用以辅助系统运行。环境变量是一种KeyValue型结构,即名称和值。可以在Linux系统中执行"env"命令即可查看当前系统中记录的环境变量。

PATH记录了系统执行任何命令的搜索路径,如上图记录了多条路径(路径之间以:隔开),

当执行任何命令,都会按照顺序,从上述路径中搜索要执行的程序的主体。

比如执行cd命令,就从第二个目录/usr/bin中搜索到了cd命令,并执行。

$符号

在Linux系统中,符号被用于取"变量"的值。环境变量记录的信息,除了给操作系统自己使用外,如果我们想要取用,也可以使用。取得环境变量的值就可以通过语法:环境变量名 来取得。

比如:echo $PATH,就可以获得PATH这个环境变量的值,并通过echo语句输出出来。当和其它字符串混合在一起的时候,可以通过{}来标注取的变量是谁。

java 复制代码
[root@centos ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@centos ~]# echo {$PATH}Hello world!
{/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin}Hello world!

自行设置环境变量

Linux环境变量可以用户自行设置,其中分为:

  • 临时设置,语法:export 变量名=变量值
  • 永久生效,语法相同,但需在对应文件内配置
    • 针对当前用户生效、配置在当前用户的:~/bashrc文件中
    • 针对所有用户生效、配置在系统的:/etc/profile文件中
    • 并通过语法:source 配置文件,进行立刻生效,或重新登录FinalShell生效

环境变量PATH这个项目里面记录了系统执行命令的搜索路径,这些搜索路径我们也可以自行添加到PATH中去。

测试:

  • 在当前HOME目录内创建文件夹,myenv,在文件夹内创建文件mkhaha
  • 通过vim编辑器,在mkhaha文件内填入:echo hahaha
  • 完成上述操作后,随意切换工作目录,执行mkhaha命令尝试一下,会发现无法执行。

修改PATH的值

  • 临时修改PATH:export PATH=$PATH:/home/chen/myenv,再次执行mkhaha,无论在哪里都能执行了
  • 或将export PATH=$PATH:/home/chen/myenv填入用户环境变量文件或系统环境变量文件中去

上传、下载

下载

我们可以通过FinalShell工具,方便的和虚拟机进行数据交换。在FinalShell软件的下方窗体中,提供了Linux的文件系统视图,可以方便的:

  • 浏览文件系统,找到合适的文件,右键点击下载,即可传输到本地电脑
  • 浏览文件系统,找到合适的目录,将本地电脑的文件拓展进入,即可方便的上传数据到Linux中

下方的窗口只能以普通用户的权限查看,因为在连接时我们输入的账户就是普通用户账户,想要查看更多修改账户即可:

上传

更简单,直接从win中拖动文件到下方窗口的对应位置即可。

rz、sz命令

除了通过FinalShell的下方窗体进行文件的传输以外,也可以通过rz、sz命令进行文件传输。rz、sz命令需要安装,可以通过:yum -y install lrzsz,即可安装。

  • rz命令,进行上传,语法:直接输入rz即可。
  • sz命令,进行下载,语法:sz 要下载的文件

文件会自动下载到桌面的fsdownload文件夹中。

压缩、解压

市面上有非常多的压缩格式:

  • zip格式:Linux、Windows、MacOS系统常用
  • 7zip格式:Windows系统常用
  • rar格式:Windows系统常用
  • tar格式:Linux、MacOS系统常用
  • gzip格式:Linux、MacOS系统常用

在Windows系统中常用的软件如:winrar、bandizip等软件,都支持各类常见的压缩格式,这里不多做讨论。我们现在要学习,如何在Linux系统中操作:tar、gzip、zip这三种压缩格式完成文件的压缩、解压操作。

tar命令

Linux和Mac系统常用有2种压缩格式,后缀名分别是:

  • .tar,称之为tarball,归档文件,即简单的将文件组装到一个.tar的文件内,并没有太多文件体积的减少,仅仅是简单的封装。
  • .gz,也常见为.tar.gz,gzip格式压缩文件,即使用gzip压缩算法将文件压缩到一个文件内,可以极大的减少压缩后的体积。

针对这两种格式,使用tar命令均可以进行压缩和解压缩的操作。

语法:tar [-c -v -x -f -z -C] 参数1 参数2 ... 参数N

  • -c,创建压缩文件,用于压缩模式
  • -v,显示压缩、解压过程,用于查看进度
  • -x,解压模式
  • -f,要创建的文件,或要解压的文件,-f选项必须在所有选项中位置处于最后一个
  • -z,gzip模式,不使用-z就是普通的tarball格式
  • -C,选择要解压的目的地,用于解压模式

tar命令压缩

tar的常用组合为:

  • tar -cvf test.tar 1.txt 2.txt 3.txt:将1.txt 2.txt 3.txt压缩到test.tar文件内
  • tar -zcvf test.tar.gz 1.txt 2.txt 3.txt:将1.txt 2.txt 3.txt压缩到test.tar.gz文件内,使用gzip模式

注意:

-z选项如果使用的话,一般处于选项位第一个

-f选项,必须在选项位最后一个

tar命令解压

常用的tar解压组合有:

  • tar -xvf test.tar:解压test.tar,将文件解压到当前目录
  • tar -xvf test.tar -C /home/chen:解压test.tar,将文件解压至指定目录
  • tar -zxvf test.tar.gz -C /home/chen:以Gzip模式解压test.tar.gz,将文件解压至指定目录

注意:

-f选项,必须在选项组合体的最后一位

-z选项,建议在开头位置

-C选项单独使用,和解压所需的其它参数分开

zip、unzip命令

zip命令压缩文件

可以使用zip命令,压缩文件为zip压缩包

语法:zip [-r] 参数1 参数2 ... 参数N

  • -r,被压缩的包含文件夹的时候,需要使用-r选项,和rm、cp等命令的-r效果一致

示例:

  • zip test.zip a.txt b.txt:将a.txt b.txt c.txt压缩到test.zip文件内
  • zip -r test.zip test itheima a.txt:将 test itheima两个文件夹和a.txt文件,压缩到test.zip文件内
unzip命令解压文件

使用unzip命令,可以方便的解压zip压缩包

语法:unzip [-d] 参数

  • -d,指定要解压去的位置,同tar的-C选项
  • 参数,被解压的zip压缩包文件

示例:

  • unzip test.zip:将test.zip解压到当前目录
  • unzip test.zip -d /home/chen:将test.zip解压到指定文件夹内

实战软件部署

MySQL数据库

MySQL数据库管理系统(后续简称MySQL),是一款知名的数据库系统,其特点是:轻量、简单、功能丰富。MySQL数据库可谓是软件行业的明星产品,无论是后端开发、大数据、AI、运维、测试等各类岗位,基本上都会和MySQL打交道。

让我们从MySQL开始,进行实战的Linux软件安装部署。

本次课程分为2个版本进行安装:MySQL 5.7版本安装、MySQL 8.x版本安装。由于MySQL 5.x和MySQL 8.x各自有许多使用者,所以这两个版本我们都演示安装一遍。

//未完待续

相关推荐
matlab的学徒12 小时前
Web与Nginx网站服务(改)
linux·运维·前端·nginx·tomcat
Insist75312 小时前
prometheus安装部署与alertmanager邮箱告警
linux·运维·grafana·prometheus
ZHANG8023ZHEN13 小时前
fMoE论文阅读笔记
论文阅读·笔记
BAGAE13 小时前
MODBUS 通信协议详细介绍
linux·嵌入式硬件·物联网·硬件架构·iot·嵌入式实时数据库·rtdbs
灿烂阳光g13 小时前
SELinux 策略文件编写
android·linux
xqlily13 小时前
Linux操作系统之Ubuntu
linux·运维·ubuntu
阿部多瑞 ABU13 小时前
《基于国产Linux的机房终端安全重构方案》
linux·安全
Ro Jace13 小时前
文献阅读笔记:R&S电子战测试与测量技术文档
笔记
倔强的石头10613 小时前
【Linux指南】Makefile入门:从概念到基础语法
linux·运维·服务器
ajassi200014 小时前
linux C 语言开发 (七) 文件 IO 和标准 IO
linux·运维·服务器