Day One
Linux命令基础格式 command [-options] [parameter]
ls命令举例: ls -l / (list) ls -a / (all) ls -h / (human-reading)
同时,这些[-option]是可以混搭着用的,比如 ls -a -l / 等同于 ls -al /。
cd命令(change directory)改变当前所在的工作目录,基础语法 cd [linux路径]
cd命令没有选项,只有参数,表示要切换到哪个目录下;cd选项如果没有参数直接执行,则回到用户的home页面
pwd命令(print work directory)查看当前所在目录,无选项,无参数
相对路径和绝对路径
绝对路径:以根目录为起点,完整的文件所在路径,比如/home/name/desktop
相对路径:以当前所在路径为起点,直接cd当前目录下的目录,比如当前在/home/name目录下,可以直接cd desktop来达成在任意位置cd /home/name/desktop的效果
特殊路径符(. .. ~)
. 表示当前目录,比如当前在/home/name目录下,cd ./desktop的效果和直接cd desktop一致
.. 表示上一级目录,比如cd ..表示切换至上一级目录,cd ../..表示切换至上两级目录
~ 表示/home目录,比如cd ~,或者cd ~/desktop,即~ == /home/name
mkdir命令(make directory),创建新的目录(文件夹)
基本格式 mkdir [-p] linux路径,路径参数必填,表示要创建的路径(相对路径和绝对路径都可以);[-p]参数选填,表示自动创建不存在的父目录,适用于创建连续多层级的目录
比如说你当前在 /home/name路径下,你想要创建一个新的文件夹,这个文件夹里面又有一个子文件夹,你使用 mkdir /home/name/new/newnew是不被允许的,但是只要在mkdir 后加上参数-p就能够实现创建不存在的父目录了。
注意:创建文件夹需要修改权限,目前学习的阶段只能在/home目录内创建。
Day Two
文件操作命令
touch命令创建文件,语法 touch linux路径。touch和cd一样,没有选项,但touch必须有路径(同样可以使用绝对路径,相对路径以及特殊路径符。比如 touch test.txt
这里需要注意,如何判断ls出的文件类型,一是直接根据文件的颜色,深色的是文件夹,浅色的是具体文件,二是使用ls -l输出详细信息,首字母为d的就是文件夹,-就是文件
cat命令查看文件内容,语法 cat linux路径(以后提到路径都同上),无选项。
more命令同样可以查看文件内容,语法 more linux路径,无参数
cat和more的区别:cat是将内容全部显示出来,而more支持翻页,如果文件内容较多,可以通过空格翻到下一页,B键翻到上一页,退出操作为Q键。比如 more /etc/services。
(如果被cat填满屏幕,ctrl + l清屏就能派上用场了)
cp命令(copy)用于复制文件、文件夹,语法 cp [-r] 参数1 参数2。选项-r可选,用于复制文件夹,表示递归。参数1为linux路径,表示被复制的文件或文件夹路径;参数2也为linux路径,表示要复制的目标路径。比如, cp test.txt test2.txt 指令的结果就是在当前目录下复制了一个内容和test相同的test2。但是如果复制的对象是文件夹,必须加上 -r ,否则报错不能成功运行。
mv命令(move)用于移动文件、文件夹,语法 mv 参数1 参数2,参数1与cp语法中的参数1相同,但参数2有所不同,cp的参数2为cp的目标文件,无论这个目标文件存不存在最后都会有两个文件:参数1和参数2。但是mv的参数2的意思是参数1要移动的地方,假如说原本参数2不存在,参数1就会改名为参数2,最后只留下参数2这一个文件或文件夹。
rm命令(remove)用于删除文件、文件夹,语法 rm [-r -f] 参数1 参数2 ...参数N;rm命令的选项有两个,-r的作用和cp中的-r相同,起到递归作用,作用于文件夹;-f则是force,表示强制删除(不会弹出确认删除提醒,但是只有root管理员用户才会弹出,普通用户一般用不到)。参数1到N表示要删除的文件、文件夹,一次操作可以作用于多个对象,每个对象之间用空格分开。
rm命令存在便捷处理方法,即通配符*,对于以test结尾的文件,使用rm *test就可以全部删除,那么test*和*test*的rm就对应了以test开头和文件名中存在test的文件全部删除。
关于root管理员用户,这里可以先体验一下。我们使用 su - root 并输入密码(这里的密码就是home目录下对应的用户密码)进入root模式,此时前面的$符号就会变成#号,此时我们去删除文件就会弹出是否删除的提示,y(es) or n(o),但是只要我们在rm后加入选项-f就不会弹出提示,直接强制删除。最后退出root模式使用exit命令就好啦。
(关于rm命令的使用对新手来说还是有点危险的,不要去尝试一些不确定的行为......)
关于接下来要学习的which命令,我们首先要明确的一个点就是前面我们学到的ls,cd,pwd,mkdir,touch,cat,more,cp,mv,rm命令都是一个二进制程序,可以理解为在windows系统中执行了某个.exe文件,那么which命令的作用就是查看这些命令的存放位置。
which命令用于查看命令的程序文件存放在哪里,语法 which 要查找的命令。
但是which命令的局限性还是很大的,很多时候我们想要找的文件并不是命令,这个时候用which就没办法找到对应的地址。这个时候find命令就派上用场了!
find命令用于查看文件所在目录
1、根据文件名查找 语法:find 起始目录 -name “目标文件名”。
各位在使用linux去尝试find命令的时候,可以先进入root用户,否则许多find的内容都会因为权限不足而无法查询,不能很好的展示find的功能。另一方面,对于这种需要文件名的命令,比如前面的rm,和这里的find,都可以用通配符*来进行模糊搜索然后处理,只不过rm是进行删除,find是进行查找然后呈现。
2、根据文件大小查找 语法:find 起始目录 -size + / - n [kMG]
这里的+、-表示的是大于和小于,n表示大小数字,kMG表示大小单位,k(小写字母)表示kb,M表示MB,G表示GB。示例:要查找小于10kb的文件,find / -size -10k;要查找大于100MB的文件: find / -size +100MB;要查找大于1GB的文件: find / -size +1G。
echo命令可以在命令行内输出指定内容,语法: echo 输出的内容。echo没有选项,只有一个参数。所以对于echo来说,输入 echo hello world,后面用空格隔开的两个字符串并不会被判定为两个参数,但是为了养成良好习惯,还是建议大家把echo要输出的内容用双引号括起来,避免在使用其他命令的时候参数格式错误。
反引号(``)
另一方面,echo不单单可以输出我们键盘输入的内容,比如 echo pwd去输出当前目录的路径,但是又不能单单使用echo pwd,这样的输出结果只是pwd。想要达成我们的目的,我们得用反引号将pwd阔起来,echo `pwd`,这样就能输出我们想要的内容了。(用反引号包围的内容会被当做命令符执行)
重定向符(> >>),和前面的反引号一样,都是特殊符号。重定向符的作用是将内容写入文件中,单个重定向符会直接覆盖当前文档的内容(注意,这里的覆盖其实是把原来的内容删除了,然后再加入,而不是从头开始一个一个字符的覆盖),双重定向符则是将内容追加到文档中。值得注意的是,重定向符写入的内容不限于echo,可以理解为将原本应该输出到终端的内容写入了目标的文件,因此ls,find等等都可以后接重定向符。
tail命令,用于查看文件尾部内容,跟踪文件最新修改。语法: tail [-f -num] linux路径。选项-f表示持续跟踪,-num表示要查看的文件尾部行数(注意,这里的num要填具体的数字,如果不填的话就是默认10行),参数linux路径表示被跟踪的文件路径。比如 tail -5 test.txt,就可以查看当前目录下test.txt文件后五行的内容了。
这里的-f选项表示为持续跟踪,听起来比较抽象。我们执行这个命令之后呢,会显示出目标文件的尾部内容,但是这个程序并没有停止,当我们重新打开一个终端,并在目标文件中写新的内容是,前面那个终端中仍然再运行的文件就会出现新写入的内容啦,这就是所谓的持续跟踪。当然,想要退出这个程序也很简单,使用快捷键ctrl+c即可结束tail的持续跟踪。
grep命令,用于从文件中通过关键字过滤文件行,语法:grep [-n] 关键字 关键路径。这里的选项-n为可选项,表示在结果中显示匹配的行的行号;关键字是必填项,表示过滤的关键字,可能带有空格或者其他特殊符号,所以建议带上双引号;文件路径,同样是必填项,表示要过滤内容的文件路径,可作为内容输入端口。
wc命令,用于统计文件的行数、单词数量等,语法:wc [-c -m -l -w] 文件路径,这里的选项就是我们想要统计的元素,-c统计bytes数量,-m统计字符数量,-l统计函数,-w统计单词数量;文件路径就是被统计的文件,同样可作为内容输入端口。如果说不带选项直接输出的话,显示出的内容分别是l,w,c和文件路径。
管道符(|),含义是将管道符左边命令的结果,作为右边命令的输入(联系下上面红色字体“内容输入端口”)。简单举个例子就是wc test.txt的输出结果与cat test.txt | wc 的输出结果是相同的。本人学到这里突然发现前面在记重定向符笔记的时候已经有了有关概念了......而且这里的管道符是可以连续使用的,比如 cat test.txt | grep "speacial" | wc -w,这样不仅能输出过滤关键字“speacial”的行,而且可以统计这些行的单词数。
Day Three
vi/vim编辑器:vi/vim是visual interface的简称,是linux中最经典的文本编辑器。其中有三大工作方式,包括命令模式,输入模式和底线命令模式。
首先命令模式,顾名思义就是以命令驱动的模式,而这个命令就是我们所按下的键盘按键,同时在这一模式下不能进行自由的文本编辑。
快捷键如下:


其次是输入模式,也就是所谓的编辑模式,可以进行自由的文本编辑。
最后是底线命令模式,发出的命令以:开始,通常用于文件的保存、退出。
以上三种模式的切换是基于命令模式的,即命令模式是三种模式的核心,想要转化到另外两种模式必须从命令模式发出相应的命令。
进入vim编辑器命令模式的语法:vim filename。
这里会存在两种可能,其一是对应的file存在,那么就是对这个文件进行编辑;其二,这个文件不存在,那就是创建一个新的文件,然后在这个新的文件内编辑。
Linux用户和权限
前面我们学习时用到的空间实际上只有在自己用户的home目录内,因为我们的许多操作都很自然的实现了。但是当我们将目录cd到根目录之后,再尝试做一些操作就会出现权限不够的提示了。因此,这就要用到我们前面使用过的su - root进入管理员模式,其拥有Linux系统中的最高权限,即使再home目录之外也能完成我们想要的操作。
su命令(switch user),用于账户切换的系统命令,语法为su - [用户名]。这里的-选项是可选的,表示是否在切换用户账号后加载环境变量,参数则是对应的用户名,如果不填则是默认切换到root用户。如果是普通用户切换到其他用户是需要输入密码的,root用户则是能够直接切换。
切换用户之后,可以用exit命令来切换回上一个用户,或者使用ctrl + d的快捷键。
sudo命令,当我们切换到root用户之后的确能使用系统的全部权限,但是由于权限太大,可能会因为误操作导致系统损坏。因此,我们可以使用sudo命令将sudo 后跟上的命令临时赋予root权力。但并不是所有的普通用户都有root权力,我们需要对普通用户进行配置root认证。
配置root认证,首先我们先进入root用户,输入visudo命令会进入sudo文件内。这时候我们在该文件的最后一行输入:(这里的name是普通用户的用户名)
name ALL=(ALL) NOPASSWD: ALL
随后切回我们的普通用户,尝试输入一些带有sudo的命令,如果成功执行了那么你的root认证就配置好啦!
用户、用户组管理
linux中可以配置多个用户,配置多个用户组,用户可以加入多个用户组中。管理权限的管控级别则有两个,分别是针对用户的权限控制,以及针对用户组的权限控制。比如,针对某文件可以控制用户的权限,也可以控制用户组的权限。所以我们需要学习在Linux中进行用户’用户组管理的基础命令,为后面学习权限控制打下基础。
注意:以下命令都需要基于root用户执行
创建用户组语法:groupadd 用户组名
删除用户组语法:groupdel 用户组名
创建用户语法:useradd [-g -d] 用户名。这里的两个选项,-g代表指定用户所在的用户组,如果不指定-g的话,会创建同名组并自动加入(意味着用户不会是在野的,至少在一个用户组下),但是如果已经有了一个同名组,就必须指定,不能省略。选项-d则是指定用户Home路径,如果不指定就默认存在:/home/用户名,和我们前面用到的/home/name一致。
这里需要注意的是,实际命令和语法并不相同,这里的例子中选项并不是跟在命令后的,而是放在选项对应的linux路径前,把他们拆出来单独用也是一样的。
useradd test -g testgroup -d /home/testhome
删除用户语法:userdel [-r] 用户名,这里的选项-r表示的是删除用户的Home目录,不使用-r则保留目录,仅删除用户。
查看用户所处组语法:id 用户名,如果不提供用户名,则显示自身所在组。
修改用户所在组:usermod -aG 用户组 用户名,将指定用户加入指定组(并不会退出原组)
查看当前所有用户:getent passwd。呈现出来的用户信息包括以下七条:
用户名:用户密码(x):用户id:组id:描述信息(无用):Home目录地址:执行终端
查看当前所有用户组:getent group。呈现出来的用户组信息包括以下三条:
组名称:组认证(x):组id
Day Four
查看权限控制
首先我们使用ls -l能够详细地查看当前目录下详细的目录信息:
drwxr-xr-x. 3 root root 21 Dec 14 23:33 home
而这一条信息有关于权限控制的部分则可以具体分为以下三块:
第一,drwxr-xr-x 表示文件、文件夹的权限控制信息。这一串字符可以看作一个类型标签字符和三组权限表示,首先是第一个字符,如果是 - 则代表其为文件,d 则代表其为文件夹,l 则代表其为软链接。然后是三组权限,每三个字符为一组,前三个字符代表所属用户的权限,然后是所属用户组的权限,以及其他用户组的权限。三个字符分别代表读r(read),写w(write)和执行r(execute)的权限,如果该字符位是 - ,则该用户不具备指定权限,反之则具备。
另一方面,这三个权限对于文件和文件夹来说的作用有细微的差别。读权限对于文件来说就是可以查看文件内容,比如我去cat它,对于文件夹来说则是可以ls它;写权限对于文件来说就是可以修改此文件,比如用vim去编辑,对于文件夹来说则是可以再文件夹里去创建、删除和改名;执行权限对于文件来说意味着可以将其作为程序执行,类似windows中执行.exe文件,对文件夹来说则是可以更改路径到它,即可以cd。
第二,信息中的第一个root表示文件、文件夹所属的用户;第三,信息中的第二个root表示文件、文件夹所属的用户组。
chmod命令
前面一小节提到的是关于文件和文件夹的权限查看,但是这些权限并非一成不变的,想要去修改它就要用上我们马上要学到的chmod命令了,不过需要注意的是对某个文件、文件夹的修改必须要是该文件、文件夹的所属用户或者root用户。
语法:chomd [-R] 权限 文件或文件夹。这里的选项 -R 和前面的rm的-r选项一致,同样起到递归的作用,作用于文件夹的时候可以将内部文件的权限一起修改,下面给出一个例子:
chmod u=rwx,g=rwx,o=rwx test.txt
chmod -R u=rwx,g=rx,o=r test
执行以上命令之后,test.txt文件的权限就变为 rwxrwxrwx,而test文件夹以及其内部文件的权限则变成了 rwxr-xr--。(这里的u为user,即所属用户;g为group,o为others)但是如此修改权限不免有些麻烦了,每次都得输入对应的用户和权限,因此我们引入快捷权限修改方式,即用三位数字代表对应的权限。而这三位数字从000到777分别代表无权限到全权限,需要记忆的结点为r为4,w为2,x为1,那么rwx即为7,r-x即为5,-wx即为3。这里考考大家r-x-w----应该如何表示?
chown命令
前面我们学习了有关文件权限的修改,那么除了文件权限之外,文件的所属也是文件信息的重要部分,因此现在让我们来学习chown命令。(该命令只针对root用户)
语法: chown [-R] [用户] [:] [用户组] 文件或文件夹,这里的R和前文相同,不再赘述。这里需要注意的就是冒号:的用法,如果只改变所属用户的话,直接 chown 用户 文件 即可;如果只改变所属用户组的话,则是 chown : 用户组 文件(记得加上:以区分用户还是用户组就行)。
各类实用小技巧
1.强制停止
我们前面学到了一个tail命令去查看文件尾部内容,大家可以试试看单单输入tail命令的运行结果。不出意外的,你的程序会卡在tail命令执行的时候,这个时候就可以使用我们的强制停止快捷键ctrl + c。除此之外,但我们命令输入有误时,又不想去修修改改,也可以强制停止当前命令来取消当前命令然后重新修改。
2.强制退出
其实这个命令前面提到过,在我们切换普通用户和root用户时我们可以用ctrl + d来快捷退回上一个用户。除此之外,还能强制退出某些特定程序的专属页面,比如说在linux中的python编辑页面,使用前面的强制停止命令是无法退出的,这时候就要用上强制退出快捷键了。(但是对vim编辑器无用,还是得老老实实:wq)
3.历史命令搜索
输入history可以查看我们的历史输入命令,数字越大的就是越晚输入的命令。同时,history的输出结果也可以被grep通过管道进行过滤。对于history的历史命令,我们还可以通过 ! 来查找最晚的前缀相同命令,比如前面我们输入的python命令,我们只要输入 !py ,就会通过历史命令从后往前搜索前缀相同的命令并执行,相当于我们执行了python命令。
不过!这一命令其实是不太实用的,因为很容易就忘记前面我们使用了哪些命令,如果匹配到了奇奇怪怪的命令就有可能出错。因此就有了一个新的筛选命令,同时也是快捷键ctrl + r,根据我们输入的关键字符去匹配历史命令,这个命令同样是匹配最晚的,但是我们可以通过键盘的左右键来保留这一命令,而不是像 ! 命令一样直接执行(当然也可以,搜索之后按回车即可)。
4.光标移动快捷键
ctrl + a快速跳到命令开头,ctrl + e快速跳到命令结尾,ctrl + 键盘左右键分别跳到前一个单词和后一个单词(但是主播的电脑ctrl + 键盘左键是全屏???)。
5.快速清屏
快捷键为ctrl + l,输入命令clear也能达到相同效果。
Day Five
使用yum在linux中安装应用软件
yum:RPM包软件管理器,用于自动化安装配置linux软件。类似于windows的.exe文件以及mac的.pkg文件,linux系统中的应用程序后缀为.rpm。当然,yum文件的使用有几个要求。首先是root权限,可以切换到root用户,也可以使用root权限配置下的sudo命令。然后就是需要连网。
语法:yum [ -y ] [ install | remove | search ] 软件名称 。选项 -y 代表命令执行过程中自动确认,无需手动确认安装或者卸载过程。
这里我们先使用上面的yum命令我们的linux系统下载一个wget,看看yum命令的运行过程。
当然,以上我们所使用的环境都是在虚拟机的linux环境下,如果有同学用的是wsl里的Ubuntu的话,只需要将命令yum换成apt即可。
systemctl命令
linux系统中很多软件都支持使用systemctl命令控制“启动、停止、开机自启,这些能被systemctl管理的软件,一般也称之为服务。
语法:systemctl start | stop | status | enable | disable 服务名。前三个命令都好理解,分别是开启,关闭以及查看当前服务的状态,后两个则是为开机自启和关闭开机自启。
这里举一些系统内置的服务,比如 NetworkManager(主网络服务),nerwork(副网络服务),filewalld(防火墙服务),sshd(ssh服务,终端远程登陆使用的就是这个服务)。
软链接
其实我们不是第一次看到软链接这个名词,前面在学习查看文件权限的时候就有提到文件详细信息的开头字母如果为l,则代表这个文件是软链接。接下来我们就来学习有关软链接的知识。
软链接的作用是可以将一些文件或文件夹链接到其他的位置,类似于windows系统中的快捷方式。我们创建软链接的命令是ln,语法:ln -s 参数1 参数2。这里的选项-s代表的是创建软链接,参数1为被链接的文件或文件夹(源文件),参数2为要链接去的地方(快捷方式)。举例:
ln -s /etc/yum.conf ~/yum
我们执行这个命令,就相当于在home目录中创建了一个yum软链接,这个软链接指向根目录中的源文件/etc/yum.conf。这里需要注意的一点就是,参数1和参数2都需要使用绝对路径,如果使用相对路径的话创建的软链接会爆红的。
date命令
通过date命令可以在命令行中查看系统的时间,语法: date [ -d ] [ +格式化字符串],这里的参数 -d 表示按照给定的字符串显示日期,一般用于日期的计算;这里的格式化字符串则是通过特定的字符串标记,来控制显示的日期格式。
%Y 年 %y 年份后两位数字 %m 月份 %d 日 %H 小时 %M 分钟 %S 秒 %s 自1970-01-01 00:00:00 UTC到现在的秒数
date
date +%Y-%m-%d
date +%Y-%m-%d %H:%M:%S
date "+%Y-%m-%d %H:%M:%S"
以上四行代码,大家可以试试分别有什么效果。而选项-d则一般用于日期的计算,这里不过多说明,同样给出几个样例,大家可以自己试试运行结果:
date -d "+1 day"
date -d "-1 mouth" +%Y%m%d
可能大家在使用普通的date命令的时候就已经发现了自己的时间不太对,这是因为我们本地的时区设置错误了。如何更改呢?首先我们要进入root用户内,删除/etc/localtime文件,接着我们要用到前面学到的软链接,将/usr/share/zoneinfo/Asia/Shanghai 连接到我们原来删除的文件中。这时候我们再查看date就会是正确的啦!
这里还需要提到的一点就是有关系统时间的校准,对于比较老的系统可以使用ntp来校准,比较新的系统则使用chrony。操作也很简单,我们首先要下载对应的服务,使用前面的yum命令即可,然后是对下载好的命令进行systemctl操作,保证其start并enable,这样就可以保证我们的系统时间不偏离的。当然,这是自动校准的方式,如果想手动校准的话需要进入root模式,然后根据服务的不同选择下面的命令来运行。
ntpdate -u ntp.aliyun.com
chronyc -c makestep
IP地址
每一台联网的电脑都会有一个地址,用于和其他计算机进行通讯。这个地址主要有两个版本,V4和V6版本,这里我们主要学习V4版本。IPv4版本的地址格式为a.b.c.d,其中abcd是0-255的数字,我们可以在终端中使用ifconfig或者ip a命令来获取本机的ip地址。
其中我们会看到以lo开头的,以ens开头的等部分。其中ens开头的是我们的主网卡,如果是centos系统的话大概是ens33,如果和主播一样用rocky大概是ens160。这里我们主要看ens开头的就好了,ip地址是inet 后跟着的一串数字。
除了我们本机的ip地址,还有几个特殊的ip地址需要我们了解。首先是127.0.0.1,这个地址用于代指本机。然后是0.0.0.0,这个地址也可以用于代指本机,除此之外它在端口绑定中可以用于确认绑定关系,并且在一些ip地址限制中可以表示所有ip(如放行规则设置为0.0.0.0,代表所有ip都可以通过)。
除了ip地址,每一台电脑还能通过它的主机名和其他计算机进行通讯,无论是Windows还是Linux都可以对我们的系统设置主机名,其中Linux的主机名查看命令为hostname。当然,我们也可以对主机名进行修改,命令为 hostnamectl set-hostname 主机名。
域名解析
前面我们提了ip地址和主机名,但是使用的过程中去记住ip地址显然是不现实的。其实我们日常生活中对一些地址的访问更多的是使用字符化的地址,比如www.youkuaiyun.com,而这种字符化的地址,我们称之为域名,而将域名从字符串转化为ip地址的过程,我们就称之为域名解析。
以访问www.youkuaiyun.com举例,系统会先检查本机文件中是否存在对应的地址记录(私人地址本),windows系统:C:\Windows\System32\drivers\etc\hosts,Linux系统: /etc/hosts,假如说本机文件中存在对应的地址,就可以直接打开网址。反之,本集中不存在的话就需要联网到DNS服务器(如114.114.114.114,8.8.8.8等)去查询,如果该服务器中存在对应地址也同样能打开,反之则404 not found。
既然如此,这里我假设大家学习的时候都是用远程终端去控制的Linux系统,并且之前远程控制使用的是ip地址链接的,那么请大家尝试以下通过修改我们Windows中的私人地址本,使用域名来远程连接上Linux系统。
Day Six
我们获得虚拟机中的Linux系统的IP地址实际上是通过DHCP技术获取的,但是DHCP对IP地址的获取是动态的,系统每次重启都会获取一次,这就可能会导致我们的IP变更。如果我们又使用域名解析的方式去连接虚拟机,我们还得不断在私人地址本中不断更改原地址,因此接下来我们学习如何配置Linux系统的固定IP。
配置固定IP地址需要两个大步骤,首先要在VMware Workstation中配置IP地址网关和网段(IP地址的范围),然后要在Linux系统中手动修改配置文件,固定IP。以下用主播使用的rocky系统来演示。
第一步,我们在VM中上栏中找到编辑,选择虚拟网络编辑器。找到VMnet8对应的选项,将其的子网IP改为192.168.88.0,子网掩码改为255.255.255.0,接着我们打开NAT设置,把网关IP改为192.168.88.2,随后保存退出。第二部,来到Linux系统中,我们要对/etc/NetworkManager/system-connections/ens160.nmconnection文件进行编辑,将文件中的ipv4部分替换为以下部分:
method=manual
addresses1=192.168.88.100/24
gateway=192.168.88.2
dns=8.8.8.8;114.114.114.114
dns-search=
操作完成之后我们退出vim编辑器,然后使用systemctl重启网卡,命令为systemctl restart NetworkManager,更新完成之后使用ip a命令查看对应的ip地址,如果确实为192.168.88.100就代表已经配置成功了!
好了,前面讲了这么多有关IP的问题,但是都是在自己的虚拟机中操作,没有与外界的交互。接下来让我们用Linux进行网络连通和下载。
ping命令
ping命令用于检查指定的网络服务器是否是可联通状态,语法: ping [-c num] ip或主机名,这里的选项-c表示检查的次数,不使用-c选项的话将无限次数循环;参数ip或主机名,即被检查的ip地址或主机地址。
wget命令
wget的非交互式的文件下载器,可以在命令行内下载网络文件。语法: wget [-b] url ;这里的选项-b可选,表示后台下载,会将日志写入到当前工作目录中的wget-log文件;参数,url,下载链接。这里后台下载我们就可以利用前面学到的tail命令来查看wget日志,不过再带上-f选项就可以持续跟踪它的下载进度了。
curl命令
curl命令可以发送http网络请求,可以用于下载文件、获取信息等。语法:curl [-O] url。这里的选项用于下载文件,但参数url是下载链接时,可以使用此选项保存文件;参数url和上文一样,不过这里不一定是下载链接,也可以是普通的网络链接。
端口,是设备与外界通讯交流的出入口。端口可以分为物理端口和虚拟端口两类,物理端口又可以称之为接口,是可见的端口,如USB接口,RJ45网口,HDMI端口等,虚拟端口是指计算机内部的端口,是不可见的,是用来操作系统和外部进行交互使用的。那么这个端口又有什么用呢?前面我们已经提到,IP地址可以用于两台设备之间的交流,但是两台设备之间的交流往往会聚焦于一个地方,比如微信、QQ等比较小的领域,这时候端口就派上用场了,帮助计算机直接锁定对应的、具体的程序,确保程序之间的沟通。
而我们的Linux系统则是一个拥有非常多端口的系统,它可以支持65535端口,这6万多个端口具体分为3类进行使用,包括公认端口、注册端口和动态端口。
其中,公认端口为1~1023号,通常用于一些系统内置或固定程序的预留使用,比如我们远程连接虚拟机使用的SSH服务用的就是22端口,HTTPS服务用的就是443端口,因此非特殊需要我们不要占用这个范围的端口。注册端口为1024~49151号,通常可以随意使用,用于松散的绑定一些程序、服务。最后是动态端口,从49152~65535,通常不会固定绑定程序,而是当程序对外进行网络连接时临时使用。
理论讲完了,该说说实操了。首先我们先安装nmap命令,用于查看对应ip地址的外部端口。语法:nmap 被查看的IP地址。首先我们可以试试查看本机外部端口情况,这里的命令应该写什么呢?大家可以回忆下特殊的IP地址。
接下来我们安装net-tools,使用netstat命令来查看本机端口的占用情况,语法:netstat -anp。执行完命令之后会发现终端弹出了一大堆看不懂的信息(别担心,主播也看不懂),但是我们知道这里显示的是本机中所占用的端口,我们同样知道端口是有编号的,那么我们能不能通过一个方法去把我们想要查看的端口给筛选出来呢?当然可以!这时候请回忆一下grep的使用。
进程管理
首先我们要明确什么是进程。无论是在Windows还是Linux中,程序都是由操作系统所管理的,而程序一旦开始运行,操作系统就会将其注册为系统中的一个“进程”,并且为每一个“进程”分配一个独有的进程id(进程号)。 那么我们如何去查看当前系统中的进程呢?在Windows系统中只要打开任务管理器就能查看了,但是在Linux系统中就需要我们熟悉的命令了。
ps命令,语法: ps [-e -f],选项-e代表显示全部进程,选项-f表示以格式化形式给出信息(即展示全部信息),一般来说执行ps命令直接 ps -ef即可。
ps -ef所得到的信息从左到右分别是UID(进程所属的用户的id)、PID(进程id,即进程号)、PPID(进程的父id,即启动该进程的进程的id)、C(该进程的CPU占用率)、TTY(启动该进程的终端序列号,如果显示为?则表示该进程由系统内置启动)、TIME(该进程占用CPU的时间)、CMD(进程的启动路径或启动命令)
kill命令,语法: kill [-9] 进程号。用于关闭对应进程,选项-9表示强制关闭。
Day Seven
主机状态
我们首先学习一个top命令,查看当前系统的资源占用(类似于Windows的资源管理器,可以看到cpu占用等一系列信息)。并且top界面中的信息是实时刷新的,间隔为5s左右。top信息详解:top界面置顶了五条信息,从上到下分别为top、tasks、%cpus、kib mem、kibswap。
top - 15:59:10 up 4:30, 5 users, load average: 0.16, 0.25, 0.15
top:命令名称;15:59:10:当前系统时间;up 4:30,系统启动了四个半小时;5 user 5个用户登录;load average:1,5,15分钟的cpu负载。
Tasks: 272 total, 1 running, 271 sleeping, 0 stopped, 0 zombie
Tasks :272个进程;1 running:一个进程子在运行;271 sleeping:271个进程睡眠;0 stopped :0个停止进程;0 zombie:0个僵尸进程。
%Cpu(s): 2.0 us, 5.7 sy, 0.0 ni, 88.6 id, 0.0 wa, 1.2 hi, 2.5 si, 0.0 st
us:用户cpu使用率;sy:系统cpu使用率;ni:高优先级进程占用cpu时间百分比;id:空闲cpu率;wa:io等待cpu占用率;hi:cpu硬件终端率;si:cpu软件中断率;st:强制等待占用cpu率。
MiB Mem : 1673.6 total, 93.6 free, 1160.1 used, 584.4 buff/cache
total:总量;free:空闲;used:使用;buff/cache:buff/cache占用;
MiB Swap: 2060.0 total, 2022.0 free, 38.0 used. 512.5 avail Mem
同上。
然后是下面的详细信息,对于这些信息我们主要关注PID进程号,RES进程物理内存占用,%CPU进程CPU占用率以及%MEM进程内存占用率即可。
前面我们只是使用了top命令,当实际上top命令也是存在可选选项的。-p 表示只显示某个进程的信息;-d 表示设置刷新时间,默认为5s;-c 表示显示产生进程的完整命令,默认是进程名;-n 表示指定刷新的次数,默认为无限刷新;-b 表示以非交互非全屏模式运行,以批次的方式执行top,一般配合-n 和重定向符写入对应文件;-i 表示不显示任何闲置的和无用的进程;-u 表示查找特定用户启动的进程。
这时候就有人要问了,主播主播,你这个方法还是太吃操作了,必须在top命令使用的时候加上选项,有没有更简单强势的方法。有的兄弟,有的,在top界面我们也可以通过快捷键来快速切换对应选项。h键能查看所有快捷键,以下列出几个常用的快捷键:c,效果和-c一样,显示详细的进程启动信息。i,等同于-i选项。f,进入f界面之后我们可以利用空格选择top界面中展示的信息。P(注意是大写P),按照cpu占用率排序。T,按照时间排序。m,按照内存大小排序。e,切换进程内存显示单位。E,切换顶部内存显示单位。t,切换显示CPU状态信息。m,切换显示内存信息。
磁盘信息监控
df命令,查看硬盘的使用情况。选项-h能以更加人性化的单位显示。
iostat命令,可以查看cpu、磁盘相关信息。语法: iostat [-x] [num1] [num2]。选项-x可以显示更多信息,num1表示刷新间隔,num2表示刷新次数。这里可能会遇到和主播一样的问题,就是系统没有iostat命令,这时候我们得自己安装下,用yum就好了。
这里的内容也很多,我们主要关心rKB和wKB以及%util即可,分别是磁盘的读写以及磁盘的利用率。
网络状态监控
可以使用sar命令查看网络的相关统计,但是因为sar命令非常复杂,我们这里仅用于统计网络,因此我们给出固定的语法:sar -n DEV num1 num2,这里的num1,num2和前文相同,不再赘述。以下是对sar命令的信息解读,这里确实都太专业了,主播也看不懂。但是我们终点关注rxKB/s和txKB/s即可。
注:如果你执行命令没得到有关结果,并且系统反馈为 “无法打开 /var/log/sa/sa19: 没有那个文件或目录,请检查是否允许数据收集” ,请你用systemctl检查下你的sysstat有没有启动,如果是死掉的(dead)的话自然是用不了sar命令的。

环境变量
不知道大家在听到这个名词的时候熟不熟悉,主播看到这玩意儿的时候就想到几个月前从DEVC++转为VSCode的时候在Windows系统上安装的mingw环境变量。实际上这两个的确是一个东西,前面我们在学which命令的时候就说过,我们的所有命令其实都是一个程序,那么我们去使用它就相当于运行了一个程序。但是我们每次使用命令都是以相对路径的形式,按理来说相对路径的使用应该在其所在目录下才能实现,但是无论我们在哪一个地方都能够运行这个命令,这就是环境变量的功劳了。而环境变量的实质是一个keyvalue型的结构(map键值对误入)。
引入环境变量之后,我们先学习如何查看环境变量——命令env。可以看到Linux系统中存在一系列的环境变量,这时候回到我们的引入,环境变量是如何实现cd在任何目录下都可以执行的呢?我们用env | grep找到PATH这个环境变量,PATH是它的key,后面的目录是它的value(多个目录由:分开),而我们执行cd命令的时候,就是通过PATH找到cd的绝对路径去实现。
$符号
$符号用于取键值对中的值。我们使用env去慢慢找我们想要查看的环境变量是不太现实的,假如我们已知环境变量的key值,就能用echo $key 给出对应的value值。
自行设置环境变量
前面说了那么多都是系统已经设置好的变量,但是环境变量最后还是要服务于使用者。因此我们这里介绍临时设置环境变量和永久设置环境变量去方便我们对Linux的使用。
临时设置:我们要用到export命令。语法:export key=value;设置完之后我们用$值取一下就知道有没有成功了!
永久设置:前面我们临时设置的环境变量,当我们关闭终端重新进入的时候再尝试取一次就会发现已经不起作用了,因此我们这里再介绍有关永久设置的内容。首先是对于当前用户的永久环境变量设置,我们要对home目录下的.bashrc文件进行编辑,再末尾使用export语法设置环境变量。但是单单设置完是不够的,我们要用source 文件名 让该文件生效,这时候再去echo $就能取到value值了!其次是有关永久设置的,操作不同点只有修改的文件,设置所有用户的永久变量修改的文件为/etc/profile
Day Eight
文件的上传和下载
本节的内容主要是根据你所使用的终端工具学习的(不过大差不差),这里以主播使用的MobaXterm举例。本节所讲的文件的上传和下载其实是相对于虚拟机和本机而言的,我们可以从虚拟机中下载文件到本机,也可以将本机中的文件上传的虚拟机中。
首先是文件的下载,我们在cd到任意一个目录下,MobaXterm的右侧栏就会出现这样一个选项——黄色小地球,我们这里对我们需要下载的文件右键,然后点击download就能下载到本机。


然后就是文件的上传,其实这也很简单了,可以直接通过对文件的拖动将本机中的文件拖到对应的目录中完成下载。
本来这里应该学习下命令行下载文件的,但是主播的MobaXterm做不到,只能遗憾离场了。
文件的压缩和解压
这里我们的Linux系统主要学习tar、gzip和zip。
.tar,称之为tarball,归档文件,即简单的将文件组装到一个.tar的文件内,并没有太多的文件体积减少,仅仅是简单的封装。.gz,常见为.tar.gz,gzip格式压缩文件,即使用gzip压缩算法将文件压缩到一个文件内,可以极大的减小压缩后的体积。对于以上两种格式,都可以使用tar命令对其压缩和解压缩。
tar命令
语法:tar [-c -v -x -f -z -C] 参数1 参数2 ... 参数N。这里的选项有很多,我们一个一个来讲。首先是-c,表示创建压缩文件,用于压缩模式。-v,用于查看进度,显示压缩、解压的过程。-x,与-c相反,表示解压文件,用于解压模式。-f ,要创建的文件,或者是要解压的文件,这个选项必须放在最后。-z,gzip模式,不用-z就是.tar格式。-C,选择解压的目的地,用于解压模式。
总结下来,压缩命令大多为 tar -cvf 、tar -zcvf 两种格式。大家这里可能对选项-f不太理解,这里举一个例子就知道了
tar -cvf test.tar 1.txt 2.txt 3.txt
-f的目的就是告诉系统,下一个参数就是为我要创建的压缩(解压)文件了,所以-f必须放在选项的最后。而选项-z一般要放在第一个,告诉系统我要压缩的格式为gzip。
另一方面,解压的命令则大多为tar -xvf、tar -xvf 压缩包 -C 目的地、tar -zxvf 压缩包 -C 目的地三种格式。如果不使用-C选项,则解压到当前目录,其他内容简单不再赘述。
zip命令压缩文件
语法:zip [-r] 参数1 参数2 ...参数N,这里的选项和rm,cp的作用一致。给几个例子:
zip test.zip a.txt b.txt c.txt
zip -r test.zip a b c.txt
unzip命令解压文件
语法:unzip [-d] 参数,这里的-d选项和tar中的-C选项作用一致。
unzip test.zip
unzip test.zip -d ~
这里要注意的一点是,当我们解压文件到对应目录时,压缩包中的文件可能会直接覆盖原本同名的文件(如果你的版本比较老的话),或者会弹出一个选项框,选项分别表示:
| 选项 | 按键 | 含义与动作 |
|---|---|---|
| yes | 按 y | 替换当前目录中的现有文件。用压缩包里的新文件覆盖掉旧文件。 |
| no | 按 n | 不替换,跳过这个文件。保留当前目录中的旧文件,压缩包里的这个文件不会被解压出来。 |
| All | 按 A (大写) | 全部替换,不再询问。对本次解压中所有后续的冲突文件,都自动选择“是”,覆盖所有同名文件。 |
| None | 按 N (大写) | 全部不替换,不再询问。对本次解压中所有后续的冲突文件,都自动选择“否”,跳过所有同名文件。 |
| rename | 按 r | 重命名。将要解压出来的文件进行重命名(例如,系统会建议一个类似 1.txt.1 的名字),这样两个文件都会保留。 |
至此,主播的Linux基础知识就已经学完了,接下来是实战训练环节,就不继续更新日志了,当然,主播后续学习新的知识的时候也会根据自身需要来开日志记笔记的!也希望这些慢慢积累的笔记会成为我未来回首往事的一笔财富吧!

被折叠的 条评论
为什么被折叠?



