Linux
虚拟机
- 什么是虚拟机?
通过虚拟化技术,在电脑内,虚拟出计算机硬件,并给虚拟的硬件安装操作系统,即可得到一台虚拟的电脑,称之为虚拟机。 - 为什么要使用虚拟机?
学习Linux系统,需要有Linux系统环境。
我们不能给自己电脑重装系统为Linux,所以通过虚拟机的形式,得到可以用的Linux系统环境,供后续学习使用。
安装虚拟化软件VMware WorkStation
官方网址:https://www.vmware.com/products/desktop-hypervisor.html
建议内存不足的选择自定义安装位置
安装完成后检查网络适配器是否正常:
(如win11系统)设置->网络和Internet->相关设置->更多网络适配器选项
(通用步骤)win+r->输入ncpa.cpl
确保打开后能看到:VMnet1和VMnet8,如果没有是有问题的,后续虚拟机会上不了网
解决教程参照:https://blog.csdn.net/Chasingyq/article/details/140215553
使用VMware安装Linux虚拟机
下载CentOS操作系统
首先,我们需要下载操作系统的安装文件,
使用CentOS7.6版本:https://vault.centos.org/7.6.1810/isos/x86_64/ (最后的/不要漏掉)
选择这个=>>CentOS-7-x86_64-DVD-1810.iso 2018-11-25 23:55 4.3G
进入安装的VMware->选择创建新的虚拟机->初学选经典->安装程序光盘映像文件(即下载的CentOS)->设置安装位置
安装完后设置硬盘大小->40G足够->勾选创建后打开虚拟机->完成后设置用户名还有密码
注意使用完虚拟机后请正常关闭,否则下次打开会导致出现如下报错:
该虚拟机似乎正在使用中。 如果该虚拟机未在使用,请按“获取所有权(T)”按钮获取它的所有权。否则,请按“取消(C)”按钮以防损坏。
解决办法:找到CentOS安装目录,找到.lck结尾的文件,删除即可
。
FinalShell
我们使用VMware可以得到Linux虚拟机,但是在VMware中操作Linux的命令行页面不太方便,主要是:
- 内容的复制、粘贴跨越VMware不方便。
- 文件的上传、下载跨越VMware不方便。
- 也就是和Linux系统的各类交互,跨越VMware不方便
我们可以通过第三方软件,FinalShell,远程连接到Linux操作系统之上,并通过FinalShell去操作Linux系统,这样各类操作都会十分的方便。
FinalShell的下载地址为:
Windows:
http://www.hostbuf.com/downloads/finalshell_install.exe
安装时自定义喜欢的安装位置即,安装过程中弹出要安装依赖插件点击确认即可。
连接Linux步骤:
- 在linux桌面中右键,
Open Terminal
输入ifconfig
- 在输出的
ens33
中,有ip地址如192.168.88.128
- 打开FinalShell,点击左上角文件夹->再点击左上角,选择添加
SSH连接(Linux)
- 在输入IP地址,以及输入Linux的用户名和密码->点击右下角确定即可->之后双击这个保存就可以连接
- 验证: 分别在Linux和FinalShell中输入
ls
来对比输出即可 - 之后虚拟机的窗口可以最小化,使用FinalShell来输入命令操作
WSL-Ubuntu
上述虚拟机等方法需要下载大量文件和配置安装步骤,windows系统现在自带WSL可以在系统里再虚拟一个linux系统。使用Ubuntu就可以只需要在windows自带的应用商店(MIcrosoft Store)下载Ubuntu即可
- 在下载之前需要(win11)在控制面板,打开程序,选择启用或关闭WIN功能
- 往下划有一个
适用于Linux的Windows子系统
,勾选它按提示操作即可
之后进入Ubuntu配置好用户名密码等配置信息即可
之后怎么找到Ubuntu?在开始菜单中搜索即可
与虚拟机Linux的区别:Ubnutu纯命令行,无图形化界面
虚拟机快照
用来将当前虚拟机的状态保存下来,在以后通过快照恢复虚拟机到保存的状态
步骤:
- 关机你的虚拟机(不关机快照速度很慢)
- 右键左侧菜单中的虚拟机,选择快照
- 选择快照管理器,里面可以拍摄快照(存档),点击拍摄即可
- 选择拍摄的快照,点击转到(读档),即可回到快照时虚拟机的状态
Linux目录结构
不同于Windows(C盘D盘…),Linux只有一个根路径
Linux的根目录为/ 如/user/local/hello.txt,第一个/表示根目录,后续/为层级关系
在Linux系统中,路径之间的层级关系,使用:/ 来表示
在Windows系统中,路径之间的层级关系,使用:\ 来表
HOME目录:
每个Linux操作用户在Linux系统的个人账户目录,路径在:/home/用户名
如我的Linux用户是xusir, 其HOME目录是:/home/xusir
当前工作目录:
Linux命令行在执行命令的时候,需要一个工作目录, 打开命令行程序 (终端)默认设置工作目录在用户的HOME目录
目录 | 说明 | 作用 |
---|---|---|
/ | 根目录 | 根目录是整个文件系统的起点,所有其他目录和文件都位于根目录之下。 |
/home | 家目录 | 每个用户的个人目录都位于这个目录下,通常以用户名命名。例如,用户john 的主目录路径为/home/john 。 |
/root | root用户的家目录 | 保存root用户的个人数据 |
/boot | 引导文件所在目录 | 保存系统启动时所需的各种文件 |
/usr | User System Resources的简写,说法不唯一 | 存放用户可用的软件和程序文件,也包括了一些共享的数据和库文件。 |
/bin | binary的简写 | 存放系统的基本命令(如ls、cp等)和其余可执行文件。 |
/sbin | system binary的简写 | 存放系统管理和维护方面的二进制文件。 |
/etc | etcetera的简写 | 存放系统的配置文件,包括各种程序的配置文件和系统的全局配置文件。 |
/var | variable的简写 | 存放系统运行时产生的可变数据,如日志文件、数据库文件等。 |
/opt | optional的简写 | 存放一些可选的软件包,通常由用户自行安装。 |
/tmp | temporary的简写 | 存放临时文件,系统会定期清理该目录 |
Linux 基础命令
命令通用格式: command [-options] [paramter]
command: 命令本身
-options: 可选选项,控制命令的行为细节
命令的选项可以组合使用,如:ls -lah
等同于ls -a -l -h
paramter: 可选参数,控制命令的指向目标
列出目录下的内容—ls
ls
: 以平铺形式,列出当前工作目录(默认HOME目录)下的内容(文件和文件夹)
可选选项:-a,-l,-h
-a
选项,表示:all的意思,即列出全部文件(包含隐藏的文件/文件夹)-l
选项,表示:以列表(竖向排列)的形式展示内容,并展示更多信息(权限+用户+用户组+大小+创建时间+文件名)-h
表示以易于阅读的形式,列出文件大小,如K、M、G。该命令必须搭配-l使用
参数: Linux路径
举例:以列表形式查看根目录全部文件:ls -al /
切换工作目录—cd
语法:cd [Linux路径]
- cd命令无需选项,只有参数,表示要切换到哪个目录下
- cd命令直接执行,不写参数,表示回到用户的HOME目录
展示当前工作目录—pwd
我们可以通过pwd命令,来查看当前所在的工作目录。
语法:pwd
- pwd命令,无选项,无参数,直接输入pwd即可
绝对路径和相对路径
绝对路径:以根目录为起点,描述路径的一种写法,路径描述以/开头
相对路径:以当前目录为起点,描述路径的一种写法,路径描述无需以/开头
如当前工作目录/home/xusir 下有Desktop文件夹
相对路径写法:cd Desktop
绝对路径写法:cd /home/xusir/Desktop
特殊路径符
当前工作目录位于:/home/xusir/Desktop
特殊路径符:
.
表示当前目录,比如cd ./Desktop
表示切换到当前目录下的Desktop目录内,和cd Desktop效果一致..
表示上一级目录,比如:cd ..
即可切换到上一级目录,cd ../..
切换到上二级的目录~
表示HOME目录,比如:cd ~
即可切换到HOME目录或cd ~/Desktop
, 切换到HOME内的Desktop目录
创建文件夹—mkdir
语法:mkdir [-p] Linux路径
- 参数必填,表示Linux路径,即要创建的文件夹的路径,相对路径或绝对路径均可
- -p选项可选,表示自动创建不存在的父目录,适用于创建连续多层级的目录
举例(当前工作目录:/home/xusir):
在当前目录创建test文件夹:mkdir ./test
或mkdir /home/xusir/test
创建/home/xusir/Demo/Test/hello(注:/Demo/Test/目录不存在): mkdir -p ./Demo/Test/hello
注意:创建文件夹需要修改权限,请确保操作均在HOME目录内,不要在HOME外操作。涉及到权限问题、HOME外无法成功
创建文件—touch
语法:touch Linux路径
- touch命令无选项,参数必填,表示要创建的文件路径,相对、绝对、特殊路径符均可以使用
分辨文件夹和文件:使用
ls -l
每行第一个符号’d’表示文件夹’-‘表示文件
查看文件内容—cat和more
cat是直接将内容全部显示出来
语法:cat Linux路径
- cat没有选项,只有必填参数,参数表示:被查看的文件路径,相对、绝对、特殊路径符都可以使用
more支持翻页,如果文件内容过多,可以一页页的展示:按空格翻页,b上一页,q退出
语法:more Linux路径
- more没有选项,只有必填参数,参数表示:被查看的文件路径。
如test.txt中写了helloworld:cat test.txt
输出helloworld
复制文件或文件夹—cp
语法:cp [-r] 参数1 参数2
- -r选项,何选,用于复制文件夹使用,表示递归
- 参数1, Linux路径,表示被复制的文件或文件夹
- 参数2,Linux路径,表示要复制去的地方
如将当前工作目录下的test.txt复制一份命名为test2.txt到当前目录:cp test.txt test2.txt
当前目录下的文件夹game复制一份到当前目录下:cp -r game game2
移动文件或文件夹—mv
语法: mv 参数1 参数2
- 参数1,Linux路径,表示被移动的文件或文件夹
- 参数2,Linux路径,表示要移动去的地方,如果目标不存在,则进行改名,确保目标存在
如当前目录/home/xusir/Desktop
下的文件test.txt
移动到/home/xusir/Demo
下
命令:mv test.txt ../Desktop
如果想把test.txt文件移动当前目录下改名为test3.txt
命令:mv test.txt test3.txt
删除文件或文件夹—rm
语法: rm [-r -f] 参数1 参数2 ..参数N
- 同cp命令一样,-r选项用于删除文件夹
- -f表示force,强制删除(不会弹出提示确认信息)
- 普通用户删除内容不会弹出提示,只有root管理员用户删除内容会有提示,所以一般普通用户用不到-f选项
- 参数1、参数2、…、参数N表示要删除的文件或文件夹路径,按照空格隔开
rm命令支持通配符 *
,用来做模糊匹配
- 符号
*
表示通配符,即匹配任意内容(包含空),示例: test*
,表示匹配任何以test开头的内容*test
,表示匹配任何以test结尾的内容*test*
,表示匹配任何包含test的内容
如删除所有以test开头的文件或文件夹:rm -r test*
查找命令—which和find
which是针对命令的查找,比如which cd
会查找cd命令的程序文件在哪里
find命令来搜索指定的文件:
- 按文件名查找文件
语法:find 起始路径 -name "被查找文件名"
查找的文件名支持模糊匹配
如果想再整个系统完成搜索,可以切换到root用户以获得管理员权限
- 执行命令:
su - root
- 输入密码:123456(和你普通用户的密码一样)
- 按文件大小查找文件
语法:find 起始路径 -size +|-n[kMG]
- +、-表示大于和小于
- n表示大小数字
- kMG表示大小单位,k(小写字母)表示kb,M表示MB,G表示GB
- 查找过程中按Ctrl+c 可以停止
示例:
- 查找小于10KB的文件:
find / -size -10k
- 查找大于100MB的文件:
find / -size +100M
- 查找大于1GB的文件:
find / -size +1G
过滤文件内容—grep
可以通过grep命令,从文件中通过关键字过滤文件行。
语法:grep [-n] 关键字 文件路径
- 选项:-n,可选,表示在结果中显示匹配的行的行号。
- 参数:关键字,必填,表示过滤的关键字,带有空格或其它特殊符号,建议使用””将关键字包围起来
- 参数:文件路径,必填,表示要过滤内容的文件路径,可作为内容输入端口
- 查找后匹配到的关键字会高光显示
例如home目录下有个test.txt内容如下:
hnit is a university
university school grade of 2
输入命令:grep -n "hnit" test.txt
输出结果:1:hnit is a university
输入命令:grep "university" test.txt
输出结果:hnit is a university
university school grade of 2
统计内容数量—wc
可以通过WC命令统计文件的行数、单词数量等
语法:wc [-c -m -l -w] 文件路径
- 选项,-c,统计bytes数量
- 选项,-m,统计字符数量
- 选项,-l,统计行数
- 选项,-w,统计单词数量
- 参数,文件路径,被统计的文件,可作为内容输入端口
如果直接输入wc test.txt
输出:2 9 50 test.txt
分别是:行数,单词数,字节大小
管道符的概念和应用
管道符:|
,含义是:将管道符左边命令的结果,作为右边命令的输入
举例:
test.txt内容如下:
hnit is a university
university school grade of 2
输入:cat test.txt | grep hnit
输出:hnit is a university
解释:cat test.txt
的输出结果(文件内容),作为右边grep
命令的输入(被过滤文件)
管道符还可以嵌套如:
统计test.txt文件夹内带university关键字的有多少行:cat test.txt | grep unversity | wc -l
还有:ls | grep test
输出test.txt
还有:ls -l /user/bin | wc -l
可以达到统计文件夹内有多少文件的作用
输出内容—echo
可以使用echo命令在命令行内输出指定内容。语法:echo 输出的内容
- 无需选项,只有一个参数,表示要输出的内容,复杂内容可以用””包围
举例:在终端上显示:Hello Linux1
2[xusir@localhost ~]$ echo "Hello Linux"
Hello Linux
带有空格或\等特殊符号,建议使用双引号包围
因为不包围的话,空格后很容易被识别为参数2
反引号包围的内容会被作为命令执行
看一下如下命令:echo pwd
1
2[xusir@localhost ~]$ echo pwd
pwd
本意是想,输出当前的工作路径,但是pwd被作为普通字符输出了。
我们可以通过将命令用反引号(通常也称之为飘号)`将其包围
被`包围的内容,会被作为命令执行,而非普通字符1
2[xusir@localhost ~]$ echo `pwd`
/home/itheima
重定向符号—>和>>
重定向符:>和>>
>
,将左侧命令的结果,覆盖写入到符号右侧指定的文件中>>
,将左侧命令的结果,追加写入到符号右侧指定的文件中
演示:1
2
3
4
5
6
7
8
9
10
11
12[xusir@localhost ~]$ echo "Hello Linux" > test.txt
[xusir@localhost ~]$ cat test.txt
Hello Linux
//echo "Hello xusir" > test.txt,再次执行,覆盖新内容
[xusir@localhost ~]$ echo "Hello xusir"> test.txt
[xusir@localhost ~]$ cat test.txt
Hello xusir
//echo "Hello cctv">> test.txt,再次执行,使用>>追加新内容
[xusir@localhost ~]$ echo "Hello cctv">> test.txt
[xusir@localhost ~]$ cat test.txt
Hello xusir
Hello cctv
举例:输出我当前的工作目录并覆写到work.txt文件中1
2
3[xusir@localhost ~]$ echo 我当前的工作目录是`pwd`>work.txt
[xusir@localhost ~]$ cat work.txt
我当前的工作目录是/home/xusir
跟踪文件更改—tail
使用tail命令,可以查看文件尾部内容,跟踪文件的最新更改。
语法:tail [-f -num] Linux路径
- 参数,Linux路径,表示被跟踪的文件路径
- 选项,-f,表示持续跟踪。按Ctrl+C停止跟踪
- 选项,-num,表示,查看尾部多少行,不填默认10行
编辑器—vi/vim
什么是vi/vim编辑器
vim是vi的加强版本,兼容vi的所有指令,不仅能编辑文本,而且还具有 shell程序编辑的功能,可以不同颜色的字体来辨别语法的正确性,极大方便了程序的设计和编辑性。基础命令
vi 文件路径
或vim 文件路径
- 如果文件路径表示的文件不存在,此命令会用于编辑新文件(创建新文件)
- 如果文件路径表示的文件存在,此命令用于编辑已有文件(编辑已有文件)
运行模式:
命令模式,默认的模式,可以通过键盘快捷键控制文件内容
输入模式,通过命令模式进入,可以输入内容进行编辑,按esc退回命令模式
底线命令模式,通过命令模式进入,可以对文件进行保存、关闭等操作
输入vi filename
进入命令模式
命令模式输入iao
进入输入模式
命令模式输入:
进入底线命令模式
命令模式输入:wq
保存并退出
输入模式按ESC键
回到命令模式
底线命令模式输入命令以回车结束运行
回到命令模式
在命令模式下的一些常见快捷键。
模式 | 命令 | 描述 |
---|---|---|
命令模式 | i | 在当前光标位置进入 输入模式 |
命令模式 | a | 在当前光标位置之后进入 输入模式 |
命令模式 | I | 在当前行的开头,进入 输入模式 |
命令模式 | A | 在当前行的结尾,进入 输入模式 |
命令模式 | o | 在当前光标下一行进入 输入模式 |
命令模式 | O | 在当前光标上一行进入 输入模式 |
输入模式 | Esc | 任何情况下输入esc都能回到命令模式 |
命令模式 | 键盘上、键盘k | 向上移动光标 |
命令模式 | 键盘下、键盘j | 向下移动光标 |
命令模式 | 键盘左、键盘h | 向左移动光标 |
命令模式 | 键盘右、键盘l | 向后移动光标 |
命令模式 | θ | 移动光标到当前行的开头 |
命令模式 | $ | 移动光标到当前行的结尾 |
命令模式 | pageup(PgUp) | 向上翻页 |
命令模式 | pangdown(PgDn) | 向下翻页 |
命令模式 | / | 进入搜索模式 |
命令模式 | n | 向下继续搜索 |
命令模式 | N | 向上继续搜索 |
命令模式 | dd | 删除光标所在行的内容 |
命令模式 | ndd | n是数字,表示删除当前光标向下n行 |
命令模式 | yy | 复制当前行 |
命令模式 | nyy | n是数字,复制当前行和下面的n行 |
命令模式 | p | 粘贴复制的内容 |
命令模式 | u | 撤销修改 |
命令模式 | ctrl +r | 反向撤销修改 |
命令模式 | gg | 跳到首行 |
命令模式 | G | 跳到行尾 |
命令模式 | dG | 从当前行开始,向下全部删除 |
命令模式 | dgg | 从当前行开始,向上全部删除 |
命令模式 | d$ | 从当前光标开始,删除到本行的结尾 |
命令模式 | d0 | 从当前光标开始,删除到本行的开头 |
超级管理员—root用户
切换用户
语法:Su [-] [用户名]
-
符号是可选的,表示是否在切换用户后加载环境变量,建议带上- 参数:用户名,表示要切换的用户,用户名也可以省略,省略表示切换到root
- 切换用户后,可以通过exit命令退回上一个用户,也可以使用快捷键:
ctrl + d
- 使用普通用户,切换到其它用户需要输入密码,如切换到root用户
- 使用root用户切换到其它用户,无需密码,可以直接切换如
su - xusir
授权命令—sudo
使用root用户可能会失误给系统带来损害,而sudo命令能为普通命令授权,临时以root身份执行。
语法:sudo 其他命令
- 在其它命令之前,带上sudo,即可为这一条命令临时赋予root授权
- 但是并不是所有的用户,都有权利使用sudo,我们需要为普通用户配置sudo认证
为普通用户配置sudo认证
- 切换到root用户,执行visudo命令,会自动通过vi编辑器打开:/etc/sudoers
- 在文件的最后添加:
xusir ALL=(ALL) NOPASSWD: ALL
- 其中最后的NOPASSWD:ALL表示使用sudo命令,无需输入密码
- 最后通过
:wq
保存 - 切换回普通用户
- 执行的命令前加上sudo,均以root运行
用户和用户组
以下命令需root用户执行
创建用户组:groupadd 用户组名
删除用户组: groupdel 用户组名
创建用户:useradd [-g -d] 用户名
- 选项:-g指定用户的组,不指定-g,会创建同名组并自动加入,指定-g需要组已经存在,如已存在同名组,必须使用-g
- 选项:-d指定用户HOME路径,不指定,HOME目录默认在:/home/用户名
- 例如创建一个xyz用户位于hnit组中,home目录为/home/test111:
useradd xyz -g hnit -d /home/test111
- 一个用户可以有多个组,一个组可以有多个用户
注意:在Linux中创建用户时,默认是没有密码的。
当使用useradd
命令创建一个新用户时,如果不指定密码选项,则该用户在创建后没有密码,并且无法登录系统。
要为用户username
设置密码,可以使用这个命令sudo passwd username
删除用户:userdel [-r] 用户名
- 选项:-r,删除用户的HOME目录,不使用-r,删除用户时,HOME目录保留
查看用户所属组:id [用户名]
- 参数:用户名,被查看的用户,如果不提供则查看自身
修改用户所属组:usermod -aG 用户组 用户名,将来指定用户加入指定用户组
- 如:修改xusir用户到hnit组:
usermod -aG hnit xusir
查看当前系统中有哪些用户:getent passwd
- 查出来有7份信息:用户名:密码(x):用户ID:组ID:描述信息(无用):HOME目录:执行终端(默认bash)
权限信息
认知权限信息
权限细节总共分为10个槽位
第一个槽位:-或d或I
-表示文件
,d表示文件夹
,I表示软链接
第2~4个槽位为所属用户权限:r或- w或- x或-
第5~7个槽位为所属用户组权限:r或- w或- x或-
第8~10个槽位为其它用户权限:r或- w或- x或-
举例:drwxr-xr-x,表示:
这是一个文件夹,首字母d表示
所属用户的权限是:有r有w有x,rwx
所属用户组的权限是:有r无w有x, r-x(-表示无此权限)
其它用户的权限是:有r无w有x,r-x
rwx
r 表示读权限,w 表示写权限,x 表示执行权限
针对文件、文件夹的不同,rwx的含义有细微差别:
r,针对文件可以查看文件内容,针对文件夹,可以查看文件夹内容,如1s命令
w,针对文件表示可以修改此文件,针对文件夹,可以在文件夹内:创建、删除、改名等操作
x, 针对文件表示可以将文件作为程序执行,针对文件夹,表示可以更改工作目录到此文件夹,即cd进入
修改权限—chmod命令
可以使用chmod命令,修改文件、文件夹的权限信息。
注意,只有文件、文件夹的所属用户或root用户可以修改。
语法:chmod [-R] 权限 文件或文件夹
- 选项:-R,对文件夹内的全部内容应用同样的操作
示例:chmod u=rwx,g=rx,o=x hello.txt
,将文件权限修改为:rwxr-x—x
其中:u表示user所属用户权限, g表示group组权限,o表示other其它用户权限chmod -R u=rwx,g=rx,o=x test
, 将文件夹test以及文件夹内全部内容权限设置为:rwxr-x—x
权限的数字序号
权限可以用3位数字来代表,第一位数字表示用户权限,第二位表示用户组权限,第三位表示其它用户权限
数字的细节如下:r记为4,w记为2,x记为1,可以有:
0:无任何权限,即 —-
1:仅有x权限, 即 —X
2:仅有w权限 即-W-
3:有w和x权限即-wX
4:仅有r权限 即 r—
5:有r和×权限 即r-X
6:有r和w权限 即rw-
7:有全部权限 即rwx
举例:chmod 751 test.txt
.751表示:rwx(7)r-x(5)—×(1)
修改文件文件夹所属—chown命令
使用chown命令,可以修改文件、文件夹的所属用户和用户组
普通用户无法修改所属为其它用户或组,所以此命令只适用于root用户执行
语法:chown [-R] [用户][:][用户组] 文件或文件夹
- 选项, -R, 同chmod, 对文件夹内全部内容应用相同规则
- 选项, 用户,修改所属用户
- 选项,用户组,修改所属用户组
示例:
chown root hello.txt
, 将hello.txt所属用户修改为rootchown :root hello.txt
,将hello.txt所属用户组修改为rootchown root:hnit hello.txt
, 将hello.txt所属用户修改为root, 用户组修改为hnitchown -R root tes
t, 将文件夹test的所属用户修改为root并对文件夹内全部内容应用同样规则
快捷键
Ctrl+c 强制停止
某些程序想要强制停止它
命令输入错误 ,退出当前状态Ctrl+d 退出或登出
退出账号登录,如退出root账号
退出一些程序的专属页面,如python编辑环境
注: 不能用于退出vi/vimhistory
可以查看历史输入过的命令
历史命令搜索,通过:!命令前缀,自动执行上一次匹配前缀的命令
也可以:Ctrl+r,输入内容去匹配历史命令
如果搜索到的内容为需要的:回车键直接执行,键盘左右键,可以得到此命令(不执行)光标移动快捷键
ctrl+a,跳到命令开头
ctrl+e,跳到命令结尾
ctrl+键盘左/右键,向左/右跳一个单词清屏
Ctrl+l或输入clear,清空终端内容命令补全:Tab
软件安装
CentOS的软件安装包为.rpm的文件
,安装命令为yum
Ubunut的软件安装包为.deb的文件
,安装命令为apt
yum命令
yum:RPM包软件管理器,用于自动化安装配置Linux软件,并可以自动解决依赖问题。
语法:yum [-y] [install | remove | search] 软件名称
- 选项:-y,自动确认,无需手动确认安装或卸载过程
- install:安装
- remove:卸载
- search:搜索
yum命令需要root权限,可以su切换到root,或使用sudo提权。
yum命令需要联网
举例安装wget
yum install wget
,通过yum命令安装wget程序yum remove wget
,通过yum命令卸载wget命令yum search wget
,通过yum命令,搜索是否有wget安装包
apt命令
语法:apt [-y] [install | remove | search] 软件名称
- 选项:-y,自动确认,无需手动确认安装或卸载过程
- install:安装
- remove:卸载
- search:搜索
控制软件软件的启动和关闭—systemctl命令
Linux系统很多软件(内置或第三方)均支持使用systemctl命令控制:启动、停止、开机自启
能够被systemctl管理的软件,一般也称之为:服务
第三方软件,如果自动注册了可以被systemctl控制,如果没有自动注册,可以手动注册。
语法:systemctl start | stop | status | enable | disable 服务名
- start启动
- stop 关闭
- status 查看状态
- enable开启开机自启
- disable 关闭开机自启
系统内置的服务比较多,比如:
- NetworkManager,主网络服务
- network,副网络服务
- firewalld,防火墙服务
- sshd,ssh服务(FinalShell远程登录Linux使用的就是这个服务)
软连接—ln命令
系统中创建软链接,可以将文件,文件夹链接到其它位置(像快捷方式)
语法 ln -s 参数1 参数2
- -s选项,创建软连接
- 参数1:被链接的文件或文件夹
- 参数2:要链接去的目的地
实例:ln -s /etc/yum.conf ~/yum.conf
ln -s /etc/yum ~/yum
日期和时间
date命令
通过date命令可以在命令行中查看系统的时间
语法:date [-d] [+格式化字符串]
- -d 按照给定的字符串显示日期,一般用于日期计算
- 其支持的时间标记为:
- year年
- month月
- day天
- hour小时
- minute分钟
- second秒
- 格式化字符串:通过特定的字符串标记,来控制显示的日期格式
- %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:00UTC 到现在的秒数
如:按照2024-08-29 10:00:00格式显示日期:date "+%Y-%m-%d %H:%M:%S"
如:显示今天的日期+一天:date -d "+1 day"
修改Linux时区
通过date查看的日期时间是不准确的,因为系统默认时区非中国的东八区.
使用root权限,执行如下命令,修改时区为东八区时区1
2rm -f /etc/localtime
sudo ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
将系统自带的localtime文件删除,并将/usr/share/zoneinfo/Asia/Shanghai文件链接为localtime文件即可
ntp程序
ntp程序可以自动校准系统时间,但需要联网下载
安装ntp:yum -y install ntp
启动并设置开机自启:
systemctl start ntpd
systemctl enable ntpd
当ntpd启动后会定期的帮助我们联网校准系统的时间
也可以手动校准(需root权限):ntpdate -u ntp.aliyun.com
通过阿里云提供的服务网址配合ntpdate(安装ntp后会附带这个命令)命令自动校准
IP地址、主机名
查看本机IP地址:
ifconfig
。
如果无法使用该命令可安装:yum -y install net-tools
来解决特殊IP地址
127.0.0.1:指代本机
0.0.0.0:指代本机,或在放行规则里代表允许任意IP访问查看本机名:输入
hostname
修改主机名:
hostnamectl set-hostname 主机名
配置域名解析(主机名映射)
通过主机名找到对应计算机的IP地址,这就是主机名映射(域名解析)
先从系统本地的记录中去查找,如果找不到就去公开的DNS服务器去查找
本机的记录(私人地址本)
- Windows: C:\Windows\System32\drivers\etc\hosts
- Linux: /etc/hosts
在VMware Workstation中配置Linux系统固定IP地址(用于Windows系统)
在VMware Workstation (或Fusion)中配置IP地址网关和网段(IP地址的范围)
- 打开VMware Workstation的编辑里的虚拟网络编辑器(需要管理员模式运行)
- 在VMnet8 配置子网Ip(192.168.88.00)和子网掩码(255.255.255.0)
- 点击NAT设置,将网关设置为(192.168.88.2)
在Linux系统中手动修改配置文件,固定IP
- 使用vim编辑/etc/sysconfig/network-scripts/ifcfg-ens33文件
- BOOTPROTO=”dhcp” 将dhcp改为static
- 在文档末尾新增如下内容之后保存退出
1 | IPADDR="192.168.88.130" |
- IPADDR为IP地址
- NETMASK为子网掩码固定:255.255.255.0
- GATEWAY网关和VMware虚拟网络编辑器中设置的一致
- DNS1设置为网关即可
- 关闭网卡
systemctl stop network
- 重启网卡
systemctl start network
- 查看IP地址
ifconfig
可以看到今后固定的IP地址 - 去finalshell重写配置一下IP连接就可以了。
网络请求和下载
检查网络—ping命令
可以通过ping命令,检查指定的网络服务器是否是可联通状态
语法:ping [-c num] ip或主机名
- 选项:-C,检查的次数,不使用-C选项,将无限次数持续检查
- 参数:ip或主机名,被检查的服务器的ip地址或主机名地址
如检查到baidu.com是否联通:ping baidu.com
下载网络文件—wget命令
wget是非交互式的文件下载器,可以在命令行内下载网络文件
语法:wget [-b] url
- 选项:-b,可选,后台下载,会将日志写入到当前工作目录的wget-log文件
- 参数:url, 下载链接
监控后台下载进度tail -f wget-log
注意:无论下载是否完成,都会生成要下载的文件,如果下载未完成,及时清理
发送http网络请求—curl命令
curl可以发送http网络请求,可用于:下载文件、获取信息等
语法:curl [-O] url
- 选项:-O, 用于下载文件,当url是下载链接时,可以使用此选项保存文件
- 参数:url, 要发起请求的网络地址
如:curl cip.cc
可以获取自己的公网地址
端口
计算机程序之间的通讯,通过IP只能锁定计算机,但是无法锁定具体的程序。
通过端口可以锁定计算机上具体的程序, 确保程序之间进行沟通
IP地址相当于小区地址,在小区内可以有许多住户(程序)而门牌号(端口)就是各个住户(程序)的联系地址
Linux系统是一个超大号小区,可以支持65535个端口,这6万多个端口分为3类进行使用:
公认端口:1~1023,通常用于一些系统内置或知名程序的预留使用,如SSH服务的22端口,HTTPS服务的443端口.非特殊需要,不要占用这个范围的端口
注册端口:1024~49151,通常可以随意使用,用于松散的绑定一些程序\服务
动态端口:49152~65535,通常不会固定绑定程序,而是当程序对外进行网络链接时,用于临时使用。
查看端口占用
可以通过nmap命令去查看指定IP的对外暴露端口
使用nmap命令,安装nmap:yum -y install nmap
语法:nmap 被查看的IP地址
可以通过netstat命令,查看本机指定端口的占用情况
安装netstat:yum -y install net-tools
语法:netstat -anp | grep 端口号
,就可以知道当前系统xx端口被程序(进程号xxx)占用
进程
每一个程序在运行的时候,便被操作系统注册为系统中的一个:进程
并会为每一个进程都分配一个独有的:进程ID(进程号)
查看进程—ps
linux可以可以通过ps命令查看Linux系统中的进程信息
语法:ps[-e -f]
- 选项:-e, 显示出全部的进程
- 选项:-f, 以完全格式化的形式展示信息(展示全部信息)
一般来说,固定用法就是:ps -ef 列出全部进程的全部信息
UID:进程所属的用户ID
PD:进程的进程号D
PPID:进程的父ID(启动此进程的其它进程)
C:此进程的CPU占用率(百分比)
STIME:进程的启动时间
TTY:启动此进程的终端序号,如显示?,表示非终端启动
TIME:进程占用CPU的时间
CMD:进程对应的名称或启动路径或启动命令
如果想要准确的找到想要的指定进程可以用管道符来过滤ps -ef | grep 关键字
如:ps -ef | grep 进程名或启动时间或PID
关闭进程—kill
在Windows系统中,可以通过任务管理器选择进程后,点击结束进程从而关闭它。
同样,在Linux中,可以通过kill命令关闭进程。
语法:kill [-9] 进程ID
- 选项:-9, 表示强制关闭进程。不使用此选项会向进程发送信号要求其关闭,但是否关闭看进程自身的处理机制。
主机状态监控
查看系统资源占用—top
可以通过top命令查看CPU、内存使用情况,类似于windows的任务管理器
默认每5秒刷新一次
语法:直接输入top,按q或ctrl+c退出
top命令也支持选项:
选项 功能
-p 只显示某个进程的信息
-d 设置刷新时间,默认是5s
-C 显示产生进程的完整命令,默认是进程名
-n 指定刷新次数,比如 top -n 3,刷新输出3次后退出
-b 以非交互非全屏模式运行,以批次的方式执行top,一般配合-n指定输出几次统计信息,将输出重定向到指定文件,比如 top -b -n 3 > /tmp/top.tmp
-i 不显示任何闲置(idle)或无用(zombie)的进程
-u 查找特定用户启动的进程
磁盘信息监控—df和iostat
使用df命令,可以查看硬盘的使用情况
语法:df [-h]
选项:-h,以更加人性化的单位显示可以使用iostat查看CPU、磁盘的相关信息
需要安装软件:yum install sysstat
语法:iostat [-x] [num1] [num2]
- 选项:-x,显示更多信息
- num1:数字,刷新间隔,num2:数字,刷新几次
网络状态监控—sar
可以使用sar命令查看网络的相关统计(sar命令非常复杂,这里仅简单用于统计)
语法:sar -n DEV num1 num2
选项:-n,查看网络,DEV表示查看网络接口
num1:刷新间隔(不填就查看一次结束),num2:查看次数(不填无限次数)
rxKB/s :每秒钟接受的数据包大小,单位为KB
txKB/s :每秒钟发送的数据包大小,单位为KB
环境变量
执行env
即可查看当前系统环境变量(KeyValue型结构)
设置环境变量
设置临时环境变量,语法:export 变量名=值
。如export MYNAME=xnj,取出来:echo $MYNAME
永久生效
针对当前用户生效,配置在当前用户的 ~/bashrc文件中
针对所有用户生效,配置在系统的: /etc/profile文件中
并通过语法:source 配置文件
,进行立刻生效,或重新登录FinalShell生效
环境变量PATH这个项目里面记录了系统执行命令的搜索路径。这些搜索路径我们也可以自行添加到PATH中去。
测试:
在当前HOME目录内创建文件夹,myenv, 在文件夹内创建文件mkhaha
通过vim编辑器,在mkhaha文件内填入:echo 哈哈哈哈哈
完成上述操作后,随意切换工作目录,执行mkhaha命令尝试一下,会发现无法执行
修改PATH的值
临时修改PATH: export PATH=$PATH:/home/xusir/myenv,再次执行mkhaha, 无论在哪里都能执行了
或将export PATH=$PATH:/home/xusir/myenv,填入用户环境变量文件或系统环境变量文件中去
语法export PATH=$PATH:自定义路径
上传、下载
我们可以通过FinalShell工具,方便的和虚拟机进行数据交换。
在FinalShell软件的下方窗体中,提供了Linux的文件系统视图 可以方便的:
浏览文件系统,找到合适的文件, 右键点击下载,即可传输到本地电脑
浏览文件系统,找到合适的目录,将本地电脑的文件拓展进入,即可方便的上传数据到Linux中
当然,除了通过FinalShell的下方窗体进行文件的传输以外,也可以通过rz、SZ命令进行文件传输。
rz、sz命令需要安装,可以通过:yum -y install lrzsz
, 即可安装。
rz命令,进行上传,语法:直接输入rz即可
sz命令进行下载,语法:sz要下载的文件
文件会自动下载到桌面的:fsdownload文件夹中
压缩解压
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 -cvf test.tar 1.txt 2.txt 3.txt
将1.txt 2.txt 3.txt打包到test.tar文件内tar -zcf test.tar.gz 1.txt 2.txt 3.txt
将1.txt 2.txt 3.txt 压缩到test.tar.gz文件内,使用gzip模式
注意:
-Z选项如果使用的话,一般处于选项位第一个
-f选项,必须在选项位最后一个
常用的tar解压组合有tar -xvf test.tar
解压test.tar, 将文件解压至当前目录tar -xvf test.tar -C /home/xusir
解压test.tar, 将文件解压至指定目录(/home/xusir)tar -zxvf test.tar.gz -C /home/xusir
以Gzip模式解压test.tar.gz, 将文件解压至指定目录(/home/xusir)
注意:
-f选项,必须在选项组合体的最后一位
-Z选项,建议在开头位置
-C选项单独使用,和解压所需的其它参数分开
zip命令压缩文件
可以使用zip命令,压缩文件为zip压缩包
语法:zip [-r] 参数1 参数2 ... 参数N
-r,被压缩的包含文件夹的时候,需要使用-r选项,和rm、cp等命令的-r效果一致
示例:zip test.zip a.txt b.txt c.txt
将a.txt b.txt c.txt 压缩到test.zip文件内zip -r test.zip test xusir a.txt
将test、xusir两个文件夹和a.txt文件,压缩到test.zip文件内
使用unzip命令,可以解压zip压缩包
语法:unzip [-d] 参数
-d, 指定要解压去的位置,同tar的-C选项
参数,被解压的zip压缩包文件
示例:unzip test.zip
, 将test.zip解压到当前目录unzip test.zip -d /home/hnit
,将test.zip解压到指定文件夹内(/home/hnit)
安装应用相关
RPM离线安装
可以使用
rpm
命令安装,卸载和查看系统中的应用,具体用法如下安装
- 基本语法:
rpm -ivh 软件包路径
- 选项说明:
- -i: -i=install,安装
- -v: -v=verbose,显示详细信息
- -h: -h=hash,进度条
- 操作示例:安装一个sl的软件
[root@localhost ~]# rpm -ivh sl-5.02-1.el7.x86_64
- 基本语法:
查看
- 基本语法:
rpm -qa
(功能描述:查询所安装的所有rpm软件包 - 选项说明:
- -q: 查询模式
- -a: 表示所有
- 操作示例:查询安装的sl软件
[root@localhost ~]# rpm -qa | grep sl
- 基本语法:
卸载
- 基本语法:
rpm -e 软件包名
- 案例实操:卸载刚刚安装的sl软件
[root@localhost ~]# rpm -e sl-5.02-1.el7.x86_64
- 基本语法:
Yum在线安装
Yum概述
YUM(全称为 Yellowdog Updater Modified)是一个Linux软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,并且可以自动处理依赖关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装,该功能类似在JAVA中使用Maven工具从远程仓库中下载依赖一样,可以自动处理依赖关系。
yum命令
可以使用yum安装和卸载应用,具体用法如下
安装软件包
- 基本语法:
yum [选项] install 软件包名
选项说明
| 选项 | 功能 |
| —— | ——————————- |
| -y | 对所有提问都回答“yes” |案例实操:使用yum在线安装sl软件
- 查询sl软件的包名
可在如下网站搜索Linux中的各种软件包,地址为 https://pkgs.org/ ,搜索sl,并查看对应的Linux发行版,搜索结果为yum install sl
。 - 执行yum安装命令
执行yum install sl
后的结果为原因分析,yum的工作原理是从我们所配置的远程仓库下载rpm包,然后进行安装,远程仓库的配置文件位于1
2没有可用软件包 sl。
错误:无须任何处理/etc/yum.repo.d/
目录中。上述问题的原因就是sl软件的rpm包不在系统预先配置的这些远程仓库中。因此需要先配置sl所在的远程仓库,才可使用yum进行安装,具体操作如下。 - 配置远程仓库
远程仓库可手动配置,也可在线配置,下面在线配置完成后观察1
[root@localhost ~]# yum -y install epel-release
/etc/yum.repo.d/
目录下配置文件的变化。 - 重新安装sl
1
[root@localhost ~]# yum -y install sl
- 查询sl软件的包名
- 基本语法:
卸载软件包
- 基本语法:
yum remove 软件包名
- 案例实操:卸载sl软件
1
[root@localhost ~]# yum remove sl
- 基本语法:
Linux虚拟机时间与网络时间同步
安装时间同步工具chrony
执行以下命令安装chrony
1
yum install chrony
执行以下命令启动chrony,并设置开机自启
1
2systemctl start chronyd
systemctl enable chronyd查看时间源
1
chronyc sources
该命令查询的结果中
- MS:当前事件源的状态
- Name/IP: 时间服务器地址
配置新的时间源
可修改vim /etc/chrony.conf
以增加新的时间源,去搜索国内常用的NTP时间源同步服务器
配置新的时间源时,建议先用ping命令测试一下是否可用!!
再重启服务生效:systemctl restart chronyd
防火墙
关闭防火墙并禁止防火墙开机自启
1
2
3
4
5关闭防火墙
systemctl stop firewalld
禁止防火墙开机自启
systemctl disable firewalld恢复防火墙开机自启
1
systemctl enable firewalld
关闭SElinux
全名Security-Enhanced Linux,是一种用于linux操作系统的安全增强功能。如果当你做项目时,如为保证部署阶段的Nginx能正常工作,此处关闭SElinux功能- 修改SElinux配置文件
打开配置文件修改内容如下1
vim /etc/selinux/config
1
SELINUX=disabled
- 重启操作系统
1
reboot
- 修改SElinux配置文件
配置虚拟机静态IP
NAT模式下,虚拟机的IP地址,默认情况下是由虚拟DHCP服务自动分配的,虚拟机的IP地址不固定,这对于SSH远程访问也不友好,所以通常情况下,我们不使用虚拟DHCP服务,而是手动为虚拟机配置静态的IP地址。具体操作如下。
确定网络配置文件
在终端输入如下命令
ifconfig
命令,查看当前的网络接口,内容如下1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.10.100 netmask 255.255.255.0 broadcast 192.168.10.255
inet6 fe80::5fdd:f01e:a4fb:966 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:fc:a3:fe txqueuelen 1000 (Ethernet)
RX packets 1526 bytes 136998 (133.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1907 bytes 136735 (133.5 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 68 bytes 5916 (5.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 68 bytes 5916 (5.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
ether 52:54:00:ea:8a:fb txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0其中ens33是目前的以太网接口,故其配置文件为
vim /etc/sysconfig/network-scripts/ifcfg-ens33
。修改网络配置文件
打开配置文件1
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
内容如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=bf788989-e095-4e58-865a-e6b07248a514
DEVICE=ens33
ONBOOT=yes需要修改的内容如下
- 修改
BOOTPROTO
参数为static
- 修改
ONBOOT
参数为yes
增加如下内容 下面的ip应该是和你的vmare的设置相同
1
2
3
4IPADDR=192.168.40.100
NETMASK=255.255.255.0
GATEWAY=192.168.40.2
DNS1=192.168.40.2注意事项
IPADDR
需要位于前文VMnet8子网IP范围内,GATEWAY
需要配置为前文的NAT服务的网管IP。
- 修改
重新启动网络服务
在终端执行以下命令,重启network服务1
[root@localhost ~]# systemctl restart network
观察网络配置是否生效
在终端执行ifoconfig
命令,观察ens33
的网络接口的IP地址是否为前文所配置的IPADDR
。
无法连接虚拟机,ifconfig中没有ens33
之前已经配置好网络,能正常使用,突然出现无法连接网络,排除配置问题
具体出现的情况
- 1、无法连接网络,无法连接shell
- 2、ping外网时显示未知的名称或服务ping不同
- 3、service network restart 失败
- 4、ifconfig中没有ens33
ifconfig 只有lo、virbr0,却没有ens33
1
ifconfig ens33 up2
上述命令执行后,ifconfig 是有ens33的了,但它里面没有ip
- 先执行下面步骤
1
2systemctl stop NetworkManager
systemctl disable NetworkManager - 然后激活连接
1
ifup ens33
- 接着重启网络
1
service network restart
- 再次ping即可ping通
- 先执行下面步骤