大数据开发工程师基本功修炼之史上最全Linux学习笔记(建议)

2021-12-30 19:17:52 浏览数 (1)

  • 复制 命令会将选中的文字保存在缓冲区
  • 删除 命令删除的文字会被保存在缓冲区
  • 在需要的位置, 使用 粘贴 命令可以将缓冲对的文字插入到光标所在的位置

命令

英文

功能

y(复制命令)

copy

复制

yy

copy

复制一行,可以nyy复制多行

d(剪切命令)

delete

剪切

dd(剪切)

delete

剪切一行, 可以 ndd 剪切n行

p

paste

粘贴

提示:

  • 命令 d 、x 类似于图形界面的 剪切操作 – ctrl x
  • 命令 y 类似于 图形界面的 复制操作 – Ctrl C
  • 命令 p 类似于图形界面的 粘贴操作 – Ctrl v
  • vi中的文本缓冲区只有一个,如果后续做过 复制、剪切操作, 之前缓冲区中的内容会被替换.

注意

  • vi中的 文本缓冲区 和 系统的 剪切板 不是同一个
  • 所以在其他软件中使用 Ctrl C 复制的内容, 不能再 vi 中通过 p 命令粘贴
  • 可以在 编辑模式 下使用 鼠标右键粘贴

3.7 替换

命令

英文

功能

工作模式

r

replace

替换当前字符

命令模式

R

replace

替换当前行光标后的字符

替换模式

  • R 命令可以进入 替换模式, 替换完成后, 按下ESC , 按下 ESC 可以回到 命令模式
  • 替换命令 的作用就是不用进入 编辑模式, 对文件进行 轻量级的修改

3.8 查找

常规查找

命令

功能

/str

查找str

  • 查找到指定内容之后, 使用 Next 查找下一个出现的位置
    • n : 查找下一个
    • N : 查找上一个
  • 如果不想看到高亮显示, 可以随便查找一个文件中不存在的内容即可
  • 单词快速匹配

命令

功能

*

向后查找当前光标所在单词

向前查找当前光标所在单词

  • 在开发中, 通过单词快速匹配, 可以快速看到这个单词在其他位置使用过

3.9 查找并替换

  • vi 中查找和替换命令需要在 末行模式 下执行
  • 记忆命令格式
代码语言:javascript复制
:%s///g
  1. 全局替换
  2. 可视区域替换
  3. 先选中 要替换文字的 范围
  4. 命令格式如下
代码语言:javascript复制
:s/旧文本/新文本/g
  1. 确认替换

c confirm 确认

  1. y - yes 替换
  2. n - no 不替换
  3. a - all 替换所有
  4. q -quit 退出替换
  5. l - last 最后一个, 并把光标移动到行首
  6. ^E 向下滚屏
  7. ^Y 向上滚屏

3.10 插入命令(重要)

  • 在 vi 中除了常用 i 进入编辑模式 外, 还提供了一下命令同样可以进入编辑模式

命令

英文

功能

常用

i

insert

在当前字符前插入文本

常用

I

insert

在行首插入文本

较常用

a

append

在当前字符后添加文本

A

append

在行末添加文本

较常用

o

在当前行后面插入一空行

常用

O

在当前行前面插入一空行

常用

3.11 练习

演练1 – 编辑命令 和 数字连用

  • 在开发中, 可能会遇到连续输入 N 个同样的字符
  • 例如: ********** 连续10个星号

要实现这个效果可以在 命令模式

  1. 输入 10, 表示要重复10次
  2. 输入 i 进入 编辑模式
  3. 输入 * 也就是重复的文字
  4. 按下 ESC 返回 命令模式, 返回之后 vi 就会把 第 2、3 两步的操作重复 10

提示: 正常开发时, 在 进入编辑模式之前,不要按数字

搜索命令

2.find 搜索

准备工作
切换目录到 /export/ 且 清空内容

