以下使用的Linux开发版是以CentOS7系统来讲解的,如果大家使用的是Ubuntu系统或者其他的可以挑着看,差距也不会很大。以下是我学习韩顺平老师课程的一些总结,以及添加了一些我不明白的地方,用来记录巩固记忆,后续不完善的地方也会继续补充的,那么就开始吧。
1.虚拟机创建
下载VMware Workstation Pro。
VMware Workstation Pro 是行业标准桌面 Hypervisor,使用它可在 Windows 或 Linux 桌面上运行 Windows、Linux 和 BSD 虚拟机。
2.网络连接
-
桥接模式:直接连接物理网络(容易ip冲突)
-
NAT模式:共享主机的IP地址(不容易ip冲突)
-
主机模式:与主机共享的专用网络
3.克隆快照功能
克隆虚拟机,快照就是记录那一刻的系统,可以让你返回。
4.vmtools共享文件夹
在虚拟机可以修改Windows的文件夹。
5.树状文件目录(重要)
ls -ahl
蓝色代表目录 白色代表普通文件 红色代表压缩包
当文件变成绿色就是可执行文件
- / :根目录,所有文件和子目录都从根目录开始
- /bin :常用命令的二进制可执行文件
- /boot :系统启动所需的文件,如内核、引导管理器(grub等)
- /dev :设备文件,包括硬件和外部设备(如磁盘、打印机、USB 等)
- /etc :配置文件,系统运行所需的各种配置信息
- /home :用户主目录,每个用户在该目录下都有一个独立的子目录
- /lib :共享库文件,存放系统共享的程序库文件
- /media :可移动介质挂载点(U 盘、光驱等)
- /mnt :临时挂载点(CD-ROM、NFS 等)
- /opt :第三方软件安装路径
- /proc :虚拟文件系统,用于存放系统内核运行时产生的各种信息以及进程的相关信息
- /root :超级管理员的主目录
- /run :系统运行时产生的运行数据(如 pid 文件等)
- /sbin :只有超级管理员具有执行权限的命令路径(包括一些高级工具和系统维护工具)
- /srv :服务数据存储位置(如 ftp 服务器)
- /sys :虚拟文件系统,用于访问与内核相关的信息
- /tmp :系统临时目录,存放一些临时数据
- /usr :可分享的只读文件、共享程序和数据
- /var :存放动态变化的文件,如日志文件、邮件、备份等
6.远程登录linux系统(需要知道公网linux的ip地址)
在虚拟机的终端输入ifconfig
在Windows下输入ipconfig
ens33网卡看ipv4地址
测试两台机器网络是否连通:Ping IPV4
-
远程登录,用Xshell6工具命令式操作linux系统
-
远程文件上传或下载,用Xftp6工具
7.vi和vim编辑器(文本编辑器)
概述
Vim(Vi IMproved)编辑器是基于Vi编辑器的一个升级版本,它在功能上比Vi更加强大。以下是Vim和Vi之间的一些主要区别:
1. 用户界面:Vim有更友好的用户界面,包括支持语法高亮、多窗口编辑、标签页和插件系统等功能。
2. 显示效果:Vim支持256色终端显示,可以让文本看起来更好看,并且比Vi更自由地调整字体大小和颜色。
3. 操作方式:Vim提供了很多快捷键、命令行模式和可视模式,使得操作更加方便快捷。
4. 支持文件类型:Vim支持更多种类的文本文件类型,并且可以根据不同类型自动调用不同的语法高亮规则。
5. 编辑效率:Vim通过使用内置宏来实现对重复性任务的自动化处理,可以提高编辑效率。
总而言之,Vim是Vi编辑器的一个改进版本,具有更加强大、灵活和易用的特点。虽然两者在操作体验上有些许不同,但基本语法一样,在掌握了其中一个后另一个也能很快上手。
我们这里只讲解vim编辑器。
vim编辑器
Vim是一款强大、高效的文本编辑器,它有很多快捷键和命令,可以帮助用户在编辑时提高效率。以下是一些基本的Vim使用方法:
1. 打开Vim编辑器:在终端中输入vim并按下回车键即可进入Vim编辑器。
2. 插入模式:在普通模式下按下i键即可进入插入模式,在插入模式下可以直接输入文本。按下ESC键可以返回到普通模式。
3. 保存退出:在普通模式下输入:wq并按下回车键可以保存文件并退出Vim。如果只想保存文件而不退出,可以输入:w并按下回车键。
4. 移动光标:在普通模式下使用h、j、k、l键分别向左、下、上、右移动光标,使用数字+n可以向后移动n个字符,使用数字-n可以向前移动n个字符。
5. 搜索替换:在普通模式下输入/和要搜索的字符串并按下回车键进行搜索,输入:n和回车可以跳转到下一个匹配结果。要执行替换操作,可以先进入命令行模式(:),然后输入s/old/new/g并按下回车进行替换操作。
6. 复制粘贴:在普通模式下使用v或V键可以选择需要复制的区域,然后使用y键复制,使用p键粘贴。还可以使用yy复制整行,使用dd删除整行。
7. 撤销重做:在普通模式下输入u键可以撤销上一步操作,CTRL+r键可以重做上一步被撤销的操作。
这些是Vim的最基本使用方法,学习后你可以尝试更多高级命令和技巧来提高编辑效率。
vim的shebang
centos7支持哪些shell呢?
我们可以打开一个文件
cat /etc/shells
我们可以看到这个Linux发行版支持哪些shell脚本,当然我们用的最多的还是Bash和sh了。
vim的三种模式
一般,插入,命令
vim hello.java (创建一个hello.java文件)
i (进入插入模式,可以编辑)
esc (返回到普通模式)
:wq (保存文件并退出编辑器)
vim快捷键
在一般模式下
拷贝yy
粘贴p
删除dd
显示行号:set number 取消行号:set nonumber
在命令行下,查找 xxx单词,回车,n键寻找下一个。
这些是Vim的最基本快捷键,学习后你可以尝试更多高级命令和技巧来提高编辑效率。
(后续补充)
8.关机重启reboot
9.用户管理
1)useradd 用户名
添加用户
2)passwd 用户名
修改密码
3)pwd
显示当前用户所在的目录 (绝对路径)
4)userdel 用户名
删除用户
5)id 用户名
查看指定用户信息
6)su -用户名
切换用户,类似栈,切换到一个用户类似往栈中添加元素 查看第一次登录到linux的用户信息
10.用户组
比较大的用处就是同时对多个用户的权限进行管理,进行分组管理。
1)groupadd 组名
创建组
2)groupdel 组名
删除组
3)useradd -g 组名 用户名
创建用户指定组,如果没指定则创建一个和用户名一样的组并把此用户添加进去
4)usermod -g用户组 用户名
修改用户的组。
11.运行级别
Linux有七个运行级别,每个运行级别都有不同的功能。以下是每个运行级别的简要说明:
- 运行级别0:系统停机状态,即关闭计算机。
- 运行级别1:单用户模式,只有root用户可以登录系统,在系统维护和修复时使用。
- 运行级别2:多用户模式,没有NFS支持。
- 运行级别3:完全的多用户模式,拥有完整的网络支持,可以使用text-mode界面。
- 运行级别4:无法使用,保留为用户自定义。
- 运行级别5:完全的多用户模式,与运行级别3相同,但是进入此模式后会自动启动图形界面(X Window)。
- 运行级别6:系统正常关闭并重启。
运行级别可以通过修改 `/etc/inittab` 文件来更改,但在现代发行版中大多数都采用 systemd 来管理启动进程以及服务。在这些发行版中需要使用 `systemctl` 命令来管理运行级别。
然后您需要重新启动系统以生效该更改。
重点是3(工作用)和5(学习用),有无图形化。
在root管理者权限中设置。
systemctl get -default
查看当前的运行级别。
systemctl set -default multi-user.target
改变默认为3的运行级别。此命令将Linux默认的目标(target)设置为multi-user.target。
systemctl set -default graphical.target
改变默认为5的运行级别。
12.找回root密码
后续补充。
13.帮助help指令
在Linux中,如果您需要了解某个命令的使用方法和参数选项,可以使用 help命令来获取该命令的帮助信息。不过需要注意的是,`help` 命令只能用于查看Linux自带的shell命令的帮助文档。
使用help命令的语法如下:
help [命令名称]
例如,要查看 ls 命令的帮助信息,可以使用以下命令:
help ls
执行后会输出该命令的基本用法、参数选项说明和示例等信息。
另外,还可以通过运行 man命令来获取更详细的帮助文档。例如,要查看 ls命令的手册页,则可以运行以下命令:
man ls
执行后会打开一个分页式的手册页,其中包含了该命令更为详尽和全面的介绍。在手册页中使用箭头键上下翻页,按下 / 键可以进入搜索模式,按下 q 键可以退出手册页。
14.文件目录指令
0)ls
查看当前目录的所有内容。
有几个常用选项 -h -l -a,h是更适合人看的方式,l列表,a显示隐藏文件。
ls -l等价于ll。
1)cd
绝对路径和相对路径。
1.5)vim
创建普通文件。
2)mkdir
创建目录。(单级和多级)
3)rmdir
删除目录。(非空和空目录)
4)touch
创建空文件。
5)cp
复制文件或者文件夹。(文件夹需要递归)
6)rm
删除文件或目录。和rmdir的区别是:文件夹里面有文件的时候也可以删,但是rmdir只能删除空的
语法
rm (选项)(参数)
选项
-d:直接把欲删除的目录的硬连接数据删除成0,删除该目录;
-f:强制删除文件或目录;
-i:删除已有文件或目录之前先询问用户;
-r或-R:递归处理,将指定目录下的所有文件与子目录一并处理;
--preserve-root:不对根目录进行递归操作;
-v:显示指令的详细执行过程。
7)mv
移动文件/目录and重命名文件/目录。
其基本语法如下:
mv [option] source destination
其中,source是要移动或重命名的文件或目录的名称,destination是移动或重命名后文件或目录的名称。
以下是一些常见选项:
- -i 交互模式,如果目标文件已经存在,则询问用户是否覆盖。
- -f 强制模式,不询问就直接覆盖目标文件。
- -v 显示详细信息,列出所有被移动的文件。
例如,下面的命令将file1.txt文件移动到新目录newdir下,并改名为file2.txt:
mv file1.txt newdir/file2.txt
如果newdir目录不存在,则该指令会自动创建该目录。
8)cat
查看文件内容。
Linux中的cat命令用于连接文件并打印到标准输出设备上。它通常用于查看文本文件内容、合并文件、复制文件以及创建新文件等操作。
以下是cat命令的一些常见用法:
-
查看文本文件内容:cat filename.txt
-
合并多个文件:cat file1.txt file2.txt > mergedfile.txt
-
将标准输入重定向到文件:cat > output.txt(清空再输入)
-
复制文件:cat sourcefile.txt > destinationfile.txt
-
创建新文件:cat > newfile.txt
-
hairspring:cat <<< "here string"
需要注意的是,当cat命令将多个文件连接时,会按照指定的顺序依次连接这些文件,并将结果打印到标准输出设备上。如果需要将结果写入到文件中,可以使用重定向符号>或>>将其写入到指定的文件中。
可以带上管道命令more(查看方便)
cat -n 文件名 | more
9)more 文件名
全屏显示查看内容。(静态加载文件)
10)less 文件名
查看文件内容。(动态加载,适用于大文件)
less
是一个在 Linux 和其他类 Unix 系统中使用的分页器,用于在终端上浏览文本文件。以下是有关 less
命令的一些要点:
-
less
命令实际上是一个可交互的程序,它显示读入的文本,并允许用户向前和向后查看文件内容。
-
可以使用以下格式的
less
命令来打开文件:less filename
。如果没有指定文件名,则less
命令将等待输入,并在用户输入文本之后打开。
-
可以使用
q
键退出less
命令。
-
使用
Enter
键向下滚动一行或使用空格键向下滚动整个屏幕。
-
向上滚动可以使用
b
键或向上箭头键。
-
搜索可以使用
/
命令,例如/keyword
将会向下搜索keyword
字符串,n
键为下一个匹配项,而N
键则为上一个。
-
支持很多的查找、分屏、颜色配置等功能,详情可以参考
man less
命令或者less --help
命令。
要在Linux/Unix中使用 less
命令来显示文件内容以及行号,可以通过运行以下命令:
less -N filename
该命令中的 -N
选项会在屏幕上的每一行旁边显示行号。当打开大型文件时,在查找特定位置或检查某个行号时,这些行号非常实用。
11)echo
输出到控制台。
echo "hello boy" >/home/mydate.txt 把这句话写入到这个文件中
选项:
-
-e:执行转义字符。(默认无视,直接打印)
-
-n:不换行。(默认打印换行,相当于负负得正)
12)head
显示文件开头内容,默认前10行。
13)tail
显示文件末尾内容。默认后10行。
(特殊:-f选项可以监控该文档的所有更新,可以监控文件,网络啥的,如果不需要监控了,则ctrl+c退出监控)
14)>和>>
>:输出重定向。(先把文件删掉,再写进去,相当于覆盖)
echo "hello boy" >/home/mydate.txt 把这句话写入到这个文件中
>>:追加。(原本内容不变,在文件最后面追加,若此文件不存在,会自动创建)
一般是查看的时候直接追加到某个文件去
15)pwd
显示当前目录的绝对路径。
16)ln
软链接。
类似快捷方式,存放对其他地方的引用
添加软连接:ln -s /root /home/myroot
删除软连接:rm /home/myroot (注意:rm /home/myroot 后面不要带斜杠/,例如rm /home/myroot/带上会觉得你这是一个目录不让删除,不带/的话就认为是一个文件了)
作用:b文件需要用到这个a文件,则引用。c文件也需要用到a文件,则引用。实现文件共享。
17)history
查看或者执行已经执行过的历史命令。
查看:history 10 (最近的10条指令)
执行:!329 (执行历史指令,行号为329的那条)
执行:!!(执行上次的命令,和向上方向键一样)
在输入history后,使用 Ctrl + R
进行搜索:按下 Ctrl + R
键,在提示符下输入关键词或命令的一部分,然后按下回车键。它将会自动搜索并显示最匹配的命令。如果找到需要的命令,可以重复按下 Ctrl + R
继续搜索下一个匹配项。
如果在使用 Ctrl + R
进行搜索历史记录时没有找到你想要的命令,你可以尝试以下方法清空搜索并重新开始:
-
按下
Ctrl + G
:按下Ctrl + G
键可以取消当前的搜索并返回到正常的命令提示符状态。 -
按下
Ctrl + C
:按下Ctrl + C
键可以终止当前正在进行的搜索操作,并返回到正常的命令提示符状态。
18)tree
把当前目录的内容以树状的形式展现出来。
tree 目录
19)clear
清屏。
快捷键ctrl+l
15.时间日期指令
date
-
查看日期。
-
修改日期。
cal
查看日历。
cal (看本月日历)
cal 2020 (看2020年的12个月所有日历)
16.搜索查找指令
1)find
递归向下搜索目录。
查询方式:文件名,用户名,文件大小
文件名:find /home -name *.txt (查找home目录下靠文件名的所有txt文件)
文件名:find /home -iname *.txt (查找home目录下靠文件名的所有txt文件)(-i不分大小写)
用户名:find /opt -user root | more (找opt目录 靠用户名 为root的所有文件,并实现分页功能)
文件大小:find / -size +200M (从根目录找 ,+表示大于200M,-则反之,不写则是=)
2)locate
快速定位文件路径。
直接后面输入文件名字就行了
首次使用需要updatedb指令,创建一个属于这个指令的小型数据库来检索文件。
updatedb
locate hello.txt
3)which
查看某条指令在哪个目录下。
which ls
4)grep(有选项)
从文件内容中查找指定内容。
一般和管道符号| 结合使用,表示将前一个命令的处理结果输出传递给后面的命令处理。
举例: (两个写法)
cat a.txt | grep "hello" (意思就先查找这个文件,且过滤掉除了hello的其他内容)
grep -n "hello" /home/hello.txt
管道还可以往后延伸cat a.txt| grep "hello"|more....等等
选项:
-
-w:精准关键字搜索
-
-r:递归搜索
-
-n:显示行号
-
-i:忽略字符大小写
-
-o:仅显示匹配到的字符串本身
-
-e:支持拓展的正则表达式元字符(egrep)
使用 -e
选项是为了在一个 grep
命令中指定多个模式,以便它能够匹配这些模式中的任何一个。
要匹配包含 hello
或 world
的行,可以使用 -E
选项来启用正则表达式,并使用管道运算符和 grep
命令来实现 或 操作,例如:
grep -E "hello|world" myfile.txt
-
-q:不输出任何消息
-
-v:显示不被模式匹配到的行(排除匹配结果)
-
-c:只统计匹配的行数
17.压缩解压指令
1)gzip/gunzip(压缩和解压)
这两个只能压缩成.gz文件和解压.gz文件。
gzip /home/hello.txt
gunzip /home/hello.txt.gz
2)zip/unzip(压缩和解压)(有选项)
压缩:
zip -r myhome.zip /home 等效于zip -r myhome.zip /home/*
(压缩包括home以及home里面的文件夹,压缩完放到当前目录)
解压:
unzip -d /opt/tmp /home/myhome.zip
(把压缩文件递归解压到绝对路径/opt/tmp目录中。解压哪个呢?解压绝对路径/home/myhome.zip这个压缩文件)
3)tar(压缩和解压通用)(有选项)
tar[选项] xxx.tar.gz 打包的内容
-
压缩多个文件,将/home/pig.txt和/home/dog.txt压缩成一个pc.tar.gz
压缩:
tar-zcvf pc.tar.gz /home/pig.txt /home/dog.txt
(打包并压缩,产生.tar打包文件,显示详细信息,指定压缩后的文件名。指定文件名。指定文件,可以多个,用空格隔开即可,但是解压的时候发现会把home也压进去??)
-
将/home文件夹压缩成myhome.tar.gz
tar-zcvf myhome.tar.gz /home
-
将pc.tar.gz解压到当前目录
tar-zxvf pc.tar.gz
-
将myhome.tar.gz解压到/opt/tmp2目录下面
mkdir /opt/tmp2
tar -zxvf /home/myhome.tar.gz -c /opt/tmp2
(解压文件,解压哪个位置的压缩文件?
/home/myhome.tar.gz
解压到哪里 指定解压选项-c
指定位置/opt/tmp2)
18.组的基本介绍
有3个名词理解一下
1)所有者
文件被创建的时候,默认所有者是目前登录的用户
简单来说,谁生下我谁就是我妈,也可以换个妈
2)所在组
用户被创建的时候,默认所在组就是当前的用户名
文件被创建的时候,默认所有者是目前登录的用户。并且加入到所有者所在的组中
简单来说,你在哪个国家就是哪个国的,也可以改变国籍
3)其他组
除了文件的所有者和所在组的用户外,系统的其他用户都是文件的其他组
对于美国而言,我就是其他国家的
对于英国而言,我也是其他国家的
但对于中国而言,我就是所在组
查看文件所有者
ls -ahl
修改文件所有者
chown 用户名 文件名
组的创建
groupadd 组名
创建用户bb并放入到mm组
groupadd mm
useradd -g mm bb
id bb (显示bb用户的信息,看看是否在mm组里)
修改文件或者目录所在的组
默认在所有者当前的组。
chgrp 组名 文件名或者目录名
使用root用户创建文件orange.txt,看看当前文件属于哪个组,然后修改文件所在组到fruit。
groupadd fruit
touch orange.txt
ls-ahl
chgrp fruit orange.txt
修改用户所在的组
在添加用户时,可以指定将该用户添加到哪个组中,用root管理权限也可以改变某个用户所在的组。
usermod -g 新组名 用户名
实例:将zwj用户从原来的组修改到wudang组
-
id zwj (查看zwj用户的信息,看看现在属于哪个组)
-
cat /etc/group 或者cat /etc/group | grep wudang(查看配置文件中所有组,看看有没有wudang这个组)
usermod -g wudang zwj(修改组)
id zwj (再次查看zwj用户的信息,看看现在属于哪个组)
但是!当你修改完用户的组,可能还会出现权限不够,因为你在登录的时候身份就已经确定了,重新登录就好了。
修改用户登录的初始目录
usermod -d 目录名 用户名
注意:用户需要有进入到新目录的权限,否则登录的时候会失败
19.权限
当我们ls -al查看当前目录信息的时候,通常都会有一串-rwxrw-r--,什么乱七八糟的一共10位,分为4组。
来,我们讲解一下这一串烤串bushi
第一组或者说第一个:
有这5种类型(d ,-,l,c,b),上面的是第二种-
l链接,相当于快捷方式
d目录,相当于文件夹
c字符设备文件,相当于鼠标键盘,在/dev下能看到
b设备文件,相当于硬盘
-普通文件,比如.txt
第二组第2-4位:rwx
确认所有者(该文件的所有者)拥有该文件的权限---User
r表示read读,w表示write写,x表示execute执行
第三组第5-7位:rw-
确认所属组(同用户组的)拥有该文件的权限---Group
第四组第8-10位:r--
确认其他组拥有该文件的权限
rwx权限讲解
文件
r:可以打开文件,查看内容
w:可以修改文件里的内容,但不一定能删文件,要删的前提是对该文件所在的目录有写(w)权限。
x:可以被执行,前提是一个可执行文件
目录
r:可以读取目录下有什么文件(ls -l)
w:可以对目录内文件进行创建删除重命名目录
x:可以进入该目录
rwx所代表的数字
所有者rwx即4+2+1=7;
所属组r-x即4+1=5;
其他组r-x即4+1=5。
数字可以进行组合。
所以一个普通文件的–rwxr-xr-x转换成权限数字为755。
即所有者对此目录有全部权限7,所属组对此目录有读、执行权限5,其他组对此目录有读、执行权限5。
修改权限chmod
通过chmod指令,修改文件或者目录的权限
用+,-,=变更权限
u:所有者, g:所有组, o:其他人,a:所有人(u,g,o的总和)
chmod u=rwx,g=rx,o=x 文件名或者目录名
chmod o+w 文件名或者目录名
chmod a-x 文件名或者目录名
用数字变更权限
r=4,w=2,x=1
chmod u=rwx,g=rx,o=x 文件名或者目录名 等效于 chmod 751 文件名或者目录名
20.ls -l显示的内容详解
第一个是权限
第二个对于目录来说,是目录打开里面的文件数+目录数(不包括子子目录)
对于文件来说,直接就是一个固定1
第三个是用户
第四个是用户组
第五个是文件大小(字节),如果是文件夹,直接显示4096字节
第六个是最后修改时间
第七个是文件名或目录名
21.修改文件/目录所有者chown
chown 新的所有者 文件/目录 (改变文件/目录所有者)
chown tom /home/abc.txt (把abc文件的所有者改成tom)
chown 新的所有者:新的组 文件/目录 (改变文件/目录所有者和所在组)
chown -R tom /home/tmp(用递归把tmp目录所有文件和目录的所有者改成tom)
目录需要递归-R
22.修改文件/目录所在组chgrp
chgrp 新的组 文件/目录
groupadd shaolin(添加组)
chgrp shaolin /home/abc.txt(改变普通文件的组)
chgrp -R shaolin /home/test(用递归改变目录的组)
23.定时调度任务指令
1)crontab(有选项)
进行连续定时任务的设置。
-e:编辑任务,里面可能有很多命令,往后加就行了
-l:查询全部任务
-r:删除全部任务
sevice crond restart:重启任务调度
*/1 * * * * ls -l /etc > /tmp/to.txt (每分钟执行一次)
分钟 小时 天 月 周(特殊)
2)at(有选项)
一次性定时任务,可以执行指令或shell脚本。
注意:需要保证atd进程在运行。
怎么看:
ps -ef (查看线程)| grep atd(筛选atd)
at 选项 时间 +回车键+需要的指令+(2次ctrl+d)
两天后下午5点查询home目录
24.磁盘分区,挂载
目录实际存放数据的位置是硬盘/磁盘。
传统MBR分区方案:Linux规定主分区(或扩展分区)占用从1到16的前4个数字。以第一个IDE硬盘为例,硬盘最多只能划分4个主分区或3个主分区和1个扩展分区。如果都是主分区,那么只有4个分区。但如果一个硬盘使用扩展分区,则可以在扩展分区内创建多个逻辑分区。在这种情况下,总的分区数量包括主分区和逻辑分区,可以达到16个分区。
GPT(GUID Partition Table)分区方案:每个磁盘可以划分为128个主分区,并且没有扩展和逻辑分区之间的限制。
linux硬盘
如果第一块硬盘叫sda,那么第二块就叫sdb,sdc...依次下去。
IDE
hdx~(x:盘号a,b,c...)(~: 其中1,2,3,4都是主分区,从第5开始为逻辑分区,最大到16)
IDE类型不常用。
SCSI
sdx~
SCSI类型常用。
查看所有硬盘分区的挂载情况
lsblk或lsblk -f(会显示唯一的标识符UUID),硬盘的类型TYPE是disk,分区的类型TYPE是part。
查看所有硬盘存储的使用情况
df -h
查看指定目录的硬盘存储的使用情况
du -h (默认当前目录)
选项:
-s指定目录占用大小汇总
-h 带计量单位
-a 含文件
-c 总计
--max-depth=1 子目录深度
ls -l /opt | grep "^-" | wc -l (打印opt下的普通文件并输出个数)
ls -l /opt | grep "^d" | wc -l (打印opt下的目录并输出个数)
ls -lR /opt | grep "^d" | wc -l (递归打印opt下的目录还有所有子文件夹并输出个数)
分区概念
磁盘容量与主分区、扩展分区、逻辑分区的关系:
硬盘的容量=主分区的容量+扩展分区的容量
扩展分区的容量=各个逻辑分区的容量之和
主分区:是独立的,是看得到的。对应磁盘上的第一个分区,“一般”就是C盘。
扩展分区:是一个概念,是看不到的。当整个硬盘分为一个主分区的时候,就没有了扩展分区。一个硬盘只能有一个扩展分区,但一个扩展分区可以有多个逻辑分区。
逻辑分区:是看得到的。Linux规定它们必须在扩展分区上构建(DOS和Windows系统也是如此),而不是在主分区上。因此,我们可以看到扩展分区可以提供更灵活的分区模式,但是不能用作操作系统引导,一般为D,E盘。
在Windows系统把所有的主分区和逻辑分区都叫做“盘”或者“驱动器”,并且把所有的可存储介质都显示为操作系统的“盘”。
因此,从“盘”的概念上无法区分主分区和逻辑分区。
分区指令
fdisk 硬盘位置
Linux系统中硬盘位置:/dev/sdb
输入后发现有a-x的字母让我们输入。
n就是添加新分区。
回车后发现有p和e让我们输入,二选一。第一个是主分区,第二个是拓展分区。
选择p主分区。然后让你选择1-4,代表你要在这个硬盘创建几个p主分区,1就是只创建一个分区。接下来默认即可。
最后输入w保存即可退出。
格式化分区
mkfs -t ext4 /dev/sdb1 (固定指令+选项 文件类型 分区位置)
如果格式化完成,输入lsblk -f查询一下所有硬盘分区的挂载情况,成功的话就会为这个分区分配一个唯一不重复的40位字符串。
挂载(重启重置)
mount /dev/sdb1 /newdisk (固定指令 分区位置 目录)
linux的文件系统包含了一整套文件和目录,且将一个分区和一个目录绑定起来。
但是用命令行挂载重启会失效。
挂载(重启不重置,持久化)
通过修改/etc/fstab实现挂载。
在此文件中前面输入分区位置或者分区UUID,后面输入目录路径,以及最后的0 0
最后重启系统或者执行命令行指令mount -a即可挂载。
卸载
umount /dev/sdb1 或者 umount /newdisk (写上分区或者目录名都可以)
怎么增加一块硬盘并绑定到目录
-
虚拟机增加硬盘(在vmware软件左上角添加)
-
分区(/dev文件夹是我们的设备文件)
-
格式化(安装文件系统,格式化是针对主分区和逻辑分区的。要格式化是因为这和操作系统管理文件系统有关系。没有格式化的分区就像一张白纸,要写入数据,必须对白纸打上“格子”,每个格子里面写一块。而操作系统只认这些格子。)
-
挂载(重启重置)
-
设置自动挂载(重启不重置)
25.网络初始配置及测试
首先,linux虚拟机和vmnet8是在同一个网段上,vmnet8相当是windows系统,因此可以相互访问。
(vmnet8访问linux虚拟机没有限制,但反过来vmnet8有防火墙,需要关闭才能访问)
其次,vmnet8充当一个代理的角色。linux虚拟机想要访问外界互联网,就得先和无线网卡连接,因为无线网卡才是一个可以真正上网的IP,而vmnet8又能和无线网卡连接。所以vmnet8就充当中间人,linux虚拟机就间接的连接了无线网卡。
然后,无线网卡能访问教室里的局域网,局域网肯定有个公用的网关,网关再和真正的互联网进行访问。
这就是为什么虚拟机和无线网卡不是同一个网段,但是还是能连接上网,就是因为走了一个代理模式。
且虚拟机的网络号是固定的,只有主机号每次登陆时会自动分配,避免ip冲突。
查看windows网络ipconfig
例如vmnet8。
ipconfig
查看linux网络ifconfig
ifconfig
Windows网络检测工具ping
主要用于检测远程主机是否正常,或者两部主机之间的网卡或者网线故障。
ping 目的主机IP或者DNS或者主机名(主机名需要hosts映射)
Windows测试端口telnet
在cmd中,输入指令。
telnet IP地址:端口号
telnet案例
启用防火墙,测试111 端口是否能telnet连接
telnet 192.168.2.40 111
linux网络配置
自动配置
DHCP(自动配置),日常使用在家就够了。
指定配置
直接修改配置文件来指定IP,并且可以连接到外网,工作使用。
vi/etc/sysconfig/network-scripts/ifcfg-ens33
这是Linux操作系统下的网卡配置文件,通常保存在/etc/sysconfig/network-scripts目录中。
文件名为ifcfg-网卡名称。
[root@localhost network-scripts]# cat ifcfg-ens33
TYPE="Ethernet" #网络类型(通常是Ethemet以太网)
PROXY_METHOD="none" #代理方式:为关闭状态
BROWSER_ONLY="no" #只是浏览器:否
BOOTPROTO="static" #网卡的引导协议【static:静态IP dhcp:动态IP none:不指定,不指定容易出现各种各样的网络受限】
DEFROUTE="yes" #默认路由
IPV4_FAILURE_FATAL="no" #是否开启IPV4致命错误检测
IPV6INIT="yes" #IPV6是否自动初始化:是(现在还未用到IPV6,不会有任何影响)
IPV6_AUTOCONF="yes" #IPV6是否自动配置:是(现在还未用到IPV6,不会有任何影响)
IPV6_DEFROUTE="yes" #IPV6是否可以为默认路由:是(现在还未用到IPV6,不会有任何影响)
IPV6_FAILURE_FATAL="no" #是否开启IPV6致命错误检测
IPV6_ADDR_GEN_MODE="stable-privacy" #IPV6地址生成模型
NAME="ens33" #网卡物理设备名称
UUID="ab60d501-535b-49f5-a76b-3336a4120f64"#通用唯一识别码,每一个网卡都会有,不能重复,否则两台linux机器只有一台可上网
DEVICE="ens33" #网卡设备名称(接口名),必须和‘NAME’值一样
ONBOOT="yes" #是否开机启动,要想网卡开机就启动或通过 `systemctl restart network`控制网卡,必须设置为 `yes`
IPADDR=192.168.137.129 # 本机IP
NETMASK=255.255.255.0 #子网掩码
GATEWAY=192.168.137.2 #默认网关
DNS1=8.8.8.8# #域名解析器
DNS2=8.8.8.5#
如果虚拟机的IP网段发生变化,那么Window下的vmnet8IP也要跟着改变,不然两者无法网络连接。
最后,service network restart重启网卡或者reboot重启系统 ,配置文件修改生效。
设置主机名和hosts映射
hosts:一个文本文件,用来记录IP和Hostname(主机名)的映射关系。
DNS:互联网上作为域名和IP地址相互映射的一个分布式数据库。
查看Linux虚拟机主机名
hostname
设置Linux虚拟机主机名
给linux系统设置主机名
在/etc/hostname中指定,重启生效。
Windows通过hosts文件映射找到Linux
在Windows系统通过ping IP可以连接到linux虚拟机,但是如果是通过ping Linux虚拟机的主机名呢?
此时此刻我们windows系统有个hosts文件,里面写着主机名和IP的映射关系,你通过主机名找Linux虚拟机,hosts映射相当于把主机名替换成了对应的IP。
但是此时此刻我们修改了Linux虚拟机的新主机名,在Windows的hosts文件还是之前的旧主机名,即使IP是对的,但是映射关系已经对不上了。
那怎么办?
那就修改C:\Windows\System32\drivers\etc目录下的hosts文件。
在最后添加IP 加主机名即可。
也就是说此时我们ping 主机名 ,就会到这个文件去找IP,所以最后还是一个走IP的过程。
Linux通过hosts文件映射找到Windows
在 /etc/hosts指定即可。
只要Windows 端的IP能对应上,主机名随便你起,但是ping主机名的时候你也只能用你起的这个名字去ping测试连接。
举例:浏览器输入www.baidu.com
1)浏览器先检查浏览器缓存中有没有该域名解析IP地址,有就先调用这个IP完成解析;如果没有,就检查DNS解析器缓存,如果有直接返回IP完成解析。浏览器缓存和DNS缓存,可以理解为本地解析器缓存。
2)一般来说,当电脑第一次成功访问某一网站后,在一定时间内,浏览器或操作系统会缓存他的IP地址(DNS解析记录) .如在Windows 的cmd窗口中输入下方指令:
ipconfig /displaydns //DNS域名解析缓存
ipconfig /flushdns //手动清理dns缓存
3)如果本地解析器缓存没有找到对应映射,检查系统中hosts文件中有没有配置对应的域名IP映射,如果有,则完成解析并返回。
4) 如果本地DNS解析器缓存和hosts文件中均没有找到对应的IP,到公网的域名服务DNS进行查找解析,如果还是找不到则返回域名不存在。
26.进程管理(重点)
在 Linux 系统中,进程是一个正在执行的程序的实例,它拥有自己的进程号(PID)、内存空间、文件描述符等资源。系统服务也是一种在后台运行的程序,它们通常以守护进程(daemon)的形式存在。
因此,可以说系统服务就是一个特殊类型的进程,它不像前台应用那样需要与用户互动,在后台运行并提供某些功能或服务。相比较而言,系统服务会一直在后台运行直到被手动停止或系统关机。
在 Linux 中,通常使用init 或 systemd 这样的进程管理器来启动和管理系统服务。当一个系统服务启动时,init 或 systemd 会为其分配一个单独的进程ID,并且它将以该 ID 的身份在操作系统上运行。
因此可见,在 Linux 中一个系统服务可以算作一个进程。
静态显示系统进程信息
ps和top相似,但一个是静态一个是动态。
😉 ps -aux详解
基本语法
ps-aux l grep xxx ,比如我看看有没有sshd服务
选项说明
-
ps-a:显示当前终端的所有进程信息
-
ps -u:以用户的格式显示进程信息
-
ps-x:显示后台进程运行的参数
System V展示风格
USER: 用户名称
PID: 进程号
%CPU:进程占用CPU的百分比
%MEM: 进程占用物理内存的百分比
VSZ:进程占用的虚拟内存大小(单位: KB)
RSS:进程占用的物理内存大小(单位: KB)
TTY:终端名称,缩写
STAT:进程状态,其中S-睡眠,s-表示该进程是会话的先导进程,N-表示进程拥有比普通优先级更低的优先级,R-正在运行,D-短期等待,Z-僵死进程,T-被跟踪或者被停止等等
STARTED:进程的启动时间
TIME:CPU时间,即进程使用CPU的总时间.
COMMAND: 启动进程所用的命令和参数,如果过长会被截断显示
😉 ps-ef详解
ps -ef 是以全格式显示当前所有的进程。-e所有进程,-f全格式
是BSD风格。关于BSD是什么,详情点击这里。
UID:用户ID .
PID:进程ID
PPID:父进程ID
C: CPU用于计算执行优先级的因子。数值越大,表明进程是CPU密集型运算,执行优先级会降低;数值越小,表明进程是I/O密集型运算,执行优先级会提高
STIME:进程启动的时间
TTY:完整的终端名称
TIME: CPU 时间
CMD:启动进程所用的命令和参数
ps -ef 和 ps -aux 在 Linux 中都是用来查看进程的命令。
它们的区别在于:
ps -aux 显示的信息更详细,包括进程启动时间、CPU 使用率、内存使用率等。
而 ps -ef 只显示进程的基本信息。
终止进程
kill
杀死单个进程。
选项说明
-9 强制停止
基本语法
kill 进程号
killall
杀死进程以及进程相关联的进程。
基本语法
killall 进程名称
进程树pstree
pstree -p:显示进程PID
pstree -u:显示进程所属用户
实例:创建子shell进程
在 Linux 中,可以通过在当前 shell 环境下启动一个新的子 shell 来完成。
一般情况下,在 Bash Shell 中,可以使用以下两个命令来启动一个新的子 shell:
-
bash
命令:这个命令会开启一个新的 Bash Shell 终端窗口,并进入子 shell 环境。例如:
bash
-
sh
或/bin/sh
命令:这个命令会开启一个新的 Bourne Shell 或兼容版本的 Shell 终端窗口,并进入子 shell 环境。例如:
sh
或者
/bin/sh
注意,启动一个子 shell 后,你可以在子 shell 环境中执行任何命令,但是它们都不会对父 shell 环境造成任何影响。当退出子 shell 后,你将回到原来的 shell 环境。
-
退出子shell:exit或者kill -9 子shell进程号(强制退出)
局部变量:
27.Linux开机流程
Linux开机的流程大致可分为以下几个步骤:
1. BIOS和BootLoader启动
当计算机开机时,首先由BIOS(Basic Input/Output System,基本输入输出系统)进行自检,并确定哪些硬件可以使用,然后将控制权交给引导加载程序(BootLoader)。
常见的引导加载程序有GRUB、LILO等,它们负责查找并加载操作系统内核。
2. 内核启动
引导加载程序通过从硬盘、U盘等存储设备中读取内核镜像,并将内核镜像载入到内存中。随后,内核开始执行,首先进行硬件初始化并建立系统数据结构。
3. 运行init进程
当内核启动后,第一个用户级进程--init进程会被创建。init是所有用户级别进程的祖先进程,在整个系统运行期间都不会退出。其主要职责是启动和管理其他所有进程的生命周期。
4. 启动若干个系统服务和守护进程
在启动过程中,init会读取配置文件,并依次启动一些必要的系统服务和守护进程。这些服务和守护进程包括网络服务、防火墙、日志管理等。通过setup,选择系统服务,就可以选择哪些服务是否开机启动,或者手动启动
5. 进入图形界面或命令行界面
最后一个步骤是根据配置文件决定是否需要进入图形界面或命令行界面。如果用户登录时没有指定运行级别,默认情况下会直接进入图形化运行级别(Runlevel 5),否则会按照用户指定的运行级别执行。
以上就是Linux开机流程的大致说明,每个步骤涉及到的细节还很多,请根据实际情况了解更多信息。
28.Service服务(重点)
目前service指令和chkconfig指令都只管理这三个服务了,其他的服务都是systemctl指令在管理。
本来大部分是用service指令,Centos7.0更新后大部分都变成systemctl指令了,留下三个旧的。
Service指令(旧)
Centos7.0后,很多服务使用systemctl指令来管理。
基本语法
service 服务名 选项
选项说明
start | stop | restart | reload | status
如果stop了sshd,相当于远程登录的服务被关闭,那么XShell也就登录不上去了,等于访问22端口被关闭了。
指令位置:
ls -l /etc/init.d
service指令管理的服务在 /etc/init.d 中查看。
chkconfig 指令(旧)
Centos7.0后,使用systemctl指令来管理。
通过chkconfig命令可以给服务的各个运行级别设置自启动/关闭,不过我们用的最多的是3和5。
基本语法
查看服务chkconfig--list [| grep xx]
chkconfig 服务名--list
chkconfig --level5 服务名 on/off
指令位置:
ls -l /etc/init.d
chkconfig指令管理的服务在/etc/init.d 中查看。
案例演示:
对network服务进行各种操作,把network在3运行级别关闭自启动
chkconfig --level 3 network off
chkconfig --level 3 network on
1)首先看看这个服务目前是什么状态。
代表在0运行级别是关的,在1运行级别也是关的,在2运行级别是开的,等等以此类推。
2)修改并查看
我们可以看到3运行级别已经变成关的了。
注意:最后使用完需要重启reboot。
systemctl指令(新)
设置服务的启动停止指令
基本语法
systemctl 选项 服务名
选项: start | stop | restart | status
指令位置
ls -l /usr/lib/systemd/system
systemctl指令管理的服务在 /usr/lib/systemd/system 中查看。
设置服务的自启动状态
systemctl list-unit-files [| grep 服务名(查看服务开机是否启动, grep可进行过滤)
systemctl enable服务名(设置服务开机启动)
systemctl disable服务名(关闭服务开机启动)
systemctl is-enabled服务名(查询某个服务是否是自启动的)
Service服务的firewall服务
可以把防火墙理解成管理端口的,有两个组open和close,有部分端口在close组中,其余部分在open组中。
在真正的生产环境,往往需要将防火墙打开,但问题来了,如果我们把防火墙打开,而指定端口没有在防火墙中,那么外部请求就不能跟服务器监听端口通讯。这时,需要把指定的端口添加到防火墙的open端口列表中。比如80、22、 8080等等。
打开端口: firewall-cmd --permanent --add-port=端口号/协议
关闭端口: firewall-cmd --permanent --remove-port=端口号/协议
重新载入,才能生效: firewall-cmd --reload
查询端口是否开放: firewall-cmd -query-port=端口/协议
举例:
-
启用防火墙,测试111 端口是否能telnet连接
telnet 192.168.2.40 111
-
开放111端口
firewall-cmd --permanent --add-port=111/tcp (开放端口)
firewall-cmd --reload(重新载入)
firewall-cmd -query-port=111/tcp(如果需要,可以查询确认是否开放)
打开成功会显示success或yes。
-
再次关闭111端口
firewall-cmd --permanent --remove-port=111/tcp (开放端口)
firewall-cmd --reload(重新载入)
firewall-cmd -query-port=111/tcp(如果需要,可以查询确认是否开放)
关闭成功会显示success或no。
29.动态监控进程top
ps和top相似,但一个是静态一个是动态。
动态显示正在执行的进程信息。
基本语法
top 选项
选项说明
当你用top指令进入下下图后,你可以用下方操作来控制显示,就像more指令查看文档的操作一样。
再接着解释一下下方名词的含义:
-
top:当前时间
-
up:系统运行了多久
-
users:有几个用户登录此服务器
-
load average:负载均衡,3个相加除以三大于0.7则危险。
-
Tasks:任务数
-
running:正在运行的进程
-
sleeping:睡眠中的进程
-
stopping:停止中的进程
-
zombie:僵尸进程,没运行但占内存。
-
%CPU(s):显示CPU的总使用率以及各个CPU核心的使用情况
-
KiB Mem:显示物理内存总量和可用内存。
-
KiB Swap:显示交换分区总量及可用空间。
-
PID: 进程ID,表示系统为每个进程分配的唯一标识符。
-
USER: 进程所属用户,表示运行该进程的用户帐号名。
-
PR: 进程优先级别,表示内核按照人工设置的优先级来调度进程执行的顺序。PR值越低,表示该进程在系统中的优先级别越高。
-
NI: NI值也是进程优先级别中的一种方式,与PR值类似,但是NI值是在PR值基础上计算而来。较高的NI值表示较低的进程优先级别。
-
VIRT: 进程占用虚拟内存大小(单位K),包括程序、数据、动态链接库等所有映射到进程地址空间中的内存空间大小。VIRT大小可能会比物理内存和交换空间总和还要大。
-
RES: 进程占用实际物理内存大小(单位K),表示此刻真正被分配给该进程使用的物理内存空间大小。
-
SHR: 共享内存大小(单位K),分为共享库和私有数据两部分。共享库是所有进程可以共享使用的代码段和静态数据段;私有数据则只属于一个进程自己使用。
-
S: 进程状态,包括R(running)、S(sleeping)、T(stopped或traced)、Z(zombie)等。
-
%CPU: 进程占用CPU的使用率,表示该进程在一段时间内占用的CPU资源百分比。
-
%MEM: 进程占用物理内存的使用率,表示该进程占用系统物理内存总量的百分比。
-
TIME+: 进程已经启动的累计时间,包括运行在用户态和内核态的总时间。
top案例1
监视特定用户。
比如我们监控tom用户。
top:输入此命令,按回车键,查看执行的进程。
u:然后输入“u”回车,再输入用户名,即可。
top案例2
终止指定的进程。
比如我们要结束tom登录。
top:输入此命令,按回车键,查看执行的进程。
k:然后输入“k”回车,再输入要结束的进程ID号。
30.监控网络端口状态netstat
可以用来查看目前系统的端口和外部端口的情况,以及被什么进程占用着端口。
基本语法
netstat [选项]
选项说明
1. netstat -a:显示所有打开的端口
2. netstat -t:显示所有TCP连接
3. netstat -u:显示所有UDP连接
4. netstat -n:以数字形式显示所有地址和端口号,而不是将它们转换为域名和服务名称
5. netstat -p:显示哪个 进程(服务)正在 监听或连接Linux系统的端口
6. netstat -r:显示当前的路由表信息
7. netstat -s:显示各种统计信息,如传输数据量、错误数量等
netstat案例1
查看当前的所有端口状态(监听/连接)
输入netstat -an
解释一下含义:
Proto(protocol):协议(tcp就是IPv4,tcp6就是IPv6)
Recv-Q:接收的信息数量
Send-Q:发送的信息数量
Local Address:本地地址及端口
Foreign Address:外部地址及端口
State:状态(ESABLISHEN:连接成功)
netstat案例2
查看sshd 服务(进程)的网络信息。
我们前面在进程管理说过,系统服务也算一个进程,那么系统服务也会监听我们Linux系统的端口。
但他们是本地的,所以没有外部地址。
输入netstat -anp | grep sshd
看完这个对我们的远程登录应该有些了解了吧,就是XShell6连接我们系统服务sshd的22号端口。连接成功后就多了一个进程,而这个进程的中间人就是我们的sshd。
31.rpm包和yum管理器
rpm
rpm(Red Hat Package Manager ),它是一种在Red Hat和CentOS Linux操作系统上使用的软件包管理器 。
如果你是Ubuntu系统则是用.deb(Debian)软件包,则用dpkg包管理器来安装和管理deb包 。
1. 下载.deb软件包:在终端中运行 `wget *软件包下载链接*` 命令或直接从软件官方网站下载。
2. 安装.deb软件包:在终端中运行 `sudo dpkg -i *软件包.deb*` 命令,这将安装该软件包。
3. 如果出现依赖关系问题,则需要手动安装缺少的依赖项。您可以使用命令 `sudo apt-get install -f` 来自动解决依赖关系问题并完成安装。
就是类似Windows的setup.exe的软件安装包,用指令安装,卸载,以及下载。
yum
Yum是一个Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载rpm包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包。
32.shell编程
33.Ubuntu系统
34.Ubuntu之APT远程登录
35.日志管理及日志轮替
36.Linux内核源码
37.Linux备份和恢复
32、ANSI转义序列
ANSI转义序列是一种特殊的字符序列,用于控制文本终端的显示方式、颜色和样式。通常由转义字符(\033
)和一系列特定的控制字符组成。
ANSI转义序列以\033[
开头,后面跟着一个或多个参数,每个参数用分号;隔开,最后以字母结尾。参数可以是数字或字母,不同的参数组合表示不同的控制命令。例如,\033[31m
这个转义序列用于设置前景色为红色。
常见的ANSI转义序列包括:
-
颜色控制序列:用于设置文本的前景色和背景色,例如
\033[31m
表示设置前景色为红色,\033[41m
表示设置背景色为红色。
-
光标控制序列:用于移动光标或隐藏/显示光标,例如
\033[2J
表示清除屏幕内容并将光标移动到左上角,\033[?25l
表示隐藏光标。
-
显示属性序列:用于设置文本的样式,例如
\033[1m
表示设置粗体样式,\033[4m
表示设置下划线样式。
-
其他控制序列:还有其他许多控制序列可以用于控制终端的行为,比如
\033[0m
表示重置所有属性为默认值。
ANSI转义序列通常用于编写控制终端输出的脚本或程序,例如终端颜色化的工具。
# 字体颜色
for i in {31..37}; do
echo -e "\033[$i;40mHello world!\033[0m"
done
作用是在终端中输出带有颜色的文本。它使用了ANSI转义序列来设置文本的样式和颜色。
具体来说,\033[
表示开始一个转义序列,$i
表示循环变量i的值,它代表不同的颜色代码(31表示红色,32表示绿色,33表示黄色,34表示蓝色,35表示紫色,36表示青色,37表示白色),;40m
表示设置字体颜色为$i对应的颜色,背景颜色为黑色(40),Hello world!
表示要输出的文本,\033[0m
表示重置颜色为默认值。
这句话的意思是循环打印7次"Hello world!",每次使用不同颜色(从红色到白色)和黑色背景输出。
# 背景颜色
for i in {41..47}; do
echo -e "\033[47;${i}mHello world!\033[0m"
done
作用是在终端中输出带有背景色的文本。它使用了ANSI转义序列来设置文本的样式和颜色。
具体来说,\033[
表示开始一个转义序列,47
表示背景颜色为灰色,${i}
表示循环变量i的值,它代表不同的颜色代码(41表示红色,42表示绿色,43表示黄色,44表示蓝色,45表示紫色,46表示青色,47表示白色),m
表示转义序列的结束符号,Hello world!
表示要输出的文本,\033[0m
表示重置颜色为默认值。
这句话的意思是循环打印7次"Hello world!",每次使用不同颜色(从红色到白色)和灰色背景输出。
# 显示方式
for i in {1..8}; do
echo -e "\033[$i;31;40mHello world!\033[0m"
done
这句话的作用是在终端中输出带有不同显示方式的文本。它使用了ANSI转义序列来设置文本的样式和颜色。
具体来说,\033[
表示开始一个转义序列,$i
表示循环变量i的值,它代表不同的显示方式(1为粗体、2为淡色、3为斜体、4为下划线、5为闪烁、6为闪烁并且粗体、7为反显、8为隐藏),;31
表示字体颜色为红色,;40
表示背景颜色为黑色,m
表示转义序列的结束符号,Hello world!
表示要输出的文本,\033[0m
表示重置颜色为默认值。
这句话的意思是循环打印8次"Hello world!",每次使用不同的文本显示方式(从粗体到隐藏)和红色字体、黑色背景输出。