Linux基础与Shell编程
1. Linux概述
Linux内核最初只是由芬兰人林纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。Linux能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
目前市面上较知名的发行版有:Ubuntu、RedHat、CentOS、Debain、Fedora、SuSE、OpenSUSE。
- redhat:目前,全球最大的linux发行厂商,功能全面、稳定。
- Redhat 被 IBM 收购!
- ubuntu:目前,是linux桌面操作系统做的最好的。
- centos:免费版的redhat,centos 基于 redhat 发行版基础之上,再重新编译发布的版本。
- 目前 centos 已经被 Redhat 公司收购,但是依然免费
2. 系统安装
虚拟机 (Virtual Machine) 指通过 软件模拟 的具有完整硬件系统功能的. 运行在一个完全隔离环境中的完整计算机系统。
本次使用的是VMware Workstation , 下载地址(https://www.vmware.com/cn/products/workstation-pro.html).
使用的Linux发行版本是Centos7 64位, 安装的是CentOS-7-x86_64-DVD-1804.iso镜像文件。可以从以下资源下载镜像文件:
网易镜像:http://mirrors.163.com/centos/7/isos/
搜狐镜像:http://mirrors.sohu.com/centos/7/isos/
远程登录:通常在工作过程中,公司中使用的真实服务器或者是云服务器,都不允许除运维人员之外的员工直接接触,因此就需要通过远程登录的方式来操作。所以,远程登录工具就是必不可缺的,目前,比较主流的有Xshell, SSH Secure Shell, SecureCRT,FinalShell等,大家可以根据自己的习惯自行选择.
3. Linux目录与结构
Linux系统中一切皆文件,如下图所示
/bin :是Binary的缩写, 这个目录存放着最经常使用的命令
/sbin:s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序
/home:存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的
/root:该目录为系统管理员,也称作超级权限者的用户主目录
/lib: 系统开机所需要最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
/lost+found: 这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件
/etc: 所有的系统管理所需要的配置文件和子目录。
/usr: 这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。
/boot: 这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件,自己的安装别放这里
/proc: 这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息
/srv: service缩写,该目录存放一些服务启动之后需要提取的数据。
/sys: 这是linux2.6内核的一个很大
/tmp: 这个目录是用来存放一些临时文件的的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs
/dev: 类似于windows的设备管理器,把所有的硬件用文件的形式存储。
/media(CentOS6): linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。CentOS7迁移到 /run/media
/mnt: 系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里的内容了。
/opt: 这是给主机额外安装软件所摆放的目录。比如你安装一个mysql数据库则就可以放到这个目录下。默认是空的
/var: 这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件
- 注意:一般不要 操作 非自己创建的目录和文件,否则可能导致服务器崩溃。
4. VI/VIM编辑器
VI是Unix操作系统和类Unix操作系统中最通用的文本编辑器。vi是 visual interface
的简称, 是linux中最经典的文本编辑器.vi 的核心设计思想: 让程序员的手指始终保持在键盘的 核心区域, 就能完成所有的编辑操作
-
vi的特点
- 只能是编辑 文本内容, 不能对 字体 段落进行排版
- 不支持鼠标操作
- 没有菜单
- 只有命令
-
vi编辑器在 系统管理 服务器管理 编辑文件时, 其功能永远不是图形界面的编辑器能比拟的
VIM编辑器是从VI发展出来的一个性能更强大的文本编辑器。可以主动的以字体颜色辨别语法的正确性,方便程序设计。VIM与VI编辑器完全兼容。
4.1 打开和新建文件
在终端中输入vim在后面跟上 文件名 即可
vim 文件名
- 如果文件已经存在, 会直接打开该文件
- 如果文件不存在, 保存且退出时 就会新建一个文件
例如:
cd /export/ && rm -rf *
vim Hello.java
public class Hello {
public static void main(String[] args) {
System.out.println("Hello World!");
// 1 将光标移动到上一行, 按 yy
// 2 按 ESC 键 退出编辑模式
// 3 按 19p
System.out.println("Hello World!");
System.out.println("Hello World!");
System.out.println("Hello World!");
System.out.println("Hello World!");
System.out.println("Hello World!");
System.out.println("Hello World!");
System.out.println("Hello World!");
System.out.println("Hello World!");
System.out.println("Hello World!");
System.out.println("Hello World!");
System.out.println("Hello World!");
System.out.println("Hello World!");
System.out.println("Hello World!");
System.out.println("Hello World!");
System.out.println("Hello World!");
System.out.println("Hello World!");
System.out.println("Hello World!");
System.out.println("Hello World!");
System.out.println("Hello World!");
// 1 按 ESC 退出编辑模式
// 2 按 : 进入莫行模式
// 3 输入 wq(write quit)保存且退出 按回车键执行
}
}
- 在日常工作中, 有可能会遇到打开一个文件, 并定位到指定行的情况
- 例如: 在开发是, 知道某一行代码有错误, 可以 快速定位 到出错误代码的位置
- 这个时候, 可以使用以下命令打开文件
vim 文件名 +行数
例如:
vim Hello.java +10
- 如果 vi 异常退出, 在磁盘上可能会保存有 交换文件
- 下次再使用 vi 编辑文件时, 会看到以下屏幕信息, 按下字母 d 删除交换文件即可
4.2 VI三种工作模式
- VI有三种工作模式
- 命令模式
- 打开文件首先进入命令模式, 是使用vi的入口
- 通过 命令 对文件进行常规的编辑操作, 例如 定位 翻页 复制 粘贴 删除 … …
- 在其他图形编辑器下, 通过 快捷键 或者 鼠标 实现的操作, 都在 命令模式 下实现
- 末行模式 – 执行 保存 退出等操作
- 要退出 vi 返回到控制台, 需要在莫行模式下输入命令
- 末行模式 是 vi 的出口
- 编辑模式 – 正常的编辑文字
工作模式切换:
末行模式命令
命令 | 英文 | 功能 |
---|---|---|
w | write | 保存 |
q | quit | 退出,如果没有保存,不允许退出 |
q! | quit | 强行退出,不保存退出 |
wq | write & quit | 保存且退出(末行模式) |
x | 保存并退出(末行模式) | |
ZZ | 保存并退出(命令模式) |
一般模式
以vi打开一个档案就直接进入一般模式了(这是默认的模式)。在这个模式中, 你可以使用『上下左右』按键来移动光标,你可以使用『删除字符』或『删除整行』来处理档案内容, 也可以使用『复制、粘贴』来处理你的文件数据。
编辑模式
在一般模式中可以进行删除、复制、粘贴等的动作,但是却无法编辑文件内容的!要等到你按下『i, I, o, O, a, A』等任何一个字母之后才会进入编辑模式。
注意了!通常在Linux中,按下这些按键时,在画面的左下方会出现『INSERT或 REPLACE』的字样,此时才可以进行编辑。而如果要回到一般模式时, 则必须要按下『Esc』这个按键即可退出编辑模式。
1)进入编辑模式
指令模式
在一般模式当中,输入『 : / ?』3个中的任何一个按钮,就可以将光标移动到最底下那一行。
在这个模式当中, 可以提供你『搜寻资料』的动作,而读取、存盘、大量取代字符、离开 vi 、显示行号等动作是在此模式中达成的!
2)退出编辑模式
按『Esc』键 退出编辑模式,之后所在的模式为一般模式。
5 网络配置和系统管理操作
5.1 配置网络ip地址
ifconfig 配置网络接口
ifconfig :network interfaces configuring网络接口配置
1)基本语法
ifconfig (功能描述:显示所有网络接口的配置信息)
ping 测试主机之间网络连通性
1)基本语法
ping 目的主机 (功能描述:测试当前服务器是否可以连接目的主机)
测试当前服务器是否可以连接百度
ping www.baidu.com
修改IP地址
查看IP配置文件,使用VIM编辑器进行修改配置
vim /etc/sysconfig/network-scripts/ifcfg-ens33
5.2 配置主机名
修改主机名称
1) 基本语法
hostname (功能描述:查看当前服务器的主机名称)
2) 案例实操
(1)查看当前服务器主机名称
hostname
(2)如果感觉此主机名不合适,我们可以进行修改。通过编辑/etc/hostname文件
vi /etc/hostname
修改完后重启生效
修改hosts映射文件(选做,为后续学习铺垫)
1)修改linux的主机映射文件(hosts文件)
后续在hadoop阶段,虚拟机会比较多,配置时通常会采用主机名的方式配置,
比较简单方便。 不用刻意记ip地址。
(1)打开/etc/hosts
vim /etc/hosts
添加如下内容
192.168.1.100 hadoop100
192.168.1.101 hadoop101
192.168.1.102 hadoop102
192.168.1.103 hadoop103
192.168.1.104 hadoop104
192.168.1.105 hadoop105
(2)重启设备,重启后,查看主机名,已经修改成功
2)修改windows的主机映射文件(hosts文件)
(1)进入C:\Windows\System32\drivers\etc路径
(2)打开hosts文件并添加如下内容
192.168.1.100 hadoop100
192.168.1.101 hadoop101
192.168.1.102 hadoop102
192.168.1.103 hadoop103
192.168.1.104 hadoop104
192.168.1.105 hadoop105
3)修改window10的主机映射文件(hosts文件)
(1)进入C:\Windows\System32\drivers\etc路径
(2)拷贝hosts文件到桌面
(3)打开桌面hosts文件并添加如下内容
192.168.1.100 hadoop100
192.168.1.101 hadoop101
192.168.1.102 hadoop102
192.168.1.103 hadoop103
192.168.1.104 hadoop104
192.168.1.105 hadoop105
(4)将桌面hosts文件覆盖C:\Windows\System32\drivers\etc路径hosts文件
5.3 服务管理
1) 基本语法
systemctl start | stop | restart | status 服务名
(1)查看防火墙服务的状态
systemctl status firewalld
(2)停止防火墙服务
systemctl stop firewalld
(3)启动防火墙服务
systemctl start firewalld
(4)重启防火墙服务
systemctl restart firewalld
systemctl 设置后台服务的自启配置
1)基本语法
systemctl list-unit-files (功能描述:查看服务开机启动状态)
systemctl disable service_name (功能描述:关掉指定服务的自动启动)
systemctl enable service_name (功能描述:开启指定服务的自动启动)
2)案例实操
(1)开启/关闭iptables(防火墙)服务的自动启动
systemctl enable firewalld.service
systemctl disable firewalld.service
5.4 关机重启命令
在linux领域内大多用在服务器上,很少遇到关机的操作。毕竟服务器上跑一个服务是永无止境的,除非特殊情况下,不得已才会关机。
正确的关机流程为:sync > shutdown > reboot > halt
1)基本语法
(1)sync (功能描述:将数据由内存同步到硬盘中)
(2)halt (功能描述:关闭系统,但不断电。等同于shutdown -h now 和 poweroff)
(3)reboot (功能描述:就是重启,等同于 shutdown -r now)
(4)shutdown [选项] 时间
2)经验技巧
Linux系统中为了提高磁盘的读写效率,对磁盘采取了 “预读迟写”操作方式。当用户保存文件时,Linux核心并不一定立即将保存数据写入物理磁盘中,而是将数据保存在缓冲区中,等缓冲区满时再写入磁盘,这种方式可以极大的提高磁盘写入数据的效率。但是,也带来了安全隐患,如果数据还未写入磁盘时,系统掉电或者其他严重问题出现,则将导致数据丢失。使用sync指令可以立即将缓冲区的数据写入磁盘。
3)案例实操
(1)将数据由内存同步到硬盘中
sync
(2)重启
reboot
(3)关机
halt
(4)计算机将在1分钟后关机,并且会显示在登录用户的当前屏幕中
shutdown -h 1 ‘This server will shutdown after 1 mins’
(5)立马关机(等同于 halt)
shutdown -h now
(6)系统立马重启(等同于 reboot)
shutdown -r now
6 常用基本命令
6.1 帮助命令
man 获得帮助信息
1)基本语法
man [命令或配置文件] (功能描述:获得帮助信息)
例如:查看ls命令的帮助信息
man ls
-
查询
command
命令的使用手册man
时manual
的缩写, 是Linux提供的一个手册, 包含了绝大部分的命令、函数的详细使用说明.
使用 man
时的操作键:
空格键 | 显示手册的下一屏 |
---|---|
操作键 | 功能 |
Enter键 | 一次滚动首页也得一行 |
b(back) | 回滚一屏 |
f(forward) | 前滚一屏 |
q (quit) | 退出 |
/word | 搜索word字符串 |
n(next) | 搜索下一个 |
N | 搜索上一个 |
help 获得shell内置命令的帮助信息
基本语法
help 命令 (功能描述:获得shell内置命令的帮助信息)
例如:查看cd命令的帮助信息
help cd
常用快捷键
6. 2 文件目录类
pwd 显示当前工作目录的绝对路径
pwd:print working directory 打印工作目录
1)基本语法
pwd (功能描述:显示当前工作目录的绝对路径)
例如:显示当前工作目录的绝对路径
pwd
ls 列出目录的内容
ls:list 列出目录内容
1)基本语法
ls [选项] [目录或是文件]
2)选项说明
选项 | 英文 | 含义 |
---|---|---|
-a | all | 显示指定目录下所有子目录与文件, 包含隐藏文件 |
-l | 以列表方式显示文件的详细信息 | |
-h | human-readable | 配合 -l 以人性化的方式显示文件大小 |
3)显示说明
每行列出的信息依次是: 文件类型与权限 链接数 文件属主 文件属组 文件大小用byte来表示 建立或最近修改的时间 名字
例如:查看当前目录的所有内容信息
ls -al
cd 切换目录
cd:Change Directory切换路径
cd 是英文单词 change directory
的缩写, 其功能为 更改当前的工作目录, 也是用户最常用的命令之一
注意: linux的所有 目录 和 文件名 都是大小写敏感的
1)基本语法
cd [参数]
2)参数说明
命令 | 含义 |
---|---|
cd 目录 | 切换到指定目录下 |
cd … | 切换到上级目录 |
cd - | 可以在最近的两次目录之间切换 |
cd ~ | 切换到家目录(root用户家目录是 /root, 其他用户的家目录是 /home/用户名) |
3)案例
(1)使用绝对路径切换到root目录
cd /root/
(2)使用相对路径切换到“公共的”目录
cd 公共的/
(3)表示回到自己的家目录,亦即是 /root 这个目录
cd ~
(4)cd- 回到上一次所在目录
cd -
(5)表示回到当前目录的上一级目录,亦即是 “/root/公共的”的上一级目录的意思;
cd ..
mkdir 创建一个新的目录
mkdir:Make directory 建立目录
1)基本语法
mkdir [选项] 要创建的目录
2)选项说明
选项 | 英文 | 含义 |
---|---|---|
-p | parent | 可以递归创建目录 |
3)案例
(1)创建一个目录
mkdir test
(2)创建一个多级目录