cd /export/ && rm -rf /export/* && tree

新增目录 且 切换目录 且 新增文件

mkdir -p /export/aaa/bbb/ccc/ddd/eee/

touch /export/aaa/bbb/ccc/ddd/eee/abc.txt

touch /export/aaa/123.txt

touch /export/aaa/312.txt

查看 /export 目录中的内容

tree /export

目标

  • 通过find命令 在特定目录下(包含它的后代目录) 搜索 符合条件的文件

2.1 路径

  • 第一步: 搜索指定目录下, 文件是 abc.txt的文件
  • 第二步: 搜索指定目录下, 文件名 包含 1 的文件
  • 第三步: 搜索指定目录下,所有以.txt 为扩展名的文件
  • 第四步: 搜索指定目录下, 以数字1开头的文件

2.2实现 : 在指定目录中 根据名称 搜索

  • 命令格式

序号

命令格式

作用

01

find 路径 -name ‘*.txt’

查找指定路径下扩展名是 .txt的文件, 包括子目录

  • 如果省略路径, 表示在当前文件夹下查找
  • 之前学习的通配符, 在使用find命令时同时可用
  • 第一步: 搜索指定目录下, 文件是 abc.txt的文件
代码语言:javascript复制
# ===================实现目标============================
# 方式一: 指定全目录
find /export/ -name 'abc.txt'
# 方式二: 当前目录
find . -name 'abc.txt'
# 方式三: 当前目录 可以 省略 不写
find -name 'abc.txt'
  • 第二步: 搜索指定目录下, 文件名 包含 1 的文件
代码语言:javascript复制
# =================准备工作===============
# 1 创建测试文件
touch /export/12.txt /export/616.txt /export/321.txt  

# =================实现目录===============
find /export/ -name "*1*"
  • 第三步: 搜索指定目录下,所有以.txt 为扩展名的文件
代码语言:javascript复制
find /export/ -name "*.txt"
  • 第四步: 搜索指定目录下, 以数字1开头的文件
代码语言:javascript复制
find /export -name "1*"

2.3 小结

  • 通过 find [path] -name "*1*" 完成根据名称搜索文件

解压缩命令

  • 准备工作
代码语言:javascript复制
# 清空指定目录内容
cd /export/ && rm -rf *

# 创建测试文件
touch 1.txt 2.txt 3.txt

# 创建有内容的测试目录
mkdir -p /export/aaa/
touch /export/aaa/4.txt /export/aaa/5.txt

# 查看结果
tree /export

目标

  • 从第三方 下载 压缩包, 解压缩后 安装到 服务器上
  • 通过 打包压缩 备份文件

jar : java rar java项目的压缩包

war : web rar web项目的压缩包

路径

  • 2.1 第一步: 打包 和 解包
  • **2.2 第二步: 打包压缩 和 解包解压缩 **

3.实现

3.1 第一步: 打包 和 解包

3.1.1 打包
  • 类似将 冬天的衣服 放到 袋
  • 打包之后的大文件 需要以 .tar 结尾.

tar 打包命令格式

代码语言:javascript复制
# 将 一系列文件 打包成 一个大文件
tar -cvf 打包名.tar 被打包的目录
tar -cvf 打包名.tar 被打包的文件1 被打包的文件2 被打包的文件3

tar 选项说明

命令

英文

含义

c

create

生成档案文件, 创建打包文件

v

verbosely(啰嗦的)

像 ‘唐僧’ 一样报告进度

f

file

指定档案的文件名称, f后面一定是 .tar 文件, 所以必须放到左后

代码语言:javascript复制
练习1: 将1.txt、2.txt、3.txt 打包成 123.tar文件

练习2: 将有内容的aaa目录 打包成 aaa.tar 文件
3.1.2 解包
  • 类似将 冬天的衣服 从 袋子里取出来

tar 解包命令格式

代码语言:javascript复制
# 将一个打包后的 分解成 一系列小文件, 分解位置为 当前目录
tar -xvf 打包名.tar

# 将一个打包后的 分解成 一系列小文件, 分解位置为 指定目录
tar -xvf 打包名.tar -C 解包路径位置

命令

英文

含义

x

extract (提取)

解包

C (大写C)

directory (目录)

默认保存到当前目录, 通过-C 更改解压目录, 注意: 解压目录必须存在

代码语言:javascript复制
练习1: 将 123.tar 解压到 当前目录中

练习2: 将 aaa.tar 解包到 /export/test/a1/b1/c1/ 目录中
小结
代码语言:javascript复制
打包: tar -cvf 打包之后的文件名.tar   被打包的目录或文件名
	
解包: tar -xvf 打包之后的文件名.tar  [ -C  指定解包位置 ]

3.2 第二步: 使用gzip格式 压缩 和 解压缩

  • 打包压缩 是两件事
  • 类似与 先将冬天衣服放到压缩袋, 再抽取里面的空气
  • Linux 中, 最常用的压缩文件格式是 xxx.tar.gz
  • tar 命令中有一个选项 -z 可以调用 gzip , 从而可以方便的实现压缩和解压缩的功能

命令格式如下

代码语言:javascript复制
# 压缩文件
tar -zcvf 打包压缩文件名.tar.gz 被压缩的文件/目录

# 解压缩文件(记忆敲门: 至孝潍坊)
tar -zxvf 打包文件.tar.gz

# 解压缩到指定路径
tar -zxvf 打包文件.tar.gz -C 目录路径

tar 的选项说明

命令

英文

含义

z

gzip

使用gzip压缩和解压缩

j

bzip2

使用bzip2压缩和解压缩

代码语言:javascript复制
练习1: 将1.txt、2.txt、3.txt 打包压缩成 123.tar.gz文件(gzip压缩格式)

练习2: 将有内容的aaa目录 打包成 aaa.tar.gz 文件(gzip压缩格式)

练习3: 将 123.tar.gz 解压到 当前目录中(gzip压缩格式)

练习4: 将 aaa.tar.gz 解包到 /export/bbb 目录中(gzip压缩格式)

小结

代码语言:javascript复制
打包压缩: tar -zcvf 打包之后的文件名.tar.gz   被打包压缩的目录或文件名
	
解包解压缩: tar -zxvf 打包之后的文件名.tar.gz  [ -C  指定解包位置 ]

3.3 第三步: 使用 bzip2 格式 压缩 和 解压缩

  • bzip 是压缩的第二种方式
  • 类似与 先将冬天衣服放到压缩袋, 再抽取里面的空气
  • Linux 中, bzip2 压缩文件格式是 xxx.tar.bz2
  • tar 命令中有一个选项 -j 可以调用 bzip2 , 从而可以方便的实现压缩和解压缩的功能

命令格式如下

代码语言:javascript复制
# 压缩文件
tar -jcvf 打包压缩文件名.tar.bz2 被压缩的文件/目录

# 解压缩文件 (绩效潍坊)
tar -jxvf 打包文件.tar.bz2

# 解压缩到指定路径
tar -jxvf 打包文件.tar.bz2 -C 目录路径

tar 的选项说明

命令

英文

含义

z

gzip

使用gzip压缩和解压缩

j

bzip2

使用bzip2压缩和解压缩

代码语言:javascript复制
练习1: 将1.txt、2.txt、3.txt 打包压缩成 123.tar.bz2文件(bzip2压缩格式)

练习2: 将有内容的aaa目录 打包成 aaa.tar.bz2 文件(bzip2压缩格式)

练习3: 将 123.tar.bz2 解压到 当前目录中(bzip2压缩格式)

练习4: 将 aaa.tar.bz2 解包到 /export/bbb 目录中(bzip2压缩格式)

小结

代码语言:javascript复制
打包压缩: tar -jcvf 打包之后的文件名.tar.bz2   被打包压缩的目录或文件名
	
解包解压缩: tar -jxvf 打包之后的文件名.tar.bz2  [ -C  指定解包位置 ]

关机

代码语言:javascript复制
halt

重启

代码语言:javascript复制
reboot

4 用户权限相关命令

目标

  • 理解 用户权限 的基本概念
  • 用户管理 终端命令
  • 组管理 终端命令
  • 修改权限 终端命令

用户和权限的基本概念

4.1 基本概念

  • 用户 是Linux系统工作中重要的一环, 用户管理包括 用户 管理
  • 在Linux系统中, 不论是由本级或是远程登录系统, 每个系统都必须拥有一个账号, 并且对于不同的系统资源拥有不同的使用权限
  • 文件 / 目录 的权限包括

序号

权限

英文

缩写

数字序号

01

read

r

4

02

write

w

2

03

执行

execute

x

1

04

无权限

-

0

  • 在 Linux中 ,可以指定 每一个用户 针对 不同的文件或者目录不同权限

4.2 组

  • 为了方便用户管理, 提出了 的概念, 如下图所示

4.3 ls -l 扩展

  • ls -l 可以查看文件夹下文件的详细信息, 从左到右 依次是:
代码语言:txt复制
- **权限**, 第一个字符如果是 `d` 表示目录
- **硬链接数**, 通俗的讲就是有多少种方式, 可以访问当前目录和文件
- **拥有者**, 家目录下 文件 / 木兰路 的拥有者通常都是 当前用户
- **组**, 在linux中, 很多时候, 会出现组名 和 用户名 相同的情况, 后续会讲
- **大小**
- **时间**
- **名称**

4.4.组管理 终端命令

本质: 给 同一类型用户 分配权限

序号

命令

作用

01

groupadd 组名

添加组

02

groupdel 组名

删除组

03

cat /etc/group

确认组信息

04

chgrp 组名 文件/目录名

修改文件/目录的所属组

提示:

  • 组信息保存在 /etc/group 文件中
  • /etc 目录是专门用来保存 系统配置信息 的目录
  • 在实际应用中, 可以预先针对 设置好权限, 然后 将不同的用户添加到对应的组中, 从而不用依次为每一个用户设置权限

演练目标

  1. 在 指定目录下 创建 aaa 目录
  2. 新建 dev
  3. aaa 目录的组修改为 dev

4.5.用户管理 终端命令

(1) 创建用户 / 设置密码 / 删除用户

命令

作用

说明

useradd -m -g 组 新建用户名

添加新用户

-m 自动建立用户家目录 -g 指定用户所在的组, 否则会建立一个和同名的组

passwd 用户名

设置用户密码

如果是普通用户,直接用 passwd可以修改自己的账号密码

userdel -r 用户名

删除用户

-r 选项会自动删除用户家目录

cat /etc/passwd | grep 用户名

确认用户信息

新建用户后,用户信息会保存在 /etc/passwd文件夹中

提示:

  • 创建用时, 如果忘记添加 -m 选项指定新用户的家目录 – 最简单的方式就是删除用户,重新创建
  • 创建用户时, 默认会创建一个和用户名同名的组名
  • 用户信息保存在 /etc/passwd 文件中

/etc/passwd 文件存放的是用户的信息, 由6个分好组成的7个信息, 分别是

  1. 用户名
  2. 密码 (x, 表示加密的密码)
  3. UID (用户标志)
  4. GID(组标志)
  5. 用户全名或本地账号
  6. 家目录
  7. 登录使用的Shell, 就是登录之后, 使用的终端命令

(2) 查看用户信息

序号

命令

作用

01

id 用户名

查看用户UID 和 GID 信息

02

who

查看当前所有登录的用户列表

03

whoami

查看当前登录用户的账户名

(3) su 切换用户

  • 因为 普通用户 不能使用某些权限, 所以需要 切换用户

序号

命令

作用

说明

01

su - 用户名

切换用户, 并且企划目录

  • 可以切换到用户家目录, 否则保持位置不变

02

exit

退出当前登录用户

  • su 不接用户名, 可以切换到 root , 但是不推荐使用, 因为不安全
  • exit 示意图如下:

(4) sudo

  • 虽然 通过 su -u root 可以切换到 root用户, 但是 存在严重的 安全隐患
  • linux系统中的 root 账号通常 用于系统的维护和管理, 对操作系统的所有资源 具有访问权限
  • 如果不小心使用 rm -rf ... ... , 就可能将系统搞瘫痪
  • 在大多数版本的linux中, 都不推荐 直接只用 root 账号登录系统
  • sudo 命令用来以其他身份来执行命令, 预设的身份为 root
  • 用户使用 sudo 时, 必须先输入密码, 之后5分钟的有效期限, 超过期限则必须重新输入密码 提示: 若其未经授权的用户企图使用 sudo, 则会发出警告邮件给管理员

(4.1) 给 指定用户 授予 权限

  • 本质: 通知 服务器 给 特定用户 分配 临时管理员权限

vim /etc/sudoers

代码语言:javascript复制
# 默认存在: root用户 具备所有的权限
root    ALL=(ALL)       ALL

# 授予 zhangsan 用户 所有的权限
zhangsan    ALL=(ALL)       ALL 

(4.2) 使用 用户 zhangsan 登录, 操作管理员命令

  • 本质: 使用临时管理员权限
代码语言:javascript复制
# 不切换root用户, 也可以完成 添加用户的功能 
sudo useradd -m -g dev zhaoliu

准备工作: 使用root用户操作

代码语言:javascript复制
# 清空目录中的内容
rm -rf /export/*

# 创建测试目录
mkdir -p /export/aaa/

# 创建测试文件
touch /export/aaa/01.txt /export/aaa/02.txt

# 查看指定目录内容
tree /export

(5).修改用户权限

序号

命令

作用

01

chmod

修改权限

5.1 方式一: 修改用户权限

目标演练:

代码语言:javascript复制
# 1. 使用 root 删除目录的可读 可写 可执行权限

# 2. 使用 其他用户如 zhangsan 无法切换到 这个目录

# 3. 使用 root 增加目录的执行权限, 再次 使用 zhangsan 切换到目录试试

5.2 方式二

  • 虽然 方式一 直接修改文件|目录读|写|执行 权限, 但是不能精确到 拥有者|组|其他 权限
  • 命令格式如下:( u 表示所属用户 / g 表示所属组 / o 表示其他)
代码语言:javascript复制
chmod -R u=rwx,g=rx,o=rwx 文件|目录

序号

权限

英文

缩写

数字序号

01

read

r

4

02

write

w

2

03

执行

execute

x

1

04

无权限

-

0

目标演练:

代码语言:javascript复制
# 1 使用root用户给 所属用户分配 可读、可写、可执行 权限, 
    所属组 分配 可读、可执行 权限, 
    其他人 分配 可读、可执行 权限 

5.3 方式三: 简化方式二

  • 命令格式如下:
代码语言:javascript复制
chmod -R 755 文件|目录
  • 说明 第一个数字拥有者权限, 第二个数字组权限, 第三个数字其他用户权限

常用数字组合有( u 表示用户 / g 表示组 / o 表示其他)

  • 777 ===> u=rwx, g=rwx, o=rwx
  • 755 ===> u=rwx, g=rx, o=rx
  • 644 ===> u=rw, g=r, o=r

目标演练:

代码语言:javascript复制
# 1 使用root用户给 所属用户分配 可读、可写、可执行 权限, 
    所属组 分配 可读、可执行 权限, 
    其他人 分配 可读、可执行 权限 

系统信息相关命令

  • 本节内容主要是为了方便通过远程终端维护服务器时, 查看服务器上当前 系统日期和时间 / 磁盘空间占用情况 /程序执行情况
  • 本小结学习终端命令都是查询命令, 通过这些命令对系统资源的使用情况有个了解

目标

  • 时间和日期
    • date
    • cal
  • 磁盘和目录空间
    • df
    • du
  • 进程信息
    • ps
    • top
    • kill

1.时间和日期

1.1 date 时间

命令

作用

date

查看系统时间(默认)

date "%Y-%m-%d %H:%M:%S"

查看系统时间(指定格式)

date -s “时间字符串”

设置系统时间

第一步: 显示当前时间

代码语言:javascript复制
# 显示时间
date

# 按照指定格式显示时间
date  "%Y-%m-%d %H:%M:%S"

第二步: 设置系统时间

代码语言:javascript复制
date -s "时间字符串"

1.2 cal 日历

序号

命令

作用

01

cal

查看当前月的日历

02

cal -y

查看当前年的日历

03

cal 2020

查看2020年的日历

04

cal 10 2020

查看2020年10月的日历

02.磁盘信息

序号

命令

作用

01

df -h

disk free 显示磁盘剩余空间

02

du -h 目录名

disk usage 显示目录下的目录大小

  • 选项说明

参数

含义

-h

以人性化的方式显示文件的大小

03.进程信息

  • 所谓 进程, 通俗的说就是 当前正在执行的一个进程

序号

命令

作用

01

ps aux

process status 查看进程的详细情况

02

top

动态显示运行中进程并且排序

03

kill -9 进程代号

终止指定代号的进程 -9 表示强行终止

ps 默认只会显示当前用户通过终端启动的应用程序

  • ps 选项说明功能 选项含义a显示终端上的所有进程,包括其他用户的进程u显示进程的详细状态x显示没有控制终端的进程 提示: 使用kill命令时, 最好只终止由当前用户开启的进程, 而不要终止root身份开启的进程, 否则可能导致系统崩溃
  • 要退出 top 可以直接输入 q

top

代码语言:javascript复制
us 用户空间占用CPU百分比
sy 内核空间占用CPU百分比
ni 用户进程空间内改变过优先级的进程占用CPU百分比
id 空闲CPU百分比
wa 等待输入输出的CPU时间百分比
hi 硬件中断
si 软件中断 
st: 实时

PID 进程号

USER 用户名

PR 优先级

NI nice值。负值表示高优先级,正值表示低优先级m

RES 进程使用的、未被换出的物理内存大小,单位kb

SHR 共享内存大小,单位kb

S 进程状态。

D=不可中断的睡眠状态

R=运行

S=睡眠

T=跟踪/停止

Z=僵尸进程

%CPU CPU使用率

%MEM 进程使用的物理内存百分比

TIME 进程使用的CPU时间总计,单位1/100秒

COMMAND 执行的命令

管道相关命令

目标

  • cut
  • sort
  • wc
  • uniq
  • tee
  • tr
  • split
  • awk
  • sed
  • grep

准备工作

vim 1.txt

代码语言:javascript复制
111:aaa:bbb:ccc
222:ddd:eee:fff
333:ggg:hhh
444:iii

1 cut

1.1 目标

  • cut 根据条件 从命令结果中 提取 对应内容

1.2 实现

第一步: 截取出1.txt文件中前2行的第5个字符

命令

含义

cut 动作 文件

从指定文件 截取内容

  • 参数

参数

英文

含义

-c

characters

按字符选取内容

代码语言:javascript复制
head -2 1.txt | cut -c 5

第二步: 截取出1.txt文件中前2行以”:”进行分割的第1,2段内容

参数

英文

含义

-d '分隔符'

delimiter

指定分隔符

-f n1,n2

fields

分割以后显示第几段内容, 使用 , 分割

范围控制

范围

含义

n

只显示第n项

n-

显示 从第n项 一直到行尾

n-m

显示 从第n项 到 第m项(包括m)

代码语言:javascript复制
head -2 1.txt | cut -d ':' -f 1,2
代码语言:javascript复制
head -2 1.txt | cut -d ':' -f 1-2

1.3 小结

  • 通过 cut 动作 目标文件 可以根据条件 提取对应内容

2 sort

2.1 目标

  • sort可针对文本文件的内容,以行为单位来排序。

2.2 路径

  • 第一步: 对字符串排序
  • 第二步: 去重排序
  • 第三步: 对数值排序
  • 第四步: 对成绩排序

2.3 实现

第一步: 对字符串排序

代码语言:javascript复制
[root@node01 tmp]# cat 2.txt
banana
apple
pear
orange
pear

[root@node01 tmp]# sort 2.txt 
apple
banana
orange
pear
pear

第二步: 去重排序

参数

英文

含义

-u

unique

去掉重复的

它的作用很简单,就是在输出行中去除重复行。

代码语言:javascript复制
[root@node01 tmp]# sort -u 2.txt 
apple
banana
orange
pear

第三步: 对数值排序

参数

英文

含义

-n

numeric-sort

按照数值大小排序

-r

reverse

使次序颠倒

第四步: 对成绩排序

参数

英文

含义

-t

field-separator

指定字段分隔符

-k

key

根据那一列排序

‘’

代码语言:javascript复制
# 根据第二段成绩 进行倒序显示 所有内容
sort -t ',' -k2nr score.txt 

3 wc命令

3.1 目标

  • 显示指定文件 字节数, 单词数, 行数 信息.

3.2 路径

  • 第一步: 显示指定文件 字节数, 单词数, 行数 信息.
  • 第二步: 只显示 文件 的行数
  • 第三步: 统计多个文件的 行数 单词数 字节数
  • 第四步: 查看 /etc 目录下 有多少个 子内容

3.3 实现

第一步: 显示指定文件 字节数, 单词数, 行数 信息.

命令

含义

wc 文件名

显示指定文件 字节数, 单词数, 行数 信息

代码语言:javascript复制
[root@hadoop01 export]# cat 4.txt
111
222 bbb
333 aaa bbb 
444 aaa bbb ccc
555 aaa bbb ccc ddd
666 aaa bbb ccc ddd eee

[root@hadoop01 export]# wc 4.txt 
 6 21 85 4.txt

第二步: 只显示 文件 的行数

参数

英文

含义

-c

bytes

字节数

-w

words

单词数

-l

lines

行数

代码语言:javascript复制
[root@hadoop01 export]# wc 4.txt 
 6 21 85 3.txt

第三步: 统计多个文件的 行数 单词数 字节数

代码语言:javascript复制
[root@hadoop01 export]# wc 1.txt 2.txt 3.txt 
  4   4  52 1.txt
 11  11  24 2.txt
  6  21  85 3.txt
 21  36 161 总用量
 
[root@hadoop01 export]# wc *.txt
  4   4  52 1.txt
 11  11  24 2.txt
  6  21  85 3.txt
  6   6  95 score.txt
 27  42 256 总用量

第四步: 查看 /etc 目录下 有多少个 子内容

代码语言:javascript复制
[root@hadoop01 export]# ls /etc | wc -w
240

3.4 小结

  • 通过 wc 文件 就可以 统计 文件的 字节数、单词数、行数.

4 uniq

uniq 命令用于检查及删除文本文件中重复出现的行,一般与 sort 命令结合使用。

4.1 目标

  • uniq 命令用于检查及删除文本文件中重复出现的行,一般与 sort 命令结合使用。

4.2路径

  • 第一步:实现去重效果
  • 第二步:不但去重,还要 统计出现的次数

4.3 实现

第一步:实现去重效果

命令

英文

含义

uniq 参数 文件

unique 唯一

去除重复行

代码语言:javascript复制
# 准备内容
[root@hadoop01 export]# cat 5.txt 
张三    98
李四    100
王五    90
赵六    95
麻七    70
李四    100
王五    90
赵六    95
麻七    70

# 排序
[root@hadoop01 export]# cat 5.txt | sort
李四    100
李四    100
麻七    70
麻七    70
王五    90
王五    90
张三    98
赵六    95
赵六    95

# 去重
[root@hadoop01 export]# cat 5.txt | sort | uniq
李四    100
麻七    70
王五    90
张三    98
赵六    95

第二步:不但去重,还要 统计出现的次数

参数

英文

含义

-c

count

统计每行内容出现的次数

代码语言:javascript复制
[root@hadoop01 export]# cat 5.txt | sort | uniq -c
      2 李四    100
      2 麻七    70
      2 王五    90
      1 张三    98
      2 赵六    95

4.4 小结

  • 通过 uniq [选项] 文件 就可以完成 去重行 和 统计次数

5 tee

5.1 目标

  • 通过 tee 可以将命令结果 通过管道 输出到 多个文件

5.2 实现

命令

含义

命令结果 | tee 文件1 文件2 文件3

通过 tee 可以将命令结果 通过管道 输出到 多个文件中

5.3 小结

  • 通过 tee 可以将命令结果 通过管道 输出到 多个文件

6 tr

6.1 目标

  • 通过 tr 命令用于 替换删除 文件中的字符。

6.2 路径

  • 第一步: 实现 替换 效果
  • 第二步: 实现 删除 效果
  • 第三步: 完成 单词计数 案例

6.3 实现

第一步: 实现 替换效果

命令

英文

含义

命令结果 | tr 被替换的字符 新字符

translate

实现 替换效果

代码语言:javascript复制
# 将 小写i 替换成  大写 I
# 把itheima的转换为大写
# 把 HELLO 转成 小写
代码语言:javascript复制
# 将 小写i 替换成  大写 I
echo "itheima" | tr 'i' 'I'

# 把itheima的转换为大写
echo "itheima" |tr '[a-z]' '[A-Z]'

# 把 HELLO 转成 小写
echo "HELLO" |tr '[A-Z]' '[a-z]'

第二步: 实现删除效果

命令

英文

含义

命令结果 | tr -d 被删除的字符

delete

删除指定的字符

  • 需求: 删除abc1d4e5f中的数字
代码语言:javascript复制
echo 'abc1d4e5f' | tr -d '[0-9]'

第三步: 单词计数

准备工作
代码语言:javascript复制
[root@hadoop01 export]# cat words.txt 
hello,world,hadoop
hive,sqoop,flume,hello
kitty,tom,jerry,world
hadoop

1 将, 换成 换行

2 排序

3 去重

4 计数

代码语言:javascript复制
# 统计每个单词出现的次数
[root@hadoop01 export]# cat words.txt | tr ',' 'n' | sort | uniq -c
      1 flume
      2 hadoop
      2 hello
      1 hive
      1 jerry
      1 kitty
      1 sqoop
      1 tom
      2 world

7 split

7.1 目标

  • 通过 split 命令将大文件 切分成 若干小文件

7.2 路径

  • 第一步: 按 字节 将 大文件 切分成 若干小文件
  • 第二步: 按 行数 将 大文件 切分成 若干小文件

7.3 实现

第一步: 按 字节 将 大文件 切分成 若干小文件

命令

英文

含义

split -b 10k 文件

byte

将大文件切分成若干10KB的小文件

第二步: 按 行数 将 大文件 切分成 若干小文件

命令

英文

含义

split -l 1000 文件

lines

将大文件切分成若干1000行 的小文件

7.4 小结

8 awk

8.1 目标

  • 通过 awk 实现 模糊查询, 按需提取字段, 还可以进行 判断 和 简单的运算等.

8.2 步骤

  • 第一步: 模糊查询
  • 第二步: 指定分割符, 根据下标显示内容
  • 第三步: 指定输出字段的分割符
  • 第四步: 调用 awk 提供的函数
  • 第五步: 通过if语句判断$4是否及格
  • 第六步: 段内容 求和

8.3 实现

第一步: 搜索 zhangsan 和 lisi 的成绩

命令

含义

awk ‘/zhangsan|lisi/’ score.txt

模糊查询

第二步: 指定分割符, 根据下标显示内容

命令

含义

awk -F ‘,’ ‘{print $1, $2, $3}’ 1.txt

操作1.txt文件, 根据 逗号 分割, 打印 第一段 第二段 第三段 内容

选项

选项

英文

含义

-F ','

field-separator

使用 指定字符 分割

$ 数字

获取第几段内容

$0

获取 当前行 内容

NF

field

表示当前行共有多少个字段

$NF

代表 最后一个字段

$(NF-1)

代表 倒数第二个字段

NR

代表 处理的是第几行

第三步: 指定分割符, 根据下标显示内容

命令

含义

awk -F ’ ’ ‘{OFS="==="}{print $1, $2, $3}’ 1.txt

操作1.txt文件, 根据 逗号 分割, 打印 第一段 第二段 第三段 内容

选项

选项

英文

含义

OFS="字符"

output field separator

向外输出时的段分割字符串

第四步: 调用 awk 提供的函数

命令

含义

awk -F ‘,’ ‘{print toupper($2)}’ 1.txt

操作1.txt文件, 根据 逗号 分割, 打印 第一段 第二段 第三段 内容

常用函数如下:

函数名

含义

作用

toupper()

upper

字符 转成 大写

tolower()

lower

字符 转成小写

length()

length

返回 字符长度

第五步: if语句 查询及格的学生信息

命令

含义

awk -F ‘,’ ‘{if($4>60) print $1, $4 }’ score.txt

如果及格,就显示 $1, $4

awk -F ‘,’ ‘{if($4>60) print $1, $4, “及格”; else print $1, $4, “不及格”}’ score.txt

显示 姓名, $4, 是否及格

选项

参数

含义

if($0 ~ “aa”) print $0

如果这一行包含 “aa”, 就打印这一行内容

if($1 ~ “aa”) print $0

如果**第一段 **包含 “aa”, 就打印这一行内容

if($1 == “lisi”) print $0

如果第一段 等于 “lisi”, 就打印这一行内容

第六步: 段内容 求学科平均分

命令

含义

awk ‘BEGIN{初始化操作}{每行都执行} END{结束时操作}’ 文件名

BEGIN{ 这里面放的是执行前的语句 }{这里面放的是处理每一行时要执行的语句}END {这里面放的是处理完所有的行后要执行的语句 }

代码语言:javascript复制
awk -F ',' 'BEGIN{}{total=total $4}END{print total, NR, (total/NR)}' score.txt

9 sed

9.1 目标

  • 通过 sed 可以实现 过滤替换 的功能.

9.2 路径

  • 第一步: 实现 查询 功能
  • 第二步: 实现 删除 功能
  • 第三步: 实现 修改 功能
  • 第四步: 实现 替换 功能
  • 第五步: 对 原文件 进行操作
  • 第六步: 综合 练习

9.3 实现

第一步: 实现 查询 功能

命令

含义

sed 可选项 目标文件

对目标文件 进行 过滤查询 或 替换

可选参数

可选项

英文

含义

p

print

打印

$

代表 最后一行

-n

仅显示处理后的结果

-e

expression

根据表达式 进行处理

  • 练习1 列出 1.txt的 1~5行 的数据
代码语言:javascript复制
sed -n -e '1,5p' 1.txt 
  • 练习2 列出01.txt的所有数据
代码语言:javascript复制
sed -n -e '1,$p' 1.txt 
  • 练习3 列出01.txt的所有数据 且 显示行号

可选项

含义

=

打印当前行号

代码语言:javascript复制
sed -n -e '1,$=' -e '1,$p' 1.txt 

简化版
cat -n 1.txt
cat -b 1.txt
nl 1.txt
  • 练习4: 查找01.txt中包含root行

答案:

代码语言:javascript复制
sed -n -e '/root/p' 1.txt
  • 练习5 列出01.txt中包含root的内容,root不区分大小写,并显示行号

可选项

英文

含义

I

ignore

忽略大小写

答案:

代码语言:javascript复制
nl 1.txt | sed -n -e '/root/Ip'

nl 01.txt | grep -i root

cat -n 01.txt | grep -i root
  • 练习6 查找出1.txt中 字母r后面是多个t的行,并显示行号

可选项

英文

含义

-r

regexp-extended

识别正则

答案:

代码语言:javascript复制
nl 01.txt | sed -nr -e '/r t/p'

或者

代码语言:javascript复制
sed -nr -e '/r t/p' -e '/r t/=' 01.txt

第二步: 实现 删除 功能

  • 练习1 删除01.txt中前3行数据,并显示行号

可选项

英文

含义

d

delete

删除指定内容

答案:

代码语言:javascript复制
nl 01.txt | sed -e '1,3d'
  • 练习2 保留1.txt中前4行数据,并显示行号

答案:

代码语言:javascript复制
nl 01.txt | sed -e '5,$d'

nl 1.txt | sed -n -e '1,4p'

第三步: 实现 修改 功能

  • 练习1: 在01.txt的第二行后添加aaaaa,并显示行号

参数

英文

含义

i

insert

目标前面 插入内容

a

append

目标后面 追加内容

答案:

代码语言:javascript复制
nl 01.txt | sed -e '2a aaaaa'
  • 练习2 在1.txt的第1行前添加bbbbb,并显示行号

答案:

代码语言:javascript复制
nl 01.txt | sed -e '1i bbbbb'

第四步: 实现 替换 功能

  • 练习1 把1.txt中的nologin替换成为huawei,并显示行号

英文

含义

s/oldString/newString/

replace

替换

答案:

代码语言:javascript复制
nl 1.txt | sed -e 's/nologin/huawei/'
  • 练习2 把01.txt中的1,2行替换为aaa,并显示行号

选项

英文

2c 新字符串

replace

使用新字符串 替换 选中的行

答案:

代码语言:javascript复制
nl passwd | sed -e '1,2c aaa'

第五步: 对 原文件 进行操作

  • 练习1 在01.txt中把nologin替换为 huawei

参数

英文

含义

-i

in-place

替换原有文件内容

答案:

代码语言:javascript复制
sed -i -e 's/nologin/huawei/' 01.txt
  • 练习2 在01.txt文件中第2、3行替换为aaaaaa

答案:

代码语言:javascript复制
sed -i -e '2,3c aaa' 01.txt

注意:在进行操作之前,最好是对数据进行备份,放置操作失误,数据无法恢复!

  • 练习3 删除01.txt中前2行数据,并且删除原文件中的数据

答案:

代码语言:javascript复制
sed -i -e '1,2d' 01.txt


nl passwd 查看数据

第六步: 综合 练习

  • 练习1 获取ip地址

答案:

代码语言:javascript复制
ifconfig eth0 | grep "inet addr" | sed -e 's/^.*inet addr://' | sed -e 's/Bcast:.*$//' 
  • 练习2 从1.txt中提出数据,匹配出包含root的内容,再把nologin替换为itheima

答案:

代码语言:javascript复制
nl 01.txt | grep 'root' | sed -e 's/nologin/itheima/'

或者

nl 01.txt | sed -n -e '/root/p' | sed -e 's/nologin/itheima/'

或者

nl 01.txt | sed -n -e '/root/{s/nologin/itheima/p}' #只显示替换内容的行
  • 练习3 从1.txt中提出数据,删除前2行,并把nologin替换为itheima,并显示行号

答案:

代码语言:javascript复制
nl 01.txt | sed -e '1,2d' | sed -e 's/nologin/itheima/'

1 挂载新的硬盘

1.1 目标

  • 虚拟机 增加一块 硬盘

1.2 路径

  • 第一步: 了解linux系统分区的原理
  • 第二步: 查看系统分区情况
  • 第三步: 虚拟机 增加 硬盘
  • 第四步: 分区
  • 第五步: 格式化
  • 第六步: 挂载
  • 第七步: 设置重启后 挂载不失效

1.3 实现

第一步: 了解linux系统分区的原理

  • 一个硬盘可以分成多个分区
  • 用户不能直接操作硬件, 需要 让硬件和系统的目录 建立映射关系(挂载) 才可以操作, 称为 挂载

第二步: 查看系统分区挂载情况

命令

英文

含义

lsblk -f

list block devices

查看所有设备的挂载情况

参数

英文

含义

-f

file system

文件系统

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F5x3IfHz-1624685690449)(assets/1558957195965.png)

  • lsblk 的记忆小窍门: 老师不离开 的首字母

第三步: 虚拟机 增加 硬盘

  • 模拟将买的硬盘插入到 服务器中
  • 选中 目标虚拟机 右键 设置
  • 选中 硬盘 点击 添加按钮
  • 点击 下一步
  • 选择 创建新虚拟磁盘
  • 指定 磁盘大小为10G
  • 完成
  • 注意: 重启 才可以生效

第四步: 分区

命令

英文

含义

fdisk /dev/sdb

partition

开始指定磁盘分区

分区命令可选项

选项

英文

含义

m

menu

显示命令列表

n

new

新增分区

p

partition

显示磁盘分区

d

delete

删除分区

w

write and exit

写入 并 退出

操作如下:
  1. fdisk /dev/sdb 开始分区
  2. 输入 m , 进入 目录列表
  3. 输入 n , 新增分区
  4. 输入 p , 开始分区, 后面按回车
  5. 最后 输入 w, 保存 且 退出
  6. lsblk -f 查看是否成功

第五步: 格式化

命令

英文

含义

mkfs -t ext4 /dev/sdb1

build a Linux file system

格式化指定分区

参数

英文

含义

-t

file system type

指定文件系统类型

操作如下
  1. mkfs -t ext4 /dev/sdb1 格式化指定分区
  2. lsblk -f 查看是否成功

第六步: 挂载

命令

含义

mount 设备名称 挂载目录

建立 设备分区 和 系统目录 的映射关系

umount 设备名称 或 umount 挂载目录

取消 设备分区 和 系统目录 的映射关系

操作步骤
  1. 创建目录 mkdir -p /home/newdisk
  2. mount /dev/sdb1 /home/newdisk 建立 设备分区系统目录 的映射关系
  3. lsblk -f 查看是否挂载成功
  • 注意: 重启后 挂载失效

第七步: 设置重启不失效

操作步骤
  • 第一步: 将映射关系写到配置文件中 /etc/fstab
  • 第二步: mount -a 重新加载/etc/fstab 文件 ; mount 显示 /etc/fstab 文件内容
  • 第三步: 重启操作系统后, 测试 lsblk -f

1.4 小结

  • 用户不能直接访问 硬件设备
  • 需要将硬件设备 挂载到 系统目录上, 用户才可以让用户访问

1.5 挂载 持有系统镜像 光驱

1.5.1 目标

  • 因为 linux系统镜像中包含了常用的软件包, 就不用从网上下载了
  • 所以需要挂载 持有系统镜像 的 光驱

1.5.2 路径

  • 第一步: 将 linux系统镜像 放到光驱中
  • 第二步: 创建目录 /mnt/cdrom
  • 第三步: 通过挂载 建立 硬件 和 系统目录的关系
  • 第四步: 到镜像中 寻找按照包

1.5.3 实现

1.5.4 小结

  • 通过 挂载 系统光驱, 就可以 获取系统镜像中 软件包
  • 注意: 系统镜像目录中 不能有中文, 不能有空格

2 rpm 软件包管理器

2.1 目标

  • 通过 rpm命令 实现对软件 的安装、查询、卸载
  • RPM 是Red-Hat Package Manager(RPM软件包管理器)的缩写
  • 虽然 打上了 red-hat 的标记, 但是理念开放, 很多发行版都采用, 已经成为行业标准

2.2 路径

  • 第一步: rpm包 的 查询命令
  • 第二步: rpm包 的 卸载
  • 第三步: rpm包 的 安装

2.3 实现

第一步: rpm包 的 查询命令

选项

英文

含义

-q

query

查询

-a

all

所有

-i

info

信息

-l

list

显示所有相关文件

-f

file

文件, 显示文件对应 rpm包

第二步: rpm包 的 卸载

命令

英文

含义

rpm -e 软件包名称

erase 清除

卸载rpm软件包

rpm -e --nodeps 软件包名称

Don’t check dependencies

卸载前 跳过 依赖检查

第三步: rpm包 的 安装

命令

含义

rpm -ivh rpm包的全路径

安装 rpm 包

参数

英文

含义

-i

install

安装

-v

verbose

打印提示信息

-h

hase

显示安装进度

2.4 小结

代码语言:javascript复制
# 1 查询
rpm -qa | grep rpm包

# 2 卸载
rpm -e rpm全包名
rpm -e --nodeps rpm全包名

# 3 安装
rpm -ivh rpm包的全路径 

3 yum

3.1 目标

  • Yum(全称为 Yellow dog Updater, Modified本质上 也是一个 软件包管理器
  • 特点: 基于 RPM 包管理,能够从指定的服务器 自动下载、 自动安装、 自动处理依赖性关系

3.2 路径

  • 第一步: yum的原理
  • 第二步: 常用指令 (重点)
  • 第三步: 制作 本地 yum
  • 第四步: 制作 局域网 yum

3.3 实现

3.3.1 yum的原理

3.3.2 常用命令(重点)

注意: 必须联网

命令

含义

yum list | grep 需要的软件名

查询服务器是否有需要安装的软件

yum -y install 需要的软件包

下载安装

yum -y remove 需要卸载的软件包

卸载

yum repolist

列出设定yum源信息

yum clean all

清除yum缓存信息

3.3.3 制作本地yum源

3.3.4 制作局域网yum源

  • 原理
3.3.5.1 安装httpd软件
3.3.4.3 制作局域网 yum源

3.4 小结

代码语言:javascript复制
# 安装软件
yum -y install 软件包

卸载软件
yum -y remove 软件包

4 安装jdk

4.1 路径

  • 第一步: 卸载linux系统 提供的jdk
  • 第二步: 上传按照包到 /export/soft , 解压到 /export/install
  • 第三步: 将 jdk路径 放到 环境变量中
  • 第四步: 重新加载 环境变量的配置文件
  • 第五步: 测试是否安装成功

4.2 实现

第一步: 卸载linux系统 提供的jdk

代码语言:javascript复制
# 查询已安装的jdk
rpm -qa | grep java

# 卸载
rpm -e --nodeps 软件包名

第二步: 上传按照包到 /export/soft , 解压到 /export/install

代码语言:javascript复制
# 1 创建保存软件包目录
mkdir -p /export/soft/
cd /export/soft/ && ll

# 2 上传软件包

# 3 创建安装软件目录 
mkdir -p /export/install

# 4 将压缩包解压到指定目录
tar -zxvf jdk-8u141-linux-x64.tar.gz -C /export/install
cd /export/install && ll

第三步: 将 jdk路径 放到 环境变量中

  • 目的: 为了能够在任何目录下都可以使用 javacjava
代码语言:javascript复制
JAVA_HOME=/export/install/jdk1.8.0_141
PATH=/export/install/jdk1.8.0_141/bin:$PATH
export JAVA_HOME PATH

第四步: 重新加载 环境变量的配置文件

  • 为了生效, 要么重启电脑, 要么 重新加载配置文件
代码语言:javascript复制
source /etc/profile

# 测试
java -version

第五步: 测试是否安装成功

代码语言:javascript复制
需求: 编写一个简单的Hello.java, 输出 Hello World!

vim Hello.java

代码语言:javascript复制
[root@hadoop01 export]# cat Hello.java
public class Hello{
        public static void main(String[] args) {
                System.out.println("Hello java!");
        }
}

使用 javac Hello.java 编译

执行 java Hello

5 安装tomcat

5.1 目标

  • 实际工作中我们可能需要发布web项目到tomcat中

5.2 路径

  • 第一步: 将安装包上传到 /export/soft , 解压到 /export/install
  • 第二步: 启动tomcat 且 查看日志
  • 第三步: 上传项目 测试

5.3 实现

6 安装mysql

6.1 yum安装原理:

  • yum安装是通过执行yum命令,自动分析依赖关系, 自动下载, 自动安装

6.2 yum安装优点:

  • 安装简单、快速

6.3 缺点:

  • 由于不同的yum仓库只有特定的几个版本,所以可选的版本较少。

6.4 yum安装实战

  • 下面看看如何在CentOS7系统上安装 MySQL5.6.44

1 查询系统自带的mysql

代码语言:javascript复制
[root@hadoop01 yum.repos.d]# rpm -qa | grep mysql
mysql-libs-5.1.73-8.el6_8.x86_64

2 安装mysql

代码语言:javascript复制
yum install -y mysql-server

3 启动服务

代码语言:javascript复制
service mysqld start

4 修改密码

代码语言:javascript复制
# 设置密码
/usr/bin/mysqladmin -u root password '123456'

# 进入mysql
mysql -uroot -p123456

5 问题1: 解决中文乱码

由于MySQL编码原因会导致数据库出现乱码。

解决办法:

修改MySQL数据库字符编码为UTF-8,UTF-8包含全世界所有国家需要用到的字符,是国际编码。

具体操作:

1 进入MySQL控制台
代码语言:javascript复制
# 进入mysql
mysql -uroot -p123456

# 查看编码集 发现不是utf8
show variables like 'character_set_%';
2 修改mysql配置文件
代码语言:javascript复制
# 清空 mysql 配置文件内容
[root@Hadoop-NN-01 ~]# >/etc/my.cnf

# 修改mysql 软件的编码集
[root@Hadoop-NN-01 ~]# vi /etc/my.cnf

修改内容如下:

代码语言:javascript复制
[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
character-set-server=utf8
3 重启MySQL服务
代码语言:javascript复制
[root@Hadoop-NN-01 ~]# service mysqld restart
代码语言:javascript复制
 #查看MySQL字符集
show variables like 'character_set_%';           

MySQL数据库字符集编码修改完成!

6 问题2: 默认情况下 mysql服务端不允许客户端远程访问

连接之前需要关闭防火墙

7 集群(三台)

7.1 新增linux系统

第一步: 克隆虚拟机

第二步: 更改新增系统的mac地址

代码语言:javascript复制
vim /etc/udev/rules.d/70-persistent-net.rules 

第三步: 更改网卡信息 (setup)

代码语言:javascript复制
vim /etc/sysconfig/network-scripts/ifcfg-eth0 

第四步: 重启系统生效

代码语言:javascript复制
reboot

7.2 三台机器 关闭防火墙

  • 内网环境 安全性比较高, 防火墙开启会影响效率, 所以 关闭防火墙

三台机器执行以下命令(root用户来执行)

代码语言:javascript复制
# 查看防火墙的状态
service iptables status

# 启动防火墙服务
service iptables start

# 重启 防火墙 服务
service iptables restart

# 停止 防火墙 服务
service iptables stop

# 彻底关闭防火墙
chkconfig iptables off

7.3 三台机器关闭selinux

代码语言:javascript复制
vim /etc/selinux/config
  • 注意: 重启才会生效

7.4 三台机器更改主机名

代码语言:javascript复制
vim /etc/sysconfig/network
  • 重启才会生效

7.5 三台机器 给ip地址起别名

7.5.1 给ip地址起别名

  • vim /etc/hosts
代码语言:javascript复制
192.168.100.201 hadoop01
192.168.100.202 hadoop02
192.168.100.203 hadoop03

7.5.2 测试

代码语言:javascript复制
ping 192.168.100.202

ping hadoop02

7.6 scp 远程文件拷贝

7.6.1 是什么?

  • scp是 remote file copy program 的缩写, scp是远程文件拷贝命令。

7.6.2 从本地拷贝到远程机器上

1 文件
代码语言:javascript复制
scp  /export/aaa/01.txt   root@192.168.100.202:/export

scp  /export/aaa/02.txt   root@hadoop02:/export

scp  /export/aaa/02.txt   hadoop02:/export
2 文件夹

scp -r /export/aaa root@192.168.100.202:/export

scp -r /export/aaa root@hadoop02:/export

scp -r /export/aaa hadoop02:/export

7.6.3 将远程机器内容复制到本地机器上

1 文件

scp root@192.168.100.202:/export/a1/111.txt /export

scp root@hadoop02:/export/a1/222.txt /export

scp hadoop02:/export/a1/222.txt /export

2 目录

scp -r root@192.168.100.202:/export/a1 /export

scp -r hadoop02:/export/a1 /export

7.7 ssh远程登录

7.7.1 目标

  • 专门用于 远程登录

7.7.2 路径

  • 方式一: 使用 ssh 基于密码的远程登录(了解)
  • 方式二: 使用 ssh 基于密匙 实现 免密码登录(掌握)

7.7.3 实现

方式一 使用 ssh 基于密码的远程登录

命令

含义

ssh ip地址

远程登录到指定服务器上(必须知道正确的密码)

  • 在第三台机器上登录到第二台机器上 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DrcoW4V2-1624685690479)(assets/1559302684534.png)
  • 细节: 首次远程登录会询问 yes/no , 以后可能就不会了
方式二: 使用 ssh 基于密匙 实现 免密码登录(掌握)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wbswp140-1624685690479)(assetsUsersAdministratorAppDataRoamingTyporatypora-user-images1571066755061.png)

代码语言:javascript复制
    第一步: ssh-keygen -t rsa  在hadoop1和hadoop2和hadoop3上面都要执行,产生公钥和私钥
    第二步:ssh-copy-id hadoop01 将公钥拷贝到hadoop1上面去
    
    第三步:
           ssh-copy-id hadoop02
           ssh-copy-id hadoop03

注意1: 第三步需要在/root/.ssh/目录下.

7.8 crontab 任务调度

7.8.1 原理

7.8.2 概述

7.8.3 案例: 每隔1分钟将时间打印到 /export/文件

方案一: 直接式
方式二: 脚本式

7.8.4 参数细节说明(学会查)

5个占位符的说明

含义

范围

第一个 *

一小时当中的第几分钟

0~59

第二个 *

一天当中的第几小时

0~23

第三个 *

一个月当中的第几天

1~31

第四个 *

一年当中的第几月

1~12

第五个 *

一周当中的星期几

0~7(0和7都代表星期日)

例子

命令

含义

* * * * * command

实例1:每1分钟执行一次command

3,15 * * * * command

实例2: 每小时的第3和第15分钟执行

3,15 8-11 * * * command

实例3: 在上午8点到11点的第3和第15分钟执行

3,15 8-11 */2 * * command

