Linux
1. 概述
- 操作系统
- 操作系统(Operation System, OS),是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入设备与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面。
- Linux
- Linux其实就是一款操作系统,和Windows,mac-os都是同一种类型的产品。就是操作系统软件。Linux主要应用服务器,作为服务器系统软件进行运行。
- 服务器划分方式
- 硬件的划分
- 即使一台计算机,这台计算机的配置要比普通的pc(个人电脑)机要高的多
- 软件的划分
- 在硬件服务器去安装一个数据库,那么这个服务器我们常常将其称之为数据服务器
- 在硬件服务器上去安装一个应用服务器(tomcat),那么这个服务器我们常常将其称之为应用服务器
- 在硬件服务器上去安装一个负载均衡的软件(Nginx),那么这个服务器我们常常将其称之为负载均衡服务器
- 不论我们在硬件服务器上需要安装哪些软件,在安装这些软件之前必须先要安装系统软件
- 作为服务器系统软件,我们常常使用的就是Linux
2. 特点
- 开源免费
- 完全兼容POSIX1.0标准
- 多用户、多任务
- Linux占用的硬件资源比较少
- 安全、稳定
- 提倡使用命令和操作系统进行交互
- 支持多种平台
- Linux继承了Unix的特性,具有非常强大的网络功能,其支持所有的因特网协议,包括TCP/IPv4、 TCP/IPv6和链路层拓扑程序等,且可以利用Unix的网络特性开发出新的协议栈;
- Linux系统工具链完整,简单操作就可以配置出合适的开发环境,可以简化开发过程,减少开发中仿真工具的障碍,使系统具有较强的移植性
3. Linux和Windows区别
- 目前国内 Linux 更多的是应用于服务器上,而桌面操作系统更多使用的是 Windows。主要区别如下
比较 | Windows | Linux |
---|
界面 | 界面统一,外壳程序固定所有 Windows 程序菜单几乎一致,快捷键也几乎相同 | 图形界面风格依发布版不同而不同,可能互不兼容。GNU/Linux 的终端机是从 Unix传承下来,基本命令和操作方法也几乎一致。 |
驱动程序 | 驱动程序丰富,版本更新频繁。默认安装程序里面一般包含有该版本发布时流行的硬件驱动程序,之后所出的新硬件驱动依赖于硬件厂商提供。对于一些老硬件,如果没有了原配的驱动有时很难支持。另外,有时硬件厂商未提供所需版本的 Windows 下的驱动,也会比较头痛。 | 由志愿者开发,由 Linux 核心开发小组发布,很多硬件厂商基于版权考虑并未提供驱动程序,尽管多数无需手动安装,但是涉及安装则相对复杂,使得新用户面对驱动程序问题(是否存在和安装方法)会一筹莫展。但是在开源开发模式下,许多老硬件尽管在Windows下很难支持的也容易找到驱动。HP、Intel、AMD 等硬件厂商逐步不同程度支持开源驱动,问题正在得到缓解。 |
使用 | 使用比较简单,容易入门。图形化界面对没有计算机背景知识的用户使用十分有利。 | 图形界面使用简单,容易入门。文字界面,需要学习才能掌握。 |
学习 | 系统构造复杂、变化频繁,且知识、技能淘汰快,深入学习困难。 | 系统构造简单、稳定,且知识、技能传承性好,深入学习相对容易。 |
软件 | 每一种特定功能可能都需要商业软件的支持,需要购买相应的授权。 | 大部分软件都可以自由获取,同样功能的软件选择较少。 |
- Windows与Linux在其他方面的不同
- 开放性
- 所谓的开放性就是Linux 操作系统是开放源码系统,可以对其程序进行编辑修改
- 而微软的Windows 系统是受微软版权保护,就是只能微软内部进行开发及修改。
- 文件格式不同
- Windows 操作系统内核是NT,而Linux 是 shell;另外,windows 硬盘文件格式是fat32或NTFS,而Linux 需要的文件格式是ext2或ext3,该操作系统还多一个SWAP格式的交换分区
- 免费与收费
- 在中国,对个人用户Windows 和Linux 都是免费的,对公用户Windows 需要收费,Linux 是免费的。
- 技术支持
- Windows 较普及
- Linux 需要深度的Linux 版块支持。
- 安全性
- 开源
- 开源就是指对外部开放软件源代码。Linux 开源,而Windows并不开源。
- 使用习惯
- Windows 放弃了dos的字符模式,主攻图形界面,让桌面系统更易用。
- Linux 字符模式运行的更好,图形界面还只是附带品,可有可无。
- 软件与支持
- Windows 下可以运行绝大部分软件、玩99.999%的游戏、硬件厂商近乎100%的支持。
- Linux 下可直接运行的软件数量和win下比起来就是1和99的区别,而且目前选择Linux 的人基本不会考虑玩游戏,同时Linux 正期待更多硬件厂商的支持
4. Linux 应用领域
- 今天各种场合都有使用各种 Linux 发行版,从嵌入式设备到超级计算机,并且在服务器领域确定了地位。在企业级开发中,我们通常使用Linux作为我们的服务器。
- 比如:服务器系统Web应用服务器、数据库服务器、接口服务器、DNS、FTP等等;
- 嵌入式系统路由器、防火墙、手机、PDA、IP 分享器、交换器、家电用品的微电脑控制器等等,高性能运算、计算密集型应用Linux有强大的运算能力。
5. Linux内核
- Linux的基本思想有两点
- 内核
- 就是这个操作系统的核心代码,由于Linux是开源的,因此很多的厂商就可以基于这个内核进行二次开发,做出很多很多的操作系统,这些操作系统我们就常常将其称之为Linux的发行版本
- 作为一个Linux操作系统是存在很多的发行版本,他们之间的命令都是大同小异的,我们在学习的时候只需要选择一款公司常用的发行版本即可
- 这里我们选择的是RHEL系列的发行版本:Centos
6. Linux 之CentOS
- CentOS,是基于 Red Hat Linux 提供的可自由使用源代码的企业级 Linux 发行版本;是一个稳定,可预测,可管理和可复制的免费企业级计算平台
- 主要特点
- 主流: 目前的Linux操作系统主要应用于生产环境,主流企业级Linux系统仍旧是RedHat或者CentOS
- 免费: RedHat 和CentOS差别不大,CentOS是一个基于Red Hat Linux 提供的可自由使用源代码的企业级Linux发行版本
- 更新方便:CentOS独有的yum命令支持在线升级,可以即时更新系统,不像RED HAT那样需要花钱购买支持服务!
7. 搭建环境
7.1 下载安装虚拟机
- 我们要使用这个操作系统,首先就需要有硬件的环境。硬件环境就是个人电脑,但是个人电脑上已经安装了一个操作系统就是windows,怎么处理呢?
- 把windows格式化了然后安装Linux
- 在个人电脑上再次安装一个操作系统就是Linux(个人电脑上就存在两个操作系统,windows,Linux,但是使用的时候只能使用一个)
- 我们可以通过一个软件去模拟硬件的环境,这个软件就是虚拟机。虚拟机的作用就是模拟硬件环境的
- 常见的虚拟机产品
- VMware software下载与安装
- https://www.vmware/网址下载安装
7.2 下载安装linux
- 下载操作系统:
- (操作系统我们常常将其称之为镜像)
- 下载地址:https://www.centos/download/
- 下载完毕以后就是:CentOS-7-x86_64-DVD-1810.iso
- 安装linux
- 在真实的开发环境中不会在虚拟机中去安装linux,都是使用一台独立的服务器去安装操作系统,学习在虚拟机中安装linux没有太大的意义,并且安装也比较耗时
7.3 操作linux
- 存在两种方式
- 直接在虚拟机中去操作linux操作系统(不建议: 在真实的开发环境中不会在虚拟机中去安装linux,都是使用一台独立的服务器去安装操作系统)
- 通过一些远程连接工具连接到虚拟机的linux操作系统上,然后进行linux的使用(建议使用这种方式)
- 常见的远程连接工具:CRT (SecureCRT)、PuTTY、xshell、MobaXterm
- 这里使用CRT
- 通过远程链接工具CRT链接到linux的时候,需要保证windows操作系统可以和linux进行正常的通讯。要进行正常的通讯就需要做一些配置。
- 在虚拟机中进行配置,具体的步骤如下所示:
- 进行网络编辑
- 更改子网的网段
- 更改网关
- 更改windows中vmnet8虚拟网卡的IP地址
- 完成之后使用IP在CRT中创建连接
- 注意:轻易不要卸载虚拟机软件,可能会导致网络设置中找不到虚拟网卡
8. Linux操作系统命令
8.1 命令介绍
- 命令我们可以理解成在Windows中我们常常为了查看ip输入的ipconfig,在Linux中也有很多的命令,比如操作目录、文件、网络、磁盘等等命令
- Linux刚面世时并没有图形界面, 所有的操作全靠命令完成, 如 磁盘操作、文件存取、目录操作、进程管理、文件权限 设定等
- 在职场中,大量的 服务器维护工作 都是在 远程 通过SSH客户端 来完成的, 并没有图形界面, 所有的维护工作都需要通过命令来完成
- 作为后端程序员或者运维, 必须要或多或少的掌握一些Linux常用的终端命令
- Linux发行版本的命令大概有200多个, 但是常用的命令只有几十个而已
8.2 Linux目录结构
- 在Linux中是不存在盘符的概念,这个windows操作系统就不一样的。Linux操作系统提供的是一个树形的目录结构,不同的目录会存放不同的文件内容。
- 结构图
- 详解
目录 | 详解 |
---|
/bin | Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。这些命令可以被任意的用户进行访问 |
/etc | Etcetera(等等) 的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录。包含后期我们自己所安装的一些软件所需要的配置文件 |
/home | 用户(普通用户)的主目录,在Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的 |
/root | 该目录为系统管理员,也称作超级权限者的用户主目录 |
/sbin | s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序。这些命令只能被超级管理员进行使用 |
/var | variable(变量) 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件 |
8.3 Linux 用户管理
命令 | 作用 |
---|
useradd 选项 用户名 | 添加用户,后续可以使用这个用户名登录系统 |
passwd 用户名 | 设置口令,即设置密码,普通用户只能修改自己的,管理员可以修改所有用户 |
su 用户名 | 切换账号 |
usermad 选项 用户名 | 修改用户,就是更改用户的有关属性 |
userdel 选项 用户名 | 删除一个已有的用户 |
命令 --help | 显示此命令的帮助信息,相关选项 |
8.4 Linux用户组管理
- 概述
- 为了方便用户管理, 提出了 组 的概念
- 新增一个账户,它默认属于自己(账户)的组
- 比如新建账户【张三】,那么它默认对应的组就是张三
- 一个用户可以有一个或者多个组
- 例如:我们把张三、李四、王五统一放到【开发组】,在对文件授权的时候,我们只对【开发组】进行授权由此,这样的话【张三、李四、王五】都有相等的权利操作了
- 相关命令
命令 | 作用 |
---|
groupadd 选项 用户组 | 添加用户组 |
groupadd 选项 ID 用户组 | 创建新的用户组,并添加组ID |
groupmod 选项 用户组 | 修改用户组 |
groups 用户名 | 查询一个用户属于哪个用户组 |
groupdel 用户组 | 删除一个已有的用户组 |
gpasswd 选项 组名 | 把多个用户按照业务需求归并到统一的一个组中 |
grep ‘用户组’ /etc/group | 查看用户组下所有用户 |
8.5 常用系统管理
命令 | 作用 |
---|
date [参数选项] | 用来显示或设定系统的日期与时间 |
logname | 显示用户名称 |
命令 --help | 获取在线帮助 |
命令 --version | 显示版本信息 |
date -s “时间” | 设置时间 |
id | 显示用户id |
sudo 命令 权限 | 控制用户对系统命令的使用权限 |
8.6 和进程相关的命令
命令 | 作用 |
---|
top | 用于实时显示process的动态 |
ps | 用于显示当前进程(process)的状态信息 |
kill | 用于删除执行中的程序或工作(可以强制中断) |
- 总结
- top命令的用法很多,但是常用的就是top(不带参数),有的时候,在进程比较多的时候,我们常常记住进程的pid,然后通过top -p pid进行查看
- kill进程的命令,我们我们常用的就是kill -9命令,我们常常找到进程的pid,然后通过kill -9进行杀死进程
- 各进程(任务)的状态监控属性解释说明
属性 | 说明 |
---|
PID | 进程id |
USER | 进程所有者 |
PR | 进程优先级 |
NI | nice值。负值表示高优先级,正值表示低优先级 |
VIRT | 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES |
RES | 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA |
SHR | 共享内存大小,单位kb |
S | 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程 |
%CPU | 上次更新到现在的CPU时间占用百分比 |
%MEM | 进程使用的物理内存百分比 |
TIME+ | 进程使用的CPU时间总计,单位1/100秒 |
COMMAND | 进程名称(命令名/命令行) |
8.7 关机重启
命令 | 作用 |
---|
shutdown | 用来进行关闭或重启系统,并且在关机以前传送讯息给所有使用者正在执行的程序 |
shutdown -h now | 立即关机 |
reboot | 重新启动计算机 |
8.8 系统管理高级
命令 | 作用 |
---|
who | 用于显示系统中有哪些使用者正在上面,显示的资料包含了使用者 ID、使用的终端机、从哪边连上来的、上线时间、呆滞时间、CPU 使用量、动作等等 |
timedatectl | 显示系统的当前时间和日期 |
exit | 退出目前的shell |
clear | 清除屏幕 |
- 总结
- 在实际使用过程中
- 我们经常使用timedatectl进行时区、CST、UTC的设置
- 退出码(exit status,或exit code)的约定:
- 0表示成功(Zero - Success)
- 非0表示失败(Non-Zero - Failure)
- 2表示用法不当(Incorrect Usage)
- 127表示命令没有找到(Command Not Found)
- 126表示不是可执行的(Not an executable)
8.9 目录管理
命令 | 作用 |
---|
ls | 列出目录 |
cd | 切换目录 |
pwd | 显示目前的目录 |
mkdir | 创建一个新的目录 |
rmdir | 删除一个空的目录 |
cp | 复制文件或目录 |
rm | 移除文件或目录 |
mv | 移动文件与目录或修改文件与目录的名称 |
- 自动补全
- 在敲出 文件/ 目录 / 命令 的前几个字母之后, 按下
tab
键 - 如果还存在其他 文件 / 目录 / 命令, 再按一下tab键, 系统会提示可能存在的命令
- ls -l可以查看文件夹下文件的详细信息, 从左到右依次是:
- 权限, 第一个字符如果是
d
表示目录,是 -
表示文件 - 硬链接数, 通俗的讲就是有多少种方式, 可以访问当前目录和文件
- 属主, 文件是所有者、或是叫做属主
- 属组, 文件属于哪个组
- 大小:文件大小
- 时间:最后一次访问时间
- 名称: 文件的名称
- 三种经常被使用到的查看目录命令它们之间的区别是
- ls 显示不隐藏的文件与文件夹
- ls -l 显示不隐藏的文件与文件夹的详细信息
- ls -al 显示所有文件与文件夹的详细信息
8.10 Linux 文件基本属性
8.10.1 示例
- 在Linux中我们可以使用ll或者ls –l命令来显示一个文件的属性以及文件所属的用户和组,如下图
8.10.2 属性
- 每个文件的属性由左边第一部分的10个字符来确定,从左至右用0-9这些数字来表示。
- 第0位确定文件类型
- 第1-3位确定属主(该文件的所有者)拥有该文件的权限。
- 第4-6位确定属组(所有者的同组用户)拥有该文件的权限,第7-9位确定其他用户拥有该文件的权限
- 第0位代表这个文件是目录、文件或链接文件等等
- 当为[ d ]则是目录
- 当为[ - ]则是文件;
- 若是[ l ]则表示为链接文档(link file);
- 若是[ b ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
- 若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
- 第1-9位均为『rwx』 的三个参数的组合。其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]
8.10.3 属主和属组
- 在以上实例中,aaa文件是一个目录文件,属主和属组都为 itcast,属主有可读、可写、可执行的权限(rwx);与属主同组的其他用户有可读可写和可执行的权限(rwx);其他用户也有可读和可执行的权限(r-x)。
8.10.4 相关命令
命令 | 作用 |
---|
chgrp 所属群组 文件或目录 | 更改属组 |
chown 属主名:属组名 文件或目录 | 更改属组和属主 |
chmod 属性 文件或目录 | 更改文件属性 |
8.11 文件管理
8.11.1 相关命令
相关命令 | 作用 |
---|
touch 文件名 | 若文件不存在就创建文件,文件存在则更新时间属性 |
touch 文件名{1…n}.txt | 创建n个txt文件 |
stat 文件名 | 以文字的格式来显示inode的内容 |
vi 文件名 | 用编辑器打开文件 |
vim 文件名 | 用vim编辑器打开文件 |
echo 字符串 > 文件名 | 将命令的成功结果覆盖指定文件内容 |
echo 字符床 >> 文件名 | 将命令的成功结果追加到指定的文件后面 |
cat 不存在的目录 &>> 文件名 | 将命令的失败结果追加到指定文件的后面 |
8.11.2 vi和vim
- vi的特点
- 只能是编辑文本内容,不能对字体段落进行排版
- 不支持鼠标操作
- 没有菜单
- 只有命令
- vi在编辑器在系统管理、服务器管理编辑文件时,其功能永远不是图形界面的编辑器能比拟的
- vim:是从 vi (系统内置命令)发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具。
- vi/vim模式主要分为以下三种
- 命令模式:在Linux终端中输入“vim 文件名”就进入了命令模式,但不能输入文字。
- 编辑模式:在命令模式下按i就会进入编辑模式,此时就可以写入程式,按Esc可回到命令模式。
- 末行模式:在命令模式下按:进入末行模式,左下角会有一个冒号出现,此时可以敲入命令并执行
8.11.3 打开和新建文件
- 使用vim不但可以打开一个现存的文件;也可以生成(vim后的文件不存在的情况下)一个文件;有点类似于我们在Windows中输入notepad命令一样,我们输入notepad后就会打开一个文本文档,然后进行编辑–另存为。
- 在终端中输入vim在后面跟上 文件名 即可
vim txtfile.txt
- 如果文件已经存在, 会直接打开该文件
- 如果文件不存在, 保存且退出时 就会新建一个文件
8.11.4 三种模式切换
-
进入命令模式
- 上接上面的例子,我们执行下面的命令其实就是进入了命令模式
vim txtfile.txt
-
进入编辑模式
- 上接上面的例子,按i进入插入模式
- 在 vi 中除了常用
i
进入编辑模式 外, 还提供了一下命令同样可以进入编辑模式
命令 | 英文 | 功能 | 常用 |
---|
i | insert | 在当前字符前插入文本 | 常用 |
I | insert | 在行首插入文本 | 较常用 |
a | append | 在当前字符后添加文本 | |
A | append | 在行末添加文本 | 较常用 |
o | | 在当前行后面插入一空行 | 常用 |
O | | 在当前行前面插入一空行 | 常用 |
- 我们看到【插入】(英文版为INSERT),说明我们进入了编辑模式
-
进入末行模式
- 编辑模式不能保存文件
- 必须先退到命令模式
- 先按Esc键退出到命令模式
- 然后按小写的**:wq 正常保存退出**
- 以下为其他的退出模式
- :q 当vim进入文件没有对文件内容做任何操作可以按"q"退出
- :q! 当vim进入文件对文件内容有操作但不想保存退出
- :wq 正常保存退出
- :wq! 强行保存退出,只针对与root用户或文件所有人生
8.11.5 AWK命令
- AWK是一种处理文本文件的语言,是一个强大的文本分析工具。
- 语法如下
awk [选项参数] 'script' var=value file(s)
或
awk [选项参数] -f scriptfile var=value file(s)
- 搜索含有指定内容的文本
cat czbk-txt.txt | awk '指定内容'
- 指定分割符, 根据下标显示内容
命令 | 含义 |
---|
awk -F ‘,’ ‘{print $1, $2, $3}’ 文件 | 操作1.txt文件, 根据 逗号 分割, 打印 第一段 第二段 第三段 内容 |
选项 | 英文 | 含义 |
---|
-F ',' | field-separator | 使用 指定字符 分割 |
$ + 数字 | | 获取第几段内容 |
$0 | | 获取 当前行 内容 |
NF | field | 表示当前行共有多少个字段 |
$NF | | 代表 最后一个字段 |
$(NF-1) | | 代表 倒数第二个字段 |
NR | | 代表 处理的是第几行 |
- 查看文档内容
cat 文档名 .txt
- 直接输出
cat score.txt | awk -F ' ' '{print $1,$2,$3}'
- 指定分割符, 根据下标显示内容
命令 | 含义 |
---|
awk -F ’ ’ ‘{OFS="==="}{print $1, $2, $3}’ 1.txt | 操作1.txt文件, 根据 逗号 分割, 打印 第一段 第二段 第三段 内容 |
选项 | 英文 | 含义 |
---|
OFS="字符" | output field separator | 向外输出时的段分割字符串 |
转义序列 | 含义 |
---|
\b | 退格 |
\f | 换页 |
\n | 换行 |
\r | 回车 |
\t | 制表符 |
命令 | 含义 |
---|
awk -F ‘,’ ‘{print toupper($2)}’ 1.txt | 操作1.txt文件, 根据 逗号 分割, 打印 第一段 第二段 第三段 内容 |
函数名 | 含义 | 作用 |
---|
toupper() | upper | 字符 转成 大写 |
tolower() | lower | 字符 转成小写 |
length() | length | 返回 字符长度 |
8.12 文件查看
命令 | 作用 |
---|
cat 文件名 | 查看小文件内容 |
less -N 文件名 | 分频显示大文件内容 |
head -n 文件名 | 查看文件的前一部分 |
tail -n 文件名 | 查看文件的最后部分 |
grep 关键字 文件名 | 根据关键词,搜索文本文件内容 |
- 区别
- 通过
cat
会一次显示所有的内容, 适合 查看内容较少的文本文件 less
命令适合查看 内容较多 的文本文件- 通过
head
命令查看文档的前几行内容 - 通过
tail -10f 文件
命令 查看文档(日志)的后几行内容 - 通过
grep
命令 搜索存在 关键字的行
8.13 异常处理
- 如果 vim异常退出, 在磁盘上可能会保存有 交换文件
- 解决方案
8.14 操作扩展
8.14.1 上下左右
- 要熟练使用vi/vim, 首先应该学会怎么在 命令模式下 快速移动光标
- 编辑操作命令 能够和移动命令一起使用
命令 | 功能 | 手指 |
---|
h | 向左 | 食指 |
j | 向下 | 食指 |
k | 向上 | 中指 |
l | 向右 | 无名指 |
8.14.2 行内移动
命令 | 英文 | 功能 |
---|
w | word | 向后移动一个单词 |
b | back | 向前移动一个单词 |
0 | | 行首 |
^ | | 行首, 第一个不是空白字符的位置 |
$ | | 行尾 |
8.14.3 行数移动
命令 | 英文 | 功能 |
---|
gg | go | 文件顶部 |
G | go | 文件末尾 |
数字gg | go | 移动到 数字 对应行数 |
数字G | go | 移动到 数字 对应行数 |
: 数字 | | 移动到数字对应的 行数 |
8.14.4 屏幕移动
命令 | 英文 | 功能 |
---|
Ctrl + b | back | 向上翻页 |
Ctrl + f | forward | 向下翻页 |
H | Head | 屏幕顶部 |
M | Middle | 屏幕中间 |
L | Low | 屏幕底部 |
8.14.5 选中文本(可视模式)
- 学习 复制 命令前, 应该先学会 怎么样选中 要复制的代码
- 在 vi/vim 中要选择文本, 需要显示 visual 命令切换到 可视模式
- vi/vim 中提供了 三种 可视模式, 可以方便程序员的选择 选中文本的方式
- 按 ESC 可以放弃选中, 返回到 命令模式
命令 | 模式 | 功能 |
---|
v | 可视模式 | 从光标位置开始按照正常模式选择文本 |
V | 可视化模式 | 选中光标经过的完整行 |
Ctrl + v | 可是块模式 | 垂直方向选中文本 |
8.14.6 撤销和恢复撤销(保命指令)
- 在学习编辑命令之前,先要知道怎样撤销之前一次 错误的 编辑操作
命令 | 英文 | 功能 |
---|
u | undo | 撤销上次的命令(ctrl + z) |
Ctrl + r | uredo | 恢复撤销的命令 |
8.14.7 删除文本
命令 | 英文 | 功能 |
---|
x | cut | 删除光标所在的字符,或者选中的文字 |
d(移动命令) | delete | 删除移动命令对应的内容 |
dd | delete | 删除光标所在行, 可以删除多行 |
D | delete | 删除至行尾 |
- 提示: 如果使用 可视模式 已经选中了一段文本, 那么无论使用 d 还是 x, 都可以删除选中文本
- 删除命令可以和移动命令连用, 以下是常见的组合命令(扩展)
命令 | 作用 |
---|
dw | 从光标位置删除到单词末尾 |
d} | 从光标位置删除到段落末尾 |
ndd | 从光标位置向下连续删除 n 行 |
8.14.8 复制和剪切
- vi/vim 中提供有一个 被复制文本的缓冲区
- 复制 命令会将选中的文字保存在缓冲区
- 删除 命令删除的文字会被保存在缓冲区
- 在需要的位置, 使用 粘贴 命令可以将缓冲对的文字插入到光标所在的位置
命令 | 英文 | 功能 |
---|
yy | copy | 复制行 |
d(剪切命令) | delete | 剪切 |
dd(剪切) | delete | 剪切一行, 可以 ndd 剪切n行 |
p | paste | 粘贴 |
- 提示
- 命令 d 、x 类似于图形界面的 剪切操作 – ctrl + x
- 命令 y 类似于 图形界面的 复制操作 – Ctrl +
- 命令 p 类似于图形界面的 粘贴操作 – Ctrl + v
- vi中的文本缓冲区只有一个,如果后续做过 复制、剪切操作, 之前缓冲区中的内容会被替换.
- 注意
- vi中的 文本缓冲区 和 系统的 剪切板 不是同一个
- 所以在其他软件中使用
Ctrl + C
复制的内容, 不能再 vi
中通过 p
命令粘贴 - 可以在 编辑模式 下使用 鼠标右键粘贴
8.14.9 替换
命令 | 英文 | 功能 | 工作模式 |
---|
r | replace | 替换当前字符 | 命令模式 |
R | replace | 替换当前行光标后的字符 | 替换模式 |
R
命令可以进入 替换模式, 替换完成后, 按下ESC
, 按下 ESC
可以回到 命令模式- 替换命令 的作用就是不用进入 编辑模式, 对文件进行 轻量级的修改
8.14.10 缩排和重复执行
命令 | 功能 |
---|
>> | 向右增加缩进 |
<< | 向左减少缩进 |
. | 重复上次命令 |
- 缩进命令 在开发程序时, 统一增加代码的缩进 比较有用!
- 一次性 在选中代码前增加 4 个空格, 就叫做 增加缩进
- 一次性 在选中代码前删除 4 个空格, 就叫做 较少缩进
- 在 可视模式 下, 缩排命令 主需要使用 一个
>
或者 <
- 在程序中, 缩进 通常用来表示代码的归属关系
- 前面空格越少, 代码的级别越高
- 前面空格越多, 代码的级别越低
8.14.11 查找
- 查找到指定内容之后, 使用
Next
查找下一个出现的位置
- 如果不想看到高亮显示, 可以随便查找一个文件中不存在的内容即可
- 单词快速匹配
命令 | 功能 |
---|
* | 向后查找当前光标所在单词 |
# | 向前查找当前光标所在单词 |
- 在开发中, 通过单词快速匹配, 可以快速看到这个单词在其他位置使用过
8.14.12 查找并替换
- 在
vi/vim
中查找和替换命令需要在 末行模式 下执行 - 记忆命令格式
:%s///g
- 全局替换
- 一次向 替换文件中的 所有出现的旧文本
- 命令格式如下
:%s/旧文本/新文本/g
- 可视区域替换
- 先选中要替换文字的范围
- 命令格式如下
:s/旧文本/新文本/g
- 确认替换
c confirm 确认
- 如果把末尾的
g
改成 gc
在替换的时候, 会有提示! 推荐使用 - 命令格式如下
:%s/旧文本/新文本/gc
y
- yes
替换n
- no
不替换a
- all
替换所有q
-quit
退出替换l
- last
最后一个, 并把光标移动到行首^E
向下滚屏^Y
向上滚屏
8.15 软连接
- 软连接其实就类似于我们在Windows中的【快捷方式】
- 在Linux文件名和内容是两个文件, 分开的
- 语法如下
命令 | 英文 | 作用 |
---|
ln -s 目标文件绝对路径 快捷方式路径 | link | 给目标文件增加一个软链接, 通俗讲就是快捷方式 |
8.16 find和read
- find查找
- find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示
- 语法
find <指定目录> <指定条件> <指定内容>
- read命令用于从标准输入读取数值
- read 内部命令被用来从标准输入读取单行数据。这个命令可以用来读取键盘输入,当使用重定向的时候,可以读取文件中的一行数据
- 语法
read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]
8.17 Linux备份压缩
命令 | 作用 |
---|
gzip[参数][文件或者目录] | 用于压缩文件,不能压缩目录,压缩之后形成.gz的文件 |
gunzip [参数][文件或者目录] | 用于解开被gzip压缩过的文件 |
tar [必要参数][选择参数][文件] | 打包 |
zip[必要参数][选择参数][文件] | 压缩,形成一个.zip的压缩文件 |
uzip[必要参数][选择参数][文件] | 用于解压.zip的压缩文件 |
bzip2 [-cdfhkLstvVz][–repetitive-best][–repetitive-fast][- 压缩等级][要压缩的文件] | 压缩形成.bz2的文件 |
bunzip2 [-fkLsvV][.bz2压缩文件] | 解压.bz2文件 |
8.18 打开和关闭防火墙
- 查看防火墙的命令为
sudo systemctl status firewalld
- 查看后,看到active(running)就意味着防火墙打开了。
- 关闭防火墙命令为
sudo systemctl stop firewalld
- 关闭后查看是否关闭成功,如果看到inactive(dead)就意味着防火墙关闭了。
- 打开防火墙的命令为
sudo systemctl start firewalld
9. 网络与磁盘管理
9.1 网络命令
命令 | 作用 |
---|
ifconfig | 用于显示或配置网络设备的命令,也可设置网络设备的状态,或是显示目前的设置 |
ping | 用于检测主机,会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常 |
netstat | 利用netstat指令可让你得知整个Linux系统的网络情况 |
9.2 网络命令
命令 | 作用 |
---|
lsblk | 使用lsblk命令可以以tree的形式展示所有设备的信息 |
df | 用于显示目前在Linux系统上的文件系统的磁盘使用情况统计 |
mount | 用于挂载Linux系统外的文件 |
- 挂载概念
- 在安装linux系统时设立的各个分区,如根分区、/boot分区等都是自动挂载的,也就是说不需要我们人为操作,开机就会自动挂载。但是光盘、u盘等存储设备如果需要使用,就必须人为的进行挂载。
- Linux中的根目录以外的文件要想被访问,需要将其“关联”到根目录下的某个目录来实现,这种关联操作就是“挂载”,这个目录就是“挂载点”,解除次关联关系的过程称之为“卸载”。
- “挂载点”的目录需要以下几个要求
- 目录事先存在,可以用mkdir命令新建目录;
- 挂载点目录不可被其他进程使用到;
- 挂载点下原有文件将被隐藏。
10. Linux安装
10.1 yum
10.1.1 概述
10.1.2 yum查找
- 利用 yum 的功能,找出以 tom 为开头的软件名称有哪些
yum list tom*
10.1.3 yum源
10.2 rpm
10.2.1 rpm介绍
- rpm(redhat package manager) 原本是 Red Hat Linux 发行版专门用来管理 Linux 各项套件的程序,由于它遵循 GPL 规则且功能强大方便,因而广受欢迎。逐渐受到其他发行版的采用。RPM 套件管理方式的出现,让 Linux 易于安装,升级,间接提升了 Linux 的适用度。
10.2.2 rpm与yum区别
- rpm 只能安装已经下载到本地机器上的rpm 包. yum能在线下载并安装rpm包,能更新系统,且还能自动处理包与包之间的依赖问题,这个是rpm 工具所不具备的。
用法: rpm [选项...]
10.3 安装JDK
- 下载JDK(Oralce官网下载,tar.gz版本)
- 上传安装包
- 对文件进行解压
- tar -zxvf 文件名 -C 想要安装到的文件地址
- -C表示把解压的文件解压到指定的目录
- 配置环境变量
- 在linux中环境变量对应了一个配置文件:/etc/profile
- 在配置文件中添加对应的配置文件
- 加载更改后的环境变量:source /etc/profile
11. shell
11.1 shell入门
- Shell 脚本(shell script),是一种为 shell 编写的脚本程序。
- Shell 脚本(Shell Script)又称 Shell 命令稿、程序化脚本,是一种计算机程序使用的文本文件,内容由一连串的 shell 命令组成,经由 Unix Shell 直译其内容后运作
- Shell 被当成是一种脚本语言来设计,其运作方式与解释型语言相当,由 Unix shell 扮演命令行解释器的角色,在读取 shell 脚本之后,依序运行其中的 shell 命令,之后输出结果。利用 shell 脚本可以进行系统管理,文件操作等。
- 在 Unix 及所有的系统中,如 Linux、FreeBSD 等操作系统,都存在 shell 脚本。依照 Unix shell 的各种不同类型,shell 脚本也有各种不同方言。在 DOS、OS/2、Microsoft Windows 中的批处理文件,跟 shell 脚本有类似的功能。
11.2 shell环境
- Shell 编程跟 JavaScript、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。
- 查看解释器
cat /etc/shells
- Linux 的 Shell 种类众多,常见的有
- Bourne Shell(/usr/bin/sh或/bin/sh)
- Bourne Again Shell(/bin/bash)
- C Shell(/usr/bin/csh)
- K Shell(/usr/bin/ksh)
- Shell for Root(/sbin/sh)
- 等等……
- 我们当前使用的是 Bash,也就是 Bourne Again Shell,由于易用和免费,Bash 在日常工作中被广泛使用。同时,Bash 也是大多数Linux 系统默认的 Shell
11.3 shell注释
11.4 shell变量
1、定义变量
variable_name="czbk"
- 变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则:
- 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
- 中间不能有空格,可以使用下划线(_)。
- 不能使用标点符号。
- 不能使用bash里的关键字(可用help命令查看保留关键字)。
- 有效的 Shell 变量名示例
RUNOOB
LD_LIBRARY_PATH
_var
var2
?var=123
user*name=runoob
2、使用变量
- 使用一个定义过的变量,只要在变量名前面加美元符号即可
variable_name="czbk"
echo $variable_name
echo ${variable_name}
3、只读变量
- 使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
4、删除变量
unset variable_name
- 变量被删除后不能再次使用。unset 命令不能删除只读变量。
11.5 Shell 字符串
str='this is a string variable'
- 单引号字符串的限制:
- 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
- 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。
- 双引号
your_name='frank'
str="Hello, \"$your_name\"! \n"
echo -e $str
your_name="frank"
# 使用双引号拼接
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting $greeting_1
string="czbk"
echo ${#string}
//从字符串第 2个字符开始截取 4个字符
string="abcdefghijklmn"
echo ${string:1:4}
11.6 shell数组
- bash支持一维数组(不支持多维数组),并且没有限定数组的大小。
- 定义数组
- 在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开
数组名=(值1 值2 ... 值n)
- 读取数组
${数组名[下标]}
# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
11.7 shell运算符
1、算数运算符
val=`expr 2 + 2`
echo "相加之后的结果为:" $val
- 表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2。
- 完整的表达式要被 ` 包含,注意不是单引号
- 下表列出了常用的算术运算符,假定变量 a 为 10,变量 b 为 20:
运算符 | 说明 | 举例 |
---|
+ | 加法 | expr $a + $b 结果为 30。 |
- | 减法 | expr $a - $b 结果为 -10。 |
* | 乘法 | expr $a \* $b 结果为 200。 |
/ | 除法 | expr $b / $a 结果为 2。 |
% | 取余 | expr $b % $a 结果为 0。 |
= | 赋值 | a=$b 将把变量 b 的值赋给 a。 |
== | 相等。用于比较两个数字,相同则返回 true。 | [ $a == $b ] 返回 false。 |
!= | 不相等。用于比较两个数字,不相同则返回 true。 | [ $a != $b ] 返回 true。 |
- 注意:条件表达式要放在方括号之间,并且要有空格,例如: [
a
=
=
a==
a==b] 是错误的,必须写成 [ $a == $b ]。
2、字符串运算符
- 下表列出了常用的字符串运算符,假定变量 a 为 “abc”,变量 b 为 “efg”:
运算符 | 说明 | 举例 |
---|
= | 检测两个字符串是否相等,相等返回 true。 | [ $a = $b ] 返回 false。 |
!= | 检测两个字符串是否相等,不相等返回 true。 | [ $a != $b ] 返回 true。 |
-z | 检测字符串长度是否为0,为0返回 true。 | [ -z $a ] 返回 false。 |
-n | 检测字符串长度是否为0,不为0返回 true。 | [ -n “$a” ] 返回 true。 |
$ | 检测字符串是否为空,不为空返回 true。 | [ $a ] 返回 true。 |
3、关系运算符
- 关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
- 下表列出了常用的关系运算符,假定变量 a 为 10,变量 b 为 20:
运算符 | 说明 | 举例 |
---|
-eq | 检测两个数是否相等,相等返回 true。 | [ $a -eq $b ] 返回 false。 |
-ne | 检测两个数是否不相等,不相等返回 true。 | [ $a -ne $b ] 返回 true。 |
-gt | 检测左边的数是否大于右边的,如果是,则返回 true。 | [ $a -gt $b ] 返回 false。 |
-lt | 检测左边的数是否小于右边的,如果是,则返回 true。 | [ $a -lt $b ] 返回 true。 |
-ge | 检测左边的数是否大于等于右边的,如果是,则返回 true。 | [ $a -ge $b ] 返回 false。 |
-le | 检测左边的数是否小于等于右边的,如果是,则返回 true。 | [ $a -le $b ] 返回 true。 |
4、布尔运算符
- 下表列出了常用的布尔运算符,假定变量 a 为 10,变量 b 为 20:
运算符 | 说明 | 举例 |
---|
! | 非运算,表达式为 true 则返回 false,否则返回 true。 | [ ! false ] 返回 true。 |
-o | 或运算,有一个表达式为 true 则返回 true。 | [ $a -lt 20 -o $b -gt 100 ] 返回 true。 |
-a | 与运算,两个表达式都为 true 才返回 true。 | [ $a -lt 20 -a $b -gt 100 ] 返回 false。 |
5、逻辑运算符
运算符 | 说明 | 举例 |
---|
&& | 逻辑的 AND | [[ $a -lt 100 && $b -gt 100 ]] 返回 false |
|| | 逻辑的 OR | [[ $a -lt 100 || $b -gt 100 ]] 返回 true |
11.8 shell流程控制
11.8.1 if 语句
if condition
then
command1
command2
...
commandN
fi
11.8.2 if else 语句
- 主要用于判断,相当于java se中的if else
if condition
then
command1
command2
...
commandN
else
command
fi
11.8.3 if else-if else 语句
- 主要用于判断,相当于java se中的if else-if else
if condition1
then
command1
elif condition2
then
command2
else
commandN
fi
11.8.4 for 循环
for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done
11.8.5 while循环
- 主要用于循环,相当于java se中的while循环
while condition
do
command
done
11.8.6 case … esac语句
- 主要用于分支条件选择,相当于java se中的switch case循环
case 值 in
模式1)
command1
command2
command3
;;
模式2)
command1
command2
command3
;;
*)
command1
command2
command3
;;
esac
11.9 shell函数
[ function ] funname [()]
{
action;
[return int;]
}
发布评论