5.1系统简介
我们之前在使用批处理时都是在windows系统上进行操作,那么我们今天来认识并学习llinux操作系统,首先我们要去认识一些操作系统。
5.1.1系统类别
- windows
- 个人:windows 7, windows 8, windows 10, windows 11
- 服务器:windows server 2003、windows server 2008、windows server 2012
- linux版本
1、CentOS:服务器 - 国内
CentOS5.5、CnetOS6.0、CentOS7.3
2、Redhat:服务器 - 国外
Redhat5.5、Redhat6.0
3、ubuntu:移动嵌入式设备
ubuntu 10.04、ubuntu 12.04、ubuntu 14.04等
4、kali:这个系统中集成了大量的渗透测试工具/软件
5.1.2认识linux
(一) 什么是linux
Linux是一套免费使用和自由传播的类Unix操作系统,是一个多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
说的简单点,它就是一个操作系统
- 主要是基于命令来完成各种操作,有点类似于DOS
(二)linux的特点
- 操作几乎都是靠各种的命令来完成的
- 非常稳定
- 开源【所有用户都可以使用、修改代码】
- 免费
Linux属于双授权系统(包括mysql也属于双授权系统)
(三)双授权系统特点:
- 社区版:免费
- 商业版:收费,7*24技术支持,补丁更新速度快等。
5.2安装CentOS-7
(注意:笔者这里是利用VMware Workstation Pro虚拟软件使用CentOS-7进行操作,因此涉及VMware Workstation Pro的内容较多,请各位读者注意!)
5.2.1什么是 CentOS
说白了就是linux的发行版本Red Hat Enterprise Linux的再编译版本,但与之不同的是,Red Hat需要付费才能获得相应的支持,但是CentOS他免费,所以很多人称之为社区企业操作系统,这也就是上个小结中提到的双授权系统!
5.2.2CentOS-7下载地址:
https://mirrors.huaweicloud.com/home
https://mirrors.aliyun.com/centos/注意:这里是通过华为和阿里云的镜像网站进行下载,速度相对较快。下载之后是一个系统镜像文件
小知识
系统镜像文件
- 系统镜像文件是用于安装新的操作系统的 系统镜像文件的后缀名是iso
- 系统镜像文件的使用方法是直接刻录到U盘,或者直接在虚拟机安装系统,不需要解压
- 下载镜像文件后请不要修改文件名称和属性!!!!
建议使用虚拟机安装操作系统。
VMware Workstation(不支持苹果系统)
VirtualBox(全系统支持)
5.2.3虚拟机软件的作用:
- 可以在物理机上模拟出一个或者多个虚拟机
通俗点来讲就是一个大电脑变成好几个小电脑,方便进行多端操作。
5.2.4使用虚拟机的目的:
- 可以避免频繁重新安装系统【学习/工作需要经常使用不同的系统】
- 物理机和虚拟机互相隔离,可以保护物理机安全
注意:
安装CentOS-7时候应注意,该系统有两种界面可供选择:
5.2.5 linux的两种界面:
于Windows一样,linux系统中同样也有交互界面,交互界面作用如下:
- 交互界面主要用于接收用户请求,并将请求发送给系统内核,
- 接收到系统内核返回结果,并将结果展示给用户
交互界面也被称为“shell”英文单词shell可直译为“贝壳”。“贝壳”是动物作为外在保护的一种工具。
可以这样认为,Linux中的shell就是Linux内核的一个外层保护工具,并负责完成用户与内核之间的交互。
而在Linux中,交互界面分为以下两种:
- 图形界面(GUI)图形化用户接口
操作系统类似于Windows,可以用鼠标进行操作
- 字符界面(CLI)命令行接口
类似于Dos系统,所有的操作都只能依靠命令
新手建议先安装图形界面方便操作。
5.3进入linux操作系统
安装完毕后linux会让你创建两个用户,这里要注意的是:
5.3.1Linux有两类用户
- root(管理员)用户
root用户可以修改linux系统的全部文件,但是每个Linux系统一般只有一个用户。
- 普通用户
只能操作home目录下的用户同名的家目录及tmp目录下的文件,tmp目录会在下一小章提及。
(这里我们需要注意的是,在登陆系统是输入密码时默认不显示的,继续操作即可!)
输入账号密码即可进入系统,字符系统界面如下图
(如上图,我们已经成功进入系统,完成!)
5.3.2 Linux终端:
终端,是连接输入输出设备,用于与计算机系统相连,通常离计算机较远。可用于将数据输入计算机或计算系统并从中转录数据。一般终端分为两种:
- 输入终端:如鼠标,键盘,耳机等输入终端
- 输出终端:如显示器,耳机,打印机和投影仪等
我们通过上面文字会发现,终端不仅仅是一个设备或者类型,同时因为Linux操作系统的特殊性,Linux的输出终端也会不同。具体输出终端的分类如下:
- 物理终端:mainframe用分频器链接的显示器和键盘
因为Linux通常连接的是服务器,因此会有多台显示器和键盘作为Linux的输入终端和输出终端,以便更快速的进行操作。
- 虚拟终端:在Linux主机内部通过软件模拟出来的终端,
我们可以简单理解为,每一个字符页面就是一个终端,而这里需要注意的是,图形界面可以打开多个终端,因此图形界面会有多个终端。
- 伪终端:基于软件远程链接实现
通过网络或其他操作在别的主机进行连接的终端,一般被称为伪终端。
(因为设备原因,这里我们只针对虚拟终端和伪终端进行进一步讲解,如有不足之处还请见谅)
5.3.2.1 虚拟终端详解
如下图,我们打开了一个Linux系统,就自动进入了他的终端。(因为作者的系统为CLI字符界面,因此作者原则上只有一个虚拟及物理终端!!!)我们若想查看终端编号,则需要输入下面命令
tty
我们来看结果
它会显示一个目录,我们进去来看一下
cd /dev
通过ls -l,我们会发现,这个文件里面全部都是设备文件,而tty1则表示该终端的编号。
(因为设备原因,作者并没有GUL界面的Linux,因此无法演示。请各位谅解)。
但这里我们需要注意的是:每个终端都有属于它自身的编号,因此我们可以通过tty查看所有终端的编号!!!
5.3.2.2 伪终端详解
与虚拟终端大致相同,这里我们通过xshell进行连接来查看各个终端的区别。
连接1
连接2
连接3
我们发现三个结果的目录似乎都是一样的,我们cd一下
由此得知,我们开启了三个伪终端,编号分别是0,1,2;这里我们得出一个结论:
伪终端的编号以0为开头,依次向后进行排序,虚拟终端也是如此!!!
小贴士:
字符终端一般不支持鼠标滚轮进行翻屏,这里分享两个快捷键
终端向上翻屏shift+pgup终端向下翻屏shift+pgdn
5.4 Linux的基础界面
我们已经通过上述操作成功进入linux系统中,接下我们来看一下提示符和根目录下的文件及用途
5.4.1 linux的提示符
它可以让你明白你操作系统的用户名,操作系统所在的主机名、当前所在位置以及你的系统身份。
举例:
[root@localhost ~]#
提示符格式
[当前用户名@当前的主机名 当前所在位置]身份标识符
注意:root的身份标识和用户的身份标识不同
举例
root的提示符
[root@localhost ~]#
tom的提示符
[zxhk@localhost ~]$
可以看到,管理员于用户不仅仅是名称不同,而且后面的标识符也不相同,后面的小符号被称为身份标识符
身份标识有两种:
- root权限标识符是:”#“,
- 用户的标识符是”$“
而在格式中当前所在位置即为当前工作目录
工作目录的表示型式:
- 型式1:具体的目录
- 型式2:~(”~”表示的是当前用户的家目录)
- 型式3:/(表示的是根目录)
型式1举例:
[root@localhost etc]#
该案例所表达出的信息如下
1. 当前用户名是root
2. 当前计算机的主机名是localhost
3. 当前所在路径是 etc
4. 当前用户身份是 管理员
型式2举例:
[tom@localhost etc]$
该案例所表达出的信息如下
1. 当前用户名是tom
2. 当前计算机的主机名是localhost
3. 当前所在路径是 /etc
4. 当前用户身份是 普通用户
型式3举例:
[root@localhost /]#
该案例所表达出的信息如下
1. 当前用户名是root
2. 当前计算机的主机名是localhost
3. 当前所在路径是在根目录下
4. 当前用户身份是 管理员
那么什么是家目录呢?
家目录:
就是用户主目录。家目录分为两种
- 管理员(root)家目录在根目录下的root文件中;
- 普通用户:家目录在/home和用户同名的拿个目录就是用户家目录,(具体在下小节阐述)
5.4.2 Linux目录结构
Linux和Windows在存储上有一点点小区别,具体如下:
(一)Linux和Windows的区别:
Linux是单根系统,而Windows是多根系统。
因为存储系统不同,目录结构也有所不同
windows的目录结构
- windows 是一个多根系统
- 每个磁盘/分区都是一个根
- 你在存储文件的时候,文件一定是存储在某一个根目录之下
- 目录结构是倒树状结构
linux的目录结构
- linux是一个单根系统
- 你在linux中存储文件,只会有一个存储位置,就是 /
- 目录结构是倒树状结构
换句话说,Windows可以进行磁盘分区,可以分出c盘、d盘、e盘、f盘等等,而Linux只有一个磁盘分区,就是"/"。
(二)Linux的核心目录结构
(Linux目录结构如下图,分支的源头即为根目录)
(三)Linux根目录下的主要文件 及用途
Linux初始目录大概如下,所对应的是目录的存放文件类型及用途(如下代码)
/bin:存放的的是命令 /sbin:存放的的是命令 /tmp:存放临时文件(任何用户都可以在这个目录进行读写操作,但是只能操作自己的文件; 这个目录下的文件30天没有被访问或使用,就会被自动删除) /etc:存储各种配置文件 /etc/inittab /etc/rc.local /etc/httpd/httpd.conf /etc/sysconfig/network-scripts/ifcfg-eth0(网卡配置文件) /home:存放普通用户家目录 /root:root用户的家目录 /lib /lib64 /usr:自定义安装软件保存位置 /usr/bin:存放的的是命令 /usr/sbin:存放的的是命令 /var:存储经常发生改变的文件(日志) /var/log/messages /var/log/secure /boot /sys /dev:存储设备文件 /proc
5.5 Linux的命令
5.5.1Linux命令格式
Linux命令格式有以下三个组件构成
命令 [选项] 参数
三个组件的作用
- 命令:linux中所有的命令,是严格区分大小写
- 选项:选项是用于控制命令的执行过程
- 参数:参数是指命令的作用对象
其中,选项分为长选项和短选项,区别如下
- 短选项:-字母
- 长选项:--单词
(一般短选项就是长选项的缩写,并且短选项可以合并,因此大部分情况下都是用短选项来写命令!!)
另外,Linux中文件类型与属性也较为独特。
Linux文件特点
- 命令和文件名都是严格区分大小写
- linux文件的后缀名对于文件的属性没有任何影响
- linux中的核心哲学思想:一切皆为文件
5.6 Linux基础命令
为了方便排版,笔者将常用的基础命令单独做一章节,希望各位海涵。
现在我们通过Linux的一些基础命令来操作系统
5.6.1 pwd 命令
全称:Print Working Directory
作用:显示当前所在路径
格式:
pwd
举例1:
我查看我现在当前位置
[root@localhost ~]# pwd /root
下一行给出反馈/root,说明我们现在所在的位置为root目录下
举例2:
[root@localhost /]# pwd /
同理可得我们现在处于根目录下
[root@localhost 222]# pwd /111/222
pwd命令就是一个查看当前路径命令,作用也仅仅如此,无其他作用。
5.6.2 cd
全称:Change Directory
作用:切换目录的命令
格式
cd 目标位置
这里不仅仅要用到格式,还要用到一些参数。大致参数如下
cd /:进入根目录 cd ~:进入当前用户的家目录 cd :进入当前用户的家目录 cd -:返回上一次cd前所在目录 cd ../:返回上一级目录
主要是用于切换其他命令,直接举例
例子1
[root@localhost /]# cd 111/222/333 [root@localhost 333]#
上一条代码是从根目录跳转到根目录下的111/222/333目录中
例子2
[root@localhost ~]# cd / [root@localhost /]#
从root的家目录下切换到根目录下
例子3
[root@localhost 222]# cd ../333 [root@localhost 333]#
从222目录跳转到同级目录的333中(因为222和333为同一级目录,所以要先返回上一级目录在进行跳转!)
注意:
- 路径是连续的,不能加空格
- 目录和目录之间,用/进行分隔
- 如果目标是一个目录,那么最后的/可加可不加
- 如果目标是一个文件,那么最后的/不可加!
cd跳转就这些内容,下一个!
5.6.3 clear和reboot
clear
作用:清空屏幕
格式:
clear
注:可用快捷键CTRL+L进行快速清空屏幕
reboot
作用:重启系统
格式
reboot
重启Linux系统
5.6.4 touch
作用:新建空白文本文件
格式1:
touch 文件名 在当前位置下创建文件
格式2:
touch 路径/文件名 在指定的位置下创建文件
几个常用的创建命令和路径
touch a1.txt # 在当前目录下创建a1.txt touch /a1.txt # 在根目录下创建a1.txt touch ~/a1.txt # 在当前用户家目录下创建a1.txt touch /etc/a1.txt # 在/etc下创建a1.txt touch /etc/sysconfig/a1.txt # 在/etc/sysconfig/下创建a1.txt touch ../a1.txt # 在当前所在目录的上一级目录中,创建a1.txt touch ../../a1.txt # 在当前所在目录的上一级的上一级目录中,创建a1.txt touch ../sysconfig/a1.txt #在当前所在目录的上一级目录中进入sysconfig目录中创建a1.txt
(注意:/ ../ ./ ~ 等一些符号在大多数需要查看路径的命令中都适用!! )
另外,因为Linux的宗旨是一切皆为文件,因此默认文件大部分为文本文件,但不存在后缀,因此可能需要操作者自行添加后缀以方便辨认!!!
5.6.5执行命令报错信息
通过上面操作我们可以看到,我们发出命令之后系统通常是没有反馈的,我们也不知道自己究竟是否做对了,这小节我们就着重说一下报错,这里要注意Linux的执行命令的一个特点。
执行命令可能成功也可能失败
- 通常执行成功是没有信息的
- 通常执行失败都会有返回信息
(因此,不给回复的结果往往是最好的结果0.O)
常见情况下导致命令执行失败下的几种可能
第一种:命令写错了,报错信息格式
bash: 命令 command not found ...(命令为未出)
第二种:文件路径错误,报错信息格式
touch: cannot touch /taaaa/aaa.txt : no such file or directory 命令: 报错提示 : 产生错误的原因(没有文件目录)
第三种:没有权限
命令 : 报错提示 : 产生错误的原因(无权访问) touch: cannot touch /taaaa/aaa.txt : permission denied
这种情况下普通用户比较常见,因此建议各位在练习的时候用root进行练习!
5.6.6 IS
作用:查看当前位置或者是指定的位置下,有什么文件
格式:
格式1:ls # 查看当前位置下文件 格式2:ls ./ # 查看当前位置下文件 格式3:ls 路径 # 查看指定的路径下有什么文件
注意:这里开始要有选项了
选项及注意:
- -a 显示所有文件,包括隐藏文件【linux中的隐藏文件是文件名前面是一个 . 】
- -l 显示文件的属性信息
- 如果-l后面跟的是目录的话,那么查看的是该目录下的所有文件属性
- 如果-l 后面跟的是文件的话,那么查看的直接就是这个文件的属性
- -h 以人类易读的方式显示文件的大小
- -dl 这个命令才是查看目录自己的属性,而不是查看文件下的属性
- (文件名称前面加.此类文件为隐藏文件)
之前我们说过,短选项可以合并,举个例子,我们想要显示所有文件,又想显示文件属性信息,我们就可以直接像这样子写
ls -al (查看目标)
话不多说直接举例(因为篇幅原因这里只展示一个结果结果,请各位见谅):
例子1:查看根目录下的全部的文件
ls /
例子2:查看当前位置下的全部文件
方案1:ls 方案2:ls ./
例子3:查看当前位置下所有文件的属性,包括隐藏文件
方案1:ls -a -l /home 方案2:ls -al /home 方案3:ls -la /home
看这个文档的结果
drwxr-xr-x. 8 root root 120 3月 14 20:02 . dr-xr-xr-x. 18 root root 272 3月 14 19:25 .. drwxr-xr-x. 2 root root 6 3月 13 19:42 2222 drwxr-xr-x. 2 root root 6 3月 14 19:33 a -rw-r--r--. 1 root root 0 3月 14 19:50 a.txt drwxr-xr-x. 2 root root 6 3月 14 19:33 b -rw-r--r--. 1 root root 0 3月 14 19:55 b.txt drwxr-xr-x. 2 root root 6 3月 14 19:33 c -rw-r--r--. 1 root root 0 3月 14 19:55 c.txt -rw-r--r--. 1 root root 0 3月 14 19:55 d,txt drwxrwxrwt. 15 root root 4096 3月 14 19:48 tmp drwxrwxrwt. 15 root root 4096 3月 14 19:48 tmp2
可以看到为上述内容,那我们该如何查看文档属性呢?
每行的第一个字符为文件属性,还有其他的文件属性类别,如下:
关于文件类型:
- 目录[d]:文件夹
- 一般文件[-]:文档,例如doc、txt
- 设备文件[b 或者 c]:指的是计算机中的外部设备,例如硬盘、u盘、键盘、鼠标
- 链接文件[l]:快捷方式
- ...
5.6.7 mkdir
全称:MaKe DIRectory
作用:新建文件夹/目录
格式:
格式1:在当前位置下直接创建目录:mkdir 目录名 格式2:在指定位置下直接创建目录:mkdir [选项] 路径/目录名
选项:
- -p 在父目录不存在的情况下会自动创建父目录
- -v显示创建目录的过程信息
注:目录后加空格输入路径及目录名,可同时创建多个目录
举例:
1.在tmp下,创建目录a1,在a1里面创建a2,在a2,里面创建a3
mkdir -p /tmp/a1/a2/a3
2.在tmp下,创建目录a1、a2、a3、a4四个目录
mkdir -p /tmp/a1 /tmp/a2 /tmp/a3 /tmp/a4
这里就不展示反馈了,直接下一个
5.6.8相对路径和绝对路径
绝对路径
- 就是完整路径
- 在写绝对路径的时候,是从根目录开始写
相对路径
- 不是完整的路径
- 在相对路径的时候,是从当前路径开始写
举例
当前我们的工作目录是 /etc/sysconfig
切换到根下
相对路径写法:cd ../../ 绝对路径写法:cd /
切换到sysconfig下面的network-scripts目录
相对路径写法:cd network-scripts 相对路径写法:cd ./network-scripts 绝对路径写法:cd /etc/sysconfig/network-scripts
老规矩,不举例,直接下一个。
5.6.9 cp
全称:copy
作用:复制文件或者是目录
格式:
cp [选项] 源文件 目的路径
选项:
- -a:在复制文件的过程中,保持文件的属性不变,另外,也可以实现复制目录【cp默认无法直接复制目录】
- -r:递归复制。这个选项就是单纯的用来实现复制目录。
- -i:在执行覆盖的操作会询问用户是否确定覆盖(如果使用了-i,则-f无效)
- -f:复制过程中如需覆盖,则不需要询问(强制覆盖)
- -v:显示复制过程
举例:将tmp下的目录a001复制到个根下
cp -a /tmp/a001 /
例子2:将当前位置下的c.txt 复制到home下
cp c.txt /home
这里需注意:
- 文件名前,如果有路径,就是从指定的路径下找文件,例如 /home/a.txt,就是从home下找 a.txt文件
- 文件名前,如果没有路径,就是从当前路径下找文件,例如 a.txt,就是从当前位置下找a.txt文 件
举例三:看看下面命令表示什么
cp -a a1 a2 cp -a a1 a2
第一次执行是将a1复制到当前文件名称为a2
第二次执行是将a1放到a2目录下
5.6.10 mv
全称:move
作用:移动文件或者是目录
格式:
mv 源文件 目的路径
这里与cp命令大差不差,只是cp命令保留原文件,mv命令不保留原文件
这里就举一个例子
下面命令执行效果
mv /home/a.txt /aaa
这个命令有三种可能:
- /aaa不存在的情况下,那么这个命令就是将a.txt移动到根下,并且名字修改为aaa
- /aaa存在,而且是目录,那么这个命令就是将 a.txt 移动到 /aaa下面,文件名不变
- /aaa存在,而且是一般文件,那么这个命令就是将 a.txt 移动到 /下,并且改名成 aaa 将原有文件覆盖
注意:(假设在移动ttt会做以下判断)
- 在进行移动的时候,会首先判断,目标ttt是否存在 如果不存在,那么就会将原始文件移动到 / 下,并改名成ttt
- 如果存在,那么就会判断这个文件的类型
- 如果类型是目录,那么就会将b.txt移动到ttt中
- 如果类型是文本文件,那么就会将目标位置下的ttt文件用b.txt覆盖掉
重要提醒:
- 在linux中,文件的后缀名,对于文件的属性,没有任何影响
- 在前面的案例中,我们加上后缀名,是为了让大家好理解,但是本质上加不加没区别
- 一定记住,linux中,仅仅看名字,是无法判断文件的类型的是文件还是目录
5.6.11 rm
全称:ReMove
作用:删除文件或者是目录的指令
格式:
rm -rf 要删除的文件或者目录
选项:
- -r:这个选项是专用于删除目录【在删除文件的时候,也可以加这个选项】
- -f:这个选项是强制删除【删除过程不会进行询问】
此命令用法类似于ls,直接给上例子
删除tmp下的a.txt rm -rf /tmp/a.txt 删除根下的a.txt rm -rf /a.txt 删除当前位置下的a.txt rm -rf a.txt rm -rf ./a.txt
5.6.12 通配符
通配符就是一些具有特殊的含义的符号,常用的通配符:
*:表示任意个任意字符 ?: 表示任意一个字符 |:前后可以分别写一个命令,通过管道符,可以见前面命令的执行结果传递给后面的命令,让后面的 命令再处理一次
*的举例
表示以a为开头的文件名
a* 可以匹配 aaaaaaa a11112312341234 a 不能匹配 caaasdfasfdasdfasf
表示以a为结尾的文件名
*a 可以匹配 asdfasdfasdfa w4dsgfdsgdfgaaasdasfda a aa 不能匹配 aaaax
表示文件名包含a
*a* 可以匹配 222afsf a
(*代表的是任意个任意字符,说明*那就是零到无数个的所有字符,因此全都可以表示出来)
?的举例
表示文件名是由三个字符的构成
???
表示倒数第三三个字符是c的文件
*c??
表示第三个字符是c的文件
*c??
(?与*的区别在于,?可以表示任意个任意字符,而?只能表示一个任意字符,在使用过程中视情况而定!!!)
|的举例
创建一个目录8并查看该目录的当前位置
mkdir 8|pwd
该命令的意思是先执行mkdir指令创建8的目录,然后查看8目录的位置,这么写看上去比较简洁,但同时命令相对来说也较为复杂,也是视情况而定!
5.6.13 cat命令及tac命令
cat
作用:查看文本文件的内容【可以将多个文件的内容一块显示出来】
格式:
cat 文件名 [文件名]
选项:
- -n:在每行前面显示行号
- -E:显示行的结束符
(【】里面也是个文件名,这是个选项,通过【】可以将多个文件内容一块显示出来,但基本上用不到,因此大部分情况下是不加【】的)
举例:
将当前文件下的a.txt 和passwd一起显示出来
cat a.txt passwd
(注意:用cat只能查看一般内容,不能查看目录!!!)
tac
作用:倒叙显示文件的内容
格式与用法与cat相似这里不多赘述
5.6.14 more
作用:查看文件的内容【比较适合查看大文件】
格式:
more 文件名
上例子
查看当前目录下的passwd文件
more passwd
(注意:在阅读大文件的时候可以看到下面有个如下图的一个进度条,这个进度条是该文件已经显示出来的进度,如果我们需要翻页要进行以下操作)。
more的操作
- 敲回车:显示下一行
- f:显示下一屏
- 敲空格:显示下一屏
- b:显示上一屏
- q:退出查看
5.6.15 less
作用:查看文件的内容【比较适合查看小文件】
格式:
less 文件名
less的操作:
- 敲回车:显示下一行
- f:显示下一屏
- 敲空格:显示下一屏
- b:显示上一屏
- q:退出查看
- (方向键也可以去查看上下行)
5.6.16 head
作用:查看文件的内容【默认是看文件的前10行】
格式:
head -n 文件名
要查看前几行就在n后面加几,话不多说直接举例
查看passwd前三行:
head -n3 passwd
查看passwd前十行
head passwd
5.6.17 tail
作用:查看文件的内容【默认是看文件的最后10行】
格式:
tall -n 文件名
选项:
- -f: 动态监控文件内容变化,常用于监控日志文件变化
-n :指定显示后 n 行(这个选项一般用于查看登录日志等用途,因为笔者这边并没联网,所以不做演示)
例子:
查看文件最后十行
tail /etc/passwd
查看passwd最后十五行
tail -n15 /etc/passwd
完成,下一个!
5.6.18 wc
作 用:统 计 文 件 中 有 多 少 行 、 单 词 、 字 符
格式:
wc [选项] 文件
选项:
- -w 统计单词
- -c 统计字符
- -l 统计行
直接举例:
查看pass下的单词行数和字符数
wc passwd
看结果
149 231 6307 passwd
上述结果意思分别是149行,231个单词及6307字符
例子2
查看passwd有多少单词
wc -w passwd
反馈如下
231 passwd
好了,接下来我们来个大活
例子3:
计算etc下有多少个文件
ls -l /etc |wc -l
看反馈
177
上面就是管道符的用处,将第一个命令的输出结果直接传递到第二个命令然后输出第二个命令的结果,当然也可以多个管道符一起是用来创建一个命令组。
5.6.19 vi
作用:创建或者是编辑一个文本文件
格式:
vi 文件名 vi 路径/文件名
vi在不同情况下使用也是有不同的效果的,
vi的三种效果:
(1)如果这个文件是存在的,而且是文本文件,那么vi就会直接打开这个文件
(2)如果这个文件是存在的,而且是目录文件,那么vi也可以打开这个文件,但是无法正常的保存
(3)这个文件不存在 ,vi会自动的创建一个新的空文件
注意:
- cat、head、tail、more、less 和vi 都可以查看文件中的内容
- 但是vi,主要是用于对文件内容进行修改
- 而其他的命令是查看文件的内容
vi和之前的cat,head,tail,more,less命令的相同点是都可以查看文件内容,但vi主要作用是对文件进行编辑和修改,而其它文件只能查看!!
vi是一个模块化的工具,因此他有三种模式:
vi的三种模式:
- 查看模式
- 输入模式
- 末行模式
三种模式功能也各不相同,我们一个一个看
vi查看模式
进入vi默认的就是查看模式,查看模式与其他模式的区别是左下角没有任何字样
如下图
查看模式功能:
1. 查看文件的内容
2. 在文件中,搜索指定的内容,可以进行跳转
3. 复制行或者是删除行
查看模式的操作:
nG:跳转到第n行
dd:删除光标所在的行【剪切】
yy:复制光标所在的行
p - 小:将剪切/复制的内容,粘贴到当前所在的行的下一行
P - 大:将剪切/复制的内容,粘贴到当前所在的行的上一行
u:撤销操作
/:/要搜索的内容:在/后面输入要搜索的内容,就可以直接开始搜索了,
n:继续向下搜索 N:继续向上搜索
以上就是vi查看模式的基本内容,接下来说说输入模式
vi输入模式
在查看模式中输入a、i、o、A、I、O中的任意一个字符进入输入模式,输入模式标识如下图
vi输入模式功能:
1. 可以在文件中进写入或者修改操作
vi输入模式操作
- a:在光标所在位置后输入
- i:在光标所在位置前输入
- o:换行进行输入
- A:光标所在位置行尾进行输入
- I:光标所在位置行首进行输入
- O:在光标所在上一行进行输入
如果想要退出输入模式按esc即可切换至查看模式
vi末行模式
在查看模式下按shift+“:”即可进入末行模式,末行模式标识如下图:
vi末行模式功能
- 1. 主要是用于执行各种的命令
- 2. 显示行号
- 3. 保存、退出
- 4. 行跳转
末行模式下的操作
(注意:vi中执行命令,其实就是在末行模式下,通过 !来执行)
- 数字:直接跳转到指定的行的行首
- 1 就是跳转到第一行
- 500 就是跳转到第500行
- $ 就是跳转到最后一行
- set nu:在每一行的前面,显示一个行号
- set nonu:取消每行前面的行号
- nohl:取消高亮
- hl:高亮
- w:保存 q:退出
- !:强制执行
末行模式下常用的操作组合:
1. wq 保存退出
2.wq! 强制保存退出
3.q 退出
4.q! 强制退出【不对输入的内容进行保存,而强制退出】 - 不保存强制退出
(注意:vi末行模式不能直接切换到输入模式,必须先退出至查看模式才可切至输入模式,输入模式切末行模式也是如此,三者关系详情见下图)
vi处理文件常见的错误情况
第一种:用vi打开文件后,发现文件是空白的
原因1:路径错误
原因2:文件名错误
原因3:文件被删除
第二种:编辑的文件无法保存
原因1:我们用vi打开的是一个目录,而不是一个文件
原因2:没有权限进行写操作【主要是针对普通用户会有这个问题】
第三种:(如下图)
这里产生警告的原因:
1. 用vi打开文件后,写入了内容,但是这个文件被意外关闭了【例如 直接关闭终端】
2. 文件被意外关闭,会产生一个崩溃缓存文件,这个文件是一个隐藏文件,而且这个文件的后缀是 .sw
3. 就是由于这个崩溃缓存文件的存在,才导致每次打开文件的是有一个警告信息
产生第三种情况的解决方法:
删除所有的崩溃缓存文件,就不再产生警告了
5.7 基础命令补充
5.7.1 date命令
作用:
显示和修改日期时间。查看时间用法:格式:date
看结果
修改时间用法:
格式:
date [MMDDhhmm[[CC]yy][.ss]]
格式里面的字段所代表的含义如下:
- MM:月
- DD:日
- hh:小时
- mm:分钟
- CC:年
- CCYY:年
- .ss:秒
举个例子,我们现在要修改时间至2024年5月10日21:01分,命令如下date 0510210924
我们看结果
当然还有其他控制方法,如下:
- %d:显示天(日)
- 例子:date +%d
- %m:月
- %F:完整的年月日
- %y:年(俩位)
- %Y:年(四位)
- %H:小时
- %M:分钟
- %S:秒
还是举例看效果:
用格式显示年 / 月 / 日 - 小时:分:秒date +%Y/%m/%d-%H:%M:%S
我们来看结果
(这里需要注意一点,分隔符除了空格其他都可以加!!!!)
5.7.2 hwclock命令
在了解这个命令之前,我们先来了解一个小知识,在系统中一般有两个时间
- 硬件时间:是在主板上有纽扣电池维护一个震荡电路
- 软件时间:系统中看到的那个时间
在计算机启动时,通过软件时间进行运行,而在计算机断电时,则通过硬件时间进行计时,在接通电源后系统会从硬件时间中读取时间 。
那hwclock命令的作用就是显示或者修改系统中硬件的时间
选项:
- - s:将软件的时间修改成和硬件时间一致
- -w:将硬件的时间修改成和软件时间一致
案例:
将软件时间修改为与硬件时间一致。
代码如下:
hwclock -s
我们来看结果:
(这里需要注意,因为我们用的虚拟机,所以时间会出错,还请各位谅解0..0)
5.7.3 history命令
作用:查看和控制历史命令记录
这里我们需要做一个了解,history的运行机制是怎么样的
在启动Linux是,我们在命令框中所输入的所有内容都会被记录并存放进内存中,当我们用户在执行关机前,系统会在用户的家目录下创建一个.bash_history文件用于存放内存中的系统命令,而在再一次启动终端时,会自动从~/.bash_history中读取历史命令,加载到内存中。
值得注意的是,该文件只能存储一千条命令,若执行超过一千条命令文件则会进行回滚操作!
选项:
- -c:清空历史命令(内存中)
- -a:手动将内存中的历史命令保存到文件中
- -r:重新从~/.bash_history读取历史命令
- -d num:删除指定编号的历史命令(内存中)
我们可以看一下内存中的历史命令,
格式
history
我们来看结果
当然也可以添加上述选项进行其他操作。
另外,也有一下快捷方式,格式如下:
- ! 数字:执行历史命令中编号为num的历史命令
- !字符:在历史命令中找多指定字符串为开头的命令,执行一次(从下往上)
- !!:执行上一个命令
- !-数字:执行历史命令中倒数第num条命令
举个例子,我们执行上一个命令
!!
看结果
5.7.4 echo命令
作用:打印输出内容选项:
- -n:输出信息但是不自动换行
- -e:这是控制字符,作用是让后面的特殊字符生效
- \n:换行符
- \t:水平制表符
- \v:垂直制表
控制颜色格式:
- \033[ :修饰字符开头
- \033[0m :修饰字符的结尾
这里我们来简单举一个输出例子:输出123456789
完成,下一个5.7.5 alias命令
作用:查看当前系统中的命令取得别名格式:alias 别名=‘命令’
这里需要注意:
- 直接执行alias,可以显示系统中的全部别名
- 在别名前加上\执行原命令(前提:别名和原命令相同)
5.7.6 关机命令及重启命令
1. shutdown命令作用:关机或者重启系统格式:shutdown 选项 time
选项:
- -r:重启
- -c:取消关机或者重启错做
- -h:关机(关闭电源)
注意:-r选项后加数字即可显示在什么时间后重启,- r后加now则为立刻重启,如果-r后加12:00则在计算机时间的12:00进行重启!
补充:
关机其他命令
- shutdown -h 0
- init 0
- halt
- poweroff
重启的其他命令
- shutdown -r 0
- init 6
- reboot
5.7.7 cal命令
作用:显示日历
选项:
- -1:当前月
- -3:前后三个月
- -y:年
我们来看一下前后三个月的日历
命令如下
cal -3
我们来看结果
ok,完成!!
以上就是Linux的一些基础知和常用的一些命令了,篇幅有限只能先,写这么多,因为时间较长所以难免会有一些错误,如果有漏洞还请各位多多指正。感谢各位的观看!(更改于2024/5/10)