实例4: 每隔两天的上午8点到11点的第3和第15分钟执行

3,15 8-11 * * 1 command

实例5: 每个星期一的上午8点到11点的第3和第15分钟执行

30 21 * * * /etc/init.d/smb restart

实例6: 每晚的21:30重启smb

45 4 1,10,22 * * /etc/init.d/smb restart

实例7: 每月1、10、22日的4 : 45重启smb

10 1 * * 6,0 /etc/init.d/smb restart

实例8:每周六、周日的1 : 10重启smb

0,30 18-23 * * * /etc/init.d/smb restart

实例9:每天18 : 00至23 : 00之间每隔30分钟重启smb

7.9 三台机器时钟同步

7.9.1 同步互联网时间

命令

英文

含义

ntpdate 互联网时间服务器地址;

Network Time Protocol

同步时间

7.9.2 跟内网某台机器同步时间

  • 为了安全, 大数据集群的节点不允许连接外网
  • 以192.168.100.201 这台服务器的时间为准进行时钟同步
第一步:确定是否安装了ntpd的服务
代码语言:javascript复制
rpm -qa  | grep  ntpd
第二步:编辑 /etc/ntp.conf
第三步:另外两台机器与第一台机器时间同步

练习路径:

​ 1 设置防火墙

​ 2 一台机器上: rpm 安装 jdk tomcat mysql

​ 3 搭建服务器集群(下午)

​ 4 挂载 硬盘 和 光驱

​ 5 yum源: 网络yum源 本地yum源 局域网yum源

总结

以上便是大数据开发工程师基本功修炼之史上最全Linux学习笔记 ,喜欢的小伙伴欢迎一键三连!!!

0 人点赞